@e22m4u/js-repository 0.0.31

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/.c8rc +9 -0
  2. package/.commitlintrc +5 -0
  3. package/.editorconfig +13 -0
  4. package/.eslintignore +1 -0
  5. package/.eslintrc.cjs +27 -0
  6. package/.husky/commit-msg +4 -0
  7. package/.husky/pre-commit +9 -0
  8. package/.mocharc.cjs +7 -0
  9. package/.prettierrc +7 -0
  10. package/LICENSE +21 -0
  11. package/README.md +523 -0
  12. package/mocha.setup.js +10 -0
  13. package/package.json +57 -0
  14. package/src/adapter/adapter-loader.d.ts +16 -0
  15. package/src/adapter/adapter-loader.js +63 -0
  16. package/src/adapter/adapter-loader.spec.js +31 -0
  17. package/src/adapter/adapter-registry.d.ts +14 -0
  18. package/src/adapter/adapter-registry.js +36 -0
  19. package/src/adapter/adapter-registry.spec.js +36 -0
  20. package/src/adapter/adapter.d.ts +118 -0
  21. package/src/adapter/adapter.js +181 -0
  22. package/src/adapter/adapter.spec.js +144 -0
  23. package/src/adapter/builtin/memory-adapter.d.ts +118 -0
  24. package/src/adapter/builtin/memory-adapter.js +342 -0
  25. package/src/adapter/builtin/memory-adapter.spec.js +2925 -0
  26. package/src/adapter/decorator/data-sanitizing-decorator.d.ts +13 -0
  27. package/src/adapter/decorator/data-sanitizing-decorator.js +44 -0
  28. package/src/adapter/decorator/data-sanitizing-decorator.spec.js +59 -0
  29. package/src/adapter/decorator/data-validation-decorator.d.ts +13 -0
  30. package/src/adapter/decorator/data-validation-decorator.js +41 -0
  31. package/src/adapter/decorator/data-validation-decorator.spec.js +59 -0
  32. package/src/adapter/decorator/default-values-decorator.d.ts +13 -0
  33. package/src/adapter/decorator/default-values-decorator.js +57 -0
  34. package/src/adapter/decorator/default-values-decorator.spec.js +141 -0
  35. package/src/adapter/decorator/fields-filtering-decorator.d.ts +13 -0
  36. package/src/adapter/decorator/fields-filtering-decorator.js +72 -0
  37. package/src/adapter/decorator/fields-filtering-decorator.spec.js +119 -0
  38. package/src/adapter/decorator/inclusion-decorator.d.ts +13 -0
  39. package/src/adapter/decorator/inclusion-decorator.js +78 -0
  40. package/src/adapter/decorator/inclusion-decorator.spec.js +117 -0
  41. package/src/adapter/decorator/index.d.ts +5 -0
  42. package/src/adapter/decorator/index.js +5 -0
  43. package/src/adapter/index.d.ts +3 -0
  44. package/src/adapter/index.js +3 -0
  45. package/src/definition/datasource/datasource-definition-validator.d.ts +14 -0
  46. package/src/definition/datasource/datasource-definition-validator.js +33 -0
  47. package/src/definition/datasource/datasource-definition-validator.spec.js +63 -0
  48. package/src/definition/datasource/datasource-definition.d.ts +7 -0
  49. package/src/definition/datasource/index.d.ts +2 -0
  50. package/src/definition/datasource/index.js +1 -0
  51. package/src/definition/definition-registry.d.ts +50 -0
  52. package/src/definition/definition-registry.js +98 -0
  53. package/src/definition/definition-registry.spec.js +78 -0
  54. package/src/definition/index.d.ts +3 -0
  55. package/src/definition/index.js +3 -0
  56. package/src/definition/model/index.d.ts +7 -0
  57. package/src/definition/model/index.js +6 -0
  58. package/src/definition/model/model-data-sanitizer.d.ts +15 -0
  59. package/src/definition/model/model-data-sanitizer.js +33 -0
  60. package/src/definition/model/model-data-validator.d.ts +32 -0
  61. package/src/definition/model/model-data-validator.js +144 -0
  62. package/src/definition/model/model-data-validator.spec.js +1889 -0
  63. package/src/definition/model/model-definition-utils.d.ts +161 -0
  64. package/src/definition/model/model-definition-utils.js +371 -0
  65. package/src/definition/model/model-definition-utils.spec.js +1474 -0
  66. package/src/definition/model/model-definition-validator.d.ts +14 -0
  67. package/src/definition/model/model-definition-validator.js +83 -0
  68. package/src/definition/model/model-definition-validator.spec.js +143 -0
  69. package/src/definition/model/model-definition.d.ts +28 -0
  70. package/src/definition/model/properties/data-type.d.ts +11 -0
  71. package/src/definition/model/properties/data-type.js +11 -0
  72. package/src/definition/model/properties/default-values-definition-validator.d.ts +15 -0
  73. package/src/definition/model/properties/default-values-definition-validator.js +53 -0
  74. package/src/definition/model/properties/default-values-definition-validator.spec.js +136 -0
  75. package/src/definition/model/properties/index.d.ts +5 -0
  76. package/src/definition/model/properties/index.js +4 -0
  77. package/src/definition/model/properties/primary-keys-definition-validator.d.ts +15 -0
  78. package/src/definition/model/properties/primary-keys-definition-validator.js +55 -0
  79. package/src/definition/model/properties/primary-keys-definition-validator.spec.js +145 -0
  80. package/src/definition/model/properties/properties-definition-validator.d.ts +15 -0
  81. package/src/definition/model/properties/properties-definition-validator.js +194 -0
  82. package/src/definition/model/properties/properties-definition-validator.spec.js +373 -0
  83. package/src/definition/model/properties/property-definition.d.ts +20 -0
  84. package/src/definition/model/relations/index.d.ts +3 -0
  85. package/src/definition/model/relations/index.js +2 -0
  86. package/src/definition/model/relations/relation-definition.d.ts +254 -0
  87. package/src/definition/model/relations/relation-type.d.ts +9 -0
  88. package/src/definition/model/relations/relation-type.js +9 -0
  89. package/src/definition/model/relations/relations-definition-validator.d.ts +15 -0
  90. package/src/definition/model/relations/relations-definition-validator.js +449 -0
  91. package/src/definition/model/relations/relations-definition-validator.spec.js +772 -0
  92. package/src/errors/index.d.ts +3 -0
  93. package/src/errors/index.js +3 -0
  94. package/src/errors/invalid-argument-error.d.ts +6 -0
  95. package/src/errors/invalid-argument-error.js +6 -0
  96. package/src/errors/invalid-argument-error.spec.js +33 -0
  97. package/src/errors/invalid-operator-value-error.d.ts +13 -0
  98. package/src/errors/invalid-operator-value-error.js +24 -0
  99. package/src/errors/invalid-operator-value-error.spec.js +11 -0
  100. package/src/errors/not-implemented-error.d.ts +6 -0
  101. package/src/errors/not-implemented-error.js +6 -0
  102. package/src/errors/not-implemented-error.spec.js +33 -0
  103. package/src/filter/fields-clause-tool.d.ts +38 -0
  104. package/src/filter/fields-clause-tool.js +88 -0
  105. package/src/filter/fields-clause-tool.spec.js +133 -0
  106. package/src/filter/filter.d.ts +335 -0
  107. package/src/filter/include-clause-tool.d.ts +53 -0
  108. package/src/filter/include-clause-tool.js +364 -0
  109. package/src/filter/include-clause-tool.spec.js +653 -0
  110. package/src/filter/index.d.ts +7 -0
  111. package/src/filter/index.js +6 -0
  112. package/src/filter/operator-clause-tool.d.ts +223 -0
  113. package/src/filter/operator-clause-tool.js +515 -0
  114. package/src/filter/operator-clause-tool.spec.js +1064 -0
  115. package/src/filter/order-clause-tool.d.ts +32 -0
  116. package/src/filter/order-clause-tool.js +97 -0
  117. package/src/filter/order-clause-tool.spec.js +438 -0
  118. package/src/filter/slice-clause-tool.d.ts +30 -0
  119. package/src/filter/slice-clause-tool.js +65 -0
  120. package/src/filter/slice-clause-tool.spec.js +117 -0
  121. package/src/filter/where-clause-tool.d.ts +23 -0
  122. package/src/filter/where-clause-tool.js +165 -0
  123. package/src/filter/where-clause-tool.spec.js +280 -0
  124. package/src/index.d.ts +9 -0
  125. package/src/index.js +8 -0
  126. package/src/relations/belongs-to-resolver.d.ts +46 -0
  127. package/src/relations/belongs-to-resolver.js +242 -0
  128. package/src/relations/belongs-to-resolver.spec.js +1047 -0
  129. package/src/relations/has-many-resolver.d.ts +67 -0
  130. package/src/relations/has-many-resolver.js +317 -0
  131. package/src/relations/has-many-resolver.spec.js +2911 -0
  132. package/src/relations/has-one-resolver.d.ts +67 -0
  133. package/src/relations/has-one-resolver.js +311 -0
  134. package/src/relations/has-one-resolver.spec.js +2274 -0
  135. package/src/relations/index.d.ts +4 -0
  136. package/src/relations/index.js +4 -0
  137. package/src/relations/references-many-resolver.d.ts +27 -0
  138. package/src/relations/references-many-resolver.js +113 -0
  139. package/src/relations/references-many-resolver.spec.js +631 -0
  140. package/src/repository/index.d.ts +2 -0
  141. package/src/repository/index.js +2 -0
  142. package/src/repository/repository-registry.d.ts +29 -0
  143. package/src/repository/repository-registry.js +57 -0
  144. package/src/repository/repository-registry.spec.js +38 -0
  145. package/src/repository/repository.d.ts +164 -0
  146. package/src/repository/repository.js +207 -0
  147. package/src/repository/repository.spec.js +202 -0
  148. package/src/schema.d.ts +37 -0
  149. package/src/schema.js +41 -0
  150. package/src/types.d.ts +30 -0
  151. package/src/utils/capitalize.d.ts +6 -0
  152. package/src/utils/capitalize.js +10 -0
  153. package/src/utils/capitalize.spec.js +14 -0
  154. package/src/utils/clone-deep.d.ts +6 -0
  155. package/src/utils/clone-deep.js +61 -0
  156. package/src/utils/clone-deep.spec.js +28 -0
  157. package/src/utils/exclude-object-keys.d.ts +10 -0
  158. package/src/utils/exclude-object-keys.js +20 -0
  159. package/src/utils/exclude-object-keys.spec.js +49 -0
  160. package/src/utils/get-ctor-name.d.ts +6 -0
  161. package/src/utils/get-ctor-name.js +11 -0
  162. package/src/utils/get-ctor-name.spec.js +17 -0
  163. package/src/utils/get-value-by-path.d.ts +12 -0
  164. package/src/utils/get-value-by-path.js +23 -0
  165. package/src/utils/get-value-by-path.spec.js +36 -0
  166. package/src/utils/index.d.ts +10 -0
  167. package/src/utils/index.js +10 -0
  168. package/src/utils/is-ctor.d.ts +7 -0
  169. package/src/utils/is-ctor.js +10 -0
  170. package/src/utils/is-ctor.spec.js +26 -0
  171. package/src/utils/is-pure-object.d.ts +6 -0
  172. package/src/utils/is-pure-object.js +15 -0
  173. package/src/utils/is-pure-object.spec.js +25 -0
  174. package/src/utils/select-object-keys.d.ts +10 -0
  175. package/src/utils/select-object-keys.js +37 -0
  176. package/src/utils/select-object-keys.spec.js +40 -0
  177. package/src/utils/singularize.d.ts +6 -0
  178. package/src/utils/singularize.js +22 -0
  179. package/src/utils/singularize.spec.js +23 -0
  180. package/src/utils/string-to-regexp.d.ts +10 -0
  181. package/src/utils/string-to-regexp.js +22 -0
  182. package/src/utils/string-to-regexp.spec.js +35 -0
  183. package/tsconfig.json +9 -0
