Ben Ashton
3 years ago
1 changed files with 36 additions and 0 deletions
@ -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; |
||||
} |
Loading…
Reference in new issue