@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,180 +0,0 @@
1
- import {ModelData} from '../../types.js';
2
- import {Service} from '@e22m4u/js-service';
3
- import {DataType} from './properties/index.js';
4
- import {RelationDefinition} from './relations/index.js';
5
- import {PropertyDefinition} from './properties/index.js';
6
- import {PropertyDefinitionMap} from './model-definition.js';
7
- import {RelationDefinitionMap} from './model-definition.js';
8
-
9
- /**
10
- * Default primary key property name.
11
- */
12
- export const DEFAULT_PRIMARY_KEY_PROPERTY_NAME: 'id';
13
-
14
- /**
15
- * Model definition utils.
16
- */
17
- export declare class ModelDefinitionUtils extends Service {
18
- /**
19
- * Get primary key as property name.
20
- *
21
- * @param modelName
22
- */
23
- getPrimaryKeyAsPropertyName(modelName: string): string;
24
-
25
- /**
26
- * Get primary key as column name.
27
- *
28
- * @param modelName
29
- */
30
- getPrimaryKeyAsColumnName(modelName: string): string;
31
-
32
- /**
33
- * Get table name by model name.
34
- *
35
- * @param modelName
36
- */
37
- getTableNameByModelName(modelName: string): string;
38
-
39
- /**
40
- * Get column name by property name.
41
- *
42
- * @param modelName
43
- * @param propertyName
44
- */
45
- getColumnNameByPropertyName(modelName: string, propertyName: string): string;
46
-
47
- /**
48
- * Get default property value.
49
- *
50
- * @param modelName
51
- * @param propertyName
52
- */
53
- getDefaultPropertyValue(modelName: string, propertyName: string): unknown;
54
-
55
- /**
56
- * Set default values to empty properties.
57
- *
58
- * @param modelName
59
- * @param modelData
60
- * @param onlyProvidedProperties
61
- */
62
- setDefaultValuesToEmptyProperties<T extends ModelData>(
63
- modelName: string,
64
- modelData: T,
65
- onlyProvidedProperties?: boolean,
66
- ): T;
67
-
68
- /**
69
- * Convert property names to column names.
70
- *
71
- * @param modelName
72
- * @param modelData
73
- */
74
- convertPropertyNamesToColumnNames(
75
- modelName: string,
76
- modelData: ModelData,
77
- ): ModelData;
78
-
79
- /**
80
- * Convert column names to property names.
81
- *
82
- * @param modelName
83
- * @param tableData
84
- */
85
- convertColumnNamesToPropertyNames(
86
- modelName: string,
87
- tableData: ModelData,
88
- ): ModelData;
89
-
90
- /**
91
- * Get data type by property name.
92
- *
93
- * @param modelName
94
- * @param propertyName
95
- */
96
- getDataTypeByPropertyName(modelName: string, propertyName: string): DataType;
97
-
98
- /**
99
- * Get data type from property definition.
100
- *
101
- * @param propDef
102
- */
103
- getDataTypeFromPropertyDefinition(propDef: PropertyDefinition): DataType;
104
-
105
- /**
106
- * Get own properties definition of primary keys.
107
- *
108
- * @param modelName
109
- */
110
- getOwnPropertiesDefinitionOfPrimaryKeys(
111
- modelName: string,
112
- ): PropertyDefinitionMap;
113
-
114
- /**
115
- * Get own properties definition without primary keys.
116
- *
117
- * @param modelName
118
- */
119
- getOwnPropertiesDefinitionWithoutPrimaryKeys(
120
- modelName: string,
121
- ): PropertyDefinitionMap;
122
-
123
- /**
124
- * Get properties definition in base model hierarchy.
125
- *
126
- * @param modelName
127
- */
128
- getPropertiesDefinitionInBaseModelHierarchy(
129
- modelName: string,
130
- ): PropertyDefinitionMap;
131
-
132
- /**
133
- * Get own relations definition.
134
- *
135
- * @param modelName
136
- */
137
- getOwnRelationsDefinition(modelName: string): RelationDefinitionMap;
138
-
139
- /**
140
- * Get relations definition in base model hierarchy.
141
- *
142
- * @param modelName
143
- */
144
- getRelationsDefinitionInBaseModelHierarchy(
145
- modelName: string,
146
- ): RelationDefinitionMap;
147
-
148
- /**
149
- * Get relation definition by name.
150
- *
151
- * @param modelName
152
- * @param relationName
153
- */
154
- getRelationDefinitionByName(
155
- modelName: string,
156
- relationName: string,
157
- ): RelationDefinition;
158
-
159
- /**
160
- * Exclude object keys by relation names.
161
- *
162
- * @param modelName
163
- * @param modelData
164
- */
165
- excludeObjectKeysByRelationNames<T extends ModelData>(
166
- modelName: string,
167
- modelData: T,
168
- ): Partial<T>;
169
-
170
- /**
171
- * Get model name of property value if defined.
172
- *
173
- * @param modelName
174
- * @param propertyName
175
- */
176
- getModelNameOfPropertyValueIfDefined(
177
- modelName: string,
178
- propertyName: string,
179
- ): string | undefined;
180
- }
@@ -1,14 +0,0 @@
1
- import {Service} from '@e22m4u/js-service';
2
- import {ModelDefinition} from './model-definition.js';
3
-
4
- /**
5
- * Model definition validator.
6
- */
7
- export declare class ModelDefinitionValidator extends Service {
8
- /**
9
- * Validate.
10
- *
11
- * @param modelDef
12
- */
13
- validate(modelDef: ModelDefinition): void;
14
- }
@@ -1,28 +0,0 @@
1
- import {RelationDefinition} from './relations/index.js';
2
- import {PropertyDefinition} from './properties/index.js';
3
-
4
- /**
5
- * Property definition map.
6
- */
7
- export declare type PropertyDefinitionMap = {
8
- [name: string]: PropertyDefinition;
9
- };
10
-
11
- /**
12
- * Relation definition map.
13
- */
14
- export declare type RelationDefinitionMap = {
15
- [name: string]: RelationDefinition;
16
- };
17
-
18
- /**
19
- * Model definition.
20
- */
21
- export declare type ModelDefinition = {
22
- name: string;
23
- datasource?: string;
24
- base?: string;
25
- tableName?: string;
26
- properties?: PropertyDefinitionMap;
27
- relations?: RelationDefinitionMap;
28
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- /**
2
- * Data type.
3
- */
4
- export declare const DataType: {
5
- ANY: 'any';
6
- STRING: 'string';
7
- NUMBER: 'number';
8
- BOOLEAN: 'boolean';
9
- ARRAY: 'array';
10
- OBJECT: 'object';
11
- };
12
-
13
- /**
14
- * Type of DataType.
15
- */
16
- export type DataType = (typeof DataType)[keyof typeof DataType];
@@ -1,8 +0,0 @@
1
- export * from './data-type.js';
2
- export * from './property-definition.js';
3
- export * from './property-uniqueness.js';
4
- export * from './property-validator/index.js';
5
- export * from './property-transformer/index.js';
6
- export * from './property-uniqueness-validator.js';
7
- export * from './properties-definition-validator.js';
8
- export * from './primary-keys-definition-validator.js';
@@ -1,15 +0,0 @@
1
- import {Service} from '@e22m4u/js-service';
2
- import {PropertyDefinitionMap} from '../model-definition.js';
3
-
4
- /**
5
- * Primary keys definition validator.
6
- */
7
- export declare class PrimaryKeysDefinitionValidator extends Service {
8
- /**
9
- * Validate.
10
- *
11
- * @param modelName
12
- * @param propDefs
13
- */
14
- validate(modelName: string, propDefs: PropertyDefinitionMap): void;
15
- }
@@ -1,15 +0,0 @@
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
- }
@@ -1,27 +0,0 @@
1
- import {DataType} from './data-type.js';
2
- import {PropertyUniqueness} from './property-uniqueness.js';
3
- import {PropertyValidateOptions} from './property-validator/index.js';
4
- import {PropertyTransformOptions} from './property-transformer/index.js';
5
-
6
- /**
7
- * Full property definition.
8
- */
9
- export declare type FullPropertyDefinition = {
10
- type: DataType;
11
- itemType?: DataType;
12
- itemModel?: string;
13
- model?: string;
14
- primaryKey?: boolean;
15
- columnName?: string;
16
- columnType?: string;
17
- required?: boolean;
18
- default?: unknown;
19
- validate?: PropertyValidateOptions;
20
- transform?: PropertyTransformOptions;
21
- unique?: boolean | PropertyUniqueness;
22
- };
23
-
24
- /**
25
- * Property definition.
26
- */
27
- declare type PropertyDefinition = DataType | FullPropertyDefinition;
@@ -1,3 +0,0 @@
1
- export * from './trim-transformer.js';
2
- export * from './to-lower-case-transformer.js';
3
- export * from './to-upper-case-transformer.js';
@@ -1,3 +0,0 @@
1
- export * from './trim-transformer.js';
2
- export * from './to-lower-case-transformer.js';
3
- export * from './to-upper-case-transformer.js';
@@ -1,6 +0,0 @@
1
- import {PropertyTransformer} from '../property-transformer.js';
2
-
3
- /**
4
- * To lower case transformer.
5
- */
6
- export const toLowerCaseTransformer: PropertyTransformer;
@@ -1,19 +0,0 @@
1
- import {InvalidArgumentError} from '../../../../../errors/index.js';
2
-
3
- /**
4
- * To lower case transformer.
5
- *
6
- * @param {*} value
7
- * @param {undefined} options
8
- * @param {object} context
9
- * @returns {string|undefined|null}
10
- */
11
- export function toLowerCaseTransformer(value, options, context) {
12
- if (value == null) return value;
13
- if (typeof value === 'string') return value.toLowerCase();
14
- throw new InvalidArgumentError(
15
- 'The property transformer %v requires a String value, but %v was given.',
16
- context.transformerName,
17
- value,
18
- );
19
- }
@@ -1,39 +0,0 @@
1
- import {expect} from 'chai';
2
- import {format} from '@e22m4u/js-format';
3
- import {toLowerCaseTransformer} from './to-lower-case-transformer.js';
4
-
5
- describe('toLowerCaseTransformer', function () {
6
- it('returns undefined and null values as is', function () {
7
- const res1 = toLowerCaseTransformer(undefined, undefined, {});
8
- const res2 = toLowerCaseTransformer(null, undefined, {});
9
- expect(res1).to.be.undefined;
10
- expect(res2).to.be.null;
11
- });
12
-
13
- it('converts the given string to lower case', function () {
14
- const res = toLowerCaseTransformer('TEST', undefined, {});
15
- expect(res).to.be.eq('test');
16
- });
17
-
18
- it('throws an error if the given value is not a string', function () {
19
- const throwable = v => () =>
20
- toLowerCaseTransformer(v, undefined, {
21
- transformerName: 'toLowerCase',
22
- });
23
- const error = v =>
24
- format(
25
- 'The property transformer "toLowerCase" requires a String value, but %s was given.',
26
- v,
27
- );
28
- expect(throwable(10)).to.throw(error('10'));
29
- expect(throwable(0)).to.throw(error('0'));
30
- expect(throwable(true)).to.throw(error('true'));
31
- expect(throwable(false)).to.throw(error('false'));
32
- expect(throwable({})).to.throw(error('Object'));
33
- expect(throwable([])).to.throw(error('Array'));
34
- throwable('str')();
35
- throwable('')();
36
- throwable(undefined)();
37
- throwable(null)();
38
- });
39
- });
@@ -1,6 +0,0 @@
1
- import {PropertyTransformer} from '../property-transformer.js';
2
-
3
- /**
4
- * To upper case transformer.
5
- */
6
- export const toUpperCaseTransformer: PropertyTransformer;
@@ -1,19 +0,0 @@
1
- import {InvalidArgumentError} from '../../../../../errors/index.js';
2
-
3
- /**
4
- * To upper case transformer.
5
- *
6
- * @param {*} value
7
- * @param {undefined} options
8
- * @param {object} context
9
- * @returns {string|undefined|null}
10
- */
11
- export function toUpperCaseTransformer(value, options, context) {
12
- if (value == null) return value;
13
- if (typeof value === 'string') return value.toUpperCase();
14
- throw new InvalidArgumentError(
15
- 'The property transformer %v requires a String value, but %v was given.',
16
- context.transformerName,
17
- value,
18
- );
19
- }
@@ -1,39 +0,0 @@
1
- import {expect} from 'chai';
2
- import {format} from '@e22m4u/js-format';
3
- import {toUpperCaseTransformer} from './to-upper-case-transformer.js';
4
-
5
- describe('toUpperCaseTransformer', function () {
6
- it('returns undefined and null values as is', function () {
7
- const res1 = toUpperCaseTransformer(undefined, undefined, {});
8
- const res2 = toUpperCaseTransformer(null, undefined, {});
9
- expect(res1).to.be.undefined;
10
- expect(res2).to.be.null;
11
- });
12
-
13
- it('converts the given string to upper case', function () {
14
- const res = toUpperCaseTransformer('test', undefined, {});
15
- expect(res).to.be.eq('TEST');
16
- });
17
-
18
- it('throws an error if the given value is not a string', function () {
19
- const throwable = v => () =>
20
- toUpperCaseTransformer(v, undefined, {
21
- transformerName: 'toUpperCase',
22
- });
23
- const error = v =>
24
- format(
25
- 'The property transformer "toUpperCase" requires a String value, but %s was given.',
26
- v,
27
- );
28
- expect(throwable(10)).to.throw(error('10'));
29
- expect(throwable(0)).to.throw(error('0'));
30
- expect(throwable(true)).to.throw(error('true'));
31
- expect(throwable(false)).to.throw(error('false'));
32
- expect(throwable({})).to.throw(error('Object'));
33
- expect(throwable([])).to.throw(error('Array'));
34
- throwable('str')();
35
- throwable('')();
36
- throwable(undefined)();
37
- throwable(null)();
38
- });
39
- });
@@ -1,6 +0,0 @@
1
- import {PropertyTransformer} from '../property-transformer.js';
2
-
3
- /**
4
- * Trim transformer.
5
- */
6
- export declare type trimTransformer = PropertyTransformer;
@@ -1,19 +0,0 @@
1
- import {InvalidArgumentError} from '../../../../../errors/index.js';
2
-
3
- /**
4
- * Trim transformer.
5
- *
6
- * @param {*} value
7
- * @param {undefined} options
8
- * @param {object} context
9
- * @returns {string|undefined|null}
10
- */
11
- export function trimTransformer(value, options, context) {
12
- if (value == null) return value;
13
- if (typeof value === 'string') return value.trim();
14
- throw new InvalidArgumentError(
15
- 'The property transformer %v requires a String value, but %v was given.',
16
- context.transformerName,
17
- value,
18
- );
19
- }
@@ -1,39 +0,0 @@
1
- import {expect} from 'chai';
2
- import {format} from '@e22m4u/js-format';
3
- import {trimTransformer} from './trim-transformer.js';
4
-
5
- describe('trimTransformer', function () {
6
- it('returns undefined and null values as is', function () {
7
- const res1 = trimTransformer(undefined, undefined, {});
8
- const res2 = trimTransformer(null, undefined, {});
9
- expect(res1).to.be.undefined;
10
- expect(res2).to.be.null;
11
- });
12
-
13
- it('trims the given string', function () {
14
- const res = trimTransformer(' test ', undefined, {});
15
- expect(res).to.be.eq('test');
16
- });
17
-
18
- it('throws an error if the given value is not a string', function () {
19
- const throwable = v => () =>
20
- trimTransformer(v, undefined, {
21
- transformerName: 'trim',
22
- });
23
- const error = v =>
24
- format(
25
- 'The property transformer "trim" requires a String value, but %s was given.',
26
- v,
27
- );
28
- expect(throwable(10)).to.throw(error('10'));
29
- expect(throwable(0)).to.throw(error('0'));
30
- expect(throwable(true)).to.throw(error('true'));
31
- expect(throwable(false)).to.throw(error('false'));
32
- expect(throwable({})).to.throw(error('Object'));
33
- expect(throwable([])).to.throw(error('Array'));
34
- throwable('str')();
35
- throwable('')();
36
- throwable(undefined)();
37
- throwable(null)();
38
- });
39
- });
@@ -1,2 +0,0 @@
1
- export * from './property-transformer.js';
2
- export * from './property-transformer-registry.js';
@@ -1,2 +0,0 @@
1
- export * from './property-transformer.js';
2
- export * from './property-transformer-registry.js';
@@ -1,29 +0,0 @@
1
- import {Service} from '@e22m4u/js-service';
2
- import {PropertyTransformer} from './property-transformer.js';
3
-
4
- /**
5
- * Property transformer registry.
6
- */
7
- export declare class PropertyTransformerRegistry extends Service {
8
- /**
9
- * Add transformer.
10
- *
11
- * @param name
12
- * @param transformer
13
- */
14
- addTransformer(name: string, transformer: PropertyTransformer): this;
15
-
16
- /**
17
- * Has transformer.
18
- *
19
- * @param name
20
- */
21
- hasTransformer(name: string): boolean;
22
-
23
- /**
24
- * Get transformer.
25
- *
26
- * @param name
27
- */
28
- getTransformer(name: string): PropertyTransformer;
29
- }
@@ -1,76 +0,0 @@
1
- import {Service} from '@e22m4u/js-service';
2
- import {trimTransformer} from './builtin/index.js';
3
- import {toUpperCaseTransformer} from './builtin/index.js';
4
- import {toLowerCaseTransformer} from './builtin/index.js';
5
- import {InvalidArgumentError} from '../../../../errors/index.js';
6
-
7
- /**
8
- * Property transformer registry.
9
- */
10
- export class PropertyTransformerRegistry extends Service {
11
- /**
12
- * Transformers.
13
- *
14
- * @type {object}
15
- */
16
- _transformers = {
17
- trim: trimTransformer,
18
- toUpperCase: toUpperCaseTransformer,
19
- toLowerCase: toLowerCaseTransformer,
20
- };
21
-
22
- /**
23
- * Add transformer.
24
- *
25
- * @param {string} name
26
- * @param {Function} transformer
27
- * @returns {PropertyTransformerRegistry}
28
- */
29
- addTransformer(name, transformer) {
30
- if (!name || typeof name !== 'string')
31
- throw new InvalidArgumentError(
32
- 'A name of the property transformer must ' +
33
- 'be a non-empty String, but %v was given.',
34
- name,
35
- );
36
- if (name in this._transformers)
37
- throw new InvalidArgumentError(
38
- 'The property transformer %v is already defined.',
39
- name,
40
- );
41
- if (typeof transformer !== 'function')
42
- throw new InvalidArgumentError(
43
- 'The property transformer %v must be a Function, but %v was given.',
44
- name,
45
- transformer,
46
- );
47
- this._transformers[name] = transformer;
48
- return this;
49
- }
50
-
51
- /**
52
- * Has transformer.
53
- *
54
- * @param {string} name
55
- * @returns {boolean}
56
- */
57
- hasTransformer(name) {
58
- return Boolean(this._transformers[name]);
59
- }
60
-
61
- /**
62
- * Get transformer.
63
- *
64
- * @param {string} name
65
- * @returns {Function}
66
- */
67
- getTransformer(name) {
68
- const transformer = this._transformers[name];
69
- if (!transformer)
70
- throw new InvalidArgumentError(
71
- 'The property transformer %v is not defined.',
72
- name,
73
- );
74
- return transformer;
75
- }
76
- }