UNPKG

@baqhub/sdk

Version:

The official JavaScript SDK for the BAQ federated app platform.

97 lines (96 loc) 4.06 kB
import * as IO from "../../helpers/io.js"; import { AnyRecordLink } from "../links/recordLink.js"; // // Runtime model. // const RObjectSchema = IO.recursion("ObjectSchema", () => IO.dualObject({ type: IO.literal("object"), properties: IO.record(IO.string, IO.intersection([ IO.partialObject({ optional: IO.boolean, removed: IO.boolean, }), RSchema, ])), }, { strict: IO.boolean })); const RArraySchema = IO.recursion("ArraySchema", () => IO.dualObject({ type: IO.literal("array"), items: RSchema, }, { minItems: IO.number, maxItems: IO.number, distinctItems: IO.boolean, })); const RRefSchema = IO.recursion("RefSchema", () => IO.object({ type: IO.literal("ref"), ref: IO.string })); const RRefNameSchema = IO.recursion("RefNameSchema", () => IO.object({ type: IO.literal("ref_name") })); const RSelfSchema = IO.recursion("SelfSchema", () => IO.object({ type: IO.literal("self") })); const RSchemaSchema = IO.recursion("SchemaSchema", () => IO.object({ type: IO.literal("schema") })); const RNeverSchema = IO.recursion("NeverSchema", () => IO.object({ type: IO.literal("never") })); const RUnionSchema = IO.recursion("UnionSchema", () => IO.dualObject({ type: IO.literal("union"), schemas: IO.readonlyArray(RSchema) }, { strict: IO.boolean })); const RIntersectionSchema = IO.recursion("IntersectionSchema", () => IO.object({ type: IO.literal("intersection"), schemas: IO.readonlyArray(RSchema), })); const RMapSchema = IO.recursion("MapSchema", () => IO.object({ type: IO.literal("map"), values: RSchema })); const RBooleanSchema = IO.recursion("BooleanSchema", () => IO.dualObject({ type: IO.literal("boolean") }, { enum: IO.readonlyArray(IO.boolean) })); const RStringSchema = IO.recursion("StringSchema", () => IO.dualObject({ type: IO.literal("string") }, { enum: IO.readonlyArray(IO.string), minLength: IO.number, maxLength: IO.number, })); const RIntSchema = IO.recursion("IntSchema", () => IO.dualObject({ type: IO.literal("int") }, { enum: IO.readonlyArray(IO.number), min: IO.number, max: IO.number, })); const RNumberSchema = IO.recursion("NumberSchema", () => IO.dualObject({ type: IO.literal("number") }, { enum: IO.readonlyArray(IO.number), min: IO.number, max: IO.number, })); const RTagLinkSchema = IO.recursion("TagLink", () => IO.dualObject({ type: IO.literal("tag_link") }, { enum: IO.readonlyArray(IO.string), sortProperty: IO.boolean, minLength: IO.number, maxLength: IO.number, })); const RBlobLinkSchema = IO.recursion("BlobLink", () => IO.dualObject({ type: IO.literal("blob_link") }, { maxSize: IO.number, contentTypes: IO.readonlyArray(IO.string) })); const RPermissionType = IO.union([ IO.literal("read"), IO.literal("write"), IO.literal("notify"), ]); const REntityLinkSchema = IO.recursion("EntityLink", () => IO.dualObject({ type: IO.literal("entity_link") }, { minPermissions: IO.readonlyArray(RPermissionType) })); const RRecordLinkSchema = IO.recursion("RecordLink", () => IO.dualObject({ type: IO.literal("record_link") }, { existential: IO.boolean, recordTypes: IO.readonlyArray(AnyRecordLink.io()), })); const RVersionLinkSchema = IO.recursion("VersionLink", () => IO.dualObject({ type: IO.literal("version_link") }, { recordTypes: IO.readonlyArray(AnyRecordLink.io()) })); export const RSchema = IO.recursion("Schema", () => IO.intersection([ IO.union([ RObjectSchema, RArraySchema, RRefSchema, RRefNameSchema, RSelfSchema, RSchemaSchema, RNeverSchema, RUnionSchema, RIntersectionSchema, RMapSchema, RBooleanSchema, RStringSchema, RIntSchema, RNumberSchema, RTagLinkSchema, RBlobLinkSchema, REntityLinkSchema, RRecordLinkSchema, RVersionLinkSchema, ]), IO.partialObject({ definitions: IO.record(IO.string, RSchema), default: IO.unknown, description: IO.string, }), ]));