@loopback/openapi-v3 1.10.3 → 2.0.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 (58) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/dist/controller-spec.js +114 -35
  3. package/dist/controller-spec.js.map +1 -1
  4. package/dist/decorators/api.decorator.js +2 -2
  5. package/dist/decorators/api.decorator.js.map +1 -1
  6. package/dist/decorators/deprecated.decorator.d.ts +37 -0
  7. package/dist/decorators/deprecated.decorator.js +71 -0
  8. package/dist/decorators/deprecated.decorator.js.map +1 -0
  9. package/dist/decorators/index.d.ts +20 -0
  10. package/dist/decorators/index.js +24 -0
  11. package/dist/decorators/index.js.map +1 -1
  12. package/dist/decorators/operation.decorator.js +2 -2
  13. package/dist/decorators/operation.decorator.js.map +1 -1
  14. package/dist/decorators/parameter.decorator.js +13 -6
  15. package/dist/decorators/parameter.decorator.js.map +1 -1
  16. package/dist/decorators/request-body.decorator.js +3 -3
  17. package/dist/decorators/request-body.decorator.js.map +1 -1
  18. package/dist/decorators/tags.decorator.d.ts +1 -0
  19. package/dist/decorators/tags.decorator.js +33 -0
  20. package/dist/decorators/tags.decorator.js.map +1 -0
  21. package/dist/enhancers/index.d.ts +3 -0
  22. package/dist/enhancers/index.js +13 -0
  23. package/dist/enhancers/index.js.map +1 -0
  24. package/dist/enhancers/keys.d.ts +6 -0
  25. package/dist/enhancers/keys.js +12 -0
  26. package/dist/enhancers/keys.js.map +1 -0
  27. package/dist/enhancers/spec-enhancer.service.d.ts +73 -0
  28. package/dist/enhancers/spec-enhancer.service.js +135 -0
  29. package/dist/enhancers/spec-enhancer.service.js.map +1 -0
  30. package/dist/enhancers/types.d.ts +18 -0
  31. package/dist/enhancers/types.js +20 -0
  32. package/dist/enhancers/types.js.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/json-to-schema.js +9 -7
  37. package/dist/json-to-schema.js.map +1 -1
  38. package/dist/keys.d.ts +17 -1
  39. package/dist/keys.js +22 -10
  40. package/dist/keys.js.map +1 -1
  41. package/dist/types.d.ts +3 -0
  42. package/package.json +11 -10
  43. package/src/controller-spec.ts +134 -19
  44. package/src/decorators/api.decorator.ts +1 -1
  45. package/src/decorators/deprecated.decorator.ts +87 -0
  46. package/src/decorators/index.ts +30 -0
  47. package/src/decorators/operation.decorator.ts +1 -1
  48. package/src/decorators/parameter.decorator.ts +11 -6
  49. package/src/decorators/request-body.decorator.ts +1 -1
  50. package/src/decorators/tags.decorator.ts +46 -0
  51. package/src/enhancers/index.ts +8 -0
  52. package/src/enhancers/keys.ts +14 -0
  53. package/src/enhancers/spec-enhancer.service.ts +121 -0
  54. package/src/enhancers/types.ts +30 -0
  55. package/src/index.ts +1 -0
  56. package/src/json-to-schema.ts +13 -7
  57. package/src/keys.ts +33 -6
  58. package/src/types.ts +4 -0
@@ -0,0 +1,30 @@
1
+ // Copyright IBM Corp. 2019. All Rights Reserved.
2
+ // Node module: @loopback/openapi-v3
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {BindingTemplate, extensionFor} from '@loopback/core';
7
+ import {OpenApiSpec} from '../types';
8
+
9
+ /**
10
+ * Typically an extension point defines an interface as the contract for
11
+ * extensions to implement
12
+ */
13
+ export interface OASEnhancer {
14
+ name: string;
15
+ modifySpec(spec: OpenApiSpec): OpenApiSpec;
16
+ }
17
+
18
+ /**
19
+ * Name/id of the OAS enhancer extension point
20
+ */
21
+ export const OAS_ENHANCER_EXTENSION_POINT_NAME = 'oas-enhancer';
22
+
23
+ /**
24
+ * A binding template for spec contributor extensions
25
+ */
26
+ export const asSpecEnhancer: BindingTemplate = binding => {
27
+ extensionFor(OAS_ENHANCER_EXTENSION_POINT_NAME)(binding);
28
+ // is it ok to have a different namespace than the extension point name?
29
+ binding.tag({namespace: 'oas-enhancer'});
30
+ };
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@
6
6
  export * from '@loopback/repository-json-schema';
