UNPKG

@freeword/meta

Version:

Meta package for Freeword: exports all core types, constants, and utilities from the src/ directory.

130 lines 7.89 kB
import { arr, str, literal, bareint, safenum, num, jsdate, anything, bool, coerce, safeint, union, } from "../checks/BootChecks.js"; import * as CO from "./internal.js"; // // == [Fundamental Types] // export const uint32 = bareint.min(CO.UINT_32.min).max(CO.UINT_32.max); export const int32 = bareint.min(CO.SINT_32.min).max(CO.SINT_32.max); export const uint64 = bareint.min(CO.UINT_64.min).max(CO.UINT_64.max); export const int64 = bareint.min(CO.SINT_64.min).max(CO.SINT_64.max); export const byte = bareint.min(0).max(7).describe(`byte`); export const lat = safenum.gte(-90).max(90).describe('latitude degrees'); export const lng = safenum.gt(-180).max(180).describe('longitude degrees'); // export const float = num.finite(); export const quantity = bareint.min(0).max(CO.QUANTITY.max); // // By default dates must be convertable to a timestamp greater than one billion and less than sixty years in the future // This avoids careless conversion from a working number to a timestamp export const modern = jsdate.min(new Date(CO.TS_EARLIEST)).max(new Date(CO.TS_LAST_ALLOWED)); // -- // // == [Generic Strings] // export const trimmed = str.trim().regex(CO.STRINGISH.re, CO.STRINGISH.msg); export const lower = str.trim().regex(CO.LOWER.re, CO.LOWER.msg).describe('plain lowercase'); // export const textish = str.trim().regex(CO.TEXTISH.re, CO.TEXTISH.msg); export const blobbish = str.regex(CO.TEXTISH.re, CO.TEXTISH.msg).max(CO.BLOBBISH.max); // -- // // == [Identifier Types] // export const tagsegs = lower.min(1).max(40).regex(/^([a-z][a-z0-9_]*-)*[a-z0-9_]+$/, 'simple lowercase labels separated by dashes'); export const keyish = trimmed.max(CO.MEDSTR.max).regex(CO.KEYISH.re, CO.KEYISH.msg); // -- // // == [Generic String checks] // export const shortstr = trimmed.max(CO.SHORTSTR.max); export const medstr = trimmed.max(CO.MEDSTR.max); export const fullstr = trimmed.max(CO.FULLSTR.max); export const bigstr = trimmed.max(CO.BIGSTR.max); export const idkstr = fullstr; export const FALLBACK = idkstr; export const titleish = trimmed.max(CO.TITLEISH.max).describe('title'); export const longtitle = trimmed.max(CO.LONGTITLE.max).describe('title'); export const noteish = textish.max(CO.NOTESTR.max).regex(CO.NOTESTR.re, CO.NOTESTR.msg).describe('standard multiline text'); export const notestr = noteish; export const phrasetag = lower.max(CO.PHRASETAG.max).min(CO.PHRASETAG.min).regex(CO.PHRASETAG.re, CO.PHRASETAG.msg).describe('simple lowercase+dash label'); export const regexstr = str.regex(CO.STRINGISH_RE).describe('re pattern string'); export const handle = str.min(CO.HANDLEISH.min).max(CO.HANDLEISH.max).regex(CO.HANDLEISH.re, CO.HANDLEISH.msg).describe('record handle'); export const emoji = trimmed.regex(CO.STRINGISH.re, CO.STRINGISH.msg); export const timestamp = num.int().gte(CO.TIMESTAMP.min, CO.TIMESTAMP.min_msg).lte(CO.TIMESTAMP.max, CO.TIMESTAMP.max_msg).describe('ms timestamp'); export const timecode = lower.length(CO.TIMECODE.len).regex(CO.TIMECODE.re, { message: CO.TIMECODE.msg }).describe('timecode'); // -- // // == [Numberlike Strings] // export const boolstr = union([literal('true'), literal('false'), bool]).pipe(coerce.boolean()); export const snumstr = union([str.trim().regex(CO.SNUMSTR.re, CO.SNUMSTR.msg), safenum]).pipe(coerce.string().max(CO.SNUMSTR.max)).describe('number (as number/text)'); // gives a string export const unumstr = union([str.trim().regex(CO.UNUMSTR.re, CO.UNUMSTR.msg), safenum]).pipe(coerce.string().max(CO.UNUMSTR.max)).describe('positive number (as number/text)'); // gives a string export const sintstr = union([str.trim().regex(CO.SINTSTR.re, CO.SINTSTR.msg), safeint]).pipe(coerce.string().max(CO.SINTSTR.max)).describe('whole number (as number/text)'); // gives a string export const uintstr = union([str.trim().regex(CO.UINTSTR.re, CO.UINTSTR.msg), safeint]).pipe(coerce.string().max(CO.UINTSTR.max)).describe('positive whole number (as number/text)'); // gives a string export const intstr = sintstr; export const numstr = snumstr; export const qtystr = str.trim().regex(CO.UINTSTR.re, CO.UINTSTR.msg).max(CO.UINTSTR.max).describe('positive number (as text)'); export const sstrnum = union([str.trim().regex(CO.SNUMSTR.re, CO.SNUMSTR.msg), safenum]).pipe(coerce.number()).describe('number (as number/text)'); // gives a number export const ustrnum = union([str.trim().regex(CO.UNUMSTR.re, CO.UNUMSTR.msg), safenum]).pipe(coerce.number()).describe('positive number (as number/text)'); // gives a number export const sstrint = union([str.trim().regex(CO.SINTSTR.re, CO.SINTSTR.msg), safeint]).pipe(coerce.number()).describe('whole number (as number/text)'); // gives a number export const ustrint = union([str.trim().regex(CO.UINTSTR.re, CO.UINTSTR.msg), safeint]).pipe(coerce.number()).describe('positive whole number (as number/text)'); // gives a number export const strint = sstrint; export const strnum = sstrnum; export const hexrange = lower.regex(CO.HEXRANGE.re); export const pxdim = bareint.min(1).max(20200).describe('pixels'); // -- // // == [Booleans / Boolean-like Strings] // export const ok = bool; export const yayOK = literal(true); export const notOK = literal(false); // const BOOLISH_TRUES = [true, 1, 'true', 'True', 'TRUE', '1', 'Yes', 'yes', 'YES', 'Y', 'y']; const BOOLISH_FALSES = [false, 0, 'false', 'False', 'FALSE', '0', 'No', 'no', 'NO', 'N', 'n']; const BOOLISH_ALLOW_SET = new Set([...BOOLISH_TRUES, ...BOOLISH_FALSES]); const BOOLISH_TRUE_SET = new Set(BOOLISH_TRUES); const BOOLISH_FALSE_SET = new Set(BOOLISH_FALSES); export const boolish = anything .refine(((val) => BOOLISH_ALLOW_SET.has(val)), { params: { msg: 'should be identifiably true or false' } }) .transform((val) => { if (BOOLISH_FALSE_SET.has(val)) { return false; } if (BOOLISH_TRUE_SET.has(val)) { return true; } return val; }).pipe(bool); // == [ID Types] export const id26 = trimmed.length(CO.ID26.len).regex(CO.ID26.re, { message: CO.ID26.msg }).describe('idkeyish'); export const ulid = trimmed.length(CO.ULID.len).regex(CO.ULID.re, { message: CO.ULID.msg }).describe('ulid'); export const extkey = str.regex(/^[\w@!#%\.,\/:\-\+]*$/, 'should be a freeform identifier').describe('extkey'); export const guidv4 = lower.min(CO.GUIDV4.min).max(CO.GUIDV4.max).regex(CO.GUIDV4.re, { message: CO.GUIDV4.msg }).describe('V4 GUID'); export const guidv4TT = guidv4.brand('guidv4'); export const extkeyish = trimmed.max(CO.MEDSTR.max).regex(CO.EXTKEYISH.re, CO.EXTKEYISH.msg).min(1); export const pctcode = trimmed.max(CO.MEDSTR.max).regex(CO.PCTCODE.re, CO.PCTCODE.msg).min(1); // // == [Datamodel-related strings] (typename, fieldname, classname, etc) // export const snake = str.trim().min(1).regex(CO.SNAKE.re, CO.SNAKE.msg); export const locamel = str.trim().min(1).regex(CO.LOCAMEL.re, CO.LOCAMEL.msg); export const camel = str.trim().min(1).regex(CO.CAMEL.re, CO.CAMEL.msg); export const varname = str.trim().min(1).regex(CO.VARNAME.re, CO.VARNAME.msg); export const tstype = str.trim().min(1).regex(CO.TSTYPE.re, CO.TSTYPE.msg); export const typenamestr = str.trim().min(1).regex(CO.CAMEL.re, CO.CAMEL.msg).max(20); export const tblname = str.trim().min(1).regex(CO.DASHDOTLABEL.re, CO.DASHDOTLABEL.msg); export const fieldname = str.trim().min(1).regex(CO.FIELDNAME.re, CO.FIELDNAME.msg); export const dotfield = str.trim().min(1).regex(CO.DOTFIELD.re, CO.DOTFIELD.msg); export const colname = dotfield; export const lodotfield = str.trim().min(1).regex(CO.LODOTFIELD.re, CO.LODOTFIELD.msg); export const qtdotfield = str.trim().min(1).regex(CO.QTDOTFIELD.re, "should be a maybe-quoted field path"); // // == [Other strings] // export const whim = str.regex(/^[a-z0-9_-]{5,80}$/).describe('whim'); export const addrpart = str; export const strset = arr(str); export const exturi = extkey; export const ccmasked = str; //# sourceMappingURL=PrimshapeChecks.js.map