@e22m4u/js-repository 0.6.5 → 0.8.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 (171) hide show
  1. package/.mocharc.json +2 -3
  2. package/README.md +128 -695
  3. package/dist/cjs/index.cjs +141 -1262
  4. package/eslint.config.js +29 -58
  5. package/jsconfig.json +7 -0
  6. package/package.json +12 -20
  7. package/src/adapter/adapter-loader.js +3 -4
  8. package/src/adapter/adapter.js +10 -11
  9. package/src/adapter/adapter.spec.js +13 -24
  10. package/src/adapter/builtin/memory-adapter.js +49 -19
  11. package/src/adapter/builtin/memory-adapter.spec.js +52 -2
  12. package/src/adapter/decorator/default-values-decorator.spec.js +1 -2
  13. package/src/adapter/decorator/index.js +0 -2
  14. package/src/database-schema.js +1 -2
  15. package/src/{database-schema.spec.ts → database-schema.spec.js} +5 -17
  16. package/src/definition/model/index.js +0 -3
  17. package/src/definition/model/model-definition-utils.js +1 -2
  18. package/src/definition/model/model-definition-utils.spec.js +5 -2
  19. package/src/definition/model/properties/index.js +0 -3
  20. package/src/definition/model/properties/properties-definition-validator.js +0 -169
  21. package/src/definition/model/properties/properties-definition-validator.spec.js +0 -162
  22. package/src/definition/model/relations/index.js +0 -1
  23. package/src/definition/model/relations/relations-definition-validator.js +4 -5
  24. package/src/filter/include-clause-tool.js +8 -6
  25. package/src/index.js +0 -1
  26. package/src/relations/belongs-to-resolver.js +1 -2
  27. package/src/relations/belongs-to-resolver.spec.js +6 -3
  28. package/src/relations/has-many-resolver.js +1 -2
  29. package/src/relations/has-many-resolver.spec.js +6 -3
  30. package/src/relations/has-one-resolver.js +1 -2
  31. package/src/relations/has-one-resolver.spec.js +6 -3
  32. package/src/relations/references-many-resolver.js +1 -2
  33. package/src/relations/references-many-resolver.spec.js +6 -3
  34. package/src/repository/repository.js +1 -2
  35. package/src/utils/index.js +0 -4
  36. package/src/utils/is-plain-object.js +4 -4
  37. package/src/utils/model-name-to-model-key.js +0 -4
  38. package/src/utils/model-name-to-model-key.spec.js +0 -23
  39. package/src/adapter/adapter-loader.d.ts +0 -16
  40. package/src/adapter/adapter-registry.d.ts +0 -14
  41. package/src/adapter/adapter.d.ts +0 -155
  42. package/src/adapter/builtin/memory-adapter.d.ts +0 -148
  43. package/src/adapter/decorator/data-sanitizing-decorator.d.ts +0 -14
  44. package/src/adapter/decorator/data-transformation-decorator.d.ts +0 -14
  45. package/src/adapter/decorator/data-transformation-decorator.js +0 -54
  46. package/src/adapter/decorator/data-transformation-decorator.spec.js +0 -193
  47. package/src/adapter/decorator/data-validation-decorator.d.ts +0 -14
  48. package/src/adapter/decorator/data-validation-decorator.js +0 -54
  49. package/src/adapter/decorator/data-validation-decorator.spec.js +0 -105
  50. package/src/adapter/decorator/default-values-decorator.d.ts +0 -14
  51. package/src/adapter/decorator/fields-filtering-decorator.d.ts +0 -14
  52. package/src/adapter/decorator/inclusion-decorator.d.ts +0 -14
  53. package/src/adapter/decorator/index.d.ts +0 -7
  54. package/src/adapter/decorator/property-uniqueness-decorator.d.ts +0 -14
  55. package/src/adapter/index.d.ts +0 -3
  56. package/src/database-schema.d.ts +0 -37
  57. package/src/definition/datasource/datasource-definition-validator.d.ts +0 -14
  58. package/src/definition/datasource/datasource-definition.d.ts +0 -8
  59. package/src/definition/datasource/index.d.ts +0 -2
  60. package/src/definition/definition-registry.d.ts +0 -50
  61. package/src/definition/index.d.ts +0 -3
  62. package/src/definition/model/index.d.ts +0 -8
  63. package/src/definition/model/model-data-sanitizer.d.ts +0 -15
  64. package/src/definition/model/model-data-transformer.d.ts +0 -16
  65. package/src/definition/model/model-data-transformer.js +0 -170
  66. package/src/definition/model/model-data-transformer.spec.js +0 -2312
  67. package/src/definition/model/model-data-validator.d.ts +0 -16
  68. package/src/definition/model/model-data-validator.js +0 -318
  69. package/src/definition/model/model-data-validator.spec.js +0 -4528
  70. package/src/definition/model/model-definition-utils.d.ts +0 -180
  71. package/src/definition/model/model-definition-validator.d.ts +0 -14
  72. package/src/definition/model/model-definition.d.ts +0 -28
  73. package/src/definition/model/model-definition.js +0 -1
  74. package/src/definition/model/properties/data-type.d.ts +0 -16
  75. package/src/definition/model/properties/index.d.ts +0 -8
  76. package/src/definition/model/properties/primary-keys-definition-validator.d.ts +0 -15
  77. package/src/definition/model/properties/properties-definition-validator.d.ts +0 -15
  78. package/src/definition/model/properties/property-definition.d.ts +0 -27
  79. package/src/definition/model/properties/property-definition.js +0 -1
  80. package/src/definition/model/properties/property-transformer/builtin/index.d.ts +0 -3
  81. package/src/definition/model/properties/property-transformer/builtin/index.js +0 -3
  82. package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.d.ts +0 -6
  83. package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.js +0 -19
  84. package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.spec.js +0 -39
  85. package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.d.ts +0 -6
  86. package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.js +0 -19
  87. package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.spec.js +0 -39
  88. package/src/definition/model/properties/property-transformer/builtin/trim-transformer.d.ts +0 -6
  89. package/src/definition/model/properties/property-transformer/builtin/trim-transformer.js +0 -19
  90. package/src/definition/model/properties/property-transformer/builtin/trim-transformer.spec.js +0 -39
  91. package/src/definition/model/properties/property-transformer/index.d.ts +0 -2
  92. package/src/definition/model/properties/property-transformer/index.js +0 -2
  93. package/src/definition/model/properties/property-transformer/property-transformer-registry.d.ts +0 -29
  94. package/src/definition/model/properties/property-transformer/property-transformer-registry.js +0 -76
  95. package/src/definition/model/properties/property-transformer/property-transformer-registry.spec.js +0 -133
  96. package/src/definition/model/properties/property-transformer/property-transformer.d.ts +0 -27
  97. package/src/definition/model/properties/property-transformer/property-transformer.js +0 -1
  98. package/src/definition/model/properties/property-uniqueness-validator.d.ts +0 -31
  99. package/src/definition/model/properties/property-uniqueness.d.ts +0 -14
  100. package/src/definition/model/properties/property-validator/builtin/index.d.ts +0 -3
  101. package/src/definition/model/properties/property-validator/builtin/index.js +0 -3
  102. package/src/definition/model/properties/property-validator/builtin/max-length-validator.d.ts +0 -6
  103. package/src/definition/model/properties/property-validator/builtin/max-length-validator.js +0 -28
  104. package/src/definition/model/properties/property-validator/builtin/max-length-validator.spec.js +0 -100
  105. package/src/definition/model/properties/property-validator/builtin/min-length-validator.d.ts +0 -6
  106. package/src/definition/model/properties/property-validator/builtin/min-length-validator.js +0 -28
  107. package/src/definition/model/properties/property-validator/builtin/min-length-validator.spec.js +0 -100
  108. package/src/definition/model/properties/property-validator/builtin/regexp-validator.d.ts +0 -6
  109. package/src/definition/model/properties/property-validator/builtin/regexp-validator.js +0 -30
  110. package/src/definition/model/properties/property-validator/builtin/regexp-validator.spec.js +0 -102
  111. package/src/definition/model/properties/property-validator/index.d.ts +0 -2
  112. package/src/definition/model/properties/property-validator/index.js +0 -2
  113. package/src/definition/model/properties/property-validator/property-validator-registry.d.ts +0 -29
  114. package/src/definition/model/properties/property-validator/property-validator-registry.js +0 -76
  115. package/src/definition/model/properties/property-validator/property-validator-registry.spec.js +0 -132
  116. package/src/definition/model/properties/property-validator/property-validator.d.ts +0 -25
  117. package/src/definition/model/properties/property-validator/property-validator.js +0 -1
  118. package/src/definition/model/relations/index.d.ts +0 -3
  119. package/src/definition/model/relations/relation-definition.d.ts +0 -236
  120. package/src/definition/model/relations/relation-definition.js +0 -1
  121. package/src/definition/model/relations/relation-type.d.ts +0 -14
  122. package/src/definition/model/relations/relations-definition-validator.d.ts +0 -15
  123. package/src/errors/index.d.ts +0 -3
  124. package/src/errors/invalid-argument-error.d.ts +0 -6
  125. package/src/errors/invalid-operator-value-error.d.ts +0 -13
  126. package/src/errors/not-implemented-error.d.ts +0 -6
  127. package/src/filter/fields-clause-tool.d.ts +0 -38
  128. package/src/filter/filter-clause.d.ts +0 -348
  129. package/src/filter/include-clause-tool.d.ts +0 -55
  130. package/src/filter/index.d.ts +0 -7
  131. package/src/filter/operator-clause-tool.d.ts +0 -224
  132. package/src/filter/order-clause-tool.d.ts +0 -32
  133. package/src/filter/slice-clause-tool.d.ts +0 -30
  134. package/src/filter/where-clause-tool.d.ts +0 -23
  135. package/src/index.d.ts +0 -9
  136. package/src/relations/belongs-to-resolver.d.ts +0 -46
  137. package/src/relations/has-many-resolver.d.ts +0 -67
  138. package/src/relations/has-one-resolver.d.ts +0 -67
  139. package/src/relations/index.d.ts +0 -4
  140. package/src/relations/references-many-resolver.d.ts +0 -27
  141. package/src/repository/index.d.ts +0 -2
  142. package/src/repository/repository-registry.d.ts +0 -29
  143. package/src/repository/repository.d.ts +0 -183
  144. package/src/types.d.ts +0 -43
  145. package/src/types.js +0 -1
  146. package/src/utils/capitalize.d.ts +0 -6
  147. package/src/utils/clone-deep.d.ts +0 -6
  148. package/src/utils/exclude-object-keys.d.ts +0 -10
  149. package/src/utils/get-ctor-name.d.ts +0 -6
  150. package/src/utils/get-ctor-name.js +0 -11
  151. package/src/utils/get-ctor-name.spec.js +0 -17
  152. package/src/utils/get-decorator-target-type.d.ts +0 -27
  153. package/src/utils/get-decorator-target-type.js +0 -63
  154. package/src/utils/get-decorator-target-type.spec.js +0 -80
  155. package/src/utils/get-value-by-path.d.ts +0 -12
  156. package/src/utils/index.d.ts +0 -16
  157. package/src/utils/is-ctor.d.ts +0 -8
  158. package/src/utils/is-ctor.js +0 -11
  159. package/src/utils/is-ctor.spec.js +0 -26
  160. package/src/utils/is-deep-equal.d.ts +0 -10
  161. package/src/utils/is-plain-object.d.ts +0 -6
  162. package/src/utils/is-promise.d.ts +0 -10
  163. package/src/utils/like-to-regexp.d.ts +0 -14
  164. package/src/utils/model-name-to-model-key.d.ts +0 -6
  165. package/src/utils/select-object-keys.d.ts +0 -10
  166. package/src/utils/singularize.d.ts +0 -6
  167. package/src/utils/string-to-regexp.d.ts +0 -10
  168. package/src/utils/transform-promise.d.ts +0 -13
  169. package/src/utils/transform-promise.js +0 -15
  170. package/src/utils/transform-promise.spec.js +0 -19
  171. package/tsconfig.json +0 -11
