@compas/code-gen
Version:
Generate various boring parts of your server
1,451 lines (1,415 loc) • 488 kB
JavaScript
// Generated by @compas/code-gen
/**
* @template T, E
* @typedef {{ value: T, error?: never}|{ value?: never, error: E }} Either
*/
/**
* @typedef {Record<string, any|undefined>} ValidatorErrorMap
*/
const isRecord = (v) => !!v && typeof v === "object" && !Array.isArray(v);
/**
* @param {import("../common/types.js").StructureAnyDefinitionInput|any} value
* @returns {Either<import("../common/types.js").StructureAnyDefinition, ValidatorErrorMap>}
*/
export function validateStructureAnyDefinition(value) {
/** @type {ValidatorErrorMap} */
const errorMap = {};
/** @type {any} */
let result = undefined;
if (value === null || value === undefined) {
errorMap[`$`] = {
key: "validator.undefined",
};
} else {
if (!isRecord(value)) {
errorMap[`$`] = {
key: "validator.object",
value: value,
foundType: typeof value,
};
} else {
result = {
type: undefined,
group: undefined,
name: undefined,
docString: undefined,
isOptional: undefined,
defaultValue: undefined,
sql: undefined,
validator: undefined,
targets: undefined,
};
if (value["type"] === null || value["type"] === undefined) {
errorMap[`$.type`] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString1 = value["type"];
if (typeof convertedString1 !== "string") {
errorMap[`$.type`] = {
key: "validator.string",
};
} else {
if (convertedString1.length < 1) {
errorMap[`$.type`] = {
key: "validator.length",
minLength: 1,
};
} else if (convertedString1 !== "any") {
errorMap[`$.type`] = {
key: "validator.oneOf",
allowedValues: ["any"],
foundValue: convertedString1,
};
} else {
result["type"] = convertedString1;
}
}
}
if (value["group"] === null || value["group"] === undefined) {
result["group"] = undefined;
} else {
/** @type {string} */
const convertedString2 = value["group"];
if (typeof convertedString2 !== "string") {
errorMap[`$.group`] = {
key: "validator.string",
};
} else {
if (convertedString2.length === 0) {
result["group"] = undefined;
} else {
if (convertedString2.length < 1) {
errorMap[`$.group`] = {
key: "validator.length",
minLength: 1,
};
} else {
result["group"] = convertedString2;
}
}
}
}
if (value["name"] === null || value["name"] === undefined) {
result["name"] = undefined;
} else {
/** @type {string} */
const convertedString3 = value["name"];
if (typeof convertedString3 !== "string") {
errorMap[`$.name`] = {
key: "validator.string",
};
} else {
if (convertedString3.length === 0) {
result["name"] = undefined;
} else {
if (convertedString3.length < 1) {
errorMap[`$.name`] = {
key: "validator.length",
minLength: 1,
};
} else {
result["name"] = convertedString3;
}
}
}
}
if (value["docString"] === null || value["docString"] === undefined) {
result["docString"] = "";
} else {
/** @type {string} */
const convertedString4 = value["docString"];
if (typeof convertedString4 !== "string") {
errorMap[`$.docString`] = {
key: "validator.string",
};
} else {
if (convertedString4.length === 0) {
result["docString"] = "";
} else {
{
result["docString"] = convertedString4;
}
}
}
}
if (value["isOptional"] === null || value["isOptional"] === undefined) {
result["isOptional"] = false;
} else {
if (
value["isOptional"] === true ||
value["isOptional"] === "true" ||
value["isOptional"] === 1 ||
value["isOptional"] === "1"
) {
result["isOptional"] = true;
} else if (
value["isOptional"] === false ||
value["isOptional"] === "false" ||
value["isOptional"] === 0 ||
value["isOptional"] === "0"
) {
result["isOptional"] = false;
} else {
errorMap[`$.isOptional`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["defaultValue"] === null ||
value["defaultValue"] === undefined
) {
result["defaultValue"] = undefined;
} else {
let hasAnyOfMatch6 = false;
errorMap[`$.defaultValue`] = {
key: "validator.anyOf",
errors: [],
};
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString8 = intermediateValue8;
if (typeof convertedString8 !== "string") {
intermediateErrorMap8[`$`] = {
key: "validator.string",
};
} else {
if (convertedString8.length < 1) {
intermediateErrorMap8[`$`] = {
key: "validator.length",
minLength: 1,
};
} else {
intermediateResult8 = convertedString8;
}
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
if (
intermediateValue8 === true ||
intermediateValue8 === "true" ||
intermediateValue8 === 1 ||
intermediateValue8 === "1"
) {
intermediateResult8 = true;
} else if (
intermediateValue8 === false ||
intermediateValue8 === "false" ||
intermediateValue8 === 0 ||
intermediateValue8 === "0"
) {
intermediateResult8 = false;
} else {
intermediateErrorMap8[`$`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
let convertedNumber8 = intermediateValue8;
if (
typeof convertedNumber8 !== "number" &&
typeof convertedNumber8 === "string"
) {
convertedNumber8 = Number(convertedNumber8);
}
if (
typeof convertedNumber8 !== "number" ||
isNaN(convertedNumber8) ||
!isFinite(convertedNumber8) ||
!Number.isInteger(convertedNumber8)
) {
intermediateErrorMap8[`$`] = {
key: "validator.number",
subType: "int",
};
} else if (convertedNumber8 < -9007199254740991) {
intermediateErrorMap8[`$`] = {
key: "validator.range",
minValue: -9007199254740991,
};
} else if (convertedNumber8 > 9007199254740991) {
intermediateErrorMap8[`$`] = {
key: "validator.range",
maxValue: 9007199254740991,
};
} else {
intermediateResult8 = convertedNumber8;
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
}
if (value["sql"] === null || value["sql"] === undefined) {
result["sql"] = {};
} else {
if (!isRecord(value["sql"])) {
errorMap[`$.sql`] = {
key: "validator.object",
value: value["sql"],
foundType: typeof value["sql"],
};
} else {
result["sql"] = {
primary: undefined,
searchable: undefined,
hasDefaultValue: undefined,
};
if (
value["sql"]["primary"] === null ||
value["sql"]["primary"] === undefined
) {
result["sql"]["primary"] = undefined;
} else {
if (
value["sql"]["primary"] === true ||
value["sql"]["primary"] === "true" ||
value["sql"]["primary"] === 1 ||
value["sql"]["primary"] === "1"
) {
result["sql"]["primary"] = true;
} else if (
value["sql"]["primary"] === false ||
value["sql"]["primary"] === "false" ||
value["sql"]["primary"] === 0 ||
value["sql"]["primary"] === "0"
) {
result["sql"]["primary"] = false;
} else {
errorMap[`$.sql.primary`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["sql"]["searchable"] === null ||
value["sql"]["searchable"] === undefined
) {
result["sql"]["searchable"] = undefined;
} else {
if (
value["sql"]["searchable"] === true ||
value["sql"]["searchable"] === "true" ||
value["sql"]["searchable"] === 1 ||
value["sql"]["searchable"] === "1"
) {
result["sql"]["searchable"] = true;
} else if (
value["sql"]["searchable"] === false ||
value["sql"]["searchable"] === "false" ||
value["sql"]["searchable"] === 0 ||
value["sql"]["searchable"] === "0"
) {
result["sql"]["searchable"] = false;
} else {
errorMap[`$.sql.searchable`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["sql"]["hasDefaultValue"] === null ||
value["sql"]["hasDefaultValue"] === undefined
) {
result["sql"]["hasDefaultValue"] = undefined;
} else {
if (
value["sql"]["hasDefaultValue"] === true ||
value["sql"]["hasDefaultValue"] === "true" ||
value["sql"]["hasDefaultValue"] === 1 ||
value["sql"]["hasDefaultValue"] === "1"
) {
result["sql"]["hasDefaultValue"] = true;
} else if (
value["sql"]["hasDefaultValue"] === false ||
value["sql"]["hasDefaultValue"] === "false" ||
value["sql"]["hasDefaultValue"] === 0 ||
value["sql"]["hasDefaultValue"] === "0"
) {
result["sql"]["hasDefaultValue"] = false;
} else {
errorMap[`$.sql.hasDefaultValue`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
}
}
if (value["validator"] === null || value["validator"] === undefined) {
errorMap[`$.validator`] = {
key: "validator.undefined",
};
} else {
if (!isRecord(value["validator"])) {
errorMap[`$.validator`] = {
key: "validator.object",
value: value["validator"],
foundType: typeof value["validator"],
};
} else {
result["validator"] = { allowNull: undefined };
if (
value["validator"]["allowNull"] === null ||
value["validator"]["allowNull"] === undefined
) {
errorMap[`$.validator.allowNull`] = {
key: "validator.undefined",
};
} else {
if (
value["validator"]["allowNull"] === true ||
value["validator"]["allowNull"] === "true" ||
value["validator"]["allowNull"] === 1 ||
value["validator"]["allowNull"] === "1"
) {
result["validator"]["allowNull"] = true;
} else if (
value["validator"]["allowNull"] === false ||
value["validator"]["allowNull"] === "false" ||
value["validator"]["allowNull"] === 0 ||
value["validator"]["allowNull"] === "0"
) {
result["validator"]["allowNull"] = false;
} else {
errorMap[`$.validator.allowNull`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
}
}
if (value["targets"] === null || value["targets"] === undefined) {
result["targets"] = undefined;
} else {
if (!isRecord(value["targets"])) {
errorMap[`$.targets`] = {
key: "validator.generic",
};
} else {
result["targets"] = {};
for (const genericKeyInput9 of Object.keys(value["targets"])) {
/** @type {any} */
let genericKeyResult10 = undefined;
/** @type {ValidatorErrorMap} */
const genericKeyErrorMap11 = {};
if (genericKeyInput9 === null || genericKeyInput9 === undefined) {
genericKeyErrorMap11[`$`] = {
key: "validator.undefined",
};
} else {
const refResult12 =
validateStructureAnyDefinitionTarget(genericKeyInput9);
if (refResult12.error) {
for (const errorKey of Object.keys(refResult12.error)) {
genericKeyErrorMap11[`$${errorKey.substring(1)}`] =
refResult12.error[errorKey];
}
}
genericKeyResult10 = refResult12.value;
}
if (Object.keys(genericKeyErrorMap11).length !== 0) {
if (errorMap[`$.targets`]) {
errorMap[`$.targets`].inputs.push({
key: genericKeyInput9,
errors: genericKeyErrorMap11,
});
} else {
errorMap[`$.targets`] = {
key: "validator.generic",
inputs: [
{ key: genericKeyInput9, errors: genericKeyErrorMap11 },
],
};
}
} else {
if (
value["targets"][genericKeyResult10] === null ||
value["targets"][genericKeyResult10] === undefined
) {
errorMap[`$.targets.${genericKeyResult10}`] = {
key: "validator.undefined",
};
} else {
if (!isRecord(value["targets"][genericKeyResult10])) {
errorMap[`$.targets.${genericKeyResult10}`] = {
key: "validator.object",
value: value["targets"][genericKeyResult10],
foundType: typeof value["targets"][genericKeyResult10],
};
} else {
/** @type {Set<string>} */
const knownKeys12 = new Set([
"validatorInputType",
"validatorOutputType",
"validatorExpression",
"validatorImport",
]);
for (const key of Object.keys(
value["targets"][genericKeyResult10],
)) {
if (
!knownKeys12.has(key) &&
value["targets"][genericKeyResult10][key] !== null &&
value["targets"][genericKeyResult10][key] !== undefined
) {
const expectedKeys = [...knownKeys12];
const foundKeys = Object.keys(
value["targets"][genericKeyResult10],
);
const unknownKeys = foundKeys.filter(
(it) => !knownKeys12.has(it),
);
errorMap[`$.targets.${genericKeyResult10}`] = {
key: "validator.keys",
unknownKeys,
expectedKeys,
foundKeys,
};
break;
}
}
result["targets"][genericKeyResult10] = {
validatorInputType: undefined,
validatorOutputType: undefined,
validatorExpression: undefined,
validatorImport: undefined,
};
if (
value["targets"][genericKeyResult10][
"validatorInputType"
] === null ||
value["targets"][genericKeyResult10][
"validatorInputType"
] === undefined
) {
errorMap[
`$.targets.${genericKeyResult10}.validatorInputType`
] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString13 =
value["targets"][genericKeyResult10][
"validatorInputType"
];
if (typeof convertedString13 !== "string") {
errorMap[
`$.targets.${genericKeyResult10}.validatorInputType`
] = {
key: "validator.string",
};
} else {
if (convertedString13.length < 1) {
errorMap[
`$.targets.${genericKeyResult10}.validatorInputType`
] = {
key: "validator.length",
minLength: 1,
};
} else {
result["targets"][genericKeyResult10][
"validatorInputType"
] = convertedString13;
}
}
}
if (
value["targets"][genericKeyResult10][
"validatorOutputType"
] === null ||
value["targets"][genericKeyResult10][
"validatorOutputType"
] === undefined
) {
errorMap[
`$.targets.${genericKeyResult10}.validatorOutputType`
] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString14 =
value["targets"][genericKeyResult10][
"validatorOutputType"
];
if (typeof convertedString14 !== "string") {
errorMap[
`$.targets.${genericKeyResult10}.validatorOutputType`
] = {
key: "validator.string",
};
} else {
if (convertedString14.length < 1) {
errorMap[
`$.targets.${genericKeyResult10}.validatorOutputType`
] = {
key: "validator.length",
minLength: 1,
};
} else {
result["targets"][genericKeyResult10][
"validatorOutputType"
] = convertedString14;
}
}
}
if (
value["targets"][genericKeyResult10][
"validatorExpression"
] === null ||
value["targets"][genericKeyResult10][
"validatorExpression"
] === undefined
) {
result["targets"][genericKeyResult10][
"validatorExpression"
] = undefined;
} else {
/** @type {string} */
const convertedString15 =
value["targets"][genericKeyResult10][
"validatorExpression"
];
if (typeof convertedString15 !== "string") {
errorMap[
`$.targets.${genericKeyResult10}.validatorExpression`
] = {
key: "validator.string",
};
} else {
if (convertedString15.length === 0) {
result["targets"][genericKeyResult10][
"validatorExpression"
] = undefined;
} else {
if (convertedString15.length < 1) {
errorMap[
`$.targets.${genericKeyResult10}.validatorExpression`
] = {
key: "validator.length",
minLength: 1,
};
} else {
result["targets"][genericKeyResult10][
"validatorExpression"
] = convertedString15;
}
}
}
}
if (
value["targets"][genericKeyResult10]["validatorImport"] ===
null ||
value["targets"][genericKeyResult10]["validatorImport"] ===
undefined
) {
result["targets"][genericKeyResult10]["validatorImport"] =
undefined;
} else {
/** @type {string} */
const convertedString16 =
value["targets"][genericKeyResult10]["validatorImport"];
if (typeof convertedString16 !== "string") {
errorMap[
`$.targets.${genericKeyResult10}.validatorImport`
] = {
key: "validator.string",
};
} else {
if (convertedString16.length === 0) {
result["targets"][genericKeyResult10][
"validatorImport"
] = undefined;
} else {
if (convertedString16.length < 1) {
errorMap[
`$.targets.${genericKeyResult10}.validatorImport`
] = {
key: "validator.length",
minLength: 1,
};
} else {
result["targets"][genericKeyResult10][
"validatorImport"
] = convertedString16;
}
}
}
}
}
}
}
}
}
}
}
}
if (Object.keys(errorMap).length > 0) {
return { error: errorMap };
}
return { value: result };
}
/**
* @param {import("../common/types.js").StructureAnyDefinitionTarget|any} value
* @returns {Either<import("../common/types.js").StructureAnyDefinitionTarget, ValidatorErrorMap>}
*/
export function validateStructureAnyDefinitionTarget(value) {
/** @type {ValidatorErrorMap} */
const errorMap = {};
/** @type {any} */
let result = undefined;
if (value === null || value === undefined) {
errorMap[`$`] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString0 = value;
if (typeof convertedString0 !== "string") {
errorMap[`$`] = {
key: "validator.string",
};
} else {
if (convertedString0.length < 1) {
errorMap[`$`] = {
key: "validator.length",
minLength: 1,
};
} else if (
convertedString0 !== "js" &&
convertedString0 !== "ts" &&
convertedString0 !== "jsKoaReceive" &&
convertedString0 !== "tsKoaReceive" &&
convertedString0 !== "jsKoaSend" &&
convertedString0 !== "tsKoaSend" &&
convertedString0 !== "jsPostgres" &&
convertedString0 !== "tsPostgres" &&
convertedString0 !== "jsAxios" &&
convertedString0 !== "tsAxios" &&
convertedString0 !== "jsAxiosNode" &&
convertedString0 !== "tsAxiosBrowser" &&
convertedString0 !== "tsAxiosReactNative" &&
convertedString0 !== "jsFetch" &&
convertedString0 !== "tsFetch" &&
convertedString0 !== "jsFetchNode" &&
convertedString0 !== "tsFetchBrowser" &&
convertedString0 !== "tsFetchReactNative"
) {
errorMap[`$`] = {
key: "validator.oneOf",
allowedValues: [
"js",
"ts",
"jsKoaReceive",
"tsKoaReceive",
"jsKoaSend",
"tsKoaSend",
"jsPostgres",
"tsPostgres",
"jsAxios",
"tsAxios",
"jsAxiosNode",
"tsAxiosBrowser",
"tsAxiosReactNative",
"jsFetch",
"tsFetch",
"jsFetchNode",
"tsFetchBrowser",
"tsFetchReactNative",
],
foundValue: convertedString0,
};
} else {
result = convertedString0;
}
}
}
if (Object.keys(errorMap).length > 0) {
return { error: errorMap };
}
return { value: result };
}
/**
* @param {import("../common/types.js").StructureAnyOfDefinitionInput|any} value
* @returns {Either<import("../common/types.js").StructureAnyOfDefinition, ValidatorErrorMap>}
*/
export function validateStructureAnyOfDefinition(value) {
/** @type {ValidatorErrorMap} */
const errorMap = {};
/** @type {any} */
let result = undefined;
if (value === null || value === undefined) {
errorMap[`$`] = {
key: "validator.undefined",
};
} else {
if (!isRecord(value)) {
errorMap[`$`] = {
key: "validator.object",
value: value,
foundType: typeof value,
};
} else {
result = {
type: undefined,
group: undefined,
name: undefined,
docString: undefined,
isOptional: undefined,
defaultValue: undefined,
sql: undefined,
validator: undefined,
values: undefined,
};
if (value["type"] === null || value["type"] === undefined) {
errorMap[`$.type`] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString1 = value["type"];
if (typeof convertedString1 !== "string") {
errorMap[`$.type`] = {
key: "validator.string",
};
} else {
if (convertedString1.length < 1) {
errorMap[`$.type`] = {
key: "validator.length",
minLength: 1,
};
} else if (convertedString1 !== "anyOf") {
errorMap[`$.type`] = {
key: "validator.oneOf",
allowedValues: ["anyOf"],
foundValue: convertedString1,
};
} else {
result["type"] = convertedString1;
}
}
}
if (value["group"] === null || value["group"] === undefined) {
result["group"] = undefined;
} else {
/** @type {string} */
const convertedString2 = value["group"];
if (typeof convertedString2 !== "string") {
errorMap[`$.group`] = {
key: "validator.string",
};
} else {
if (convertedString2.length === 0) {
result["group"] = undefined;
} else {
if (convertedString2.length < 1) {
errorMap[`$.group`] = {
key: "validator.length",
minLength: 1,
};
} else {
result["group"] = convertedString2;
}
}
}
}
if (value["name"] === null || value["name"] === undefined) {
result["name"] = undefined;
} else {
/** @type {string} */
const convertedString3 = value["name"];
if (typeof convertedString3 !== "string") {
errorMap[`$.name`] = {
key: "validator.string",
};
} else {
if (convertedString3.length === 0) {
result["name"] = undefined;
} else {
if (convertedString3.length < 1) {
errorMap[`$.name`] = {
key: "validator.length",
minLength: 1,
};
} else {
result["name"] = convertedString3;
}
}
}
}
if (value["docString"] === null || value["docString"] === undefined) {
result["docString"] = "";
} else {
/** @type {string} */
const convertedString4 = value["docString"];
if (typeof convertedString4 !== "string") {
errorMap[`$.docString`] = {
key: "validator.string",
};
} else {
if (convertedString4.length === 0) {
result["docString"] = "";
} else {
{
result["docString"] = convertedString4;
}
}
}
}
if (value["isOptional"] === null || value["isOptional"] === undefined) {
result["isOptional"] = false;
} else {
if (
value["isOptional"] === true ||
value["isOptional"] === "true" ||
value["isOptional"] === 1 ||
value["isOptional"] === "1"
) {
result["isOptional"] = true;
} else if (
value["isOptional"] === false ||
value["isOptional"] === "false" ||
value["isOptional"] === 0 ||
value["isOptional"] === "0"
) {
result["isOptional"] = false;
} else {
errorMap[`$.isOptional`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["defaultValue"] === null ||
value["defaultValue"] === undefined
) {
result["defaultValue"] = undefined;
} else {
let hasAnyOfMatch6 = false;
errorMap[`$.defaultValue`] = {
key: "validator.anyOf",
errors: [],
};
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
/** @type {string} */
const convertedString8 = intermediateValue8;
if (typeof convertedString8 !== "string") {
intermediateErrorMap8[`$`] = {
key: "validator.string",
};
} else {
if (convertedString8.length < 1) {
intermediateErrorMap8[`$`] = {
key: "validator.length",
minLength: 1,
};
} else {
intermediateResult8 = convertedString8;
}
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
if (
intermediateValue8 === true ||
intermediateValue8 === "true" ||
intermediateValue8 === 1 ||
intermediateValue8 === "1"
) {
intermediateResult8 = true;
} else if (
intermediateValue8 === false ||
intermediateValue8 === "false" ||
intermediateValue8 === 0 ||
intermediateValue8 === "0"
) {
intermediateResult8 = false;
} else {
intermediateErrorMap8[`$`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
if (!hasAnyOfMatch6) {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap8 = {};
/** @type {any} */
let intermediateResult8 = undefined;
/** @type {any} */
const intermediateValue8 = value["defaultValue"];
if (intermediateValue8 === null || intermediateValue8 === undefined) {
intermediateErrorMap8[`$`] = {
key: "validator.undefined",
};
} else {
let convertedNumber8 = intermediateValue8;
if (
typeof convertedNumber8 !== "number" &&
typeof convertedNumber8 === "string"
) {
convertedNumber8 = Number(convertedNumber8);
}
if (
typeof convertedNumber8 !== "number" ||
isNaN(convertedNumber8) ||
!isFinite(convertedNumber8) ||
!Number.isInteger(convertedNumber8)
) {
intermediateErrorMap8[`$`] = {
key: "validator.number",
subType: "int",
};
} else if (convertedNumber8 < -9007199254740991) {
intermediateErrorMap8[`$`] = {
key: "validator.range",
minValue: -9007199254740991,
};
} else if (convertedNumber8 > 9007199254740991) {
intermediateErrorMap8[`$`] = {
key: "validator.range",
maxValue: 9007199254740991,
};
} else {
intermediateResult8 = convertedNumber8;
}
}
if (Object.keys(intermediateErrorMap8).length > 0) {
errorMap[`$.defaultValue`].errors.push(intermediateErrorMap8);
} else {
hasAnyOfMatch6 = true;
delete errorMap[`$.defaultValue`];
result["defaultValue"] = intermediateResult8;
}
}
}
if (value["sql"] === null || value["sql"] === undefined) {
result["sql"] = {};
} else {
if (!isRecord(value["sql"])) {
errorMap[`$.sql`] = {
key: "validator.object",
value: value["sql"],
foundType: typeof value["sql"],
};
} else {
result["sql"] = {
primary: undefined,
searchable: undefined,
hasDefaultValue: undefined,
};
if (
value["sql"]["primary"] === null ||
value["sql"]["primary"] === undefined
) {
result["sql"]["primary"] = undefined;
} else {
if (
value["sql"]["primary"] === true ||
value["sql"]["primary"] === "true" ||
value["sql"]["primary"] === 1 ||
value["sql"]["primary"] === "1"
) {
result["sql"]["primary"] = true;
} else if (
value["sql"]["primary"] === false ||
value["sql"]["primary"] === "false" ||
value["sql"]["primary"] === 0 ||
value["sql"]["primary"] === "0"
) {
result["sql"]["primary"] = false;
} else {
errorMap[`$.sql.primary`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["sql"]["searchable"] === null ||
value["sql"]["searchable"] === undefined
) {
result["sql"]["searchable"] = undefined;
} else {
if (
value["sql"]["searchable"] === true ||
value["sql"]["searchable"] === "true" ||
value["sql"]["searchable"] === 1 ||
value["sql"]["searchable"] === "1"
) {
result["sql"]["searchable"] = true;
} else if (
value["sql"]["searchable"] === false ||
value["sql"]["searchable"] === "false" ||
value["sql"]["searchable"] === 0 ||
value["sql"]["searchable"] === "0"
) {
result["sql"]["searchable"] = false;
} else {
errorMap[`$.sql.searchable`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
if (
value["sql"]["hasDefaultValue"] === null ||
value["sql"]["hasDefaultValue"] === undefined
) {
result["sql"]["hasDefaultValue"] = undefined;
} else {
if (
value["sql"]["hasDefaultValue"] === true ||
value["sql"]["hasDefaultValue"] === "true" ||
value["sql"]["hasDefaultValue"] === 1 ||
value["sql"]["hasDefaultValue"] === "1"
) {
result["sql"]["hasDefaultValue"] = true;
} else if (
value["sql"]["hasDefaultValue"] === false ||
value["sql"]["hasDefaultValue"] === "false" ||
value["sql"]["hasDefaultValue"] === 0 ||
value["sql"]["hasDefaultValue"] === "0"
) {
result["sql"]["hasDefaultValue"] = false;
} else {
errorMap[`$.sql.hasDefaultValue`] = {
key: "validator.type",
expectedType: "boolean",
};
}
}
}
}
if (value["validator"] === null || value["validator"] === undefined) {
result["validator"] = {};
} else {
if (!isRecord(value["validator"])) {
errorMap[`$.validator`] = {
key: "validator.object",
value: value["validator"],
foundType: typeof value["validator"],
};
} else {
result["validator"] = { discriminant: undefined };
if (
value["validator"]["discriminant"] === null ||
value["validator"]["discriminant"] === undefined
) {
result["validator"]["discriminant"] = undefined;
} else {
/** @type {string} */
const convertedString9 = value["validator"]["discriminant"];
if (typeof convertedString9 !== "string") {
errorMap[`$.validator.discriminant`] = {
key: "validator.string",
};
} else {
if (convertedString9.length === 0) {
result["validator"]["discriminant"] = undefined;
} else {
if (convertedString9.length < 1) {
errorMap[`$.validator.discriminant`] = {
key: "validator.length",
minLength: 1,
};
} else {
result["validator"]["discriminant"] = convertedString9;
}
}
}
}
}
}
if (value["values"] === null || value["values"] === undefined) {
errorMap[`$.values`] = {
key: "validator.undefined",
};
} else {
/** @type {ValidatorErrorMap} */
const intermediateErrorMap10 = {};
/** @type {Array<any>} */
const intermediateResult10 = [];
/** @type {any | Array<any>} */
const intermediateValue10 = value["values"];
if (!Array.isArray(intermediateValue10)) {
errorMap[`$.values`] = {
key: "validator.array",
value: intermediateValue10,
};
} else {
if (intermediateValue10.length < 1) {
errorMap[`$.values`] = {
key: "validator.length",
minLength: 1,
foundLength: intermediateValue10.length,
};
}
result["values"] = [];
for (let i10 = 0; i10 < intermediateValue10.length; ++i10) {
if (
intermediateValue10[i10] === null ||
intermediateValue10[i10] === undefined
) {
intermediateErrorMap10[`$.${i10}`] = {
key: "validator.undefined",
};
} else {
const refResult10 = validateStructureTypeSystemDefinition(
intermediateValue10[i10],
);
if (refResult10.error) {
for (const errorKey of Object.keys(refResult10.error)) {
intermediateErrorMap10[`$.${i10}${errorKey.substring(1)}`] =
refResult10.error[errorKey];
}
}
intermediateResult10[i10] = refResult10.value;
}
}
}
if (Object.keys(intermediateErrorMap10).length) {
for (const errorKey of Object.keys(intermediateErrorMap10)) {
errorMap[`$.values${errorKey.substring(1)}`] =
intermediateErrorMap10[errorKey];
}
} else {
result["values"] = intermediateResult10;
}
}
}
}
if (Object.keys(errorMap).length > 0) {
return { error: errorMap };
}
return { value: result };
}
/**
* All type definitions that can be used inside other types, like object keys.
*
* @param {import("../common/types.js").StructureTypeSystemDefinitionInput|any} value
* @returns {Either<import("../common/types.js").StructureTypeSystemDefinition, ValidatorErrorMap>}
*/
export function validateStructureTypeSystemDefinition(value) {
/** @type {ValidatorErrorMap} */
const errorMap = {};
/** @type {any} */
let result = undefined;
if (value === null || value === undefined) {
errorMap[`$`] = {
key: "validator.undefined",
};
} else {
if (!isRecord(value)) {
errorMap[`$`] = {
key: "validator.object",
value: value,
foundType: typeof value,
};
} else {
if (
typeof value === "object" &&
"type" in value &&
value.type === "any"
) {
const refResult0 = validateStructureAnyDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "anyOf"
) {
const refResult0 = validateStructureAnyOfDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "array"
) {
const refResult0 = validateStructureArrayDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "boolean"
) {
const refResult0 = validateStructureBooleanDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "crud"
) {
const refResult0 = validateStructureCrudDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "date"
) {
const refResult0 = validateStructureDateDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "extend"
) {
const refResult0 = validateStructureExtendDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "file"
) {
const refResult0 = validateStructureFileDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.error)) {
errorMap[`$${errorKey.substring(1)}`] = refResult0.error[errorKey];
}
}
result = refResult0.value;
} else if (
typeof value === "object" &&
"type" in value &&
value.type === "generic"
) {
const refResult0 = validateStructureGenericDefinition(value);
if (refResult0.error) {
for (const errorKey of Object.keys(refResult0.