7
7
  export * from './controller-spec';
8
8
  export * from './decorators';
9
+ export * from './enhancers';
9
10
  export * from './filter-schema';
10
11
  export * from './json-to-schema';
11
12
  export * from './types';
@@ -56,13 +56,7 @@ export function jsonToSchemaObject(
56
56
  [converted]: false,
57
57
  };
58
58
  visited.set(json, result);
59
- const propsToIgnore = [
60
- 'anyOf',
61
- 'oneOf',
62
- 'additionalItems',
63
- 'defaultProperties',
64
- 'typeof',
65
- ];
59
+ const propsToIgnore = ['additionalItems', 'defaultProperties', 'typeof'];
66
60
  for (const property in json) {
67
61
  if (propsToIgnore.includes(property)) {
68
62
  continue;
@@ -83,6 +77,18 @@ export function jsonToSchemaObject(
83
77
  );
84
78
  break;
85
79
  }
80
+ case 'anyOf': {
81
+ result.anyOf = _.map(json.anyOf, item =>
82
+ jsonToSchemaObject(item as JsonSchema, visited),
83
+ );
84
+ break;
85
+ }
86
+ case 'oneOf': {
87
+ result.oneOf = _.map(json.oneOf, item =>
88
+ jsonToSchemaObject(item as JsonSchema, visited),
89
+ );
90
+ break;
91
+ }
86
92
  case 'definitions': {
87
93
  result.definitions = _.mapValues(json.definitions, def =>
88
94
  jsonToSchemaObject(jsonOrBooleanToJSON(def), visited),
package/src/keys.ts CHANGED
@@ -3,15 +3,10 @@
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 {MetadataAccessor} from '@loopback/context';
6
+ import {MetadataAccessor} from '@loopback/core';
7
7
  import {ControllerSpec, RestEndpoint} from './controller-spec';
8
8
  import {ParameterObject, RequestBodyObject} from './types';
9
9
 
10
- // Copyright IBM Corp. 2018. All Rights Reserved.
11
- // Node module: @loopback/openapi-v3
12
- // This file is licensed under the MIT License.
13
- // License text available at https://opensource.org/licenses/MIT
14
-
15
10
  export namespace OAI3Keys {
16
11
  /**
17
12
  * Metadata key used to set or retrieve `@operation` metadata.
@@ -21,6 +16,22 @@ export namespace OAI3Keys {
21
16
  MethodDecorator
22
17
  >('openapi-v3:methods');
23
18
 
19
+ /**
20
+ * Metadata key used to set or retrieve `@deprecated` metadata on a method.
21
+ */
22
+ export const DEPRECATED_METHOD_KEY = MetadataAccessor.create<
23
+ boolean,
24
+ MethodDecorator
25
+ >('openapi-v3:methods:deprecated');
26
+
27
+ /**
28
+ * Metadata key used to set or retrieve `@deprecated` metadata on a class
29
+ */
30
+ export const DEPRECATED_CLASS_KEY = MetadataAccessor.create<
31
+ boolean,
32
+ ClassDecorator
33
+ >('openapi-v3:class:deprecated');
34
+
24
35
  /**
25
36
  * Metadata key used to set or retrieve `param` decorator metadata
26
37
  */
@@ -29,6 +40,22 @@ export namespace OAI3Keys {
29
40
  ParameterDecorator
30
41
  >('openapi-v3:parameters');
31
42
 
43
+ /**
44
+ * Metadata key used to set or retrieve `@deprecated` metadata on a method.
45
+ */
46
+ export const TAGS_METHOD_KEY = MetadataAccessor.create<
47
+ string[],
48
+ MethodDecorator
49
+ >('openapi-v3:methods:tags');
50
+
51
+ /**
52
+ * Metadata key used to set or retrieve `@deprecated` metadata on a class
53
+ */
54
+ export const TAGS_CLASS_KEY = MetadataAccessor.create<
55
+ string[],
56
+ ClassDecorator
57
+ >('openapi-v3:class:tags');
58
+
32
59
  /**
33
60
  * Metadata key used to set or retrieve `@api` metadata
34
61
  */
package/src/types.ts CHANGED
@@ -28,3 +28,7 @@ export function createEmptyApiSpec(): OpenApiSpec {
28
28
  servers: [{url: '/'}],
29
29
  };
30
30
  }
31
+
32
+ export interface TagsDecoratorMetadata {
33
+ tags: string[];
34
+ }