@@ -3,8 +3,6 @@ import {DataType as Type} from './data-type.js';
3
3
  import {capitalize} from '../../../utils/index.js';
4
4
  import {PropertyUniqueness} from './property-uniqueness.js';
5
5
  import {InvalidArgumentError} from '../../../errors/index.js';
6
- import {PropertyValidatorRegistry} from './property-validator/index.js';
7
- import {PropertyTransformerRegistry} from './property-transformer/index.js';
8
6
  import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
9
7
 
10
8
  /**
@@ -228,173 +226,6 @@ export class PropertiesDefinitionValidator extends Service {
228
226
  propName,
229
227
  modelName,
230
228
  );
231
- // если определена опция "validate", то проверяется значение
232
- // опции, которое может являться строкой, массивом или объектом
233
- if (propDef.validate != null) {
234
- const propertyValidatorRegistry = this.getService(
235
- PropertyValidatorRegistry,
236
- );
237
- // если опция "validate" содержит строку, то проверяется
238
- // наличие зарегистрированного валидатора по названию
239
- if (propDef.validate && typeof propDef.validate === 'string') {
240
- // если название валидатора не зарегистрировано,
241
- // то выбрасывается ошибка
242
- if (!propertyValidatorRegistry.hasValidator(propDef.validate))
243
- throw new InvalidArgumentError(
244
- 'The property validator %v is not found.',
245
- propDef.validate,
246
- );
247
- }
248
- // если опция "validate" содержит функцию, то данная функция
249
- // воспринимается как пользовательский валидатор
250
- else if (propDef.validate && typeof propDef.validate === 'function') {
251
- // (допустимо)
252
- }
253
- // если опция "validate" содержит массив, то проверяется
254
- // каждый элемент массива
255
- else if (Array.isArray(propDef.validate)) {
256
- for (const validatorOrName of propDef.validate) {
257
- // если элемент массива является строкой, то проверяется
258
- // наличие зарегистрированного валидатора по названию
259
- if (validatorOrName && typeof validatorOrName === 'string') {
260
- if (!propertyValidatorRegistry.hasValidator(validatorOrName))
261
- throw new InvalidArgumentError(
262
- 'The property validator %v is not found.',
263
- validatorOrName,
264
- );
265
- }
266
- // если элемент массива является функцией, то данная функция
267
- // воспринимается как пользовательский валидатор
268
- else if (validatorOrName && typeof validatorOrName === 'function') {
269
- // (допустимо)
270
- }
271
- // если элемент массива не является названием зарегистрированного
272
- // валидатора или функцией-валидатором, то выбрасывается ошибка
273
- else {
274
- throw new InvalidArgumentError(
275
- 'The provided option "validate" for the property %v in the model %v ' +
276
- 'has an Array value that should contain validator names or validator ' +
277
- 'functions, but %v was given.',
278
- propName,
279
- modelName,
280
- validatorOrName,
281
- );
282
- }
283
- }
284
- }
285
- // если опция "validate" содержит объект, то проверяются ключи данного
286
- // объекта, которые должны являться названиями зарегистрированных
287
- // валидаторов, а значения их аргументами
288
- else if (typeof propDef.validate === 'object') {
289
- Object.keys(propDef.validate).forEach(validatorName => {
290
- // если ключ объекта не является названием зарегистрированного
291
- // валидатора, то выбрасывается ошибка
292
- if (!propertyValidatorRegistry.hasValidator(validatorName))
293
- throw new InvalidArgumentError(
294
- 'The property validator %v is not found.',
295
- validatorName,
296
- );
297
- });
298
- }
299
- // если опция "validate" не является не пустой строкой, функцией,
300
- // массивом и объектом, то выбрасывается ошибка
301
- else {
302
- throw new InvalidArgumentError(
303
- 'The provided option "validate" for the property %v in the model %v ' +
304
- 'should be either a validator name, a validator function, an array ' +
305
- 'of validator names or functions, or an object mapping validator ' +
306
- 'names to their arguments, but %v was given.',
307
- propName,
308
- modelName,
309
- propDef.validate,
310
- );
311
- }
312
- }
313
- // если определена опция "transform", то проверяется значение
314
- // опции, которое может являться строкой, массивом или объектом
315
- if (propDef.transform != null) {
316
- const propertyTransformerRegistry = this.getService(
317
- PropertyTransformerRegistry,
318
- );
319
- // если опция "transform" содержит строку, то проверяется
320
- // наличие зарегистрированного трансформера по названию
321
- if (propDef.transform && typeof propDef.transform === 'string') {
322
- // если название трансформера не зарегистрировано,
323
- // то выбрасывается ошибка
324
- if (!propertyTransformerRegistry.hasTransformer(propDef.transform))
325
- throw new InvalidArgumentError(
326
- 'The property transformer %v is not found.',
327
- propDef.transform,
328
- );
329
- }
330
- // если опция "transform" содержит функцию, то данная функция
331
- // воспринимается как пользовательский трансформер
332
- else if (propDef.transform && typeof propDef.transform === 'function') {
333
- // (допустимо)
334
- }
335
- // если опция "transform" содержит массив, то проверяется
336
- // каждый элемент массива
337
- else if (Array.isArray(propDef.transform)) {
338
- for (const transformerOrName of propDef.transform) {
339
- // если элемент массива является строкой, то проверяется
340
- // наличие зарегистрированного трансформера по названию
341
- if (transformerOrName && typeof transformerOrName === 'string') {
342
- if (!propertyTransformerRegistry.hasTransformer(transformerOrName))
343
- throw new InvalidArgumentError(
344
- 'The property transformer %v is not found.',
345
- transformerOrName,
346
- );
347
- }
348
- // если элемент массива является функцией, то данная функция
349
- // воспринимается как пользовательский трансформер
350
- else if (
351
- transformerOrName &&
352
- typeof transformerOrName === 'function'
353
- ) {
354
- // (допустимо)
355
- }
356
- // если элемент массива не является названием зарегистрированного
357
- // трансформера или функцией-трансформером, то выбрасывается ошибка
358
- else {
359
- throw new InvalidArgumentError(
360
- 'The provided option "transform" for the property %v in the model %v ' +
361
- 'has an Array value that should contain transformer names or transformer ' +
362
- 'functions, but %v was given.',
363
- propName,
364
- modelName,
365
- transformerOrName,
366
- );
367
- }
368
- }
369
- }
370
- // если опция "transform" содержит объект, то проверяются ключи данного
371
- // объекта, которые должны являться названиями зарегистрированных
372
- // трансформеров, а значения их аргументами
373
- else if (typeof propDef.transform === 'object') {
374
- Object.keys(propDef.transform).forEach(transformerName => {
375
- // если ключ объекта не является названием зарегистрированного
376
- // валидатора, то выбрасывается ошибка
377
- if (!propertyTransformerRegistry.hasTransformer(transformerName))
378
- throw new InvalidArgumentError(
379
- 'The property transformer %v is not found.',
380
- transformerName,
381
- );
382
- });
383
- }
384
- // если опция "transform" не является не пустой строкой, функцией,
385
- // массивом и объектом, то выбрасывается ошибка
386
- else {
387
- throw new InvalidArgumentError(
388
- 'The provided option "transform" for the property %v in the model %v ' +
389
- 'should be either a transformer name, a transformer function, an array ' +
390
- 'of transformer names or functions, or an object mapping transformer ' +
391
- 'names to their arguments, but %v was given.',
392
- propName,
393
- modelName,
394
- propDef.transform,
395
- );
396
- }
397
- }
398
229
  if (propDef.unique) {
399
230
  if (
400
231
  typeof propDef.unique !== 'boolean' &&
@@ -3,20 +3,12 @@ import {chai} from '../../../chai.js';
3
3
  import {DataType} from './data-type.js';
4
4
  import {format} from '@e22m4u/js-format';
5
5
  import {PropertyUniqueness} from './property-uniqueness.js';
6
- import {PropertyValidatorRegistry} from './property-validator/index.js';
7
- import {PropertyTransformerRegistry} from './property-transformer/index.js';
8
6
  import {PropertiesDefinitionValidator} from './properties-definition-validator.js';
9
7
  import {PrimaryKeysDefinitionValidator} from './primary-keys-definition-validator.js';
10
8
 
11
9
  const S = new PropertiesDefinitionValidator();
12
10
  const sandbox = chai.spy.sandbox();
13
11
 
14
- S.getService(PropertyValidatorRegistry).addValidator('myValidator', () => true);
15
- S.getService(PropertyTransformerRegistry).addTransformer(
16
- 'myTransformer',
17
- () => true,
18
- );
19
-
20
12
  describe('PropertiesDefinitionValidator', function () {
21
13
  afterEach(function () {
22
14
  sandbox.restore();
@@ -426,160 +418,6 @@ describe('PropertiesDefinitionValidator', function () {
426
418
  expect(V.validate).to.have.been.called.with.exactly('model', propDefs);
427
419
  });
428
420
 
429
- it('the option "validate" should have a non-empty String, a Function, an Array or an Object', function () {
430
- const validate = v => () => {
431
- const foo = {
432
- type: DataType.ANY,
433
- validate: v,
434
- };
435
- S.validate('model', {foo});
436
- };
437
- const error = v =>
438
- format(
439
- 'The provided option "validate" for the property "foo" in the model "model" ' +
440
- 'should be either a validator name, a validator function, an array ' +
441
- 'of validator names or functions, or an object mapping validator ' +
442
- 'names to their arguments, but %s was given.',
443
- v,
444
- );
445
- expect(validate('')).to.throw(error('""'));
446
- expect(validate(10)).to.throw(error('10'));
447
- expect(validate(0)).to.throw(error('0'));
448
- expect(validate(true)).to.throw(error('true'));
449
- expect(validate(false)).to.throw(error('false'));
450
- validate('myValidator')();
451
- validate(() => true)();
452
- validate(['myValidator'])();
453
- validate([() => true])();
454
- validate([])();
455
- validate({myValidator: true})();
456
- validate({})();
457
- validate(null)();
458
- validate(undefined)();
459
- });
460
-
461
- it('the option "validate" with an Array value requires elements to be a non-empty String or a Function', function () {
462
- const validate = v => () => {
463
- const foo = {
464
- type: DataType.ANY,
465
- validate: [v],
466
- };
467
- S.validate('model', {foo});
468
- };
469
- const error = v =>
470
- format(
471
- 'The provided option "validate" for the property "foo" in the model "model" ' +
472
- 'has an Array value that should contain validator names or validator functions, ' +
473
- 'but %s was given.',
474
- v,
475
- );
476
- expect(validate('')).to.throw(error('""'));
477
- expect(validate(10)).to.throw(error('10'));
478
- expect(validate(0)).to.throw(error('0'));
479
- expect(validate(true)).to.throw(error('true'));
480
- expect(validate(false)).to.throw(error('false'));
481
- expect(validate([1, 2, 3])).to.throw(error('Array'));
482
- expect(validate({foo: 'bar'})).to.throw(error('Object'));
483
- expect(validate(null)).to.throw(error('null'));
484
- expect(validate(undefined)).to.throw(error('undefined'));
485
- validate('myValidator')();
486
- validate(() => true)();
487
- });
488
-
489
- it('the option "validate" requires only existing validator names', function () {
490
- const validate = v => () => {
491
- const foo = {
492
- type: DataType.ANY,
493
- validate: v,
494
- };
495
- S.validate('model', {foo});
496
- };
497
- const error = v => format('The property validator %s is not found.', v);
498
- expect(validate('unknown')).to.throw(error('"unknown"'));
499
- expect(validate({unknown: true})).to.throw(error('"unknown"'));
500
- expect(validate(['unknown'])).to.throw(error('"unknown"'));
501
- validate('myValidator')();
502
- validate(['myValidator'])();
503
- validate({myValidator: true})();
504
- });
505
-
506
- it('the option "transform" should have a non-empty String, a Function, an Array or an Object', function () {
507
- const validate = v => () => {
508
- const foo = {
509
- type: DataType.ANY,
510
- transform: v,
511
- };
512
- S.validate('model', {foo});
513
- };
514
- const error = v =>
515
- format(
516
- 'The provided option "transform" for the property "foo" in the model "model" ' +
517
- 'should be either a transformer name, a transformer function, an array ' +
518
- 'of transformer names or functions, or an object mapping transformer ' +
519
- 'names to their arguments, but %s was given.',
520
- v,
521
- );
522
- expect(validate('')).to.throw(error('""'));
523
- expect(validate(10)).to.throw(error('10'));
524
- expect(validate(0)).to.throw(error('0'));
525
- expect(validate(true)).to.throw(error('true'));
526
- expect(validate(false)).to.throw(error('false'));
527
- validate('myTransformer')();
528
- validate(v => v)();
529
- validate(['myTransformer'])();
530
- validate([v => v])();
531
- validate([])();
532
- validate({myTransformer: true})();
533
- validate({})();
534
- validate(null)();
535
- validate(undefined)();
536
- });
537
-
538
- it('the option "transform" with an Array value requires elements to be a non-empty String or a Function', function () {
539
- const validate = v => () => {
540
- const foo = {
541
- type: DataType.ANY,
542
- transform: [v],
543
- };
544
- S.validate('model', {foo});
545
- };
546
- const error = v =>
547
- format(
548
- 'The provided option "transform" for the property "foo" in the model "model" ' +
549
- 'has an Array value that should contain transformer names or transformer functions, ' +
550
- 'but %s was given.',
551
- v,
552
- );
553
- expect(validate('')).to.throw(error('""'));
554
- expect(validate(10)).to.throw(error('10'));
555
- expect(validate(0)).to.throw(error('0'));
556
- expect(validate(true)).to.throw(error('true'));
557
- expect(validate(false)).to.throw(error('false'));
558
- expect(validate([1, 2, 3])).to.throw(error('Array'));
559
- expect(validate({foo: 'bar'})).to.throw(error('Object'));
560
- expect(validate(null)).to.throw(error('null'));
561
- expect(validate(undefined)).to.throw(error('undefined'));
562
- validate('myTransformer')();
563
- validate(v => v)();
564
- });
565
-
566
- it('the option "transform" requires only existing transformer names', function () {
567
- const validate = v => () => {
568
- const foo = {
569
- type: DataType.ANY,
570
- transform: v,
571
- };
572
- S.validate('model', {foo});
573
- };
574
- const error = v => format('The property transformer %s is not found.', v);
575
- expect(validate('unknown')).to.throw(error('"unknown"'));
576
- expect(validate({unknown: true})).to.throw(error('"unknown"'));
577
- expect(validate(['unknown'])).to.throw(error('"unknown"'));
578
- validate('myTransformer')();
579
- validate(['myTransformer'])();
580
- validate({myTransformer: true})();
581
- });
582
-
583
421
  it('expects the provided option "unique" to be a Boolean or the PropertyUniqueness', function () {
584
422
  const validate = v => {
585
423
  const foo = {
@@ -1,3 +1,2 @@
1
1
  export * from './relation-type.js';
2
- export * from './relation-definition.js';
3
2
  export * from './relations-definition-validator.js';
@@ -1,6 +1,5 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
2
  import {RelationType} from './relation-type.js';
3
- import {RelationType as Type} from './relation-type.js';
4
3
  import {InvalidArgumentError} from '../../../errors/index.js';
5
4
 
6
5
  /**
@@ -62,13 +61,13 @@ export class RelationsDefinitionValidator extends Service {
62
61
  modelName,
63
62
  relDef,
64
63
  );
65
- if (!relDef.type || !Object.values(Type).includes(relDef.type))
64
+ if (!relDef.type || !Object.values(RelationType).includes(relDef.type))
66
65
  throw new InvalidArgumentError(
67
66
  'The relation %v of the model %v requires the option "type" ' +
68
67
  'to have one of relation types: %l, but %v was given.',
69
68
  relName,
70
69
  modelName,
71
- Object.values(Type),
70
+ Object.values(RelationType),
72
71
  relDef.type,
73
72
  );
74
73
  this._validateBelongsTo(modelName, relName, relDef);
@@ -105,7 +104,7 @@ export class RelationsDefinitionValidator extends Service {
105
104
  * @private
106
105
  */
