@loopback/rest 9.3.0 → 10.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.
Files changed (105) hide show
  1. package/README.md +4 -4
  2. package/dist/body-parsers/body-parser.helpers.js +2 -2
  3. package/dist/body-parsers/body-parser.helpers.js.map +1 -1
  4. package/dist/body-parsers/body-parser.js +12 -12
  5. package/dist/body-parsers/body-parser.js.map +1 -1
  6. package/dist/body-parsers/body-parser.json.js +8 -8
  7. package/dist/body-parsers/body-parser.json.js.map +1 -1
  8. package/dist/body-parsers/body-parser.raw.js +7 -7
  9. package/dist/body-parsers/body-parser.raw.js.map +1 -1
  10. package/dist/body-parsers/body-parser.text.js +7 -7
  11. package/dist/body-parsers/body-parser.text.js.map +1 -1
  12. package/dist/body-parsers/body-parser.urlencoded.js +7 -7
  13. package/dist/body-parsers/body-parser.urlencoded.js.map +1 -1
  14. package/dist/body-parsers/index.js +8 -8
  15. package/dist/body-parsers/index.js.map +1 -1
  16. package/dist/coercion/coerce-parameter.js +14 -14
  17. package/dist/coercion/coerce-parameter.js.map +1 -1
  18. package/dist/coercion/utils.js +2 -2
  19. package/dist/coercion/utils.js.map +1 -1
  20. package/dist/index.js +19 -19
  21. package/dist/index.js.map +1 -1
  22. package/dist/keys.d.ts +1 -1
  23. package/dist/keys.js +1 -1
  24. package/dist/keys.js.map +1 -1
  25. package/dist/parser.js +8 -8
  26. package/dist/parser.js.map +1 -1
  27. package/dist/providers/find-route.provider.js +10 -10
  28. package/dist/providers/find-route.provider.js.map +1 -1
  29. package/dist/providers/index.js +6 -6
  30. package/dist/providers/index.js.map +1 -1
  31. package/dist/providers/invoke-method.provider.js +9 -9
  32. package/dist/providers/invoke-method.provider.js.map +1 -1
  33. package/dist/providers/log-error.provider.js +2 -2
  34. package/dist/providers/log-error.provider.js.map +1 -1
  35. package/dist/providers/parse-params.provider.js +13 -13
  36. package/dist/providers/parse-params.provider.js.map +1 -1
  37. package/dist/providers/reject.provider.js +9 -9
  38. package/dist/providers/reject.provider.js.map +1 -1
  39. package/dist/providers/send.provider.js +4 -4
  40. package/dist/providers/send.provider.js.map +1 -1
  41. package/dist/request-context.js.map +1 -1
  42. package/dist/rest-http-error.js +1 -1
  43. package/dist/rest-http-error.js.map +1 -1
  44. package/dist/rest.application.js +1 -1
  45. package/dist/rest.application.js.map +1 -1
  46. package/dist/rest.component.js +16 -16
  47. package/dist/rest.component.js.map +1 -1
  48. package/dist/rest.server.d.ts +1 -1
  49. package/dist/rest.server.js +33 -33
  50. package/dist/rest.server.js.map +1 -1
  51. package/dist/router/controller-route.js +8 -8
  52. package/dist/router/controller-route.js.map +1 -1
  53. package/dist/router/external-express-routes.js +5 -5
  54. package/dist/router/external-express-routes.js.map +1 -1
  55. package/dist/router/handler-route.js +1 -1
  56. package/dist/router/handler-route.js.map +1 -1
  57. package/dist/router/index.js +14 -14
  58. package/dist/router/index.js.map +1 -1
  59. package/dist/router/openapi-path.js +1 -1
  60. package/dist/router/openapi-path.js.map +1 -1
  61. package/dist/router/regexp-router.js +7 -7
  62. package/dist/router/regexp-router.js.map +1 -1
  63. package/dist/router/route-entry.d.ts +1 -1
  64. package/dist/router/route-sort.js +1 -1
  65. package/dist/router/route-sort.js.map +1 -1
  66. package/dist/router/router-base.js +2 -2
  67. package/dist/router/router-base.js.map +1 -1
  68. package/dist/router/routing-table.js +6 -6
  69. package/dist/router/routing-table.js.map +1 -1
  70. package/dist/router/trie-router.js +5 -5
  71. package/dist/router/trie-router.js.map +1 -1
  72. package/dist/router/trie.js +2 -2
  73. package/dist/router/trie.js.map +1 -1
  74. package/dist/sequence.js +18 -18
  75. package/dist/sequence.js.map +1 -1
  76. package/dist/spec-enhancers/consolidate.spec-enhancer.js +10 -10
  77. package/dist/spec-enhancers/consolidate.spec-enhancer.js.map +1 -1
  78. package/dist/spec-enhancers/info.spec-enhancer.js +7 -7
  79. package/dist/spec-enhancers/info.spec-enhancer.js.map +1 -1
  80. package/dist/types.d.ts +12 -17
  81. package/dist/types.js +1 -1
  82. package/dist/types.js.map +1 -1
  83. package/dist/validation/ajv-factory.provider.js +27 -36
  84. package/dist/validation/ajv-factory.provider.js.map +1 -1
  85. package/dist/validation/openapi-formats.d.ts +5 -5
  86. package/dist/validation/openapi-formats.js.map +1 -1
  87. package/dist/validation/request-body.validator.js +9 -9
  88. package/dist/validation/request-body.validator.js.map +1 -1
  89. package/dist/writer.js +1 -1
  90. package/dist/writer.js.map +1 -1
  91. package/package.json +34 -33
  92. package/src/body-parsers/body-parser.helpers.ts +1 -1
  93. package/src/coercion/utils.ts +2 -1
  94. package/src/keys.ts +13 -16
  95. package/src/parser.ts +2 -2
  96. package/src/request-context.ts +2 -1
  97. package/src/rest.server.ts +4 -3
  98. package/src/router/route-entry.ts +1 -1
  99. package/src/router/routing-table.ts +1 -1
  100. package/src/types.ts +19 -15
  101. package/src/validation/ajv-factory.provider.ts +14 -21
  102. package/src/validation/openapi-formats.ts +5 -5
  103. package/src/validation/request-body.validator.ts +14 -13
  104. package/src/writer.ts +2 -2
  105. package/CHANGELOG.md +0 -2207
