@loopback/rest 5.2.0 → 6.2.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +4 -0
  3. package/dist/body-parsers/body-parser.js +3 -0
  4. package/dist/body-parsers/body-parser.js.map +1 -1
  5. package/dist/coercion/coerce-parameter.js +3 -2
  6. package/dist/coercion/coerce-parameter.js.map +1 -1
  7. package/dist/coercion/utils.d.ts +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/keys.d.ts +18 -3
  10. package/dist/keys.js +18 -1
  11. package/dist/keys.js.map +1 -1
  12. package/dist/parser.d.ts +2 -2
  13. package/dist/parser.js +3 -2
  14. package/dist/parser.js.map +1 -1
  15. package/dist/providers/find-route.provider.d.ts +7 -1
  16. package/dist/providers/find-route.provider.js +29 -1
  17. package/dist/providers/find-route.provider.js.map +1 -1
  18. package/dist/providers/invoke-method.provider.d.ts +7 -1
  19. package/dist/providers/invoke-method.provider.js +43 -1
  20. package/dist/providers/invoke-method.provider.js.map +1 -1
  21. package/dist/providers/parse-params.provider.d.ts +8 -2
  22. package/dist/providers/parse-params.provider.js +32 -2
  23. package/dist/providers/parse-params.provider.js.map +1 -1
  24. package/dist/providers/send.provider.d.ts +10 -2
  25. package/dist/providers/send.provider.js +46 -1
  26. package/dist/providers/send.provider.js.map +1 -1
  27. package/dist/request-context.js.map +1 -1
  28. package/dist/rest-http-error.d.ts +3 -1
  29. package/dist/rest-http-error.js +3 -2
  30. package/dist/rest-http-error.js.map +1 -1
  31. package/dist/rest.application.js +1 -1
  32. package/dist/rest.application.js.map +1 -1
  33. package/dist/rest.component.d.ts +1 -2
  34. package/dist/rest.component.js +23 -7
  35. package/dist/rest.component.js.map +1 -1
  36. package/dist/rest.server.d.ts +8 -4
  37. package/dist/rest.server.js +25 -12
  38. package/dist/rest.server.js.map +1 -1
  39. package/dist/router/base-route.js +3 -3
  40. package/dist/router/base-route.js.map +1 -1
  41. package/dist/router/controller-route.js +1 -1
  42. package/dist/router/controller-route.js.map +1 -1
  43. package/dist/router/handler-route.js +1 -1
  44. package/dist/router/handler-route.js.map +1 -1
  45. package/dist/router/redirect-route.js +1 -1
  46. package/dist/router/redirect-route.js.map +1 -1
  47. package/dist/sequence.d.ts +84 -2
  48. package/dist/sequence.js +135 -2
  49. package/dist/sequence.js.map +1 -1
  50. package/dist/types.d.ts +9 -4
  51. package/dist/validation/ajv-factory.provider.d.ts +3 -2
  52. package/dist/validation/ajv-factory.provider.js +7 -2
  53. package/dist/validation/ajv-factory.provider.js.map +1 -1
  54. package/dist/validation/request-body.validator.d.ts +2 -2
  55. package/dist/validation/request-body.validator.js +11 -13
  56. package/dist/validation/request-body.validator.js.map +1 -1
  57. package/package.json +25 -25
  58. package/src/body-parsers/body-parser.ts +3 -0
  59. package/src/coercion/coerce-parameter.ts +4 -3
  60. package/src/keys.ts +34 -3
  61. package/src/parser.ts +4 -3
  62. package/src/providers/find-route.provider.ts +36 -3
  63. package/src/providers/invoke-method.provider.ts +47 -3
  64. package/src/providers/parse-params.provider.ts +36 -9
  65. package/src/providers/send.provider.ts +45 -2
  66. package/src/request-context.ts +2 -1
  67. package/src/rest-http-error.ts +6 -2
  68. package/src/rest.application.ts +1 -1
  69. package/src/rest.component.ts +40 -10
  70. package/src/rest.server.ts +50 -16
  71. package/src/router/base-route.ts +3 -3
  72. package/src/router/controller-route.ts +1 -1
  73. package/src/router/handler-route.ts +3 -1
  74. package/src/router/redirect-route.ts +1 -1
  75. package/src/sequence.ts +174 -4
  76. package/src/types.ts +13 -4
  77. package/src/validation/ajv-factory.provider.ts +10 -8
  78. package/src/validation/request-body.validator.ts +28 -24
