@tahminator/sapling 2.1.0-beta.0e8a97e8 → 2.1.0

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 CHANGED
@@ -270,160 +270,10 @@ var ParserError = class ParserError extends ResponseStatusError {
270
270
  }
271
271
  };
272
272
  //#endregion
273
- //#region lib/weakmap.ts
274
- /**
275
- * WeakMap that is iterable.
276
- */
277
- var IterableWeakMap = class IterableWeakMap {
278
- #weakMap = /* @__PURE__ */ new WeakMap();
279
- #refSet = /* @__PURE__ */ new Set();
280
- #finalizationGroup = new FinalizationRegistry(IterableWeakMap.#cleanup);
281
- static #cleanup(heldValue) {
282
- heldValue.set.delete(heldValue.ref);
283
- }
284
- constructor(iterable) {
285
- if (iterable) for (const [key, value] of iterable) this.set(key, value);
286
- }
287
- set(key, value) {
288
- const ref = new WeakRef(key);
289
- this.#weakMap.set(key, {
290
- value,
291
- ref
292
- });
293
- this.#refSet.add(ref);
294
- this.#finalizationGroup.register(key, {
295
- set: this.#refSet,
296
- ref
297
- }, ref);
298
- return this;
299
- }
300
- get(key) {
301
- return this.#weakMap.get(key)?.value;
302
- }
303
- delete(key) {
304
- const entry = this.#weakMap.get(key);
305
- if (!entry) return false;
306
- this.#weakMap.delete(key);
307
- this.#refSet.delete(entry.ref);
308
- this.#finalizationGroup.unregister(entry.ref);
309
- return true;
310
- }
311
- *[Symbol.iterator]() {
312
- for (const ref of this.#refSet) {
313
- const key = ref.deref();
314
- if (!key) continue;
315
- const entry = this.#weakMap.get(key);
316
- if (entry) yield [key, entry.value];
317
- }
318
- }
319
- entries() {
320
- return this[Symbol.iterator]();
321
- }
322
- *keys() {
323
- for (const [key] of this) yield key;
324
- }
325
- *values() {
326
- for (const [, value] of this) yield value;
327
- }
328
- forEach(callback, thisArg) {
329
- for (const [key, value] of this) callback.call(thisArg, value, key, this);
330
- }
331
- };
332
- //#endregion
333
- //#region src/annotation/injectable.ts
334
- const _InjectableRegistry = /* @__PURE__ */ new WeakMap();
335
- const _InjectableDeps = new IterableWeakMap();
336
- /**
337
- * Mark the class as an injectable to be handled by Sapling. The class can now be
338
- * be injected into other classes, as well as allow the class to inject other `@Injectable` classes.
339
- *
340
- * @argument deps - An optional array to define any dependencies that this class may require.
341
- */
342
- function Injectable(deps = []) {
343
- return function(target) {
344
- _InjectableRegistry.set(target, null);
345
- _InjectableDeps.set(target, deps);
346
- };
347
- }
348
- /**
349
- * Resolves and instantiates a class along with all of it's transitive dependencies.
350
- *
351
- * Uses topological sort (Kahn's algorithm) to ensure that the dependency graph is created
352
- * in a correct order.
353
- *
354
- * When `resolve` is first called (usually during controller registration),
355
- * it will compute the dependency graph of all `@Injectable` classes and instantiates
356
- * them in the correct order.
357
- *
358
- * Subsequent calls to dependencies that have already been resolved are cached, so they will
359
- * re-use the created singletons instead of re-instantiation.
360
- */
361
- function _resolve(ctor) {
362
- const inDegree = /* @__PURE__ */ new Map();
363
- const graph = /* @__PURE__ */ new Map();
364
- _InjectableDeps.forEach((deps, node) => {
365
- inDegree.set(node, inDegree.get(node) || 0);
366
- deps.forEach((dep) => {
367
- if (dep === void 0) throw new Error(`There is an @Injectable (${node.name}) which has a dependency that cannot be found. This is likely caused by a circular dependency.`);
368
- inDegree.set(dep, inDegree.get(dep) || 0);
369
- inDegree.set(node, inDegree.get(node) + 1);
370
- if (!graph.has(dep)) graph.set(dep, []);
371
- graph.get(dep).push(node);
372
- });
373
- });
374
- const queue = [];
375
- inDegree.forEach((deg, node) => {
376
- if (deg === 0) queue.push(node);
377
- });
378
- while (queue.length) {
379
- const current = queue.shift();
380
- if (!_InjectableRegistry.get(current)) {
381
- const instance = new current(...(_InjectableDeps.get(current) || []).map((dep) => _InjectableRegistry.get(dep)));
382
- _InjectableRegistry.set(current, instance);
383
- }
384
- (graph.get(current) || []).forEach((neighbor) => {
385
- inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);
386
- if (inDegree.get(neighbor) === 0) queue.push(neighbor);
387
- });
388
- }
389
- if (!_InjectableRegistry.get(ctor)) throw new Error("Circular dependency detected or injectable not registered");
390
- return _InjectableRegistry.get(ctor);
391
- }
392
- //#endregion
393
- //#region \0@oxc-project+runtime@0.127.0/helpers/decorate.js
394
- function __decorate(decorators, target, key, desc) {
395
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
396
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
397
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
398
- return c > 3 && r && Object.defineProperty(target, key, r), r;
399
- }
400
- //#endregion
401
- //#region src/middleware/health/registrar.ts
402
- let HealthRegistrar = class HealthRegistrar {
403
- _checks;
404
- _sealed;
405
- constructor() {
406
- this._checks = [];
407
- this._sealed = false;
408
- }
409
- add(healthCheck) {
410
- this._checks.push(healthCheck);
411
- }
412
- seal() {
413
- this._sealed = true;
414
- }
415
- async check() {
416
- if (!this._sealed) return false;
417
- return (await Promise.all(this._checks.map((c) => c()))).every((c) => c === true);
418
- }
419
- };
420
- HealthRegistrar = __decorate([Injectable()], HealthRegistrar);
421
- //#endregion
422
273
  //#region src/helper/sapling.ts