@@ -10,7 +10,8 @@ import {
10
10
  SchemaObject,
11
11
  SchemasObject,
12
12
  } from '@loopback/openapi-v3';
13
- import ajv, {Ajv} from 'ajv';
13
+ import Ajv, {AsyncValidateFunction, ErrorObject} from 'ajv';
14
+ import {AnyValidateFunction, AsyncSchema} from 'ajv/dist/core';
14
15
  import debugModule from 'debug';
15
16
  import util from 'util';
16
17
  import {HttpErrors, RequestBody, RestHttpErrors} from '..';
@@ -131,12 +132,12 @@ export async function validateValueAgainstSchema(
131
132
  globalSchemas: SchemasObject = {},
132
133
  options: ValueValidationOptions = {},
133
134
  ) {
134
- let validate: ajv.ValidateFunction | undefined;
135
+ let validate: AnyValidateFunction | undefined;
135
136
 
136
137
  const cache = options.compiledSchemaCache ?? DEFAULT_COMPILED_SCHEMA_CACHE;
137
138
  const key = getKeyForOptions(options);
138
139
 
139
- let validatorMap: Map<string, ajv.ValidateFunction> | undefined;
140
+ let validatorMap: Map<string, AnyValidateFunction> | undefined;
140
141
  if (cache.has(schema)) {
141
142
  validatorMap = cache.get(schema)!;
142
143
  validate = validatorMap.get(key);
@@ -152,14 +153,14 @@ export async function validateValueAgainstSchema(
152
153
  cache.set(schema, validatorMap);
153
154
  }
154
155
 
155
- let validationErrors: ajv.ErrorObject[] = [];
156
+ let validationErrors: ErrorObject[] = [];
156
157
  try {
157
- const validationResult = await validate(value);
158
+ const validationResult = validate(value);
158
159
  debug(
159
160
  `Value from ${options.source} passed AJV validation.`,
160
161
  validationResult,
161
162
  );
162
- return validationResult;
163
+ return await validationResult;
163
164
  } catch (error) {
164
165
  validationErrors = error.errors;
165
166
  }
@@ -193,12 +194,12 @@ export async function validateValueAgainstSchema(
193
194
  }
194
195
 
195
196
  function buildErrorDetails(
196
- validationErrors: ajv.ErrorObject[],
197
+ validationErrors: ErrorObject[],
197
198
  ): RestHttpErrors.ValidationErrorDetails[] {
198
199
  return validationErrors.map(
199
- (e: ajv.ErrorObject): RestHttpErrors.ValidationErrorDetails => {
200
+ (e: ErrorObject): RestHttpErrors.ValidationErrorDetails => {
200
201
  return {
201
- path: e.dataPath,
202
+ path: e.instancePath,
202
203
  code: e.keyword,
203
204
  message: e.message ?? `must pass validation rule ${e.keyword}`,
204
205
  info: e.params,
@@ -217,18 +218,18 @@ function createValidator(
217
218
  schema: SchemaObject,
218
219
  globalSchemas: SchemasObject = {},
219
220
  ajvInst: Ajv,
220
- ): ajv.ValidateFunction {
221
+ ): AsyncValidateFunction {
221
222
  const jsonSchema = convertToJsonSchema(schema);
222
223
 
223
224
  // Clone global schemas to set `$async: true` flag
224
225
  const schemas: SchemasObject = {};
225
226
  for (const name in globalSchemas) {
226
- // See https://github.com/strongloop/loopback-next/issues/4939
227
+ // See https://github.com/loopbackio/loopback-next/issues/4939
227
228
  schemas[name] = {...globalSchemas[name], $async: true};
228
229
  }
229
- const schemaWithRef = {components: {schemas}, ...jsonSchema};
230
+ const schemaWithRef: AsyncSchema = {components: {schemas}, ...jsonSchema};
230
231
 
231
- // See https://ajv.js.org/#asynchronous-validation for async validation
232
+ // See https://js.org/#asynchronous-validation for async validation
232
233
  schemaWithRef.$async = true;
233
234
 
234
235
  return ajvInst.compile(schemaWithRef);
package/src/writer.ts CHANGED
@@ -3,8 +3,8 @@
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
- import {OperationRetval, Response} from './types';
7
6
  import {Readable} from 'stream';
7
+ import {OperationRetval, Response} from './types';
8
8
 
9
9
  /**
10
10
  * Writes the result from Application controller method
@@ -48,7 +48,7 @@ export function writeResultToResponse(
48
48
  response.setHeader('Content-Type', 'application/octet-stream');
49
49
  } else {
50
50
  // TODO(ritch) remove this, should be configurable
51
- // See https://github.com/strongloop/loopback-next/issues/436
51
+ // See https://github.com/loopbackio/loopback-next/issues/436
52
52
  response.setHeader('Content-Type', 'application/json');
53
53
  // TODO(bajtos) handle errors - JSON.stringify can throw
54
54
  result = JSON.stringify(result);