one
Version:
One is a new React Framework that makes Vite serve both native and web.
94 lines (93 loc) • 2.6 kB
JavaScript
class SearchValidationError extends Error {
routerCode = "VALIDATE_SEARCH";
issues;
constructor(message, issues = []) {
super(message);
this.name = "SearchValidationError";
this.issues = issues;
}
}
function isStandardSchema(value) {
return typeof value === "object" && value !== null && "~standard" in value && typeof value["~standard"]?.validate === "function";
}
function isZodLikeSchema(value) {
return typeof value === "object" && value !== null && typeof value.parse === "function";
}
function isValidatorFn(value) {
return typeof value === "function";
}
function parseSearchString(search) {
const params = {};
const searchParams = new URLSearchParams(search);
searchParams.forEach((value, key) => {
const existing = params[key];
if (existing === void 0) {
params[key] = value;
} else if (Array.isArray(existing)) {
existing.push(value);
} else {
params[key] = [existing, value];
}
});
return params;
}
function validateSearch(validator, input) {
if (isStandardSchema(validator)) {
const result = validator["~standard"].validate(input);
if (result.issues) {
throw new SearchValidationError("Search param validation failed", result.issues);
}
return result.value;
}
if (isZodLikeSchema(validator)) {
if (validator.safeParse) {
const result = validator.safeParse(input);
if (!result.success) {
throw new SearchValidationError("Search param validation failed", [result.error]);
}
return result.data;
}
try {
return validator.parse(input);
} catch (error) {
throw new SearchValidationError("Search param validation failed", [error]);
}
}
if (isValidatorFn(validator)) {
try {
return validator(input);
} catch (error) {
throw new SearchValidationError("Search param validation failed", [error]);
}
}
throw new Error("Invalid validator provided to validateSearch");
}
function zodSearchValidator(schema) {
return schema;
}
function withFallback(schema, fallbackValue) {
return {
parse(value) {
try {
return schema.parse(value);
} catch {
return fallbackValue;
}
},
safeParse(value) {
try {
return {
success: true,
data: schema.parse(value)
};
} catch {
return {
success: true,
data: fallbackValue
};
}
}
};
}
export { SearchValidationError, parseSearchString, validateSearch, withFallback, zodSearchValidator };
//# sourceMappingURL=validateSearch.mjs.map