@@ -1 +1 @@
1
- {"version":3,"file":"controller-route.js","sourceRoot":"","sources":["../../src/router/controller-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAQwB;AAExB,4DAA4B;AAC5B,0DAAiC;AACjC,sEAAqC;AACrC,+BAA6B;AAC7B,kCAAqC;AAErC,6CAAoD;AAEpD,MAAM,KAAK,GAAG,eAAY,CAAC,gCAAgC,CAAC,CAAC;AAoB7D;;GAEG;AACH,MAAa,eAAmB,SAAQ,sBAAS;IAM/C;;;;;;;;OAQG;IACH,YACE,IAAY,EACZ,IAAY,EACZ,IAAqB,EACrB,cAAkC,EAClC,iBAAwC,EACxC,UAAmB;QAEnB,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;QACxE,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CACb,sEAAsE;gBACpE,6DAA6D;gBAC7D,eAAe,IAAI,IAAI,IAAI,IAAI;gBAC/B,eAAe,cAAc,GAAG,CACnC,CAAC;SACH;QAED,KAAK,CACH,IAAI,EACJ,IAAI;QACJ,4DAA4D;QAC5D,MAAM,CAAC,MAAM,CACX;YACE,mBAAmB,EAAE,cAAc;YACnC,kBAAkB,EAAE,UAAU;YAC9B,IAAI,EAAE,CAAC,cAAc,CAAC;SACvB,EACD,IAAI,CACL,CACF,CAAC;QAEF,IAAI,CAAC,kBAAkB,GACrB,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,+BAA+B,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;IACvD,CAAC;IAED,cAAc,CAAC,cAAuB;QACpC;;;;;;;;;;;;WAYG;QACH,cAAc;aACX,IAAI,CAAC,mBAAY,CAAC,kBAAkB,CAAC;aACrC,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;aAC7D,OAAO,CAAC,mBAAY,CAAC,SAAS,CAAC,CAAC;QACnC,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5E,cAAc;aACX,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC;aACzC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAuB,EACvB,IAAmB;QAEnB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CACzC,oBAAoB,CACrB,CAAC;QACF,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;YACtD,MAAM,IAAI,qBAAU,CAAC,QAAQ,CAC3B,gCAAgC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAClD,CAAC;SACH;QACD,8CAA8C;QAC9C,OAAO,mBAAY,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE;YACtE,MAAM,EAAE,IAAI,wBAAW,CAAC,IAAI,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;CACF;AAtGD,0CAsGC;AAED;;;GAGG;AACH,SAAgB,iCAAiC,CAC/C,GAAW;IAEX,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;AAChC,CAAC;AAJD,8EAIC;AAED;;;GAGG;AACH,SAAgB,+BAA+B,CAC7C,cAAkC;IAElC,OAAO,KAAK,EAAC,GAAG,EAAC,EAAE;QACjB,oEAAoE;QACpE,kDAAkD;QAClD,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAI,eAAe,cAAc,CAAC,IAAI,EAAE,EAAE;YAChE,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,GAAG,MAAM,uBAAgB,CAAI,cAAc,EAAE,GAAG,CAAC,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAdD,0EAcC;AAED;;;GAGG;AACH,SAAgB,kCAAkC,CAChD,cAAiB;IAEjB,OAAO,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC;AAC/B,CAAC;AAJD,gFAIC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,IAAoB,EACpB,cAAkC,EAClC,iBAAwC;;IAExC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,gBAAM,CACJ,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAClC,6CAA6C,CAC9C,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QAClD,OAAO,MAAM,CAAC;KACf;IAED,KAAK,CACH,2CAA2C,EAC3C,cAAO,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAC7B,CAAC;IAEF,MAAM,QAAQ,SAAG,IAAI,CAAC,QAAQ,mCAAI,GAAG,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;QAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChC,MAAM,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,eAAe,CAC/B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,cAAc,EACd,iBAAiB,CAClB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAnCD,8DAmCC;AAED,SAAgB,QAAQ,CAAC,QAAgB,EAAE,IAAY;IACrD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY;SACtB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,iBAAiB;SAC3C,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,oBAAoB;SACvC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAPD,4BAOC"}
1
+ {"version":3,"file":"controller-route.js","sourceRoot":"","sources":["../../src/router/controller-route.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ class Route extends base_route_1.BaseRoute {
15
15
  this._handler = _handler;
16
16
  }
17
17
  describe() {
18
- return this._handler.name || super.describe();
18
+ return `${super.describe()} => ${this._handler.name || this._handler.toString()}`;
19
19
  }
20
20
  updateBindings(requestContext) {
21
21
  requestContext.bind(keys_1.RestBindings.OPERATION_SPEC_CURRENT).to(this.spec);
@@ -1 +1 @@
1
- {"version":3,"file":"handler-route.js","sourceRoot":"","sources":["../../src/router/handler-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAqE;AAErE,kCAAqC;AAErC,6CAAoD;AAEpD,MAAa,KAAM,SAAQ,sBAAS;IAClC,YACE,IAAY,EACZ,IAAY,EACI,IAAqB,EAClB,QAAkB;QAErC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAiB;QAClB,aAAQ,GAAR,QAAQ,CAAU;IAGvC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,cAAc,CAAC,cAAuB;QACpC,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAuB,EACvB,IAAmB;QAEnB,uEAAuE;QACvE,uCAAuC;QACvC,OAAO,mCAA4B,CACjC,cAAc,EACd,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,EAAC,MAAM,EAAE,IAAI,wBAAW,CAAC,IAAI,CAAC,EAAC,CAChC,CAAC;IACJ,CAAC;CACF;AAhCD,sBAgCC"}
1
+ {"version":3,"file":"handler-route.js","sourceRoot":"","sources":["../../src/router/handler-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAqE;AAErE,kCAAqC;AAErC,6CAAoD;AAEpD,MAAa,KAAM,SAAQ,sBAAS;IAClC,YACE,IAAY,EACZ,IAAY,EACI,IAAqB,EAClB,QAAkB;QAErC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAiB;QAClB,aAAQ,GAAR,QAAQ,CAAU;IAGvC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,OACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAC9C,EAAE,CAAC;IACL,CAAC;IAED,cAAc,CAAC,cAAuB;QACpC,cAAc,CAAC,IAAI,CAAC,mBAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAuB,EACvB,IAAmB;QAEnB,uEAAuE;QACvE,uCAAuC;QACvC,OAAO,mCAA4B,CACjC,cAAc,EACd,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,EAAC,MAAM,EAAE,IAAI,wBAAW,CAAC,IAAI,CAAC,EAAC,CAChC,CAAC;IACJ,CAAC;CACF;AAlCD,sBAkCC"}
@@ -29,7 +29,7 @@ class RedirectRoute {
29
29
  // no-op
30
30
  }
31
31
  describe() {
32
- return `RedirectRoute from "${this.sourcePath}" to "${this.targetLocation}"`;
32
+ return `Redirect: "${this.sourcePath}" => "${this.targetLocation}"`;
33
33
  }
34
34
  /**
35
35
  * type guard type checker for this class
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-route.js","sourceRoot":"","sources":["../../src/router/redirect-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAOhE,MAAa,aAAa;IAcxB,YACkB,UAAkB,EAClB,cAAsB,EACtB,aAAqB,GAAG;QAFxB,eAAU,GAAV,UAAU,CAAQ;QAClB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAc;QAhB1C,oBAAoB;QACX,eAAU,GAAwB,EAAE,CAAC;QACrC,YAAO,GAAkB,EAAE,CAAC;QAErC,4BAA4B;QACnB,SAAI,GAAW,KAAK,CAAC;QAErB,SAAI,GAAoB;YAC/B,WAAW,EAAE,yBAAyB;YACtC,cAAc,EAAE,cAAc;YAC9B,SAAS,EAAE,EAAE;SACd,CAAC;QAOA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,EAAC,QAAQ,EAAiB,EAC1B,IAAmB;QAEnB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,cAAc,CAAC,cAA8B;QAC3C,QAAQ;IACV,CAAC;IAED,QAAQ;QACN,OAAO,uBAAuB,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,cAAc,GAAG,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,8DAA8D;IAC9D,MAAM,CAAC,eAAe,CAAC,GAAQ;;QAC7B,MAAM,eAAe,GAAG,GAAoB,CAAC;QAC7C,IACE,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,cAAc;YAC/B,OAAA,eAAe,CAAC,IAAI,0CAAE,WAAW,MAAK,yBAAyB,EAC/D;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApDD,sCAoDC"}
1
+ {"version":3,"file":"redirect-route.js","sourceRoot":"","sources":["../../src/router/redirect-route.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;AAOhE,MAAa,aAAa;IAcxB,YACkB,UAAkB,EAClB,cAAsB,EACtB,aAAqB,GAAG;QAFxB,eAAU,GAAV,UAAU,CAAQ;QAClB,mBAAc,GAAd,cAAc,CAAQ;QACtB,eAAU,GAAV,UAAU,CAAc;QAhB1C,oBAAoB;QACX,eAAU,GAAwB,EAAE,CAAC;QACrC,YAAO,GAAkB,EAAE,CAAC;QAErC,4BAA4B;QACnB,SAAI,GAAW,KAAK,CAAC;QAErB,SAAI,GAAoB;YAC/B,WAAW,EAAE,yBAAyB;YACtC,cAAc,EAAE,cAAc;YAC9B,SAAS,EAAE,EAAE;SACd,CAAC;QAOA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,EAAC,QAAQ,EAAiB,EAC1B,IAAmB;QAEnB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,cAAc,CAAC,cAA8B;QAC3C,QAAQ;IACV,CAAC;IAED,QAAQ;QACN,OAAO,cAAc,IAAI,CAAC,UAAU,SAAS,IAAI,CAAC,cAAc,GAAG,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,8DAA8D;IAC9D,MAAM,CAAC,eAAe,CAAC,GAAQ;;QAC7B,MAAM,eAAe,GAAG,GAAoB,CAAC;QAC7C,IACE,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,cAAc;YAC/B,OAAA,eAAe,CAAC,IAAI,0CAAE,WAAW,MAAK,yBAAyB,EAC/D;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApDD,sCAoDC"}
@@ -1,5 +1,5 @@
1
- import { ValueOrPromise } from '@loopback/core';
2
- import { InvokeMiddleware } from '@loopback/express';
1
+ import { Context, ValueOrPromise } from '@loopback/core';
2
+ import { InvokeMiddleware, InvokeMiddlewareOptions } from '@loopback/express';
3
3
  import { RequestContext } from './request-context';
4
4
  import { FindRoute, InvokeMethod, ParseParams, Reject, Send } from './types';
5
5
  /**
@@ -84,3 +84,85 @@ export declare class DefaultSequence implements SequenceHandler {
84
84
  */
85
85
  handle(context: RequestContext): Promise<void>;
86
86
  }
87
+ /**
88
+ * Built-in middleware groups for the REST sequence
89
+ */
90
+ export declare namespace RestMiddlewareGroups {
91
+ /**
92
+ * Invoke downstream middleware to get the result or catch errors so that it
93
+ * can produce the http response
94
+ */
95
+ const SEND_RESPONSE = "sendResponse";
96
+ /**
97
+ * Enforce CORS
98
+ */
99
+ const CORS = "cors";
100
+ /**
101
+ * Server OpenAPI specs
102
+ */
103
+ const API_SPEC = "apiSpec";
104
+ /**
105
+ * Default middleware group
106
+ */
107
+ const MIDDLEWARE = "middleware";
108
+ const DEFAULT = "middleware";
109
+ /**
110
+ * Find the route that can serve the request
111
+ */
112
+ const FIND_ROUTE = "findRoute";
113
+ /**
114
+ * Perform authentication
115
+ */
116
+ const AUTHENTICATION = "authentication";
117
+ /**
118
+ * Parse the http request to extract parameter values for the operation
119
+ */
120
+ const PARSE_PARAMS = "parseParams";
121
+ /**
122
+ * Invoke the target controller method or handler function
123
+ */
124
+ const INVOKE_METHOD = "invokeMethod";
125
+ }
126
+ /**
127
+ * A sequence implementation using middleware chains
128
+ */
129
+ export declare class MiddlewareSequence implements SequenceHandler {
130
+ readonly invokeMiddleware: InvokeMiddleware;
131
+ readonly options: InvokeMiddlewareOptions;
132
+ private middlewareView;
133
+ static defaultOptions: InvokeMiddlewareOptions;
134
+ /**
135
+ * Constructor: Injects `InvokeMiddleware` and `InvokeMiddlewareOptions`
136
+ *
137
+ * @param invokeMiddleware - invoker for registered middleware in a chain.
138
+ * To be injected via RestBindings.INVOKE_MIDDLEWARE_SERVICE.
139
+ */
140
+ constructor(context: Context, invokeMiddleware: InvokeMiddleware, options?: InvokeMiddlewareOptions);
141
+ /**
142
+ * Runs the default sequence. Given a handler context (request and response),
143
+ * running the sequence will produce a response or an error.
144
+ *
145
+ * Default sequence executes these groups of middleware:
146
+ *
147
+ * - `cors`: Enforces `CORS`
148
+ * - `openApiSpec`: Serves OpenAPI specs
149
+ * - `findRoute`: Finds the appropriate controller method, swagger spec and
150
+ * args for invocation
151
+ * - `parseParams`: Parses HTTP request to get API argument list
152
+ * - `invokeMethod`: Invokes the API which is defined in the Application
153
+ * controller method
154
+ *
155
+ * In front of the groups above, we have a special middleware called
156
+ * `sendResponse`, which first invokes downstream middleware to get a result
157
+ * and handles the result or error respectively.
158
+ *
159
+ * - Writes the result from API into the HTTP response (if the HTTP response
160
+ * has not been produced yet by the middleware chain.
161
+ * - Catches error logs it using 'logError' if any of the above steps
162
+ * in the sequence fails with an error.
163
+ *
164
+ * @param context - The request context: HTTP request and response objects,
165
+ * per-request IoC container and more.
166
+ */
167
+ handle(context: RequestContext): Promise<void>;
168
+ }
package/dist/sequence.js CHANGED
@@ -3,12 +3,15 @@
3
3
  // Node module: @loopback/rest
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
+ var MiddlewareSequence_1;
6
7
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DefaultSequence = void 0;
8
+ exports.MiddlewareSequence = exports.RestMiddlewareGroups = exports.DefaultSequence = void 0;
8
9
  const tslib_1 = require("tslib");
9
- const debug = require('debug')('loopback:rest:sequence');
10
10
  const core_1 = require("@loopback/core");
11
+ const express_1 = require("@loopback/express");
12
+ const debug_1 = tslib_1.__importDefault(require("debug"));
11
13
  const keys_1 = require("./keys");
14
+ const debug = debug_1.default('loopback:rest:sequence');
12
15
  const SequenceActions = keys_1.RestBindings.SequenceActions;
13
16
  /**
14
17
  * The default implementation of SequenceHandler.
@@ -106,4 +109,134 @@ DefaultSequence = tslib_1.__decorate([
106
109
  tslib_1.__metadata("design:paramtypes", [Function, Function, Function, Function, Function])
107
110
  ], DefaultSequence);
108
111
  exports.DefaultSequence = DefaultSequence;
112
+ /**
113
+ * Built-in middleware groups for the REST sequence
114
+ */
115
+ var RestMiddlewareGroups;
116
+ (function (RestMiddlewareGroups) {
117
+ /**
118
+ * Invoke downstream middleware to get the result or catch errors so that it
119
+ * can produce the http response
120
+ */
121
+ RestMiddlewareGroups.SEND_RESPONSE = 'sendResponse';
122
+ /**
123
+ * Enforce CORS
124
+ */
125
+ RestMiddlewareGroups.CORS = express_1.MiddlewareGroups.CORS;
126
+ /**
127
+ * Server OpenAPI specs
128
+ */
129
+ RestMiddlewareGroups.API_SPEC = express_1.MiddlewareGroups.API_SPEC;
130
+ /**
131
+ * Default middleware group
132
+ */
133
+ RestMiddlewareGroups.MIDDLEWARE = express_1.MiddlewareGroups.MIDDLEWARE;
134
+ RestMiddlewareGroups.DEFAULT = RestMiddlewareGroups.MIDDLEWARE;
135
+ /**
136
+ * Find the route that can serve the request
137
+ */
138
+ RestMiddlewareGroups.FIND_ROUTE = 'findRoute';
139
+ /**
140
+ * Perform authentication
141
+ */
142
+ RestMiddlewareGroups.AUTHENTICATION = 'authentication';
143
+ /**
144
+ * Parse the http request to extract parameter values for the operation
145
+ */
146
+ RestMiddlewareGroups.PARSE_PARAMS = 'parseParams';
147
+ /**
148
+ * Invoke the target controller method or handler function
149
+ */
150
+ RestMiddlewareGroups.INVOKE_METHOD = 'invokeMethod';
151
+ })(RestMiddlewareGroups = exports.RestMiddlewareGroups || (exports.RestMiddlewareGroups = {}));
152
+ /**
153
+ * A sequence implementation using middleware chains
154
+ */
155
+ let MiddlewareSequence = MiddlewareSequence_1 = class MiddlewareSequence {
156
+ /**
157
+ * Constructor: Injects `InvokeMiddleware` and `InvokeMiddlewareOptions`
158
+ *
159
+ * @param invokeMiddleware - invoker for registered middleware in a chain.
160
+ * To be injected via RestBindings.INVOKE_MIDDLEWARE_SERVICE.
161
+ */
162
+ constructor(context, invokeMiddleware, options = MiddlewareSequence_1.defaultOptions) {
163
+ this.invokeMiddleware = invokeMiddleware;
164
+ this.options = options;
165
+ this.middlewareView = new express_1.MiddlewareView(context, options);
166
+ debug('Discovered middleware', this.middlewareView.middlewareBindingKeys);
167
+ }
168
+ /**
169
+ * Runs the default sequence. Given a handler context (request and response),
170
+ * running the sequence will produce a response or an error.
171
+ *
172
+ * Default sequence executes these groups of middleware:
173
+ *
174
+ * - `cors`: Enforces `CORS`
175
+ * - `openApiSpec`: Serves OpenAPI specs
176
+ * - `findRoute`: Finds the appropriate controller method, swagger spec and
177
+ * args for invocation
178
+ * - `parseParams`: Parses HTTP request to get API argument list
179
+ * - `invokeMethod`: Invokes the API which is defined in the Application
180
+ * controller method
181
+ *
182
+ * In front of the groups above, we have a special middleware called
183
+ * `sendResponse`, which first invokes downstream middleware to get a result
184
+ * and handles the result or error respectively.
185
+ *
186
+ * - Writes the result from API into the HTTP response (if the HTTP response
187
+ * has not been produced yet by the middleware chain.
188
+ * - Catches error logs it using 'logError' if any of the above steps
189
+ * in the sequence fails with an error.
190
+ *
191
+ * @param context - The request context: HTTP request and response objects,
192
+ * per-request IoC container and more.
193
+ */
194
+ async handle(context) {
195
+ debug('Invoking middleware chain %s with groups %s', this.options.chain, this.options.orderedGroups);
196
+ const options = {
197
+ middlewareList: this.middlewareView.middlewareBindingKeys,
198
+ validate: MiddlewareSequence_1.defaultOptions.validate,
199
+ ...this.options,
200
+ };
201
+ await this.invokeMiddleware(context, options);
202
+ }
203
+ };
204
+ MiddlewareSequence.defaultOptions = {
205
+ chain: keys_1.RestTags.REST_MIDDLEWARE_CHAIN,
206
+ orderedGroups: [
207
+ // Please note that middleware is cascading. The `sendResponse` is
208
+ // added first to invoke downstream middleware to get the result or
209
+ // catch errors so that it can produce the http response.
210
+ RestMiddlewareGroups.SEND_RESPONSE,
211
+ RestMiddlewareGroups.CORS,
212
+ RestMiddlewareGroups.API_SPEC,
213
+ RestMiddlewareGroups.MIDDLEWARE,
214
+ RestMiddlewareGroups.FIND_ROUTE,
215
+ // authentication depends on the route
216
+ RestMiddlewareGroups.AUTHENTICATION,
217
+ RestMiddlewareGroups.PARSE_PARAMS,
218
+ RestMiddlewareGroups.INVOKE_METHOD,
219
+ ],
220
+ /**
221
+ * Reports an error if there are middleware groups are unreachable as they
222
+ * are ordered after the `invokeMethod` group.
223
+ */
224
+ validate: groups => {
225
+ const index = groups.indexOf(RestMiddlewareGroups.INVOKE_METHOD);
226
+ if (index !== -1) {
227
+ const unreachableGroups = groups.slice(index + 1);
228
+ if (unreachableGroups.length > 0) {
229
+ throw new Error(`Middleware groups "${unreachableGroups.join(',')}" are not invoked as they are ordered after "${RestMiddlewareGroups.INVOKE_METHOD}"`);
230
+ }
231
+ }
232
+ },
233
+ };
234
+ MiddlewareSequence = MiddlewareSequence_1 = tslib_1.__decorate([
235
+ core_1.bind({ scope: core_1.BindingScope.SINGLETON }),
236
+ tslib_1.__param(0, core_1.inject.context()),
237
+ tslib_1.__param(1, core_1.inject(keys_1.RestBindings.INVOKE_MIDDLEWARE_SERVICE)),
238
+ tslib_1.__param(2, core_1.config()),
239
+ tslib_1.__metadata("design:paramtypes", [core_1.Context, Function, Object])
240
+ ], MiddlewareSequence);
241
+ exports.MiddlewareSequence = MiddlewareSequence;
109
242
  //# sourceMappingURL=sequence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC;AACzD,yCAAsD;AAEtD,iCAAoC;AAIpC,MAAM,eAAe,GAAG,mBAAY,CAAC,eAAe,CAAC;AAyBrD;;;;;;;;;;;;;;;;;GAiBG;AACH,IAAa,eAAe,GAA5B,MAAa,eAAe;IAQ1B;;;;;;;;;;;;;;OAcG;IACH,YACgD,SAAoB,EAClB,WAAwB,EACvB,MAAoB,EAChC,IAAU,EACR,MAAc;QAJP,cAAS,GAAT,SAAS,CAAW;QAClB,gBAAW,GAAX,WAAW,CAAa;QACvB,WAAM,GAAN,MAAM,CAAc;QAChC,SAAI,GAAJ,IAAI,CAAM;QACR,WAAM,GAAN,MAAM,CAAQ;QA3BvD;;;WAGG;QAEO,qBAAgB,GAAqB,GAAG,EAAE,CAAC,KAAK,CAAC;IAuBxD,CAAC;IAEJ;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,MAAM,CAAC,OAAuB;QAClC,IAAI;YACF,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;YACpC,uCAAuC;YACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,QAAQ,EAAE;gBACZ,qDAAqD;gBACrD,OAAO;aACR;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE9C,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC7B;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC7B;IACH,CAAC;CACF,CAAA;AA7DC;IADC,aAAM,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;yDACD;AANhD,eAAe;IAwBvB,mBAAA,aAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IAClC,mBAAA,aAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IACpC,mBAAA,aAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;IACrC,mBAAA,aAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC5B,mBAAA,aAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;;GA5BtB,eAAe,CAmE3B;AAnEY,0CAAe"}
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -13,7 +13,7 @@ export * from '@loopback/express';
13
13
  */
14
14
  export declare type FindRoute = (request: Request) => ResolvedRoute;
15
15
  /**
16
- *
16
+ * A function to parse OpenAPI operation parameters for a given route
17
17
  */
18
18
  export declare type ParseParams = (request: Request, route: ResolvedRoute) => Promise<OperationArgs>;
19
19
  /**
@@ -80,17 +80,21 @@ export declare type AjvFormat = FormatDefinition & {
80
80
  /**
81
81
  * Options for any value validation using AJV
82
82
  */
83
- export interface ValueValidationOptions extends RequestBodyValidationOptions {
83
+ export interface ValueValidationOptions extends ValidationOptions {
84
84
  /**
85
85
  * Where the data comes from. It can be 'body', 'path', 'header',
86
86
  * 'query', 'cookie', etc...
87
87
  */
88
88
  source?: string;
89
+ /**
90
+ * Parameter name, as provided in `ParameterObject#name` property.
91
+ */
92
+ name?: string;
89
93
  }
90
94
  /**
91
95
  * Options for request body validation using AJV
92
96
  */
93
- export interface RequestBodyValidationOptions extends ajv.Options {
97
+ export interface ValidationOptions extends ajv.Options {
94
98
  /**
95
99
  * Custom cache for compiled schemas by AJV. This setting makes it possible
96
100
  * to skip the default cache.
@@ -148,7 +152,7 @@ export interface RequestBodyParserOptions extends Options {
148
152
  * This setting is global for all request body parsers and it cannot be
149
153
  * overridden inside parser specific properties such as `json` or `text`.
150
154
  */
151
- validation?: RequestBodyValidationOptions;
155
+ validation?: ValidationOptions;
152
156
  /**
153
157
  * Common options for all parsers
154
158
  */
@@ -186,3 +190,4 @@ export interface Session {
186
190
  export interface RequestWithSession extends Request {
187
191
  session: Session;
188
192
  }
193
+ export declare type RequestBodyValidationOptions = ValidationOptions;
@@ -1,11 +1,12 @@
1
1
  import { Provider } from '@loopback/core';
2
- import { AjvFactory, RequestBodyValidationOptions } from '../types';
2
+ import { AjvFactory, ValidationOptions } from '../types';
3
+ export declare const DEFAULT_AJV_VALIDATION_OPTIONS: ValidationOptions;
3
4
  /**
4
5
  * A provider class that instantiate an AJV instance
5
6
  */
6
7
  export declare class AjvFactoryProvider implements Provider<AjvFactory> {
7
8
  private options;
8
- constructor(options?: RequestBodyValidationOptions);
9
+ constructor(options?: ValidationOptions);
9
10
  private keywords;
10
11
  private formats;
11
12
  value(): AjvFactory;
@@ -4,7 +4,7 @@
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.AjvFactoryProvider = void 0;
7
+ exports.AjvFactoryProvider = exports.DEFAULT_AJV_VALIDATION_OPTIONS = void 0;
8
8
  const tslib_1 = require("tslib");
9
9
  const core_1 = require("@loopback/core");
10
10
  const ajv_1 = tslib_1.__importDefault(require("ajv"));
@@ -13,11 +13,16 @@ const keys_1 = require("../keys");
13
13
  const debug = debug_1.default('loopback:rest:ajv');
14
14
  const ajvKeywords = require('ajv-keywords');
15
15
  const ajvErrors = require('ajv-errors');
16
+ exports.DEFAULT_AJV_VALIDATION_OPTIONS = {
17
+ $data: true,
18
+ ajvKeywords: true,
19
+ ajvErrors: true,
20
+ };
16
21
  /**
17
22
  * A provider class that instantiate an AJV instance
18
23
  */
19
24
  let AjvFactoryProvider = class AjvFactoryProvider {
20
- constructor(options = {}) {
25
+ constructor(options = exports.DEFAULT_AJV_VALIDATION_OPTIONS) {
21
26
  this.options = options;
22
27
  }
23
28
  value() {
@@ -1 +1 @@
1
- {"version":3,"file":"ajv-factory.provider.js","sourceRoot":"","sources":["../../src/validation/ajv-factory.provider.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,yCAMwB;AACxB,sDAA0B;AAC1B,0DAAgC;AAChC,kCAA+C;AAO/C,MAAM,KAAK,GAAG,eAAW,CAAC,mBAAmB,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAExC;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YAKU,UAAwC,EAAE;QAA1C,YAAO,GAAP,OAAO,CAAmC;IACjD,CAAC;IAQJ,KAAK;QACH,OAAO,OAAO,CAAC,EAAE;;YACf,IAAI,iBAAiB,GAAiC;gBACpD,GAAG,IAAI,CAAC,OAAO;gBACf,GAAG,OAAO;aACX,CAAC;YACF,iDAAiD;YACjD,iBAAiB,GAAG;gBAClB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI;gBAClB,sEAAsE;gBACtE,QAAQ,EAAE,IAAI;gBACd,mCAAmC;gBACnC,cAAc,EAAE,CAAC,QAAQ,CAAC;gBAC1B,GAAG,iBAAiB;aACrB,CAAC;YAEF,KAAK,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,aAAO,CAAC,iBAAiB,CAAC,CAAC;YAE/C,IAAI,iBAAiB,CAAC,WAAW,KAAK,IAAI,EAAE;gBAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;aACtB;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;gBACvD,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;aACrD;YAED,IAAI,iBAAiB,CAAC,SAAS,KAAK,IAAI,EAAE;gBACxC,SAAS,CAAC,OAAO,CAAC,CAAC;aACpB;iBAAM,IAAI,OAAA,iBAAiB,CAAC,SAAS,0CAAE,WAAW,MAAK,MAAM,EAAE;gBAC9D,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;aACjD;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC9B,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC7C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC5B,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC3C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;aACJ;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AArDC;IADC,aAAM,CAAC,kBAAW,CAAC,eAAQ,CAAC,WAAW,CAAC,CAAC;;oDACX;AAG/B;IADC,aAAM,CAAC,kBAAW,CAAC,eAAQ,CAAC,UAAU,CAAC,CAAC;;mDACZ;AAblB,kBAAkB;IAD9B,WAAI,CAAC,EAAC,KAAK,EAAE,mBAAY,CAAC,SAAS,EAAC,CAAC;IAGjC,mBAAA,aAAM,CACL,mBAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC,YAAY,CAAC,EACnE,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAA;;GALQ,kBAAkB,CA+D9B;AA/DY,gDAAkB"}
1
+ {"version":3,"file":"ajv-factory.provider.js","sourceRoot":"","sources":["../../src/validation/ajv-factory.provider.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ReferenceObject, RequestBodyObject, SchemaObject, SchemasObject } from '@loopback/openapi-v3';
2
2
  import { RequestBody } from '..';
3
- import { RequestBodyValidationOptions, ValueValidationOptions } from '../types';
3
+ import { ValidationOptions, ValueValidationOptions } from '../types';
4
4
  /**
5
5
  * Check whether the request body is valid according to the provided OpenAPI schema.
6
6
  * The JSON schema is generated from the OpenAPI schema which is typically defined
@@ -11,7 +11,7 @@ import { RequestBodyValidationOptions, ValueValidationOptions } from '../types';
11
11
  * @param globalSchemas - The referenced schemas generated from `OpenAPISpec.components.schemas`.
12
12
  * @param options - Request body validation options for AJV
13
13
  */
14
- export declare function validateRequestBody(body: RequestBody, requestBodySpec?: RequestBodyObject, globalSchemas?: SchemasObject, options?: RequestBodyValidationOptions): Promise<void>;
14
+ export declare function validateRequestBody(body: RequestBody, requestBodySpec?: RequestBodyObject, globalSchemas?: SchemasObject, options?: ValidationOptions): Promise<void>;
15
15
  /**
16
16
  * Validate the request body data against JSON schema.
17
17
  * @param body - The request body data.
@@ -8,7 +8,6 @@ exports.validateValueAgainstSchema = exports.validateRequestBody = void 0;
8
8
  const tslib_1 = require("tslib");
9
9
  const openapi_v3_1 = require("@loopback/openapi-v3");
10
10
  const debug_1 = tslib_1.__importDefault(require("debug"));
11
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
12
11
  const util_1 = tslib_1.__importDefault(require("util"));
13
12
  const __1 = require("..");
14
13
  const ajv_factory_provider_1 = require("./ajv-factory.provider");
@@ -24,7 +23,7 @@ const debug = debug_1.default('loopback:rest:validation');
24
23
  * @param globalSchemas - The referenced schemas generated from `OpenAPISpec.components.schemas`.
25
24
  * @param options - Request body validation options for AJV
26
25
  */
27
- async function validateRequestBody(body, requestBodySpec, globalSchemas = {}, options = {}) {
26
+ async function validateRequestBody(body, requestBodySpec, globalSchemas = {}, options = ajv_factory_provider_1.DEFAULT_AJV_VALIDATION_OPTIONS) {
28
27
  const required = requestBodySpec === null || requestBodySpec === void 0 ? void 0 : requestBodySpec.required;
29
28
  if (required && body.value == null) {
30
29
  const err = Object.assign(new __1.HttpErrors.BadRequest('Request body is required'), {
@@ -74,7 +73,7 @@ const DEFAULT_COMPILED_SCHEMA_CACHE = new WeakMap();
74
73
  * Build a cache key for AJV options
75
74
  * @param options - Request body validation options
76
75
  */
77
- function getKeyForOptions(options) {
76
+ function getKeyForOptions(options = ajv_factory_provider_1.DEFAULT_AJV_VALIDATION_OPTIONS) {
78
77
  const ajvOptions = {};
79
78
  // Sort keys for options
80
79
  const keys = Object.keys(options).sort();
@@ -95,7 +94,7 @@ function getKeyForOptions(options) {
95
94
  async function validateValueAgainstSchema(
96
95
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
96
  value, schema, globalSchemas = {}, options = {}) {
98
- var _a, _b;
97
+ var _a, _b, _c;
99
98
  let validate;
100
99
  const cache = (_a = options.compiledSchemaCache) !== null && _a !== void 0 ? _a : DEFAULT_COMPILED_SCHEMA_CACHE;
101
100
  const key = getKeyForOptions(options);
@@ -133,24 +132,23 @@ value, schema, globalSchemas = {}, options = {}) {
133
132
  }
134
133
  // Throw invalid request body error
135
134
  if (options.source === 'body') {
136
- const error = __1.RestHttpErrors.invalidRequestBody();
137
- addErrorDetails(error, validationErrors);
135
+ const error = __1.RestHttpErrors.invalidRequestBody(buildErrorDetails(validationErrors));
138
136
  throw error;
139
137
  }
140
138
  // Throw invalid value error
141
- const error = new __1.HttpErrors.BadRequest('Invalid value.');
142
- addErrorDetails(error, validationErrors);
139
+ const error = __1.RestHttpErrors.invalidData(value, (_c = options.name) !== null && _c !== void 0 ? _c : '(unknown)', {
140
+ details: buildErrorDetails(validationErrors),
141
+ });
143
142
  throw error;
144
143
  }
145
144
  exports.validateValueAgainstSchema = validateValueAgainstSchema;
146
- function addErrorDetails(
147
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
- error, validationErrors) {
149
- error.details = lodash_1.default.map(validationErrors, e => {
145
+ function buildErrorDetails(validationErrors) {
146
+ return validationErrors.map((e) => {
147
+ var _a;
150
148
  return {
151
149
  path: e.dataPath,
152
150
  code: e.keyword,
153
- message: e.message,
151
+ message: (_a = e.message) !== null && _a !== void 0 ? _a : `must pass validation rule ${e.keyword}`,
154
152
  info: e.params,
155
153
  };
156
154
  });
@@ -1 +1 @@
1
- {"version":3,"file":"request-body.validator.js","sourceRoot":"","sources":["../../src/validation/request-body.validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request-body.validator.js","sourceRoot":"","sources":["../../src/validation/request-body.validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopback/rest",
3
- "version": "5.2.0",
3
+ "version": "6.2.0",
4
4
  "description": "Expose controllers as REST endpoints and route REST API requests to controller methods",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,22 +24,22 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@loopback/core": "^2.9.1",
28
- "@loopback/express": "^1.2.5",
29
- "@loopback/http-server": "^2.1.9",
30
- "@loopback/openapi-v3": "^3.4.5",
31
- "@openapi-contrib/openapi-schema-to-json-schema": "^3.0.0",
27
+ "@loopback/core": "^2.9.5",
28
+ "@loopback/express": "^1.4.1",
29
+ "@loopback/http-server": "^2.2.0",
30
+ "@loopback/openapi-v3": "^3.4.9",
31
+ "@openapi-contrib/openapi-schema-to-json-schema": "^3.0.4",
32
32
  "@types/body-parser": "^1.19.0",
33
- "@types/cors": "^2.8.6",
34
- "@types/express": "^4.17.6",
35
- "@types/express-serve-static-core": "^4.17.8",
36
- "@types/http-errors": "^1.6.3",
33
+ "@types/cors": "^2.8.7",
34
+ "@types/express": "^4.17.7",
35
+ "@types/express-serve-static-core": "^4.17.9",
36
+ "@types/http-errors": "^1.8.0",
37
37
  "@types/on-finished": "^2.3.1",
38
- "@types/serve-static": "1.13.4",
38
+ "@types/serve-static": "1.13.5",
39
39
  "@types/type-is": "^1.6.3",
40
- "ajv": "^6.12.2",
40
+ "ajv": "^6.12.4",
41
41
  "ajv-errors": "^1.0.1",
42
- "ajv-keywords": "^3.5.0",
42
+ "ajv-keywords": "^3.5.2",
43
43
  "body-parser": "^1.19.0",
44
44
  "cors": "^2.8.5",
45
45
  "debug": "^4.1.1",
@@ -47,29 +47,29 @@
47
47
  "http-errors": "^1.8.0",
48
48
  "js-yaml": "^3.14.0",
49
49
  "json-schema-compare": "^0.2.2",
50
- "lodash": "^4.17.15",
50
+ "lodash": "^4.17.20",
51
51
  "on-finished": "^2.3.0",
52
52
  "path-to-regexp": "^6.1.0",
53
53
  "qs": "^6.9.4",
54
54
  "strong-error-handler": "^3.5.0",
55
- "tslib": "^2.0.0",
55
+ "tslib": "^2.0.1",
56
56
  "type-is": "^1.6.18",
57
57
  "validator": "^13.1.1"
58
58
  },
59
59
  "devDependencies": {
60
- "@loopback/build": "^6.1.0",
61
- "@loopback/eslint-config": "^8.0.3",
62
- "@loopback/openapi-spec-builder": "^2.1.9",
63
- "@loopback/repository": "^2.9.0",
64
- "@loopback/testlab": "^3.2.0",
60
+ "@loopback/build": "^6.2.2",
61
+ "@loopback/eslint-config": "^9.0.2",
62
+ "@loopback/openapi-spec-builder": "^2.1.13",
63
+ "@loopback/repository": "^2.11.2",
64
+ "@loopback/testlab": "^3.2.4",
65
65
  "@types/debug": "^4.1.5",
66
66
  "@types/js-yaml": "^3.12.5",
67
67
  "@types/json-schema-compare": "^0.2.0",
68
- "@types/lodash": "^4.14.157",
69
- "@types/multer": "^1.4.3",
70
- "@types/node": "^10.17.26",
68
+ "@types/lodash": "^4.14.160",
69
+ "@types/multer": "^1.4.4",
70
+ "@types/node": "^10.17.28",
71
71
  "@types/on-finished": "^2.3.1",
72
- "@types/qs": "^6.9.3",
72
+ "@types/qs": "^6.9.4",
73
73
  "multer": "^1.4.2"
74
74
  },
75
75
  "files": [
@@ -83,5 +83,5 @@
83
83
  "url": "https://github.com/strongloop/loopback-next.git",
84
84
  "directory": "packages/rest"
85
85
  },
86
- "gitHead": "b89db3d3b8be6a36e63e91c2331d217fda7538de"
86
+ "gitHead": "a3f54273814de63819e0d8bc86509f8a737800bb"
87
87
  }
@@ -61,15 +61,18 @@ export class RequestBodyParser {
61
61
  if (customParser) {
62
62
  // Invoke the custom parser
63
63
  const body = await this._invokeCustomParser(customParser, request);
64
+ debug('Parsed request body', body);
64
65
  return Object.assign(requestBody, body);
65
66
  } else {
66
67
  const parser = this._findParser(matchedMediaType);
67
68
  if (parser) {
68
69
  const body = await parser.parse(request);
70
+ debug('Parsed request body', body);
69
71
  return Object.assign(requestBody, body);
70
72
  }
71
73
  }
72
74
  } catch (err) {
75
+ debug('Request body parsing error', err);
73
76
  throw normalizeParsingError(err);
74
77
  }
75
78