@opra/common 1.0.0-alpha.3 → 1.0.0-alpha.30

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 (183) hide show
  1. package/browser.js +6036 -5788
  2. package/cjs/document/api-document.js +12 -0
  3. package/cjs/document/common/api-base.js +1 -0
  4. package/cjs/document/common/document-element.js +5 -1
  5. package/cjs/document/data-type/api-field.js +12 -6
  6. package/cjs/document/data-type/complex-type-base.js +10 -3
  7. package/cjs/document/data-type/complex-type.js +6 -2
  8. package/cjs/document/data-type/data-type.js +2 -1
  9. package/cjs/document/data-type/enum-type.js +5 -2
  10. package/cjs/document/data-type/extended-types/base64.type.js +4 -0
  11. package/cjs/document/data-type/extended-types/date-string.type.js +6 -2
  12. package/cjs/document/data-type/extended-types/date-time-string.type.js +6 -2
  13. package/cjs/document/data-type/extended-types/date-time.type.js +6 -2
  14. package/cjs/document/data-type/extended-types/date.type.js +6 -2
  15. package/cjs/document/data-type/extended-types/email.type.js +6 -2
  16. package/cjs/document/data-type/extended-types/field-path.type.js +5 -3
  17. package/cjs/document/data-type/extended-types/filter.type.js +19 -17
  18. package/cjs/document/data-type/extended-types/object-id.type.js +4 -0
  19. package/cjs/document/data-type/extended-types/time.type.js +6 -2
  20. package/cjs/document/data-type/extended-types/url.type.js +6 -2
  21. package/cjs/document/data-type/extended-types/uuid.type.js +4 -0
  22. package/cjs/document/data-type/mapped-type.js +12 -5
  23. package/cjs/document/data-type/mixin-type.js +5 -1
  24. package/cjs/document/data-type/omit-type.js +7 -2
  25. package/cjs/document/data-type/partial-type.js +7 -2
  26. package/cjs/document/data-type/pick-type.js +1 -2
  27. package/cjs/document/data-type/primitive-types/bigint.type.js +4 -0
  28. package/cjs/document/data-type/primitive-types/boolean.type.js +4 -0
  29. package/cjs/document/data-type/primitive-types/integer.type.js +4 -0
  30. package/cjs/document/data-type/primitive-types/null.type.js +4 -0
  31. package/cjs/document/data-type/primitive-types/number.type.js +4 -0
  32. package/cjs/document/data-type/primitive-types/object.type.js +0 -3
  33. package/cjs/document/data-type/primitive-types/string.type.js +4 -0
  34. package/cjs/document/data-type/required-type.js +1 -2
  35. package/cjs/document/data-type/simple-type.js +17 -16
  36. package/cjs/document/data-type/utils/create-mapped-class.js +3 -3
  37. package/cjs/document/data-type/utils/get-is-inherited-predicate-fn.js +1 -2
  38. package/cjs/document/decorators/api-field-decorator.js +4 -6
  39. package/cjs/document/decorators/complex-type.decorator.js +1 -2
  40. package/cjs/document/decorators/http-controller.decorator.js +26 -2
  41. package/cjs/document/decorators/http-operation-entity.decorator.js +123 -93
  42. package/cjs/document/decorators/http-operation.decorator.js +12 -6
  43. package/cjs/document/decorators/simple-type.decorator.js +2 -3
  44. package/cjs/document/factory/api-document.factory.js +14 -11
  45. package/cjs/document/factory/data-type.factory.js +97 -56
  46. package/cjs/document/factory/http-api.factory.js +3 -1
  47. package/cjs/document/http/http-api.js +2 -2
  48. package/cjs/document/http/http-controller.js +26 -14
  49. package/cjs/document/http/http-media-type.js +21 -4
  50. package/cjs/document/http/http-operation-response.js +2 -1
  51. package/cjs/document/http/http-operation.js +28 -4
  52. package/cjs/document/http/http-parameter.js +4 -0
  53. package/cjs/document/http/http-status-range.js +6 -4
  54. package/cjs/document/index.js +5 -5
  55. package/cjs/document/utils/parse-regexp.util.js +1 -2
  56. package/cjs/document/utils/string-compare.util.js +1 -2
  57. package/cjs/exception/index.js +5 -5
  58. package/cjs/exception/opra-exception.js +1 -0
  59. package/cjs/filter/antlr/OpraFilterParser.js +28 -82
  60. package/cjs/filter/ast/index.js +1 -1
  61. package/cjs/filter/build.js +22 -25
  62. package/cjs/filter/filter-rules.js +4 -2
  63. package/cjs/filter/opra-filter.ns.js +2 -2
  64. package/cjs/filter/parse.js +2 -5
  65. package/cjs/filter/utils.js +2 -3
  66. package/cjs/helpers/function-utils.js +1 -2
  67. package/cjs/helpers/get-stack-filename.js +2 -3
  68. package/cjs/helpers/mixin-utils.js +4 -4
  69. package/cjs/helpers/monkey-patches.js +4 -2
  70. package/cjs/helpers/object-utils.js +5 -6
  71. package/cjs/helpers/parse-fields-projection.js +4 -6
  72. package/cjs/helpers/responsive-map.js +5 -4
  73. package/cjs/helpers/type-guards.js +10 -11
  74. package/cjs/i18n/i18n.js +4 -3
  75. package/cjs/i18n/index.js +1 -1
  76. package/cjs/i18n/string-utils.js +2 -3
  77. package/cjs/i18n/translate.js +1 -2
  78. package/cjs/index.js +1 -1
  79. package/cjs/schema/type-guards.js +7 -8
  80. package/esm/document/api-document.js +11 -0
  81. package/esm/document/common/api-base.js +1 -0
  82. package/esm/document/common/document-element.js +4 -1
  83. package/esm/document/data-type/api-field.js +12 -6
  84. package/esm/document/data-type/complex-type-base.js +10 -3
  85. package/esm/document/data-type/complex-type.js +6 -2
  86. package/esm/document/data-type/data-type.js +2 -1
  87. package/esm/document/data-type/enum-type.js +5 -2
  88. package/esm/document/data-type/extended-types/base64.type.js +4 -0
  89. package/esm/document/data-type/extended-types/date-string.type.js +6 -2
  90. package/esm/document/data-type/extended-types/date-time-string.type.js +6 -2
  91. package/esm/document/data-type/extended-types/date-time.type.js +6 -2
  92. package/esm/document/data-type/extended-types/date.type.js +6 -2
  93. package/esm/document/data-type/extended-types/email.type.js +6 -2
  94. package/esm/document/data-type/extended-types/field-path.type.js +5 -3
  95. package/esm/document/data-type/extended-types/filter.type.js +19 -17
  96. package/esm/document/data-type/extended-types/object-id.type.js +4 -0
  97. package/esm/document/data-type/extended-types/time.type.js +6 -2
  98. package/esm/document/data-type/extended-types/url.type.js +6 -2
  99. package/esm/document/data-type/extended-types/uuid.type.js +4 -0
  100. package/esm/document/data-type/mapped-type.js +12 -5
  101. package/esm/document/data-type/mixin-type.js +5 -1
  102. package/esm/document/data-type/omit-type.js +6 -0
  103. package/esm/document/data-type/partial-type.js +6 -0
  104. package/esm/document/data-type/primitive-types/bigint.type.js +4 -0
  105. package/esm/document/data-type/primitive-types/boolean.type.js +4 -0
  106. package/esm/document/data-type/primitive-types/integer.type.js +4 -0
  107. package/esm/document/data-type/primitive-types/null.type.js +4 -0
  108. package/esm/document/data-type/primitive-types/number.type.js +4 -0
  109. package/esm/document/data-type/primitive-types/object.type.js +0 -3
  110. package/esm/document/data-type/primitive-types/string.type.js +4 -0
  111. package/esm/document/data-type/simple-type.js +17 -16
  112. package/esm/document/data-type/utils/create-mapped-class.js +2 -1
  113. package/esm/document/decorators/api-field-decorator.js +1 -2
  114. package/esm/document/decorators/http-controller.decorator.js +25 -0
  115. package/esm/document/decorators/http-operation-entity.decorator.js +80 -50
  116. package/esm/document/decorators/http-operation.decorator.js +11 -4
  117. package/esm/document/factory/api-document.factory.js +14 -10
  118. package/esm/document/factory/data-type.factory.js +97 -56
  119. package/esm/document/factory/http-api.factory.js +3 -1
  120. package/esm/document/http/http-api.js +2 -2
  121. package/esm/document/http/http-controller.js +25 -14
  122. package/esm/document/http/http-media-type.js +20 -4
  123. package/esm/document/http/http-operation-response.js +2 -1
  124. package/esm/document/http/http-operation.js +27 -4
  125. package/esm/document/http/http-parameter.js +4 -0
  126. package/esm/document/http/http-status-range.js +6 -4
  127. package/esm/document/index.js +5 -5
  128. package/esm/exception/index.js +5 -5
  129. package/esm/exception/opra-exception.js +1 -0
  130. package/esm/filter/antlr/OpraFilterParser.js +28 -82
  131. package/esm/filter/ast/index.js +1 -1
  132. package/esm/filter/build.js +1 -3
  133. package/esm/filter/filter-rules.js +4 -2
  134. package/esm/filter/opra-filter.ns.js +2 -2
  135. package/esm/filter/parse.js +1 -3
  136. package/esm/helpers/mixin-utils.js +2 -1
  137. package/esm/helpers/monkey-patches.js +4 -2
  138. package/esm/helpers/object-utils.js +2 -2
  139. package/esm/helpers/parse-fields-projection.js +1 -3
  140. package/esm/helpers/responsive-map.js +5 -4
  141. package/esm/i18n/i18n.js +4 -3
  142. package/esm/i18n/index.js +1 -1
  143. package/esm/index.js +1 -1
  144. package/package.json +11 -8
  145. package/types/document/api-document.d.ts +1 -0
  146. package/types/document/common/document-element.d.ts +1 -0
  147. package/types/document/data-type/api-field.d.ts +12 -0
  148. package/types/document/data-type/complex-type-base.d.ts +1 -1
  149. package/types/document/data-type/complex-type.d.ts +1 -1
  150. package/types/document/data-type/data-type.d.ts +5 -2
  151. package/types/document/data-type/enum-type.d.ts +2 -2
  152. package/types/document/data-type/mapped-type.d.ts +3 -3
  153. package/types/document/data-type/mixin-type.d.ts +2 -2
  154. package/types/document/data-type/omit-type.d.ts +0 -6
  155. package/types/document/data-type/partial-type.d.ts +0 -6
  156. package/types/document/data-type/pick-type.d.ts +2 -2
  157. package/types/document/data-type/required-type.d.ts +7 -7
  158. package/types/document/data-type/simple-type.d.ts +4 -2
  159. package/types/document/decorators/http-controller.decorator.d.ts +1 -0
  160. package/types/document/decorators/http-operation-entity.decorator.d.ts +1 -0
  161. package/types/document/factory/data-type.factory.d.ts +5 -0
  162. package/types/document/http/http-controller.d.ts +1 -0
  163. package/types/document/http/http-media-type.d.ts +2 -1
  164. package/types/document/http/http-operation.d.ts +5 -3
  165. package/types/document/http/http-parameter.d.ts +3 -2
  166. package/types/document/http/http-status-range.d.ts +2 -1
  167. package/types/document/index.d.ts +5 -5
  168. package/types/exception/index.d.ts +5 -5
  169. package/types/filter/ast/index.d.ts +1 -1
  170. package/types/filter/opra-filter.ns.d.ts +2 -2
  171. package/types/helpers/type-guards.d.ts +0 -2
  172. package/types/i18n/i18n.d.ts +21 -19
  173. package/types/index.d.ts +1 -1
  174. package/types/schema/data-type/data-type.interface.d.ts +1 -1
  175. package/types/schema/data-type/mapped-type.interface.d.ts +2 -2
  176. package/types/schema/data-type/simple-type.interface.d.ts +4 -0
  177. package/types/schema/data-type-container.interface.d.ts +1 -1
  178. package/types/schema/document.interface.d.ts +1 -1
  179. package/types/schema/http/http-controller.interface.d.ts +2 -2
  180. package/types/schema/http/http-media-type.interface.d.ts +1 -1
  181. package/types/schema/http/http-operation-response.interface.d.ts +2 -2
  182. package/types/schema/http/http-operation.interface.d.ts +8 -4
  183. package/types/schema/http/http-parameter.interface.d.ts +5 -1