423
274
  const _settings = {
424
275
  serialize: JSON.stringify,
425
276
  deserialize: JSON.parse,
426
- health: { path: "/up" },
427
277
  doc: {
428
278
  openApiPath: "/openapi.json",
429
279
  swaggerPath: "/swagger.html",
@@ -499,7 +349,6 @@ var Sapling = class Sapling {
499
349
  static registerApp(app) {
500
350
  app.use(express.default.text({ type: "application/json" }));
501
351
  app.use(Sapling.json());
502
- _InjectableRegistry.get(HealthRegistrar)?.seal();
503
352
  }
504
353
  /**
505
354
  * Serialize a value into a JSON string.
@@ -925,6 +774,126 @@ const methodResolve = {
925
774
  USE: "use"
926
775
  };
927
776
  //#endregion
777
+ //#region lib/weakmap.ts
778
+ /**
779
+ * WeakMap that is iterable.
780
+ */
781
+ var IterableWeakMap = class IterableWeakMap {
782
+ #weakMap = /* @__PURE__ */ new WeakMap();
783
+ #refSet = /* @__PURE__ */ new Set();
784
+ #finalizationGroup = new FinalizationRegistry(IterableWeakMap.#cleanup);
785
+ static #cleanup(heldValue) {
786
+ heldValue.set.delete(heldValue.ref);
787
+ }
788
+ constructor(iterable) {
789
+ if (iterable) for (const [key, value] of iterable) this.set(key, value);
790
+ }
791
+ set(key, value) {
792
+ const ref = new WeakRef(key);
793
+ this.#weakMap.set(key, {
794
+ value,
795
+ ref
796
+ });
797
+ this.#refSet.add(ref);
798
+ this.#finalizationGroup.register(key, {
799
+ set: this.#refSet,
800
+ ref
801
+ }, ref);
802
+ return this;
803
+ }
804
+ get(key) {
805
+ return this.#weakMap.get(key)?.value;
806
+ }
807
+ delete(key) {
808
+ const entry = this.#weakMap.get(key);
809
+ if (!entry) return false;
810
+ this.#weakMap.delete(key);
811
+ this.#refSet.delete(entry.ref);
812
+ this.#finalizationGroup.unregister(entry.ref);
813
+ return true;
814
+ }
815
+ *[Symbol.iterator]() {
816
+ for (const ref of this.#refSet) {
817
+ const key = ref.deref();
818
+ if (!key) continue;
819
+ const entry = this.#weakMap.get(key);
820
+ if (entry) yield [key, entry.value];
821
+ }
822
+ }
823
+ entries() {
824
+ return this[Symbol.iterator]();
825
+ }
826
+ *keys() {
827
+ for (const [key] of this) yield key;
828
+ }
829
+ *values() {
830
+ for (const [, value] of this) yield value;
831
+ }
832
+ forEach(callback, thisArg) {
833
+ for (const [key, value] of this) callback.call(thisArg, value, key, this);
834
+ }
835
+ };
836
+ //#endregion
837
+ //#region src/annotation/injectable.ts
838
+ const _InjectableRegistry = /* @__PURE__ */ new WeakMap();
839
+ const _InjectableDeps = new IterableWeakMap();
840
+ /**
841
+ * Mark the class as an injectable to be handled by Sapling. The class can now be
842
+ * be injected into other classes, as well as allow the class to inject other `@Injectable` classes.
843
+ *
844
+ * @argument deps - An optional array to define any dependencies that this class may require.
845
+ */
846
+ function Injectable(deps = []) {
847
+ return function(target) {
848
+ _InjectableRegistry.set(target, null);
849
+ _InjectableDeps.set(target, deps);
850
+ };
851
+ }
852
+ /**
853
+ * Resolves and instantiates a class along with all of it's transitive dependencies.
854
+ *
855
+ * Uses topological sort (Kahn's algorithm) to ensure that the dependency graph is created
856
+ * in a correct order.
857
+ *
858
+ * When `resolve` is first called (usually during controller registration),
859
+ * it will compute the dependency graph of all `@Injectable` classes and instantiates
860
+ * them in the correct order.
861
+ *
862
+ * Subsequent calls to dependencies that have already been resolved are cached, so they will
863
+ * re-use the created singletons instead of re-instantiation.
864
+ */
865
+ function _resolve(ctor) {
866
+ const inDegree = /* @__PURE__ */ new Map();
867
+ const graph = /* @__PURE__ */ new Map();
868
+ _InjectableDeps.forEach((deps, node) => {
869
+ inDegree.set(node, inDegree.get(node) || 0);
870
+ deps.forEach((dep) => {
871
+ if (dep === void 0) throw new Error(`There is an @Injectable (${node.name}) which has a dependency that cannot be found. This is likely caused by a circular dependency.`);
872
+ inDegree.set(dep, inDegree.get(dep) || 0);
873
+ inDegree.set(node, inDegree.get(node) + 1);
874
+ if (!graph.has(dep)) graph.set(dep, []);
875
+ graph.get(dep).push(node);
876
+ });
877
+ });
878
+ const queue = [];
879
+ inDegree.forEach((deg, node) => {
880
+ if (deg === 0) queue.push(node);
881
+ });
882
+ while (queue.length) {
883
+ const current = queue.shift();
884
+ if (!_InjectableRegistry.get(current)) {
885
+ const instance = new current(...(_InjectableDeps.get(current) || []).map((dep) => _InjectableRegistry.get(dep)));
886
+ _InjectableRegistry.set(current, instance);
887
+ }
888
+ (graph.get(current) || []).forEach((neighbor) => {
889
+ inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);
890
+ if (inDegree.get(neighbor) === 0) queue.push(neighbor);
891
+ });
892
+ }
893
+ if (!_InjectableRegistry.get(ctor)) throw new Error("Circular dependency detected or injectable not registered");
894
+ return _InjectableRegistry.get(ctor);
895
+ }
896
+ //#endregion
928
897
  //#region src/annotation/controller.ts
