Browse Source

Added condition to prevent adapters from being registered multiple times

master
Ben Ashton 3 years ago
parent
commit
cd8db56678
  1. 51
      src/pawsqlite.mjs

51
src/pawsqlite.mjs

@ -1,4 +1,5 @@
import { Database } from "./database.mjs"; import { Database } from "./database.mjs";
import { wrapAdapter } from "./adapter_wrapper.mjs";
import { PawSQLiteError } from "./pawsqlite_error.mjs"; import { PawSQLiteError } from "./pawsqlite_error.mjs";
import { enableDebug } from "./log.mjs"; import { enableDebug } from "./log.mjs";
@ -20,55 +21,25 @@ export default {
return adapter.delete(dbName); return adapter.delete(dbName);
}, },
registerAdapter: function(adapter) { registerAdapter: function(adapter) {
adapters.push(wrapAdapter(adapter)); const wrapped = wrapAdapter(adapter);
},
debug: enableDebug,
Error: PawSQLiteError
};
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 ( if (getAdapter(wrapped.name)) {
prop === "name" && !( throw new PawSQLiteError(`An adapter with the name: ${ wrapped.name } ` +
typeof adapter[prop] === "string" || `Already exists`);
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") { adapters.push(wrapped);
wrapped[prop] = async (...args) => { },
try { debug: enableDebug,
return await adapter[prop](...args); Error: PawSQLiteError
} catch (err) {
throw PawSQLiteError.from(err);
}
}; };
} else {
wrapped[prop] = adapter[prop];
}
});
return wrapped;
}
function getAdapter(adapterName) { function getAdapter(adapterName, silent=false) {
const adapter = adapters.find((a) => a.name === adapterName); const adapter = adapters.find((a) => a.name === adapterName);
if (!adapter) { if (!(silent || adapter)) {
throw new PawSQLiteError(`Unknown Adapter: ${adapterName}`); throw new PawSQLiteError(`Unknown Adapter: ${adapterName}`);
} }

Loading…
Cancel
Save