@@ -79,9 +79,13 @@ __decorate([
79
79
  __metadata("design:type", String)
80
80
  ], EmailType.prototype, "blacklistedChars", void 0);
81
81
  EmailType = __decorate([
82
- SimpleType({
82
+ (SimpleType({
83
83
  description: 'An email value',
84
- }).Example('some.body@example.com'),
84
+ nameMappings: {
85
+ js: 'string',
86
+ json: 'string',
87
+ },
88
+ }).Example('some.body@example.com')),
85
89
  __metadata("design:paramtypes", [Object])
86
90
  ], EmailType);
87
91
  export { EmailType };
@@ -12,9 +12,7 @@ let FieldPathType = class FieldPathType {
12
12
  ? element.node.getComplexType(properties.dataType)
13
13
  : element.node.getComplexType('object');
14
14
  const allowSigns = properties.allowSigns;
15
- const decodeFieldPath = validator('decodeFieldPath', function (input) {
16
- return dataType.normalizeFieldPath(input, { allowSigns });
17
- });
15
+ const decodeFieldPath = validator('decodeFieldPath', (input) => dataType.normalizeFieldPath(input, { allowSigns }));
18
16
  return vg.pipe([toString, decodeFieldPath]);
19
17
  }
20
18
  [ENCODER](properties, element) {
@@ -48,6 +46,10 @@ __decorate([
48
46
  FieldPathType = __decorate([
49
47
  SimpleType({
50
48
  description: 'Field path',
49
+ nameMappings: {
50
+ js: 'string',
51
+ json: 'string',
52
+ },
51
53
  }),
52
54
  __metadata("design:paramtypes", [Object])
53
55
  ], FieldPathType);
@@ -45,28 +45,30 @@ __decorate([
45
45
  FilterType = __decorate([
46
46
  SimpleType({
47
47
  description: 'A query filter',
48
+ nameMappings: {
49
+ js: 'object',
50
+ json: 'string',
51
+ },
48
52
  }),
49
53
  __metadata("design:paramtypes", [Object])
50
54
  ], FilterType);
51
55
  export { FilterType };
52
- const decodeFilter = (dataType, rules) => {
53
- return validator('decodeFilter', function (input, context, _this) {
54
- if (typeof input === 'string') {
55
- try {
56
- const filter = OpraFilter.parse(input);
57
- if (rules)
58
- return rules.normalizeFilter(filter, dataType);
59
- return filter;
60
- }
61
- catch (e) {
62
- context.fail(_this, `Not a valid filter expression. ${e.message}`, input, e.errors);
63
- return;
64
- }
56
+ const decodeFilter = (dataType, rules) => validator('decodeFilter', (input, context, _this) => {
57
+ if (typeof input === 'string') {
58
+ try {
59
+ const filter = OpraFilter.parse(input);
60
+ if (rules)
61
+ return rules.normalizeFilter(filter, dataType);
62
+ return filter;
65
63
  }
66
- context.fail(_this, `Nt a valid filter expression string`, input);
67
- });
68
- };
69
- const encodeFilter = validator('encodeFilter', function (input, context, _this) {
64
+ catch (e) {
65
+ context.fail(_this, `Not a valid filter expression. ${e.message}`, input, e.errors);
66
+ return;
67
+ }
68
+ }
69
+ context.fail(_this, `Nt a valid filter expression string`, input);
70
+ });
71
+ const encodeFilter = validator('encodeFilter', (input, context, _this) => {
70
72
  if (input instanceof OpraFilter.Ast) {
71
73
  return input.toString();
72
74
  }
@@ -17,6 +17,10 @@ let ObjectIdType = class ObjectIdType {
17
17
  ObjectIdType = __decorate([
18
18
  SimpleType({
19
19
  description: 'A MongoDB ObjectID value',
20
+ nameMappings: {
21
+ js: 'object',
22
+ json: 'string',
23
+ },
20
24
  }),
21
25
  __metadata("design:paramtypes", [Object])
22
26
  ], ObjectIdType);
@@ -37,11 +37,15 @@ __decorate([
37
37
  __metadata("design:type", String)
38
38
  ], TimeType.prototype, "maxValue", void 0);
39
39
  TimeType = __decorate([
40
- SimpleType({
40
+ (SimpleType({
41
41
  description: 'Time string in 24h format',
42
+ nameMappings: {
43
+ js: 'string',
44
+ json: 'string',
45
+ },
42
46
  })
43
47
  .Example('18:23:00', 'Full time value')
44
- .Example('18:23:00', 'Time value without seconds'),
48
+ .Example('18:23:00', 'Time value without seconds')),
45
49
  __metadata("design:paramtypes", [Object])
46
50
  ], TimeType);
47
51
  export { TimeType };
@@ -15,9 +15,13 @@ let UrlType = class UrlType {
15
15
  }
16
16
  };
17
17
  UrlType = __decorate([
18
- SimpleType({
18
+ (SimpleType({
19
19
  description: 'A Uniform Resource Identifier Reference (RFC 3986 icon) value',
20
- }).Example('http://tempuri.org'),
20
+ nameMappings: {
21
+ js: 'string',
22
+ json: 'string',
23
+ },
24
+ }).Example('http://tempuri.org')),
21
25
  __metadata("design:paramtypes", [Object])
22
26
  ], UrlType);
23
27
  export { UrlType };
@@ -23,6 +23,10 @@ __decorate([
23
23
  UuidType = __decorate([
24
24
  SimpleType({
25
25
  description: 'A Universal Unique Identifier (UUID) value',
26
+ nameMappings: {
27
+ js: 'string',
28
+ json: 'string',
29
+ },
26
30
  }),
27
31
  __metadata("design:paramtypes", [Object])
28
32
  ], UuidType);
@@ -4,6 +4,7 @@ import { omitUndefined } from '../../helpers/index.js';
4
4
  import { OpraSchema } from '../../schema/index.js';
5
5
  import { ApiField } from './api-field.js';
6
6
  import { ComplexTypeBase } from './complex-type-base.js';
7
+ import { DataType } from './data-type.js';
7
8
  import { getIsInheritedPredicateFn } from './utils/get-is-inherited-predicate-fn.js';
8
9
  /**
9
10
  * MappedType constructor
@@ -18,22 +19,25 @@ export const MappedType = function (...args) {
18
19
  _this.kind = OpraSchema.MappedType.Kind;
19
20
  if (initArgs.base) {
20
21
  // noinspection SuspiciousTypeOfGuard
21
- if (!(initArgs.base instanceof ComplexTypeBase))
22
+ if (!(initArgs.base instanceof ComplexTypeBase)) {
22
23
  throw new TypeError(`"${initArgs.base.kind}" can't be set as base for a "${this.kind}"`);
24
+ }
23
25
  _this.base = initArgs.base;
24
26
  _this.ctor = initArgs.ctor || _this.base.ctor;
25
27
  if (initArgs.pick)
26
28
  _this.pick = initArgs.pick.map(f => _this.base.normalizeFieldPath(f));
27
29
  else if (initArgs.omit)
28
30
  _this.omit = initArgs.omit.map(f => _this.base.normalizeFieldPath(f));
29
- else if (initArgs.partial)
31
+ else if (initArgs.partial) {
30
32
  _this.partial = Array.isArray(initArgs.partial)
31
33
  ? initArgs.partial.map(f => _this.base.normalizeFieldPath(f))
32
34
  : initArgs.partial;
33
- else if (initArgs.required)
35
+ }
36
+ else if (initArgs.required) {
34
37
  _this.required = Array.isArray(initArgs.required)
35
38
  ? initArgs.required.map(f => _this.base.normalizeFieldPath(f))
36
39
  : initArgs.required;
40
+ }
37
41
  /** Copy fields from base */
38
42
  const isInheritedPredicate = getIsInheritedPredicateFn(_this.pick, _this.omit);
39
43
  const partial = Array.isArray(_this.partial) ? _this.partial.map(x => x.toLowerCase()) : _this.partial;
@@ -53,8 +57,9 @@ export const MappedType = function (...args) {
53
57
  }
54
58
  if (!_this.pick ||
55
59
  _this.base.additionalFields === false ||
56
- (Array.isArray(_this.base.additionalFields) && _this.base.additionalFields?.[0] === 'error'))
60
+ (Array.isArray(_this.base.additionalFields) && _this.base.additionalFields?.[0] === 'error')) {
57
61
  _this.additionalFields = _this.base.additionalFields;
62
+ }
58
63
  if (initArgs.base.keyField && isInheritedPredicate(initArgs.base.keyField))
59
64
  _this.keyField = initArgs.base.keyField;
60
65
  }
@@ -65,6 +70,8 @@ export const MappedType = function (...args) {
65
70
  */
66
71
  class MappedTypeClass extends ComplexTypeBase {
67
72
  extendsFrom(baseType) {
73
+ if (!(baseType instanceof DataType))
74
+ baseType = this.node.getDataType(baseType);
68
75
  if (!(baseType instanceof ComplexTypeBase))
69
76
  return false;
70
77
  if (baseType === this)
@@ -85,4 +92,4 @@ class MappedTypeClass extends ComplexTypeBase {
85
92
  }
86
93
  }
87
94
  MappedType.prototype = MappedTypeClass.prototype;
88
- MappedType._applyMixin = () => void 0;
95
+ MappedType._applyMixin = () => undefined;
@@ -5,6 +5,7 @@ import { OpraSchema } from '../../schema/index.js';
5
5
  import { DATATYPE_METADATA, DECORATOR } from '../constants.js';
6
6
  import { ApiField } from './api-field.js';
7
7
  import { ComplexTypeBase } from './complex-type-base.js';
8
+ import { DataType } from './data-type.js';
8
9
  /**
9
10
  * @class MixinType
10
11
  */
@@ -40,6 +41,8 @@ export const MixinType = function (...args) {
40
41
  */
41
42
  class MixinTypeClass extends ComplexTypeBase {
42
43
  extendsFrom(baseType) {
44
+ if (!(baseType instanceof DataType))
45
+ baseType = this.node.getDataType(baseType);
43
46
  if (!(baseType instanceof ComplexTypeBase))
44
47
  return false;
45
48
  if (baseType === this)
@@ -94,8 +97,9 @@ function MixinTypeFactory(...args) {
94
97
  if (!(itemMeta &&
95
98
  (itemMeta.kind === OpraSchema.ComplexType.Kind ||
96
99
  itemMeta.kind === OpraSchema.MixinType.Kind ||
97
- itemMeta.kind === OpraSchema.MappedType.Kind)))
100
+ itemMeta.kind === OpraSchema.MappedType.Kind))) {
98
101
  throw new TypeError(`Class "${c.name}" is not a ${OpraSchema.ComplexType.Kind}, ${OpraSchema.MixinType.Kind} or ${OpraSchema.MappedType.Kind}`);
102
+ }
99
103
  metadata.types.push(c);
100
104
  mergePrototype(MixinClass.prototype, c.prototype);
101
105
  }
@@ -1,4 +1,10 @@
1
1
  import { createMappedClass } from './utils/create-mapped-class.js';
2
+ /**
3
+ * Create a new MappedType that omits given fields from base type
4
+ * @param baseType
5
+ * @param keys
6
+ * @param options
7
+ */
2
8
  /**
3
9
  *
4
10
  */
@@ -1,4 +1,10 @@
1
1
  import { createMappedClass } from './utils/create-mapped-class.js';
2
+ /**
3
+ * Create a new MappedType that marks given or all fields as optional
4
+ * @param baseType
5
+ * @param keys
6
+ * @param options
7
+ */
2
8
  /**
3
9
  *
4
10
  */
@@ -22,6 +22,10 @@ let BigintType = class BigintType extends NumberType {
22
22
  BigintType = __decorate([
23
23
  SimpleType({
24
24
  description: 'BigInt number',
25
+ nameMappings: {
26
+ js: 'bigint',
27
+ json: 'string',
28
+ },
25
29
  }),
26
30
  __metadata("design:paramtypes", [Object])
27
31
  ], BigintType);
@@ -17,6 +17,10 @@ let BooleanType = class BooleanType {
17
17
  BooleanType = __decorate([
18
18
  SimpleType({
19
19
  description: 'Simple true/false value',
20
+ nameMappings: {
21
+ js: 'boolean',
22
+ json: 'boolean',
23
+ },
20
24
  }),
21
25
  __metadata("design:paramtypes", [Object])
22
26
  ], BooleanType);
@@ -22,6 +22,10 @@ let IntegerType = class IntegerType extends NumberType {
22
22
  IntegerType = __decorate([
23
23
  SimpleType({
24
24
  description: 'An integer number',
25
+ nameMappings: {
26
+ js: 'number',
27
+ json: 'number',
28
+ },
25
29
  }),
26
30
  __metadata("design:paramtypes", [Object])
27
31
  ], IntegerType);
@@ -17,6 +17,10 @@ let NullType = class NullType {
17
17
  NullType = __decorate([
18
18
  SimpleType({
19
19
  description: 'A Null value',
20
+ nameMappings: {
21
+ js: 'null',
22
+ json: 'null',
23
+ },
20
24
  }),
21
25
  __metadata("design:paramtypes", [Object])
22
26
  ], NullType);
@@ -34,6 +34,10 @@ __decorate([
34
34
  NumberType = __decorate([
35
35
  SimpleType({
36
36
  description: 'Both Integer as well as Floating-Point numbers',
37
+ nameMappings: {
38
+ js: 'number',
39
+ json: 'number',
40
+ },
37
41
  }),
38
42
  __metadata("design:paramtypes", [Object])
39
43
  ], NumberType);
@@ -1,5 +1,4 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { DATATYPE_METADATA } from '../../constants.js';
3
2
  import { ComplexType } from '../complex-type.js';
4
3
  let ObjectType = class ObjectType {
5
4
  constructor(properties) {
@@ -16,5 +15,3 @@ ObjectType = __decorate([
16
15
  __metadata("design:paramtypes", [Object])
17
16
  ], ObjectType);
18
17
  export { ObjectType };
19
- const metadata = Reflect.getMetadata(DATATYPE_METADATA, ObjectType);
20
- metadata.ctor = Object;
@@ -54,6 +54,10 @@ __decorate([
54
54
  StringType = __decorate([
55
55
  SimpleType({
56
56
  description: 'A sequence of characters',
57
+ nameMappings: {
58
+ js: 'string',
59
+ json: 'string',
60
+ },
57
61
  }),
58
62
  __metadata("design:paramtypes", [Object])
59
63
  ], StringType);
@@ -20,11 +20,14 @@ export const SimpleType = function (...args) {
20
20
  _this.kind = OpraSchema.SimpleType.Kind;
21
21
  if (initArgs.base) {
22
22
  // noinspection SuspiciousTypeOfGuard
23
- if (!(initArgs.base instanceof SimpleType))
23
+ if (!(initArgs.base instanceof SimpleType)) {
24
24
  throw new TypeError(`"${initArgs.base.kind}" can't be set as base for a "${this.kind}"`);
25
+ }
25
26
  _this.base = initArgs.base;
26
27
  }
27
28
  _this.properties = initArgs.properties;
29
+ _this.ownNameMappings = { ...initArgs.nameMappings };
30
+ _this.nameMappings = { ..._this.base?.nameMappings, ...initArgs.nameMappings };
28
31
  _this.ownAttributes = cloneObject(initArgs.attributes || {});
29
32
  _this.attributes = _this.base ? cloneObject(_this.base.attributes) : {};
30
33
  if (_this.ownAttributes) {
@@ -43,6 +46,8 @@ export const SimpleType = function (...args) {
43
46
  */
44
47
  class SimpleTypeClass extends DataType {
45
48
  extendsFrom(baseType) {
49
+ if (!(baseType instanceof DataType))
50
+ baseType = this.node.getDataType(baseType);
46
51
  if (!(baseType instanceof SimpleType))
47
52
  return false;
48
53
  if (baseType === this)
@@ -63,15 +68,13 @@ class SimpleTypeClass extends DataType {
63
68
  }
64
69
  return isAny;
65
70
  }
66
- else {
67
- let t = this;
68
- while (t) {
69
- if (t._generateEncoder)
70
- return t._generateEncoder(prop, options?.documentElement || this.owner);
71
- t = this.base;
72
- }
73
- return isAny;
71
+ let t = this;
72
+ while (t) {
73
+ if (t._generateEncoder)
74
+ return t._generateEncoder(prop, options?.documentElement || this.owner);
75
+ t = this.base;
74
76
  }
77
+ return isAny;
75
78
  }
76
79
  toJSON() {
77
80
  const attributes = omitUndefined(this.ownAttributes);
@@ -80,19 +83,17 @@ class SimpleTypeClass extends DataType {
80
83
  properties = this.properties.toJSON(this.properties, this.owner);
81
84
  }
82
85
  else
83
- properties = this.properties || {};
84
- properties = Object.keys(this.attributes).reduce((o, k) => {
85
- if (properties[k] !== undefined)
86
- o[k] = properties[k];
87
- return o;
88
- }, {});
86
+ properties = this.properties ? cloneObject(this.properties) : {};
89
87
  const baseName = this.base ? this.node.getDataTypeNameWithNs(this.base) : undefined;
90
- return omitUndefined({
88
+ const out = omitUndefined({
91
89
  ...DataType.prototype.toJSON.apply(this),
92
90
  base: this.base ? (baseName ? baseName : this.base.toJSON()) : undefined,
93
91
  attributes: attributes && Object.keys(attributes).length ? attributes : undefined,
94
92
  properties: Object.keys(properties).length ? properties : undefined,
95
93
  });
94
+ if (Object.keys(this.ownNameMappings).length)
95
+ out.nameMappings = { ...this.ownNameMappings };
96
+ return out;
96
97
  }
97
98
  }
98
99
  SimpleType.prototype = SimpleTypeClass.prototype;
@@ -23,8 +23,9 @@ export function createMappedClass(source, config, options) {
23
23
  throw new TypeError(`Class "${source}" doesn't have datatype metadata information`);
24
24
  if (!(m.kind === OpraSchema.ComplexType.Kind ||
25
25
  m.kind === OpraSchema.MappedType.Kind ||
26
- m.kind === OpraSchema.MixinType.Kind))
26
+ m.kind === OpraSchema.MixinType.Kind)) {
27
27
  throw new TypeError(`Class "${source}" is not a ${OpraSchema.ComplexType.Kind}`);
28
+ }
28
29
  }
29
30
  const metadata = {
30
31
  ...options,
@@ -1,4 +1,3 @@
1
- import { omitUndefined } from '../../helpers/index.js';
2
1
  import { OpraSchema } from '../../schema/index.js';
3
2
  import { DATATYPE_METADATA } from '../constants.js';
4
3
  export function ApiFieldDecorator(options) {
@@ -17,6 +16,6 @@ export function ApiFieldDecorator(options) {
17
16
  }
18
17
  else
19
18
  elemMeta.type = elemMeta.type || designType;
20
- Reflect.defineMetadata(DATATYPE_METADATA, omitUndefined(metadata), target.constructor);
19
+ Reflect.defineMetadata(DATATYPE_METADATA, metadata, target.constructor);
21
20
  };
22
21
  }
@@ -98,6 +98,31 @@ export function HttpControllerDecoratorFactory(options) {
98
98
  });
99
99
  return decorator;
100
100
  };
101
+ /**
102
+ *
103
+ */
104
+ decorator.KeyParam = (name, arg1) => {
105
+ decoratorChain.push((meta) => {
106
+ if (!meta.path?.includes(':' + name))
107
+ meta.path = (meta.path || '') + '@:' + name;
108
+ const paramMeta = typeof arg1 === 'string' || typeof arg1 === 'function'
109
+ ? {
110
+ name,
111
+ location: 'path',
112
+ type: arg1,
113
+ keyParam: true,
114
+ }
115
+ : {
116
+ ...arg1,
117
+ name,
118
+ location: 'path',
119
+ keyParam: true,
120
+ };
121
+ meta.parameters = meta.parameters || [];
122
+ meta.parameters.push(paramMeta);
123
+ });
124
+ return decorator;
125
+ };
101
126
  /**
102
127
  *
103
128
  */