@baqhub/sdk
Version:
The official JavaScript SDK for the BAQ federated app platform.
101 lines (100 loc) • 4.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RSchema = void 0;
const tslib_1 = require("tslib");
const IO = tslib_1.__importStar(require("../../helpers/io.js"));
const recordLink_js_1 = require("../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,
}),
exports.RSchema,
])),
}, { strict: IO.boolean }));
const RArraySchema = IO.recursion("ArraySchema", () => IO.dualObject({
type: IO.literal("array"),
items: exports.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(exports.RSchema) }, { strict: IO.boolean }));
const RIntersectionSchema = IO.recursion("IntersectionSchema", () => IO.object({
type: IO.literal("intersection"),
schemas: IO.readonlyArray(exports.RSchema),
}));
const RMapSchema = IO.recursion("MapSchema", () => IO.object({ type: IO.literal("map"), values: exports.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(recordLink_js_1.AnyRecordLink.io()),
}));
const RVersionLinkSchema = IO.recursion("VersionLink", () => IO.dualObject({ type: IO.literal("version_link") }, { recordTypes: IO.readonlyArray(recordLink_js_1.AnyRecordLink.io()) }));
exports.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, exports.RSchema),
default: IO.unknown,
description: IO.string,
}),
]));