smart-types-ts
Version:
A collection of _Smart Types_ and _Smart Constructors_ which enable you to be more strict when defining your application's important types/interfaces.
56 lines (55 loc) • 2.07 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mkArrayWithLength = void 0;
/**
* ```ts
* type ArrayWithLength<Min, Max>
* ```
*
* Represents a list which has a constrained length. For example, ArrayWithLength<2, 10> is
* a list with between 2 and 10 elements (inclusive).
*
* @since 0.0.1
*/
const function_1 = require("fp-ts/lib/function");
const e = __importStar(require("fp-ts/lib/Either"));
const withLength_1 = require("../withLength");
/**
* Constructs an ArrayWithLength. First a min and a max must be passed.
*
* Note: This function can throw if invalid min/max arguments are passed!
*
* @example
* import * as e from 'fp-ts/Either'
* import { mkArrayWithLength } from 'smart-types'
*
* assert.deepStrictEqual(mkArrayWithLength(2, 10)([]), e.left("Length not between 2-10"))
* assert.deepStrictEqual(mkArrayWithLength(2, 10)([1, 2, 3]), e.right([1, 2, 3]))
*
* @category smartConstructor
* @since 0.0.1
*/
const mkArrayWithLength = (min, max) => {
const mkWithLength_ = withLength_1.mkWithLength(min, max);
return (arr) => function_1.pipe(mkWithLength_(arr), e.map((list) => list));
};
exports.mkArrayWithLength = mkArrayWithLength;