UNPKG

@udraft/core

Version:

uDraft is a language and stack agnostic code-generation tool that simplifies full-stack development by converting a single YAML file into code for rapid development.

72 lines (66 loc) 2.89 kB
import { UModel } from "../entities/model"; import { UModule } from "../entities/module"; import { attrBuilder } from "../helpers/builders"; import { uattr } from "./entities"; // Validation export const _required = attrBuilder<boolean>("required", true, true); export const _min = attrBuilder<number>("min", 0); export const _max = attrBuilder<number>("max", Number.MAX_SAFE_INTEGER); export const _minLength = attrBuilder<number>("minLength", 0); export const _maxLength = attrBuilder<number>( "max-length", Number.MAX_SAFE_INTEGER ); export const _size = attrBuilder<number>("length"); export const _notEmpty = attrBuilder<boolean>("notEmpty", true, false); export const _notIn = attrBuilder<any[]>("notIn"); export const _in = attrBuilder<any[]>("in"); export const _regex = attrBuilder<RegExp>("regex"); // Sanitization export const _trim = attrBuilder<boolean>("trim", true, false); export const _lowercase = attrBuilder<boolean>("lowercase", true, false); export const _uppercase = attrBuilder<boolean>("uppercase", true, false); export const _capitalize = attrBuilder<boolean>("capitalize", true, false); // Database export const _schema = attrBuilder<string>("schema"); export const _primary = attrBuilder<boolean>("primary", true, false); export const _index = attrBuilder<number | boolean>("index", 1); export const _textIndex = attrBuilder<boolean | string[]>("textIndex", true); export const _unique = attrBuilder<boolean>("unique", true, false); export const _virtual = attrBuilder<boolean>("virtual", true, false); export const _noId = attrBuilder<boolean>("noId", true, false); // Modules and Features export const _http = attrBuilder<{ method?: string; url?: string; contentType?: string; noBody?: boolean; params?: { [paramName: string]: string }; // params {<param name>: <input model field name>} }>("http", { url: "/", method: "get", }); export const _rootModule = attrBuilder<UModule>("rootModule"); // General export const _array = attrBuilder<boolean>("array", true, false); export const _enum = <Type>(enumDefinition?: Record<string, Type>) => { if (enumDefinition) { const firstKey = Object.keys(enumDefinition)[0]; const hasReverseMappint = enumDefinition[enumDefinition[firstKey] as any] == firstKey; if (hasReverseMappint) { const newEnumDefinition: Record<string, Type> = {}; for (const key in enumDefinition) { if (!isNaN(parseInt(key))) continue; newEnumDefinition[key] = enumDefinition[key]; } enumDefinition = newEnumDefinition; } } return uattr("enum", enumDefinition); }; export const _ref = attrBuilder<UModel>("ref"); export const _defaultValue = <Type>(valueFn?: () => Type) => uattr<string>("default-value", valueFn?.toString()); export const _computedValue = <Type>(valueFn: (model: UModel) => Type) => uattr<string>("computed-value", valueFn?.toString());