@ asterql/schema
npm install @asterql/schema
用于AsterQL数据塑造和代码生成的TypeNode schemas.
这个包裹是故意小的。 它给AsterQL的其余堆叠 可代表实用类型Script-形状JSON的普通JSON类型图, 包括取名参考物的递归和再利用形状.
import {
arrayType,
defineSchema,
objectType,
optionalProp,
refType,
stringType,
} from "@asterql/schema";
const schema = defineSchema({
root: refType("Category"),
definitions: {
Category: objectType({
id: stringType(),
title: stringType(),
parent: optionalProp(refType("Category")),
children: arrayType(refType("Category")),
}),
},
});
型号
type TypeSchema = {
root: TypeNode;
definitions: Record<string, TypeNode>;
};
refType("Name") 点数 definitions.Name。从不扩大参考资料
在正常化期间,这保持了递归图的有限性和决定性.
API 密码
defineSchema(input): 使一个计划正常化, 并验证所有应答被定义 .normalizeTypeNode(node): 将 TypeNode 规范化 .serializeTypeNode(node):稳定JSON字符串用于TypeNode.serializeSchema(schema):稳定的JSON弦用于一个计划.collectRefs(node): 从 TypeNode 中收集命名的 refs .- 构建器 :
unknownType, (中文(简体) ),neverType, (中文(简体) ),nullType, (中文(简体) ),booleanType, (中文(简体) ),numberType, (中文(简体) ),stringType, (中文(简体) ),literalType, (中文(简体) ),arrayType, (中文(简体) ),objectType, (中文(简体) ),prop, (中文(简体) ),optionalProp, (中文(简体) ),unionType, (中文(简体) ),intersectionType, (中文(简体) ),recordType, (中文(简体) ),tupleType, (中文(简体) ),refType,以及nullableType。 。 。 .
为什么叫裁判?
AsterQL代码需要保存形状特性. 如果两个字段指向 同样的命名类型,代码应该知道。 如果类型指向本身, 代码 绝不能永远扩张。 被命名的裁判员将案件简单明了.