@e22m4u/js-repository 0.6.4 → 0.7.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.
- package/README.md +6 -532
- package/dist/cjs/index.cjs +141 -1156
- package/package.json +7 -7
- package/src/adapter/adapter.d.ts +2 -4
- package/src/adapter/adapter.js +2 -6
- package/src/adapter/adapter.spec.js +3 -15
- package/src/adapter/builtin/memory-adapter.js +41 -12
- package/src/adapter/builtin/memory-adapter.spec.js +47 -0
- package/src/adapter/decorator/index.d.ts +0 -2
- package/src/adapter/decorator/index.js +0 -2
- package/src/definition/model/index.d.ts +0 -2
- package/src/definition/model/index.js +0 -2
- package/src/definition/model/properties/index.d.ts +0 -2
- package/src/definition/model/properties/index.js +0 -2
- package/src/definition/model/properties/properties-definition-validator.js +0 -169
- package/src/definition/model/properties/properties-definition-validator.spec.js +0 -162
- package/src/definition/model/properties/property-definition.d.ts +1 -5
- package/src/definition/model/properties/property-uniqueness-validator.js +2 -2
- package/src/filter/filter-clause.d.ts +3 -4
- package/src/filter/where-clause-tool.js +2 -2
- package/src/utils/index.d.ts +1 -5
- package/src/utils/index.js +1 -5
- package/src/utils/is-plain-object.d.ts +6 -0
- package/src/utils/{is-pure-object.js → is-plain-object.js} +2 -2
- package/src/utils/is-plain-object.spec.js +25 -0
- package/src/utils/model-name-to-model-key.js +0 -4
- package/src/utils/model-name-to-model-key.spec.js +0 -23
- package/tsconfig.json +2 -2
- package/src/adapter/decorator/data-transformation-decorator.d.ts +0 -14
- package/src/adapter/decorator/data-transformation-decorator.js +0 -54
- package/src/adapter/decorator/data-transformation-decorator.spec.js +0 -193
- package/src/adapter/decorator/data-validation-decorator.d.ts +0 -14
- package/src/adapter/decorator/data-validation-decorator.js +0 -54
- package/src/adapter/decorator/data-validation-decorator.spec.js +0 -105
- package/src/definition/model/model-data-transformer.d.ts +0 -16
- package/src/definition/model/model-data-transformer.js +0 -170
- package/src/definition/model/model-data-transformer.spec.js +0 -2312
- package/src/definition/model/model-data-validator.d.ts +0 -16
- package/src/definition/model/model-data-validator.js +0 -318
- package/src/definition/model/model-data-validator.spec.js +0 -4528
- package/src/definition/model/properties/property-transformer/builtin/index.d.ts +0 -3
- package/src/definition/model/properties/property-transformer/builtin/index.js +0 -3
- package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.d.ts +0 -6
- package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.js +0 -19
- package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.spec.js +0 -39
- package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.d.ts +0 -6
- package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.js +0 -19
- package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.spec.js +0 -39
- package/src/definition/model/properties/property-transformer/builtin/trim-transformer.d.ts +0 -6
- package/src/definition/model/properties/property-transformer/builtin/trim-transformer.js +0 -19
- package/src/definition/model/properties/property-transformer/builtin/trim-transformer.spec.js +0 -39
- package/src/definition/model/properties/property-transformer/index.d.ts +0 -2
- package/src/definition/model/properties/property-transformer/index.js +0 -2
- package/src/definition/model/properties/property-transformer/property-transformer-registry.d.ts +0 -29
- package/src/definition/model/properties/property-transformer/property-transformer-registry.js +0 -76
- package/src/definition/model/properties/property-transformer/property-transformer-registry.spec.js +0 -133
- package/src/definition/model/properties/property-transformer/property-transformer.d.ts +0 -27
- package/src/definition/model/properties/property-transformer/property-transformer.js +0 -1
- package/src/definition/model/properties/property-validator/builtin/index.d.ts +0 -3
- package/src/definition/model/properties/property-validator/builtin/index.js +0 -3
- package/src/definition/model/properties/property-validator/builtin/max-length-validator.d.ts +0 -6
- package/src/definition/model/properties/property-validator/builtin/max-length-validator.js +0 -28
- package/src/definition/model/properties/property-validator/builtin/max-length-validator.spec.js +0 -100
- package/src/definition/model/properties/property-validator/builtin/min-length-validator.d.ts +0 -6
- package/src/definition/model/properties/property-validator/builtin/min-length-validator.js +0 -28
- package/src/definition/model/properties/property-validator/builtin/min-length-validator.spec.js +0 -100
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.d.ts +0 -6
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.js +0 -30
- package/src/definition/model/properties/property-validator/builtin/regexp-validator.spec.js +0 -102
- package/src/definition/model/properties/property-validator/index.d.ts +0 -2
- package/src/definition/model/properties/property-validator/index.js +0 -2
- package/src/definition/model/properties/property-validator/property-validator-registry.d.ts +0 -29
- package/src/definition/model/properties/property-validator/property-validator-registry.js +0 -76
- package/src/definition/model/properties/property-validator/property-validator-registry.spec.js +0 -132
- package/src/definition/model/properties/property-validator/property-validator.d.ts +0 -25
- package/src/definition/model/properties/property-validator/property-validator.js +0 -1
- package/src/utils/get-ctor-name.d.ts +0 -6
- package/src/utils/get-ctor-name.js +0 -11
- package/src/utils/get-ctor-name.spec.js +0 -17
- package/src/utils/get-decorator-target-type.d.ts +0 -27
- package/src/utils/get-decorator-target-type.js +0 -63
- package/src/utils/get-decorator-target-type.spec.js +0 -80
- package/src/utils/is-ctor.d.ts +0 -8
- package/src/utils/is-ctor.js +0 -11
- package/src/utils/is-ctor.spec.js +0 -26
- package/src/utils/is-pure-object.d.ts +0 -6
- package/src/utils/is-pure-object.spec.js +0 -25
- package/src/utils/transform-promise.d.ts +0 -13
- package/src/utils/transform-promise.js +0 -15
- package/src/utils/transform-promise.spec.js +0 -19
package/src/definition/model/properties/property-transformer/builtin/to-lower-case-transformer.js
DELETED
|
@@ -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
|
-
});
|
package/src/definition/model/properties/property-transformer/builtin/to-upper-case-transformer.js
DELETED
|
@@ -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,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
|
-
}
|
package/src/definition/model/properties/property-transformer/builtin/trim-transformer.spec.js
DELETED
|
@@ -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
|
-
});
|
package/src/definition/model/properties/property-transformer/property-transformer-registry.d.ts
DELETED
|
@@ -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
|
-
}
|
package/src/definition/model/properties/property-transformer/property-transformer-registry.js
DELETED
|
@@ -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
|
-
}
|
package/src/definition/model/properties/property-transformer/property-transformer-registry.spec.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import {expect} from 'chai';
|
|
2
|
-
import {format} from '@e22m4u/js-format';
|
|
3
|
-
import {trimTransformer} from './builtin/index.js';
|
|
4
|
-
import {toUpperCaseTransformer} from './builtin/index.js';
|
|
5
|
-
import {toLowerCaseTransformer} from './builtin/index.js';
|
|
6
|
-
import {PropertyTransformerRegistry} from './property-transformer-registry.js';
|
|
7
|
-
|
|
8
|
-
describe('PropertyTransformerRegistry', function () {
|
|
9
|
-
describe('addTransformer', function () {
|
|
10
|
-
it('has builtin transformers', function () {
|
|
11
|
-
const ptr = new PropertyTransformerRegistry();
|
|
12
|
-
expect(ptr['_transformers']).to.be.eql({
|
|
13
|
-
trim: trimTransformer,
|
|
14
|
-
toUpperCase: toUpperCaseTransformer,
|
|
15
|
-
toLowerCase: toLowerCaseTransformer,
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('adds a given transformer with the name', function () {
|
|
20
|
-
const ptr = new PropertyTransformerRegistry();
|
|
21
|
-
const myTransformer = () => undefined;
|
|
22
|
-
const res = ptr.addTransformer('myTransformer', myTransformer);
|
|
23
|
-
expect(res).to.be.eq(ptr);
|
|
24
|
-
expect(ptr['_transformers']['myTransformer']).to.be.eq(myTransformer);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('requires the given name to be a non-empty string', function () {
|
|
28
|
-
const ptr = new PropertyTransformerRegistry();
|
|
29
|
-
const throwable = v => () => ptr.addTransformer(v, () => undefined);
|
|
30
|
-
const error = v =>
|
|
31
|
-
format(
|
|
32
|
-
'A name of the property transformer must ' +
|
|
33
|
-
'be a non-empty String, but %s was given.',
|
|
34
|
-
v,
|
|
35
|
-
);
|
|
36
|
-
expect(throwable('')).to.throw(error('""'));
|
|
37
|
-
expect(throwable(10)).to.throw(error('10'));
|
|
38
|
-
expect(throwable(0)).to.throw(error('0'));
|
|
39
|
-
expect(throwable(false)).to.throw(error('false'));
|
|
40
|
-
expect(throwable(undefined)).to.throw(error('undefined'));
|
|
41
|
-
expect(throwable(null)).to.throw(error('null'));
|
|
42
|
-
expect(throwable({})).to.throw(error('Object'));
|
|
43
|
-
expect(throwable([])).to.throw(error('Array'));
|
|
44
|
-
expect(throwable(() => undefined)).to.throw(error('Function'));
|
|
45
|
-
throwable('str')();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('throws an error if the given name already exists', function () {
|
|
49
|
-
const ptr = new PropertyTransformerRegistry();
|
|
50
|
-
ptr.addTransformer('test', () => undefined);
|
|
51
|
-
const throwable = () => ptr.addTransformer('test', () => undefined);
|
|
52
|
-
expect(throwable).to.throw(
|
|
53
|
-
'The property transformer "test" is already defined.',
|
|
54
|
-
);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('requires the given transformer to be a function', function () {
|
|
58
|
-
const ptr = new PropertyTransformerRegistry();
|
|
59
|
-
const throwable = v => () => ptr.addTransformer('test', v);
|
|
60
|
-
const error = v =>
|
|
61
|
-
format(
|
|
62
|
-
'The property transformer "test" must be a Function, but %s was given.',
|
|
63
|
-
v,
|
|
64
|
-
);
|
|
65
|
-
expect(throwable('str')).to.throw(error('"str"'));
|
|
66
|
-
expect(throwable('')).to.throw(error('""'));
|
|
67
|
-
expect(throwable(10)).to.throw(error('10'));
|
|
68
|
-
expect(throwable(0)).to.throw(error('0'));
|
|
69
|
-
expect(throwable(false)).to.throw(error('false'));
|
|
70
|
-
expect(throwable(undefined)).to.throw(error('undefined'));
|
|
71
|
-
expect(throwable(null)).to.throw(error('null'));
|
|
72
|
-
expect(throwable({})).to.throw(error('Object'));
|
|
73
|
-
expect(throwable([])).to.throw(error('Array'));
|
|
74
|
-
throwable(() => undefined)();
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
describe('hasTransformer', function () {
|
|
79
|
-
it('returns false for a not existing name', function () {
|
|
80
|
-
const ptr = new PropertyTransformerRegistry();
|
|
81
|
-
expect(ptr.hasTransformer('str')).to.be.false;
|
|
82
|
-
expect(ptr.hasTransformer('')).to.be.false;
|
|
83
|
-
expect(ptr.hasTransformer(10)).to.be.false;
|
|
84
|
-
expect(ptr.hasTransformer(0)).to.be.false;
|
|
85
|
-
expect(ptr.hasTransformer(true)).to.be.false;
|
|
86
|
-
expect(ptr.hasTransformer(false)).to.be.false;
|
|
87
|
-
expect(ptr.hasTransformer(null)).to.be.false;
|
|
88
|
-
expect(ptr.hasTransformer(undefined)).to.be.false;
|
|
89
|
-
expect(ptr.hasTransformer({})).to.be.false;
|
|
90
|
-
expect(ptr.hasTransformer([])).to.be.false;
|
|
91
|
-
expect(ptr.hasTransformer(() => undefined)).to.be.false;
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('returns true for an existing name', function () {
|
|
95
|
-
const ptr = new PropertyTransformerRegistry();
|
|
96
|
-
expect(ptr.hasTransformer('test')).to.be.false;
|
|
97
|
-
ptr.addTransformer('test', () => undefined);
|
|
98
|
-
expect(ptr.hasTransformer('test')).to.be.true;
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
describe('getTransformer', function () {
|
|
103
|
-
it('returns transformer by its name', function () {
|
|
104
|
-
const ptr = new PropertyTransformerRegistry();
|
|
105
|
-
const myTransformer1 = () => undefined;
|
|
106
|
-
const myTransformer2 = () => undefined;
|
|
107
|
-
ptr.addTransformer('foo', myTransformer1);
|
|
108
|
-
ptr.addTransformer('bar', myTransformer2);
|
|
109
|
-
const res1 = ptr.getTransformer('foo');
|
|
110
|
-
const res2 = ptr.getTransformer('bar');
|
|
111
|
-
expect(res1).to.be.eq(myTransformer1);
|
|
112
|
-
expect(res2).to.be.eq(myTransformer2);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('throws an error for a not existed name', function () {
|
|
116
|
-
const ptr = new PropertyTransformerRegistry();
|
|
117
|
-
const throwable = v => () => ptr.getTransformer(v);
|
|
118
|
-
const error = v =>
|
|
119
|
-
format('The property transformer %s is not defined.', v);
|
|
120
|
-
expect(throwable('str')).to.throw(error('"str"'));
|
|
121
|
-
expect(throwable('')).to.throw(error('""'));
|
|
122
|
-
expect(throwable(10)).to.throw(error('10'));
|
|
123
|
-
expect(throwable(0)).to.throw(error('0'));
|
|
124
|
-
expect(throwable(true)).to.throw(error('true'));
|
|
125
|
-
expect(throwable(false)).to.throw(error('false'));
|
|
126
|
-
expect(throwable(null)).to.throw(error('null'));
|
|
127
|
-
expect(throwable(undefined)).to.throw(error('undefined'));
|
|
128
|
-
expect(throwable({})).to.throw(error('Object'));
|
|
129
|
-
expect(throwable([])).to.throw(error('Array'));
|
|
130
|
-
expect(throwable(() => undefined)).to.throw(error('Function'));
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import {ValueOrPromise} from '../../../../types.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Property transformer context.
|
|
5
|
-
*/
|
|
6
|
-
export declare type PropertyTransformerContext = {
|
|
7
|
-
transformerName: string,
|
|
8
|
-
modelName: string,
|
|
9
|
-
propName: string,
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Property transformer.
|
|
14
|
-
*/
|
|
15
|
-
export declare type PropertyTransformer = (
|
|
16
|
-
value: unknown,
|
|
17
|
-
options: unknown,
|
|
18
|
-
context: PropertyTransformerContext,
|
|
19
|
-
) => ValueOrPromise<unknown>;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Property transform options.
|
|
23
|
-
*/
|
|
24
|
-
export type PropertyTransformOptions =
|
|
25
|
-
| (string | PropertyTransformer)
|
|
26
|
-
| (string | PropertyTransformer)[]
|
|
27
|
-
| {[key: string]: unknown};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import {InvalidArgumentError} from '../../../../../errors/index.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Max length validator.
|
|
5
|
-
*
|
|
6
|
-
* @param {*} value
|
|
7
|
-
* @param {number|boolean} options
|
|
8
|
-
* @param {object} context
|
|
9
|
-
* @returns {boolean}
|
|
10
|
-
*/
|
|
11
|
-
export function maxLengthValidator(value, options, context) {
|
|
12
|
-
if (value == null || options === false) return true;
|
|
13
|
-
if (typeof options !== 'number')
|
|
14
|
-
throw new InvalidArgumentError(
|
|
15
|
-
'The validator %v requires the "options" argument ' +
|
|
16
|
-
'as a Number, but %v was given.',
|
|
17
|
-
context.validatorName,
|
|
18
|
-
options,
|
|
19
|
-
);
|
|
20
|
-
if (typeof value === 'string' || Array.isArray(value))
|
|
21
|
-
return value.length <= options;
|
|
22
|
-
throw new InvalidArgumentError(
|
|
23
|
-
'The property validator %v requires a String ' +
|
|
24
|
-
'or an Array value, but %v was given.',
|
|
25
|
-
context.validatorName,
|
|
26
|
-
value,
|
|
27
|
-
);
|
|
28
|
-
}
|
package/src/definition/model/properties/property-validator/builtin/max-length-validator.spec.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import {expect} from 'chai';
|
|
2
|
-
import {format} from '@e22m4u/js-format';
|
|
3
|
-
import {maxLengthValidator} from './max-length-validator.js';
|
|
4
|
-
|
|
5
|
-
describe('maxLengthValidator', function () {
|
|
6
|
-
it('returns true if the "options" argument is false', function () {
|
|
7
|
-
const res = maxLengthValidator('test', false, {});
|
|
8
|
-
expect(res).to.be.true;
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('returns true for undefined and null values', function () {
|
|
12
|
-
const res1 = maxLengthValidator(undefined, 10, {});
|
|
13
|
-
const res2 = maxLengthValidator(null, 10, {});
|
|
14
|
-
expect(res1).to.be.true;
|
|
15
|
-
expect(res2).to.be.true;
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('requires the "value" argument as a String or an Array', function () {
|
|
19
|
-
const throwable = v => () =>
|
|
20
|
-
maxLengthValidator(v, 10, {
|
|
21
|
-
validatorName: 'myValidator',
|
|
22
|
-
});
|
|
23
|
-
const error = v =>
|
|
24
|
-
format(
|
|
25
|
-
'The property validator "myValidator" requires a String ' +
|
|
26
|
-
'or an Array value, but %s was given.',
|
|
27
|
-
v,
|
|
28
|
-
);
|
|
29
|
-
expect(throwable(10)).to.throw(error('10'));
|
|
30
|
-
expect(throwable(0)).to.throw(error('0'));
|
|
31
|
-
expect(throwable(true)).to.throw(error('true'));
|
|
32
|
-
expect(throwable(false)).to.throw(error('false'));
|
|
33
|
-
expect(throwable({})).to.throw(error('Object'));
|
|
34
|
-
expect(throwable(() => undefined)).to.throw(error('Function'));
|
|
35
|
-
throwable('str')();
|
|
36
|
-
throwable('')();
|
|
37
|
-
throwable([1, 2, 3])();
|
|
38
|
-
throwable([])();
|
|
39
|
-
throwable(undefined)();
|
|
40
|
-
throwable(null)();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('requires the "options" argument to be a number', function () {
|
|
44
|
-
const throwable = v => () =>
|
|
45
|
-
maxLengthValidator('test', v, {
|
|
46
|
-
validatorName: 'myValidator',
|
|
47
|
-
});
|
|
48
|
-
const error = v =>
|
|
49
|
-
format(
|
|
50
|
-
'The validator "myValidator" requires the "options" argument ' +
|
|
51
|
-
'as a Number, but %s was given.',
|
|
52
|
-
v,
|
|
53
|
-
);
|
|
54
|
-
expect(throwable('str')).to.throw(error('"str"'));
|
|
55
|
-
expect(throwable('')).to.throw(error('""'));
|
|
56
|
-
expect(throwable(true)).to.throw(error('true'));
|
|
57
|
-
expect(throwable(undefined)).to.throw(error('undefined'));
|
|
58
|
-
expect(throwable(null)).to.throw(error('null'));
|
|
59
|
-
expect(throwable({})).to.throw(error('Object'));
|
|
60
|
-
expect(throwable([])).to.throw(error('Array'));
|
|
61
|
-
expect(throwable(() => undefined)).to.throw(error('Function'));
|
|
62
|
-
throwable(10)();
|
|
63
|
-
throwable(0)();
|
|
64
|
-
throwable(false)();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe('a string value', function () {
|
|
68
|
-
it('returns false if the value length is greater than the max length option', function () {
|
|
69
|
-
const res = maxLengthValidator('1234', 3, {});
|
|
70
|
-
expect(res).to.be.false;
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('returns true if the value length is equal to the max length option', function () {
|
|
74
|
-
const res = maxLengthValidator('123', 3, {});
|
|
75
|
-
expect(res).to.be.true;
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('returns true if the value length is lower than the max length option', function () {
|
|
79
|
-
const res = maxLengthValidator('12', 3, {});
|
|
80
|
-
expect(res).to.be.true;
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('an array value', function () {
|
|
85
|
-
it('returns false if the value length is greater than the max length option', function () {
|
|
86
|
-
const res = maxLengthValidator([1, 2, 3, 4], 3, {});
|
|
87
|
-
expect(res).to.be.false;
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('returns true if the value length is equal to the max length option', function () {
|
|
91
|
-
const res = maxLengthValidator([1, 2, 3], 3, {});
|
|
92
|
-
expect(res).to.be.true;
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('returns true if the value length is lower than the max length option', function () {
|
|
96
|
-
const res = maxLengthValidator([1, 2], 3, {});
|
|
97
|
-
expect(res).to.be.true;
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
});
|