UNPKG

untyped

Version:

<!-- automd:badges bundlejs -->

146 lines (142 loc) 3.28 kB
'use strict'; const scule = require('scule'); function defineUntypedSchema(options) { return options; } function getType(val) { const type = typeof val; if (type === "undefined" || val === null) { return void 0; } if (Array.isArray(val)) { return "array"; } return type; } function isObject(val) { return val !== null && !Array.isArray(val) && typeof val === "object"; } function nonEmpty(arr) { return arr.filter(Boolean); } function unique(arr) { return [...new Set(arr)]; } function joinPath(a, b = "", sep = ".") { return a ? a + sep + b : b; } function setValue(obj, path, val) { const keys = path.split("."); const _key = keys.pop(); for (const key of keys) { if (!obj || typeof obj !== "object") { return; } if (!(key in obj)) { obj[key] = {}; } obj = obj[key]; } if (_key) { if (!obj || typeof obj !== "object") { return; } obj[_key] = val; } } function getValue(obj, path) { for (const key of path.split(".")) { if (!obj || typeof obj !== "object" || !(key in obj)) { return; } obj = obj[key]; } return obj; } function mergedTypes(...types) { types = types.filter(Boolean); if (types.length === 0) { return {}; } if (types.length === 1) { return types[0]; } const tsTypes = normalizeTypes( types.flatMap((t) => t.tsType).filter(Boolean) ); return { type: normalizeTypes( types.flatMap((t) => t.type).filter(Boolean) ), tsType: Array.isArray(tsTypes) ? tsTypes.join(" | ") : tsTypes, items: mergedTypes( ...types.flatMap((t) => t.items).filter(Boolean) ) }; } function normalizeTypes(val) { const arr = unique(val.filter(Boolean)); if (arr.length === 0 || arr.includes("any")) { return; } return arr.length > 1 ? arr : arr[0]; } function cachedFn(fn) { let val; let resolved = false; const cachedFn2 = () => { if (!resolved) { val = fn(); resolved = true; } return val; }; return cachedFn2; } const jsTypes = /* @__PURE__ */ new Set([ "string", "number", "bigint", "boolean", "symbol", "function", "object", "any", "array" ]); function isJSType(val) { return jsTypes.has(val); } const FRIENDLY_TYPE_RE = /(typeof )?import\(["'](?<importName>[^"']+)["']\)(\[["']|\.)(?<firstType>[^\s"']+)(["']])?/g; function getTypeDescriptor(type) { if (!type) { return {}; } let markdownType = type; for (const match of type.matchAll(FRIENDLY_TYPE_RE) || []) { const { importName, firstType } = match.groups || {}; if (importName && firstType) { markdownType = markdownType.replace( match[0], scule.pascalCase(importName) + scule.pascalCase(firstType) ); } } return { ...isJSType(type) ? { type } : {}, tsType: type, ...markdownType === type ? {} : { markdownType } }; } exports.cachedFn = cachedFn; exports.defineUntypedSchema = defineUntypedSchema; exports.getType = getType; exports.getTypeDescriptor = getTypeDescriptor; exports.getValue = getValue; exports.isObject = isObject; exports.joinPath = joinPath; exports.mergedTypes = mergedTypes; exports.nonEmpty = nonEmpty; exports.normalizeTypes = normalizeTypes; exports.setValue = setValue; exports.unique = unique;