UNPKG

runtypes

Version:

Runtime validation for static types

32 lines (31 loc) 1.47 kB
import Runtype from "./Runtype.js"; import Spread from "./Spread.js"; import FAILURE from "./utils-internal/FAILURE.js"; import SUCCESS from "./utils-internal/SUCCESS.js"; import defineIntrinsics from "./utils-internal/defineIntrinsics.js"; import enumerableKeysOf from "./utils-internal/enumerableKeysOf.js"; import isNumberLikeKey from "./utils-internal/isNumberLikeKey.js"; const Array = (element) => { const base = { tag: "array", element, }; return Runtype.create(({ received, innerValidate, expected, parsing }) => { if (!globalThis.Array.isArray(received)) return FAILURE.TYPE_INCORRECT({ expected, received }); const keys = enumerableKeysOf(received).filter(isNumberLikeKey); const results = keys.map(key => innerValidate({ expected: element, received: received[key], parsing })); const details = {}; for (const key of keys) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const result = results[key]; if (!result.success) details[key] = result; } if (enumerableKeysOf(details).length !== 0) return FAILURE.CONTENT_INCORRECT({ expected, received, details }); else return SUCCESS(parsing ? results.map(result => result.value) : received); }, Spread.asSpreadable(base)).with(self => defineIntrinsics({}, { asReadonly: () => self })); }; export default Array;