@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
@@ -1,14 +0,0 @@
1
- import {Adapter} from './adapter.js';
2
- import {Service} from '@e22m4u/js-service';
3
-
4
- /**
5
- * Adapter registry.
6
- */
7
- export declare class AdapterRegistry extends Service {
8
- /**
9
- * Get adapter.
10
- *
11
- * @param datasourceName
12
- */
13
- getAdapter(datasourceName: string): Promise<Adapter>;
14
- }
@@ -1,155 +0,0 @@
1
- import {ModelId} from '../types.js';
2
- import {AnyObject} from '../types.js';
3
- import {ModelData} from '../types.js';
4
- import {Service} from '@e22m4u/js-service';
5
- import {WhereClause} from '../filter/index.js';
6
- import {FilterClause} from '../filter/index.js';
7
- import {ItemFilterClause} from '../filter/index.js';
8
- import {ServiceContainer} from '@e22m4u/js-service';
9
-
10
- /**
11
- * Adapter.
12
- */
13
- export declare class Adapter extends Service {
14
- /**
15
- * Kind.
16
- *
17
- * @type {string}
18
- */
19
- static kind: string;
20
-
21
- /**
22
- * Settings.
23
- */
24
- get settings(): AnyObject | undefined;
25
-
26
- /**
27
- * Constructor.
28
- *
29
- * @param container
30
- * @param settings
31
- */
32
- constructor(container?: ServiceContainer, settings?: AnyObject);
33
-
34
- /**
35
- * Create.
36
- *
37
- * @param modelName
38
- * @param modelData
39
- * @param filter
40
- */
41
- create(
42
- modelName: string,
43
- modelData: ModelData,
44
- filter?: ItemFilterClause,
45
- ): Promise<ModelData>;
46
-
47
- /**
48
- * Replace by id.
49
- *
50
- * @param modelName
51
- * @param id
52
- * @param modelData
53
- * @param filter
54
- */
55
- replaceById(
56
- modelName: string,
57
- id: ModelId,
58
- modelData: ModelData,
59
- filter?: ItemFilterClause,
60
- ): Promise<ModelData>;
61
-
62
- /**
63
- * Replace or create.
64
- *
65
- * @param modelName
66
- * @param modelData
67
- * @param filter
68
- */
69
- replaceOrCreate(
70
- modelName: string,
71
- modelData: ModelData,
72
- filter?: ItemFilterClause,
73
- ): Promise<ModelData>;
74
-
75
- /**
76
- * Patch.
77
- *
78
- * @param modelName
79
- * @param modelData
80
- * @param where
81
- */
82
- patch(
83
- modelName: string,
84
- modelData: ModelData,
85
- where?: WhereClause,
86
- ): Promise<number>;
87
-
88
- /**
89
- * Patch by id.
90
- *
91
- * @param modelName
92
- * @param id
93
- * @param modelData
94
- * @param filter
95
- */
96
- patchById(
97
- modelName: string,
98
- id: ModelId,
99
- modelData: ModelData,
100
- filter?: ItemFilterClause,
101
- ): Promise<ModelData>;
102
-
103
- /**
104
- * Find.
105
- *
106
- * @param modelName
107
- * @param filter
108
- */
109
- find(modelName: string, filter?: FilterClause): Promise<ModelData[]>;
110
-
111
- /**
112
- * Find by id.
113
- *
114
- * @param modelName
115
- * @param id
116
- * @param filter
117
- */
118
- findById(
119
- modelName: string,
120
- id: ModelId,
121
- filter?: ItemFilterClause,
122
- ): Promise<ModelData>;
123
-
124
- /**
125
- * Delete.
126
- *
127
- * @param modelName
128
- * @param where
129
- */
130
- delete(modelName: string, where?: WhereClause): Promise<number>;
131
-
132
- /**
133
- * Delete by id.
134
- *
135
- * @param modelName
136
- * @param id
137
- */
138
- deleteById(modelName: string, id: ModelId): Promise<boolean>;
139
-
140
- /**
141
- * Exists.
142
- *
143
- * @param modelName
144
- * @param id
145
- */
146
- exists(modelName: string, id: ModelId): Promise<boolean>;
147
-
148
- /**
149
- * Count.
150
- *
151
- * @param modelName
152
- * @param where
153
- */
154
- count(modelName: string, where?: WhereClause): Promise<number>;
155
- }
@@ -1,148 +0,0 @@
1
- import {Adapter} from '../adapter.js';
2
- import {ModelId} from '../../types.js';
3
- import {AnyObject} from '../../types.js';
4
- import {ModelData} from '../../types.js';
5
- import {WhereClause} from '../../filter/index.js';
6
- import {FilterClause} from '../../filter/index.js';
7
- import {ServiceContainer} from '@e22m4u/js-service';
8
- import {ItemFilterClause} from '../../filter/index.js';
9
-
10
- /**
11
- * Memory adapter.
12
- */
13
- export declare class MemoryAdapter extends Adapter {
14
- /**
15
- * Settings.
16
- */
17
- get settings(): AnyObject | undefined;
18
-
19
- /**
20
- * Constructor.
21
- *
22
- * @param container
23
- * @param settings
24
- */
25
- constructor(container?: ServiceContainer, settings?: AnyObject);
26
-
27
- /**
28
- * Create.
29
- *
30
- * @param modelName
31
- * @param modelData
32
- * @param filter
33
- */
34
- create(
35
- modelName: string,
36
- modelData: ModelData,
37
- filter?: ItemFilterClause,
38
- ): Promise<ModelData>;
39
-
40
- /**
41
- * Replace by id.
42
- *
43
- * @param modelName
44
- * @param id
45
- * @param modelData
46
- * @param filter
47
- */
48
- replaceById(
49
- modelName: string,
50
- id: ModelId,
51
- modelData: ModelData,
52
- filter?: ItemFilterClause,
53
- ): Promise<ModelData>;
54
-
55
- /**
56
- * Replace or create.
57
- *
58
- * @param modelName
59
- * @param modelData
60
- * @param filter
61
- */
62
- replaceOrCreate(
63
- modelName: string,
64
- modelData: ModelData,
65
- filter?: ItemFilterClause,
66
- ): Promise<ModelData>;
67
-
68
- /**
69
- * Patch.
70
- *
71
- * @param modelName
72
- * @param modelData
73
- * @param where
74
- */
75
- patch(
76
- modelName: string,
77
- modelData: ModelData,
78
- where?: WhereClause,
79
- ): Promise<number>;
80
-
81
- /**
82
- * Patch by id.
83
- *
84
- * @param modelName
85
- * @param id
86
- * @param modelData
87
- * @param filter
88
- */
89
- patchById(
90
- modelName: string,
91
- id: ModelId,
92
- modelData: ModelData,
93
- filter?: ItemFilterClause,
94
- ): Promise<ModelData>;
95
-
96
- /**
97
- * Find.
98
- *
99
- * @param modelName
100
- * @param filter
101
- */
102
- find(modelName: string, filter?: FilterClause): Promise<ModelData[]>;
103
-
104
- /**
105
- * Find by id.
106
- *
107
- * @param modelName
108
- * @param id
109
- * @param filter
110
- */
111
- findById(
112
- modelName: string,
113
- id: ModelId,
114
- filter?: ItemFilterClause,
115
- ): Promise<ModelData>;
116
-
117
- /**
118
- * Delete.
119
- *
120
- * @param modelName
121
- * @param where
122
- */
123
- delete(modelName: string, where?: WhereClause): Promise<number>;
124
-
125
- /**
126
- * Delete by id.
127
- *
128
- * @param modelName
129
- * @param id
130
- */
131
- deleteById(modelName: string, id: ModelId): Promise<boolean>;
132
-
133
- /**
134
- * Exists.
135
- *
136
- * @param modelName
137
- * @param id
138
- */
139
- exists(modelName: string, id: ModelId): Promise<boolean>;
140
-
141
- /**
142
- * Count.
143
- *
144
- * @param modelName
145
- * @param where
146
- */
147
- count(modelName: string, where?: WhereClause): Promise<number>;
148
- }
@@ -1,14 +0,0 @@
1
- import {Adapter} from '../adapter.js';
2
- import {Service} from '@e22m4u/js-service';
3
-
4
- /**
5
- * Data sanitizing decorator.
6
- */
7
- export declare class DataSanitizingDecorator extends Service {
8
- /**
9
- * Decorate.
10
- *
11
- * @param adapter
12
- */
13
- decorate(adapter: Adapter): void;
14
- }
@@ -1,14 +0,0 @@
1
- import {Adapter} from '../adapter.js';
2
- import {Service} from '@e22m4u/js-service';
3
-
4
- /**
5
- * Data transformation decorator.
6
- */
7
- export declare class DataTransformationDecorator extends Service {
8
- /**
9
- * Decorate.
10
- *
11
- * @param adapter
12
- */
13
- decorate(adapter: Adapter): void;
14
- }
@@ -1,54 +0,0 @@
1
- import {Adapter} from '../adapter.js';
2
- import {Service} from '@e22m4u/js-service';
3
- import {InvalidArgumentError} from '../../errors/index.js';
4
- import {ModelDataTransformer} from '../../definition/index.js';
5
-
6
- /**
7
- * Data transformation decorator.
8
- */
9
- export class DataTransformationDecorator extends Service {
10
- /**
11
- * Decorate.
12
- *
13
- * @param {Adapter} adapter
14
- */
15
- decorate(adapter) {
16
- if (!adapter || !(adapter instanceof Adapter))
17
- throw new InvalidArgumentError(
18
- 'The first argument of DataTransformerDecorator.decorate should be ' +
19
- 'an Adapter instance, but %v was given.',
20
- adapter,
21
- );
22
- const transformer = this.getService(ModelDataTransformer);
23
-
24
- const create = adapter.create;
25
- adapter.create = async function (modelName, modelData, filter) {
26
- modelData = await transformer.transform(modelName, modelData);
27
- return create.call(this, modelName, modelData, filter);
28
- };
29
-
30
- const replaceById = adapter.replaceById;
31
- adapter.replaceById = async function (modelName, id, modelData, filter) {
32
- modelData = await transformer.transform(modelName, modelData);
33
- return replaceById.call(this, modelName, id, modelData, filter);
34
- };
35
-
36
- const replaceOrCreate = adapter.replaceOrCreate;
37
- adapter.replaceOrCreate = async function (modelName, modelData, filter) {
38
- modelData = await transformer.transform(modelName, modelData);
39
- return replaceOrCreate.call(this, modelName, modelData, filter);
40
- };
41
-
42
- const patch = adapter.patch;
43
- adapter.patch = async function (modelName, modelData, where) {
44
- modelData = await transformer.transform(modelName, modelData, true);
45
- return patch.call(this, modelName, modelData, where);
46
- };
47
-
48
- const patchById = adapter.patchById;
49
- adapter.patchById = async function (modelName, id, modelData, filter) {
50
- modelData = await transformer.transform(modelName, modelData, true);
51
- return patchById.call(this, modelName, id, modelData, filter);
52
- };
53
- }
54
- }
@@ -1,193 +0,0 @@
1
- import {expect} from 'chai';
2
- import {chai} from '../../chai.js';
3
- import {Adapter} from '../adapter.js';
4
- import {DatabaseSchema} from '../../database-schema.js';
5
- import {ModelDataTransformer} from '../../definition/index.js';
6
-
7
- const MODEL_NAME = 'myModel';
8
- const MODEL_DATA = {kind: 'modelData'};
9
- const TRANSFORMED_DATA = {kind: 'transformedData'};
10
- const WHERE_CLAUSE = {kind: {existed: true}};
11
- const FILTER_CLAUSE = {where: WHERE_CLAUSE};
12
- const DUMMY_ID = 1;
13
-
14
- class TestAdapter extends Adapter {
15
- create(modelName, modelData, filter = undefined) {
16
- expect(modelName).to.be.eq(MODEL_NAME);
17
- expect(modelData).to.be.eql(TRANSFORMED_DATA);
18
- expect(filter).to.be.eql(FILTER_CLAUSE);
19
- return Promise.resolve(modelData);
20
- }
21
- replaceById(modelName, id, modelData, filter = undefined) {
22
- expect(modelName).to.be.eq(MODEL_NAME);
23
- expect(id).to.be.eq(DUMMY_ID);
24
- expect(modelData).to.be.eql(TRANSFORMED_DATA);
25
- expect(filter).to.be.eql(FILTER_CLAUSE);
26
- return Promise.resolve(modelData);
27
- }
28
- replaceOrCreate(modelName, modelData, filter = undefined) {
29
- expect(modelName).to.be.eq(MODEL_NAME);
30
- expect(modelData).to.be.eql(TRANSFORMED_DATA);
31
- expect(filter).to.be.eql(FILTER_CLAUSE);
32
- return Promise.resolve(modelData);
33
- }
34
- patch(modelName, modelData, where = undefined) {
35
- expect(modelName).to.be.eq(MODEL_NAME);
36
- expect(modelData).to.be.eql(TRANSFORMED_DATA);
37
- expect(where).to.be.eql(WHERE_CLAUSE);
38
- return Promise.resolve(modelData);
39
- }
40
- patchById(modelName, id, modelData, filter = undefined) {
41
- expect(modelName).to.be.eq(MODEL_NAME);
42
- expect(id).to.be.eq(DUMMY_ID);
43
- expect(modelData).to.be.eql(TRANSFORMED_DATA);
44
- expect(filter).to.be.eql(FILTER_CLAUSE);
45
- return Promise.resolve(modelData);
46
- }
47
- }
48
-
49
- const dbs = new DatabaseSchema();
50
- dbs.defineModel({name: MODEL_NAME});
51
- const A = dbs.getService(TestAdapter);
52
- const T = dbs.getService(ModelDataTransformer);
53
- const sandbox = chai.spy.sandbox();
54
-
55
- describe('DataTransformationDecorator', function () {
56
- afterEach(function () {
57
- sandbox.restore();
58
- });
59
-
60
- describe('overrides the "create" method', function () {
61
- it('transforms the given data', async function () {
62
- sandbox.on(T, 'transform', () => TRANSFORMED_DATA);
63
- const res = await A.create(MODEL_NAME, MODEL_DATA, FILTER_CLAUSE);
64
- expect(res).to.be.eql(TRANSFORMED_DATA);
65
- expect(T.transform).to.be.called.once;
66
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
67
- });
68
-
69
- it('resolves the transformation promise', async function () {
70
- sandbox.on(T, 'transform', () => Promise.resolve(TRANSFORMED_DATA));
71
- const res = await A.create(MODEL_NAME, MODEL_DATA, FILTER_CLAUSE);
72
- expect(res).to.be.eql(TRANSFORMED_DATA);
73
- expect(T.transform).to.be.called.once;
74
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
75
- });
76
- });
77
-
78
- describe('overrides the "replaceById" method', function () {
79
- it('transforms the given data', async function () {
80
- sandbox.on(T, 'transform', () => TRANSFORMED_DATA);
81
- const res = await A.replaceById(
82
- MODEL_NAME,
83
- DUMMY_ID,
84
- MODEL_DATA,
85
- FILTER_CLAUSE,
86
- );
87
- expect(res).to.be.eql(TRANSFORMED_DATA);
88
- expect(T.transform).to.be.called.once;
89
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
90
- });
91
-
92
- it('resolves the transformation promise', async function () {
93
- sandbox.on(T, 'transform', () => Promise.resolve(TRANSFORMED_DATA));
94
- const res = await A.replaceById(
95
- MODEL_NAME,
96
- DUMMY_ID,
97
- MODEL_DATA,
98
- FILTER_CLAUSE,
99
- );
100
- expect(res).to.be.eql(TRANSFORMED_DATA);
101
- expect(T.transform).to.be.called.once;
102
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
103
- });
104
- });
105
-
106
- describe('overrides the "replaceOrCreate" method', function () {
107
- it('transforms the given data', async function () {
108
- sandbox.on(T, 'transform', () => TRANSFORMED_DATA);
109
- const res = await A.replaceOrCreate(
110
- MODEL_NAME,
111
- MODEL_DATA,
112
- FILTER_CLAUSE,
113
- );
114
- expect(res).to.be.eql(TRANSFORMED_DATA);
115
- expect(T.transform).to.be.called.once;
116
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
117
- });
118
-
119
- it('resolves the transformation promise', async function () {
120
- sandbox.on(T, 'transform', () => Promise.resolve(TRANSFORMED_DATA));
121
- const res = await A.replaceOrCreate(
122
- MODEL_NAME,
123
- MODEL_DATA,
124
- FILTER_CLAUSE,
125
- );
126
- expect(res).to.be.eql(TRANSFORMED_DATA);
127
- expect(T.transform).to.be.called.once;
128
- expect(T.transform).to.be.called.with.exactly(MODEL_NAME, MODEL_DATA);
129
- });
130
- });
131
-
132
- describe('overrides the "patch" method', function () {
133
- it('transforms the given data', async function () {
134
- sandbox.on(T, 'transform', () => TRANSFORMED_DATA);
135
- const res = await A.patch(MODEL_NAME, MODEL_DATA, WHERE_CLAUSE);
136
- expect(res).to.be.eql(TRANSFORMED_DATA);
137
- expect(T.transform).to.be.called.once;
138
- expect(T.transform).to.be.called.with.exactly(
139
- MODEL_NAME,
140
- MODEL_DATA,
141
- true,
142
- );
143
- });
144
-
145
- it('resolves the transformation promise', async function () {
146
- sandbox.on(T, 'transform', () => Promise.resolve(TRANSFORMED_DATA));
147
- const res = await A.patch(MODEL_NAME, MODEL_DATA, WHERE_CLAUSE);
148
- expect(res).to.be.eql(TRANSFORMED_DATA);
149
- expect(T.transform).to.be.called.once;
150
- expect(T.transform).to.be.called.with.exactly(
151
- MODEL_NAME,
152
- MODEL_DATA,
153
- true,
154
- );
155
- });
156
- });
157
-
158
- describe('overrides the "patchById" method', function () {
159
- it('transforms the given data', async function () {
160
- sandbox.on(T, 'transform', () => TRANSFORMED_DATA);
161
- const res = await A.patchById(
162
- MODEL_NAME,
163
- DUMMY_ID,
164
- MODEL_DATA,
165
- FILTER_CLAUSE,
166
- );
167
- expect(res).to.be.eql(TRANSFORMED_DATA);
168
- expect(T.transform).to.be.called.once;
169
- expect(T.transform).to.be.called.with.exactly(
170
- MODEL_NAME,
171
- MODEL_DATA,
172
- true,
173
- );
174
- });
175
-
176
- it('resolves the transformation promise', async function () {
177
- sandbox.on(T, 'transform', () => Promise.resolve(TRANSFORMED_DATA));
178
- const res = await A.patchById(
179
- MODEL_NAME,
180
- DUMMY_ID,
181
- MODEL_DATA,
182
- FILTER_CLAUSE,
183
- );
184
- expect(res).to.be.eql(TRANSFORMED_DATA);
185
- expect(T.transform).to.be.called.once;
186
- expect(T.transform).to.be.called.with.exactly(
187
- MODEL_NAME,
188
- MODEL_DATA,
189
- true,
190
- );
191
- });
192
- });
193
- });
@@ -1,14 +0,0 @@
1
- import {Service} from '@e22m4u/js-service';
2
- import {Adapter} from '../adapter.js';
3
-
4
- /**
5
- * Data validation decorator.
6
- */
7
- export declare class DataValidationDecorator extends Service {
8
- /**
9
- * Decorate.
10
- *
11
- * @param adapter
12
- */
13
- decorate(adapter: Adapter): void;
14
- }
@@ -1,54 +0,0 @@
1
- import {Adapter} from '../adapter.js';
2
- import {Service} from '@e22m4u/js-service';
3
- import {InvalidArgumentError} from '../../errors/index.js';
4
- import {ModelDataValidator} from '../../definition/index.js';
5
-
6
- /**
7
- * Data validation decorator.
8
- */
9
- export class DataValidationDecorator extends Service {
10
- /**
11
- * Decorate.
12
- *
13
- * @param {Adapter} adapter
14
- */
15
- decorate(adapter) {
16
- if (!adapter || !(adapter instanceof Adapter))
17
- throw new InvalidArgumentError(
18
- 'The first argument of DataValidationDecorator.decorate should be ' +
19
- 'an Adapter instance, but %v was given.',
20
- adapter,
21
- );
22
- const validator = this.getService(ModelDataValidator);
23
-
24
- const create = adapter.create;
25
- adapter.create = function (modelName, modelData, filter) {
26
- validator.validate(modelName, modelData);
27
- return create.call(this, modelName, modelData, filter);
28
- };
29
-
30
- const replaceById = adapter.replaceById;
31
- adapter.replaceById = function (modelName, id, modelData, filter) {
32
- validator.validate(modelName, modelData);
33
- return replaceById.call(this, modelName, id, modelData, filter);
34
- };
35
-
36
- const replaceOrCreate = adapter.replaceOrCreate;
37
- adapter.replaceOrCreate = function (modelName, modelData, filter) {
38
- validator.validate(modelName, modelData);
39
- return replaceOrCreate.call(this, modelName, modelData, filter);
40
- };
41
-
42
- const patch = adapter.patch;
43
- adapter.patch = function (modelName, modelData, where) {
44
- validator.validate(modelName, modelData, true);
45
- return patch.call(this, modelName, modelData, where);
46
- };
47
-
48
- const patchById = adapter.patchById;
49
- adapter.patchById = function (modelName, id, modelData, filter) {
50
- validator.validate(modelName, modelData, true);
51
- return patchById.call(this, modelName, id, modelData, filter);
52
- };
53
- }
54
- }