UNPKG

@mastra/core

Version:
1,556 lines • 183 kB
import * as z4 from "zod/v4"; import { z } from "zod/v4"; import { z as z$1 } from "zod"; import { ZodFirstPartyTypeKind } from "zod/v3"; //#region ../_vendored/ai_v5/dist/dist-BuEMdYEn.js var marker$1 = "vercel.ai.error"; var symbol$1$1 = Symbol.for(marker$1); var _a$1$1; var _b$1; var AISDKError = class _AISDKError extends (_b$1 = Error, _a$1$1 = symbol$1$1, _b$1) { /** * Creates an AI SDK Error. * * @param {Object} params - The parameters for creating the error. * @param {string} params.name - The name of the error. * @param {string} params.message - The error message. * @param {unknown} [params.cause] - The underlying cause of the error. */ constructor({ name: name14, message, cause }) { super(message); this[_a$1$1] = true; this.name = name14; this.cause = cause; } /** * Checks if the given error is an AI SDK Error. * @param {unknown} error - The error to check. * @returns {boolean} True if the error is an AI SDK Error, false otherwise. */ static isInstance(error) { return _AISDKError.hasMarker(error, marker$1); } static hasMarker(error, marker15) { const markerSymbol = Symbol.for(marker15); return error != null && typeof error === "object" && markerSymbol in error && typeof error[markerSymbol] === "boolean" && error[markerSymbol] === true; } }; var name$1$1 = "AI_APICallError"; var marker2$2 = `vercel.ai.error.${name$1$1}`; var symbol2$2 = Symbol.for(marker2$2); var _a2$2; var _b2$1; var APICallError = class extends (_b2$1 = AISDKError, _a2$2 = symbol2$2, _b2$1) { constructor({ message, url, requestBodyValues, statusCode, responseHeaders, responseBody, cause, isRetryable = statusCode != null && (statusCode === 408 || statusCode === 409 || statusCode === 429 || statusCode >= 500), data }) { super({ name: name$1$1, message, cause }); this[_a2$2] = true; this.url = url; this.requestBodyValues = requestBodyValues; this.statusCode = statusCode; this.responseHeaders = responseHeaders; this.responseBody = responseBody; this.isRetryable = isRetryable; this.data = data; } static isInstance(error) { return AISDKError.hasMarker(error, marker2$2); } }; var name2$2 = "AI_EmptyResponseBodyError"; var marker3$2 = `vercel.ai.error.${name2$2}`; var symbol3$2 = Symbol.for(marker3$2); var _a3$2; var _b3$1; var EmptyResponseBodyError = class extends (_b3$1 = AISDKError, _a3$2 = symbol3$2, _b3$1) { constructor({ message = "Empty response body" } = {}) { super({ name: name2$2, message }); this[_a3$2] = true; } static isInstance(error) { return AISDKError.hasMarker(error, marker3$2); } }; function getErrorMessage$1(error) { if (error == null) return "unknown error"; if (typeof error === "string") return error; if (error instanceof Error) return error.message; return JSON.stringify(error); } var name3$2 = "AI_InvalidArgumentError"; var marker4$2 = `vercel.ai.error.${name3$2}`; var symbol4$2 = Symbol.for(marker4$2); var _a4$2; var _b4$1; var InvalidArgumentError$1 = class extends (_b4$1 = AISDKError, _a4$2 = symbol4$2, _b4$1) { constructor({ message, cause, argument }) { super({ name: name3$2, message, cause }); this[_a4$2] = true; this.argument = argument; } static isInstance(error) { return AISDKError.hasMarker(error, marker4$2); } }; var name4$2 = "AI_InvalidPromptError"; var marker5$2 = `vercel.ai.error.${name4$2}`; var symbol5$2 = Symbol.for(marker5$2); var _a5$2; var _b5$1; (class extends (_b5$1 = AISDKError, _a5$2 = symbol5$2, _b5$1) { constructor({ prompt, message, cause }) { super({ name: name4$2, message: `Invalid prompt: ${message}`, cause }); this[_a5$2] = true; this.prompt = prompt; } static isInstance(error) { return AISDKError.hasMarker(error, marker5$2); } }); var name5$2 = "AI_InvalidResponseDataError"; var marker6$2 = `vercel.ai.error.${name5$2}`; var symbol6$2 = Symbol.for(marker6$2); var _a6$2; var _b6$1; (class extends (_b6$1 = AISDKError, _a6$2 = symbol6$2, _b6$1) { constructor({ data, message = `Invalid response data: ${JSON.stringify(data)}.` }) { super({ name: name5$2, message }); this[_a6$2] = true; this.data = data; } static isInstance(error) { return AISDKError.hasMarker(error, marker6$2); } }); var name6$2 = "AI_JSONParseError"; var marker7$2 = `vercel.ai.error.${name6$2}`; var symbol7$2 = Symbol.for(marker7$2); var _a7$2; var _b7$1; var JSONParseError = class extends (_b7$1 = AISDKError, _a7$2 = symbol7$2, _b7$1) { constructor({ text, cause }) { super({ name: name6$2, message: `JSON parsing failed: Text: ${text}. Error message: ${getErrorMessage$1(cause)}`, cause }); this[_a7$2] = true; this.text = text; } static isInstance(error) { return AISDKError.hasMarker(error, marker7$2); } }; var name7$2 = "AI_LoadAPIKeyError"; var marker8$2 = `vercel.ai.error.${name7$2}`; var symbol8$2 = Symbol.for(marker8$2); var _a8$2; var _b8$1; (class extends (_b8$1 = AISDKError, _a8$2 = symbol8$2, _b8$1) { constructor({ message }) { super({ name: name7$2, message }); this[_a8$2] = true; } static isInstance(error) { return AISDKError.hasMarker(error, marker8$2); } }); var name8$2 = "AI_LoadSettingError"; var marker9$2 = `vercel.ai.error.${name8$2}`; var symbol9$2 = Symbol.for(marker9$2); var _a9$2; var _b9$1; (class extends (_b9$1 = AISDKError, _a9$2 = symbol9$2, _b9$1) { constructor({ message }) { super({ name: name8$2, message }); this[_a9$2] = true; } static isInstance(error) { return AISDKError.hasMarker(error, marker9$2); } }); var name9$1 = "AI_NoContentGeneratedError"; var marker10$1 = `vercel.ai.error.${name9$1}`; var symbol10$1 = Symbol.for(marker10$1); var _a10$1; var _b10; (class extends (_b10 = AISDKError, _a10$1 = symbol10$1, _b10) { constructor({ message = "No content generated." } = {}) { super({ name: name9$1, message }); this[_a10$1] = true; } static isInstance(error) { return AISDKError.hasMarker(error, marker10$1); } }); var name10$1 = "AI_NoSuchModelError"; var marker11$1 = `vercel.ai.error.${name10$1}`; var symbol11$1 = Symbol.for(marker11$1); var _a11$1; var _b11; (class extends (_b11 = AISDKError, _a11$1 = symbol11$1, _b11) { constructor({ errorName = name10$1, modelId, modelType, message = `No such ${modelType}: ${modelId}` }) { super({ name: errorName, message }); this[_a11$1] = true; this.modelId = modelId; this.modelType = modelType; } static isInstance(error) { return AISDKError.hasMarker(error, marker11$1); } }); var name11$1 = "AI_TooManyEmbeddingValuesForCallError"; var marker12$1 = `vercel.ai.error.${name11$1}`; var symbol12$1 = Symbol.for(marker12$1); var _a12$1; var _b12; (class extends (_b12 = AISDKError, _a12$1 = symbol12$1, _b12) { constructor(options) { super({ name: name11$1, message: `Too many values for a single embedding call. The ${options.provider} model "${options.modelId}" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.` }); this[_a12$1] = true; this.provider = options.provider; this.modelId = options.modelId; this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall; this.values = options.values; } static isInstance(error) { return AISDKError.hasMarker(error, marker12$1); } }); var name12$1 = "AI_TypeValidationError"; var marker13$1 = `vercel.ai.error.${name12$1}`; var symbol13$1 = Symbol.for(marker13$1); var _a13$1; var _b13; var TypeValidationError = class _TypeValidationError extends (_b13 = AISDKError, _a13$1 = symbol13$1, _b13) { constructor({ value, cause }) { super({ name: name12$1, message: `Type validation failed: Value: ${JSON.stringify(value)}. Error message: ${getErrorMessage$1(cause)}`, cause }); this[_a13$1] = true; this.value = value; } static isInstance(error) { return AISDKError.hasMarker(error, marker13$1); } /** * Wraps an error into a TypeValidationError. * If the cause is already a TypeValidationError with the same value, it returns the cause. * Otherwise, it creates a new TypeValidationError. * * @param {Object} params - The parameters for wrapping the error. * @param {unknown} params.value - The value that failed validation. * @param {unknown} params.cause - The original error or cause of the validation failure. * @returns {TypeValidationError} A TypeValidationError instance. */ static wrap({ value, cause }) { return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause }); } }; var name13$1 = "AI_UnsupportedFunctionalityError"; var marker14$1 = `vercel.ai.error.${name13$1}`; var symbol14$1 = Symbol.for(marker14$1); var _a14$1; var _b14; (class extends (_b14 = AISDKError, _a14$1 = symbol14$1, _b14) { constructor({ functionality, message = `'${functionality}' functionality not supported.` }) { super({ name: name13$1, message }); this[_a14$1] = true; this.functionality = functionality; } static isInstance(error) { return AISDKError.hasMarker(error, marker14$1); } }); var ParseError = class extends Error { constructor(message, options) { super(message), this.name = "ParseError", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line; } }; const LF = 10; const CR = 13; const SPACE = 32; function noop(_arg) {} function createParser(callbacks) { if (typeof callbacks == "function") throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?"); const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks, pendingFragments = []; let isFirstChunk = !0, id, data = "", dataLines = 0, eventType; function feed(chunk) { if (isFirstChunk && (isFirstChunk = !1, chunk.charCodeAt(0) === 239 && chunk.charCodeAt(1) === 187 && chunk.charCodeAt(2) === 191 && (chunk = chunk.slice(3))), pendingFragments.length === 0) { const trailing2 = processLines(chunk); trailing2 !== "" && pendingFragments.push(trailing2); return; } if (chunk.indexOf(` `) === -1 && chunk.indexOf("\r") === -1) { pendingFragments.push(chunk); return; } pendingFragments.push(chunk); const input = pendingFragments.join(""); pendingFragments.length = 0; const trailing = processLines(input); trailing !== "" && pendingFragments.push(trailing); } function processLines(chunk) { let searchIndex = 0; if (chunk.indexOf("\r") === -1) { let lfIndex = chunk.indexOf(` `, searchIndex); for (; lfIndex !== -1;) { if (searchIndex === lfIndex) { dataLines > 0 && onEvent({ id, event: eventType, data }), id = void 0, data = "", dataLines = 0, eventType = void 0, searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(` `, searchIndex); continue; } const firstCharCode = chunk.charCodeAt(searchIndex); if (isDataPrefix(chunk, searchIndex, firstCharCode)) { const valueStart = chunk.charCodeAt(searchIndex + 5) === SPACE ? searchIndex + 6 : searchIndex + 5, value = chunk.slice(valueStart, lfIndex); if (dataLines === 0 && chunk.charCodeAt(lfIndex + 1) === LF) { onEvent({ id, event: eventType, data: value }), id = void 0, data = "", eventType = void 0, searchIndex = lfIndex + 2, lfIndex = chunk.indexOf(` `, searchIndex); continue; } data = dataLines === 0 ? value : `${data} ${value}`, dataLines++; } else isEventPrefix(chunk, searchIndex, firstCharCode) ? eventType = chunk.slice(chunk.charCodeAt(searchIndex + 6) === SPACE ? searchIndex + 7 : searchIndex + 6, lfIndex) || void 0 : parseLine(chunk, searchIndex, lfIndex); searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(` `, searchIndex); } return chunk.slice(searchIndex); } for (; searchIndex < chunk.length;) { const crIndex = chunk.indexOf("\r", searchIndex), lfIndex = chunk.indexOf(` `, searchIndex); let lineEnd = -1; if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = crIndex < lfIndex ? crIndex : lfIndex : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) break; parseLine(chunk, searchIndex, lineEnd), searchIndex = lineEnd + 1, chunk.charCodeAt(searchIndex - 1) === CR && chunk.charCodeAt(searchIndex) === LF && searchIndex++; } return chunk.slice(searchIndex); } function parseLine(chunk, start, end) { if (start === end) { dispatchEvent(); return; } const firstCharCode = chunk.charCodeAt(start); if (isDataPrefix(chunk, start, firstCharCode)) { const valueStart = chunk.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5, value2 = chunk.slice(valueStart, end); data = dataLines === 0 ? value2 : `${data} ${value2}`, dataLines++; return; } if (isEventPrefix(chunk, start, firstCharCode)) { eventType = chunk.slice(chunk.charCodeAt(start + 6) === SPACE ? start + 7 : start + 6, end) || void 0; return; } if (firstCharCode === 105 && chunk.charCodeAt(start + 1) === 100 && chunk.charCodeAt(start + 2) === 58) { const value2 = chunk.slice(chunk.charCodeAt(start + 3) === SPACE ? start + 4 : start + 3, end); id = value2.includes("\0") ? void 0 : value2; return; } if (firstCharCode === 58) { if (onComment) { const line2 = chunk.slice(start, end); onComment(line2.slice(chunk.charCodeAt(start + 1) === SPACE ? 2 : 1)); } return; } const line = chunk.slice(start, end), fieldSeparatorIndex = line.indexOf(":"); if (fieldSeparatorIndex === -1) { processField(line, "", line); return; } const field = line.slice(0, fieldSeparatorIndex), offset = line.charCodeAt(fieldSeparatorIndex + 1) === SPACE ? 2 : 1; processField(field, line.slice(fieldSeparatorIndex + offset), line); } function processField(field, value, line) { switch (field) { case "event": eventType = value || void 0; break; case "data": data = dataLines === 0 ? value : `${data} ${value}`, dataLines++; break; case "id": id = value.includes("\0") ? void 0 : value; break; case "retry": /^\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(new ParseError(`Invalid \`retry\` value: "${value}"`, { type: "invalid-retry", value, line })); break; default: onError(new ParseError(`Unknown field "${field.length > 20 ? `${field.slice(0, 20)}\u2026` : field}"`, { type: "unknown-field", field, value, line })); break; } } function dispatchEvent() { dataLines > 0 && onEvent({ id, event: eventType, data }), id = void 0, data = "", dataLines = 0, eventType = void 0; } function reset(options = {}) { if (options.consume && pendingFragments.length > 0) { const incompleteLine = pendingFragments.join(""); parseLine(incompleteLine, 0, incompleteLine.length); } isFirstChunk = !0, id = void 0, data = "", dataLines = 0, eventType = void 0, pendingFragments.length = 0; } return { feed, reset }; } function isDataPrefix(chunk, i, firstCharCode) { return firstCharCode === 100 && chunk.charCodeAt(i + 1) === 97 && chunk.charCodeAt(i + 2) === 116 && chunk.charCodeAt(i + 3) === 97 && chunk.charCodeAt(i + 4) === 58; } function isEventPrefix(chunk, i, firstCharCode) { return firstCharCode === 101 && chunk.charCodeAt(i + 1) === 118 && chunk.charCodeAt(i + 2) === 101 && chunk.charCodeAt(i + 3) === 110 && chunk.charCodeAt(i + 4) === 116 && chunk.charCodeAt(i + 5) === 58; } var EventSourceParserStream = class extends TransformStream { constructor({ onError, onRetry, onComment } = {}) { let parser; super({ start(controller) { parser = createParser({ onEvent: (event) => { controller.enqueue(event); }, onError(error) { onError === "terminate" ? controller.error(error) : typeof onError == "function" && onError(error); }, onRetry, onComment }); }, transform(chunk) { parser.feed(chunk); } }); } }; function combineHeaders(...headers) { return headers.reduce((combinedHeaders, currentHeaders) => ({ ...combinedHeaders, ...currentHeaders != null ? currentHeaders : {} }), {}); } async function delay(delayInMs, options) { if (delayInMs == null) return Promise.resolve(); const signal = options == null ? void 0 : options.abortSignal; return new Promise((resolve2, reject) => { if (signal == null ? void 0 : signal.aborted) { reject(createAbortError()); return; } const timeoutId = setTimeout(() => { cleanup(); resolve2(); }, delayInMs); const cleanup = () => { clearTimeout(timeoutId); signal?.removeEventListener("abort", onAbort); }; const onAbort = () => { cleanup(); reject(createAbortError()); }; signal?.addEventListener("abort", onAbort); }); } function createAbortError() { return new DOMException("Delay was aborted", "AbortError"); } function extractResponseHeaders(response) { return Object.fromEntries([...response.headers]); } var name$2 = "AI_DownloadError"; var marker$2 = `vercel.ai.error.${name$2}`; var symbol$2 = Symbol.for(marker$2); var _a$2; var _b$2; var DownloadError = class extends (_b$2 = AISDKError, _a$2 = symbol$2, _b$2) { constructor({ url, statusCode, statusText, cause, message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}` }) { super({ name: name$2, message, cause }); this[_a$2] = true; this.url = url; this.statusCode = statusCode; this.statusText = statusText; } static isInstance(error) { return AISDKError.hasMarker(error, marker$2); } }; async function cancelResponseBody(response) { var _a2; try { await ((_a2 = response.body) == null ? void 0 : _a2.cancel()); } catch (e) {} } function isBrowserRuntime(globalThisAny = globalThis) { return globalThisAny.window != null; } function validateDownloadUrl(url) { let parsed; try { parsed = new URL(url); } catch (e) { throw new DownloadError({ url, message: `Invalid URL: ${url}` }); } if (parsed.protocol === "data:") return; if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new DownloadError({ url, message: `URL scheme must be http, https, or data, got ${parsed.protocol}` }); const hostname = parsed.hostname.toLowerCase().replace(/\.+$/, ""); if (!hostname) throw new DownloadError({ url, message: `URL must have a hostname` }); if (hostname === "localhost" || hostname.endsWith(".local") || hostname.endsWith(".localhost")) throw new DownloadError({ url, message: `URL with hostname ${hostname} is not allowed` }); if (hostname.startsWith("[") && hostname.endsWith("]")) { if (isPrivateIPv6(hostname.slice(1, -1))) throw new DownloadError({ url, message: `URL with IPv6 address ${hostname} is not allowed` }); return; } if (isIPv4(hostname)) { if (isPrivateIPv4(hostname)) throw new DownloadError({ url, message: `URL with IP address ${hostname} is not allowed` }); return; } } function validateDownloadAddress({ address, family, hostname }) { if (family === 4 ? !isIPv4(address) || isPrivateIPv4(address) : family === 6 ? isPrivateIPv6(address) : true) throw new DownloadError({ url: hostname, message: `Hostname ${hostname} resolved to disallowed IP address ${address}` }); } function isIPv4(hostname) { const parts = hostname.split("."); if (parts.length !== 4) return false; return parts.every((part) => { const num = Number(part); return Number.isInteger(num) && num >= 0 && num <= 255 && String(num) === part; }); } function isPrivateIPv4(ip) { const [a, b, c] = ip.split(".").map(Number); if (a === 0) return true; if (a === 10) return true; if (a === 100 && b >= 64 && b <= 127) return true; if (a === 127) return true; if (a === 169 && b === 254) return true; if (a === 172 && b >= 16 && b <= 31) return true; if (a === 192 && b === 0 && c === 0) return true; if (a === 192 && b === 168) return true; if (a === 198 && (b === 18 || b === 19)) return true; if (a >= 240) return true; return false; } function parseIPv6(ip) { let address = ip.toLowerCase(); const zoneIndex = address.indexOf("%"); if (zoneIndex !== -1) address = address.slice(0, zoneIndex); const halves = address.split("::"); if (halves.length > 2) return null; const toGroups = (segment) => { if (segment === "") return []; const groups = []; const parts = segment.split(":"); for (let i = 0; i < parts.length; i++) { const part = parts[i]; if (part.includes(".")) { if (i !== parts.length - 1 || !isIPv4(part)) return null; const [a, b, c, d] = part.split(".").map(Number); groups.push(a << 8 | b, c << 8 | d); continue; } if (!/^[0-9a-f]{1,4}$/.test(part)) return null; groups.push(parseInt(part, 16)); } return groups; }; const head = toGroups(halves[0]); if (head === null) return null; if (halves.length === 2) { const tail = toGroups(halves[1]); if (tail === null) return null; const fill = 8 - head.length - tail.length; if (fill < 0) return null; return [ ...head, ...new Array(fill).fill(0), ...tail ]; } return head.length === 8 ? head : null; } function isPrivateIPv6(ip) { const groups = parseIPv6(ip); if (groups === null) return true; const topZero = (count) => groups.slice(0, count).every((group) => group === 0); if (topZero(7) && (groups[7] === 0 || groups[7] === 1)) return true; if ((groups[0] & 65024) === 64512) return true; if ((groups[0] & 65472) === 65152) return true; if ((groups[0] & 65472) === 65216) return true; if ((groups[0] & 65280) === 65280) return true; if (topZero(6) || topZero(5) && groups[5] === 65535 || topZero(4) && groups[4] === 65535 && groups[5] === 0 || groups[0] === 100 && groups[1] === 65435 && groups[2] === 0 && groups[3] === 0 && groups[4] === 0 && groups[5] === 0 || groups[0] === 100 && groups[1] === 65435 && groups[2] === 1) return isPrivateIPv4(`${groups[6] >> 8 & 255}.${groups[6] & 255}.${groups[7] >> 8 & 255}.${groups[7] & 255}`); return false; } function createSafeLookup(lookup) { return ((hostname, options, callback) => { lookup(hostname, { ...options, all: true }, (error, addresses) => { if (error) { callback(error); return; } try { const [firstAddress] = addresses; if (firstAddress == null) throw new Error(`Hostname ${hostname} did not resolve to an address`); for (const { address, family } of addresses) validateDownloadAddress({ address, family, hostname }); if (options.all === true) callback(null, addresses); else callback(null, firstAddress.address, firstAddress.family); } catch (error2) { callback(error2 instanceof Error ? error2 : new Error(String(error2))); } }); }); } var safeNodeFetchPromise; var initialGlobalFetch = globalThis.fetch; var initialGlobalFetchIsNodeDefault = isNodeDefaultFetch(initialGlobalFetch); function isNodeRuntime() { var _a2, _b2; const runtimeProcess = globalThis.process; return ((_a2 = runtimeProcess == null ? void 0 : runtimeProcess.release) == null ? void 0 : _a2.name) === "node" && ((_b2 = runtimeProcess.versions) == null ? void 0 : _b2.bun) == null; } async function getDefaultDownloadFetch() { if (!isNodeRuntime() || !initialGlobalFetchIsNodeDefault || globalThis.fetch !== initialGlobalFetch) return globalThis.fetch; return safeNodeFetchPromise != null ? safeNodeFetchPromise : safeNodeFetchPromise = createSafeNodeFetch(); } function isNodeDefaultFetch(fetch) { const source = Function.prototype.toString.call(fetch); return source.includes("internal/deps/undici") || source.includes("lazy loading of undici"); } async function createSafeNodeFetch() { const [{ createRequire }, { lookup }] = await Promise.all([loadNodeModule("node:module"), loadNodeModule("node:dns")]); const { Agent, fetch } = createRequire(getCurrentModulePath())("undici"); const dispatcher = new Agent({ connect: { lookup: createSafeLookup(lookup) } }); return ((input, init) => fetch(input, { ...init, dispatcher })); } async function loadNodeModule(id) { var _a2; const processWithBuiltins = globalThis.process; const builtinModule = (_a2 = processWithBuiltins == null ? void 0 : processWithBuiltins.getBuiltinModule) == null ? void 0 : _a2.call(processWithBuiltins, id); return builtinModule == null ? await importNodeModule(id) : builtinModule; } function importNodeModule(id) { return import(id); } function getCurrentModulePath() { const originalPrepareStackTrace = Error.prepareStackTrace; try { Error.prepareStackTrace = (_error, callSites) => callSites; const error = /* @__PURE__ */ new Error("Capture current module path"); Error.captureStackTrace(error, getCurrentModulePath); const [caller] = error.stack; const fileName = caller == null ? void 0 : caller.getFileName(); if (fileName == null) throw new Error("Unable to determine the current module path"); return fileName; } finally { Error.prepareStackTrace = originalPrepareStackTrace; } } var MAX_DOWNLOAD_REDIRECTS = 10; async function fetchWithValidatedRedirects({ url, headers, abortSignal, maxRedirects = MAX_DOWNLOAD_REDIRECTS }) { const baseInit = { signal: abortSignal }; if (headers !== void 0) baseInit.headers = headers; let currentUrl = url; for (let redirectCount = 0; redirectCount <= maxRedirects; redirectCount++) { validateDownloadUrl(currentUrl); const fetch = await getDefaultDownloadFetch(); const response = await fetch(currentUrl, { ...baseInit, redirect: "manual" }); if (response.type === "opaqueredirect") { if (!isBrowserRuntime()) throw new DownloadError({ url, message: `Redirect from ${currentUrl} could not be validated and was blocked` }); return await fetch(currentUrl, { ...baseInit, redirect: "follow" }); } const location = response.headers.get("location"); if (response.status >= 300 && response.status < 400 && location) { await cancelResponseBody(response); currentUrl = new URL(location, currentUrl).toString(); continue; } return response; } throw new DownloadError({ url, message: `Too many redirects (max ${maxRedirects})` }); } var DEFAULT_MAX_DOWNLOAD_SIZE = 2 * 1024 * 1024 * 1024; async function readResponseWithSizeLimit({ response, url, maxBytes = DEFAULT_MAX_DOWNLOAD_SIZE }) { const contentLength = response.headers.get("content-length"); if (contentLength != null) { const length = parseInt(contentLength, 10); if (!isNaN(length) && length > maxBytes) { await cancelResponseBody(response); throw new DownloadError({ url, message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes (Content-Length: ${length}).` }); } } const body = response.body; if (body == null) return /* @__PURE__ */ new Uint8Array(0); const reader = body.getReader(); const chunks = []; let totalBytes = 0; try { while (true) { const { done, value } = await reader.read(); if (done) break; totalBytes += value.length; if (totalBytes > maxBytes) throw new DownloadError({ url, message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes.` }); chunks.push(value); } } finally { try { await reader.cancel(); } finally { reader.releaseLock(); } } const result = new Uint8Array(totalBytes); let offset = 0; for (const chunk of chunks) { result.set(chunk, offset); offset += chunk.length; } return result; } var createIdGenerator = ({ prefix, size = 16, alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", separator = "-" } = {}) => { const generator = () => { const alphabetLength = alphabet.length; const chars = new Array(size); for (let i = 0; i < size; i++) chars[i] = alphabet[Math.random() * alphabetLength | 0]; return chars.join(""); }; if (prefix == null) return generator; if (alphabet.includes(separator)) throw new InvalidArgumentError$1({ argument: "separator", message: `The separator "${separator}" must not be part of the alphabet "${alphabet}".` }); return () => `${prefix}${separator}${generator()}`; }; var generateId = createIdGenerator(); function getErrorMessage(error) { if (error == null) return "unknown error"; if (typeof error === "string") return error; if (error instanceof Error) return error.message; return JSON.stringify(error); } function isAbortError(error) { return (error instanceof Error || error instanceof DOMException) && (error.name === "AbortError" || error.name === "ResponseAborted" || error.name === "TimeoutError"); } var FETCH_FAILED_ERROR_MESSAGES = ["fetch failed", "failed to fetch"]; function handleFetchError({ error, url, requestBodyValues }) { if (isAbortError(error)) return error; if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) { const cause = error.cause; if (cause != null) return new APICallError({ message: `Cannot connect to API: ${cause.message}`, cause, url, requestBodyValues, isRetryable: true }); } return error; } function getRuntimeEnvironmentUserAgent(globalThisAny = globalThis) { var _a2, _b2, _c; if (globalThisAny.window) return `runtime/browser`; if ((_a2 = globalThisAny.navigator) == null ? void 0 : _a2.userAgent) return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`; if ((_c = (_b2 = globalThisAny.process) == null ? void 0 : _b2.versions) == null ? void 0 : _c.node) return `runtime/node.js/${globalThisAny.process.version.substring(0)}`; if (globalThisAny.EdgeRuntime) return `runtime/vercel-edge`; return "runtime/unknown"; } function normalizeHeaders(headers) { if (headers == null) return {}; const normalized = {}; if (headers instanceof Headers) headers.forEach((value, key) => { normalized[key.toLowerCase()] = value; }); else { if (!Array.isArray(headers)) headers = Object.entries(headers); for (const [key, value] of headers) if (value != null) normalized[key.toLowerCase()] = value; } return normalized; } function withUserAgentSuffix(headers, ...userAgentSuffixParts) { const normalizedHeaders = new Headers(normalizeHeaders(headers)); const currentUserAgentHeader = normalizedHeaders.get("user-agent") || ""; normalizedHeaders.set("user-agent", [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(" ")); return Object.fromEntries(normalizedHeaders.entries()); } var VERSION$3 = "3.0.31"; var getOriginalFetch = () => globalThis.fetch; var getFromApi = async ({ url, headers = {}, successfulResponseHandler, failedResponseHandler, abortSignal, fetch = getOriginalFetch() }) => { try { const response = await fetch(url, { method: "GET", headers: withUserAgentSuffix(headers, `ai-sdk/provider-utils/${VERSION$3}`, getRuntimeEnvironmentUserAgent()), signal: abortSignal }); const responseHeaders = extractResponseHeaders(response); if (!response.ok) { let errorInformation; try { errorInformation = await failedResponseHandler({ response, url, requestBodyValues: {} }); } catch (error) { if (isAbortError(error) || APICallError.isInstance(error)) throw error; throw new APICallError({ message: "Failed to process error response", cause: error, statusCode: response.status, url, responseHeaders, requestBodyValues: {} }); } throw errorInformation.value; } try { return await successfulResponseHandler({ response, url, requestBodyValues: {} }); } catch (error) { if (error instanceof Error) { if (isAbortError(error) || APICallError.isInstance(error)) throw error; } throw new APICallError({ message: "Failed to process successful response", cause: error, statusCode: response.status, url, responseHeaders, requestBodyValues: {} }); } } catch (error) { throw handleFetchError({ error, url, requestBodyValues: {} }); } }; function loadOptionalSetting({ settingValue, environmentVariableName }) { if (typeof settingValue === "string") return settingValue; if (settingValue != null || typeof process === "undefined") return; settingValue = process.env[environmentVariableName]; if (settingValue == null || typeof settingValue !== "string") return; return settingValue; } var suspectProtoRx = /"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*:/; var suspectConstructorRx = /"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/; function _parse(text) { const obj = JSON.parse(text); if (obj === null || typeof obj !== "object") return obj; if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) return obj; return filter(obj); } function filter(obj) { let next = [obj]; while (next.length) { const nodes = next; next = []; for (const node of nodes) { if (Object.prototype.hasOwnProperty.call(node, "__proto__")) throw new SyntaxError("Object contains forbidden prototype property"); if (Object.prototype.hasOwnProperty.call(node, "constructor") && node.constructor !== null && typeof node.constructor === "object" && Object.prototype.hasOwnProperty.call(node.constructor, "prototype")) throw new SyntaxError("Object contains forbidden prototype property"); for (const key in node) { const value = node[key]; if (value && typeof value === "object") next.push(value); } } } return obj; } function secureJsonParse(text) { const { stackTraceLimit } = Error; try { Error.stackTraceLimit = 0; } catch (e) { return _parse(text); } try { return _parse(text); } finally { Error.stackTraceLimit = stackTraceLimit; } } var validatorSymbol = /* @__PURE__ */ Symbol.for("vercel.ai.validator"); function validator(validate) { return { [validatorSymbol]: true, validate }; } function isValidator(value) { return typeof value === "object" && value !== null && validatorSymbol in value && value[validatorSymbol] === true && "validate" in value; } function lazyValidator(createValidator) { let validator2; return () => { if (validator2 == null) validator2 = createValidator(); return validator2; }; } function asValidator(value) { return isValidator(value) ? value : "~standard" in value ? standardSchemaValidator(value) : value(); } function standardSchemaValidator(standardSchema) { return validator(async (value) => { const result = await standardSchema["~standard"].validate(value); return result.issues == null ? { success: true, value: result.value } : { success: false, error: new TypeValidationError({ value, cause: result.issues }) }; }); } async function validateTypes({ value, schema }) { const result = await safeValidateTypes({ value, schema }); if (!result.success) throw TypeValidationError.wrap({ value, cause: result.error }); return result.value; } async function safeValidateTypes({ value, schema }) { const validator2 = asValidator(schema); try { if (validator2.validate == null) return { success: true, value, rawValue: value }; const result = await validator2.validate(value); if (result.success) return { success: true, value: result.value, rawValue: value }; return { success: false, error: TypeValidationError.wrap({ value, cause: result.error }), rawValue: value }; } catch (error) { return { success: false, error: TypeValidationError.wrap({ value, cause: error }), rawValue: value }; } } async function parseJSON({ text, schema }) { try { const value = secureJsonParse(text); if (schema == null) return value; return validateTypes({ value, schema }); } catch (error) { if (JSONParseError.isInstance(error) || TypeValidationError.isInstance(error)) throw error; throw new JSONParseError({ text, cause: error }); } } async function safeParseJSON({ text, schema }) { try { const value = secureJsonParse(text); if (schema == null) return { success: true, value, rawValue: value }; return await safeValidateTypes({ value, schema }); } catch (error) { return { success: false, error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error }), rawValue: void 0 }; } } function parseJsonEventStream({ stream, schema }) { return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(new TransformStream({ async transform({ data }, controller) { if (data === "[DONE]") return; controller.enqueue(await safeParseJSON({ text: data, schema })); } })); } var getOriginalFetch2 = () => globalThis.fetch; var postJsonToApi = async ({ url, headers, body, failedResponseHandler, successfulResponseHandler, abortSignal, fetch }) => postToApi({ url, headers: { "Content-Type": "application/json", ...headers }, body: { content: JSON.stringify(body), values: body }, failedResponseHandler, successfulResponseHandler, abortSignal, fetch }); var postToApi = async ({ url, headers = {}, body, successfulResponseHandler, failedResponseHandler, abortSignal, fetch = getOriginalFetch2() }) => { try { const response = await fetch(url, { method: "POST", headers: withUserAgentSuffix(headers, `ai-sdk/provider-utils/${VERSION$3}`, getRuntimeEnvironmentUserAgent()), body: body.content, signal: abortSignal }); const responseHeaders = extractResponseHeaders(response); if (!response.ok) { let errorInformation; try { errorInformation = await failedResponseHandler({ response, url, requestBodyValues: body.values }); } catch (error) { if (isAbortError(error) || APICallError.isInstance(error)) throw error; throw new APICallError({ message: "Failed to process error response", cause: error, statusCode: response.status, url, responseHeaders, requestBodyValues: body.values }); } throw errorInformation.value; } try { return await successfulResponseHandler({ response, url, requestBodyValues: body.values }); } catch (error) { if (error instanceof Error) { if (isAbortError(error) || APICallError.isInstance(error)) throw error; } throw new APICallError({ message: "Failed to process successful response", cause: error, statusCode: response.status, url, responseHeaders, requestBodyValues: body.values }); } } catch (error) { throw handleFetchError({ error, url, requestBodyValues: body.values }); } }; function tool(tool2) { return tool2; } function createProviderDefinedToolFactoryWithOutputSchema({ id, name: name2, inputSchema, outputSchema }) { return ({ execute, toModelOutput, onInputStart, onInputDelta, onInputAvailable, ...args }) => tool({ type: "provider-defined", id, name: name2, args, inputSchema, outputSchema, execute, toModelOutput, onInputStart, onInputDelta, onInputAvailable }); } async function resolve(value) { if (typeof value === "function") value = value(); return Promise.resolve(value); } var textDecoder = new TextDecoder(); async function readResponseBodyAsText({ response, url }) { return textDecoder.decode(await readResponseWithSizeLimit({ response, url })); } var createJsonErrorResponseHandler = ({ errorSchema, errorToMessage, isRetryable }) => async ({ response, url, requestBodyValues }) => { const responseBody = await readResponseBodyAsText({ response, url }); const responseHeaders = extractResponseHeaders(response); if (responseBody.trim() === "") return { responseHeaders, value: new APICallError({ message: response.statusText, url, requestBodyValues, statusCode: response.status, responseHeaders, responseBody, isRetryable: isRetryable == null ? void 0 : isRetryable(response) }) }; try { const parsedError = await parseJSON({ text: responseBody, schema: errorSchema }); return { responseHeaders, value: new APICallError({ message: errorToMessage(parsedError), url, requestBodyValues, statusCode: response.status, responseHeaders, responseBody, data: parsedError, isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError) }) }; } catch (parseError) { return { responseHeaders, value: new APICallError({ message: response.statusText, url, requestBodyValues, statusCode: response.status, responseHeaders, responseBody, isRetryable: isRetryable == null ? void 0 : isRetryable(response) }) }; } }; var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => { const responseHeaders = extractResponseHeaders(response); if (response.body == null) throw new EmptyResponseBodyError({}); return { responseHeaders, value: parseJsonEventStream({ stream: response.body, schema: chunkSchema }) }; }; var createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => { const responseBody = await readResponseBodyAsText({ response, url }); const parsedResult = await safeParseJSON({ text: responseBody, schema: responseSchema }); const responseHeaders = extractResponseHeaders(response); if (!parsedResult.success) throw new APICallError({ message: "Invalid JSON response", cause: parsedResult.error, statusCode: response.status, responseHeaders, responseBody, url, requestBodyValues }); return { responseHeaders, value: parsedResult.value, rawValue: parsedResult.rawValue }; }; var schemaSymbol = /* @__PURE__ */ Symbol.for("vercel.ai.schema"); function lazySchema(createSchema) { let schema; return () => { if (schema == null) schema = createSchema(); return schema; }; } function jsonSchema(jsonSchema2, { validate } = {}) { return { [schemaSymbol]: true, _type: void 0, [validatorSymbol]: true, get jsonSchema() { if (typeof jsonSchema2 === "function") jsonSchema2 = jsonSchema2(); return jsonSchema2; }, validate }; } function addAdditionalPropertiesToJsonSchema(jsonSchema2) { if (jsonSchema2.type === "object") { jsonSchema2.additionalProperties = false; const properties = jsonSchema2.properties; if (properties != null) for (const property in properties) properties[property] = addAdditionalPropertiesToJsonSchema(properties[property]); } if (jsonSchema2.type === "array" && jsonSchema2.items != null) if (Array.isArray(jsonSchema2.items)) jsonSchema2.items = jsonSchema2.items.map((item) => addAdditionalPropertiesToJsonSchema(item)); else jsonSchema2.items = addAdditionalPropertiesToJsonSchema(jsonSchema2.items); return jsonSchema2; } var ignoreOverride = /* @__PURE__ */ Symbol("Let zodToJsonSchema decide on which parser to use"); var defaultOptions = { name: void 0, $refStrategy: "root", basePath: ["#"], effectStrategy: "input", pipeStrategy: "all", dateStrategy: "format:date-time", mapStrategy: "entries", removeAdditionalStrategy: "passthrough", allowedAdditionalProperties: true, rejectedAdditionalProperties: false, definitionPath: "definitions", strictUnions: false, definitions: {}, errorMessages: false, patternStrategy: "escape", applyRegexFlags: false, emailStrategy: "format:email", base64Strategy: "contentEncoding:base64", nameStrategy: "ref" }; var getDefaultOptions = (options) => typeof options === "string" ? { ...defaultOptions, name: options } : { ...defaultOptions, ...options }; function parseAnyDef() { return {}; } function parseArrayDef(def, refs) { var _a2, _b2, _c; const res = { type: "array" }; if (((_a2 = def.type) == null ? void 0 : _a2._def) && ((_c = (_b2 = def.type) == null ? void 0 : _b2._def) == null ? void 0 : _c.typeName) !== ZodFirstPartyTypeKind.ZodAny) res.items = parseDef(def.type._def, { ...refs, currentPath: [...refs.currentPath, "items"] }); if (def.minLength) res.minItems = def.minLength.value; if (def.maxLength) res.maxItems = def.maxLength.value; if (def.exactLength) { res.minItems = def.exactLength.value; res.maxItems = def.exactLength.value; } return res; } function parseBigintDef(def) { const res = { type: "integer", format: "int64" }; if (!def.checks) return res; for (const check of def.checks) switch (check.kind) { case "min": if (check.inclusive) res.minimum = check.value; else res.exclusiveMinimum = check.value; break; case "max": if (check.inclusive) res.maximum = check.value; else res.exclusiveMaximum = check.value; break; case "multipleOf": res.multipleOf = check.value; break; } return res; } function parseBooleanDef() { return { type: "boolean" }; } function parseBrandedDef(_def, refs) { return parseDef(_def.type._def, refs); } var parseCatchDef = (def, refs) => { return parseDef(def.innerType._def, refs); }; function parseDateDef(def, refs, overrideDateStrategy) { const strategy = overrideDateStrategy != null ? overrideDateStrategy : refs.dateStrategy; if (Array.isArray(strategy)) return { anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)) }; switch (strategy) { case "string": case "format:date-time": return { type: "string", format: "date-time" }; case "format:date": return { type: "string", format: "date" }; case "integer": return integerDateParser(def); } } var integerDateParser = (def) => { const res = { type: "integer", format: "unix-time" }; for (const check of def.checks) switch (check.kind) { case "min": res.minimum = check.value; break; case "max": res.maximum = check.value; break; } return res; }; function parseDefaultDef(_def, refs) { return { ...parseDef(_def.innerType._def, refs), default: _def.defaultValue() }; } function parseEffectsDef(_def, refs) { return refs.effectStrategy === "input" ? parseDef(_def.schema._def, refs) : parseAnyDef(); } function parseEnumDef(def) { return { type: "string", enum: Array.from(def.values) }; } var isJsonSchema7AllOfType = (type) => { if ("type" in type && type.type === "string") return false; return "allOf" in type; }; function parseIntersectionDef(def, refs) { const allOf = [parseDef(def.left._def, { ...refs, currentPath: [ ...refs.currentPath, "allOf", "0" ] }), parseDef(def.right._def, { ...refs, currentPath: [ ...refs.currentPath, "allOf", "1" ] })].filter((x) => !!x); const mergedAllOf = []; allOf.forEach((schema) => { if (isJsonSchema7AllOfType(schema)) mergedAllOf.push(...schema.allOf); else { let nestedSchema = schema; if ("additionalProperties" in schema && schema.additionalProperties === false) { const { additionalProperties, ...rest } = schema; nestedSchema = rest; } mergedAllOf.push(nestedSchema); } }); return mergedAllOf.length ? { allOf: mergedAllOf } : void 0; } function parseLiteralDef(def) { const parsedType = typeof def.value; if (parsedType !== "bigint" && parsedType !== "number" && parsedType !== "boolean" && parsedType !== "string") return { type: Array.isArray(def.value) ? "array" : "object" }; return { type: parsedType === "bigint" ? "integer" : parsedType, const: def.value }; } var emojiRegex = void 0; var zodPatterns = { /** * `c` was changed to `[cC]` to replicate /i flag */ cuid: /^[cC][^\s-]{8,}$/, cuid2: /^[0-9a-z]+$/, ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/, /** * `a-z` was added to replicate /i flag */ email: /^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/, /** * Constructed a valid Unicode RegExp * * Lazily instantiate since this type of regex isn't supported * in all envs (e.g. React Native). * * See: * https://github.com/colinhacks/zod/issues/2433 * Fix in Zod: * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b */ emoji: () => { if (emojiRegex === void 0) emojiRegex = RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$", "u"); return emojiRegex; }, /** * Unused */ uuid: /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/, /** * Unused */ ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/, ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/, /** * Unused */ ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/, ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/, base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/, base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/, nanoid: /^[a-zA-Z0-9_-]{21}$/, jwt: /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/ }; function parseStringDef(def, refs) { const res = { type: "string" }; if (def.checks) for (const check of def.checks) switch (check.kind) { case "min": res.minLength = typeof res.minLength === "number" ?