929
898
  const _ControllerRegistry = /* @__PURE__ */ new WeakMap();
930
899
  /**
@@ -1043,6 +1012,14 @@ function MiddlewareClass(...args) {
1043
1012
  return Controller(...args);
1044
1013
  }
1045
1014
  //#endregion
1015
+ //#region \0@oxc-project+runtime@0.127.0/helpers/decorate.js
1016
+ function __decorate(decorators, target, key, desc) {
1017
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1018
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1019
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1020
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1021
+ }
1022
+ //#endregion
1046
1023
  //#region src/middleware/default/error/base.ts
1047
1024
  let DefaultBaseErrorMiddleware = class DefaultBaseErrorMiddleware {
1048
1025
  handle(err, _request, _response, _next) {
@@ -1158,19 +1135,6 @@ const DefaultSwaggerMiddleware = {
1158
1135
  Setup
1159
1136
  };
1160
1137
  //#endregion
1161
- //#region src/middleware/default/health/index.ts
1162
- let DefaultHealthMiddleware = class DefaultHealthMiddleware {
1163
- constructor(healthRegistrar) {
1164
- this.healthRegistrar = healthRegistrar;
1165
- }
1166
- async serve(_request, _response, _next) {
1167
- const up = await this.healthRegistrar.check();
1168
- return ResponseEntity.ok().body({ up });
1169
- }
1170
- };
1171
- __decorate([GET(_settings.health.path)], DefaultHealthMiddleware.prototype, "serve", null);
1172
- DefaultHealthMiddleware = __decorate([MiddlewareClass({ deps: [HealthRegistrar] })], DefaultHealthMiddleware);
1173
- //#endregion
1174
1138
  exports.Controller = Controller;
1175
1139
  exports.ControllerSchema = ControllerSchema;
1176
1140
  exports.DELETE = DELETE;
@@ -1180,12 +1144,6 @@ Object.defineProperty(exports, "DefaultBaseErrorMiddleware", {
1180
1144
  return DefaultBaseErrorMiddleware;
1181
1145
  }
1182
1146
  });
1183
- Object.defineProperty(exports, "DefaultHealthMiddleware", {
1184
- enumerable: true,
1185
- get: function() {
1186
- return DefaultHealthMiddleware;
1187
- }
1188
- });
1189
1147
  Object.defineProperty(exports, "DefaultOpenApiMiddleware", {
1190
1148
  enumerable: true,
1191
1149
  get: function() {
@@ -1207,12 +1165,6 @@ Object.defineProperty(exports, "DefaultResponseStatusErrorMiddleware", {
1207
1165
  exports.DefaultSwaggerMiddleware = DefaultSwaggerMiddleware;
1208
1166
  exports.GET = GET;
1209
1167
  exports.HEAD = HEAD;
1210
- Object.defineProperty(exports, "HealthRegistrar", {
1211
- enumerable: true,
1212
- get: function() {
1213
- return HealthRegistrar;
1214
- }
1215
- });
1216
1168
  exports.Html404ErrorPage = Html404ErrorPage;
1217
1169
  exports.HttpStatus = HttpStatus;
1218
1170
  exports.Injectable = Injectable;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import e, { ErrorRequestHandler, NextFunction, Request as Request$1, RequestHandler, Response as Response$1, Router } from "express";
1
+ import e, { ErrorRequestHandler, NextFunction, Request, RequestHandler, Response as Response$1, Router } from "express";
2
2
 
3
3
  //#region src/html/404.d.ts
4
4
  /**
@@ -26,7 +26,7 @@ type RouteDefinition = {
26
26
  };
27
27
  type Class<T> = new (...args: any[]) => T;
28
28
  type HttpHeaders = Record<string, string>;
29
- type ExpressMiddlewareFn = ($1: Request$1, $2: Response$1, $3: NextFunction) => void;
29
+ type ExpressMiddlewareFn = ($1: Request, $2: Response$1, $3: NextFunction) => void;
30
30
  //#endregion
31
31
  //#region src/annotation/controller.d.ts
32
32
  declare const _ControllerRegistry: WeakMap<Function, Router | ErrorRequestHandler>;
@@ -794,9 +794,6 @@ declare function _clearOpenApiRegistry(): void;
794
794
  type Settings = {
795
795
  serialize: (value: any) => string;
796
796
  deserialize: (value: string) => any;
797
- health: {
798
- path: string;
799
- };
800
797
  doc: {
801
798
  openApiPath: string;
802
799
  swaggerPath: string;
@@ -925,7 +922,7 @@ declare class Sapling {
925
922
  * }
926
923
  * ```
927
924
  */
928
- static chainHandlers(this: void, handlers: RequestHandler[], request: Request$1, response: Response$1, next: NextFunction, index?: number): void;
925
+ static chainHandlers(this: void, handlers: RequestHandler[], request: Request, response: Response$1, next: NextFunction, index?: number): void;
929
926
  }
