UNPKG

@compas/cli

Version:

CLI containing utilities and simple script runner

1,449 lines (1,419 loc) 52.1 kB
// 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").CliCommandDefinitionInput|any} value * @returns {Either<import("../common/types.js").CliCommandDefinition, ValidatorErrorMap>} */ export function validateCliCommandDefinition(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 { /** @type {Set<string>} */ const knownKeys0 = new Set([ "name", "shortDescription", "longDescription", "modifiers", "dynamicValue", "watchSettings", "subCommands", "flags", "executor", ]); for (const key of Object.keys(value)) { if ( !knownKeys0.has(key) && value[key] !== null && value[key] !== undefined ) { const expectedKeys = [...knownKeys0]; const foundKeys = Object.keys(value); const unknownKeys = foundKeys.filter((it) => !knownKeys0.has(it)); errorMap[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result = { name: undefined, shortDescription: undefined, longDescription: undefined, modifiers: undefined, dynamicValue: undefined, watchSettings: undefined, subCommands: undefined, flags: undefined, executor: undefined, }; if (value["name"] === null || value["name"] === undefined) { errorMap[`$.name`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString1 = value["name"]; if (typeof convertedString1 !== "string") { errorMap[`$.name`] = { key: "validator.string", }; } else { if (convertedString1.length < 1) { errorMap[`$.name`] = { key: "validator.length", minLength: 1, }; } else if (!/^[a-z-]+$/g.test(convertedString1)) { errorMap[`$.name`] = { key: "validator.pattern", }; } else { result["name"] = convertedString1; } } } if ( value["shortDescription"] === null || value["shortDescription"] === undefined ) { errorMap[`$.shortDescription`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString2 = value["shortDescription"]; if (typeof convertedString2 !== "string") { errorMap[`$.shortDescription`] = { key: "validator.string", }; } else { if (convertedString2.length < 1) { errorMap[`$.shortDescription`] = { key: "validator.length", minLength: 1, }; } else if (!/^[^\n]+$/g.test(convertedString2)) { errorMap[`$.shortDescription`] = { key: "validator.pattern", }; } else { result["shortDescription"] = convertedString2; } } } if ( value["longDescription"] === null || value["longDescription"] === undefined ) { result["longDescription"] = undefined; } else { /** @type {string} */ const convertedString3 = value["longDescription"]; if (typeof convertedString3 !== "string") { errorMap[`$.longDescription`] = { key: "validator.string", }; } else { if (convertedString3.length === 0) { result["longDescription"] = undefined; } else { if (convertedString3.length < 1) { errorMap[`$.longDescription`] = { key: "validator.length", minLength: 1, }; } else { result["longDescription"] = convertedString3; } } } } if (value["modifiers"] === null || value["modifiers"] === undefined) { result["modifiers"] = { isDynamic: false, isCosmetic: false, isWatchable: false, }; } else { if (!isRecord(value["modifiers"])) { errorMap[`$.modifiers`] = { key: "validator.object", value: value["modifiers"], foundType: typeof value["modifiers"], }; } else { /** @type {Set<string>} */ const knownKeys4 = new Set([ "isDynamic", "isCosmetic", "isWatchable", ]); for (const key of Object.keys(value["modifiers"])) { if ( !knownKeys4.has(key) && value["modifiers"][key] !== null && value["modifiers"][key] !== undefined ) { const expectedKeys = [...knownKeys4]; const foundKeys = Object.keys(value["modifiers"]); const unknownKeys = foundKeys.filter((it) => !knownKeys4.has(it)); errorMap[`$.modifiers`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result["modifiers"] = { isDynamic: undefined, isCosmetic: undefined, isWatchable: undefined, }; if ( value["modifiers"]["isDynamic"] === null || value["modifiers"]["isDynamic"] === undefined ) { result["modifiers"]["isDynamic"] = false; } else { if ( value["modifiers"]["isDynamic"] === true || value["modifiers"]["isDynamic"] === "true" || value["modifiers"]["isDynamic"] === 1 || value["modifiers"]["isDynamic"] === "1" ) { result["modifiers"]["isDynamic"] = true; } else if ( value["modifiers"]["isDynamic"] === false || value["modifiers"]["isDynamic"] === "false" || value["modifiers"]["isDynamic"] === 0 || value["modifiers"]["isDynamic"] === "0" ) { result["modifiers"]["isDynamic"] = false; } else { errorMap[`$.modifiers.isDynamic`] = { key: "validator.type", expectedType: "boolean", }; } } if ( value["modifiers"]["isCosmetic"] === null || value["modifiers"]["isCosmetic"] === undefined ) { result["modifiers"]["isCosmetic"] = false; } else { if ( value["modifiers"]["isCosmetic"] === true || value["modifiers"]["isCosmetic"] === "true" || value["modifiers"]["isCosmetic"] === 1 || value["modifiers"]["isCosmetic"] === "1" ) { result["modifiers"]["isCosmetic"] = true; } else if ( value["modifiers"]["isCosmetic"] === false || value["modifiers"]["isCosmetic"] === "false" || value["modifiers"]["isCosmetic"] === 0 || value["modifiers"]["isCosmetic"] === "0" ) { result["modifiers"]["isCosmetic"] = false; } else { errorMap[`$.modifiers.isCosmetic`] = { key: "validator.type", expectedType: "boolean", }; } } if ( value["modifiers"]["isWatchable"] === null || value["modifiers"]["isWatchable"] === undefined ) { result["modifiers"]["isWatchable"] = false; } else { if ( value["modifiers"]["isWatchable"] === true || value["modifiers"]["isWatchable"] === "true" || value["modifiers"]["isWatchable"] === 1 || value["modifiers"]["isWatchable"] === "1" ) { result["modifiers"]["isWatchable"] = true; } else if ( value["modifiers"]["isWatchable"] === false || value["modifiers"]["isWatchable"] === "false" || value["modifiers"]["isWatchable"] === 0 || value["modifiers"]["isWatchable"] === "0" ) { result["modifiers"]["isWatchable"] = false; } else { errorMap[`$.modifiers.isWatchable`] = { key: "validator.type", expectedType: "boolean", }; } } } } if ( value["dynamicValue"] === null || value["dynamicValue"] === undefined ) { result["dynamicValue"] = {}; } else { if (!isRecord(value["dynamicValue"])) { errorMap[`$.dynamicValue`] = { key: "validator.object", value: value["dynamicValue"], foundType: typeof value["dynamicValue"], }; } else { /** @type {Set<string>} */ const knownKeys5 = new Set(["validator", "completions"]); for (const key of Object.keys(value["dynamicValue"])) { if ( !knownKeys5.has(key) && value["dynamicValue"][key] !== null && value["dynamicValue"][key] !== undefined ) { const expectedKeys = [...knownKeys5]; const foundKeys = Object.keys(value["dynamicValue"]); const unknownKeys = foundKeys.filter((it) => !knownKeys5.has(it)); errorMap[`$.dynamicValue`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result["dynamicValue"] = { validator: undefined, completions: undefined, }; if ( value["dynamicValue"]["validator"] === null || value["dynamicValue"]["validator"] === undefined ) { result["dynamicValue"]["validator"] = undefined; } else { if (typeof value["dynamicValue"]["validator"] === "function") { result["dynamicValue"]["validator"] = value["dynamicValue"]["validator"]; } else { errorMap[`$.dynamicValue.validator`] = { key: "validator.any", message: "Custom validator error. See the input type for more information.", }; } } if ( value["dynamicValue"]["completions"] === null || value["dynamicValue"]["completions"] === undefined ) { result["dynamicValue"]["completions"] = undefined; } else { if (typeof value["dynamicValue"]["completions"] === "function") { result["dynamicValue"]["completions"] = value["dynamicValue"]["completions"]; } else { errorMap[`$.dynamicValue.completions`] = { key: "validator.any", message: "Custom validator error. See the input type for more information.", }; } } } } if ( value["watchSettings"] === null || value["watchSettings"] === undefined ) { result["watchSettings"] = { extensions: ["js", "json"], ignorePatterns: [".cache", "coverage", "node_modules"], }; } else { if (!isRecord(value["watchSettings"])) { errorMap[`$.watchSettings`] = { key: "validator.object", value: value["watchSettings"], foundType: typeof value["watchSettings"], }; } else { /** @type {Set<string>} */ const knownKeys6 = new Set(["extensions", "ignorePatterns"]); for (const key of Object.keys(value["watchSettings"])) { if ( !knownKeys6.has(key) && value["watchSettings"][key] !== null && value["watchSettings"][key] !== undefined ) { const expectedKeys = [...knownKeys6]; const foundKeys = Object.keys(value["watchSettings"]); const unknownKeys = foundKeys.filter((it) => !knownKeys6.has(it)); errorMap[`$.watchSettings`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result["watchSettings"] = { extensions: undefined, ignorePatterns: undefined, }; if ( value["watchSettings"]["extensions"] === null || value["watchSettings"]["extensions"] === undefined ) { result["watchSettings"]["extensions"] = ["js", "json"]; } else { /** @type {ValidatorErrorMap} */ const intermediateErrorMap8 = {}; /** @type {Array<any>} */ const intermediateResult8 = []; /** @type {any | Array<any>} */ const intermediateValue8 = value["watchSettings"]["extensions"]; if (!Array.isArray(intermediateValue8)) { errorMap[`$.watchSettings.extensions`] = { key: "validator.array", value: intermediateValue8, }; } else { result["watchSettings"]["extensions"] = []; for (let i8 = 0; i8 < intermediateValue8.length; ++i8) { if ( intermediateValue8[i8] === null || intermediateValue8[i8] === undefined ) { intermediateErrorMap8[`$.${i8}`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString8 = intermediateValue8[i8]; if (typeof convertedString8 !== "string") { intermediateErrorMap8[`$.${i8}`] = { key: "validator.string", }; } else { if (convertedString8.length < 1) { intermediateErrorMap8[`$.${i8}`] = { key: "validator.length", minLength: 1, }; } else { intermediateResult8[i8] = convertedString8; } } } } } if (Object.keys(intermediateErrorMap8).length) { for (const errorKey of Object.keys(intermediateErrorMap8)) { errorMap[`$.watchSettings.extensions${errorKey.substring(1)}`] = intermediateErrorMap8[errorKey]; } } else { result["watchSettings"]["extensions"] = intermediateResult8; } } if ( value["watchSettings"]["ignorePatterns"] === null || value["watchSettings"]["ignorePatterns"] === undefined ) { result["watchSettings"]["ignorePatterns"] = [ ".cache", "coverage", "node_modules", ]; } else { /** @type {ValidatorErrorMap} */ const intermediateErrorMap9 = {}; /** @type {Array<any>} */ const intermediateResult9 = []; /** @type {any | Array<any>} */ const intermediateValue9 = value["watchSettings"]["ignorePatterns"]; if (!Array.isArray(intermediateValue9)) { errorMap[`$.watchSettings.ignorePatterns`] = { key: "validator.array", value: intermediateValue9, }; } else { result["watchSettings"]["ignorePatterns"] = []; for (let i9 = 0; i9 < intermediateValue9.length; ++i9) { if ( intermediateValue9[i9] === null || intermediateValue9[i9] === undefined ) { intermediateErrorMap9[`$.${i9}`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString9 = intermediateValue9[i9]; if (typeof convertedString9 !== "string") { intermediateErrorMap9[`$.${i9}`] = { key: "validator.string", }; } else { if (convertedString9.length < 1) { intermediateErrorMap9[`$.${i9}`] = { key: "validator.length", minLength: 1, }; } else { intermediateResult9[i9] = convertedString9; } } } } } if (Object.keys(intermediateErrorMap9).length) { for (const errorKey of Object.keys(intermediateErrorMap9)) { errorMap[ `$.watchSettings.ignorePatterns${errorKey.substring(1)}` ] = intermediateErrorMap9[errorKey]; } } else { result["watchSettings"]["ignorePatterns"] = intermediateResult9; } } } } if (value["subCommands"] === null || value["subCommands"] === undefined) { result["subCommands"] = []; } else { /** @type {ValidatorErrorMap} */ const intermediateErrorMap8 = {}; /** @type {Array<any>} */ const intermediateResult8 = []; /** @type {any | Array<any>} */ const intermediateValue8 = value["subCommands"]; if (!Array.isArray(intermediateValue8)) { errorMap[`$.subCommands`] = { key: "validator.array", value: intermediateValue8, }; } else { result["subCommands"] = []; for (let i8 = 0; i8 < intermediateValue8.length; ++i8) { if ( intermediateValue8[i8] === null || intermediateValue8[i8] === undefined ) { intermediateErrorMap8[`$.${i8}`] = { key: "validator.undefined", }; } else { const refResult8 = validateCliCommandDefinition( intermediateValue8[i8], ); if (refResult8.error) { for (const errorKey of Object.keys(refResult8.error)) { intermediateErrorMap8[`$.${i8}${errorKey.substring(1)}`] = refResult8.error[errorKey]; } } intermediateResult8[i8] = refResult8.value; } } } if (Object.keys(intermediateErrorMap8).length) { for (const errorKey of Object.keys(intermediateErrorMap8)) { errorMap[`$.subCommands${errorKey.substring(1)}`] = intermediateErrorMap8[errorKey]; } } else { result["subCommands"] = intermediateResult8; } } if (value["flags"] === null || value["flags"] === undefined) { result["flags"] = []; } else { /** @type {ValidatorErrorMap} */ const intermediateErrorMap9 = {}; /** @type {Array<any>} */ const intermediateResult9 = []; /** @type {any | Array<any>} */ const intermediateValue9 = value["flags"]; if (!Array.isArray(intermediateValue9)) { errorMap[`$.flags`] = { key: "validator.array", value: intermediateValue9, }; } else { result["flags"] = []; for (let i9 = 0; i9 < intermediateValue9.length; ++i9) { if ( intermediateValue9[i9] === null || intermediateValue9[i9] === undefined ) { intermediateErrorMap9[`$.${i9}`] = { key: "validator.undefined", }; } else { const refResult9 = validateCliFlagDefinition( intermediateValue9[i9], ); if (refResult9.error) { for (const errorKey of Object.keys(refResult9.error)) { intermediateErrorMap9[`$.${i9}${errorKey.substring(1)}`] = refResult9.error[errorKey]; } } intermediateResult9[i9] = refResult9.value; } } } if (Object.keys(intermediateErrorMap9).length) { for (const errorKey of Object.keys(intermediateErrorMap9)) { errorMap[`$.flags${errorKey.substring(1)}`] = intermediateErrorMap9[errorKey]; } } else { result["flags"] = intermediateResult9; } } if (value["executor"] === null || value["executor"] === undefined) { result["executor"] = undefined; } else { if (typeof value["executor"] === "function") { result["executor"] = value["executor"]; } else { errorMap[`$.executor`] = { key: "validator.any", message: "Custom validator error. See the input type for more information.", }; } } } } if (Object.keys(errorMap).length > 0) { return { error: errorMap }; } return { value: result }; } /** * @param {import("../common/types.js").CliFlagDefinitionInput|any} value * @returns {Either<import("../common/types.js").CliFlagDefinition, ValidatorErrorMap>} */ export function validateCliFlagDefinition(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 { /** @type {Set<string>} */ const knownKeys0 = new Set([ "name", "rawName", "description", "modifiers", "value", ]); for (const key of Object.keys(value)) { if ( !knownKeys0.has(key) && value[key] !== null && value[key] !== undefined ) { const expectedKeys = [...knownKeys0]; const foundKeys = Object.keys(value); const unknownKeys = foundKeys.filter((it) => !knownKeys0.has(it)); errorMap[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result = { name: undefined, rawName: undefined, description: undefined, modifiers: undefined, value: undefined, }; if (value["name"] === null || value["name"] === undefined) { errorMap[`$.name`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString1 = value["name"]; if (typeof convertedString1 !== "string") { errorMap[`$.name`] = { key: "validator.string", }; } else { if (convertedString1.length < 1) { errorMap[`$.name`] = { key: "validator.length", minLength: 1, }; } else { result["name"] = convertedString1; } } } if (value["rawName"] === null || value["rawName"] === undefined) { errorMap[`$.rawName`] = { key: "validator.undefined", }; } else { /** @type {string} */ let convertedString2 = value["rawName"]; if (typeof convertedString2 !== "string") { errorMap[`$.rawName`] = { key: "validator.string", }; } else { convertedString2 = convertedString2.toLowerCase(); if (convertedString2.length < 1) { errorMap[`$.rawName`] = { key: "validator.length", minLength: 1, }; } else if (!/^--\w/g.test(convertedString2)) { errorMap[`$.rawName`] = { key: "validator.pattern", }; } else { result["rawName"] = convertedString2; } } } if (value["description"] === null || value["description"] === undefined) { result["description"] = undefined; } else { /** @type {string} */ const convertedString3 = value["description"]; if (typeof convertedString3 !== "string") { errorMap[`$.description`] = { key: "validator.string", }; } else { if (convertedString3.length === 0) { result["description"] = undefined; } else { if (convertedString3.length < 1) { errorMap[`$.description`] = { key: "validator.length", minLength: 1, }; } else if (!/^[^\n]+$/g.test(convertedString3)) { errorMap[`$.description`] = { key: "validator.pattern", }; } else { result["description"] = convertedString3; } } } } if (value["modifiers"] === null || value["modifiers"] === undefined) { result["modifiers"] = { isRepeatable: false, isRequired: false, isInternal: false, }; } else { if (!isRecord(value["modifiers"])) { errorMap[`$.modifiers`] = { key: "validator.object", value: value["modifiers"], foundType: typeof value["modifiers"], }; } else { /** @type {Set<string>} */ const knownKeys4 = new Set([ "isRepeatable", "isRequired", "isInternal", ]); for (const key of Object.keys(value["modifiers"])) { if ( !knownKeys4.has(key) && value["modifiers"][key] !== null && value["modifiers"][key] !== undefined ) { const expectedKeys = [...knownKeys4]; const foundKeys = Object.keys(value["modifiers"]); const unknownKeys = foundKeys.filter((it) => !knownKeys4.has(it)); errorMap[`$.modifiers`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result["modifiers"] = { isRepeatable: undefined, isRequired: undefined, isInternal: undefined, }; if ( value["modifiers"]["isRepeatable"] === null || value["modifiers"]["isRepeatable"] === undefined ) { result["modifiers"]["isRepeatable"] = false; } else { if ( value["modifiers"]["isRepeatable"] === true || value["modifiers"]["isRepeatable"] === "true" || value["modifiers"]["isRepeatable"] === 1 || value["modifiers"]["isRepeatable"] === "1" ) { result["modifiers"]["isRepeatable"] = true; } else if ( value["modifiers"]["isRepeatable"] === false || value["modifiers"]["isRepeatable"] === "false" || value["modifiers"]["isRepeatable"] === 0 || value["modifiers"]["isRepeatable"] === "0" ) { result["modifiers"]["isRepeatable"] = false; } else { errorMap[`$.modifiers.isRepeatable`] = { key: "validator.type", expectedType: "boolean", }; } } if ( value["modifiers"]["isRequired"] === null || value["modifiers"]["isRequired"] === undefined ) { result["modifiers"]["isRequired"] = false; } else { if ( value["modifiers"]["isRequired"] === true || value["modifiers"]["isRequired"] === "true" || value["modifiers"]["isRequired"] === 1 || value["modifiers"]["isRequired"] === "1" ) { result["modifiers"]["isRequired"] = true; } else if ( value["modifiers"]["isRequired"] === false || value["modifiers"]["isRequired"] === "false" || value["modifiers"]["isRequired"] === 0 || value["modifiers"]["isRequired"] === "0" ) { result["modifiers"]["isRequired"] = false; } else { errorMap[`$.modifiers.isRequired`] = { key: "validator.type", expectedType: "boolean", }; } } if ( value["modifiers"]["isInternal"] === null || value["modifiers"]["isInternal"] === undefined ) { result["modifiers"]["isInternal"] = false; } else { if ( value["modifiers"]["isInternal"] === true || value["modifiers"]["isInternal"] === "true" || value["modifiers"]["isInternal"] === 1 || value["modifiers"]["isInternal"] === "1" ) { result["modifiers"]["isInternal"] = true; } else if ( value["modifiers"]["isInternal"] === false || value["modifiers"]["isInternal"] === "false" || value["modifiers"]["isInternal"] === 0 || value["modifiers"]["isInternal"] === "0" ) { result["modifiers"]["isInternal"] = false; } else { errorMap[`$.modifiers.isInternal`] = { key: "validator.type", expectedType: "boolean", }; } } } } if (value["value"] === null || value["value"] === undefined) { result["value"] = { specification: "boolean" }; } else { if (!isRecord(value["value"])) { errorMap[`$.value`] = { key: "validator.object", value: value["value"], foundType: typeof value["value"], }; } else { /** @type {Set<string>} */ const knownKeys5 = new Set([ "specification", "validator", "completions", ]); for (const key of Object.keys(value["value"])) { if ( !knownKeys5.has(key) && value["value"][key] !== null && value["value"][key] !== undefined ) { const expectedKeys = [...knownKeys5]; const foundKeys = Object.keys(value["value"]); const unknownKeys = foundKeys.filter((it) => !knownKeys5.has(it)); errorMap[`$.value`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } result["value"] = { specification: undefined, validator: undefined, completions: undefined, }; if ( value["value"]["specification"] === null || value["value"]["specification"] === undefined ) { result["value"]["specification"] = "boolean"; } else { /** @type {string} */ const convertedString6 = value["value"]["specification"]; if (typeof convertedString6 !== "string") { errorMap[`$.value.specification`] = { key: "validator.string", }; } else { if (convertedString6.length === 0) { result["value"]["specification"] = "boolean"; } else { if (convertedString6.length < 1) { errorMap[`$.value.specification`] = { key: "validator.length", minLength: 1, }; } else if ( convertedString6 !== "boolean" && convertedString6 !== "number" && convertedString6 !== "string" && convertedString6 !== "booleanOrString" ) { errorMap[`$.value.specification`] = { key: "validator.oneOf", allowedValues: [ "boolean", "number", "string", "booleanOrString", ], foundValue: convertedString6, }; } else { result["value"]["specification"] = convertedString6; } } } } if ( value["value"]["validator"] === null || value["value"]["validator"] === undefined ) { result["value"]["validator"] = undefined; } else { if (typeof value["value"]["validator"] === "function") { result["value"]["validator"] = value["value"]["validator"]; } else { errorMap[`$.value.validator`] = { key: "validator.any", message: "Custom validator error. See the input type for more information.", }; } } if ( value["value"]["completions"] === null || value["value"]["completions"] === undefined ) { result["value"]["completions"] = undefined; } else { if (typeof value["value"]["completions"] === "function") { result["value"]["completions"] = value["value"]["completions"]; } else { errorMap[`$.value.completions`] = { key: "validator.any", message: "Custom validator error. See the input type for more information.", }; } } } } } } if (Object.keys(errorMap).length > 0) { return { error: errorMap }; } return { value: result }; } /** * @param {import("../common/types.js").CliCompletion|any} value * @returns {Either<import("../common/types.js").CliCompletion, ValidatorErrorMap>} */ export function validateCliCompletion(value) { /** @type {ValidatorErrorMap} */ const errorMap = {}; /** @type {any} */ let result = undefined; if (value === null || value === undefined) { errorMap[`$`] = { key: "validator.undefined", }; } else { let hasAnyOfMatch0 = false; errorMap[`$`] = { key: "validator.anyOf", errors: [], }; if (!hasAnyOfMatch0) { /** @type {ValidatorErrorMap} */ const intermediateErrorMap2 = {}; /** @type {any} */ let intermediateResult2 = undefined; /** @type {any} */ const intermediateValue2 = value; if (intermediateValue2 === null || intermediateValue2 === undefined) { intermediateErrorMap2[`$`] = { key: "validator.undefined", }; } else { if (!isRecord(intermediateValue2)) { intermediateErrorMap2[`$`] = { key: "validator.object", value: intermediateValue2, foundType: typeof intermediateValue2, }; } else { /** @type {Set<string>} */ const knownKeys2 = new Set(["type"]); for (const key of Object.keys(intermediateValue2)) { if ( !knownKeys2.has(key) && intermediateValue2[key] !== null && intermediateValue2[key] !== undefined ) { const expectedKeys = [...knownKeys2]; const foundKeys = Object.keys(intermediateValue2); const unknownKeys = foundKeys.filter((it) => !knownKeys2.has(it)); intermediateErrorMap2[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } intermediateResult2 = { type: undefined }; if ( intermediateValue2["type"] === null || intermediateValue2["type"] === undefined ) { intermediateErrorMap2[`$.type`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString3 = intermediateValue2["type"]; if (typeof convertedString3 !== "string") { intermediateErrorMap2[`$.type`] = { key: "validator.string", }; } else { if (convertedString3.length < 1) { intermediateErrorMap2[`$.type`] = { key: "validator.length", minLength: 1, }; } else if (convertedString3 !== "directory") { intermediateErrorMap2[`$.type`] = { key: "validator.oneOf", allowedValues: ["directory"], foundValue: convertedString3, }; } else { intermediateResult2["type"] = convertedString3; } } } } } if (Object.keys(intermediateErrorMap2).length > 0) { errorMap[`$`].errors.push(intermediateErrorMap2); } else { hasAnyOfMatch0 = true; delete errorMap[`$`]; result = intermediateResult2; } } if (!hasAnyOfMatch0) { /** @type {ValidatorErrorMap} */ const intermediateErrorMap2 = {}; /** @type {any} */ let intermediateResult2 = undefined; /** @type {any} */ const intermediateValue2 = value; if (intermediateValue2 === null || intermediateValue2 === undefined) { intermediateErrorMap2[`$`] = { key: "validator.undefined", }; } else { if (!isRecord(intermediateValue2)) { intermediateErrorMap2[`$`] = { key: "validator.object", value: intermediateValue2, foundType: typeof intermediateValue2, }; } else { /** @type {Set<string>} */ const knownKeys2 = new Set(["type"]); for (const key of Object.keys(intermediateValue2)) { if ( !knownKeys2.has(key) && intermediateValue2[key] !== null && intermediateValue2[key] !== undefined ) { const expectedKeys = [...knownKeys2]; const foundKeys = Object.keys(intermediateValue2); const unknownKeys = foundKeys.filter((it) => !knownKeys2.has(it)); intermediateErrorMap2[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } intermediateResult2 = { type: undefined }; if ( intermediateValue2["type"] === null || intermediateValue2["type"] === undefined ) { intermediateErrorMap2[`$.type`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString3 = intermediateValue2["type"]; if (typeof convertedString3 !== "string") { intermediateErrorMap2[`$.type`] = { key: "validator.string", }; } else { if (convertedString3.length < 1) { intermediateErrorMap2[`$.type`] = { key: "validator.length", minLength: 1, }; } else if (convertedString3 !== "file") { intermediateErrorMap2[`$.type`] = { key: "validator.oneOf", allowedValues: ["file"], foundValue: convertedString3, }; } else { intermediateResult2["type"] = convertedString3; } } } } } if (Object.keys(intermediateErrorMap2).length > 0) { errorMap[`$`].errors.push(intermediateErrorMap2); } else { hasAnyOfMatch0 = true; delete errorMap[`$`]; result = intermediateResult2; } } if (!hasAnyOfMatch0) { /** @type {ValidatorErrorMap} */ const intermediateErrorMap2 = {}; /** @type {any} */ let intermediateResult2 = undefined; /** @type {any} */ const intermediateValue2 = value; if (intermediateValue2 === null || intermediateValue2 === undefined) { intermediateErrorMap2[`$`] = { key: "validator.undefined", }; } else { if (!isRecord(intermediateValue2)) { intermediateErrorMap2[`$`] = { key: "validator.object", value: intermediateValue2, foundType: typeof intermediateValue2, }; } else { /** @type {Set<string>} */ const knownKeys2 = new Set(["type", "name", "description"]); for (const key of Object.keys(intermediateValue2)) { if ( !knownKeys2.has(key) && intermediateValue2[key] !== null && intermediateValue2[key] !== undefined ) { const expectedKeys = [...knownKeys2]; const foundKeys = Object.keys(intermediateValue2); const unknownKeys = foundKeys.filter((it) => !knownKeys2.has(it)); intermediateErrorMap2[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } intermediateResult2 = { type: undefined, name: undefined, description: undefined, }; if ( intermediateValue2["type"] === null || intermediateValue2["type"] === undefined ) { intermediateErrorMap2[`$.type`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString3 = intermediateValue2["type"]; if (typeof convertedString3 !== "string") { intermediateErrorMap2[`$.type`] = { key: "validator.string", }; } else { if (convertedString3.length < 1) { intermediateErrorMap2[`$.type`] = { key: "validator.length", minLength: 1, }; } else if (convertedString3 !== "completion") { intermediateErrorMap2[`$.type`] = { key: "validator.oneOf", allowedValues: ["completion"], foundValue: convertedString3, }; } else { intermediateResult2["type"] = convertedString3; } } } if ( intermediateValue2["name"] === null || intermediateValue2["name"] === undefined ) { intermediateErrorMap2[`$.name`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString4 = intermediateValue2["name"]; if (typeof convertedString4 !== "string") { intermediateErrorMap2[`$.name`] = { key: "validator.string", }; } else { if (convertedString4.length < 1) { intermediateErrorMap2[`$.name`] = { key: "validator.length", minLength: 1, }; } else { intermediateResult2["name"] = convertedString4; } } } if ( intermediateValue2["description"] === null || intermediateValue2["description"] === undefined ) { intermediateResult2["description"] = undefined; } else { /** @type {string} */ const convertedString5 = intermediateValue2["description"]; if (typeof convertedString5 !== "string") { intermediateErrorMap2[`$.description`] = { key: "validator.string", }; } else { if (convertedString5.length === 0) { intermediateResult2["description"] = undefined; } else { if (convertedString5.length < 1) { intermediateErrorMap2[`$.description`] = { key: "validator.length", minLength: 1, }; } else { intermediateResult2["description"] = convertedString5; } } } } } } if (Object.keys(intermediateErrorMap2).length > 0) { errorMap[`$`].errors.push(intermediateErrorMap2); } else { hasAnyOfMatch0 = true; delete errorMap[`$`]; result = intermediateResult2; } } if (!hasAnyOfMatch0) { /** @type {ValidatorErrorMap} */ const intermediateErrorMap2 = {}; /** @type {any} */ let intermediateResult2 = undefined; /** @type {any} */ const intermediateValue2 = value; if (intermediateValue2 === null || intermediateValue2 === undefined) { intermediateErrorMap2[`$`] = { key: "validator.undefined", }; } else { if (!isRecord(intermediateValue2)) { intermediateErrorMap2[`$`] = { key: "validator.object", value: intermediateValue2, foundType: typeof intermediateValue2, }; } else { /** @type {Set<string>} */ const knownKeys2 = new Set(["type", "specification", "description"]); for (const key of Object.keys(intermediateValue2)) { if ( !knownKeys2.has(key) && intermediateValue2[key] !== null && intermediateValue2[key] !== undefined ) { const expectedKeys = [...knownKeys2]; const foundKeys = Object.keys(intermediateValue2); const unknownKeys = foundKeys.filter((it) => !knownKeys2.has(it)); intermediateErrorMap2[`$`] = { key: "validator.keys", unknownKeys, expectedKeys, foundKeys, }; break; } } intermediateResult2 = { type: undefined, specification: undefined, description: undefined, }; if ( intermediateValue2["type"] === null || intermediateValue2["type"] === undefined ) { intermediateErrorMap2[`$.type`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString3 = intermediateValue2["type"]; if (typeof convertedString3 !== "string") { intermediateErrorMap2[`$.type`] = { key: "validator.string", }; } else { if (convertedString3.length < 1) { intermediateErrorMap2[`$.type`] = { key: "validator.length", minLength: 1, }; } else if (convertedString3 !== "value") { intermediateErrorMap2[`$.type`] = { key: "validator.oneOf", allowedValues: ["value"], foundValue: convertedString3, }; } else { intermediateResult2["type"] = convertedString3; } } } if ( intermediateValue2["specification"] === null || intermediateValue2["specification"] === undefined ) { intermediateErrorMap2[`$.specification`] = { key: "validator.undefined", }; } else { /** @type {string} */ const convertedString4 = intermediateValue2["specification"]; if (typeof convertedString4 !== "string") { intermediateErrorMap2[`$.specification`] = { key: "validator.string", }; } else { if (convertedString4.length < 1) { intermediateErrorMap2[`$.specification`] = { key: "validator.length", minLength: 1, }; } else