succulent
Version:
Powerful and easy runtime type checking
21 lines • 773 B
JavaScript
import { Schema } from "../schema";
function isEnumMemberName(x, enumObject) {
// @ts-expect-error - This is some real fun voodoo :)
// eslint-disable-next-line
return x in enumObject && typeof enumObject[enumObject[x]] !== "number";
}
function enumKeys(enumObject) {
return Object.keys(enumObject).filter((key) => isEnumMemberName(key, enumObject));
}
export function $enum(enumObject, options = {}) {
const keys = enumKeys(enumObject);
const values = new Set(keys.map((key) => enumObject[key]));
// eslint-disable-next-line
return new Schema((x) => values.has(x), {
displayName: options.displayName ?? `enum { ${keys.join(", ")} }`,
*iter() {
yield* values;
},
});
}
//# sourceMappingURL=enum.js.map