107
106
  _validateBelongsTo(modelName, relName, relDef) {
108
- if (relDef.type !== Type.BELONGS_TO) return;
107
+ if (relDef.type !== RelationType.BELONGS_TO) return;
109
108
  if (relDef.polymorphic) {
110
109
  // A polymorphic "belongsTo" relation.
111
110
  if (typeof relDef.polymorphic !== 'boolean')
@@ -419,7 +418,7 @@ export class RelationsDefinitionValidator extends Service {
419
418
  * @private
420
419
  */
421
420
  _validateReferencesMany(modelName, relName, relDef) {
422
- if (relDef.type !== Type.REFERENCES_MANY) return;
421
+ if (relDef.type !== RelationType.REFERENCES_MANY) return;
423
422
  if (!relDef.model || typeof relDef.model !== 'string')
424
423
  throw new InvalidArgumentError(
425
424
  'The relation %v of the model %v has the type "referencesMany", ' +
@@ -1,15 +1,17 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
- import {RelationType} from '../definition/index.js';
3
- import {HasOneResolver} from '../relations/index.js';
4
- import {HasManyResolver} from '../relations/index.js';
5
2
  import {WhereClauseTool} from './where-clause-tool.js';
6
3
  import {OrderClauseTool} from './order-clause-tool.js';
7
4
  import {SliceClauseTool} from './slice-clause-tool.js';
8
5
  import {InvalidArgumentError} from '../errors/index.js';
9
- import {BelongsToResolver} from '../relations/index.js';
10
6
  import {FieldsClauseTool} from './fields-clause-tool.js';
11
- import {ModelDefinitionUtils} from '../definition/index.js';
12
- import {ReferencesManyResolver} from '../relations/index.js';
7
+ import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
8
+
9
+ import {
10
+ HasOneResolver,
11
+ HasManyResolver,
12
+ BelongsToResolver,
13
+ ReferencesManyResolver,
14
+ } from '../relations/index.js';
13
15
 
14
16
  /**
15
17
  * Include clause tool.
package/src/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export * from './types.js';
2
1
  export * from './utils/index.js';
3
2
  export * from './errors/index.js';
4
3
  export * from './filter/index.js';
@@ -1,7 +1,6 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
- import {cloneDeep} from '../utils/index.js';
3
- import {singularize} from '../utils/index.js';
4
2
  import {InvalidArgumentError} from '../errors/index.js';
3
+ import {cloneDeep, singularize} from '../utils/index.js';
5
4
  import {RepositoryRegistry} from '../repository/index.js';
6
5
  import {ModelDefinitionUtils} from '../definition/index.js';
7
6
 
@@ -1,10 +1,13 @@
1
1
  import {expect} from 'chai';
2
2
  import {format} from '@e22m4u/js-format';
3
- import {DataType} from '../definition/index.js';
4
- import {RelationType} from '../definition/index.js';
5
3
  import {DatabaseSchema} from '../database-schema.js';
6
4
  import {BelongsToResolver} from './belongs-to-resolver.js';
7
- import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
5
+
6
+ import {
7
+ DataType,
8
+ RelationType,
9
+ DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
10
+ } from '../definition/index.js';
8
11
 
9
12
  describe('BelongsToResolver', function () {
10
13
  describe('includeTo', function () {
@@ -1,9 +1,8 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
2
  import {cloneDeep} from '../utils/index.js';
3
- import {RelationType} from '../definition/index.js';
4
3
  import {InvalidArgumentError} from '../errors/index.js';
5
4
  import {RepositoryRegistry} from '../repository/index.js';
6
- import {ModelDefinitionUtils} from '../definition/index.js';
5
+ import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
7
6
 
8
7
  /**
9
8
  * Has many resolver.
@@ -1,10 +1,13 @@
1
1
  import {expect} from 'chai';
2
2
  import {format} from '@e22m4u/js-format';
3
- import {DataType} from '../definition/index.js';
4
- import {RelationType} from '../definition/index.js';
5
3
  import {DatabaseSchema} from '../database-schema.js';
6
4
  import {HasManyResolver} from './has-many-resolver.js';
7
- import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
5
+
6
+ import {
7
+ DataType,
8
+ RelationType,
9
+ DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
10
+ } from '../definition/index.js';
8
11
 
9
12
  describe('HasManyResolver', function () {
10
13
  describe('includeTo', function () {
@@ -1,9 +1,8 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
2
  import {cloneDeep} from '../utils/index.js';
3
- import {RelationType} from '../definition/index.js';
4
3
  import {InvalidArgumentError} from '../errors/index.js';
5
4
  import {RepositoryRegistry} from '../repository/index.js';
6
- import {ModelDefinitionUtils} from '../definition/index.js';
5
+ import {RelationType, ModelDefinitionUtils} from '../definition/index.js';
7
6
 
8
7
  /**
9
8
  * Has one resolver.
@@ -1,10 +1,13 @@
1
1
  import {expect} from 'chai';
2
2
  import {format} from '@e22m4u/js-format';
3
- import {DataType} from '../definition/index.js';
4
- import {RelationType} from '../definition/index.js';
5
3
  import {HasOneResolver} from './has-one-resolver.js';
6
4
  import {DatabaseSchema} from '../database-schema.js';
7
- import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
5
+
6
+ import {
7
+ DataType,
8
+ RelationType,
9
+ DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
10
+ } from '../definition/index.js';
8
11
 
9
12
  describe('HasOneResolver', function () {
10
13
  describe('includeTo', function () {
@@ -1,7 +1,6 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
- import {cloneDeep} from '../utils/index.js';
3
- import {singularize} from '../utils/index.js';
4
2
  import {InvalidArgumentError} from '../errors/index.js';
3
+ import {cloneDeep, singularize} from '../utils/index.js';
5
4
  import {RepositoryRegistry} from '../repository/index.js';
6
5
  import {ModelDefinitionUtils} from '../definition/index.js';
7
6
 
@@ -1,10 +1,13 @@
1
1
  import {expect} from 'chai';
2
2
  import {format} from '@e22m4u/js-format';
3
- import {DataType} from '../definition/index.js';
4
- import {RelationType} from '../definition/index.js';
5
3
  import {DatabaseSchema} from '../database-schema.js';
6
4
  import {ReferencesManyResolver} from './references-many-resolver.js';
7
- import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '../definition/index.js';
5
+
6
+ import {
7
+ DataType,
8
+ RelationType,
9
+ DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK,
10
+ } from '../definition/index.js';
8
11
 
9
12
  describe('ReferencesManyResolver', function () {
10
13
  describe('includeTo', function () {
@@ -1,8 +1,7 @@
1
1
  import {Service} from '@e22m4u/js-service';
2
- import {Adapter} from '../adapter/index.js';
3
- import {AdapterRegistry} from '../adapter/index.js';
4
2
  import {InvalidArgumentError} from '../errors/index.js';
5
3
  import {DefinitionRegistry} from '../definition/index.js';
4
+ import {Adapter, AdapterRegistry} from '../adapter/index.js';
6
5
 
7
6
  /**
8
7
  * Repository.
@@ -1,16 +1,12 @@
1
- export * from './is-ctor.js';
2
1
  export * from './is-promise.js';
3
2
  export * from './capitalize.js';
4
3
  export * from './clone-deep.js';
5
4
  export * from './singularize.js';
6
5
  export * from './is-deep-equal.js';
7
- export * from './get-ctor-name.js';
8
6
  export * from './like-to-regexp.js';
9
7
  export * from './is-plain-object.js';
10
8
  export * from './string-to-regexp.js';
11
9
  export * from './get-value-by-path.js';
12
- export * from './transform-promise.js';
13
10
  export * from './select-object-keys.js';
14
11
  export * from './exclude-object-keys.js';
15
12
  export * from './model-name-to-model-key.js';
16
- export * from './get-decorator-target-type.js';
@@ -7,9 +7,9 @@
7
7
  export function isPlainObject(value) {
8
8
  return Boolean(
9
9
  typeof value === 'object' &&
10
- value &&
11
- !Array.isArray(value) &&
12
- (!value.constructor ||
13
- (value.constructor && value.constructor.name === 'Object')),
10
+ value &&
11
+ !Array.isArray(value) &&
12
+ (!value.constructor ||
13
+ (value.constructor && value.constructor.name === 'Object')),
14
14
  );
15
15
  }
@@ -13,9 +13,5 @@ export function modelNameToModelKey(modelName) {
13
13
  'without spaces, but %v was given.',
14
14
  modelName,
15
15
  );
16
- if (modelName.toLowerCase() !== 'model')
17
- modelName = modelName
18
- .replace(/[-_]?Model$/, '')
19
- .replace(/[-_](MODEL|model)$/, '');
20
16
  return modelName.toLowerCase().replace(/[-_]/g, '');
21
17
  }
@@ -36,29 +36,6 @@ describe('modelNameToModelKey', function () {
36
36
  expect(modelNameToModelKey(modelName)).to.be.eq(expected);
37
37
  });
38
38
 
39
- it('should remove the "model" word from a model name', function () {
40
- const modelNames = [
41
- 'userProfileDetailsModel',
42
- 'UserProfileDetailsModel',
43
- 'user-profile-details-model',
44
- 'user_profile_details_model',
45
- 'User-Profile-Details-Model',
46
- 'User_Profile_Details_Model',
47
- 'USER-PROFILE-DETAILS-MODEL',
48
- 'USER_PROFILE_DETAILS_MODEL',
49
- ];
50
- modelNames.forEach(v =>
51
- expect(modelNameToModelKey(v)).to.be.eq('userprofiledetails'),
52
- );
53
- });
54
-
55
- it('should not remove the "model" suffix as a part of last word in a model name', function () {
56
- const exceptions = ['SUPERMODEL', 'supermodel'];
57
- exceptions.forEach(v =>
58
- expect(modelNameToModelKey(v)).to.be.eq('supermodel'),
59
- );
60
- });
61
-
62
39
  it('should throw an error for an empty string', function () {
63
40
  const throwable = () => modelNameToModelKey('');
64
41
  expect(throwable).to.throw(
@@ -1,16 +0,0 @@
1
- import {Adapter} from './adapter.js';
2
- import {AnyObject} from '../types.js';
3
- import {Service} from '@e22m4u/js-service';
4
-
5
- /**
6
- * Adapter loader.
7
- */
8
- export declare class AdapterLoader extends Service {
9
- /**
10
- * Load by name.
11
- *
12
- * @param adapterName
13
- * @param settings
14
- */
15
- loadByName(adapterName: string, settings?: AnyObject): Promise<Adapter>;
16
- }