From c15fa92174f1e605dcceb134fd42ef9788df840a Mon Sep 17 00:00:00 2001 From: Ben Ashton Date: Tue, 2 Mar 2021 14:24:59 -0800 Subject: [PATCH] Moved adapter wrapping to its own file --- src/adapter_wrapper.mjs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/adapter_wrapper.mjs diff --git a/src/adapter_wrapper.mjs b/src/adapter_wrapper.mjs new file mode 100644 index 0000000..96b03cc --- /dev/null +++ b/src/adapter_wrapper.mjs @@ -0,0 +1,36 @@ +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; +} \ No newline at end of file