sqlite-prepare
Version:
A type-safe SQL query builder for Cloudflare D1
52 lines (51 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.v = void 0;
exports.validate = validate;
const raw_1 = require("./raw");
function isStringValidator(validator) {
return typeof validator === 'function' && validator.length === 1;
}
function isRawSQLValidator(validator) {
return typeof validator === 'function' && validator.length === 2;
}
/**
* Validates a raw SQL query against an allowed list of queries
* @param rawSqlQuery - The raw SQL query to validate
* @param allowedQueries - Array of allowed SQL queries
* @returns A RawSQL object if validation passes
* @throws Error if validation fails
*/
function validate(input, validator) {
const rawSql = typeof input === "string" ? (0, raw_1.raw)(input) : input;
if (Array.isArray(validator)) {
if (!validator.includes(rawSql.query)) {
throw new Error(`Query "${rawSql.query}" is not in the allowed list`);
}
return rawSql;
}
else {
if (isStringValidator(validator)) {
if (typeof input === 'string') {
if (!validator(input)) {
throw new Error(`Query "${input}" is not valid`);
}
}
else {
if (!validator(rawSql.query)) {
throw new Error(`Query "${rawSql.query}" is not valid`);
}
}
}
else if (isRawSQLValidator(validator)) {
if (!validator(rawSql, true)) {
throw new Error(`Query "${rawSql.query}" is not valid`);
}
}
else {
throw new Error('Invalid validator type');
}
return rawSql;
}
}
exports.v = validate;