@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
96 lines (95 loc) • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.zBaseDBEntity = exports.zSlug = exports.zIdBase64Url = exports.zIdBase64 = exports.zIdBase62 = exports.zId = exports.zJwt = exports.JWT_REGEX = exports.zBase64Url = exports.zBase64 = exports.zBase62 = exports.BASE64URL_REGEX = exports.BASE64_REGEX = exports.BASE62_REGEX = exports.zEmail = exports.zIsoDateString = exports.zSemVer = exports.zUnixTimestampMillis2000 = exports.zUnixTimestampMillis = exports.zUnixTimestamp2000 = exports.zUnixTimestamp = exports.TS_2000 = exports.TS_2500 = void 0;
const zod_1 = require("zod");
exports.TS_2500 = 16725225600; // 2500-01-01
exports.TS_2000 = 946684800; // 2000-01-01
exports.zUnixTimestamp = zod_1.z
.number()
.int()
.min(0)
.max(exports.TS_2500, 'Must be a UnixTimestamp number')
.describe('UnixTimestamp');
exports.zUnixTimestamp2000 = zod_1.z
.number()
.int()
.min(exports.TS_2000)
.max(exports.TS_2500, 'Must be a UnixTimestamp number after 2000-01-01')
.describe('UnixTimestamp2000');
exports.zUnixTimestampMillis = zod_1.z
.number()
.int()
.min(0)
.max(exports.TS_2500 * 1000, 'Must be a UnixTimestampMillis number')
.describe('UnixTimestampMillis');
exports.zUnixTimestampMillis2000 = zod_1.z
.number()
.int()
.min(exports.TS_2000 * 1000)
.max(exports.TS_2500 * 1000, 'Must be a UnixTimestampMillis number after 2000-01-01')
.describe('UnixTimestampMillis2000');
exports.zSemVer = zod_1.z
.string()
.regex(/^[0-9]+\.[0-9]+\.[0-9]+$/, 'Must be a SemVer string')
.describe('SemVer');
exports.zIsoDateString = zod_1.z
.string()
.refine(v => {
return /^\d{4}-\d{2}-\d{2}$/.test(v);
}, 'Must be an IsoDateString')
.describe('IsoDateString');
exports.zEmail = zod_1.z
.string()
.trim()
.email()
.transform(s => s.toLowerCase())
.describe('Email');
exports.BASE62_REGEX = /^[a-zA-Z0-9]+$/;
exports.BASE64_REGEX = /^[A-Za-z0-9+/]+={0,2}$/;
exports.BASE64URL_REGEX = /^[\w-/]+$/;
exports.zBase62 = zod_1.z
.string()
.regex(exports.BASE62_REGEX, 'Must be a base62 string')
.describe('Base62String');
exports.zBase64 = zod_1.z
.string()
.regex(exports.BASE64_REGEX, 'Must be a base64 string')
.describe('Base64String');
exports.zBase64Url = zod_1.z
.string()
.regex(exports.BASE64URL_REGEX, 'Must be a base64url string')
.describe('Base64UrlString');
exports.JWT_REGEX = /^[\w-]+\.[\w-]+\.[\w-]+$/;
exports.zJwt = zod_1.z.string().regex(exports.JWT_REGEX, 'Must be a JWT string').describe('JWTString');
exports.zId = zod_1.z
.string()
.regex(/^[a-zA-Z0-9_]{6,64}$/, 'Must be an id string')
.describe('IdString');
exports.zIdBase62 = zod_1.z
.string()
.regex(/^[a-zA-Z0-9]{8,64}$/, 'Must be a base62 id string')
.describe('Base62Id');
exports.zIdBase64 = zod_1.z
.string()
.regex(/^[A-Za-z0-9+/]{6,62}={0,2}$/, 'Must be a base64 id string')
.describe('Base64Id');
exports.zIdBase64Url = zod_1.z
.string()
.regex(/^[\w-/]{8,64}$/, 'Must be a base64url id string')
.describe('Base64UrlId');
/**
* "Slug" - a valid URL, filename, etc.
*/
exports.zSlug = zod_1.z
.string()
.regex(/^[a-z0-9-]{1,255}$/, 'Must be a slug string')
.describe('Slug');
exports.zBaseDBEntity = zod_1.z
.object({
id: zod_1.z.string(),
// created/updated are intentionally optional here
created: exports.zUnixTimestamp2000.optional(),
updated: exports.zUnixTimestamp2000.optional(),
})
.describe('BaseDBEntity');
// export const zSavedDBEntity = zBaseDBEntity.required().describe('SavedDBEntity')