d18ada4ee7
Docker Publish / docker (web, apps/web/Dockerfile, web) (push) Failing after 0s
Docker Publish / docker (api, apps/api/Dockerfile, api) (push) Failing after 1s
Publish Extension / detect-version (push) Has been skipped
Publish Extension / submit (push) Has been cancelled
27549 lines
1003 KiB
JavaScript
27549 lines
1003 KiB
JavaScript
#!/usr/bin/env node
|
|
// @vidbee/cli — standalone build (NEX-148). Built by scripts/build.mjs.
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __esm = (fn, res) => function __init() {
|
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
};
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
|
|
// ../../packages/task-queue/src/types.ts
|
|
var TERMINAL_STATUSES, PRIORITY_USER, PRIORITY_SUBSCRIPTION, PRIORITY_BACKGROUND, EMPTY_PROGRESS;
|
|
var init_types = __esm({
|
|
"../../packages/task-queue/src/types.ts"() {
|
|
"use strict";
|
|
TERMINAL_STATUSES = /* @__PURE__ */ new Set([
|
|
"completed",
|
|
"failed",
|
|
"cancelled"
|
|
]);
|
|
PRIORITY_USER = 0;
|
|
PRIORITY_SUBSCRIPTION = 10;
|
|
PRIORITY_BACKGROUND = 20;
|
|
EMPTY_PROGRESS = {
|
|
percent: null,
|
|
bytesDownloaded: null,
|
|
bytesTotal: null,
|
|
speedBps: null,
|
|
etaMs: null,
|
|
ticks: 0
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js
|
|
// @__NO_SIDE_EFFECTS__
|
|
function $constructor(name, initializer3, params) {
|
|
function init(inst, def) {
|
|
if (!inst._zod) {
|
|
Object.defineProperty(inst, "_zod", {
|
|
value: {
|
|
def,
|
|
constr: _,
|
|
traits: /* @__PURE__ */ new Set()
|
|
},
|
|
enumerable: false
|
|
});
|
|
}
|
|
if (inst._zod.traits.has(name)) {
|
|
return;
|
|
}
|
|
inst._zod.traits.add(name);
|
|
initializer3(inst, def);
|
|
const proto = _.prototype;
|
|
const keys = Object.keys(proto);
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const k = keys[i];
|
|
if (!(k in inst)) {
|
|
inst[k] = proto[k].bind(inst);
|
|
}
|
|
}
|
|
}
|
|
const Parent = params?.Parent ?? Object;
|
|
class Definition extends Parent {
|
|
}
|
|
Object.defineProperty(Definition, "name", { value: name });
|
|
function _(def) {
|
|
var _a2;
|
|
const inst = params?.Parent ? new Definition() : this;
|
|
init(inst, def);
|
|
(_a2 = inst._zod).deferred ?? (_a2.deferred = []);
|
|
for (const fn of inst._zod.deferred) {
|
|
fn();
|
|
}
|
|
return inst;
|
|
}
|
|
Object.defineProperty(_, "init", { value: init });
|
|
Object.defineProperty(_, Symbol.hasInstance, {
|
|
value: (inst) => {
|
|
if (params?.Parent && inst instanceof params.Parent)
|
|
return true;
|
|
return inst?._zod?.traits?.has(name);
|
|
}
|
|
});
|
|
Object.defineProperty(_, "name", { value: name });
|
|
return _;
|
|
}
|
|
function config(newConfig) {
|
|
if (newConfig)
|
|
Object.assign(globalConfig, newConfig);
|
|
return globalConfig;
|
|
}
|
|
var NEVER, $brand, $ZodAsyncError, $ZodEncodeError, globalConfig;
|
|
var init_core = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js"() {
|
|
NEVER = Object.freeze({
|
|
status: "aborted"
|
|
});
|
|
$brand = Symbol("zod_brand");
|
|
$ZodAsyncError = class extends Error {
|
|
constructor() {
|
|
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
|
|
}
|
|
};
|
|
$ZodEncodeError = class extends Error {
|
|
constructor(name) {
|
|
super(`Encountered unidirectional transform during encode: ${name}`);
|
|
this.name = "ZodEncodeError";
|
|
}
|
|
};
|
|
globalConfig = {};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js
|
|
var util_exports = {};
|
|
__export(util_exports, {
|
|
BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES,
|
|
Class: () => Class,
|
|
NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES,
|
|
aborted: () => aborted,
|
|
allowsEval: () => allowsEval,
|
|
assert: () => assert,
|
|
assertEqual: () => assertEqual,
|
|
assertIs: () => assertIs,
|
|
assertNever: () => assertNever,
|
|
assertNotEqual: () => assertNotEqual,
|
|
assignProp: () => assignProp,
|
|
base64ToUint8Array: () => base64ToUint8Array,
|
|
base64urlToUint8Array: () => base64urlToUint8Array,
|
|
cached: () => cached,
|
|
captureStackTrace: () => captureStackTrace,
|
|
cleanEnum: () => cleanEnum,
|
|
cleanRegex: () => cleanRegex,
|
|
clone: () => clone,
|
|
cloneDef: () => cloneDef,
|
|
createTransparentProxy: () => createTransparentProxy,
|
|
defineLazy: () => defineLazy,
|
|
esc: () => esc,
|
|
escapeRegex: () => escapeRegex,
|
|
extend: () => extend,
|
|
finalizeIssue: () => finalizeIssue,
|
|
floatSafeRemainder: () => floatSafeRemainder,
|
|
getElementAtPath: () => getElementAtPath,
|
|
getEnumValues: () => getEnumValues,
|
|
getLengthableOrigin: () => getLengthableOrigin,
|
|
getParsedType: () => getParsedType,
|
|
getSizableOrigin: () => getSizableOrigin,
|
|
hexToUint8Array: () => hexToUint8Array,
|
|
isObject: () => isObject,
|
|
isPlainObject: () => isPlainObject,
|
|
issue: () => issue,
|
|
joinValues: () => joinValues,
|
|
jsonStringifyReplacer: () => jsonStringifyReplacer,
|
|
merge: () => merge,
|
|
mergeDefs: () => mergeDefs,
|
|
normalizeParams: () => normalizeParams,
|
|
nullish: () => nullish,
|
|
numKeys: () => numKeys,
|
|
objectClone: () => objectClone,
|
|
omit: () => omit,
|
|
optionalKeys: () => optionalKeys,
|
|
parsedType: () => parsedType,
|
|
partial: () => partial,
|
|
pick: () => pick,
|
|
prefixIssues: () => prefixIssues,
|
|
primitiveTypes: () => primitiveTypes,
|
|
promiseAllObject: () => promiseAllObject,
|
|
propertyKeyTypes: () => propertyKeyTypes,
|
|
randomString: () => randomString,
|
|
required: () => required,
|
|
safeExtend: () => safeExtend,
|
|
shallowClone: () => shallowClone,
|
|
slugify: () => slugify,
|
|
stringifyPrimitive: () => stringifyPrimitive,
|
|
uint8ArrayToBase64: () => uint8ArrayToBase64,
|
|
uint8ArrayToBase64url: () => uint8ArrayToBase64url,
|
|
uint8ArrayToHex: () => uint8ArrayToHex,
|
|
unwrapMessage: () => unwrapMessage
|
|
});
|
|
function assertEqual(val) {
|
|
return val;
|
|
}
|
|
function assertNotEqual(val) {
|
|
return val;
|
|
}
|
|
function assertIs(_arg) {
|
|
}
|
|
function assertNever(_x) {
|
|
throw new Error("Unexpected value in exhaustive check");
|
|
}
|
|
function assert(_) {
|
|
}
|
|
function getEnumValues(entries) {
|
|
const numericValues = Object.values(entries).filter((v) => typeof v === "number");
|
|
const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
|
|
return values;
|
|
}
|
|
function joinValues(array2, separator = "|") {
|
|
return array2.map((val) => stringifyPrimitive(val)).join(separator);
|
|
}
|
|
function jsonStringifyReplacer(_, value2) {
|
|
if (typeof value2 === "bigint")
|
|
return value2.toString();
|
|
return value2;
|
|
}
|
|
function cached(getter) {
|
|
const set2 = false;
|
|
return {
|
|
get value() {
|
|
if (!set2) {
|
|
const value2 = getter();
|
|
Object.defineProperty(this, "value", { value: value2 });
|
|
return value2;
|
|
}
|
|
throw new Error("cached value already set");
|
|
}
|
|
};
|
|
}
|
|
function nullish(input) {
|
|
return input === null || input === void 0;
|
|
}
|
|
function cleanRegex(source) {
|
|
const start = source.startsWith("^") ? 1 : 0;
|
|
const end = source.endsWith("$") ? source.length - 1 : source.length;
|
|
return source.slice(start, end);
|
|
}
|
|
function floatSafeRemainder(val, step) {
|
|
const valDecCount = (val.toString().split(".")[1] || "").length;
|
|
const stepString = step.toString();
|
|
let stepDecCount = (stepString.split(".")[1] || "").length;
|
|
if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) {
|
|
const match = stepString.match(/\d?e-(\d?)/);
|
|
if (match?.[1]) {
|
|
stepDecCount = Number.parseInt(match[1]);
|
|
}
|
|
}
|
|
const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
|
|
const valInt = Number.parseInt(val.toFixed(decCount).replace(".", ""));
|
|
const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
|
|
return valInt % stepInt / 10 ** decCount;
|
|
}
|
|
function defineLazy(object2, key, getter) {
|
|
let value2 = void 0;
|
|
Object.defineProperty(object2, key, {
|
|
get() {
|
|
if (value2 === EVALUATING) {
|
|
return void 0;
|
|
}
|
|
if (value2 === void 0) {
|
|
value2 = EVALUATING;
|
|
value2 = getter();
|
|
}
|
|
return value2;
|
|
},
|
|
set(v) {
|
|
Object.defineProperty(object2, key, {
|
|
value: v
|
|
// configurable: true,
|
|
});
|
|
},
|
|
configurable: true
|
|
});
|
|
}
|
|
function objectClone(obj) {
|
|
return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
|
|
}
|
|
function assignProp(target, prop, value2) {
|
|
Object.defineProperty(target, prop, {
|
|
value: value2,
|
|
writable: true,
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
}
|
|
function mergeDefs(...defs) {
|
|
const mergedDescriptors = {};
|
|
for (const def of defs) {
|
|
const descriptors = Object.getOwnPropertyDescriptors(def);
|
|
Object.assign(mergedDescriptors, descriptors);
|
|
}
|
|
return Object.defineProperties({}, mergedDescriptors);
|
|
}
|
|
function cloneDef(schema) {
|
|
return mergeDefs(schema._zod.def);
|
|
}
|
|
function getElementAtPath(obj, path3) {
|
|
if (!path3)
|
|
return obj;
|
|
return path3.reduce((acc, key) => acc?.[key], obj);
|
|
}
|
|
function promiseAllObject(promisesObj) {
|
|
const keys = Object.keys(promisesObj);
|
|
const promises = keys.map((key) => promisesObj[key]);
|
|
return Promise.all(promises).then((results) => {
|
|
const resolvedObj = {};
|
|
for (let i = 0; i < keys.length; i++) {
|
|
resolvedObj[keys[i]] = results[i];
|
|
}
|
|
return resolvedObj;
|
|
});
|
|
}
|
|
function randomString(length = 10) {
|
|
const chars = "abcdefghijklmnopqrstuvwxyz";
|
|
let str = "";
|
|
for (let i = 0; i < length; i++) {
|
|
str += chars[Math.floor(Math.random() * chars.length)];
|
|
}
|
|
return str;
|
|
}
|
|
function esc(str) {
|
|
return JSON.stringify(str);
|
|
}
|
|
function slugify(input) {
|
|
return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
}
|
|
function isObject(data) {
|
|
return typeof data === "object" && data !== null && !Array.isArray(data);
|
|
}
|
|
function isPlainObject(o) {
|
|
if (isObject(o) === false)
|
|
return false;
|
|
const ctor = o.constructor;
|
|
if (ctor === void 0)
|
|
return true;
|
|
if (typeof ctor !== "function")
|
|
return true;
|
|
const prot = ctor.prototype;
|
|
if (isObject(prot) === false)
|
|
return false;
|
|
if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function shallowClone(o) {
|
|
if (isPlainObject(o))
|
|
return { ...o };
|
|
if (Array.isArray(o))
|
|
return [...o];
|
|
return o;
|
|
}
|
|
function numKeys(data) {
|
|
let keyCount = 0;
|
|
for (const key in data) {
|
|
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
keyCount++;
|
|
}
|
|
}
|
|
return keyCount;
|
|
}
|
|
function escapeRegex(str) {
|
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
}
|
|
function clone(inst, def, params) {
|
|
const cl = new inst._zod.constr(def ?? inst._zod.def);
|
|
if (!def || params?.parent)
|
|
cl._zod.parent = inst;
|
|
return cl;
|
|
}
|
|
function normalizeParams(_params) {
|
|
const params = _params;
|
|
if (!params)
|
|
return {};
|
|
if (typeof params === "string")
|
|
return { error: () => params };
|
|
if (params?.message !== void 0) {
|
|
if (params?.error !== void 0)
|
|
throw new Error("Cannot specify both `message` and `error` params");
|
|
params.error = params.message;
|
|
}
|
|
delete params.message;
|
|
if (typeof params.error === "string")
|
|
return { ...params, error: () => params.error };
|
|
return params;
|
|
}
|
|
function createTransparentProxy(getter) {
|
|
let target;
|
|
return new Proxy({}, {
|
|
get(_, prop, receiver) {
|
|
target ?? (target = getter());
|
|
return Reflect.get(target, prop, receiver);
|
|
},
|
|
set(_, prop, value2, receiver) {
|
|
target ?? (target = getter());
|
|
return Reflect.set(target, prop, value2, receiver);
|
|
},
|
|
has(_, prop) {
|
|
target ?? (target = getter());
|
|
return Reflect.has(target, prop);
|
|
},
|
|
deleteProperty(_, prop) {
|
|
target ?? (target = getter());
|
|
return Reflect.deleteProperty(target, prop);
|
|
},
|
|
ownKeys(_) {
|
|
target ?? (target = getter());
|
|
return Reflect.ownKeys(target);
|
|
},
|
|
getOwnPropertyDescriptor(_, prop) {
|
|
target ?? (target = getter());
|
|
return Reflect.getOwnPropertyDescriptor(target, prop);
|
|
},
|
|
defineProperty(_, prop, descriptor) {
|
|
target ?? (target = getter());
|
|
return Reflect.defineProperty(target, prop, descriptor);
|
|
}
|
|
});
|
|
}
|
|
function stringifyPrimitive(value2) {
|
|
if (typeof value2 === "bigint")
|
|
return value2.toString() + "n";
|
|
if (typeof value2 === "string")
|
|
return `"${value2}"`;
|
|
return `${value2}`;
|
|
}
|
|
function optionalKeys(shape) {
|
|
return Object.keys(shape).filter((k) => {
|
|
return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional";
|
|
});
|
|
}
|
|
function pick(schema, mask) {
|
|
const currDef = schema._zod.def;
|
|
const checks = currDef.checks;
|
|
const hasChecks = checks && checks.length > 0;
|
|
if (hasChecks) {
|
|
throw new Error(".pick() cannot be used on object schemas containing refinements");
|
|
}
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const newShape = {};
|
|
for (const key in mask) {
|
|
if (!(key in currDef.shape)) {
|
|
throw new Error(`Unrecognized key: "${key}"`);
|
|
}
|
|
if (!mask[key])
|
|
continue;
|
|
newShape[key] = currDef.shape[key];
|
|
}
|
|
assignProp(this, "shape", newShape);
|
|
return newShape;
|
|
},
|
|
checks: []
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function omit(schema, mask) {
|
|
const currDef = schema._zod.def;
|
|
const checks = currDef.checks;
|
|
const hasChecks = checks && checks.length > 0;
|
|
if (hasChecks) {
|
|
throw new Error(".omit() cannot be used on object schemas containing refinements");
|
|
}
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const newShape = { ...schema._zod.def.shape };
|
|
for (const key in mask) {
|
|
if (!(key in currDef.shape)) {
|
|
throw new Error(`Unrecognized key: "${key}"`);
|
|
}
|
|
if (!mask[key])
|
|
continue;
|
|
delete newShape[key];
|
|
}
|
|
assignProp(this, "shape", newShape);
|
|
return newShape;
|
|
},
|
|
checks: []
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function extend(schema, shape) {
|
|
if (!isPlainObject(shape)) {
|
|
throw new Error("Invalid input to extend: expected a plain object");
|
|
}
|
|
const checks = schema._zod.def.checks;
|
|
const hasChecks = checks && checks.length > 0;
|
|
if (hasChecks) {
|
|
const existingShape = schema._zod.def.shape;
|
|
for (const key in shape) {
|
|
if (Object.getOwnPropertyDescriptor(existingShape, key) !== void 0) {
|
|
throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
|
|
}
|
|
}
|
|
}
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const _shape = { ...schema._zod.def.shape, ...shape };
|
|
assignProp(this, "shape", _shape);
|
|
return _shape;
|
|
}
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function safeExtend(schema, shape) {
|
|
if (!isPlainObject(shape)) {
|
|
throw new Error("Invalid input to safeExtend: expected a plain object");
|
|
}
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const _shape = { ...schema._zod.def.shape, ...shape };
|
|
assignProp(this, "shape", _shape);
|
|
return _shape;
|
|
}
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function merge(a, b) {
|
|
const def = mergeDefs(a._zod.def, {
|
|
get shape() {
|
|
const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };
|
|
assignProp(this, "shape", _shape);
|
|
return _shape;
|
|
},
|
|
get catchall() {
|
|
return b._zod.def.catchall;
|
|
},
|
|
checks: []
|
|
// delete existing checks
|
|
});
|
|
return clone(a, def);
|
|
}
|
|
function partial(Class2, schema, mask) {
|
|
const currDef = schema._zod.def;
|
|
const checks = currDef.checks;
|
|
const hasChecks = checks && checks.length > 0;
|
|
if (hasChecks) {
|
|
throw new Error(".partial() cannot be used on object schemas containing refinements");
|
|
}
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const oldShape = schema._zod.def.shape;
|
|
const shape = { ...oldShape };
|
|
if (mask) {
|
|
for (const key in mask) {
|
|
if (!(key in oldShape)) {
|
|
throw new Error(`Unrecognized key: "${key}"`);
|
|
}
|
|
if (!mask[key])
|
|
continue;
|
|
shape[key] = Class2 ? new Class2({
|
|
type: "optional",
|
|
innerType: oldShape[key]
|
|
}) : oldShape[key];
|
|
}
|
|
} else {
|
|
for (const key in oldShape) {
|
|
shape[key] = Class2 ? new Class2({
|
|
type: "optional",
|
|
innerType: oldShape[key]
|
|
}) : oldShape[key];
|
|
}
|
|
}
|
|
assignProp(this, "shape", shape);
|
|
return shape;
|
|
},
|
|
checks: []
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function required(Class2, schema, mask) {
|
|
const def = mergeDefs(schema._zod.def, {
|
|
get shape() {
|
|
const oldShape = schema._zod.def.shape;
|
|
const shape = { ...oldShape };
|
|
if (mask) {
|
|
for (const key in mask) {
|
|
if (!(key in shape)) {
|
|
throw new Error(`Unrecognized key: "${key}"`);
|
|
}
|
|
if (!mask[key])
|
|
continue;
|
|
shape[key] = new Class2({
|
|
type: "nonoptional",
|
|
innerType: oldShape[key]
|
|
});
|
|
}
|
|
} else {
|
|
for (const key in oldShape) {
|
|
shape[key] = new Class2({
|
|
type: "nonoptional",
|
|
innerType: oldShape[key]
|
|
});
|
|
}
|
|
}
|
|
assignProp(this, "shape", shape);
|
|
return shape;
|
|
}
|
|
});
|
|
return clone(schema, def);
|
|
}
|
|
function aborted(x, startIndex = 0) {
|
|
if (x.aborted === true)
|
|
return true;
|
|
for (let i = startIndex; i < x.issues.length; i++) {
|
|
if (x.issues[i]?.continue !== true) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function prefixIssues(path3, issues) {
|
|
return issues.map((iss) => {
|
|
var _a2;
|
|
(_a2 = iss).path ?? (_a2.path = []);
|
|
iss.path.unshift(path3);
|
|
return iss;
|
|
});
|
|
}
|
|
function unwrapMessage(message) {
|
|
return typeof message === "string" ? message : message?.message;
|
|
}
|
|
function finalizeIssue(iss, ctx, config2) {
|
|
const full = { ...iss, path: iss.path ?? [] };
|
|
if (!iss.message) {
|
|
const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input";
|
|
full.message = message;
|
|
}
|
|
delete full.inst;
|
|
delete full.continue;
|
|
if (!ctx?.reportInput) {
|
|
delete full.input;
|
|
}
|
|
return full;
|
|
}
|
|
function getSizableOrigin(input) {
|
|
if (input instanceof Set)
|
|
return "set";
|
|
if (input instanceof Map)
|
|
return "map";
|
|
if (input instanceof File)
|
|
return "file";
|
|
return "unknown";
|
|
}
|
|
function getLengthableOrigin(input) {
|
|
if (Array.isArray(input))
|
|
return "array";
|
|
if (typeof input === "string")
|
|
return "string";
|
|
return "unknown";
|
|
}
|
|
function parsedType(data) {
|
|
const t = typeof data;
|
|
switch (t) {
|
|
case "number": {
|
|
return Number.isNaN(data) ? "nan" : "number";
|
|
}
|
|
case "object": {
|
|
if (data === null) {
|
|
return "null";
|
|
}
|
|
if (Array.isArray(data)) {
|
|
return "array";
|
|
}
|
|
const obj = data;
|
|
if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) {
|
|
return obj.constructor.name;
|
|
}
|
|
}
|
|
}
|
|
return t;
|
|
}
|
|
function issue(...args) {
|
|
const [iss, input, inst] = args;
|
|
if (typeof iss === "string") {
|
|
return {
|
|
message: iss,
|
|
code: "custom",
|
|
input,
|
|
inst
|
|
};
|
|
}
|
|
return { ...iss };
|
|
}
|
|
function cleanEnum(obj) {
|
|
return Object.entries(obj).filter(([k, _]) => {
|
|
return Number.isNaN(Number.parseInt(k, 10));
|
|
}).map((el) => el[1]);
|
|
}
|
|
function base64ToUint8Array(base643) {
|
|
const binaryString = atob(base643);
|
|
const bytes = new Uint8Array(binaryString.length);
|
|
for (let i = 0; i < binaryString.length; i++) {
|
|
bytes[i] = binaryString.charCodeAt(i);
|
|
}
|
|
return bytes;
|
|
}
|
|
function uint8ArrayToBase64(bytes) {
|
|
let binaryString = "";
|
|
for (let i = 0; i < bytes.length; i++) {
|
|
binaryString += String.fromCharCode(bytes[i]);
|
|
}
|
|
return btoa(binaryString);
|
|
}
|
|
function base64urlToUint8Array(base64url3) {
|
|
const base643 = base64url3.replace(/-/g, "+").replace(/_/g, "/");
|
|
const padding = "=".repeat((4 - base643.length % 4) % 4);
|
|
return base64ToUint8Array(base643 + padding);
|
|
}
|
|
function uint8ArrayToBase64url(bytes) {
|
|
return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
}
|
|
function hexToUint8Array(hex3) {
|
|
const cleanHex = hex3.replace(/^0x/, "");
|
|
if (cleanHex.length % 2 !== 0) {
|
|
throw new Error("Invalid hex string length");
|
|
}
|
|
const bytes = new Uint8Array(cleanHex.length / 2);
|
|
for (let i = 0; i < cleanHex.length; i += 2) {
|
|
bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);
|
|
}
|
|
return bytes;
|
|
}
|
|
function uint8ArrayToHex(bytes) {
|
|
return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
}
|
|
var EVALUATING, captureStackTrace, allowsEval, getParsedType, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES, Class;
|
|
var init_util = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js"() {
|
|
EVALUATING = Symbol("evaluating");
|
|
captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {
|
|
};
|
|
allowsEval = cached(() => {
|
|
if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) {
|
|
return false;
|
|
}
|
|
try {
|
|
const F = Function;
|
|
new F("");
|
|
return true;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
});
|
|
getParsedType = (data) => {
|
|
const t = typeof data;
|
|
switch (t) {
|
|
case "undefined":
|
|
return "undefined";
|
|
case "string":
|
|
return "string";
|
|
case "number":
|
|
return Number.isNaN(data) ? "nan" : "number";
|
|
case "boolean":
|
|
return "boolean";
|
|
case "function":
|
|
return "function";
|
|
case "bigint":
|
|
return "bigint";
|
|
case "symbol":
|
|
return "symbol";
|
|
case "object":
|
|
if (Array.isArray(data)) {
|
|
return "array";
|
|
}
|
|
if (data === null) {
|
|
return "null";
|
|
}
|
|
if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
|
|
return "promise";
|
|
}
|
|
if (typeof Map !== "undefined" && data instanceof Map) {
|
|
return "map";
|
|
}
|
|
if (typeof Set !== "undefined" && data instanceof Set) {
|
|
return "set";
|
|
}
|
|
if (typeof Date !== "undefined" && data instanceof Date) {
|
|
return "date";
|
|
}
|
|
if (typeof File !== "undefined" && data instanceof File) {
|
|
return "file";
|
|
}
|
|
return "object";
|
|
default:
|
|
throw new Error(`Unknown data type: ${t}`);
|
|
}
|
|
};
|
|
propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]);
|
|
primitiveTypes = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]);
|
|
NUMBER_FORMAT_RANGES = {
|
|
safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
|
|
int32: [-2147483648, 2147483647],
|
|
uint32: [0, 4294967295],
|
|
float32: [-34028234663852886e22, 34028234663852886e22],
|
|
float64: [-Number.MAX_VALUE, Number.MAX_VALUE]
|
|
};
|
|
BIGINT_FORMAT_RANGES = {
|
|
int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")],
|
|
uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")]
|
|
};
|
|
Class = class {
|
|
constructor(..._args) {
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js
|
|
function flattenError(error48, mapper = (issue2) => issue2.message) {
|
|
const fieldErrors = {};
|
|
const formErrors = [];
|
|
for (const sub of error48.issues) {
|
|
if (sub.path.length > 0) {
|
|
fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
|
|
fieldErrors[sub.path[0]].push(mapper(sub));
|
|
} else {
|
|
formErrors.push(mapper(sub));
|
|
}
|
|
}
|
|
return { formErrors, fieldErrors };
|
|
}
|
|
function formatError(error48, mapper = (issue2) => issue2.message) {
|
|
const fieldErrors = { _errors: [] };
|
|
const processError = (error49) => {
|
|
for (const issue2 of error49.issues) {
|
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
issue2.errors.map((issues) => processError({ issues }));
|
|
} else if (issue2.code === "invalid_key") {
|
|
processError({ issues: issue2.issues });
|
|
} else if (issue2.code === "invalid_element") {
|
|
processError({ issues: issue2.issues });
|
|
} else if (issue2.path.length === 0) {
|
|
fieldErrors._errors.push(mapper(issue2));
|
|
} else {
|
|
let curr = fieldErrors;
|
|
let i = 0;
|
|
while (i < issue2.path.length) {
|
|
const el = issue2.path[i];
|
|
const terminal = i === issue2.path.length - 1;
|
|
if (!terminal) {
|
|
curr[el] = curr[el] || { _errors: [] };
|
|
} else {
|
|
curr[el] = curr[el] || { _errors: [] };
|
|
curr[el]._errors.push(mapper(issue2));
|
|
}
|
|
curr = curr[el];
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
processError(error48);
|
|
return fieldErrors;
|
|
}
|
|
function treeifyError(error48, mapper = (issue2) => issue2.message) {
|
|
const result = { errors: [] };
|
|
const processError = (error49, path3 = []) => {
|
|
var _a2, _b;
|
|
for (const issue2 of error49.issues) {
|
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
issue2.errors.map((issues) => processError({ issues }, issue2.path));
|
|
} else if (issue2.code === "invalid_key") {
|
|
processError({ issues: issue2.issues }, issue2.path);
|
|
} else if (issue2.code === "invalid_element") {
|
|
processError({ issues: issue2.issues }, issue2.path);
|
|
} else {
|
|
const fullpath = [...path3, ...issue2.path];
|
|
if (fullpath.length === 0) {
|
|
result.errors.push(mapper(issue2));
|
|
continue;
|
|
}
|
|
let curr = result;
|
|
let i = 0;
|
|
while (i < fullpath.length) {
|
|
const el = fullpath[i];
|
|
const terminal = i === fullpath.length - 1;
|
|
if (typeof el === "string") {
|
|
curr.properties ?? (curr.properties = {});
|
|
(_a2 = curr.properties)[el] ?? (_a2[el] = { errors: [] });
|
|
curr = curr.properties[el];
|
|
} else {
|
|
curr.items ?? (curr.items = []);
|
|
(_b = curr.items)[el] ?? (_b[el] = { errors: [] });
|
|
curr = curr.items[el];
|
|
}
|
|
if (terminal) {
|
|
curr.errors.push(mapper(issue2));
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
processError(error48);
|
|
return result;
|
|
}
|
|
function toDotPath(_path) {
|
|
const segs = [];
|
|
const path3 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
|
|
for (const seg of path3) {
|
|
if (typeof seg === "number")
|
|
segs.push(`[${seg}]`);
|
|
else if (typeof seg === "symbol")
|
|
segs.push(`[${JSON.stringify(String(seg))}]`);
|
|
else if (/[^\w$]/.test(seg))
|
|
segs.push(`[${JSON.stringify(seg)}]`);
|
|
else {
|
|
if (segs.length)
|
|
segs.push(".");
|
|
segs.push(seg);
|
|
}
|
|
}
|
|
return segs.join("");
|
|
}
|
|
function prettifyError(error48) {
|
|
const lines = [];
|
|
const issues = [...error48.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);
|
|
for (const issue2 of issues) {
|
|
lines.push(`\u2716 ${issue2.message}`);
|
|
if (issue2.path?.length)
|
|
lines.push(` \u2192 at ${toDotPath(issue2.path)}`);
|
|
}
|
|
return lines.join("\n");
|
|
}
|
|
var initializer, $ZodError, $ZodRealError;
|
|
var init_errors = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js"() {
|
|
init_core();
|
|
init_util();
|
|
initializer = (inst, def) => {
|
|
inst.name = "$ZodError";
|
|
Object.defineProperty(inst, "_zod", {
|
|
value: inst._zod,
|
|
enumerable: false
|
|
});
|
|
Object.defineProperty(inst, "issues", {
|
|
value: def,
|
|
enumerable: false
|
|
});
|
|
inst.message = JSON.stringify(def, jsonStringifyReplacer, 2);
|
|
Object.defineProperty(inst, "toString", {
|
|
value: () => inst.message,
|
|
enumerable: false
|
|
});
|
|
};
|
|
$ZodError = $constructor("$ZodError", initializer);
|
|
$ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js
|
|
var _parse, parse, _parseAsync, parseAsync, _safeParse, safeParse, _safeParseAsync, safeParseAsync, _encode, encode, _decode, decode, _encodeAsync, encodeAsync, _decodeAsync, decodeAsync, _safeEncode, safeEncode, _safeDecode, safeDecode, _safeEncodeAsync, safeEncodeAsync, _safeDecodeAsync, safeDecodeAsync;
|
|
var init_parse = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js"() {
|
|
init_core();
|
|
init_errors();
|
|
init_util();
|
|
_parse = (_Err) => (schema, value2, _ctx, _params) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
|
|
const result = schema._zod.run({ value: value2, issues: [] }, ctx);
|
|
if (result instanceof Promise) {
|
|
throw new $ZodAsyncError();
|
|
}
|
|
if (result.issues.length) {
|
|
const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
|
|
captureStackTrace(e, _params?.callee);
|
|
throw e;
|
|
}
|
|
return result.value;
|
|
};
|
|
parse = /* @__PURE__ */ _parse($ZodRealError);
|
|
_parseAsync = (_Err) => async (schema, value2, _ctx, params) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
|
|
let result = schema._zod.run({ value: value2, issues: [] }, ctx);
|
|
if (result instanceof Promise)
|
|
result = await result;
|
|
if (result.issues.length) {
|
|
const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
|
|
captureStackTrace(e, params?.callee);
|
|
throw e;
|
|
}
|
|
return result.value;
|
|
};
|
|
parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError);
|
|
_safeParse = (_Err) => (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? { ..._ctx, async: false } : { async: false };
|
|
const result = schema._zod.run({ value: value2, issues: [] }, ctx);
|
|
if (result instanceof Promise) {
|
|
throw new $ZodAsyncError();
|
|
}
|
|
return result.issues.length ? {
|
|
success: false,
|
|
error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
|
|
} : { success: true, data: result.value };
|
|
};
|
|
safeParse = /* @__PURE__ */ _safeParse($ZodRealError);
|
|
_safeParseAsync = (_Err) => async (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
|
|
let result = schema._zod.run({ value: value2, issues: [] }, ctx);
|
|
if (result instanceof Promise)
|
|
result = await result;
|
|
return result.issues.length ? {
|
|
success: false,
|
|
error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
|
|
} : { success: true, data: result.value };
|
|
};
|
|
safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError);
|
|
_encode = (_Err) => (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
|
|
return _parse(_Err)(schema, value2, ctx);
|
|
};
|
|
encode = /* @__PURE__ */ _encode($ZodRealError);
|
|
_decode = (_Err) => (schema, value2, _ctx) => {
|
|
return _parse(_Err)(schema, value2, _ctx);
|
|
};
|
|
decode = /* @__PURE__ */ _decode($ZodRealError);
|
|
_encodeAsync = (_Err) => async (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
|
|
return _parseAsync(_Err)(schema, value2, ctx);
|
|
};
|
|
encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError);
|
|
_decodeAsync = (_Err) => async (schema, value2, _ctx) => {
|
|
return _parseAsync(_Err)(schema, value2, _ctx);
|
|
};
|
|
decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError);
|
|
_safeEncode = (_Err) => (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
|
|
return _safeParse(_Err)(schema, value2, ctx);
|
|
};
|
|
safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError);
|
|
_safeDecode = (_Err) => (schema, value2, _ctx) => {
|
|
return _safeParse(_Err)(schema, value2, _ctx);
|
|
};
|
|
safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError);
|
|
_safeEncodeAsync = (_Err) => async (schema, value2, _ctx) => {
|
|
const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
|
|
return _safeParseAsync(_Err)(schema, value2, ctx);
|
|
};
|
|
safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError);
|
|
_safeDecodeAsync = (_Err) => async (schema, value2, _ctx) => {
|
|
return _safeParseAsync(_Err)(schema, value2, _ctx);
|
|
};
|
|
safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js
|
|
var regexes_exports = {};
|
|
__export(regexes_exports, {
|
|
base64: () => base64,
|
|
base64url: () => base64url,
|
|
bigint: () => bigint,
|
|
boolean: () => boolean,
|
|
browserEmail: () => browserEmail,
|
|
cidrv4: () => cidrv4,
|
|
cidrv6: () => cidrv6,
|
|
cuid: () => cuid,
|
|
cuid2: () => cuid2,
|
|
date: () => date,
|
|
datetime: () => datetime,
|
|
domain: () => domain,
|
|
duration: () => duration,
|
|
e164: () => e164,
|
|
email: () => email,
|
|
emoji: () => emoji,
|
|
extendedDuration: () => extendedDuration,
|
|
guid: () => guid,
|
|
hex: () => hex,
|
|
hostname: () => hostname,
|
|
html5Email: () => html5Email,
|
|
idnEmail: () => idnEmail,
|
|
integer: () => integer,
|
|
ipv4: () => ipv4,
|
|
ipv6: () => ipv6,
|
|
ksuid: () => ksuid,
|
|
lowercase: () => lowercase,
|
|
mac: () => mac,
|
|
md5_base64: () => md5_base64,
|
|
md5_base64url: () => md5_base64url,
|
|
md5_hex: () => md5_hex,
|
|
nanoid: () => nanoid,
|
|
null: () => _null,
|
|
number: () => number,
|
|
rfc5322Email: () => rfc5322Email,
|
|
sha1_base64: () => sha1_base64,
|
|
sha1_base64url: () => sha1_base64url,
|
|
sha1_hex: () => sha1_hex,
|
|
sha256_base64: () => sha256_base64,
|
|
sha256_base64url: () => sha256_base64url,
|
|
sha256_hex: () => sha256_hex,
|
|
sha384_base64: () => sha384_base64,
|
|
sha384_base64url: () => sha384_base64url,
|
|
sha384_hex: () => sha384_hex,
|
|
sha512_base64: () => sha512_base64,
|
|
sha512_base64url: () => sha512_base64url,
|
|
sha512_hex: () => sha512_hex,
|
|
string: () => string,
|
|
time: () => time,
|
|
ulid: () => ulid,
|
|
undefined: () => _undefined,
|
|
unicodeEmail: () => unicodeEmail,
|
|
uppercase: () => uppercase,
|
|
uuid: () => uuid,
|
|
uuid4: () => uuid4,
|
|
uuid6: () => uuid6,
|
|
uuid7: () => uuid7,
|
|
xid: () => xid
|
|
});
|
|
function emoji() {
|
|
return new RegExp(_emoji, "u");
|
|
}
|
|
function timeSource(args) {
|
|
const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`;
|
|
const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`;
|
|
return regex;
|
|
}
|
|
function time(args) {
|
|
return new RegExp(`^${timeSource(args)}$`);
|
|
}
|
|
function datetime(args) {
|
|
const time3 = timeSource({ precision: args.precision });
|
|
const opts = ["Z"];
|
|
if (args.local)
|
|
opts.push("");
|
|
if (args.offset)
|
|
opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);
|
|
const timeRegex = `${time3}(?:${opts.join("|")})`;
|
|
return new RegExp(`^${dateSource}T(?:${timeRegex})$`);
|
|
}
|
|
function fixedBase64(bodyLength, padding) {
|
|
return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);
|
|
}
|
|
function fixedBase64url(length) {
|
|
return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);
|
|
}
|
|
var cuid, cuid2, ulid, xid, ksuid, nanoid, duration, extendedDuration, guid, uuid, uuid4, uuid6, uuid7, email, html5Email, rfc5322Email, unicodeEmail, idnEmail, browserEmail, _emoji, ipv4, ipv6, mac, cidrv4, cidrv6, base64, base64url, hostname, domain, e164, dateSource, date, string, bigint, integer, number, boolean, _null, _undefined, lowercase, uppercase, hex, md5_hex, md5_base64, md5_base64url, sha1_hex, sha1_base64, sha1_base64url, sha256_hex, sha256_base64, sha256_base64url, sha384_hex, sha384_base64, sha384_base64url, sha512_hex, sha512_base64, sha512_base64url;
|
|
var init_regexes = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js"() {
|
|
init_util();
|
|
cuid = /^[cC][^\s-]{8,}$/;
|
|
cuid2 = /^[0-9a-z]+$/;
|
|
ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
|
|
xid = /^[0-9a-vA-V]{20}$/;
|
|
ksuid = /^[A-Za-z0-9]{27}$/;
|
|
nanoid = /^[a-zA-Z0-9_-]{21}$/;
|
|
duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
|
|
extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
|
|
guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
|
|
uuid = (version3) => {
|
|
if (!version3)
|
|
return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;
|
|
return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version3}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
|
|
};
|
|
uuid4 = /* @__PURE__ */ uuid(4);
|
|
uuid6 = /* @__PURE__ */ uuid(6);
|
|
uuid7 = /* @__PURE__ */ uuid(7);
|
|
email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
|
|
html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
rfc5322Email = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u;
|
|
idnEmail = unicodeEmail;
|
|
browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
_emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
|
|
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])$/;
|
|
ipv6 = /^(([0-9a-fA-F]{1,4}:){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}|:))$/;
|
|
mac = (delimiter) => {
|
|
const escapedDelim = escapeRegex(delimiter ?? ":");
|
|
return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);
|
|
};
|
|
cidrv4 = /^((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])\/([0-9]|[1-2][0-9]|3[0-2])$/;
|
|
cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(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 = /^[A-Za-z0-9_-]*$/;
|
|
hostname = /^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/;
|
|
domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
|
|
e164 = /^\+[1-9]\d{6,14}$/;
|
|
dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;
|
|
date = /* @__PURE__ */ new RegExp(`^${dateSource}$`);
|
|
string = (params) => {
|
|
const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`;
|
|
return new RegExp(`^${regex}$`);
|
|
};
|
|
bigint = /^-?\d+n?$/;
|
|
integer = /^-?\d+$/;
|
|
number = /^-?\d+(?:\.\d+)?$/;
|
|
boolean = /^(?:true|false)$/i;
|
|
_null = /^null$/i;
|
|
_undefined = /^undefined$/i;
|
|
lowercase = /^[^A-Z]*$/;
|
|
uppercase = /^[^a-z]*$/;
|
|
hex = /^[0-9a-fA-F]*$/;
|
|
md5_hex = /^[0-9a-fA-F]{32}$/;
|
|
md5_base64 = /* @__PURE__ */ fixedBase64(22, "==");
|
|
md5_base64url = /* @__PURE__ */ fixedBase64url(22);
|
|
sha1_hex = /^[0-9a-fA-F]{40}$/;
|
|
sha1_base64 = /* @__PURE__ */ fixedBase64(27, "=");
|
|
sha1_base64url = /* @__PURE__ */ fixedBase64url(27);
|
|
sha256_hex = /^[0-9a-fA-F]{64}$/;
|
|
sha256_base64 = /* @__PURE__ */ fixedBase64(43, "=");
|
|
sha256_base64url = /* @__PURE__ */ fixedBase64url(43);
|
|
sha384_hex = /^[0-9a-fA-F]{96}$/;
|
|
sha384_base64 = /* @__PURE__ */ fixedBase64(64, "");
|
|
sha384_base64url = /* @__PURE__ */ fixedBase64url(64);
|
|
sha512_hex = /^[0-9a-fA-F]{128}$/;
|
|
sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
|
|
sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js
|
|
function handleCheckPropertyResult(result, payload, property) {
|
|
if (result.issues.length) {
|
|
payload.issues.push(...prefixIssues(property, result.issues));
|
|
}
|
|
}
|
|
var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckBigIntFormat, $ZodCheckMaxSize, $ZodCheckMinSize, $ZodCheckSizeEquals, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckProperty, $ZodCheckMimeType, $ZodCheckOverwrite;
|
|
var init_checks = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js"() {
|
|
init_core();
|
|
init_regexes();
|
|
init_util();
|
|
$ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
|
|
var _a2;
|
|
inst._zod ?? (inst._zod = {});
|
|
inst._zod.def = def;
|
|
(_a2 = inst._zod).onattach ?? (_a2.onattach = []);
|
|
});
|
|
numericOriginMap = {
|
|
number: "number",
|
|
bigint: "bigint",
|
|
object: "date"
|
|
};
|
|
$ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const origin = numericOriginMap[typeof def.value];
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;
|
|
if (def.value < curr) {
|
|
if (def.inclusive)
|
|
bag.maximum = def.value;
|
|
else
|
|
bag.exclusiveMaximum = def.value;
|
|
}
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {
|
|
return;
|
|
}
|
|
payload.issues.push({
|
|
origin,
|
|
code: "too_big",
|
|
maximum: typeof def.value === "object" ? def.value.getTime() : def.value,
|
|
input: payload.value,
|
|
inclusive: def.inclusive,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const origin = numericOriginMap[typeof def.value];
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;
|
|
if (def.value > curr) {
|
|
if (def.inclusive)
|
|
bag.minimum = def.value;
|
|
else
|
|
bag.exclusiveMinimum = def.value;
|
|
}
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {
|
|
return;
|
|
}
|
|
payload.issues.push({
|
|
origin,
|
|
code: "too_small",
|
|
minimum: typeof def.value === "object" ? def.value.getTime() : def.value,
|
|
input: payload.value,
|
|
inclusive: def.inclusive,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
inst._zod.onattach.push((inst2) => {
|
|
var _a2;
|
|
(_a2 = inst2._zod.bag).multipleOf ?? (_a2.multipleOf = def.value);
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (typeof payload.value !== typeof def.value)
|
|
throw new Error("Cannot mix number and bigint in multiple_of check.");
|
|
const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0;
|
|
if (isMultiple)
|
|
return;
|
|
payload.issues.push({
|
|
origin: typeof payload.value,
|
|
code: "not_multiple_of",
|
|
divisor: def.value,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
def.format = def.format || "float64";
|
|
const isInt = def.format?.includes("int");
|
|
const origin = isInt ? "int" : "number";
|
|
const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format];
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.format = def.format;
|
|
bag.minimum = minimum;
|
|
bag.maximum = maximum;
|
|
if (isInt)
|
|
bag.pattern = integer;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
if (isInt) {
|
|
if (!Number.isInteger(input)) {
|
|
payload.issues.push({
|
|
expected: origin,
|
|
format: def.format,
|
|
code: "invalid_type",
|
|
continue: false,
|
|
input,
|
|
inst
|
|
});
|
|
return;
|
|
}
|
|
if (!Number.isSafeInteger(input)) {
|
|
if (input > 0) {
|
|
payload.issues.push({
|
|
input,
|
|
code: "too_big",
|
|
maximum: Number.MAX_SAFE_INTEGER,
|
|
note: "Integers must be within the safe integer range.",
|
|
inst,
|
|
origin,
|
|
inclusive: true,
|
|
continue: !def.abort
|
|
});
|
|
} else {
|
|
payload.issues.push({
|
|
input,
|
|
code: "too_small",
|
|
minimum: Number.MIN_SAFE_INTEGER,
|
|
note: "Integers must be within the safe integer range.",
|
|
inst,
|
|
origin,
|
|
inclusive: true,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
if (input < minimum) {
|
|
payload.issues.push({
|
|
origin: "number",
|
|
input,
|
|
code: "too_small",
|
|
minimum,
|
|
inclusive: true,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
if (input > maximum) {
|
|
payload.issues.push({
|
|
origin: "number",
|
|
input,
|
|
code: "too_big",
|
|
maximum,
|
|
inclusive: true,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
};
|
|
});
|
|
$ZodCheckBigIntFormat = /* @__PURE__ */ $constructor("$ZodCheckBigIntFormat", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const [minimum, maximum] = BIGINT_FORMAT_RANGES[def.format];
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.format = def.format;
|
|
bag.minimum = minimum;
|
|
bag.maximum = maximum;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
if (input < minimum) {
|
|
payload.issues.push({
|
|
origin: "bigint",
|
|
input,
|
|
code: "too_small",
|
|
minimum,
|
|
inclusive: true,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
if (input > maximum) {
|
|
payload.issues.push({
|
|
origin: "bigint",
|
|
input,
|
|
code: "too_big",
|
|
maximum,
|
|
inclusive: true,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
};
|
|
});
|
|
$ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.size !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
|
|
if (def.maximum < curr)
|
|
inst2._zod.bag.maximum = def.maximum;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const size = input.size;
|
|
if (size <= def.maximum)
|
|
return;
|
|
payload.issues.push({
|
|
origin: getSizableOrigin(input),
|
|
code: "too_big",
|
|
maximum: def.maximum,
|
|
inclusive: true,
|
|
input,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.size !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
|
|
if (def.minimum > curr)
|
|
inst2._zod.bag.minimum = def.minimum;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const size = input.size;
|
|
if (size >= def.minimum)
|
|
return;
|
|
payload.issues.push({
|
|
origin: getSizableOrigin(input),
|
|
code: "too_small",
|
|
minimum: def.minimum,
|
|
inclusive: true,
|
|
input,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.size !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.minimum = def.size;
|
|
bag.maximum = def.size;
|
|
bag.size = def.size;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const size = input.size;
|
|
if (size === def.size)
|
|
return;
|
|
const tooBig = size > def.size;
|
|
payload.issues.push({
|
|
origin: getSizableOrigin(input),
|
|
...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size },
|
|
inclusive: true,
|
|
exact: true,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.length !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
|
|
if (def.maximum < curr)
|
|
inst2._zod.bag.maximum = def.maximum;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const length = input.length;
|
|
if (length <= def.maximum)
|
|
return;
|
|
const origin = getLengthableOrigin(input);
|
|
payload.issues.push({
|
|
origin,
|
|
code: "too_big",
|
|
maximum: def.maximum,
|
|
inclusive: true,
|
|
input,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.length !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
|
|
if (def.minimum > curr)
|
|
inst2._zod.bag.minimum = def.minimum;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const length = input.length;
|
|
if (length >= def.minimum)
|
|
return;
|
|
const origin = getLengthableOrigin(input);
|
|
payload.issues.push({
|
|
origin,
|
|
code: "too_small",
|
|
minimum: def.minimum,
|
|
inclusive: true,
|
|
input,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => {
|
|
var _a2;
|
|
$ZodCheck.init(inst, def);
|
|
(_a2 = inst._zod.def).when ?? (_a2.when = (payload) => {
|
|
const val = payload.value;
|
|
return !nullish(val) && val.length !== void 0;
|
|
});
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.minimum = def.length;
|
|
bag.maximum = def.length;
|
|
bag.length = def.length;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const length = input.length;
|
|
if (length === def.length)
|
|
return;
|
|
const origin = getLengthableOrigin(input);
|
|
const tooBig = length > def.length;
|
|
payload.issues.push({
|
|
origin,
|
|
...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length },
|
|
inclusive: true,
|
|
exact: true,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => {
|
|
var _a2, _b;
|
|
$ZodCheck.init(inst, def);
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.format = def.format;
|
|
if (def.pattern) {
|
|
bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
|
|
bag.patterns.add(def.pattern);
|
|
}
|
|
});
|
|
if (def.pattern)
|
|
(_a2 = inst._zod).check ?? (_a2.check = (payload) => {
|
|
def.pattern.lastIndex = 0;
|
|
if (def.pattern.test(payload.value))
|
|
return;
|
|
payload.issues.push({
|
|
origin: "string",
|
|
code: "invalid_format",
|
|
format: def.format,
|
|
input: payload.value,
|
|
...def.pattern ? { pattern: def.pattern.toString() } : {},
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
});
|
|
else
|
|
(_b = inst._zod).check ?? (_b.check = () => {
|
|
});
|
|
});
|
|
$ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => {
|
|
$ZodCheckStringFormat.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
def.pattern.lastIndex = 0;
|
|
if (def.pattern.test(payload.value))
|
|
return;
|
|
payload.issues.push({
|
|
origin: "string",
|
|
code: "invalid_format",
|
|
format: "regex",
|
|
input: payload.value,
|
|
pattern: def.pattern.toString(),
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => {
|
|
def.pattern ?? (def.pattern = lowercase);
|
|
$ZodCheckStringFormat.init(inst, def);
|
|
});
|
|
$ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => {
|
|
def.pattern ?? (def.pattern = uppercase);
|
|
$ZodCheckStringFormat.init(inst, def);
|
|
});
|
|
$ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const escapedRegex = escapeRegex(def.includes);
|
|
const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);
|
|
def.pattern = pattern;
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
|
|
bag.patterns.add(pattern);
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (payload.value.includes(def.includes, def.position))
|
|
return;
|
|
payload.issues.push({
|
|
origin: "string",
|
|
code: "invalid_format",
|
|
format: "includes",
|
|
includes: def.includes,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`);
|
|
def.pattern ?? (def.pattern = pattern);
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
|
|
bag.patterns.add(pattern);
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (payload.value.startsWith(def.prefix))
|
|
return;
|
|
payload.issues.push({
|
|
origin: "string",
|
|
code: "invalid_format",
|
|
format: "starts_with",
|
|
prefix: def.prefix,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`);
|
|
def.pattern ?? (def.pattern = pattern);
|
|
inst._zod.onattach.push((inst2) => {
|
|
const bag = inst2._zod.bag;
|
|
bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set());
|
|
bag.patterns.add(pattern);
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (payload.value.endsWith(def.suffix))
|
|
return;
|
|
payload.issues.push({
|
|
origin: "string",
|
|
code: "invalid_format",
|
|
format: "ends_with",
|
|
suffix: def.suffix,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckProperty = /* @__PURE__ */ $constructor("$ZodCheckProperty", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
const result = def.schema._zod.run({
|
|
value: payload.value[def.property],
|
|
issues: []
|
|
}, {});
|
|
if (result instanceof Promise) {
|
|
return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property));
|
|
}
|
|
handleCheckPropertyResult(result, payload, def.property);
|
|
return;
|
|
};
|
|
});
|
|
$ZodCheckMimeType = /* @__PURE__ */ $constructor("$ZodCheckMimeType", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
const mimeSet = new Set(def.mime);
|
|
inst._zod.onattach.push((inst2) => {
|
|
inst2._zod.bag.mime = def.mime;
|
|
});
|
|
inst._zod.check = (payload) => {
|
|
if (mimeSet.has(payload.value.type))
|
|
return;
|
|
payload.issues.push({
|
|
code: "invalid_value",
|
|
values: def.mime,
|
|
input: payload.value.type,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
payload.value = def.tx(payload.value);
|
|
};
|
|
});
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js
|
|
var Doc;
|
|
var init_doc = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js"() {
|
|
Doc = class {
|
|
constructor(args = []) {
|
|
this.content = [];
|
|
this.indent = 0;
|
|
if (this)
|
|
this.args = args;
|
|
}
|
|
indented(fn) {
|
|
this.indent += 1;
|
|
fn(this);
|
|
this.indent -= 1;
|
|
}
|
|
write(arg) {
|
|
if (typeof arg === "function") {
|
|
arg(this, { execution: "sync" });
|
|
arg(this, { execution: "async" });
|
|
return;
|
|
}
|
|
const content = arg;
|
|
const lines = content.split("\n").filter((x) => x);
|
|
const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));
|
|
const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x);
|
|
for (const line of dedented) {
|
|
this.content.push(line);
|
|
}
|
|
}
|
|
compile() {
|
|
const F = Function;
|
|
const args = this?.args;
|
|
const content = this?.content ?? [``];
|
|
const lines = [...content.map((x) => ` ${x}`)];
|
|
return new F(...args, lines.join("\n"));
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js
|
|
var version;
|
|
var init_versions = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js"() {
|
|
version = {
|
|
major: 4,
|
|
minor: 3,
|
|
patch: 6
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js
|
|
function isValidBase64(data) {
|
|
if (data === "")
|
|
return true;
|
|
if (data.length % 4 !== 0)
|
|
return false;
|
|
try {
|
|
atob(data);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
function isValidBase64URL(data) {
|
|
if (!base64url.test(data))
|
|
return false;
|
|
const base643 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/");
|
|
const padded = base643.padEnd(Math.ceil(base643.length / 4) * 4, "=");
|
|
return isValidBase64(padded);
|
|
}
|
|
function isValidJWT(token, algorithm = null) {
|
|
try {
|
|
const tokensParts = token.split(".");
|
|
if (tokensParts.length !== 3)
|
|
return false;
|
|
const [header] = tokensParts;
|
|
if (!header)
|
|
return false;
|
|
const parsedHeader = JSON.parse(atob(header));
|
|
if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT")
|
|
return false;
|
|
if (!parsedHeader.alg)
|
|
return false;
|
|
if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm))
|
|
return false;
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
function handleArrayResult(result, final, index2) {
|
|
if (result.issues.length) {
|
|
final.issues.push(...prefixIssues(index2, result.issues));
|
|
}
|
|
final.value[index2] = result.value;
|
|
}
|
|
function handlePropertyResult(result, final, key, input, isOptionalOut) {
|
|
if (result.issues.length) {
|
|
if (isOptionalOut && !(key in input)) {
|
|
return;
|
|
}
|
|
final.issues.push(...prefixIssues(key, result.issues));
|
|
}
|
|
if (result.value === void 0) {
|
|
if (key in input) {
|
|
final.value[key] = void 0;
|
|
}
|
|
} else {
|
|
final.value[key] = result.value;
|
|
}
|
|
}
|
|
function normalizeDef(def) {
|
|
const keys = Object.keys(def.shape);
|
|
for (const k of keys) {
|
|
if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) {
|
|
throw new Error(`Invalid element at key "${k}": expected a Zod schema`);
|
|
}
|
|
}
|
|
const okeys = optionalKeys(def.shape);
|
|
return {
|
|
...def,
|
|
keys,
|
|
keySet: new Set(keys),
|
|
numKeys: keys.length,
|
|
optionalKeys: new Set(okeys)
|
|
};
|
|
}
|
|
function handleCatchall(proms, input, payload, ctx, def, inst) {
|
|
const unrecognized = [];
|
|
const keySet = def.keySet;
|
|
const _catchall = def.catchall._zod;
|
|
const t = _catchall.def.type;
|
|
const isOptionalOut = _catchall.optout === "optional";
|
|
for (const key in input) {
|
|
if (keySet.has(key))
|
|
continue;
|
|
if (t === "never") {
|
|
unrecognized.push(key);
|
|
continue;
|
|
}
|
|
const r = _catchall.run({ value: input[key], issues: [] }, ctx);
|
|
if (r instanceof Promise) {
|
|
proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut)));
|
|
} else {
|
|
handlePropertyResult(r, payload, key, input, isOptionalOut);
|
|
}
|
|
}
|
|
if (unrecognized.length) {
|
|
payload.issues.push({
|
|
code: "unrecognized_keys",
|
|
keys: unrecognized,
|
|
input,
|
|
inst
|
|
});
|
|
}
|
|
if (!proms.length)
|
|
return payload;
|
|
return Promise.all(proms).then(() => {
|
|
return payload;
|
|
});
|
|
}
|
|
function handleUnionResults(results, final, inst, ctx) {
|
|
for (const result of results) {
|
|
if (result.issues.length === 0) {
|
|
final.value = result.value;
|
|
return final;
|
|
}
|
|
}
|
|
const nonaborted = results.filter((r) => !aborted(r));
|
|
if (nonaborted.length === 1) {
|
|
final.value = nonaborted[0].value;
|
|
return nonaborted[0];
|
|
}
|
|
final.issues.push({
|
|
code: "invalid_union",
|
|
input: final.value,
|
|
inst,
|
|
errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
|
|
});
|
|
return final;
|
|
}
|
|
function handleExclusiveUnionResults(results, final, inst, ctx) {
|
|
const successes = results.filter((r) => r.issues.length === 0);
|
|
if (successes.length === 1) {
|
|
final.value = successes[0].value;
|
|
return final;
|
|
}
|
|
if (successes.length === 0) {
|
|
final.issues.push({
|
|
code: "invalid_union",
|
|
input: final.value,
|
|
inst,
|
|
errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
|
|
});
|
|
} else {
|
|
final.issues.push({
|
|
code: "invalid_union",
|
|
input: final.value,
|
|
inst,
|
|
errors: [],
|
|
inclusive: false
|
|
});
|
|
}
|
|
return final;
|
|
}
|
|
function mergeValues(a, b) {
|
|
if (a === b) {
|
|
return { valid: true, data: a };
|
|
}
|
|
if (a instanceof Date && b instanceof Date && +a === +b) {
|
|
return { valid: true, data: a };
|
|
}
|
|
if (isPlainObject(a) && isPlainObject(b)) {
|
|
const bKeys = Object.keys(b);
|
|
const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);
|
|
const newObj = { ...a, ...b };
|
|
for (const key of sharedKeys) {
|
|
const sharedValue = mergeValues(a[key], b[key]);
|
|
if (!sharedValue.valid) {
|
|
return {
|
|
valid: false,
|
|
mergeErrorPath: [key, ...sharedValue.mergeErrorPath]
|
|
};
|
|
}
|
|
newObj[key] = sharedValue.data;
|
|
}
|
|
return { valid: true, data: newObj };
|
|
}
|
|
if (Array.isArray(a) && Array.isArray(b)) {
|
|
if (a.length !== b.length) {
|
|
return { valid: false, mergeErrorPath: [] };
|
|
}
|
|
const newArray = [];
|
|
for (let index2 = 0; index2 < a.length; index2++) {
|
|
const itemA = a[index2];
|
|
const itemB = b[index2];
|
|
const sharedValue = mergeValues(itemA, itemB);
|
|
if (!sharedValue.valid) {
|
|
return {
|
|
valid: false,
|
|
mergeErrorPath: [index2, ...sharedValue.mergeErrorPath]
|
|
};
|
|
}
|
|
newArray.push(sharedValue.data);
|
|
}
|
|
return { valid: true, data: newArray };
|
|
}
|
|
return { valid: false, mergeErrorPath: [] };
|
|
}
|
|
function handleIntersectionResults(result, left, right) {
|
|
const unrecKeys = /* @__PURE__ */ new Map();
|
|
let unrecIssue;
|
|
for (const iss of left.issues) {
|
|
if (iss.code === "unrecognized_keys") {
|
|
unrecIssue ?? (unrecIssue = iss);
|
|
for (const k of iss.keys) {
|
|
if (!unrecKeys.has(k))
|
|
unrecKeys.set(k, {});
|
|
unrecKeys.get(k).l = true;
|
|
}
|
|
} else {
|
|
result.issues.push(iss);
|
|
}
|
|
}
|
|
for (const iss of right.issues) {
|
|
if (iss.code === "unrecognized_keys") {
|
|
for (const k of iss.keys) {
|
|
if (!unrecKeys.has(k))
|
|
unrecKeys.set(k, {});
|
|
unrecKeys.get(k).r = true;
|
|
}
|
|
} else {
|
|
result.issues.push(iss);
|
|
}
|
|
}
|
|
const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);
|
|
if (bothKeys.length && unrecIssue) {
|
|
result.issues.push({ ...unrecIssue, keys: bothKeys });
|
|
}
|
|
if (aborted(result))
|
|
return result;
|
|
const merged = mergeValues(left.value, right.value);
|
|
if (!merged.valid) {
|
|
throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`);
|
|
}
|
|
result.value = merged.data;
|
|
return result;
|
|
}
|
|
function handleTupleResult(result, final, index2) {
|
|
if (result.issues.length) {
|
|
final.issues.push(...prefixIssues(index2, result.issues));
|
|
}
|
|
final.value[index2] = result.value;
|
|
}
|
|
function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {
|
|
if (keyResult.issues.length) {
|
|
if (propertyKeyTypes.has(typeof key)) {
|
|
final.issues.push(...prefixIssues(key, keyResult.issues));
|
|
} else {
|
|
final.issues.push({
|
|
code: "invalid_key",
|
|
origin: "map",
|
|
input,
|
|
inst,
|
|
issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config()))
|
|
});
|
|
}
|
|
}
|
|
if (valueResult.issues.length) {
|
|
if (propertyKeyTypes.has(typeof key)) {
|
|
final.issues.push(...prefixIssues(key, valueResult.issues));
|
|
} else {
|
|
final.issues.push({
|
|
origin: "map",
|
|
code: "invalid_element",
|
|
input,
|
|
inst,
|
|
key,
|
|
issues: valueResult.issues.map((iss) => finalizeIssue(iss, ctx, config()))
|
|
});
|
|
}
|
|
}
|
|
final.value.set(keyResult.value, valueResult.value);
|
|
}
|
|
function handleSetResult(result, final) {
|
|
if (result.issues.length) {
|
|
final.issues.push(...result.issues);
|
|
}
|
|
final.value.add(result.value);
|
|
}
|
|
function handleOptionalResult(result, input) {
|
|
if (result.issues.length && input === void 0) {
|
|
return { issues: [], value: void 0 };
|
|
}
|
|
return result;
|
|
}
|
|
function handleDefaultResult(payload, def) {
|
|
if (payload.value === void 0) {
|
|
payload.value = def.defaultValue;
|
|
}
|
|
return payload;
|
|
}
|
|
function handleNonOptionalResult(payload, inst) {
|
|
if (!payload.issues.length && payload.value === void 0) {
|
|
payload.issues.push({
|
|
code: "invalid_type",
|
|
expected: "nonoptional",
|
|
input: payload.value,
|
|
inst
|
|
});
|
|
}
|
|
return payload;
|
|
}
|
|
function handlePipeResult(left, next, ctx) {
|
|
if (left.issues.length) {
|
|
left.aborted = true;
|
|
return left;
|
|
}
|
|
return next._zod.run({ value: left.value, issues: left.issues }, ctx);
|
|
}
|
|
function handleCodecAResult(result, def, ctx) {
|
|
if (result.issues.length) {
|
|
result.aborted = true;
|
|
return result;
|
|
}
|
|
const direction = ctx.direction || "forward";
|
|
if (direction === "forward") {
|
|
const transformed = def.transform(result.value, result);
|
|
if (transformed instanceof Promise) {
|
|
return transformed.then((value2) => handleCodecTxResult(result, value2, def.out, ctx));
|
|
}
|
|
return handleCodecTxResult(result, transformed, def.out, ctx);
|
|
} else {
|
|
const transformed = def.reverseTransform(result.value, result);
|
|
if (transformed instanceof Promise) {
|
|
return transformed.then((value2) => handleCodecTxResult(result, value2, def.in, ctx));
|
|
}
|
|
return handleCodecTxResult(result, transformed, def.in, ctx);
|
|
}
|
|
}
|
|
function handleCodecTxResult(left, value2, nextSchema, ctx) {
|
|
if (left.issues.length) {
|
|
left.aborted = true;
|
|
return left;
|
|
}
|
|
return nextSchema._zod.run({ value: value2, issues: left.issues }, ctx);
|
|
}
|
|
function handleReadonlyResult(payload) {
|
|
payload.value = Object.freeze(payload.value);
|
|
return payload;
|
|
}
|
|
function handleRefineResult(result, payload, input, inst) {
|
|
if (!result) {
|
|
const _iss = {
|
|
code: "custom",
|
|
input,
|
|
inst,
|
|
// incorporates params.error into issue reporting
|
|
path: [...inst._zod.def.path ?? []],
|
|
// incorporates params.error into issue reporting
|
|
continue: !inst._zod.def.abort
|
|
// params: inst._zod.def.params,
|
|
};
|
|
if (inst._zod.def.params)
|
|
_iss.params = inst._zod.def.params;
|
|
payload.issues.push(issue(_iss));
|
|
}
|
|
}
|
|
var $ZodType, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, $ZodIPv6, $ZodMAC, $ZodCIDRv4, $ZodCIDRv6, $ZodBase64, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodCustomStringFormat, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodBigInt, $ZodBigIntFormat, $ZodSymbol, $ZodUndefined, $ZodNull, $ZodAny, $ZodUnknown, $ZodNever, $ZodVoid, $ZodDate, $ZodArray, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodXor, $ZodDiscriminatedUnion, $ZodIntersection, $ZodTuple, $ZodRecord, $ZodMap, $ZodSet, $ZodEnum, $ZodLiteral, $ZodFile, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodSuccess, $ZodCatch, $ZodNaN, $ZodPipe, $ZodCodec, $ZodReadonly, $ZodTemplateLiteral, $ZodFunction, $ZodPromise, $ZodLazy, $ZodCustom;
|
|
var init_schemas = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js"() {
|
|
init_checks();
|
|
init_core();
|
|
init_doc();
|
|
init_parse();
|
|
init_regexes();
|
|
init_util();
|
|
init_versions();
|
|
init_util();
|
|
$ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
|
|
var _a2;
|
|
inst ?? (inst = {});
|
|
inst._zod.def = def;
|
|
inst._zod.bag = inst._zod.bag || {};
|
|
inst._zod.version = version;
|
|
const checks = [...inst._zod.def.checks ?? []];
|
|
if (inst._zod.traits.has("$ZodCheck")) {
|
|
checks.unshift(inst);
|
|
}
|
|
for (const ch of checks) {
|
|
for (const fn of ch._zod.onattach) {
|
|
fn(inst);
|
|
}
|
|
}
|
|
if (checks.length === 0) {
|
|
(_a2 = inst._zod).deferred ?? (_a2.deferred = []);
|
|
inst._zod.deferred?.push(() => {
|
|
inst._zod.run = inst._zod.parse;
|
|
});
|
|
} else {
|
|
const runChecks = (payload, checks2, ctx) => {
|
|
let isAborted = aborted(payload);
|
|
let asyncResult;
|
|
for (const ch of checks2) {
|
|
if (ch._zod.def.when) {
|
|
const shouldRun = ch._zod.def.when(payload);
|
|
if (!shouldRun)
|
|
continue;
|
|
} else if (isAborted) {
|
|
continue;
|
|
}
|
|
const currLen = payload.issues.length;
|
|
const _ = ch._zod.check(payload);
|
|
if (_ instanceof Promise && ctx?.async === false) {
|
|
throw new $ZodAsyncError();
|
|
}
|
|
if (asyncResult || _ instanceof Promise) {
|
|
asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {
|
|
await _;
|
|
const nextLen = payload.issues.length;
|
|
if (nextLen === currLen)
|
|
return;
|
|
if (!isAborted)
|
|
isAborted = aborted(payload, currLen);
|
|
});
|
|
} else {
|
|
const nextLen = payload.issues.length;
|
|
if (nextLen === currLen)
|
|
continue;
|
|
if (!isAborted)
|
|
isAborted = aborted(payload, currLen);
|
|
}
|
|
}
|
|
if (asyncResult) {
|
|
return asyncResult.then(() => {
|
|
return payload;
|
|
});
|
|
}
|
|
return payload;
|
|
};
|
|
const handleCanaryResult = (canary, payload, ctx) => {
|
|
if (aborted(canary)) {
|
|
canary.aborted = true;
|
|
return canary;
|
|
}
|
|
const checkResult = runChecks(payload, checks, ctx);
|
|
if (checkResult instanceof Promise) {
|
|
if (ctx.async === false)
|
|
throw new $ZodAsyncError();
|
|
return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx));
|
|
}
|
|
return inst._zod.parse(checkResult, ctx);
|
|
};
|
|
inst._zod.run = (payload, ctx) => {
|
|
if (ctx.skipChecks) {
|
|
return inst._zod.parse(payload, ctx);
|
|
}
|
|
if (ctx.direction === "backward") {
|
|
const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });
|
|
if (canary instanceof Promise) {
|
|
return canary.then((canary2) => {
|
|
return handleCanaryResult(canary2, payload, ctx);
|
|
});
|
|
}
|
|
return handleCanaryResult(canary, payload, ctx);
|
|
}
|
|
const result = inst._zod.parse(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
if (ctx.async === false)
|
|
throw new $ZodAsyncError();
|
|
return result.then((result2) => runChecks(result2, checks, ctx));
|
|
}
|
|
return runChecks(result, checks, ctx);
|
|
};
|
|
}
|
|
defineLazy(inst, "~standard", () => ({
|
|
validate: (value2) => {
|
|
try {
|
|
const r = safeParse(inst, value2);
|
|
return r.success ? { value: r.data } : { issues: r.error?.issues };
|
|
} catch (_) {
|
|
return safeParseAsync(inst, value2).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });
|
|
}
|
|
},
|
|
vendor: "zod",
|
|
version: 1
|
|
}));
|
|
});
|
|
$ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string(inst._zod.bag);
|
|
inst._zod.parse = (payload, _) => {
|
|
if (def.coerce)
|
|
try {
|
|
payload.value = String(payload.value);
|
|
} catch (_2) {
|
|
}
|
|
if (typeof payload.value === "string")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "string",
|
|
code: "invalid_type",
|
|
input: payload.value,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => {
|
|
$ZodCheckStringFormat.init(inst, def);
|
|
$ZodString.init(inst, def);
|
|
});
|
|
$ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = guid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => {
|
|
if (def.version) {
|
|
const versionMap = {
|
|
v1: 1,
|
|
v2: 2,
|
|
v3: 3,
|
|
v4: 4,
|
|
v5: 5,
|
|
v6: 6,
|
|
v7: 7,
|
|
v8: 8
|
|
};
|
|
const v = versionMap[def.version];
|
|
if (v === void 0)
|
|
throw new Error(`Invalid UUID version: "${def.version}"`);
|
|
def.pattern ?? (def.pattern = uuid(v));
|
|
} else
|
|
def.pattern ?? (def.pattern = uuid());
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => {
|
|
def.pattern ?? (def.pattern = email);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
try {
|
|
const trimmed = payload.value.trim();
|
|
const url2 = new URL(trimmed);
|
|
if (def.hostname) {
|
|
def.hostname.lastIndex = 0;
|
|
if (!def.hostname.test(url2.hostname)) {
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "url",
|
|
note: "Invalid hostname",
|
|
pattern: def.hostname.source,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
}
|
|
if (def.protocol) {
|
|
def.protocol.lastIndex = 0;
|
|
if (!def.protocol.test(url2.protocol.endsWith(":") ? url2.protocol.slice(0, -1) : url2.protocol)) {
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "url",
|
|
note: "Invalid protocol",
|
|
pattern: def.protocol.source,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
}
|
|
if (def.normalize) {
|
|
payload.value = url2.href;
|
|
} else {
|
|
payload.value = trimmed;
|
|
}
|
|
return;
|
|
} catch (_) {
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "url",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
};
|
|
});
|
|
$ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => {
|
|
def.pattern ?? (def.pattern = emoji());
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = nanoid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = cuid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => {
|
|
def.pattern ?? (def.pattern = cuid2);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = ulid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = xid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => {
|
|
def.pattern ?? (def.pattern = ksuid);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => {
|
|
def.pattern ?? (def.pattern = datetime(def));
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => {
|
|
def.pattern ?? (def.pattern = date);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => {
|
|
def.pattern ?? (def.pattern = time(def));
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => {
|
|
def.pattern ?? (def.pattern = duration);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => {
|
|
def.pattern ?? (def.pattern = ipv4);
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.bag.format = `ipv4`;
|
|
});
|
|
$ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => {
|
|
def.pattern ?? (def.pattern = ipv6);
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.bag.format = `ipv6`;
|
|
inst._zod.check = (payload) => {
|
|
try {
|
|
new URL(`http://[${payload.value}]`);
|
|
} catch {
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "ipv6",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
};
|
|
});
|
|
$ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => {
|
|
def.pattern ?? (def.pattern = mac(def.delimiter));
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.bag.format = `mac`;
|
|
});
|
|
$ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => {
|
|
def.pattern ?? (def.pattern = cidrv4);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => {
|
|
def.pattern ?? (def.pattern = cidrv6);
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
const parts = payload.value.split("/");
|
|
try {
|
|
if (parts.length !== 2)
|
|
throw new Error();
|
|
const [address, prefix] = parts;
|
|
if (!prefix)
|
|
throw new Error();
|
|
const prefixNum = Number(prefix);
|
|
if (`${prefixNum}` !== prefix)
|
|
throw new Error();
|
|
if (prefixNum < 0 || prefixNum > 128)
|
|
throw new Error();
|
|
new URL(`http://[${address}]`);
|
|
} catch {
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "cidrv6",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
}
|
|
};
|
|
});
|
|
$ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => {
|
|
def.pattern ?? (def.pattern = base64);
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.bag.contentEncoding = "base64";
|
|
inst._zod.check = (payload) => {
|
|
if (isValidBase64(payload.value))
|
|
return;
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "base64",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => {
|
|
def.pattern ?? (def.pattern = base64url);
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.bag.contentEncoding = "base64url";
|
|
inst._zod.check = (payload) => {
|
|
if (isValidBase64URL(payload.value))
|
|
return;
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "base64url",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => {
|
|
def.pattern ?? (def.pattern = e164);
|
|
$ZodStringFormat.init(inst, def);
|
|
});
|
|
$ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => {
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
if (isValidJWT(payload.value, def.alg))
|
|
return;
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: "jwt",
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodCustomStringFormat = /* @__PURE__ */ $constructor("$ZodCustomStringFormat", (inst, def) => {
|
|
$ZodStringFormat.init(inst, def);
|
|
inst._zod.check = (payload) => {
|
|
if (def.fn(payload.value))
|
|
return;
|
|
payload.issues.push({
|
|
code: "invalid_format",
|
|
format: def.format,
|
|
input: payload.value,
|
|
inst,
|
|
continue: !def.abort
|
|
});
|
|
};
|
|
});
|
|
$ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = inst._zod.bag.pattern ?? number;
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (def.coerce)
|
|
try {
|
|
payload.value = Number(payload.value);
|
|
} catch (_) {
|
|
}
|
|
const input = payload.value;
|
|
if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) {
|
|
return payload;
|
|
}
|
|
const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : void 0 : void 0;
|
|
payload.issues.push({
|
|
expected: "number",
|
|
code: "invalid_type",
|
|
input,
|
|
inst,
|
|
...received ? { received } : {}
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => {
|
|
$ZodCheckNumberFormat.init(inst, def);
|
|
$ZodNumber.init(inst, def);
|
|
});
|
|
$ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = boolean;
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (def.coerce)
|
|
try {
|
|
payload.value = Boolean(payload.value);
|
|
} catch (_) {
|
|
}
|
|
const input = payload.value;
|
|
if (typeof input === "boolean")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "boolean",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodBigInt = /* @__PURE__ */ $constructor("$ZodBigInt", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = bigint;
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (def.coerce)
|
|
try {
|
|
payload.value = BigInt(payload.value);
|
|
} catch (_) {
|
|
}
|
|
if (typeof payload.value === "bigint")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "bigint",
|
|
code: "invalid_type",
|
|
input: payload.value,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => {
|
|
$ZodCheckBigIntFormat.init(inst, def);
|
|
$ZodBigInt.init(inst, def);
|
|
});
|
|
$ZodSymbol = /* @__PURE__ */ $constructor("$ZodSymbol", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (typeof input === "symbol")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "symbol",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = _undefined;
|
|
inst._zod.values = /* @__PURE__ */ new Set([void 0]);
|
|
inst._zod.optin = "optional";
|
|
inst._zod.optout = "optional";
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (typeof input === "undefined")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "undefined",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.pattern = _null;
|
|
inst._zod.values = /* @__PURE__ */ new Set([null]);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (input === null)
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "null",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload) => payload;
|
|
});
|
|
$ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload) => payload;
|
|
});
|
|
$ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
payload.issues.push({
|
|
expected: "never",
|
|
code: "invalid_type",
|
|
input: payload.value,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodVoid = /* @__PURE__ */ $constructor("$ZodVoid", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (typeof input === "undefined")
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "void",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodDate = /* @__PURE__ */ $constructor("$ZodDate", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (def.coerce) {
|
|
try {
|
|
payload.value = new Date(payload.value);
|
|
} catch (_err) {
|
|
}
|
|
}
|
|
const input = payload.value;
|
|
const isDate = input instanceof Date;
|
|
const isValidDate = isDate && !Number.isNaN(input.getTime());
|
|
if (isValidDate)
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "date",
|
|
code: "invalid_type",
|
|
input,
|
|
...isDate ? { received: "Invalid Date" } : {},
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!Array.isArray(input)) {
|
|
payload.issues.push({
|
|
expected: "array",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
payload.value = Array(input.length);
|
|
const proms = [];
|
|
for (let i = 0; i < input.length; i++) {
|
|
const item = input[i];
|
|
const result = def.element._zod.run({
|
|
value: item,
|
|
issues: []
|
|
}, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => handleArrayResult(result2, payload, i)));
|
|
} else {
|
|
handleArrayResult(result, payload, i);
|
|
}
|
|
}
|
|
if (proms.length) {
|
|
return Promise.all(proms).then(() => payload);
|
|
}
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
const desc2 = Object.getOwnPropertyDescriptor(def, "shape");
|
|
if (!desc2?.get) {
|
|
const sh = def.shape;
|
|
Object.defineProperty(def, "shape", {
|
|
get: () => {
|
|
const newSh = { ...sh };
|
|
Object.defineProperty(def, "shape", {
|
|
value: newSh
|
|
});
|
|
return newSh;
|
|
}
|
|
});
|
|
}
|
|
const _normalized = cached(() => normalizeDef(def));
|
|
defineLazy(inst._zod, "propValues", () => {
|
|
const shape = def.shape;
|
|
const propValues = {};
|
|
for (const key in shape) {
|
|
const field = shape[key]._zod;
|
|
if (field.values) {
|
|
propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());
|
|
for (const v of field.values)
|
|
propValues[key].add(v);
|
|
}
|
|
}
|
|
return propValues;
|
|
});
|
|
const isObject3 = isObject;
|
|
const catchall = def.catchall;
|
|
let value2;
|
|
inst._zod.parse = (payload, ctx) => {
|
|
value2 ?? (value2 = _normalized.value);
|
|
const input = payload.value;
|
|
if (!isObject3(input)) {
|
|
payload.issues.push({
|
|
expected: "object",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
payload.value = {};
|
|
const proms = [];
|
|
const shape = value2.shape;
|
|
for (const key of value2.keys) {
|
|
const el = shape[key];
|
|
const isOptionalOut = el._zod.optout === "optional";
|
|
const r = el._zod.run({ value: input[key], issues: [] }, ctx);
|
|
if (r instanceof Promise) {
|
|
proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut)));
|
|
} else {
|
|
handlePropertyResult(r, payload, key, input, isOptionalOut);
|
|
}
|
|
}
|
|
if (!catchall) {
|
|
return proms.length ? Promise.all(proms).then(() => payload) : payload;
|
|
}
|
|
return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);
|
|
};
|
|
});
|
|
$ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => {
|
|
$ZodObject.init(inst, def);
|
|
const superParse = inst._zod.parse;
|
|
const _normalized = cached(() => normalizeDef(def));
|
|
const generateFastpass = (shape) => {
|
|
const doc = new Doc(["shape", "payload", "ctx"]);
|
|
const normalized = _normalized.value;
|
|
const parseStr = (key) => {
|
|
const k = esc(key);
|
|
return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;
|
|
};
|
|
doc.write(`const input = payload.value;`);
|
|
const ids = /* @__PURE__ */ Object.create(null);
|
|
let counter = 0;
|
|
for (const key of normalized.keys) {
|
|
ids[key] = `key_${counter++}`;
|
|
}
|
|
doc.write(`const newResult = {};`);
|
|
for (const key of normalized.keys) {
|
|
const id = ids[key];
|
|
const k = esc(key);
|
|
const schema = shape[key];
|
|
const isOptionalOut = schema?._zod?.optout === "optional";
|
|
doc.write(`const ${id} = ${parseStr(key)};`);
|
|
if (isOptionalOut) {
|
|
doc.write(`
|
|
if (${id}.issues.length) {
|
|
if (${k} in input) {
|
|
payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
|
|
...iss,
|
|
path: iss.path ? [${k}, ...iss.path] : [${k}]
|
|
})));
|
|
}
|
|
}
|
|
|
|
if (${id}.value === undefined) {
|
|
if (${k} in input) {
|
|
newResult[${k}] = undefined;
|
|
}
|
|
} else {
|
|
newResult[${k}] = ${id}.value;
|
|
}
|
|
|
|
`);
|
|
} else {
|
|
doc.write(`
|
|
if (${id}.issues.length) {
|
|
payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
|
|
...iss,
|
|
path: iss.path ? [${k}, ...iss.path] : [${k}]
|
|
})));
|
|
}
|
|
|
|
if (${id}.value === undefined) {
|
|
if (${k} in input) {
|
|
newResult[${k}] = undefined;
|
|
}
|
|
} else {
|
|
newResult[${k}] = ${id}.value;
|
|
}
|
|
|
|
`);
|
|
}
|
|
}
|
|
doc.write(`payload.value = newResult;`);
|
|
doc.write(`return payload;`);
|
|
const fn = doc.compile();
|
|
return (payload, ctx) => fn(shape, payload, ctx);
|
|
};
|
|
let fastpass;
|
|
const isObject3 = isObject;
|
|
const jit = !globalConfig.jitless;
|
|
const allowsEval2 = allowsEval;
|
|
const fastEnabled = jit && allowsEval2.value;
|
|
const catchall = def.catchall;
|
|
let value2;
|
|
inst._zod.parse = (payload, ctx) => {
|
|
value2 ?? (value2 = _normalized.value);
|
|
const input = payload.value;
|
|
if (!isObject3(input)) {
|
|
payload.issues.push({
|
|
expected: "object",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {
|
|
if (!fastpass)
|
|
fastpass = generateFastpass(def.shape);
|
|
payload = fastpass(payload, ctx);
|
|
if (!catchall)
|
|
return payload;
|
|
return handleCatchall([], input, payload, ctx, value2, inst);
|
|
}
|
|
return superParse(payload, ctx);
|
|
};
|
|
});
|
|
$ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : void 0);
|
|
defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : void 0);
|
|
defineLazy(inst._zod, "values", () => {
|
|
if (def.options.every((o) => o._zod.values)) {
|
|
return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));
|
|
}
|
|
return void 0;
|
|
});
|
|
defineLazy(inst._zod, "pattern", () => {
|
|
if (def.options.every((o) => o._zod.pattern)) {
|
|
const patterns = def.options.map((o) => o._zod.pattern);
|
|
return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`);
|
|
}
|
|
return void 0;
|
|
});
|
|
const single = def.options.length === 1;
|
|
const first = def.options[0]._zod.run;
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (single) {
|
|
return first(payload, ctx);
|
|
}
|
|
let async = false;
|
|
const results = [];
|
|
for (const option of def.options) {
|
|
const result = option._zod.run({
|
|
value: payload.value,
|
|
issues: []
|
|
}, ctx);
|
|
if (result instanceof Promise) {
|
|
results.push(result);
|
|
async = true;
|
|
} else {
|
|
if (result.issues.length === 0)
|
|
return result;
|
|
results.push(result);
|
|
}
|
|
}
|
|
if (!async)
|
|
return handleUnionResults(results, payload, inst, ctx);
|
|
return Promise.all(results).then((results2) => {
|
|
return handleUnionResults(results2, payload, inst, ctx);
|
|
});
|
|
};
|
|
});
|
|
$ZodXor = /* @__PURE__ */ $constructor("$ZodXor", (inst, def) => {
|
|
$ZodUnion.init(inst, def);
|
|
def.inclusive = false;
|
|
const single = def.options.length === 1;
|
|
const first = def.options[0]._zod.run;
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (single) {
|
|
return first(payload, ctx);
|
|
}
|
|
let async = false;
|
|
const results = [];
|
|
for (const option of def.options) {
|
|
const result = option._zod.run({
|
|
value: payload.value,
|
|
issues: []
|
|
}, ctx);
|
|
if (result instanceof Promise) {
|
|
results.push(result);
|
|
async = true;
|
|
} else {
|
|
results.push(result);
|
|
}
|
|
}
|
|
if (!async)
|
|
return handleExclusiveUnionResults(results, payload, inst, ctx);
|
|
return Promise.all(results).then((results2) => {
|
|
return handleExclusiveUnionResults(results2, payload, inst, ctx);
|
|
});
|
|
};
|
|
});
|
|
$ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => {
|
|
def.inclusive = false;
|
|
$ZodUnion.init(inst, def);
|
|
const _super = inst._zod.parse;
|
|
defineLazy(inst._zod, "propValues", () => {
|
|
const propValues = {};
|
|
for (const option of def.options) {
|
|
const pv = option._zod.propValues;
|
|
if (!pv || Object.keys(pv).length === 0)
|
|
throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`);
|
|
for (const [k, v] of Object.entries(pv)) {
|
|
if (!propValues[k])
|
|
propValues[k] = /* @__PURE__ */ new Set();
|
|
for (const val of v) {
|
|
propValues[k].add(val);
|
|
}
|
|
}
|
|
}
|
|
return propValues;
|
|
});
|
|
const disc = cached(() => {
|
|
const opts = def.options;
|
|
const map2 = /* @__PURE__ */ new Map();
|
|
for (const o of opts) {
|
|
const values = o._zod.propValues?.[def.discriminator];
|
|
if (!values || values.size === 0)
|
|
throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`);
|
|
for (const v of values) {
|
|
if (map2.has(v)) {
|
|
throw new Error(`Duplicate discriminator value "${String(v)}"`);
|
|
}
|
|
map2.set(v, o);
|
|
}
|
|
}
|
|
return map2;
|
|
});
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!isObject(input)) {
|
|
payload.issues.push({
|
|
code: "invalid_type",
|
|
expected: "object",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
const opt = disc.value.get(input?.[def.discriminator]);
|
|
if (opt) {
|
|
return opt._zod.run(payload, ctx);
|
|
}
|
|
if (def.unionFallback) {
|
|
return _super(payload, ctx);
|
|
}
|
|
payload.issues.push({
|
|
code: "invalid_union",
|
|
errors: [],
|
|
note: "No matching discriminator",
|
|
discriminator: def.discriminator,
|
|
input,
|
|
path: [def.discriminator],
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
const left = def.left._zod.run({ value: input, issues: [] }, ctx);
|
|
const right = def.right._zod.run({ value: input, issues: [] }, ctx);
|
|
const async = left instanceof Promise || right instanceof Promise;
|
|
if (async) {
|
|
return Promise.all([left, right]).then(([left2, right2]) => {
|
|
return handleIntersectionResults(payload, left2, right2);
|
|
});
|
|
}
|
|
return handleIntersectionResults(payload, left, right);
|
|
};
|
|
});
|
|
$ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
const items = def.items;
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!Array.isArray(input)) {
|
|
payload.issues.push({
|
|
input,
|
|
inst,
|
|
expected: "tuple",
|
|
code: "invalid_type"
|
|
});
|
|
return payload;
|
|
}
|
|
payload.value = [];
|
|
const proms = [];
|
|
const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== "optional");
|
|
const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;
|
|
if (!def.rest) {
|
|
const tooBig = input.length > items.length;
|
|
const tooSmall = input.length < optStart - 1;
|
|
if (tooBig || tooSmall) {
|
|
payload.issues.push({
|
|
...tooBig ? { code: "too_big", maximum: items.length, inclusive: true } : { code: "too_small", minimum: items.length },
|
|
input,
|
|
inst,
|
|
origin: "array"
|
|
});
|
|
return payload;
|
|
}
|
|
}
|
|
let i = -1;
|
|
for (const item of items) {
|
|
i++;
|
|
if (i >= input.length) {
|
|
if (i >= optStart)
|
|
continue;
|
|
}
|
|
const result = item._zod.run({
|
|
value: input[i],
|
|
issues: []
|
|
}, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
|
|
} else {
|
|
handleTupleResult(result, payload, i);
|
|
}
|
|
}
|
|
if (def.rest) {
|
|
const rest = input.slice(items.length);
|
|
for (const el of rest) {
|
|
i++;
|
|
const result = def.rest._zod.run({
|
|
value: el,
|
|
issues: []
|
|
}, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
|
|
} else {
|
|
handleTupleResult(result, payload, i);
|
|
}
|
|
}
|
|
}
|
|
if (proms.length)
|
|
return Promise.all(proms).then(() => payload);
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!isPlainObject(input)) {
|
|
payload.issues.push({
|
|
expected: "record",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
const proms = [];
|
|
const values = def.keyType._zod.values;
|
|
if (values) {
|
|
payload.value = {};
|
|
const recordKeys = /* @__PURE__ */ new Set();
|
|
for (const key of values) {
|
|
if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") {
|
|
recordKeys.add(typeof key === "number" ? key.toString() : key);
|
|
const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => {
|
|
if (result2.issues.length) {
|
|
payload.issues.push(...prefixIssues(key, result2.issues));
|
|
}
|
|
payload.value[key] = result2.value;
|
|
}));
|
|
} else {
|
|
if (result.issues.length) {
|
|
payload.issues.push(...prefixIssues(key, result.issues));
|
|
}
|
|
payload.value[key] = result.value;
|
|
}
|
|
}
|
|
}
|
|
let unrecognized;
|
|
for (const key in input) {
|
|
if (!recordKeys.has(key)) {
|
|
unrecognized = unrecognized ?? [];
|
|
unrecognized.push(key);
|
|
}
|
|
}
|
|
if (unrecognized && unrecognized.length > 0) {
|
|
payload.issues.push({
|
|
code: "unrecognized_keys",
|
|
input,
|
|
inst,
|
|
keys: unrecognized
|
|
});
|
|
}
|
|
} else {
|
|
payload.value = {};
|
|
for (const key of Reflect.ownKeys(input)) {
|
|
if (key === "__proto__")
|
|
continue;
|
|
let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
|
|
if (keyResult instanceof Promise) {
|
|
throw new Error("Async schemas not supported in object keys currently");
|
|
}
|
|
const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length;
|
|
if (checkNumericKey) {
|
|
const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);
|
|
if (retryResult instanceof Promise) {
|
|
throw new Error("Async schemas not supported in object keys currently");
|
|
}
|
|
if (retryResult.issues.length === 0) {
|
|
keyResult = retryResult;
|
|
}
|
|
}
|
|
if (keyResult.issues.length) {
|
|
if (def.mode === "loose") {
|
|
payload.value[key] = input[key];
|
|
} else {
|
|
payload.issues.push({
|
|
code: "invalid_key",
|
|
origin: "record",
|
|
issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())),
|
|
input: key,
|
|
path: [key],
|
|
inst
|
|
});
|
|
}
|
|
continue;
|
|
}
|
|
const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => {
|
|
if (result2.issues.length) {
|
|
payload.issues.push(...prefixIssues(key, result2.issues));
|
|
}
|
|
payload.value[keyResult.value] = result2.value;
|
|
}));
|
|
} else {
|
|
if (result.issues.length) {
|
|
payload.issues.push(...prefixIssues(key, result.issues));
|
|
}
|
|
payload.value[keyResult.value] = result.value;
|
|
}
|
|
}
|
|
}
|
|
if (proms.length) {
|
|
return Promise.all(proms).then(() => payload);
|
|
}
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!(input instanceof Map)) {
|
|
payload.issues.push({
|
|
expected: "map",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
const proms = [];
|
|
payload.value = /* @__PURE__ */ new Map();
|
|
for (const [key, value2] of input) {
|
|
const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
|
|
const valueResult = def.valueType._zod.run({ value: value2, issues: [] }, ctx);
|
|
if (keyResult instanceof Promise || valueResult instanceof Promise) {
|
|
proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => {
|
|
handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx);
|
|
}));
|
|
} else {
|
|
handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);
|
|
}
|
|
}
|
|
if (proms.length)
|
|
return Promise.all(proms).then(() => payload);
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const input = payload.value;
|
|
if (!(input instanceof Set)) {
|
|
payload.issues.push({
|
|
input,
|
|
inst,
|
|
expected: "set",
|
|
code: "invalid_type"
|
|
});
|
|
return payload;
|
|
}
|
|
const proms = [];
|
|
payload.value = /* @__PURE__ */ new Set();
|
|
for (const item of input) {
|
|
const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);
|
|
if (result instanceof Promise) {
|
|
proms.push(result.then((result2) => handleSetResult(result2, payload)));
|
|
} else
|
|
handleSetResult(result, payload);
|
|
}
|
|
if (proms.length)
|
|
return Promise.all(proms).then(() => payload);
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
const values = getEnumValues(def.entries);
|
|
const valuesSet = new Set(values);
|
|
inst._zod.values = valuesSet;
|
|
inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex(o) : o.toString()).join("|")})$`);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (valuesSet.has(input)) {
|
|
return payload;
|
|
}
|
|
payload.issues.push({
|
|
code: "invalid_value",
|
|
values,
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
if (def.values.length === 0) {
|
|
throw new Error("Cannot create literal schema with no valid values");
|
|
}
|
|
const values = new Set(def.values);
|
|
inst._zod.values = values;
|
|
inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join("|")})$`);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (values.has(input)) {
|
|
return payload;
|
|
}
|
|
payload.issues.push({
|
|
code: "invalid_value",
|
|
values: def.values,
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodFile = /* @__PURE__ */ $constructor("$ZodFile", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
const input = payload.value;
|
|
if (input instanceof File)
|
|
return payload;
|
|
payload.issues.push({
|
|
expected: "file",
|
|
code: "invalid_type",
|
|
input,
|
|
inst
|
|
});
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
throw new $ZodEncodeError(inst.constructor.name);
|
|
}
|
|
const _out = def.transform(payload.value, payload);
|
|
if (ctx.async) {
|
|
const output = _out instanceof Promise ? _out : Promise.resolve(_out);
|
|
return output.then((output2) => {
|
|
payload.value = output2;
|
|
return payload;
|
|
});
|
|
}
|
|
if (_out instanceof Promise) {
|
|
throw new $ZodAsyncError();
|
|
}
|
|
payload.value = _out;
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.optin = "optional";
|
|
inst._zod.optout = "optional";
|
|
defineLazy(inst._zod, "values", () => {
|
|
return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, void 0]) : void 0;
|
|
});
|
|
defineLazy(inst._zod, "pattern", () => {
|
|
const pattern = def.innerType._zod.pattern;
|
|
return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0;
|
|
});
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (def.innerType._zod.optin === "optional") {
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise)
|
|
return result.then((r) => handleOptionalResult(r, payload.value));
|
|
return handleOptionalResult(result, payload.value);
|
|
}
|
|
if (payload.value === void 0) {
|
|
return payload;
|
|
}
|
|
return def.innerType._zod.run(payload, ctx);
|
|
};
|
|
});
|
|
$ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => {
|
|
$ZodOptional.init(inst, def);
|
|
defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
return def.innerType._zod.run(payload, ctx);
|
|
};
|
|
});
|
|
$ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
|
|
defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
|
|
defineLazy(inst._zod, "pattern", () => {
|
|
const pattern = def.innerType._zod.pattern;
|
|
return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : void 0;
|
|
});
|
|
defineLazy(inst._zod, "values", () => {
|
|
return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, null]) : void 0;
|
|
});
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (payload.value === null)
|
|
return payload;
|
|
return def.innerType._zod.run(payload, ctx);
|
|
};
|
|
});
|
|
$ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.optin = "optional";
|
|
defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
return def.innerType._zod.run(payload, ctx);
|
|
}
|
|
if (payload.value === void 0) {
|
|
payload.value = def.defaultValue;
|
|
return payload;
|
|
}
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
return result.then((result2) => handleDefaultResult(result2, def));
|
|
}
|
|
return handleDefaultResult(result, def);
|
|
};
|
|
});
|
|
$ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.optin = "optional";
|
|
defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
return def.innerType._zod.run(payload, ctx);
|
|
}
|
|
if (payload.value === void 0) {
|
|
payload.value = def.defaultValue;
|
|
}
|
|
return def.innerType._zod.run(payload, ctx);
|
|
};
|
|
});
|
|
$ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "values", () => {
|
|
const v = def.innerType._zod.values;
|
|
return v ? new Set([...v].filter((x) => x !== void 0)) : void 0;
|
|
});
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
return result.then((result2) => handleNonOptionalResult(result2, inst));
|
|
}
|
|
return handleNonOptionalResult(result, inst);
|
|
};
|
|
});
|
|
$ZodSuccess = /* @__PURE__ */ $constructor("$ZodSuccess", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
throw new $ZodEncodeError("ZodSuccess");
|
|
}
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
return result.then((result2) => {
|
|
payload.value = result2.issues.length === 0;
|
|
return payload;
|
|
});
|
|
}
|
|
payload.value = result.issues.length === 0;
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
|
|
defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
|
|
defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
return def.innerType._zod.run(payload, ctx);
|
|
}
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
return result.then((result2) => {
|
|
payload.value = result2.value;
|
|
if (result2.issues.length) {
|
|
payload.value = def.catchValue({
|
|
...payload,
|
|
error: {
|
|
issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config()))
|
|
},
|
|
input: payload.value
|
|
});
|
|
payload.issues = [];
|
|
}
|
|
return payload;
|
|
});
|
|
}
|
|
payload.value = result.value;
|
|
if (result.issues.length) {
|
|
payload.value = def.catchValue({
|
|
...payload,
|
|
error: {
|
|
issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config()))
|
|
},
|
|
input: payload.value
|
|
});
|
|
payload.issues = [];
|
|
}
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodNaN = /* @__PURE__ */ $constructor("$ZodNaN", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) {
|
|
payload.issues.push({
|
|
input: payload.value,
|
|
inst,
|
|
expected: "nan",
|
|
code: "invalid_type"
|
|
});
|
|
return payload;
|
|
}
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "values", () => def.in._zod.values);
|
|
defineLazy(inst._zod, "optin", () => def.in._zod.optin);
|
|
defineLazy(inst._zod, "optout", () => def.out._zod.optout);
|
|
defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
const right = def.out._zod.run(payload, ctx);
|
|
if (right instanceof Promise) {
|
|
return right.then((right2) => handlePipeResult(right2, def.in, ctx));
|
|
}
|
|
return handlePipeResult(right, def.in, ctx);
|
|
}
|
|
const left = def.in._zod.run(payload, ctx);
|
|
if (left instanceof Promise) {
|
|
return left.then((left2) => handlePipeResult(left2, def.out, ctx));
|
|
}
|
|
return handlePipeResult(left, def.out, ctx);
|
|
};
|
|
});
|
|
$ZodCodec = /* @__PURE__ */ $constructor("$ZodCodec", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "values", () => def.in._zod.values);
|
|
defineLazy(inst._zod, "optin", () => def.in._zod.optin);
|
|
defineLazy(inst._zod, "optout", () => def.out._zod.optout);
|
|
defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const direction = ctx.direction || "forward";
|
|
if (direction === "forward") {
|
|
const left = def.in._zod.run(payload, ctx);
|
|
if (left instanceof Promise) {
|
|
return left.then((left2) => handleCodecAResult(left2, def, ctx));
|
|
}
|
|
return handleCodecAResult(left, def, ctx);
|
|
} else {
|
|
const right = def.out._zod.run(payload, ctx);
|
|
if (right instanceof Promise) {
|
|
return right.then((right2) => handleCodecAResult(right2, def, ctx));
|
|
}
|
|
return handleCodecAResult(right, def, ctx);
|
|
}
|
|
};
|
|
});
|
|
$ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
|
|
defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin);
|
|
defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
if (ctx.direction === "backward") {
|
|
return def.innerType._zod.run(payload, ctx);
|
|
}
|
|
const result = def.innerType._zod.run(payload, ctx);
|
|
if (result instanceof Promise) {
|
|
return result.then(handleReadonlyResult);
|
|
}
|
|
return handleReadonlyResult(result);
|
|
};
|
|
});
|
|
$ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
const regexParts = [];
|
|
for (const part of def.parts) {
|
|
if (typeof part === "object" && part !== null) {
|
|
if (!part._zod.pattern) {
|
|
throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);
|
|
}
|
|
const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;
|
|
if (!source)
|
|
throw new Error(`Invalid template literal part: ${part._zod.traits}`);
|
|
const start = source.startsWith("^") ? 1 : 0;
|
|
const end = source.endsWith("$") ? source.length - 1 : source.length;
|
|
regexParts.push(source.slice(start, end));
|
|
} else if (part === null || primitiveTypes.has(typeof part)) {
|
|
regexParts.push(escapeRegex(`${part}`));
|
|
} else {
|
|
throw new Error(`Invalid template literal part: ${part}`);
|
|
}
|
|
}
|
|
inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (typeof payload.value !== "string") {
|
|
payload.issues.push({
|
|
input: payload.value,
|
|
inst,
|
|
expected: "string",
|
|
code: "invalid_type"
|
|
});
|
|
return payload;
|
|
}
|
|
inst._zod.pattern.lastIndex = 0;
|
|
if (!inst._zod.pattern.test(payload.value)) {
|
|
payload.issues.push({
|
|
input: payload.value,
|
|
inst,
|
|
code: "invalid_format",
|
|
format: def.format ?? "template_literal",
|
|
pattern: inst._zod.pattern.source
|
|
});
|
|
return payload;
|
|
}
|
|
return payload;
|
|
};
|
|
});
|
|
$ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._def = def;
|
|
inst._zod.def = def;
|
|
inst.implement = (func) => {
|
|
if (typeof func !== "function") {
|
|
throw new Error("implement() must be called with a function");
|
|
}
|
|
return function(...args) {
|
|
const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;
|
|
const result = Reflect.apply(func, this, parsedArgs);
|
|
if (inst._def.output) {
|
|
return parse(inst._def.output, result);
|
|
}
|
|
return result;
|
|
};
|
|
};
|
|
inst.implementAsync = (func) => {
|
|
if (typeof func !== "function") {
|
|
throw new Error("implementAsync() must be called with a function");
|
|
}
|
|
return async function(...args) {
|
|
const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;
|
|
const result = await Reflect.apply(func, this, parsedArgs);
|
|
if (inst._def.output) {
|
|
return await parseAsync(inst._def.output, result);
|
|
}
|
|
return result;
|
|
};
|
|
};
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (typeof payload.value !== "function") {
|
|
payload.issues.push({
|
|
code: "invalid_type",
|
|
expected: "function",
|
|
input: payload.value,
|
|
inst
|
|
});
|
|
return payload;
|
|
}
|
|
const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise";
|
|
if (hasPromiseOutput) {
|
|
payload.value = inst.implementAsync(payload.value);
|
|
} else {
|
|
payload.value = inst.implement(payload.value);
|
|
}
|
|
return payload;
|
|
};
|
|
inst.input = (...args) => {
|
|
const F = inst.constructor;
|
|
if (Array.isArray(args[0])) {
|
|
return new F({
|
|
type: "function",
|
|
input: new $ZodTuple({
|
|
type: "tuple",
|
|
items: args[0],
|
|
rest: args[1]
|
|
}),
|
|
output: inst._def.output
|
|
});
|
|
}
|
|
return new F({
|
|
type: "function",
|
|
input: args[0],
|
|
output: inst._def.output
|
|
});
|
|
};
|
|
inst.output = (output) => {
|
|
const F = inst.constructor;
|
|
return new F({
|
|
type: "function",
|
|
input: inst._def.input,
|
|
output
|
|
});
|
|
};
|
|
return inst;
|
|
});
|
|
$ZodPromise = /* @__PURE__ */ $constructor("$ZodPromise", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));
|
|
};
|
|
});
|
|
$ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
defineLazy(inst._zod, "innerType", () => def.getter());
|
|
defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern);
|
|
defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues);
|
|
defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? void 0);
|
|
defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? void 0);
|
|
inst._zod.parse = (payload, ctx) => {
|
|
const inner = inst._zod.innerType;
|
|
return inner._zod.run(payload, ctx);
|
|
};
|
|
});
|
|
$ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => {
|
|
$ZodCheck.init(inst, def);
|
|
$ZodType.init(inst, def);
|
|
inst._zod.parse = (payload, _) => {
|
|
return payload;
|
|
};
|
|
inst._zod.check = (payload) => {
|
|
const input = payload.value;
|
|
const r = def.fn(input);
|
|
if (r instanceof Promise) {
|
|
return r.then((r2) => handleRefineResult(r2, payload, input, inst));
|
|
}
|
|
handleRefineResult(r, payload, input, inst);
|
|
return;
|
|
};
|
|
});
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js
|
|
function ar_default() {
|
|
return {
|
|
localeError: error()
|
|
};
|
|
}
|
|
var error;
|
|
var init_ar = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js"() {
|
|
init_util();
|
|
error = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
|
|
file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
|
|
array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
|
|
set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0645\u062F\u062E\u0644",
|
|
email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
url: "\u0631\u0627\u0628\u0637",
|
|
emoji: "\u0625\u064A\u0645\u0648\u062C\u064A",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO",
|
|
date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO",
|
|
time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO",
|
|
duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO",
|
|
ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4",
|
|
ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6",
|
|
cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4",
|
|
cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6",
|
|
base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded",
|
|
base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded",
|
|
json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON",
|
|
e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u0645\u062F\u062E\u0644"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue2.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;
|
|
}
|
|
return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"}`;
|
|
return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${issue2.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u0645\u0639\u0631\u0641${issue2.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${issue2.keys.length > 1 ? "\u0629" : ""}: ${joinValues(issue2.keys, "\u060C ")}`;
|
|
case "invalid_key":
|
|
return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644";
|
|
case "invalid_element":
|
|
return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`;
|
|
default:
|
|
return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644";
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js
|
|
function az_default() {
|
|
return {
|
|
localeError: error2()
|
|
};
|
|
}
|
|
var error2;
|
|
var init_az = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js"() {
|
|
init_util();
|
|
error2 = () => {
|
|
const Sizable = {
|
|
string: { unit: "simvol", verb: "olmal\u0131d\u0131r" },
|
|
file: { unit: "bayt", verb: "olmal\u0131d\u0131r" },
|
|
array: { unit: "element", verb: "olmal\u0131d\u0131r" },
|
|
set: { unit: "element", verb: "olmal\u0131d\u0131r" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "email address",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO datetime",
|
|
date: "ISO date",
|
|
time: "ISO time",
|
|
duration: "ISO duration",
|
|
ipv4: "IPv4 address",
|
|
ipv6: "IPv6 address",
|
|
cidrv4: "IPv4 range",
|
|
cidrv6: "IPv6 range",
|
|
base64: "base64-encoded string",
|
|
base64url: "base64url-encoded string",
|
|
json_string: "JSON string",
|
|
e164: "E.164 number",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${issue2.expected}, daxil olan ${received}`;
|
|
}
|
|
return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`;
|
|
return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Yanl\u0131\u015F m\u0259tn: "${_issue.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`;
|
|
if (_issue.format === "ends_with")
|
|
return `Yanl\u0131\u015F m\u0259tn: "${_issue.suffix}" il\u0259 bitm\u0259lidir`;
|
|
if (_issue.format === "includes")
|
|
return `Yanl\u0131\u015F m\u0259tn: "${_issue.includes}" daxil olmal\u0131d\u0131r`;
|
|
if (_issue.format === "regex")
|
|
return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;
|
|
return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Yanl\u0131\u015F \u0259d\u0259d: ${issue2.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`;
|
|
case "unrecognized_keys":
|
|
return `Tan\u0131nmayan a\xE7ar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`;
|
|
case "invalid_union":
|
|
return "Yanl\u0131\u015F d\u0259y\u0259r";
|
|
case "invalid_element":
|
|
return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;
|
|
default:
|
|
return `Yanl\u0131\u015F d\u0259y\u0259r`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js
|
|
function getBelarusianPlural(count, one, few, many) {
|
|
const absCount = Math.abs(count);
|
|
const lastDigit = absCount % 10;
|
|
const lastTwoDigits = absCount % 100;
|
|
if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
|
|
return many;
|
|
}
|
|
if (lastDigit === 1) {
|
|
return one;
|
|
}
|
|
if (lastDigit >= 2 && lastDigit <= 4) {
|
|
return few;
|
|
}
|
|
return many;
|
|
}
|
|
function be_default() {
|
|
return {
|
|
localeError: error3()
|
|
};
|
|
}
|
|
var error3;
|
|
var init_be = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js"() {
|
|
init_util();
|
|
error3 = () => {
|
|
const Sizable = {
|
|
string: {
|
|
unit: {
|
|
one: "\u0441\u0456\u043C\u0432\u0430\u043B",
|
|
few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B",
|
|
many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E"
|
|
},
|
|
verb: "\u043C\u0435\u0446\u044C"
|
|
},
|
|
array: {
|
|
unit: {
|
|
one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442",
|
|
few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B",
|
|
many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E"
|
|
},
|
|
verb: "\u043C\u0435\u0446\u044C"
|
|
},
|
|
set: {
|
|
unit: {
|
|
one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442",
|
|
few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B",
|
|
many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E"
|
|
},
|
|
verb: "\u043C\u0435\u0446\u044C"
|
|
},
|
|
file: {
|
|
unit: {
|
|
one: "\u0431\u0430\u0439\u0442",
|
|
few: "\u0431\u0430\u0439\u0442\u044B",
|
|
many: "\u0431\u0430\u0439\u0442\u0430\u045E"
|
|
},
|
|
verb: "\u043C\u0435\u0446\u044C"
|
|
}
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0443\u0432\u043E\u0434",
|
|
email: "email \u0430\u0434\u0440\u0430\u0441",
|
|
url: "URL",
|
|
emoji: "\u044D\u043C\u043E\u0434\u0437\u0456",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441",
|
|
date: "ISO \u0434\u0430\u0442\u0430",
|
|
time: "ISO \u0447\u0430\u0441",
|
|
duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C",
|
|
ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441",
|
|
ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441",
|
|
cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D",
|
|
cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D",
|
|
base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64",
|
|
base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url",
|
|
json_string: "JSON \u0440\u0430\u0434\u043E\u043A",
|
|
e164: "\u043D\u0443\u043C\u0430\u0440 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u0443\u0432\u043E\u0434"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u043B\u0456\u043A",
|
|
array: "\u043C\u0430\u0441\u0456\u045E"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue2.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;
|
|
}
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const maxValue = Number(issue2.maximum);
|
|
const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`;
|
|
}
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const minValue = Number(issue2.minimum);
|
|
const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`;
|
|
}
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue2.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434";
|
|
case "invalid_element":
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue2.origin}`;
|
|
default:
|
|
return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js
|
|
function bg_default() {
|
|
return {
|
|
localeError: error4()
|
|
};
|
|
}
|
|
var error4;
|
|
var init_bg = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js"() {
|
|
init_util();
|
|
error4 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
|
|
file: { unit: "\u0431\u0430\u0439\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
|
|
array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
|
|
set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0432\u0445\u043E\u0434",
|
|
email: "\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441",
|
|
url: "URL",
|
|
emoji: "\u0435\u043C\u043E\u0434\u0436\u0438",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0432\u0440\u0435\u043C\u0435",
|
|
date: "ISO \u0434\u0430\u0442\u0430",
|
|
time: "ISO \u0432\u0440\u0435\u043C\u0435",
|
|
duration: "ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442",
|
|
ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441",
|
|
ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441",
|
|
cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D",
|
|
cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D",
|
|
base64: "base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437",
|
|
base64url: "base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437",
|
|
json_string: "JSON \u043D\u0438\u0437",
|
|
e164: "E.164 \u043D\u043E\u043C\u0435\u0440",
|
|
jwt: "JWT",
|
|
template_literal: "\u0432\u0445\u043E\u0434"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0447\u0438\u0441\u043B\u043E",
|
|
array: "\u043C\u0430\u0441\u0438\u0432"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;
|
|
}
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430"}`;
|
|
return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;
|
|
let invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D";
|
|
if (_issue.format === "emoji")
|
|
invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";
|
|
if (_issue.format === "datetime")
|
|
invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";
|
|
if (_issue.format === "date")
|
|
invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";
|
|
if (_issue.format === "time")
|
|
invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";
|
|
if (_issue.format === "duration")
|
|
invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";
|
|
return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue2.keys.length > 1 ? "\u0438" : ""} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u043E\u0432\u0435" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434";
|
|
case "invalid_element":
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue2.origin}`;
|
|
default:
|
|
return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js
|
|
function ca_default() {
|
|
return {
|
|
localeError: error5()
|
|
};
|
|
}
|
|
var error5;
|
|
var init_ca = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js"() {
|
|
init_util();
|
|
error5 = () => {
|
|
const Sizable = {
|
|
string: { unit: "car\xE0cters", verb: "contenir" },
|
|
file: { unit: "bytes", verb: "contenir" },
|
|
array: { unit: "elements", verb: "contenir" },
|
|
set: { unit: "elements", verb: "contenir" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "entrada",
|
|
email: "adre\xE7a electr\xF2nica",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "data i hora ISO",
|
|
date: "data ISO",
|
|
time: "hora ISO",
|
|
duration: "durada ISO",
|
|
ipv4: "adre\xE7a IPv4",
|
|
ipv6: "adre\xE7a IPv6",
|
|
cidrv4: "rang IPv4",
|
|
cidrv6: "rang IPv6",
|
|
base64: "cadena codificada en base64",
|
|
base64url: "cadena codificada en base64url",
|
|
json_string: "cadena JSON",
|
|
e164: "n\xFAmero E.164",
|
|
jwt: "JWT",
|
|
template_literal: "entrada"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Tipus inv\xE0lid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`;
|
|
}
|
|
return `Tipus inv\xE0lid: s'esperava ${expected}, s'ha rebut ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Valor inv\xE0lid: s'esperava ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Opci\xF3 inv\xE0lida: s'esperava una de ${joinValues(issue2.values, " o ")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "com a m\xE0xim" : "menys de";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} contingu\xE9s ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`;
|
|
return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} fos ${adj} ${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? "com a m\xEDnim" : "m\xE9s de";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Massa petit: s'esperava que ${issue2.origin} contingu\xE9s ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Massa petit: s'esperava que ${issue2.origin} fos ${adj} ${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Format inv\xE0lid: ha de comen\xE7ar amb "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Format inv\xE0lid: ha d'acabar amb "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Format inv\xE0lid: ha d'incloure "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${_issue.pattern}`;
|
|
return `Format inv\xE0lid per a ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Clau${issue2.keys.length > 1 ? "s" : ""} no reconeguda${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Clau inv\xE0lida a ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Entrada inv\xE0lida";
|
|
// Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general
|
|
case "invalid_element":
|
|
return `Element inv\xE0lid a ${issue2.origin}`;
|
|
default:
|
|
return `Entrada inv\xE0lida`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js
|
|
function cs_default() {
|
|
return {
|
|
localeError: error6()
|
|
};
|
|
}
|
|
var error6;
|
|
var init_cs = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js"() {
|
|
init_util();
|
|
error6 = () => {
|
|
const Sizable = {
|
|
string: { unit: "znak\u016F", verb: "m\xEDt" },
|
|
file: { unit: "bajt\u016F", verb: "m\xEDt" },
|
|
array: { unit: "prvk\u016F", verb: "m\xEDt" },
|
|
set: { unit: "prvk\u016F", verb: "m\xEDt" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "regul\xE1rn\xED v\xFDraz",
|
|
email: "e-mailov\xE1 adresa",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "datum a \u010Das ve form\xE1tu ISO",
|
|
date: "datum ve form\xE1tu ISO",
|
|
time: "\u010Das ve form\xE1tu ISO",
|
|
duration: "doba trv\xE1n\xED ISO",
|
|
ipv4: "IPv4 adresa",
|
|
ipv6: "IPv6 adresa",
|
|
cidrv4: "rozsah IPv4",
|
|
cidrv6: "rozsah IPv6",
|
|
base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64",
|
|
base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url",
|
|
json_string: "\u0159et\u011Bzec ve form\xE1tu JSON",
|
|
e164: "\u010D\xEDslo E.164",
|
|
jwt: "JWT",
|
|
template_literal: "vstup"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u010D\xEDslo",
|
|
string: "\u0159et\u011Bzec",
|
|
function: "funkce",
|
|
array: "pole"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${issue2.expected}, obdr\u017Eeno ${received}`;
|
|
}
|
|
return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${expected}, obdr\u017Eeno ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "prvk\u016F"}`;
|
|
}
|
|
return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "prvk\u016F"}`;
|
|
}
|
|
return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${_issue.pattern}`;
|
|
return `Neplatn\xFD form\xE1t ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Nezn\xE1m\xE9 kl\xED\u010De: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Neplatn\xFD kl\xED\u010D v ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Neplatn\xFD vstup";
|
|
case "invalid_element":
|
|
return `Neplatn\xE1 hodnota v ${issue2.origin}`;
|
|
default:
|
|
return `Neplatn\xFD vstup`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js
|
|
function da_default() {
|
|
return {
|
|
localeError: error7()
|
|
};
|
|
}
|
|
var error7;
|
|
var init_da = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js"() {
|
|
init_util();
|
|
error7 = () => {
|
|
const Sizable = {
|
|
string: { unit: "tegn", verb: "havde" },
|
|
file: { unit: "bytes", verb: "havde" },
|
|
array: { unit: "elementer", verb: "indeholdt" },
|
|
set: { unit: "elementer", verb: "indeholdt" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "e-mailadresse",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO dato- og klokkesl\xE6t",
|
|
date: "ISO-dato",
|
|
time: "ISO-klokkesl\xE6t",
|
|
duration: "ISO-varighed",
|
|
ipv4: "IPv4-omr\xE5de",
|
|
ipv6: "IPv6-omr\xE5de",
|
|
cidrv4: "IPv4-spektrum",
|
|
cidrv6: "IPv6-spektrum",
|
|
base64: "base64-kodet streng",
|
|
base64url: "base64url-kodet streng",
|
|
json_string: "JSON-streng",
|
|
e164: "E.164-nummer",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
string: "streng",
|
|
number: "tal",
|
|
boolean: "boolean",
|
|
array: "liste",
|
|
object: "objekt",
|
|
set: "s\xE6t",
|
|
file: "fil"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ugyldigt input: forventede instanceof ${issue2.expected}, fik ${received}`;
|
|
}
|
|
return `Ugyldigt input: forventede ${expected}, fik ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ugyldig v\xE6rdi: forventede ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ugyldigt valg: forventede en af f\xF8lgende ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
if (sizing)
|
|
return `For stor: forventede ${origin ?? "value"} ${sizing.verb} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`;
|
|
return `For stor: forventede ${origin ?? "value"} havde ${adj} ${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
if (sizing) {
|
|
return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `For lille: forventede ${origin} havde ${adj} ${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Ugyldig streng: skal starte med "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Ugyldig streng: skal ende med "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Ugyldig streng: skal indeholde "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Ugyldig streng: skal matche m\xF8nsteret ${_issue.pattern}`;
|
|
return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ugyldigt tal: skal v\xE6re deleligt med ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "Ukendte n\xF8gler" : "Ukendt n\xF8gle"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Ugyldig n\xF8gle i ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Ugyldigt input: matcher ingen af de tilladte typer";
|
|
case "invalid_element":
|
|
return `Ugyldig v\xE6rdi i ${issue2.origin}`;
|
|
default:
|
|
return `Ugyldigt input`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js
|
|
function de_default() {
|
|
return {
|
|
localeError: error8()
|
|
};
|
|
}
|
|
var error8;
|
|
var init_de = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js"() {
|
|
init_util();
|
|
error8 = () => {
|
|
const Sizable = {
|
|
string: { unit: "Zeichen", verb: "zu haben" },
|
|
file: { unit: "Bytes", verb: "zu haben" },
|
|
array: { unit: "Elemente", verb: "zu haben" },
|
|
set: { unit: "Elemente", verb: "zu haben" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "Eingabe",
|
|
email: "E-Mail-Adresse",
|
|
url: "URL",
|
|
emoji: "Emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO-Datum und -Uhrzeit",
|
|
date: "ISO-Datum",
|
|
time: "ISO-Uhrzeit",
|
|
duration: "ISO-Dauer",
|
|
ipv4: "IPv4-Adresse",
|
|
ipv6: "IPv6-Adresse",
|
|
cidrv4: "IPv4-Bereich",
|
|
cidrv6: "IPv6-Bereich",
|
|
base64: "Base64-codierter String",
|
|
base64url: "Base64-URL-codierter String",
|
|
json_string: "JSON-String",
|
|
e164: "E.164-Nummer",
|
|
jwt: "JWT",
|
|
template_literal: "Eingabe"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "Zahl",
|
|
array: "Array"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ung\xFCltige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`;
|
|
}
|
|
return `Ung\xFCltige Eingabe: erwartet ${expected}, erhalten ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ung\xFCltige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ung\xFCltige Option: erwartet eine von ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`;
|
|
return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ist`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} hat`;
|
|
}
|
|
return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ist`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Ung\xFCltiger String: muss mit "${_issue.prefix}" beginnen`;
|
|
if (_issue.format === "ends_with")
|
|
return `Ung\xFCltiger String: muss mit "${_issue.suffix}" enden`;
|
|
if (_issue.format === "includes")
|
|
return `Ung\xFCltiger String: muss "${_issue.includes}" enthalten`;
|
|
if (_issue.format === "regex")
|
|
return `Ung\xFCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;
|
|
return `Ung\xFCltig: ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ung\xFCltige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Ung\xFCltiger Schl\xFCssel in ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Ung\xFCltige Eingabe";
|
|
case "invalid_element":
|
|
return `Ung\xFCltiger Wert in ${issue2.origin}`;
|
|
default:
|
|
return `Ung\xFCltige Eingabe`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js
|
|
function en_default() {
|
|
return {
|
|
localeError: error9()
|
|
};
|
|
}
|
|
var error9;
|
|
var init_en = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js"() {
|
|
init_util();
|
|
error9 = () => {
|
|
const Sizable = {
|
|
string: { unit: "characters", verb: "to have" },
|
|
file: { unit: "bytes", verb: "to have" },
|
|
array: { unit: "items", verb: "to have" },
|
|
set: { unit: "items", verb: "to have" },
|
|
map: { unit: "entries", verb: "to have" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "email address",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO datetime",
|
|
date: "ISO date",
|
|
time: "ISO time",
|
|
duration: "ISO duration",
|
|
ipv4: "IPv4 address",
|
|
ipv6: "IPv6 address",
|
|
mac: "MAC address",
|
|
cidrv4: "IPv4 range",
|
|
cidrv6: "IPv6 range",
|
|
base64: "base64-encoded string",
|
|
base64url: "base64url-encoded string",
|
|
json_string: "JSON string",
|
|
e164: "E.164 number",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
// Compatibility: "nan" -> "NaN" for display
|
|
nan: "NaN"
|
|
// All other type names omitted - they fall back to raw values via ?? operator
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
return `Invalid input: expected ${expected}, received ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`;
|
|
return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Invalid string: must start with "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Invalid string: must end with "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Invalid string: must include "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Invalid string: must match pattern ${_issue.pattern}`;
|
|
return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Invalid number: must be a multiple of ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Invalid key in ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Invalid input";
|
|
case "invalid_element":
|
|
return `Invalid value in ${issue2.origin}`;
|
|
default:
|
|
return `Invalid input`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js
|
|
function eo_default() {
|
|
return {
|
|
localeError: error10()
|
|
};
|
|
}
|
|
var error10;
|
|
var init_eo = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js"() {
|
|
init_util();
|
|
error10 = () => {
|
|
const Sizable = {
|
|
string: { unit: "karaktrojn", verb: "havi" },
|
|
file: { unit: "bajtojn", verb: "havi" },
|
|
array: { unit: "elementojn", verb: "havi" },
|
|
set: { unit: "elementojn", verb: "havi" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "enigo",
|
|
email: "retadreso",
|
|
url: "URL",
|
|
emoji: "emo\u011Dio",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO-datotempo",
|
|
date: "ISO-dato",
|
|
time: "ISO-tempo",
|
|
duration: "ISO-da\u016Dro",
|
|
ipv4: "IPv4-adreso",
|
|
ipv6: "IPv6-adreso",
|
|
cidrv4: "IPv4-rango",
|
|
cidrv6: "IPv6-rango",
|
|
base64: "64-ume kodita karaktraro",
|
|
base64url: "URL-64-ume kodita karaktraro",
|
|
json_string: "JSON-karaktraro",
|
|
e164: "E.164-nombro",
|
|
jwt: "JWT",
|
|
template_literal: "enigo"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "nombro",
|
|
array: "tabelo",
|
|
null: "senvalora"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Nevalida enigo: atendi\u011Dis instanceof ${issue2.expected}, ricevi\u011Dis ${received}`;
|
|
}
|
|
return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Nevalida enigo: atendi\u011Dis ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Nevalida opcio: atendi\u011Dis unu el ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementojn"}`;
|
|
return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Nevalida karaktraro: devas komenci\u011Di per "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Nevalida karaktraro: devas fini\u011Di per "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;
|
|
return `Nevalida ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Nevalida nombro: devas esti oblo de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Nekonata${issue2.keys.length > 1 ? "j" : ""} \u015Dlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Nevalida \u015Dlosilo en ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Nevalida enigo";
|
|
case "invalid_element":
|
|
return `Nevalida valoro en ${issue2.origin}`;
|
|
default:
|
|
return `Nevalida enigo`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js
|
|
function es_default() {
|
|
return {
|
|
localeError: error11()
|
|
};
|
|
}
|
|
var error11;
|
|
var init_es = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js"() {
|
|
init_util();
|
|
error11 = () => {
|
|
const Sizable = {
|
|
string: { unit: "caracteres", verb: "tener" },
|
|
file: { unit: "bytes", verb: "tener" },
|
|
array: { unit: "elementos", verb: "tener" },
|
|
set: { unit: "elementos", verb: "tener" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "entrada",
|
|
email: "direcci\xF3n de correo electr\xF3nico",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "fecha y hora ISO",
|
|
date: "fecha ISO",
|
|
time: "hora ISO",
|
|
duration: "duraci\xF3n ISO",
|
|
ipv4: "direcci\xF3n IPv4",
|
|
ipv6: "direcci\xF3n IPv6",
|
|
cidrv4: "rango IPv4",
|
|
cidrv6: "rango IPv6",
|
|
base64: "cadena codificada en base64",
|
|
base64url: "URL codificada en base64",
|
|
json_string: "cadena JSON",
|
|
e164: "n\xFAmero E.164",
|
|
jwt: "JWT",
|
|
template_literal: "entrada"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
string: "texto",
|
|
number: "n\xFAmero",
|
|
boolean: "booleano",
|
|
array: "arreglo",
|
|
object: "objeto",
|
|
set: "conjunto",
|
|
file: "archivo",
|
|
date: "fecha",
|
|
bigint: "n\xFAmero grande",
|
|
symbol: "s\xEDmbolo",
|
|
undefined: "indefinido",
|
|
null: "nulo",
|
|
function: "funci\xF3n",
|
|
map: "mapa",
|
|
record: "registro",
|
|
tuple: "tupla",
|
|
enum: "enumeraci\xF3n",
|
|
union: "uni\xF3n",
|
|
literal: "literal",
|
|
promise: "promesa",
|
|
void: "vac\xEDo",
|
|
never: "nunca",
|
|
unknown: "desconocido",
|
|
any: "cualquiera"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Entrada inv\xE1lida: se esperaba instanceof ${issue2.expected}, recibido ${received}`;
|
|
}
|
|
return `Entrada inv\xE1lida: se esperaba ${expected}, recibido ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Entrada inv\xE1lida: se esperaba ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Opci\xF3n inv\xE1lida: se esperaba una de ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
if (sizing)
|
|
return `Demasiado grande: se esperaba que ${origin ?? "valor"} tuviera ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`;
|
|
return `Demasiado grande: se esperaba que ${origin ?? "valor"} fuera ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
if (sizing) {
|
|
return `Demasiado peque\xF1o: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Demasiado peque\xF1o: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Cadena inv\xE1lida: debe comenzar con "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Cadena inv\xE1lida: debe terminar en "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Cadena inv\xE1lida: debe incluir "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${_issue.pattern}`;
|
|
return `Inv\xE1lido ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Llave${issue2.keys.length > 1 ? "s" : ""} desconocida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Llave inv\xE1lida en ${TypeDictionary[issue2.origin] ?? issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Entrada inv\xE1lida";
|
|
case "invalid_element":
|
|
return `Valor inv\xE1lido en ${TypeDictionary[issue2.origin] ?? issue2.origin}`;
|
|
default:
|
|
return `Entrada inv\xE1lida`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js
|
|
function fa_default() {
|
|
return {
|
|
localeError: error12()
|
|
};
|
|
}
|
|
var error12;
|
|
var init_fa = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js"() {
|
|
init_util();
|
|
error12 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
|
|
file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
|
|
array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
|
|
set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0648\u0631\u0648\u062F\u06CC",
|
|
email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644",
|
|
url: "URL",
|
|
emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648",
|
|
date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648",
|
|
time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648",
|
|
duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648",
|
|
ipv4: "IPv4 \u0622\u062F\u0631\u0633",
|
|
ipv6: "IPv6 \u0622\u062F\u0631\u0633",
|
|
cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647",
|
|
cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647",
|
|
base64: "base64-encoded \u0631\u0634\u062A\u0647",
|
|
base64url: "base64url-encoded \u0631\u0634\u062A\u0647",
|
|
json_string: "JSON \u0631\u0634\u062A\u0647",
|
|
e164: "E.164 \u0639\u062F\u062F",
|
|
jwt: "JWT",
|
|
template_literal: "\u0648\u0631\u0648\u062F\u06CC"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0639\u062F\u062F",
|
|
array: "\u0622\u0631\u0627\u06CC\u0647"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue2.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;
|
|
}
|
|
return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1) {
|
|
return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${stringifyPrimitive(issue2.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;
|
|
}
|
|
return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${joinValues(issue2.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`;
|
|
}
|
|
return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0628\u0627\u0634\u062F`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;
|
|
}
|
|
return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0628\u0627\u0634\u062F`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;
|
|
}
|
|
if (_issue.format === "ends_with") {
|
|
return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;
|
|
}
|
|
if (_issue.format === "includes") {
|
|
return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${_issue.includes}" \u0628\u0627\u0634\u062F`;
|
|
}
|
|
if (_issue.format === "regex") {
|
|
return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;
|
|
}
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue2.divisor} \u0628\u0627\u0634\u062F`;
|
|
case "unrecognized_keys":
|
|
return `\u06A9\u0644\u06CC\u062F${issue2.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;
|
|
case "invalid_element":
|
|
return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue2.origin}`;
|
|
default:
|
|
return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js
|
|
function fi_default() {
|
|
return {
|
|
localeError: error13()
|
|
};
|
|
}
|
|
var error13;
|
|
var init_fi = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js"() {
|
|
init_util();
|
|
error13 = () => {
|
|
const Sizable = {
|
|
string: { unit: "merkki\xE4", subject: "merkkijonon" },
|
|
file: { unit: "tavua", subject: "tiedoston" },
|
|
array: { unit: "alkiota", subject: "listan" },
|
|
set: { unit: "alkiota", subject: "joukon" },
|
|
number: { unit: "", subject: "luvun" },
|
|
bigint: { unit: "", subject: "suuren kokonaisluvun" },
|
|
int: { unit: "", subject: "kokonaisluvun" },
|
|
date: { unit: "", subject: "p\xE4iv\xE4m\xE4\xE4r\xE4n" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "s\xE4\xE4nn\xF6llinen lauseke",
|
|
email: "s\xE4hk\xF6postiosoite",
|
|
url: "URL-osoite",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO-aikaleima",
|
|
date: "ISO-p\xE4iv\xE4m\xE4\xE4r\xE4",
|
|
time: "ISO-aika",
|
|
duration: "ISO-kesto",
|
|
ipv4: "IPv4-osoite",
|
|
ipv6: "IPv6-osoite",
|
|
cidrv4: "IPv4-alue",
|
|
cidrv6: "IPv6-alue",
|
|
base64: "base64-koodattu merkkijono",
|
|
base64url: "base64url-koodattu merkkijono",
|
|
json_string: "JSON-merkkijono",
|
|
e164: "E.164-luku",
|
|
jwt: "JWT",
|
|
template_literal: "templaattimerkkijono"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Virheellinen tyyppi: odotettiin instanceof ${issue2.expected}, oli ${received}`;
|
|
}
|
|
return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Virheellinen sy\xF6te: t\xE4ytyy olla ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Liian suuri: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim();
|
|
}
|
|
return `Liian suuri: arvon t\xE4ytyy olla ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Liian pieni: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim();
|
|
}
|
|
return `Liian pieni: arvon t\xE4ytyy olla ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${_issue.includes}"`;
|
|
if (_issue.format === "regex") {
|
|
return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${_issue.pattern}`;
|
|
}
|
|
return `Virheellinen ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Virheellinen luku: t\xE4ytyy olla luvun ${issue2.divisor} monikerta`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return "Virheellinen avain tietueessa";
|
|
case "invalid_union":
|
|
return "Virheellinen unioni";
|
|
case "invalid_element":
|
|
return "Virheellinen arvo joukossa";
|
|
default:
|
|
return `Virheellinen sy\xF6te`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js
|
|
function fr_default() {
|
|
return {
|
|
localeError: error14()
|
|
};
|
|
}
|
|
var error14;
|
|
var init_fr = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js"() {
|
|
init_util();
|
|
error14 = () => {
|
|
const Sizable = {
|
|
string: { unit: "caract\xE8res", verb: "avoir" },
|
|
file: { unit: "octets", verb: "avoir" },
|
|
array: { unit: "\xE9l\xE9ments", verb: "avoir" },
|
|
set: { unit: "\xE9l\xE9ments", verb: "avoir" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "entr\xE9e",
|
|
email: "adresse e-mail",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "date et heure ISO",
|
|
date: "date ISO",
|
|
time: "heure ISO",
|
|
duration: "dur\xE9e ISO",
|
|
ipv4: "adresse IPv4",
|
|
ipv6: "adresse IPv6",
|
|
cidrv4: "plage IPv4",
|
|
cidrv6: "plage IPv6",
|
|
base64: "cha\xEEne encod\xE9e en base64",
|
|
base64url: "cha\xEEne encod\xE9e en base64url",
|
|
json_string: "cha\xEEne JSON",
|
|
e164: "num\xE9ro E.164",
|
|
jwt: "JWT",
|
|
template_literal: "entr\xE9e"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "nombre",
|
|
array: "tableau"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Entr\xE9e invalide : instanceof ${issue2.expected} attendu, ${received} re\xE7u`;
|
|
}
|
|
return `Entr\xE9e invalide : ${expected} attendu, ${received} re\xE7u`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Entr\xE9e invalide : ${stringifyPrimitive(issue2.values[0])} attendu`;
|
|
return `Option invalide : une valeur parmi ${joinValues(issue2.values, "|")} attendue`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Trop grand : ${issue2.origin ?? "valeur"} doit ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xE9l\xE9ment(s)"}`;
|
|
return `Trop grand : ${issue2.origin ?? "valeur"} doit \xEAtre ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Trop petit : ${issue2.origin} doit ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Trop petit : ${issue2.origin} doit \xEAtre ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Cl\xE9 invalide dans ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Entr\xE9e invalide";
|
|
case "invalid_element":
|
|
return `Valeur invalide dans ${issue2.origin}`;
|
|
default:
|
|
return `Entr\xE9e invalide`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js
|
|
function fr_CA_default() {
|
|
return {
|
|
localeError: error15()
|
|
};
|
|
}
|
|
var error15;
|
|
var init_fr_CA = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js"() {
|
|
init_util();
|
|
error15 = () => {
|
|
const Sizable = {
|
|
string: { unit: "caract\xE8res", verb: "avoir" },
|
|
file: { unit: "octets", verb: "avoir" },
|
|
array: { unit: "\xE9l\xE9ments", verb: "avoir" },
|
|
set: { unit: "\xE9l\xE9ments", verb: "avoir" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "entr\xE9e",
|
|
email: "adresse courriel",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "date-heure ISO",
|
|
date: "date ISO",
|
|
time: "heure ISO",
|
|
duration: "dur\xE9e ISO",
|
|
ipv4: "adresse IPv4",
|
|
ipv6: "adresse IPv6",
|
|
cidrv4: "plage IPv4",
|
|
cidrv6: "plage IPv6",
|
|
base64: "cha\xEEne encod\xE9e en base64",
|
|
base64url: "cha\xEEne encod\xE9e en base64url",
|
|
json_string: "cha\xEEne JSON",
|
|
e164: "num\xE9ro E.164",
|
|
jwt: "JWT",
|
|
template_literal: "entr\xE9e"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Entr\xE9e invalide : attendu instanceof ${issue2.expected}, re\xE7u ${received}`;
|
|
}
|
|
return `Entr\xE9e invalide : attendu ${expected}, re\xE7u ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Entr\xE9e invalide : attendu ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Option invalide : attendu l'une des valeurs suivantes ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "\u2264" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} ait ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
|
|
return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} soit ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? "\u2265" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Trop petit : attendu que ${issue2.origin} ait ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Trop petit : attendu que ${issue2.origin} soit ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Cha\xEEne invalide : doit correspondre au motif ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Cl\xE9 invalide dans ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Entr\xE9e invalide";
|
|
case "invalid_element":
|
|
return `Valeur invalide dans ${issue2.origin}`;
|
|
default:
|
|
return `Entr\xE9e invalide`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js
|
|
function he_default() {
|
|
return {
|
|
localeError: error16()
|
|
};
|
|
}
|
|
var error16;
|
|
var init_he = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js"() {
|
|
init_util();
|
|
error16 = () => {
|
|
const TypeNames = {
|
|
string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" },
|
|
number: { label: "\u05DE\u05E1\u05E4\u05E8", gender: "m" },
|
|
boolean: { label: "\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9", gender: "m" },
|
|
bigint: { label: "BigInt", gender: "m" },
|
|
date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA", gender: "m" },
|
|
array: { label: "\u05DE\u05E2\u05E8\u05DA", gender: "m" },
|
|
object: { label: "\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8", gender: "m" },
|
|
null: { label: "\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)", gender: "m" },
|
|
undefined: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)", gender: "m" },
|
|
symbol: { label: "\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)", gender: "m" },
|
|
function: { label: "\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4", gender: "f" },
|
|
map: { label: "\u05DE\u05E4\u05D4 (Map)", gender: "f" },
|
|
set: { label: "\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)", gender: "f" },
|
|
file: { label: "\u05E7\u05D5\u05D1\u05E5", gender: "m" },
|
|
promise: { label: "Promise", gender: "m" },
|
|
NaN: { label: "NaN", gender: "m" },
|
|
unknown: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2", gender: "m" },
|
|
value: { label: "\u05E2\u05E8\u05DA", gender: "m" }
|
|
};
|
|
const Sizable = {
|
|
string: { unit: "\u05EA\u05D5\u05D5\u05D9\u05DD", shortLabel: "\u05E7\u05E6\u05E8", longLabel: "\u05D0\u05E8\u05D5\u05DA" },
|
|
file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" },
|
|
array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" },
|
|
set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" },
|
|
number: { unit: "", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }
|
|
// no unit
|
|
};
|
|
const typeEntry = (t) => t ? TypeNames[t] : void 0;
|
|
const typeLabel = (t) => {
|
|
const e = typeEntry(t);
|
|
if (e)
|
|
return e.label;
|
|
return t ?? TypeNames.unknown.label;
|
|
};
|
|
const withDefinite = (t) => `\u05D4${typeLabel(t)}`;
|
|
const verbFor = (t) => {
|
|
const e = typeEntry(t);
|
|
const gender = e?.gender ?? "m";
|
|
return gender === "f" ? "\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA" : "\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA";
|
|
};
|
|
const getSizing = (origin) => {
|
|
if (!origin)
|
|
return null;
|
|
return Sizable[origin] ?? null;
|
|
};
|
|
const FormatDictionary = {
|
|
regex: { label: "\u05E7\u05DC\u05D8", gender: "m" },
|
|
email: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", gender: "f" },
|
|
url: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", gender: "f" },
|
|
emoji: { label: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", gender: "m" },
|
|
uuid: { label: "UUID", gender: "m" },
|
|
nanoid: { label: "nanoid", gender: "m" },
|
|
guid: { label: "GUID", gender: "m" },
|
|
cuid: { label: "cuid", gender: "m" },
|
|
cuid2: { label: "cuid2", gender: "m" },
|
|
ulid: { label: "ULID", gender: "m" },
|
|
xid: { label: "XID", gender: "m" },
|
|
ksuid: { label: "KSUID", gender: "m" },
|
|
datetime: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", gender: "m" },
|
|
date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", gender: "m" },
|
|
time: { label: "\u05D6\u05DE\u05DF ISO", gender: "m" },
|
|
duration: { label: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", gender: "m" },
|
|
ipv4: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", gender: "f" },
|
|
ipv6: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", gender: "f" },
|
|
cidrv4: { label: "\u05D8\u05D5\u05D5\u05D7 IPv4", gender: "m" },
|
|
cidrv6: { label: "\u05D8\u05D5\u05D5\u05D7 IPv6", gender: "m" },
|
|
base64: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", gender: "f" },
|
|
base64url: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", gender: "f" },
|
|
json_string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", gender: "f" },
|
|
e164: { label: "\u05DE\u05E1\u05E4\u05E8 E.164", gender: "m" },
|
|
jwt: { label: "JWT", gender: "m" },
|
|
ends_with: { label: "\u05E7\u05DC\u05D8", gender: "m" },
|
|
includes: { label: "\u05E7\u05DC\u05D8", gender: "m" },
|
|
lowercase: { label: "\u05E7\u05DC\u05D8", gender: "m" },
|
|
starts_with: { label: "\u05E7\u05DC\u05D8", gender: "m" },
|
|
uppercase: { label: "\u05E7\u05DC\u05D8", gender: "m" }
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expectedKey = issue2.expected;
|
|
const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel(expectedKey);
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue2.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;
|
|
}
|
|
return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;
|
|
}
|
|
case "invalid_value": {
|
|
if (issue2.values.length === 1) {
|
|
return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${stringifyPrimitive(issue2.values[0])}`;
|
|
}
|
|
const stringified = issue2.values.map((v) => stringifyPrimitive(v));
|
|
if (issue2.values.length === 2) {
|
|
return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;
|
|
}
|
|
const lastValue = stringified[stringified.length - 1];
|
|
const restValues = stringified.slice(0, -1).join(", ");
|
|
return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;
|
|
}
|
|
case "too_big": {
|
|
const sizing = getSizing(issue2.origin);
|
|
const subject = withDefinite(issue2.origin ?? "value");
|
|
if (issue2.origin === "string") {
|
|
return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim();
|
|
}
|
|
if (issue2.origin === "number") {
|
|
const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`;
|
|
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;
|
|
}
|
|
if (issue2.origin === "array" || issue2.origin === "set") {
|
|
const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
|
|
const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${sizing?.unit ?? ""}`;
|
|
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();
|
|
}
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const be = verbFor(issue2.origin ?? "value");
|
|
if (sizing?.unit) {
|
|
return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const sizing = getSizing(issue2.origin);
|
|
const subject = withDefinite(issue2.origin ?? "value");
|
|
if (issue2.origin === "string") {
|
|
return `${sizing?.shortLabel ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim();
|
|
}
|
|
if (issue2.origin === "number") {
|
|
const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`;
|
|
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;
|
|
}
|
|
if (issue2.origin === "array" || issue2.origin === "set") {
|
|
const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
|
|
if (issue2.minimum === 1 && issue2.inclusive) {
|
|
const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3";
|
|
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;
|
|
}
|
|
const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${sizing?.unit ?? ""}`;
|
|
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();
|
|
}
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const be = verbFor(issue2.origin ?? "value");
|
|
if (sizing?.unit) {
|
|
return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;
|
|
const nounEntry = FormatDictionary[_issue.format];
|
|
const noun = nounEntry?.label ?? _issue.format;
|
|
const gender = nounEntry?.gender ?? "m";
|
|
const adjective = gender === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF";
|
|
return `${noun} \u05DC\u05D0 ${adjective}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u05DE\u05E4\u05EA\u05D7${issue2.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue2.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key": {
|
|
return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;
|
|
}
|
|
case "invalid_union":
|
|
return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF";
|
|
case "invalid_element": {
|
|
const place = withDefinite(issue2.origin ?? "array");
|
|
return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;
|
|
}
|
|
default:
|
|
return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js
|
|
function hu_default() {
|
|
return {
|
|
localeError: error17()
|
|
};
|
|
}
|
|
var error17;
|
|
var init_hu = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js"() {
|
|
init_util();
|
|
error17 = () => {
|
|
const Sizable = {
|
|
string: { unit: "karakter", verb: "legyen" },
|
|
file: { unit: "byte", verb: "legyen" },
|
|
array: { unit: "elem", verb: "legyen" },
|
|
set: { unit: "elem", verb: "legyen" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "bemenet",
|
|
email: "email c\xEDm",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO id\u0151b\xE9lyeg",
|
|
date: "ISO d\xE1tum",
|
|
time: "ISO id\u0151",
|
|
duration: "ISO id\u0151intervallum",
|
|
ipv4: "IPv4 c\xEDm",
|
|
ipv6: "IPv6 c\xEDm",
|
|
cidrv4: "IPv4 tartom\xE1ny",
|
|
cidrv6: "IPv6 tartom\xE1ny",
|
|
base64: "base64-k\xF3dolt string",
|
|
base64url: "base64url-k\xF3dolt string",
|
|
json_string: "JSON string",
|
|
e164: "E.164 sz\xE1m",
|
|
jwt: "JWT",
|
|
template_literal: "bemenet"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "sz\xE1m",
|
|
array: "t\xF6mb"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${issue2.expected}, a kapott \xE9rt\xE9k ${received}`;
|
|
}
|
|
return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${expected}, a kapott \xE9rt\xE9k ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `T\xFAl nagy: ${issue2.origin ?? "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elem"}`;
|
|
return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${issue2.origin ?? "\xE9rt\xE9k"} t\xFAl nagy: ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} m\xE9rete t\xFAl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} t\xFAl kicsi ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\xC9rv\xE9nytelen string: "${_issue.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`;
|
|
if (_issue.format === "ends_with")
|
|
return `\xC9rv\xE9nytelen string: "${_issue.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`;
|
|
if (_issue.format === "includes")
|
|
return `\xC9rv\xE9nytelen string: "${_issue.includes}" \xE9rt\xE9ket kell tartalmaznia`;
|
|
if (_issue.format === "regex")
|
|
return `\xC9rv\xE9nytelen string: ${_issue.pattern} mint\xE1nak kell megfelelnie`;
|
|
return `\xC9rv\xE9nytelen ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\xC9rv\xE9nytelen sz\xE1m: ${issue2.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`;
|
|
case "unrecognized_keys":
|
|
return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\xC9rv\xE9nytelen kulcs ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\xC9rv\xE9nytelen bemenet";
|
|
case "invalid_element":
|
|
return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${issue2.origin}`;
|
|
default:
|
|
return `\xC9rv\xE9nytelen bemenet`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js
|
|
function getArmenianPlural(count, one, many) {
|
|
return Math.abs(count) === 1 ? one : many;
|
|
}
|
|
function withDefiniteArticle(word) {
|
|
if (!word)
|
|
return "";
|
|
const vowels = ["\u0561", "\u0565", "\u0568", "\u056B", "\u0578", "\u0578\u0582", "\u0585"];
|
|
const lastChar = word[word.length - 1];
|
|
return word + (vowels.includes(lastChar) ? "\u0576" : "\u0568");
|
|
}
|
|
function hy_default() {
|
|
return {
|
|
localeError: error18()
|
|
};
|
|
}
|
|
var error18;
|
|
var init_hy = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js"() {
|
|
init_util();
|
|
error18 = () => {
|
|
const Sizable = {
|
|
string: {
|
|
unit: {
|
|
one: "\u0576\u0577\u0561\u0576",
|
|
many: "\u0576\u0577\u0561\u0576\u0576\u0565\u0580"
|
|
},
|
|
verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C"
|
|
},
|
|
file: {
|
|
unit: {
|
|
one: "\u0562\u0561\u0575\u0569",
|
|
many: "\u0562\u0561\u0575\u0569\u0565\u0580"
|
|
},
|
|
verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C"
|
|
},
|
|
array: {
|
|
unit: {
|
|
one: "\u057F\u0561\u0580\u0580",
|
|
many: "\u057F\u0561\u0580\u0580\u0565\u0580"
|
|
},
|
|
verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C"
|
|
},
|
|
set: {
|
|
unit: {
|
|
one: "\u057F\u0561\u0580\u0580",
|
|
many: "\u057F\u0561\u0580\u0580\u0565\u0580"
|
|
},
|
|
verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C"
|
|
}
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0574\u0578\u0582\u057F\u0584",
|
|
email: "\u0567\u056C. \u0570\u0561\u057D\u0581\u0565",
|
|
url: "URL",
|
|
emoji: "\u0567\u0574\u0578\u057B\u056B",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574",
|
|
date: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E",
|
|
time: "ISO \u056A\u0561\u0574",
|
|
duration: "ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
|
|
ipv4: "IPv4 \u0570\u0561\u057D\u0581\u0565",
|
|
ipv6: "IPv6 \u0570\u0561\u057D\u0581\u0565",
|
|
cidrv4: "IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584",
|
|
cidrv6: "IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584",
|
|
base64: "base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572",
|
|
base64url: "base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572",
|
|
json_string: "JSON \u057F\u0578\u0572",
|
|
e164: "E.164 \u0570\u0561\u0574\u0561\u0580",
|
|
jwt: "JWT",
|
|
template_literal: "\u0574\u0578\u0582\u057F\u0584"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0569\u056B\u057E",
|
|
array: "\u0566\u0561\u0576\u0563\u057E\u0561\u056E"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue2.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;
|
|
}
|
|
return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${stringifyPrimitive(issue2.values[1])}`;
|
|
return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const maxValue = Number(issue2.maximum);
|
|
const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);
|
|
return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.maximum.toString()} ${unit}`;
|
|
}
|
|
return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const minValue = Number(issue2.minimum);
|
|
const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);
|
|
return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.minimum.toString()} ${unit}`;
|
|
}
|
|
return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056C\u056B\u0576\u056B ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${_issue.prefix}"-\u0578\u057E`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${_issue.suffix}"-\u0578\u057E`;
|
|
if (_issue.format === "includes")
|
|
return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;
|
|
return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue2.divisor}-\u056B`;
|
|
case "unrecognized_keys":
|
|
return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue2.keys.length > 1 ? "\u0576\u0565\u0580" : ""}. ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`;
|
|
case "invalid_union":
|
|
return "\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574";
|
|
case "invalid_element":
|
|
return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`;
|
|
default:
|
|
return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js
|
|
function id_default() {
|
|
return {
|
|
localeError: error19()
|
|
};
|
|
}
|
|
var error19;
|
|
var init_id = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js"() {
|
|
init_util();
|
|
error19 = () => {
|
|
const Sizable = {
|
|
string: { unit: "karakter", verb: "memiliki" },
|
|
file: { unit: "byte", verb: "memiliki" },
|
|
array: { unit: "item", verb: "memiliki" },
|
|
set: { unit: "item", verb: "memiliki" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "alamat email",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "tanggal dan waktu format ISO",
|
|
date: "tanggal format ISO",
|
|
time: "jam format ISO",
|
|
duration: "durasi format ISO",
|
|
ipv4: "alamat IPv4",
|
|
ipv6: "alamat IPv6",
|
|
cidrv4: "rentang alamat IPv4",
|
|
cidrv6: "rentang alamat IPv6",
|
|
base64: "string dengan enkode base64",
|
|
base64url: "string dengan enkode base64url",
|
|
json_string: "string JSON",
|
|
e164: "angka E.164",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Input tidak valid: diharapkan instanceof ${issue2.expected}, diterima ${received}`;
|
|
}
|
|
return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Input tidak valid: diharapkan ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Pilihan tidak valid: diharapkan salah satu dari ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} memiliki ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`;
|
|
return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} menjadi ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Terlalu kecil: diharapkan ${issue2.origin} memiliki ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Terlalu kecil: diharapkan ${issue2.origin} menjadi ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `String tidak valid: harus menyertakan "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `String tidak valid: harus sesuai pola ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} tidak valid`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Angka tidak valid: harus kelipatan dari ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Kunci tidak dikenali ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Kunci tidak valid di ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Input tidak valid";
|
|
case "invalid_element":
|
|
return `Nilai tidak valid di ${issue2.origin}`;
|
|
default:
|
|
return `Input tidak valid`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js
|
|
function is_default() {
|
|
return {
|
|
localeError: error20()
|
|
};
|
|
}
|
|
var error20;
|
|
var init_is = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js"() {
|
|
init_util();
|
|
error20 = () => {
|
|
const Sizable = {
|
|
string: { unit: "stafi", verb: "a\xF0 hafa" },
|
|
file: { unit: "b\xE6ti", verb: "a\xF0 hafa" },
|
|
array: { unit: "hluti", verb: "a\xF0 hafa" },
|
|
set: { unit: "hluti", verb: "a\xF0 hafa" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "gildi",
|
|
email: "netfang",
|
|
url: "vefsl\xF3\xF0",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO dagsetning og t\xEDmi",
|
|
date: "ISO dagsetning",
|
|
time: "ISO t\xEDmi",
|
|
duration: "ISO t\xEDmalengd",
|
|
ipv4: "IPv4 address",
|
|
ipv6: "IPv6 address",
|
|
cidrv4: "IPv4 range",
|
|
cidrv6: "IPv6 range",
|
|
base64: "base64-encoded strengur",
|
|
base64url: "base64url-encoded strengur",
|
|
json_string: "JSON strengur",
|
|
e164: "E.164 t\xF6lugildi",
|
|
jwt: "JWT",
|
|
template_literal: "gildi"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "n\xFAmer",
|
|
array: "fylki"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera instanceof ${issue2.expected}`;
|
|
}
|
|
return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera ${expected}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Rangt gildi: gert r\xE1\xF0 fyrir ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} hafi ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "hluti"}`;
|
|
return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} s\xE9 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} s\xE9 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${_issue.pattern}`;
|
|
return `Rangt ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\xD3\xFEekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Rangur lykill \xED ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Rangt gildi";
|
|
case "invalid_element":
|
|
return `Rangt gildi \xED ${issue2.origin}`;
|
|
default:
|
|
return `Rangt gildi`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js
|
|
function it_default() {
|
|
return {
|
|
localeError: error21()
|
|
};
|
|
}
|
|
var error21;
|
|
var init_it = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js"() {
|
|
init_util();
|
|
error21 = () => {
|
|
const Sizable = {
|
|
string: { unit: "caratteri", verb: "avere" },
|
|
file: { unit: "byte", verb: "avere" },
|
|
array: { unit: "elementi", verb: "avere" },
|
|
set: { unit: "elementi", verb: "avere" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "indirizzo email",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "data e ora ISO",
|
|
date: "data ISO",
|
|
time: "ora ISO",
|
|
duration: "durata ISO",
|
|
ipv4: "indirizzo IPv4",
|
|
ipv6: "indirizzo IPv6",
|
|
cidrv4: "intervallo IPv4",
|
|
cidrv6: "intervallo IPv6",
|
|
base64: "stringa codificata in base64",
|
|
base64url: "URL codificata in base64",
|
|
json_string: "stringa JSON",
|
|
e164: "numero E.164",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "numero",
|
|
array: "vettore"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Input non valido: atteso instanceof ${issue2.expected}, ricevuto ${received}`;
|
|
}
|
|
return `Input non valido: atteso ${expected}, ricevuto ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Input non valido: atteso ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Opzione non valida: atteso uno tra ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Troppo grande: ${issue2.origin ?? "valore"} deve avere ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementi"}`;
|
|
return `Troppo grande: ${issue2.origin ?? "valore"} deve essere ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Troppo piccolo: ${issue2.origin} deve avere ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Troppo piccolo: ${issue2.origin} deve essere ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Stringa non valida: deve iniziare con "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Stringa non valida: deve terminare con "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Stringa non valida: deve includere "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;
|
|
return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Numero non valido: deve essere un multiplo di ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Chiav${issue2.keys.length > 1 ? "i" : "e"} non riconosciut${issue2.keys.length > 1 ? "e" : "a"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Chiave non valida in ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Input non valido";
|
|
case "invalid_element":
|
|
return `Valore non valido in ${issue2.origin}`;
|
|
default:
|
|
return `Input non valido`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js
|
|
function ja_default() {
|
|
return {
|
|
localeError: error22()
|
|
};
|
|
}
|
|
var error22;
|
|
var init_ja = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js"() {
|
|
init_util();
|
|
error22 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
|
|
file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" },
|
|
array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" },
|
|
set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u5165\u529B\u5024",
|
|
email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",
|
|
url: "URL",
|
|
emoji: "\u7D75\u6587\u5B57",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO\u65E5\u6642",
|
|
date: "ISO\u65E5\u4ED8",
|
|
time: "ISO\u6642\u523B",
|
|
duration: "ISO\u671F\u9593",
|
|
ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9",
|
|
ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9",
|
|
cidrv4: "IPv4\u7BC4\u56F2",
|
|
cidrv6: "IPv6\u7BC4\u56F2",
|
|
base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
|
|
base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
|
|
json_string: "JSON\u6587\u5B57\u5217",
|
|
e164: "E.164\u756A\u53F7",
|
|
jwt: "JWT",
|
|
template_literal: "\u5165\u529B\u5024"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u6570\u5024",
|
|
array: "\u914D\u5217"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue2.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;
|
|
}
|
|
return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue2.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;
|
|
return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue2.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${sizing.unit ?? "\u8981\u7D20"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
if (_issue.format === "includes")
|
|
return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
if (_issue.format === "regex")
|
|
return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u7121\u52B9\u306A\u6570\u5024: ${issue2.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
|
|
case "unrecognized_keys":
|
|
return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue2.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue2.keys, "\u3001")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;
|
|
case "invalid_union":
|
|
return "\u7121\u52B9\u306A\u5165\u529B";
|
|
case "invalid_element":
|
|
return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;
|
|
default:
|
|
return `\u7121\u52B9\u306A\u5165\u529B`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js
|
|
function ka_default() {
|
|
return {
|
|
localeError: error23()
|
|
};
|
|
}
|
|
var error23;
|
|
var init_ka = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js"() {
|
|
init_util();
|
|
error23 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
|
|
file: { unit: "\u10D1\u10D0\u10D8\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
|
|
array: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
|
|
set: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0",
|
|
email: "\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8",
|
|
url: "URL",
|
|
emoji: "\u10D4\u10DB\u10DD\u10EF\u10D8",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD",
|
|
date: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8",
|
|
time: "\u10D3\u10E0\u10DD",
|
|
duration: "\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0",
|
|
ipv4: "IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8",
|
|
ipv6: "IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8",
|
|
cidrv4: "IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8",
|
|
cidrv6: "IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8",
|
|
base64: "base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8",
|
|
base64url: "base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8",
|
|
json_string: "JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8",
|
|
e164: "E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8",
|
|
jwt: "JWT",
|
|
template_literal: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8",
|
|
string: "\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8",
|
|
boolean: "\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8",
|
|
function: "\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0",
|
|
array: "\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue2.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;
|
|
}
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${joinValues(issue2.values, "|")}-\u10D3\u10D0\u10DC`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
|
|
return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.prefix}"-\u10D8\u10D7`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.suffix}"-\u10D8\u10D7`;
|
|
if (_issue.format === "includes")
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 "${_issue.includes}"-\u10E1`;
|
|
if (_issue.format === "regex")
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue2.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;
|
|
case "unrecognized_keys":
|
|
return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue2.keys.length > 1 ? "\u10D4\u10D1\u10D8" : "\u10D8"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue2.origin}-\u10E8\u10D8`;
|
|
case "invalid_union":
|
|
return "\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0";
|
|
case "invalid_element":
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue2.origin}-\u10E8\u10D8`;
|
|
default:
|
|
return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js
|
|
function km_default() {
|
|
return {
|
|
localeError: error24()
|
|
};
|
|
}
|
|
var error24;
|
|
var init_km = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js"() {
|
|
init_util();
|
|
error24 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
|
|
file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
|
|
array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
|
|
set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B",
|
|
email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B",
|
|
url: "URL",
|
|
emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO",
|
|
date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO",
|
|
time: "\u1798\u17C9\u17C4\u1784 ISO",
|
|
duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO",
|
|
ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4",
|
|
ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6",
|
|
cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4",
|
|
cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6",
|
|
base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64",
|
|
base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url",
|
|
json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON",
|
|
e164: "\u179B\u17C1\u1781 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u179B\u17C1\u1781",
|
|
array: "\u17A2\u17B6\u179A\u17C1 (Array)",
|
|
null: "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue2.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;
|
|
}
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u1792\u17B6\u178F\u17BB"}`;
|
|
return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;
|
|
return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;
|
|
case "invalid_element":
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`;
|
|
default:
|
|
return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js
|
|
function kh_default() {
|
|
return km_default();
|
|
}
|
|
var init_kh = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js"() {
|
|
init_km();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js
|
|
function ko_default() {
|
|
return {
|
|
localeError: error25()
|
|
};
|
|
}
|
|
var error25;
|
|
var init_ko = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js"() {
|
|
init_util();
|
|
error25 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\uBB38\uC790", verb: "to have" },
|
|
file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" },
|
|
array: { unit: "\uAC1C", verb: "to have" },
|
|
set: { unit: "\uAC1C", verb: "to have" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\uC785\uB825",
|
|
email: "\uC774\uBA54\uC77C \uC8FC\uC18C",
|
|
url: "URL",
|
|
emoji: "\uC774\uBAA8\uC9C0",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04",
|
|
date: "ISO \uB0A0\uC9DC",
|
|
time: "ISO \uC2DC\uAC04",
|
|
duration: "ISO \uAE30\uAC04",
|
|
ipv4: "IPv4 \uC8FC\uC18C",
|
|
ipv6: "IPv6 \uC8FC\uC18C",
|
|
cidrv4: "IPv4 \uBC94\uC704",
|
|
cidrv6: "IPv6 \uBC94\uC704",
|
|
base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4",
|
|
base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4",
|
|
json_string: "JSON \uBB38\uC790\uC5F4",
|
|
e164: "E.164 \uBC88\uD638",
|
|
jwt: "JWT",
|
|
template_literal: "\uC785\uB825"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue2.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;
|
|
}
|
|
return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${stringifyPrimitive(issue2.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;
|
|
return `\uC798\uBABB\uB41C \uC635\uC158: ${joinValues(issue2.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC";
|
|
const suffix = adj === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4";
|
|
const sizing = getSizing(issue2.origin);
|
|
const unit = sizing?.unit ?? "\uC694\uC18C";
|
|
if (sizing)
|
|
return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`;
|
|
return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()} ${adj}${suffix}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC";
|
|
const suffix = adj === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4";
|
|
const sizing = getSizing(issue2.origin);
|
|
const unit = sizing?.unit ?? "\uC694\uC18C";
|
|
if (sizing) {
|
|
return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`;
|
|
}
|
|
return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()} ${adj}${suffix}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;
|
|
if (_issue.format === "includes")
|
|
return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;
|
|
if (_issue.format === "regex")
|
|
return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;
|
|
return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue2.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;
|
|
case "unrecognized_keys":
|
|
return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\uC798\uBABB\uB41C \uD0A4: ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return `\uC798\uBABB\uB41C \uC785\uB825`;
|
|
case "invalid_element":
|
|
return `\uC798\uBABB\uB41C \uAC12: ${issue2.origin}`;
|
|
default:
|
|
return `\uC798\uBABB\uB41C \uC785\uB825`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js
|
|
function getUnitTypeFromNumber(number4) {
|
|
const abs = Math.abs(number4);
|
|
const last = abs % 10;
|
|
const last2 = abs % 100;
|
|
if (last2 >= 11 && last2 <= 19 || last === 0)
|
|
return "many";
|
|
if (last === 1)
|
|
return "one";
|
|
return "few";
|
|
}
|
|
function lt_default() {
|
|
return {
|
|
localeError: error26()
|
|
};
|
|
}
|
|
var capitalizeFirstCharacter, error26;
|
|
var init_lt = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js"() {
|
|
init_util();
|
|
capitalizeFirstCharacter = (text2) => {
|
|
return text2.charAt(0).toUpperCase() + text2.slice(1);
|
|
};
|
|
error26 = () => {
|
|
const Sizable = {
|
|
string: {
|
|
unit: {
|
|
one: "simbolis",
|
|
few: "simboliai",
|
|
many: "simboli\u0173"
|
|
},
|
|
verb: {
|
|
smaller: {
|
|
inclusive: "turi b\u016Bti ne ilgesn\u0117 kaip",
|
|
notInclusive: "turi b\u016Bti trumpesn\u0117 kaip"
|
|
},
|
|
bigger: {
|
|
inclusive: "turi b\u016Bti ne trumpesn\u0117 kaip",
|
|
notInclusive: "turi b\u016Bti ilgesn\u0117 kaip"
|
|
}
|
|
}
|
|
},
|
|
file: {
|
|
unit: {
|
|
one: "baitas",
|
|
few: "baitai",
|
|
many: "bait\u0173"
|
|
},
|
|
verb: {
|
|
smaller: {
|
|
inclusive: "turi b\u016Bti ne didesnis kaip",
|
|
notInclusive: "turi b\u016Bti ma\u017Eesnis kaip"
|
|
},
|
|
bigger: {
|
|
inclusive: "turi b\u016Bti ne ma\u017Eesnis kaip",
|
|
notInclusive: "turi b\u016Bti didesnis kaip"
|
|
}
|
|
}
|
|
},
|
|
array: {
|
|
unit: {
|
|
one: "element\u0105",
|
|
few: "elementus",
|
|
many: "element\u0173"
|
|
},
|
|
verb: {
|
|
smaller: {
|
|
inclusive: "turi tur\u0117ti ne daugiau kaip",
|
|
notInclusive: "turi tur\u0117ti ma\u017Eiau kaip"
|
|
},
|
|
bigger: {
|
|
inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip",
|
|
notInclusive: "turi tur\u0117ti daugiau kaip"
|
|
}
|
|
}
|
|
},
|
|
set: {
|
|
unit: {
|
|
one: "element\u0105",
|
|
few: "elementus",
|
|
many: "element\u0173"
|
|
},
|
|
verb: {
|
|
smaller: {
|
|
inclusive: "turi tur\u0117ti ne daugiau kaip",
|
|
notInclusive: "turi tur\u0117ti ma\u017Eiau kaip"
|
|
},
|
|
bigger: {
|
|
inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip",
|
|
notInclusive: "turi tur\u0117ti daugiau kaip"
|
|
}
|
|
}
|
|
}
|
|
};
|
|
function getSizing(origin, unitType, inclusive, targetShouldBe) {
|
|
const result = Sizable[origin] ?? null;
|
|
if (result === null)
|
|
return result;
|
|
return {
|
|
unit: result.unit[unitType],
|
|
verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"]
|
|
};
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u012Fvestis",
|
|
email: "el. pa\u0161to adresas",
|
|
url: "URL",
|
|
emoji: "jaustukas",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO data ir laikas",
|
|
date: "ISO data",
|
|
time: "ISO laikas",
|
|
duration: "ISO trukm\u0117",
|
|
ipv4: "IPv4 adresas",
|
|
ipv6: "IPv6 adresas",
|
|
cidrv4: "IPv4 tinklo prefiksas (CIDR)",
|
|
cidrv6: "IPv6 tinklo prefiksas (CIDR)",
|
|
base64: "base64 u\u017Ekoduota eilut\u0117",
|
|
base64url: "base64url u\u017Ekoduota eilut\u0117",
|
|
json_string: "JSON eilut\u0117",
|
|
e164: "E.164 numeris",
|
|
jwt: "JWT",
|
|
template_literal: "\u012Fvestis"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "skai\u010Dius",
|
|
bigint: "sveikasis skai\u010Dius",
|
|
string: "eilut\u0117",
|
|
boolean: "login\u0117 reik\u0161m\u0117",
|
|
undefined: "neapibr\u0117\u017Eta reik\u0161m\u0117",
|
|
function: "funkcija",
|
|
symbol: "simbolis",
|
|
array: "masyvas",
|
|
object: "objektas",
|
|
null: "nulin\u0117 reik\u0161m\u0117"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue2.expected}`;
|
|
}
|
|
return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Privalo b\u016Bti ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Privalo b\u016Bti vienas i\u0161 ${joinValues(issue2.values, "|")} pasirinkim\u0173`;
|
|
case "too_big": {
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.maximum)), issue2.inclusive ?? false, "smaller");
|
|
if (sizing?.verb)
|
|
return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.maximum.toString()} ${sizing.unit ?? "element\u0173"}`;
|
|
const adj = issue2.inclusive ? "ne didesnis kaip" : "ma\u017Eesnis kaip";
|
|
return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.maximum.toString()} ${sizing?.unit}`;
|
|
}
|
|
case "too_small": {
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.minimum)), issue2.inclusive ?? false, "bigger");
|
|
if (sizing?.verb)
|
|
return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.minimum.toString()} ${sizing.unit ?? "element\u0173"}`;
|
|
const adj = issue2.inclusive ? "ne ma\u017Eesnis kaip" : "didesnis kaip";
|
|
return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.minimum.toString()} ${sizing?.unit}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Eilut\u0117 privalo prasid\u0117ti "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Eilut\u0117 privalo pasibaigti "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Eilut\u0117 privalo \u012Ftraukti "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;
|
|
return `Neteisingas ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Skai\u010Dius privalo b\u016Bti ${issue2.divisor} kartotinis.`;
|
|
case "unrecognized_keys":
|
|
return `Neatpa\u017Eint${issue2.keys.length > 1 ? "i" : "as"} rakt${issue2.keys.length > 1 ? "ai" : "as"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return "Rastas klaidingas raktas";
|
|
case "invalid_union":
|
|
return "Klaidinga \u012Fvestis";
|
|
case "invalid_element": {
|
|
const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
|
|
return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`;
|
|
}
|
|
default:
|
|
return "Klaidinga \u012Fvestis";
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js
|
|
function mk_default() {
|
|
return {
|
|
localeError: error27()
|
|
};
|
|
}
|
|
var error27;
|
|
var init_mk = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js"() {
|
|
init_util();
|
|
error27 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
|
|
file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
|
|
array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
|
|
set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0432\u043D\u0435\u0441",
|
|
email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430",
|
|
url: "URL",
|
|
emoji: "\u0435\u043C\u043E\u045F\u0438",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435",
|
|
date: "ISO \u0434\u0430\u0442\u0443\u043C",
|
|
time: "ISO \u0432\u0440\u0435\u043C\u0435",
|
|
duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435",
|
|
ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430",
|
|
ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430",
|
|
cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433",
|
|
cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433",
|
|
base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430",
|
|
base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430",
|
|
json_string: "JSON \u043D\u0438\u0437\u0430",
|
|
e164: "E.164 \u0431\u0440\u043E\u0458",
|
|
jwt: "JWT",
|
|
template_literal: "\u0432\u043D\u0435\u0441"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0431\u0440\u043E\u0458",
|
|
array: "\u043D\u0438\u0437\u0430"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue2.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;
|
|
}
|
|
return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`;
|
|
return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;
|
|
return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441";
|
|
case "invalid_element":
|
|
return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue2.origin}`;
|
|
default:
|
|
return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js
|
|
function ms_default() {
|
|
return {
|
|
localeError: error28()
|
|
};
|
|
}
|
|
var error28;
|
|
var init_ms = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js"() {
|
|
init_util();
|
|
error28 = () => {
|
|
const Sizable = {
|
|
string: { unit: "aksara", verb: "mempunyai" },
|
|
file: { unit: "bait", verb: "mempunyai" },
|
|
array: { unit: "elemen", verb: "mempunyai" },
|
|
set: { unit: "elemen", verb: "mempunyai" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "alamat e-mel",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "tarikh masa ISO",
|
|
date: "tarikh ISO",
|
|
time: "masa ISO",
|
|
duration: "tempoh ISO",
|
|
ipv4: "alamat IPv4",
|
|
ipv6: "alamat IPv6",
|
|
cidrv4: "julat IPv4",
|
|
cidrv6: "julat IPv6",
|
|
base64: "string dikodkan base64",
|
|
base64url: "string dikodkan base64url",
|
|
json_string: "string JSON",
|
|
e164: "nombor E.164",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "nombor"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Input tidak sah: dijangka instanceof ${issue2.expected}, diterima ${received}`;
|
|
}
|
|
return `Input tidak sah: dijangka ${expected}, diterima ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Input tidak sah: dijangka ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Pilihan tidak sah: dijangka salah satu daripada ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`;
|
|
return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} adalah ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Terlalu kecil: dijangka ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Terlalu kecil: dijangka ${issue2.origin} adalah ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `String tidak sah: mesti mengandungi "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} tidak sah`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Nombor tidak sah: perlu gandaan ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Kunci tidak dikenali: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Kunci tidak sah dalam ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Input tidak sah";
|
|
case "invalid_element":
|
|
return `Nilai tidak sah dalam ${issue2.origin}`;
|
|
default:
|
|
return `Input tidak sah`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js
|
|
function nl_default() {
|
|
return {
|
|
localeError: error29()
|
|
};
|
|
}
|
|
var error29;
|
|
var init_nl = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js"() {
|
|
init_util();
|
|
error29 = () => {
|
|
const Sizable = {
|
|
string: { unit: "tekens", verb: "heeft" },
|
|
file: { unit: "bytes", verb: "heeft" },
|
|
array: { unit: "elementen", verb: "heeft" },
|
|
set: { unit: "elementen", verb: "heeft" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "invoer",
|
|
email: "emailadres",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO datum en tijd",
|
|
date: "ISO datum",
|
|
time: "ISO tijd",
|
|
duration: "ISO duur",
|
|
ipv4: "IPv4-adres",
|
|
ipv6: "IPv6-adres",
|
|
cidrv4: "IPv4-bereik",
|
|
cidrv6: "IPv6-bereik",
|
|
base64: "base64-gecodeerde tekst",
|
|
base64url: "base64 URL-gecodeerde tekst",
|
|
json_string: "JSON string",
|
|
e164: "E.164-nummer",
|
|
jwt: "JWT",
|
|
template_literal: "invoer"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "getal"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ongeldige invoer: verwacht instanceof ${issue2.expected}, ontving ${received}`;
|
|
}
|
|
return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ongeldige invoer: verwacht ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ongeldige optie: verwacht \xE9\xE9n van ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
const longName = issue2.origin === "date" ? "laat" : issue2.origin === "string" ? "lang" : "groot";
|
|
if (sizing)
|
|
return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementen"} ${sizing.verb}`;
|
|
return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} is`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
const shortName = issue2.origin === "date" ? "vroeg" : issue2.origin === "string" ? "kort" : "klein";
|
|
if (sizing) {
|
|
return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`;
|
|
}
|
|
return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} is`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`;
|
|
if (_issue.format === "includes")
|
|
return `Ongeldige tekst: moet "${_issue.includes}" bevatten`;
|
|
if (_issue.format === "regex")
|
|
return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;
|
|
return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ongeldig getal: moet een veelvoud van ${issue2.divisor} zijn`;
|
|
case "unrecognized_keys":
|
|
return `Onbekende key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Ongeldige key in ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Ongeldige invoer";
|
|
case "invalid_element":
|
|
return `Ongeldige waarde in ${issue2.origin}`;
|
|
default:
|
|
return `Ongeldige invoer`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js
|
|
function no_default() {
|
|
return {
|
|
localeError: error30()
|
|
};
|
|
}
|
|
var error30;
|
|
var init_no = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js"() {
|
|
init_util();
|
|
error30 = () => {
|
|
const Sizable = {
|
|
string: { unit: "tegn", verb: "\xE5 ha" },
|
|
file: { unit: "bytes", verb: "\xE5 ha" },
|
|
array: { unit: "elementer", verb: "\xE5 inneholde" },
|
|
set: { unit: "elementer", verb: "\xE5 inneholde" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "input",
|
|
email: "e-postadresse",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO dato- og klokkeslett",
|
|
date: "ISO-dato",
|
|
time: "ISO-klokkeslett",
|
|
duration: "ISO-varighet",
|
|
ipv4: "IPv4-omr\xE5de",
|
|
ipv6: "IPv6-omr\xE5de",
|
|
cidrv4: "IPv4-spekter",
|
|
cidrv6: "IPv6-spekter",
|
|
base64: "base64-enkodet streng",
|
|
base64url: "base64url-enkodet streng",
|
|
json_string: "JSON-streng",
|
|
e164: "E.164-nummer",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "tall",
|
|
array: "liste"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ugyldig input: forventet instanceof ${issue2.expected}, fikk ${received}`;
|
|
}
|
|
return `Ugyldig input: forventet ${expected}, fikk ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ugyldig verdi: forventet ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ugyldig valg: forventet en av ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`;
|
|
return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Ugyldig streng: m\xE5 starte med "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Ugyldig streng: m\xE5 ende med "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Ugyldig streng: m\xE5 inneholde "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${_issue.pattern}`;
|
|
return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Ugyldig n\xF8kkel i ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Ugyldig input";
|
|
case "invalid_element":
|
|
return `Ugyldig verdi i ${issue2.origin}`;
|
|
default:
|
|
return `Ugyldig input`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js
|
|
function ota_default() {
|
|
return {
|
|
localeError: error31()
|
|
};
|
|
}
|
|
var error31;
|
|
var init_ota = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js"() {
|
|
init_util();
|
|
error31 = () => {
|
|
const Sizable = {
|
|
string: { unit: "harf", verb: "olmal\u0131d\u0131r" },
|
|
file: { unit: "bayt", verb: "olmal\u0131d\u0131r" },
|
|
array: { unit: "unsur", verb: "olmal\u0131d\u0131r" },
|
|
set: { unit: "unsur", verb: "olmal\u0131d\u0131r" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "giren",
|
|
email: "epostag\xE2h",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO heng\xE2m\u0131",
|
|
date: "ISO tarihi",
|
|
time: "ISO zaman\u0131",
|
|
duration: "ISO m\xFCddeti",
|
|
ipv4: "IPv4 ni\u015F\xE2n\u0131",
|
|
ipv6: "IPv6 ni\u015F\xE2n\u0131",
|
|
cidrv4: "IPv4 menzili",
|
|
cidrv6: "IPv6 menzili",
|
|
base64: "base64-\u015Fifreli metin",
|
|
base64url: "base64url-\u015Fifreli metin",
|
|
json_string: "JSON metin",
|
|
e164: "E.164 say\u0131s\u0131",
|
|
jwt: "JWT",
|
|
template_literal: "giren"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "numara",
|
|
array: "saf",
|
|
null: "gayb"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `F\xE2sit giren: umulan instanceof ${issue2.expected}, al\u0131nan ${received}`;
|
|
}
|
|
return `F\xE2sit giren: umulan ${expected}, al\u0131nan ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `F\xE2sit giren: umulan ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `F\xE2sit tercih: m\xFBteberler ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmal\u0131yd\u0131.`;
|
|
return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} olmal\u0131yd\u0131.`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;
|
|
}
|
|
return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmal\u0131yd\u0131.`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `F\xE2sit metin: "${_issue.prefix}" ile ba\u015Flamal\u0131.`;
|
|
if (_issue.format === "ends_with")
|
|
return `F\xE2sit metin: "${_issue.suffix}" ile bitmeli.`;
|
|
if (_issue.format === "includes")
|
|
return `F\xE2sit metin: "${_issue.includes}" ihtiv\xE2 etmeli.`;
|
|
if (_issue.format === "regex")
|
|
return `F\xE2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;
|
|
return `F\xE2sit ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `F\xE2sit say\u0131: ${issue2.divisor} kat\u0131 olmal\u0131yd\u0131.`;
|
|
case "unrecognized_keys":
|
|
return `Tan\u0131nmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} i\xE7in tan\u0131nmayan anahtar var.`;
|
|
case "invalid_union":
|
|
return "Giren tan\u0131namad\u0131.";
|
|
case "invalid_element":
|
|
return `${issue2.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`;
|
|
default:
|
|
return `K\u0131ymet tan\u0131namad\u0131.`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js
|
|
function ps_default() {
|
|
return {
|
|
localeError: error32()
|
|
};
|
|
}
|
|
var error32;
|
|
var init_ps = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js"() {
|
|
init_util();
|
|
error32 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
|
|
file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" },
|
|
array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
|
|
set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0648\u0631\u0648\u062F\u064A",
|
|
email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9",
|
|
url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644",
|
|
emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A",
|
|
date: "\u0646\u06D0\u067C\u0647",
|
|
time: "\u0648\u062E\u062A",
|
|
duration: "\u0645\u0648\u062F\u0647",
|
|
ipv4: "\u062F IPv4 \u067E\u062A\u0647",
|
|
ipv6: "\u062F IPv6 \u067E\u062A\u0647",
|
|
cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647",
|
|
cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647",
|
|
base64: "base64-encoded \u0645\u062A\u0646",
|
|
base64url: "base64url-encoded \u0645\u062A\u0646",
|
|
json_string: "JSON \u0645\u062A\u0646",
|
|
e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647",
|
|
jwt: "JWT",
|
|
template_literal: "\u0648\u0631\u0648\u062F\u064A"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0639\u062F\u062F",
|
|
array: "\u0627\u0631\u06D0"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue2.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;
|
|
}
|
|
return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1) {
|
|
return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${stringifyPrimitive(issue2.values[0])} \u0648\u0627\u06CC`;
|
|
}
|
|
return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${joinValues(issue2.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`;
|
|
}
|
|
return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0648\u064A`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;
|
|
}
|
|
return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0648\u064A`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;
|
|
}
|
|
if (_issue.format === "ends_with") {
|
|
return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;
|
|
}
|
|
if (_issue.format === "includes") {
|
|
return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${_issue.includes}" \u0648\u0644\u0631\u064A`;
|
|
}
|
|
if (_issue.format === "regex") {
|
|
return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;
|
|
}
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue2.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;
|
|
case "unrecognized_keys":
|
|
return `\u0646\u0627\u0633\u0645 ${issue2.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`;
|
|
case "invalid_union":
|
|
return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;
|
|
case "invalid_element":
|
|
return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`;
|
|
default:
|
|
return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js
|
|
function pl_default() {
|
|
return {
|
|
localeError: error33()
|
|
};
|
|
}
|
|
var error33;
|
|
var init_pl = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js"() {
|
|
init_util();
|
|
error33 = () => {
|
|
const Sizable = {
|
|
string: { unit: "znak\xF3w", verb: "mie\u0107" },
|
|
file: { unit: "bajt\xF3w", verb: "mie\u0107" },
|
|
array: { unit: "element\xF3w", verb: "mie\u0107" },
|
|
set: { unit: "element\xF3w", verb: "mie\u0107" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "wyra\u017Cenie",
|
|
email: "adres email",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "data i godzina w formacie ISO",
|
|
date: "data w formacie ISO",
|
|
time: "godzina w formacie ISO",
|
|
duration: "czas trwania ISO",
|
|
ipv4: "adres IPv4",
|
|
ipv6: "adres IPv6",
|
|
cidrv4: "zakres IPv4",
|
|
cidrv6: "zakres IPv6",
|
|
base64: "ci\u0105g znak\xF3w zakodowany w formacie base64",
|
|
base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url",
|
|
json_string: "ci\u0105g znak\xF3w w formacie JSON",
|
|
e164: "liczba E.164",
|
|
jwt: "JWT",
|
|
template_literal: "wej\u015Bcie"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "liczba",
|
|
array: "tablica"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`;
|
|
}
|
|
return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element\xF3w"}`;
|
|
}
|
|
return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "element\xF3w"}`;
|
|
}
|
|
return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;
|
|
return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Nieprawid\u0142owy klucz w ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Nieprawid\u0142owe dane wej\u015Bciowe";
|
|
case "invalid_element":
|
|
return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue2.origin}`;
|
|
default:
|
|
return `Nieprawid\u0142owe dane wej\u015Bciowe`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js
|
|
function pt_default() {
|
|
return {
|
|
localeError: error34()
|
|
};
|
|
}
|
|
var error34;
|
|
var init_pt = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js"() {
|
|
init_util();
|
|
error34 = () => {
|
|
const Sizable = {
|
|
string: { unit: "caracteres", verb: "ter" },
|
|
file: { unit: "bytes", verb: "ter" },
|
|
array: { unit: "itens", verb: "ter" },
|
|
set: { unit: "itens", verb: "ter" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "padr\xE3o",
|
|
email: "endere\xE7o de e-mail",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "data e hora ISO",
|
|
date: "data ISO",
|
|
time: "hora ISO",
|
|
duration: "dura\xE7\xE3o ISO",
|
|
ipv4: "endere\xE7o IPv4",
|
|
ipv6: "endere\xE7o IPv6",
|
|
cidrv4: "faixa de IPv4",
|
|
cidrv6: "faixa de IPv6",
|
|
base64: "texto codificado em base64",
|
|
base64url: "URL codificada em base64",
|
|
json_string: "texto JSON",
|
|
e164: "n\xFAmero E.164",
|
|
jwt: "JWT",
|
|
template_literal: "entrada"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "n\xFAmero",
|
|
null: "nulo"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Tipo inv\xE1lido: esperado instanceof ${issue2.expected}, recebido ${received}`;
|
|
}
|
|
return `Tipo inv\xE1lido: esperado ${expected}, recebido ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Entrada inv\xE1lida: esperado ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Op\xE7\xE3o inv\xE1lida: esperada uma das ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Muito grande: esperado que ${issue2.origin ?? "valor"} tivesse ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`;
|
|
return `Muito grande: esperado que ${issue2.origin ?? "valor"} fosse ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Muito pequeno: esperado que ${issue2.origin} tivesse ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Muito pequeno: esperado que ${issue2.origin} fosse ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Texto inv\xE1lido: deve come\xE7ar com "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Texto inv\xE1lido: deve terminar com "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Texto inv\xE1lido: deve incluir "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} inv\xE1lido`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Chave${issue2.keys.length > 1 ? "s" : ""} desconhecida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Chave inv\xE1lida em ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Entrada inv\xE1lida";
|
|
case "invalid_element":
|
|
return `Valor inv\xE1lido em ${issue2.origin}`;
|
|
default:
|
|
return `Campo inv\xE1lido`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js
|
|
function getRussianPlural(count, one, few, many) {
|
|
const absCount = Math.abs(count);
|
|
const lastDigit = absCount % 10;
|
|
const lastTwoDigits = absCount % 100;
|
|
if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
|
|
return many;
|
|
}
|
|
if (lastDigit === 1) {
|
|
return one;
|
|
}
|
|
if (lastDigit >= 2 && lastDigit <= 4) {
|
|
return few;
|
|
}
|
|
return many;
|
|
}
|
|
function ru_default() {
|
|
return {
|
|
localeError: error35()
|
|
};
|
|
}
|
|
var error35;
|
|
var init_ru = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js"() {
|
|
init_util();
|
|
error35 = () => {
|
|
const Sizable = {
|
|
string: {
|
|
unit: {
|
|
one: "\u0441\u0438\u043C\u0432\u043E\u043B",
|
|
few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430",
|
|
many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432"
|
|
},
|
|
verb: "\u0438\u043C\u0435\u0442\u044C"
|
|
},
|
|
file: {
|
|
unit: {
|
|
one: "\u0431\u0430\u0439\u0442",
|
|
few: "\u0431\u0430\u0439\u0442\u0430",
|
|
many: "\u0431\u0430\u0439\u0442"
|
|
},
|
|
verb: "\u0438\u043C\u0435\u0442\u044C"
|
|
},
|
|
array: {
|
|
unit: {
|
|
one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442",
|
|
few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430",
|
|
many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432"
|
|
},
|
|
verb: "\u0438\u043C\u0435\u0442\u044C"
|
|
},
|
|
set: {
|
|
unit: {
|
|
one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442",
|
|
few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430",
|
|
many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432"
|
|
},
|
|
verb: "\u0438\u043C\u0435\u0442\u044C"
|
|
}
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0432\u0432\u043E\u0434",
|
|
email: "email \u0430\u0434\u0440\u0435\u0441",
|
|
url: "URL",
|
|
emoji: "\u044D\u043C\u043E\u0434\u0437\u0438",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F",
|
|
date: "ISO \u0434\u0430\u0442\u0430",
|
|
time: "ISO \u0432\u0440\u0435\u043C\u044F",
|
|
duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C",
|
|
ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441",
|
|
ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441",
|
|
cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D",
|
|
cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D",
|
|
base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64",
|
|
base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url",
|
|
json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430",
|
|
e164: "\u043D\u043E\u043C\u0435\u0440 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u0432\u0432\u043E\u0434"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0447\u0438\u0441\u043B\u043E",
|
|
array: "\u043C\u0430\u0441\u0441\u0438\u0432"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;
|
|
}
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const maxValue = Number(issue2.maximum);
|
|
const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.maximum.toString()} ${unit}`;
|
|
}
|
|
return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
const minValue = Number(issue2.minimum);
|
|
const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.minimum.toString()} ${unit}`;
|
|
}
|
|
return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue2.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0438" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435";
|
|
case "invalid_element":
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue2.origin}`;
|
|
default:
|
|
return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js
|
|
function sl_default() {
|
|
return {
|
|
localeError: error36()
|
|
};
|
|
}
|
|
var error36;
|
|
var init_sl = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js"() {
|
|
init_util();
|
|
error36 = () => {
|
|
const Sizable = {
|
|
string: { unit: "znakov", verb: "imeti" },
|
|
file: { unit: "bajtov", verb: "imeti" },
|
|
array: { unit: "elementov", verb: "imeti" },
|
|
set: { unit: "elementov", verb: "imeti" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "vnos",
|
|
email: "e-po\u0161tni naslov",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO datum in \u010Das",
|
|
date: "ISO datum",
|
|
time: "ISO \u010Das",
|
|
duration: "ISO trajanje",
|
|
ipv4: "IPv4 naslov",
|
|
ipv6: "IPv6 naslov",
|
|
cidrv4: "obseg IPv4",
|
|
cidrv6: "obseg IPv6",
|
|
base64: "base64 kodiran niz",
|
|
base64url: "base64url kodiran niz",
|
|
json_string: "JSON niz",
|
|
e164: "E.164 \u0161tevilka",
|
|
jwt: "JWT",
|
|
template_literal: "vnos"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0161tevilo",
|
|
array: "tabela"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue2.expected}, prejeto ${received}`;
|
|
}
|
|
return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Neveljaven vnos: pri\u010Dakovano ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementov"}`;
|
|
return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Neveljaven niz: mora se za\u010Deti z "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Neveljaven niz: mora se kon\u010Dati z "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Neveljaven niz: mora vsebovati "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;
|
|
return `Neveljaven ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Neprepoznan${issue2.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Neveljaven klju\u010D v ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "Neveljaven vnos";
|
|
case "invalid_element":
|
|
return `Neveljavna vrednost v ${issue2.origin}`;
|
|
default:
|
|
return "Neveljaven vnos";
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js
|
|
function sv_default() {
|
|
return {
|
|
localeError: error37()
|
|
};
|
|
}
|
|
var error37;
|
|
var init_sv = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js"() {
|
|
init_util();
|
|
error37 = () => {
|
|
const Sizable = {
|
|
string: { unit: "tecken", verb: "att ha" },
|
|
file: { unit: "bytes", verb: "att ha" },
|
|
array: { unit: "objekt", verb: "att inneh\xE5lla" },
|
|
set: { unit: "objekt", verb: "att inneh\xE5lla" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "regulj\xE4rt uttryck",
|
|
email: "e-postadress",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO-datum och tid",
|
|
date: "ISO-datum",
|
|
time: "ISO-tid",
|
|
duration: "ISO-varaktighet",
|
|
ipv4: "IPv4-intervall",
|
|
ipv6: "IPv6-intervall",
|
|
cidrv4: "IPv4-spektrum",
|
|
cidrv6: "IPv6-spektrum",
|
|
base64: "base64-kodad str\xE4ng",
|
|
base64url: "base64url-kodad str\xE4ng",
|
|
json_string: "JSON-str\xE4ng",
|
|
e164: "E.164-nummer",
|
|
jwt: "JWT",
|
|
template_literal: "mall-literal"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "antal",
|
|
array: "lista"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${issue2.expected}, fick ${received}`;
|
|
}
|
|
return `Ogiltig inmatning: f\xF6rv\xE4ntat ${expected}, fick ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ogiltig inmatning: f\xF6rv\xE4ntat ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ogiltigt val: f\xF6rv\xE4ntade en av ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `F\xF6r stor(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`;
|
|
}
|
|
return `F\xF6r stor(t): f\xF6rv\xE4ntat ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `Ogiltig str\xE4ng: m\xE5ste sluta med "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${_issue.pattern}"`;
|
|
return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ogiltigt tal: m\xE5ste vara en multipel av ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `${issue2.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Ogiltig nyckel i ${issue2.origin ?? "v\xE4rdet"}`;
|
|
case "invalid_union":
|
|
return "Ogiltig input";
|
|
case "invalid_element":
|
|
return `Ogiltigt v\xE4rde i ${issue2.origin ?? "v\xE4rdet"}`;
|
|
default:
|
|
return `Ogiltig input`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js
|
|
function ta_default() {
|
|
return {
|
|
localeError: error38()
|
|
};
|
|
}
|
|
var error38;
|
|
var init_ta = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js"() {
|
|
init_util();
|
|
error38 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" },
|
|
file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" },
|
|
array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" },
|
|
set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1",
|
|
email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD",
|
|
date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF",
|
|
time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD",
|
|
duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1",
|
|
ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF",
|
|
ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF",
|
|
cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1",
|
|
cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1",
|
|
base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD",
|
|
base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD",
|
|
json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD",
|
|
e164: "E.164 \u0B8E\u0BA3\u0BCD",
|
|
jwt: "JWT",
|
|
template_literal: "input"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0B8E\u0BA3\u0BCD",
|
|
array: "\u0B85\u0BA3\u0BBF",
|
|
null: "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue2.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;
|
|
}
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${joinValues(issue2.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
}
|
|
return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
}
|
|
return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
if (_issue.format === "includes")
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
if (_issue.format === "regex")
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue2.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;
|
|
case "unrecognized_keys":
|
|
return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue2.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;
|
|
case "invalid_union":
|
|
return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1";
|
|
case "invalid_element":
|
|
return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;
|
|
default:
|
|
return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js
|
|
function th_default() {
|
|
return {
|
|
localeError: error39()
|
|
};
|
|
}
|
|
var error39;
|
|
var init_th = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js"() {
|
|
init_util();
|
|
error39 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
|
|
file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
|
|
array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
|
|
set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19",
|
|
email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25",
|
|
url: "URL",
|
|
emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO",
|
|
date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO",
|
|
time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO",
|
|
duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO",
|
|
ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4",
|
|
ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6",
|
|
cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4",
|
|
cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6",
|
|
base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64",
|
|
base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL",
|
|
json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON",
|
|
e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)",
|
|
jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT",
|
|
template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02",
|
|
array: "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)",
|
|
null: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue2.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;
|
|
}
|
|
return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`;
|
|
return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${_issue.prefix}"`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${_issue.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;
|
|
if (_issue.format === "regex")
|
|
return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;
|
|
return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue2.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;
|
|
case "unrecognized_keys":
|
|
return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49";
|
|
case "invalid_element":
|
|
return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`;
|
|
default:
|
|
return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js
|
|
function tr_default() {
|
|
return {
|
|
localeError: error40()
|
|
};
|
|
}
|
|
var error40;
|
|
var init_tr = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js"() {
|
|
init_util();
|
|
error40 = () => {
|
|
const Sizable = {
|
|
string: { unit: "karakter", verb: "olmal\u0131" },
|
|
file: { unit: "bayt", verb: "olmal\u0131" },
|
|
array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" },
|
|
set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "girdi",
|
|
email: "e-posta adresi",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO tarih ve saat",
|
|
date: "ISO tarih",
|
|
time: "ISO saat",
|
|
duration: "ISO s\xFCre",
|
|
ipv4: "IPv4 adresi",
|
|
ipv6: "IPv6 adresi",
|
|
cidrv4: "IPv4 aral\u0131\u011F\u0131",
|
|
cidrv6: "IPv6 aral\u0131\u011F\u0131",
|
|
base64: "base64 ile \u015Fifrelenmi\u015F metin",
|
|
base64url: "base64url ile \u015Fifrelenmi\u015F metin",
|
|
json_string: "JSON dizesi",
|
|
e164: "E.164 say\u0131s\u0131",
|
|
jwt: "JWT",
|
|
template_literal: "\u015Eablon dizesi"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Ge\xE7ersiz de\u011Fer: beklenen instanceof ${issue2.expected}, al\u0131nan ${received}`;
|
|
}
|
|
return `Ge\xE7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Ge\xE7ersiz de\u011Fer: beklenen ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xF6\u011Fe"}`;
|
|
return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Ge\xE7ersiz metin: "${_issue.prefix}" ile ba\u015Flamal\u0131`;
|
|
if (_issue.format === "ends_with")
|
|
return `Ge\xE7ersiz metin: "${_issue.suffix}" ile bitmeli`;
|
|
if (_issue.format === "includes")
|
|
return `Ge\xE7ersiz metin: "${_issue.includes}" i\xE7ermeli`;
|
|
if (_issue.format === "regex")
|
|
return `Ge\xE7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;
|
|
return `Ge\xE7ersiz ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Ge\xE7ersiz say\u0131: ${issue2.divisor} ile tam b\xF6l\xFCnebilmeli`;
|
|
case "unrecognized_keys":
|
|
return `Tan\u0131nmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} i\xE7inde ge\xE7ersiz anahtar`;
|
|
case "invalid_union":
|
|
return "Ge\xE7ersiz de\u011Fer";
|
|
case "invalid_element":
|
|
return `${issue2.origin} i\xE7inde ge\xE7ersiz de\u011Fer`;
|
|
default:
|
|
return `Ge\xE7ersiz de\u011Fer`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js
|
|
function uk_default() {
|
|
return {
|
|
localeError: error41()
|
|
};
|
|
}
|
|
var error41;
|
|
var init_uk = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js"() {
|
|
init_util();
|
|
error41 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
|
|
file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
|
|
array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
|
|
set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456",
|
|
email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438",
|
|
url: "URL",
|
|
emoji: "\u0435\u043C\u043E\u0434\u0437\u0456",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO",
|
|
date: "\u0434\u0430\u0442\u0430 ISO",
|
|
time: "\u0447\u0430\u0441 ISO",
|
|
duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO",
|
|
ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4",
|
|
ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6",
|
|
cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4",
|
|
cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6",
|
|
base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64",
|
|
base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url",
|
|
json_string: "\u0440\u044F\u0434\u043E\u043A JSON",
|
|
e164: "\u043D\u043E\u043C\u0435\u0440 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0447\u0438\u0441\u043B\u043E",
|
|
array: "\u043C\u0430\u0441\u0438\u0432"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue2.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;
|
|
}
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`;
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} \u0431\u0443\u0434\u0435 ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0456" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456";
|
|
case "invalid_element":
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue2.origin}`;
|
|
default:
|
|
return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js
|
|
function ua_default() {
|
|
return uk_default();
|
|
}
|
|
var init_ua = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js"() {
|
|
init_uk();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js
|
|
function ur_default() {
|
|
return {
|
|
localeError: error42()
|
|
};
|
|
}
|
|
var error42;
|
|
var init_ur = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js"() {
|
|
init_util();
|
|
error42 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" },
|
|
file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" },
|
|
array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" },
|
|
set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0627\u0646 \u067E\u0679",
|
|
email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633",
|
|
url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644",
|
|
emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC",
|
|
uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC",
|
|
uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4",
|
|
uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6",
|
|
nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC",
|
|
guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC",
|
|
cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC",
|
|
cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2",
|
|
ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC",
|
|
xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC",
|
|
ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC",
|
|
datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645",
|
|
date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E",
|
|
time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A",
|
|
duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A",
|
|
ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633",
|
|
ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633",
|
|
cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C",
|
|
cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C",
|
|
base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF",
|
|
base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF",
|
|
json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF",
|
|
e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631",
|
|
jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC",
|
|
template_literal: "\u0627\u0646 \u067E\u0679"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u0646\u0645\u0628\u0631",
|
|
array: "\u0622\u0631\u06D2",
|
|
null: "\u0646\u0644"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue2.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;
|
|
}
|
|
return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${stringifyPrimitive(issue2.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;
|
|
return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${joinValues(issue2.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;
|
|
return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${adj}${issue2.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u06D2 ${adj}${issue2.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;
|
|
}
|
|
return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u0627 ${adj}${issue2.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;
|
|
if (_issue.format === "includes")
|
|
return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;
|
|
if (_issue.format === "regex")
|
|
return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;
|
|
return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue2.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;
|
|
case "unrecognized_keys":
|
|
return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue2.keys.length > 1 ? "\u0632" : ""}: ${joinValues(issue2.keys, "\u060C ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;
|
|
case "invalid_union":
|
|
return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679";
|
|
case "invalid_element":
|
|
return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;
|
|
default:
|
|
return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js
|
|
function uz_default() {
|
|
return {
|
|
localeError: error43()
|
|
};
|
|
}
|
|
var error43;
|
|
var init_uz = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js"() {
|
|
init_util();
|
|
error43 = () => {
|
|
const Sizable = {
|
|
string: { unit: "belgi", verb: "bo\u2018lishi kerak" },
|
|
file: { unit: "bayt", verb: "bo\u2018lishi kerak" },
|
|
array: { unit: "element", verb: "bo\u2018lishi kerak" },
|
|
set: { unit: "element", verb: "bo\u2018lishi kerak" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "kirish",
|
|
email: "elektron pochta manzili",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO sana va vaqti",
|
|
date: "ISO sana",
|
|
time: "ISO vaqt",
|
|
duration: "ISO davomiylik",
|
|
ipv4: "IPv4 manzil",
|
|
ipv6: "IPv6 manzil",
|
|
mac: "MAC manzil",
|
|
cidrv4: "IPv4 diapazon",
|
|
cidrv6: "IPv6 diapazon",
|
|
base64: "base64 kodlangan satr",
|
|
base64url: "base64url kodlangan satr",
|
|
json_string: "JSON satr",
|
|
e164: "E.164 raqam",
|
|
jwt: "JWT",
|
|
template_literal: "kirish"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "raqam",
|
|
array: "massiv"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`;
|
|
}
|
|
return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `Noto\u2018g\u2018ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()} ${sizing.unit} ${sizing.verb}`;
|
|
return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`;
|
|
}
|
|
return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Noto\u2018g\u2018ri satr: "${_issue.prefix}" bilan boshlanishi kerak`;
|
|
if (_issue.format === "ends_with")
|
|
return `Noto\u2018g\u2018ri satr: "${_issue.suffix}" bilan tugashi kerak`;
|
|
if (_issue.format === "includes")
|
|
return `Noto\u2018g\u2018ri satr: "${_issue.includes}" ni o\u2018z ichiga olishi kerak`;
|
|
if (_issue.format === "regex")
|
|
return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;
|
|
return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `Noto\u2018g\u2018ri raqam: ${issue2.divisor} ning karralisi bo\u2018lishi kerak`;
|
|
case "unrecognized_keys":
|
|
return `Noma\u2019lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} dagi kalit noto\u2018g\u2018ri`;
|
|
case "invalid_union":
|
|
return "Noto\u2018g\u2018ri kirish";
|
|
case "invalid_element":
|
|
return `${issue2.origin} da noto\u2018g\u2018ri qiymat`;
|
|
default:
|
|
return `Noto\u2018g\u2018ri kirish`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js
|
|
function vi_default() {
|
|
return {
|
|
localeError: error44()
|
|
};
|
|
}
|
|
var error44;
|
|
var init_vi = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js"() {
|
|
init_util();
|
|
error44 = () => {
|
|
const Sizable = {
|
|
string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" },
|
|
file: { unit: "byte", verb: "c\xF3" },
|
|
array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" },
|
|
set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u0111\u1EA7u v\xE0o",
|
|
email: "\u0111\u1ECBa ch\u1EC9 email",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ng\xE0y gi\u1EDD ISO",
|
|
date: "ng\xE0y ISO",
|
|
time: "gi\u1EDD ISO",
|
|
duration: "kho\u1EA3ng th\u1EDDi gian ISO",
|
|
ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4",
|
|
ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6",
|
|
cidrv4: "d\u1EA3i IPv4",
|
|
cidrv6: "d\u1EA3i IPv6",
|
|
base64: "chu\u1ED7i m\xE3 h\xF3a base64",
|
|
base64url: "chu\u1ED7i m\xE3 h\xF3a base64url",
|
|
json_string: "chu\u1ED7i JSON",
|
|
e164: "s\u1ED1 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u0111\u1EA7u v\xE0o"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "s\u1ED1",
|
|
array: "m\u1EA3ng"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue2.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;
|
|
}
|
|
return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "ph\u1EA7n t\u1EED"}`;
|
|
return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;
|
|
return `${FormatDictionary[_issue.format] ?? issue2.format} kh\xF4ng h\u1EE3p l\u1EC7`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7";
|
|
case "invalid_element":
|
|
return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`;
|
|
default:
|
|
return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js
|
|
function zh_CN_default() {
|
|
return {
|
|
localeError: error45()
|
|
};
|
|
}
|
|
var error45;
|
|
var init_zh_CN = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js"() {
|
|
init_util();
|
|
error45 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" },
|
|
file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" },
|
|
array: { unit: "\u9879", verb: "\u5305\u542B" },
|
|
set: { unit: "\u9879", verb: "\u5305\u542B" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u8F93\u5165",
|
|
email: "\u7535\u5B50\u90AE\u4EF6",
|
|
url: "URL",
|
|
emoji: "\u8868\u60C5\u7B26\u53F7",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO\u65E5\u671F\u65F6\u95F4",
|
|
date: "ISO\u65E5\u671F",
|
|
time: "ISO\u65F6\u95F4",
|
|
duration: "ISO\u65F6\u957F",
|
|
ipv4: "IPv4\u5730\u5740",
|
|
ipv6: "IPv6\u5730\u5740",
|
|
cidrv4: "IPv4\u7F51\u6BB5",
|
|
cidrv6: "IPv6\u7F51\u6BB5",
|
|
base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32",
|
|
base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32",
|
|
json_string: "JSON\u5B57\u7B26\u4E32",
|
|
e164: "E.164\u53F7\u7801",
|
|
jwt: "JWT",
|
|
template_literal: "\u8F93\u5165"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "\u6570\u5B57",
|
|
array: "\u6570\u7EC4",
|
|
null: "\u7A7A\u503C(null)"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue2.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;
|
|
}
|
|
return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u4E2A\u5143\u7D20"}`;
|
|
return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.prefix}" \u5F00\u5934`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.suffix}" \u7ED3\u5C3E`;
|
|
if (_issue.format === "includes")
|
|
return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;
|
|
return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue2.divisor} \u7684\u500D\u6570`;
|
|
case "unrecognized_keys":
|
|
return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;
|
|
case "invalid_union":
|
|
return "\u65E0\u6548\u8F93\u5165";
|
|
case "invalid_element":
|
|
return `${issue2.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;
|
|
default:
|
|
return `\u65E0\u6548\u8F93\u5165`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js
|
|
function zh_TW_default() {
|
|
return {
|
|
localeError: error46()
|
|
};
|
|
}
|
|
var error46;
|
|
var init_zh_TW = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js"() {
|
|
init_util();
|
|
error46 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" },
|
|
file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" },
|
|
array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" },
|
|
set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u8F38\u5165",
|
|
email: "\u90F5\u4EF6\u5730\u5740",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "ISO \u65E5\u671F\u6642\u9593",
|
|
date: "ISO \u65E5\u671F",
|
|
time: "ISO \u6642\u9593",
|
|
duration: "ISO \u671F\u9593",
|
|
ipv4: "IPv4 \u4F4D\u5740",
|
|
ipv6: "IPv6 \u4F4D\u5740",
|
|
cidrv4: "IPv4 \u7BC4\u570D",
|
|
cidrv6: "IPv6 \u7BC4\u570D",
|
|
base64: "base64 \u7DE8\u78BC\u5B57\u4E32",
|
|
base64url: "base64url \u7DE8\u78BC\u5B57\u4E32",
|
|
json_string: "JSON \u5B57\u4E32",
|
|
e164: "E.164 \u6578\u503C",
|
|
jwt: "JWT",
|
|
template_literal: "\u8F38\u5165"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue2.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;
|
|
}
|
|
return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u500B\u5143\u7D20"}`;
|
|
return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing) {
|
|
return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
}
|
|
return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with") {
|
|
return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.prefix}" \u958B\u982D`;
|
|
}
|
|
if (_issue.format === "ends_with")
|
|
return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.suffix}" \u7D50\u5C3E`;
|
|
if (_issue.format === "includes")
|
|
return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;
|
|
return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue2.divisor} \u7684\u500D\u6578`;
|
|
case "unrecognized_keys":
|
|
return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue2.keys.length > 1 ? "\u5011" : ""}\uFF1A${joinValues(issue2.keys, "\u3001")}`;
|
|
case "invalid_key":
|
|
return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;
|
|
case "invalid_union":
|
|
return "\u7121\u6548\u7684\u8F38\u5165\u503C";
|
|
case "invalid_element":
|
|
return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;
|
|
default:
|
|
return `\u7121\u6548\u7684\u8F38\u5165\u503C`;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js
|
|
function yo_default() {
|
|
return {
|
|
localeError: error47()
|
|
};
|
|
}
|
|
var error47;
|
|
var init_yo = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js"() {
|
|
init_util();
|
|
error47 = () => {
|
|
const Sizable = {
|
|
string: { unit: "\xE0mi", verb: "n\xED" },
|
|
file: { unit: "bytes", verb: "n\xED" },
|
|
array: { unit: "nkan", verb: "n\xED" },
|
|
set: { unit: "nkan", verb: "n\xED" }
|
|
};
|
|
function getSizing(origin) {
|
|
return Sizable[origin] ?? null;
|
|
}
|
|
const FormatDictionary = {
|
|
regex: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9",
|
|
email: "\xE0d\xEDr\u1EB9\u0301s\xEC \xECm\u1EB9\u0301l\xEC",
|
|
url: "URL",
|
|
emoji: "emoji",
|
|
uuid: "UUID",
|
|
uuidv4: "UUIDv4",
|
|
uuidv6: "UUIDv6",
|
|
nanoid: "nanoid",
|
|
guid: "GUID",
|
|
cuid: "cuid",
|
|
cuid2: "cuid2",
|
|
ulid: "ULID",
|
|
xid: "XID",
|
|
ksuid: "KSUID",
|
|
datetime: "\xE0k\xF3k\xF2 ISO",
|
|
date: "\u1ECDj\u1ECD\u0301 ISO",
|
|
time: "\xE0k\xF3k\xF2 ISO",
|
|
duration: "\xE0k\xF3k\xF2 t\xF3 p\xE9 ISO",
|
|
ipv4: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv4",
|
|
ipv6: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv6",
|
|
cidrv4: "\xE0gb\xE8gb\xE8 IPv4",
|
|
cidrv6: "\xE0gb\xE8gb\xE8 IPv6",
|
|
base64: "\u1ECD\u0300r\u1ECD\u0300 t\xED a k\u1ECD\u0301 n\xED base64",
|
|
base64url: "\u1ECD\u0300r\u1ECD\u0300 base64url",
|
|
json_string: "\u1ECD\u0300r\u1ECD\u0300 JSON",
|
|
e164: "n\u1ECD\u0301mb\xE0 E.164",
|
|
jwt: "JWT",
|
|
template_literal: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9"
|
|
};
|
|
const TypeDictionary = {
|
|
nan: "NaN",
|
|
number: "n\u1ECD\u0301mb\xE0",
|
|
array: "akop\u1ECD"
|
|
};
|
|
return (issue2) => {
|
|
switch (issue2.code) {
|
|
case "invalid_type": {
|
|
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
const receivedType = parsedType(issue2.input);
|
|
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
if (/^[A-Z]/.test(issue2.expected)) {
|
|
return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${issue2.expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`;
|
|
}
|
|
return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`;
|
|
}
|
|
case "invalid_value":
|
|
if (issue2.values.length === 1)
|
|
return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${stringifyPrimitive(issue2.values[0])}`;
|
|
return `\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${joinValues(issue2.values, "|")}`;
|
|
case "too_big": {
|
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin ?? "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`;
|
|
return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.maximum}`;
|
|
}
|
|
case "too_small": {
|
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
const sizing = getSizing(issue2.origin);
|
|
if (sizing)
|
|
return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`;
|
|
return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.minimum}`;
|
|
}
|
|
case "invalid_format": {
|
|
const _issue = issue2;
|
|
if (_issue.format === "starts_with")
|
|
return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\xFA "${_issue.prefix}"`;
|
|
if (_issue.format === "ends_with")
|
|
return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${_issue.suffix}"`;
|
|
if (_issue.format === "includes")
|
|
return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${_issue.includes}"`;
|
|
if (_issue.format === "regex")
|
|
return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;
|
|
return `A\u1E63\xEC\u1E63e: ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
}
|
|
case "not_multiple_of":
|
|
return `N\u1ECD\u0301mb\xE0 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \xE8y\xE0 p\xEDp\xEDn ti ${issue2.divisor}`;
|
|
case "unrecognized_keys":
|
|
return `B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${joinValues(issue2.keys, ", ")}`;
|
|
case "invalid_key":
|
|
return `B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`;
|
|
case "invalid_union":
|
|
return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e";
|
|
case "invalid_element":
|
|
return `Iye a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`;
|
|
default:
|
|
return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e";
|
|
}
|
|
};
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js
|
|
var locales_exports = {};
|
|
__export(locales_exports, {
|
|
ar: () => ar_default,
|
|
az: () => az_default,
|
|
be: () => be_default,
|
|
bg: () => bg_default,
|
|
ca: () => ca_default,
|
|
cs: () => cs_default,
|
|
da: () => da_default,
|
|
de: () => de_default,
|
|
en: () => en_default,
|
|
eo: () => eo_default,
|
|
es: () => es_default,
|
|
fa: () => fa_default,
|
|
fi: () => fi_default,
|
|
fr: () => fr_default,
|
|
frCA: () => fr_CA_default,
|
|
he: () => he_default,
|
|
hu: () => hu_default,
|
|
hy: () => hy_default,
|
|
id: () => id_default,
|
|
is: () => is_default,
|
|
it: () => it_default,
|
|
ja: () => ja_default,
|
|
ka: () => ka_default,
|
|
kh: () => kh_default,
|
|
km: () => km_default,
|
|
ko: () => ko_default,
|
|
lt: () => lt_default,
|
|
mk: () => mk_default,
|
|
ms: () => ms_default,
|
|
nl: () => nl_default,
|
|
no: () => no_default,
|
|
ota: () => ota_default,
|
|
pl: () => pl_default,
|
|
ps: () => ps_default,
|
|
pt: () => pt_default,
|
|
ru: () => ru_default,
|
|
sl: () => sl_default,
|
|
sv: () => sv_default,
|
|
ta: () => ta_default,
|
|
th: () => th_default,
|
|
tr: () => tr_default,
|
|
ua: () => ua_default,
|
|
uk: () => uk_default,
|
|
ur: () => ur_default,
|
|
uz: () => uz_default,
|
|
vi: () => vi_default,
|
|
yo: () => yo_default,
|
|
zhCN: () => zh_CN_default,
|
|
zhTW: () => zh_TW_default
|
|
});
|
|
var init_locales = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js"() {
|
|
init_ar();
|
|
init_az();
|
|
init_be();
|
|
init_bg();
|
|
init_ca();
|
|
init_cs();
|
|
init_da();
|
|
init_de();
|
|
init_en();
|
|
init_eo();
|
|
init_es();
|
|
init_fa();
|
|
init_fi();
|
|
init_fr();
|
|
init_fr_CA();
|
|
init_he();
|
|
init_hu();
|
|
init_hy();
|
|
init_id();
|
|
init_is();
|
|
init_it();
|
|
init_ja();
|
|
init_ka();
|
|
init_kh();
|
|
init_km();
|
|
init_ko();
|
|
init_lt();
|
|
init_mk();
|
|
init_ms();
|
|
init_nl();
|
|
init_no();
|
|
init_ota();
|
|
init_ps();
|
|
init_pl();
|
|
init_pt();
|
|
init_ru();
|
|
init_sl();
|
|
init_sv();
|
|
init_ta();
|
|
init_th();
|
|
init_tr();
|
|
init_ua();
|
|
init_uk();
|
|
init_ur();
|
|
init_uz();
|
|
init_vi();
|
|
init_zh_CN();
|
|
init_zh_TW();
|
|
init_yo();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js
|
|
function registry() {
|
|
return new $ZodRegistry();
|
|
}
|
|
var _a, $output, $input, $ZodRegistry, globalRegistry;
|
|
var init_registries = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js"() {
|
|
$output = Symbol("ZodOutput");
|
|
$input = Symbol("ZodInput");
|
|
$ZodRegistry = class {
|
|
constructor() {
|
|
this._map = /* @__PURE__ */ new WeakMap();
|
|
this._idmap = /* @__PURE__ */ new Map();
|
|
}
|
|
add(schema, ..._meta) {
|
|
const meta3 = _meta[0];
|
|
this._map.set(schema, meta3);
|
|
if (meta3 && typeof meta3 === "object" && "id" in meta3) {
|
|
this._idmap.set(meta3.id, schema);
|
|
}
|
|
return this;
|
|
}
|
|
clear() {
|
|
this._map = /* @__PURE__ */ new WeakMap();
|
|
this._idmap = /* @__PURE__ */ new Map();
|
|
return this;
|
|
}
|
|
remove(schema) {
|
|
const meta3 = this._map.get(schema);
|
|
if (meta3 && typeof meta3 === "object" && "id" in meta3) {
|
|
this._idmap.delete(meta3.id);
|
|
}
|
|
this._map.delete(schema);
|
|
return this;
|
|
}
|
|
get(schema) {
|
|
const p = schema._zod.parent;
|
|
if (p) {
|
|
const pm = { ...this.get(p) ?? {} };
|
|
delete pm.id;
|
|
const f = { ...pm, ...this._map.get(schema) };
|
|
return Object.keys(f).length ? f : void 0;
|
|
}
|
|
return this._map.get(schema);
|
|
}
|
|
has(schema) {
|
|
return this._map.has(schema);
|
|
}
|
|
};
|
|
(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
|
|
globalRegistry = globalThis.__zod_globalRegistry;
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _string(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _coercedString(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
coerce: true,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _email(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "email",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _guid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "guid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uuid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "uuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uuidv4(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "uuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
version: "v4",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uuidv6(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "uuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
version: "v6",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uuidv7(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "uuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
version: "v7",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _url(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "url",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _emoji2(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "emoji",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nanoid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "nanoid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _cuid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "cuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _cuid2(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "cuid2",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _ulid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "ulid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _xid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "xid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _ksuid(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "ksuid",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _ipv4(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "ipv4",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _ipv6(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "ipv6",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _mac(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "mac",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _cidrv4(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "cidrv4",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _cidrv6(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "cidrv6",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _base64(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "base64",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _base64url(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "base64url",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _e164(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "e164",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _jwt(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "jwt",
|
|
check: "string_format",
|
|
abort: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _isoDateTime(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "datetime",
|
|
check: "string_format",
|
|
offset: false,
|
|
local: false,
|
|
precision: null,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _isoDate(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "date",
|
|
check: "string_format",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _isoTime(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "time",
|
|
check: "string_format",
|
|
precision: null,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _isoDuration(Class2, params) {
|
|
return new Class2({
|
|
type: "string",
|
|
format: "duration",
|
|
check: "string_format",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _number(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
checks: [],
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _coercedNumber(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
coerce: true,
|
|
checks: [],
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _int(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
check: "number_format",
|
|
abort: false,
|
|
format: "safeint",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _float32(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
check: "number_format",
|
|
abort: false,
|
|
format: "float32",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _float64(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
check: "number_format",
|
|
abort: false,
|
|
format: "float64",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _int32(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
check: "number_format",
|
|
abort: false,
|
|
format: "int32",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uint32(Class2, params) {
|
|
return new Class2({
|
|
type: "number",
|
|
check: "number_format",
|
|
abort: false,
|
|
format: "uint32",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _boolean(Class2, params) {
|
|
return new Class2({
|
|
type: "boolean",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _coercedBoolean(Class2, params) {
|
|
return new Class2({
|
|
type: "boolean",
|
|
coerce: true,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _bigint(Class2, params) {
|
|
return new Class2({
|
|
type: "bigint",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _coercedBigint(Class2, params) {
|
|
return new Class2({
|
|
type: "bigint",
|
|
coerce: true,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _int64(Class2, params) {
|
|
return new Class2({
|
|
type: "bigint",
|
|
check: "bigint_format",
|
|
abort: false,
|
|
format: "int64",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uint64(Class2, params) {
|
|
return new Class2({
|
|
type: "bigint",
|
|
check: "bigint_format",
|
|
abort: false,
|
|
format: "uint64",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _symbol(Class2, params) {
|
|
return new Class2({
|
|
type: "symbol",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _undefined2(Class2, params) {
|
|
return new Class2({
|
|
type: "undefined",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _null2(Class2, params) {
|
|
return new Class2({
|
|
type: "null",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _any(Class2) {
|
|
return new Class2({
|
|
type: "any"
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _unknown(Class2) {
|
|
return new Class2({
|
|
type: "unknown"
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _never(Class2, params) {
|
|
return new Class2({
|
|
type: "never",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _void(Class2, params) {
|
|
return new Class2({
|
|
type: "void",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _date(Class2, params) {
|
|
return new Class2({
|
|
type: "date",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _coercedDate(Class2, params) {
|
|
return new Class2({
|
|
type: "date",
|
|
coerce: true,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nan(Class2, params) {
|
|
return new Class2({
|
|
type: "nan",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _lt(value2, params) {
|
|
return new $ZodCheckLessThan({
|
|
check: "less_than",
|
|
...normalizeParams(params),
|
|
value: value2,
|
|
inclusive: false
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _lte(value2, params) {
|
|
return new $ZodCheckLessThan({
|
|
check: "less_than",
|
|
...normalizeParams(params),
|
|
value: value2,
|
|
inclusive: true
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _gt(value2, params) {
|
|
return new $ZodCheckGreaterThan({
|
|
check: "greater_than",
|
|
...normalizeParams(params),
|
|
value: value2,
|
|
inclusive: false
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _gte(value2, params) {
|
|
return new $ZodCheckGreaterThan({
|
|
check: "greater_than",
|
|
...normalizeParams(params),
|
|
value: value2,
|
|
inclusive: true
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _positive(params) {
|
|
return /* @__PURE__ */ _gt(0, params);
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _negative(params) {
|
|
return /* @__PURE__ */ _lt(0, params);
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nonpositive(params) {
|
|
return /* @__PURE__ */ _lte(0, params);
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nonnegative(params) {
|
|
return /* @__PURE__ */ _gte(0, params);
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _multipleOf(value2, params) {
|
|
return new $ZodCheckMultipleOf({
|
|
check: "multiple_of",
|
|
...normalizeParams(params),
|
|
value: value2
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _maxSize(maximum, params) {
|
|
return new $ZodCheckMaxSize({
|
|
check: "max_size",
|
|
...normalizeParams(params),
|
|
maximum
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _minSize(minimum, params) {
|
|
return new $ZodCheckMinSize({
|
|
check: "min_size",
|
|
...normalizeParams(params),
|
|
minimum
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _size(size, params) {
|
|
return new $ZodCheckSizeEquals({
|
|
check: "size_equals",
|
|
...normalizeParams(params),
|
|
size
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _maxLength(maximum, params) {
|
|
const ch = new $ZodCheckMaxLength({
|
|
check: "max_length",
|
|
...normalizeParams(params),
|
|
maximum
|
|
});
|
|
return ch;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _minLength(minimum, params) {
|
|
return new $ZodCheckMinLength({
|
|
check: "min_length",
|
|
...normalizeParams(params),
|
|
minimum
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _length(length, params) {
|
|
return new $ZodCheckLengthEquals({
|
|
check: "length_equals",
|
|
...normalizeParams(params),
|
|
length
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _regex(pattern, params) {
|
|
return new $ZodCheckRegex({
|
|
check: "string_format",
|
|
format: "regex",
|
|
...normalizeParams(params),
|
|
pattern
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _lowercase(params) {
|
|
return new $ZodCheckLowerCase({
|
|
check: "string_format",
|
|
format: "lowercase",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _uppercase(params) {
|
|
return new $ZodCheckUpperCase({
|
|
check: "string_format",
|
|
format: "uppercase",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _includes(includes, params) {
|
|
return new $ZodCheckIncludes({
|
|
check: "string_format",
|
|
format: "includes",
|
|
...normalizeParams(params),
|
|
includes
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _startsWith(prefix, params) {
|
|
return new $ZodCheckStartsWith({
|
|
check: "string_format",
|
|
format: "starts_with",
|
|
...normalizeParams(params),
|
|
prefix
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _endsWith(suffix, params) {
|
|
return new $ZodCheckEndsWith({
|
|
check: "string_format",
|
|
format: "ends_with",
|
|
...normalizeParams(params),
|
|
suffix
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _property(property, schema, params) {
|
|
return new $ZodCheckProperty({
|
|
check: "property",
|
|
property,
|
|
schema,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _mime(types, params) {
|
|
return new $ZodCheckMimeType({
|
|
check: "mime_type",
|
|
mime: types,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _overwrite(tx) {
|
|
return new $ZodCheckOverwrite({
|
|
check: "overwrite",
|
|
tx
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _normalize(form) {
|
|
return /* @__PURE__ */ _overwrite((input) => input.normalize(form));
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _trim() {
|
|
return /* @__PURE__ */ _overwrite((input) => input.trim());
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _toLowerCase() {
|
|
return /* @__PURE__ */ _overwrite((input) => input.toLowerCase());
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _toUpperCase() {
|
|
return /* @__PURE__ */ _overwrite((input) => input.toUpperCase());
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _slugify() {
|
|
return /* @__PURE__ */ _overwrite((input) => slugify(input));
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _array(Class2, element, params) {
|
|
return new Class2({
|
|
type: "array",
|
|
element,
|
|
// get element() {
|
|
// return element;
|
|
// },
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _union(Class2, options, params) {
|
|
return new Class2({
|
|
type: "union",
|
|
options,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
function _xor(Class2, options, params) {
|
|
return new Class2({
|
|
type: "union",
|
|
options,
|
|
inclusive: false,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _discriminatedUnion(Class2, discriminator, options, params) {
|
|
return new Class2({
|
|
type: "union",
|
|
options,
|
|
discriminator,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _intersection(Class2, left, right) {
|
|
return new Class2({
|
|
type: "intersection",
|
|
left,
|
|
right
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _tuple(Class2, items, _paramsOrRest, _params) {
|
|
const hasRest = _paramsOrRest instanceof $ZodType;
|
|
const params = hasRest ? _params : _paramsOrRest;
|
|
const rest = hasRest ? _paramsOrRest : null;
|
|
return new Class2({
|
|
type: "tuple",
|
|
items,
|
|
rest,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _record(Class2, keyType, valueType, params) {
|
|
return new Class2({
|
|
type: "record",
|
|
keyType,
|
|
valueType,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _map(Class2, keyType, valueType, params) {
|
|
return new Class2({
|
|
type: "map",
|
|
keyType,
|
|
valueType,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _set(Class2, valueType, params) {
|
|
return new Class2({
|
|
type: "set",
|
|
valueType,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _enum(Class2, values, params) {
|
|
const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
|
|
return new Class2({
|
|
type: "enum",
|
|
entries,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nativeEnum(Class2, entries, params) {
|
|
return new Class2({
|
|
type: "enum",
|
|
entries,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _literal(Class2, value2, params) {
|
|
return new Class2({
|
|
type: "literal",
|
|
values: Array.isArray(value2) ? value2 : [value2],
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _file(Class2, params) {
|
|
return new Class2({
|
|
type: "file",
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _transform(Class2, fn) {
|
|
return new Class2({
|
|
type: "transform",
|
|
transform: fn
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _optional(Class2, innerType) {
|
|
return new Class2({
|
|
type: "optional",
|
|
innerType
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nullable(Class2, innerType) {
|
|
return new Class2({
|
|
type: "nullable",
|
|
innerType
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _default(Class2, innerType, defaultValue) {
|
|
return new Class2({
|
|
type: "default",
|
|
innerType,
|
|
get defaultValue() {
|
|
return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue);
|
|
}
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _nonoptional(Class2, innerType, params) {
|
|
return new Class2({
|
|
type: "nonoptional",
|
|
innerType,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _success(Class2, innerType) {
|
|
return new Class2({
|
|
type: "success",
|
|
innerType
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _catch(Class2, innerType, catchValue) {
|
|
return new Class2({
|
|
type: "catch",
|
|
innerType,
|
|
catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _pipe(Class2, in_, out) {
|
|
return new Class2({
|
|
type: "pipe",
|
|
in: in_,
|
|
out
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _readonly(Class2, innerType) {
|
|
return new Class2({
|
|
type: "readonly",
|
|
innerType
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _templateLiteral(Class2, parts, params) {
|
|
return new Class2({
|
|
type: "template_literal",
|
|
parts,
|
|
...normalizeParams(params)
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _lazy(Class2, getter) {
|
|
return new Class2({
|
|
type: "lazy",
|
|
getter
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _promise(Class2, innerType) {
|
|
return new Class2({
|
|
type: "promise",
|
|
innerType
|
|
});
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _custom(Class2, fn, _params) {
|
|
const norm = normalizeParams(_params);
|
|
norm.abort ?? (norm.abort = true);
|
|
const schema = new Class2({
|
|
type: "custom",
|
|
check: "custom",
|
|
fn,
|
|
...norm
|
|
});
|
|
return schema;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _refine(Class2, fn, _params) {
|
|
const schema = new Class2({
|
|
type: "custom",
|
|
check: "custom",
|
|
fn,
|
|
...normalizeParams(_params)
|
|
});
|
|
return schema;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _superRefine(fn) {
|
|
const ch = /* @__PURE__ */ _check((payload) => {
|
|
payload.addIssue = (issue2) => {
|
|
if (typeof issue2 === "string") {
|
|
payload.issues.push(issue(issue2, payload.value, ch._zod.def));
|
|
} else {
|
|
const _issue = issue2;
|
|
if (_issue.fatal)
|
|
_issue.continue = false;
|
|
_issue.code ?? (_issue.code = "custom");
|
|
_issue.input ?? (_issue.input = payload.value);
|
|
_issue.inst ?? (_issue.inst = ch);
|
|
_issue.continue ?? (_issue.continue = !ch._zod.def.abort);
|
|
payload.issues.push(issue(_issue));
|
|
}
|
|
};
|
|
return fn(payload.value, payload);
|
|
});
|
|
return ch;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _check(fn, params) {
|
|
const ch = new $ZodCheck({
|
|
check: "custom",
|
|
...normalizeParams(params)
|
|
});
|
|
ch._zod.check = fn;
|
|
return ch;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function describe(description) {
|
|
const ch = new $ZodCheck({ check: "describe" });
|
|
ch._zod.onattach = [
|
|
(inst) => {
|
|
const existing = globalRegistry.get(inst) ?? {};
|
|
globalRegistry.add(inst, { ...existing, description });
|
|
}
|
|
];
|
|
ch._zod.check = () => {
|
|
};
|
|
return ch;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function meta(metadata) {
|
|
const ch = new $ZodCheck({ check: "meta" });
|
|
ch._zod.onattach = [
|
|
(inst) => {
|
|
const existing = globalRegistry.get(inst) ?? {};
|
|
globalRegistry.add(inst, { ...existing, ...metadata });
|
|
}
|
|
];
|
|
ch._zod.check = () => {
|
|
};
|
|
return ch;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _stringbool(Classes, _params) {
|
|
const params = normalizeParams(_params);
|
|
let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
|
|
let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"];
|
|
if (params.case !== "sensitive") {
|
|
truthyArray = truthyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
|
|
falsyArray = falsyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
|
|
}
|
|
const truthySet = new Set(truthyArray);
|
|
const falsySet = new Set(falsyArray);
|
|
const _Codec = Classes.Codec ?? $ZodCodec;
|
|
const _Boolean = Classes.Boolean ?? $ZodBoolean;
|
|
const _String = Classes.String ?? $ZodString;
|
|
const stringSchema = new _String({ type: "string", error: params.error });
|
|
const booleanSchema = new _Boolean({ type: "boolean", error: params.error });
|
|
const codec2 = new _Codec({
|
|
type: "pipe",
|
|
in: stringSchema,
|
|
out: booleanSchema,
|
|
transform: ((input, payload) => {
|
|
let data = input;
|
|
if (params.case !== "sensitive")
|
|
data = data.toLowerCase();
|
|
if (truthySet.has(data)) {
|
|
return true;
|
|
} else if (falsySet.has(data)) {
|
|
return false;
|
|
} else {
|
|
payload.issues.push({
|
|
code: "invalid_value",
|
|
expected: "stringbool",
|
|
values: [...truthySet, ...falsySet],
|
|
input: payload.value,
|
|
inst: codec2,
|
|
continue: false
|
|
});
|
|
return {};
|
|
}
|
|
}),
|
|
reverseTransform: ((input, _payload) => {
|
|
if (input === true) {
|
|
return truthyArray[0] || "true";
|
|
} else {
|
|
return falsyArray[0] || "false";
|
|
}
|
|
}),
|
|
error: params.error
|
|
});
|
|
return codec2;
|
|
}
|
|
// @__NO_SIDE_EFFECTS__
|
|
function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
|
|
const params = normalizeParams(_params);
|
|
const def = {
|
|
...normalizeParams(_params),
|
|
check: "string_format",
|
|
type: "string",
|
|
format,
|
|
fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
|
|
...params
|
|
};
|
|
if (fnOrRegex instanceof RegExp) {
|
|
def.pattern = fnOrRegex;
|
|
}
|
|
const inst = new Class2(def);
|
|
return inst;
|
|
}
|
|
var TimePrecision;
|
|
var init_api = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js"() {
|
|
init_checks();
|
|
init_registries();
|
|
init_schemas();
|
|
init_util();
|
|
TimePrecision = {
|
|
Any: null,
|
|
Minute: -1,
|
|
Second: 0,
|
|
Millisecond: 3,
|
|
Microsecond: 6
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
|
|
function initializeContext(params) {
|
|
let target = params?.target ?? "draft-2020-12";
|
|
if (target === "draft-4")
|
|
target = "draft-04";
|
|
if (target === "draft-7")
|
|
target = "draft-07";
|
|
return {
|
|
processors: params.processors ?? {},
|
|
metadataRegistry: params?.metadata ?? globalRegistry,
|
|
target,
|
|
unrepresentable: params?.unrepresentable ?? "throw",
|
|
override: params?.override ?? (() => {
|
|
}),
|
|
io: params?.io ?? "output",
|
|
counter: 0,
|
|
seen: /* @__PURE__ */ new Map(),
|
|
cycles: params?.cycles ?? "ref",
|
|
reused: params?.reused ?? "inline",
|
|
external: params?.external ?? void 0
|
|
};
|
|
}
|
|
function process2(schema, ctx, _params = { path: [], schemaPath: [] }) {
|
|
var _a2;
|
|
const def = schema._zod.def;
|
|
const seen = ctx.seen.get(schema);
|
|
if (seen) {
|
|
seen.count++;
|
|
const isCycle = _params.schemaPath.includes(schema);
|
|
if (isCycle) {
|
|
seen.cycle = _params.path;
|
|
}
|
|
return seen.schema;
|
|
}
|
|
const result = { schema: {}, count: 1, cycle: void 0, path: _params.path };
|
|
ctx.seen.set(schema, result);
|
|
const overrideSchema = schema._zod.toJSONSchema?.();
|
|
if (overrideSchema) {
|
|
result.schema = overrideSchema;
|
|
} else {
|
|
const params = {
|
|
..._params,
|
|
schemaPath: [..._params.schemaPath, schema],
|
|
path: _params.path
|
|
};
|
|
if (schema._zod.processJSONSchema) {
|
|
schema._zod.processJSONSchema(ctx, result.schema, params);
|
|
} else {
|
|
const _json = result.schema;
|
|
const processor = ctx.processors[def.type];
|
|
if (!processor) {
|
|
throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);
|
|
}
|
|
processor(schema, ctx, _json, params);
|
|
}
|
|
const parent = schema._zod.parent;
|
|
if (parent) {
|
|
if (!result.ref)
|
|
result.ref = parent;
|
|
process2(parent, ctx, params);
|
|
ctx.seen.get(parent).isParent = true;
|
|
}
|
|
}
|
|
const meta3 = ctx.metadataRegistry.get(schema);
|
|
if (meta3)
|
|
Object.assign(result.schema, meta3);
|
|
if (ctx.io === "input" && isTransforming(schema)) {
|
|
delete result.schema.examples;
|
|
delete result.schema.default;
|
|
}
|
|
if (ctx.io === "input" && result.schema._prefault)
|
|
(_a2 = result.schema).default ?? (_a2.default = result.schema._prefault);
|
|
delete result.schema._prefault;
|
|
const _result = ctx.seen.get(schema);
|
|
return _result.schema;
|
|
}
|
|
function extractDefs(ctx, schema) {
|
|
const root = ctx.seen.get(schema);
|
|
if (!root)
|
|
throw new Error("Unprocessed schema. This is a bug in Zod.");
|
|
const idToSchema = /* @__PURE__ */ new Map();
|
|
for (const entry of ctx.seen.entries()) {
|
|
const id = ctx.metadataRegistry.get(entry[0])?.id;
|
|
if (id) {
|
|
const existing = idToSchema.get(id);
|
|
if (existing && existing !== entry[0]) {
|
|
throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);
|
|
}
|
|
idToSchema.set(id, entry[0]);
|
|
}
|
|
}
|
|
const makeURI = (entry) => {
|
|
const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions";
|
|
if (ctx.external) {
|
|
const externalId = ctx.external.registry.get(entry[0])?.id;
|
|
const uriGenerator = ctx.external.uri ?? ((id2) => id2);
|
|
if (externalId) {
|
|
return { ref: uriGenerator(externalId) };
|
|
}
|
|
const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;
|
|
entry[1].defId = id;
|
|
return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` };
|
|
}
|
|
if (entry[1] === root) {
|
|
return { ref: "#" };
|
|
}
|
|
const uriPrefix = `#`;
|
|
const defUriPrefix = `${uriPrefix}/${defsSegment}/`;
|
|
const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;
|
|
return { defId, ref: defUriPrefix + defId };
|
|
};
|
|
const extractToDef = (entry) => {
|
|
if (entry[1].schema.$ref) {
|
|
return;
|
|
}
|
|
const seen = entry[1];
|
|
const { ref, defId } = makeURI(entry);
|
|
seen.def = { ...seen.schema };
|
|
if (defId)
|
|
seen.defId = defId;
|
|
const schema2 = seen.schema;
|
|
for (const key in schema2) {
|
|
delete schema2[key];
|
|
}
|
|
schema2.$ref = ref;
|
|
};
|
|
if (ctx.cycles === "throw") {
|
|
for (const entry of ctx.seen.entries()) {
|
|
const seen = entry[1];
|
|
if (seen.cycle) {
|
|
throw new Error(`Cycle detected: #/${seen.cycle?.join("/")}/<root>
|
|
|
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`);
|
|
}
|
|
}
|
|
}
|
|
for (const entry of ctx.seen.entries()) {
|
|
const seen = entry[1];
|
|
if (schema === entry[0]) {
|
|
extractToDef(entry);
|
|
continue;
|
|
}
|
|
if (ctx.external) {
|
|
const ext = ctx.external.registry.get(entry[0])?.id;
|
|
if (schema !== entry[0] && ext) {
|
|
extractToDef(entry);
|
|
continue;
|
|
}
|
|
}
|
|
const id = ctx.metadataRegistry.get(entry[0])?.id;
|
|
if (id) {
|
|
extractToDef(entry);
|
|
continue;
|
|
}
|
|
if (seen.cycle) {
|
|
extractToDef(entry);
|
|
continue;
|
|
}
|
|
if (seen.count > 1) {
|
|
if (ctx.reused === "ref") {
|
|
extractToDef(entry);
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function finalize(ctx, schema) {
|
|
const root = ctx.seen.get(schema);
|
|
if (!root)
|
|
throw new Error("Unprocessed schema. This is a bug in Zod.");
|
|
const flattenRef = (zodSchema) => {
|
|
const seen = ctx.seen.get(zodSchema);
|
|
if (seen.ref === null)
|
|
return;
|
|
const schema2 = seen.def ?? seen.schema;
|
|
const _cached = { ...schema2 };
|
|
const ref = seen.ref;
|
|
seen.ref = null;
|
|
if (ref) {
|
|
flattenRef(ref);
|
|
const refSeen = ctx.seen.get(ref);
|
|
const refSchema = refSeen.schema;
|
|
if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) {
|
|
schema2.allOf = schema2.allOf ?? [];
|
|
schema2.allOf.push(refSchema);
|
|
} else {
|
|
Object.assign(schema2, refSchema);
|
|
}
|
|
Object.assign(schema2, _cached);
|
|
const isParentRef = zodSchema._zod.parent === ref;
|
|
if (isParentRef) {
|
|
for (const key in schema2) {
|
|
if (key === "$ref" || key === "allOf")
|
|
continue;
|
|
if (!(key in _cached)) {
|
|
delete schema2[key];
|
|
}
|
|
}
|
|
}
|
|
if (refSchema.$ref && refSeen.def) {
|
|
for (const key in schema2) {
|
|
if (key === "$ref" || key === "allOf")
|
|
continue;
|
|
if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) {
|
|
delete schema2[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const parent = zodSchema._zod.parent;
|
|
if (parent && parent !== ref) {
|
|
flattenRef(parent);
|
|
const parentSeen = ctx.seen.get(parent);
|
|
if (parentSeen?.schema.$ref) {
|
|
schema2.$ref = parentSeen.schema.$ref;
|
|
if (parentSeen.def) {
|
|
for (const key in schema2) {
|
|
if (key === "$ref" || key === "allOf")
|
|
continue;
|
|
if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) {
|
|
delete schema2[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ctx.override({
|
|
zodSchema,
|
|
jsonSchema: schema2,
|
|
path: seen.path ?? []
|
|
});
|
|
};
|
|
for (const entry of [...ctx.seen.entries()].reverse()) {
|
|
flattenRef(entry[0]);
|
|
}
|
|
const result = {};
|
|
if (ctx.target === "draft-2020-12") {
|
|
result.$schema = "https://json-schema.org/draft/2020-12/schema";
|
|
} else if (ctx.target === "draft-07") {
|
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
} else if (ctx.target === "draft-04") {
|
|
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
} else if (ctx.target === "openapi-3.0") {
|
|
} else {
|
|
}
|
|
if (ctx.external?.uri) {
|
|
const id = ctx.external.registry.get(schema)?.id;
|
|
if (!id)
|
|
throw new Error("Schema is missing an `id` property");
|
|
result.$id = ctx.external.uri(id);
|
|
}
|
|
Object.assign(result, root.def ?? root.schema);
|
|
const defs = ctx.external?.defs ?? {};
|
|
for (const entry of ctx.seen.entries()) {
|
|
const seen = entry[1];
|
|
if (seen.def && seen.defId) {
|
|
defs[seen.defId] = seen.def;
|
|
}
|
|
}
|
|
if (ctx.external) {
|
|
} else {
|
|
if (Object.keys(defs).length > 0) {
|
|
if (ctx.target === "draft-2020-12") {
|
|
result.$defs = defs;
|
|
} else {
|
|
result.definitions = defs;
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
const finalized = JSON.parse(JSON.stringify(result));
|
|
Object.defineProperty(finalized, "~standard", {
|
|
value: {
|
|
...schema["~standard"],
|
|
jsonSchema: {
|
|
input: createStandardJSONSchemaMethod(schema, "input", ctx.processors),
|
|
output: createStandardJSONSchemaMethod(schema, "output", ctx.processors)
|
|
}
|
|
},
|
|
enumerable: false,
|
|
writable: false
|
|
});
|
|
return finalized;
|
|
} catch (_err) {
|
|
throw new Error("Error converting schema to JSON.");
|
|
}
|
|
}
|
|
function isTransforming(_schema, _ctx) {
|
|
const ctx = _ctx ?? { seen: /* @__PURE__ */ new Set() };
|
|
if (ctx.seen.has(_schema))
|
|
return false;
|
|
ctx.seen.add(_schema);
|
|
const def = _schema._zod.def;
|
|
if (def.type === "transform")
|
|
return true;
|
|
if (def.type === "array")
|
|
return isTransforming(def.element, ctx);
|
|
if (def.type === "set")
|
|
return isTransforming(def.valueType, ctx);
|
|
if (def.type === "lazy")
|
|
return isTransforming(def.getter(), ctx);
|
|
if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") {
|
|
return isTransforming(def.innerType, ctx);
|
|
}
|
|
if (def.type === "intersection") {
|
|
return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);
|
|
}
|
|
if (def.type === "record" || def.type === "map") {
|
|
return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);
|
|
}
|
|
if (def.type === "pipe") {
|
|
return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);
|
|
}
|
|
if (def.type === "object") {
|
|
for (const key in def.shape) {
|
|
if (isTransforming(def.shape[key], ctx))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
if (def.type === "union") {
|
|
for (const option of def.options) {
|
|
if (isTransforming(option, ctx))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
if (def.type === "tuple") {
|
|
for (const item of def.items) {
|
|
if (isTransforming(item, ctx))
|
|
return true;
|
|
}
|
|
if (def.rest && isTransforming(def.rest, ctx))
|
|
return true;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
var createToJSONSchemaMethod, createStandardJSONSchemaMethod;
|
|
var init_to_json_schema = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js"() {
|
|
init_registries();
|
|
createToJSONSchemaMethod = (schema, processors = {}) => (params) => {
|
|
const ctx = initializeContext({ ...params, processors });
|
|
process2(schema, ctx);
|
|
extractDefs(ctx, schema);
|
|
return finalize(ctx, schema);
|
|
};
|
|
createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {
|
|
const { libraryOptions, target } = params ?? {};
|
|
const ctx = initializeContext({ ...libraryOptions ?? {}, target, io, processors });
|
|
process2(schema, ctx);
|
|
extractDefs(ctx, schema);
|
|
return finalize(ctx, schema);
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
|
|
function toJSONSchema(input, params) {
|
|
if ("_idmap" in input) {
|
|
const registry2 = input;
|
|
const ctx2 = initializeContext({ ...params, processors: allProcessors });
|
|
const defs = {};
|
|
for (const entry of registry2._idmap.entries()) {
|
|
const [_, schema] = entry;
|
|
process2(schema, ctx2);
|
|
}
|
|
const schemas = {};
|
|
const external = {
|
|
registry: registry2,
|
|
uri: params?.uri,
|
|
defs
|
|
};
|
|
ctx2.external = external;
|
|
for (const entry of registry2._idmap.entries()) {
|
|
const [key, schema] = entry;
|
|
extractDefs(ctx2, schema);
|
|
schemas[key] = finalize(ctx2, schema);
|
|
}
|
|
if (Object.keys(defs).length > 0) {
|
|
const defsSegment = ctx2.target === "draft-2020-12" ? "$defs" : "definitions";
|
|
schemas.__shared = {
|
|
[defsSegment]: defs
|
|
};
|
|
}
|
|
return { schemas };
|
|
}
|
|
const ctx = initializeContext({ ...params, processors: allProcessors });
|
|
process2(input, ctx);
|
|
extractDefs(ctx, input);
|
|
return finalize(ctx, input);
|
|
}
|
|
var formatMap, stringProcessor, numberProcessor, booleanProcessor, bigintProcessor, symbolProcessor, nullProcessor, undefinedProcessor, voidProcessor, neverProcessor, anyProcessor, unknownProcessor, dateProcessor, enumProcessor, literalProcessor, nanProcessor, templateLiteralProcessor, fileProcessor, successProcessor, customProcessor, functionProcessor, transformProcessor, mapProcessor, setProcessor, arrayProcessor, objectProcessor, unionProcessor, intersectionProcessor, tupleProcessor, recordProcessor, nullableProcessor, nonoptionalProcessor, defaultProcessor, prefaultProcessor, catchProcessor, pipeProcessor, readonlyProcessor, promiseProcessor, optionalProcessor, lazyProcessor, allProcessors;
|
|
var init_json_schema_processors = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js"() {
|
|
init_to_json_schema();
|
|
init_util();
|
|
formatMap = {
|
|
guid: "uuid",
|
|
url: "uri",
|
|
datetime: "date-time",
|
|
json_string: "json-string",
|
|
regex: ""
|
|
// do not set
|
|
};
|
|
stringProcessor = (schema, ctx, _json, _params) => {
|
|
const json2 = _json;
|
|
json2.type = "string";
|
|
const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;
|
|
if (typeof minimum === "number")
|
|
json2.minLength = minimum;
|
|
if (typeof maximum === "number")
|
|
json2.maxLength = maximum;
|
|
if (format) {
|
|
json2.format = formatMap[format] ?? format;
|
|
if (json2.format === "")
|
|
delete json2.format;
|
|
if (format === "time") {
|
|
delete json2.format;
|
|
}
|
|
}
|
|
if (contentEncoding)
|
|
json2.contentEncoding = contentEncoding;
|
|
if (patterns && patterns.size > 0) {
|
|
const regexes = [...patterns];
|
|
if (regexes.length === 1)
|
|
json2.pattern = regexes[0].source;
|
|
else if (regexes.length > 1) {
|
|
json2.allOf = [
|
|
...regexes.map((regex) => ({
|
|
...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {},
|
|
pattern: regex.source
|
|
}))
|
|
];
|
|
}
|
|
}
|
|
};
|
|
numberProcessor = (schema, ctx, _json, _params) => {
|
|
const json2 = _json;
|
|
const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
|
|
if (typeof format === "string" && format.includes("int"))
|
|
json2.type = "integer";
|
|
else
|
|
json2.type = "number";
|
|
if (typeof exclusiveMinimum === "number") {
|
|
if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
|
|
json2.minimum = exclusiveMinimum;
|
|
json2.exclusiveMinimum = true;
|
|
} else {
|
|
json2.exclusiveMinimum = exclusiveMinimum;
|
|
}
|
|
}
|
|
if (typeof minimum === "number") {
|
|
json2.minimum = minimum;
|
|
if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") {
|
|
if (exclusiveMinimum >= minimum)
|
|
delete json2.minimum;
|
|
else
|
|
delete json2.exclusiveMinimum;
|
|
}
|
|
}
|
|
if (typeof exclusiveMaximum === "number") {
|
|
if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
|
|
json2.maximum = exclusiveMaximum;
|
|
json2.exclusiveMaximum = true;
|
|
} else {
|
|
json2.exclusiveMaximum = exclusiveMaximum;
|
|
}
|
|
}
|
|
if (typeof maximum === "number") {
|
|
json2.maximum = maximum;
|
|
if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") {
|
|
if (exclusiveMaximum <= maximum)
|
|
delete json2.maximum;
|
|
else
|
|
delete json2.exclusiveMaximum;
|
|
}
|
|
}
|
|
if (typeof multipleOf === "number")
|
|
json2.multipleOf = multipleOf;
|
|
};
|
|
booleanProcessor = (_schema, _ctx, json2, _params) => {
|
|
json2.type = "boolean";
|
|
};
|
|
bigintProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("BigInt cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
symbolProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Symbols cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
nullProcessor = (_schema, ctx, json2, _params) => {
|
|
if (ctx.target === "openapi-3.0") {
|
|
json2.type = "string";
|
|
json2.nullable = true;
|
|
json2.enum = [null];
|
|
} else {
|
|
json2.type = "null";
|
|
}
|
|
};
|
|
undefinedProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Undefined cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
voidProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Void cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
neverProcessor = (_schema, _ctx, json2, _params) => {
|
|
json2.not = {};
|
|
};
|
|
anyProcessor = (_schema, _ctx, _json, _params) => {
|
|
};
|
|
unknownProcessor = (_schema, _ctx, _json, _params) => {
|
|
};
|
|
dateProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Date cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
enumProcessor = (schema, _ctx, json2, _params) => {
|
|
const def = schema._zod.def;
|
|
const values = getEnumValues(def.entries);
|
|
if (values.every((v) => typeof v === "number"))
|
|
json2.type = "number";
|
|
if (values.every((v) => typeof v === "string"))
|
|
json2.type = "string";
|
|
json2.enum = values;
|
|
};
|
|
literalProcessor = (schema, ctx, json2, _params) => {
|
|
const def = schema._zod.def;
|
|
const vals = [];
|
|
for (const val of def.values) {
|
|
if (val === void 0) {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
} else {
|
|
}
|
|
} else if (typeof val === "bigint") {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
|
} else {
|
|
vals.push(Number(val));
|
|
}
|
|
} else {
|
|
vals.push(val);
|
|
}
|
|
}
|
|
if (vals.length === 0) {
|
|
} else if (vals.length === 1) {
|
|
const val = vals[0];
|
|
json2.type = val === null ? "null" : typeof val;
|
|
if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
|
|
json2.enum = [val];
|
|
} else {
|
|
json2.const = val;
|
|
}
|
|
} else {
|
|
if (vals.every((v) => typeof v === "number"))
|
|
json2.type = "number";
|
|
if (vals.every((v) => typeof v === "string"))
|
|
json2.type = "string";
|
|
if (vals.every((v) => typeof v === "boolean"))
|
|
json2.type = "boolean";
|
|
if (vals.every((v) => v === null))
|
|
json2.type = "null";
|
|
json2.enum = vals;
|
|
}
|
|
};
|
|
nanProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("NaN cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
templateLiteralProcessor = (schema, _ctx, json2, _params) => {
|
|
const _json = json2;
|
|
const pattern = schema._zod.pattern;
|
|
if (!pattern)
|
|
throw new Error("Pattern not found in template literal");
|
|
_json.type = "string";
|
|
_json.pattern = pattern.source;
|
|
};
|
|
fileProcessor = (schema, _ctx, json2, _params) => {
|
|
const _json = json2;
|
|
const file2 = {
|
|
type: "string",
|
|
format: "binary",
|
|
contentEncoding: "binary"
|
|
};
|
|
const { minimum, maximum, mime } = schema._zod.bag;
|
|
if (minimum !== void 0)
|
|
file2.minLength = minimum;
|
|
if (maximum !== void 0)
|
|
file2.maxLength = maximum;
|
|
if (mime) {
|
|
if (mime.length === 1) {
|
|
file2.contentMediaType = mime[0];
|
|
Object.assign(_json, file2);
|
|
} else {
|
|
Object.assign(_json, file2);
|
|
_json.anyOf = mime.map((m) => ({ contentMediaType: m }));
|
|
}
|
|
} else {
|
|
Object.assign(_json, file2);
|
|
}
|
|
};
|
|
successProcessor = (_schema, _ctx, json2, _params) => {
|
|
json2.type = "boolean";
|
|
};
|
|
customProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Custom types cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
functionProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Function types cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
transformProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Transforms cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
mapProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Map cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
setProcessor = (_schema, ctx, _json, _params) => {
|
|
if (ctx.unrepresentable === "throw") {
|
|
throw new Error("Set cannot be represented in JSON Schema");
|
|
}
|
|
};
|
|
arrayProcessor = (schema, ctx, _json, params) => {
|
|
const json2 = _json;
|
|
const def = schema._zod.def;
|
|
const { minimum, maximum } = schema._zod.bag;
|
|
if (typeof minimum === "number")
|
|
json2.minItems = minimum;
|
|
if (typeof maximum === "number")
|
|
json2.maxItems = maximum;
|
|
json2.type = "array";
|
|
json2.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] });
|
|
};
|
|
objectProcessor = (schema, ctx, _json, params) => {
|
|
const json2 = _json;
|
|
const def = schema._zod.def;
|
|
json2.type = "object";
|
|
json2.properties = {};
|
|
const shape = def.shape;
|
|
for (const key in shape) {
|
|
json2.properties[key] = process2(shape[key], ctx, {
|
|
...params,
|
|
path: [...params.path, "properties", key]
|
|
});
|
|
}
|
|
const allKeys = new Set(Object.keys(shape));
|
|
const requiredKeys = new Set([...allKeys].filter((key) => {
|
|
const v = def.shape[key]._zod;
|
|
if (ctx.io === "input") {
|
|
return v.optin === void 0;
|
|
} else {
|
|
return v.optout === void 0;
|
|
}
|
|
}));
|
|
if (requiredKeys.size > 0) {
|
|
json2.required = Array.from(requiredKeys);
|
|
}
|
|
if (def.catchall?._zod.def.type === "never") {
|
|
json2.additionalProperties = false;
|
|
} else if (!def.catchall) {
|
|
if (ctx.io === "output")
|
|
json2.additionalProperties = false;
|
|
} else if (def.catchall) {
|
|
json2.additionalProperties = process2(def.catchall, ctx, {
|
|
...params,
|
|
path: [...params.path, "additionalProperties"]
|
|
});
|
|
}
|
|
};
|
|
unionProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
const isExclusive = def.inclusive === false;
|
|
const options = def.options.map((x, i) => process2(x, ctx, {
|
|
...params,
|
|
path: [...params.path, isExclusive ? "oneOf" : "anyOf", i]
|
|
}));
|
|
if (isExclusive) {
|
|
json2.oneOf = options;
|
|
} else {
|
|
json2.anyOf = options;
|
|
}
|
|
};
|
|
intersectionProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
const a = process2(def.left, ctx, {
|
|
...params,
|
|
path: [...params.path, "allOf", 0]
|
|
});
|
|
const b = process2(def.right, ctx, {
|
|
...params,
|
|
path: [...params.path, "allOf", 1]
|
|
});
|
|
const isSimpleIntersection = (val) => "allOf" in val && Object.keys(val).length === 1;
|
|
const allOf = [
|
|
...isSimpleIntersection(a) ? a.allOf : [a],
|
|
...isSimpleIntersection(b) ? b.allOf : [b]
|
|
];
|
|
json2.allOf = allOf;
|
|
};
|
|
tupleProcessor = (schema, ctx, _json, params) => {
|
|
const json2 = _json;
|
|
const def = schema._zod.def;
|
|
json2.type = "array";
|
|
const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items";
|
|
const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems";
|
|
const prefixItems = def.items.map((x, i) => process2(x, ctx, {
|
|
...params,
|
|
path: [...params.path, prefixPath, i]
|
|
}));
|
|
const rest = def.rest ? process2(def.rest, ctx, {
|
|
...params,
|
|
path: [...params.path, restPath, ...ctx.target === "openapi-3.0" ? [def.items.length] : []]
|
|
}) : null;
|
|
if (ctx.target === "draft-2020-12") {
|
|
json2.prefixItems = prefixItems;
|
|
if (rest) {
|
|
json2.items = rest;
|
|
}
|
|
} else if (ctx.target === "openapi-3.0") {
|
|
json2.items = {
|
|
anyOf: prefixItems
|
|
};
|
|
if (rest) {
|
|
json2.items.anyOf.push(rest);
|
|
}
|
|
json2.minItems = prefixItems.length;
|
|
if (!rest) {
|
|
json2.maxItems = prefixItems.length;
|
|
}
|
|
} else {
|
|
json2.items = prefixItems;
|
|
if (rest) {
|
|
json2.additionalItems = rest;
|
|
}
|
|
}
|
|
const { minimum, maximum } = schema._zod.bag;
|
|
if (typeof minimum === "number")
|
|
json2.minItems = minimum;
|
|
if (typeof maximum === "number")
|
|
json2.maxItems = maximum;
|
|
};
|
|
recordProcessor = (schema, ctx, _json, params) => {
|
|
const json2 = _json;
|
|
const def = schema._zod.def;
|
|
json2.type = "object";
|
|
const keyType = def.keyType;
|
|
const keyBag = keyType._zod.bag;
|
|
const patterns = keyBag?.patterns;
|
|
if (def.mode === "loose" && patterns && patterns.size > 0) {
|
|
const valueSchema = process2(def.valueType, ctx, {
|
|
...params,
|
|
path: [...params.path, "patternProperties", "*"]
|
|
});
|
|
json2.patternProperties = {};
|
|
for (const pattern of patterns) {
|
|
json2.patternProperties[pattern.source] = valueSchema;
|
|
}
|
|
} else {
|
|
if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") {
|
|
json2.propertyNames = process2(def.keyType, ctx, {
|
|
...params,
|
|
path: [...params.path, "propertyNames"]
|
|
});
|
|
}
|
|
json2.additionalProperties = process2(def.valueType, ctx, {
|
|
...params,
|
|
path: [...params.path, "additionalProperties"]
|
|
});
|
|
}
|
|
const keyValues = keyType._zod.values;
|
|
if (keyValues) {
|
|
const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number");
|
|
if (validKeyValues.length > 0) {
|
|
json2.required = validKeyValues;
|
|
}
|
|
}
|
|
};
|
|
nullableProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
const inner = process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
if (ctx.target === "openapi-3.0") {
|
|
seen.ref = def.innerType;
|
|
json2.nullable = true;
|
|
} else {
|
|
json2.anyOf = [inner, { type: "null" }];
|
|
}
|
|
};
|
|
nonoptionalProcessor = (schema, ctx, _json, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
};
|
|
defaultProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
json2.default = JSON.parse(JSON.stringify(def.defaultValue));
|
|
};
|
|
prefaultProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
if (ctx.io === "input")
|
|
json2._prefault = JSON.parse(JSON.stringify(def.defaultValue));
|
|
};
|
|
catchProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
let catchValue;
|
|
try {
|
|
catchValue = def.catchValue(void 0);
|
|
} catch {
|
|
throw new Error("Dynamic catch values are not supported in JSON Schema");
|
|
}
|
|
json2.default = catchValue;
|
|
};
|
|
pipeProcessor = (schema, ctx, _json, params) => {
|
|
const def = schema._zod.def;
|
|
const innerType = ctx.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out;
|
|
process2(innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = innerType;
|
|
};
|
|
readonlyProcessor = (schema, ctx, json2, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
json2.readOnly = true;
|
|
};
|
|
promiseProcessor = (schema, ctx, _json, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
};
|
|
optionalProcessor = (schema, ctx, _json, params) => {
|
|
const def = schema._zod.def;
|
|
process2(def.innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = def.innerType;
|
|
};
|
|
lazyProcessor = (schema, ctx, _json, params) => {
|
|
const innerType = schema._zod.innerType;
|
|
process2(innerType, ctx, params);
|
|
const seen = ctx.seen.get(schema);
|
|
seen.ref = innerType;
|
|
};
|
|
allProcessors = {
|
|
string: stringProcessor,
|
|
number: numberProcessor,
|
|
boolean: booleanProcessor,
|
|
bigint: bigintProcessor,
|
|
symbol: symbolProcessor,
|
|
null: nullProcessor,
|
|
undefined: undefinedProcessor,
|
|
void: voidProcessor,
|
|
never: neverProcessor,
|
|
any: anyProcessor,
|
|
unknown: unknownProcessor,
|
|
date: dateProcessor,
|
|
enum: enumProcessor,
|
|
literal: literalProcessor,
|
|
nan: nanProcessor,
|
|
template_literal: templateLiteralProcessor,
|
|
file: fileProcessor,
|
|
success: successProcessor,
|
|
custom: customProcessor,
|
|
function: functionProcessor,
|
|
transform: transformProcessor,
|
|
map: mapProcessor,
|
|
set: setProcessor,
|
|
array: arrayProcessor,
|
|
object: objectProcessor,
|
|
union: unionProcessor,
|
|
intersection: intersectionProcessor,
|
|
tuple: tupleProcessor,
|
|
record: recordProcessor,
|
|
nullable: nullableProcessor,
|
|
nonoptional: nonoptionalProcessor,
|
|
default: defaultProcessor,
|
|
prefault: prefaultProcessor,
|
|
catch: catchProcessor,
|
|
pipe: pipeProcessor,
|
|
readonly: readonlyProcessor,
|
|
promise: promiseProcessor,
|
|
optional: optionalProcessor,
|
|
lazy: lazyProcessor
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js
|
|
var JSONSchemaGenerator;
|
|
var init_json_schema_generator = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js"() {
|
|
init_json_schema_processors();
|
|
init_to_json_schema();
|
|
JSONSchemaGenerator = class {
|
|
/** @deprecated Access via ctx instead */
|
|
get metadataRegistry() {
|
|
return this.ctx.metadataRegistry;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get target() {
|
|
return this.ctx.target;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get unrepresentable() {
|
|
return this.ctx.unrepresentable;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get override() {
|
|
return this.ctx.override;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get io() {
|
|
return this.ctx.io;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get counter() {
|
|
return this.ctx.counter;
|
|
}
|
|
set counter(value2) {
|
|
this.ctx.counter = value2;
|
|
}
|
|
/** @deprecated Access via ctx instead */
|
|
get seen() {
|
|
return this.ctx.seen;
|
|
}
|
|
constructor(params) {
|
|
let normalizedTarget = params?.target ?? "draft-2020-12";
|
|
if (normalizedTarget === "draft-4")
|
|
normalizedTarget = "draft-04";
|
|
if (normalizedTarget === "draft-7")
|
|
normalizedTarget = "draft-07";
|
|
this.ctx = initializeContext({
|
|
processors: allProcessors,
|
|
target: normalizedTarget,
|
|
...params?.metadata && { metadata: params.metadata },
|
|
...params?.unrepresentable && { unrepresentable: params.unrepresentable },
|
|
...params?.override && { override: params.override },
|
|
...params?.io && { io: params.io }
|
|
});
|
|
}
|
|
/**
|
|
* Process a schema to prepare it for JSON Schema generation.
|
|
* This must be called before emit().
|
|
*/
|
|
process(schema, _params = { path: [], schemaPath: [] }) {
|
|
return process2(schema, this.ctx, _params);
|
|
}
|
|
/**
|
|
* Emit the final JSON Schema after processing.
|
|
* Must call process() first.
|
|
*/
|
|
emit(schema, _params) {
|
|
if (_params) {
|
|
if (_params.cycles)
|
|
this.ctx.cycles = _params.cycles;
|
|
if (_params.reused)
|
|
this.ctx.reused = _params.reused;
|
|
if (_params.external)
|
|
this.ctx.external = _params.external;
|
|
}
|
|
extractDefs(this.ctx, schema);
|
|
const result = finalize(this.ctx, schema);
|
|
const { "~standard": _, ...plainResult } = result;
|
|
return plainResult;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js
|
|
var json_schema_exports = {};
|
|
var init_json_schema = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js
|
|
var core_exports2 = {};
|
|
__export(core_exports2, {
|
|
$ZodAny: () => $ZodAny,
|
|
$ZodArray: () => $ZodArray,
|
|
$ZodAsyncError: () => $ZodAsyncError,
|
|
$ZodBase64: () => $ZodBase64,
|
|
$ZodBase64URL: () => $ZodBase64URL,
|
|
$ZodBigInt: () => $ZodBigInt,
|
|
$ZodBigIntFormat: () => $ZodBigIntFormat,
|
|
$ZodBoolean: () => $ZodBoolean,
|
|
$ZodCIDRv4: () => $ZodCIDRv4,
|
|
$ZodCIDRv6: () => $ZodCIDRv6,
|
|
$ZodCUID: () => $ZodCUID,
|
|
$ZodCUID2: () => $ZodCUID2,
|
|
$ZodCatch: () => $ZodCatch,
|
|
$ZodCheck: () => $ZodCheck,
|
|
$ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat,
|
|
$ZodCheckEndsWith: () => $ZodCheckEndsWith,
|
|
$ZodCheckGreaterThan: () => $ZodCheckGreaterThan,
|
|
$ZodCheckIncludes: () => $ZodCheckIncludes,
|
|
$ZodCheckLengthEquals: () => $ZodCheckLengthEquals,
|
|
$ZodCheckLessThan: () => $ZodCheckLessThan,
|
|
$ZodCheckLowerCase: () => $ZodCheckLowerCase,
|
|
$ZodCheckMaxLength: () => $ZodCheckMaxLength,
|
|
$ZodCheckMaxSize: () => $ZodCheckMaxSize,
|
|
$ZodCheckMimeType: () => $ZodCheckMimeType,
|
|
$ZodCheckMinLength: () => $ZodCheckMinLength,
|
|
$ZodCheckMinSize: () => $ZodCheckMinSize,
|
|
$ZodCheckMultipleOf: () => $ZodCheckMultipleOf,
|
|
$ZodCheckNumberFormat: () => $ZodCheckNumberFormat,
|
|
$ZodCheckOverwrite: () => $ZodCheckOverwrite,
|
|
$ZodCheckProperty: () => $ZodCheckProperty,
|
|
$ZodCheckRegex: () => $ZodCheckRegex,
|
|
$ZodCheckSizeEquals: () => $ZodCheckSizeEquals,
|
|
$ZodCheckStartsWith: () => $ZodCheckStartsWith,
|
|
$ZodCheckStringFormat: () => $ZodCheckStringFormat,
|
|
$ZodCheckUpperCase: () => $ZodCheckUpperCase,
|
|
$ZodCodec: () => $ZodCodec,
|
|
$ZodCustom: () => $ZodCustom,
|
|
$ZodCustomStringFormat: () => $ZodCustomStringFormat,
|
|
$ZodDate: () => $ZodDate,
|
|
$ZodDefault: () => $ZodDefault,
|
|
$ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion,
|
|
$ZodE164: () => $ZodE164,
|
|
$ZodEmail: () => $ZodEmail,
|
|
$ZodEmoji: () => $ZodEmoji,
|
|
$ZodEncodeError: () => $ZodEncodeError,
|
|
$ZodEnum: () => $ZodEnum,
|
|
$ZodError: () => $ZodError,
|
|
$ZodExactOptional: () => $ZodExactOptional,
|
|
$ZodFile: () => $ZodFile,
|
|
$ZodFunction: () => $ZodFunction,
|
|
$ZodGUID: () => $ZodGUID,
|
|
$ZodIPv4: () => $ZodIPv4,
|
|
$ZodIPv6: () => $ZodIPv6,
|
|
$ZodISODate: () => $ZodISODate,
|
|
$ZodISODateTime: () => $ZodISODateTime,
|
|
$ZodISODuration: () => $ZodISODuration,
|
|
$ZodISOTime: () => $ZodISOTime,
|
|
$ZodIntersection: () => $ZodIntersection,
|
|
$ZodJWT: () => $ZodJWT,
|
|
$ZodKSUID: () => $ZodKSUID,
|
|
$ZodLazy: () => $ZodLazy,
|
|
$ZodLiteral: () => $ZodLiteral,
|
|
$ZodMAC: () => $ZodMAC,
|
|
$ZodMap: () => $ZodMap,
|
|
$ZodNaN: () => $ZodNaN,
|
|
$ZodNanoID: () => $ZodNanoID,
|
|
$ZodNever: () => $ZodNever,
|
|
$ZodNonOptional: () => $ZodNonOptional,
|
|
$ZodNull: () => $ZodNull,
|
|
$ZodNullable: () => $ZodNullable,
|
|
$ZodNumber: () => $ZodNumber,
|
|
$ZodNumberFormat: () => $ZodNumberFormat,
|
|
$ZodObject: () => $ZodObject,
|
|
$ZodObjectJIT: () => $ZodObjectJIT,
|
|
$ZodOptional: () => $ZodOptional,
|
|
$ZodPipe: () => $ZodPipe,
|
|
$ZodPrefault: () => $ZodPrefault,
|
|
$ZodPromise: () => $ZodPromise,
|
|
$ZodReadonly: () => $ZodReadonly,
|
|
$ZodRealError: () => $ZodRealError,
|
|
$ZodRecord: () => $ZodRecord,
|
|
$ZodRegistry: () => $ZodRegistry,
|
|
$ZodSet: () => $ZodSet,
|
|
$ZodString: () => $ZodString,
|
|
$ZodStringFormat: () => $ZodStringFormat,
|
|
$ZodSuccess: () => $ZodSuccess,
|
|
$ZodSymbol: () => $ZodSymbol,
|
|
$ZodTemplateLiteral: () => $ZodTemplateLiteral,
|
|
$ZodTransform: () => $ZodTransform,
|
|
$ZodTuple: () => $ZodTuple,
|
|
$ZodType: () => $ZodType,
|
|
$ZodULID: () => $ZodULID,
|
|
$ZodURL: () => $ZodURL,
|
|
$ZodUUID: () => $ZodUUID,
|
|
$ZodUndefined: () => $ZodUndefined,
|
|
$ZodUnion: () => $ZodUnion,
|
|
$ZodUnknown: () => $ZodUnknown,
|
|
$ZodVoid: () => $ZodVoid,
|
|
$ZodXID: () => $ZodXID,
|
|
$ZodXor: () => $ZodXor,
|
|
$brand: () => $brand,
|
|
$constructor: () => $constructor,
|
|
$input: () => $input,
|
|
$output: () => $output,
|
|
Doc: () => Doc,
|
|
JSONSchema: () => json_schema_exports,
|
|
JSONSchemaGenerator: () => JSONSchemaGenerator,
|
|
NEVER: () => NEVER,
|
|
TimePrecision: () => TimePrecision,
|
|
_any: () => _any,
|
|
_array: () => _array,
|
|
_base64: () => _base64,
|
|
_base64url: () => _base64url,
|
|
_bigint: () => _bigint,
|
|
_boolean: () => _boolean,
|
|
_catch: () => _catch,
|
|
_check: () => _check,
|
|
_cidrv4: () => _cidrv4,
|
|
_cidrv6: () => _cidrv6,
|
|
_coercedBigint: () => _coercedBigint,
|
|
_coercedBoolean: () => _coercedBoolean,
|
|
_coercedDate: () => _coercedDate,
|
|
_coercedNumber: () => _coercedNumber,
|
|
_coercedString: () => _coercedString,
|
|
_cuid: () => _cuid,
|
|
_cuid2: () => _cuid2,
|
|
_custom: () => _custom,
|
|
_date: () => _date,
|
|
_decode: () => _decode,
|
|
_decodeAsync: () => _decodeAsync,
|
|
_default: () => _default,
|
|
_discriminatedUnion: () => _discriminatedUnion,
|
|
_e164: () => _e164,
|
|
_email: () => _email,
|
|
_emoji: () => _emoji2,
|
|
_encode: () => _encode,
|
|
_encodeAsync: () => _encodeAsync,
|
|
_endsWith: () => _endsWith,
|
|
_enum: () => _enum,
|
|
_file: () => _file,
|
|
_float32: () => _float32,
|
|
_float64: () => _float64,
|
|
_gt: () => _gt,
|
|
_gte: () => _gte,
|
|
_guid: () => _guid,
|
|
_includes: () => _includes,
|
|
_int: () => _int,
|
|
_int32: () => _int32,
|
|
_int64: () => _int64,
|
|
_intersection: () => _intersection,
|
|
_ipv4: () => _ipv4,
|
|
_ipv6: () => _ipv6,
|
|
_isoDate: () => _isoDate,
|
|
_isoDateTime: () => _isoDateTime,
|
|
_isoDuration: () => _isoDuration,
|
|
_isoTime: () => _isoTime,
|
|
_jwt: () => _jwt,
|
|
_ksuid: () => _ksuid,
|
|
_lazy: () => _lazy,
|
|
_length: () => _length,
|
|
_literal: () => _literal,
|
|
_lowercase: () => _lowercase,
|
|
_lt: () => _lt,
|
|
_lte: () => _lte,
|
|
_mac: () => _mac,
|
|
_map: () => _map,
|
|
_max: () => _lte,
|
|
_maxLength: () => _maxLength,
|
|
_maxSize: () => _maxSize,
|
|
_mime: () => _mime,
|
|
_min: () => _gte,
|
|
_minLength: () => _minLength,
|
|
_minSize: () => _minSize,
|
|
_multipleOf: () => _multipleOf,
|
|
_nan: () => _nan,
|
|
_nanoid: () => _nanoid,
|
|
_nativeEnum: () => _nativeEnum,
|
|
_negative: () => _negative,
|
|
_never: () => _never,
|
|
_nonnegative: () => _nonnegative,
|
|
_nonoptional: () => _nonoptional,
|
|
_nonpositive: () => _nonpositive,
|
|
_normalize: () => _normalize,
|
|
_null: () => _null2,
|
|
_nullable: () => _nullable,
|
|
_number: () => _number,
|
|
_optional: () => _optional,
|
|
_overwrite: () => _overwrite,
|
|
_parse: () => _parse,
|
|
_parseAsync: () => _parseAsync,
|
|
_pipe: () => _pipe,
|
|
_positive: () => _positive,
|
|
_promise: () => _promise,
|
|
_property: () => _property,
|
|
_readonly: () => _readonly,
|
|
_record: () => _record,
|
|
_refine: () => _refine,
|
|
_regex: () => _regex,
|
|
_safeDecode: () => _safeDecode,
|
|
_safeDecodeAsync: () => _safeDecodeAsync,
|
|
_safeEncode: () => _safeEncode,
|
|
_safeEncodeAsync: () => _safeEncodeAsync,
|
|
_safeParse: () => _safeParse,
|
|
_safeParseAsync: () => _safeParseAsync,
|
|
_set: () => _set,
|
|
_size: () => _size,
|
|
_slugify: () => _slugify,
|
|
_startsWith: () => _startsWith,
|
|
_string: () => _string,
|
|
_stringFormat: () => _stringFormat,
|
|
_stringbool: () => _stringbool,
|
|
_success: () => _success,
|
|
_superRefine: () => _superRefine,
|
|
_symbol: () => _symbol,
|
|
_templateLiteral: () => _templateLiteral,
|
|
_toLowerCase: () => _toLowerCase,
|
|
_toUpperCase: () => _toUpperCase,
|
|
_transform: () => _transform,
|
|
_trim: () => _trim,
|
|
_tuple: () => _tuple,
|
|
_uint32: () => _uint32,
|
|
_uint64: () => _uint64,
|
|
_ulid: () => _ulid,
|
|
_undefined: () => _undefined2,
|
|
_union: () => _union,
|
|
_unknown: () => _unknown,
|
|
_uppercase: () => _uppercase,
|
|
_url: () => _url,
|
|
_uuid: () => _uuid,
|
|
_uuidv4: () => _uuidv4,
|
|
_uuidv6: () => _uuidv6,
|
|
_uuidv7: () => _uuidv7,
|
|
_void: () => _void,
|
|
_xid: () => _xid,
|
|
_xor: () => _xor,
|
|
clone: () => clone,
|
|
config: () => config,
|
|
createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod,
|
|
createToJSONSchemaMethod: () => createToJSONSchemaMethod,
|
|
decode: () => decode,
|
|
decodeAsync: () => decodeAsync,
|
|
describe: () => describe,
|
|
encode: () => encode,
|
|
encodeAsync: () => encodeAsync,
|
|
extractDefs: () => extractDefs,
|
|
finalize: () => finalize,
|
|
flattenError: () => flattenError,
|
|
formatError: () => formatError,
|
|
globalConfig: () => globalConfig,
|
|
globalRegistry: () => globalRegistry,
|
|
initializeContext: () => initializeContext,
|
|
isValidBase64: () => isValidBase64,
|
|
isValidBase64URL: () => isValidBase64URL,
|
|
isValidJWT: () => isValidJWT,
|
|
locales: () => locales_exports,
|
|
meta: () => meta,
|
|
parse: () => parse,
|
|
parseAsync: () => parseAsync,
|
|
prettifyError: () => prettifyError,
|
|
process: () => process2,
|
|
regexes: () => regexes_exports,
|
|
registry: () => registry,
|
|
safeDecode: () => safeDecode,
|
|
safeDecodeAsync: () => safeDecodeAsync,
|
|
safeEncode: () => safeEncode,
|
|
safeEncodeAsync: () => safeEncodeAsync,
|
|
safeParse: () => safeParse,
|
|
safeParseAsync: () => safeParseAsync,
|
|
toDotPath: () => toDotPath,
|
|
toJSONSchema: () => toJSONSchema,
|
|
treeifyError: () => treeifyError,
|
|
util: () => util_exports,
|
|
version: () => version
|
|
});
|
|
var init_core2 = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js"() {
|
|
init_core();
|
|
init_parse();
|
|
init_errors();
|
|
init_schemas();
|
|
init_checks();
|
|
init_versions();
|
|
init_util();
|
|
init_regexes();
|
|
init_locales();
|
|
init_registries();
|
|
init_doc();
|
|
init_api();
|
|
init_to_json_schema();
|
|
init_json_schema_processors();
|
|
init_json_schema_generator();
|
|
init_json_schema();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js
|
|
var checks_exports2 = {};
|
|
__export(checks_exports2, {
|
|
endsWith: () => _endsWith,
|
|
gt: () => _gt,
|
|
gte: () => _gte,
|
|
includes: () => _includes,
|
|
length: () => _length,
|
|
lowercase: () => _lowercase,
|
|
lt: () => _lt,
|
|
lte: () => _lte,
|
|
maxLength: () => _maxLength,
|
|
maxSize: () => _maxSize,
|
|
mime: () => _mime,
|
|
minLength: () => _minLength,
|
|
minSize: () => _minSize,
|
|
multipleOf: () => _multipleOf,
|
|
negative: () => _negative,
|
|
nonnegative: () => _nonnegative,
|
|
nonpositive: () => _nonpositive,
|
|
normalize: () => _normalize,
|
|
overwrite: () => _overwrite,
|
|
positive: () => _positive,
|
|
property: () => _property,
|
|
regex: () => _regex,
|
|
size: () => _size,
|
|
slugify: () => _slugify,
|
|
startsWith: () => _startsWith,
|
|
toLowerCase: () => _toLowerCase,
|
|
toUpperCase: () => _toUpperCase,
|
|
trim: () => _trim,
|
|
uppercase: () => _uppercase
|
|
});
|
|
var init_checks2 = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js"() {
|
|
init_core2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js
|
|
var iso_exports = {};
|
|
__export(iso_exports, {
|
|
ZodISODate: () => ZodISODate,
|
|
ZodISODateTime: () => ZodISODateTime,
|
|
ZodISODuration: () => ZodISODuration,
|
|
ZodISOTime: () => ZodISOTime,
|
|
date: () => date2,
|
|
datetime: () => datetime2,
|
|
duration: () => duration2,
|
|
time: () => time2
|
|
});
|
|
function datetime2(params) {
|
|
return _isoDateTime(ZodISODateTime, params);
|
|
}
|
|
function date2(params) {
|
|
return _isoDate(ZodISODate, params);
|
|
}
|
|
function time2(params) {
|
|
return _isoTime(ZodISOTime, params);
|
|
}
|
|
function duration2(params) {
|
|
return _isoDuration(ZodISODuration, params);
|
|
}
|
|
var ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration;
|
|
var init_iso = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js"() {
|
|
init_core2();
|
|
init_schemas2();
|
|
ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
|
|
$ZodISODateTime.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => {
|
|
$ZodISODate.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => {
|
|
$ZodISOTime.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => {
|
|
$ZodISODuration.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js
|
|
var initializer2, ZodError, ZodRealError;
|
|
var init_errors2 = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js"() {
|
|
init_core2();
|
|
init_core2();
|
|
init_util();
|
|
initializer2 = (inst, issues) => {
|
|
$ZodError.init(inst, issues);
|
|
inst.name = "ZodError";
|
|
Object.defineProperties(inst, {
|
|
format: {
|
|
value: (mapper) => formatError(inst, mapper)
|
|
// enumerable: false,
|
|
},
|
|
flatten: {
|
|
value: (mapper) => flattenError(inst, mapper)
|
|
// enumerable: false,
|
|
},
|
|
addIssue: {
|
|
value: (issue2) => {
|
|
inst.issues.push(issue2);
|
|
inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);
|
|
}
|
|
// enumerable: false,
|
|
},
|
|
addIssues: {
|
|
value: (issues2) => {
|
|
inst.issues.push(...issues2);
|
|
inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);
|
|
}
|
|
// enumerable: false,
|
|
},
|
|
isEmpty: {
|
|
get() {
|
|
return inst.issues.length === 0;
|
|
}
|
|
// enumerable: false,
|
|
}
|
|
});
|
|
};
|
|
ZodError = $constructor("ZodError", initializer2);
|
|
ZodRealError = $constructor("ZodError", initializer2, {
|
|
Parent: Error
|
|
});
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js
|
|
var parse2, parseAsync2, safeParse2, safeParseAsync2, encode2, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2;
|
|
var init_parse2 = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js"() {
|
|
init_core2();
|
|
init_errors2();
|
|
parse2 = /* @__PURE__ */ _parse(ZodRealError);
|
|
parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
|
|
safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError);
|
|
encode2 = /* @__PURE__ */ _encode(ZodRealError);
|
|
decode2 = /* @__PURE__ */ _decode(ZodRealError);
|
|
encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError);
|
|
decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError);
|
|
safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError);
|
|
safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
|
|
safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
|
|
safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
|
|
var schemas_exports2 = {};
|
|
__export(schemas_exports2, {
|
|
ZodAny: () => ZodAny,
|
|
ZodArray: () => ZodArray,
|
|
ZodBase64: () => ZodBase64,
|
|
ZodBase64URL: () => ZodBase64URL,
|
|
ZodBigInt: () => ZodBigInt,
|
|
ZodBigIntFormat: () => ZodBigIntFormat,
|
|
ZodBoolean: () => ZodBoolean,
|
|
ZodCIDRv4: () => ZodCIDRv4,
|
|
ZodCIDRv6: () => ZodCIDRv6,
|
|
ZodCUID: () => ZodCUID,
|
|
ZodCUID2: () => ZodCUID2,
|
|
ZodCatch: () => ZodCatch,
|
|
ZodCodec: () => ZodCodec,
|
|
ZodCustom: () => ZodCustom,
|
|
ZodCustomStringFormat: () => ZodCustomStringFormat,
|
|
ZodDate: () => ZodDate,
|
|
ZodDefault: () => ZodDefault,
|
|
ZodDiscriminatedUnion: () => ZodDiscriminatedUnion,
|
|
ZodE164: () => ZodE164,
|
|
ZodEmail: () => ZodEmail,
|
|
ZodEmoji: () => ZodEmoji,
|
|
ZodEnum: () => ZodEnum,
|
|
ZodExactOptional: () => ZodExactOptional,
|
|
ZodFile: () => ZodFile,
|
|
ZodFunction: () => ZodFunction,
|
|
ZodGUID: () => ZodGUID,
|
|
ZodIPv4: () => ZodIPv4,
|
|
ZodIPv6: () => ZodIPv6,
|
|
ZodIntersection: () => ZodIntersection,
|
|
ZodJWT: () => ZodJWT,
|
|
ZodKSUID: () => ZodKSUID,
|
|
ZodLazy: () => ZodLazy,
|
|
ZodLiteral: () => ZodLiteral,
|
|
ZodMAC: () => ZodMAC,
|
|
ZodMap: () => ZodMap,
|
|
ZodNaN: () => ZodNaN,
|
|
ZodNanoID: () => ZodNanoID,
|
|
ZodNever: () => ZodNever,
|
|
ZodNonOptional: () => ZodNonOptional,
|
|
ZodNull: () => ZodNull,
|
|
ZodNullable: () => ZodNullable,
|
|
ZodNumber: () => ZodNumber,
|
|
ZodNumberFormat: () => ZodNumberFormat,
|
|
ZodObject: () => ZodObject,
|
|
ZodOptional: () => ZodOptional,
|
|
ZodPipe: () => ZodPipe,
|
|
ZodPrefault: () => ZodPrefault,
|
|
ZodPromise: () => ZodPromise,
|
|
ZodReadonly: () => ZodReadonly,
|
|
ZodRecord: () => ZodRecord,
|
|
ZodSet: () => ZodSet,
|
|
ZodString: () => ZodString,
|
|
ZodStringFormat: () => ZodStringFormat,
|
|
ZodSuccess: () => ZodSuccess,
|
|
ZodSymbol: () => ZodSymbol,
|
|
ZodTemplateLiteral: () => ZodTemplateLiteral,
|
|
ZodTransform: () => ZodTransform,
|
|
ZodTuple: () => ZodTuple,
|
|
ZodType: () => ZodType,
|
|
ZodULID: () => ZodULID,
|
|
ZodURL: () => ZodURL,
|
|
ZodUUID: () => ZodUUID,
|
|
ZodUndefined: () => ZodUndefined,
|
|
ZodUnion: () => ZodUnion,
|
|
ZodUnknown: () => ZodUnknown,
|
|
ZodVoid: () => ZodVoid,
|
|
ZodXID: () => ZodXID,
|
|
ZodXor: () => ZodXor,
|
|
_ZodString: () => _ZodString,
|
|
_default: () => _default2,
|
|
_function: () => _function,
|
|
any: () => any,
|
|
array: () => array,
|
|
base64: () => base642,
|
|
base64url: () => base64url2,
|
|
bigint: () => bigint2,
|
|
boolean: () => boolean2,
|
|
catch: () => _catch2,
|
|
check: () => check,
|
|
cidrv4: () => cidrv42,
|
|
cidrv6: () => cidrv62,
|
|
codec: () => codec,
|
|
cuid: () => cuid3,
|
|
cuid2: () => cuid22,
|
|
custom: () => custom,
|
|
date: () => date3,
|
|
describe: () => describe2,
|
|
discriminatedUnion: () => discriminatedUnion,
|
|
e164: () => e1642,
|
|
email: () => email2,
|
|
emoji: () => emoji2,
|
|
enum: () => _enum2,
|
|
exactOptional: () => exactOptional,
|
|
file: () => file,
|
|
float32: () => float32,
|
|
float64: () => float64,
|
|
function: () => _function,
|
|
guid: () => guid2,
|
|
hash: () => hash,
|
|
hex: () => hex2,
|
|
hostname: () => hostname2,
|
|
httpUrl: () => httpUrl,
|
|
instanceof: () => _instanceof,
|
|
int: () => int,
|
|
int32: () => int32,
|
|
int64: () => int64,
|
|
intersection: () => intersection,
|
|
ipv4: () => ipv42,
|
|
ipv6: () => ipv62,
|
|
json: () => json,
|
|
jwt: () => jwt,
|
|
keyof: () => keyof,
|
|
ksuid: () => ksuid2,
|
|
lazy: () => lazy,
|
|
literal: () => literal,
|
|
looseObject: () => looseObject,
|
|
looseRecord: () => looseRecord,
|
|
mac: () => mac2,
|
|
map: () => map,
|
|
meta: () => meta2,
|
|
nan: () => nan,
|
|
nanoid: () => nanoid2,
|
|
nativeEnum: () => nativeEnum,
|
|
never: () => never,
|
|
nonoptional: () => nonoptional,
|
|
null: () => _null3,
|
|
nullable: () => nullable,
|
|
nullish: () => nullish2,
|
|
number: () => number2,
|
|
object: () => object,
|
|
optional: () => optional,
|
|
partialRecord: () => partialRecord,
|
|
pipe: () => pipe,
|
|
prefault: () => prefault,
|
|
preprocess: () => preprocess,
|
|
promise: () => promise,
|
|
readonly: () => readonly,
|
|
record: () => record,
|
|
refine: () => refine,
|
|
set: () => set,
|
|
strictObject: () => strictObject,
|
|
string: () => string2,
|
|
stringFormat: () => stringFormat,
|
|
stringbool: () => stringbool,
|
|
success: () => success,
|
|
superRefine: () => superRefine,
|
|
symbol: () => symbol,
|
|
templateLiteral: () => templateLiteral,
|
|
transform: () => transform,
|
|
tuple: () => tuple,
|
|
uint32: () => uint32,
|
|
uint64: () => uint64,
|
|
ulid: () => ulid2,
|
|
undefined: () => _undefined3,
|
|
union: () => union,
|
|
unknown: () => unknown,
|
|
url: () => url,
|
|
uuid: () => uuid2,
|
|
uuidv4: () => uuidv4,
|
|
uuidv6: () => uuidv6,
|
|
uuidv7: () => uuidv7,
|
|
void: () => _void2,
|
|
xid: () => xid2,
|
|
xor: () => xor
|
|
});
|
|
function string2(params) {
|
|
return _string(ZodString, params);
|
|
}
|
|
function email2(params) {
|
|
return _email(ZodEmail, params);
|
|
}
|
|
function guid2(params) {
|
|
return _guid(ZodGUID, params);
|
|
}
|
|
function uuid2(params) {
|
|
return _uuid(ZodUUID, params);
|
|
}
|
|
function uuidv4(params) {
|
|
return _uuidv4(ZodUUID, params);
|
|
}
|
|
function uuidv6(params) {
|
|
return _uuidv6(ZodUUID, params);
|
|
}
|
|
function uuidv7(params) {
|
|
return _uuidv7(ZodUUID, params);
|
|
}
|
|
function url(params) {
|
|
return _url(ZodURL, params);
|
|
}
|
|
function httpUrl(params) {
|
|
return _url(ZodURL, {
|
|
protocol: /^https?$/,
|
|
hostname: regexes_exports.domain,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function emoji2(params) {
|
|
return _emoji2(ZodEmoji, params);
|
|
}
|
|
function nanoid2(params) {
|
|
return _nanoid(ZodNanoID, params);
|
|
}
|
|
function cuid3(params) {
|
|
return _cuid(ZodCUID, params);
|
|
}
|
|
function cuid22(params) {
|
|
return _cuid2(ZodCUID2, params);
|
|
}
|
|
function ulid2(params) {
|
|
return _ulid(ZodULID, params);
|
|
}
|
|
function xid2(params) {
|
|
return _xid(ZodXID, params);
|
|
}
|
|
function ksuid2(params) {
|
|
return _ksuid(ZodKSUID, params);
|
|
}
|
|
function ipv42(params) {
|
|
return _ipv4(ZodIPv4, params);
|
|
}
|
|
function mac2(params) {
|
|
return _mac(ZodMAC, params);
|
|
}
|
|
function ipv62(params) {
|
|
return _ipv6(ZodIPv6, params);
|
|
}
|
|
function cidrv42(params) {
|
|
return _cidrv4(ZodCIDRv4, params);
|
|
}
|
|
function cidrv62(params) {
|
|
return _cidrv6(ZodCIDRv6, params);
|
|
}
|
|
function base642(params) {
|
|
return _base64(ZodBase64, params);
|
|
}
|
|
function base64url2(params) {
|
|
return _base64url(ZodBase64URL, params);
|
|
}
|
|
function e1642(params) {
|
|
return _e164(ZodE164, params);
|
|
}
|
|
function jwt(params) {
|
|
return _jwt(ZodJWT, params);
|
|
}
|
|
function stringFormat(format, fnOrRegex, _params = {}) {
|
|
return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);
|
|
}
|
|
function hostname2(_params) {
|
|
return _stringFormat(ZodCustomStringFormat, "hostname", regexes_exports.hostname, _params);
|
|
}
|
|
function hex2(_params) {
|
|
return _stringFormat(ZodCustomStringFormat, "hex", regexes_exports.hex, _params);
|
|
}
|
|
function hash(alg, params) {
|
|
const enc = params?.enc ?? "hex";
|
|
const format = `${alg}_${enc}`;
|
|
const regex = regexes_exports[format];
|
|
if (!regex)
|
|
throw new Error(`Unrecognized hash format: ${format}`);
|
|
return _stringFormat(ZodCustomStringFormat, format, regex, params);
|
|
}
|
|
function number2(params) {
|
|
return _number(ZodNumber, params);
|
|
}
|
|
function int(params) {
|
|
return _int(ZodNumberFormat, params);
|
|
}
|
|
function float32(params) {
|
|
return _float32(ZodNumberFormat, params);
|
|
}
|
|
function float64(params) {
|
|
return _float64(ZodNumberFormat, params);
|
|
}
|
|
function int32(params) {
|
|
return _int32(ZodNumberFormat, params);
|
|
}
|
|
function uint32(params) {
|
|
return _uint32(ZodNumberFormat, params);
|
|
}
|
|
function boolean2(params) {
|
|
return _boolean(ZodBoolean, params);
|
|
}
|
|
function bigint2(params) {
|
|
return _bigint(ZodBigInt, params);
|
|
}
|
|
function int64(params) {
|
|
return _int64(ZodBigIntFormat, params);
|
|
}
|
|
function uint64(params) {
|
|
return _uint64(ZodBigIntFormat, params);
|
|
}
|
|
function symbol(params) {
|
|
return _symbol(ZodSymbol, params);
|
|
}
|
|
function _undefined3(params) {
|
|
return _undefined2(ZodUndefined, params);
|
|
}
|
|
function _null3(params) {
|
|
return _null2(ZodNull, params);
|
|
}
|
|
function any() {
|
|
return _any(ZodAny);
|
|
}
|
|
function unknown() {
|
|
return _unknown(ZodUnknown);
|
|
}
|
|
function never(params) {
|
|
return _never(ZodNever, params);
|
|
}
|
|
function _void2(params) {
|
|
return _void(ZodVoid, params);
|
|
}
|
|
function date3(params) {
|
|
return _date(ZodDate, params);
|
|
}
|
|
function array(element, params) {
|
|
return _array(ZodArray, element, params);
|
|
}
|
|
function keyof(schema) {
|
|
const shape = schema._zod.def.shape;
|
|
return _enum2(Object.keys(shape));
|
|
}
|
|
function object(shape, params) {
|
|
const def = {
|
|
type: "object",
|
|
shape: shape ?? {},
|
|
...util_exports.normalizeParams(params)
|
|
};
|
|
return new ZodObject(def);
|
|
}
|
|
function strictObject(shape, params) {
|
|
return new ZodObject({
|
|
type: "object",
|
|
shape,
|
|
catchall: never(),
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function looseObject(shape, params) {
|
|
return new ZodObject({
|
|
type: "object",
|
|
shape,
|
|
catchall: unknown(),
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function union(options, params) {
|
|
return new ZodUnion({
|
|
type: "union",
|
|
options,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function xor(options, params) {
|
|
return new ZodXor({
|
|
type: "union",
|
|
options,
|
|
inclusive: false,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function discriminatedUnion(discriminator, options, params) {
|
|
return new ZodDiscriminatedUnion({
|
|
type: "union",
|
|
options,
|
|
discriminator,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function intersection(left, right) {
|
|
return new ZodIntersection({
|
|
type: "intersection",
|
|
left,
|
|
right
|
|
});
|
|
}
|
|
function tuple(items, _paramsOrRest, _params) {
|
|
const hasRest = _paramsOrRest instanceof $ZodType;
|
|
const params = hasRest ? _params : _paramsOrRest;
|
|
const rest = hasRest ? _paramsOrRest : null;
|
|
return new ZodTuple({
|
|
type: "tuple",
|
|
items,
|
|
rest,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function record(keyType, valueType, params) {
|
|
return new ZodRecord({
|
|
type: "record",
|
|
keyType,
|
|
valueType,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function partialRecord(keyType, valueType, params) {
|
|
const k = clone(keyType);
|
|
k._zod.values = void 0;
|
|
return new ZodRecord({
|
|
type: "record",
|
|
keyType: k,
|
|
valueType,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function looseRecord(keyType, valueType, params) {
|
|
return new ZodRecord({
|
|
type: "record",
|
|
keyType,
|
|
valueType,
|
|
mode: "loose",
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function map(keyType, valueType, params) {
|
|
return new ZodMap({
|
|
type: "map",
|
|
keyType,
|
|
valueType,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function set(valueType, params) {
|
|
return new ZodSet({
|
|
type: "set",
|
|
valueType,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function _enum2(values, params) {
|
|
const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
|
|
return new ZodEnum({
|
|
type: "enum",
|
|
entries,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function nativeEnum(entries, params) {
|
|
return new ZodEnum({
|
|
type: "enum",
|
|
entries,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function literal(value2, params) {
|
|
return new ZodLiteral({
|
|
type: "literal",
|
|
values: Array.isArray(value2) ? value2 : [value2],
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function file(params) {
|
|
return _file(ZodFile, params);
|
|
}
|
|
function transform(fn) {
|
|
return new ZodTransform({
|
|
type: "transform",
|
|
transform: fn
|
|
});
|
|
}
|
|
function optional(innerType) {
|
|
return new ZodOptional({
|
|
type: "optional",
|
|
innerType
|
|
});
|
|
}
|
|
function exactOptional(innerType) {
|
|
return new ZodExactOptional({
|
|
type: "optional",
|
|
innerType
|
|
});
|
|
}
|
|
function nullable(innerType) {
|
|
return new ZodNullable({
|
|
type: "nullable",
|
|
innerType
|
|
});
|
|
}
|
|
function nullish2(innerType) {
|
|
return optional(nullable(innerType));
|
|
}
|
|
function _default2(innerType, defaultValue) {
|
|
return new ZodDefault({
|
|
type: "default",
|
|
innerType,
|
|
get defaultValue() {
|
|
return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue);
|
|
}
|
|
});
|
|
}
|
|
function prefault(innerType, defaultValue) {
|
|
return new ZodPrefault({
|
|
type: "prefault",
|
|
innerType,
|
|
get defaultValue() {
|
|
return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue);
|
|
}
|
|
});
|
|
}
|
|
function nonoptional(innerType, params) {
|
|
return new ZodNonOptional({
|
|
type: "nonoptional",
|
|
innerType,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function success(innerType) {
|
|
return new ZodSuccess({
|
|
type: "success",
|
|
innerType
|
|
});
|
|
}
|
|
function _catch2(innerType, catchValue) {
|
|
return new ZodCatch({
|
|
type: "catch",
|
|
innerType,
|
|
catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
|
|
});
|
|
}
|
|
function nan(params) {
|
|
return _nan(ZodNaN, params);
|
|
}
|
|
function pipe(in_, out) {
|
|
return new ZodPipe({
|
|
type: "pipe",
|
|
in: in_,
|
|
out
|
|
// ...util.normalizeParams(params),
|
|
});
|
|
}
|
|
function codec(in_, out, params) {
|
|
return new ZodCodec({
|
|
type: "pipe",
|
|
in: in_,
|
|
out,
|
|
transform: params.decode,
|
|
reverseTransform: params.encode
|
|
});
|
|
}
|
|
function readonly(innerType) {
|
|
return new ZodReadonly({
|
|
type: "readonly",
|
|
innerType
|
|
});
|
|
}
|
|
function templateLiteral(parts, params) {
|
|
return new ZodTemplateLiteral({
|
|
type: "template_literal",
|
|
parts,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
}
|
|
function lazy(getter) {
|
|
return new ZodLazy({
|
|
type: "lazy",
|
|
getter
|
|
});
|
|
}
|
|
function promise(innerType) {
|
|
return new ZodPromise({
|
|
type: "promise",
|
|
innerType
|
|
});
|
|
}
|
|
function _function(params) {
|
|
return new ZodFunction({
|
|
type: "function",
|
|
input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()),
|
|
output: params?.output ?? unknown()
|
|
});
|
|
}
|
|
function check(fn) {
|
|
const ch = new $ZodCheck({
|
|
check: "custom"
|
|
// ...util.normalizeParams(params),
|
|
});
|
|
ch._zod.check = fn;
|
|
return ch;
|
|
}
|
|
function custom(fn, _params) {
|
|
return _custom(ZodCustom, fn ?? (() => true), _params);
|
|
}
|
|
function refine(fn, _params = {}) {
|
|
return _refine(ZodCustom, fn, _params);
|
|
}
|
|
function superRefine(fn) {
|
|
return _superRefine(fn);
|
|
}
|
|
function _instanceof(cls, params = {}) {
|
|
const inst = new ZodCustom({
|
|
type: "custom",
|
|
check: "custom",
|
|
fn: (data) => data instanceof cls,
|
|
abort: true,
|
|
...util_exports.normalizeParams(params)
|
|
});
|
|
inst._zod.bag.Class = cls;
|
|
inst._zod.check = (payload) => {
|
|
if (!(payload.value instanceof cls)) {
|
|
payload.issues.push({
|
|
code: "invalid_type",
|
|
expected: cls.name,
|
|
input: payload.value,
|
|
inst,
|
|
path: [...inst._zod.def.path ?? []]
|
|
});
|
|
}
|
|
};
|
|
return inst;
|
|
}
|
|
function json(params) {
|
|
const jsonSchema = lazy(() => {
|
|
return union([string2(params), number2(), boolean2(), _null3(), array(jsonSchema), record(string2(), jsonSchema)]);
|
|
});
|
|
return jsonSchema;
|
|
}
|
|
function preprocess(fn, schema) {
|
|
return pipe(transform(fn), schema);
|
|
}
|
|
var ZodType, _ZodString, ZodString, ZodStringFormat, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodMAC, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodCustomStringFormat, ZodNumber, ZodNumberFormat, ZodBoolean, ZodBigInt, ZodBigIntFormat, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodDate, ZodArray, ZodObject, ZodUnion, ZodXor, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodEnum, ZodLiteral, ZodFile, ZodTransform, ZodOptional, ZodExactOptional, ZodNullable, ZodDefault, ZodPrefault, ZodNonOptional, ZodSuccess, ZodCatch, ZodNaN, ZodPipe, ZodCodec, ZodReadonly, ZodTemplateLiteral, ZodLazy, ZodPromise, ZodFunction, ZodCustom, describe2, meta2, stringbool;
|
|
var init_schemas2 = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js"() {
|
|
init_core2();
|
|
init_core2();
|
|
init_json_schema_processors();
|
|
init_to_json_schema();
|
|
init_checks2();
|
|
init_iso();
|
|
init_parse2();
|
|
ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
$ZodType.init(inst, def);
|
|
Object.assign(inst["~standard"], {
|
|
jsonSchema: {
|
|
input: createStandardJSONSchemaMethod(inst, "input"),
|
|
output: createStandardJSONSchemaMethod(inst, "output")
|
|
}
|
|
});
|
|
inst.toJSONSchema = createToJSONSchemaMethod(inst, {});
|
|
inst.def = def;
|
|
inst.type = def.type;
|
|
Object.defineProperty(inst, "_def", { value: def });
|
|
inst.check = (...checks) => {
|
|
return inst.clone(util_exports.mergeDefs(def, {
|
|
checks: [
|
|
...def.checks ?? [],
|
|
...checks.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch)
|
|
]
|
|
}), {
|
|
parent: true
|
|
});
|
|
};
|
|
inst.with = inst.check;
|
|
inst.clone = (def2, params) => clone(inst, def2, params);
|
|
inst.brand = () => inst;
|
|
inst.register = ((reg, meta3) => {
|
|
reg.add(inst, meta3);
|
|
return inst;
|
|
});
|
|
inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse });
|
|
inst.safeParse = (data, params) => safeParse2(inst, data, params);
|
|
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
|
|
inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params);
|
|
inst.spa = inst.safeParseAsync;
|
|
inst.encode = (data, params) => encode2(inst, data, params);
|
|
inst.decode = (data, params) => decode2(inst, data, params);
|
|
inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params);
|
|
inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params);
|
|
inst.safeEncode = (data, params) => safeEncode2(inst, data, params);
|
|
inst.safeDecode = (data, params) => safeDecode2(inst, data, params);
|
|
inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params);
|
|
inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params);
|
|
inst.refine = (check2, params) => inst.check(refine(check2, params));
|
|
inst.superRefine = (refinement) => inst.check(superRefine(refinement));
|
|
inst.overwrite = (fn) => inst.check(_overwrite(fn));
|
|
inst.optional = () => optional(inst);
|
|
inst.exactOptional = () => exactOptional(inst);
|
|
inst.nullable = () => nullable(inst);
|
|
inst.nullish = () => optional(nullable(inst));
|
|
inst.nonoptional = (params) => nonoptional(inst, params);
|
|
inst.array = () => array(inst);
|
|
inst.or = (arg) => union([inst, arg]);
|
|
inst.and = (arg) => intersection(inst, arg);
|
|
inst.transform = (tx) => pipe(inst, transform(tx));
|
|
inst.default = (def2) => _default2(inst, def2);
|
|
inst.prefault = (def2) => prefault(inst, def2);
|
|
inst.catch = (params) => _catch2(inst, params);
|
|
inst.pipe = (target) => pipe(inst, target);
|
|
inst.readonly = () => readonly(inst);
|
|
inst.describe = (description) => {
|
|
const cl = inst.clone();
|
|
globalRegistry.add(cl, { description });
|
|
return cl;
|
|
};
|
|
Object.defineProperty(inst, "description", {
|
|
get() {
|
|
return globalRegistry.get(inst)?.description;
|
|
},
|
|
configurable: true
|
|
});
|
|
inst.meta = (...args) => {
|
|
if (args.length === 0) {
|
|
return globalRegistry.get(inst);
|
|
}
|
|
const cl = inst.clone();
|
|
globalRegistry.add(cl, args[0]);
|
|
return cl;
|
|
};
|
|
inst.isOptional = () => inst.safeParse(void 0).success;
|
|
inst.isNullable = () => inst.safeParse(null).success;
|
|
inst.apply = (fn) => fn(inst);
|
|
return inst;
|
|
});
|
|
_ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => {
|
|
$ZodString.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => stringProcessor(inst, ctx, json2, params);
|
|
const bag = inst._zod.bag;
|
|
inst.format = bag.format ?? null;
|
|
inst.minLength = bag.minimum ?? null;
|
|
inst.maxLength = bag.maximum ?? null;
|
|
inst.regex = (...args) => inst.check(_regex(...args));
|
|
inst.includes = (...args) => inst.check(_includes(...args));
|
|
inst.startsWith = (...args) => inst.check(_startsWith(...args));
|
|
inst.endsWith = (...args) => inst.check(_endsWith(...args));
|
|
inst.min = (...args) => inst.check(_minLength(...args));
|
|
inst.max = (...args) => inst.check(_maxLength(...args));
|
|
inst.length = (...args) => inst.check(_length(...args));
|
|
inst.nonempty = (...args) => inst.check(_minLength(1, ...args));
|
|
inst.lowercase = (params) => inst.check(_lowercase(params));
|
|
inst.uppercase = (params) => inst.check(_uppercase(params));
|
|
inst.trim = () => inst.check(_trim());
|
|
inst.normalize = (...args) => inst.check(_normalize(...args));
|
|
inst.toLowerCase = () => inst.check(_toLowerCase());
|
|
inst.toUpperCase = () => inst.check(_toUpperCase());
|
|
inst.slugify = () => inst.check(_slugify());
|
|
});
|
|
ZodString = /* @__PURE__ */ $constructor("ZodString", (inst, def) => {
|
|
$ZodString.init(inst, def);
|
|
_ZodString.init(inst, def);
|
|
inst.email = (params) => inst.check(_email(ZodEmail, params));
|
|
inst.url = (params) => inst.check(_url(ZodURL, params));
|
|
inst.jwt = (params) => inst.check(_jwt(ZodJWT, params));
|
|
inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params));
|
|
inst.guid = (params) => inst.check(_guid(ZodGUID, params));
|
|
inst.uuid = (params) => inst.check(_uuid(ZodUUID, params));
|
|
inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params));
|
|
inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params));
|
|
inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params));
|
|
inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params));
|
|
inst.guid = (params) => inst.check(_guid(ZodGUID, params));
|
|
inst.cuid = (params) => inst.check(_cuid(ZodCUID, params));
|
|
inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params));
|
|
inst.ulid = (params) => inst.check(_ulid(ZodULID, params));
|
|
inst.base64 = (params) => inst.check(_base64(ZodBase64, params));
|
|
inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params));
|
|
inst.xid = (params) => inst.check(_xid(ZodXID, params));
|
|
inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params));
|
|
inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params));
|
|
inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params));
|
|
inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params));
|
|
inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params));
|
|
inst.e164 = (params) => inst.check(_e164(ZodE164, params));
|
|
inst.datetime = (params) => inst.check(datetime2(params));
|
|
inst.date = (params) => inst.check(date2(params));
|
|
inst.time = (params) => inst.check(time2(params));
|
|
inst.duration = (params) => inst.check(duration2(params));
|
|
});
|
|
ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => {
|
|
$ZodStringFormat.init(inst, def);
|
|
_ZodString.init(inst, def);
|
|
});
|
|
ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => {
|
|
$ZodEmail.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => {
|
|
$ZodGUID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => {
|
|
$ZodUUID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => {
|
|
$ZodURL.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => {
|
|
$ZodEmoji.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => {
|
|
$ZodNanoID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => {
|
|
$ZodCUID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => {
|
|
$ZodCUID2.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => {
|
|
$ZodULID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => {
|
|
$ZodXID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => {
|
|
$ZodKSUID.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => {
|
|
$ZodIPv4.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => {
|
|
$ZodMAC.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => {
|
|
$ZodIPv6.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => {
|
|
$ZodCIDRv4.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => {
|
|
$ZodCIDRv6.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => {
|
|
$ZodBase64.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => {
|
|
$ZodBase64URL.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => {
|
|
$ZodE164.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => {
|
|
$ZodJWT.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => {
|
|
$ZodCustomStringFormat.init(inst, def);
|
|
ZodStringFormat.init(inst, def);
|
|
});
|
|
ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => {
|
|
$ZodNumber.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => numberProcessor(inst, ctx, json2, params);
|
|
inst.gt = (value2, params) => inst.check(_gt(value2, params));
|
|
inst.gte = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.min = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.lt = (value2, params) => inst.check(_lt(value2, params));
|
|
inst.lte = (value2, params) => inst.check(_lte(value2, params));
|
|
inst.max = (value2, params) => inst.check(_lte(value2, params));
|
|
inst.int = (params) => inst.check(int(params));
|
|
inst.safe = (params) => inst.check(int(params));
|
|
inst.positive = (params) => inst.check(_gt(0, params));
|
|
inst.nonnegative = (params) => inst.check(_gte(0, params));
|
|
inst.negative = (params) => inst.check(_lt(0, params));
|
|
inst.nonpositive = (params) => inst.check(_lte(0, params));
|
|
inst.multipleOf = (value2, params) => inst.check(_multipleOf(value2, params));
|
|
inst.step = (value2, params) => inst.check(_multipleOf(value2, params));
|
|
inst.finite = () => inst;
|
|
const bag = inst._zod.bag;
|
|
inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
|
|
inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
|
|
inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
|
|
inst.isFinite = true;
|
|
inst.format = bag.format ?? null;
|
|
});
|
|
ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => {
|
|
$ZodNumberFormat.init(inst, def);
|
|
ZodNumber.init(inst, def);
|
|
});
|
|
ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => {
|
|
$ZodBoolean.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => booleanProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodBigInt = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => {
|
|
$ZodBigInt.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => bigintProcessor(inst, ctx, json2, params);
|
|
inst.gte = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.min = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.gt = (value2, params) => inst.check(_gt(value2, params));
|
|
inst.gte = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.min = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.lt = (value2, params) => inst.check(_lt(value2, params));
|
|
inst.lte = (value2, params) => inst.check(_lte(value2, params));
|
|
inst.max = (value2, params) => inst.check(_lte(value2, params));
|
|
inst.positive = (params) => inst.check(_gt(BigInt(0), params));
|
|
inst.negative = (params) => inst.check(_lt(BigInt(0), params));
|
|
inst.nonpositive = (params) => inst.check(_lte(BigInt(0), params));
|
|
inst.nonnegative = (params) => inst.check(_gte(BigInt(0), params));
|
|
inst.multipleOf = (value2, params) => inst.check(_multipleOf(value2, params));
|
|
const bag = inst._zod.bag;
|
|
inst.minValue = bag.minimum ?? null;
|
|
inst.maxValue = bag.maximum ?? null;
|
|
inst.format = bag.format ?? null;
|
|
});
|
|
ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => {
|
|
$ZodBigIntFormat.init(inst, def);
|
|
ZodBigInt.init(inst, def);
|
|
});
|
|
ZodSymbol = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => {
|
|
$ZodSymbol.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => symbolProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodUndefined = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => {
|
|
$ZodUndefined.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => undefinedProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodNull = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => {
|
|
$ZodNull.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => nullProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => {
|
|
$ZodAny.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => anyProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => {
|
|
$ZodUnknown.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => unknownProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodNever = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => {
|
|
$ZodNever.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => neverProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodVoid = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => {
|
|
$ZodVoid.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => voidProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodDate = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => {
|
|
$ZodDate.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => dateProcessor(inst, ctx, json2, params);
|
|
inst.min = (value2, params) => inst.check(_gte(value2, params));
|
|
inst.max = (value2, params) => inst.check(_lte(value2, params));
|
|
const c = inst._zod.bag;
|
|
inst.minDate = c.minimum ? new Date(c.minimum) : null;
|
|
inst.maxDate = c.maximum ? new Date(c.maximum) : null;
|
|
});
|
|
ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => {
|
|
$ZodArray.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => arrayProcessor(inst, ctx, json2, params);
|
|
inst.element = def.element;
|
|
inst.min = (minLength, params) => inst.check(_minLength(minLength, params));
|
|
inst.nonempty = (params) => inst.check(_minLength(1, params));
|
|
inst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params));
|
|
inst.length = (len, params) => inst.check(_length(len, params));
|
|
inst.unwrap = () => inst.element;
|
|
});
|
|
ZodObject = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => {
|
|
$ZodObjectJIT.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => objectProcessor(inst, ctx, json2, params);
|
|
util_exports.defineLazy(inst, "shape", () => {
|
|
return def.shape;
|
|
});
|
|
inst.keyof = () => _enum2(Object.keys(inst._zod.def.shape));
|
|
inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall });
|
|
inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
|
|
inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
|
|
inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });
|
|
inst.strip = () => inst.clone({ ...inst._zod.def, catchall: void 0 });
|
|
inst.extend = (incoming) => {
|
|
return util_exports.extend(inst, incoming);
|
|
};
|
|
inst.safeExtend = (incoming) => {
|
|
return util_exports.safeExtend(inst, incoming);
|
|
};
|
|
inst.merge = (other) => util_exports.merge(inst, other);
|
|
inst.pick = (mask) => util_exports.pick(inst, mask);
|
|
inst.omit = (mask) => util_exports.omit(inst, mask);
|
|
inst.partial = (...args) => util_exports.partial(ZodOptional, inst, args[0]);
|
|
inst.required = (...args) => util_exports.required(ZodNonOptional, inst, args[0]);
|
|
});
|
|
ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => {
|
|
$ZodUnion.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params);
|
|
inst.options = def.options;
|
|
});
|
|
ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => {
|
|
ZodUnion.init(inst, def);
|
|
$ZodXor.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params);
|
|
inst.options = def.options;
|
|
});
|
|
ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => {
|
|
ZodUnion.init(inst, def);
|
|
$ZodDiscriminatedUnion.init(inst, def);
|
|
});
|
|
ZodIntersection = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => {
|
|
$ZodIntersection.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => intersectionProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodTuple = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => {
|
|
$ZodTuple.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => tupleProcessor(inst, ctx, json2, params);
|
|
inst.rest = (rest) => inst.clone({
|
|
...inst._zod.def,
|
|
rest
|
|
});
|
|
});
|
|
ZodRecord = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => {
|
|
$ZodRecord.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => recordProcessor(inst, ctx, json2, params);
|
|
inst.keyType = def.keyType;
|
|
inst.valueType = def.valueType;
|
|
});
|
|
ZodMap = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => {
|
|
$ZodMap.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => mapProcessor(inst, ctx, json2, params);
|
|
inst.keyType = def.keyType;
|
|
inst.valueType = def.valueType;
|
|
inst.min = (...args) => inst.check(_minSize(...args));
|
|
inst.nonempty = (params) => inst.check(_minSize(1, params));
|
|
inst.max = (...args) => inst.check(_maxSize(...args));
|
|
inst.size = (...args) => inst.check(_size(...args));
|
|
});
|
|
ZodSet = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => {
|
|
$ZodSet.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => setProcessor(inst, ctx, json2, params);
|
|
inst.min = (...args) => inst.check(_minSize(...args));
|
|
inst.nonempty = (params) => inst.check(_minSize(1, params));
|
|
inst.max = (...args) => inst.check(_maxSize(...args));
|
|
inst.size = (...args) => inst.check(_size(...args));
|
|
});
|
|
ZodEnum = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => {
|
|
$ZodEnum.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => enumProcessor(inst, ctx, json2, params);
|
|
inst.enum = def.entries;
|
|
inst.options = Object.values(def.entries);
|
|
const keys = new Set(Object.keys(def.entries));
|
|
inst.extract = (values, params) => {
|
|
const newEntries = {};
|
|
for (const value2 of values) {
|
|
if (keys.has(value2)) {
|
|
newEntries[value2] = def.entries[value2];
|
|
} else
|
|
throw new Error(`Key ${value2} not found in enum`);
|
|
}
|
|
return new ZodEnum({
|
|
...def,
|
|
checks: [],
|
|
...util_exports.normalizeParams(params),
|
|
entries: newEntries
|
|
});
|
|
};
|
|
inst.exclude = (values, params) => {
|
|
const newEntries = { ...def.entries };
|
|
for (const value2 of values) {
|
|
if (keys.has(value2)) {
|
|
delete newEntries[value2];
|
|
} else
|
|
throw new Error(`Key ${value2} not found in enum`);
|
|
}
|
|
return new ZodEnum({
|
|
...def,
|
|
checks: [],
|
|
...util_exports.normalizeParams(params),
|
|
entries: newEntries
|
|
});
|
|
};
|
|
});
|
|
ZodLiteral = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => {
|
|
$ZodLiteral.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => literalProcessor(inst, ctx, json2, params);
|
|
inst.values = new Set(def.values);
|
|
Object.defineProperty(inst, "value", {
|
|
get() {
|
|
if (def.values.length > 1) {
|
|
throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");
|
|
}
|
|
return def.values[0];
|
|
}
|
|
});
|
|
});
|
|
ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => {
|
|
$ZodFile.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => fileProcessor(inst, ctx, json2, params);
|
|
inst.min = (size, params) => inst.check(_minSize(size, params));
|
|
inst.max = (size, params) => inst.check(_maxSize(size, params));
|
|
inst.mime = (types, params) => inst.check(_mime(Array.isArray(types) ? types : [types], params));
|
|
});
|
|
ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => {
|
|
$ZodTransform.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => transformProcessor(inst, ctx, json2, params);
|
|
inst._zod.parse = (payload, _ctx) => {
|
|
if (_ctx.direction === "backward") {
|
|
throw new $ZodEncodeError(inst.constructor.name);
|
|
}
|
|
payload.addIssue = (issue2) => {
|
|
if (typeof issue2 === "string") {
|
|
payload.issues.push(util_exports.issue(issue2, payload.value, def));
|
|
} else {
|
|
const _issue = issue2;
|
|
if (_issue.fatal)
|
|
_issue.continue = false;
|
|
_issue.code ?? (_issue.code = "custom");
|
|
_issue.input ?? (_issue.input = payload.value);
|
|
_issue.inst ?? (_issue.inst = inst);
|
|
payload.issues.push(util_exports.issue(_issue));
|
|
}
|
|
};
|
|
const output = def.transform(payload.value, payload);
|
|
if (output instanceof Promise) {
|
|
return output.then((output2) => {
|
|
payload.value = output2;
|
|
return payload;
|
|
});
|
|
}
|
|
payload.value = output;
|
|
return payload;
|
|
};
|
|
});
|
|
ZodOptional = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => {
|
|
$ZodOptional.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => {
|
|
$ZodExactOptional.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodNullable = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => {
|
|
$ZodNullable.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => nullableProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodDefault = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => {
|
|
$ZodDefault.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => defaultProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
inst.removeDefault = inst.unwrap;
|
|
});
|
|
ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => {
|
|
$ZodPrefault.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => prefaultProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => {
|
|
$ZodNonOptional.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => nonoptionalProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => {
|
|
$ZodSuccess.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => successProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodCatch = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => {
|
|
$ZodCatch.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => catchProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
inst.removeCatch = inst.unwrap;
|
|
});
|
|
ZodNaN = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => {
|
|
$ZodNaN.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => nanProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => {
|
|
$ZodPipe.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => pipeProcessor(inst, ctx, json2, params);
|
|
inst.in = def.in;
|
|
inst.out = def.out;
|
|
});
|
|
ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => {
|
|
ZodPipe.init(inst, def);
|
|
$ZodCodec.init(inst, def);
|
|
});
|
|
ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => {
|
|
$ZodReadonly.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => readonlyProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => {
|
|
$ZodTemplateLiteral.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => templateLiteralProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => {
|
|
$ZodLazy.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => lazyProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.getter();
|
|
});
|
|
ZodPromise = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => {
|
|
$ZodPromise.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => promiseProcessor(inst, ctx, json2, params);
|
|
inst.unwrap = () => inst._zod.def.innerType;
|
|
});
|
|
ZodFunction = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => {
|
|
$ZodFunction.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => functionProcessor(inst, ctx, json2, params);
|
|
});
|
|
ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => {
|
|
$ZodCustom.init(inst, def);
|
|
ZodType.init(inst, def);
|
|
inst._zod.processJSONSchema = (ctx, json2, params) => customProcessor(inst, ctx, json2, params);
|
|
});
|
|
describe2 = describe;
|
|
meta2 = meta;
|
|
stringbool = (...args) => _stringbool({
|
|
Codec: ZodCodec,
|
|
Boolean: ZodBoolean,
|
|
String: ZodString
|
|
}, ...args);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js
|
|
function setErrorMap(map2) {
|
|
config({
|
|
customError: map2
|
|
});
|
|
}
|
|
function getErrorMap() {
|
|
return config().customError;
|
|
}
|
|
var ZodIssueCode, ZodFirstPartyTypeKind;
|
|
var init_compat = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js"() {
|
|
init_core2();
|
|
init_core2();
|
|
ZodIssueCode = {
|
|
invalid_type: "invalid_type",
|
|
too_big: "too_big",
|
|
too_small: "too_small",
|
|
invalid_format: "invalid_format",
|
|
not_multiple_of: "not_multiple_of",
|
|
unrecognized_keys: "unrecognized_keys",
|
|
invalid_union: "invalid_union",
|
|
invalid_key: "invalid_key",
|
|
invalid_element: "invalid_element",
|
|
invalid_value: "invalid_value",
|
|
custom: "custom"
|
|
};
|
|
/* @__PURE__ */ (function(ZodFirstPartyTypeKind2) {
|
|
})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js
|
|
function detectVersion(schema, defaultTarget) {
|
|
const $schema = schema.$schema;
|
|
if ($schema === "https://json-schema.org/draft/2020-12/schema") {
|
|
return "draft-2020-12";
|
|
}
|
|
if ($schema === "http://json-schema.org/draft-07/schema#") {
|
|
return "draft-7";
|
|
}
|
|
if ($schema === "http://json-schema.org/draft-04/schema#") {
|
|
return "draft-4";
|
|
}
|
|
return defaultTarget ?? "draft-2020-12";
|
|
}
|
|
function resolveRef(ref, ctx) {
|
|
if (!ref.startsWith("#")) {
|
|
throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
|
|
}
|
|
const path3 = ref.slice(1).split("/").filter(Boolean);
|
|
if (path3.length === 0) {
|
|
return ctx.rootSchema;
|
|
}
|
|
const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
|
|
if (path3[0] === defsKey) {
|
|
const key = path3[1];
|
|
if (!key || !ctx.defs[key]) {
|
|
throw new Error(`Reference not found: ${ref}`);
|
|
}
|
|
return ctx.defs[key];
|
|
}
|
|
throw new Error(`Reference not found: ${ref}`);
|
|
}
|
|
function convertBaseSchema(schema, ctx) {
|
|
if (schema.not !== void 0) {
|
|
if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) {
|
|
return z.never();
|
|
}
|
|
throw new Error("not is not supported in Zod (except { not: {} } for never)");
|
|
}
|
|
if (schema.unevaluatedItems !== void 0) {
|
|
throw new Error("unevaluatedItems is not supported");
|
|
}
|
|
if (schema.unevaluatedProperties !== void 0) {
|
|
throw new Error("unevaluatedProperties is not supported");
|
|
}
|
|
if (schema.if !== void 0 || schema.then !== void 0 || schema.else !== void 0) {
|
|
throw new Error("Conditional schemas (if/then/else) are not supported");
|
|
}
|
|
if (schema.dependentSchemas !== void 0 || schema.dependentRequired !== void 0) {
|
|
throw new Error("dependentSchemas and dependentRequired are not supported");
|
|
}
|
|
if (schema.$ref) {
|
|
const refPath = schema.$ref;
|
|
if (ctx.refs.has(refPath)) {
|
|
return ctx.refs.get(refPath);
|
|
}
|
|
if (ctx.processing.has(refPath)) {
|
|
return z.lazy(() => {
|
|
if (!ctx.refs.has(refPath)) {
|
|
throw new Error(`Circular reference not resolved: ${refPath}`);
|
|
}
|
|
return ctx.refs.get(refPath);
|
|
});
|
|
}
|
|
ctx.processing.add(refPath);
|
|
const resolved = resolveRef(refPath, ctx);
|
|
const zodSchema2 = convertSchema(resolved, ctx);
|
|
ctx.refs.set(refPath, zodSchema2);
|
|
ctx.processing.delete(refPath);
|
|
return zodSchema2;
|
|
}
|
|
if (schema.enum !== void 0) {
|
|
const enumValues = schema.enum;
|
|
if (ctx.version === "openapi-3.0" && schema.nullable === true && enumValues.length === 1 && enumValues[0] === null) {
|
|
return z.null();
|
|
}
|
|
if (enumValues.length === 0) {
|
|
return z.never();
|
|
}
|
|
if (enumValues.length === 1) {
|
|
return z.literal(enumValues[0]);
|
|
}
|
|
if (enumValues.every((v) => typeof v === "string")) {
|
|
return z.enum(enumValues);
|
|
}
|
|
const literalSchemas = enumValues.map((v) => z.literal(v));
|
|
if (literalSchemas.length < 2) {
|
|
return literalSchemas[0];
|
|
}
|
|
return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);
|
|
}
|
|
if (schema.const !== void 0) {
|
|
return z.literal(schema.const);
|
|
}
|
|
const type = schema.type;
|
|
if (Array.isArray(type)) {
|
|
const typeSchemas = type.map((t) => {
|
|
const typeSchema = { ...schema, type: t };
|
|
return convertBaseSchema(typeSchema, ctx);
|
|
});
|
|
if (typeSchemas.length === 0) {
|
|
return z.never();
|
|
}
|
|
if (typeSchemas.length === 1) {
|
|
return typeSchemas[0];
|
|
}
|
|
return z.union(typeSchemas);
|
|
}
|
|
if (!type) {
|
|
return z.any();
|
|
}
|
|
let zodSchema;
|
|
switch (type) {
|
|
case "string": {
|
|
let stringSchema = z.string();
|
|
if (schema.format) {
|
|
const format = schema.format;
|
|
if (format === "email") {
|
|
stringSchema = stringSchema.check(z.email());
|
|
} else if (format === "uri" || format === "uri-reference") {
|
|
stringSchema = stringSchema.check(z.url());
|
|
} else if (format === "uuid" || format === "guid") {
|
|
stringSchema = stringSchema.check(z.uuid());
|
|
} else if (format === "date-time") {
|
|
stringSchema = stringSchema.check(z.iso.datetime());
|
|
} else if (format === "date") {
|
|
stringSchema = stringSchema.check(z.iso.date());
|
|
} else if (format === "time") {
|
|
stringSchema = stringSchema.check(z.iso.time());
|
|
} else if (format === "duration") {
|
|
stringSchema = stringSchema.check(z.iso.duration());
|
|
} else if (format === "ipv4") {
|
|
stringSchema = stringSchema.check(z.ipv4());
|
|
} else if (format === "ipv6") {
|
|
stringSchema = stringSchema.check(z.ipv6());
|
|
} else if (format === "mac") {
|
|
stringSchema = stringSchema.check(z.mac());
|
|
} else if (format === "cidr") {
|
|
stringSchema = stringSchema.check(z.cidrv4());
|
|
} else if (format === "cidr-v6") {
|
|
stringSchema = stringSchema.check(z.cidrv6());
|
|
} else if (format === "base64") {
|
|
stringSchema = stringSchema.check(z.base64());
|
|
} else if (format === "base64url") {
|
|
stringSchema = stringSchema.check(z.base64url());
|
|
} else if (format === "e164") {
|
|
stringSchema = stringSchema.check(z.e164());
|
|
} else if (format === "jwt") {
|
|
stringSchema = stringSchema.check(z.jwt());
|
|
} else if (format === "emoji") {
|
|
stringSchema = stringSchema.check(z.emoji());
|
|
} else if (format === "nanoid") {
|
|
stringSchema = stringSchema.check(z.nanoid());
|
|
} else if (format === "cuid") {
|
|
stringSchema = stringSchema.check(z.cuid());
|
|
} else if (format === "cuid2") {
|
|
stringSchema = stringSchema.check(z.cuid2());
|
|
} else if (format === "ulid") {
|
|
stringSchema = stringSchema.check(z.ulid());
|
|
} else if (format === "xid") {
|
|
stringSchema = stringSchema.check(z.xid());
|
|
} else if (format === "ksuid") {
|
|
stringSchema = stringSchema.check(z.ksuid());
|
|
}
|
|
}
|
|
if (typeof schema.minLength === "number") {
|
|
stringSchema = stringSchema.min(schema.minLength);
|
|
}
|
|
if (typeof schema.maxLength === "number") {
|
|
stringSchema = stringSchema.max(schema.maxLength);
|
|
}
|
|
if (schema.pattern) {
|
|
stringSchema = stringSchema.regex(new RegExp(schema.pattern));
|
|
}
|
|
zodSchema = stringSchema;
|
|
break;
|
|
}
|
|
case "number":
|
|
case "integer": {
|
|
let numberSchema = type === "integer" ? z.number().int() : z.number();
|
|
if (typeof schema.minimum === "number") {
|
|
numberSchema = numberSchema.min(schema.minimum);
|
|
}
|
|
if (typeof schema.maximum === "number") {
|
|
numberSchema = numberSchema.max(schema.maximum);
|
|
}
|
|
if (typeof schema.exclusiveMinimum === "number") {
|
|
numberSchema = numberSchema.gt(schema.exclusiveMinimum);
|
|
} else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") {
|
|
numberSchema = numberSchema.gt(schema.minimum);
|
|
}
|
|
if (typeof schema.exclusiveMaximum === "number") {
|
|
numberSchema = numberSchema.lt(schema.exclusiveMaximum);
|
|
} else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") {
|
|
numberSchema = numberSchema.lt(schema.maximum);
|
|
}
|
|
if (typeof schema.multipleOf === "number") {
|
|
numberSchema = numberSchema.multipleOf(schema.multipleOf);
|
|
}
|
|
zodSchema = numberSchema;
|
|
break;
|
|
}
|
|
case "boolean": {
|
|
zodSchema = z.boolean();
|
|
break;
|
|
}
|
|
case "null": {
|
|
zodSchema = z.null();
|
|
break;
|
|
}
|
|
case "object": {
|
|
const shape = {};
|
|
const properties = schema.properties || {};
|
|
const requiredSet = new Set(schema.required || []);
|
|
for (const [key, propSchema] of Object.entries(properties)) {
|
|
const propZodSchema = convertSchema(propSchema, ctx);
|
|
shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();
|
|
}
|
|
if (schema.propertyNames) {
|
|
const keySchema = convertSchema(schema.propertyNames, ctx);
|
|
const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object" ? convertSchema(schema.additionalProperties, ctx) : z.any();
|
|
if (Object.keys(shape).length === 0) {
|
|
zodSchema = z.record(keySchema, valueSchema);
|
|
break;
|
|
}
|
|
const objectSchema2 = z.object(shape).passthrough();
|
|
const recordSchema = z.looseRecord(keySchema, valueSchema);
|
|
zodSchema = z.intersection(objectSchema2, recordSchema);
|
|
break;
|
|
}
|
|
if (schema.patternProperties) {
|
|
const patternProps = schema.patternProperties;
|
|
const patternKeys = Object.keys(patternProps);
|
|
const looseRecords = [];
|
|
for (const pattern of patternKeys) {
|
|
const patternValue = convertSchema(patternProps[pattern], ctx);
|
|
const keySchema = z.string().regex(new RegExp(pattern));
|
|
looseRecords.push(z.looseRecord(keySchema, patternValue));
|
|
}
|
|
const schemasToIntersect = [];
|
|
if (Object.keys(shape).length > 0) {
|
|
schemasToIntersect.push(z.object(shape).passthrough());
|
|
}
|
|
schemasToIntersect.push(...looseRecords);
|
|
if (schemasToIntersect.length === 0) {
|
|
zodSchema = z.object({}).passthrough();
|
|
} else if (schemasToIntersect.length === 1) {
|
|
zodSchema = schemasToIntersect[0];
|
|
} else {
|
|
let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);
|
|
for (let i = 2; i < schemasToIntersect.length; i++) {
|
|
result = z.intersection(result, schemasToIntersect[i]);
|
|
}
|
|
zodSchema = result;
|
|
}
|
|
break;
|
|
}
|
|
const objectSchema = z.object(shape);
|
|
if (schema.additionalProperties === false) {
|
|
zodSchema = objectSchema.strict();
|
|
} else if (typeof schema.additionalProperties === "object") {
|
|
zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));
|
|
} else {
|
|
zodSchema = objectSchema.passthrough();
|
|
}
|
|
break;
|
|
}
|
|
case "array": {
|
|
const prefixItems = schema.prefixItems;
|
|
const items = schema.items;
|
|
if (prefixItems && Array.isArray(prefixItems)) {
|
|
const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));
|
|
const rest = items && typeof items === "object" && !Array.isArray(items) ? convertSchema(items, ctx) : void 0;
|
|
if (rest) {
|
|
zodSchema = z.tuple(tupleItems).rest(rest);
|
|
} else {
|
|
zodSchema = z.tuple(tupleItems);
|
|
}
|
|
if (typeof schema.minItems === "number") {
|
|
zodSchema = zodSchema.check(z.minLength(schema.minItems));
|
|
}
|
|
if (typeof schema.maxItems === "number") {
|
|
zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
|
|
}
|
|
} else if (Array.isArray(items)) {
|
|
const tupleItems = items.map((item) => convertSchema(item, ctx));
|
|
const rest = schema.additionalItems && typeof schema.additionalItems === "object" ? convertSchema(schema.additionalItems, ctx) : void 0;
|
|
if (rest) {
|
|
zodSchema = z.tuple(tupleItems).rest(rest);
|
|
} else {
|
|
zodSchema = z.tuple(tupleItems);
|
|
}
|
|
if (typeof schema.minItems === "number") {
|
|
zodSchema = zodSchema.check(z.minLength(schema.minItems));
|
|
}
|
|
if (typeof schema.maxItems === "number") {
|
|
zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
|
|
}
|
|
} else if (items !== void 0) {
|
|
const element = convertSchema(items, ctx);
|
|
let arraySchema = z.array(element);
|
|
if (typeof schema.minItems === "number") {
|
|
arraySchema = arraySchema.min(schema.minItems);
|
|
}
|
|
if (typeof schema.maxItems === "number") {
|
|
arraySchema = arraySchema.max(schema.maxItems);
|
|
}
|
|
zodSchema = arraySchema;
|
|
} else {
|
|
zodSchema = z.array(z.any());
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
throw new Error(`Unsupported type: ${type}`);
|
|
}
|
|
if (schema.description) {
|
|
zodSchema = zodSchema.describe(schema.description);
|
|
}
|
|
if (schema.default !== void 0) {
|
|
zodSchema = zodSchema.default(schema.default);
|
|
}
|
|
return zodSchema;
|
|
}
|
|
function convertSchema(schema, ctx) {
|
|
if (typeof schema === "boolean") {
|
|
return schema ? z.any() : z.never();
|
|
}
|
|
let baseSchema = convertBaseSchema(schema, ctx);
|
|
const hasExplicitType = schema.type || schema.enum !== void 0 || schema.const !== void 0;
|
|
if (schema.anyOf && Array.isArray(schema.anyOf)) {
|
|
const options = schema.anyOf.map((s) => convertSchema(s, ctx));
|
|
const anyOfUnion = z.union(options);
|
|
baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;
|
|
}
|
|
if (schema.oneOf && Array.isArray(schema.oneOf)) {
|
|
const options = schema.oneOf.map((s) => convertSchema(s, ctx));
|
|
const oneOfUnion = z.xor(options);
|
|
baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;
|
|
}
|
|
if (schema.allOf && Array.isArray(schema.allOf)) {
|
|
if (schema.allOf.length === 0) {
|
|
baseSchema = hasExplicitType ? baseSchema : z.any();
|
|
} else {
|
|
let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);
|
|
const startIdx = hasExplicitType ? 0 : 1;
|
|
for (let i = startIdx; i < schema.allOf.length; i++) {
|
|
result = z.intersection(result, convertSchema(schema.allOf[i], ctx));
|
|
}
|
|
baseSchema = result;
|
|
}
|
|
}
|
|
if (schema.nullable === true && ctx.version === "openapi-3.0") {
|
|
baseSchema = z.nullable(baseSchema);
|
|
}
|
|
if (schema.readOnly === true) {
|
|
baseSchema = z.readonly(baseSchema);
|
|
}
|
|
const extraMeta = {};
|
|
const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
|
|
for (const key of coreMetadataKeys) {
|
|
if (key in schema) {
|
|
extraMeta[key] = schema[key];
|
|
}
|
|
}
|
|
const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
|
|
for (const key of contentMetadataKeys) {
|
|
if (key in schema) {
|
|
extraMeta[key] = schema[key];
|
|
}
|
|
}
|
|
for (const key of Object.keys(schema)) {
|
|
if (!RECOGNIZED_KEYS.has(key)) {
|
|
extraMeta[key] = schema[key];
|
|
}
|
|
}
|
|
if (Object.keys(extraMeta).length > 0) {
|
|
ctx.registry.add(baseSchema, extraMeta);
|
|
}
|
|
return baseSchema;
|
|
}
|
|
function fromJSONSchema(schema, params) {
|
|
if (typeof schema === "boolean") {
|
|
return schema ? z.any() : z.never();
|
|
}
|
|
const version3 = detectVersion(schema, params?.defaultTarget);
|
|
const defs = schema.$defs || schema.definitions || {};
|
|
const ctx = {
|
|
version: version3,
|
|
defs,
|
|
refs: /* @__PURE__ */ new Map(),
|
|
processing: /* @__PURE__ */ new Set(),
|
|
rootSchema: schema,
|
|
registry: params?.registry ?? globalRegistry
|
|
};
|
|
return convertSchema(schema, ctx);
|
|
}
|
|
var z, RECOGNIZED_KEYS;
|
|
var init_from_json_schema = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js"() {
|
|
init_registries();
|
|
init_checks2();
|
|
init_iso();
|
|
init_schemas2();
|
|
z = {
|
|
...schemas_exports2,
|
|
...checks_exports2,
|
|
iso: iso_exports
|
|
};
|
|
RECOGNIZED_KEYS = /* @__PURE__ */ new Set([
|
|
// Schema identification
|
|
"$schema",
|
|
"$ref",
|
|
"$defs",
|
|
"definitions",
|
|
// Core schema keywords
|
|
"$id",
|
|
"id",
|
|
"$comment",
|
|
"$anchor",
|
|
"$vocabulary",
|
|
"$dynamicRef",
|
|
"$dynamicAnchor",
|
|
// Type
|
|
"type",
|
|
"enum",
|
|
"const",
|
|
// Composition
|
|
"anyOf",
|
|
"oneOf",
|
|
"allOf",
|
|
"not",
|
|
// Object
|
|
"properties",
|
|
"required",
|
|
"additionalProperties",
|
|
"patternProperties",
|
|
"propertyNames",
|
|
"minProperties",
|
|
"maxProperties",
|
|
// Array
|
|
"items",
|
|
"prefixItems",
|
|
"additionalItems",
|
|
"minItems",
|
|
"maxItems",
|
|
"uniqueItems",
|
|
"contains",
|
|
"minContains",
|
|
"maxContains",
|
|
// String
|
|
"minLength",
|
|
"maxLength",
|
|
"pattern",
|
|
"format",
|
|
// Number
|
|
"minimum",
|
|
"maximum",
|
|
"exclusiveMinimum",
|
|
"exclusiveMaximum",
|
|
"multipleOf",
|
|
// Already handled metadata
|
|
"description",
|
|
"default",
|
|
// Content
|
|
"contentEncoding",
|
|
"contentMediaType",
|
|
"contentSchema",
|
|
// Unsupported (error-throwing)
|
|
"unevaluatedItems",
|
|
"unevaluatedProperties",
|
|
"if",
|
|
"then",
|
|
"else",
|
|
"dependentSchemas",
|
|
"dependentRequired",
|
|
// OpenAPI
|
|
"nullable",
|
|
"readOnly"
|
|
]);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js
|
|
var coerce_exports = {};
|
|
__export(coerce_exports, {
|
|
bigint: () => bigint3,
|
|
boolean: () => boolean3,
|
|
date: () => date4,
|
|
number: () => number3,
|
|
string: () => string3
|
|
});
|
|
function string3(params) {
|
|
return _coercedString(ZodString, params);
|
|
}
|
|
function number3(params) {
|
|
return _coercedNumber(ZodNumber, params);
|
|
}
|
|
function boolean3(params) {
|
|
return _coercedBoolean(ZodBoolean, params);
|
|
}
|
|
function bigint3(params) {
|
|
return _coercedBigint(ZodBigInt, params);
|
|
}
|
|
function date4(params) {
|
|
return _coercedDate(ZodDate, params);
|
|
}
|
|
var init_coerce = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js"() {
|
|
init_core2();
|
|
init_schemas2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js
|
|
var external_exports = {};
|
|
__export(external_exports, {
|
|
$brand: () => $brand,
|
|
$input: () => $input,
|
|
$output: () => $output,
|
|
NEVER: () => NEVER,
|
|
TimePrecision: () => TimePrecision,
|
|
ZodAny: () => ZodAny,
|
|
ZodArray: () => ZodArray,
|
|
ZodBase64: () => ZodBase64,
|
|
ZodBase64URL: () => ZodBase64URL,
|
|
ZodBigInt: () => ZodBigInt,
|
|
ZodBigIntFormat: () => ZodBigIntFormat,
|
|
ZodBoolean: () => ZodBoolean,
|
|
ZodCIDRv4: () => ZodCIDRv4,
|
|
ZodCIDRv6: () => ZodCIDRv6,
|
|
ZodCUID: () => ZodCUID,
|
|
ZodCUID2: () => ZodCUID2,
|
|
ZodCatch: () => ZodCatch,
|
|
ZodCodec: () => ZodCodec,
|
|
ZodCustom: () => ZodCustom,
|
|
ZodCustomStringFormat: () => ZodCustomStringFormat,
|
|
ZodDate: () => ZodDate,
|
|
ZodDefault: () => ZodDefault,
|
|
ZodDiscriminatedUnion: () => ZodDiscriminatedUnion,
|
|
ZodE164: () => ZodE164,
|
|
ZodEmail: () => ZodEmail,
|
|
ZodEmoji: () => ZodEmoji,
|
|
ZodEnum: () => ZodEnum,
|
|
ZodError: () => ZodError,
|
|
ZodExactOptional: () => ZodExactOptional,
|
|
ZodFile: () => ZodFile,
|
|
ZodFirstPartyTypeKind: () => ZodFirstPartyTypeKind,
|
|
ZodFunction: () => ZodFunction,
|
|
ZodGUID: () => ZodGUID,
|
|
ZodIPv4: () => ZodIPv4,
|
|
ZodIPv6: () => ZodIPv6,
|
|
ZodISODate: () => ZodISODate,
|
|
ZodISODateTime: () => ZodISODateTime,
|
|
ZodISODuration: () => ZodISODuration,
|
|
ZodISOTime: () => ZodISOTime,
|
|
ZodIntersection: () => ZodIntersection,
|
|
ZodIssueCode: () => ZodIssueCode,
|
|
ZodJWT: () => ZodJWT,
|
|
ZodKSUID: () => ZodKSUID,
|
|
ZodLazy: () => ZodLazy,
|
|
ZodLiteral: () => ZodLiteral,
|
|
ZodMAC: () => ZodMAC,
|
|
ZodMap: () => ZodMap,
|
|
ZodNaN: () => ZodNaN,
|
|
ZodNanoID: () => ZodNanoID,
|
|
ZodNever: () => ZodNever,
|
|
ZodNonOptional: () => ZodNonOptional,
|
|
ZodNull: () => ZodNull,
|
|
ZodNullable: () => ZodNullable,
|
|
ZodNumber: () => ZodNumber,
|
|
ZodNumberFormat: () => ZodNumberFormat,
|
|
ZodObject: () => ZodObject,
|
|
ZodOptional: () => ZodOptional,
|
|
ZodPipe: () => ZodPipe,
|
|
ZodPrefault: () => ZodPrefault,
|
|
ZodPromise: () => ZodPromise,
|
|
ZodReadonly: () => ZodReadonly,
|
|
ZodRealError: () => ZodRealError,
|
|
ZodRecord: () => ZodRecord,
|
|
ZodSet: () => ZodSet,
|
|
ZodString: () => ZodString,
|
|
ZodStringFormat: () => ZodStringFormat,
|
|
ZodSuccess: () => ZodSuccess,
|
|
ZodSymbol: () => ZodSymbol,
|
|
ZodTemplateLiteral: () => ZodTemplateLiteral,
|
|
ZodTransform: () => ZodTransform,
|
|
ZodTuple: () => ZodTuple,
|
|
ZodType: () => ZodType,
|
|
ZodULID: () => ZodULID,
|
|
ZodURL: () => ZodURL,
|
|
ZodUUID: () => ZodUUID,
|
|
ZodUndefined: () => ZodUndefined,
|
|
ZodUnion: () => ZodUnion,
|
|
ZodUnknown: () => ZodUnknown,
|
|
ZodVoid: () => ZodVoid,
|
|
ZodXID: () => ZodXID,
|
|
ZodXor: () => ZodXor,
|
|
_ZodString: () => _ZodString,
|
|
_default: () => _default2,
|
|
_function: () => _function,
|
|
any: () => any,
|
|
array: () => array,
|
|
base64: () => base642,
|
|
base64url: () => base64url2,
|
|
bigint: () => bigint2,
|
|
boolean: () => boolean2,
|
|
catch: () => _catch2,
|
|
check: () => check,
|
|
cidrv4: () => cidrv42,
|
|
cidrv6: () => cidrv62,
|
|
clone: () => clone,
|
|
codec: () => codec,
|
|
coerce: () => coerce_exports,
|
|
config: () => config,
|
|
core: () => core_exports2,
|
|
cuid: () => cuid3,
|
|
cuid2: () => cuid22,
|
|
custom: () => custom,
|
|
date: () => date3,
|
|
decode: () => decode2,
|
|
decodeAsync: () => decodeAsync2,
|
|
describe: () => describe2,
|
|
discriminatedUnion: () => discriminatedUnion,
|
|
e164: () => e1642,
|
|
email: () => email2,
|
|
emoji: () => emoji2,
|
|
encode: () => encode2,
|
|
encodeAsync: () => encodeAsync2,
|
|
endsWith: () => _endsWith,
|
|
enum: () => _enum2,
|
|
exactOptional: () => exactOptional,
|
|
file: () => file,
|
|
flattenError: () => flattenError,
|
|
float32: () => float32,
|
|
float64: () => float64,
|
|
formatError: () => formatError,
|
|
fromJSONSchema: () => fromJSONSchema,
|
|
function: () => _function,
|
|
getErrorMap: () => getErrorMap,
|
|
globalRegistry: () => globalRegistry,
|
|
gt: () => _gt,
|
|
gte: () => _gte,
|
|
guid: () => guid2,
|
|
hash: () => hash,
|
|
hex: () => hex2,
|
|
hostname: () => hostname2,
|
|
httpUrl: () => httpUrl,
|
|
includes: () => _includes,
|
|
instanceof: () => _instanceof,
|
|
int: () => int,
|
|
int32: () => int32,
|
|
int64: () => int64,
|
|
intersection: () => intersection,
|
|
ipv4: () => ipv42,
|
|
ipv6: () => ipv62,
|
|
iso: () => iso_exports,
|
|
json: () => json,
|
|
jwt: () => jwt,
|
|
keyof: () => keyof,
|
|
ksuid: () => ksuid2,
|
|
lazy: () => lazy,
|
|
length: () => _length,
|
|
literal: () => literal,
|
|
locales: () => locales_exports,
|
|
looseObject: () => looseObject,
|
|
looseRecord: () => looseRecord,
|
|
lowercase: () => _lowercase,
|
|
lt: () => _lt,
|
|
lte: () => _lte,
|
|
mac: () => mac2,
|
|
map: () => map,
|
|
maxLength: () => _maxLength,
|
|
maxSize: () => _maxSize,
|
|
meta: () => meta2,
|
|
mime: () => _mime,
|
|
minLength: () => _minLength,
|
|
minSize: () => _minSize,
|
|
multipleOf: () => _multipleOf,
|
|
nan: () => nan,
|
|
nanoid: () => nanoid2,
|
|
nativeEnum: () => nativeEnum,
|
|
negative: () => _negative,
|
|
never: () => never,
|
|
nonnegative: () => _nonnegative,
|
|
nonoptional: () => nonoptional,
|
|
nonpositive: () => _nonpositive,
|
|
normalize: () => _normalize,
|
|
null: () => _null3,
|
|
nullable: () => nullable,
|
|
nullish: () => nullish2,
|
|
number: () => number2,
|
|
object: () => object,
|
|
optional: () => optional,
|
|
overwrite: () => _overwrite,
|
|
parse: () => parse2,
|
|
parseAsync: () => parseAsync2,
|
|
partialRecord: () => partialRecord,
|
|
pipe: () => pipe,
|
|
positive: () => _positive,
|
|
prefault: () => prefault,
|
|
preprocess: () => preprocess,
|
|
prettifyError: () => prettifyError,
|
|
promise: () => promise,
|
|
property: () => _property,
|
|
readonly: () => readonly,
|
|
record: () => record,
|
|
refine: () => refine,
|
|
regex: () => _regex,
|
|
regexes: () => regexes_exports,
|
|
registry: () => registry,
|
|
safeDecode: () => safeDecode2,
|
|
safeDecodeAsync: () => safeDecodeAsync2,
|
|
safeEncode: () => safeEncode2,
|
|
safeEncodeAsync: () => safeEncodeAsync2,
|
|
safeParse: () => safeParse2,
|
|
safeParseAsync: () => safeParseAsync2,
|
|
set: () => set,
|
|
setErrorMap: () => setErrorMap,
|
|
size: () => _size,
|
|
slugify: () => _slugify,
|
|
startsWith: () => _startsWith,
|
|
strictObject: () => strictObject,
|
|
string: () => string2,
|
|
stringFormat: () => stringFormat,
|
|
stringbool: () => stringbool,
|
|
success: () => success,
|
|
superRefine: () => superRefine,
|
|
symbol: () => symbol,
|
|
templateLiteral: () => templateLiteral,
|
|
toJSONSchema: () => toJSONSchema,
|
|
toLowerCase: () => _toLowerCase,
|
|
toUpperCase: () => _toUpperCase,
|
|
transform: () => transform,
|
|
treeifyError: () => treeifyError,
|
|
trim: () => _trim,
|
|
tuple: () => tuple,
|
|
uint32: () => uint32,
|
|
uint64: () => uint64,
|
|
ulid: () => ulid2,
|
|
undefined: () => _undefined3,
|
|
union: () => union,
|
|
unknown: () => unknown,
|
|
uppercase: () => _uppercase,
|
|
url: () => url,
|
|
util: () => util_exports,
|
|
uuid: () => uuid2,
|
|
uuidv4: () => uuidv4,
|
|
uuidv6: () => uuidv6,
|
|
uuidv7: () => uuidv7,
|
|
void: () => _void2,
|
|
xid: () => xid2,
|
|
xor: () => xor
|
|
});
|
|
var init_external = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js"() {
|
|
init_core2();
|
|
init_schemas2();
|
|
init_checks2();
|
|
init_errors2();
|
|
init_parse2();
|
|
init_compat();
|
|
init_core2();
|
|
init_en();
|
|
init_core2();
|
|
init_json_schema_processors();
|
|
init_from_json_schema();
|
|
init_locales();
|
|
init_iso();
|
|
init_iso();
|
|
init_coerce();
|
|
config(en_default());
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.js
|
|
var init_zod = __esm({
|
|
"../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.js"() {
|
|
init_external();
|
|
init_external();
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/schemas.ts
|
|
var TaskKindSchema, TaskStatusSchema, TaskPrioritySchema, ErrorCategorySchema, TaskInputSchema, TaskOutputSchema, TaskProgressSchema, ClassifiedErrorSchema, TaskSchema, AddInputSchema, AddOutputSchema, TaskIdInputSchema, ListInputSchema, ListOutputSchema, StatsOutputSchema, SetMaxConcurrencyInputSchema, SetMaxPerGroupInputSchema, PauseInputSchema, RetryInputSchema, VoidOutputSchema;
|
|
var init_schemas3 = __esm({
|
|
"../../packages/task-queue/src/schemas.ts"() {
|
|
"use strict";
|
|
init_zod();
|
|
TaskKindSchema = external_exports.enum([
|
|
"video",
|
|
"audio",
|
|
"playlist",
|
|
"subscription-item",
|
|
"yt-dlp-forward"
|
|
]);
|
|
TaskStatusSchema = external_exports.enum([
|
|
"queued",
|
|
"running",
|
|
"processing",
|
|
"paused",
|
|
"retry-scheduled",
|
|
"completed",
|
|
"failed",
|
|
"cancelled"
|
|
]);
|
|
TaskPrioritySchema = external_exports.union([
|
|
external_exports.literal(0),
|
|
external_exports.literal(10),
|
|
external_exports.literal(20)
|
|
]);
|
|
ErrorCategorySchema = external_exports.enum([
|
|
"http-429",
|
|
"auth-required",
|
|
"geo-blocked",
|
|
"not-found",
|
|
"disk-full",
|
|
"permission-denied",
|
|
"binary-missing",
|
|
"ffmpeg",
|
|
"network-transient",
|
|
"stalled",
|
|
"cancelled-by-user",
|
|
"output-missing",
|
|
"unknown"
|
|
]);
|
|
TaskInputSchema = external_exports.object({
|
|
url: external_exports.string().min(1),
|
|
kind: TaskKindSchema,
|
|
title: external_exports.string().optional(),
|
|
thumbnail: external_exports.string().optional(),
|
|
subscriptionId: external_exports.string().optional(),
|
|
playlistId: external_exports.string().optional(),
|
|
playlistIndex: external_exports.number().int().nonnegative().optional(),
|
|
rawArgs: external_exports.array(external_exports.string()).optional(),
|
|
options: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
});
|
|
TaskOutputSchema = external_exports.object({
|
|
filePath: external_exports.string(),
|
|
size: external_exports.number().int().nonnegative(),
|
|
durationMs: external_exports.number().int().nullable(),
|
|
sha256: external_exports.string().nullable()
|
|
});
|
|
TaskProgressSchema = external_exports.object({
|
|
percent: external_exports.number().min(0).max(1).nullable(),
|
|
bytesDownloaded: external_exports.number().int().nullable(),
|
|
bytesTotal: external_exports.number().int().nullable(),
|
|
speedBps: external_exports.number().nullable(),
|
|
etaMs: external_exports.number().int().nullable(),
|
|
ticks: external_exports.number().int().nonnegative()
|
|
});
|
|
ClassifiedErrorSchema = external_exports.object({
|
|
category: ErrorCategorySchema,
|
|
exitCode: external_exports.number().int().nullable(),
|
|
rawMessage: external_exports.string(),
|
|
uiMessageKey: external_exports.string(),
|
|
uiActionHints: external_exports.array(external_exports.string()).readonly(),
|
|
retryable: external_exports.boolean(),
|
|
suggestedRetryAfterMs: external_exports.number().int().nonnegative().nullable()
|
|
});
|
|
TaskSchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
kind: TaskKindSchema,
|
|
parentId: external_exports.string().nullable(),
|
|
input: TaskInputSchema,
|
|
priority: TaskPrioritySchema,
|
|
groupKey: external_exports.string(),
|
|
status: TaskStatusSchema,
|
|
prevStatus: TaskStatusSchema.nullable(),
|
|
statusReason: external_exports.string().nullable(),
|
|
enteredStatusAt: external_exports.number().int(),
|
|
attempt: external_exports.number().int().nonnegative(),
|
|
maxAttempts: external_exports.number().int().nonnegative(),
|
|
nextRetryAt: external_exports.number().int().nullable(),
|
|
progress: TaskProgressSchema,
|
|
output: TaskOutputSchema.nullable(),
|
|
lastError: ClassifiedErrorSchema.nullable(),
|
|
pid: external_exports.number().int().nullable(),
|
|
pidStartedAt: external_exports.number().int().nullable(),
|
|
createdAt: external_exports.number().int(),
|
|
updatedAt: external_exports.number().int()
|
|
});
|
|
AddInputSchema = external_exports.object({
|
|
input: TaskInputSchema,
|
|
priority: TaskPrioritySchema.optional(),
|
|
groupKey: external_exports.string().optional(),
|
|
parentId: external_exports.string().nullable().optional(),
|
|
maxAttempts: external_exports.number().int().nonnegative().optional()
|
|
});
|
|
AddOutputSchema = external_exports.object({ id: external_exports.string() });
|
|
TaskIdInputSchema = external_exports.object({ id: external_exports.string() });
|
|
ListInputSchema = external_exports.object({
|
|
status: TaskStatusSchema.optional(),
|
|
groupKey: external_exports.string().optional(),
|
|
parentId: external_exports.string().optional(),
|
|
limit: external_exports.number().int().positive().max(500).optional(),
|
|
cursor: external_exports.string().optional()
|
|
});
|
|
ListOutputSchema = external_exports.object({
|
|
tasks: external_exports.array(TaskSchema),
|
|
nextCursor: external_exports.string().nullable()
|
|
});
|
|
StatsOutputSchema = external_exports.object({
|
|
total: external_exports.number().int(),
|
|
byStatus: external_exports.record(TaskStatusSchema, external_exports.number().int()),
|
|
running: external_exports.number().int(),
|
|
queued: external_exports.number().int(),
|
|
capacity: external_exports.number().int(),
|
|
perGroup: external_exports.record(external_exports.string(), external_exports.number().int())
|
|
});
|
|
SetMaxConcurrencyInputSchema = external_exports.object({
|
|
n: external_exports.number().int().min(1).max(64)
|
|
});
|
|
SetMaxPerGroupInputSchema = external_exports.object({
|
|
groupKey: external_exports.string(),
|
|
n: external_exports.number().int().min(1).max(64).nullable()
|
|
});
|
|
PauseInputSchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
reason: external_exports.string().optional()
|
|
});
|
|
RetryInputSchema = external_exports.object({
|
|
id: external_exports.string()
|
|
});
|
|
VoidOutputSchema = external_exports.object({ ok: external_exports.literal(true) });
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+shared@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/shared/dist/index.mjs
|
|
function resolveMaybeOptionalOptions(rest) {
|
|
return rest[0] ?? {};
|
|
}
|
|
function sequential(fn) {
|
|
let lastOperationPromise = Promise.resolve();
|
|
return (...args) => {
|
|
return lastOperationPromise = lastOperationPromise.catch(() => {
|
|
}).then(() => {
|
|
return fn(...args);
|
|
});
|
|
};
|
|
}
|
|
function getConstructor(value2) {
|
|
if (!isTypescriptObject(value2)) {
|
|
return null;
|
|
}
|
|
return Object.getPrototypeOf(value2)?.constructor;
|
|
}
|
|
function isTypescriptObject(value2) {
|
|
return !!value2 && (typeof value2 === "object" || typeof value2 === "function");
|
|
}
|
|
var ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, GLOBAL_OTEL_CONFIG_KEY, fallbackAsyncDisposeSymbol, asyncDisposeSymbol, AsyncIteratorClass;
|
|
var init_dist = __esm({
|
|
"../../node_modules/.pnpm/@orpc+shared@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/shared/dist/index.mjs"() {
|
|
ORPC_SHARED_PACKAGE_NAME = "@orpc/shared";
|
|
ORPC_SHARED_PACKAGE_VERSION = "1.14.0";
|
|
GLOBAL_OTEL_CONFIG_KEY = `__${ORPC_SHARED_PACKAGE_NAME}@${ORPC_SHARED_PACKAGE_VERSION}/otel/config__`;
|
|
fallbackAsyncDisposeSymbol = Symbol.for("asyncDispose");
|
|
asyncDisposeSymbol = Symbol.asyncDispose ?? fallbackAsyncDisposeSymbol;
|
|
AsyncIteratorClass = class {
|
|
#isDone = false;
|
|
#isExecuteComplete = false;
|
|
#cleanup;
|
|
#next;
|
|
constructor(next, cleanup) {
|
|
this.#cleanup = cleanup;
|
|
this.#next = sequential(async () => {
|
|
if (this.#isDone) {
|
|
return { done: true, value: void 0 };
|
|
}
|
|
try {
|
|
const result = await next();
|
|
if (result.done) {
|
|
this.#isDone = true;
|
|
}
|
|
return result;
|
|
} catch (err) {
|
|
this.#isDone = true;
|
|
throw err;
|
|
} finally {
|
|
if (this.#isDone && !this.#isExecuteComplete) {
|
|
this.#isExecuteComplete = true;
|
|
await this.#cleanup("next");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
next() {
|
|
return this.#next();
|
|
}
|
|
async return(value2) {
|
|
this.#isDone = true;
|
|
if (!this.#isExecuteComplete) {
|
|
this.#isExecuteComplete = true;
|
|
await this.#cleanup("return");
|
|
}
|
|
return { done: true, value: value2 };
|
|
}
|
|
async throw(err) {
|
|
this.#isDone = true;
|
|
if (!this.#isExecuteComplete) {
|
|
this.#isExecuteComplete = true;
|
|
await this.#cleanup("throw");
|
|
}
|
|
throw err;
|
|
}
|
|
/**
|
|
* asyncDispose symbol only available in esnext, we should fallback to Symbol.for('asyncDispose')
|
|
*/
|
|
async [asyncDisposeSymbol]() {
|
|
this.#isDone = true;
|
|
if (!this.#isExecuteComplete) {
|
|
this.#isExecuteComplete = true;
|
|
await this.#cleanup("dispose");
|
|
}
|
|
}
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.KWZYf6QD.mjs
|
|
function fallbackORPCErrorStatus(code, status) {
|
|
return status ?? COMMON_ORPC_ERROR_DEFS[code]?.status ?? 500;
|
|
}
|
|
function fallbackORPCErrorMessage(code, message) {
|
|
return message || COMMON_ORPC_ERROR_DEFS[code]?.message || code;
|
|
}
|
|
function isORPCErrorStatus(status) {
|
|
return status < 200 || status >= 400;
|
|
}
|
|
var ORPC_CLIENT_PACKAGE_NAME, ORPC_CLIENT_PACKAGE_VERSION, COMMON_ORPC_ERROR_DEFS, GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL, globalORPCErrorConstructors, ORPCError;
|
|
var init_client_KWZYf6QD = __esm({
|
|
"../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.KWZYf6QD.mjs"() {
|
|
init_dist();
|
|
ORPC_CLIENT_PACKAGE_NAME = "@orpc/client";
|
|
ORPC_CLIENT_PACKAGE_VERSION = "1.14.0";
|
|
COMMON_ORPC_ERROR_DEFS = {
|
|
BAD_REQUEST: {
|
|
status: 400,
|
|
message: "Bad Request"
|
|
},
|
|
UNAUTHORIZED: {
|
|
status: 401,
|
|
message: "Unauthorized"
|
|
},
|
|
FORBIDDEN: {
|
|
status: 403,
|
|
message: "Forbidden"
|
|
},
|
|
NOT_FOUND: {
|
|
status: 404,
|
|
message: "Not Found"
|
|
},
|
|
METHOD_NOT_SUPPORTED: {
|
|
status: 405,
|
|
message: "Method Not Supported"
|
|
},
|
|
NOT_ACCEPTABLE: {
|
|
status: 406,
|
|
message: "Not Acceptable"
|
|
},
|
|
TIMEOUT: {
|
|
status: 408,
|
|
message: "Request Timeout"
|
|
},
|
|
CONFLICT: {
|
|
status: 409,
|
|
message: "Conflict"
|
|
},
|
|
PRECONDITION_FAILED: {
|
|
status: 412,
|
|
message: "Precondition Failed"
|
|
},
|
|
PAYLOAD_TOO_LARGE: {
|
|
status: 413,
|
|
message: "Payload Too Large"
|
|
},
|
|
UNSUPPORTED_MEDIA_TYPE: {
|
|
status: 415,
|
|
message: "Unsupported Media Type"
|
|
},
|
|
UNPROCESSABLE_CONTENT: {
|
|
status: 422,
|
|
message: "Unprocessable Content"
|
|
},
|
|
TOO_MANY_REQUESTS: {
|
|
status: 429,
|
|
message: "Too Many Requests"
|
|
},
|
|
CLIENT_CLOSED_REQUEST: {
|
|
status: 499,
|
|
message: "Client Closed Request"
|
|
},
|
|
INTERNAL_SERVER_ERROR: {
|
|
status: 500,
|
|
message: "Internal Server Error"
|
|
},
|
|
NOT_IMPLEMENTED: {
|
|
status: 501,
|
|
message: "Not Implemented"
|
|
},
|
|
BAD_GATEWAY: {
|
|
status: 502,
|
|
message: "Bad Gateway"
|
|
},
|
|
SERVICE_UNAVAILABLE: {
|
|
status: 503,
|
|
message: "Service Unavailable"
|
|
},
|
|
GATEWAY_TIMEOUT: {
|
|
status: 504,
|
|
message: "Gateway Timeout"
|
|
}
|
|
};
|
|
GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL = Symbol.for(`__${ORPC_CLIENT_PACKAGE_NAME}@${ORPC_CLIENT_PACKAGE_VERSION}/error/ORPC_ERROR_CONSTRUCTORS__`);
|
|
void (globalThis[GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL] ??= /* @__PURE__ */ new WeakSet());
|
|
globalORPCErrorConstructors = globalThis[GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL];
|
|
ORPCError = class extends Error {
|
|
defined;
|
|
code;
|
|
status;
|
|
data;
|
|
constructor(code, ...rest) {
|
|
const options = resolveMaybeOptionalOptions(rest);
|
|
if (options.status !== void 0 && !isORPCErrorStatus(options.status)) {
|
|
throw new Error("[ORPCError] Invalid error status code.");
|
|
}
|
|
const message = fallbackORPCErrorMessage(code, options.message);
|
|
super(message, options);
|
|
this.code = code;
|
|
this.status = fallbackORPCErrorStatus(code, options.status);
|
|
this.defined = options.defined ?? false;
|
|
this.data = options.data;
|
|
}
|
|
toJSON() {
|
|
return {
|
|
defined: this.defined,
|
|
code: this.code,
|
|
status: this.status,
|
|
message: this.message,
|
|
data: this.data
|
|
};
|
|
}
|
|
/**
|
|
* Workaround for Next.js where different contexts use separate
|
|
* dependency graphs, causing multiple ORPCError constructors existing and breaking
|
|
* `instanceof` checks across contexts.
|
|
*
|
|
* This is particularly problematic with "Optimized SSR", where orpc-client
|
|
* executes in one context but is invoked from another. When an error is thrown
|
|
* in the execution context, `instanceof ORPCError` checks fail in the
|
|
* invocation context due to separate class constructors.
|
|
*
|
|
* @todo Remove this and related code if Next.js resolves the multiple dependency graph issue.
|
|
*/
|
|
static [Symbol.hasInstance](instance) {
|
|
if (globalORPCErrorConstructors.has(this)) {
|
|
const constructor = getConstructor(instance);
|
|
if (constructor && globalORPCErrorConstructors.has(constructor)) {
|
|
return true;
|
|
}
|
|
}
|
|
return super[Symbol.hasInstance](instance);
|
|
}
|
|
};
|
|
globalORPCErrorConstructors.add(ORPCError);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+standard-server@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/standard-server/dist/index.mjs
|
|
function decodeEventMessage(encoded) {
|
|
const lines = encoded.replace(/\n+$/, "").split(/\n/);
|
|
const message = {
|
|
data: void 0,
|
|
event: void 0,
|
|
id: void 0,
|
|
retry: void 0,
|
|
comments: []
|
|
};
|
|
for (const line of lines) {
|
|
const index2 = line.indexOf(":");
|
|
const key = index2 === -1 ? line : line.slice(0, index2);
|
|
const value2 = index2 === -1 ? "" : line.slice(index2 + 1).replace(/^\s/, "");
|
|
if (index2 === 0) {
|
|
message.comments.push(value2);
|
|
} else if (key === "data") {
|
|
message.data ??= "";
|
|
message.data += `${value2}
|
|
`;
|
|
} else if (key === "event") {
|
|
message.event = value2;
|
|
} else if (key === "id") {
|
|
message.id = value2;
|
|
} else if (key === "retry") {
|
|
const maybeInteger = Number.parseInt(value2);
|
|
if (Number.isInteger(maybeInteger) && maybeInteger >= 0 && maybeInteger.toString() === value2) {
|
|
message.retry = maybeInteger;
|
|
}
|
|
}
|
|
}
|
|
message.data = message.data?.replace(/\n$/, "");
|
|
return message;
|
|
}
|
|
var EventDecoderError, EventDecoder, EventDecoderStream, EVENT_SOURCE_META_SYMBOL;
|
|
var init_dist2 = __esm({
|
|
"../../node_modules/.pnpm/@orpc+standard-server@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/standard-server/dist/index.mjs"() {
|
|
init_dist();
|
|
EventDecoderError = class extends TypeError {
|
|
};
|
|
EventDecoder = class {
|
|
constructor(options = {}) {
|
|
this.options = options;
|
|
}
|
|
incomplete = "";
|
|
feed(chunk) {
|
|
this.incomplete += chunk;
|
|
const lastCompleteIndex = this.incomplete.lastIndexOf("\n\n");
|
|
if (lastCompleteIndex === -1) {
|
|
return;
|
|
}
|
|
const completes = this.incomplete.slice(0, lastCompleteIndex).split(/\n\n/);
|
|
this.incomplete = this.incomplete.slice(lastCompleteIndex + 2);
|
|
for (const encoded of completes) {
|
|
const message = decodeEventMessage(`${encoded}
|
|
|
|
`);
|
|
if (this.options.onEvent) {
|
|
this.options.onEvent(message);
|
|
}
|
|
}
|
|
}
|
|
end() {
|
|
if (this.incomplete) {
|
|
throw new EventDecoderError("Event Iterator ended before complete");
|
|
}
|
|
}
|
|
};
|
|
EventDecoderStream = class extends TransformStream {
|
|
constructor() {
|
|
let decoder;
|
|
super({
|
|
start(controller) {
|
|
decoder = new EventDecoder({
|
|
onEvent: (event) => {
|
|
controller.enqueue(event);
|
|
}
|
|
});
|
|
},
|
|
transform(chunk) {
|
|
decoder.feed(chunk);
|
|
},
|
|
flush() {
|
|
decoder.end();
|
|
}
|
|
});
|
|
}
|
|
};
|
|
EVENT_SOURCE_META_SYMBOL = Symbol("ORPC_EVENT_SOURCE_META");
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.BLtwTQUg.mjs
|
|
var init_client_BLtwTQUg = __esm({
|
|
"../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.BLtwTQUg.mjs"() {
|
|
init_dist();
|
|
init_dist2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/index.mjs
|
|
var init_dist3 = __esm({
|
|
"../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/index.mjs"() {
|
|
init_dist();
|
|
init_dist();
|
|
init_client_KWZYf6QD();
|
|
init_client_KWZYf6QD();
|
|
init_client_BLtwTQUg();
|
|
init_dist2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+contract@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/contract/dist/shared/contract.D_dZrO__.mjs
|
|
function mergeErrorMap(errorMap1, errorMap2) {
|
|
return { ...errorMap1, ...errorMap2 };
|
|
}
|
|
function isContractProcedure(item) {
|
|
if (item instanceof ContractProcedure) {
|
|
return true;
|
|
}
|
|
return (typeof item === "object" || typeof item === "function") && item !== null && "~orpc" in item && typeof item["~orpc"] === "object" && item["~orpc"] !== null && "errorMap" in item["~orpc"] && "route" in item["~orpc"] && "meta" in item["~orpc"];
|
|
}
|
|
var ContractProcedure;
|
|
var init_contract_D_dZrO = __esm({
|
|
"../../node_modules/.pnpm/@orpc+contract@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/contract/dist/shared/contract.D_dZrO__.mjs"() {
|
|
init_dist3();
|
|
ContractProcedure = class {
|
|
/**
|
|
* This property holds the defined options for the contract procedure.
|
|
*/
|
|
"~orpc";
|
|
constructor(def) {
|
|
if (def.route?.successStatus && isORPCErrorStatus(def.route.successStatus)) {
|
|
throw new Error("[ContractProcedure] Invalid successStatus.");
|
|
}
|
|
if (Object.values(def.errorMap).some((val) => val && val.status && !isORPCErrorStatus(val.status))) {
|
|
throw new Error("[ContractProcedure] Invalid error status code.");
|
|
}
|
|
this["~orpc"] = def;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+standard-server-fetch@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/standard-server-fetch/dist/index.mjs
|
|
var init_dist4 = __esm({
|
|
"../../node_modules/.pnpm/@orpc+standard-server-fetch@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/standard-server-fetch/dist/index.mjs"() {
|
|
init_dist();
|
|
init_dist2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.DrB9nq_G.mjs
|
|
var init_client_DrB9nq_G = __esm({
|
|
"../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/shared/client.DrB9nq_G.mjs"() {
|
|
init_dist();
|
|
init_dist2();
|
|
init_client_KWZYf6QD();
|
|
init_dist4();
|
|
init_client_BLtwTQUg();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/adapters/standard/index.mjs
|
|
var init_standard = __esm({
|
|
"../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/client/dist/adapters/standard/index.mjs"() {
|
|
init_client_DrB9nq_G();
|
|
init_dist();
|
|
init_dist2();
|
|
init_client_KWZYf6QD();
|
|
init_dist4();
|
|
init_client_BLtwTQUg();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/@orpc+contract@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/contract/dist/index.mjs
|
|
function mergeMeta(meta1, meta22) {
|
|
return { ...meta1, ...meta22 };
|
|
}
|
|
function mergeRoute(a, b) {
|
|
return { ...a, ...b };
|
|
}
|
|
function prefixRoute(route, prefix) {
|
|
if (!route.path) {
|
|
return route;
|
|
}
|
|
return {
|
|
...route,
|
|
path: `${prefix}${route.path}`
|
|
};
|
|
}
|
|
function unshiftTagRoute(route, tags) {
|
|
return {
|
|
...route,
|
|
tags: [...tags, ...route.tags ?? []]
|
|
};
|
|
}
|
|
function mergePrefix(a, b) {
|
|
return a ? `${a}${b}` : b;
|
|
}
|
|
function mergeTags(a, b) {
|
|
return a ? [...a, ...b] : b;
|
|
}
|
|
function enhanceRoute(route, options) {
|
|
let router = route;
|
|
if (options.prefix) {
|
|
router = prefixRoute(router, options.prefix);
|
|
}
|
|
if (options.tags?.length) {
|
|
router = unshiftTagRoute(router, options.tags);
|
|
}
|
|
return router;
|
|
}
|
|
function enhanceContractRouter(router, options) {
|
|
if (isContractProcedure(router)) {
|
|
const enhanced2 = new ContractProcedure({
|
|
...router["~orpc"],
|
|
errorMap: mergeErrorMap(options.errorMap, router["~orpc"].errorMap),
|
|
route: enhanceRoute(router["~orpc"].route, options)
|
|
});
|
|
return enhanced2;
|
|
}
|
|
if (typeof router !== "object" || router === null) {
|
|
return router;
|
|
}
|
|
const enhanced = {};
|
|
for (const key in router) {
|
|
enhanced[key] = enhanceContractRouter(router[key], options);
|
|
}
|
|
return enhanced;
|
|
}
|
|
var ContractBuilder, oc, EVENT_ITERATOR_DETAILS_SYMBOL;
|
|
var init_dist5 = __esm({
|
|
"../../node_modules/.pnpm/@orpc+contract@1.14.0_@opentelemetry+api@1.9.1/node_modules/@orpc/contract/dist/index.mjs"() {
|
|
init_contract_D_dZrO();
|
|
init_contract_D_dZrO();
|
|
init_standard();
|
|
init_dist();
|
|
init_dist();
|
|
init_dist3();
|
|
init_dist3();
|
|
ContractBuilder = class _ContractBuilder extends ContractProcedure {
|
|
constructor(def) {
|
|
super(def);
|
|
this["~orpc"].prefix = def.prefix;
|
|
this["~orpc"].tags = def.tags;
|
|
}
|
|
/**
|
|
* Sets or overrides the initial meta.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/metadata Metadata Docs}
|
|
*/
|
|
$meta(initialMeta) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
meta: initialMeta
|
|
});
|
|
}
|
|
/**
|
|
* Sets or overrides the initial route.
|
|
* This option is typically relevant when integrating with OpenAPI.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/openapi/routing OpenAPI Routing Docs}
|
|
* @see {@link https://orpc.dev/docs/openapi/input-output-structure OpenAPI Input/Output Structure Docs}
|
|
*/
|
|
$route(initialRoute) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
route: initialRoute
|
|
});
|
|
}
|
|
/**
|
|
* Sets or overrides the initial input schema.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/procedure#initial-configuration Initial Procedure Configuration Docs}
|
|
*/
|
|
$input(initialInputSchema) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
inputSchema: initialInputSchema
|
|
});
|
|
}
|
|
/**
|
|
* Adds type-safe custom errors to the contract.
|
|
* The provided errors are spared-merged with any existing errors in the contract.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/error-handling#type%E2%80%90safe-error-handling Type-Safe Error Handling Docs}
|
|
*/
|
|
errors(errors) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
errorMap: mergeErrorMap(this["~orpc"].errorMap, errors)
|
|
});
|
|
}
|
|
/**
|
|
* Sets or updates the metadata for the contract.
|
|
* The provided metadata is spared-merged with any existing metadata in the contract.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/metadata Metadata Docs}
|
|
*/
|
|
meta(meta3) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
meta: mergeMeta(this["~orpc"].meta, meta3)
|
|
});
|
|
}
|
|
/**
|
|
* Sets or updates the route definition for the contract.
|
|
* The provided route is spared-merged with any existing route in the contract.
|
|
* This option is typically relevant when integrating with OpenAPI.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/openapi/routing OpenAPI Routing Docs}
|
|
* @see {@link https://orpc.dev/docs/openapi/input-output-structure OpenAPI Input/Output Structure Docs}
|
|
*/
|
|
route(route) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
route: mergeRoute(this["~orpc"].route, route)
|
|
});
|
|
}
|
|
/**
|
|
* Defines the input validation schema for the contract.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/procedure#input-output-validation Input Validation Docs}
|
|
*/
|
|
input(schema) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
inputSchema: schema
|
|
});
|
|
}
|
|
/**
|
|
* Defines the output validation schema for the contract.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/procedure#input-output-validation Output Validation Docs}
|
|
*/
|
|
output(schema) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
outputSchema: schema
|
|
});
|
|
}
|
|
/**
|
|
* Prefixes all procedures in the contract router.
|
|
* The provided prefix is post-appended to any existing router prefix.
|
|
*
|
|
* @note This option does not affect procedures that do not define a path in their route definition.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/openapi/routing#route-prefixes OpenAPI Route Prefixes Docs}
|
|
*/
|
|
prefix(prefix) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
prefix: mergePrefix(this["~orpc"].prefix, prefix)
|
|
});
|
|
}
|
|
/**
|
|
* Adds tags to all procedures in the contract router.
|
|
* This helpful when you want to group procedures together in the OpenAPI specification.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/openapi/openapi-specification#operation-metadata OpenAPI Operation Metadata Docs}
|
|
*/
|
|
tag(...tags) {
|
|
return new _ContractBuilder({
|
|
...this["~orpc"],
|
|
tags: mergeTags(this["~orpc"].tags, tags)
|
|
});
|
|
}
|
|
/**
|
|
* Applies all of the previously defined options to the specified contract router.
|
|
*
|
|
* @see {@link https://orpc.dev/docs/router#extending-router Extending Router Docs}
|
|
*/
|
|
router(router) {
|
|
return enhanceContractRouter(router, this["~orpc"]);
|
|
}
|
|
};
|
|
oc = new ContractBuilder({
|
|
errorMap: {},
|
|
route: {},
|
|
meta: {}
|
|
});
|
|
EVENT_ITERATOR_DETAILS_SYMBOL = Symbol("ORPC_EVENT_ITERATOR_DETAILS");
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/contract.ts
|
|
var taskQueueContract;
|
|
var init_contract = __esm({
|
|
"../../packages/task-queue/src/contract.ts"() {
|
|
"use strict";
|
|
init_dist5();
|
|
init_schemas3();
|
|
taskQueueContract = {
|
|
add: oc.input(AddInputSchema).output(AddOutputSchema),
|
|
get: oc.input(TaskIdInputSchema).output(TaskSchema),
|
|
list: oc.input(ListInputSchema).output(ListOutputSchema),
|
|
cancel: oc.input(TaskIdInputSchema).output(VoidOutputSchema),
|
|
pause: oc.input(PauseInputSchema).output(VoidOutputSchema),
|
|
resume: oc.input(TaskIdInputSchema).output(VoidOutputSchema),
|
|
retry: oc.input(RetryInputSchema).output(VoidOutputSchema),
|
|
setMaxConcurrency: oc.input(SetMaxConcurrencyInputSchema).output(VoidOutputSchema),
|
|
setMaxPerGroup: oc.input(SetMaxPerGroupInputSchema).output(VoidOutputSchema),
|
|
removeFromHistory: oc.input(TaskIdInputSchema).output(VoidOutputSchema),
|
|
stats: oc.output(StatsOutputSchema)
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/fsm/index.ts
|
|
function isLegalTransition(from, to) {
|
|
return LEGAL_TRANSITIONS[from]?.has(to) ?? false;
|
|
}
|
|
function transition(task, to, ctx) {
|
|
const from = task.status;
|
|
if (TERMINAL_STATUSES.has(from) && from !== to) {
|
|
}
|
|
if (!isLegalTransition(from, to)) {
|
|
throw new IllegalTransitionError(from, to, ctx.trigger);
|
|
}
|
|
const now = ctx.now ?? Date.now();
|
|
const next = {
|
|
...task,
|
|
prevStatus: from,
|
|
status: to,
|
|
statusReason: ctx.reason ?? null,
|
|
enteredStatusAt: now,
|
|
updatedAt: now
|
|
};
|
|
switch (to) {
|
|
case "running":
|
|
if (from === "queued" && task.attempt === 0) {
|
|
next.attempt = 1;
|
|
}
|
|
break;
|
|
case "queued":
|
|
if (ctx.trigger === "retry-tick") {
|
|
next.attempt = task.attempt + 1;
|
|
next.nextRetryAt = null;
|
|
} else if (ctx.trigger === "retry-manual") {
|
|
next.attempt = 0;
|
|
next.lastError = null;
|
|
next.nextRetryAt = null;
|
|
} else if (ctx.trigger === "requeue") {
|
|
next.lastError = null;
|
|
next.nextRetryAt = null;
|
|
} else if (ctx.trigger === "resume") {
|
|
next.nextRetryAt = null;
|
|
}
|
|
break;
|
|
case "completed": {
|
|
if (!ctx.output) {
|
|
throw new IllegalTransitionError(
|
|
from,
|
|
to,
|
|
"finalize-success requires output"
|
|
);
|
|
}
|
|
if (ctx.output.size <= 0) {
|
|
throw new IllegalTransitionError(
|
|
from,
|
|
to,
|
|
"completed requires output.size > 0"
|
|
);
|
|
}
|
|
next.output = ctx.output;
|
|
next.lastError = null;
|
|
next.pid = null;
|
|
next.pidStartedAt = null;
|
|
break;
|
|
}
|
|
case "failed": {
|
|
if (ctx.error) next.lastError = ctx.error;
|
|
next.pid = null;
|
|
next.pidStartedAt = null;
|
|
break;
|
|
}
|
|
case "cancelled": {
|
|
next.pid = null;
|
|
next.pidStartedAt = null;
|
|
break;
|
|
}
|
|
case "retry-scheduled": {
|
|
if (ctx.nextRetryAt == null || ctx.nextRetryAt <= 0) {
|
|
throw new IllegalTransitionError(
|
|
from,
|
|
to,
|
|
"retry-scheduled requires nextRetryAt"
|
|
);
|
|
}
|
|
if (ctx.error) next.lastError = ctx.error;
|
|
next.nextRetryAt = ctx.nextRetryAt;
|
|
next.pid = null;
|
|
next.pidStartedAt = null;
|
|
break;
|
|
}
|
|
case "paused": {
|
|
next.pid = null;
|
|
next.pidStartedAt = null;
|
|
break;
|
|
}
|
|
case "processing":
|
|
break;
|
|
}
|
|
return next;
|
|
}
|
|
var IllegalTransitionError, LEGAL_TRANSITIONS;
|
|
var init_fsm = __esm({
|
|
"../../packages/task-queue/src/fsm/index.ts"() {
|
|
"use strict";
|
|
init_types();
|
|
IllegalTransitionError = class extends Error {
|
|
from;
|
|
to;
|
|
reason;
|
|
constructor(from, to, reason) {
|
|
super(
|
|
`IllegalTransition: ${from} -> ${to}${reason ? ` (${reason})` : ""}`
|
|
);
|
|
this.name = "IllegalTransitionError";
|
|
this.from = from;
|
|
this.to = to;
|
|
this.reason = reason;
|
|
}
|
|
};
|
|
LEGAL_TRANSITIONS = {
|
|
queued: /* @__PURE__ */ new Set(["running", "paused", "cancelled"]),
|
|
running: /* @__PURE__ */ new Set([
|
|
"processing",
|
|
"completed",
|
|
"retry-scheduled",
|
|
"failed",
|
|
"paused",
|
|
"cancelled"
|
|
]),
|
|
processing: /* @__PURE__ */ new Set([
|
|
"completed",
|
|
"retry-scheduled",
|
|
"failed",
|
|
"paused",
|
|
"cancelled"
|
|
]),
|
|
paused: /* @__PURE__ */ new Set(["queued", "cancelled", "failed"]),
|
|
"retry-scheduled": /* @__PURE__ */ new Set(["queued", "paused", "cancelled"]),
|
|
failed: /* @__PURE__ */ new Set(["queued"]),
|
|
cancelled: /* @__PURE__ */ new Set(["queued"]),
|
|
completed: /* @__PURE__ */ new Set()
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/classifier/index.ts
|
|
function getRuleForCategory(c) {
|
|
const r = RULE_BY_CATEGORY.get(c);
|
|
if (!r) throw new Error(`no rule for category ${c}`);
|
|
return r;
|
|
}
|
|
function sanitizeOutput(s) {
|
|
let out = s;
|
|
for (const re of SECRET_PATTERNS) {
|
|
out = out.replace(re, (_m, p1, _p2) => {
|
|
return typeof p1 === "string" ? `${p1}: <redacted>` : "<redacted>";
|
|
});
|
|
}
|
|
return out;
|
|
}
|
|
function takeStderrTail(s, bytes = STDERR_TAIL_BYTES) {
|
|
if (Buffer.byteLength(s, "utf8") <= bytes) return s;
|
|
while (Buffer.byteLength(s, "utf8") > bytes) {
|
|
s = s.slice(Math.floor(s.length * 0.1));
|
|
}
|
|
return s;
|
|
}
|
|
function parseRetryAfter(header) {
|
|
if (!header) return null;
|
|
const trimmed = header.trim();
|
|
if (!trimmed) return null;
|
|
if (/^\d+$/.test(trimmed)) {
|
|
const secs = Number.parseInt(trimmed, 10);
|
|
if (Number.isFinite(secs) && secs >= 0) return secs * 1e3;
|
|
return null;
|
|
}
|
|
const t = Date.parse(trimmed);
|
|
if (Number.isNaN(t)) return null;
|
|
const delta = t - Date.now();
|
|
return delta > 0 ? delta : 0;
|
|
}
|
|
function classify(input) {
|
|
const tail = takeStderrTail(input.stderr ?? "");
|
|
const sanitizedTail = sanitizeOutput(tail);
|
|
for (const rule of CLASSIFIER_RULES) {
|
|
if (!rule.regex) continue;
|
|
if (rule.regex.test(tail) || rule.exitCodeHint != null && input.exitCode === rule.exitCodeHint) {
|
|
return buildError(rule, sanitizedTail, input);
|
|
}
|
|
}
|
|
const unknown2 = getRuleForCategory("unknown");
|
|
return buildError(unknown2, sanitizedTail, input);
|
|
}
|
|
function virtualError(category, rawMessage) {
|
|
const rule = getRuleForCategory(category);
|
|
return {
|
|
category,
|
|
exitCode: null,
|
|
rawMessage,
|
|
uiMessageKey: rule.uiMessageKey,
|
|
uiActionHints: rule.uiActionHints,
|
|
retryable: rule.defaultMaxAttempts > 0,
|
|
suggestedRetryAfterMs: rule.defaultBackoffMs
|
|
};
|
|
}
|
|
function buildError(rule, sanitizedTail, input) {
|
|
let suggestedRetryAfterMs = rule.defaultBackoffMs;
|
|
if (rule.category === "http-429") {
|
|
const fromInput = parseRetryAfter(input.retryAfterHeader ?? null);
|
|
if (fromInput != null) {
|
|
suggestedRetryAfterMs = fromInput;
|
|
} else {
|
|
const m = sanitizedTail.match(RETRY_AFTER_REGEX);
|
|
if (m && m[1]) {
|
|
const fromTail = parseRetryAfter(m[1]);
|
|
if (fromTail != null) suggestedRetryAfterMs = fromTail;
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
category: rule.category,
|
|
exitCode: input.exitCode ?? null,
|
|
rawMessage: sanitizedTail,
|
|
uiMessageKey: rule.uiMessageKey,
|
|
uiActionHints: rule.uiActionHints,
|
|
retryable: rule.defaultMaxAttempts > 0,
|
|
suggestedRetryAfterMs
|
|
};
|
|
}
|
|
function defaultMaxAttempts(c) {
|
|
return getRuleForCategory(c).defaultMaxAttempts;
|
|
}
|
|
var CLASSIFIER_RULES, RULE_BY_CATEGORY, STDERR_TAIL_BYTES, SECRET_PATTERNS, RETRY_AFTER_REGEX;
|
|
var init_classifier = __esm({
|
|
"../../packages/task-queue/src/classifier/index.ts"() {
|
|
"use strict";
|
|
CLASSIFIER_RULES = [
|
|
{
|
|
category: "http-429",
|
|
regex: /HTTP Error 429|Too Many Requests/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 3,
|
|
defaultBackoffMs: 3e4,
|
|
uiActionHints: ["retry-later"],
|
|
uiMessageKey: "task.error.http429"
|
|
},
|
|
{
|
|
category: "auth-required",
|
|
regex: /Sign in to confirm|Login required|Private video|members-only|cookies are no longer valid/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["import-cookies"],
|
|
uiMessageKey: "task.error.authRequired"
|
|
},
|
|
{
|
|
category: "geo-blocked",
|
|
regex: /not available in your country|geo-restricted|geo restricted|content isn't available in your country/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["set-proxy"],
|
|
uiMessageKey: "task.error.geoBlocked"
|
|
},
|
|
{
|
|
category: "not-found",
|
|
regex: /HTTP Error 404|Video unavailable|This video has been removed|Requested format is not available/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["remove-task"],
|
|
uiMessageKey: "task.error.notFound"
|
|
},
|
|
{
|
|
category: "disk-full",
|
|
regex: /ENOSPC|No space left on device/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["open-folder", "free-disk"],
|
|
uiMessageKey: "task.error.diskFull"
|
|
},
|
|
{
|
|
category: "permission-denied",
|
|
regex: /EACCES|EPERM|Permission denied/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["choose-folder"],
|
|
uiMessageKey: "task.error.permissionDenied"
|
|
},
|
|
{
|
|
category: "binary-missing",
|
|
regex: /yt-dlp.*not found|ffmpeg.*not found|ffprobe.*not found/i,
|
|
exitCodeHint: 127,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["report-bug"],
|
|
uiMessageKey: "task.error.binaryMissing"
|
|
},
|
|
{
|
|
category: "ffmpeg",
|
|
regex: /ffmpeg|Postprocessing|Conversion failed/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 1,
|
|
defaultBackoffMs: 5e3,
|
|
uiActionHints: ["report-bug"],
|
|
uiMessageKey: "task.error.ffmpeg"
|
|
},
|
|
{
|
|
category: "network-transient",
|
|
regex: /socket hang up|ECONNRESET|ECONNREFUSED|getaddrinfo ENOTFOUND|Connection timed out|HTTP Error 5\d\d|Read timed out/i,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 5,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["retry"],
|
|
uiMessageKey: "task.error.networkTransient"
|
|
},
|
|
// Virtual rules — produced by Watchdog/cancel; never matched against stderr.
|
|
{
|
|
category: "stalled",
|
|
regex: null,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 3,
|
|
defaultBackoffMs: 5e3,
|
|
uiActionHints: ["retry"],
|
|
uiMessageKey: "task.error.stalled"
|
|
},
|
|
{
|
|
category: "cancelled-by-user",
|
|
regex: null,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: [],
|
|
uiMessageKey: "task.error.cancelledByUser"
|
|
},
|
|
{
|
|
// Virtual: produced by `processing → completed` guard when the output
|
|
// file is missing or zero-byte. Non-retryable by default.
|
|
category: "output-missing",
|
|
regex: null,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 0,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["report-bug"],
|
|
uiMessageKey: "task.error.outputMissing"
|
|
},
|
|
{
|
|
category: "unknown",
|
|
regex: null,
|
|
exitCodeHint: null,
|
|
defaultMaxAttempts: 1,
|
|
defaultBackoffMs: null,
|
|
uiActionHints: ["retry", "report-bug"],
|
|
uiMessageKey: "task.error.unknown"
|
|
}
|
|
];
|
|
RULE_BY_CATEGORY = new Map(
|
|
CLASSIFIER_RULES.map((r) => [r.category, r])
|
|
);
|
|
STDERR_TAIL_BYTES = 8 * 1024;
|
|
SECRET_PATTERNS = [
|
|
// Authorization / cookie / api key headers
|
|
/(authorization|cookie|x-api-key|x-auth-token):\s*([^\r\n]+)/gi,
|
|
// Inline cookies/tokens that yt-dlp may print as flags
|
|
/(--cookies-from-browser\s+\S+\s+--cookies\s+\S+)/gi,
|
|
/token=([A-Za-z0-9_\-.]+)/gi,
|
|
/secret=([A-Za-z0-9_\-.]+)/gi,
|
|
/password=([^\s&]+)/gi
|
|
];
|
|
RETRY_AFTER_REGEX = /Retry-After:\s*([^\r\n]+)/i;
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/events/index.ts
|
|
var EventBus;
|
|
var init_events = __esm({
|
|
"../../packages/task-queue/src/events/index.ts"() {
|
|
"use strict";
|
|
EventBus = class {
|
|
listeners = /* @__PURE__ */ new Map();
|
|
subscribe(listener) {
|
|
return this.subscribeFiltered("*", listener);
|
|
}
|
|
on(type, listener) {
|
|
return this.subscribeFiltered(type, listener);
|
|
}
|
|
emit(event) {
|
|
const typed = this.listeners.get(event.type);
|
|
if (typed) {
|
|
for (const l of typed) this.safeCall(l, event);
|
|
}
|
|
const wildcard = this.listeners.get("*");
|
|
if (wildcard) {
|
|
for (const l of wildcard) this.safeCall(l, event);
|
|
}
|
|
}
|
|
/** Number of subscribers; for tests/diagnostics. */
|
|
size() {
|
|
let n = 0;
|
|
for (const set2 of this.listeners.values()) n += set2.size;
|
|
return n;
|
|
}
|
|
subscribeFiltered(key, listener) {
|
|
let set2 = this.listeners.get(key);
|
|
if (!set2) {
|
|
set2 = /* @__PURE__ */ new Set();
|
|
this.listeners.set(key, set2);
|
|
}
|
|
set2.add(listener);
|
|
return () => {
|
|
set2.delete(listener);
|
|
if (set2.size === 0) this.listeners.delete(key);
|
|
};
|
|
}
|
|
safeCall(listener, event) {
|
|
try {
|
|
listener(event);
|
|
} catch (err) {
|
|
console.error("[task-queue] listener threw", err);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/util/async-mutex.ts
|
|
var AsyncMutex;
|
|
var init_async_mutex = __esm({
|
|
"../../packages/task-queue/src/util/async-mutex.ts"() {
|
|
"use strict";
|
|
AsyncMutex = class {
|
|
locked = false;
|
|
waiters = [];
|
|
async acquire() {
|
|
if (!this.locked) {
|
|
this.locked = true;
|
|
return () => this.release();
|
|
}
|
|
await new Promise((resolve2) => this.waiters.push(resolve2));
|
|
this.locked = true;
|
|
return () => this.release();
|
|
}
|
|
async runExclusive(fn) {
|
|
const release = await this.acquire();
|
|
try {
|
|
return await fn();
|
|
} finally {
|
|
release();
|
|
}
|
|
}
|
|
release() {
|
|
if (!this.locked) {
|
|
throw new Error("AsyncMutex: release called while not locked");
|
|
}
|
|
this.locked = false;
|
|
const next = this.waiters.shift();
|
|
if (next) next();
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/util/min-heap.ts
|
|
var MinHeap;
|
|
var init_min_heap = __esm({
|
|
"../../packages/task-queue/src/util/min-heap.ts"() {
|
|
"use strict";
|
|
MinHeap = class {
|
|
constructor(cmp) {
|
|
this.cmp = cmp;
|
|
}
|
|
data = [];
|
|
size() {
|
|
return this.data.length;
|
|
}
|
|
peek() {
|
|
return this.data[0];
|
|
}
|
|
push(item) {
|
|
this.data.push(item);
|
|
this.siftUp(this.data.length - 1);
|
|
}
|
|
pop() {
|
|
if (this.data.length === 0) return void 0;
|
|
const top = this.data[0];
|
|
const last = this.data.pop();
|
|
if (this.data.length > 0) {
|
|
this.data[0] = last;
|
|
this.siftDown(0);
|
|
}
|
|
return top;
|
|
}
|
|
/**
|
|
* Remove the first element matching `pred`. O(n). Used for cancel/pause
|
|
* which are rare relative to dispatch.
|
|
*/
|
|
remove(pred) {
|
|
const idx = this.data.findIndex(pred);
|
|
if (idx < 0) return void 0;
|
|
const removed = this.data[idx];
|
|
const last = this.data.pop();
|
|
if (idx < this.data.length) {
|
|
this.data[idx] = last;
|
|
this.siftDown(idx);
|
|
this.siftUp(idx);
|
|
}
|
|
return removed;
|
|
}
|
|
toArray() {
|
|
return this.data;
|
|
}
|
|
siftUp(idx) {
|
|
let i = idx;
|
|
while (i > 0) {
|
|
const parent = i - 1 >> 1;
|
|
if (this.cmp(this.data[i], this.data[parent]) >= 0) return;
|
|
[this.data[i], this.data[parent]] = [this.data[parent], this.data[i]];
|
|
i = parent;
|
|
}
|
|
}
|
|
siftDown(idx) {
|
|
const n = this.data.length;
|
|
let i = idx;
|
|
while (true) {
|
|
const l = i * 2 + 1;
|
|
const r = i * 2 + 2;
|
|
let smallest = i;
|
|
if (l < n && this.cmp(this.data[l], this.data[smallest]) < 0) smallest = l;
|
|
if (r < n && this.cmp(this.data[r], this.data[smallest]) < 0) smallest = r;
|
|
if (smallest === i) return;
|
|
[this.data[i], this.data[smallest]] = [
|
|
this.data[smallest],
|
|
this.data[i]
|
|
];
|
|
i = smallest;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/scheduler/scheduler.ts
|
|
var Scheduler;
|
|
var init_scheduler = __esm({
|
|
"../../packages/task-queue/src/scheduler/scheduler.ts"() {
|
|
"use strict";
|
|
init_async_mutex();
|
|
init_min_heap();
|
|
Scheduler = class {
|
|
constructor(opts) {
|
|
this.opts = opts;
|
|
this.maxConcurrency = opts.maxConcurrency;
|
|
this.defaultMaxPerGroup = opts.defaultMaxPerGroup ?? null;
|
|
}
|
|
readyHeap = new MinHeap(
|
|
(a, b) => a.priority !== b.priority ? a.priority - b.priority : a.seq - b.seq
|
|
);
|
|
/** taskId → 1 currently consuming a slot. */
|
|
running = /* @__PURE__ */ new Set();
|
|
/** groupKey → number of tasks currently consuming a slot. */
|
|
perGroupRunning = /* @__PURE__ */ new Map();
|
|
/** groupKey → explicit per-group cap. Null means unlimited. */
|
|
perGroupCap = /* @__PURE__ */ new Map();
|
|
mutex = new AsyncMutex();
|
|
seqCounter = 0;
|
|
maxConcurrency;
|
|
defaultMaxPerGroup;
|
|
// ─────────────── Public API ───────────────
|
|
async enqueue(taskId, priority) {
|
|
await this.mutex.runExclusive(() => {
|
|
this.readyHeap.push({
|
|
taskId,
|
|
priority,
|
|
seq: ++this.seqCounter
|
|
});
|
|
});
|
|
await this.tryDispatch();
|
|
}
|
|
/** Removes a task from the ready heap (does not touch running set). */
|
|
async dequeue(taskId) {
|
|
return this.mutex.runExclusive(() => {
|
|
const removed = this.readyHeap.remove((e) => e.taskId === taskId);
|
|
return removed != null;
|
|
});
|
|
}
|
|
/**
|
|
* Marker that a previously-dispatched task has reached a terminal/yielding
|
|
* status (completed/failed/cancelled/paused/retry-scheduled). Releases its
|
|
* slot and bumps dispatch.
|
|
*/
|
|
async releaseSlot(taskId) {
|
|
await this.mutex.runExclusive(() => {
|
|
if (!this.running.has(taskId)) return;
|
|
this.running.delete(taskId);
|
|
const t = this.opts.getTask(taskId);
|
|
const groupKey = t?.groupKey;
|
|
if (groupKey) this.decGroup(groupKey);
|
|
});
|
|
await this.tryDispatch();
|
|
}
|
|
async setMaxConcurrency(n) {
|
|
if (!Number.isInteger(n) || n < 1) {
|
|
throw new Error(`maxConcurrency must be \u2265 1 integer, got ${n}`);
|
|
}
|
|
const toDemote = [];
|
|
await this.mutex.runExclusive(() => {
|
|
this.maxConcurrency = n;
|
|
while (this.running.size > this.maxConcurrency) {
|
|
const victim = this.pickDemoteVictim();
|
|
if (!victim) break;
|
|
toDemote.push(victim);
|
|
this.running.delete(victim);
|
|
const t = this.opts.getTask(victim);
|
|
if (t?.groupKey) this.decGroup(t.groupKey);
|
|
}
|
|
});
|
|
for (const id of toDemote) {
|
|
try {
|
|
await this.opts.demote(id);
|
|
} catch (err) {
|
|
console.error("[task-queue] demote callback threw", err);
|
|
}
|
|
}
|
|
void this.tryDispatch();
|
|
}
|
|
async setMaxPerGroup(groupKey, n) {
|
|
await this.mutex.runExclusive(() => {
|
|
if (n == null) {
|
|
this.perGroupCap.delete(groupKey);
|
|
} else {
|
|
if (!Number.isInteger(n) || n < 1) {
|
|
throw new Error(`maxPerGroup must be null or \u2265 1 integer, got ${n}`);
|
|
}
|
|
this.perGroupCap.set(groupKey, n);
|
|
}
|
|
});
|
|
void this.tryDispatch();
|
|
}
|
|
setDefaultMaxPerGroup(n) {
|
|
this.defaultMaxPerGroup = n;
|
|
}
|
|
stats() {
|
|
const perGroup = {};
|
|
for (const [k, v] of this.perGroupRunning) perGroup[k] = v;
|
|
return {
|
|
running: this.running.size,
|
|
queued: this.readyHeap.size(),
|
|
capacity: this.maxConcurrency,
|
|
perGroup
|
|
};
|
|
}
|
|
// ─────────────── Internals ───────────────
|
|
/**
|
|
* Tries to fill open slots. Held under the mutex so two concurrent triggers
|
|
* cannot both consume the same slot. The dispatch callback is invoked
|
|
* outside the mutex (callbacks may do FSM transitions and IO).
|
|
*/
|
|
async tryDispatch() {
|
|
const toDispatch = [];
|
|
await this.mutex.runExclusive(() => {
|
|
while (this.running.size < this.maxConcurrency && this.readyHeap.size() > 0) {
|
|
const candidate = this.popEligible();
|
|
if (!candidate) break;
|
|
const t = this.opts.getTask(candidate.taskId);
|
|
if (!t) continue;
|
|
this.running.add(candidate.taskId);
|
|
this.incGroup(t.groupKey);
|
|
toDispatch.push(candidate.taskId);
|
|
}
|
|
});
|
|
for (const id of toDispatch) {
|
|
let ok2 = false;
|
|
try {
|
|
ok2 = await this.opts.dispatch(id);
|
|
} catch (err) {
|
|
console.error("[task-queue] dispatch callback threw", err);
|
|
}
|
|
if (!ok2) {
|
|
await this.mutex.runExclusive(() => {
|
|
if (this.running.delete(id)) {
|
|
const t = this.opts.getTask(id);
|
|
if (t?.groupKey) this.decGroup(t.groupKey);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Pop the next entry that satisfies the per-group cap. Skipped entries are
|
|
* stashed and re-pushed at the end of the call so we do not lose them.
|
|
*/
|
|
popEligible() {
|
|
const skipped = [];
|
|
let chosen;
|
|
while (this.readyHeap.size() > 0) {
|
|
const top = this.readyHeap.pop();
|
|
const task = this.opts.getTask(top.taskId);
|
|
if (!task) {
|
|
continue;
|
|
}
|
|
if (this.canRunInGroup(task.groupKey)) {
|
|
chosen = top;
|
|
break;
|
|
}
|
|
skipped.push(top);
|
|
}
|
|
for (const s of skipped) this.readyHeap.push(s);
|
|
return chosen;
|
|
}
|
|
canRunInGroup(groupKey) {
|
|
const cap = this.perGroupCap.has(groupKey) ? this.perGroupCap.get(groupKey) : this.defaultMaxPerGroup;
|
|
if (cap == null) return true;
|
|
const n = this.perGroupRunning.get(groupKey) ?? 0;
|
|
return n < cap;
|
|
}
|
|
pickDemoteVictim() {
|
|
let victim = null;
|
|
let victimPri = -1;
|
|
for (const id of this.running) {
|
|
const t = this.opts.getTask(id);
|
|
if (!t) continue;
|
|
if (t.priority > victimPri) {
|
|
victimPri = t.priority;
|
|
victim = id;
|
|
}
|
|
}
|
|
return victim;
|
|
}
|
|
incGroup(groupKey) {
|
|
this.perGroupRunning.set(groupKey, (this.perGroupRunning.get(groupKey) ?? 0) + 1);
|
|
}
|
|
decGroup(groupKey) {
|
|
const cur = this.perGroupRunning.get(groupKey) ?? 0;
|
|
if (cur <= 1) this.perGroupRunning.delete(groupKey);
|
|
else this.perGroupRunning.set(groupKey, cur - 1);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/scheduler/retry-scheduler.ts
|
|
function computeBackoffMs(attempt, suggestedMs, rng = Math.random) {
|
|
if (suggestedMs != null && suggestedMs >= 0) return suggestedMs;
|
|
const base = 2e3;
|
|
const cap = 6e4;
|
|
const exp = Math.min(cap, base * 2 ** Math.max(0, attempt));
|
|
return Math.floor(rng() * exp);
|
|
}
|
|
var RetryScheduler;
|
|
var init_retry_scheduler = __esm({
|
|
"../../packages/task-queue/src/scheduler/retry-scheduler.ts"() {
|
|
"use strict";
|
|
init_min_heap();
|
|
RetryScheduler = class {
|
|
heap = new MinHeap(
|
|
(a, b) => a.nextRetryAt !== b.nextRetryAt ? a.nextRetryAt - b.nextRetryAt : a.seq - b.seq
|
|
);
|
|
timer = null;
|
|
seqCounter = 0;
|
|
clock;
|
|
setTimer;
|
|
clearTimer;
|
|
onDue;
|
|
constructor(opts) {
|
|
this.clock = opts.clock ?? Date.now;
|
|
this.setTimer = opts.setTimer ?? ((fn, ms) => setTimeout(fn, ms));
|
|
this.clearTimer = opts.clearTimer ?? ((h) => clearTimeout(h));
|
|
this.onDue = opts.onDue;
|
|
}
|
|
size() {
|
|
return this.heap.size();
|
|
}
|
|
/**
|
|
* Add (or re-add — `enqueue` first removes any existing entry for the same
|
|
* id, since a task can only be retry-scheduled once at a time).
|
|
*/
|
|
enqueue(taskId, nextRetryAt) {
|
|
this.heap.remove((it) => it.taskId === taskId);
|
|
this.heap.push({ taskId, nextRetryAt, seq: ++this.seqCounter });
|
|
this.rearm();
|
|
}
|
|
remove(taskId) {
|
|
const removed = this.heap.remove((it) => it.taskId === taskId);
|
|
this.rearm();
|
|
return removed != null;
|
|
}
|
|
/**
|
|
* Drain all items whose nextRetryAt <= now. Public for tests; in production
|
|
* the timer fires this. Bumping a per-item handler error is logged and the
|
|
* handler is retried on the next tick.
|
|
*/
|
|
async tick() {
|
|
const now = this.clock();
|
|
while (true) {
|
|
const top = this.heap.peek();
|
|
if (!top || top.nextRetryAt > now) break;
|
|
const item = this.heap.pop();
|
|
try {
|
|
await this.onDue(item.taskId, now);
|
|
} catch (err) {
|
|
console.error("[task-queue] retry tick handler threw", err);
|
|
this.heap.push({
|
|
taskId: item.taskId,
|
|
nextRetryAt: now + 1e3,
|
|
seq: ++this.seqCounter
|
|
});
|
|
}
|
|
}
|
|
this.rearm();
|
|
}
|
|
/** Cancel any pending timer; tests use this between cases. */
|
|
stop() {
|
|
if (this.timer != null) {
|
|
this.clearTimer(this.timer);
|
|
this.timer = null;
|
|
}
|
|
}
|
|
rearm() {
|
|
if (this.timer != null) {
|
|
this.clearTimer(this.timer);
|
|
this.timer = null;
|
|
}
|
|
const top = this.heap.peek();
|
|
if (!top) return;
|
|
const wait = Math.max(0, top.nextRetryAt - this.clock());
|
|
this.timer = this.setTimer(() => {
|
|
this.timer = null;
|
|
void this.tick();
|
|
}, wait);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/scheduler/index.ts
|
|
var init_scheduler2 = __esm({
|
|
"../../packages/task-queue/src/scheduler/index.ts"() {
|
|
"use strict";
|
|
init_scheduler();
|
|
init_retry_scheduler();
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/store/index.ts
|
|
var STATUSES, TaskStore;
|
|
var init_store = __esm({
|
|
"../../packages/task-queue/src/store/index.ts"() {
|
|
"use strict";
|
|
STATUSES = [
|
|
"queued",
|
|
"running",
|
|
"processing",
|
|
"paused",
|
|
"retry-scheduled",
|
|
"completed",
|
|
"failed",
|
|
"cancelled"
|
|
];
|
|
TaskStore = class {
|
|
byId = /* @__PURE__ */ new Map();
|
|
byGroup = /* @__PURE__ */ new Map();
|
|
byStatus = /* @__PURE__ */ new Map();
|
|
constructor() {
|
|
for (const s of STATUSES) this.byStatus.set(s, /* @__PURE__ */ new Set());
|
|
}
|
|
has(id) {
|
|
return this.byId.has(id);
|
|
}
|
|
get(id) {
|
|
return this.byId.get(id);
|
|
}
|
|
/** Insert a new task. Throws if id already exists. */
|
|
insert(task) {
|
|
if (this.byId.has(task.id)) {
|
|
throw new Error(`TaskStore: duplicate id ${task.id}`);
|
|
}
|
|
this.byId.set(task.id, task);
|
|
this.bucket(this.byGroup, task.groupKey).add(task.id);
|
|
this.byStatus.get(task.status).add(task.id);
|
|
}
|
|
/**
|
|
* Replace the existing record. Maintains index consistency for status and
|
|
* groupKey transitions. Throws if the id is missing.
|
|
*/
|
|
update(next) {
|
|
const prev = this.byId.get(next.id);
|
|
if (!prev) throw new Error(`TaskStore: missing id ${next.id}`);
|
|
if (prev.status !== next.status) {
|
|
this.byStatus.get(prev.status)?.delete(prev.id);
|
|
this.byStatus.get(next.status)?.add(next.id);
|
|
}
|
|
if (prev.groupKey !== next.groupKey) {
|
|
const oldBucket = this.byGroup.get(prev.groupKey);
|
|
oldBucket?.delete(prev.id);
|
|
if (oldBucket && oldBucket.size === 0) this.byGroup.delete(prev.groupKey);
|
|
this.bucket(this.byGroup, next.groupKey).add(next.id);
|
|
}
|
|
this.byId.set(next.id, next);
|
|
}
|
|
/** Remove a record (used by removeFromHistory). */
|
|
remove(id) {
|
|
const prev = this.byId.get(id);
|
|
if (!prev) return false;
|
|
this.byId.delete(id);
|
|
this.byStatus.get(prev.status)?.delete(id);
|
|
const groupSet = this.byGroup.get(prev.groupKey);
|
|
groupSet?.delete(id);
|
|
if (groupSet && groupSet.size === 0) this.byGroup.delete(prev.groupKey);
|
|
return true;
|
|
}
|
|
snapshot(id) {
|
|
const t = this.byId.get(id);
|
|
return t ? { task: t } : void 0;
|
|
}
|
|
list(opts) {
|
|
let candidates;
|
|
if (opts?.status) {
|
|
candidates = this.byStatus.get(opts.status) ?? [];
|
|
} else if (opts?.groupKey) {
|
|
candidates = this.byGroup.get(opts.groupKey) ?? [];
|
|
} else {
|
|
candidates = this.byId.keys();
|
|
}
|
|
const all = [];
|
|
for (const id of candidates) {
|
|
const t = this.byId.get(id);
|
|
if (!t) continue;
|
|
if (opts?.groupKey && t.groupKey !== opts.groupKey) continue;
|
|
if (opts?.parentId && t.parentId !== opts.parentId) continue;
|
|
all.push(t);
|
|
}
|
|
all.sort((a, b) => {
|
|
if (a.createdAt !== b.createdAt) return a.createdAt - b.createdAt;
|
|
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
});
|
|
let startIdx = 0;
|
|
if (opts?.cursor) {
|
|
startIdx = all.findIndex((t) => t.id === opts.cursor);
|
|
startIdx = startIdx < 0 ? 0 : startIdx + 1;
|
|
}
|
|
const limit = opts?.limit ?? 100;
|
|
const slice = all.slice(startIdx, startIdx + limit);
|
|
const nextCursor = startIdx + slice.length < all.length && slice.length > 0 ? slice[slice.length - 1].id : null;
|
|
return { tasks: slice, nextCursor };
|
|
}
|
|
stats(capacity) {
|
|
const byStatus = {
|
|
queued: 0,
|
|
running: 0,
|
|
processing: 0,
|
|
paused: 0,
|
|
"retry-scheduled": 0,
|
|
completed: 0,
|
|
failed: 0,
|
|
cancelled: 0
|
|
};
|
|
for (const s of STATUSES) byStatus[s] = this.byStatus.get(s)?.size ?? 0;
|
|
const perGroup = {};
|
|
for (const [k, set2] of this.byGroup) perGroup[k] = set2.size;
|
|
return {
|
|
total: this.byId.size,
|
|
byStatus,
|
|
running: byStatus.running,
|
|
queued: byStatus.queued,
|
|
capacity,
|
|
perGroup
|
|
};
|
|
}
|
|
size() {
|
|
return this.byId.size;
|
|
}
|
|
bucket(map2, key) {
|
|
let s = map2.get(key);
|
|
if (!s) {
|
|
s = /* @__PURE__ */ new Set();
|
|
map2.set(key, s);
|
|
}
|
|
return s;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/process/pid-start-time.ts
|
|
import { existsSync as existsSync2, readFileSync as readFileSync2, statSync } from "node:fs";
|
|
import { execFileSync } from "node:child_process";
|
|
function setReadPidStartTimeImpl(fn) {
|
|
impl = fn;
|
|
}
|
|
function readPidStartTime(pid) {
|
|
try {
|
|
return impl(pid);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
function defaultImpl(pid) {
|
|
if (process.platform === "linux") return readLinuxStart(pid);
|
|
if (process.platform === "darwin") return readDarwinStart(pid);
|
|
return null;
|
|
}
|
|
function readLinuxStart(pid) {
|
|
const path3 = `/proc/${pid}/stat`;
|
|
if (!existsSync2(path3)) return null;
|
|
const raw = readFileSync2(path3, "utf8");
|
|
const lastParen = raw.lastIndexOf(")");
|
|
if (lastParen < 0) return null;
|
|
const fields = raw.slice(lastParen + 2).split(" ");
|
|
const starttimeTicks = Number.parseInt(fields[19] ?? "", 10);
|
|
if (!Number.isFinite(starttimeTicks)) return null;
|
|
const stat = readFileSync2("/proc/stat", "utf8");
|
|
const btimeMatch = stat.match(/^btime\s+(\d+)/m);
|
|
if (!btimeMatch) return null;
|
|
const btime = Number.parseInt(btimeMatch[1] ?? "", 10);
|
|
const hz = readClockTickRate() ?? 100;
|
|
return (btime + starttimeTicks / hz) * 1e3;
|
|
}
|
|
function readDarwinStart(pid) {
|
|
try {
|
|
const out = execFileSync("ps", ["-o", "lstart=", "-p", String(pid)], {
|
|
stdio: ["ignore", "pipe", "ignore"],
|
|
encoding: "utf8"
|
|
}).trim();
|
|
if (!out) return null;
|
|
const t = Date.parse(out);
|
|
return Number.isNaN(t) ? null : t;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
function readClockTickRate() {
|
|
if (cachedHz !== void 0) return cachedHz;
|
|
try {
|
|
const out = execFileSync("getconf", ["CLK_TCK"], {
|
|
stdio: ["ignore", "pipe", "ignore"],
|
|
encoding: "utf8"
|
|
}).trim();
|
|
const n = Number.parseInt(out, 10);
|
|
cachedHz = Number.isFinite(n) ? n : null;
|
|
} catch {
|
|
cachedHz = null;
|
|
}
|
|
return cachedHz;
|
|
}
|
|
function isPidAlive2(pid) {
|
|
if (process.platform === "linux") return existsSync2(`/proc/${pid}`);
|
|
try {
|
|
process.kill(pid, 0);
|
|
return true;
|
|
} catch (err) {
|
|
const code = err.code;
|
|
return code === "EPERM";
|
|
}
|
|
}
|
|
var impl, cachedHz;
|
|
var init_pid_start_time = __esm({
|
|
"../../packages/task-queue/src/process/pid-start-time.ts"() {
|
|
"use strict";
|
|
impl = defaultImpl;
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/process/registry.ts
|
|
var ProcessRegistry;
|
|
var init_registry = __esm({
|
|
"../../packages/task-queue/src/process/registry.ts"() {
|
|
"use strict";
|
|
init_pid_start_time();
|
|
ProcessRegistry = class {
|
|
constructor(deps) {
|
|
this.deps = deps;
|
|
this.clock = deps.clock ?? Date.now;
|
|
this.kill = deps.kill ?? ((pid, sig) => process.kill(pid, sig));
|
|
this.sleep = deps.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
this.killGracePeriodMs = deps.killGracePeriodMs ?? 1e4;
|
|
}
|
|
handles = /* @__PURE__ */ new Map();
|
|
clock;
|
|
kill;
|
|
sleep;
|
|
killGracePeriodMs;
|
|
/** Record a spawn and append a journal row. */
|
|
async recordSpawn(handle) {
|
|
this.handles.set(this.key(handle.taskId, handle.attemptId), handle);
|
|
await this.deps.persist.appendJournal({
|
|
ts: handle.spawnedAt,
|
|
op: "spawn",
|
|
taskId: handle.taskId,
|
|
attemptId: handle.attemptId,
|
|
pid: handle.pid,
|
|
pidStartedAt: handle.pidStartedAt,
|
|
exitCode: null,
|
|
signal: null
|
|
});
|
|
}
|
|
/** Record a clean close (process exited under its own steam). */
|
|
async recordClose(taskId, attemptId, exitCode, signal) {
|
|
const handle = this.handles.get(this.key(taskId, attemptId));
|
|
this.handles.delete(this.key(taskId, attemptId));
|
|
await this.appendJournal("close", {
|
|
taskId,
|
|
attemptId,
|
|
pid: handle?.pid ?? -1,
|
|
pidStartedAt: handle?.pidStartedAt ?? null,
|
|
exitCode,
|
|
signal
|
|
});
|
|
}
|
|
/** Cancel: SIGTERM → 10s → SIGKILL → journal `killed`. */
|
|
async cancel(taskId, attemptId) {
|
|
const handle = this.handles.get(this.key(taskId, attemptId));
|
|
if (!handle) return;
|
|
try {
|
|
this.kill(handle.pid, "SIGTERM");
|
|
} catch {
|
|
}
|
|
await this.sleep(this.killGracePeriodMs);
|
|
if (isPidAlive2(handle.pid)) {
|
|
try {
|
|
this.kill(handle.pid, "SIGKILL");
|
|
} catch {
|
|
}
|
|
}
|
|
this.handles.delete(this.key(taskId, attemptId));
|
|
await this.appendJournal("killed", {
|
|
taskId,
|
|
attemptId,
|
|
pid: handle.pid,
|
|
pidStartedAt: handle.pidStartedAt,
|
|
exitCode: null,
|
|
signal: "SIGKILL"
|
|
});
|
|
}
|
|
/**
|
|
* Walk the journal for unclosed spawns. For each, verify the same process
|
|
* is still alive (pid + pidStartedAt match). If yes → kill it. Either way,
|
|
* append a `killed` row so the journal is reconciled.
|
|
*
|
|
* Returns the list of taskIds whose attempts the orchestrator must
|
|
* re-classify (typically: transition to `paused('crash-recovery')`).
|
|
*/
|
|
async reconcile() {
|
|
const open = await this.deps.persist.findOpenSpawns();
|
|
const reconciled = [];
|
|
for (const row of open) {
|
|
const stillAlive = isPidAlive2(row.pid);
|
|
const startedAtNow = stillAlive ? readPidStartTime(row.pid) : null;
|
|
const sameProcess = stillAlive && (row.pidStartedAt == null || startedAtNow == null || Math.abs((startedAtNow ?? 0) - (row.pidStartedAt ?? 0)) < 2e3);
|
|
let killed = false;
|
|
if (sameProcess) {
|
|
try {
|
|
this.kill(row.pid, "SIGTERM");
|
|
await this.sleep(this.killGracePeriodMs);
|
|
if (isPidAlive2(row.pid)) this.kill(row.pid, "SIGKILL");
|
|
killed = true;
|
|
} catch {
|
|
}
|
|
}
|
|
await this.appendJournal("killed", {
|
|
taskId: row.taskId,
|
|
attemptId: row.attemptId,
|
|
pid: row.pid,
|
|
pidStartedAt: row.pidStartedAt,
|
|
exitCode: null,
|
|
signal: killed ? "SIGKILL" : null
|
|
});
|
|
reconciled.push({
|
|
taskId: row.taskId,
|
|
attemptId: row.attemptId,
|
|
pid: row.pid,
|
|
killed
|
|
});
|
|
}
|
|
return reconciled;
|
|
}
|
|
size() {
|
|
return this.handles.size;
|
|
}
|
|
key(taskId, attemptId) {
|
|
return `${taskId}:${attemptId}`;
|
|
}
|
|
async appendJournal(op, row) {
|
|
await this.deps.persist.appendJournal({
|
|
ts: this.clock(),
|
|
op,
|
|
taskId: row.taskId,
|
|
attemptId: row.attemptId,
|
|
pid: row.pid,
|
|
pidStartedAt: row.pidStartedAt,
|
|
exitCode: row.exitCode,
|
|
signal: row.signal
|
|
});
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/process/watchdog.ts
|
|
var Watchdog;
|
|
var init_watchdog = __esm({
|
|
"../../packages/task-queue/src/process/watchdog.ts"() {
|
|
"use strict";
|
|
Watchdog = class {
|
|
constructor(onStalled, config2 = {}) {
|
|
this.onStalled = onStalled;
|
|
this.runningIdleMs = config2.runningIdleMs ?? 6e4;
|
|
this.processingIdleMs = config2.processingIdleMs ?? 6e5;
|
|
this.setTimer = config2.setTimer ?? ((fn, ms) => setTimeout(fn, ms));
|
|
this.clearTimer = config2.clearTimer ?? ((h) => clearTimeout(h));
|
|
this.clock = config2.clock ?? Date.now;
|
|
}
|
|
entries = /* @__PURE__ */ new Map();
|
|
runningIdleMs;
|
|
processingIdleMs;
|
|
setTimer;
|
|
clearTimer;
|
|
clock;
|
|
arm(taskId, status) {
|
|
this.disarm(taskId);
|
|
const entry = {
|
|
taskId,
|
|
status,
|
|
lastBumpAt: this.clock(),
|
|
timer: null
|
|
};
|
|
entry.timer = this.scheduleNext(entry);
|
|
this.entries.set(taskId, entry);
|
|
}
|
|
/**
|
|
* Move from `running` → `processing` thresholds, preserving lastBumpAt.
|
|
* Used when yt-dlp emits the Postprocess line.
|
|
*/
|
|
promoteToProcessing(taskId) {
|
|
const e = this.entries.get(taskId);
|
|
if (!e) return;
|
|
if (e.timer) this.clearTimer(e.timer);
|
|
e.status = "processing";
|
|
e.lastBumpAt = this.clock();
|
|
e.timer = this.scheduleNext(e);
|
|
}
|
|
bump(taskId) {
|
|
const e = this.entries.get(taskId);
|
|
if (!e) return;
|
|
if (e.timer) this.clearTimer(e.timer);
|
|
e.lastBumpAt = this.clock();
|
|
e.timer = this.scheduleNext(e);
|
|
}
|
|
disarm(taskId) {
|
|
const e = this.entries.get(taskId);
|
|
if (!e) return;
|
|
if (e.timer) this.clearTimer(e.timer);
|
|
this.entries.delete(taskId);
|
|
}
|
|
size() {
|
|
return this.entries.size;
|
|
}
|
|
scheduleNext(entry) {
|
|
const idle = entry.status === "processing" ? this.processingIdleMs : this.runningIdleMs;
|
|
return this.setTimer(() => {
|
|
const cur = this.entries.get(entry.taskId);
|
|
if (!cur) return;
|
|
const elapsed = this.clock() - cur.lastBumpAt;
|
|
if (elapsed >= idle) {
|
|
this.entries.delete(entry.taskId);
|
|
try {
|
|
this.onStalled(entry.taskId);
|
|
} catch (err) {
|
|
console.error("[task-queue] watchdog handler threw", err);
|
|
}
|
|
return;
|
|
}
|
|
cur.timer = this.scheduleNext(cur);
|
|
}, idle);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/process/index.ts
|
|
var init_process = __esm({
|
|
"../../packages/task-queue/src/process/index.ts"() {
|
|
"use strict";
|
|
init_registry();
|
|
init_watchdog();
|
|
init_pid_start_time();
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/persist/memory.ts
|
|
var MemoryPersistAdapter;
|
|
var init_memory = __esm({
|
|
"../../packages/task-queue/src/persist/memory.ts"() {
|
|
"use strict";
|
|
MemoryPersistAdapter = class {
|
|
tasks = /* @__PURE__ */ new Map();
|
|
progress = /* @__PURE__ */ new Map();
|
|
attempts = /* @__PURE__ */ new Map();
|
|
journal = [];
|
|
journalSeq = 0;
|
|
async insertTask(task) {
|
|
this.tasks.set(task.id, structuredClone(task));
|
|
this.progress.set(task.id, structuredClone(task.progress));
|
|
}
|
|
async upsertTask(input) {
|
|
this.tasks.set(input.task.id, structuredClone(input.task));
|
|
this.progress.set(input.task.id, structuredClone(input.progress));
|
|
}
|
|
async upsertProgress(taskId, progress) {
|
|
this.progress.set(taskId, structuredClone(progress));
|
|
const t = this.tasks.get(taskId);
|
|
if (t) t.progress = structuredClone(progress);
|
|
}
|
|
async deleteTask(taskId) {
|
|
this.tasks.delete(taskId);
|
|
this.progress.delete(taskId);
|
|
}
|
|
async insertAttempt(input) {
|
|
const t = this.tasks.get(input.taskId);
|
|
const attemptNumber = t?.attempt ?? 1;
|
|
this.attempts.set(input.attemptId, {
|
|
id: input.attemptId,
|
|
taskId: input.taskId,
|
|
attemptNumber,
|
|
startedAt: input.startedAt,
|
|
endedAt: null,
|
|
exitCode: null,
|
|
errorCategory: null,
|
|
stdoutTail: null,
|
|
stderrTail: null,
|
|
rawArgsHash: input.rawArgsHash
|
|
});
|
|
}
|
|
async closeAttempt(input) {
|
|
const existing = this.attempts.get(input.attemptId);
|
|
if (!existing) return;
|
|
this.attempts.set(input.attemptId, {
|
|
...existing,
|
|
endedAt: input.endedAt,
|
|
exitCode: input.exitCode,
|
|
errorCategory: input.errorCategory,
|
|
stdoutTail: input.stdoutTail,
|
|
stderrTail: input.stderrTail
|
|
});
|
|
}
|
|
async appendJournal(input) {
|
|
this.journal.push({
|
|
seq: ++this.journalSeq,
|
|
ts: input.ts,
|
|
op: input.op,
|
|
taskId: input.taskId,
|
|
attemptId: input.attemptId,
|
|
pid: input.pid,
|
|
pidStartedAt: input.pidStartedAt,
|
|
exitCode: input.exitCode,
|
|
signal: input.signal
|
|
});
|
|
}
|
|
async findOpenSpawns() {
|
|
const closed = /* @__PURE__ */ new Set();
|
|
for (const row of this.journal) {
|
|
if (row.op === "close" || row.op === "killed") {
|
|
closed.add(this.journalKey(row));
|
|
}
|
|
}
|
|
const result = [];
|
|
for (const row of this.journal) {
|
|
if (row.op !== "spawn") continue;
|
|
if (closed.has(this.journalKey(row))) continue;
|
|
result.push(row);
|
|
}
|
|
return result;
|
|
}
|
|
async loadAllTasks() {
|
|
return [...this.tasks.values()].map((t) => structuredClone(t));
|
|
}
|
|
async loadLatestAttempt(taskId) {
|
|
let best = null;
|
|
for (const a of this.attempts.values()) {
|
|
if (a.taskId !== taskId) continue;
|
|
if (!best || a.attemptNumber > best.attemptNumber) best = a;
|
|
}
|
|
return best;
|
|
}
|
|
/** Test helper: not part of the interface. */
|
|
journalSnapshot() {
|
|
return this.journal;
|
|
}
|
|
journalKey(row) {
|
|
return `${row.taskId}:${row.attemptId ?? "null"}:${row.pid}`;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/persist/sqlite.ts
|
|
function rowToTask(r) {
|
|
return {
|
|
id: r.id,
|
|
kind: r.kind,
|
|
parentId: r.parent_id,
|
|
input: JSON.parse(r.input_json),
|
|
priority: r.priority,
|
|
groupKey: r.group_key,
|
|
status: r.status,
|
|
prevStatus: r.prev_status,
|
|
statusReason: r.status_reason,
|
|
enteredStatusAt: r.entered_status_at,
|
|
attempt: r.attempt,
|
|
maxAttempts: r.max_attempts,
|
|
nextRetryAt: r.next_retry_at,
|
|
progress: r.progress_json ? JSON.parse(r.progress_json) : {
|
|
percent: null,
|
|
bytesDownloaded: null,
|
|
bytesTotal: null,
|
|
speedBps: null,
|
|
etaMs: null,
|
|
ticks: 0
|
|
},
|
|
output: r.output_json ? JSON.parse(r.output_json) : null,
|
|
lastError: r.last_error_json ? JSON.parse(r.last_error_json) : null,
|
|
pid: r.pid,
|
|
pidStartedAt: r.pid_started_at,
|
|
createdAt: r.created_at,
|
|
updatedAt: r.updated_at
|
|
};
|
|
}
|
|
var DEFAULT_JOURNAL_AGE_MS, SqlitePersistAdapter, SQL_INSERT_TASK, SQL_UPSERT_TASK, SQL_UPSERT_PROGRESS, SQL_INSERT_ATTEMPT, SQL_CLOSE_ATTEMPT, SQL_APPEND_JOURNAL, SQL_FIND_OPEN_SPAWNS, SQL_LOAD_ALL_TASKS, SQL_LOAD_LATEST_ATTEMPT, SQL_AGE_JOURNAL;
|
|
var init_sqlite = __esm({
|
|
"../../packages/task-queue/src/persist/sqlite.ts"() {
|
|
"use strict";
|
|
DEFAULT_JOURNAL_AGE_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
SqlitePersistAdapter = class {
|
|
db;
|
|
journalAgeMs;
|
|
// Prepared statements (lazy on first use to allow construction before
|
|
// migrations have run in some test setups).
|
|
stmts;
|
|
constructor(opts) {
|
|
this.db = opts.db;
|
|
this.journalAgeMs = opts.journalAgeMs ?? DEFAULT_JOURNAL_AGE_MS;
|
|
this.applyPragmas();
|
|
}
|
|
async insertTask(task) {
|
|
this.ensureStmts();
|
|
const tx = this.db.transaction((row) => {
|
|
this.stmts.insertTask.run(...this.bindTask(row));
|
|
});
|
|
tx.immediate(task);
|
|
}
|
|
async upsertTask(input) {
|
|
this.ensureStmts();
|
|
const tx = this.db.transaction((task, progress) => {
|
|
this.stmts.upsertTask.run(...this.bindTask(task));
|
|
this.stmts.upsertProgress.run(JSON.stringify(progress), task.id);
|
|
});
|
|
tx.immediate(input.task, input.progress);
|
|
}
|
|
async upsertProgress(taskId, progress) {
|
|
this.ensureStmts();
|
|
this.stmts.upsertProgress.run(JSON.stringify(progress), taskId);
|
|
}
|
|
async deleteTask(taskId) {
|
|
this.ensureStmts();
|
|
const tx = this.db.transaction((id) => {
|
|
this.stmts.deleteAttempts.run(id);
|
|
this.stmts.deleteTask.run(id);
|
|
});
|
|
tx.immediate(taskId);
|
|
}
|
|
async insertAttempt(input) {
|
|
this.ensureStmts();
|
|
const row = this.stmts.selectAttemptByTaskCount.get(input.taskId);
|
|
const attemptNumber = Number(row?.n ?? 0) + 1;
|
|
this.stmts.insertAttempt.run(
|
|
input.attemptId,
|
|
input.taskId,
|
|
attemptNumber,
|
|
input.startedAt,
|
|
input.rawArgsHash
|
|
);
|
|
}
|
|
async closeAttempt(input) {
|
|
this.ensureStmts();
|
|
this.stmts.closeAttempt.run(
|
|
input.endedAt,
|
|
input.exitCode,
|
|
input.errorCategory,
|
|
input.stdoutTail,
|
|
input.stderrTail,
|
|
input.attemptId
|
|
);
|
|
}
|
|
async appendJournal(input) {
|
|
this.ensureStmts();
|
|
this.stmts.appendJournal.run(
|
|
input.ts,
|
|
input.op,
|
|
input.taskId,
|
|
input.attemptId,
|
|
input.pid,
|
|
input.pidStartedAt,
|
|
input.exitCode,
|
|
input.signal
|
|
);
|
|
}
|
|
async findOpenSpawns() {
|
|
this.ensureStmts();
|
|
const rows = this.stmts.findOpenSpawns.all();
|
|
return rows.map((r) => ({
|
|
seq: Number(r.seq),
|
|
ts: r.ts,
|
|
op: r.op,
|
|
taskId: r.task_id,
|
|
attemptId: r.attempt_id,
|
|
pid: r.pid,
|
|
pidStartedAt: r.pid_started_at,
|
|
exitCode: r.exit_code,
|
|
signal: r.signal
|
|
}));
|
|
}
|
|
async loadAllTasks() {
|
|
this.ensureStmts();
|
|
const rows = this.stmts.loadAllTasks.all();
|
|
return rows.map(rowToTask);
|
|
}
|
|
async loadLatestAttempt(taskId) {
|
|
this.ensureStmts();
|
|
const row = this.stmts.loadLatestAttempt.get(taskId);
|
|
if (!row) return null;
|
|
return {
|
|
id: row.id,
|
|
taskId: row.task_id,
|
|
attemptNumber: row.attempt_number,
|
|
startedAt: row.started_at,
|
|
endedAt: row.ended_at,
|
|
exitCode: row.exit_code,
|
|
errorCategory: row.error_category,
|
|
stdoutTail: row.stdout_tail,
|
|
stderrTail: row.stderr_tail,
|
|
rawArgsHash: row.raw_args_hash
|
|
};
|
|
}
|
|
async maintenance() {
|
|
this.ensureStmts();
|
|
const cutoff = Date.now() - this.journalAgeMs;
|
|
this.stmts.ageJournal.run(cutoff);
|
|
try {
|
|
this.db.pragma("wal_checkpoint(TRUNCATE)");
|
|
} catch {
|
|
}
|
|
}
|
|
close() {
|
|
try {
|
|
this.db.close();
|
|
} catch {
|
|
}
|
|
}
|
|
applyPragmas() {
|
|
try {
|
|
this.db.pragma("journal_mode = WAL");
|
|
this.db.pragma("synchronous = NORMAL");
|
|
this.db.pragma("foreign_keys = ON");
|
|
} catch {
|
|
}
|
|
}
|
|
ensureStmts() {
|
|
if (this.stmts) return;
|
|
this.stmts = {
|
|
insertTask: this.db.prepare(SQL_INSERT_TASK),
|
|
upsertTask: this.db.prepare(SQL_UPSERT_TASK),
|
|
upsertProgress: this.db.prepare(SQL_UPSERT_PROGRESS),
|
|
deleteTask: this.db.prepare("DELETE FROM tasks WHERE id = ?"),
|
|
deleteAttempts: this.db.prepare("DELETE FROM attempts WHERE task_id = ?"),
|
|
insertAttempt: this.db.prepare(SQL_INSERT_ATTEMPT),
|
|
closeAttempt: this.db.prepare(SQL_CLOSE_ATTEMPT),
|
|
appendJournal: this.db.prepare(SQL_APPEND_JOURNAL),
|
|
findOpenSpawns: this.db.prepare(SQL_FIND_OPEN_SPAWNS),
|
|
loadAllTasks: this.db.prepare(SQL_LOAD_ALL_TASKS),
|
|
loadLatestAttempt: this.db.prepare(SQL_LOAD_LATEST_ATTEMPT),
|
|
ageJournal: this.db.prepare(SQL_AGE_JOURNAL),
|
|
selectAttemptByTaskCount: this.db.prepare(
|
|
"SELECT COUNT(*) AS n FROM attempts WHERE task_id = ?"
|
|
)
|
|
};
|
|
}
|
|
bindTask(t) {
|
|
return [
|
|
t.id,
|
|
t.kind,
|
|
t.parentId,
|
|
t.status,
|
|
t.prevStatus,
|
|
t.statusReason,
|
|
t.enteredStatusAt,
|
|
t.priority,
|
|
t.groupKey,
|
|
t.attempt,
|
|
t.maxAttempts,
|
|
t.nextRetryAt,
|
|
t.pid,
|
|
t.pidStartedAt,
|
|
t.createdAt,
|
|
t.updatedAt,
|
|
JSON.stringify(t.input),
|
|
JSON.stringify(t.progress),
|
|
t.output ? JSON.stringify(t.output) : null,
|
|
t.lastError ? JSON.stringify(t.lastError) : null
|
|
];
|
|
}
|
|
};
|
|
SQL_INSERT_TASK = `
|
|
INSERT INTO tasks (
|
|
id, kind, parent_id, status, prev_status, status_reason, entered_status_at,
|
|
priority, group_key, attempt, max_attempts, next_retry_at, pid,
|
|
pid_started_at, created_at, updated_at, input_json, progress_json,
|
|
output_json, last_error_json
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
`;
|
|
SQL_UPSERT_TASK = `
|
|
INSERT INTO tasks (
|
|
id, kind, parent_id, status, prev_status, status_reason, entered_status_at,
|
|
priority, group_key, attempt, max_attempts, next_retry_at, pid,
|
|
pid_started_at, created_at, updated_at, input_json, progress_json,
|
|
output_json, last_error_json
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
ON CONFLICT(id) DO UPDATE SET
|
|
kind = excluded.kind,
|
|
parent_id = excluded.parent_id,
|
|
status = excluded.status,
|
|
prev_status = excluded.prev_status,
|
|
status_reason = excluded.status_reason,
|
|
entered_status_at = excluded.entered_status_at,
|
|
priority = excluded.priority,
|
|
group_key = excluded.group_key,
|
|
attempt = excluded.attempt,
|
|
max_attempts = excluded.max_attempts,
|
|
next_retry_at = excluded.next_retry_at,
|
|
pid = excluded.pid,
|
|
pid_started_at = excluded.pid_started_at,
|
|
updated_at = excluded.updated_at,
|
|
input_json = excluded.input_json,
|
|
progress_json = excluded.progress_json,
|
|
output_json = excluded.output_json,
|
|
last_error_json = excluded.last_error_json
|
|
`;
|
|
SQL_UPSERT_PROGRESS = `
|
|
UPDATE tasks SET progress_json = ?, updated_at = strftime('%s', 'now') * 1000 WHERE id = ?
|
|
`;
|
|
SQL_INSERT_ATTEMPT = `
|
|
INSERT INTO attempts (id, task_id, attempt_number, started_at, raw_args_hash)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
`;
|
|
SQL_CLOSE_ATTEMPT = `
|
|
UPDATE attempts SET
|
|
ended_at = ?,
|
|
exit_code = ?,
|
|
error_category = ?,
|
|
stdout_tail = ?,
|
|
stderr_tail = ?
|
|
WHERE id = ?
|
|
`;
|
|
SQL_APPEND_JOURNAL = `
|
|
INSERT INTO process_journal (ts, op, task_id, attempt_id, pid, pid_started_at, exit_code, signal)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
`;
|
|
SQL_FIND_OPEN_SPAWNS = `
|
|
SELECT s.*
|
|
FROM process_journal s
|
|
WHERE s.op = 'spawn'
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM process_journal c
|
|
WHERE c.task_id = s.task_id
|
|
AND IFNULL(c.attempt_id, '') = IFNULL(s.attempt_id, '')
|
|
AND c.pid = s.pid
|
|
AND c.op IN ('close', 'killed')
|
|
AND c.seq > s.seq
|
|
)
|
|
ORDER BY s.seq ASC
|
|
`;
|
|
SQL_LOAD_ALL_TASKS = `SELECT * FROM tasks`;
|
|
SQL_LOAD_LATEST_ATTEMPT = `
|
|
SELECT * FROM attempts
|
|
WHERE task_id = ?
|
|
ORDER BY attempt_number DESC
|
|
LIMIT 1
|
|
`;
|
|
SQL_AGE_JOURNAL = `
|
|
DELETE FROM process_journal WHERE ts < ?
|
|
`;
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/persist/index.ts
|
|
var init_persist = __esm({
|
|
"../../packages/task-queue/src/persist/index.ts"() {
|
|
"use strict";
|
|
init_memory();
|
|
init_sqlite();
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/api/index.ts
|
|
import { createHash, randomUUID } from "node:crypto";
|
|
import { existsSync as existsSync3, statSync as statSync2 } from "node:fs";
|
|
function defaultGroupKey(input) {
|
|
if (input.subscriptionId) return `sub:${input.subscriptionId}`;
|
|
try {
|
|
return new URL(input.url).host || "unknown";
|
|
} catch {
|
|
return "unknown";
|
|
}
|
|
}
|
|
function hashRawArgs(args) {
|
|
if (!args || args.length === 0) return "sha256:none";
|
|
const h = createHash("sha256");
|
|
h.update(args.join(" "));
|
|
return `sha256:${h.digest("hex")}`;
|
|
}
|
|
var PROGRESS_DOWNSAMPLE_MS, TaskQueueAPI;
|
|
var init_api2 = __esm({
|
|
"../../packages/task-queue/src/api/index.ts"() {
|
|
"use strict";
|
|
init_classifier();
|
|
init_events();
|
|
init_fsm();
|
|
init_process();
|
|
init_scheduler2();
|
|
init_store();
|
|
init_types();
|
|
PROGRESS_DOWNSAMPLE_MS = 1e3;
|
|
TaskQueueAPI = class {
|
|
bus = new EventBus();
|
|
store = new TaskStore();
|
|
scheduler;
|
|
retry;
|
|
watchdog;
|
|
processes;
|
|
persist;
|
|
executor;
|
|
clock;
|
|
filePresent;
|
|
rng;
|
|
active = /* @__PURE__ */ new Map();
|
|
progressLastWrite = /* @__PURE__ */ new Map();
|
|
progressDirty = /* @__PURE__ */ new Map();
|
|
started = false;
|
|
constructor(opts) {
|
|
this.persist = opts.persist;
|
|
this.executor = opts.executor;
|
|
this.clock = opts.clock ?? Date.now;
|
|
this.filePresent = opts.filePresent ?? ((p) => {
|
|
try {
|
|
return existsSync3(p) && statSync2(p).size > 0;
|
|
} catch {
|
|
return false;
|
|
}
|
|
});
|
|
this.rng = opts.rng ?? Math.random;
|
|
this.scheduler = new Scheduler({
|
|
maxConcurrency: opts.maxConcurrency ?? 4,
|
|
defaultMaxPerGroup: opts.defaultMaxPerGroup ?? null,
|
|
dispatch: (id) => this.dispatchOne(id),
|
|
demote: (id) => this.demoteOne(id),
|
|
getTask: (id) => this.store.get(id)
|
|
});
|
|
this.retry = new RetryScheduler({
|
|
clock: this.clock,
|
|
setTimer: opts.setTimer,
|
|
clearTimer: opts.clearTimer,
|
|
onDue: (id) => this.handleRetryDue(id)
|
|
});
|
|
this.watchdog = new Watchdog((id) => this.handleStalled(id), {
|
|
runningIdleMs: opts.runningIdleMs,
|
|
processingIdleMs: opts.processingIdleMs,
|
|
setTimer: opts.setTimer,
|
|
clearTimer: opts.clearTimer,
|
|
clock: this.clock
|
|
});
|
|
this.processes = new ProcessRegistry({
|
|
persist: this.persist,
|
|
clock: this.clock,
|
|
kill: opts.killProcess
|
|
});
|
|
}
|
|
// ───────────── Lifecycle ─────────────
|
|
/**
|
|
* Crash recovery + reconciliation. Per §11:
|
|
* 1. load tasks from persistence
|
|
* 2. reconcile process_journal: kill orphans, journal `killed`
|
|
* 3. running/processing → paused('crash-recovery'); preserve progress
|
|
* 4. queued → re-enqueue
|
|
* 5. retry-scheduled → re-arm RetryScheduler with original nextRetryAt
|
|
*/
|
|
async start() {
|
|
if (this.started) return;
|
|
this.started = true;
|
|
const tasks = await this.persist.loadAllTasks();
|
|
for (const t of tasks) this.store.insert(t);
|
|
const orphans = await this.processes.reconcile();
|
|
for (const o of orphans) {
|
|
this.bus.emit({
|
|
type: "orphan-killed",
|
|
taskId: o.taskId,
|
|
pid: o.pid,
|
|
pidStartedAt: null,
|
|
signal: "SIGKILL",
|
|
at: this.clock()
|
|
});
|
|
}
|
|
for (const t of tasks) {
|
|
if (t.status === "running" || t.status === "processing") {
|
|
await this.applyTransition(t.id, "paused", {
|
|
trigger: "crash-recovery",
|
|
reason: "crash-recovery"
|
|
});
|
|
} else if (t.status === "queued") {
|
|
await this.scheduler.enqueue(t.id, t.priority);
|
|
} else if (t.status === "retry-scheduled" && t.nextRetryAt != null) {
|
|
this.retry.enqueue(t.id, t.nextRetryAt);
|
|
}
|
|
}
|
|
}
|
|
async stop() {
|
|
if (!this.started) return;
|
|
this.retry.stop();
|
|
for (const a of [...this.active.values()]) {
|
|
try {
|
|
await a.run.cancel(0);
|
|
} catch {
|
|
}
|
|
}
|
|
if (this.persist.close) await this.persist.close();
|
|
this.started = false;
|
|
}
|
|
// ───────────── RPC surface ─────────────
|
|
async add(req) {
|
|
const now = this.clock();
|
|
if (req.id) {
|
|
const existing = this.store.get(req.id);
|
|
if (existing) return { id: existing.id };
|
|
}
|
|
const id = req.id ?? randomUUID();
|
|
const task = {
|
|
id,
|
|
kind: req.input.kind,
|
|
parentId: req.parentId ?? null,
|
|
input: req.input,
|
|
priority: req.priority ?? PRIORITY_USER,
|
|
groupKey: req.groupKey ?? defaultGroupKey(req.input),
|
|
status: "queued",
|
|
prevStatus: null,
|
|
statusReason: null,
|
|
enteredStatusAt: now,
|
|
attempt: 0,
|
|
maxAttempts: req.maxAttempts ?? 5,
|
|
nextRetryAt: null,
|
|
progress: { ...EMPTY_PROGRESS },
|
|
output: null,
|
|
lastError: null,
|
|
pid: null,
|
|
pidStartedAt: null,
|
|
createdAt: now,
|
|
updatedAt: now
|
|
};
|
|
this.store.insert(task);
|
|
await this.persist.insertTask(task);
|
|
this.bus.emit({
|
|
type: "transition",
|
|
taskId: id,
|
|
from: null,
|
|
to: "queued",
|
|
reason: null,
|
|
attempt: 0,
|
|
at: now
|
|
});
|
|
this.bus.emit({
|
|
type: "snapshot-changed",
|
|
taskId: id,
|
|
task,
|
|
at: now
|
|
});
|
|
await this.scheduler.enqueue(id, task.priority);
|
|
return { id };
|
|
}
|
|
get(id) {
|
|
return this.store.get(id);
|
|
}
|
|
list(opts = {}) {
|
|
return this.store.list(opts);
|
|
}
|
|
async cancel(id, reason = "user") {
|
|
const t = this.store.get(id);
|
|
if (!t) return;
|
|
if (TERMINAL_STATUSES.has(t.status)) return;
|
|
if (t.status === "queued" || t.status === "paused") {
|
|
await this.scheduler.dequeue(id);
|
|
this.retry.remove(id);
|
|
await this.applyTransition(id, "cancelled", {
|
|
trigger: "cancel",
|
|
reason
|
|
});
|
|
return;
|
|
}
|
|
if (t.status === "retry-scheduled") {
|
|
this.retry.remove(id);
|
|
await this.applyTransition(id, "cancelled", {
|
|
trigger: "cancel",
|
|
reason
|
|
});
|
|
return;
|
|
}
|
|
const active = this.active.get(id);
|
|
if (active) {
|
|
try {
|
|
await active.run.cancel();
|
|
} catch (err) {
|
|
console.error("[task-queue] cancel run threw", err);
|
|
}
|
|
}
|
|
}
|
|
async pause(id, reason = "user") {
|
|
const t = this.store.get(id);
|
|
if (!t) return;
|
|
if (t.status === "queued") {
|
|
await this.scheduler.dequeue(id);
|
|
await this.applyTransition(id, "paused", { trigger: "pause", reason });
|
|
return;
|
|
}
|
|
if (t.status === "retry-scheduled") {
|
|
this.retry.remove(id);
|
|
await this.applyTransition(id, "paused", { trigger: "pause", reason });
|
|
return;
|
|
}
|
|
if (t.status === "running" || t.status === "processing") {
|
|
const active = this.active.get(id);
|
|
if (active) {
|
|
try {
|
|
await active.run.pause();
|
|
} catch (err) {
|
|
console.error("[task-queue] pause run threw", err);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
async resume(id) {
|
|
const t = this.store.get(id);
|
|
if (!t || t.status !== "paused") return;
|
|
await this.applyTransition(id, "queued", { trigger: "resume", reason: "resume" });
|
|
await this.scheduler.enqueue(id, t.priority);
|
|
}
|
|
async retryManual(id) {
|
|
const t = this.store.get(id);
|
|
if (!t || t.status !== "failed" && t.status !== "cancelled") return;
|
|
await this.applyTransition(id, "queued", {
|
|
trigger: t.status === "failed" ? "retry-manual" : "requeue",
|
|
reason: "manual"
|
|
});
|
|
await this.scheduler.enqueue(id, t.priority);
|
|
}
|
|
async setMaxConcurrency(n) {
|
|
await this.scheduler.setMaxConcurrency(n);
|
|
}
|
|
async setMaxPerGroup(groupKey, n) {
|
|
await this.scheduler.setMaxPerGroup(groupKey, n);
|
|
}
|
|
async removeFromHistory(id) {
|
|
const t = this.store.get(id);
|
|
if (!t) return;
|
|
if (!TERMINAL_STATUSES.has(t.status)) {
|
|
throw new Error(`removeFromHistory: ${id} is not in a terminal state`);
|
|
}
|
|
this.store.remove(id);
|
|
await this.persist.deleteTask(id);
|
|
}
|
|
stats() {
|
|
const stats = this.store.stats(this.scheduler.stats().capacity);
|
|
const sStats = this.scheduler.stats();
|
|
stats.running = sStats.running;
|
|
stats.queued = sStats.queued;
|
|
stats.perGroup = { ...stats.perGroup, ...sStats.perGroup };
|
|
return stats;
|
|
}
|
|
subscribe(listener) {
|
|
return this.bus.subscribe(listener);
|
|
}
|
|
on(type, listener) {
|
|
return this.bus.on(type, listener);
|
|
}
|
|
// ───────────── Internal: dispatch + executor wiring ─────────────
|
|
async dispatchOne(id) {
|
|
const t = this.store.get(id);
|
|
if (!t || t.status !== "queued") return false;
|
|
const attemptId = randomUUID();
|
|
let next;
|
|
try {
|
|
next = await this.applyTransition(id, "running", {
|
|
trigger: "dispatch",
|
|
reason: null
|
|
});
|
|
} catch (err) {
|
|
if (err instanceof IllegalTransitionError) return false;
|
|
throw err;
|
|
}
|
|
await this.persist.insertAttempt({
|
|
taskId: id,
|
|
attemptId,
|
|
pid: -1,
|
|
pidStartedAt: null,
|
|
startedAt: this.clock(),
|
|
rawArgsHash: hashRawArgs(t.input.rawArgs)
|
|
});
|
|
let run2;
|
|
try {
|
|
run2 = this.executor.run(
|
|
{
|
|
taskId: id,
|
|
attemptId,
|
|
attemptNumber: next.attempt,
|
|
input: t.input
|
|
},
|
|
{
|
|
onSpawn: (e) => {
|
|
this.active.set(id, { taskId: id, attemptId, run: run2 });
|
|
void this.processes.recordSpawn({
|
|
taskId: id,
|
|
attemptId,
|
|
pid: e.pid,
|
|
pidStartedAt: e.pidStartedAt ?? readPidStartTime(e.pid),
|
|
kind: e.kind,
|
|
spawnedAt: e.spawnedAt
|
|
});
|
|
void this.persist.upsertTask({
|
|
task: { ...next, pid: e.pid, pidStartedAt: e.pidStartedAt },
|
|
progress: next.progress
|
|
});
|
|
this.watchdog.arm(id, "running");
|
|
},
|
|
onProgress: (e) => {
|
|
this.applyProgress(id, e.progress);
|
|
this.watchdog.bump(id);
|
|
if (e.enteredProcessing) {
|
|
void this.applyTransition(id, "processing", {
|
|
trigger: "progressing",
|
|
reason: null
|
|
});
|
|
this.watchdog.promoteToProcessing(id);
|
|
}
|
|
},
|
|
onStd: () => {
|
|
this.watchdog.bump(id);
|
|
},
|
|
onFinish: (e) => {
|
|
void this.handleFinish(id, attemptId, e);
|
|
}
|
|
}
|
|
);
|
|
this.active.set(id, { taskId: id, attemptId, run: run2 });
|
|
} catch (err) {
|
|
const error48 = virtualError("unknown", String(err));
|
|
await this.applyTransition(id, "failed", {
|
|
trigger: "finalize-error",
|
|
reason: error48.category,
|
|
error: error48
|
|
});
|
|
await this.scheduler.releaseSlot(id);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
async demoteOne(id) {
|
|
const a = this.active.get(id);
|
|
if (a) {
|
|
try {
|
|
await a.run.pause();
|
|
} catch (err) {
|
|
console.error("[task-queue] demote pause threw", err);
|
|
}
|
|
}
|
|
}
|
|
async handleFinish(id, attemptId, e) {
|
|
this.watchdog.disarm(id);
|
|
this.active.delete(id);
|
|
if (e.result.type === "success") {
|
|
const out = e.result.output;
|
|
const guardOk = out.filePath ? this.filePresent(out.filePath) && out.size > 0 : false;
|
|
if (guardOk) {
|
|
await this.persist.closeAttempt({
|
|
taskId: id,
|
|
attemptId,
|
|
endedAt: e.closedAt,
|
|
exitCode: 0,
|
|
errorCategory: null,
|
|
stdoutTail: e.stdoutTail,
|
|
stderrTail: e.stderrTail
|
|
});
|
|
await this.processes.recordClose(id, attemptId, 0, null);
|
|
await this.applyTransition(id, "completed", {
|
|
trigger: "finalize-success",
|
|
reason: null,
|
|
output: out
|
|
});
|
|
} else {
|
|
const err2 = virtualError(
|
|
"output-missing",
|
|
`output ${out.filePath} missing or empty`
|
|
);
|
|
await this.persist.closeAttempt({
|
|
taskId: id,
|
|
attemptId,
|
|
endedAt: e.closedAt,
|
|
exitCode: null,
|
|
errorCategory: "output-missing",
|
|
stdoutTail: e.stdoutTail,
|
|
stderrTail: e.stderrTail
|
|
});
|
|
await this.processes.recordClose(id, attemptId, null, null);
|
|
await this.applyTransition(id, "failed", {
|
|
trigger: "finalize-error",
|
|
reason: "output-missing",
|
|
error: err2
|
|
});
|
|
}
|
|
await this.scheduler.releaseSlot(id);
|
|
return;
|
|
}
|
|
if (e.result.type === "cancelled") {
|
|
await this.persist.closeAttempt({
|
|
taskId: id,
|
|
attemptId,
|
|
endedAt: e.closedAt,
|
|
exitCode: null,
|
|
errorCategory: "cancelled-by-user",
|
|
stdoutTail: e.stdoutTail,
|
|
stderrTail: e.stderrTail
|
|
});
|
|
await this.processes.recordClose(id, attemptId, null, "SIGTERM");
|
|
const t2 = this.store.get(id);
|
|
if (t2 && (t2.status === "running" || t2.status === "processing")) {
|
|
await this.applyTransition(id, "cancelled", {
|
|
trigger: "cancel",
|
|
reason: "user"
|
|
});
|
|
}
|
|
await this.scheduler.releaseSlot(id);
|
|
return;
|
|
}
|
|
const err = e.result.error;
|
|
const exitCode = e.result.exitCode ?? null;
|
|
await this.persist.closeAttempt({
|
|
taskId: id,
|
|
attemptId,
|
|
endedAt: e.closedAt,
|
|
exitCode,
|
|
errorCategory: err.category,
|
|
stdoutTail: e.stdoutTail,
|
|
stderrTail: e.stderrTail
|
|
});
|
|
await this.processes.recordClose(id, attemptId, exitCode, null);
|
|
this.bus.emit({
|
|
type: "error-classified",
|
|
taskId: id,
|
|
attempt: this.store.get(id)?.attempt ?? 0,
|
|
error: err,
|
|
at: this.clock()
|
|
});
|
|
const t = this.store.get(id);
|
|
const maxAttempts = Math.max(
|
|
t?.maxAttempts ?? 0,
|
|
defaultMaxAttempts(err.category)
|
|
);
|
|
const willRetry = err.retryable && (t?.attempt ?? 0) < maxAttempts;
|
|
if (willRetry) {
|
|
const wait = computeBackoffMs(
|
|
t?.attempt ?? 0,
|
|
err.suggestedRetryAfterMs,
|
|
this.rng
|
|
);
|
|
const nextRetryAt = this.clock() + wait;
|
|
await this.applyTransition(id, "retry-scheduled", {
|
|
trigger: "finalize-error",
|
|
reason: err.category,
|
|
error: err,
|
|
nextRetryAt
|
|
});
|
|
this.retry.enqueue(id, nextRetryAt);
|
|
} else {
|
|
await this.applyTransition(id, "failed", {
|
|
trigger: "finalize-error",
|
|
reason: err.category,
|
|
error: err
|
|
});
|
|
}
|
|
await this.scheduler.releaseSlot(id);
|
|
}
|
|
async handleRetryDue(id) {
|
|
const t = this.store.get(id);
|
|
if (!t || t.status !== "retry-scheduled") return;
|
|
const next = await this.applyTransition(id, "queued", {
|
|
trigger: "retry-tick",
|
|
reason: "retry"
|
|
});
|
|
await this.scheduler.enqueue(id, next.priority);
|
|
}
|
|
handleStalled(id) {
|
|
void (async () => {
|
|
const err = virtualError("stalled", "Watchdog: task idle exceeded");
|
|
const a = this.active.get(id);
|
|
if (a) {
|
|
try {
|
|
await a.run.cancel(0);
|
|
} catch {
|
|
}
|
|
}
|
|
const t = this.store.get(id);
|
|
if (!t) return;
|
|
const max = Math.max(t.maxAttempts, defaultMaxAttempts("stalled"));
|
|
if (t.attempt < max) {
|
|
const wait = computeBackoffMs(
|
|
t.attempt,
|
|
err.suggestedRetryAfterMs,
|
|
this.rng
|
|
);
|
|
const nextRetryAt = this.clock() + wait;
|
|
await this.applyTransition(id, "retry-scheduled", {
|
|
trigger: "finalize-error",
|
|
reason: "stalled",
|
|
error: err,
|
|
nextRetryAt
|
|
});
|
|
this.retry.enqueue(id, nextRetryAt);
|
|
} else {
|
|
await this.applyTransition(id, "failed", {
|
|
trigger: "finalize-error",
|
|
reason: "stalled",
|
|
error: err
|
|
});
|
|
}
|
|
await this.scheduler.releaseSlot(id);
|
|
})();
|
|
}
|
|
async applyTransition(id, to, ctx) {
|
|
const cur = this.store.get(id);
|
|
if (!cur) throw new Error(`applyTransition: missing task ${id}`);
|
|
let next;
|
|
try {
|
|
next = transition(cur, to, { ...ctx, now: this.clock() });
|
|
} catch (err) {
|
|
if (err instanceof IllegalTransitionError) {
|
|
await this.persist.appendJournal({
|
|
ts: this.clock(),
|
|
op: "panic",
|
|
taskId: id,
|
|
attemptId: null,
|
|
pid: cur.pid ?? -1,
|
|
pidStartedAt: cur.pidStartedAt,
|
|
exitCode: null,
|
|
signal: err.message
|
|
});
|
|
if (cur.status !== "completed" && cur.status !== "cancelled") {
|
|
const failedErr = virtualError("unknown", err.message);
|
|
const fallback = transition(cur, "failed", {
|
|
trigger: "finalize-error",
|
|
reason: "panic",
|
|
error: failedErr,
|
|
now: this.clock()
|
|
});
|
|
this.store.update(fallback);
|
|
await this.persist.upsertTask({
|
|
task: fallback,
|
|
progress: fallback.progress
|
|
});
|
|
this.bus.emit({
|
|
type: "transition",
|
|
taskId: id,
|
|
from: cur.status,
|
|
to: "failed",
|
|
reason: "panic",
|
|
attempt: fallback.attempt,
|
|
at: this.clock()
|
|
});
|
|
}
|
|
throw err;
|
|
}
|
|
throw err;
|
|
}
|
|
this.store.update(next);
|
|
await this.persist.upsertTask({ task: next, progress: next.progress });
|
|
this.bus.emit({
|
|
type: "transition",
|
|
taskId: id,
|
|
from: cur.status,
|
|
to: next.status,
|
|
reason: next.statusReason,
|
|
attempt: next.attempt,
|
|
at: next.updatedAt
|
|
});
|
|
this.bus.emit({
|
|
type: "snapshot-changed",
|
|
taskId: id,
|
|
task: next,
|
|
at: next.updatedAt
|
|
});
|
|
return next;
|
|
}
|
|
applyProgress(id, progress) {
|
|
const t = this.store.get(id);
|
|
if (!t) return;
|
|
const merged = { ...t, progress, updatedAt: this.clock() };
|
|
this.store.update(merged);
|
|
this.progressDirty.set(id, progress);
|
|
this.bus.emit({
|
|
type: "progress",
|
|
taskId: id,
|
|
progress,
|
|
at: merged.updatedAt
|
|
});
|
|
const last = this.progressLastWrite.get(id) ?? 0;
|
|
if (merged.updatedAt - last >= PROGRESS_DOWNSAMPLE_MS) {
|
|
this.progressLastWrite.set(id, merged.updatedAt);
|
|
void this.persist.upsertProgress(id, progress);
|
|
this.progressDirty.delete(id);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/projection/index.ts
|
|
function legacyDownloadStatusOf(status) {
|
|
switch (status) {
|
|
case "queued":
|
|
return "pending";
|
|
case "running":
|
|
return "downloading";
|
|
case "processing":
|
|
return "processing";
|
|
case "paused":
|
|
return "pending";
|
|
case "retry-scheduled":
|
|
return "pending";
|
|
case "completed":
|
|
return "completed";
|
|
case "failed":
|
|
return "error";
|
|
case "cancelled":
|
|
return "cancelled";
|
|
}
|
|
}
|
|
function legacySubStatusOf(status) {
|
|
switch (status) {
|
|
case "queued":
|
|
return "queued";
|
|
case "paused":
|
|
return "paused";
|
|
case "retry-scheduled":
|
|
return "retry-scheduled";
|
|
default:
|
|
return void 0;
|
|
}
|
|
}
|
|
function projectTaskToLegacy(task) {
|
|
const status = legacyDownloadStatusOf(task.status);
|
|
const subStatus = legacySubStatusOf(task.status);
|
|
const opts = task.input.options ?? {};
|
|
const proj = {
|
|
id: task.id,
|
|
url: task.input.url,
|
|
title: task.input.title,
|
|
thumbnail: task.input.thumbnail,
|
|
type: task.kind === "audio" ? "audio" : "video",
|
|
status,
|
|
internalStatus: task.status,
|
|
statusReason: task.statusReason,
|
|
createdAt: task.createdAt,
|
|
description: opts.description,
|
|
channel: opts.channel,
|
|
uploader: opts.uploader,
|
|
viewCount: opts.viewCount,
|
|
tags: opts.tags ? [...opts.tags] : void 0,
|
|
duration: opts.duration,
|
|
playlistId: task.input.playlistId,
|
|
playlistTitle: opts.playlistTitle,
|
|
playlistIndex: task.input.playlistIndex,
|
|
playlistSize: opts.playlistSize,
|
|
fileSize: opts.fileSize,
|
|
startedAt: opts.startedAt,
|
|
completedAt: opts.completedAt,
|
|
downloadPath: opts.downloadPath,
|
|
attempt: task.attempt,
|
|
maxAttempts: task.maxAttempts
|
|
};
|
|
if (subStatus) proj.subStatus = subStatus;
|
|
if (task.progress.percent != null || task.progress.bytesDownloaded != null) {
|
|
proj.progress = projectProgress(task.progress);
|
|
if (task.progress.speedBps != null) {
|
|
proj.speed = formatSpeed(task.progress.speedBps);
|
|
}
|
|
}
|
|
if (task.output) {
|
|
const out = task.output;
|
|
proj.fileSize = out.size;
|
|
proj.savedFileName = basenameOf(out.filePath);
|
|
proj.downloadPath = dirnameOf(out.filePath);
|
|
if (out.durationMs != null) proj.duration = Math.round(out.durationMs / 1e3);
|
|
if (out.formatId) proj.resolvedFormatId = out.formatId;
|
|
}
|
|
if (task.lastError) {
|
|
const err = task.lastError;
|
|
proj.errorCategory = err.category;
|
|
proj.uiMessageKey = err.uiMessageKey;
|
|
if (status === "error") proj.error = err.rawMessage;
|
|
}
|
|
if (task.status === "retry-scheduled" && task.nextRetryAt != null) {
|
|
proj.nextRetryAt = task.nextRetryAt;
|
|
}
|
|
return proj;
|
|
}
|
|
function projectProgress(p) {
|
|
const percent = p.percent != null ? Math.max(0, Math.min(100, p.percent * 100)) : 0;
|
|
return {
|
|
percent,
|
|
currentSpeed: p.speedBps != null ? formatSpeed(p.speedBps) : void 0,
|
|
eta: p.etaMs != null ? formatEta(p.etaMs) : void 0,
|
|
downloaded: p.bytesDownloaded != null ? formatBytes(p.bytesDownloaded) : void 0,
|
|
total: p.bytesTotal != null ? formatBytes(p.bytesTotal) : void 0
|
|
};
|
|
}
|
|
function formatBytes(n) {
|
|
if (n < 1024) return `${n}B`;
|
|
const units = ["KB", "MB", "GB", "TB"];
|
|
let value2 = n / 1024;
|
|
let i = 0;
|
|
while (value2 >= 1024 && i < units.length - 1) {
|
|
value2 /= 1024;
|
|
i++;
|
|
}
|
|
return `${value2.toFixed(2)}${units[i]}`;
|
|
}
|
|
function formatSpeed(bps) {
|
|
return `${formatBytes(bps)}/s`;
|
|
}
|
|
function formatEta(ms) {
|
|
const s = Math.max(0, Math.floor(ms / 1e3));
|
|
const m = Math.floor(s / 60);
|
|
const r = s % 60;
|
|
if (m >= 60) {
|
|
const h = Math.floor(m / 60);
|
|
return `${h}:${String(m % 60).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
}
|
|
return `${m}:${String(r).padStart(2, "0")}`;
|
|
}
|
|
function basenameOf(p) {
|
|
const i = Math.max(p.lastIndexOf("/"), p.lastIndexOf("\\"));
|
|
return i >= 0 ? p.slice(i + 1) : p;
|
|
}
|
|
function dirnameOf(p) {
|
|
const i = Math.max(p.lastIndexOf("/"), p.lastIndexOf("\\"));
|
|
return i >= 0 ? p.slice(0, i) : "";
|
|
}
|
|
var init_projection = __esm({
|
|
"../../packages/task-queue/src/projection/index.ts"() {
|
|
"use strict";
|
|
}
|
|
});
|
|
|
|
// ../../packages/task-queue/src/index.ts
|
|
var src_exports = {};
|
|
__export(src_exports, {
|
|
AddInputSchema: () => AddInputSchema,
|
|
AddOutputSchema: () => AddOutputSchema,
|
|
CLASSIFIER_RULES: () => CLASSIFIER_RULES,
|
|
ClassifiedErrorSchema: () => ClassifiedErrorSchema,
|
|
EMPTY_PROGRESS: () => EMPTY_PROGRESS,
|
|
ErrorCategorySchema: () => ErrorCategorySchema,
|
|
EventBus: () => EventBus,
|
|
IllegalTransitionError: () => IllegalTransitionError,
|
|
LEGAL_TRANSITIONS: () => LEGAL_TRANSITIONS,
|
|
ListInputSchema: () => ListInputSchema,
|
|
ListOutputSchema: () => ListOutputSchema,
|
|
MemoryPersistAdapter: () => MemoryPersistAdapter,
|
|
PRIORITY_BACKGROUND: () => PRIORITY_BACKGROUND,
|
|
PRIORITY_SUBSCRIPTION: () => PRIORITY_SUBSCRIPTION,
|
|
PRIORITY_USER: () => PRIORITY_USER,
|
|
PauseInputSchema: () => PauseInputSchema,
|
|
ProcessRegistry: () => ProcessRegistry,
|
|
RetryInputSchema: () => RetryInputSchema,
|
|
RetryScheduler: () => RetryScheduler,
|
|
Scheduler: () => Scheduler,
|
|
SetMaxConcurrencyInputSchema: () => SetMaxConcurrencyInputSchema,
|
|
SetMaxPerGroupInputSchema: () => SetMaxPerGroupInputSchema,
|
|
SqlitePersistAdapter: () => SqlitePersistAdapter,
|
|
StatsOutputSchema: () => StatsOutputSchema,
|
|
TERMINAL_STATUSES: () => TERMINAL_STATUSES,
|
|
TaskIdInputSchema: () => TaskIdInputSchema,
|
|
TaskInputSchema: () => TaskInputSchema,
|
|
TaskKindSchema: () => TaskKindSchema,
|
|
TaskOutputSchema: () => TaskOutputSchema,
|
|
TaskPrioritySchema: () => TaskPrioritySchema,
|
|
TaskProgressSchema: () => TaskProgressSchema,
|
|
TaskQueueAPI: () => TaskQueueAPI,
|
|
TaskSchema: () => TaskSchema,
|
|
TaskStatusSchema: () => TaskStatusSchema,
|
|
TaskStore: () => TaskStore,
|
|
VoidOutputSchema: () => VoidOutputSchema,
|
|
Watchdog: () => Watchdog,
|
|
classify: () => classify,
|
|
computeBackoffMs: () => computeBackoffMs,
|
|
defaultMaxAttempts: () => defaultMaxAttempts,
|
|
getRuleForCategory: () => getRuleForCategory,
|
|
isLegalTransition: () => isLegalTransition,
|
|
isPidAlive: () => isPidAlive2,
|
|
legacyDownloadStatusOf: () => legacyDownloadStatusOf,
|
|
legacySubStatusOf: () => legacySubStatusOf,
|
|
parseRetryAfter: () => parseRetryAfter,
|
|
projectTaskToLegacy: () => projectTaskToLegacy,
|
|
readPidStartTime: () => readPidStartTime,
|
|
sanitizeOutput: () => sanitizeOutput,
|
|
setReadPidStartTimeImpl: () => setReadPidStartTimeImpl,
|
|
takeStderrTail: () => takeStderrTail,
|
|
taskQueueContract: () => taskQueueContract,
|
|
transition: () => transition,
|
|
virtualError: () => virtualError
|
|
});
|
|
var init_src = __esm({
|
|
"../../packages/task-queue/src/index.ts"() {
|
|
"use strict";
|
|
init_types();
|
|
init_schemas3();
|
|
init_contract();
|
|
init_fsm();
|
|
init_classifier();
|
|
init_events();
|
|
init_scheduler2();
|
|
init_store();
|
|
init_process();
|
|
init_persist();
|
|
init_api2();
|
|
init_projection();
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/browser-cookies-setting.ts
|
|
var normalizeProfileInput, parseBrowserCookiesSetting, buildBrowserCookiesSetting;
|
|
var init_browser_cookies_setting = __esm({
|
|
"../../packages/downloader-core/src/browser-cookies-setting.ts"() {
|
|
"use strict";
|
|
normalizeProfileInput = (value2) => value2.trim().replace(/^['"]|['"]$/g, "");
|
|
parseBrowserCookiesSetting = (value2) => {
|
|
if (!value2 || value2 === "none") {
|
|
return { browser: "none", profile: "" };
|
|
}
|
|
const separatorIndex = value2.indexOf(":");
|
|
if (separatorIndex === -1) {
|
|
return { browser: value2, profile: "" };
|
|
}
|
|
const browser = value2.slice(0, separatorIndex).trim();
|
|
const profile = normalizeProfileInput(value2.slice(separatorIndex + 1));
|
|
return { browser: browser || "none", profile };
|
|
};
|
|
buildBrowserCookiesSetting = (browser, profile) => {
|
|
const trimmedBrowser = browser.trim();
|
|
if (!trimmedBrowser || trimmedBrowser === "none") {
|
|
return "none";
|
|
}
|
|
const trimmedProfile = normalizeProfileInput(profile);
|
|
return trimmedProfile ? `${trimmedBrowser}:${trimmedProfile}` : trimmedBrowser;
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/schemas.ts
|
|
var DownloadTypeSchema, DownloadStatusSchema, DownloadProgressSchema, TaskQueueInternalStatusSchema, TaskQueueSubStatusSchema, TaskQueueErrorCategorySchema, DownloadTaskSchema, DownloadRuntimeSettingsSchema, OneClickQualityPresetSchema, OneClickContainerOptionSchema, ThemeValueSchema, WebAppSettingsSchema, CreateDownloadInputSchema, VideoInfoInputSchema, PlaylistInfoInputSchema, VideoFormatSchema, VideoInfoSchema, PlaylistEntrySchema, PlaylistInfoSchema, PlaylistDownloadInputSchema, PlaylistDownloadEntrySchema, PlaylistDownloadResultSchema, StatusOutputSchema, CreateDownloadOutputSchema, ListDownloadsOutputSchema, CancelDownloadInputSchema, CancelDownloadOutputSchema, ListHistoryOutputSchema, VideoInfoOutputSchema, PlaylistInfoOutputSchema, PlaylistDownloadOutputSchema, RemoveHistoryItemsInputSchema, RemoveHistoryByPlaylistInputSchema, RemoveHistoryOutputSchema, FilePathInputSchema, DirectoryListInputSchema, UploadSettingsFileKindSchema, UploadSettingsFileInputSchema, FileExistsOutputSchema, FileOperationOutputSchema, DirectoryEntrySchema, ListDirectoriesOutputSchema, UploadSettingsFileOutputSchema, GetWebSettingsOutputSchema, SetWebSettingsInputSchema;
|
|
var init_schemas4 = __esm({
|
|
"../../packages/downloader-core/src/schemas.ts"() {
|
|
"use strict";
|
|
init_zod();
|
|
DownloadTypeSchema = external_exports.enum(["video", "audio"]);
|
|
DownloadStatusSchema = external_exports.enum([
|
|
"pending",
|
|
"downloading",
|
|
"processing",
|
|
"completed",
|
|
"error",
|
|
"cancelled"
|
|
]);
|
|
DownloadProgressSchema = external_exports.object({
|
|
percent: external_exports.number(),
|
|
currentSpeed: external_exports.string().optional(),
|
|
eta: external_exports.string().optional(),
|
|
downloaded: external_exports.string().optional(),
|
|
total: external_exports.string().optional()
|
|
});
|
|
TaskQueueInternalStatusSchema = external_exports.enum([
|
|
"queued",
|
|
"running",
|
|
"processing",
|
|
"paused",
|
|
"retry-scheduled",
|
|
"completed",
|
|
"failed",
|
|
"cancelled"
|
|
]);
|
|
TaskQueueSubStatusSchema = external_exports.enum(["queued", "paused", "retry-scheduled"]);
|
|
TaskQueueErrorCategorySchema = external_exports.enum([
|
|
"http-429",
|
|
"auth-required",
|
|
"geo-blocked",
|
|
"not-found",
|
|
"disk-full",
|
|
"permission-denied",
|
|
"binary-missing",
|
|
"ffmpeg",
|
|
"network-transient",
|
|
"stalled",
|
|
"cancelled-by-user",
|
|
"output-missing",
|
|
"unknown"
|
|
]);
|
|
DownloadTaskSchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
url: external_exports.url(),
|
|
title: external_exports.string().optional(),
|
|
thumbnail: external_exports.string().optional(),
|
|
type: DownloadTypeSchema,
|
|
status: DownloadStatusSchema,
|
|
createdAt: external_exports.number(),
|
|
startedAt: external_exports.number().optional(),
|
|
completedAt: external_exports.number().optional(),
|
|
duration: external_exports.number().optional(),
|
|
fileSize: external_exports.number().optional(),
|
|
speed: external_exports.string().optional(),
|
|
ytDlpCommand: external_exports.string().optional(),
|
|
ytDlpLog: external_exports.string().optional(),
|
|
downloadPath: external_exports.string().optional(),
|
|
savedFileName: external_exports.string().optional(),
|
|
description: external_exports.string().optional(),
|
|
channel: external_exports.string().optional(),
|
|
uploader: external_exports.string().optional(),
|
|
viewCount: external_exports.number().optional(),
|
|
tags: external_exports.array(external_exports.string()).optional(),
|
|
selectedFormat: external_exports.lazy(() => VideoFormatSchema).optional(),
|
|
playlistId: external_exports.string().optional(),
|
|
playlistTitle: external_exports.string().optional(),
|
|
playlistIndex: external_exports.number().optional(),
|
|
playlistSize: external_exports.number().optional(),
|
|
progress: DownloadProgressSchema.optional(),
|
|
error: external_exports.string().optional(),
|
|
// ── NEX-131 projection extras ──
|
|
internalStatus: TaskQueueInternalStatusSchema.optional(),
|
|
subStatus: TaskQueueSubStatusSchema.optional(),
|
|
statusReason: external_exports.string().nullable().optional(),
|
|
errorCategory: TaskQueueErrorCategorySchema.optional(),
|
|
uiMessageKey: external_exports.string().optional(),
|
|
nextRetryAt: external_exports.number().optional(),
|
|
attempt: external_exports.number().int().nonnegative().optional(),
|
|
maxAttempts: external_exports.number().int().nonnegative().optional()
|
|
});
|
|
DownloadRuntimeSettingsSchema = external_exports.object({
|
|
downloadPath: external_exports.string().optional(),
|
|
browserForCookies: external_exports.string().optional(),
|
|
cookiesPath: external_exports.string().optional(),
|
|
proxy: external_exports.string().optional(),
|
|
configPath: external_exports.string().optional(),
|
|
embedSubs: external_exports.boolean().optional(),
|
|
embedThumbnail: external_exports.boolean().optional(),
|
|
embedMetadata: external_exports.boolean().optional(),
|
|
embedChapters: external_exports.boolean().optional()
|
|
});
|
|
OneClickQualityPresetSchema = external_exports.enum([
|
|
"best",
|
|
"good",
|
|
"normal",
|
|
"bad",
|
|
"worst"
|
|
]);
|
|
OneClickContainerOptionSchema = external_exports.enum([
|
|
"auto",
|
|
"mp4",
|
|
"mkv",
|
|
"webm",
|
|
"original"
|
|
]);
|
|
ThemeValueSchema = external_exports.enum(["light", "dark", "system"]);
|
|
WebAppSettingsSchema = external_exports.object({
|
|
downloadPath: external_exports.string(),
|
|
maxConcurrentDownloads: external_exports.number().int().min(1).max(10),
|
|
browserForCookies: external_exports.string(),
|
|
cookiesPath: external_exports.string(),
|
|
proxy: external_exports.string(),
|
|
configPath: external_exports.string(),
|
|
betaProgram: external_exports.boolean(),
|
|
language: external_exports.string(),
|
|
theme: ThemeValueSchema,
|
|
oneClickDownload: external_exports.boolean(),
|
|
oneClickDownloadType: DownloadTypeSchema,
|
|
oneClickQuality: OneClickQualityPresetSchema,
|
|
oneClickContainer: OneClickContainerOptionSchema.default("auto"),
|
|
closeToTray: external_exports.boolean(),
|
|
autoUpdate: external_exports.boolean(),
|
|
subscriptionOnlyLatestDefault: external_exports.boolean(),
|
|
enableAnalytics: external_exports.boolean(),
|
|
embedSubs: external_exports.boolean(),
|
|
embedThumbnail: external_exports.boolean(),
|
|
embedMetadata: external_exports.boolean(),
|
|
embedChapters: external_exports.boolean(),
|
|
shareWatermark: external_exports.boolean()
|
|
});
|
|
CreateDownloadInputSchema = external_exports.object({
|
|
url: external_exports.url(),
|
|
type: DownloadTypeSchema,
|
|
title: external_exports.string().optional(),
|
|
thumbnail: external_exports.string().optional(),
|
|
duration: external_exports.number().optional(),
|
|
description: external_exports.string().optional(),
|
|
channel: external_exports.string().optional(),
|
|
uploader: external_exports.string().optional(),
|
|
viewCount: external_exports.number().optional(),
|
|
tags: external_exports.array(external_exports.string()).optional(),
|
|
selectedFormat: external_exports.lazy(() => VideoFormatSchema).optional(),
|
|
playlistId: external_exports.string().optional(),
|
|
playlistTitle: external_exports.string().optional(),
|
|
playlistIndex: external_exports.number().optional(),
|
|
playlistSize: external_exports.number().optional(),
|
|
format: external_exports.string().optional(),
|
|
audioFormat: external_exports.string().optional(),
|
|
audioFormatIds: external_exports.array(external_exports.string()).optional(),
|
|
startTime: external_exports.string().optional(),
|
|
endTime: external_exports.string().optional(),
|
|
customDownloadPath: external_exports.string().optional(),
|
|
customFilenameTemplate: external_exports.string().optional(),
|
|
containerFormat: OneClickContainerOptionSchema.optional(),
|
|
settings: DownloadRuntimeSettingsSchema.optional()
|
|
});
|
|
VideoInfoInputSchema = external_exports.object({
|
|
url: external_exports.url(),
|
|
settings: DownloadRuntimeSettingsSchema.optional()
|
|
});
|
|
PlaylistInfoInputSchema = external_exports.object({
|
|
url: external_exports.url(),
|
|
settings: DownloadRuntimeSettingsSchema.optional()
|
|
});
|
|
VideoFormatSchema = external_exports.object({
|
|
formatId: external_exports.string(),
|
|
ext: external_exports.string(),
|
|
width: external_exports.number().optional(),
|
|
height: external_exports.number().optional(),
|
|
fps: external_exports.number().optional(),
|
|
vcodec: external_exports.string().optional(),
|
|
acodec: external_exports.string().optional(),
|
|
filesize: external_exports.number().optional(),
|
|
filesizeApprox: external_exports.number().optional(),
|
|
formatNote: external_exports.string().optional(),
|
|
tbr: external_exports.number().optional(),
|
|
quality: external_exports.number().optional(),
|
|
protocol: external_exports.string().optional(),
|
|
language: external_exports.string().optional(),
|
|
videoExt: external_exports.string().optional(),
|
|
audioExt: external_exports.string().optional()
|
|
});
|
|
VideoInfoSchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
title: external_exports.string(),
|
|
thumbnail: external_exports.string().optional(),
|
|
duration: external_exports.number().optional(),
|
|
extractorKey: external_exports.string().optional(),
|
|
webpageUrl: external_exports.string().optional(),
|
|
description: external_exports.string().optional(),
|
|
viewCount: external_exports.number().optional(),
|
|
uploader: external_exports.string().optional(),
|
|
tags: external_exports.array(external_exports.string()).optional(),
|
|
formats: external_exports.array(VideoFormatSchema)
|
|
});
|
|
PlaylistEntrySchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
title: external_exports.string(),
|
|
url: external_exports.url(),
|
|
index: external_exports.number(),
|
|
thumbnail: external_exports.string().optional()
|
|
});
|
|
PlaylistInfoSchema = external_exports.object({
|
|
id: external_exports.string(),
|
|
title: external_exports.string(),
|
|
entries: external_exports.array(PlaylistEntrySchema),
|
|
entryCount: external_exports.number()
|
|
});
|
|
PlaylistDownloadInputSchema = external_exports.object({
|
|
url: external_exports.url(),
|
|
type: DownloadTypeSchema,
|
|
format: external_exports.string().optional(),
|
|
audioFormat: external_exports.string().optional(),
|
|
audioFormatIds: external_exports.array(external_exports.string()).optional(),
|
|
customDownloadPath: external_exports.string().optional(),
|
|
customFilenameTemplate: external_exports.string().optional(),
|
|
entryIds: external_exports.array(external_exports.string()).optional(),
|
|
startIndex: external_exports.number().int().positive().optional(),
|
|
endIndex: external_exports.number().int().positive().optional(),
|
|
containerFormat: OneClickContainerOptionSchema.optional(),
|
|
settings: DownloadRuntimeSettingsSchema.optional()
|
|
});
|
|
PlaylistDownloadEntrySchema = external_exports.object({
|
|
downloadId: external_exports.string(),
|
|
entryId: external_exports.string(),
|
|
title: external_exports.string(),
|
|
url: external_exports.url(),
|
|
index: external_exports.number()
|
|
});
|
|
PlaylistDownloadResultSchema = external_exports.object({
|
|
groupId: external_exports.string(),
|
|
playlistId: external_exports.string(),
|
|
playlistTitle: external_exports.string(),
|
|
type: DownloadTypeSchema,
|
|
totalCount: external_exports.number(),
|
|
startIndex: external_exports.number(),
|
|
endIndex: external_exports.number(),
|
|
entries: external_exports.array(PlaylistDownloadEntrySchema)
|
|
});
|
|
StatusOutputSchema = external_exports.object({
|
|
ok: external_exports.boolean(),
|
|
version: external_exports.string(),
|
|
active: external_exports.number(),
|
|
pending: external_exports.number()
|
|
});
|
|
CreateDownloadOutputSchema = external_exports.object({
|
|
download: DownloadTaskSchema
|
|
});
|
|
ListDownloadsOutputSchema = external_exports.object({
|
|
downloads: external_exports.array(DownloadTaskSchema)
|
|
});
|
|
CancelDownloadInputSchema = external_exports.object({
|
|
id: external_exports.string()
|
|
});
|
|
CancelDownloadOutputSchema = external_exports.object({
|
|
cancelled: external_exports.boolean()
|
|
});
|
|
ListHistoryOutputSchema = external_exports.object({
|
|
history: external_exports.array(DownloadTaskSchema)
|
|
});
|
|
VideoInfoOutputSchema = external_exports.object({
|
|
video: VideoInfoSchema
|
|
});
|
|
PlaylistInfoOutputSchema = external_exports.object({
|
|
playlist: PlaylistInfoSchema
|
|
});
|
|
PlaylistDownloadOutputSchema = external_exports.object({
|
|
result: PlaylistDownloadResultSchema
|
|
});
|
|
RemoveHistoryItemsInputSchema = external_exports.object({
|
|
ids: external_exports.array(external_exports.string()).min(1)
|
|
});
|
|
RemoveHistoryByPlaylistInputSchema = external_exports.object({
|
|
playlistId: external_exports.string().min(1)
|
|
});
|
|
RemoveHistoryOutputSchema = external_exports.object({
|
|
removed: external_exports.number().int().nonnegative()
|
|
});
|
|
FilePathInputSchema = external_exports.object({
|
|
path: external_exports.string().min(1)
|
|
});
|
|
DirectoryListInputSchema = external_exports.object({
|
|
path: external_exports.string().optional()
|
|
});
|
|
UploadSettingsFileKindSchema = external_exports.enum(["cookies", "config"]);
|
|
UploadSettingsFileInputSchema = external_exports.object({
|
|
kind: UploadSettingsFileKindSchema,
|
|
fileName: external_exports.string().trim().min(1).max(255),
|
|
content: external_exports.string().min(1).max(1e6)
|
|
});
|
|
FileExistsOutputSchema = external_exports.object({
|
|
exists: external_exports.boolean()
|
|
});
|
|
FileOperationOutputSchema = external_exports.object({
|
|
success: external_exports.boolean()
|
|
});
|
|
DirectoryEntrySchema = external_exports.object({
|
|
name: external_exports.string(),
|
|
path: external_exports.string()
|
|
});
|
|
ListDirectoriesOutputSchema = external_exports.object({
|
|
currentPath: external_exports.string(),
|
|
parentPath: external_exports.string().nullable(),
|
|
directories: external_exports.array(DirectoryEntrySchema)
|
|
});
|
|
UploadSettingsFileOutputSchema = external_exports.object({
|
|
path: external_exports.string()
|
|
});
|
|
GetWebSettingsOutputSchema = external_exports.object({
|
|
settings: WebAppSettingsSchema
|
|
});
|
|
SetWebSettingsInputSchema = external_exports.object({
|
|
settings: WebAppSettingsSchema
|
|
});
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/contract.ts
|
|
var downloaderContract;
|
|
var init_contract2 = __esm({
|
|
"../../packages/downloader-core/src/contract.ts"() {
|
|
"use strict";
|
|
init_dist5();
|
|
init_schemas4();
|
|
downloaderContract = {
|
|
status: oc.output(StatusOutputSchema),
|
|
videoInfo: oc.input(VideoInfoInputSchema).output(VideoInfoOutputSchema),
|
|
playlist: {
|
|
info: oc.input(PlaylistInfoInputSchema).output(PlaylistInfoOutputSchema),
|
|
download: oc.input(PlaylistDownloadInputSchema).output(PlaylistDownloadOutputSchema)
|
|
},
|
|
downloads: {
|
|
create: oc.input(CreateDownloadInputSchema).output(CreateDownloadOutputSchema),
|
|
list: oc.output(ListDownloadsOutputSchema),
|
|
cancel: oc.input(CancelDownloadInputSchema).output(CancelDownloadOutputSchema)
|
|
},
|
|
history: {
|
|
list: oc.output(ListHistoryOutputSchema),
|
|
removeItems: oc.input(RemoveHistoryItemsInputSchema).output(RemoveHistoryOutputSchema),
|
|
removeByPlaylist: oc.input(RemoveHistoryByPlaylistInputSchema).output(RemoveHistoryOutputSchema)
|
|
},
|
|
files: {
|
|
exists: oc.input(FilePathInputSchema).output(FileExistsOutputSchema),
|
|
listDirectories: oc.input(DirectoryListInputSchema).output(ListDirectoriesOutputSchema),
|
|
openFile: oc.input(FilePathInputSchema).output(FileOperationOutputSchema),
|
|
openFileLocation: oc.input(FilePathInputSchema).output(FileOperationOutputSchema),
|
|
copyFileToClipboard: oc.input(FilePathInputSchema).output(FileOperationOutputSchema),
|
|
deleteFile: oc.input(FilePathInputSchema).output(FileOperationOutputSchema),
|
|
uploadSettingsFile: oc.input(UploadSettingsFileInputSchema).output(UploadSettingsFileOutputSchema)
|
|
},
|
|
settings: {
|
|
get: oc.output(GetWebSettingsOutputSchema),
|
|
set: oc.input(SetWebSettingsInputSchema).output(GetWebSettingsOutputSchema)
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/yt-dlp-args.ts
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
var YOUTUBE_HOST_SUFFIXES, YOUTUBE_SAFE_PLAYER_CLIENTS, DEFAULT_FILENAME_TEMPLATE, WINDOWS_FILENAME_TRIM_LENGTH, DEFAULT_RETRIES, DEFAULT_FRAGMENT_RETRIES, DEFAULT_RETRY_SLEEP, DEFAULT_SOCKET_TIMEOUT, appendNetworkResilienceArgs, hasYouTubeHost, trim, normalizeBrowserCookiesSettingForYtDlp, isBilibiliUrl, resolvePathWithHome, sanitizeFilenameTemplate, appendPlatformFilenameSafetyArgs, isYouTubeUrl, appendYouTubeSafeExtractorArgs, formatYtDlpCommand, resolveFfmpegLocationFromPath, resolveVideoFormatSelector, resolveAudioFormatSelector, buildDownloadArgs, buildVideoInfoArgs, buildPlaylistInfoArgs;
|
|
var init_yt_dlp_args = __esm({
|
|
"../../packages/downloader-core/src/yt-dlp-args.ts"() {
|
|
"use strict";
|
|
init_browser_cookies_setting();
|
|
YOUTUBE_HOST_SUFFIXES = ["youtube.com", "youtu.be", "youtube-nocookie.com"];
|
|
YOUTUBE_SAFE_PLAYER_CLIENTS = "default,-web";
|
|
DEFAULT_FILENAME_TEMPLATE = "%(title)s via VidBee.%(ext)s";
|
|
WINDOWS_FILENAME_TRIM_LENGTH = "120";
|
|
DEFAULT_RETRIES = "30";
|
|
DEFAULT_FRAGMENT_RETRIES = "30";
|
|
DEFAULT_RETRY_SLEEP = "2";
|
|
DEFAULT_SOCKET_TIMEOUT = "30";
|
|
appendNetworkResilienceArgs = (args) => {
|
|
args.push("--retries", DEFAULT_RETRIES);
|
|
args.push("--fragment-retries", DEFAULT_FRAGMENT_RETRIES);
|
|
args.push("--retry-sleep", DEFAULT_RETRY_SLEEP);
|
|
args.push("--socket-timeout", DEFAULT_SOCKET_TIMEOUT);
|
|
};
|
|
hasYouTubeHost = (host) => YOUTUBE_HOST_SUFFIXES.some((suffix) => host === suffix || host.endsWith(`.${suffix}`));
|
|
trim = (value2) => value2?.trim() ?? "";
|
|
normalizeBrowserCookiesSettingForYtDlp = (value2) => {
|
|
const rawValue = trim(value2);
|
|
if (!rawValue || rawValue === "none") {
|
|
return "none";
|
|
}
|
|
const { browser, profile } = parseBrowserCookiesSetting(rawValue);
|
|
if (!profile) {
|
|
return browser;
|
|
}
|
|
if (browser === "safari") {
|
|
return "safari";
|
|
}
|
|
const looksLikePath = profile.includes("/") || profile.includes("\\");
|
|
if (!looksLikePath) {
|
|
return `${browser}:${profile}`;
|
|
}
|
|
const profileName = profile.includes("\\") ? path.win32.basename(profile) : path.posix.basename(profile);
|
|
return profileName ? `${browser}:${profileName}` : browser;
|
|
};
|
|
isBilibiliUrl = (url2) => {
|
|
try {
|
|
const host = new URL(url2).hostname.toLowerCase();
|
|
return host.includes("bilibili.com") || host.includes("b23.tv") || host.includes("bili.tv");
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
resolvePathWithHome = (rawPath) => {
|
|
const trimmed = trim(rawPath);
|
|
if (!trimmed) {
|
|
return void 0;
|
|
}
|
|
if (trimmed === "~") {
|
|
return os.homedir();
|
|
}
|
|
if (trimmed.startsWith("~/") || trimmed.startsWith("~\\")) {
|
|
return path.join(os.homedir(), trimmed.slice(2));
|
|
}
|
|
return trimmed;
|
|
};
|
|
sanitizeFilenameTemplate = (template) => {
|
|
const trimmed = template.trim();
|
|
if (!trimmed) {
|
|
return DEFAULT_FILENAME_TEMPLATE;
|
|
}
|
|
const normalized = trimmed.replace(/\\/g, "/");
|
|
const safeParts = normalized.split("/").map((part) => part.trim()).filter((part) => part !== "" && part !== "." && part !== "..").map((part) => part.replace(/[<>:"|?*]/g, "-").replace(/[. ]+$/g, "")).filter((part) => part !== "");
|
|
return safeParts.length === 0 ? DEFAULT_FILENAME_TEMPLATE : safeParts.join("/");
|
|
};
|
|
appendPlatformFilenameSafetyArgs = (args, platform2 = process.platform) => {
|
|
if (platform2 === "win32") {
|
|
args.push("--windows-filenames");
|
|
}
|
|
if (platform2 === "win32" || platform2 === "darwin" || platform2 === "linux") {
|
|
args.push("--trim-filenames", WINDOWS_FILENAME_TRIM_LENGTH);
|
|
return;
|
|
}
|
|
};
|
|
isYouTubeUrl = (url2) => {
|
|
try {
|
|
const host = new URL(url2).hostname.toLowerCase();
|
|
return hasYouTubeHost(host);
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
appendYouTubeSafeExtractorArgs = (args, url2) => {
|
|
if (!isYouTubeUrl(url2)) {
|
|
return;
|
|
}
|
|
args.push("--extractor-args", `youtube:player_client=${YOUTUBE_SAFE_PLAYER_CLIENTS}`);
|
|
};
|
|
formatYtDlpCommand = (args) => {
|
|
const quoted = args.map((arg) => {
|
|
if (arg === "") {
|
|
return '""';
|
|
}
|
|
if (/[\s"'\\]/.test(arg)) {
|
|
return `"${arg.replace(/(["\\])/g, "\\$1")}"`;
|
|
}
|
|
return arg;
|
|
});
|
|
return `yt-dlp ${quoted.join(" ")}`;
|
|
};
|
|
resolveFfmpegLocationFromPath = (ffmpegPath) => path.dirname(ffmpegPath);
|
|
resolveVideoFormatSelector = (options) => {
|
|
const format = options.format;
|
|
const audioFormat = options.audioFormat;
|
|
const audioFormatIds = (options.audioFormatIds ?? []).filter((id) => id.trim() !== "");
|
|
if (format && audioFormat === "") {
|
|
return format;
|
|
}
|
|
if (format && (format.includes("/") || format.includes("+") || format.includes("["))) {
|
|
return format;
|
|
}
|
|
if (audioFormatIds.length > 0) {
|
|
const baseVideo = format && format !== "best" ? format : "bestvideo*";
|
|
return `${baseVideo}+${audioFormatIds.join("+")}`;
|
|
}
|
|
if (!format || format === "best") {
|
|
if (audioFormat === "none") {
|
|
return "bestvideo+none";
|
|
}
|
|
if (!audioFormat || audioFormat === "best") {
|
|
return "bestvideo+bestaudio/best";
|
|
}
|
|
return `bestvideo+${audioFormat}`;
|
|
}
|
|
if (audioFormat === "none") {
|
|
return `${format}+none`;
|
|
}
|
|
if (!audioFormat || audioFormat === "best") {
|
|
return `${format}+bestaudio/best`;
|
|
}
|
|
return `${format}+${audioFormat}`;
|
|
};
|
|
resolveAudioFormatSelector = (options) => {
|
|
const format = options.format;
|
|
if (!format) {
|
|
return "bestaudio";
|
|
}
|
|
if (format.includes("/") || format.includes("+") || format.includes("[")) {
|
|
return format;
|
|
}
|
|
return format;
|
|
};
|
|
buildDownloadArgs = (options, fallbackDownloadPath, settings, jsRuntimeArgs = []) => {
|
|
const args = ["--no-playlist", "--no-mtime", "--encoding", "utf-8"];
|
|
if (options.type === "video") {
|
|
const formatSelector = resolveVideoFormatSelector(options);
|
|
if (formatSelector) {
|
|
args.push("-f", formatSelector);
|
|
}
|
|
if ((options.audioFormatIds?.length ?? 0) > 0 || formatSelector.includes("mergeall")) {
|
|
args.push("--audio-multistreams");
|
|
}
|
|
const container = options.containerFormat ?? "auto";
|
|
if (container === "auto") {
|
|
args.push("--merge-output-format", "mp4/mkv");
|
|
} else if (container !== "original") {
|
|
args.push("--merge-output-format", container);
|
|
args.push("--remux-video", container);
|
|
}
|
|
} else if (options.type === "audio") {
|
|
args.push("-f", resolveAudioFormatSelector(options));
|
|
}
|
|
if (options.startTime || options.endTime) {
|
|
const start = options.startTime || "0";
|
|
const end = options.endTime || "";
|
|
args.push("--download-sections", `*${start}-${end}`);
|
|
}
|
|
const embedSubs = settings.embedSubs ?? true;
|
|
const embedThumbnail = settings.embedThumbnail ?? false;
|
|
const embedMetadata = settings.embedMetadata ?? true;
|
|
const embedChapters = settings.embedChapters ?? true;
|
|
const browserForCookies = normalizeBrowserCookiesSettingForYtDlp(settings.browserForCookies);
|
|
const cookiesPath = trim(settings.cookiesPath);
|
|
const hasSubtitleAuth = browserForCookies && browserForCookies !== "none" || Boolean(cookiesPath);
|
|
const shouldAttemptSubtitles = !isBilibiliUrl(options.url) || hasSubtitleAuth;
|
|
if (shouldAttemptSubtitles) {
|
|
if (embedSubs) {
|
|
args.push("--sub-langs", "all");
|
|
} else {
|
|
args.push("--write-subs");
|
|
}
|
|
args.push(embedSubs ? "--embed-subs" : "--no-embed-subs");
|
|
} else {
|
|
args.push("--no-embed-subs");
|
|
}
|
|
args.push(embedThumbnail ? "--embed-thumbnail" : "--no-embed-thumbnail");
|
|
args.push(embedMetadata ? "--embed-metadata" : "--no-embed-metadata");
|
|
args.push(embedChapters ? "--embed-chapters" : "--no-embed-chapters");
|
|
const baseDownloadPath = trim(options.customDownloadPath) || trim(settings.downloadPath) || fallbackDownloadPath;
|
|
const filenameTemplate = sanitizeFilenameTemplate(
|
|
options.customFilenameTemplate ?? DEFAULT_FILENAME_TEMPLATE
|
|
);
|
|
const safeTemplate = filenameTemplate.replace(/^[\\/]+/, "");
|
|
args.push("-o", path.join(baseDownloadPath, safeTemplate));
|
|
args.push("--continue");
|
|
args.push("--no-playlist-reverse");
|
|
appendPlatformFilenameSafetyArgs(args);
|
|
appendNetworkResilienceArgs(args);
|
|
if (browserForCookies && browserForCookies !== "none") {
|
|
args.push("--cookies-from-browser", browserForCookies);
|
|
}
|
|
if (cookiesPath) {
|
|
args.push("--cookies", cookiesPath);
|
|
}
|
|
const proxy = trim(settings.proxy);
|
|
if (proxy) {
|
|
args.push("--proxy", proxy);
|
|
}
|
|
const configPath = resolvePathWithHome(settings.configPath);
|
|
if (configPath) {
|
|
args.push("--config-location", configPath);
|
|
} else {
|
|
appendYouTubeSafeExtractorArgs(args, options.url);
|
|
}
|
|
if (jsRuntimeArgs.length > 0) {
|
|
args.push(...jsRuntimeArgs);
|
|
}
|
|
args.push(options.url);
|
|
return args;
|
|
};
|
|
buildVideoInfoArgs = (url2, settings, jsRuntimeArgs = []) => {
|
|
const args = ["-j", "--no-playlist", "--no-warnings", "--encoding", "utf-8"];
|
|
const proxy = trim(settings.proxy);
|
|
if (proxy) {
|
|
args.push("--proxy", proxy);
|
|
}
|
|
args.push("--socket-timeout", DEFAULT_SOCKET_TIMEOUT);
|
|
const browserForCookies = normalizeBrowserCookiesSettingForYtDlp(settings.browserForCookies);
|
|
if (browserForCookies && browserForCookies !== "none") {
|
|
args.push("--cookies-from-browser", browserForCookies);
|
|
}
|
|
const cookiesPath = trim(settings.cookiesPath);
|
|
if (cookiesPath) {
|
|
args.push("--cookies", cookiesPath);
|
|
}
|
|
const configPath = resolvePathWithHome(settings.configPath);
|
|
if (configPath) {
|
|
args.push("--config-location", configPath);
|
|
} else {
|
|
appendYouTubeSafeExtractorArgs(args, url2);
|
|
}
|
|
if (jsRuntimeArgs.length > 0) {
|
|
args.push(...jsRuntimeArgs);
|
|
}
|
|
args.push(url2);
|
|
return args;
|
|
};
|
|
buildPlaylistInfoArgs = (url2, settings, jsRuntimeArgs = []) => {
|
|
const args = ["-J", "--flat-playlist", "--no-warnings", "--encoding", "utf-8"];
|
|
const proxy = trim(settings.proxy);
|
|
if (proxy) {
|
|
args.push("--proxy", proxy);
|
|
}
|
|
args.push("--socket-timeout", DEFAULT_SOCKET_TIMEOUT);
|
|
const browserForCookies = normalizeBrowserCookiesSettingForYtDlp(settings.browserForCookies);
|
|
if (browserForCookies && browserForCookies !== "none") {
|
|
args.push("--cookies-from-browser", browserForCookies);
|
|
}
|
|
const cookiesPath = trim(settings.cookiesPath);
|
|
if (cookiesPath) {
|
|
args.push("--cookies", cookiesPath);
|
|
}
|
|
const configPath = resolvePathWithHome(settings.configPath);
|
|
if (configPath) {
|
|
args.push("--config-location", configPath);
|
|
} else {
|
|
appendYouTubeSafeExtractorArgs(args, url2);
|
|
}
|
|
if (jsRuntimeArgs.length > 0) {
|
|
args.push(...jsRuntimeArgs);
|
|
}
|
|
args.push(url2);
|
|
return args;
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/downloader-core.ts
|
|
import { execSync } from "node:child_process";
|
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
import { EventEmitter } from "node:events";
|
|
import fs from "node:fs";
|
|
import { createRequire } from "node:module";
|
|
import os2 from "node:os";
|
|
import path2 from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
var require2, YTDlpWrapModule, YTDlpWrapCtor, DEFAULT_DOWNLOAD_DIR, DEFAULT_MAX_CONCURRENT, MAX_TASK_LOG_LENGTH, FFMPEG_NOT_FOUND_ERROR, MODULE_DIR, REPO_ROOT_FROM_MODULE, getDesktopResourcesDirs, ensureExecutable, resolveBundledYtDlpPath, resolveBundledFfmpegLocation, tryCommandPath, resolveYtDlpPath, resolveFfmpegLocation, resolveJsRuntimePath, resolveJsRuntimeArgs, clampPercent, toOptionalNumber, toOptionalString, toOptionalStringArray, toTerminal, isHttpUrl, resolvePlaylistEntryUrl, trimTaskLog, extractSavedFilePath, cloneVideoFormat, cloneTask, DownloaderCore;
|
|
var init_downloader_core = __esm({
|
|
"../../packages/downloader-core/src/downloader-core.ts"() {
|
|
"use strict";
|
|
init_yt_dlp_args();
|
|
require2 = createRequire(import.meta.url);
|
|
YTDlpWrapModule = require2("yt-dlp-wrap-plus");
|
|
YTDlpWrapCtor = YTDlpWrapModule.default ?? YTDlpWrapModule;
|
|
DEFAULT_DOWNLOAD_DIR = path2.join(os2.homedir(), "Downloads", "VidBee");
|
|
DEFAULT_MAX_CONCURRENT = 3;
|
|
MAX_TASK_LOG_LENGTH = 8e4;
|
|
FFMPEG_NOT_FOUND_ERROR = "ffmpeg/ffprobe not found. Use Desktop resources/ffmpeg, install in PATH, or set FFMPEG_PATH.";
|
|
MODULE_DIR = path2.dirname(fileURLToPath(import.meta.url));
|
|
REPO_ROOT_FROM_MODULE = path2.resolve(MODULE_DIR, "../../..");
|
|
getDesktopResourcesDirs = () => {
|
|
const dirs = [];
|
|
const cwd = process.cwd();
|
|
dirs.push(path2.join(cwd, "resources"));
|
|
dirs.push(path2.join(cwd, "apps", "desktop", "resources"));
|
|
dirs.push(path2.resolve(cwd, "..", "desktop", "resources"));
|
|
dirs.push(path2.join(REPO_ROOT_FROM_MODULE, "resources"));
|
|
dirs.push(path2.join(REPO_ROOT_FROM_MODULE, "apps", "desktop", "resources"));
|
|
if (process.env.NODE_ENV === "development") {
|
|
dirs.push(path2.join(REPO_ROOT_FROM_MODULE, "apps", "desktop", "resources"));
|
|
}
|
|
const resourcesPath = process.resourcesPath;
|
|
if (resourcesPath) {
|
|
dirs.push(path2.join(resourcesPath, "app.asar.unpacked", "resources"));
|
|
dirs.push(path2.join(resourcesPath, "resources"));
|
|
}
|
|
return Array.from(new Set(dirs));
|
|
};
|
|
ensureExecutable = (targetPath) => {
|
|
if (process.platform === "win32") {
|
|
return;
|
|
}
|
|
try {
|
|
fs.chmodSync(targetPath, 493);
|
|
} catch {
|
|
}
|
|
};
|
|
resolveBundledYtDlpPath = () => {
|
|
const binaryName = process.platform === "win32" ? "yt-dlp.exe" : process.platform === "darwin" ? "yt-dlp_macos" : "yt-dlp_linux";
|
|
for (const resourcesDir of getDesktopResourcesDirs()) {
|
|
const candidate = path2.join(resourcesDir, binaryName);
|
|
if (!fs.existsSync(candidate)) {
|
|
continue;
|
|
}
|
|
ensureExecutable(candidate);
|
|
return candidate;
|
|
}
|
|
return void 0;
|
|
};
|
|
resolveBundledFfmpegLocation = () => {
|
|
const ffmpegBinaryName = process.platform === "win32" ? "ffmpeg.exe" : "ffmpeg";
|
|
const ffprobeBinaryName = process.platform === "win32" ? "ffprobe.exe" : "ffprobe";
|
|
for (const resourcesDir of getDesktopResourcesDirs()) {
|
|
const candidateDir = path2.join(resourcesDir, "ffmpeg");
|
|
const ffmpegPath = path2.join(candidateDir, ffmpegBinaryName);
|
|
const ffprobePath = path2.join(candidateDir, ffprobeBinaryName);
|
|
if (!fs.existsSync(ffmpegPath) || !fs.existsSync(ffprobePath)) {
|
|
continue;
|
|
}
|
|
ensureExecutable(ffmpegPath);
|
|
ensureExecutable(ffprobePath);
|
|
return candidateDir;
|
|
}
|
|
return void 0;
|
|
};
|
|
tryCommandPath = (command) => {
|
|
const commandName = process.platform === "win32" ? `where ${command}` : `which ${command}`;
|
|
try {
|
|
const output = execSync(commandName, { stdio: ["ignore", "pipe", "ignore"] }).toString().split(/\r?\n/).map((value2) => value2.trim()).find((value2) => value2.length > 0);
|
|
return output ?? null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
};
|
|
resolveYtDlpPath = () => {
|
|
const envPath = process.env.YTDLP_PATH?.trim();
|
|
if (envPath && fs.existsSync(envPath)) {
|
|
return envPath;
|
|
}
|
|
const bundledPath = resolveBundledYtDlpPath();
|
|
if (bundledPath) {
|
|
return bundledPath;
|
|
}
|
|
const commandPath = tryCommandPath("yt-dlp");
|
|
if (commandPath) {
|
|
return commandPath;
|
|
}
|
|
throw new Error("yt-dlp binary not found. Set YTDLP_PATH or install yt-dlp in PATH.");
|
|
};
|
|
resolveFfmpegLocation = (ytDlpPath) => {
|
|
const ffmpegBinaryName = process.platform === "win32" ? "ffmpeg.exe" : "ffmpeg";
|
|
const ffprobeBinaryName = process.platform === "win32" ? "ffprobe.exe" : "ffprobe";
|
|
const resolveFromDirectory = (directory) => {
|
|
const ffmpegPath = path2.join(directory, ffmpegBinaryName);
|
|
const ffprobePath = path2.join(directory, ffprobeBinaryName);
|
|
if (!fs.existsSync(ffmpegPath) || !fs.existsSync(ffprobePath)) {
|
|
return void 0;
|
|
}
|
|
ensureExecutable(ffmpegPath);
|
|
ensureExecutable(ffprobePath);
|
|
return directory;
|
|
};
|
|
const envPath = process.env.FFMPEG_PATH?.trim();
|
|
if (envPath && fs.existsSync(envPath)) {
|
|
const stats = fs.statSync(envPath);
|
|
if (stats.isDirectory()) {
|
|
return resolveFromDirectory(envPath);
|
|
}
|
|
const candidateDir = path2.dirname(envPath);
|
|
return resolveFromDirectory(candidateDir);
|
|
}
|
|
if (ytDlpPath) {
|
|
const ytDlpDir = path2.dirname(ytDlpPath);
|
|
const sameDirResolved = resolveFromDirectory(ytDlpDir);
|
|
if (sameDirResolved) {
|
|
return sameDirResolved;
|
|
}
|
|
const siblingDirResolved = resolveFromDirectory(path2.join(ytDlpDir, "ffmpeg"));
|
|
if (siblingDirResolved) {
|
|
return siblingDirResolved;
|
|
}
|
|
}
|
|
const bundledLocation = resolveBundledFfmpegLocation();
|
|
if (bundledLocation) {
|
|
return bundledLocation;
|
|
}
|
|
const commandPath = tryCommandPath("ffmpeg");
|
|
if (commandPath) {
|
|
const resolved = resolveFromDirectory(path2.dirname(commandPath));
|
|
if (resolved) {
|
|
return resolved;
|
|
}
|
|
}
|
|
if (process.platform === "darwin") {
|
|
const macCommonDirs = ["/opt/homebrew/bin", "/usr/local/bin"];
|
|
for (const dirPath of macCommonDirs) {
|
|
const resolved = resolveFromDirectory(dirPath);
|
|
if (resolved) {
|
|
return resolved;
|
|
}
|
|
}
|
|
}
|
|
return void 0;
|
|
};
|
|
resolveJsRuntimePath = (runtime) => {
|
|
const envPath = process.env.YTDLP_JS_RUNTIME_PATH?.trim();
|
|
if (envPath && fs.existsSync(envPath)) {
|
|
return envPath;
|
|
}
|
|
const runtimeCandidates = [];
|
|
if (runtime === "deno") {
|
|
runtimeCandidates.push(process.platform === "win32" ? "deno.exe" : "deno");
|
|
} else if (runtime === "node") {
|
|
runtimeCandidates.push(process.platform === "win32" ? "node.exe" : "node");
|
|
} else if (runtime === "bun") {
|
|
runtimeCandidates.push(process.platform === "win32" ? "bun.exe" : "bun");
|
|
} else if (runtime === "quickjs") {
|
|
runtimeCandidates.push(process.platform === "win32" ? "qjs.exe" : "qjs");
|
|
} else {
|
|
runtimeCandidates.push(runtime);
|
|
if (process.platform === "win32" && !runtime.endsWith(".exe")) {
|
|
runtimeCandidates.push(`${runtime}.exe`);
|
|
}
|
|
}
|
|
for (const resourcesDir of getDesktopResourcesDirs()) {
|
|
for (const candidateName of runtimeCandidates) {
|
|
const candidatePath = path2.join(resourcesDir, candidateName);
|
|
if (!fs.existsSync(candidatePath)) {
|
|
continue;
|
|
}
|
|
ensureExecutable(candidatePath);
|
|
return candidatePath;
|
|
}
|
|
}
|
|
const commandPath = tryCommandPath(runtime);
|
|
return commandPath ?? void 0;
|
|
};
|
|
resolveJsRuntimeArgs = () => {
|
|
const runtime = (process.env.YTDLP_JS_RUNTIME || "deno").trim();
|
|
if (!runtime || runtime === "none") {
|
|
return [];
|
|
}
|
|
const runtimePath = resolveJsRuntimePath(runtime);
|
|
if (runtimePath) {
|
|
return ["--js-runtimes", `${runtime}:${runtimePath}`];
|
|
}
|
|
return process.env.YTDLP_JS_RUNTIME ? ["--js-runtimes", runtime] : [];
|
|
};
|
|
clampPercent = (value2) => {
|
|
if (typeof value2 !== "number" || Number.isNaN(value2)) {
|
|
return 0;
|
|
}
|
|
if (value2 < 0) {
|
|
return 0;
|
|
}
|
|
if (value2 > 100) {
|
|
return 100;
|
|
}
|
|
return value2;
|
|
};
|
|
toOptionalNumber = (value2) => {
|
|
if (typeof value2 !== "number" || Number.isNaN(value2)) {
|
|
return void 0;
|
|
}
|
|
return value2;
|
|
};
|
|
toOptionalString = (value2) => {
|
|
if (typeof value2 !== "string") {
|
|
return void 0;
|
|
}
|
|
const trimmed = value2.trim();
|
|
if (!trimmed) {
|
|
return void 0;
|
|
}
|
|
return trimmed;
|
|
};
|
|
toOptionalStringArray = (value2) => {
|
|
if (!Array.isArray(value2)) {
|
|
return void 0;
|
|
}
|
|
const list = value2.filter((entry) => typeof entry === "string").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
return list.length > 0 ? list : void 0;
|
|
};
|
|
toTerminal = (task) => task.status === "completed" || task.status === "error" || task.status === "cancelled";
|
|
isHttpUrl = (value2) => {
|
|
if (!value2) {
|
|
return false;
|
|
}
|
|
try {
|
|
const parsed = new URL(value2);
|
|
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
resolvePlaylistEntryUrl = (entry) => {
|
|
if (isHttpUrl(entry.url)) {
|
|
return toOptionalString(entry.url);
|
|
}
|
|
if (isHttpUrl(entry.webpage_url)) {
|
|
return toOptionalString(entry.webpage_url);
|
|
}
|
|
if (isHttpUrl(entry.original_url)) {
|
|
return toOptionalString(entry.original_url);
|
|
}
|
|
if (entry.url) {
|
|
const extractedId = entry.url.trim();
|
|
const extractor = entry.ie_key?.toLowerCase() ?? "";
|
|
if (extractor.includes("youtube")) {
|
|
return `https://www.youtube.com/watch?v=${extractedId}`;
|
|
}
|
|
if (extractor.includes("youtubemusic")) {
|
|
return `https://music.youtube.com/watch?v=${extractedId}`;
|
|
}
|
|
}
|
|
return void 0;
|
|
};
|
|
trimTaskLog = (value2) => {
|
|
if (value2.length <= MAX_TASK_LOG_LENGTH) {
|
|
return value2;
|
|
}
|
|
return value2.slice(value2.length - MAX_TASK_LOG_LENGTH);
|
|
};
|
|
extractSavedFilePath = (rawLog) => {
|
|
const log = rawLog.trim();
|
|
if (!log) {
|
|
return void 0;
|
|
}
|
|
const quotedPatterns = [
|
|
/Merging formats into "([^"]+)"/g,
|
|
/Destination:\s+"([^"]+)"/g,
|
|
/Destination:\s+'([^']+)'/g,
|
|
/\[download\]\s+([^\r\n]+?)\s+has already been downloaded/g
|
|
];
|
|
for (const pattern of quotedPatterns) {
|
|
const matches = Array.from(log.matchAll(pattern));
|
|
const lastMatch = matches.at(-1);
|
|
const candidate = lastMatch?.[1]?.trim();
|
|
if (candidate) {
|
|
return candidate;
|
|
}
|
|
}
|
|
const lines = log.split(/\r?\n/).reverse();
|
|
for (const line of lines) {
|
|
const destinationIndex = line.indexOf("Destination:");
|
|
if (destinationIndex >= 0) {
|
|
const candidate = line.slice(destinationIndex + "Destination:".length).trim();
|
|
if (candidate) {
|
|
return candidate;
|
|
}
|
|
}
|
|
}
|
|
return void 0;
|
|
};
|
|
cloneVideoFormat = (format) => {
|
|
if (!format) {
|
|
return void 0;
|
|
}
|
|
return { ...format };
|
|
};
|
|
cloneTask = (task) => ({
|
|
...task,
|
|
progress: task.progress ? { ...task.progress } : void 0,
|
|
tags: task.tags ? [...task.tags] : void 0,
|
|
selectedFormat: cloneVideoFormat(task.selectedFormat)
|
|
});
|
|
DownloaderCore = class extends EventEmitter {
|
|
maxConcurrent;
|
|
downloadDir;
|
|
defaultRuntimeSettings;
|
|
jsRuntimeArgs;
|
|
tasks = /* @__PURE__ */ new Map();
|
|
taskInputs = /* @__PURE__ */ new Map();
|
|
active = /* @__PURE__ */ new Map();
|
|
pending = [];
|
|
history = /* @__PURE__ */ new Map();
|
|
cancelled = /* @__PURE__ */ new Set();
|
|
ytdlp = null;
|
|
ffmpegLocation;
|
|
constructor(options = {}) {
|
|
super();
|
|
this.maxConcurrent = Math.max(options.maxConcurrent ?? DEFAULT_MAX_CONCURRENT, 1);
|
|
this.downloadDir = options.downloadDir?.trim() || DEFAULT_DOWNLOAD_DIR;
|
|
this.defaultRuntimeSettings = { ...options.runtimeSettings ?? {} };
|
|
this.jsRuntimeArgs = resolveJsRuntimeArgs();
|
|
}
|
|
async initialize() {
|
|
if (this.ytdlp) {
|
|
return;
|
|
}
|
|
fs.mkdirSync(this.downloadDir, { recursive: true });
|
|
const ytDlpPath = resolveYtDlpPath();
|
|
this.ffmpegLocation = resolveFfmpegLocation(ytDlpPath);
|
|
if (this.ffmpegLocation) {
|
|
process.env.FFMPEG_PATH = this.ffmpegLocation;
|
|
}
|
|
this.ytdlp = new YTDlpWrapCtor(ytDlpPath);
|
|
}
|
|
getYtDlp() {
|
|
if (!this.ytdlp) {
|
|
throw new Error("DownloaderCore is not initialized.");
|
|
}
|
|
return this.ytdlp;
|
|
}
|
|
publishHistory() {
|
|
this.emit("history-updated", this.listHistory());
|
|
}
|
|
resolveRuntimeSettings(taskSettings) {
|
|
const merged = {
|
|
...this.defaultRuntimeSettings,
|
|
...taskSettings ?? {}
|
|
};
|
|
const downloadPath = taskSettings?.downloadPath?.trim() || this.defaultRuntimeSettings.downloadPath?.trim() || this.downloadDir;
|
|
return {
|
|
...merged,
|
|
downloadPath
|
|
};
|
|
}
|
|
updateTask(id, patch) {
|
|
const existing = this.tasks.get(id);
|
|
if (!existing) {
|
|
return null;
|
|
}
|
|
const next = { ...existing, ...patch };
|
|
this.tasks.set(id, next);
|
|
if (toTerminal(next)) {
|
|
this.history.set(id, next);
|
|
this.taskInputs.delete(id);
|
|
this.publishHistory();
|
|
}
|
|
const snapshot = cloneTask(next);
|
|
this.emit("task-updated", snapshot);
|
|
this.emit("queue-updated", this.listDownloads());
|
|
return snapshot;
|
|
}
|
|
async runJsonCommand(args) {
|
|
const process3 = this.getYtDlp().exec(args);
|
|
let stdout = "";
|
|
let stderr = "";
|
|
process3.ytDlpProcess?.stdout?.on("data", (chunk) => {
|
|
stdout += chunk.toString();
|
|
});
|
|
process3.ytDlpProcess?.stderr?.on("data", (chunk) => {
|
|
stderr += chunk.toString();
|
|
});
|
|
const code = await new Promise((resolve2, reject) => {
|
|
process3.once("close", (exitCode) => resolve2(exitCode));
|
|
process3.once("error", reject);
|
|
});
|
|
if (code !== 0 || !stdout.trim()) {
|
|
throw new Error(stderr.trim() || `yt-dlp exited with code ${code ?? -1}`);
|
|
}
|
|
return JSON.parse(stdout);
|
|
}
|
|
async getVideoInfo(url2, runtimeSettings) {
|
|
await this.initialize();
|
|
const target = url2.trim();
|
|
if (!target) {
|
|
throw new Error("URL is required.");
|
|
}
|
|
const raw = await this.runJsonCommand(
|
|
buildVideoInfoArgs(target, this.resolveRuntimeSettings(runtimeSettings), this.jsRuntimeArgs)
|
|
);
|
|
const formats = (raw.formats ?? []).map((format) => ({
|
|
formatId: format.format_id ?? "unknown",
|
|
ext: format.ext ?? "unknown",
|
|
width: toOptionalNumber(format.width),
|
|
height: toOptionalNumber(format.height),
|
|
fps: toOptionalNumber(format.fps),
|
|
vcodec: toOptionalString(format.vcodec),
|
|
acodec: toOptionalString(format.acodec),
|
|
filesize: toOptionalNumber(format.filesize),
|
|
filesizeApprox: toOptionalNumber(format.filesize_approx),
|
|
formatNote: toOptionalString(format.format_note),
|
|
tbr: toOptionalNumber(format.tbr),
|
|
quality: toOptionalNumber(format.quality),
|
|
protocol: toOptionalString(format.protocol),
|
|
language: toOptionalString(format.language),
|
|
videoExt: toOptionalString(format.video_ext),
|
|
audioExt: toOptionalString(format.audio_ext)
|
|
}));
|
|
return {
|
|
id: raw.id ?? target,
|
|
title: raw.title ?? target,
|
|
thumbnail: toOptionalString(raw.thumbnail),
|
|
duration: toOptionalNumber(raw.duration),
|
|
extractorKey: toOptionalString(raw.extractor_key),
|
|
webpageUrl: toOptionalString(raw.webpage_url),
|
|
description: toOptionalString(raw.description),
|
|
viewCount: toOptionalNumber(raw.view_count),
|
|
uploader: toOptionalString(raw.uploader),
|
|
tags: toOptionalStringArray(raw.tags),
|
|
formats
|
|
};
|
|
}
|
|
async getPlaylistInfo(url2, runtimeSettings) {
|
|
await this.initialize();
|
|
const target = url2.trim();
|
|
if (!target) {
|
|
throw new Error("URL is required.");
|
|
}
|
|
const raw = await this.runJsonCommand(
|
|
buildPlaylistInfoArgs(target, this.resolveRuntimeSettings(runtimeSettings), this.jsRuntimeArgs)
|
|
);
|
|
const rawEntries = Array.isArray(raw.entries) ? raw.entries : [];
|
|
const entries = rawEntries.map((entry, index2) => {
|
|
const resolvedUrl = resolvePlaylistEntryUrl(entry);
|
|
if (!resolvedUrl || !isHttpUrl(resolvedUrl)) {
|
|
return null;
|
|
}
|
|
return {
|
|
id: toOptionalString(entry.id) ?? `${index2 + 1}`,
|
|
title: toOptionalString(entry.title) ?? `Entry ${index2 + 1}`,
|
|
url: resolvedUrl,
|
|
index: index2 + 1,
|
|
thumbnail: toOptionalString(entry.thumbnail)
|
|
};
|
|
}).filter((entry) => Boolean(entry));
|
|
return {
|
|
id: toOptionalString(raw.id) ?? target,
|
|
title: toOptionalString(raw.title) ?? "Playlist",
|
|
entries,
|
|
entryCount: entries.length
|
|
};
|
|
}
|
|
async startPlaylistDownload(input) {
|
|
const playlist = await this.getPlaylistInfo(input.url, input.settings);
|
|
const groupId = `playlist_group_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
if (playlist.entryCount === 0) {
|
|
return {
|
|
groupId,
|
|
playlistId: playlist.id,
|
|
playlistTitle: playlist.title,
|
|
type: input.type,
|
|
totalCount: 0,
|
|
startIndex: 0,
|
|
endIndex: 0,
|
|
entries: []
|
|
};
|
|
}
|
|
let selectedEntries = [];
|
|
if (input.entryIds && input.entryIds.length > 0) {
|
|
const selectedIdSet = new Set(input.entryIds);
|
|
selectedEntries = playlist.entries.filter((entry) => selectedIdSet.has(entry.id));
|
|
} else {
|
|
const requestedStart = Math.max((input.startIndex ?? 1) - 1, 0);
|
|
const requestedEnd = input.endIndex ? Math.min(input.endIndex - 1, playlist.entryCount - 1) : playlist.entryCount - 1;
|
|
const rangeStart = Math.min(requestedStart, requestedEnd);
|
|
const rangeEnd = Math.max(requestedStart, requestedEnd);
|
|
selectedEntries = playlist.entries.slice(rangeStart, rangeEnd + 1);
|
|
}
|
|
const createdEntries = [];
|
|
for (const entry of selectedEntries) {
|
|
const download = await this.createDownload({
|
|
url: entry.url,
|
|
type: input.type,
|
|
title: entry.title,
|
|
thumbnail: entry.thumbnail,
|
|
playlistId: groupId,
|
|
playlistTitle: playlist.title,
|
|
playlistIndex: entry.index,
|
|
playlistSize: selectedEntries.length,
|
|
format: input.format,
|
|
audioFormat: input.audioFormat,
|
|
audioFormatIds: input.audioFormatIds,
|
|
customDownloadPath: input.customDownloadPath,
|
|
customFilenameTemplate: input.customFilenameTemplate,
|
|
containerFormat: input.containerFormat,
|
|
settings: input.settings
|
|
});
|
|
createdEntries.push({
|
|
downloadId: download.id,
|
|
entryId: entry.id,
|
|
title: entry.title,
|
|
url: entry.url,
|
|
index: entry.index
|
|
});
|
|
}
|
|
return {
|
|
groupId,
|
|
playlistId: playlist.id,
|
|
playlistTitle: playlist.title,
|
|
type: input.type,
|
|
totalCount: selectedEntries.length,
|
|
startIndex: selectedEntries[0]?.index ?? 0,
|
|
endIndex: selectedEntries.at(-1)?.index ?? 0,
|
|
entries: createdEntries
|
|
};
|
|
}
|
|
async createDownload(input) {
|
|
await this.initialize();
|
|
const id = randomUUID2();
|
|
const now = Date.now();
|
|
const runtimeSettings = this.resolveRuntimeSettings(input.settings);
|
|
const resolvedDownloadPath = input.customDownloadPath?.trim() || runtimeSettings.downloadPath?.trim() || this.downloadDir;
|
|
const task = {
|
|
id,
|
|
url: input.url,
|
|
title: input.title,
|
|
thumbnail: input.thumbnail,
|
|
type: input.type,
|
|
status: "pending",
|
|
createdAt: now,
|
|
duration: input.duration,
|
|
description: input.description,
|
|
channel: input.channel,
|
|
uploader: input.uploader,
|
|
viewCount: input.viewCount,
|
|
tags: input.tags ? [...input.tags] : void 0,
|
|
selectedFormat: cloneVideoFormat(input.selectedFormat),
|
|
playlistId: input.playlistId,
|
|
playlistTitle: input.playlistTitle,
|
|
playlistIndex: input.playlistIndex,
|
|
playlistSize: input.playlistSize,
|
|
downloadPath: resolvedDownloadPath
|
|
};
|
|
this.tasks.set(id, task);
|
|
this.taskInputs.set(id, {
|
|
...input,
|
|
selectedFormat: cloneVideoFormat(input.selectedFormat),
|
|
customDownloadPath: input.customDownloadPath?.trim() || void 0,
|
|
customFilenameTemplate: input.customFilenameTemplate?.trim() || void 0,
|
|
settings: runtimeSettings
|
|
});
|
|
this.pending.push(id);
|
|
this.emit("queue-updated", this.listDownloads());
|
|
this.processQueue();
|
|
return cloneTask(task);
|
|
}
|
|
processQueue() {
|
|
if (this.active.size >= this.maxConcurrent) {
|
|
return;
|
|
}
|
|
const nextId = this.pending.shift();
|
|
if (!nextId) {
|
|
return;
|
|
}
|
|
const task = this.tasks.get(nextId);
|
|
if (!task) {
|
|
this.processQueue();
|
|
return;
|
|
}
|
|
const input = this.taskInputs.get(nextId);
|
|
if (!input) {
|
|
this.updateTask(nextId, {
|
|
status: "error",
|
|
completedAt: Date.now(),
|
|
error: "Missing download input"
|
|
});
|
|
this.processQueue();
|
|
return;
|
|
}
|
|
const runtimeSettings = this.resolveRuntimeSettings(input.settings);
|
|
const resolvedDownloadPath = input.customDownloadPath?.trim() || runtimeSettings.downloadPath?.trim() || this.downloadDir;
|
|
const args = buildDownloadArgs(
|
|
{
|
|
url: task.url,
|
|
type: input.type,
|
|
format: input.format,
|
|
audioFormat: input.audioFormat,
|
|
audioFormatIds: input.audioFormatIds,
|
|
startTime: input.startTime,
|
|
endTime: input.endTime,
|
|
customDownloadPath: input.customDownloadPath,
|
|
customFilenameTemplate: input.customFilenameTemplate,
|
|
containerFormat: input.containerFormat
|
|
},
|
|
this.downloadDir,
|
|
runtimeSettings,
|
|
this.jsRuntimeArgs
|
|
);
|
|
const urlArg = args.pop();
|
|
if (!urlArg) {
|
|
this.updateTask(nextId, {
|
|
status: "error",
|
|
completedAt: Date.now(),
|
|
error: "Download arguments missing URL"
|
|
});
|
|
this.processQueue();
|
|
return;
|
|
}
|
|
if (!this.ffmpegLocation) {
|
|
this.updateTask(nextId, {
|
|
status: "error",
|
|
completedAt: Date.now(),
|
|
error: FFMPEG_NOT_FOUND_ERROR
|
|
});
|
|
this.processQueue();
|
|
return;
|
|
}
|
|
args.push("--ffmpeg-location", this.ffmpegLocation);
|
|
args.push(urlArg);
|
|
const controller = new AbortController();
|
|
const ytDlpCommand = formatYtDlpCommand(args);
|
|
const process3 = this.getYtDlp().exec(args, {
|
|
signal: controller.signal
|
|
});
|
|
this.active.set(nextId, { controller, process: process3 });
|
|
let taskLog = "";
|
|
const appendLogChunk = (chunk) => {
|
|
taskLog = trimTaskLog(`${taskLog}${chunk.toString()}`);
|
|
};
|
|
process3.ytDlpProcess?.stdout?.on("data", appendLogChunk);
|
|
process3.ytDlpProcess?.stderr?.on("data", appendLogChunk);
|
|
this.updateTask(nextId, {
|
|
status: "downloading",
|
|
startedAt: Date.now(),
|
|
progress: { percent: 0 },
|
|
ytDlpCommand,
|
|
ytDlpLog: ""
|
|
});
|
|
process3.on("progress", (payload) => {
|
|
this.updateTask(nextId, {
|
|
progress: {
|
|
percent: clampPercent(payload.percent),
|
|
currentSpeed: payload.currentSpeed,
|
|
eta: payload.eta,
|
|
downloaded: payload.downloaded,
|
|
total: payload.total
|
|
},
|
|
speed: payload.currentSpeed
|
|
});
|
|
});
|
|
let settled = false;
|
|
const isCancelled = () => controller.signal.aborted || this.cancelled.has(nextId);
|
|
const finalizeTask = (patch) => {
|
|
if (settled) {
|
|
return;
|
|
}
|
|
settled = true;
|
|
this.active.delete(nextId);
|
|
this.cancelled.delete(nextId);
|
|
const finalPatch = {
|
|
...patch,
|
|
completedAt: patch.completedAt ?? Date.now(),
|
|
ytDlpLog: taskLog
|
|
};
|
|
const filePath = extractSavedFilePath(taskLog);
|
|
if (filePath) {
|
|
finalPatch.savedFileName = path2.basename(filePath);
|
|
finalPatch.downloadPath = path2.dirname(filePath);
|
|
} else {
|
|
finalPatch.downloadPath = resolvedDownloadPath;
|
|
}
|
|
this.updateTask(nextId, finalPatch);
|
|
this.processQueue();
|
|
};
|
|
process3.on("close", (code) => {
|
|
if (settled) {
|
|
return;
|
|
}
|
|
if (isCancelled()) {
|
|
finalizeTask({
|
|
status: "cancelled",
|
|
progress: { percent: 0 }
|
|
});
|
|
return;
|
|
}
|
|
if (code === 0) {
|
|
finalizeTask({
|
|
status: "completed",
|
|
progress: { percent: 100 }
|
|
});
|
|
return;
|
|
}
|
|
finalizeTask({
|
|
status: "error",
|
|
error: `yt-dlp exited with code ${code ?? -1}`
|
|
});
|
|
});
|
|
process3.on("error", (error48) => {
|
|
if (settled) {
|
|
return;
|
|
}
|
|
if (isCancelled()) {
|
|
finalizeTask({
|
|
status: "cancelled",
|
|
progress: { percent: 0 }
|
|
});
|
|
return;
|
|
}
|
|
finalizeTask({
|
|
status: "error",
|
|
error: error48.message
|
|
});
|
|
});
|
|
this.processQueue();
|
|
}
|
|
async cancelDownload(id) {
|
|
const active = this.active.get(id);
|
|
if (active) {
|
|
this.cancelled.add(id);
|
|
active.controller.abort();
|
|
return true;
|
|
}
|
|
const pendingIndex = this.pending.findIndex((value2) => value2 === id);
|
|
if (pendingIndex >= 0) {
|
|
this.pending.splice(pendingIndex, 1);
|
|
this.updateTask(id, {
|
|
status: "cancelled",
|
|
completedAt: Date.now()
|
|
});
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
removeHistoryItems(ids) {
|
|
let removed = 0;
|
|
for (const rawId of ids) {
|
|
const id = rawId.trim();
|
|
if (!id) {
|
|
continue;
|
|
}
|
|
if (!this.history.delete(id)) {
|
|
continue;
|
|
}
|
|
removed += 1;
|
|
const task = this.tasks.get(id);
|
|
if (task && toTerminal(task)) {
|
|
this.tasks.delete(id);
|
|
}
|
|
}
|
|
if (removed > 0) {
|
|
this.publishHistory();
|
|
}
|
|
return removed;
|
|
}
|
|
removeHistoryByPlaylist(playlistId) {
|
|
const target = playlistId.trim();
|
|
if (!target) {
|
|
return 0;
|
|
}
|
|
const idsToDelete = [];
|
|
for (const [id, task] of this.history.entries()) {
|
|
if (task.playlistId === target) {
|
|
idsToDelete.push(id);
|
|
}
|
|
}
|
|
return this.removeHistoryItems(idsToDelete);
|
|
}
|
|
listDownloads() {
|
|
return Array.from(this.tasks.values()).filter((task) => !toTerminal(task)).sort((a, b) => b.createdAt - a.createdAt).map(cloneTask);
|
|
}
|
|
listHistory() {
|
|
return Array.from(this.history.values()).sort((a, b) => (b.completedAt ?? b.createdAt) - (a.completedAt ?? a.createdAt)).map(cloneTask);
|
|
}
|
|
getStatus() {
|
|
return { active: this.active.size, pending: this.pending.length };
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/yt-dlp-executor.ts
|
|
import { existsSync as existsSync4, statSync as statSync3 } from "node:fs";
|
|
import { createRequire as createRequire2 } from "node:module";
|
|
function makeNoopRun() {
|
|
return {
|
|
cancel: async () => {
|
|
},
|
|
pause: async () => {
|
|
}
|
|
};
|
|
}
|
|
function insertFfmpegLocation(args, ffmpegLocation) {
|
|
const urlArg = args.pop();
|
|
args.push("--ffmpeg-location", ffmpegLocation);
|
|
if (urlArg !== void 0) args.push(urlArg);
|
|
}
|
|
function mapProgress(payload) {
|
|
const percent = typeof payload.percent === "number" && !Number.isNaN(payload.percent) ? Math.max(0, Math.min(1, payload.percent / 100)) : null;
|
|
return {
|
|
percent,
|
|
bytesDownloaded: parseSize(payload.downloaded),
|
|
bytesTotal: parseSize(payload.total),
|
|
speedBps: parseSpeed(payload.currentSpeed),
|
|
etaMs: parseEtaMs(payload.eta),
|
|
ticks: 0
|
|
};
|
|
}
|
|
function parseSize(value2) {
|
|
if (!value2) return null;
|
|
const m = /([0-9]+(?:\.[0-9]+)?)\s*(B|KB|KiB|MB|MiB|GB|GiB|TB|TiB)/i.exec(value2);
|
|
if (!m) return null;
|
|
const n = Number.parseFloat(m[1] ?? "");
|
|
if (!Number.isFinite(n)) return null;
|
|
const unit = (m[2] ?? "B").toLowerCase();
|
|
const factor = unit === "kb" || unit === "kib" ? 1024 : unit === "mb" || unit === "mib" ? 1024 ** 2 : unit === "gb" || unit === "gib" ? 1024 ** 3 : unit === "tb" || unit === "tib" ? 1024 ** 4 : 1;
|
|
return Math.round(n * factor);
|
|
}
|
|
function parseSpeed(value2) {
|
|
if (!value2) return null;
|
|
const cleaned = value2.replace(/\/s$/i, "").trim();
|
|
return parseSize(cleaned);
|
|
}
|
|
function parseEtaMs(value2) {
|
|
if (!value2) return null;
|
|
const trimmed = value2.trim();
|
|
if (!trimmed || trimmed === "Unknown") return null;
|
|
const parts = trimmed.split(":").map((p) => Number.parseInt(p, 10));
|
|
if (parts.some((n) => !Number.isFinite(n))) return null;
|
|
let seconds = 0;
|
|
for (const p of parts) seconds = seconds * 60 + p;
|
|
return seconds * 1e3;
|
|
}
|
|
function hasPostprocessSignal(text2) {
|
|
return PROCESSING_DETECT_PATTERNS.some((re) => re.test(text2));
|
|
}
|
|
function extractFormatId(rawLog) {
|
|
const log = rawLog.trim();
|
|
if (!log) return void 0;
|
|
const re = /Downloading\s+\d+\s+format\(s\):\s+([^\r\n]+)/gi;
|
|
const matches = Array.from(log.matchAll(re));
|
|
const last = matches.at(-1);
|
|
const value2 = last?.[1]?.trim();
|
|
if (!value2) return void 0;
|
|
return value2;
|
|
}
|
|
function extractSavedFilePath2(rawLog) {
|
|
const log = rawLog.trim();
|
|
if (!log) return void 0;
|
|
const patterns = [
|
|
/Merging formats into "([^"]+)"/g,
|
|
/Destination:\s+"([^"]+)"/g,
|
|
/Destination:\s+'([^']+)'/g,
|
|
/\[download\]\s+([^\r\n]+?)\s+has already been downloaded/g
|
|
];
|
|
for (const re of patterns) {
|
|
const matches = Array.from(log.matchAll(re));
|
|
const last = matches.at(-1);
|
|
const candidate = last?.[1]?.trim();
|
|
if (candidate) return candidate;
|
|
}
|
|
const lines = log.split(/\r?\n/).reverse();
|
|
for (const line of lines) {
|
|
const idx = line.indexOf("Destination:");
|
|
if (idx >= 0) {
|
|
const candidate = line.slice(idx + "Destination:".length).trim();
|
|
if (candidate) return candidate;
|
|
}
|
|
}
|
|
return void 0;
|
|
}
|
|
function classifyYtDlpExit(exitCode, stderr) {
|
|
const txt = stderr.toLowerCase();
|
|
if (/(http error 429|too many requests|rate.?limit)/.test(txt))
|
|
return virtualError("http-429", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(login required|requires (?:cookies|authentication)|sign in to confirm)/.test(txt))
|
|
return virtualError("auth-required", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(not available in your country|geo.?restricted|geographic)/.test(txt))
|
|
return virtualError("geo-blocked", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(video unavailable|not found|404)/.test(txt))
|
|
return virtualError("not-found", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(no space left|disk full|enospc)/.test(txt))
|
|
return virtualError("disk-full", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(permission denied|eacces)/.test(txt))
|
|
return virtualError("permission-denied", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(ffmpeg|ffprobe)/.test(txt))
|
|
return virtualError("ffmpeg", stderr || `yt-dlp exited ${exitCode}`);
|
|
if (/(network|timeout|econnreset|enotfound|ehostunreach)/.test(txt))
|
|
return virtualError("network-transient", stderr || `yt-dlp exited ${exitCode}`);
|
|
return virtualError("unknown", stderr || `yt-dlp exited with code ${exitCode ?? -1}`);
|
|
}
|
|
function createTailBuffer(maxBytes) {
|
|
let buf = "";
|
|
return {
|
|
append(text2) {
|
|
buf += text2;
|
|
if (buf.length > maxBytes * 4) {
|
|
buf = buf.slice(buf.length - maxBytes);
|
|
}
|
|
},
|
|
read() {
|
|
return buf.length > maxBytes ? buf.slice(buf.length - maxBytes) : buf;
|
|
}
|
|
};
|
|
}
|
|
var require3, YTDlpWrapModule2, YTDlpWrapCtor2, DEFAULT_KILL_GRACE_MS, STDOUT_TAIL_BYTES, STDERR_TAIL_BYTES2, PROCESSING_DETECT_PATTERNS, FFMPEG_NOT_FOUND_ERROR2, YtDlpExecutor;
|
|
var init_yt_dlp_executor = __esm({
|
|
"../../packages/downloader-core/src/yt-dlp-executor.ts"() {
|
|
"use strict";
|
|
init_src();
|
|
init_yt_dlp_args();
|
|
require3 = createRequire2(import.meta.url);
|
|
YTDlpWrapModule2 = require3("yt-dlp-wrap-plus");
|
|
YTDlpWrapCtor2 = YTDlpWrapModule2.default ?? YTDlpWrapModule2;
|
|
DEFAULT_KILL_GRACE_MS = 1e4;
|
|
STDOUT_TAIL_BYTES = 8 * 1024;
|
|
STDERR_TAIL_BYTES2 = 8 * 1024;
|
|
PROCESSING_DETECT_PATTERNS = [
|
|
/\bMerging formats?\b/i,
|
|
/^\[Postprocess\]/m,
|
|
/\b(?:Embedding|Adding|Fixing|Converting)\b/i,
|
|
/\b(?:ExtractAudio|VideoConvertor|FFmpeg)\b/i
|
|
];
|
|
FFMPEG_NOT_FOUND_ERROR2 = "ffmpeg/ffprobe not found. Use Desktop resources/ffmpeg, install in PATH, or set FFMPEG_PATH.";
|
|
YtDlpExecutor = class {
|
|
opts;
|
|
cachedYtDlp = null;
|
|
cachedYtDlpPath = null;
|
|
constructor(options) {
|
|
this.opts = {
|
|
resolveYtDlpPath: options.resolveYtDlpPath,
|
|
resolveFfmpegLocation: options.resolveFfmpegLocation,
|
|
defaultDownloadDir: options.defaultDownloadDir,
|
|
defaultRuntimeSettings: options.defaultRuntimeSettings ?? {},
|
|
extraArgs: options.extraArgs,
|
|
buildArgs: options.buildArgs,
|
|
killGraceMs: options.killGraceMs ?? DEFAULT_KILL_GRACE_MS,
|
|
clock: options.clock ?? Date.now,
|
|
spawnFn: options.spawnFn
|
|
};
|
|
}
|
|
run(ctx, events) {
|
|
const stdoutTail = createTailBuffer(STDOUT_TAIL_BYTES);
|
|
const stderrTail = createTailBuffer(STDERR_TAIL_BYTES2);
|
|
let postprocessSeen = false;
|
|
let settled = false;
|
|
let cancelRequested = false;
|
|
let killTimer = null;
|
|
let proc = null;
|
|
let formatIdSeen;
|
|
const finishOnce = (e) => {
|
|
if (settled) return;
|
|
settled = true;
|
|
if (killTimer) {
|
|
clearTimeout(killTimer);
|
|
killTimer = null;
|
|
}
|
|
events.onFinish(e);
|
|
};
|
|
let args;
|
|
try {
|
|
args = this.buildArgsFor(ctx.input);
|
|
} catch (err) {
|
|
const error48 = virtualError("unknown", String(err instanceof Error ? err.message : err));
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "error", error: error48, exitCode: null },
|
|
closedAt: this.opts.clock(),
|
|
stdoutTail: "",
|
|
stderrTail: String(err instanceof Error ? err.message : err)
|
|
});
|
|
return makeNoopRun();
|
|
}
|
|
const ffmpegLocation = this.opts.resolveFfmpegLocation();
|
|
if (!ffmpegLocation) {
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: {
|
|
type: "error",
|
|
error: virtualError("binary-missing", FFMPEG_NOT_FOUND_ERROR2),
|
|
exitCode: null
|
|
},
|
|
closedAt: this.opts.clock(),
|
|
stdoutTail: "",
|
|
stderrTail: FFMPEG_NOT_FOUND_ERROR2
|
|
});
|
|
return makeNoopRun();
|
|
}
|
|
insertFfmpegLocation(args, ffmpegLocation);
|
|
const controller = new AbortController();
|
|
let ytDlpPath;
|
|
try {
|
|
ytDlpPath = this.opts.resolveYtDlpPath();
|
|
} catch (err) {
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: {
|
|
type: "error",
|
|
error: virtualError("binary-missing", String(err instanceof Error ? err.message : err)),
|
|
exitCode: null
|
|
},
|
|
closedAt: this.opts.clock(),
|
|
stdoutTail: "",
|
|
stderrTail: String(err instanceof Error ? err.message : err)
|
|
});
|
|
return makeNoopRun();
|
|
}
|
|
try {
|
|
proc = this.opts.spawnFn ? this.opts.spawnFn(ytDlpPath, args, controller.signal) : this.getYtDlp(ytDlpPath).exec(args, { signal: controller.signal });
|
|
} catch (err) {
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: {
|
|
type: "error",
|
|
error: virtualError("unknown", String(err instanceof Error ? err.message : err)),
|
|
exitCode: null
|
|
},
|
|
closedAt: this.opts.clock(),
|
|
stdoutTail: stdoutTail.read(),
|
|
stderrTail: stderrTail.read()
|
|
});
|
|
return makeNoopRun();
|
|
}
|
|
const pid = proc.ytDlpProcess?.pid ?? -1;
|
|
events.onSpawn({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
pid,
|
|
pidStartedAt: null,
|
|
kind: "yt-dlp",
|
|
spawnedAt: this.opts.clock()
|
|
});
|
|
const pumpStdoutPostprocess = (chunk) => {
|
|
const text2 = chunk.toString();
|
|
stdoutTail.append(text2);
|
|
if (!postprocessSeen && hasPostprocessSignal(text2)) {
|
|
postprocessSeen = true;
|
|
}
|
|
const fid = extractFormatId(text2);
|
|
if (fid) {
|
|
formatIdSeen = fid;
|
|
}
|
|
};
|
|
const pumpStderrPostprocess = (chunk) => {
|
|
const text2 = chunk.toString();
|
|
stderrTail.append(text2);
|
|
if (!postprocessSeen && hasPostprocessSignal(text2)) {
|
|
postprocessSeen = true;
|
|
}
|
|
events.onStd({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
stream: "stderr",
|
|
line: text2.replace(/\r?\n$/, "")
|
|
});
|
|
};
|
|
proc.ytDlpProcess?.stdout?.on("data", (chunk) => {
|
|
pumpStdoutPostprocess(chunk);
|
|
events.onStd({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
stream: "stdout",
|
|
line: chunk.toString().replace(/\r?\n$/, "")
|
|
});
|
|
});
|
|
proc.ytDlpProcess?.stderr?.on("data", pumpStderrPostprocess);
|
|
proc.on("progress", (payload) => {
|
|
const progress = mapProgress(payload);
|
|
events.onProgress({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
progress,
|
|
enteredProcessing: postprocessSeen
|
|
});
|
|
});
|
|
proc.on("close", (code) => {
|
|
const closedAt = this.opts.clock();
|
|
const stdout = stdoutTail.read();
|
|
const stderr = stderrTail.read();
|
|
if (cancelRequested) {
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "cancelled" },
|
|
closedAt,
|
|
stdoutTail: stdout,
|
|
stderrTail: stderr
|
|
});
|
|
return;
|
|
}
|
|
if (code === 0) {
|
|
const filePath = extractSavedFilePath2(stdout) || "";
|
|
let realSize = 0;
|
|
if (filePath) {
|
|
try {
|
|
if (existsSync4(filePath)) realSize = statSync3(filePath).size;
|
|
} catch {
|
|
}
|
|
}
|
|
const output = {
|
|
filePath,
|
|
size: realSize,
|
|
durationMs: null,
|
|
sha256: null,
|
|
// Prefer the streaming sniff (captures even if pushed out of the
|
|
// tail buffer); fall back to a tail re-scan when running with
|
|
// tiny test fixtures whose entire run fits in 8KB.
|
|
formatId: formatIdSeen ?? extractFormatId(stdout) ?? null
|
|
};
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "success", output },
|
|
closedAt,
|
|
stdoutTail: stdout,
|
|
stderrTail: stderr
|
|
});
|
|
return;
|
|
}
|
|
const error48 = classifyYtDlpExit(code, stderr);
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "error", error: error48, exitCode: code ?? null },
|
|
closedAt,
|
|
stdoutTail: stdout,
|
|
stderrTail: stderr
|
|
});
|
|
});
|
|
proc.on("error", (err) => {
|
|
const closedAt = this.opts.clock();
|
|
if (cancelRequested) {
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "cancelled" },
|
|
closedAt,
|
|
stdoutTail: stdoutTail.read(),
|
|
stderrTail: stderrTail.read()
|
|
});
|
|
return;
|
|
}
|
|
const error48 = virtualError("unknown", err.message);
|
|
finishOnce({
|
|
taskId: ctx.taskId,
|
|
attemptId: ctx.attemptId,
|
|
result: { type: "error", error: error48, exitCode: null },
|
|
closedAt,
|
|
stdoutTail: stdoutTail.read(),
|
|
stderrTail: stderrTail.read()
|
|
});
|
|
});
|
|
const cancel = async (timeout) => {
|
|
if (settled) return;
|
|
cancelRequested = true;
|
|
const grace = timeout ?? this.opts.killGraceMs;
|
|
try {
|
|
controller.abort();
|
|
} catch {
|
|
}
|
|
try {
|
|
proc?.ytDlpProcess?.kill("SIGTERM");
|
|
} catch {
|
|
}
|
|
if (killTimer) clearTimeout(killTimer);
|
|
if (grace > 0) {
|
|
killTimer = setTimeout(() => {
|
|
try {
|
|
proc?.ytDlpProcess?.kill("SIGKILL");
|
|
} catch {
|
|
}
|
|
}, grace);
|
|
} else {
|
|
try {
|
|
proc?.ytDlpProcess?.kill("SIGKILL");
|
|
} catch {
|
|
}
|
|
}
|
|
};
|
|
return {
|
|
cancel,
|
|
pause: () => cancel(this.opts.killGraceMs)
|
|
};
|
|
}
|
|
buildArgsFor(input) {
|
|
if (this.opts.buildArgs) return this.opts.buildArgs(input, this.opts.defaultDownloadDir);
|
|
if (input.rawArgs && input.rawArgs.length > 0) {
|
|
return [...input.rawArgs];
|
|
}
|
|
const opts = input.options ?? {};
|
|
const type = opts.type ?? (input.kind === "audio" ? "audio" : "video");
|
|
const settings = {
|
|
...this.opts.defaultRuntimeSettings,
|
|
...opts.settings ?? {}
|
|
};
|
|
const downloadPath = opts.customDownloadPath?.trim() || settings.downloadPath?.trim() || this.opts.defaultDownloadDir;
|
|
const merged = { ...settings, downloadPath };
|
|
const extra = this.opts.extraArgs ? [...this.opts.extraArgs()] : [];
|
|
return buildDownloadArgs(
|
|
{
|
|
url: input.url,
|
|
type,
|
|
format: opts.format,
|
|
audioFormat: opts.audioFormat,
|
|
audioFormatIds: opts.audioFormatIds ? [...opts.audioFormatIds] : void 0,
|
|
startTime: opts.startTime,
|
|
endTime: opts.endTime,
|
|
customDownloadPath: opts.customDownloadPath,
|
|
customFilenameTemplate: opts.customFilenameTemplate,
|
|
containerFormat: opts.containerFormat
|
|
},
|
|
this.opts.defaultDownloadDir,
|
|
merged,
|
|
extra
|
|
);
|
|
}
|
|
/** Diagnostic: return the resolved argv yt-dlp would be invoked with. */
|
|
describeCommandFor(input) {
|
|
return formatYtDlpCommand(this.buildArgsFor(input));
|
|
}
|
|
getYtDlp(binaryPath) {
|
|
if (this.cachedYtDlp && this.cachedYtDlpPath === binaryPath) return this.cachedYtDlp;
|
|
this.cachedYtDlp = new YTDlpWrapCtor2(binaryPath);
|
|
this.cachedYtDlpPath = binaryPath;
|
|
return this.cachedYtDlp;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/format-preferences.ts
|
|
var ONE_CLICK_CONTAINER_OPTIONS, qualityPresetToVideoHeight, qualityPresetToAudioAbr, dedupe, getQualityPreset, buildAudioSelectors, buildVideoFormatPreference, buildAudioFormatPreference;
|
|
var init_format_preferences = __esm({
|
|
"../../packages/downloader-core/src/format-preferences.ts"() {
|
|
"use strict";
|
|
ONE_CLICK_CONTAINER_OPTIONS = [
|
|
"auto",
|
|
"mp4",
|
|
"mkv",
|
|
"webm",
|
|
"original"
|
|
];
|
|
qualityPresetToVideoHeight = {
|
|
best: null,
|
|
good: 1080,
|
|
normal: 720,
|
|
bad: 480,
|
|
worst: 360
|
|
};
|
|
qualityPresetToAudioAbr = {
|
|
best: 320,
|
|
good: 256,
|
|
normal: 192,
|
|
bad: 128,
|
|
worst: 96
|
|
};
|
|
dedupe = (candidates) => {
|
|
const seen = /* @__PURE__ */ new Set();
|
|
const result = [];
|
|
for (const candidate of candidates) {
|
|
if (!candidate) {
|
|
continue;
|
|
}
|
|
if (seen.has(candidate)) {
|
|
continue;
|
|
}
|
|
seen.add(candidate);
|
|
result.push(candidate);
|
|
}
|
|
return result;
|
|
};
|
|
getQualityPreset = (settings) => settings.oneClickQuality ?? "best";
|
|
buildAudioSelectors = (preset) => {
|
|
if (preset === "worst") {
|
|
return dedupe(["worstaudio", "bestaudio"]);
|
|
}
|
|
const abrLimit = qualityPresetToAudioAbr[preset];
|
|
return dedupe([abrLimit ? `bestaudio[abr<=${abrLimit}]` : void 0, "bestaudio"]);
|
|
};
|
|
buildVideoFormatPreference = (settings) => {
|
|
const preset = getQualityPreset(settings);
|
|
if (preset === "worst") {
|
|
return "worstvideo+worstaudio/worst/best";
|
|
}
|
|
const maxHeight = qualityPresetToVideoHeight[preset];
|
|
const videoCandidates = dedupe([
|
|
maxHeight ? `bestvideo[height<=${maxHeight}]` : void 0,
|
|
"bestvideo"
|
|
]);
|
|
const audioSelectors = buildAudioSelectors(preset);
|
|
const combinations = [];
|
|
for (const video of videoCandidates) {
|
|
for (const audio of audioSelectors) {
|
|
combinations.push(`${video}+${audio}`);
|
|
}
|
|
}
|
|
combinations.push("bestvideo+bestaudio");
|
|
combinations.push("best");
|
|
return dedupe(combinations).join("/");
|
|
};
|
|
buildAudioFormatPreference = (settings) => {
|
|
const selectors = buildAudioSelectors(getQualityPreset(settings));
|
|
return dedupe([...selectors, "best"]).join("/");
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../packages/downloader-core/src/index.ts
|
|
var src_exports2 = {};
|
|
__export(src_exports2, {
|
|
DownloaderCore: () => DownloaderCore,
|
|
ONE_CLICK_CONTAINER_OPTIONS: () => ONE_CLICK_CONTAINER_OPTIONS,
|
|
WebAppSettingsSchema: () => WebAppSettingsSchema,
|
|
YtDlpExecutor: () => YtDlpExecutor,
|
|
appendYouTubeSafeExtractorArgs: () => appendYouTubeSafeExtractorArgs,
|
|
buildAudioFormatPreference: () => buildAudioFormatPreference,
|
|
buildBrowserCookiesSetting: () => buildBrowserCookiesSetting,
|
|
buildDownloadArgs: () => buildDownloadArgs,
|
|
buildPlaylistInfoArgs: () => buildPlaylistInfoArgs,
|
|
buildVideoFormatPreference: () => buildVideoFormatPreference,
|
|
buildVideoInfoArgs: () => buildVideoInfoArgs,
|
|
downloaderContract: () => downloaderContract,
|
|
formatYtDlpCommand: () => formatYtDlpCommand,
|
|
parseBrowserCookiesSetting: () => parseBrowserCookiesSetting,
|
|
resolveAudioFormatSelector: () => resolveAudioFormatSelector,
|
|
resolveFfmpegLocationFromPath: () => resolveFfmpegLocationFromPath,
|
|
resolvePathWithHome: () => resolvePathWithHome,
|
|
resolveVideoFormatSelector: () => resolveVideoFormatSelector,
|
|
sanitizeFilenameTemplate: () => sanitizeFilenameTemplate
|
|
});
|
|
var init_src2 = __esm({
|
|
"../../packages/downloader-core/src/index.ts"() {
|
|
"use strict";
|
|
init_browser_cookies_setting();
|
|
init_contract2();
|
|
init_downloader_core();
|
|
init_yt_dlp_executor();
|
|
init_schemas4();
|
|
init_format_preferences();
|
|
init_yt_dlp_args();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/entity.js
|
|
function is(value2, type) {
|
|
if (!value2 || typeof value2 !== "object") {
|
|
return false;
|
|
}
|
|
if (value2 instanceof type) {
|
|
return true;
|
|
}
|
|
if (!Object.prototype.hasOwnProperty.call(type, entityKind)) {
|
|
throw new Error(
|
|
`Class "${type.name ?? "<unknown>"}" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`
|
|
);
|
|
}
|
|
let cls = Object.getPrototypeOf(value2).constructor;
|
|
if (cls) {
|
|
while (cls) {
|
|
if (entityKind in cls && cls[entityKind] === type[entityKind]) {
|
|
return true;
|
|
}
|
|
cls = Object.getPrototypeOf(cls);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
var entityKind, hasOwnEntityKind;
|
|
var init_entity = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/entity.js"() {
|
|
entityKind = Symbol.for("drizzle:entityKind");
|
|
hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/column.js
|
|
var Column;
|
|
var init_column = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/column.js"() {
|
|
init_entity();
|
|
Column = class {
|
|
constructor(table, config2) {
|
|
this.table = table;
|
|
this.config = config2;
|
|
this.name = config2.name;
|
|
this.keyAsName = config2.keyAsName;
|
|
this.notNull = config2.notNull;
|
|
this.default = config2.default;
|
|
this.defaultFn = config2.defaultFn;
|
|
this.onUpdateFn = config2.onUpdateFn;
|
|
this.hasDefault = config2.hasDefault;
|
|
this.primary = config2.primaryKey;
|
|
this.isUnique = config2.isUnique;
|
|
this.uniqueName = config2.uniqueName;
|
|
this.uniqueType = config2.uniqueType;
|
|
this.dataType = config2.dataType;
|
|
this.columnType = config2.columnType;
|
|
this.generated = config2.generated;
|
|
this.generatedIdentity = config2.generatedIdentity;
|
|
}
|
|
static [entityKind] = "Column";
|
|
name;
|
|
keyAsName;
|
|
primary;
|
|
notNull;
|
|
default;
|
|
defaultFn;
|
|
onUpdateFn;
|
|
hasDefault;
|
|
isUnique;
|
|
uniqueName;
|
|
uniqueType;
|
|
dataType;
|
|
columnType;
|
|
enumValues = void 0;
|
|
generated = void 0;
|
|
generatedIdentity = void 0;
|
|
config;
|
|
mapFromDriverValue(value2) {
|
|
return value2;
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return value2;
|
|
}
|
|
// ** @internal */
|
|
shouldDisableInsert() {
|
|
return this.config.generated !== void 0 && this.config.generated.type !== "byDefault";
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/column-builder.js
|
|
var ColumnBuilder;
|
|
var init_column_builder = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/column-builder.js"() {
|
|
init_entity();
|
|
ColumnBuilder = class {
|
|
static [entityKind] = "ColumnBuilder";
|
|
config;
|
|
constructor(name, dataType, columnType) {
|
|
this.config = {
|
|
name,
|
|
keyAsName: name === "",
|
|
notNull: false,
|
|
default: void 0,
|
|
hasDefault: false,
|
|
primaryKey: false,
|
|
isUnique: false,
|
|
uniqueName: void 0,
|
|
uniqueType: void 0,
|
|
dataType,
|
|
columnType,
|
|
generated: void 0
|
|
};
|
|
}
|
|
/**
|
|
* Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const users = pgTable('users', {
|
|
* id: integer('id').$type<UserId>().primaryKey(),
|
|
* details: json('details').$type<UserDetails>().notNull(),
|
|
* });
|
|
* ```
|
|
*/
|
|
$type() {
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a `not null` clause to the column definition.
|
|
*
|
|
* Affects the `select` model of the table - columns *without* `not null` will be nullable on select.
|
|
*/
|
|
notNull() {
|
|
this.config.notNull = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a `default <value>` clause to the column definition.
|
|
*
|
|
* Affects the `insert` model of the table - columns *with* `default` are optional on insert.
|
|
*
|
|
* If you need to set a dynamic default value, use {@link $defaultFn} instead.
|
|
*/
|
|
default(value2) {
|
|
this.config.default = value2;
|
|
this.config.hasDefault = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a dynamic default value to the column.
|
|
* The function will be called when the row is inserted, and the returned value will be used as the column value.
|
|
*
|
|
* **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.
|
|
*/
|
|
$defaultFn(fn) {
|
|
this.config.defaultFn = fn;
|
|
this.config.hasDefault = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* Alias for {@link $defaultFn}.
|
|
*/
|
|
$default = this.$defaultFn;
|
|
/**
|
|
* Adds a dynamic update value to the column.
|
|
* The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.
|
|
* If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.
|
|
*
|
|
* **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.
|
|
*/
|
|
$onUpdateFn(fn) {
|
|
this.config.onUpdateFn = fn;
|
|
this.config.hasDefault = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* Alias for {@link $onUpdateFn}.
|
|
*/
|
|
$onUpdate = this.$onUpdateFn;
|
|
/**
|
|
* Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.
|
|
*
|
|
* In SQLite, `integer primary key` implicitly makes the column auto-incrementing.
|
|
*/
|
|
primaryKey() {
|
|
this.config.primaryKey = true;
|
|
this.config.notNull = true;
|
|
return this;
|
|
}
|
|
/** @internal Sets the name of the column to the key within the table definition if a name was not given. */
|
|
setName(name) {
|
|
if (this.config.name !== "") return;
|
|
this.config.name = name;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/table.utils.js
|
|
var TableName;
|
|
var init_table_utils = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/table.utils.js"() {
|
|
TableName = Symbol.for("drizzle:Name");
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/foreign-keys.js
|
|
var ForeignKeyBuilder, ForeignKey;
|
|
var init_foreign_keys = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/foreign-keys.js"() {
|
|
init_entity();
|
|
init_table_utils();
|
|
ForeignKeyBuilder = class {
|
|
static [entityKind] = "PgForeignKeyBuilder";
|
|
/** @internal */
|
|
reference;
|
|
/** @internal */
|
|
_onUpdate = "no action";
|
|
/** @internal */
|
|
_onDelete = "no action";
|
|
constructor(config2, actions) {
|
|
this.reference = () => {
|
|
const { name, columns, foreignColumns } = config2();
|
|
return { name, columns, foreignTable: foreignColumns[0].table, foreignColumns };
|
|
};
|
|
if (actions) {
|
|
this._onUpdate = actions.onUpdate;
|
|
this._onDelete = actions.onDelete;
|
|
}
|
|
}
|
|
onUpdate(action) {
|
|
this._onUpdate = action === void 0 ? "no action" : action;
|
|
return this;
|
|
}
|
|
onDelete(action) {
|
|
this._onDelete = action === void 0 ? "no action" : action;
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new ForeignKey(table, this);
|
|
}
|
|
};
|
|
ForeignKey = class {
|
|
constructor(table, builder) {
|
|
this.table = table;
|
|
this.reference = builder.reference;
|
|
this.onUpdate = builder._onUpdate;
|
|
this.onDelete = builder._onDelete;
|
|
}
|
|
static [entityKind] = "PgForeignKey";
|
|
reference;
|
|
onUpdate;
|
|
onDelete;
|
|
getName() {
|
|
const { name, columns, foreignColumns } = this.reference();
|
|
const columnNames = columns.map((column) => column.name);
|
|
const foreignColumnNames = foreignColumns.map((column) => column.name);
|
|
const chunks = [
|
|
this.table[TableName],
|
|
...columnNames,
|
|
foreignColumns[0].table[TableName],
|
|
...foreignColumnNames
|
|
];
|
|
return name ?? `${chunks.join("_")}_fk`;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/tracing-utils.js
|
|
function iife(fn, ...args) {
|
|
return fn(...args);
|
|
}
|
|
var init_tracing_utils = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/tracing-utils.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/unique-constraint.js
|
|
function uniqueKeyName(table, columns) {
|
|
return `${table[TableName]}_${columns.join("_")}_unique`;
|
|
}
|
|
var UniqueConstraintBuilder, UniqueOnConstraintBuilder, UniqueConstraint;
|
|
var init_unique_constraint = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/unique-constraint.js"() {
|
|
init_entity();
|
|
init_table_utils();
|
|
UniqueConstraintBuilder = class {
|
|
constructor(columns, name) {
|
|
this.name = name;
|
|
this.columns = columns;
|
|
}
|
|
static [entityKind] = "PgUniqueConstraintBuilder";
|
|
/** @internal */
|
|
columns;
|
|
/** @internal */
|
|
nullsNotDistinctConfig = false;
|
|
nullsNotDistinct() {
|
|
this.nullsNotDistinctConfig = true;
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new UniqueConstraint(table, this.columns, this.nullsNotDistinctConfig, this.name);
|
|
}
|
|
};
|
|
UniqueOnConstraintBuilder = class {
|
|
static [entityKind] = "PgUniqueOnConstraintBuilder";
|
|
/** @internal */
|
|
name;
|
|
constructor(name) {
|
|
this.name = name;
|
|
}
|
|
on(...columns) {
|
|
return new UniqueConstraintBuilder(columns, this.name);
|
|
}
|
|
};
|
|
UniqueConstraint = class {
|
|
constructor(table, columns, nullsNotDistinct, name) {
|
|
this.table = table;
|
|
this.columns = columns;
|
|
this.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));
|
|
this.nullsNotDistinct = nullsNotDistinct;
|
|
}
|
|
static [entityKind] = "PgUniqueConstraint";
|
|
columns;
|
|
name;
|
|
nullsNotDistinct = false;
|
|
getName() {
|
|
return this.name;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/utils/array.js
|
|
function parsePgArrayValue(arrayString, startFrom, inQuotes) {
|
|
for (let i = startFrom; i < arrayString.length; i++) {
|
|
const char = arrayString[i];
|
|
if (char === "\\") {
|
|
i++;
|
|
continue;
|
|
}
|
|
if (char === '"') {
|
|
return [arrayString.slice(startFrom, i).replace(/\\/g, ""), i + 1];
|
|
}
|
|
if (inQuotes) {
|
|
continue;
|
|
}
|
|
if (char === "," || char === "}") {
|
|
return [arrayString.slice(startFrom, i).replace(/\\/g, ""), i];
|
|
}
|
|
}
|
|
return [arrayString.slice(startFrom).replace(/\\/g, ""), arrayString.length];
|
|
}
|
|
function parsePgNestedArray(arrayString, startFrom = 0) {
|
|
const result = [];
|
|
let i = startFrom;
|
|
let lastCharIsComma = false;
|
|
while (i < arrayString.length) {
|
|
const char = arrayString[i];
|
|
if (char === ",") {
|
|
if (lastCharIsComma || i === startFrom) {
|
|
result.push("");
|
|
}
|
|
lastCharIsComma = true;
|
|
i++;
|
|
continue;
|
|
}
|
|
lastCharIsComma = false;
|
|
if (char === "\\") {
|
|
i += 2;
|
|
continue;
|
|
}
|
|
if (char === '"') {
|
|
const [value22, startFrom2] = parsePgArrayValue(arrayString, i + 1, true);
|
|
result.push(value22);
|
|
i = startFrom2;
|
|
continue;
|
|
}
|
|
if (char === "}") {
|
|
return [result, i + 1];
|
|
}
|
|
if (char === "{") {
|
|
const [value22, startFrom2] = parsePgNestedArray(arrayString, i + 1);
|
|
result.push(value22);
|
|
i = startFrom2;
|
|
continue;
|
|
}
|
|
const [value2, newStartFrom] = parsePgArrayValue(arrayString, i, false);
|
|
result.push(value2);
|
|
i = newStartFrom;
|
|
}
|
|
return [result, i];
|
|
}
|
|
function parsePgArray(arrayString) {
|
|
const [result] = parsePgNestedArray(arrayString, 1);
|
|
return result;
|
|
}
|
|
function makePgArray(array2) {
|
|
return `{${array2.map((item) => {
|
|
if (Array.isArray(item)) {
|
|
return makePgArray(item);
|
|
}
|
|
if (typeof item === "string") {
|
|
return `"${item.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
}
|
|
return `${item}`;
|
|
}).join(",")}}`;
|
|
}
|
|
var init_array = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/utils/array.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/columns/common.js
|
|
var PgColumnBuilder, PgColumn, ExtraConfigColumn, IndexedColumn, PgArrayBuilder, PgArray;
|
|
var init_common = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/columns/common.js"() {
|
|
init_column_builder();
|
|
init_column();
|
|
init_entity();
|
|
init_foreign_keys();
|
|
init_tracing_utils();
|
|
init_unique_constraint();
|
|
init_array();
|
|
PgColumnBuilder = class extends ColumnBuilder {
|
|
foreignKeyConfigs = [];
|
|
static [entityKind] = "PgColumnBuilder";
|
|
array(size) {
|
|
return new PgArrayBuilder(this.config.name, this, size);
|
|
}
|
|
references(ref, actions = {}) {
|
|
this.foreignKeyConfigs.push({ ref, actions });
|
|
return this;
|
|
}
|
|
unique(name, config2) {
|
|
this.config.isUnique = true;
|
|
this.config.uniqueName = name;
|
|
this.config.uniqueType = config2?.nulls;
|
|
return this;
|
|
}
|
|
generatedAlwaysAs(as) {
|
|
this.config.generated = {
|
|
as,
|
|
type: "always",
|
|
mode: "stored"
|
|
};
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
buildForeignKeys(column, table) {
|
|
return this.foreignKeyConfigs.map(({ ref, actions }) => {
|
|
return iife(
|
|
(ref2, actions2) => {
|
|
const builder = new ForeignKeyBuilder(() => {
|
|
const foreignColumn = ref2();
|
|
return { columns: [column], foreignColumns: [foreignColumn] };
|
|
});
|
|
if (actions2.onUpdate) {
|
|
builder.onUpdate(actions2.onUpdate);
|
|
}
|
|
if (actions2.onDelete) {
|
|
builder.onDelete(actions2.onDelete);
|
|
}
|
|
return builder.build(table);
|
|
},
|
|
ref,
|
|
actions
|
|
);
|
|
});
|
|
}
|
|
/** @internal */
|
|
buildExtraConfigColumn(table) {
|
|
return new ExtraConfigColumn(table, this.config);
|
|
}
|
|
};
|
|
PgColumn = class extends Column {
|
|
constructor(table, config2) {
|
|
if (!config2.uniqueName) {
|
|
config2.uniqueName = uniqueKeyName(table, [config2.name]);
|
|
}
|
|
super(table, config2);
|
|
this.table = table;
|
|
}
|
|
static [entityKind] = "PgColumn";
|
|
};
|
|
ExtraConfigColumn = class extends PgColumn {
|
|
static [entityKind] = "ExtraConfigColumn";
|
|
getSQLType() {
|
|
return this.getSQLType();
|
|
}
|
|
indexConfig = {
|
|
order: this.config.order ?? "asc",
|
|
nulls: this.config.nulls ?? "last",
|
|
opClass: this.config.opClass
|
|
};
|
|
defaultConfig = {
|
|
order: "asc",
|
|
nulls: "last",
|
|
opClass: void 0
|
|
};
|
|
asc() {
|
|
this.indexConfig.order = "asc";
|
|
return this;
|
|
}
|
|
desc() {
|
|
this.indexConfig.order = "desc";
|
|
return this;
|
|
}
|
|
nullsFirst() {
|
|
this.indexConfig.nulls = "first";
|
|
return this;
|
|
}
|
|
nullsLast() {
|
|
this.indexConfig.nulls = "last";
|
|
return this;
|
|
}
|
|
/**
|
|
* ### PostgreSQL documentation quote
|
|
*
|
|
* > An operator class with optional parameters can be specified for each column of an index.
|
|
* The operator class identifies the operators to be used by the index for that column.
|
|
* For example, a B-tree index on four-byte integers would use the int4_ops class;
|
|
* this operator class includes comparison functions for four-byte integers.
|
|
* In practice the default operator class for the column's data type is usually sufficient.
|
|
* The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.
|
|
* For example, we might want to sort a complex-number data type either by absolute value or by real part.
|
|
* We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.
|
|
* More information about operator classes check:
|
|
*
|
|
* ### Useful links
|
|
* https://www.postgresql.org/docs/current/sql-createindex.html
|
|
*
|
|
* https://www.postgresql.org/docs/current/indexes-opclass.html
|
|
*
|
|
* https://www.postgresql.org/docs/current/xindex.html
|
|
*
|
|
* ### Additional types
|
|
* If you have the `pg_vector` extension installed in your database, you can use the
|
|
* `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.
|
|
*
|
|
* **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**
|
|
*
|
|
* @param opClass
|
|
* @returns
|
|
*/
|
|
op(opClass) {
|
|
this.indexConfig.opClass = opClass;
|
|
return this;
|
|
}
|
|
};
|
|
IndexedColumn = class {
|
|
static [entityKind] = "IndexedColumn";
|
|
constructor(name, keyAsName, type, indexConfig) {
|
|
this.name = name;
|
|
this.keyAsName = keyAsName;
|
|
this.type = type;
|
|
this.indexConfig = indexConfig;
|
|
}
|
|
name;
|
|
keyAsName;
|
|
type;
|
|
indexConfig;
|
|
};
|
|
PgArrayBuilder = class extends PgColumnBuilder {
|
|
static [entityKind] = "PgArrayBuilder";
|
|
constructor(name, baseBuilder, size) {
|
|
super(name, "array", "PgArray");
|
|
this.config.baseBuilder = baseBuilder;
|
|
this.config.size = size;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
const baseColumn = this.config.baseBuilder.build(table);
|
|
return new PgArray(
|
|
table,
|
|
this.config,
|
|
baseColumn
|
|
);
|
|
}
|
|
};
|
|
PgArray = class _PgArray extends PgColumn {
|
|
constructor(table, config2, baseColumn, range) {
|
|
super(table, config2);
|
|
this.baseColumn = baseColumn;
|
|
this.range = range;
|
|
this.size = config2.size;
|
|
}
|
|
size;
|
|
static [entityKind] = "PgArray";
|
|
getSQLType() {
|
|
return `${this.baseColumn.getSQLType()}[${typeof this.size === "number" ? this.size : ""}]`;
|
|
}
|
|
mapFromDriverValue(value2) {
|
|
if (typeof value2 === "string") {
|
|
value2 = parsePgArray(value2);
|
|
}
|
|
return value2.map((v) => this.baseColumn.mapFromDriverValue(v));
|
|
}
|
|
mapToDriverValue(value2, isNestedArray = false) {
|
|
const a = value2.map(
|
|
(v) => v === null ? null : is(this.baseColumn, _PgArray) ? this.baseColumn.mapToDriverValue(v, true) : this.baseColumn.mapToDriverValue(v)
|
|
);
|
|
if (isNestedArray) return a;
|
|
return makePgArray(a);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/columns/enum.js
|
|
function isPgEnum(obj) {
|
|
return !!obj && typeof obj === "function" && isPgEnumSym in obj && obj[isPgEnumSym] === true;
|
|
}
|
|
var PgEnumObjectColumnBuilder, PgEnumObjectColumn, isPgEnumSym, PgEnumColumnBuilder, PgEnumColumn;
|
|
var init_enum = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/pg-core/columns/enum.js"() {
|
|
init_entity();
|
|
init_common();
|
|
PgEnumObjectColumnBuilder = class extends PgColumnBuilder {
|
|
static [entityKind] = "PgEnumObjectColumnBuilder";
|
|
constructor(name, enumInstance) {
|
|
super(name, "string", "PgEnumObjectColumn");
|
|
this.config.enum = enumInstance;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new PgEnumObjectColumn(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
PgEnumObjectColumn = class extends PgColumn {
|
|
static [entityKind] = "PgEnumObjectColumn";
|
|
enum;
|
|
enumValues = this.config.enum.enumValues;
|
|
constructor(table, config2) {
|
|
super(table, config2);
|
|
this.enum = config2.enum;
|
|
}
|
|
getSQLType() {
|
|
return this.enum.enumName;
|
|
}
|
|
};
|
|
isPgEnumSym = Symbol.for("drizzle:isPgEnum");
|
|
PgEnumColumnBuilder = class extends PgColumnBuilder {
|
|
static [entityKind] = "PgEnumColumnBuilder";
|
|
constructor(name, enumInstance) {
|
|
super(name, "string", "PgEnumColumn");
|
|
this.config.enum = enumInstance;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new PgEnumColumn(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
PgEnumColumn = class extends PgColumn {
|
|
static [entityKind] = "PgEnumColumn";
|
|
enum = this.config.enum;
|
|
enumValues = this.config.enum.enumValues;
|
|
constructor(table, config2) {
|
|
super(table, config2);
|
|
this.enum = config2.enum;
|
|
}
|
|
getSQLType() {
|
|
return this.enum.enumName;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/subquery.js
|
|
var Subquery, WithSubquery;
|
|
var init_subquery = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/subquery.js"() {
|
|
init_entity();
|
|
Subquery = class {
|
|
static [entityKind] = "Subquery";
|
|
constructor(sql2, fields, alias, isWith = false, usedTables = []) {
|
|
this._ = {
|
|
brand: "Subquery",
|
|
sql: sql2,
|
|
selectedFields: fields,
|
|
alias,
|
|
isWith,
|
|
usedTables
|
|
};
|
|
}
|
|
// getSQL(): SQL<unknown> {
|
|
// return new SQL([this]);
|
|
// }
|
|
};
|
|
WithSubquery = class extends Subquery {
|
|
static [entityKind] = "WithSubquery";
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/version.js
|
|
var version2;
|
|
var init_version = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/version.js"() {
|
|
version2 = "0.44.7";
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/tracing.js
|
|
var otel, rawTracer, tracer;
|
|
var init_tracing = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/tracing.js"() {
|
|
init_tracing_utils();
|
|
init_version();
|
|
tracer = {
|
|
startActiveSpan(name, fn) {
|
|
if (!otel) {
|
|
return fn();
|
|
}
|
|
if (!rawTracer) {
|
|
rawTracer = otel.trace.getTracer("drizzle-orm", version2);
|
|
}
|
|
return iife(
|
|
(otel2, rawTracer2) => rawTracer2.startActiveSpan(
|
|
name,
|
|
(span) => {
|
|
try {
|
|
return fn(span);
|
|
} catch (e) {
|
|
span.setStatus({
|
|
code: otel2.SpanStatusCode.ERROR,
|
|
message: e instanceof Error ? e.message : "Unknown error"
|
|
// eslint-disable-line no-instanceof/no-instanceof
|
|
});
|
|
throw e;
|
|
} finally {
|
|
span.end();
|
|
}
|
|
}
|
|
),
|
|
otel,
|
|
rawTracer
|
|
);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/view-common.js
|
|
var ViewBaseConfig;
|
|
var init_view_common = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/view-common.js"() {
|
|
ViewBaseConfig = Symbol.for("drizzle:ViewBaseConfig");
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/table.js
|
|
function getTableName(table) {
|
|
return table[TableName];
|
|
}
|
|
function getTableUniqueName(table) {
|
|
return `${table[Schema] ?? "public"}.${table[TableName]}`;
|
|
}
|
|
var Schema, Columns, ExtraConfigColumns, OriginalName, BaseName, IsAlias, ExtraConfigBuilder, IsDrizzleTable, Table;
|
|
var init_table = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/table.js"() {
|
|
init_entity();
|
|
init_table_utils();
|
|
Schema = Symbol.for("drizzle:Schema");
|
|
Columns = Symbol.for("drizzle:Columns");
|
|
ExtraConfigColumns = Symbol.for("drizzle:ExtraConfigColumns");
|
|
OriginalName = Symbol.for("drizzle:OriginalName");
|
|
BaseName = Symbol.for("drizzle:BaseName");
|
|
IsAlias = Symbol.for("drizzle:IsAlias");
|
|
ExtraConfigBuilder = Symbol.for("drizzle:ExtraConfigBuilder");
|
|
IsDrizzleTable = Symbol.for("drizzle:IsDrizzleTable");
|
|
Table = class {
|
|
static [entityKind] = "Table";
|
|
/** @internal */
|
|
static Symbol = {
|
|
Name: TableName,
|
|
Schema,
|
|
OriginalName,
|
|
Columns,
|
|
ExtraConfigColumns,
|
|
BaseName,
|
|
IsAlias,
|
|
ExtraConfigBuilder
|
|
};
|
|
/**
|
|
* @internal
|
|
* Can be changed if the table is aliased.
|
|
*/
|
|
[TableName];
|
|
/**
|
|
* @internal
|
|
* Used to store the original name of the table, before any aliasing.
|
|
*/
|
|
[OriginalName];
|
|
/** @internal */
|
|
[Schema];
|
|
/** @internal */
|
|
[Columns];
|
|
/** @internal */
|
|
[ExtraConfigColumns];
|
|
/**
|
|
* @internal
|
|
* Used to store the table name before the transformation via the `tableCreator` functions.
|
|
*/
|
|
[BaseName];
|
|
/** @internal */
|
|
[IsAlias] = false;
|
|
/** @internal */
|
|
[IsDrizzleTable] = true;
|
|
/** @internal */
|
|
[ExtraConfigBuilder] = void 0;
|
|
constructor(name, schema, baseName) {
|
|
this[TableName] = this[OriginalName] = name;
|
|
this[Schema] = schema;
|
|
this[BaseName] = baseName;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/sql.js
|
|
function isSQLWrapper(value2) {
|
|
return value2 !== null && value2 !== void 0 && typeof value2.getSQL === "function";
|
|
}
|
|
function mergeQueries(queries) {
|
|
const result = { sql: "", params: [] };
|
|
for (const query of queries) {
|
|
result.sql += query.sql;
|
|
result.params.push(...query.params);
|
|
if (query.typings?.length) {
|
|
if (!result.typings) {
|
|
result.typings = [];
|
|
}
|
|
result.typings.push(...query.typings);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function isDriverValueEncoder(value2) {
|
|
return typeof value2 === "object" && value2 !== null && "mapToDriverValue" in value2 && typeof value2.mapToDriverValue === "function";
|
|
}
|
|
function sql(strings, ...params) {
|
|
const queryChunks = [];
|
|
if (params.length > 0 || strings.length > 0 && strings[0] !== "") {
|
|
queryChunks.push(new StringChunk(strings[0]));
|
|
}
|
|
for (const [paramIndex, param2] of params.entries()) {
|
|
queryChunks.push(param2, new StringChunk(strings[paramIndex + 1]));
|
|
}
|
|
return new SQL(queryChunks);
|
|
}
|
|
var FakePrimitiveParam, StringChunk, SQL, Name, noopDecoder, noopEncoder, noopMapper, Param, Placeholder, IsDrizzleView, View;
|
|
var init_sql = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/sql.js"() {
|
|
init_entity();
|
|
init_enum();
|
|
init_subquery();
|
|
init_tracing();
|
|
init_view_common();
|
|
init_column();
|
|
init_table();
|
|
FakePrimitiveParam = class {
|
|
static [entityKind] = "FakePrimitiveParam";
|
|
};
|
|
StringChunk = class {
|
|
static [entityKind] = "StringChunk";
|
|
value;
|
|
constructor(value2) {
|
|
this.value = Array.isArray(value2) ? value2 : [value2];
|
|
}
|
|
getSQL() {
|
|
return new SQL([this]);
|
|
}
|
|
};
|
|
SQL = class _SQL {
|
|
constructor(queryChunks) {
|
|
this.queryChunks = queryChunks;
|
|
for (const chunk of queryChunks) {
|
|
if (is(chunk, Table)) {
|
|
const schemaName = chunk[Table.Symbol.Schema];
|
|
this.usedTables.push(
|
|
schemaName === void 0 ? chunk[Table.Symbol.Name] : schemaName + "." + chunk[Table.Symbol.Name]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
static [entityKind] = "SQL";
|
|
/** @internal */
|
|
decoder = noopDecoder;
|
|
shouldInlineParams = false;
|
|
/** @internal */
|
|
usedTables = [];
|
|
append(query) {
|
|
this.queryChunks.push(...query.queryChunks);
|
|
return this;
|
|
}
|
|
toQuery(config2) {
|
|
return tracer.startActiveSpan("drizzle.buildSQL", (span) => {
|
|
const query = this.buildQueryFromSourceParams(this.queryChunks, config2);
|
|
span?.setAttributes({
|
|
"drizzle.query.text": query.sql,
|
|
"drizzle.query.params": JSON.stringify(query.params)
|
|
});
|
|
return query;
|
|
});
|
|
}
|
|
buildQueryFromSourceParams(chunks, _config) {
|
|
const config2 = Object.assign({}, _config, {
|
|
inlineParams: _config.inlineParams || this.shouldInlineParams,
|
|
paramStartIndex: _config.paramStartIndex || { value: 0 }
|
|
});
|
|
const {
|
|
casing,
|
|
escapeName,
|
|
escapeParam,
|
|
prepareTyping,
|
|
inlineParams,
|
|
paramStartIndex
|
|
} = config2;
|
|
return mergeQueries(chunks.map((chunk) => {
|
|
if (is(chunk, StringChunk)) {
|
|
return { sql: chunk.value.join(""), params: [] };
|
|
}
|
|
if (is(chunk, Name)) {
|
|
return { sql: escapeName(chunk.value), params: [] };
|
|
}
|
|
if (chunk === void 0) {
|
|
return { sql: "", params: [] };
|
|
}
|
|
if (Array.isArray(chunk)) {
|
|
const result = [new StringChunk("(")];
|
|
for (const [i, p] of chunk.entries()) {
|
|
result.push(p);
|
|
if (i < chunk.length - 1) {
|
|
result.push(new StringChunk(", "));
|
|
}
|
|
}
|
|
result.push(new StringChunk(")"));
|
|
return this.buildQueryFromSourceParams(result, config2);
|
|
}
|
|
if (is(chunk, _SQL)) {
|
|
return this.buildQueryFromSourceParams(chunk.queryChunks, {
|
|
...config2,
|
|
inlineParams: inlineParams || chunk.shouldInlineParams
|
|
});
|
|
}
|
|
if (is(chunk, Table)) {
|
|
const schemaName = chunk[Table.Symbol.Schema];
|
|
const tableName = chunk[Table.Symbol.Name];
|
|
return {
|
|
sql: schemaName === void 0 || chunk[IsAlias] ? escapeName(tableName) : escapeName(schemaName) + "." + escapeName(tableName),
|
|
params: []
|
|
};
|
|
}
|
|
if (is(chunk, Column)) {
|
|
const columnName = casing.getColumnCasing(chunk);
|
|
if (_config.invokeSource === "indexes") {
|
|
return { sql: escapeName(columnName), params: [] };
|
|
}
|
|
const schemaName = chunk.table[Table.Symbol.Schema];
|
|
return {
|
|
sql: chunk.table[IsAlias] || schemaName === void 0 ? escapeName(chunk.table[Table.Symbol.Name]) + "." + escapeName(columnName) : escapeName(schemaName) + "." + escapeName(chunk.table[Table.Symbol.Name]) + "." + escapeName(columnName),
|
|
params: []
|
|
};
|
|
}
|
|
if (is(chunk, View)) {
|
|
const schemaName = chunk[ViewBaseConfig].schema;
|
|
const viewName = chunk[ViewBaseConfig].name;
|
|
return {
|
|
sql: schemaName === void 0 || chunk[ViewBaseConfig].isAlias ? escapeName(viewName) : escapeName(schemaName) + "." + escapeName(viewName),
|
|
params: []
|
|
};
|
|
}
|
|
if (is(chunk, Param)) {
|
|
if (is(chunk.value, Placeholder)) {
|
|
return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
|
|
}
|
|
const mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);
|
|
if (is(mappedValue, _SQL)) {
|
|
return this.buildQueryFromSourceParams([mappedValue], config2);
|
|
}
|
|
if (inlineParams) {
|
|
return { sql: this.mapInlineParam(mappedValue, config2), params: [] };
|
|
}
|
|
let typings = ["none"];
|
|
if (prepareTyping) {
|
|
typings = [prepareTyping(chunk.encoder)];
|
|
}
|
|
return { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };
|
|
}
|
|
if (is(chunk, Placeholder)) {
|
|
return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
|
|
}
|
|
if (is(chunk, _SQL.Aliased) && chunk.fieldAlias !== void 0) {
|
|
return { sql: escapeName(chunk.fieldAlias), params: [] };
|
|
}
|
|
if (is(chunk, Subquery)) {
|
|
if (chunk._.isWith) {
|
|
return { sql: escapeName(chunk._.alias), params: [] };
|
|
}
|
|
return this.buildQueryFromSourceParams([
|
|
new StringChunk("("),
|
|
chunk._.sql,
|
|
new StringChunk(") "),
|
|
new Name(chunk._.alias)
|
|
], config2);
|
|
}
|
|
if (isPgEnum(chunk)) {
|
|
if (chunk.schema) {
|
|
return { sql: escapeName(chunk.schema) + "." + escapeName(chunk.enumName), params: [] };
|
|
}
|
|
return { sql: escapeName(chunk.enumName), params: [] };
|
|
}
|
|
if (isSQLWrapper(chunk)) {
|
|
if (chunk.shouldOmitSQLParens?.()) {
|
|
return this.buildQueryFromSourceParams([chunk.getSQL()], config2);
|
|
}
|
|
return this.buildQueryFromSourceParams([
|
|
new StringChunk("("),
|
|
chunk.getSQL(),
|
|
new StringChunk(")")
|
|
], config2);
|
|
}
|
|
if (inlineParams) {
|
|
return { sql: this.mapInlineParam(chunk, config2), params: [] };
|
|
}
|
|
return { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ["none"] };
|
|
}));
|
|
}
|
|
mapInlineParam(chunk, { escapeString }) {
|
|
if (chunk === null) {
|
|
return "null";
|
|
}
|
|
if (typeof chunk === "number" || typeof chunk === "boolean") {
|
|
return chunk.toString();
|
|
}
|
|
if (typeof chunk === "string") {
|
|
return escapeString(chunk);
|
|
}
|
|
if (typeof chunk === "object") {
|
|
const mappedValueAsString = chunk.toString();
|
|
if (mappedValueAsString === "[object Object]") {
|
|
return escapeString(JSON.stringify(chunk));
|
|
}
|
|
return escapeString(mappedValueAsString);
|
|
}
|
|
throw new Error("Unexpected param value: " + chunk);
|
|
}
|
|
getSQL() {
|
|
return this;
|
|
}
|
|
as(alias) {
|
|
if (alias === void 0) {
|
|
return this;
|
|
}
|
|
return new _SQL.Aliased(this, alias);
|
|
}
|
|
mapWith(decoder) {
|
|
this.decoder = typeof decoder === "function" ? { mapFromDriverValue: decoder } : decoder;
|
|
return this;
|
|
}
|
|
inlineParams() {
|
|
this.shouldInlineParams = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* This method is used to conditionally include a part of the query.
|
|
*
|
|
* @param condition - Condition to check
|
|
* @returns itself if the condition is `true`, otherwise `undefined`
|
|
*/
|
|
if(condition) {
|
|
return condition ? this : void 0;
|
|
}
|
|
};
|
|
Name = class {
|
|
constructor(value2) {
|
|
this.value = value2;
|
|
}
|
|
static [entityKind] = "Name";
|
|
brand;
|
|
getSQL() {
|
|
return new SQL([this]);
|
|
}
|
|
};
|
|
noopDecoder = {
|
|
mapFromDriverValue: (value2) => value2
|
|
};
|
|
noopEncoder = {
|
|
mapToDriverValue: (value2) => value2
|
|
};
|
|
noopMapper = {
|
|
...noopDecoder,
|
|
...noopEncoder
|
|
};
|
|
Param = class {
|
|
/**
|
|
* @param value - Parameter value
|
|
* @param encoder - Encoder to convert the value to a driver parameter
|
|
*/
|
|
constructor(value2, encoder = noopEncoder) {
|
|
this.value = value2;
|
|
this.encoder = encoder;
|
|
}
|
|
static [entityKind] = "Param";
|
|
brand;
|
|
getSQL() {
|
|
return new SQL([this]);
|
|
}
|
|
};
|
|
((sql2) => {
|
|
function empty() {
|
|
return new SQL([]);
|
|
}
|
|
sql2.empty = empty;
|
|
function fromList(list) {
|
|
return new SQL(list);
|
|
}
|
|
sql2.fromList = fromList;
|
|
function raw(str) {
|
|
return new SQL([new StringChunk(str)]);
|
|
}
|
|
sql2.raw = raw;
|
|
function join4(chunks, separator) {
|
|
const result = [];
|
|
for (const [i, chunk] of chunks.entries()) {
|
|
if (i > 0 && separator !== void 0) {
|
|
result.push(separator);
|
|
}
|
|
result.push(chunk);
|
|
}
|
|
return new SQL(result);
|
|
}
|
|
sql2.join = join4;
|
|
function identifier(value2) {
|
|
return new Name(value2);
|
|
}
|
|
sql2.identifier = identifier;
|
|
function placeholder2(name2) {
|
|
return new Placeholder(name2);
|
|
}
|
|
sql2.placeholder = placeholder2;
|
|
function param2(value2, encoder) {
|
|
return new Param(value2, encoder);
|
|
}
|
|
sql2.param = param2;
|
|
})(sql || (sql = {}));
|
|
((SQL2) => {
|
|
class Aliased {
|
|
constructor(sql2, fieldAlias) {
|
|
this.sql = sql2;
|
|
this.fieldAlias = fieldAlias;
|
|
}
|
|
static [entityKind] = "SQL.Aliased";
|
|
/** @internal */
|
|
isSelectionField = false;
|
|
getSQL() {
|
|
return this.sql;
|
|
}
|
|
/** @internal */
|
|
clone() {
|
|
return new Aliased(this.sql, this.fieldAlias);
|
|
}
|
|
}
|
|
SQL2.Aliased = Aliased;
|
|
})(SQL || (SQL = {}));
|
|
Placeholder = class {
|
|
constructor(name2) {
|
|
this.name = name2;
|
|
}
|
|
static [entityKind] = "Placeholder";
|
|
getSQL() {
|
|
return new SQL([this]);
|
|
}
|
|
};
|
|
IsDrizzleView = Symbol.for("drizzle:IsDrizzleView");
|
|
View = class {
|
|
static [entityKind] = "View";
|
|
/** @internal */
|
|
[ViewBaseConfig];
|
|
/** @internal */
|
|
[IsDrizzleView] = true;
|
|
constructor({ name: name2, schema, selectedFields, query }) {
|
|
this[ViewBaseConfig] = {
|
|
name: name2,
|
|
originalName: name2,
|
|
schema,
|
|
selectedFields,
|
|
query,
|
|
isExisting: !query,
|
|
isAlias: false
|
|
};
|
|
}
|
|
getSQL() {
|
|
return new SQL([this]);
|
|
}
|
|
};
|
|
Column.prototype.getSQL = function() {
|
|
return new SQL([this]);
|
|
};
|
|
Table.prototype.getSQL = function() {
|
|
return new SQL([this]);
|
|
};
|
|
Subquery.prototype.getSQL = function() {
|
|
return new SQL([this]);
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/alias.js
|
|
function aliasedTable(table, tableAlias) {
|
|
return new Proxy(table, new TableAliasProxyHandler(tableAlias, false));
|
|
}
|
|
function aliasedTableColumn(column, tableAlias) {
|
|
return new Proxy(
|
|
column,
|
|
new ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false)))
|
|
);
|
|
}
|
|
function mapColumnsInAliasedSQLToAlias(query, alias) {
|
|
return new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);
|
|
}
|
|
function mapColumnsInSQLToAlias(query, alias) {
|
|
return sql.join(query.queryChunks.map((c) => {
|
|
if (is(c, Column)) {
|
|
return aliasedTableColumn(c, alias);
|
|
}
|
|
if (is(c, SQL)) {
|
|
return mapColumnsInSQLToAlias(c, alias);
|
|
}
|
|
if (is(c, SQL.Aliased)) {
|
|
return mapColumnsInAliasedSQLToAlias(c, alias);
|
|
}
|
|
return c;
|
|
}));
|
|
}
|
|
var ColumnAliasProxyHandler, TableAliasProxyHandler, RelationTableAliasProxyHandler;
|
|
var init_alias = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/alias.js"() {
|
|
init_column();
|
|
init_entity();
|
|
init_sql();
|
|
init_table();
|
|
init_view_common();
|
|
ColumnAliasProxyHandler = class {
|
|
constructor(table) {
|
|
this.table = table;
|
|
}
|
|
static [entityKind] = "ColumnAliasProxyHandler";
|
|
get(columnObj, prop) {
|
|
if (prop === "table") {
|
|
return this.table;
|
|
}
|
|
return columnObj[prop];
|
|
}
|
|
};
|
|
TableAliasProxyHandler = class {
|
|
constructor(alias, replaceOriginalName) {
|
|
this.alias = alias;
|
|
this.replaceOriginalName = replaceOriginalName;
|
|
}
|
|
static [entityKind] = "TableAliasProxyHandler";
|
|
get(target, prop) {
|
|
if (prop === Table.Symbol.IsAlias) {
|
|
return true;
|
|
}
|
|
if (prop === Table.Symbol.Name) {
|
|
return this.alias;
|
|
}
|
|
if (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {
|
|
return this.alias;
|
|
}
|
|
if (prop === ViewBaseConfig) {
|
|
return {
|
|
...target[ViewBaseConfig],
|
|
name: this.alias,
|
|
isAlias: true
|
|
};
|
|
}
|
|
if (prop === Table.Symbol.Columns) {
|
|
const columns = target[Table.Symbol.Columns];
|
|
if (!columns) {
|
|
return columns;
|
|
}
|
|
const proxiedColumns = {};
|
|
Object.keys(columns).map((key) => {
|
|
proxiedColumns[key] = new Proxy(
|
|
columns[key],
|
|
new ColumnAliasProxyHandler(new Proxy(target, this))
|
|
);
|
|
});
|
|
return proxiedColumns;
|
|
}
|
|
const value2 = target[prop];
|
|
if (is(value2, Column)) {
|
|
return new Proxy(value2, new ColumnAliasProxyHandler(new Proxy(target, this)));
|
|
}
|
|
return value2;
|
|
}
|
|
};
|
|
RelationTableAliasProxyHandler = class {
|
|
constructor(alias) {
|
|
this.alias = alias;
|
|
}
|
|
static [entityKind] = "RelationTableAliasProxyHandler";
|
|
get(target, prop) {
|
|
if (prop === "sourceTable") {
|
|
return aliasedTable(target.sourceTable, this.alias);
|
|
}
|
|
return target[prop];
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/alias.js
|
|
var init_alias2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/alias.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/checks.js
|
|
var CheckBuilder, Check;
|
|
var init_checks3 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/checks.js"() {
|
|
init_entity();
|
|
CheckBuilder = class {
|
|
constructor(name, value2) {
|
|
this.name = name;
|
|
this.value = value2;
|
|
}
|
|
static [entityKind] = "SQLiteCheckBuilder";
|
|
brand;
|
|
build(table) {
|
|
return new Check(table, this);
|
|
}
|
|
};
|
|
Check = class {
|
|
constructor(table, builder) {
|
|
this.table = table;
|
|
this.name = builder.name;
|
|
this.value = builder.value;
|
|
}
|
|
static [entityKind] = "SQLiteCheck";
|
|
name;
|
|
value;
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/utils.js
|
|
function orderSelectedFields(fields, pathPrefix) {
|
|
return Object.entries(fields).reduce((result, [name, field]) => {
|
|
if (typeof name !== "string") {
|
|
return result;
|
|
}
|
|
const newPath = pathPrefix ? [...pathPrefix, name] : [name];
|
|
if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased)) {
|
|
result.push({ path: newPath, field });
|
|
} else if (is(field, Table)) {
|
|
result.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));
|
|
} else {
|
|
result.push(...orderSelectedFields(field, newPath));
|
|
}
|
|
return result;
|
|
}, []);
|
|
}
|
|
function haveSameKeys(left, right) {
|
|
const leftKeys = Object.keys(left);
|
|
const rightKeys = Object.keys(right);
|
|
if (leftKeys.length !== rightKeys.length) {
|
|
return false;
|
|
}
|
|
for (const [index2, key] of leftKeys.entries()) {
|
|
if (key !== rightKeys[index2]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function mapUpdateSet(table, values) {
|
|
const entries = Object.entries(values).filter(([, value2]) => value2 !== void 0).map(([key, value2]) => {
|
|
if (is(value2, SQL) || is(value2, Column)) {
|
|
return [key, value2];
|
|
} else {
|
|
return [key, new Param(value2, table[Table.Symbol.Columns][key])];
|
|
}
|
|
});
|
|
if (entries.length === 0) {
|
|
throw new Error("No values to set");
|
|
}
|
|
return Object.fromEntries(entries);
|
|
}
|
|
function applyMixins(baseClass, extendedClasses) {
|
|
for (const extendedClass of extendedClasses) {
|
|
for (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {
|
|
if (name === "constructor") continue;
|
|
Object.defineProperty(
|
|
baseClass.prototype,
|
|
name,
|
|
Object.getOwnPropertyDescriptor(extendedClass.prototype, name) || /* @__PURE__ */ Object.create(null)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
function getTableColumns(table) {
|
|
return table[Table.Symbol.Columns];
|
|
}
|
|
function getTableLikeName(table) {
|
|
return is(table, Subquery) ? table._.alias : is(table, View) ? table[ViewBaseConfig].name : is(table, SQL) ? void 0 : table[Table.Symbol.IsAlias] ? table[Table.Symbol.Name] : table[Table.Symbol.BaseName];
|
|
}
|
|
function getColumnNameAndConfig(a, b) {
|
|
return {
|
|
name: typeof a === "string" && a.length > 0 ? a : "",
|
|
config: typeof a === "object" ? a : b
|
|
};
|
|
}
|
|
var textDecoder;
|
|
var init_utils = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/utils.js"() {
|
|
init_column();
|
|
init_entity();
|
|
init_sql();
|
|
init_subquery();
|
|
init_table();
|
|
init_view_common();
|
|
textDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/foreign-keys.js
|
|
var ForeignKeyBuilder2, ForeignKey2;
|
|
var init_foreign_keys2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/foreign-keys.js"() {
|
|
init_entity();
|
|
init_table_utils();
|
|
ForeignKeyBuilder2 = class {
|
|
static [entityKind] = "SQLiteForeignKeyBuilder";
|
|
/** @internal */
|
|
reference;
|
|
/** @internal */
|
|
_onUpdate;
|
|
/** @internal */
|
|
_onDelete;
|
|
constructor(config2, actions) {
|
|
this.reference = () => {
|
|
const { name, columns, foreignColumns } = config2();
|
|
return { name, columns, foreignTable: foreignColumns[0].table, foreignColumns };
|
|
};
|
|
if (actions) {
|
|
this._onUpdate = actions.onUpdate;
|
|
this._onDelete = actions.onDelete;
|
|
}
|
|
}
|
|
onUpdate(action) {
|
|
this._onUpdate = action;
|
|
return this;
|
|
}
|
|
onDelete(action) {
|
|
this._onDelete = action;
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new ForeignKey2(table, this);
|
|
}
|
|
};
|
|
ForeignKey2 = class {
|
|
constructor(table, builder) {
|
|
this.table = table;
|
|
this.reference = builder.reference;
|
|
this.onUpdate = builder._onUpdate;
|
|
this.onDelete = builder._onDelete;
|
|
}
|
|
static [entityKind] = "SQLiteForeignKey";
|
|
reference;
|
|
onUpdate;
|
|
onDelete;
|
|
getName() {
|
|
const { name, columns, foreignColumns } = this.reference();
|
|
const columnNames = columns.map((column) => column.name);
|
|
const foreignColumnNames = foreignColumns.map((column) => column.name);
|
|
const chunks = [
|
|
this.table[TableName],
|
|
...columnNames,
|
|
foreignColumns[0].table[TableName],
|
|
...foreignColumnNames
|
|
];
|
|
return name ?? `${chunks.join("_")}_fk`;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/unique-constraint.js
|
|
function uniqueKeyName2(table, columns) {
|
|
return `${table[TableName]}_${columns.join("_")}_unique`;
|
|
}
|
|
var UniqueConstraintBuilder2, UniqueOnConstraintBuilder2, UniqueConstraint2;
|
|
var init_unique_constraint2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/unique-constraint.js"() {
|
|
init_entity();
|
|
init_table_utils();
|
|
UniqueConstraintBuilder2 = class {
|
|
constructor(columns, name) {
|
|
this.name = name;
|
|
this.columns = columns;
|
|
}
|
|
static [entityKind] = "SQLiteUniqueConstraintBuilder";
|
|
/** @internal */
|
|
columns;
|
|
/** @internal */
|
|
build(table) {
|
|
return new UniqueConstraint2(table, this.columns, this.name);
|
|
}
|
|
};
|
|
UniqueOnConstraintBuilder2 = class {
|
|
static [entityKind] = "SQLiteUniqueOnConstraintBuilder";
|
|
/** @internal */
|
|
name;
|
|
constructor(name) {
|
|
this.name = name;
|
|
}
|
|
on(...columns) {
|
|
return new UniqueConstraintBuilder2(columns, this.name);
|
|
}
|
|
};
|
|
UniqueConstraint2 = class {
|
|
constructor(table, columns, name) {
|
|
this.table = table;
|
|
this.columns = columns;
|
|
this.name = name ?? uniqueKeyName2(this.table, this.columns.map((column) => column.name));
|
|
}
|
|
static [entityKind] = "SQLiteUniqueConstraint";
|
|
columns;
|
|
name;
|
|
getName() {
|
|
return this.name;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/common.js
|
|
var SQLiteColumnBuilder, SQLiteColumn;
|
|
var init_common2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/common.js"() {
|
|
init_column_builder();
|
|
init_column();
|
|
init_entity();
|
|
init_foreign_keys2();
|
|
init_unique_constraint2();
|
|
SQLiteColumnBuilder = class extends ColumnBuilder {
|
|
static [entityKind] = "SQLiteColumnBuilder";
|
|
foreignKeyConfigs = [];
|
|
references(ref, actions = {}) {
|
|
this.foreignKeyConfigs.push({ ref, actions });
|
|
return this;
|
|
}
|
|
unique(name) {
|
|
this.config.isUnique = true;
|
|
this.config.uniqueName = name;
|
|
return this;
|
|
}
|
|
generatedAlwaysAs(as, config2) {
|
|
this.config.generated = {
|
|
as,
|
|
type: "always",
|
|
mode: config2?.mode ?? "virtual"
|
|
};
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
buildForeignKeys(column, table) {
|
|
return this.foreignKeyConfigs.map(({ ref, actions }) => {
|
|
return ((ref2, actions2) => {
|
|
const builder = new ForeignKeyBuilder2(() => {
|
|
const foreignColumn = ref2();
|
|
return { columns: [column], foreignColumns: [foreignColumn] };
|
|
});
|
|
if (actions2.onUpdate) {
|
|
builder.onUpdate(actions2.onUpdate);
|
|
}
|
|
if (actions2.onDelete) {
|
|
builder.onDelete(actions2.onDelete);
|
|
}
|
|
return builder.build(table);
|
|
})(ref, actions);
|
|
});
|
|
}
|
|
};
|
|
SQLiteColumn = class extends Column {
|
|
constructor(table, config2) {
|
|
if (!config2.uniqueName) {
|
|
config2.uniqueName = uniqueKeyName2(table, [config2.name]);
|
|
}
|
|
super(table, config2);
|
|
this.table = table;
|
|
}
|
|
static [entityKind] = "SQLiteColumn";
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/blob.js
|
|
function blob(a, b) {
|
|
const { name, config: config2 } = getColumnNameAndConfig(a, b);
|
|
if (config2?.mode === "json") {
|
|
return new SQLiteBlobJsonBuilder(name);
|
|
}
|
|
if (config2?.mode === "bigint") {
|
|
return new SQLiteBigIntBuilder(name);
|
|
}
|
|
return new SQLiteBlobBufferBuilder(name);
|
|
}
|
|
var SQLiteBigIntBuilder, SQLiteBigInt, SQLiteBlobJsonBuilder, SQLiteBlobJson, SQLiteBlobBufferBuilder, SQLiteBlobBuffer;
|
|
var init_blob = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/blob.js"() {
|
|
init_entity();
|
|
init_utils();
|
|
init_common2();
|
|
SQLiteBigIntBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteBigIntBuilder";
|
|
constructor(name) {
|
|
super(name, "bigint", "SQLiteBigInt");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteBigInt(table, this.config);
|
|
}
|
|
};
|
|
SQLiteBigInt = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteBigInt";
|
|
getSQLType() {
|
|
return "blob";
|
|
}
|
|
mapFromDriverValue(value2) {
|
|
if (typeof Buffer !== "undefined" && Buffer.from) {
|
|
const buf = Buffer.isBuffer(value2) ? value2 : value2 instanceof ArrayBuffer ? Buffer.from(value2) : value2.buffer ? Buffer.from(value2.buffer, value2.byteOffset, value2.byteLength) : Buffer.from(value2);
|
|
return BigInt(buf.toString("utf8"));
|
|
}
|
|
return BigInt(textDecoder.decode(value2));
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return Buffer.from(value2.toString());
|
|
}
|
|
};
|
|
SQLiteBlobJsonBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteBlobJsonBuilder";
|
|
constructor(name) {
|
|
super(name, "json", "SQLiteBlobJson");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteBlobJson(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteBlobJson = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteBlobJson";
|
|
getSQLType() {
|
|
return "blob";
|
|
}
|
|
mapFromDriverValue(value2) {
|
|
if (typeof Buffer !== "undefined" && Buffer.from) {
|
|
const buf = Buffer.isBuffer(value2) ? value2 : value2 instanceof ArrayBuffer ? Buffer.from(value2) : value2.buffer ? Buffer.from(value2.buffer, value2.byteOffset, value2.byteLength) : Buffer.from(value2);
|
|
return JSON.parse(buf.toString("utf8"));
|
|
}
|
|
return JSON.parse(textDecoder.decode(value2));
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return Buffer.from(JSON.stringify(value2));
|
|
}
|
|
};
|
|
SQLiteBlobBufferBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteBlobBufferBuilder";
|
|
constructor(name) {
|
|
super(name, "buffer", "SQLiteBlobBuffer");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteBlobBuffer(table, this.config);
|
|
}
|
|
};
|
|
SQLiteBlobBuffer = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteBlobBuffer";
|
|
mapFromDriverValue(value2) {
|
|
if (Buffer.isBuffer(value2)) {
|
|
return value2;
|
|
}
|
|
return Buffer.from(value2);
|
|
}
|
|
getSQLType() {
|
|
return "blob";
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/custom.js
|
|
function customType(customTypeParams) {
|
|
return (a, b) => {
|
|
const { name, config: config2 } = getColumnNameAndConfig(a, b);
|
|
return new SQLiteCustomColumnBuilder(
|
|
name,
|
|
config2,
|
|
customTypeParams
|
|
);
|
|
};
|
|
}
|
|
var SQLiteCustomColumnBuilder, SQLiteCustomColumn;
|
|
var init_custom = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/custom.js"() {
|
|
init_entity();
|
|
init_utils();
|
|
init_common2();
|
|
SQLiteCustomColumnBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteCustomColumnBuilder";
|
|
constructor(name, fieldConfig, customTypeParams) {
|
|
super(name, "custom", "SQLiteCustomColumn");
|
|
this.config.fieldConfig = fieldConfig;
|
|
this.config.customTypeParams = customTypeParams;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteCustomColumn(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteCustomColumn = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteCustomColumn";
|
|
sqlName;
|
|
mapTo;
|
|
mapFrom;
|
|
constructor(table, config2) {
|
|
super(table, config2);
|
|
this.sqlName = config2.customTypeParams.dataType(config2.fieldConfig);
|
|
this.mapTo = config2.customTypeParams.toDriver;
|
|
this.mapFrom = config2.customTypeParams.fromDriver;
|
|
}
|
|
getSQLType() {
|
|
return this.sqlName;
|
|
}
|
|
mapFromDriverValue(value2) {
|
|
return typeof this.mapFrom === "function" ? this.mapFrom(value2) : value2;
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return typeof this.mapTo === "function" ? this.mapTo(value2) : value2;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/integer.js
|
|
function integer2(a, b) {
|
|
const { name, config: config2 } = getColumnNameAndConfig(a, b);
|
|
if (config2?.mode === "timestamp" || config2?.mode === "timestamp_ms") {
|
|
return new SQLiteTimestampBuilder(name, config2.mode);
|
|
}
|
|
if (config2?.mode === "boolean") {
|
|
return new SQLiteBooleanBuilder(name, config2.mode);
|
|
}
|
|
return new SQLiteIntegerBuilder(name);
|
|
}
|
|
var SQLiteBaseIntegerBuilder, SQLiteBaseInteger, SQLiteIntegerBuilder, SQLiteInteger, SQLiteTimestampBuilder, SQLiteTimestamp, SQLiteBooleanBuilder, SQLiteBoolean;
|
|
var init_integer = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/integer.js"() {
|
|
init_entity();
|
|
init_sql();
|
|
init_utils();
|
|
init_common2();
|
|
SQLiteBaseIntegerBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteBaseIntegerBuilder";
|
|
constructor(name, dataType, columnType) {
|
|
super(name, dataType, columnType);
|
|
this.config.autoIncrement = false;
|
|
}
|
|
primaryKey(config2) {
|
|
if (config2?.autoIncrement) {
|
|
this.config.autoIncrement = true;
|
|
}
|
|
this.config.hasDefault = true;
|
|
return super.primaryKey();
|
|
}
|
|
};
|
|
SQLiteBaseInteger = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteBaseInteger";
|
|
autoIncrement = this.config.autoIncrement;
|
|
getSQLType() {
|
|
return "integer";
|
|
}
|
|
};
|
|
SQLiteIntegerBuilder = class extends SQLiteBaseIntegerBuilder {
|
|
static [entityKind] = "SQLiteIntegerBuilder";
|
|
constructor(name) {
|
|
super(name, "number", "SQLiteInteger");
|
|
}
|
|
build(table) {
|
|
return new SQLiteInteger(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteInteger = class extends SQLiteBaseInteger {
|
|
static [entityKind] = "SQLiteInteger";
|
|
};
|
|
SQLiteTimestampBuilder = class extends SQLiteBaseIntegerBuilder {
|
|
static [entityKind] = "SQLiteTimestampBuilder";
|
|
constructor(name, mode) {
|
|
super(name, "date", "SQLiteTimestamp");
|
|
this.config.mode = mode;
|
|
}
|
|
/**
|
|
* @deprecated Use `default()` with your own expression instead.
|
|
*
|
|
* Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.
|
|
*/
|
|
defaultNow() {
|
|
return this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`);
|
|
}
|
|
build(table) {
|
|
return new SQLiteTimestamp(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteTimestamp = class extends SQLiteBaseInteger {
|
|
static [entityKind] = "SQLiteTimestamp";
|
|
mode = this.config.mode;
|
|
mapFromDriverValue(value2) {
|
|
if (this.config.mode === "timestamp") {
|
|
return new Date(value2 * 1e3);
|
|
}
|
|
return new Date(value2);
|
|
}
|
|
mapToDriverValue(value2) {
|
|
const unix = value2.getTime();
|
|
if (this.config.mode === "timestamp") {
|
|
return Math.floor(unix / 1e3);
|
|
}
|
|
return unix;
|
|
}
|
|
};
|
|
SQLiteBooleanBuilder = class extends SQLiteBaseIntegerBuilder {
|
|
static [entityKind] = "SQLiteBooleanBuilder";
|
|
constructor(name, mode) {
|
|
super(name, "boolean", "SQLiteBoolean");
|
|
this.config.mode = mode;
|
|
}
|
|
build(table) {
|
|
return new SQLiteBoolean(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteBoolean = class extends SQLiteBaseInteger {
|
|
static [entityKind] = "SQLiteBoolean";
|
|
mode = this.config.mode;
|
|
mapFromDriverValue(value2) {
|
|
return Number(value2) === 1;
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return value2 ? 1 : 0;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/numeric.js
|
|
function numeric(a, b) {
|
|
const { name, config: config2 } = getColumnNameAndConfig(a, b);
|
|
const mode = config2?.mode;
|
|
return mode === "number" ? new SQLiteNumericNumberBuilder(name) : mode === "bigint" ? new SQLiteNumericBigIntBuilder(name) : new SQLiteNumericBuilder(name);
|
|
}
|
|
var SQLiteNumericBuilder, SQLiteNumeric, SQLiteNumericNumberBuilder, SQLiteNumericNumber, SQLiteNumericBigIntBuilder, SQLiteNumericBigInt;
|
|
var init_numeric = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/numeric.js"() {
|
|
init_entity();
|
|
init_utils();
|
|
init_common2();
|
|
SQLiteNumericBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteNumericBuilder";
|
|
constructor(name) {
|
|
super(name, "string", "SQLiteNumeric");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteNumeric(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteNumeric = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteNumeric";
|
|
mapFromDriverValue(value2) {
|
|
if (typeof value2 === "string") return value2;
|
|
return String(value2);
|
|
}
|
|
getSQLType() {
|
|
return "numeric";
|
|
}
|
|
};
|
|
SQLiteNumericNumberBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteNumericNumberBuilder";
|
|
constructor(name) {
|
|
super(name, "number", "SQLiteNumericNumber");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteNumericNumber(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteNumericNumber = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteNumericNumber";
|
|
mapFromDriverValue(value2) {
|
|
if (typeof value2 === "number") return value2;
|
|
return Number(value2);
|
|
}
|
|
mapToDriverValue = String;
|
|
getSQLType() {
|
|
return "numeric";
|
|
}
|
|
};
|
|
SQLiteNumericBigIntBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteNumericBigIntBuilder";
|
|
constructor(name) {
|
|
super(name, "bigint", "SQLiteNumericBigInt");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteNumericBigInt(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteNumericBigInt = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteNumericBigInt";
|
|
mapFromDriverValue = BigInt;
|
|
mapToDriverValue = String;
|
|
getSQLType() {
|
|
return "numeric";
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/real.js
|
|
function real(name) {
|
|
return new SQLiteRealBuilder(name ?? "");
|
|
}
|
|
var SQLiteRealBuilder, SQLiteReal;
|
|
var init_real = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/real.js"() {
|
|
init_entity();
|
|
init_common2();
|
|
SQLiteRealBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteRealBuilder";
|
|
constructor(name) {
|
|
super(name, "number", "SQLiteReal");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteReal(table, this.config);
|
|
}
|
|
};
|
|
SQLiteReal = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteReal";
|
|
getSQLType() {
|
|
return "real";
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/text.js
|
|
function text(a, b = {}) {
|
|
const { name, config: config2 } = getColumnNameAndConfig(a, b);
|
|
if (config2.mode === "json") {
|
|
return new SQLiteTextJsonBuilder(name);
|
|
}
|
|
return new SQLiteTextBuilder(name, config2);
|
|
}
|
|
var SQLiteTextBuilder, SQLiteText, SQLiteTextJsonBuilder, SQLiteTextJson;
|
|
var init_text = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/text.js"() {
|
|
init_entity();
|
|
init_utils();
|
|
init_common2();
|
|
SQLiteTextBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteTextBuilder";
|
|
constructor(name, config2) {
|
|
super(name, "string", "SQLiteText");
|
|
this.config.enumValues = config2.enum;
|
|
this.config.length = config2.length;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteText(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteText = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteText";
|
|
enumValues = this.config.enumValues;
|
|
length = this.config.length;
|
|
constructor(table, config2) {
|
|
super(table, config2);
|
|
}
|
|
getSQLType() {
|
|
return `text${this.config.length ? `(${this.config.length})` : ""}`;
|
|
}
|
|
};
|
|
SQLiteTextJsonBuilder = class extends SQLiteColumnBuilder {
|
|
static [entityKind] = "SQLiteTextJsonBuilder";
|
|
constructor(name) {
|
|
super(name, "json", "SQLiteTextJson");
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new SQLiteTextJson(
|
|
table,
|
|
this.config
|
|
);
|
|
}
|
|
};
|
|
SQLiteTextJson = class extends SQLiteColumn {
|
|
static [entityKind] = "SQLiteTextJson";
|
|
getSQLType() {
|
|
return "text";
|
|
}
|
|
mapFromDriverValue(value2) {
|
|
return JSON.parse(value2);
|
|
}
|
|
mapToDriverValue(value2) {
|
|
return JSON.stringify(value2);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/index.js
|
|
var init_columns = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/index.js"() {
|
|
init_blob();
|
|
init_common2();
|
|
init_custom();
|
|
init_integer();
|
|
init_numeric();
|
|
init_real();
|
|
init_text();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/selection-proxy.js
|
|
var SelectionProxyHandler;
|
|
var init_selection_proxy = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/selection-proxy.js"() {
|
|
init_alias();
|
|
init_column();
|
|
init_entity();
|
|
init_sql();
|
|
init_subquery();
|
|
init_view_common();
|
|
SelectionProxyHandler = class _SelectionProxyHandler {
|
|
static [entityKind] = "SelectionProxyHandler";
|
|
config;
|
|
constructor(config2) {
|
|
this.config = { ...config2 };
|
|
}
|
|
get(subquery, prop) {
|
|
if (prop === "_") {
|
|
return {
|
|
...subquery["_"],
|
|
selectedFields: new Proxy(
|
|
subquery._.selectedFields,
|
|
this
|
|
)
|
|
};
|
|
}
|
|
if (prop === ViewBaseConfig) {
|
|
return {
|
|
...subquery[ViewBaseConfig],
|
|
selectedFields: new Proxy(
|
|
subquery[ViewBaseConfig].selectedFields,
|
|
this
|
|
)
|
|
};
|
|
}
|
|
if (typeof prop === "symbol") {
|
|
return subquery[prop];
|
|
}
|
|
const columns = is(subquery, Subquery) ? subquery._.selectedFields : is(subquery, View) ? subquery[ViewBaseConfig].selectedFields : subquery;
|
|
const value2 = columns[prop];
|
|
if (is(value2, SQL.Aliased)) {
|
|
if (this.config.sqlAliasedBehavior === "sql" && !value2.isSelectionField) {
|
|
return value2.sql;
|
|
}
|
|
const newValue = value2.clone();
|
|
newValue.isSelectionField = true;
|
|
return newValue;
|
|
}
|
|
if (is(value2, SQL)) {
|
|
if (this.config.sqlBehavior === "sql") {
|
|
return value2;
|
|
}
|
|
throw new Error(
|
|
`You tried to reference "${prop}" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using ".as('alias')" method.`
|
|
);
|
|
}
|
|
if (is(value2, Column)) {
|
|
if (this.config.alias) {
|
|
return new Proxy(
|
|
value2,
|
|
new ColumnAliasProxyHandler(
|
|
new Proxy(
|
|
value2.table,
|
|
new TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
return value2;
|
|
}
|
|
if (typeof value2 !== "object" || value2 === null) {
|
|
return value2;
|
|
}
|
|
return new Proxy(value2, new _SelectionProxyHandler(this.config));
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/query-promise.js
|
|
var QueryPromise;
|
|
var init_query_promise = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/query-promise.js"() {
|
|
init_entity();
|
|
QueryPromise = class {
|
|
static [entityKind] = "QueryPromise";
|
|
[Symbol.toStringTag] = "QueryPromise";
|
|
catch(onRejected) {
|
|
return this.then(void 0, onRejected);
|
|
}
|
|
finally(onFinally) {
|
|
return this.then(
|
|
(value2) => {
|
|
onFinally?.();
|
|
return value2;
|
|
},
|
|
(reason) => {
|
|
onFinally?.();
|
|
throw reason;
|
|
}
|
|
);
|
|
}
|
|
then(onFulfilled, onRejected) {
|
|
return this.execute().then(onFulfilled, onRejected);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/all.js
|
|
function getSQLiteColumnBuilders() {
|
|
return {
|
|
blob,
|
|
customType,
|
|
integer: integer2,
|
|
numeric,
|
|
real,
|
|
text
|
|
};
|
|
}
|
|
var init_all = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/columns/all.js"() {
|
|
init_blob();
|
|
init_custom();
|
|
init_integer();
|
|
init_numeric();
|
|
init_real();
|
|
init_text();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/table.js
|
|
function sqliteTableBase(name, columns, extraConfig, schema, baseName = name) {
|
|
const rawTable = new SQLiteTable(name, schema, baseName);
|
|
const parsedColumns = typeof columns === "function" ? columns(getSQLiteColumnBuilders()) : columns;
|
|
const builtColumns = Object.fromEntries(
|
|
Object.entries(parsedColumns).map(([name2, colBuilderBase]) => {
|
|
const colBuilder = colBuilderBase;
|
|
colBuilder.setName(name2);
|
|
const column = colBuilder.build(rawTable);
|
|
rawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));
|
|
return [name2, column];
|
|
})
|
|
);
|
|
const table = Object.assign(rawTable, builtColumns);
|
|
table[Table.Symbol.Columns] = builtColumns;
|
|
table[Table.Symbol.ExtraConfigColumns] = builtColumns;
|
|
if (extraConfig) {
|
|
table[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig;
|
|
}
|
|
return table;
|
|
}
|
|
var InlineForeignKeys, SQLiteTable, sqliteTable;
|
|
var init_table2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/table.js"() {
|
|
init_entity();
|
|
init_table();
|
|
init_all();
|
|
InlineForeignKeys = Symbol.for("drizzle:SQLiteInlineForeignKeys");
|
|
SQLiteTable = class extends Table {
|
|
static [entityKind] = "SQLiteTable";
|
|
/** @internal */
|
|
static Symbol = Object.assign({}, Table.Symbol, {
|
|
InlineForeignKeys
|
|
});
|
|
/** @internal */
|
|
[Table.Symbol.Columns];
|
|
/** @internal */
|
|
[InlineForeignKeys] = [];
|
|
/** @internal */
|
|
[Table.Symbol.ExtraConfigBuilder] = void 0;
|
|
};
|
|
sqliteTable = (name, columns, extraConfig) => {
|
|
return sqliteTableBase(name, columns, extraConfig);
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/indexes.js
|
|
function index(name) {
|
|
return new IndexBuilderOn(name, false);
|
|
}
|
|
var IndexBuilderOn, IndexBuilder, Index;
|
|
var init_indexes = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/indexes.js"() {
|
|
init_entity();
|
|
IndexBuilderOn = class {
|
|
constructor(name, unique) {
|
|
this.name = name;
|
|
this.unique = unique;
|
|
}
|
|
static [entityKind] = "SQLiteIndexBuilderOn";
|
|
on(...columns) {
|
|
return new IndexBuilder(this.name, columns, this.unique);
|
|
}
|
|
};
|
|
IndexBuilder = class {
|
|
static [entityKind] = "SQLiteIndexBuilder";
|
|
/** @internal */
|
|
config;
|
|
constructor(name, columns, unique) {
|
|
this.config = {
|
|
name,
|
|
columns,
|
|
unique,
|
|
where: void 0
|
|
};
|
|
}
|
|
/**
|
|
* Condition for partial index.
|
|
*/
|
|
where(condition) {
|
|
this.config.where = condition;
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new Index(this.config, table);
|
|
}
|
|
};
|
|
Index = class {
|
|
static [entityKind] = "SQLiteIndex";
|
|
config;
|
|
constructor(config2, table) {
|
|
this.config = { ...config2, table };
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/primary-keys.js
|
|
var PrimaryKeyBuilder, PrimaryKey;
|
|
var init_primary_keys = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/primary-keys.js"() {
|
|
init_entity();
|
|
init_table2();
|
|
PrimaryKeyBuilder = class {
|
|
static [entityKind] = "SQLitePrimaryKeyBuilder";
|
|
/** @internal */
|
|
columns;
|
|
/** @internal */
|
|
name;
|
|
constructor(columns, name) {
|
|
this.columns = columns;
|
|
this.name = name;
|
|
}
|
|
/** @internal */
|
|
build(table) {
|
|
return new PrimaryKey(table, this.columns, this.name);
|
|
}
|
|
};
|
|
PrimaryKey = class {
|
|
constructor(table, columns, name) {
|
|
this.table = table;
|
|
this.columns = columns;
|
|
this.name = name;
|
|
}
|
|
static [entityKind] = "SQLitePrimaryKey";
|
|
columns;
|
|
name;
|
|
getName() {
|
|
return this.name ?? `${this.table[SQLiteTable.Symbol.Name]}_${this.columns.map((column) => column.name).join("_")}_pk`;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/utils.js
|
|
function extractUsedTable(table) {
|
|
if (is(table, SQLiteTable)) {
|
|
return [`${table[Table.Symbol.BaseName]}`];
|
|
}
|
|
if (is(table, Subquery)) {
|
|
return table._.usedTables ?? [];
|
|
}
|
|
if (is(table, SQL)) {
|
|
return table.usedTables ?? [];
|
|
}
|
|
return [];
|
|
}
|
|
var init_utils2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/utils.js"() {
|
|
init_entity();
|
|
init_sql();
|
|
init_subquery();
|
|
init_table();
|
|
init_table2();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js
|
|
var SQLiteDeleteBase;
|
|
var init_delete = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js"() {
|
|
init_entity();
|
|
init_query_promise();
|
|
init_selection_proxy();
|
|
init_table2();
|
|
init_table();
|
|
init_utils();
|
|
init_utils2();
|
|
SQLiteDeleteBase = class extends QueryPromise {
|
|
constructor(table, session, dialect, withList) {
|
|
super();
|
|
this.table = table;
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this.config = { table, withList };
|
|
}
|
|
static [entityKind] = "SQLiteDelete";
|
|
/** @internal */
|
|
config;
|
|
/**
|
|
* Adds a `where` clause to the query.
|
|
*
|
|
* Calling this method will delete only those rows that fulfill a specified condition.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/delete}
|
|
*
|
|
* @param where the `where` clause.
|
|
*
|
|
* @example
|
|
* You can use conditional operators and `sql function` to filter the rows to be deleted.
|
|
*
|
|
* ```ts
|
|
* // Delete all cars with green color
|
|
* db.delete(cars).where(eq(cars.color, 'green'));
|
|
* // or
|
|
* db.delete(cars).where(sql`${cars.color} = 'green'`)
|
|
* ```
|
|
*
|
|
* You can logically combine conditional operators with `and()` and `or()` operators:
|
|
*
|
|
* ```ts
|
|
* // Delete all BMW cars with a green color
|
|
* db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));
|
|
*
|
|
* // Delete all cars with the green or blue color
|
|
* db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));
|
|
* ```
|
|
*/
|
|
where(where) {
|
|
this.config.where = where;
|
|
return this;
|
|
}
|
|
orderBy(...columns) {
|
|
if (typeof columns[0] === "function") {
|
|
const orderBy = columns[0](
|
|
new Proxy(
|
|
this.config.table[Table.Symbol.Columns],
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "alias", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
const orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];
|
|
this.config.orderBy = orderByArray;
|
|
} else {
|
|
const orderByArray = columns;
|
|
this.config.orderBy = orderByArray;
|
|
}
|
|
return this;
|
|
}
|
|
limit(limit) {
|
|
this.config.limit = limit;
|
|
return this;
|
|
}
|
|
returning(fields = this.table[SQLiteTable.Symbol.Columns]) {
|
|
this.config.returning = orderSelectedFields(fields);
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
getSQL() {
|
|
return this.dialect.buildDeleteQuery(this.config);
|
|
}
|
|
toSQL() {
|
|
const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
|
|
return rest;
|
|
}
|
|
/** @internal */
|
|
_prepare(isOneTimeQuery = true) {
|
|
return this.session[isOneTimeQuery ? "prepareOneTimeQuery" : "prepareQuery"](
|
|
this.dialect.sqlToQuery(this.getSQL()),
|
|
this.config.returning,
|
|
this.config.returning ? "all" : "run",
|
|
true,
|
|
void 0,
|
|
{
|
|
type: "delete",
|
|
tables: extractUsedTable(this.config.table)
|
|
}
|
|
);
|
|
}
|
|
prepare() {
|
|
return this._prepare(false);
|
|
}
|
|
run = (placeholderValues) => {
|
|
return this._prepare().run(placeholderValues);
|
|
};
|
|
all = (placeholderValues) => {
|
|
return this._prepare().all(placeholderValues);
|
|
};
|
|
get = (placeholderValues) => {
|
|
return this._prepare().get(placeholderValues);
|
|
};
|
|
values = (placeholderValues) => {
|
|
return this._prepare().values(placeholderValues);
|
|
};
|
|
async execute(placeholderValues) {
|
|
return this._prepare().execute(placeholderValues);
|
|
}
|
|
$dynamic() {
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/casing.js
|
|
function toSnakeCase(input) {
|
|
const words = input.replace(/['\u2019]/g, "").match(/[\da-z]+|[A-Z]+(?![a-z])|[A-Z][\da-z]+/g) ?? [];
|
|
return words.map((word) => word.toLowerCase()).join("_");
|
|
}
|
|
function toCamelCase(input) {
|
|
const words = input.replace(/['\u2019]/g, "").match(/[\da-z]+|[A-Z]+(?![a-z])|[A-Z][\da-z]+/g) ?? [];
|
|
return words.reduce((acc, word, i) => {
|
|
const formattedWord = i === 0 ? word.toLowerCase() : `${word[0].toUpperCase()}${word.slice(1)}`;
|
|
return acc + formattedWord;
|
|
}, "");
|
|
}
|
|
function noopCase(input) {
|
|
return input;
|
|
}
|
|
var CasingCache;
|
|
var init_casing = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/casing.js"() {
|
|
init_entity();
|
|
init_table();
|
|
CasingCache = class {
|
|
static [entityKind] = "CasingCache";
|
|
/** @internal */
|
|
cache = {};
|
|
cachedTables = {};
|
|
convert;
|
|
constructor(casing) {
|
|
this.convert = casing === "snake_case" ? toSnakeCase : casing === "camelCase" ? toCamelCase : noopCase;
|
|
}
|
|
getColumnCasing(column) {
|
|
if (!column.keyAsName) return column.name;
|
|
const schema = column.table[Table.Symbol.Schema] ?? "public";
|
|
const tableName = column.table[Table.Symbol.OriginalName];
|
|
const key = `${schema}.${tableName}.${column.name}`;
|
|
if (!this.cache[key]) {
|
|
this.cacheTable(column.table);
|
|
}
|
|
return this.cache[key];
|
|
}
|
|
cacheTable(table) {
|
|
const schema = table[Table.Symbol.Schema] ?? "public";
|
|
const tableName = table[Table.Symbol.OriginalName];
|
|
const tableKey = `${schema}.${tableName}`;
|
|
if (!this.cachedTables[tableKey]) {
|
|
for (const column of Object.values(table[Table.Symbol.Columns])) {
|
|
const columnKey = `${tableKey}.${column.name}`;
|
|
this.cache[columnKey] = this.convert(column.name);
|
|
}
|
|
this.cachedTables[tableKey] = true;
|
|
}
|
|
}
|
|
clearCache() {
|
|
this.cache = {};
|
|
this.cachedTables = {};
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/errors.js
|
|
var DrizzleError, DrizzleQueryError, TransactionRollbackError;
|
|
var init_errors3 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/errors.js"() {
|
|
init_entity();
|
|
DrizzleError = class extends Error {
|
|
static [entityKind] = "DrizzleError";
|
|
constructor({ message, cause }) {
|
|
super(message);
|
|
this.name = "DrizzleError";
|
|
this.cause = cause;
|
|
}
|
|
};
|
|
DrizzleQueryError = class _DrizzleQueryError extends Error {
|
|
constructor(query, params, cause) {
|
|
super(`Failed query: ${query}
|
|
params: ${params}`);
|
|
this.query = query;
|
|
this.params = params;
|
|
this.cause = cause;
|
|
Error.captureStackTrace(this, _DrizzleQueryError);
|
|
if (cause) this.cause = cause;
|
|
}
|
|
};
|
|
TransactionRollbackError = class extends DrizzleError {
|
|
static [entityKind] = "TransactionRollbackError";
|
|
constructor() {
|
|
super({ message: "Rollback" });
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/conditions.js
|
|
function bindIfParam(value2, column) {
|
|
if (isDriverValueEncoder(column) && !isSQLWrapper(value2) && !is(value2, Param) && !is(value2, Placeholder) && !is(value2, Column) && !is(value2, Table) && !is(value2, View)) {
|
|
return new Param(value2, column);
|
|
}
|
|
return value2;
|
|
}
|
|
function and(...unfilteredConditions) {
|
|
const conditions = unfilteredConditions.filter(
|
|
(c) => c !== void 0
|
|
);
|
|
if (conditions.length === 0) {
|
|
return void 0;
|
|
}
|
|
if (conditions.length === 1) {
|
|
return new SQL(conditions);
|
|
}
|
|
return new SQL([
|
|
new StringChunk("("),
|
|
sql.join(conditions, new StringChunk(" and ")),
|
|
new StringChunk(")")
|
|
]);
|
|
}
|
|
function or(...unfilteredConditions) {
|
|
const conditions = unfilteredConditions.filter(
|
|
(c) => c !== void 0
|
|
);
|
|
if (conditions.length === 0) {
|
|
return void 0;
|
|
}
|
|
if (conditions.length === 1) {
|
|
return new SQL(conditions);
|
|
}
|
|
return new SQL([
|
|
new StringChunk("("),
|
|
sql.join(conditions, new StringChunk(" or ")),
|
|
new StringChunk(")")
|
|
]);
|
|
}
|
|
function not(condition) {
|
|
return sql`not ${condition}`;
|
|
}
|
|
function inArray(column, values) {
|
|
if (Array.isArray(values)) {
|
|
if (values.length === 0) {
|
|
return sql`false`;
|
|
}
|
|
return sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;
|
|
}
|
|
return sql`${column} in ${bindIfParam(values, column)}`;
|
|
}
|
|
function notInArray(column, values) {
|
|
if (Array.isArray(values)) {
|
|
if (values.length === 0) {
|
|
return sql`true`;
|
|
}
|
|
return sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;
|
|
}
|
|
return sql`${column} not in ${bindIfParam(values, column)}`;
|
|
}
|
|
function isNull(value2) {
|
|
return sql`${value2} is null`;
|
|
}
|
|
function isNotNull(value2) {
|
|
return sql`${value2} is not null`;
|
|
}
|
|
function exists(subquery) {
|
|
return sql`exists ${subquery}`;
|
|
}
|
|
function notExists(subquery) {
|
|
return sql`not exists ${subquery}`;
|
|
}
|
|
function between(column, min, max) {
|
|
return sql`${column} between ${bindIfParam(min, column)} and ${bindIfParam(
|
|
max,
|
|
column
|
|
)}`;
|
|
}
|
|
function notBetween(column, min, max) {
|
|
return sql`${column} not between ${bindIfParam(
|
|
min,
|
|
column
|
|
)} and ${bindIfParam(max, column)}`;
|
|
}
|
|
function like(column, value2) {
|
|
return sql`${column} like ${value2}`;
|
|
}
|
|
function notLike(column, value2) {
|
|
return sql`${column} not like ${value2}`;
|
|
}
|
|
function ilike(column, value2) {
|
|
return sql`${column} ilike ${value2}`;
|
|
}
|
|
function notIlike(column, value2) {
|
|
return sql`${column} not ilike ${value2}`;
|
|
}
|
|
var eq, ne, gt, gte, lt, lte;
|
|
var init_conditions = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/conditions.js"() {
|
|
init_column();
|
|
init_entity();
|
|
init_table();
|
|
init_sql();
|
|
eq = (left, right) => {
|
|
return sql`${left} = ${bindIfParam(right, left)}`;
|
|
};
|
|
ne = (left, right) => {
|
|
return sql`${left} <> ${bindIfParam(right, left)}`;
|
|
};
|
|
gt = (left, right) => {
|
|
return sql`${left} > ${bindIfParam(right, left)}`;
|
|
};
|
|
gte = (left, right) => {
|
|
return sql`${left} >= ${bindIfParam(right, left)}`;
|
|
};
|
|
lt = (left, right) => {
|
|
return sql`${left} < ${bindIfParam(right, left)}`;
|
|
};
|
|
lte = (left, right) => {
|
|
return sql`${left} <= ${bindIfParam(right, left)}`;
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/select.js
|
|
function asc(column) {
|
|
return sql`${column} asc`;
|
|
}
|
|
function desc(column) {
|
|
return sql`${column} desc`;
|
|
}
|
|
var init_select = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/select.js"() {
|
|
init_sql();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/index.js
|
|
var init_expressions = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/expressions/index.js"() {
|
|
init_conditions();
|
|
init_select();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/relations.js
|
|
function getOperators() {
|
|
return {
|
|
and,
|
|
between,
|
|
eq,
|
|
exists,
|
|
gt,
|
|
gte,
|
|
ilike,
|
|
inArray,
|
|
isNull,
|
|
isNotNull,
|
|
like,
|
|
lt,
|
|
lte,
|
|
ne,
|
|
not,
|
|
notBetween,
|
|
notExists,
|
|
notLike,
|
|
notIlike,
|
|
notInArray,
|
|
or,
|
|
sql
|
|
};
|
|
}
|
|
function getOrderByOperators() {
|
|
return {
|
|
sql,
|
|
asc,
|
|
desc
|
|
};
|
|
}
|
|
function normalizeRelation(schema, tableNamesMap, relation) {
|
|
if (is(relation, One) && relation.config) {
|
|
return {
|
|
fields: relation.config.fields,
|
|
references: relation.config.references
|
|
};
|
|
}
|
|
const referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];
|
|
if (!referencedTableTsName) {
|
|
throw new Error(
|
|
`Table "${relation.referencedTable[Table.Symbol.Name]}" not found in schema`
|
|
);
|
|
}
|
|
const referencedTableConfig = schema[referencedTableTsName];
|
|
if (!referencedTableConfig) {
|
|
throw new Error(`Table "${referencedTableTsName}" not found in schema`);
|
|
}
|
|
const sourceTable = relation.sourceTable;
|
|
const sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];
|
|
if (!sourceTableTsName) {
|
|
throw new Error(
|
|
`Table "${sourceTable[Table.Symbol.Name]}" not found in schema`
|
|
);
|
|
}
|
|
const reverseRelations = [];
|
|
for (const referencedTableRelation of Object.values(
|
|
referencedTableConfig.relations
|
|
)) {
|
|
if (relation.relationName && relation !== referencedTableRelation && referencedTableRelation.relationName === relation.relationName || !relation.relationName && referencedTableRelation.referencedTable === relation.sourceTable) {
|
|
reverseRelations.push(referencedTableRelation);
|
|
}
|
|
}
|
|
if (reverseRelations.length > 1) {
|
|
throw relation.relationName ? new Error(
|
|
`There are multiple relations with name "${relation.relationName}" in table "${referencedTableTsName}"`
|
|
) : new Error(
|
|
`There are multiple relations between "${referencedTableTsName}" and "${relation.sourceTable[Table.Symbol.Name]}". Please specify relation name`
|
|
);
|
|
}
|
|
if (reverseRelations[0] && is(reverseRelations[0], One) && reverseRelations[0].config) {
|
|
return {
|
|
fields: reverseRelations[0].config.references,
|
|
references: reverseRelations[0].config.fields
|
|
};
|
|
}
|
|
throw new Error(
|
|
`There is not enough information to infer relation "${sourceTableTsName}.${relation.fieldName}"`
|
|
);
|
|
}
|
|
function mapRelationalRow(tablesConfig, tableConfig, row, buildQueryResultSelection, mapColumnValue = (value2) => value2) {
|
|
const result = {};
|
|
for (const [
|
|
selectionItemIndex,
|
|
selectionItem
|
|
] of buildQueryResultSelection.entries()) {
|
|
if (selectionItem.isJson) {
|
|
const relation = tableConfig.relations[selectionItem.tsKey];
|
|
const rawSubRows = row[selectionItemIndex];
|
|
const subRows = typeof rawSubRows === "string" ? JSON.parse(rawSubRows) : rawSubRows;
|
|
result[selectionItem.tsKey] = is(relation, One) ? subRows && mapRelationalRow(
|
|
tablesConfig,
|
|
tablesConfig[selectionItem.relationTableTsKey],
|
|
subRows,
|
|
selectionItem.selection,
|
|
mapColumnValue
|
|
) : subRows.map(
|
|
(subRow) => mapRelationalRow(
|
|
tablesConfig,
|
|
tablesConfig[selectionItem.relationTableTsKey],
|
|
subRow,
|
|
selectionItem.selection,
|
|
mapColumnValue
|
|
)
|
|
);
|
|
} else {
|
|
const value2 = mapColumnValue(row[selectionItemIndex]);
|
|
const field = selectionItem.field;
|
|
let decoder;
|
|
if (is(field, Column)) {
|
|
decoder = field;
|
|
} else if (is(field, SQL)) {
|
|
decoder = field.decoder;
|
|
} else {
|
|
decoder = field.sql.decoder;
|
|
}
|
|
result[selectionItem.tsKey] = value2 === null ? null : decoder.mapFromDriverValue(value2);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
var Relation, Relations, One, Many;
|
|
var init_relations = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/relations.js"() {
|
|
init_table();
|
|
init_column();
|
|
init_entity();
|
|
init_expressions();
|
|
init_sql();
|
|
Relation = class {
|
|
constructor(sourceTable, referencedTable, relationName) {
|
|
this.sourceTable = sourceTable;
|
|
this.referencedTable = referencedTable;
|
|
this.relationName = relationName;
|
|
this.referencedTableName = referencedTable[Table.Symbol.Name];
|
|
}
|
|
static [entityKind] = "Relation";
|
|
referencedTableName;
|
|
fieldName;
|
|
};
|
|
Relations = class {
|
|
constructor(table, config2) {
|
|
this.table = table;
|
|
this.config = config2;
|
|
}
|
|
static [entityKind] = "Relations";
|
|
};
|
|
One = class _One extends Relation {
|
|
constructor(sourceTable, referencedTable, config2, isNullable) {
|
|
super(sourceTable, referencedTable, config2?.relationName);
|
|
this.config = config2;
|
|
this.isNullable = isNullable;
|
|
}
|
|
static [entityKind] = "One";
|
|
withFieldName(fieldName) {
|
|
const relation = new _One(
|
|
this.sourceTable,
|
|
this.referencedTable,
|
|
this.config,
|
|
this.isNullable
|
|
);
|
|
relation.fieldName = fieldName;
|
|
return relation;
|
|
}
|
|
};
|
|
Many = class _Many extends Relation {
|
|
constructor(sourceTable, referencedTable, config2) {
|
|
super(sourceTable, referencedTable, config2?.relationName);
|
|
this.config = config2;
|
|
}
|
|
static [entityKind] = "Many";
|
|
withFieldName(fieldName) {
|
|
const relation = new _Many(
|
|
this.sourceTable,
|
|
this.referencedTable,
|
|
this.config
|
|
);
|
|
relation.fieldName = fieldName;
|
|
return relation;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/aggregate.js
|
|
var init_aggregate = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/aggregate.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/vector.js
|
|
var init_vector = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/vector.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/index.js
|
|
var init_functions = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/functions/index.js"() {
|
|
init_aggregate();
|
|
init_vector();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/index.js
|
|
var init_sql2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sql/index.js"() {
|
|
init_expressions();
|
|
init_functions();
|
|
init_sql();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/view-base.js
|
|
var SQLiteViewBase;
|
|
var init_view_base = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/view-base.js"() {
|
|
init_entity();
|
|
init_sql();
|
|
SQLiteViewBase = class extends View {
|
|
static [entityKind] = "SQLiteViewBase";
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/dialect.js
|
|
var SQLiteDialect, SQLiteSyncDialect, SQLiteAsyncDialect;
|
|
var init_dialect = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/dialect.js"() {
|
|
init_alias();
|
|
init_casing();
|
|
init_column();
|
|
init_entity();
|
|
init_errors3();
|
|
init_relations();
|
|
init_sql2();
|
|
init_sql();
|
|
init_columns();
|
|
init_table2();
|
|
init_subquery();
|
|
init_table();
|
|
init_utils();
|
|
init_view_common();
|
|
init_view_base();
|
|
SQLiteDialect = class {
|
|
static [entityKind] = "SQLiteDialect";
|
|
/** @internal */
|
|
casing;
|
|
constructor(config2) {
|
|
this.casing = new CasingCache(config2?.casing);
|
|
}
|
|
escapeName(name) {
|
|
return `"${name}"`;
|
|
}
|
|
escapeParam(_num) {
|
|
return "?";
|
|
}
|
|
escapeString(str) {
|
|
return `'${str.replace(/'/g, "''")}'`;
|
|
}
|
|
buildWithCTE(queries) {
|
|
if (!queries?.length) return void 0;
|
|
const withSqlChunks = [sql`with `];
|
|
for (const [i, w] of queries.entries()) {
|
|
withSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);
|
|
if (i < queries.length - 1) {
|
|
withSqlChunks.push(sql`, `);
|
|
}
|
|
}
|
|
withSqlChunks.push(sql` `);
|
|
return sql.join(withSqlChunks);
|
|
}
|
|
buildDeleteQuery({ table, where, returning, withList, limit, orderBy }) {
|
|
const withSql = this.buildWithCTE(withList);
|
|
const returningSql = returning ? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}` : void 0;
|
|
const whereSql = where ? sql` where ${where}` : void 0;
|
|
const orderBySql = this.buildOrderBy(orderBy);
|
|
const limitSql = this.buildLimit(limit);
|
|
return sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;
|
|
}
|
|
buildUpdateSet(table, set2) {
|
|
const tableColumns = table[Table.Symbol.Columns];
|
|
const columnNames = Object.keys(tableColumns).filter(
|
|
(colName) => set2[colName] !== void 0 || tableColumns[colName]?.onUpdateFn !== void 0
|
|
);
|
|
const setSize = columnNames.length;
|
|
return sql.join(columnNames.flatMap((colName, i) => {
|
|
const col = tableColumns[colName];
|
|
const value2 = set2[colName] ?? sql.param(col.onUpdateFn(), col);
|
|
const res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value2}`;
|
|
if (i < setSize - 1) {
|
|
return [res, sql.raw(", ")];
|
|
}
|
|
return [res];
|
|
}));
|
|
}
|
|
buildUpdateQuery({ table, set: set2, where, returning, withList, joins, from, limit, orderBy }) {
|
|
const withSql = this.buildWithCTE(withList);
|
|
const setSql = this.buildUpdateSet(table, set2);
|
|
const fromSql = from && sql.join([sql.raw(" from "), this.buildFromTable(from)]);
|
|
const joinsSql = this.buildJoins(joins);
|
|
const returningSql = returning ? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}` : void 0;
|
|
const whereSql = where ? sql` where ${where}` : void 0;
|
|
const orderBySql = this.buildOrderBy(orderBy);
|
|
const limitSql = this.buildLimit(limit);
|
|
return sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;
|
|
}
|
|
/**
|
|
* Builds selection SQL with provided fields/expressions
|
|
*
|
|
* Examples:
|
|
*
|
|
* `select <selection> from`
|
|
*
|
|
* `insert ... returning <selection>`
|
|
*
|
|
* If `isSingleTable` is true, then columns won't be prefixed with table name
|
|
*/
|
|
buildSelection(fields, { isSingleTable = false } = {}) {
|
|
const columnsLen = fields.length;
|
|
const chunks = fields.flatMap(({ field }, i) => {
|
|
const chunk = [];
|
|
if (is(field, SQL.Aliased) && field.isSelectionField) {
|
|
chunk.push(sql.identifier(field.fieldAlias));
|
|
} else if (is(field, SQL.Aliased) || is(field, SQL)) {
|
|
const query = is(field, SQL.Aliased) ? field.sql : field;
|
|
if (isSingleTable) {
|
|
chunk.push(
|
|
new SQL(
|
|
query.queryChunks.map((c) => {
|
|
if (is(c, Column)) {
|
|
return sql.identifier(this.casing.getColumnCasing(c));
|
|
}
|
|
return c;
|
|
})
|
|
)
|
|
);
|
|
} else {
|
|
chunk.push(query);
|
|
}
|
|
if (is(field, SQL.Aliased)) {
|
|
chunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);
|
|
}
|
|
} else if (is(field, Column)) {
|
|
const tableName = field.table[Table.Symbol.Name];
|
|
if (field.columnType === "SQLiteNumericBigInt") {
|
|
if (isSingleTable) {
|
|
chunk.push(sql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`);
|
|
} else {
|
|
chunk.push(
|
|
sql`cast(${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))} as text)`
|
|
);
|
|
}
|
|
} else {
|
|
if (isSingleTable) {
|
|
chunk.push(sql.identifier(this.casing.getColumnCasing(field)));
|
|
} else {
|
|
chunk.push(sql`${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))}`);
|
|
}
|
|
}
|
|
}
|
|
if (i < columnsLen - 1) {
|
|
chunk.push(sql`, `);
|
|
}
|
|
return chunk;
|
|
});
|
|
return sql.join(chunks);
|
|
}
|
|
buildJoins(joins) {
|
|
if (!joins || joins.length === 0) {
|
|
return void 0;
|
|
}
|
|
const joinsArray = [];
|
|
if (joins) {
|
|
for (const [index2, joinMeta] of joins.entries()) {
|
|
if (index2 === 0) {
|
|
joinsArray.push(sql` `);
|
|
}
|
|
const table = joinMeta.table;
|
|
const onSql = joinMeta.on ? sql` on ${joinMeta.on}` : void 0;
|
|
if (is(table, SQLiteTable)) {
|
|
const tableName = table[SQLiteTable.Symbol.Name];
|
|
const tableSchema = table[SQLiteTable.Symbol.Schema];
|
|
const origTableName = table[SQLiteTable.Symbol.OriginalName];
|
|
const alias = tableName === origTableName ? void 0 : joinMeta.alias;
|
|
joinsArray.push(
|
|
sql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : void 0}${sql.identifier(origTableName)}${alias && sql` ${sql.identifier(alias)}`}${onSql}`
|
|
);
|
|
} else {
|
|
joinsArray.push(
|
|
sql`${sql.raw(joinMeta.joinType)} join ${table}${onSql}`
|
|
);
|
|
}
|
|
if (index2 < joins.length - 1) {
|
|
joinsArray.push(sql` `);
|
|
}
|
|
}
|
|
}
|
|
return sql.join(joinsArray);
|
|
}
|
|
buildLimit(limit) {
|
|
return typeof limit === "object" || typeof limit === "number" && limit >= 0 ? sql` limit ${limit}` : void 0;
|
|
}
|
|
buildOrderBy(orderBy) {
|
|
const orderByList = [];
|
|
if (orderBy) {
|
|
for (const [index2, orderByValue] of orderBy.entries()) {
|
|
orderByList.push(orderByValue);
|
|
if (index2 < orderBy.length - 1) {
|
|
orderByList.push(sql`, `);
|
|
}
|
|
}
|
|
}
|
|
return orderByList.length > 0 ? sql` order by ${sql.join(orderByList)}` : void 0;
|
|
}
|
|
buildFromTable(table) {
|
|
if (is(table, Table) && table[Table.Symbol.IsAlias]) {
|
|
return sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? "")}.`.if(table[Table.Symbol.Schema])}${sql.identifier(table[Table.Symbol.OriginalName])} ${sql.identifier(table[Table.Symbol.Name])}`;
|
|
}
|
|
return table;
|
|
}
|
|
buildSelectQuery({
|
|
withList,
|
|
fields,
|
|
fieldsFlat,
|
|
where,
|
|
having,
|
|
table,
|
|
joins,
|
|
orderBy,
|
|
groupBy,
|
|
limit,
|
|
offset,
|
|
distinct,
|
|
setOperators
|
|
}) {
|
|
const fieldsList = fieldsFlat ?? orderSelectedFields(fields);
|
|
for (const f of fieldsList) {
|
|
if (is(f.field, Column) && getTableName(f.field.table) !== (is(table, Subquery) ? table._.alias : is(table, SQLiteViewBase) ? table[ViewBaseConfig].name : is(table, SQL) ? void 0 : getTableName(table)) && !((table2) => joins?.some(
|
|
({ alias }) => alias === (table2[Table.Symbol.IsAlias] ? getTableName(table2) : table2[Table.Symbol.BaseName])
|
|
))(f.field.table)) {
|
|
const tableName = getTableName(f.field.table);
|
|
throw new Error(
|
|
`Your "${f.path.join("->")}" field references a column "${tableName}"."${f.field.name}", but the table "${tableName}" is not part of the query! Did you forget to join it?`
|
|
);
|
|
}
|
|
}
|
|
const isSingleTable = !joins || joins.length === 0;
|
|
const withSql = this.buildWithCTE(withList);
|
|
const distinctSql = distinct ? sql` distinct` : void 0;
|
|
const selection = this.buildSelection(fieldsList, { isSingleTable });
|
|
const tableSql = this.buildFromTable(table);
|
|
const joinsSql = this.buildJoins(joins);
|
|
const whereSql = where ? sql` where ${where}` : void 0;
|
|
const havingSql = having ? sql` having ${having}` : void 0;
|
|
const groupByList = [];
|
|
if (groupBy) {
|
|
for (const [index2, groupByValue] of groupBy.entries()) {
|
|
groupByList.push(groupByValue);
|
|
if (index2 < groupBy.length - 1) {
|
|
groupByList.push(sql`, `);
|
|
}
|
|
}
|
|
}
|
|
const groupBySql = groupByList.length > 0 ? sql` group by ${sql.join(groupByList)}` : void 0;
|
|
const orderBySql = this.buildOrderBy(orderBy);
|
|
const limitSql = this.buildLimit(limit);
|
|
const offsetSql = offset ? sql` offset ${offset}` : void 0;
|
|
const finalQuery = sql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;
|
|
if (setOperators.length > 0) {
|
|
return this.buildSetOperations(finalQuery, setOperators);
|
|
}
|
|
return finalQuery;
|
|
}
|
|
buildSetOperations(leftSelect, setOperators) {
|
|
const [setOperator, ...rest] = setOperators;
|
|
if (!setOperator) {
|
|
throw new Error("Cannot pass undefined values to any set operator");
|
|
}
|
|
if (rest.length === 0) {
|
|
return this.buildSetOperationQuery({ leftSelect, setOperator });
|
|
}
|
|
return this.buildSetOperations(
|
|
this.buildSetOperationQuery({ leftSelect, setOperator }),
|
|
rest
|
|
);
|
|
}
|
|
buildSetOperationQuery({
|
|
leftSelect,
|
|
setOperator: { type, isAll, rightSelect, limit, orderBy, offset }
|
|
}) {
|
|
const leftChunk = sql`${leftSelect.getSQL()} `;
|
|
const rightChunk = sql`${rightSelect.getSQL()}`;
|
|
let orderBySql;
|
|
if (orderBy && orderBy.length > 0) {
|
|
const orderByValues = [];
|
|
for (const singleOrderBy of orderBy) {
|
|
if (is(singleOrderBy, SQLiteColumn)) {
|
|
orderByValues.push(sql.identifier(singleOrderBy.name));
|
|
} else if (is(singleOrderBy, SQL)) {
|
|
for (let i = 0; i < singleOrderBy.queryChunks.length; i++) {
|
|
const chunk = singleOrderBy.queryChunks[i];
|
|
if (is(chunk, SQLiteColumn)) {
|
|
singleOrderBy.queryChunks[i] = sql.identifier(this.casing.getColumnCasing(chunk));
|
|
}
|
|
}
|
|
orderByValues.push(sql`${singleOrderBy}`);
|
|
} else {
|
|
orderByValues.push(sql`${singleOrderBy}`);
|
|
}
|
|
}
|
|
orderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;
|
|
}
|
|
const limitSql = typeof limit === "object" || typeof limit === "number" && limit >= 0 ? sql` limit ${limit}` : void 0;
|
|
const operatorChunk = sql.raw(`${type} ${isAll ? "all " : ""}`);
|
|
const offsetSql = offset ? sql` offset ${offset}` : void 0;
|
|
return sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;
|
|
}
|
|
buildInsertQuery({ table, values: valuesOrSelect, onConflict, returning, withList, select }) {
|
|
const valuesSqlList = [];
|
|
const columns = table[Table.Symbol.Columns];
|
|
const colEntries = Object.entries(columns).filter(
|
|
([_, col]) => !col.shouldDisableInsert()
|
|
);
|
|
const insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));
|
|
if (select) {
|
|
const select2 = valuesOrSelect;
|
|
if (is(select2, SQL)) {
|
|
valuesSqlList.push(select2);
|
|
} else {
|
|
valuesSqlList.push(select2.getSQL());
|
|
}
|
|
} else {
|
|
const values = valuesOrSelect;
|
|
valuesSqlList.push(sql.raw("values "));
|
|
for (const [valueIndex, value2] of values.entries()) {
|
|
const valueList = [];
|
|
for (const [fieldName, col] of colEntries) {
|
|
const colValue = value2[fieldName];
|
|
if (colValue === void 0 || is(colValue, Param) && colValue.value === void 0) {
|
|
let defaultValue;
|
|
if (col.default !== null && col.default !== void 0) {
|
|
defaultValue = is(col.default, SQL) ? col.default : sql.param(col.default, col);
|
|
} else if (col.defaultFn !== void 0) {
|
|
const defaultFnResult = col.defaultFn();
|
|
defaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);
|
|
} else if (!col.default && col.onUpdateFn !== void 0) {
|
|
const onUpdateFnResult = col.onUpdateFn();
|
|
defaultValue = is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col);
|
|
} else {
|
|
defaultValue = sql`null`;
|
|
}
|
|
valueList.push(defaultValue);
|
|
} else {
|
|
valueList.push(colValue);
|
|
}
|
|
}
|
|
valuesSqlList.push(valueList);
|
|
if (valueIndex < values.length - 1) {
|
|
valuesSqlList.push(sql`, `);
|
|
}
|
|
}
|
|
}
|
|
const withSql = this.buildWithCTE(withList);
|
|
const valuesSql = sql.join(valuesSqlList);
|
|
const returningSql = returning ? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}` : void 0;
|
|
const onConflictSql = onConflict?.length ? sql.join(onConflict) : void 0;
|
|
return sql`${withSql}insert into ${table} ${insertOrder} ${valuesSql}${onConflictSql}${returningSql}`;
|
|
}
|
|
sqlToQuery(sql2, invokeSource) {
|
|
return sql2.toQuery({
|
|
casing: this.casing,
|
|
escapeName: this.escapeName,
|
|
escapeParam: this.escapeParam,
|
|
escapeString: this.escapeString,
|
|
invokeSource
|
|
});
|
|
}
|
|
buildRelationalQuery({
|
|
fullSchema,
|
|
schema,
|
|
tableNamesMap,
|
|
table,
|
|
tableConfig,
|
|
queryConfig: config2,
|
|
tableAlias,
|
|
nestedQueryRelation,
|
|
joinOn
|
|
}) {
|
|
let selection = [];
|
|
let limit, offset, orderBy = [], where;
|
|
const joins = [];
|
|
if (config2 === true) {
|
|
const selectionEntries = Object.entries(tableConfig.columns);
|
|
selection = selectionEntries.map(([key, value2]) => ({
|
|
dbKey: value2.name,
|
|
tsKey: key,
|
|
field: aliasedTableColumn(value2, tableAlias),
|
|
relationTableTsKey: void 0,
|
|
isJson: false,
|
|
selection: []
|
|
}));
|
|
} else {
|
|
const aliasedColumns = Object.fromEntries(
|
|
Object.entries(tableConfig.columns).map(([key, value2]) => [key, aliasedTableColumn(value2, tableAlias)])
|
|
);
|
|
if (config2.where) {
|
|
const whereSql = typeof config2.where === "function" ? config2.where(aliasedColumns, getOperators()) : config2.where;
|
|
where = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);
|
|
}
|
|
const fieldsSelection = [];
|
|
let selectedColumns = [];
|
|
if (config2.columns) {
|
|
let isIncludeMode = false;
|
|
for (const [field, value2] of Object.entries(config2.columns)) {
|
|
if (value2 === void 0) {
|
|
continue;
|
|
}
|
|
if (field in tableConfig.columns) {
|
|
if (!isIncludeMode && value2 === true) {
|
|
isIncludeMode = true;
|
|
}
|
|
selectedColumns.push(field);
|
|
}
|
|
}
|
|
if (selectedColumns.length > 0) {
|
|
selectedColumns = isIncludeMode ? selectedColumns.filter((c) => config2.columns?.[c] === true) : Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));
|
|
}
|
|
} else {
|
|
selectedColumns = Object.keys(tableConfig.columns);
|
|
}
|
|
for (const field of selectedColumns) {
|
|
const column = tableConfig.columns[field];
|
|
fieldsSelection.push({ tsKey: field, value: column });
|
|
}
|
|
let selectedRelations = [];
|
|
if (config2.with) {
|
|
selectedRelations = Object.entries(config2.with).filter((entry) => !!entry[1]).map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey] }));
|
|
}
|
|
let extras;
|
|
if (config2.extras) {
|
|
extras = typeof config2.extras === "function" ? config2.extras(aliasedColumns, { sql }) : config2.extras;
|
|
for (const [tsKey, value2] of Object.entries(extras)) {
|
|
fieldsSelection.push({
|
|
tsKey,
|
|
value: mapColumnsInAliasedSQLToAlias(value2, tableAlias)
|
|
});
|
|
}
|
|
}
|
|
for (const { tsKey, value: value2 } of fieldsSelection) {
|
|
selection.push({
|
|
dbKey: is(value2, SQL.Aliased) ? value2.fieldAlias : tableConfig.columns[tsKey].name,
|
|
tsKey,
|
|
field: is(value2, Column) ? aliasedTableColumn(value2, tableAlias) : value2,
|
|
relationTableTsKey: void 0,
|
|
isJson: false,
|
|
selection: []
|
|
});
|
|
}
|
|
let orderByOrig = typeof config2.orderBy === "function" ? config2.orderBy(aliasedColumns, getOrderByOperators()) : config2.orderBy ?? [];
|
|
if (!Array.isArray(orderByOrig)) {
|
|
orderByOrig = [orderByOrig];
|
|
}
|
|
orderBy = orderByOrig.map((orderByValue) => {
|
|
if (is(orderByValue, Column)) {
|
|
return aliasedTableColumn(orderByValue, tableAlias);
|
|
}
|
|
return mapColumnsInSQLToAlias(orderByValue, tableAlias);
|
|
});
|
|
limit = config2.limit;
|
|
offset = config2.offset;
|
|
for (const {
|
|
tsKey: selectedRelationTsKey,
|
|
queryConfig: selectedRelationConfigValue,
|
|
relation
|
|
} of selectedRelations) {
|
|
const normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);
|
|
const relationTableName = getTableUniqueName(relation.referencedTable);
|
|
const relationTableTsName = tableNamesMap[relationTableName];
|
|
const relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;
|
|
const joinOn2 = and(
|
|
...normalizedRelation.fields.map(
|
|
(field2, i) => eq(
|
|
aliasedTableColumn(normalizedRelation.references[i], relationTableAlias),
|
|
aliasedTableColumn(field2, tableAlias)
|
|
)
|
|
)
|
|
);
|
|
const builtRelation = this.buildRelationalQuery({
|
|
fullSchema,
|
|
schema,
|
|
tableNamesMap,
|
|
table: fullSchema[relationTableTsName],
|
|
tableConfig: schema[relationTableTsName],
|
|
queryConfig: is(relation, One) ? selectedRelationConfigValue === true ? { limit: 1 } : { ...selectedRelationConfigValue, limit: 1 } : selectedRelationConfigValue,
|
|
tableAlias: relationTableAlias,
|
|
joinOn: joinOn2,
|
|
nestedQueryRelation: relation
|
|
});
|
|
const field = sql`(${builtRelation.sql})`.as(selectedRelationTsKey);
|
|
selection.push({
|
|
dbKey: selectedRelationTsKey,
|
|
tsKey: selectedRelationTsKey,
|
|
field,
|
|
relationTableTsKey: relationTableTsName,
|
|
isJson: true,
|
|
selection: builtRelation.selection
|
|
});
|
|
}
|
|
}
|
|
if (selection.length === 0) {
|
|
throw new DrizzleError({
|
|
message: `No fields selected for table "${tableConfig.tsName}" ("${tableAlias}"). You need to have at least one item in "columns", "with" or "extras". If you need to select all columns, omit the "columns" key or set it to undefined.`
|
|
});
|
|
}
|
|
let result;
|
|
where = and(joinOn, where);
|
|
if (nestedQueryRelation) {
|
|
let field = sql`json_array(${sql.join(
|
|
selection.map(
|
|
({ field: field2 }) => is(field2, SQLiteColumn) ? sql.identifier(this.casing.getColumnCasing(field2)) : is(field2, SQL.Aliased) ? field2.sql : field2
|
|
),
|
|
sql`, `
|
|
)})`;
|
|
if (is(nestedQueryRelation, Many)) {
|
|
field = sql`coalesce(json_group_array(${field}), json_array())`;
|
|
}
|
|
const nestedSelection = [{
|
|
dbKey: "data",
|
|
tsKey: "data",
|
|
field: field.as("data"),
|
|
isJson: true,
|
|
relationTableTsKey: tableConfig.tsName,
|
|
selection
|
|
}];
|
|
const needsSubquery = limit !== void 0 || offset !== void 0 || orderBy.length > 0;
|
|
if (needsSubquery) {
|
|
result = this.buildSelectQuery({
|
|
table: aliasedTable(table, tableAlias),
|
|
fields: {},
|
|
fieldsFlat: [
|
|
{
|
|
path: [],
|
|
field: sql.raw("*")
|
|
}
|
|
],
|
|
where,
|
|
limit,
|
|
offset,
|
|
orderBy,
|
|
setOperators: []
|
|
});
|
|
where = void 0;
|
|
limit = void 0;
|
|
offset = void 0;
|
|
orderBy = void 0;
|
|
} else {
|
|
result = aliasedTable(table, tableAlias);
|
|
}
|
|
result = this.buildSelectQuery({
|
|
table: is(result, SQLiteTable) ? result : new Subquery(result, {}, tableAlias),
|
|
fields: {},
|
|
fieldsFlat: nestedSelection.map(({ field: field2 }) => ({
|
|
path: [],
|
|
field: is(field2, Column) ? aliasedTableColumn(field2, tableAlias) : field2
|
|
})),
|
|
joins,
|
|
where,
|
|
limit,
|
|
offset,
|
|
orderBy,
|
|
setOperators: []
|
|
});
|
|
} else {
|
|
result = this.buildSelectQuery({
|
|
table: aliasedTable(table, tableAlias),
|
|
fields: {},
|
|
fieldsFlat: selection.map(({ field }) => ({
|
|
path: [],
|
|
field: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field
|
|
})),
|
|
joins,
|
|
where,
|
|
limit,
|
|
offset,
|
|
orderBy,
|
|
setOperators: []
|
|
});
|
|
}
|
|
return {
|
|
tableTsKey: tableConfig.tsName,
|
|
sql: result,
|
|
selection
|
|
};
|
|
}
|
|
};
|
|
SQLiteSyncDialect = class extends SQLiteDialect {
|
|
static [entityKind] = "SQLiteSyncDialect";
|
|
migrate(migrations, session, config2) {
|
|
const migrationsTable = config2 === void 0 ? "__drizzle_migrations" : typeof config2 === "string" ? "__drizzle_migrations" : config2.migrationsTable ?? "__drizzle_migrations";
|
|
const migrationTableCreate = sql`
|
|
CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (
|
|
id SERIAL PRIMARY KEY,
|
|
hash text NOT NULL,
|
|
created_at numeric
|
|
)
|
|
`;
|
|
session.run(migrationTableCreate);
|
|
const dbMigrations = session.values(
|
|
sql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`
|
|
);
|
|
const lastDbMigration = dbMigrations[0] ?? void 0;
|
|
session.run(sql`BEGIN`);
|
|
try {
|
|
for (const migration of migrations) {
|
|
if (!lastDbMigration || Number(lastDbMigration[2]) < migration.folderMillis) {
|
|
for (const stmt of migration.sql) {
|
|
session.run(sql.raw(stmt));
|
|
}
|
|
session.run(
|
|
sql`INSERT INTO ${sql.identifier(migrationsTable)} ("hash", "created_at") VALUES(${migration.hash}, ${migration.folderMillis})`
|
|
);
|
|
}
|
|
}
|
|
session.run(sql`COMMIT`);
|
|
} catch (e) {
|
|
session.run(sql`ROLLBACK`);
|
|
throw e;
|
|
}
|
|
}
|
|
};
|
|
SQLiteAsyncDialect = class extends SQLiteDialect {
|
|
static [entityKind] = "SQLiteAsyncDialect";
|
|
async migrate(migrations, session, config2) {
|
|
const migrationsTable = config2 === void 0 ? "__drizzle_migrations" : typeof config2 === "string" ? "__drizzle_migrations" : config2.migrationsTable ?? "__drizzle_migrations";
|
|
const migrationTableCreate = sql`
|
|
CREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (
|
|
id SERIAL PRIMARY KEY,
|
|
hash text NOT NULL,
|
|
created_at numeric
|
|
)
|
|
`;
|
|
await session.run(migrationTableCreate);
|
|
const dbMigrations = await session.values(
|
|
sql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`
|
|
);
|
|
const lastDbMigration = dbMigrations[0] ?? void 0;
|
|
await session.transaction(async (tx) => {
|
|
for (const migration of migrations) {
|
|
if (!lastDbMigration || Number(lastDbMigration[2]) < migration.folderMillis) {
|
|
for (const stmt of migration.sql) {
|
|
await tx.run(sql.raw(stmt));
|
|
}
|
|
await tx.run(
|
|
sql`INSERT INTO ${sql.identifier(migrationsTable)} ("hash", "created_at") VALUES(${migration.hash}, ${migration.folderMillis})`
|
|
);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/query-builders/query-builder.js
|
|
var TypedQueryBuilder;
|
|
var init_query_builder = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/query-builders/query-builder.js"() {
|
|
init_entity();
|
|
TypedQueryBuilder = class {
|
|
static [entityKind] = "TypedQueryBuilder";
|
|
/** @internal */
|
|
getSelectedFields() {
|
|
return this._.selectedFields;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/select.js
|
|
function createSetOperator(type, isAll) {
|
|
return (leftSelect, rightSelect, ...restSelects) => {
|
|
const setOperators = [rightSelect, ...restSelects].map((select) => ({
|
|
type,
|
|
isAll,
|
|
rightSelect: select
|
|
}));
|
|
for (const setOperator of setOperators) {
|
|
if (!haveSameKeys(leftSelect.getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {
|
|
throw new Error(
|
|
"Set operator error (union / intersect / except): selected fields are not the same or are in a different order"
|
|
);
|
|
}
|
|
}
|
|
return leftSelect.addSetOperators(setOperators);
|
|
};
|
|
}
|
|
var SQLiteSelectBuilder, SQLiteSelectQueryBuilderBase, SQLiteSelectBase, getSQLiteSetOperators, union2, unionAll, intersect, except;
|
|
var init_select2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/select.js"() {
|
|
init_entity();
|
|
init_query_builder();
|
|
init_query_promise();
|
|
init_selection_proxy();
|
|
init_sql();
|
|
init_subquery();
|
|
init_table();
|
|
init_utils();
|
|
init_view_common();
|
|
init_utils2();
|
|
init_view_base();
|
|
SQLiteSelectBuilder = class {
|
|
static [entityKind] = "SQLiteSelectBuilder";
|
|
fields;
|
|
session;
|
|
dialect;
|
|
withList;
|
|
distinct;
|
|
constructor(config2) {
|
|
this.fields = config2.fields;
|
|
this.session = config2.session;
|
|
this.dialect = config2.dialect;
|
|
this.withList = config2.withList;
|
|
this.distinct = config2.distinct;
|
|
}
|
|
from(source) {
|
|
const isPartialSelect = !!this.fields;
|
|
let fields;
|
|
if (this.fields) {
|
|
fields = this.fields;
|
|
} else if (is(source, Subquery)) {
|
|
fields = Object.fromEntries(
|
|
Object.keys(source._.selectedFields).map((key) => [key, source[key]])
|
|
);
|
|
} else if (is(source, SQLiteViewBase)) {
|
|
fields = source[ViewBaseConfig].selectedFields;
|
|
} else if (is(source, SQL)) {
|
|
fields = {};
|
|
} else {
|
|
fields = getTableColumns(source);
|
|
}
|
|
return new SQLiteSelectBase({
|
|
table: source,
|
|
fields,
|
|
isPartialSelect,
|
|
session: this.session,
|
|
dialect: this.dialect,
|
|
withList: this.withList,
|
|
distinct: this.distinct
|
|
});
|
|
}
|
|
};
|
|
SQLiteSelectQueryBuilderBase = class extends TypedQueryBuilder {
|
|
static [entityKind] = "SQLiteSelectQueryBuilder";
|
|
_;
|
|
/** @internal */
|
|
config;
|
|
joinsNotNullableMap;
|
|
tableName;
|
|
isPartialSelect;
|
|
session;
|
|
dialect;
|
|
cacheConfig = void 0;
|
|
usedTables = /* @__PURE__ */ new Set();
|
|
constructor({ table, fields, isPartialSelect, session, dialect, withList, distinct }) {
|
|
super();
|
|
this.config = {
|
|
withList,
|
|
table,
|
|
fields: { ...fields },
|
|
distinct,
|
|
setOperators: []
|
|
};
|
|
this.isPartialSelect = isPartialSelect;
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this._ = {
|
|
selectedFields: fields,
|
|
config: this.config
|
|
};
|
|
this.tableName = getTableLikeName(table);
|
|
this.joinsNotNullableMap = typeof this.tableName === "string" ? { [this.tableName]: true } : {};
|
|
for (const item of extractUsedTable(table)) this.usedTables.add(item);
|
|
}
|
|
/** @internal */
|
|
getUsedTables() {
|
|
return [...this.usedTables];
|
|
}
|
|
createJoin(joinType) {
|
|
return (table, on) => {
|
|
const baseTableName = this.tableName;
|
|
const tableName = getTableLikeName(table);
|
|
for (const item of extractUsedTable(table)) this.usedTables.add(item);
|
|
if (typeof tableName === "string" && this.config.joins?.some((join4) => join4.alias === tableName)) {
|
|
throw new Error(`Alias "${tableName}" is already used in this query`);
|
|
}
|
|
if (!this.isPartialSelect) {
|
|
if (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === "string") {
|
|
this.config.fields = {
|
|
[baseTableName]: this.config.fields
|
|
};
|
|
}
|
|
if (typeof tableName === "string" && !is(table, SQL)) {
|
|
const selection = is(table, Subquery) ? table._.selectedFields : is(table, View) ? table[ViewBaseConfig].selectedFields : table[Table.Symbol.Columns];
|
|
this.config.fields[tableName] = selection;
|
|
}
|
|
}
|
|
if (typeof on === "function") {
|
|
on = on(
|
|
new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "sql", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
}
|
|
if (!this.config.joins) {
|
|
this.config.joins = [];
|
|
}
|
|
this.config.joins.push({ on, table, joinType, alias: tableName });
|
|
if (typeof tableName === "string") {
|
|
switch (joinType) {
|
|
case "left": {
|
|
this.joinsNotNullableMap[tableName] = false;
|
|
break;
|
|
}
|
|
case "right": {
|
|
this.joinsNotNullableMap = Object.fromEntries(
|
|
Object.entries(this.joinsNotNullableMap).map(([key]) => [key, false])
|
|
);
|
|
this.joinsNotNullableMap[tableName] = true;
|
|
break;
|
|
}
|
|
case "cross":
|
|
case "inner": {
|
|
this.joinsNotNullableMap[tableName] = true;
|
|
break;
|
|
}
|
|
case "full": {
|
|
this.joinsNotNullableMap = Object.fromEntries(
|
|
Object.entries(this.joinsNotNullableMap).map(([key]) => [key, false])
|
|
);
|
|
this.joinsNotNullableMap[tableName] = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
}
|
|
/**
|
|
* Executes a `left join` operation by adding another table to the current query.
|
|
*
|
|
* Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/joins#left-join}
|
|
*
|
|
* @param table the table to join.
|
|
* @param on the `on` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all users and their pets
|
|
* const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()
|
|
* .from(users)
|
|
* .leftJoin(pets, eq(users.id, pets.ownerId))
|
|
*
|
|
* // Select userId and petId
|
|
* const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({
|
|
* userId: users.id,
|
|
* petId: pets.id,
|
|
* })
|
|
* .from(users)
|
|
* .leftJoin(pets, eq(users.id, pets.ownerId))
|
|
* ```
|
|
*/
|
|
leftJoin = this.createJoin("left");
|
|
/**
|
|
* Executes a `right join` operation by adding another table to the current query.
|
|
*
|
|
* Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/joins#right-join}
|
|
*
|
|
* @param table the table to join.
|
|
* @param on the `on` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all users and their pets
|
|
* const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()
|
|
* .from(users)
|
|
* .rightJoin(pets, eq(users.id, pets.ownerId))
|
|
*
|
|
* // Select userId and petId
|
|
* const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({
|
|
* userId: users.id,
|
|
* petId: pets.id,
|
|
* })
|
|
* .from(users)
|
|
* .rightJoin(pets, eq(users.id, pets.ownerId))
|
|
* ```
|
|
*/
|
|
rightJoin = this.createJoin("right");
|
|
/**
|
|
* Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.
|
|
*
|
|
* Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}
|
|
*
|
|
* @param table the table to join.
|
|
* @param on the `on` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all users and their pets
|
|
* const usersWithPets: { user: User; pets: Pet; }[] = await db.select()
|
|
* .from(users)
|
|
* .innerJoin(pets, eq(users.id, pets.ownerId))
|
|
*
|
|
* // Select userId and petId
|
|
* const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({
|
|
* userId: users.id,
|
|
* petId: pets.id,
|
|
* })
|
|
* .from(users)
|
|
* .innerJoin(pets, eq(users.id, pets.ownerId))
|
|
* ```
|
|
*/
|
|
innerJoin = this.createJoin("inner");
|
|
/**
|
|
* Executes a `full join` operation by combining rows from two tables into a new table.
|
|
*
|
|
* Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/joins#full-join}
|
|
*
|
|
* @param table the table to join.
|
|
* @param on the `on` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all users and their pets
|
|
* const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()
|
|
* .from(users)
|
|
* .fullJoin(pets, eq(users.id, pets.ownerId))
|
|
*
|
|
* // Select userId and petId
|
|
* const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({
|
|
* userId: users.id,
|
|
* petId: pets.id,
|
|
* })
|
|
* .from(users)
|
|
* .fullJoin(pets, eq(users.id, pets.ownerId))
|
|
* ```
|
|
*/
|
|
fullJoin = this.createJoin("full");
|
|
/**
|
|
* Executes a `cross join` operation by combining rows from two tables into a new table.
|
|
*
|
|
* Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}
|
|
*
|
|
* @param table the table to join.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all users, each user with every pet
|
|
* const usersWithPets: { user: User; pets: Pet; }[] = await db.select()
|
|
* .from(users)
|
|
* .crossJoin(pets)
|
|
*
|
|
* // Select userId and petId
|
|
* const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({
|
|
* userId: users.id,
|
|
* petId: pets.id,
|
|
* })
|
|
* .from(users)
|
|
* .crossJoin(pets)
|
|
* ```
|
|
*/
|
|
crossJoin = this.createJoin("cross");
|
|
createSetOperator(type, isAll) {
|
|
return (rightSelection) => {
|
|
const rightSelect = typeof rightSelection === "function" ? rightSelection(getSQLiteSetOperators()) : rightSelection;
|
|
if (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {
|
|
throw new Error(
|
|
"Set operator error (union / intersect / except): selected fields are not the same or are in a different order"
|
|
);
|
|
}
|
|
this.config.setOperators.push({ type, isAll, rightSelect });
|
|
return this;
|
|
};
|
|
}
|
|
/**
|
|
* Adds `union` set operator to the query.
|
|
*
|
|
* Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/set-operations#union}
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all unique names from customers and users tables
|
|
* await db.select({ name: users.name })
|
|
* .from(users)
|
|
* .union(
|
|
* db.select({ name: customers.name }).from(customers)
|
|
* );
|
|
* // or
|
|
* import { union } from 'drizzle-orm/sqlite-core'
|
|
*
|
|
* await union(
|
|
* db.select({ name: users.name }).from(users),
|
|
* db.select({ name: customers.name }).from(customers)
|
|
* );
|
|
* ```
|
|
*/
|
|
union = this.createSetOperator("union", false);
|
|
/**
|
|
* Adds `union all` set operator to the query.
|
|
*
|
|
* Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all transaction ids from both online and in-store sales
|
|
* await db.select({ transaction: onlineSales.transactionId })
|
|
* .from(onlineSales)
|
|
* .unionAll(
|
|
* db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)
|
|
* );
|
|
* // or
|
|
* import { unionAll } from 'drizzle-orm/sqlite-core'
|
|
*
|
|
* await unionAll(
|
|
* db.select({ transaction: onlineSales.transactionId }).from(onlineSales),
|
|
* db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)
|
|
* );
|
|
* ```
|
|
*/
|
|
unionAll = this.createSetOperator("union", true);
|
|
/**
|
|
* Adds `intersect` set operator to the query.
|
|
*
|
|
* Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select course names that are offered in both departments A and B
|
|
* await db.select({ courseName: depA.courseName })
|
|
* .from(depA)
|
|
* .intersect(
|
|
* db.select({ courseName: depB.courseName }).from(depB)
|
|
* );
|
|
* // or
|
|
* import { intersect } from 'drizzle-orm/sqlite-core'
|
|
*
|
|
* await intersect(
|
|
* db.select({ courseName: depA.courseName }).from(depA),
|
|
* db.select({ courseName: depB.courseName }).from(depB)
|
|
* );
|
|
* ```
|
|
*/
|
|
intersect = this.createSetOperator("intersect", false);
|
|
/**
|
|
* Adds `except` set operator to the query.
|
|
*
|
|
* Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/set-operations#except}
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all courses offered in department A but not in department B
|
|
* await db.select({ courseName: depA.courseName })
|
|
* .from(depA)
|
|
* .except(
|
|
* db.select({ courseName: depB.courseName }).from(depB)
|
|
* );
|
|
* // or
|
|
* import { except } from 'drizzle-orm/sqlite-core'
|
|
*
|
|
* await except(
|
|
* db.select({ courseName: depA.courseName }).from(depA),
|
|
* db.select({ courseName: depB.courseName }).from(depB)
|
|
* );
|
|
* ```
|
|
*/
|
|
except = this.createSetOperator("except", false);
|
|
/** @internal */
|
|
addSetOperators(setOperators) {
|
|
this.config.setOperators.push(...setOperators);
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a `where` clause to the query.
|
|
*
|
|
* Calling this method will select only those rows that fulfill a specified condition.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#filtering}
|
|
*
|
|
* @param where the `where` clause.
|
|
*
|
|
* @example
|
|
* You can use conditional operators and `sql function` to filter the rows to be selected.
|
|
*
|
|
* ```ts
|
|
* // Select all cars with green color
|
|
* await db.select().from(cars).where(eq(cars.color, 'green'));
|
|
* // or
|
|
* await db.select().from(cars).where(sql`${cars.color} = 'green'`)
|
|
* ```
|
|
*
|
|
* You can logically combine conditional operators with `and()` and `or()` operators:
|
|
*
|
|
* ```ts
|
|
* // Select all BMW cars with a green color
|
|
* await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));
|
|
*
|
|
* // Select all cars with the green or blue color
|
|
* await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));
|
|
* ```
|
|
*/
|
|
where(where) {
|
|
if (typeof where === "function") {
|
|
where = where(
|
|
new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "sql", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
}
|
|
this.config.where = where;
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a `having` clause to the query.
|
|
*
|
|
* Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#aggregations}
|
|
*
|
|
* @param having the `having` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Select all brands with more than one car
|
|
* await db.select({
|
|
* brand: cars.brand,
|
|
* count: sql<number>`cast(count(${cars.id}) as int)`,
|
|
* })
|
|
* .from(cars)
|
|
* .groupBy(cars.brand)
|
|
* .having(({ count }) => gt(count, 1));
|
|
* ```
|
|
*/
|
|
having(having) {
|
|
if (typeof having === "function") {
|
|
having = having(
|
|
new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "sql", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
}
|
|
this.config.having = having;
|
|
return this;
|
|
}
|
|
groupBy(...columns) {
|
|
if (typeof columns[0] === "function") {
|
|
const groupBy = columns[0](
|
|
new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "alias", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
this.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];
|
|
} else {
|
|
this.config.groupBy = columns;
|
|
}
|
|
return this;
|
|
}
|
|
orderBy(...columns) {
|
|
if (typeof columns[0] === "function") {
|
|
const orderBy = columns[0](
|
|
new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "alias", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
const orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];
|
|
if (this.config.setOperators.length > 0) {
|
|
this.config.setOperators.at(-1).orderBy = orderByArray;
|
|
} else {
|
|
this.config.orderBy = orderByArray;
|
|
}
|
|
} else {
|
|
const orderByArray = columns;
|
|
if (this.config.setOperators.length > 0) {
|
|
this.config.setOperators.at(-1).orderBy = orderByArray;
|
|
} else {
|
|
this.config.orderBy = orderByArray;
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds a `limit` clause to the query.
|
|
*
|
|
* Calling this method will set the maximum number of rows that will be returned by this query.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}
|
|
*
|
|
* @param limit the `limit` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Get the first 10 people from this query.
|
|
* await db.select().from(people).limit(10);
|
|
* ```
|
|
*/
|
|
limit(limit) {
|
|
if (this.config.setOperators.length > 0) {
|
|
this.config.setOperators.at(-1).limit = limit;
|
|
} else {
|
|
this.config.limit = limit;
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds an `offset` clause to the query.
|
|
*
|
|
* Calling this method will skip a number of rows when returning results from this query.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}
|
|
*
|
|
* @param offset the `offset` clause.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Get the 10th-20th people from this query.
|
|
* await db.select().from(people).offset(10).limit(10);
|
|
* ```
|
|
*/
|
|
offset(offset) {
|
|
if (this.config.setOperators.length > 0) {
|
|
this.config.setOperators.at(-1).offset = offset;
|
|
} else {
|
|
this.config.offset = offset;
|
|
}
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
getSQL() {
|
|
return this.dialect.buildSelectQuery(this.config);
|
|
}
|
|
toSQL() {
|
|
const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
|
|
return rest;
|
|
}
|
|
as(alias) {
|
|
const usedTables = [];
|
|
usedTables.push(...extractUsedTable(this.config.table));
|
|
if (this.config.joins) {
|
|
for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table));
|
|
}
|
|
return new Proxy(
|
|
new Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),
|
|
new SelectionProxyHandler({ alias, sqlAliasedBehavior: "alias", sqlBehavior: "error" })
|
|
);
|
|
}
|
|
/** @internal */
|
|
getSelectedFields() {
|
|
return new Proxy(
|
|
this.config.fields,
|
|
new SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: "alias", sqlBehavior: "error" })
|
|
);
|
|
}
|
|
$dynamic() {
|
|
return this;
|
|
}
|
|
};
|
|
SQLiteSelectBase = class extends SQLiteSelectQueryBuilderBase {
|
|
static [entityKind] = "SQLiteSelect";
|
|
/** @internal */
|
|
_prepare(isOneTimeQuery = true) {
|
|
if (!this.session) {
|
|
throw new Error("Cannot execute a query on a query builder. Please use a database instance instead.");
|
|
}
|
|
const fieldsList = orderSelectedFields(this.config.fields);
|
|
const query = this.session[isOneTimeQuery ? "prepareOneTimeQuery" : "prepareQuery"](
|
|
this.dialect.sqlToQuery(this.getSQL()),
|
|
fieldsList,
|
|
"all",
|
|
true,
|
|
void 0,
|
|
{
|
|
type: "select",
|
|
tables: [...this.usedTables]
|
|
},
|
|
this.cacheConfig
|
|
);
|
|
query.joinsNotNullableMap = this.joinsNotNullableMap;
|
|
return query;
|
|
}
|
|
$withCache(config2) {
|
|
this.cacheConfig = config2 === void 0 ? { config: {}, enable: true, autoInvalidate: true } : config2 === false ? { enable: false } : { enable: true, autoInvalidate: true, ...config2 };
|
|
return this;
|
|
}
|
|
prepare() {
|
|
return this._prepare(false);
|
|
}
|
|
run = (placeholderValues) => {
|
|
return this._prepare().run(placeholderValues);
|
|
};
|
|
all = (placeholderValues) => {
|
|
return this._prepare().all(placeholderValues);
|
|
};
|
|
get = (placeholderValues) => {
|
|
return this._prepare().get(placeholderValues);
|
|
};
|
|
values = (placeholderValues) => {
|
|
return this._prepare().values(placeholderValues);
|
|
};
|
|
async execute() {
|
|
return this.all();
|
|
}
|
|
};
|
|
applyMixins(SQLiteSelectBase, [QueryPromise]);
|
|
getSQLiteSetOperators = () => ({
|
|
union: union2,
|
|
unionAll,
|
|
intersect,
|
|
except
|
|
});
|
|
union2 = createSetOperator("union", false);
|
|
unionAll = createSetOperator("union", true);
|
|
intersect = createSetOperator("intersect", false);
|
|
except = createSetOperator("except", false);
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js
|
|
var QueryBuilder;
|
|
var init_query_builder2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js"() {
|
|
init_entity();
|
|
init_selection_proxy();
|
|
init_dialect();
|
|
init_subquery();
|
|
init_select2();
|
|
QueryBuilder = class {
|
|
static [entityKind] = "SQLiteQueryBuilder";
|
|
dialect;
|
|
dialectConfig;
|
|
constructor(dialect) {
|
|
this.dialect = is(dialect, SQLiteDialect) ? dialect : void 0;
|
|
this.dialectConfig = is(dialect, SQLiteDialect) ? void 0 : dialect;
|
|
}
|
|
$with = (alias, selection) => {
|
|
const queryBuilder = this;
|
|
const as = (qb) => {
|
|
if (typeof qb === "function") {
|
|
qb = qb(queryBuilder);
|
|
}
|
|
return new Proxy(
|
|
new WithSubquery(
|
|
qb.getSQL(),
|
|
selection ?? ("getSelectedFields" in qb ? qb.getSelectedFields() ?? {} : {}),
|
|
alias,
|
|
true
|
|
),
|
|
new SelectionProxyHandler({ alias, sqlAliasedBehavior: "alias", sqlBehavior: "error" })
|
|
);
|
|
};
|
|
return { as };
|
|
};
|
|
with(...queries) {
|
|
const self = this;
|
|
function select(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: void 0,
|
|
dialect: self.getDialect(),
|
|
withList: queries
|
|
});
|
|
}
|
|
function selectDistinct(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: void 0,
|
|
dialect: self.getDialect(),
|
|
withList: queries,
|
|
distinct: true
|
|
});
|
|
}
|
|
return { select, selectDistinct };
|
|
}
|
|
select(fields) {
|
|
return new SQLiteSelectBuilder({ fields: fields ?? void 0, session: void 0, dialect: this.getDialect() });
|
|
}
|
|
selectDistinct(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: void 0,
|
|
dialect: this.getDialect(),
|
|
distinct: true
|
|
});
|
|
}
|
|
// Lazy load dialect to avoid circular dependency
|
|
getDialect() {
|
|
if (!this.dialect) {
|
|
this.dialect = new SQLiteSyncDialect(this.dialectConfig);
|
|
}
|
|
return this.dialect;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js
|
|
var SQLiteInsertBuilder, SQLiteInsertBase;
|
|
var init_insert = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js"() {
|
|
init_entity();
|
|
init_query_promise();
|
|
init_sql();
|
|
init_table2();
|
|
init_table();
|
|
init_utils();
|
|
init_utils2();
|
|
init_query_builder2();
|
|
SQLiteInsertBuilder = class {
|
|
constructor(table, session, dialect, withList) {
|
|
this.table = table;
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this.withList = withList;
|
|
}
|
|
static [entityKind] = "SQLiteInsertBuilder";
|
|
values(values) {
|
|
values = Array.isArray(values) ? values : [values];
|
|
if (values.length === 0) {
|
|
throw new Error("values() must be called with at least one value");
|
|
}
|
|
const mappedValues = values.map((entry) => {
|
|
const result = {};
|
|
const cols = this.table[Table.Symbol.Columns];
|
|
for (const colKey of Object.keys(entry)) {
|
|
const colValue = entry[colKey];
|
|
result[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);
|
|
}
|
|
return result;
|
|
});
|
|
return new SQLiteInsertBase(this.table, mappedValues, this.session, this.dialect, this.withList);
|
|
}
|
|
select(selectQuery) {
|
|
const select = typeof selectQuery === "function" ? selectQuery(new QueryBuilder()) : selectQuery;
|
|
if (!is(select, SQL) && !haveSameKeys(this.table[Columns], select._.selectedFields)) {
|
|
throw new Error(
|
|
"Insert select error: selected fields are not the same or are in a different order compared to the table definition"
|
|
);
|
|
}
|
|
return new SQLiteInsertBase(this.table, select, this.session, this.dialect, this.withList, true);
|
|
}
|
|
};
|
|
SQLiteInsertBase = class extends QueryPromise {
|
|
constructor(table, values, session, dialect, withList, select) {
|
|
super();
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this.config = { table, values, withList, select };
|
|
}
|
|
static [entityKind] = "SQLiteInsert";
|
|
/** @internal */
|
|
config;
|
|
returning(fields = this.config.table[SQLiteTable.Symbol.Columns]) {
|
|
this.config.returning = orderSelectedFields(fields);
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds an `on conflict do nothing` clause to the query.
|
|
*
|
|
* Calling this method simply avoids inserting a row as its alternative action.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}
|
|
*
|
|
* @param config The `target` and `where` clauses.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* // Insert one row and cancel the insert if there's a conflict
|
|
* await db.insert(cars)
|
|
* .values({ id: 1, brand: 'BMW' })
|
|
* .onConflictDoNothing();
|
|
*
|
|
* // Explicitly specify conflict target
|
|
* await db.insert(cars)
|
|
* .values({ id: 1, brand: 'BMW' })
|
|
* .onConflictDoNothing({ target: cars.id });
|
|
* ```
|
|
*/
|
|
onConflictDoNothing(config2 = {}) {
|
|
if (!this.config.onConflict) this.config.onConflict = [];
|
|
if (config2.target === void 0) {
|
|
this.config.onConflict.push(sql` on conflict do nothing`);
|
|
} else {
|
|
const targetSql = Array.isArray(config2.target) ? sql`${config2.target}` : sql`${[config2.target]}`;
|
|
const whereSql = config2.where ? sql` where ${config2.where}` : sql``;
|
|
this.config.onConflict.push(sql` on conflict ${targetSql} do nothing${whereSql}`);
|
|
}
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds an `on conflict do update` clause to the query.
|
|
*
|
|
* Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}
|
|
*
|
|
* @param config The `target`, `set` and `where` clauses.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* // Update the row if there's a conflict
|
|
* await db.insert(cars)
|
|
* .values({ id: 1, brand: 'BMW' })
|
|
* .onConflictDoUpdate({
|
|
* target: cars.id,
|
|
* set: { brand: 'Porsche' }
|
|
* });
|
|
*
|
|
* // Upsert with 'where' clause
|
|
* await db.insert(cars)
|
|
* .values({ id: 1, brand: 'BMW' })
|
|
* .onConflictDoUpdate({
|
|
* target: cars.id,
|
|
* set: { brand: 'newBMW' },
|
|
* where: sql`${cars.createdAt} > '2023-01-01'::date`,
|
|
* });
|
|
* ```
|
|
*/
|
|
onConflictDoUpdate(config2) {
|
|
if (config2.where && (config2.targetWhere || config2.setWhere)) {
|
|
throw new Error(
|
|
'You cannot use both "where" and "targetWhere"/"setWhere" at the same time - "where" is deprecated, use "targetWhere" or "setWhere" instead.'
|
|
);
|
|
}
|
|
if (!this.config.onConflict) this.config.onConflict = [];
|
|
const whereSql = config2.where ? sql` where ${config2.where}` : void 0;
|
|
const targetWhereSql = config2.targetWhere ? sql` where ${config2.targetWhere}` : void 0;
|
|
const setWhereSql = config2.setWhere ? sql` where ${config2.setWhere}` : void 0;
|
|
const targetSql = Array.isArray(config2.target) ? sql`${config2.target}` : sql`${[config2.target]}`;
|
|
const setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config2.set));
|
|
this.config.onConflict.push(
|
|
sql` on conflict ${targetSql}${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`
|
|
);
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
getSQL() {
|
|
return this.dialect.buildInsertQuery(this.config);
|
|
}
|
|
toSQL() {
|
|
const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
|
|
return rest;
|
|
}
|
|
/** @internal */
|
|
_prepare(isOneTimeQuery = true) {
|
|
return this.session[isOneTimeQuery ? "prepareOneTimeQuery" : "prepareQuery"](
|
|
this.dialect.sqlToQuery(this.getSQL()),
|
|
this.config.returning,
|
|
this.config.returning ? "all" : "run",
|
|
true,
|
|
void 0,
|
|
{
|
|
type: "insert",
|
|
tables: extractUsedTable(this.config.table)
|
|
}
|
|
);
|
|
}
|
|
prepare() {
|
|
return this._prepare(false);
|
|
}
|
|
run = (placeholderValues) => {
|
|
return this._prepare().run(placeholderValues);
|
|
};
|
|
all = (placeholderValues) => {
|
|
return this._prepare().all(placeholderValues);
|
|
};
|
|
get = (placeholderValues) => {
|
|
return this._prepare().get(placeholderValues);
|
|
};
|
|
values = (placeholderValues) => {
|
|
return this._prepare().values(placeholderValues);
|
|
};
|
|
async execute() {
|
|
return this.config.returning ? this.all() : this.run();
|
|
}
|
|
$dynamic() {
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.js
|
|
var init_select_types = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/update.js
|
|
var SQLiteUpdateBuilder, SQLiteUpdateBase;
|
|
var init_update = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/update.js"() {
|
|
init_entity();
|
|
init_query_promise();
|
|
init_selection_proxy();
|
|
init_table2();
|
|
init_subquery();
|
|
init_table();
|
|
init_utils();
|
|
init_view_common();
|
|
init_utils2();
|
|
init_view_base();
|
|
SQLiteUpdateBuilder = class {
|
|
constructor(table, session, dialect, withList) {
|
|
this.table = table;
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this.withList = withList;
|
|
}
|
|
static [entityKind] = "SQLiteUpdateBuilder";
|
|
set(values) {
|
|
return new SQLiteUpdateBase(
|
|
this.table,
|
|
mapUpdateSet(this.table, values),
|
|
this.session,
|
|
this.dialect,
|
|
this.withList
|
|
);
|
|
}
|
|
};
|
|
SQLiteUpdateBase = class extends QueryPromise {
|
|
constructor(table, set2, session, dialect, withList) {
|
|
super();
|
|
this.session = session;
|
|
this.dialect = dialect;
|
|
this.config = { set: set2, table, withList, joins: [] };
|
|
}
|
|
static [entityKind] = "SQLiteUpdate";
|
|
/** @internal */
|
|
config;
|
|
from(source) {
|
|
this.config.from = source;
|
|
return this;
|
|
}
|
|
createJoin(joinType) {
|
|
return (table, on) => {
|
|
const tableName = getTableLikeName(table);
|
|
if (typeof tableName === "string" && this.config.joins.some((join4) => join4.alias === tableName)) {
|
|
throw new Error(`Alias "${tableName}" is already used in this query`);
|
|
}
|
|
if (typeof on === "function") {
|
|
const from = this.config.from ? is(table, SQLiteTable) ? table[Table.Symbol.Columns] : is(table, Subquery) ? table._.selectedFields : is(table, SQLiteViewBase) ? table[ViewBaseConfig].selectedFields : void 0 : void 0;
|
|
on = on(
|
|
new Proxy(
|
|
this.config.table[Table.Symbol.Columns],
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "sql", sqlBehavior: "sql" })
|
|
),
|
|
from && new Proxy(
|
|
from,
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "sql", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
}
|
|
this.config.joins.push({ on, table, joinType, alias: tableName });
|
|
return this;
|
|
};
|
|
}
|
|
leftJoin = this.createJoin("left");
|
|
rightJoin = this.createJoin("right");
|
|
innerJoin = this.createJoin("inner");
|
|
fullJoin = this.createJoin("full");
|
|
/**
|
|
* Adds a 'where' clause to the query.
|
|
*
|
|
* Calling this method will update only those rows that fulfill a specified condition.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/update}
|
|
*
|
|
* @param where the 'where' clause.
|
|
*
|
|
* @example
|
|
* You can use conditional operators and `sql function` to filter the rows to be updated.
|
|
*
|
|
* ```ts
|
|
* // Update all cars with green color
|
|
* db.update(cars).set({ color: 'red' })
|
|
* .where(eq(cars.color, 'green'));
|
|
* // or
|
|
* db.update(cars).set({ color: 'red' })
|
|
* .where(sql`${cars.color} = 'green'`)
|
|
* ```
|
|
*
|
|
* You can logically combine conditional operators with `and()` and `or()` operators:
|
|
*
|
|
* ```ts
|
|
* // Update all BMW cars with a green color
|
|
* db.update(cars).set({ color: 'red' })
|
|
* .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));
|
|
*
|
|
* // Update all cars with the green or blue color
|
|
* db.update(cars).set({ color: 'red' })
|
|
* .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));
|
|
* ```
|
|
*/
|
|
where(where) {
|
|
this.config.where = where;
|
|
return this;
|
|
}
|
|
orderBy(...columns) {
|
|
if (typeof columns[0] === "function") {
|
|
const orderBy = columns[0](
|
|
new Proxy(
|
|
this.config.table[Table.Symbol.Columns],
|
|
new SelectionProxyHandler({ sqlAliasedBehavior: "alias", sqlBehavior: "sql" })
|
|
)
|
|
);
|
|
const orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];
|
|
this.config.orderBy = orderByArray;
|
|
} else {
|
|
const orderByArray = columns;
|
|
this.config.orderBy = orderByArray;
|
|
}
|
|
return this;
|
|
}
|
|
limit(limit) {
|
|
this.config.limit = limit;
|
|
return this;
|
|
}
|
|
returning(fields = this.config.table[SQLiteTable.Symbol.Columns]) {
|
|
this.config.returning = orderSelectedFields(fields);
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
getSQL() {
|
|
return this.dialect.buildUpdateQuery(this.config);
|
|
}
|
|
toSQL() {
|
|
const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
|
|
return rest;
|
|
}
|
|
/** @internal */
|
|
_prepare(isOneTimeQuery = true) {
|
|
return this.session[isOneTimeQuery ? "prepareOneTimeQuery" : "prepareQuery"](
|
|
this.dialect.sqlToQuery(this.getSQL()),
|
|
this.config.returning,
|
|
this.config.returning ? "all" : "run",
|
|
true,
|
|
void 0,
|
|
{
|
|
type: "insert",
|
|
tables: extractUsedTable(this.config.table)
|
|
}
|
|
);
|
|
}
|
|
prepare() {
|
|
return this._prepare(false);
|
|
}
|
|
run = (placeholderValues) => {
|
|
return this._prepare().run(placeholderValues);
|
|
};
|
|
all = (placeholderValues) => {
|
|
return this._prepare().all(placeholderValues);
|
|
};
|
|
get = (placeholderValues) => {
|
|
return this._prepare().get(placeholderValues);
|
|
};
|
|
values = (placeholderValues) => {
|
|
return this._prepare().values(placeholderValues);
|
|
};
|
|
async execute() {
|
|
return this.config.returning ? this.all() : this.run();
|
|
}
|
|
$dynamic() {
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/index.js
|
|
var init_query_builders = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/index.js"() {
|
|
init_delete();
|
|
init_insert();
|
|
init_query_builder2();
|
|
init_select2();
|
|
init_select_types();
|
|
init_update();
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/count.js
|
|
var SQLiteCountBuilder;
|
|
var init_count = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/count.js"() {
|
|
init_entity();
|
|
init_sql();
|
|
SQLiteCountBuilder = class _SQLiteCountBuilder extends SQL {
|
|
constructor(params) {
|
|
super(_SQLiteCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);
|
|
this.params = params;
|
|
this.session = params.session;
|
|
this.sql = _SQLiteCountBuilder.buildCount(
|
|
params.source,
|
|
params.filters
|
|
);
|
|
}
|
|
sql;
|
|
static [entityKind] = "SQLiteCountBuilderAsync";
|
|
[Symbol.toStringTag] = "SQLiteCountBuilderAsync";
|
|
session;
|
|
static buildEmbeddedCount(source, filters) {
|
|
return sql`(select count(*) from ${source}${sql.raw(" where ").if(filters)}${filters})`;
|
|
}
|
|
static buildCount(source, filters) {
|
|
return sql`select count(*) from ${source}${sql.raw(" where ").if(filters)}${filters}`;
|
|
}
|
|
then(onfulfilled, onrejected) {
|
|
return Promise.resolve(this.session.count(this.sql)).then(
|
|
onfulfilled,
|
|
onrejected
|
|
);
|
|
}
|
|
catch(onRejected) {
|
|
return this.then(void 0, onRejected);
|
|
}
|
|
finally(onFinally) {
|
|
return this.then(
|
|
(value2) => {
|
|
onFinally?.();
|
|
return value2;
|
|
},
|
|
(reason) => {
|
|
onFinally?.();
|
|
throw reason;
|
|
}
|
|
);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/query.js
|
|
var RelationalQueryBuilder, SQLiteRelationalQuery, SQLiteSyncRelationalQuery;
|
|
var init_query = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/query.js"() {
|
|
init_entity();
|
|
init_query_promise();
|
|
init_relations();
|
|
RelationalQueryBuilder = class {
|
|
constructor(mode, fullSchema, schema, tableNamesMap, table, tableConfig, dialect, session) {
|
|
this.mode = mode;
|
|
this.fullSchema = fullSchema;
|
|
this.schema = schema;
|
|
this.tableNamesMap = tableNamesMap;
|
|
this.table = table;
|
|
this.tableConfig = tableConfig;
|
|
this.dialect = dialect;
|
|
this.session = session;
|
|
}
|
|
static [entityKind] = "SQLiteAsyncRelationalQueryBuilder";
|
|
findMany(config2) {
|
|
return this.mode === "sync" ? new SQLiteSyncRelationalQuery(
|
|
this.fullSchema,
|
|
this.schema,
|
|
this.tableNamesMap,
|
|
this.table,
|
|
this.tableConfig,
|
|
this.dialect,
|
|
this.session,
|
|
config2 ? config2 : {},
|
|
"many"
|
|
) : new SQLiteRelationalQuery(
|
|
this.fullSchema,
|
|
this.schema,
|
|
this.tableNamesMap,
|
|
this.table,
|
|
this.tableConfig,
|
|
this.dialect,
|
|
this.session,
|
|
config2 ? config2 : {},
|
|
"many"
|
|
);
|
|
}
|
|
findFirst(config2) {
|
|
return this.mode === "sync" ? new SQLiteSyncRelationalQuery(
|
|
this.fullSchema,
|
|
this.schema,
|
|
this.tableNamesMap,
|
|
this.table,
|
|
this.tableConfig,
|
|
this.dialect,
|
|
this.session,
|
|
config2 ? { ...config2, limit: 1 } : { limit: 1 },
|
|
"first"
|
|
) : new SQLiteRelationalQuery(
|
|
this.fullSchema,
|
|
this.schema,
|
|
this.tableNamesMap,
|
|
this.table,
|
|
this.tableConfig,
|
|
this.dialect,
|
|
this.session,
|
|
config2 ? { ...config2, limit: 1 } : { limit: 1 },
|
|
"first"
|
|
);
|
|
}
|
|
};
|
|
SQLiteRelationalQuery = class extends QueryPromise {
|
|
constructor(fullSchema, schema, tableNamesMap, table, tableConfig, dialect, session, config2, mode) {
|
|
super();
|
|
this.fullSchema = fullSchema;
|
|
this.schema = schema;
|
|
this.tableNamesMap = tableNamesMap;
|
|
this.table = table;
|
|
this.tableConfig = tableConfig;
|
|
this.dialect = dialect;
|
|
this.session = session;
|
|
this.config = config2;
|
|
this.mode = mode;
|
|
}
|
|
static [entityKind] = "SQLiteAsyncRelationalQuery";
|
|
/** @internal */
|
|
mode;
|
|
/** @internal */
|
|
getSQL() {
|
|
return this.dialect.buildRelationalQuery({
|
|
fullSchema: this.fullSchema,
|
|
schema: this.schema,
|
|
tableNamesMap: this.tableNamesMap,
|
|
table: this.table,
|
|
tableConfig: this.tableConfig,
|
|
queryConfig: this.config,
|
|
tableAlias: this.tableConfig.tsName
|
|
}).sql;
|
|
}
|
|
/** @internal */
|
|
_prepare(isOneTimeQuery = false) {
|
|
const { query, builtQuery } = this._toSQL();
|
|
return this.session[isOneTimeQuery ? "prepareOneTimeQuery" : "prepareQuery"](
|
|
builtQuery,
|
|
void 0,
|
|
this.mode === "first" ? "get" : "all",
|
|
true,
|
|
(rawRows, mapColumnValue) => {
|
|
const rows = rawRows.map(
|
|
(row) => mapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)
|
|
);
|
|
if (this.mode === "first") {
|
|
return rows[0];
|
|
}
|
|
return rows;
|
|
}
|
|
);
|
|
}
|
|
prepare() {
|
|
return this._prepare(false);
|
|
}
|
|
_toSQL() {
|
|
const query = this.dialect.buildRelationalQuery({
|
|
fullSchema: this.fullSchema,
|
|
schema: this.schema,
|
|
tableNamesMap: this.tableNamesMap,
|
|
table: this.table,
|
|
tableConfig: this.tableConfig,
|
|
queryConfig: this.config,
|
|
tableAlias: this.tableConfig.tsName
|
|
});
|
|
const builtQuery = this.dialect.sqlToQuery(query.sql);
|
|
return { query, builtQuery };
|
|
}
|
|
toSQL() {
|
|
return this._toSQL().builtQuery;
|
|
}
|
|
/** @internal */
|
|
executeRaw() {
|
|
if (this.mode === "first") {
|
|
return this._prepare(false).get();
|
|
}
|
|
return this._prepare(false).all();
|
|
}
|
|
async execute() {
|
|
return this.executeRaw();
|
|
}
|
|
};
|
|
SQLiteSyncRelationalQuery = class extends SQLiteRelationalQuery {
|
|
static [entityKind] = "SQLiteSyncRelationalQuery";
|
|
sync() {
|
|
return this.executeRaw();
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js
|
|
var SQLiteRaw;
|
|
var init_raw = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js"() {
|
|
init_entity();
|
|
init_query_promise();
|
|
SQLiteRaw = class extends QueryPromise {
|
|
constructor(execute, getSQL, action, dialect, mapBatchResult) {
|
|
super();
|
|
this.execute = execute;
|
|
this.getSQL = getSQL;
|
|
this.dialect = dialect;
|
|
this.mapBatchResult = mapBatchResult;
|
|
this.config = { action };
|
|
}
|
|
static [entityKind] = "SQLiteRaw";
|
|
/** @internal */
|
|
config;
|
|
getQuery() {
|
|
return { ...this.dialect.sqlToQuery(this.getSQL()), method: this.config.action };
|
|
}
|
|
mapResult(result, isFromBatch) {
|
|
return isFromBatch ? this.mapBatchResult(result) : result;
|
|
}
|
|
_prepare() {
|
|
return this;
|
|
}
|
|
/** @internal */
|
|
isResponseInArrayMode() {
|
|
return false;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/db.js
|
|
var BaseSQLiteDatabase;
|
|
var init_db = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/db.js"() {
|
|
init_entity();
|
|
init_selection_proxy();
|
|
init_sql();
|
|
init_query_builders();
|
|
init_subquery();
|
|
init_count();
|
|
init_query();
|
|
init_raw();
|
|
BaseSQLiteDatabase = class {
|
|
constructor(resultKind, dialect, session, schema) {
|
|
this.resultKind = resultKind;
|
|
this.dialect = dialect;
|
|
this.session = session;
|
|
this._ = schema ? {
|
|
schema: schema.schema,
|
|
fullSchema: schema.fullSchema,
|
|
tableNamesMap: schema.tableNamesMap
|
|
} : {
|
|
schema: void 0,
|
|
fullSchema: {},
|
|
tableNamesMap: {}
|
|
};
|
|
this.query = {};
|
|
const query = this.query;
|
|
if (this._.schema) {
|
|
for (const [tableName, columns] of Object.entries(this._.schema)) {
|
|
query[tableName] = new RelationalQueryBuilder(
|
|
resultKind,
|
|
schema.fullSchema,
|
|
this._.schema,
|
|
this._.tableNamesMap,
|
|
schema.fullSchema[tableName],
|
|
columns,
|
|
dialect,
|
|
session
|
|
);
|
|
}
|
|
}
|
|
this.$cache = { invalidate: async (_params) => {
|
|
} };
|
|
}
|
|
static [entityKind] = "BaseSQLiteDatabase";
|
|
query;
|
|
/**
|
|
* Creates a subquery that defines a temporary named result set as a CTE.
|
|
*
|
|
* It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#with-clause}
|
|
*
|
|
* @param alias The alias for the subquery.
|
|
*
|
|
* Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Create a subquery with alias 'sq' and use it in the select query
|
|
* const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));
|
|
*
|
|
* const result = await db.with(sq).select().from(sq);
|
|
* ```
|
|
*
|
|
* To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:
|
|
*
|
|
* ```ts
|
|
* // Select an arbitrary SQL value as a field in a CTE and reference it in the main query
|
|
* const sq = db.$with('sq').as(db.select({
|
|
* name: sql<string>`upper(${users.name})`.as('name'),
|
|
* })
|
|
* .from(users));
|
|
*
|
|
* const result = await db.with(sq).select({ name: sq.name }).from(sq);
|
|
* ```
|
|
*/
|
|
$with = (alias, selection) => {
|
|
const self = this;
|
|
const as = (qb) => {
|
|
if (typeof qb === "function") {
|
|
qb = qb(new QueryBuilder(self.dialect));
|
|
}
|
|
return new Proxy(
|
|
new WithSubquery(
|
|
qb.getSQL(),
|
|
selection ?? ("getSelectedFields" in qb ? qb.getSelectedFields() ?? {} : {}),
|
|
alias,
|
|
true
|
|
),
|
|
new SelectionProxyHandler({ alias, sqlAliasedBehavior: "alias", sqlBehavior: "error" })
|
|
);
|
|
};
|
|
return { as };
|
|
};
|
|
$count(source, filters) {
|
|
return new SQLiteCountBuilder({ source, filters, session: this.session });
|
|
}
|
|
/**
|
|
* Incorporates a previously defined CTE (using `$with`) into the main query.
|
|
*
|
|
* This method allows the main query to reference a temporary named result set.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/select#with-clause}
|
|
*
|
|
* @param queries The CTEs to incorporate into the main query.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Define a subquery 'sq' as a CTE using $with
|
|
* const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));
|
|
*
|
|
* // Incorporate the CTE 'sq' into the main query and select from it
|
|
* const result = await db.with(sq).select().from(sq);
|
|
* ```
|
|
*/
|
|
with(...queries) {
|
|
const self = this;
|
|
function select(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: self.session,
|
|
dialect: self.dialect,
|
|
withList: queries
|
|
});
|
|
}
|
|
function selectDistinct(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: self.session,
|
|
dialect: self.dialect,
|
|
withList: queries,
|
|
distinct: true
|
|
});
|
|
}
|
|
function update(table) {
|
|
return new SQLiteUpdateBuilder(table, self.session, self.dialect, queries);
|
|
}
|
|
function insert(into) {
|
|
return new SQLiteInsertBuilder(into, self.session, self.dialect, queries);
|
|
}
|
|
function delete_(from) {
|
|
return new SQLiteDeleteBase(from, self.session, self.dialect, queries);
|
|
}
|
|
return { select, selectDistinct, update, insert, delete: delete_ };
|
|
}
|
|
select(fields) {
|
|
return new SQLiteSelectBuilder({ fields: fields ?? void 0, session: this.session, dialect: this.dialect });
|
|
}
|
|
selectDistinct(fields) {
|
|
return new SQLiteSelectBuilder({
|
|
fields: fields ?? void 0,
|
|
session: this.session,
|
|
dialect: this.dialect,
|
|
distinct: true
|
|
});
|
|
}
|
|
/**
|
|
* Creates an update query.
|
|
*
|
|
* Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.
|
|
*
|
|
* Use `.set()` method to specify which values to update.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/update}
|
|
*
|
|
* @param table The table to update.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Update all rows in the 'cars' table
|
|
* await db.update(cars).set({ color: 'red' });
|
|
*
|
|
* // Update rows with filters and conditions
|
|
* await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));
|
|
*
|
|
* // Update with returning clause
|
|
* const updatedCar: Car[] = await db.update(cars)
|
|
* .set({ color: 'red' })
|
|
* .where(eq(cars.id, 1))
|
|
* .returning();
|
|
* ```
|
|
*/
|
|
update(table) {
|
|
return new SQLiteUpdateBuilder(table, this.session, this.dialect);
|
|
}
|
|
$cache;
|
|
/**
|
|
* Creates an insert query.
|
|
*
|
|
* Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/insert}
|
|
*
|
|
* @param table The table to insert into.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Insert one row
|
|
* await db.insert(cars).values({ brand: 'BMW' });
|
|
*
|
|
* // Insert multiple rows
|
|
* await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);
|
|
*
|
|
* // Insert with returning clause
|
|
* const insertedCar: Car[] = await db.insert(cars)
|
|
* .values({ brand: 'BMW' })
|
|
* .returning();
|
|
* ```
|
|
*/
|
|
insert(into) {
|
|
return new SQLiteInsertBuilder(into, this.session, this.dialect);
|
|
}
|
|
/**
|
|
* Creates a delete query.
|
|
*
|
|
* Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.
|
|
*
|
|
* See docs: {@link https://orm.drizzle.team/docs/delete}
|
|
*
|
|
* @param table The table to delete from.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Delete all rows in the 'cars' table
|
|
* await db.delete(cars);
|
|
*
|
|
* // Delete rows with filters and conditions
|
|
* await db.delete(cars).where(eq(cars.color, 'green'));
|
|
*
|
|
* // Delete with returning clause
|
|
* const deletedCar: Car[] = await db.delete(cars)
|
|
* .where(eq(cars.id, 1))
|
|
* .returning();
|
|
* ```
|
|
*/
|
|
delete(from) {
|
|
return new SQLiteDeleteBase(from, this.session, this.dialect);
|
|
}
|
|
run(query) {
|
|
const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
|
|
if (this.resultKind === "async") {
|
|
return new SQLiteRaw(
|
|
async () => this.session.run(sequel),
|
|
() => sequel,
|
|
"run",
|
|
this.dialect,
|
|
this.session.extractRawRunValueFromBatchResult.bind(this.session)
|
|
);
|
|
}
|
|
return this.session.run(sequel);
|
|
}
|
|
all(query) {
|
|
const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
|
|
if (this.resultKind === "async") {
|
|
return new SQLiteRaw(
|
|
async () => this.session.all(sequel),
|
|
() => sequel,
|
|
"all",
|
|
this.dialect,
|
|
this.session.extractRawAllValueFromBatchResult.bind(this.session)
|
|
);
|
|
}
|
|
return this.session.all(sequel);
|
|
}
|
|
get(query) {
|
|
const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
|
|
if (this.resultKind === "async") {
|
|
return new SQLiteRaw(
|
|
async () => this.session.get(sequel),
|
|
() => sequel,
|
|
"get",
|
|
this.dialect,
|
|
this.session.extractRawGetValueFromBatchResult.bind(this.session)
|
|
);
|
|
}
|
|
return this.session.get(sequel);
|
|
}
|
|
values(query) {
|
|
const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
|
|
if (this.resultKind === "async") {
|
|
return new SQLiteRaw(
|
|
async () => this.session.values(sequel),
|
|
() => sequel,
|
|
"values",
|
|
this.dialect,
|
|
this.session.extractRawValuesValueFromBatchResult.bind(this.session)
|
|
);
|
|
}
|
|
return this.session.values(sequel);
|
|
}
|
|
transaction(transaction, config2) {
|
|
return this.session.transaction(transaction, config2);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/cache/core/cache.js
|
|
async function hashQuery(sql2, params) {
|
|
const dataToHash = `${sql2}-${JSON.stringify(params)}`;
|
|
const encoder = new TextEncoder();
|
|
const data = encoder.encode(dataToHash);
|
|
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
const hashArray = [...new Uint8Array(hashBuffer)];
|
|
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
return hashHex;
|
|
}
|
|
var Cache, NoopCache;
|
|
var init_cache = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/cache/core/cache.js"() {
|
|
init_entity();
|
|
Cache = class {
|
|
static [entityKind] = "Cache";
|
|
};
|
|
NoopCache = class extends Cache {
|
|
strategy() {
|
|
return "all";
|
|
}
|
|
static [entityKind] = "NoopCache";
|
|
async get(_key) {
|
|
return void 0;
|
|
}
|
|
async put(_hashedQuery, _response, _tables, _config) {
|
|
}
|
|
async onMutate(_params) {
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/session.js
|
|
var ExecuteResultSync, SQLitePreparedQuery, SQLiteSession, SQLiteTransaction;
|
|
var init_session = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/session.js"() {
|
|
init_cache();
|
|
init_entity();
|
|
init_errors3();
|
|
init_query_promise();
|
|
init_db();
|
|
ExecuteResultSync = class extends QueryPromise {
|
|
constructor(resultCb) {
|
|
super();
|
|
this.resultCb = resultCb;
|
|
}
|
|
static [entityKind] = "ExecuteResultSync";
|
|
async execute() {
|
|
return this.resultCb();
|
|
}
|
|
sync() {
|
|
return this.resultCb();
|
|
}
|
|
};
|
|
SQLitePreparedQuery = class {
|
|
constructor(mode, executeMethod, query, cache, queryMetadata, cacheConfig) {
|
|
this.mode = mode;
|
|
this.executeMethod = executeMethod;
|
|
this.query = query;
|
|
this.cache = cache;
|
|
this.queryMetadata = queryMetadata;
|
|
this.cacheConfig = cacheConfig;
|
|
if (cache && cache.strategy() === "all" && cacheConfig === void 0) {
|
|
this.cacheConfig = { enable: true, autoInvalidate: true };
|
|
}
|
|
if (!this.cacheConfig?.enable) {
|
|
this.cacheConfig = void 0;
|
|
}
|
|
}
|
|
static [entityKind] = "PreparedQuery";
|
|
/** @internal */
|
|
joinsNotNullableMap;
|
|
/** @internal */
|
|
async queryWithCache(queryString, params, query) {
|
|
if (this.cache === void 0 || is(this.cache, NoopCache) || this.queryMetadata === void 0) {
|
|
try {
|
|
return await query();
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
}
|
|
if (this.cacheConfig && !this.cacheConfig.enable) {
|
|
try {
|
|
return await query();
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
}
|
|
if ((this.queryMetadata.type === "insert" || this.queryMetadata.type === "update" || this.queryMetadata.type === "delete") && this.queryMetadata.tables.length > 0) {
|
|
try {
|
|
const [res] = await Promise.all([
|
|
query(),
|
|
this.cache.onMutate({ tables: this.queryMetadata.tables })
|
|
]);
|
|
return res;
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
}
|
|
if (!this.cacheConfig) {
|
|
try {
|
|
return await query();
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
}
|
|
if (this.queryMetadata.type === "select") {
|
|
const fromCache = await this.cache.get(
|
|
this.cacheConfig.tag ?? await hashQuery(queryString, params),
|
|
this.queryMetadata.tables,
|
|
this.cacheConfig.tag !== void 0,
|
|
this.cacheConfig.autoInvalidate
|
|
);
|
|
if (fromCache === void 0) {
|
|
let result;
|
|
try {
|
|
result = await query();
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
await this.cache.put(
|
|
this.cacheConfig.tag ?? await hashQuery(queryString, params),
|
|
result,
|
|
// make sure we send tables that were used in a query only if user wants to invalidate it on each write
|
|
this.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],
|
|
this.cacheConfig.tag !== void 0,
|
|
this.cacheConfig.config
|
|
);
|
|
return result;
|
|
}
|
|
return fromCache;
|
|
}
|
|
try {
|
|
return await query();
|
|
} catch (e) {
|
|
throw new DrizzleQueryError(queryString, params, e);
|
|
}
|
|
}
|
|
getQuery() {
|
|
return this.query;
|
|
}
|
|
mapRunResult(result, _isFromBatch) {
|
|
return result;
|
|
}
|
|
mapAllResult(_result, _isFromBatch) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
mapGetResult(_result, _isFromBatch) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
execute(placeholderValues) {
|
|
if (this.mode === "async") {
|
|
return this[this.executeMethod](placeholderValues);
|
|
}
|
|
return new ExecuteResultSync(() => this[this.executeMethod](placeholderValues));
|
|
}
|
|
mapResult(response, isFromBatch) {
|
|
switch (this.executeMethod) {
|
|
case "run": {
|
|
return this.mapRunResult(response, isFromBatch);
|
|
}
|
|
case "all": {
|
|
return this.mapAllResult(response, isFromBatch);
|
|
}
|
|
case "get": {
|
|
return this.mapGetResult(response, isFromBatch);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
SQLiteSession = class {
|
|
constructor(dialect) {
|
|
this.dialect = dialect;
|
|
}
|
|
static [entityKind] = "SQLiteSession";
|
|
prepareOneTimeQuery(query, fields, executeMethod, isResponseInArrayMode, customResultMapper, queryMetadata, cacheConfig) {
|
|
return this.prepareQuery(
|
|
query,
|
|
fields,
|
|
executeMethod,
|
|
isResponseInArrayMode,
|
|
customResultMapper,
|
|
queryMetadata,
|
|
cacheConfig
|
|
);
|
|
}
|
|
run(query) {
|
|
const staticQuery = this.dialect.sqlToQuery(query);
|
|
try {
|
|
return this.prepareOneTimeQuery(staticQuery, void 0, "run", false).run();
|
|
} catch (err) {
|
|
throw new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });
|
|
}
|
|
}
|
|
/** @internal */
|
|
extractRawRunValueFromBatchResult(result) {
|
|
return result;
|
|
}
|
|
all(query) {
|
|
return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).all();
|
|
}
|
|
/** @internal */
|
|
extractRawAllValueFromBatchResult(_result) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
get(query) {
|
|
return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).get();
|
|
}
|
|
/** @internal */
|
|
extractRawGetValueFromBatchResult(_result) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
values(query) {
|
|
return this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), void 0, "run", false).values();
|
|
}
|
|
async count(sql2) {
|
|
const result = await this.values(sql2);
|
|
return result[0][0];
|
|
}
|
|
/** @internal */
|
|
extractRawValuesValueFromBatchResult(_result) {
|
|
throw new Error("Not implemented");
|
|
}
|
|
};
|
|
SQLiteTransaction = class extends BaseSQLiteDatabase {
|
|
constructor(resultType, dialect, session, schema, nestedIndex = 0) {
|
|
super(resultType, dialect, session, schema);
|
|
this.schema = schema;
|
|
this.nestedIndex = nestedIndex;
|
|
}
|
|
static [entityKind] = "SQLiteTransaction";
|
|
rollback() {
|
|
throw new TransactionRollbackError();
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/subquery.js
|
|
var init_subquery2 = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/subquery.js"() {
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/view.js
|
|
var ViewBuilderCore, ViewBuilder, ManualViewBuilder, SQLiteView;
|
|
var init_view = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/view.js"() {
|
|
init_entity();
|
|
init_selection_proxy();
|
|
init_utils();
|
|
init_query_builder2();
|
|
init_table2();
|
|
init_view_base();
|
|
ViewBuilderCore = class {
|
|
constructor(name) {
|
|
this.name = name;
|
|
}
|
|
static [entityKind] = "SQLiteViewBuilderCore";
|
|
config = {};
|
|
};
|
|
ViewBuilder = class extends ViewBuilderCore {
|
|
static [entityKind] = "SQLiteViewBuilder";
|
|
as(qb) {
|
|
if (typeof qb === "function") {
|
|
qb = qb(new QueryBuilder());
|
|
}
|
|
const selectionProxy = new SelectionProxyHandler({
|
|
alias: this.name,
|
|
sqlBehavior: "error",
|
|
sqlAliasedBehavior: "alias",
|
|
replaceOriginalName: true
|
|
});
|
|
const aliasedSelectedFields = qb.getSelectedFields();
|
|
return new Proxy(
|
|
new SQLiteView({
|
|
// sqliteConfig: this.config,
|
|
config: {
|
|
name: this.name,
|
|
schema: void 0,
|
|
selectedFields: aliasedSelectedFields,
|
|
query: qb.getSQL().inlineParams()
|
|
}
|
|
}),
|
|
selectionProxy
|
|
);
|
|
}
|
|
};
|
|
ManualViewBuilder = class extends ViewBuilderCore {
|
|
static [entityKind] = "SQLiteManualViewBuilder";
|
|
columns;
|
|
constructor(name, columns) {
|
|
super(name);
|
|
this.columns = getTableColumns(sqliteTable(name, columns));
|
|
}
|
|
existing() {
|
|
return new Proxy(
|
|
new SQLiteView({
|
|
config: {
|
|
name: this.name,
|
|
schema: void 0,
|
|
selectedFields: this.columns,
|
|
query: void 0
|
|
}
|
|
}),
|
|
new SelectionProxyHandler({
|
|
alias: this.name,
|
|
sqlBehavior: "error",
|
|
sqlAliasedBehavior: "alias",
|
|
replaceOriginalName: true
|
|
})
|
|
);
|
|
}
|
|
as(query) {
|
|
return new Proxy(
|
|
new SQLiteView({
|
|
config: {
|
|
name: this.name,
|
|
schema: void 0,
|
|
selectedFields: this.columns,
|
|
query: query.inlineParams()
|
|
}
|
|
}),
|
|
new SelectionProxyHandler({
|
|
alias: this.name,
|
|
sqlBehavior: "error",
|
|
sqlAliasedBehavior: "alias",
|
|
replaceOriginalName: true
|
|
})
|
|
);
|
|
}
|
|
};
|
|
SQLiteView = class extends SQLiteViewBase {
|
|
static [entityKind] = "SQLiteView";
|
|
constructor({ config: config2 }) {
|
|
super(config2);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
// ../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/index.js
|
|
var init_sqlite_core = __esm({
|
|
"../../node_modules/.pnpm/drizzle-orm@0.44.7_@opentelemetry+api@1.9.1_@types+better-sqlite3@7.6.13_@types+pg@8.15.6_better-sqlite3@12.9.0/node_modules/drizzle-orm/sqlite-core/index.js"() {
|
|
init_alias2();
|
|
init_checks3();
|
|
init_columns();
|
|
init_db();
|
|
init_dialect();
|
|
init_foreign_keys2();
|
|
init_indexes();
|
|
init_primary_keys();
|
|
init_query_builders();
|
|
init_session();
|
|
init_subquery2();
|
|
init_table2();
|
|
init_unique_constraint2();
|
|
init_utils2();
|
|
init_view();
|
|
}
|
|
});
|
|
|
|
// ../../packages/db/src/task-queue.ts
|
|
var task_queue_exports = {};
|
|
__export(task_queue_exports, {
|
|
TASK_QUEUE_DDL_V1: () => TASK_QUEUE_DDL_V1,
|
|
attemptsTable: () => attemptsTable,
|
|
processJournalTable: () => processJournalTable,
|
|
schemaMetaTable: () => schemaMetaTable,
|
|
tasksTable: () => tasksTable
|
|
});
|
|
var tasksTable, attemptsTable, processJournalTable, schemaMetaTable, TASK_QUEUE_DDL_V1;
|
|
var init_task_queue = __esm({
|
|
"../../packages/db/src/task-queue.ts"() {
|
|
"use strict";
|
|
init_sqlite_core();
|
|
tasksTable = sqliteTable(
|
|
"tasks",
|
|
{
|
|
id: text("id").primaryKey(),
|
|
kind: text("kind").notNull(),
|
|
parentId: text("parent_id"),
|
|
status: text("status").notNull(),
|
|
prevStatus: text("prev_status"),
|
|
statusReason: text("status_reason"),
|
|
enteredStatusAt: integer2("entered_status_at", { mode: "number" }).notNull(),
|
|
priority: integer2("priority", { mode: "number" }).notNull(),
|
|
groupKey: text("group_key").notNull(),
|
|
attempt: integer2("attempt", { mode: "number" }).notNull().default(0),
|
|
maxAttempts: integer2("max_attempts", { mode: "number" }).notNull(),
|
|
nextRetryAt: integer2("next_retry_at", { mode: "number" }),
|
|
pid: integer2("pid", { mode: "number" }),
|
|
pidStartedAt: integer2("pid_started_at", { mode: "number" }),
|
|
createdAt: integer2("created_at", { mode: "number" }).notNull(),
|
|
updatedAt: integer2("updated_at", { mode: "number" }).notNull(),
|
|
inputJson: text("input_json").notNull(),
|
|
progressJson: text("progress_json"),
|
|
outputJson: text("output_json"),
|
|
lastErrorJson: text("last_error_json")
|
|
},
|
|
(t) => [
|
|
index("idx_tasks_status_priority").on(t.status, t.priority, t.createdAt),
|
|
index("idx_tasks_group").on(t.groupKey, t.status),
|
|
index("idx_tasks_next_retry").on(t.nextRetryAt),
|
|
index("idx_tasks_parent").on(t.parentId)
|
|
]
|
|
);
|
|
attemptsTable = sqliteTable(
|
|
"attempts",
|
|
{
|
|
id: text("id").primaryKey(),
|
|
taskId: text("task_id").notNull().references(() => tasksTable.id, { onDelete: "cascade" }),
|
|
attemptNumber: integer2("attempt_number", { mode: "number" }).notNull(),
|
|
startedAt: integer2("started_at", { mode: "number" }).notNull(),
|
|
endedAt: integer2("ended_at", { mode: "number" }),
|
|
exitCode: integer2("exit_code", { mode: "number" }),
|
|
errorCategory: text("error_category"),
|
|
stdoutTail: text("stdout_tail"),
|
|
stderrTail: text("stderr_tail"),
|
|
rawArgsHash: text("raw_args_hash").notNull()
|
|
},
|
|
(t) => [index("idx_attempts_task").on(t.taskId, t.attemptNumber)]
|
|
);
|
|
processJournalTable = sqliteTable(
|
|
"process_journal",
|
|
{
|
|
seq: integer2("seq", { mode: "number" }).primaryKey({ autoIncrement: true }),
|
|
ts: integer2("ts", { mode: "number" }).notNull(),
|
|
op: text("op").notNull(),
|
|
taskId: text("task_id").notNull(),
|
|
attemptId: text("attempt_id"),
|
|
pid: integer2("pid", { mode: "number" }).notNull(),
|
|
pidStartedAt: integer2("pid_started_at", { mode: "number" }),
|
|
exitCode: integer2("exit_code", { mode: "number" }),
|
|
signal: text("signal")
|
|
},
|
|
(t) => [
|
|
index("idx_journal_task").on(t.taskId),
|
|
index("idx_journal_open").on(t.op)
|
|
]
|
|
);
|
|
schemaMetaTable = sqliteTable("schema_meta", {
|
|
key: text("key").primaryKey(),
|
|
value: text("value").notNull()
|
|
});
|
|
TASK_QUEUE_DDL_V1 = `
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id TEXT PRIMARY KEY,
|
|
kind TEXT NOT NULL,
|
|
parent_id TEXT REFERENCES tasks(id),
|
|
status TEXT NOT NULL,
|
|
prev_status TEXT,
|
|
status_reason TEXT,
|
|
entered_status_at INTEGER NOT NULL,
|
|
priority INTEGER NOT NULL,
|
|
group_key TEXT NOT NULL,
|
|
attempt INTEGER NOT NULL DEFAULT 0,
|
|
max_attempts INTEGER NOT NULL,
|
|
next_retry_at INTEGER,
|
|
pid INTEGER,
|
|
pid_started_at INTEGER,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL,
|
|
input_json TEXT NOT NULL,
|
|
progress_json TEXT,
|
|
output_json TEXT,
|
|
last_error_json TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_status_priority ON tasks(status, priority, created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_group ON tasks(group_key, status);
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_next_retry ON tasks(next_retry_at) WHERE status = 'retry-scheduled';
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks(parent_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS attempts (
|
|
id TEXT PRIMARY KEY,
|
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
attempt_number INTEGER NOT NULL,
|
|
started_at INTEGER NOT NULL,
|
|
ended_at INTEGER,
|
|
exit_code INTEGER,
|
|
error_category TEXT,
|
|
stdout_tail TEXT,
|
|
stderr_tail TEXT,
|
|
raw_args_hash TEXT NOT NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_attempts_task ON attempts(task_id, attempt_number);
|
|
|
|
CREATE TABLE IF NOT EXISTS process_journal (
|
|
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
ts INTEGER NOT NULL,
|
|
op TEXT NOT NULL,
|
|
task_id TEXT NOT NULL,
|
|
attempt_id TEXT,
|
|
pid INTEGER NOT NULL,
|
|
pid_started_at INTEGER,
|
|
exit_code INTEGER,
|
|
signal TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_journal_task ON process_journal(task_id);
|
|
CREATE INDEX IF NOT EXISTS idx_journal_open ON process_journal(op) WHERE op = 'spawn';
|
|
|
|
CREATE TABLE IF NOT EXISTS schema_meta (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
);
|
|
INSERT INTO schema_meta (key, value) VALUES ('task_queue_version', '1')
|
|
ON CONFLICT(key) DO UPDATE SET value = excluded.value;
|
|
`;
|
|
}
|
|
});
|
|
|
|
// src/parser/probe-flags.ts
|
|
var EXACT_FLAGS = /* @__PURE__ */ new Set([
|
|
"-j",
|
|
"--dump-json",
|
|
"-J",
|
|
"--dump-single-json",
|
|
"-F",
|
|
"--list-formats",
|
|
"--list-formats-as-table",
|
|
"--list-formats-old",
|
|
"-s",
|
|
"--simulate",
|
|
"--skip-download",
|
|
"--list-subs",
|
|
"--list-extractors",
|
|
"--list-extractor-descriptions"
|
|
]);
|
|
var EXACT_GETTERS = /* @__PURE__ */ new Set([
|
|
"--get-id",
|
|
"--get-title",
|
|
"--get-thumbnail",
|
|
"--get-description",
|
|
"--get-duration",
|
|
"--get-filename",
|
|
"--get-format",
|
|
"--get-url"
|
|
]);
|
|
var META_FLAGS = /* @__PURE__ */ new Set(["--update", "--version"]);
|
|
function findProbeFlag(argv) {
|
|
for (const tok of argv) {
|
|
const head = headOf(tok);
|
|
if (EXACT_FLAGS.has(head)) return head;
|
|
if (EXACT_GETTERS.has(head)) return head;
|
|
if (META_FLAGS.has(head)) return head;
|
|
if (head === "--print") return head;
|
|
}
|
|
return null;
|
|
}
|
|
function headOf(tok) {
|
|
const eq2 = tok.indexOf("=");
|
|
return eq2 === -1 ? tok : tok.slice(0, eq2);
|
|
}
|
|
|
|
// src/parser/reserved-flags.ts
|
|
var RESERVED_FLAGS = [
|
|
{ name: "--vidbee-api", kind: "value" },
|
|
{ name: "--vidbee-local", kind: "switch" },
|
|
{ name: "--vidbee-target", kind: "value" },
|
|
{ name: "--vidbee-json", kind: "switch" },
|
|
{ name: "--vidbee-pretty", kind: "switch" },
|
|
{ name: "--vidbee-wait", kind: "switch" },
|
|
{ name: "--vidbee-detach", kind: "switch" },
|
|
{ name: "--vidbee-priority", kind: "value" },
|
|
{ name: "--vidbee-max-attempts", kind: "value" },
|
|
{ name: "--vidbee-no-retry", kind: "switch" },
|
|
{ name: "--vidbee-group-key", kind: "value" },
|
|
{ name: "--vidbee-timeout", kind: "value" },
|
|
{ name: "--vidbee-no-autostart", kind: "switch" },
|
|
{ name: "--vidbee-token", kind: "value" }
|
|
];
|
|
var RESERVED_BY_NAME = new Map(
|
|
RESERVED_FLAGS.map((f) => [f.name, f])
|
|
);
|
|
function findReservedFlag(name) {
|
|
return RESERVED_BY_NAME.get(name);
|
|
}
|
|
function isVidbeePrefixed(tok) {
|
|
return tok.startsWith("--vidb");
|
|
}
|
|
|
|
// src/parser/index.ts
|
|
var ParseError = class extends Error {
|
|
exitCode;
|
|
code;
|
|
constructor(code, message) {
|
|
super(message);
|
|
this.code = code;
|
|
this.exitCode = 2;
|
|
}
|
|
};
|
|
var PRIORITY_VALUES = /* @__PURE__ */ new Set([
|
|
"user",
|
|
"subscription",
|
|
"background"
|
|
]);
|
|
var TARGET_VALUES = /* @__PURE__ */ new Set(["desktop", "api", "local"]);
|
|
function parseArgv(argv) {
|
|
const flags = defaultFlags();
|
|
const yt = [];
|
|
let subcommand = null;
|
|
let passthroughOnly = false;
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const tok = argv[i];
|
|
if (tok === void 0) continue;
|
|
if (passthroughOnly) {
|
|
yt.push(tok);
|
|
continue;
|
|
}
|
|
if (tok === "--") {
|
|
passthroughOnly = true;
|
|
yt.push(tok);
|
|
continue;
|
|
}
|
|
if (subcommand === null && tok.startsWith(":") && tok.length > 1) {
|
|
subcommand = tok.slice(1);
|
|
const subArgs = argv.slice(i + 1).filter((s) => typeof s === "string");
|
|
return { kind: "subcommand", flags, subcommand, subArgs };
|
|
}
|
|
if (isVidbeePrefixed(tok)) {
|
|
const eq2 = tok.indexOf("=");
|
|
const name = eq2 === -1 ? tok : tok.slice(0, eq2);
|
|
const inlineValue = eq2 === -1 ? null : tok.slice(eq2 + 1);
|
|
const def = findReservedFlag(name);
|
|
if (!def) {
|
|
throw new ParseError(
|
|
"UNKNOWN_VIDBEE_FLAG",
|
|
`unknown VidBee flag: ${name}`
|
|
);
|
|
}
|
|
const consumed = consumeReserved(flags, def, argv, i, inlineValue);
|
|
i += consumed;
|
|
continue;
|
|
}
|
|
yt.push(tok);
|
|
}
|
|
if (subcommand !== null) {
|
|
return { kind: "subcommand", flags, subcommand, subArgs: [] };
|
|
}
|
|
const probeFlag = findProbeFlag(yt);
|
|
const mode = probeFlag === null ? "download" : "probe";
|
|
if (mode === "download" && hasStdoutOutput(yt)) {
|
|
throw new ParseError(
|
|
"STDOUT_OUTPUT_DISALLOWED",
|
|
"-o - is only allowed in probe mode"
|
|
);
|
|
}
|
|
return { kind: "ytdlp", flags, mode, ytArgs: yt, probeFlag };
|
|
}
|
|
function defaultFlags() {
|
|
return {
|
|
local: false,
|
|
json: true,
|
|
pretty: false,
|
|
wait: false,
|
|
detach: false,
|
|
noRetry: false,
|
|
noAutostart: false
|
|
};
|
|
}
|
|
function consumeReserved(flags, def, argv, i, inlineValue) {
|
|
if (def.kind === "switch") {
|
|
if (inlineValue !== null) {
|
|
throw new ParseError(
|
|
"UNEXPECTED_VALUE",
|
|
`${def.name} does not take a value`
|
|
);
|
|
}
|
|
applySwitch(flags, def.name);
|
|
return 0;
|
|
}
|
|
let value2;
|
|
let consumed = 0;
|
|
if (inlineValue !== null) {
|
|
value2 = inlineValue;
|
|
} else {
|
|
const next = argv[i + 1];
|
|
if (next === void 0) {
|
|
throw new ParseError("MISSING_VALUE", `${def.name} requires a value`);
|
|
}
|
|
value2 = next;
|
|
consumed = 1;
|
|
}
|
|
applyValue(flags, def.name, value2);
|
|
return consumed;
|
|
}
|
|
function applySwitch(flags, name) {
|
|
switch (name) {
|
|
case "--vidbee-local":
|
|
flags.local = true;
|
|
break;
|
|
case "--vidbee-json":
|
|
flags.json = true;
|
|
break;
|
|
case "--vidbee-pretty":
|
|
flags.pretty = true;
|
|
break;
|
|
case "--vidbee-wait":
|
|
flags.wait = true;
|
|
break;
|
|
case "--vidbee-detach":
|
|
flags.detach = true;
|
|
break;
|
|
case "--vidbee-no-retry":
|
|
flags.noRetry = true;
|
|
flags.maxAttempts = 0;
|
|
break;
|
|
case "--vidbee-no-autostart":
|
|
flags.noAutostart = true;
|
|
break;
|
|
default:
|
|
throw new ParseError(
|
|
"UNKNOWN_VIDBEE_FLAG",
|
|
`unknown VidBee switch: ${name}`
|
|
);
|
|
}
|
|
}
|
|
function applyValue(flags, name, value2) {
|
|
switch (name) {
|
|
case "--vidbee-api":
|
|
flags.api = value2;
|
|
break;
|
|
case "--vidbee-target":
|
|
if (!TARGET_VALUES.has(value2)) {
|
|
throw new ParseError(
|
|
"INVALID_TARGET",
|
|
`--vidbee-target must be one of desktop|api|local; got ${value2}`
|
|
);
|
|
}
|
|
flags.target = value2;
|
|
break;
|
|
case "--vidbee-priority":
|
|
if (!PRIORITY_VALUES.has(value2)) {
|
|
throw new ParseError(
|
|
"INVALID_PRIORITY",
|
|
`--vidbee-priority must be user|subscription|background; got ${value2}`
|
|
);
|
|
}
|
|
flags.priority = value2;
|
|
break;
|
|
case "--vidbee-max-attempts": {
|
|
const n = Number.parseInt(value2, 10);
|
|
if (!Number.isFinite(n) || n < 0 || `${n}` !== value2) {
|
|
throw new ParseError(
|
|
"INVALID_MAX_ATTEMPTS",
|
|
`--vidbee-max-attempts must be a non-negative integer; got ${value2}`
|
|
);
|
|
}
|
|
flags.maxAttempts = n;
|
|
if (n === 0) flags.noRetry = true;
|
|
break;
|
|
}
|
|
case "--vidbee-group-key":
|
|
flags.groupKey = value2;
|
|
break;
|
|
case "--vidbee-timeout": {
|
|
const n = Number.parseInt(value2, 10);
|
|
if (!Number.isFinite(n) || n <= 0) {
|
|
throw new ParseError(
|
|
"INVALID_TIMEOUT",
|
|
`--vidbee-timeout must be a positive integer (ms); got ${value2}`
|
|
);
|
|
}
|
|
flags.timeoutMs = n;
|
|
break;
|
|
}
|
|
case "--vidbee-token":
|
|
flags.token = value2;
|
|
break;
|
|
default:
|
|
throw new ParseError(
|
|
"UNKNOWN_VIDBEE_FLAG",
|
|
`unknown VidBee value flag: ${name}`
|
|
);
|
|
}
|
|
}
|
|
function hasStdoutOutput(argv) {
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const tok = argv[i];
|
|
if (tok === "-o" || tok === "--output") {
|
|
if (argv[i + 1] === "-") return true;
|
|
} else if (tok === "-o-" || tok === "--output=-" || tok === "-o=-") {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// src/envelope/index.ts
|
|
var ExitCode = {
|
|
/** probe success | detached download enqueue success | wait-mode success */
|
|
OK: 0,
|
|
/** wait-mode terminated non-success (failed | retry-scheduled) */
|
|
WAIT_NON_SUCCESS: 1,
|
|
/** argv parse error (incl. unknown --vidbee-*) */
|
|
ARG_ERROR: 2,
|
|
/** desktop / api unreachable: descriptor missing, conn refused, handshake failed */
|
|
HOST_UNREACHABLE: 3,
|
|
/** auth failure */
|
|
AUTH_FAILED: 4,
|
|
/** internal contract error (schema mismatch, version mismatch) */
|
|
CONTRACT_ERROR: 5
|
|
};
|
|
function renderEnvelope(env, opts = {}) {
|
|
return opts.pretty ? JSON.stringify(env, null, 2) : JSON.stringify(env);
|
|
}
|
|
function exitCodeForError(code) {
|
|
switch (code) {
|
|
case "DESKTOP_NOT_READY":
|
|
case "API_UNREACHABLE":
|
|
case "HANDSHAKE_FAILED":
|
|
return ExitCode.HOST_UNREACHABLE;
|
|
case "AUTH_FAILED":
|
|
case "TOKEN_EXPIRED":
|
|
return ExitCode.AUTH_FAILED;
|
|
case "CONTRACT_VERSION_MISMATCH":
|
|
case "CONTRACT_SCHEMA_MISMATCH":
|
|
return ExitCode.CONTRACT_ERROR;
|
|
case "PROBE_OUTPUT_TOO_LARGE":
|
|
return ExitCode.WAIT_NON_SUCCESS;
|
|
case "NOT_IMPLEMENTED":
|
|
return ExitCode.CONTRACT_ERROR;
|
|
default:
|
|
return ExitCode.ARG_ERROR;
|
|
}
|
|
}
|
|
function errorEnvelope(code, message, details) {
|
|
return details === void 0 ? { ok: false, code, message } : { ok: false, code, message, details };
|
|
}
|
|
|
|
// src/subcommands/index.ts
|
|
async function dispatchSubcommand(subcommand, args, ctx) {
|
|
const path3 = subcommand.split("/").filter(Boolean);
|
|
switch (path3[0]) {
|
|
case "status":
|
|
return ok(await ctx.client.stats());
|
|
case "download":
|
|
return await handleDownload(path3.slice(1), args, ctx);
|
|
case "history":
|
|
return await handleHistory(path3.slice(1), args, ctx);
|
|
case "rss":
|
|
return notImplemented("rss", "NEX-132 owns :rss subcommands");
|
|
default:
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"PARSE_ERROR",
|
|
`unknown subcommand: :${subcommand}`,
|
|
{ subcommand }
|
|
)
|
|
};
|
|
}
|
|
}
|
|
async function handleDownload(rest, args, ctx) {
|
|
const verb = rest[0] ?? args[0];
|
|
const tail = (rest.length > 0 ? args : args.slice(1)).filter(
|
|
(s) => typeof s === "string"
|
|
);
|
|
switch (verb) {
|
|
case "list": {
|
|
const input = parseListArgs(tail);
|
|
return ok(await ctx.client.list(input));
|
|
}
|
|
case "status": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download status <id>", "id");
|
|
return ok(await ctx.client.get(id));
|
|
}
|
|
case "logs": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download logs <id>", "id");
|
|
const task = await ctx.client.get(id);
|
|
const stderrTail = task.lastError?.stderrTail ?? null;
|
|
return ok({ task, logs: { stderrTail } });
|
|
}
|
|
case "cancel": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download cancel <id>", "id");
|
|
if (!ctx.client.cancel) return capabilityError("cancel");
|
|
await ctx.client.cancel(id);
|
|
return ok({ id, status: "cancel-requested" });
|
|
}
|
|
case "pause": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download pause <id> [--reason text]", "id");
|
|
const reason = readNamedArg(tail, "--reason");
|
|
if (!ctx.client.pause) return capabilityError("pause");
|
|
await ctx.client.pause(id, reason);
|
|
return ok({ id, status: "pause-requested" });
|
|
}
|
|
case "resume": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download resume <id>", "id");
|
|
if (!ctx.client.resume) return capabilityError("resume");
|
|
await ctx.client.resume(id);
|
|
return ok({ id, status: "resume-requested" });
|
|
}
|
|
case "retry": {
|
|
const id = tail[0];
|
|
if (!id) return missingArg(":download retry <id>", "id");
|
|
if (!ctx.client.retry) return capabilityError("retry");
|
|
await ctx.client.retry(id);
|
|
return ok({ id, status: "retry-requested" });
|
|
}
|
|
default:
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"PARSE_ERROR",
|
|
`unknown :download verb: ${verb ?? "(missing)"}`
|
|
)
|
|
};
|
|
}
|
|
}
|
|
async function handleHistory(rest, args, ctx) {
|
|
const verb = rest[0] ?? args[0];
|
|
const tail = (rest.length > 0 ? args : args.slice(1)).filter(
|
|
(s) => typeof s === "string"
|
|
);
|
|
switch (verb) {
|
|
case "list": {
|
|
const input = parseListArgs(tail);
|
|
return ok(await ctx.client.list(input));
|
|
}
|
|
case "remove": {
|
|
if (tail.length === 0) return missingArg(":history remove <id...>", "id");
|
|
const removed = [];
|
|
for (const id of tail) {
|
|
await ctx.client.removeFromHistory(id);
|
|
removed.push(id);
|
|
}
|
|
return ok({ removed });
|
|
}
|
|
default:
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"PARSE_ERROR",
|
|
`unknown :history verb: ${verb ?? "(missing)"}`
|
|
)
|
|
};
|
|
}
|
|
}
|
|
var KNOWN_STATUSES = /* @__PURE__ */ new Set([
|
|
"queued",
|
|
"running",
|
|
"processing",
|
|
"paused",
|
|
"retry-scheduled",
|
|
"completed",
|
|
"failed",
|
|
"cancelled"
|
|
]);
|
|
function parseListArgs(args) {
|
|
const input = {};
|
|
for (let i = 0; i < args.length; i++) {
|
|
const tok = args[i];
|
|
if (tok === void 0) continue;
|
|
const eq2 = tok.indexOf("=");
|
|
const name = eq2 === -1 ? tok : tok.slice(0, eq2);
|
|
const inline = eq2 === -1 ? null : tok.slice(eq2 + 1);
|
|
const consume = () => {
|
|
if (inline !== null) return inline;
|
|
const next = args[i + 1];
|
|
if (next === void 0) {
|
|
throw Object.assign(new Error(`${name} requires a value`), {
|
|
code: "MISSING_VALUE"
|
|
});
|
|
}
|
|
i += 1;
|
|
return next;
|
|
};
|
|
switch (name) {
|
|
case "--status": {
|
|
const v = consume();
|
|
if (!KNOWN_STATUSES.has(v)) {
|
|
throw Object.assign(new Error(`unknown status: ${v}`), {
|
|
code: "INVALID_STATUS"
|
|
});
|
|
}
|
|
input.status = v;
|
|
break;
|
|
}
|
|
case "--group":
|
|
case "--group-key":
|
|
input.groupKey = consume();
|
|
break;
|
|
case "--parent":
|
|
input.parentId = consume();
|
|
break;
|
|
case "--limit": {
|
|
const v = consume();
|
|
const n = Number.parseInt(v, 10);
|
|
if (!Number.isFinite(n) || n <= 0) {
|
|
throw Object.assign(new Error(`invalid limit: ${v}`), {
|
|
code: "INVALID_LIMIT"
|
|
});
|
|
}
|
|
input.limit = n;
|
|
break;
|
|
}
|
|
case "--cursor":
|
|
input.cursor = consume();
|
|
break;
|
|
default:
|
|
throw Object.assign(new Error(`unknown flag: ${name}`), {
|
|
code: "UNKNOWN_FLAG"
|
|
});
|
|
}
|
|
}
|
|
return input;
|
|
}
|
|
function ok(value2) {
|
|
return { kind: "value", value: value2 };
|
|
}
|
|
function notImplemented(what, why) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope("NOT_IMPLEMENTED", `${what} not implemented`, {
|
|
reason: why
|
|
})
|
|
};
|
|
}
|
|
function missingArg(usage, argName) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope("PARSE_ERROR", `missing ${argName}; usage: ${usage}`)
|
|
};
|
|
}
|
|
function capabilityError(op) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"CONTRACT_VERSION_MISMATCH",
|
|
`transport does not support ${op}; upgrade Desktop or API host`
|
|
)
|
|
};
|
|
}
|
|
function readNamedArg(args, name) {
|
|
for (let i = 0; i < args.length; i++) {
|
|
const tok = args[i];
|
|
if (tok === void 0) continue;
|
|
if (tok === name) return args[i + 1];
|
|
if (tok.startsWith(`${name}=`)) return tok.slice(name.length + 1);
|
|
}
|
|
return void 0;
|
|
}
|
|
|
|
// src/transport/index.ts
|
|
function validateApiUrl(url2) {
|
|
let parsed;
|
|
try {
|
|
parsed = new URL(url2);
|
|
} catch {
|
|
return errorEnvelope("API_UNREACHABLE", `invalid --vidbee-api URL: ${url2}`);
|
|
}
|
|
if (parsed.protocol === "https:") return null;
|
|
if (parsed.protocol !== "http:") {
|
|
return errorEnvelope(
|
|
"API_UNREACHABLE",
|
|
`unsupported scheme for --vidbee-api: ${parsed.protocol}`
|
|
);
|
|
}
|
|
if (isLoopbackOrPrivateHost(parsed.hostname)) return null;
|
|
return errorEnvelope(
|
|
"API_UNREACHABLE",
|
|
`plaintext HTTP --vidbee-api is only allowed for loopback / private hosts; got ${parsed.hostname}`,
|
|
{ url: url2 }
|
|
);
|
|
}
|
|
function isLoopbackOrPrivateHost(host) {
|
|
const lower = host.toLowerCase();
|
|
if (lower === "localhost") return true;
|
|
if (lower === "::1" || lower === "[::1]") return true;
|
|
const m = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(lower);
|
|
if (m) {
|
|
const a = Number(m[1]);
|
|
const b = Number(m[2]);
|
|
if (a === 127) return true;
|
|
if (a === 10) return true;
|
|
if (a === 192 && b === 168) return true;
|
|
if (a === 172 && b >= 16 && b <= 31) return true;
|
|
if (a === 169 && b === 254) return true;
|
|
return false;
|
|
}
|
|
if (lower.endsWith(".local")) return true;
|
|
return false;
|
|
}
|
|
|
|
// src/transport/automation-client.ts
|
|
var AutomationHttpError = class extends Error {
|
|
status;
|
|
body;
|
|
code;
|
|
constructor(code, status, message, body = "") {
|
|
super(message);
|
|
this.code = code;
|
|
this.status = status;
|
|
this.body = body;
|
|
}
|
|
};
|
|
var AutomationClient = class {
|
|
baseUrl;
|
|
fetchImpl;
|
|
clock;
|
|
requestTimeoutMs;
|
|
expiresAtSlackMs;
|
|
skipHandshake;
|
|
token;
|
|
tokenExpiresAt;
|
|
constructor(opts) {
|
|
this.baseUrl = stripTrailingSlash(opts.baseUrl);
|
|
this.fetchImpl = opts.fetch ?? globalThis.fetch;
|
|
this.clock = opts.clock ?? Date.now;
|
|
this.requestTimeoutMs = opts.requestTimeoutMs ?? 3e4;
|
|
this.expiresAtSlackMs = opts.expiresAtSlackMs ?? 6e4;
|
|
this.skipHandshake = opts.skipHandshake ?? false;
|
|
this.token = opts.token ?? null;
|
|
this.tokenExpiresAt = opts.token ? Number.POSITIVE_INFINITY : null;
|
|
}
|
|
// ───────────── Handshake ─────────────
|
|
async handshake() {
|
|
const res = await this.rawFetch("POST", "/automation/v1/handshake", {});
|
|
if (!res.ok) {
|
|
throw new AutomationHttpError(
|
|
"API_UNREACHABLE",
|
|
res.status,
|
|
`handshake failed: ${res.status} ${res.statusText}`,
|
|
res.bodyText
|
|
);
|
|
}
|
|
const body = res.json;
|
|
if (!body || typeof body.token !== "string" || typeof body.expiresAt !== "number") {
|
|
throw new AutomationHttpError(
|
|
"CONTRACT_ERROR",
|
|
res.status,
|
|
"handshake response missing token/expiresAt",
|
|
res.bodyText
|
|
);
|
|
}
|
|
this.token = body.token;
|
|
this.tokenExpiresAt = body.expiresAt;
|
|
return body;
|
|
}
|
|
async ensureToken() {
|
|
if (this.skipHandshake) {
|
|
if (!this.token) {
|
|
throw new AutomationHttpError(
|
|
"AUTH_FAILED",
|
|
0,
|
|
"skipHandshake set but no token provided"
|
|
);
|
|
}
|
|
return this.token;
|
|
}
|
|
if (this.token && this.tokenExpiresAt !== null) {
|
|
if (this.tokenExpiresAt - this.clock() > this.expiresAtSlackMs) {
|
|
return this.token;
|
|
}
|
|
}
|
|
const res = await this.handshake();
|
|
return res.token;
|
|
}
|
|
// ───────────── ContractClient ─────────────
|
|
async list(input) {
|
|
const body = await this.callPost("list", input);
|
|
return {
|
|
items: Array.isArray(body.tasks) ? body.tasks.map((t) => "task" in t ? t.task : t) : [],
|
|
nextCursor: body.nextCursor ?? null
|
|
};
|
|
}
|
|
async get(id) {
|
|
const body = await this.callPost(
|
|
"get",
|
|
{ id }
|
|
);
|
|
if (!body) {
|
|
throw new AutomationHttpError(
|
|
"CONTRACT_ERROR",
|
|
404,
|
|
`task ${id} not found`
|
|
);
|
|
}
|
|
if ("task" in body) return body.task;
|
|
return body;
|
|
}
|
|
async stats() {
|
|
await this.ensureToken();
|
|
const res = await this.rawFetch("GET", "/automation/v1/stats");
|
|
if (res.status === 401) {
|
|
this.token = null;
|
|
await this.ensureToken();
|
|
const retry = await this.rawFetch("GET", "/automation/v1/stats");
|
|
if (!retry.ok) {
|
|
throw new AutomationHttpError("UNKNOWN", retry.status, "stats failed", retry.bodyText);
|
|
}
|
|
return retry.json;
|
|
}
|
|
if (!res.ok) {
|
|
throw new AutomationHttpError("UNKNOWN", res.status, "stats failed", res.bodyText);
|
|
}
|
|
return res.json;
|
|
}
|
|
async removeFromHistory(id) {
|
|
await this.callPost("removeFromHistory", { id });
|
|
}
|
|
// Phase B writers
|
|
async add(req) {
|
|
const { id } = await this.callPost("add", req);
|
|
const task = await this.get(id);
|
|
return { id, task };
|
|
}
|
|
async cancel(id) {
|
|
await this.callPost("cancel", { id });
|
|
}
|
|
async pause(id, reason) {
|
|
await this.callPost("pause", { id, reason });
|
|
}
|
|
async resume(id) {
|
|
await this.callPost("resume", { id });
|
|
}
|
|
async retry(id) {
|
|
await this.callPost("retry", { id });
|
|
}
|
|
// ───────────── Internals ─────────────
|
|
async callPost(op, body) {
|
|
await this.ensureToken();
|
|
const res = await this.rawFetch("POST", `/automation/v1/${op}`, body);
|
|
if (res.status === 401) {
|
|
this.token = null;
|
|
await this.ensureToken();
|
|
const retry = await this.rawFetch("POST", `/automation/v1/${op}`, body);
|
|
if (!retry.ok) {
|
|
throw httpErrorOf(retry, op);
|
|
}
|
|
return retry.json;
|
|
}
|
|
if (!res.ok) {
|
|
throw httpErrorOf(res, op);
|
|
}
|
|
return res.json;
|
|
}
|
|
async rawFetch(method, path3, body) {
|
|
const ctrl = new AbortController();
|
|
const timer = setTimeout(() => ctrl.abort(), this.requestTimeoutMs);
|
|
try {
|
|
const headers = {
|
|
Accept: "application/json"
|
|
};
|
|
if (this.token) headers.Authorization = `Bearer ${this.token}`;
|
|
if (method === "POST") headers["Content-Type"] = "application/json";
|
|
const init = {
|
|
method,
|
|
headers,
|
|
signal: ctrl.signal
|
|
};
|
|
if (method === "POST") init.body = JSON.stringify(body ?? {});
|
|
const res = await this.fetchImpl(`${this.baseUrl}${path3}`, init);
|
|
const text2 = await res.text();
|
|
let json2 = null;
|
|
if (text2.length > 0) {
|
|
try {
|
|
json2 = JSON.parse(text2);
|
|
} catch {
|
|
}
|
|
}
|
|
return {
|
|
ok: res.ok,
|
|
status: res.status,
|
|
statusText: res.statusText,
|
|
json: json2,
|
|
bodyText: text2
|
|
};
|
|
} catch (err) {
|
|
const cause = err instanceof Error ? err.message : String(err);
|
|
throw new AutomationHttpError(
|
|
"API_UNREACHABLE",
|
|
0,
|
|
`automation request failed: ${cause}`
|
|
);
|
|
} finally {
|
|
clearTimeout(timer);
|
|
}
|
|
}
|
|
};
|
|
function stripTrailingSlash(url2) {
|
|
return url2.endsWith("/") ? url2.slice(0, -1) : url2;
|
|
}
|
|
function httpErrorOf(res, op) {
|
|
if (res.status === 401 || res.status === 403) {
|
|
return new AutomationHttpError(
|
|
"AUTH_FAILED",
|
|
res.status,
|
|
`automation ${op} unauthorized`,
|
|
res.bodyText
|
|
);
|
|
}
|
|
if (res.status === 0) {
|
|
return new AutomationHttpError(
|
|
"API_UNREACHABLE",
|
|
res.status,
|
|
`automation ${op} unreachable`,
|
|
res.bodyText
|
|
);
|
|
}
|
|
return new AutomationHttpError(
|
|
"UNKNOWN",
|
|
res.status,
|
|
`automation ${op} failed: ${res.status} ${res.statusText}`,
|
|
res.bodyText
|
|
);
|
|
}
|
|
|
|
// src/transport/autostart.ts
|
|
import { spawn } from "node:child_process";
|
|
|
|
// src/transport/descriptor.ts
|
|
import { existsSync, readFileSync } from "node:fs";
|
|
import { homedir } from "node:os";
|
|
import { join } from "node:path";
|
|
var DIRNAME = "VidBee";
|
|
var DESCRIPTOR_FILE = "automation.json";
|
|
function resolveDescriptorPath(opts = {}) {
|
|
if (opts.pathOverride) return opts.pathOverride;
|
|
const env = opts.env ?? process.env;
|
|
const envOverride = opts.envOverride !== void 0 ? opts.envOverride : env.VIDBEE_AUTOMATION_DESCRIPTOR?.trim();
|
|
if (envOverride && envOverride.length > 0) return envOverride;
|
|
const platform2 = opts.platform ?? process.platform;
|
|
const home = (opts.homedir ?? homedir)();
|
|
if (platform2 === "darwin") {
|
|
return join(home, "Library", "Application Support", DIRNAME, DESCRIPTOR_FILE);
|
|
}
|
|
if (platform2 === "win32") {
|
|
const appdata = env.APPDATA?.trim();
|
|
const base2 = appdata && appdata.length > 0 ? appdata : join(home, "AppData", "Roaming");
|
|
return join(base2, DIRNAME, DESCRIPTOR_FILE);
|
|
}
|
|
const xdg = env.XDG_CONFIG_HOME?.trim();
|
|
const base = xdg && xdg.length > 0 ? xdg : join(home, ".config");
|
|
return join(base, DIRNAME, DESCRIPTOR_FILE);
|
|
}
|
|
function readDescriptor(opts = {}) {
|
|
const path3 = resolveDescriptorPath(opts);
|
|
const exists2 = opts.exists ?? existsSync;
|
|
const read = opts.readFile ?? ((p) => readFileSync(p, "utf-8"));
|
|
if (!exists2(path3)) {
|
|
return {
|
|
ok: false,
|
|
path: path3,
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
`automation descriptor not found at ${path3}`,
|
|
{ path: path3 }
|
|
)
|
|
};
|
|
}
|
|
let parsed;
|
|
try {
|
|
parsed = JSON.parse(read(path3));
|
|
} catch (err) {
|
|
return {
|
|
ok: false,
|
|
path: path3,
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
`automation descriptor is malformed: ${err instanceof Error ? err.message : err}`,
|
|
{ path: path3 }
|
|
)
|
|
};
|
|
}
|
|
const v = validateDescriptor(parsed);
|
|
if (!v.ok) {
|
|
return {
|
|
ok: false,
|
|
path: path3,
|
|
envelope: errorEnvelope("DESKTOP_NOT_READY", v.reason, { path: path3 })
|
|
};
|
|
}
|
|
return { ok: true, descriptor: v.value, path: path3 };
|
|
}
|
|
function validateDescriptor(value2) {
|
|
if (typeof value2 !== "object" || value2 === null) {
|
|
return { ok: false, reason: "descriptor is not a JSON object" };
|
|
}
|
|
const v = value2;
|
|
if (v.version !== 1) {
|
|
return { ok: false, reason: `unsupported descriptor version: ${String(v.version)}` };
|
|
}
|
|
if (typeof v.host !== "string" || typeof v.port !== "number") {
|
|
return { ok: false, reason: "descriptor missing host/port" };
|
|
}
|
|
if (typeof v.pid !== "number" || typeof v.pidStartedAt !== "number") {
|
|
return { ok: false, reason: "descriptor missing pid/pidStartedAt" };
|
|
}
|
|
return {
|
|
ok: true,
|
|
value: {
|
|
version: 1,
|
|
schemaVersion: typeof v.schemaVersion === "string" ? v.schemaVersion : "1.0.0",
|
|
kind: "desktop",
|
|
host: v.host,
|
|
port: v.port,
|
|
tokenHash: typeof v.tokenHash === "string" ? v.tokenHash : null,
|
|
tokenIssuedAt: typeof v.tokenIssuedAt === "number" ? v.tokenIssuedAt : null,
|
|
tokenExpiresAt: typeof v.tokenExpiresAt === "number" ? v.tokenExpiresAt : null,
|
|
pid: v.pid,
|
|
pidStartedAt: v.pidStartedAt,
|
|
updatedAt: typeof v.updatedAt === "number" ? v.updatedAt : 0,
|
|
appVersion: typeof v.appVersion === "string" ? v.appVersion : "0.0.0"
|
|
}
|
|
};
|
|
}
|
|
function isPidAlive(pid, killProbe = (p, s) => process.kill(p, s)) {
|
|
try {
|
|
killProbe(pid, 0);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// src/transport/autostart.ts
|
|
var defaultDelay = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms));
|
|
async function ensureDesktopReady(enabled, opts = {}) {
|
|
const timeoutMs = opts.timeoutMs ?? 1e4;
|
|
const poll = opts.pollIntervalMs ?? 200;
|
|
const clock = opts.clock ?? Date.now;
|
|
const delay = opts.delay ?? defaultDelay;
|
|
const platform2 = opts.platform ?? process.platform;
|
|
if (descriptorIsReady(opts.descriptorOptions)) return { kind: "ready" };
|
|
if (!enabled) return { kind: "autostart-disabled" };
|
|
const launchSpec = launcherForPlatform(platform2);
|
|
if (!launchSpec) return { kind: "unsupported-platform", platform: platform2 };
|
|
try {
|
|
if (opts.spawnLauncher) {
|
|
opts.spawnLauncher(launchSpec.cmd, launchSpec.args);
|
|
} else {
|
|
const child = spawn(launchSpec.cmd, [...launchSpec.args], {
|
|
stdio: "ignore",
|
|
detached: true,
|
|
windowsHide: true
|
|
});
|
|
child.unref();
|
|
}
|
|
} catch (err) {
|
|
return {
|
|
kind: "launch-failed",
|
|
reason: err instanceof Error ? err.message : String(err)
|
|
};
|
|
}
|
|
const start = clock();
|
|
while (clock() - start < timeoutMs) {
|
|
if (descriptorIsReady(opts.descriptorOptions)) return { kind: "ready" };
|
|
await delay(poll);
|
|
}
|
|
return { kind: "timeout", waitedMs: clock() - start };
|
|
}
|
|
function descriptorIsReady(descriptorOpts) {
|
|
const r = readDescriptor(descriptorOpts ?? {});
|
|
if (!r.ok) return false;
|
|
return isPidAlive(r.descriptor.pid);
|
|
}
|
|
function launcherForPlatform(platform2) {
|
|
if (platform2 === "darwin") {
|
|
return { cmd: "open", args: ["-ga", "VidBee", "--args", "--background", "--from-cli"] };
|
|
}
|
|
if (platform2 === "win32") {
|
|
return {
|
|
cmd: "cmd",
|
|
args: ["/c", "start", '""', "VidBee", "--background", "--from-cli"]
|
|
};
|
|
}
|
|
if (platform2 === "linux") {
|
|
return { cmd: "vidbee-desktop", args: ["--background", "--from-cli"] };
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// src/transport/local-client.ts
|
|
import { mkdtempSync, rmSync } from "node:fs";
|
|
import { createRequire as createRequire3 } from "node:module";
|
|
import { tmpdir, homedir as homedir2 } from "node:os";
|
|
import { join as join2 } from "node:path";
|
|
var require4 = createRequire3(import.meta.url);
|
|
async function createLocalClient(opts = {}) {
|
|
const taskQueue = await Promise.resolve().then(() => (init_src(), src_exports));
|
|
const downloaderCore = await Promise.resolve().then(() => (init_src2(), src_exports2));
|
|
const tqDb = await Promise.resolve().then(() => (init_task_queue(), task_queue_exports));
|
|
const defaultDir = opts.defaultDownloadDir ?? join2(homedir2(), "Downloads", "VidBee");
|
|
let tempDir = null;
|
|
let sqliteDb = null;
|
|
let persistAdapter;
|
|
if ((opts.persist ?? "memory") === "sqlite") {
|
|
tempDir = mkdtempSync(join2(tmpdir(), "vidbee-cli-"));
|
|
const dbPath = opts.sqlitePath ?? join2(tempDir, "task-queue.db");
|
|
const Database = require4("better-sqlite3");
|
|
const db = new Database(dbPath, { timeout: 5e3 });
|
|
db.exec(tqDb.TASK_QUEUE_DDL_V1);
|
|
sqliteDb = db;
|
|
persistAdapter = new taskQueue.SqlitePersistAdapter({
|
|
db
|
|
});
|
|
} else {
|
|
persistAdapter = new taskQueue.MemoryPersistAdapter();
|
|
}
|
|
const executor = opts.executor ?? new downloaderCore.YtDlpExecutor({
|
|
resolveYtDlpPath: () => opts.ytDlpPath ?? process.env.YTDLP_PATH ?? "yt-dlp",
|
|
resolveFfmpegLocation: () => opts.ffmpegLocation ?? process.env.FFMPEG_PATH,
|
|
defaultDownloadDir: defaultDir
|
|
});
|
|
const api = new taskQueue.TaskQueueAPI({
|
|
persist: persistAdapter,
|
|
executor,
|
|
maxConcurrency: opts.maxConcurrency ?? 4,
|
|
...opts.filePresent !== void 0 ? { filePresent: opts.filePresent } : {},
|
|
...opts.rng !== void 0 ? { rng: opts.rng } : {}
|
|
});
|
|
await api.start();
|
|
let shuttingDown = false;
|
|
const shutdown = async () => {
|
|
if (shuttingDown) return;
|
|
shuttingDown = true;
|
|
try {
|
|
await api.stop();
|
|
} catch {
|
|
}
|
|
if (sqliteDb) {
|
|
try {
|
|
sqliteDb.close();
|
|
} catch {
|
|
}
|
|
}
|
|
if (tempDir) {
|
|
try {
|
|
rmSync(tempDir, { recursive: true, force: true });
|
|
} catch {
|
|
}
|
|
}
|
|
};
|
|
const list = async (input) => {
|
|
const opts2 = {
|
|
cursor: input.cursor ?? null
|
|
};
|
|
if (input.status !== void 0) opts2.status = input.status;
|
|
if (input.groupKey !== void 0) opts2.groupKey = input.groupKey;
|
|
if (input.parentId !== void 0) opts2.parentId = input.parentId;
|
|
if (input.limit !== void 0) opts2.limit = input.limit;
|
|
const page = api.list(opts2);
|
|
return { items: [...page.tasks], nextCursor: page.nextCursor ?? null };
|
|
};
|
|
return {
|
|
api,
|
|
shutdown,
|
|
list,
|
|
get: async (id) => {
|
|
const task = api.get(id);
|
|
if (!task) throw new Error(`task ${id} not found`);
|
|
return task;
|
|
},
|
|
stats: async () => api.stats(),
|
|
removeFromHistory: async (id) => {
|
|
await api.removeFromHistory(id);
|
|
},
|
|
add: async (req) => {
|
|
const { id } = await api.add(req);
|
|
const task = api.get(id);
|
|
if (!task) throw new Error(`add() did not produce a task with id ${id}`);
|
|
return { id, task };
|
|
},
|
|
cancel: async (id) => {
|
|
await api.cancel(id);
|
|
},
|
|
pause: async (id, reason) => {
|
|
await api.pause(id, reason);
|
|
},
|
|
resume: async (id) => {
|
|
await api.resume(id);
|
|
},
|
|
retry: async (id) => {
|
|
await api.retryManual(id);
|
|
}
|
|
};
|
|
}
|
|
|
|
// src/transport/connect.ts
|
|
async function connect(opts) {
|
|
const { flags } = opts;
|
|
if (flags.local || flags.target === "local") {
|
|
const factory = opts.createLocalClientImpl ?? createLocalClient;
|
|
try {
|
|
const handle = await factory({});
|
|
return { kind: "connected", client: handle, teardown: handle.shutdown };
|
|
} catch (err) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"NOT_IMPLEMENTED",
|
|
`--vidbee-local failed to start: ${err instanceof Error ? err.message : err}`
|
|
)
|
|
};
|
|
}
|
|
}
|
|
if (flags.api !== void 0 || flags.target === "api") {
|
|
const url2 = flags.api;
|
|
if (!url2) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"API_UNREACHABLE",
|
|
"--vidbee-target api requires --vidbee-api <url>"
|
|
)
|
|
};
|
|
}
|
|
const builder = opts.buildAutomationClient ?? defaultAutomationBuilder;
|
|
const client = builder(url2, flags.token ?? null);
|
|
return { kind: "connected", client };
|
|
}
|
|
return await connectDesktop(opts);
|
|
}
|
|
async function connectDesktop(opts) {
|
|
const { flags } = opts;
|
|
const readImpl = opts.readDescriptorImpl ?? readDescriptor;
|
|
const ensureImpl = opts.ensureDesktopReadyImpl ?? ensureDesktopReady;
|
|
let descriptor = readImpl({});
|
|
let needsAutostart = false;
|
|
if (!descriptor.ok) {
|
|
needsAutostart = true;
|
|
} else if (!isPidAlive(descriptor.descriptor.pid)) {
|
|
needsAutostart = true;
|
|
}
|
|
if (needsAutostart) {
|
|
const result = await ensureImpl(!flags.noAutostart, {
|
|
...flags.timeoutMs !== void 0 ? { timeoutMs: flags.timeoutMs } : {}
|
|
});
|
|
if (result.kind === "autostart-disabled") {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
"Desktop is not running and --vidbee-no-autostart was set"
|
|
)
|
|
};
|
|
}
|
|
if (result.kind === "unsupported-platform") {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
`autostart not supported on platform ${result.platform}; pass --vidbee-api or run Desktop manually`
|
|
)
|
|
};
|
|
}
|
|
if (result.kind === "launch-failed") {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
`failed to launch Desktop: ${result.reason}`
|
|
)
|
|
};
|
|
}
|
|
if (result.kind === "timeout") {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"DESKTOP_NOT_READY",
|
|
`Desktop did not become ready within ${result.waitedMs}ms`
|
|
)
|
|
};
|
|
}
|
|
descriptor = readImpl({});
|
|
if (!descriptor.ok) return { kind: "error", envelope: descriptor.envelope };
|
|
}
|
|
if (!descriptor.ok) return { kind: "error", envelope: descriptor.envelope };
|
|
const baseUrl = `http://${descriptor.descriptor.host}:${descriptor.descriptor.port}`;
|
|
const builder = opts.buildAutomationClient ?? defaultAutomationBuilder;
|
|
const client = builder(baseUrl, flags.token ?? null);
|
|
return { kind: "connected", client };
|
|
}
|
|
function defaultAutomationBuilder(baseUrl, token) {
|
|
if (token) {
|
|
return new AutomationClient({ baseUrl, token, skipHandshake: true });
|
|
}
|
|
return new AutomationClient({ baseUrl });
|
|
}
|
|
|
|
// src/parser/redact.ts
|
|
var REDACTED = "<redacted>";
|
|
var VALUE_FLAGS_FULL = /* @__PURE__ */ new Set([
|
|
"--username",
|
|
"--password",
|
|
"--video-password",
|
|
"--ap-password",
|
|
"--twofactor",
|
|
"--ap-username"
|
|
]);
|
|
var HEADER_FLAGS = /* @__PURE__ */ new Set(["--add-headers", "--add-header"]);
|
|
var SENSITIVE_HEADER_NAMES = /* @__PURE__ */ new Set([
|
|
"authorization",
|
|
"cookie",
|
|
"set-cookie",
|
|
"token",
|
|
"x-token",
|
|
"bearer",
|
|
"x-auth",
|
|
"x-auth-token",
|
|
"proxy-authorization"
|
|
]);
|
|
var SENSITIVE_QUERY_KEYS = /* @__PURE__ */ new Set([
|
|
"token",
|
|
"access_token",
|
|
"auth_token",
|
|
"id_token",
|
|
"signature",
|
|
"sig",
|
|
"policy",
|
|
"key",
|
|
"secret",
|
|
"apikey",
|
|
"api_key",
|
|
"password",
|
|
"pass",
|
|
"pwd"
|
|
]);
|
|
function redactArgs(args) {
|
|
const out = [];
|
|
let redacted = false;
|
|
for (let i = 0; i < args.length; i++) {
|
|
const tok = args[i];
|
|
if (tok === void 0) continue;
|
|
const eq2 = tok.indexOf("=");
|
|
const head = eq2 === -1 ? tok : tok.slice(0, eq2);
|
|
const inline = eq2 === -1 ? null : tok.slice(eq2 + 1);
|
|
if (VALUE_FLAGS_FULL.has(head)) {
|
|
if (inline !== null) {
|
|
out.push(`${head}=${REDACTED}`);
|
|
redacted = true;
|
|
} else {
|
|
out.push(head);
|
|
if (i + 1 < args.length) {
|
|
out.push(REDACTED);
|
|
redacted = true;
|
|
i += 1;
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
if (HEADER_FLAGS.has(head)) {
|
|
const consumed = handleHeader(head, inline, args, i, out);
|
|
if (consumed.redacted) redacted = true;
|
|
i += consumed.skip;
|
|
continue;
|
|
}
|
|
if (looksLikeUrl(tok)) {
|
|
const scrubbed = scrubUrl(tok);
|
|
if (scrubbed.changed) redacted = true;
|
|
out.push(scrubbed.value);
|
|
continue;
|
|
}
|
|
out.push(tok);
|
|
}
|
|
return { args: out, summary: { redacted } };
|
|
}
|
|
function redactText(text2) {
|
|
let out = text2;
|
|
out = out.replace(/(authorization|cookie|x-auth-token|bearer)\s*:\s*[^\n\r]+/gi, (m, name) => {
|
|
return `${name}: ${REDACTED}`;
|
|
});
|
|
out = out.replace(/\bhttps?:\/\/[^\s'"]+/g, (url2) => scrubUrl(url2).value);
|
|
return out;
|
|
}
|
|
function handleHeader(head, inline, args, i, out) {
|
|
let value2;
|
|
let skip = 0;
|
|
if (inline !== null) {
|
|
value2 = inline;
|
|
} else if (i + 1 < args.length) {
|
|
value2 = args[i + 1] ?? null;
|
|
skip = 1;
|
|
} else {
|
|
out.push(head);
|
|
return { skip: 0, redacted: false };
|
|
}
|
|
if (value2 === null) {
|
|
out.push(head);
|
|
return { skip: 0, redacted: false };
|
|
}
|
|
const colon = value2.indexOf(":");
|
|
if (colon === -1) {
|
|
if (inline !== null) out.push(`${head}=${value2}`);
|
|
else {
|
|
out.push(head);
|
|
out.push(value2);
|
|
}
|
|
return { skip, redacted: false };
|
|
}
|
|
const name = value2.slice(0, colon).trim().toLowerCase();
|
|
const rendered = SENSITIVE_HEADER_NAMES.has(name) ? `${value2.slice(0, colon)}: ${REDACTED}` : value2;
|
|
const changed = rendered !== value2;
|
|
if (inline !== null) out.push(`${head}=${rendered}`);
|
|
else {
|
|
out.push(head);
|
|
out.push(rendered);
|
|
}
|
|
return { skip, redacted: changed };
|
|
}
|
|
function looksLikeUrl(tok) {
|
|
return /^https?:\/\//i.test(tok);
|
|
}
|
|
function scrubUrl(raw) {
|
|
let url2;
|
|
try {
|
|
url2 = new URL(raw);
|
|
} catch {
|
|
return { value: raw, changed: false };
|
|
}
|
|
let changed = false;
|
|
for (const key of Array.from(url2.searchParams.keys())) {
|
|
if (SENSITIVE_QUERY_KEYS.has(key.toLowerCase())) {
|
|
url2.searchParams.set(key, REDACTED);
|
|
changed = true;
|
|
}
|
|
}
|
|
return { value: changed ? url2.toString() : raw, changed };
|
|
}
|
|
|
|
// src/download/build-input.ts
|
|
var URL_REGEX = /^https?:\/\//i;
|
|
function buildForwardedInput(opts) {
|
|
const { args: sanitizedArgs, summary } = redactArgs(opts.argv);
|
|
const url2 = guessUrl(opts.argv) ?? "";
|
|
const outputHints = parseOutputHints(opts.argv);
|
|
const commandPreview = formatCommand(sanitizedArgs);
|
|
const kind = "yt-dlp-forward";
|
|
const input = {
|
|
url: url2,
|
|
kind,
|
|
rawArgs: [...opts.argv],
|
|
options: {
|
|
source: "cli",
|
|
sanitizedArgs,
|
|
commandPreview,
|
|
outputHints,
|
|
vidbee: {
|
|
wait: opts.flags.wait,
|
|
...opts.flags.maxAttempts !== void 0 && {
|
|
maxAttempts: opts.flags.maxAttempts
|
|
},
|
|
...opts.flags.priority && { priority: opts.flags.priority },
|
|
...opts.flags.groupKey !== void 0 && { groupKey: opts.flags.groupKey }
|
|
}
|
|
}
|
|
};
|
|
return { input, commandPreview, redacted: summary.redacted };
|
|
}
|
|
function formatCommand(argv) {
|
|
return ["yt-dlp", ...argv].map((tok) => needsShellQuote(tok) ? quote(tok) : tok).join(" ");
|
|
}
|
|
function needsShellQuote(tok) {
|
|
return /[\s'"\\$`]/.test(tok);
|
|
}
|
|
function quote(tok) {
|
|
return `'${tok.replace(/'/g, "'\\''")}'`;
|
|
}
|
|
function guessUrl(argv) {
|
|
let last = null;
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const tok = argv[i];
|
|
if (!tok || tok.startsWith("-")) continue;
|
|
const prev = argv[i - 1];
|
|
if (prev !== void 0 && prev.startsWith("-") && consumesValue(prev)) continue;
|
|
if (URL_REGEX.test(tok)) last = tok;
|
|
}
|
|
return last;
|
|
}
|
|
var VALUE_CONSUMING_FLAGS = /* @__PURE__ */ new Set([
|
|
"-f",
|
|
"--format",
|
|
"-o",
|
|
"--output",
|
|
"--cookies",
|
|
"--cookies-from-browser",
|
|
"--proxy",
|
|
"--user-agent",
|
|
"--referer",
|
|
"--sleep-interval",
|
|
"-r",
|
|
"--limit-rate",
|
|
"--retries",
|
|
"--fragment-retries",
|
|
"--retry-sleep",
|
|
"-N",
|
|
"--concurrent-fragments",
|
|
"--throttled-rate",
|
|
"--add-headers",
|
|
"--add-header",
|
|
"--config-location",
|
|
"--paths",
|
|
"-P",
|
|
"--ffmpeg-location",
|
|
"--postprocessor-args",
|
|
"--user-agent",
|
|
"--print",
|
|
"--username",
|
|
"--password",
|
|
"--video-password",
|
|
"--ap-password",
|
|
"--twofactor",
|
|
"--audio-format",
|
|
"--audio-quality",
|
|
"--merge-output-format",
|
|
"--remux-video",
|
|
"--recode-video",
|
|
"--container"
|
|
]);
|
|
function consumesValue(flag) {
|
|
if (flag.includes("=")) return false;
|
|
return VALUE_CONSUMING_FLAGS.has(flag);
|
|
}
|
|
function parseOutputHints(argv) {
|
|
let outputTemplate;
|
|
const paths = [];
|
|
let stdoutMode = false;
|
|
for (let i = 0; i < argv.length; i++) {
|
|
const tok = argv[i];
|
|
if (tok === void 0) continue;
|
|
if (tok === "-o" || tok === "--output") {
|
|
const v = argv[i + 1];
|
|
if (v === "-") stdoutMode = true;
|
|
else if (v) outputTemplate = v;
|
|
continue;
|
|
}
|
|
if (tok === "-o-" || tok === "-o=-" || tok === "--output=-") {
|
|
stdoutMode = true;
|
|
continue;
|
|
}
|
|
if (tok.startsWith("-o=")) {
|
|
outputTemplate = tok.slice(3);
|
|
continue;
|
|
}
|
|
if (tok.startsWith("--output=")) {
|
|
outputTemplate = tok.slice("--output=".length);
|
|
continue;
|
|
}
|
|
if (tok === "-P" || tok === "--paths") {
|
|
const v = argv[i + 1];
|
|
if (v) paths.push(v);
|
|
}
|
|
}
|
|
const out = {};
|
|
if (outputTemplate !== void 0) out.outputTemplate = outputTemplate;
|
|
if (paths.length > 0) out.paths = paths;
|
|
if (stdoutMode) out.stdoutMode = true;
|
|
return out;
|
|
}
|
|
|
|
// src/download/enqueue.ts
|
|
init_src();
|
|
var defaultDelay2 = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
async function enqueueDownload(opts) {
|
|
if (!opts.client.add) {
|
|
throw new Error("transport does not support add()");
|
|
}
|
|
const created = await opts.client.add(opts.request);
|
|
let task = created.task;
|
|
if (!opts.wait) return { kind: "detached", task };
|
|
const clock = opts.clock ?? Date.now;
|
|
const delay = opts.delay ?? defaultDelay2;
|
|
const fast = opts.pollFastMs ?? 200;
|
|
const slow = opts.pollSlowMs ?? 1e3;
|
|
const start = clock();
|
|
const budget = opts.waitTimeoutMs ?? null;
|
|
while (true) {
|
|
if (TERMINAL_STATUSES.has(task.status)) {
|
|
return task.status === "completed" ? { kind: "wait-success", task } : { kind: "wait-non-success", task, reason: task.status };
|
|
}
|
|
if (task.status === "retry-scheduled" || task.status === "paused") {
|
|
return { kind: "wait-non-success", task, reason: task.status };
|
|
}
|
|
if (budget !== null && clock() - start >= budget) {
|
|
return { kind: "wait-non-success", task, reason: "timeout" };
|
|
}
|
|
const interval = task.status === "queued" ? slow : fast;
|
|
await delay(interval);
|
|
task = await opts.client.get(task.id);
|
|
}
|
|
}
|
|
|
|
// src/download/probe.ts
|
|
import { spawn as spawn2 } from "node:child_process";
|
|
var DEFAULT_STDOUT_MAX = 32 * 1024 * 1024;
|
|
var DEFAULT_STDERR_TAIL = 64 * 1024;
|
|
async function runProbe(opts) {
|
|
const binary = opts.ytDlpPath ?? resolveYtDlpBinary();
|
|
const stdoutMax = opts.stdoutMaxBytes ?? DEFAULT_STDOUT_MAX;
|
|
const stderrTail = opts.stderrTailBytes ?? DEFAULT_STDERR_TAIL;
|
|
const spawner = opts.spawner ?? defaultSpawner;
|
|
let handle;
|
|
try {
|
|
handle = spawner(binary, opts.argv);
|
|
} catch (err) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"NOT_IMPLEMENTED",
|
|
`failed to spawn yt-dlp at ${binary}: ${err instanceof Error ? err.message : err}`
|
|
)
|
|
};
|
|
}
|
|
let stdoutBytes = 0;
|
|
let stdoutOverflow = false;
|
|
const stdoutChunks = [];
|
|
const stderrTailBuf = createTailBuffer2(stderrTail);
|
|
handle.stdout.on("data", (chunk) => {
|
|
if (stdoutOverflow) return;
|
|
if (stdoutBytes + chunk.byteLength > stdoutMax) {
|
|
stdoutOverflow = true;
|
|
handle.kill("SIGTERM");
|
|
return;
|
|
}
|
|
stdoutBytes += chunk.byteLength;
|
|
stdoutChunks.push(chunk);
|
|
});
|
|
handle.stderr.on("data", (chunk) => {
|
|
stderrTailBuf.push(chunk);
|
|
});
|
|
return new Promise((resolve2) => {
|
|
let settled = false;
|
|
handle.on("error", (err) => {
|
|
if (settled) return;
|
|
settled = true;
|
|
resolve2({
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"NOT_IMPLEMENTED",
|
|
`yt-dlp spawn error: ${err.message}`
|
|
)
|
|
});
|
|
});
|
|
handle.on("close", (code) => {
|
|
if (settled) return;
|
|
settled = true;
|
|
if (stdoutOverflow) {
|
|
resolve2({
|
|
kind: "error",
|
|
envelope: errorEnvelope(
|
|
"PROBE_OUTPUT_TOO_LARGE",
|
|
`probe stdout exceeded ${stdoutMax} bytes`
|
|
)
|
|
});
|
|
return;
|
|
}
|
|
const stdout = Buffer.concat(stdoutChunks).toString("utf-8");
|
|
resolve2({
|
|
kind: "success",
|
|
stdout,
|
|
stderr: stderrTailBuf.read().toString("utf-8"),
|
|
exitCode: code ?? -1,
|
|
binary
|
|
});
|
|
});
|
|
});
|
|
}
|
|
function resolveYtDlpBinary() {
|
|
const env = process.env.YTDLP_PATH?.trim();
|
|
return env && env.length > 0 ? env : "yt-dlp";
|
|
}
|
|
function defaultSpawner(binary, args) {
|
|
const child = spawn2(binary, [...args], { stdio: ["ignore", "pipe", "pipe"] });
|
|
return {
|
|
stdout: child.stdout,
|
|
stderr: child.stderr,
|
|
on: (ev, l) => {
|
|
child.on(ev, l);
|
|
},
|
|
kill: (signal) => {
|
|
try {
|
|
child.kill(signal);
|
|
} catch {
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function createTailBuffer2(maxBytes) {
|
|
let buf = Buffer.alloc(0);
|
|
return {
|
|
push(chunk) {
|
|
const merged = Buffer.concat([buf, chunk]);
|
|
buf = merged.byteLength > maxBytes ? merged.subarray(merged.byteLength - maxBytes) : merged;
|
|
},
|
|
read: () => buf
|
|
};
|
|
}
|
|
|
|
// src/local-info/version.ts
|
|
import { readFileSync as readFileSync3 } from "node:fs";
|
|
import { dirname, resolve } from "node:path";
|
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
var FALLBACK_VERSION = "0.0.0-dev";
|
|
function readCliVersion(candidatePaths = defaultCandidatePaths()) {
|
|
for (const p of candidatePaths) {
|
|
try {
|
|
const pkg = JSON.parse(readFileSync3(p, "utf-8"));
|
|
if (pkg.name === "@vidbee/cli" && typeof pkg.version === "string") {
|
|
return {
|
|
cli: pkg.version,
|
|
contract: pkg.version,
|
|
changelog: "https://github.com/nexmoe/vidbee/blob/main/apps/cli/CHANGELOG.md"
|
|
};
|
|
}
|
|
} catch {
|
|
}
|
|
}
|
|
return {
|
|
cli: FALLBACK_VERSION,
|
|
contract: FALLBACK_VERSION,
|
|
changelog: "https://github.com/nexmoe/vidbee/blob/main/apps/cli/CHANGELOG.md"
|
|
};
|
|
}
|
|
function defaultCandidatePaths() {
|
|
let here;
|
|
try {
|
|
here = fileURLToPath2(import.meta.url);
|
|
} catch {
|
|
return [];
|
|
}
|
|
const dir = dirname(here);
|
|
return [
|
|
resolve(dir, "..", "package.json"),
|
|
resolve(dir, "..", "..", "package.json"),
|
|
resolve(dir, "..", "..", "..", "package.json")
|
|
];
|
|
}
|
|
|
|
// src/local-info/upgrade.ts
|
|
import { mkdirSync, readFileSync as readFileSync4, writeFileSync } from "node:fs";
|
|
import { homedir as homedir3, platform } from "node:os";
|
|
import { dirname as dirname2, join as join3 } from "node:path";
|
|
var CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
var REGISTRY_URL = "https://registry.npmjs.org/@vidbee/cli/latest";
|
|
var FETCH_TIMEOUT_MS = 5e3;
|
|
async function checkUpgrade(input) {
|
|
const now = input.now ?? Date.now;
|
|
const cachePath = input.cachePath ?? defaultCachePath();
|
|
const fetcher = input.fetchLatest ?? defaultFetchLatest;
|
|
let cachedAt = null;
|
|
let latest = null;
|
|
if (!input.force) {
|
|
const cached2 = readCache(cachePath);
|
|
if (cached2 && now() - cached2.fetchedAt < CACHE_TTL_MS) {
|
|
latest = cached2.version;
|
|
cachedAt = cached2.fetchedAt;
|
|
}
|
|
}
|
|
let cachedFlag = latest !== null;
|
|
if (latest === null) {
|
|
const fetched = await fetcher();
|
|
latest = fetched.version;
|
|
cachedAt = fetched.fetchedAt;
|
|
cachedFlag = false;
|
|
writeCache(cachePath, { version: latest, fetchedAt: cachedAt });
|
|
}
|
|
const upToDate = compareSemver(input.current, latest) >= 0;
|
|
return {
|
|
current: input.current,
|
|
latest,
|
|
upToDate,
|
|
cached: cachedFlag,
|
|
cachedAt: cachedAt === null ? null : new Date(cachedAt).toISOString(),
|
|
registryUrl: REGISTRY_URL,
|
|
installCommands: {
|
|
npm: "npm install -g @vidbee/cli",
|
|
pnpm: "pnpm add -g @vidbee/cli",
|
|
bun: "bun install -g @vidbee/cli",
|
|
brew: "brew upgrade vidbee/tap/vidbee"
|
|
}
|
|
};
|
|
}
|
|
async function defaultFetchLatest() {
|
|
const ctrl = new AbortController();
|
|
const timer = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);
|
|
try {
|
|
const res = await fetch(REGISTRY_URL, {
|
|
headers: { accept: "application/json" },
|
|
signal: ctrl.signal
|
|
});
|
|
if (!res.ok) {
|
|
throw new Error(`registry responded ${res.status}`);
|
|
}
|
|
const body = await res.json();
|
|
if (typeof body.version !== "string") {
|
|
throw new Error("registry response missing `version`");
|
|
}
|
|
return { version: body.version, fetchedAt: Date.now() };
|
|
} finally {
|
|
clearTimeout(timer);
|
|
}
|
|
}
|
|
function readCache(path3) {
|
|
try {
|
|
const raw = readFileSync4(path3, "utf-8");
|
|
const parsed = JSON.parse(raw);
|
|
if (typeof parsed.version === "string" && typeof parsed.fetchedAt === "number") {
|
|
return { version: parsed.version, fetchedAt: parsed.fetchedAt };
|
|
}
|
|
} catch {
|
|
}
|
|
return null;
|
|
}
|
|
function writeCache(path3, payload) {
|
|
try {
|
|
mkdirSync(dirname2(path3), { recursive: true });
|
|
writeFileSync(path3, JSON.stringify(payload), "utf-8");
|
|
} catch {
|
|
}
|
|
}
|
|
function defaultCachePath() {
|
|
const home = homedir3();
|
|
if (platform() === "win32") {
|
|
const localAppData = process.env.LOCALAPPDATA ?? join3(home, "AppData", "Local");
|
|
return join3(localAppData, "VidBee", "cli-upgrade-check.json");
|
|
}
|
|
if (platform() === "darwin") {
|
|
return join3(home, "Library", "Caches", "VidBee", "cli-upgrade-check.json");
|
|
}
|
|
const xdg = process.env.XDG_CACHE_HOME ?? join3(home, ".cache");
|
|
return join3(xdg, "vidbee", "cli-upgrade-check.json");
|
|
}
|
|
function compareSemver(a, b) {
|
|
const [aMain = "", aPre = ""] = a.split("-", 2);
|
|
const [bMain = "", bPre = ""] = b.split("-", 2);
|
|
const aParts = aMain.split(".").map((p) => Number.parseInt(p, 10) || 0);
|
|
const bParts = bMain.split(".").map((p) => Number.parseInt(p, 10) || 0);
|
|
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
const av = aParts[i] ?? 0;
|
|
const bv = bParts[i] ?? 0;
|
|
if (av !== bv) return av - bv;
|
|
}
|
|
if (aPre === bPre) return 0;
|
|
if (aPre === "") return 1;
|
|
if (bPre === "") return -1;
|
|
return aPre < bPre ? -1 : 1;
|
|
}
|
|
|
|
// src/runtime.ts
|
|
async function run(argv, io) {
|
|
let parsed;
|
|
try {
|
|
parsed = parseArgv(argv);
|
|
} catch (err) {
|
|
if (err instanceof ParseError) {
|
|
const env = errorEnvelope(coerceErrorCode(err.code), err.message);
|
|
return emit(io, env, false, ExitCode.ARG_ERROR);
|
|
}
|
|
throw err;
|
|
}
|
|
const pretty = parsed.flags.pretty;
|
|
if (parsed.flags.api !== void 0) {
|
|
const bad = validateApiUrl(parsed.flags.api);
|
|
if (bad) return emit(io, bad, pretty, ExitCode.HOST_UNREACHABLE);
|
|
}
|
|
const connectImpl = io.connect ?? connect;
|
|
if (parsed.kind === "ytdlp") {
|
|
if (parsed.mode === "probe") {
|
|
return await runProbeMode(parsed, io, pretty);
|
|
}
|
|
return await runDownloadMode(parsed, io, pretty, connectImpl);
|
|
}
|
|
if (parsed.subcommand === "version" || parsed.subcommand === "upgrade") {
|
|
return await runLocalSubcommand(parsed.subcommand, parsed.subArgs, io, pretty);
|
|
}
|
|
const conn = await connectImpl({ flags: parsed.flags });
|
|
if (conn.kind === "error") {
|
|
return emit(io, conn.envelope, pretty, exitCodeForError(conn.envelope.code));
|
|
}
|
|
const ctx = { client: conn.client };
|
|
try {
|
|
const result = await dispatchSubcommand(parsed.subcommand, parsed.subArgs, ctx);
|
|
if (result.kind === "error") {
|
|
return emit(io, result.envelope, pretty, exitCodeForError(result.envelope.code));
|
|
}
|
|
const env = {
|
|
ok: true,
|
|
mode: "subcommand",
|
|
subcommand: parsed.subcommand,
|
|
result: result.value
|
|
};
|
|
return emit(io, env, pretty, ExitCode.OK);
|
|
} catch (err) {
|
|
const env = errorEnvelope(
|
|
"UNKNOWN_ERROR",
|
|
err instanceof Error ? err.message : String(err)
|
|
);
|
|
return emit(io, env, pretty, ExitCode.ARG_ERROR);
|
|
} finally {
|
|
await safeTeardown(conn);
|
|
}
|
|
}
|
|
async function runLocalSubcommand(subcommand, subArgs, io, pretty) {
|
|
const versionInfo = (io.readVersion ?? readCliVersion)();
|
|
if (subcommand === "version") {
|
|
const env = {
|
|
ok: true,
|
|
mode: "subcommand",
|
|
subcommand: "version",
|
|
result: versionInfo
|
|
};
|
|
return emit(io, env, pretty, ExitCode.OK);
|
|
}
|
|
const upgradeImpl = io.checkUpgrade ?? checkUpgrade;
|
|
const opts = parseUpgradeArgs(subArgs);
|
|
if (opts.kind === "error") return emit(io, opts.envelope, pretty, ExitCode.ARG_ERROR);
|
|
try {
|
|
const result = await upgradeImpl({
|
|
current: versionInfo.cli,
|
|
...opts.force ? { force: true } : {},
|
|
...opts.cachePath !== void 0 ? { cachePath: opts.cachePath } : {}
|
|
});
|
|
const env = {
|
|
ok: true,
|
|
mode: "subcommand",
|
|
subcommand: "upgrade",
|
|
result
|
|
};
|
|
return emit(io, env, pretty, ExitCode.OK);
|
|
} catch (err) {
|
|
const env = errorEnvelope(
|
|
"API_UNREACHABLE",
|
|
err instanceof Error ? err.message : String(err),
|
|
{ registry: "https://registry.npmjs.org/@vidbee/cli/latest" }
|
|
);
|
|
return emit(io, env, pretty, ExitCode.HOST_UNREACHABLE);
|
|
}
|
|
}
|
|
function parseUpgradeArgs(subArgs) {
|
|
const out = { kind: "ok", force: false };
|
|
for (let i = 0; i < subArgs.length; i++) {
|
|
const tok = subArgs[i];
|
|
if (tok === void 0) continue;
|
|
if (tok === "--force") {
|
|
out.force = true;
|
|
continue;
|
|
}
|
|
if (tok === "--cache") {
|
|
const next = subArgs[i + 1];
|
|
if (next === void 0) {
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope("MISSING_VALUE", "--cache requires a path")
|
|
};
|
|
}
|
|
out.cachePath = next;
|
|
i += 1;
|
|
continue;
|
|
}
|
|
if (tok.startsWith("--cache=")) {
|
|
out.cachePath = tok.slice("--cache=".length);
|
|
continue;
|
|
}
|
|
return {
|
|
kind: "error",
|
|
envelope: errorEnvelope("PARSE_ERROR", `unknown :upgrade flag: ${tok}`)
|
|
};
|
|
}
|
|
return out;
|
|
}
|
|
async function runProbeMode(parsed, io, pretty) {
|
|
const probeImpl = io.probe ?? runProbe;
|
|
const result = await probeImpl({ argv: parsed.ytArgs });
|
|
if (result.kind === "error") {
|
|
return emit(
|
|
io,
|
|
result.envelope,
|
|
pretty,
|
|
exitCodeForError(result.envelope.code)
|
|
);
|
|
}
|
|
const { args: sanitized } = redactArgs(parsed.ytArgs);
|
|
const env = {
|
|
ok: true,
|
|
mode: "probe",
|
|
command: ["yt-dlp", ...sanitized].join(" "),
|
|
ytDlp: {
|
|
exitCode: result.exitCode,
|
|
stdout: result.stdout,
|
|
stderr: redactText(result.stderr)
|
|
}
|
|
};
|
|
return emit(io, env, pretty, result.exitCode === 0 ? ExitCode.OK : ExitCode.WAIT_NON_SUCCESS);
|
|
}
|
|
async function runDownloadMode(parsed, io, pretty, connectImpl) {
|
|
const conn = await connectImpl({ flags: parsed.flags });
|
|
if (conn.kind === "error") {
|
|
return emit(io, conn.envelope, pretty, exitCodeForError(conn.envelope.code));
|
|
}
|
|
try {
|
|
const built = buildForwardedInput({ argv: parsed.ytArgs, flags: parsed.flags });
|
|
const request = {
|
|
input: built.input
|
|
};
|
|
if (parsed.flags.priority) {
|
|
request.priority = priorityToCode(parsed.flags.priority);
|
|
}
|
|
if (parsed.flags.groupKey !== void 0) request.groupKey = parsed.flags.groupKey;
|
|
if (parsed.flags.maxAttempts !== void 0) request.maxAttempts = parsed.flags.maxAttempts;
|
|
const result = await enqueueDownload({
|
|
client: conn.client,
|
|
request,
|
|
wait: parsed.flags.wait
|
|
});
|
|
if (result.kind === "detached") {
|
|
const env2 = {
|
|
ok: true,
|
|
mode: "download",
|
|
task: {
|
|
id: result.task.id,
|
|
status: result.task.status,
|
|
attempt: result.task.attempt,
|
|
maxAttempts: result.task.maxAttempts,
|
|
command: built.commandPreview
|
|
}
|
|
};
|
|
return emit(io, env2, pretty, ExitCode.OK);
|
|
}
|
|
if (result.kind === "wait-success") {
|
|
const env2 = {
|
|
ok: true,
|
|
mode: "download",
|
|
task: result.task,
|
|
ytDlp: {
|
|
exitCode: 0,
|
|
stdoutTail: "",
|
|
stderrTail: ""
|
|
}
|
|
};
|
|
return emit(io, env2, pretty, ExitCode.OK);
|
|
}
|
|
const env = {
|
|
ok: false,
|
|
mode: "download",
|
|
task: result.task,
|
|
ytDlp: {
|
|
exitCode: 1,
|
|
stdoutTail: "",
|
|
stderrTail: redactText(
|
|
result.task.lastError?.stderrTail ?? ""
|
|
)
|
|
}
|
|
};
|
|
return emit(io, env, pretty, ExitCode.WAIT_NON_SUCCESS);
|
|
} catch (err) {
|
|
const env = errorEnvelope(
|
|
"UNKNOWN_ERROR",
|
|
err instanceof Error ? err.message : String(err)
|
|
);
|
|
return emit(io, env, pretty, ExitCode.ARG_ERROR);
|
|
} finally {
|
|
await safeTeardown(conn);
|
|
}
|
|
}
|
|
function priorityToCode(p) {
|
|
if (p === "user") return 0;
|
|
if (p === "subscription") return 10;
|
|
return 20;
|
|
}
|
|
async function safeTeardown(conn) {
|
|
if (conn.kind !== "connected") return;
|
|
if (!conn.teardown) return;
|
|
try {
|
|
await conn.teardown();
|
|
} catch {
|
|
}
|
|
}
|
|
function emit(io, env, pretty, exitCode) {
|
|
io.stdout(renderEnvelope(env, { pretty }));
|
|
return { exitCode, envelope: env };
|
|
}
|
|
function coerceErrorCode(code) {
|
|
switch (code) {
|
|
case "UNKNOWN_VIDBEE_FLAG":
|
|
case "INVALID_TARGET":
|
|
case "INVALID_PRIORITY":
|
|
case "INVALID_MAX_ATTEMPTS":
|
|
case "INVALID_TIMEOUT":
|
|
case "MISSING_VALUE":
|
|
case "UNEXPECTED_VALUE":
|
|
case "STDOUT_OUTPUT_DISALLOWED":
|
|
return code;
|
|
default:
|
|
return "PARSE_ERROR";
|
|
}
|
|
}
|
|
|
|
// src/bin.ts
|
|
async function main() {
|
|
const argv = process.argv.slice(2);
|
|
const { exitCode } = await run(argv, {
|
|
stdout: (line) => process.stdout.write(`${line}
|
|
`),
|
|
stderr: (line) => process.stderr.write(`${line}
|
|
`)
|
|
});
|
|
process.exit(exitCode);
|
|
}
|
|
main().catch((err) => {
|
|
process.stderr.write(
|
|
`${JSON.stringify({ ok: false, code: "UNKNOWN_ERROR", message: err instanceof Error ? err.message : String(err) })}
|
|
`
|
|
);
|
|
process.exit(2);
|
|
});
|