You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.3 KiB
53 lines
1.3 KiB
import { Database } from "./database.mjs"; |
|
import { wrapAdapter } from "./adapter_wrapper.mjs"; |
|
import { PawSQLiteError } from "./pawsqlite_error.mjs"; |
|
import { enableDebug, log } from "./log.mjs"; |
|
|
|
export { PawSQLiteError } from "./pawsqlite_error.mjs"; |
|
|
|
|
|
const adapters = []; |
|
|
|
export const PawSQLite = { |
|
open: async function(dbName, options = {}) { |
|
const adapter = getAdapter(options.adapter); |
|
|
|
let db = new Database(dbName, adapter); |
|
await db.open(); |
|
return db; |
|
}, |
|
delete: function(dbName, options = {}) { |
|
const adapter = getAdapter(options.adapter); |
|
|
|
return adapter.delete(dbName); |
|
}, |
|
registerAdapter: function(adapter) { |
|
if (!adapter) { |
|
throw new PawSQLiteError("Invalid adapter"); |
|
} |
|
|
|
const wrapped = wrapAdapter(adapter); |
|
|
|
if (getAdapter(wrapped.name, true)) { |
|
throw new PawSQLiteError(`An adapter with the name: ${ wrapped.name } ` + |
|
`Already exists`); |
|
} |
|
|
|
log(`Registered adapter: ${ wrapped.name }`); |
|
|
|
adapters.push(wrapped); |
|
}, |
|
debug: enableDebug |
|
}; |
|
|
|
|
|
|
|
function getAdapter(adapterName, silent=false) { |
|
const adapter = adapters.find((a) => a.name === adapterName); |
|
|
|
if (!(silent || adapter)) { |
|
throw new PawSQLiteError(`Unknown Adapter: ${adapterName}`); |
|
} |
|
|
|
return adapter; |
|
} |