UNPKG

computed-types

Version:

Runtime validation types for TypeScript.

113 lines (72 loc) 13.6 kB
"use strict"; require("mocha"); var _chai = require("chai"); var _utils = require("./schema/utils"); var _chaiAsPromised = _interopRequireDefault(require("chai-as-promised")); var _array = _interopRequireDefault(require("./array")); var _errors = require("./schema/errors"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _chai.use)(_chaiAsPromised.default); /* eslint-disable @typescript-eslint/no-explicit-any */ describe('array', () => { it('array()', () => { (0, _utils.typeCheck)('ok'); _chai.assert.deepEqual((0, _array.default)([]), []); _chai.assert.deepEqual((0, _array.default)(['foo']), ['foo']); _chai.assert.throws(() => (0, _array.default)(null), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)(undefined), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)({}), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)({ foo: 1 }), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)(122), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)('ddd'), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)(true), _errors.ValidationError); _chai.assert.throws(() => (0, _array.default)(false), _errors.ValidationError); }); it('array.min()', () => { _chai.assert.deepEqual(_array.default.min(3)([1, 2, 3]), [1, 2, 3]); _chai.assert.deepEqual(_array.default.min(3)([1, 2, 3, 4]), [1, 2, 3, 4]); _chai.assert.throws(() => _array.default.min(3)([1, 2]), _errors.ValidationError); _chai.assert.throws(() => _array.default.min(1, 'test')([]), _errors.ValidationError, 'test'); }); it('array.max()', () => { _chai.assert.deepEqual(_array.default.max(3)([1, 2, 3]), [1, 2, 3]); _chai.assert.deepEqual(_array.default.max(3)([1, 2]), [1, 2]); _chai.assert.deepEqual(_array.default.max(3)([]), []); _chai.assert.throws(() => _array.default.max(3)([1, 2, 3, 4]), _errors.ValidationError); _chai.assert.throws(() => _array.default.max(0, 'test')([1]), _errors.ValidationError, 'test'); }); it('array.between()', () => { _chai.assert.deepEqual(_array.default.between(1, 3)([1, 2, 3]), [1, 2, 3]); _chai.assert.deepEqual(_array.default.between(1, 3)([1, 2]), [1, 2]); _chai.assert.deepEqual(_array.default.between(1, 3)([1]), [1]); _chai.assert.throws(() => _array.default.between(1, 3)([]), _errors.ValidationError); _chai.assert.throws(() => _array.default.between(0, 3, 'test')([1, 2, 3, 4]), _errors.ValidationError, 'test'); }); it('array.of()', () => { const fooArr = _array.default.of('foo'); (0, _utils.typeCheck)('ok'); (0, _utils.typeCheck)('ok'); _chai.assert.deepEqual(fooArr(['foo']), ['foo']); _chai.assert.deepEqual(fooArr([]), []); _chai.assert.deepEqual(fooArr(['foo', 'foo']), ['foo', 'foo']); _chai.assert.throws(() => fooArr(['foo', 'bar']), _errors.ValidationError); _chai.assert.throws(() => fooArr(['foo', 1]), _errors.ValidationError); }); it('array.of() async', async () => { const posArr = _array.default.of(async x => { if (typeof x !== 'number' || x < 0) { throw new RangeError(`Negative number`); } return x; }); (0, _utils.typeCheck)('ok'); (0, _utils.typeCheck)('ok'); _chai.assert.deepEqual(await posArr([1]), [1]); _chai.assert.deepEqual(await posArr([1, 0]), [1, 0]); await _chai.assert.isRejected(posArr([1, -1]), RangeError); await _chai.assert.isRejected(posArr(['foo', 1]), RangeError); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJheS50ZXN0LnRzIl0sIm5hbWVzIjpbImNoYWlBc1Byb21pc2VkIiwiZGVzY3JpYmUiLCJpdCIsImFzc2VydCIsImRlZXBFcXVhbCIsInRocm93cyIsIlZhbGlkYXRpb25FcnJvciIsInVuZGVmaW5lZCIsImZvbyIsImFycmF5IiwibWluIiwibWF4IiwiYmV0d2VlbiIsImZvb0FyciIsIm9mIiwicG9zQXJyIiwieCIsIlJhbmdlRXJyb3IiLCJpc1JlamVjdGVkIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsZUFBSUEsdUJBQUo7QUFFQTs7QUFFQUMsUUFBUSxDQUFDLE9BQUQsRUFBVSxNQUFNO0FBQ3RCQyxFQUFBQSxFQUFFLENBQUMsU0FBRCxFQUFZLE1BQU07QUFDbEIsMEJBQXFELElBQXJEOztBQUVBQyxpQkFBT0MsU0FBUCxDQUFpQixvQkFBTSxFQUFOLENBQWpCLEVBQTRCLEVBQTVCOztBQUNBRCxpQkFBT0MsU0FBUCxDQUFpQixvQkFBTSxDQUFDLEtBQUQsQ0FBTixDQUFqQixFQUFpQyxDQUFDLEtBQUQsQ0FBakM7O0FBRUFELGlCQUFPRSxNQUFQLENBQWMsTUFBTSxvQkFBTSxJQUFOLENBQXBCLEVBQXdDQyx1QkFBeEM7O0FBQ0FILGlCQUFPRSxNQUFQLENBQWMsTUFBTSxvQkFBTUUsU0FBTixDQUFwQixFQUE2Q0QsdUJBQTdDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sRUFBTixDQUFwQixFQUFzQ0MsdUJBQXRDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU07QUFBRUcsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBTixDQUFwQixFQUE4Q0YsdUJBQTlDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sR0FBTixDQUFwQixFQUF1Q0MsdUJBQXZDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sS0FBTixD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akMsRUFBb0M7QUFDbEMsY0FBTSxJQUFJQyxVQUFKLENBQWdCLGlCQUFoQixDQUFOO0FBQ0Q7O0FBRUQsYUFBT0QsQ0FBUDtBQUNELEtBTmMsQ0FBZjs7QUFPQSwwQkFBNEQsSUFBNUQ7QUFDQSwwQkFBaUQsSUFBakQ7O0FBRUFiLGlCQUFPQyxTQUFQLENBQWlCLE1BQU1XLE1BQU0sQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUE3QixFQUFvQyxDQUFDLENBQUQsQ0FBcEM7O0FBQ0FaLGlCQUFPQyxTQUFQLENBQWlCLE1BQU1XLE1BQU0sQ0FBQyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUQsQ0FBN0IsRUFBdUMsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF2Qzs7QUFFQSxVQUFNWixhQUFPZSxVQUFQLENBQWtCSCxNQUFNLENBQUMsQ0FBQyxDQUFELEVBQUksQ0FBQyxDQUFMLENBQUQsQ0FBeEIsRUFBMENFLFVBQTFDLENBQU47QUFDQSxVQUFNZCxhQUFPZSxVQUFQLENBQWtCSCxNQUFNLENBQUMsQ0FBQyxLQUFELEVBQVEsQ0FBUixDQUFELENBQXhCLEVBQTZDRSxVQUE3QyxDQUFOO0FBQ0QsR0FoQkMsQ0FBRjtBQWlCRCxDQTdFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgeyBhc3NlcnQsIHVzZSB9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHsgdHlwZUNoZWNrIH0gZnJvbSAnLi9zY2hlbWEvdXRpbHMnO1xuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xuaW1wb3J0IGFycmF5IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9zY2hlbWEvZXJyb3JzJztcblxudXNlKGNoYWlBc1Byb21pc2VkKTtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5kZXNjcmliZSgnYXJyYXknLCAoKSA9PiB7XG4gIGl0KCdhcnJheSgpJywgKCkgPT4ge1xuICAgIHR5cGVDaGVjazx0eXBlb2YgYXJyYXksICh4OiB1bmtub3duW10pID0+IHVua25vd25bXT4oJ29rJyk7XG5cbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5KFtdKSwgW10pO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoYXJyYXkoWydmb28nXSksIFsnZm9vJ10pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheShudWxsIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh1bmRlZmluZWQgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5KHt9IGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh7IGZvbzogMSB9IGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSgxMjIgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5KCdkZGQnIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh0cnVlIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheShmYWxzZSBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICB9KTtcblxuICBpdCgnYXJyYXkubWluKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhcnJheS5taW4oMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5Lm1pbigzKShbMSwgMiwgMywgNF0pLCBbMSwgMiwgMywgNF0pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheS5taW4oMykoWzEsIDJdKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5Lm1pbigxLCAndGVzdCcpKFtdKSwgVmFsaWRhdGlvbkVycm9yLCAndGVzdCcpO1xuICB9KTtcblxuICBpdCgnYXJyYXkubWF4KCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhcnJheS5tYXgoMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5Lm1heCgzKShbMSwgMl0pLCBbMSwgMl0pO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoYXJyYXkubWF4KDMpKFtdKSwgW10pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheS5tYXgoMykoWzEsIDIsIDMsIDRdKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5Lm1heCgwLCAndGVzdCcpKFsxXSksIFZhbGlkYXRpb25FcnJvciwgJ3Rlc3QnKTtcbiAgfSk7XG5cbiAgaXQoJ2FycmF5LmJldHdlZW4oKScsICgpID0+IHtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzEsIDJdKSwgWzEsIDJdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzFdKSwgWzFdKTtcblxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYXJyYXkuYmV0d2VlbigxLCAzKShbXSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGFycmF5LmJldHdlZW4oMCwgMywgJ3Rlc3QnKShbMSwgMiwgMywgNF0pLFxuICAgICAgVmFsaWRhdGlvbkVycm9yLFxuICAgICAgJ3Rlc3QnLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdhcnJheS5vZigpJywgKCkgPT4ge1xuICAgIGNvbnN0IGZvb0FyciA9IGFycmF5Lm9mKCdmb28nIGFzIGNvbnN0KTtcbiAgICB0eXBlQ2hlY2s8UmV0dXJuVHlwZTx0eXBlb2YgZm9vQXJyPiwgJ2ZvbydbXT4oJ29rJyk7XG4gICAgdHlwZUNoZWNrPFBhcmFtZXRlcnM8dHlwZW9mIGZvb0Fycj4sIFsnZm9vJ1tdXT4oJ29rJyk7XG5cbiAgICBhc3NlcnQuZGVlcEVxdWFsKGZvb0FycihbJ2ZvbyddKSwgWydmb28nXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChmb29BcnIoW10pLCBbXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChmb29BcnIoWydmb28nLCAnZm9vJ10pLCBbJ2ZvbycsICdmb28nXSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvb0FycihbJ2ZvbycsICdiYXInXSBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vQXJyKFsnZm9vJywgMV0gYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ2FycmF5Lm9mKCkgYXN5bmMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcG9zQXJyID0gYXJyYXkub2YoYXN5bmMgKHg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fCB4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmVnYXRpdmUgbnVtYmVyYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH0pO1xuICAgIHR5cGVDaGVjazxSZXR1cm5UeXBlPHR5cGVvZiBwb3NBcnI+LCBQcm9taXNlTGlrZTxudW1iZXJbXT4+KCdvaycpO1xuICAgIHR5cGVDaGVjazxQYXJhbWV0ZXJzPHR5cGVvZiBwb3NBcnI+LCBbbnVtYmVyW11dPignb2snKTtcblxuICAgIGFzc2VydC5kZWVwRXF1YWwoYXdhaXQgcG9zQXJyKFsxXSksIFsxXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhd2FpdCBwb3NBcnIoWzEsIDBdKSwgWzEsIDBdKTtcblxuICAgIGF3YWl0IGFzc2VydC5pc1JlamVjdGVkKHBvc0FycihbMSwgLTFdIGFzIGFueSksIFJhbmdlRXJyb3IpO1xuICAgIGF3YWl0IGFzc2VydC5pc1JlamVjdGVkKHBvc0FycihbJ2ZvbycsIDFdIGFzIGFueSksIFJhbmdlRXJyb3IpO1xuICB9KTtcbn0pO1xuIl19