2021-03-02 14:29:10 -08:00
|
|
|
import { PawSQLiteError } from "./pawsqlite_error.mjs";
|
|
|
|
|
|
|
|
|
2021-03-02 14:24:59 -08:00
|
|
|
export function wrapAdapter(adapter) {
|
|
|
|
const wrapped = {};
|
|
|
|
|
|
|
|
["name", "open", "close", "delete", "sql"].forEach((prop) => {
|
|
|
|
if (!(prop in adapter)) {
|
|
|
|
throw new PawSQLiteError(`Invalid adapter: missing property: ${ prop }`);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (
|
|
|
|
prop === "name" && !(
|
|
|
|
typeof adapter[prop] === "string" ||
|
|
|
|
adapter[prop] instanceof String
|
|
|
|
) ||
|
|
|
|
prop !== "name" && (
|
|
|
|
typeof adapter[prop] !== "function"
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
throw new PawSQLiteError("Invalid adapter: invalid type for property: " +
|
|
|
|
prop);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof adapter[prop] === "function") {
|
|
|
|
wrapped[prop] = async (...args) => {
|
|
|
|
try {
|
|
|
|
return await adapter[prop](...args);
|
|
|
|
} catch (err) {
|
|
|
|
throw PawSQLiteError.from(err);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
wrapped[prop] = adapter[prop];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return wrapped;
|
|
|
|
}
|