UNPKG

sqlite-prepare

Version:

A type-safe SQL query builder for Cloudflare D1

52 lines (51 loc) 1.73 kB
"use strict"; 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;