930
927
  //#endregion
931
928
  //#region src/annotation/validator.d.ts
@@ -981,7 +978,7 @@ declare function _getControllerSchema(ctor: Function): ControllerSchemaDefinitio
981
978
  * If the default is not suitable, you may also easily write your own.
982
979
  */
983
980
  declare class DefaultBaseErrorMiddleware {
984
- handle(err: unknown, _request: Request$1, _response: Response$1, _next: NextFunction): ResponseEntity<{
981
+ handle(err: unknown, _request: Request, _response: Response$1, _next: NextFunction): ResponseEntity<{
985
982
  message: string;
986
983
  }>;
987
984
  }
@@ -992,7 +989,7 @@ declare class DefaultBaseErrorMiddleware {
992
989
  * If the default is not suitable, you may also easily write your own.
993
990
  */
994
991
  declare class DefaultParserErrorMiddleware {
995
- handle(err: unknown, _request: Request$1, _response: Response$1, next: NextFunction): ResponseEntity<{
992
+ handle(err: unknown, _request: Request, _response: Response$1, next: NextFunction): ResponseEntity<{
996
993
  message: string;
997
994
  }> | undefined;
998
995
  }
@@ -1003,7 +1000,7 @@ declare class DefaultParserErrorMiddleware {
1003
1000
  * If the default is not suitable, you may also easily write your own.
1004
1001
  */
1005
1002
  declare class DefaultResponseStatusErrorMiddleware {
1006
- handle(err: unknown, _request: Request$1, _response: Response$1, next: NextFunction): ResponseEntity<{
1003
+ handle(err: unknown, _request: Request, _response: Response$1, next: NextFunction): ResponseEntity<{
1007
1004
  message: string;
1008
1005
  }> | undefined;
1009
1006
  }
@@ -1026,7 +1023,7 @@ declare class DefaultResponseStatusErrorMiddleware {
1026
1023
  * ```
1027
1024
  */
1028
1025
  declare class DefaultOpenApiMiddleware {
1029
- handle(_request: Request$1, _response: Response$1, _next: NextFunction): ResponseEntity<OpenAPIV3.Document<{}>>;
1026
+ handle(_request: Request, _response: Response$1, _next: NextFunction): ResponseEntity<OpenAPIV3.Document<{}>>;
1030
1027
  }
1031
1028
  //#endregion
1032
1029
  //#region src/middleware/default/swagger/index.d.ts
@@ -1048,7 +1045,7 @@ declare class DefaultOpenApiMiddleware {
1048
1045
  */
1049
1046
  declare class Serve {
1050
1047
  private readonly handlers;
1051
- handle(request: Request$1, response: Response$1, next: NextFunction): void;
1048
+ handle(request: Request, response: Response$1, next: NextFunction): void;
1052
1049
  }
1053
1050
  /**
1054
1051
  * Enable the serving of the Swagger endpoint used to serve the OpenAPI spec generated by Sapling.
@@ -1069,7 +1066,7 @@ declare class Serve {
1069
1066
  declare class Setup {
1070
1067
  private readonly handler;
1071
1068
  constructor();
1072
- handle(request: Request$1, response: Response$1, next: NextFunction): unknown;
1069
+ handle(request: Request, response: Response$1, next: NextFunction): unknown;
1073
1070
  }
1074
1071
  /**
1075
1072
  * Enable the serving of the Swagger endpoint used to serve the OpenAPI spec generated by Sapling.
@@ -1092,24 +1089,4 @@ declare const DefaultSwaggerMiddleware: {
1092
1089
  Setup: typeof Setup;
1093
1090
  };
1094
1091
  //#endregion
1095
- //#region src/middleware/health/registrar.d.ts
1096
- type HealthCheck = () => boolean | Promise<boolean>;
1097
- declare class HealthRegistrar {
1098
- private _checks;
1099
- private _sealed;
1100
- constructor();
1101
- add(healthCheck: HealthCheck): void;
1102
- seal(): void;
1103
- check(): Promise<boolean>;
1104
- }
1105
- //#endregion
1106
- //#region src/middleware/default/health/index.d.ts
1107
- declare class DefaultHealthMiddleware {
1108
- private readonly healthRegistrar;
1109
- constructor(healthRegistrar: HealthRegistrar);
1110
- serve(_request: Request, _response: Response, _next: NextFunction): Promise<ResponseEntity<{
1111
- up: boolean;
1112
- }>>;
1113
- }
1114
- //#endregion
1115
- export { Class, Controller, ControllerSchema, ControllerSchemaDefinition, DELETE, DefaultBaseErrorMiddleware, DefaultHealthMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, ExpressMiddlewareFn, ExpressRouterMethodKey, ExpressRouterMethods, GET, HEAD, HealthCheck, HealthRegistrar, Html404ErrorPage, HttpHeaders, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, OpenAPIMetadata, PATCH, POST, PUT, ParserError, ParserErrorLocation, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseSchema, ResponseStatusError, RouteDefinition, RouteSchema, RouteSchemaDefinition, Sapling, ValidatorSchema, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
1092
+ export { Class, Controller, ControllerSchema, ControllerSchemaDefinition, DELETE, DefaultBaseErrorMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, ExpressMiddlewareFn, ExpressRouterMethodKey, ExpressRouterMethods, GET, HEAD, Html404ErrorPage, HttpHeaders, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, OpenAPIMetadata, PATCH, POST, PUT, ParserError, ParserErrorLocation, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseSchema, ResponseStatusError, RouteDefinition, RouteSchema, RouteSchemaDefinition, Sapling, ValidatorSchema, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import e, { ErrorRequestHandler, NextFunction, Request as Request$1, RequestHandler, Response as Response$1, Router } from "express";
1
+ import e, { ErrorRequestHandler, NextFunction, Request, RequestHandler, Response as Response$1, Router } from "express";
2
2
 
3
3
  //#region src/html/404.d.ts
4
4
  /**
@@ -26,7 +26,7 @@ type RouteDefinition = {
26
26
  };
27
27
  type Class<T> = new (...args: any[]) => T;
28
28
  type HttpHeaders = Record<string, string>;
29
- type ExpressMiddlewareFn = ($1: Request$1, $2: Response$1, $3: NextFunction) => void;
29
+ type ExpressMiddlewareFn = ($1: Request, $2: Response$1, $3: NextFunction) => void;
30
30
  //#endregion
31
31
  //#region src/annotation/controller.d.ts
32
32
  declare const _ControllerRegistry: WeakMap<Function, Router | ErrorRequestHandler>;
@@ -794,9 +794,6 @@ declare function _clearOpenApiRegistry(): void;
794
794
  type Settings = {
795
795
  serialize: (value: any) => string;
796
796
  deserialize: (value: string) => any;
797
- health: {
798
- path: string;
799
- };
800
797
  doc: {
801
798
  openApiPath: string;
802
799
  swaggerPath: string;
@@ -925,7 +922,7 @@ declare class Sapling {
925
922
  * }
926
923
  * ```
927
924
  */
928
- static chainHandlers(this: void, handlers: RequestHandler[], request: Request$1, response: Response$1, next: NextFunction, index?: number): void;
925
+ static chainHandlers(this: void, handlers: RequestHandler[], request: Request, response: Response$1, next: NextFunction, index?: number): void;
929
926
  }
930
927
  //#endregion
931
928
  //#region src/annotation/validator.d.ts
@@ -981,7 +978,7 @@ declare function _getControllerSchema(ctor: Function): ControllerSchemaDefinitio
981
978
  * If the default is not suitable, you may also easily write your own.
982
979
  */
983
980
  declare class DefaultBaseErrorMiddleware {
984
- handle(err: unknown, _request: Request$1, _response: Response$1, _next: NextFunction): ResponseEntity<{
981
+ handle(err: unknown, _request: Request, _response: Response$1, _next: NextFunction): ResponseEntity<{
985
982
  message: string;
986
983
  }>;
987
984
  }
@@ -992,7 +989,7 @@ declare class DefaultBaseErrorMiddleware {
992
989
  * If the default is not suitable, you may also easily write your own.
993
990
  */
994
991
  declare class DefaultParserErrorMiddleware {
995
- handle(err: unknown, _request: Request$1, _response: Response$1, next: NextFunction): ResponseEntity<{
992
+ handle(err: unknown, _request: Request, _response: Response$1, next: NextFunction): ResponseEntity<{
996
993
  message: string;
997
994
  }> | undefined;
998
995
  }
@@ -1003,7 +1000,7 @@ declare class DefaultParserErrorMiddleware {
1003
1000
  * If the default is not suitable, you may also easily write your own.
1004
1001
  */
1005
1002
  declare class DefaultResponseStatusErrorMiddleware {
1006
- handle(err: unknown, _request: Request$1, _response: Response$1, next: NextFunction): ResponseEntity<{
1003
+ handle(err: unknown, _request: Request, _response: Response$1, next: NextFunction): ResponseEntity<{
1007
1004
  message: string;
1008
1005
  }> | undefined;
1009
1006
  }
@@ -1026,7 +1023,7 @@ declare class DefaultResponseStatusErrorMiddleware {
1026
1023
  * ```
1027
1024
  */
1028
1025
  declare class DefaultOpenApiMiddleware {
1029
- handle(_request: Request$1, _response: Response$1, _next: NextFunction): ResponseEntity<OpenAPIV3.Document<{}>>;
1026
+ handle(_request: Request, _response: Response$1, _next: NextFunction): ResponseEntity<OpenAPIV3.Document<{}>>;
1030
1027
  }
1031
1028
  //#endregion
1032
1029
  //#region src/middleware/default/swagger/index.d.ts
@@ -1048,7 +1045,7 @@ declare class DefaultOpenApiMiddleware {
1048
1045
  */
1049
1046
  declare class Serve {
1050
1047
  private readonly handlers;
1051
- handle(request: Request$1, response: Response$1, next: NextFunction): void;
1048
+ handle(request: Request, response: Response$1, next: NextFunction): void;
1052
1049
  }
1053
1050
  /**
1054
1051
  * Enable the serving of the Swagger endpoint used to serve the OpenAPI spec generated by Sapling.
@@ -1069,7 +1066,7 @@ declare class Serve {
1069
1066
  declare class Setup {
1070
1067
  private readonly handler;
1071
1068
  constructor();
1072
- handle(request: Request$1, response: Response$1, next: NextFunction): unknown;
1069
+ handle(request: Request, response: Response$1, next: NextFunction): unknown;
1073
1070
  }
1074
1071
  /**
1075
1072
  * Enable the serving of the Swagger endpoint used to serve the OpenAPI spec generated by Sapling.
@@ -1092,24 +1089,4 @@ declare const DefaultSwaggerMiddleware: {
1092
1089
  Setup: typeof Setup;
1093
1090
  };
1094
1091
  //#endregion
1095
- //#region src/middleware/health/registrar.d.ts
1096
- type HealthCheck = () => boolean | Promise<boolean>;
1097
- declare class HealthRegistrar {
1098
- private _checks;
1099
- private _sealed;
1100
- constructor();
1101
- add(healthCheck: HealthCheck): void;
1102
- seal(): void;
1103
- check(): Promise<boolean>;
1104
- }
1105
- //#endregion
1106
- //#region src/middleware/default/health/index.d.ts
1107
- declare class DefaultHealthMiddleware {
1108
- private readonly healthRegistrar;
1109
- constructor(healthRegistrar: HealthRegistrar);
1110
- serve(_request: Request, _response: Response, _next: NextFunction): Promise<ResponseEntity<{
1111
- up: boolean;
1112
- }>>;
1113
- }
1114
- //#endregion
1115
- export { Class, Controller, ControllerSchema, ControllerSchemaDefinition, DELETE, DefaultBaseErrorMiddleware, DefaultHealthMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, ExpressMiddlewareFn, ExpressRouterMethodKey, ExpressRouterMethods, GET, HEAD, HealthCheck, HealthRegistrar, Html404ErrorPage, HttpHeaders, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, OpenAPIMetadata, PATCH, POST, PUT, ParserError, ParserErrorLocation, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseSchema, ResponseStatusError, RouteDefinition, RouteSchema, RouteSchemaDefinition, Sapling, ValidatorSchema, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
1092
+ export { Class, Controller, ControllerSchema, ControllerSchemaDefinition, DELETE, DefaultBaseErrorMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, ExpressMiddlewareFn, ExpressRouterMethodKey, ExpressRouterMethods, GET, HEAD, Html404ErrorPage, HttpHeaders, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, OpenAPIMetadata, PATCH, POST, PUT, ParserError, ParserErrorLocation, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseSchema, ResponseStatusError, RouteDefinition, RouteSchema, RouteSchemaDefinition, Sapling, ValidatorSchema, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
package/dist/index.mjs CHANGED
@@ -245,160 +245,10 @@ var ParserError = class ParserError extends ResponseStatusError {
245
245
  }
246
246
  };
247
247
  //#endregion
248
- //#region lib/weakmap.ts
249
- /**
250
- * WeakMap that is iterable.
251
- */
252
- var IterableWeakMap = class IterableWeakMap {
253
- #weakMap = /* @__PURE__ */ new WeakMap();
254
- #refSet = /* @__PURE__ */ new Set();
255
- #finalizationGroup = new FinalizationRegistry(IterableWeakMap.#cleanup);
256
- static #cleanup(heldValue) {
257
- heldValue.set.delete(heldValue.ref);
258
- }
259
- constructor(iterable) {
260
- if (iterable) for (const [key, value] of iterable) this.set(key, value);
261
- }
262
- set(key, value) {
263
- const ref = new WeakRef(key);
264
- this.#weakMap.set(key, {
265
- value,
266
- ref
267
- });
268
- this.#refSet.add(ref);
269
- this.#finalizationGroup.register(key, {
270
- set: this.#refSet,
271
- ref
272
- }, ref);
273
- return this;
274
- }
275
- get(key) {
276
- return this.#weakMap.get(key)?.value;
277
- }
278
- delete(key) {
279
- const entry = this.#weakMap.get(key);
280
- if (!entry) return false;
281
- this.#weakMap.delete(key);
282
- this.#refSet.delete(entry.ref);
283
- this.#finalizationGroup.unregister(entry.ref);
284
- return true;
285
- }
286
- *[Symbol.iterator]() {
287
- for (const ref of this.#refSet) {
288
- const key = ref.deref();
289
- if (!key) continue;
290
- const entry = this.#weakMap.get(key);
291
- if (entry) yield [key, entry.value];
292
- }
293
- }
294
- entries() {
295
- return this[Symbol.iterator]();
296
- }
297
- *keys() {
298
- for (const [key] of this) yield key;
299
- }
300
- *values() {
301
- for (const [, value] of this) yield value;
302
- }
303
- forEach(callback, thisArg) {
304
- for (const [key, value] of this) callback.call(thisArg, value, key, this);
305
- }
306
- };
307
- //#endregion
308
- //#region src/annotation/injectable.ts
309
- const _InjectableRegistry = /* @__PURE__ */ new WeakMap();
310
- const _InjectableDeps = new IterableWeakMap();
311
- /**
312
- * Mark the class as an injectable to be handled by Sapling. The class can now be
313
- * be injected into other classes, as well as allow the class to inject other `@Injectable` classes.
314
- *
315
- * @argument deps - An optional array to define any dependencies that this class may require.
316
- */
317
- function Injectable(deps = []) {
318
- return function(target) {
319
- _InjectableRegistry.set(target, null);
320
- _InjectableDeps.set(target, deps);
321
- };
322
- }
323
- /**
324
- * Resolves and instantiates a class along with all of it's transitive dependencies.
325
- *
326
- * Uses topological sort (Kahn's algorithm) to ensure that the dependency graph is created
327
- * in a correct order.
328
- *
329
- * When `resolve` is first called (usually during controller registration),
330
- * it will compute the dependency graph of all `@Injectable` classes and instantiates
331
- * them in the correct order.
332
- *
333
- * Subsequent calls to dependencies that have already been resolved are cached, so they will
334
- * re-use the created singletons instead of re-instantiation.
335
- */
336
- function _resolve(ctor) {
337
- const inDegree = /* @__PURE__ */ new Map();
338
- const graph = /* @__PURE__ */ new Map();
339
- _InjectableDeps.forEach((deps, node) => {
340
- inDegree.set(node, inDegree.get(node) || 0);
341
- deps.forEach((dep) => {
342
- if (dep === void 0) throw new Error(`There is an @Injectable (${node.name}) which has a dependency that cannot be found. This is likely caused by a circular dependency.`);
343
- inDegree.set(dep, inDegree.get(dep) || 0);
344
- inDegree.set(node, inDegree.get(node) + 1);
345
- if (!graph.has(dep)) graph.set(dep, []);
346
- graph.get(dep).push(node);
347
- });
348
- });
349
- const queue = [];
350
- inDegree.forEach((deg, node) => {
351
- if (deg === 0) queue.push(node);
352
- });
353
- while (queue.length) {
354
- const current = queue.shift();
355
- if (!_InjectableRegistry.get(current)) {
356
- const instance = new current(...(_InjectableDeps.get(current) || []).map((dep) => _InjectableRegistry.get(dep)));
357
- _InjectableRegistry.set(current, instance);
358
- }
359
- (graph.get(current) || []).forEach((neighbor) => {
360
- inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);
361
- if (inDegree.get(neighbor) === 0) queue.push(neighbor);
362
- });
363
- }
364
- if (!_InjectableRegistry.get(ctor)) throw new Error("Circular dependency detected or injectable not registered");
365
- return _InjectableRegistry.get(ctor);
366
- }
367
- //#endregion
368
- //#region \0@oxc-project+runtime@0.127.0/helpers/decorate.js
369
- function __decorate(decorators, target, key, desc) {
370
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
371
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
372
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
373
- return c > 3 && r && Object.defineProperty(target, key, r), r;
374
- }
375
- //#endregion
376
- //#region src/middleware/health/registrar.ts
377
- let HealthRegistrar = class HealthRegistrar {
378
- _checks;
379
- _sealed;
380
- constructor() {
381
- this._checks = [];
382
- this._sealed = false;
383
- }
384
- add(healthCheck) {
385
- this._checks.push(healthCheck);
386
- }
387
- seal() {
388
- this._sealed = true;
389
- }
390
- async check() {
391
- if (!this._sealed) return false;
392
- return (await Promise.all(this._checks.map((c) => c()))).every((c) => c === true);
393
- }
394
- };
395
- HealthRegistrar = __decorate([Injectable()], HealthRegistrar);
396
- //#endregion
397
248
  //#region src/helper/sapling.ts
398
249
  const _settings = {
399
250
  serialize: JSON.stringify,
400
251
  deserialize: JSON.parse,
401
- health: { path: "/up" },
402
252
  doc: {
403
253
  openApiPath: "/openapi.json",
404
254
  swaggerPath: "/swagger.html",
@@ -474,7 +324,6 @@ var Sapling = class Sapling {
474
324
  static registerApp(app) {
475
325
  app.use(e.text({ type: "application/json" }));
476
326
  app.use(Sapling.json());
477
- _InjectableRegistry.get(HealthRegistrar)?.seal();
478
327
  }
479
328
  /**
480
329
  * Serialize a value into a JSON string.
@@ -900,6 +749,126 @@ const methodResolve = {
900
749
  USE: "use"
901
750
  };
902
751
  //#endregion
752
+ //#region lib/weakmap.ts
753
+ /**
754
+ * WeakMap that is iterable.
755
+ */
756
+ var IterableWeakMap = class IterableWeakMap {
757
+ #weakMap = /* @__PURE__ */ new WeakMap();
758
+ #refSet = /* @__PURE__ */ new Set();
759
+ #finalizationGroup = new FinalizationRegistry(IterableWeakMap.#cleanup);
760
+ static #cleanup(heldValue) {
761
+ heldValue.set.delete(heldValue.ref);
762
+ }
763
+ constructor(iterable) {
764
+ if (iterable) for (const [key, value] of iterable) this.set(key, value);
765
+ }
766
+ set(key, value) {
767
+ const ref = new WeakRef(key);
768
+ this.#weakMap.set(key, {
769
+ value,
770
+ ref
771
+ });
772
+ this.#refSet.add(ref);
773
+ this.#finalizationGroup.register(key, {
774
+ set: this.#refSet,
775
+ ref
776
+ }, ref);
777
+ return this;
778
+ }
779
+ get(key) {
780
+ return this.#weakMap.get(key)?.value;
781
+ }
782
+ delete(key) {
783
+ const entry = this.#weakMap.get(key);
784
+ if (!entry) return false;
785
+ this.#weakMap.delete(key);
786
+ this.#refSet.delete(entry.ref);
787
+ this.#finalizationGroup.unregister(entry.ref);
788
+ return true;
789
+ }
790
+ *[Symbol.iterator]() {
791
+ for (const ref of this.#refSet) {
792
+ const key = ref.deref();
793
+ if (!key) continue;
794
+ const entry = this.#weakMap.get(key);
795
+ if (entry) yield [key, entry.value];
796
+ }
797
+ }
798
+ entries() {
799
+ return this[Symbol.iterator]();
800
+ }
801
+ *keys() {
802
+ for (const [key] of this) yield key;
803
+ }
804
+ *values() {
805
+ for (const [, value] of this) yield value;
806
+ }
807
+ forEach(callback, thisArg) {
808
+ for (const [key, value] of this) callback.call(thisArg, value, key, this);
809
+ }
810
+ };
811
+ //#endregion
812
+ //#region src/annotation/injectable.ts
813
+ const _InjectableRegistry = /* @__PURE__ */ new WeakMap();
814
+ const _InjectableDeps = new IterableWeakMap();
815
+ /**
816
+ * Mark the class as an injectable to be handled by Sapling. The class can now be
817
+ * be injected into other classes, as well as allow the class to inject other `@Injectable` classes.
818
+ *
819
+ * @argument deps - An optional array to define any dependencies that this class may require.
820
+ */
821
+ function Injectable(deps = []) {
822
+ return function(target) {
823
+ _InjectableRegistry.set(target, null);
824
+ _InjectableDeps.set(target, deps);
825
+ };
826
+ }
827
+ /**
828
+ * Resolves and instantiates a class along with all of it's transitive dependencies.
829
+ *
830
+ * Uses topological sort (Kahn's algorithm) to ensure that the dependency graph is created
831
+ * in a correct order.
832
+ *
833
+ * When `resolve` is first called (usually during controller registration),
834
+ * it will compute the dependency graph of all `@Injectable` classes and instantiates
835
+ * them in the correct order.
836
+ *
837
+ * Subsequent calls to dependencies that have already been resolved are cached, so they will
838
+ * re-use the created singletons instead of re-instantiation.
839
+ */
840
+ function _resolve(ctor) {
841
+ const inDegree = /* @__PURE__ */ new Map();
842
+ const graph = /* @__PURE__ */ new Map();
843
+ _InjectableDeps.forEach((deps, node) => {
844
+ inDegree.set(node, inDegree.get(node) || 0);
845
+ deps.forEach((dep) => {
846
+ if (dep === void 0) throw new Error(`There is an @Injectable (${node.name}) which has a dependency that cannot be found. This is likely caused by a circular dependency.`);
847
+ inDegree.set(dep, inDegree.get(dep) || 0);
848
+ inDegree.set(node, inDegree.get(node) + 1);
849
+ if (!graph.has(dep)) graph.set(dep, []);
850
+ graph.get(dep).push(node);
851
+ });
852
+ });
853
+ const queue = [];
854
+ inDegree.forEach((deg, node) => {
855
+ if (deg === 0) queue.push(node);
856
+ });
857
+ while (queue.length) {
858
+ const current = queue.shift();
859
+ if (!_InjectableRegistry.get(current)) {
860
+ const instance = new current(...(_InjectableDeps.get(current) || []).map((dep) => _InjectableRegistry.get(dep)));
861
+ _InjectableRegistry.set(current, instance);
862
+ }
863
+ (graph.get(current) || []).forEach((neighbor) => {
864
+ inDegree.set(neighbor, (inDegree.get(neighbor) ?? 0) - 1);
865
+ if (inDegree.get(neighbor) === 0) queue.push(neighbor);
866
+ });
867
+ }
868
+ if (!_InjectableRegistry.get(ctor)) throw new Error("Circular dependency detected or injectable not registered");
869
+ return _InjectableRegistry.get(ctor);
870
+ }
871
+ //#endregion
903
872
  //#region src/annotation/controller.ts
904
873
  const _ControllerRegistry = /* @__PURE__ */ new WeakMap();
905
874
  /**
@@ -1018,6 +987,14 @@ function MiddlewareClass(...args) {
1018
987
  return Controller(...args);
1019
988
  }
1020
989
  //#endregion
990
+ //#region \0@oxc-project+runtime@0.127.0/helpers/decorate.js
991
+ function __decorate(decorators, target, key, desc) {
992
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
993
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
994
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
995
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
996
+ }
997
+ //#endregion
1021
998
  //#region src/middleware/default/error/base.ts
1022
999
  let DefaultBaseErrorMiddleware = class DefaultBaseErrorMiddleware {
1023
1000
  handle(err, _request, _response, _next) {
@@ -1133,17 +1110,4 @@ const DefaultSwaggerMiddleware = {
1133
1110
  Setup
1134
1111
  };
1135
1112
  //#endregion
1136
- //#region src/middleware/default/health/index.ts
1137
- let DefaultHealthMiddleware = class DefaultHealthMiddleware {
1138
- constructor(healthRegistrar) {
1139
- this.healthRegistrar = healthRegistrar;
1140
- }
1141
- async serve(_request, _response, _next) {
1142
- const up = await this.healthRegistrar.check();
1143
- return ResponseEntity.ok().body({ up });
1144
- }
1145
- };
1146
- __decorate([GET(_settings.health.path)], DefaultHealthMiddleware.prototype, "serve", null);
1147
- DefaultHealthMiddleware = __decorate([MiddlewareClass({ deps: [HealthRegistrar] })], DefaultHealthMiddleware);
1148
- //#endregion
1149
- export { Controller, ControllerSchema, DELETE, DefaultBaseErrorMiddleware, DefaultHealthMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, GET, HEAD, HealthRegistrar, Html404ErrorPage, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, PATCH, POST, PUT, ParserError, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseStatusError, RouteSchema, Sapling, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
1113
+ export { Controller, ControllerSchema, DELETE, DefaultBaseErrorMiddleware, DefaultOpenApiMiddleware, DefaultParserErrorMiddleware, DefaultResponseStatusErrorMiddleware, DefaultSwaggerMiddleware, GET, HEAD, Html404ErrorPage, HttpStatus, Injectable, Middleware, MiddlewareClass, OPTIONS, PATCH, POST, PUT, ParserError, RedirectView, RequestBody, RequestParam, RequestQuery, ResponseBody, ResponseEntity, ResponseEntityBuilder, ResponseStatusError, RouteSchema, Sapling, _ControllerRegistry, _InjectableDeps, _InjectableRegistry, _Route, _clearOpenApiRegistry, _getControllerSchema, _getOrCreateSchemaDefinition, _getRouteSchema, _getRoutes, _getValidatorSchema, _parseOrThrow, _registerController, _resolve, _saveValidatorSchema, _setControllerSchema, _setRouteSchema, _settings, generateOpenApiSpec, methodResolve, openApiGenerator };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tahminator/sapling",
3
- "version": "2.1.0-beta.0e8a97e8",
3
+ "version": "2.1.0",
4
4
  "author": "Tahmid Ahmed",
5
5
  "description": "A library to help you write cleaner Express.js code",
6
6
  "repository": {