@@ -0,0 +1,145 @@
1
+ import {expect} from 'chai';
2
+ import {DataType} from './data-type.js';
3
+ import {format} from '@e22m4u/js-format';
4
+ import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
5
+ import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../model-definition-utils.js';
6
+
7
+ const S = new PrimaryKeysDefinitionValidator();
8
+
9
+ describe('PrimaryKeysDefinitionValidator', function () {
10
+ describe('validate', function () {
11
+ it('does not throw an error if no primary keys provided in case of a short property definition', function () {
12
+ S.validate('model', {
13
+ foo: DataType.STRING,
14
+ bar: DataType.NUMBER,
15
+ });
16
+ });
17
+
18
+ it('does not throw an error if no primary keys provided in case of a full property definition', function () {
19
+ S.validate('model', {
20
+ foo: {
21
+ type: DataType.STRING,
22
+ default: 'string',
23
+ },
24
+ bar: {
25
+ type: DataType.NUMBER,
26
+ default: 10,
27
+ },
28
+ });
29
+ });
30
+
31
+ it('throws an error if a model definition has a multiple primary keys', function () {
32
+ const throwable = () =>
33
+ S.validate('model', {
34
+ foo: {
35
+ type: DataType.NUMBER,
36
+ primaryKey: true,
37
+ },
38
+ bar: {
39
+ type: DataType.NUMBER,
40
+ primaryKey: true,
41
+ },
42
+ });
43
+ expect(throwable).to.throw(
44
+ 'The model definition "model" should not have ' +
45
+ 'multiple primary keys, but 2 keys given.',
46
+ );
47
+ });
48
+
49
+ it('throws an error if a default primary key is already in use as a regular property in case of a short property definition', function () {
50
+ const throwable = () =>
51
+ S.validate('model', {
52
+ [DEF_PK]: DataType.NUMBER,
53
+ });
54
+ expect(throwable).to.throw(
55
+ format(
56
+ 'The property name %v of the model "model" is defined as a regular property. ' +
57
+ 'In this case, a primary key should be defined explicitly. ' +
58
+ 'Do use the option "primaryKey" to specify the primary key.',
59
+ DEF_PK,
60
+ ),
61
+ );
62
+ });
63
+
64
+ it('throws an error if a default primary key is already in use as a regular property in case of a full property definition', function () {
65
+ const throwable = () =>
66
+ S.validate('model', {
67
+ [DEF_PK]: {
68
+ type: DataType.NUMBER,
69
+ },
70
+ });
71
+ expect(throwable).to.throw(
72
+ format(
73
+ 'The property name %v of the model "model" is defined as a regular property. ' +
74
+ 'In this case, a primary key should be defined explicitly. ' +
75
+ 'Do use the option "primaryKey" to specify the primary key.',
76
+ DEF_PK,
77
+ ),
78
+ );
79
+ });
80
+
81
+ it('throws an error if a default primary key is already in use as a regular property with a default value', function () {
82
+ const throwable = () =>
83
+ S.validate('model', {
84
+ [DEF_PK]: {
85
+ type: DataType.NUMBER,
86
+ default: 10,
87
+ },
88
+ });
89
+ expect(throwable).to.throw(
90
+ format(
91
+ 'The property name %v of the model "model" is defined as a regular property. ' +
92
+ 'In this case, a primary key should be defined explicitly. ' +
93
+ 'Do use the option "primaryKey" to specify the primary key.',
94
+ DEF_PK,
95
+ ),
96
+ );
97
+ });
98
+
99
+ it('throws an error if a default primary key defined explicitly and it has a default value', function () {
100
+ const throwable = () =>
101
+ S.validate('model', {
102
+ [DEF_PK]: {
103
+ type: DataType.NUMBER,
104
+ primaryKey: true,
105
+ default: 10,
106
+ },
107
+ });
108
+ expect(throwable).to.throw(
109
+ format(
110
+ 'Do not specify a default value for the ' +
111
+ 'primary key %v of the model "model".',
112
+ DEF_PK,
113
+ ),
114
+ );
115
+ });
116
+
117
+ it('does not throw an error if a default primary key is defined explicitly', function () {
118
+ S.validate('model', {
119
+ [DEF_PK]: {
120
+ type: DataType.NUMBER,
121
+ primaryKey: true,
122
+ },
123
+ });
124
+ });
125
+
126
+ it('does not throw an error if a primary key has a custom name', function () {
127
+ S.validate('model', {
128
+ myId: {
129
+ type: DataType.NUMBER,
130
+ primaryKey: true,
131
+ },
132
+ });
133
+ });
134
+
135
+ it('does not throw an error if a primary key has a custom name and a default primary key is used as a regular property', function () {
136
+ S.validate('model', {
137
+ myId: {
138
+ type: DataType.NUMBER,
139
+ primaryKey: true,
140
+ },
141
+ [DEF_PK]: DataType.STRING,
142
+ });
143
+ });
144
+ });
145
+ });
@@ -0,0 +1,15 @@
1
+ import {Service} from '@e22m4u/js-service';
2
+ import {PropertyDefinitionMap} from '../model-definition.js';
3
+
4
+ /**
5
+ * Properties definition validator.
6
+ */
7
+ export declare class PropertiesDefinitionValidator extends Service {
8
+ /**
9
+ * Validate.
10
+ *
11
+ * @param modelName
12
+ * @param propDefs
13
+ */
14
+ validate(modelName: string, propDefs: PropertyDefinitionMap): void;
15
+ }
@@ -0,0 +1,194 @@
1
+ import {Service} from '@e22m4u/js-service';
2
+ import {DataType as Type} from './data-type.js';
3
+ import {InvalidArgumentError} from '../../../errors/index.js';
4
+ import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
5
+ import {DefaultValuesDefinitionValidator} from './default-values-definition-validator.js';
6
+
7
+ /**
8
+ * Properties definition validator.
9
+ */
10
+ export class PropertiesDefinitionValidator extends Service {
11
+ /**
12
+ * Validate.
13
+ *
14
+ * @param {string} modelName
15
+ * @param {object} propDefs
16
+ */
17
+ validate(modelName, propDefs) {
18
+ if (!modelName || typeof modelName !== 'string')
19
+ throw new InvalidArgumentError(
20
+ 'A first argument of PropertiesDefinitionValidator.validate ' +
21
+ 'should be a non-empty String, but %v given.',
22
+ modelName,
23
+ );
24
+ if (!propDefs || typeof propDefs !== 'object' || Array.isArray(propDefs)) {
25
+ throw new InvalidArgumentError(
26
+ 'The provided option "properties" of the model %v ' +
27
+ 'should be an Object, but %v given.',
28
+ modelName,
29
+ propDefs,
30
+ );
31
+ }
32
+ const propNames = Object.keys(propDefs);
33
+ propNames.forEach(propName => {
34
+ const propDef = propDefs[propName];
35
+ this._validateProperty(modelName, propName, propDef);
36
+ });
37
+ this.getService(PrimaryKeysDefinitionValidator).validate(
38
+ modelName,
39
+ propDefs,
40
+ );
41
+ this.getService(DefaultValuesDefinitionValidator).validate(
42
+ modelName,
43
+ propDefs,
44
+ );
45
+ }
46
+
47
+ /**
48
+ * Validate property.
49
+ *
50
+ * @param {string} modelName
51
+ * @param {string} propName
52
+ * @param {object} propDef
53
+ */
54
+ _validateProperty(modelName, propName, propDef) {
55
+ if (!modelName || typeof modelName !== 'string')
56
+ throw new InvalidArgumentError(
57
+ 'A first argument of PropertiesDefinitionValidator._validateProperty ' +
58
+ 'should be a non-empty String, but %v given.',
59
+ modelName,
60
+ );
61
+ if (!propName || typeof propName !== 'string')
62
+ throw new InvalidArgumentError(
63
+ 'The property name of the model %v should be ' +
64
+ 'a non-empty String, but %v given.',
65
+ modelName,
66
+ propName,
67
+ );
68
+ if (!propDef)
69
+ throw new InvalidArgumentError(
70
+ 'The property %v of the model %v should have ' +
71
+ 'a property definition, but %v given.',
72
+ propName,
73
+ modelName,
74
+ propDef,
75
+ );
76
+ if (typeof propDef === 'string') {
77
+ if (!Object.values(Type).includes(propDef))
78
+ throw new InvalidArgumentError(
79
+ 'In case of a short property definition, the property %v ' +
80
+ 'of the model %v should have one of data types: %l, but %v given.',
81
+ propName,
82
+ modelName,
83
+ Object.values(Type),
84
+ propDef,
85
+ );
86
+ return;
87
+ }
88
+ if (!propDef || typeof propDef !== 'object' || Array.isArray(propDef)) {
89
+ throw new InvalidArgumentError(
90
+ 'In case of a full property definition, the property %v ' +
91
+ 'of the model %v should be an Object, but %v given.',
92
+ propName,
93
+ modelName,
94
+ propDef,
95
+ );
96
+ }
97
+ if (!propDef.type || !Object.values(Type).includes(propDef.type))
98
+ throw new InvalidArgumentError(
99
+ 'The property %v of the model %v requires the option "type" ' +
100
+ 'to have one of data types: %l, but %v given.',
101
+ propName,
102
+ modelName,
103
+ Object.values(Type),
104
+ propDef.type,
105
+ );
106
+ if (propDef.itemType && !Object.values(Type).includes(propDef.itemType)) {
107
+ throw new InvalidArgumentError(
108
+ 'The provided option "itemType" of the property %v in the model %v ' +
109
+ 'should have one of data types: %l, but %v given.',
110
+ propName,
111
+ modelName,
112
+ Object.values(Type),
113
+ propDef.itemType,
114
+ );
115
+ }
116
+ if (propDef.model && typeof propDef.model !== 'string')
117
+ throw new InvalidArgumentError(
118
+ 'The provided option "model" of the property %v in the model %v ' +
119
+ 'should be a String, but %v given.',
120
+ propName,
121
+ modelName,
122
+ propDef.model,
123
+ );
124
+ if (propDef.primaryKey && typeof propDef.primaryKey !== 'boolean')
125
+ throw new InvalidArgumentError(
126
+ 'The provided option "primaryKey" of the property %v in the model %v ' +
127
+ 'should be a Boolean, but %v given.',
128
+ propName,
129
+ modelName,
130
+ propDef.primaryKey,
131
+ );
132
+ if (propDef.columnName && typeof propDef.columnName !== 'string')
133
+ throw new InvalidArgumentError(
134
+ 'The provided option "columnName" of the property %v in the model %v ' +
135
+ 'should be a String, but %v given.',
136
+ propName,
137
+ modelName,
138
+ propDef.columnName,
139
+ );
140
+ if (propDef.columnType && typeof propDef.columnType !== 'string')
141
+ throw new InvalidArgumentError(
142
+ 'The provided option "columnType" of the property %v in the model %v ' +
143
+ 'should be a String, but %v given.',
144
+ propName,
145
+ modelName,
146
+ propDef.columnType,
147
+ );
148
+ if (propDef.required && typeof propDef.required !== 'boolean')
149
+ throw new InvalidArgumentError(
150
+ 'The provided option "required" of the property %v in the model %v ' +
151
+ 'should be a Boolean, but %v given.',
152
+ propName,
153
+ modelName,
154
+ propDef.required,
155
+ );
156
+ if (propDef.required && propDef.default !== undefined)
157
+ throw new InvalidArgumentError(
158
+ 'The property %v of the model %v is a required property, ' +
159
+ 'so it should not have the option "default" to be provided.',
160
+ propName,
161
+ modelName,
162
+ );
163
+ if (propDef.primaryKey && propDef.required)
164
+ throw new InvalidArgumentError(
165
+ 'The property %v of the model %v is a primary key, ' +
166
+ 'so it should not have the option "required" to be provided.',
167
+ propName,
168
+ modelName,
169
+ );
170
+ if (propDef.primaryKey && propDef.default !== undefined)
171
+ throw new InvalidArgumentError(
172
+ 'The property %v of the model %v is a primary key, ' +
173
+ 'so it should not have the option "default" to be provided.',
174
+ propName,
175
+ modelName,
176
+ );
177
+ if (propDef.itemType && propDef.type !== Type.ARRAY)
178
+ throw new InvalidArgumentError(
179
+ 'The property %v of the model %v has the non-array type, ' +
180
+ 'so it should not have the option "itemType" to be provided.',
181
+ propName,
182
+ modelName,
183
+ propDef.type,
184
+ );
185
+ if (propDef.model && propDef.type !== Type.OBJECT)
186
+ throw new InvalidArgumentError(
187
+ 'The property %v of the model %v has the non-object type, ' +
188
+ 'so it should not have the option "model" to be provided.',
189
+ propName,
190
+ modelName,
191
+ propDef.type,
192
+ );
193
+ }
194
+ }