Unlink adapters. Add adapter registry
This commit is contained in:
		
							parent
							
								
									1886fe4f2c
								
							
						
					
					
						commit
						38df7f1053
					
				@ -2,9 +2,8 @@ import { Database } from "./database.mjs";
 | 
				
			|||||||
import { PawSQLiteError } from "./pawsqlite_error.mjs";
 | 
					import { PawSQLiteError } from "./pawsqlite_error.mjs";
 | 
				
			||||||
import { enableDebug } from "./log.mjs";
 | 
					import { enableDebug } from "./log.mjs";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Adapters
 | 
					
 | 
				
			||||||
import { PSQLAdapter } from "./adapters/cordova_pawsqlite/psql_adapter.mjs";
 | 
					const adapters = [];
 | 
				
			||||||
import { WebSQLAdapter } from "./adapters/websql/websql_adapter.mjs";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
@ -20,22 +19,58 @@ export default {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return adapter.delete(dbName);
 | 
					    return adapter.delete(dbName);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  registerAdapter: function(adapter) {
 | 
				
			||||||
 | 
					    adapters.push(wrapAdapter(adapter));
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  debug: enableDebug,
 | 
					  debug: enableDebug,
 | 
				
			||||||
  Error: PawSQLiteError
 | 
					  Error: PawSQLiteError
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function wrapAdapter() {
 | 
				
			||||||
 | 
					  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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getAdapter(adapterName) {
 | 
					function getAdapter(adapterName) {
 | 
				
			||||||
  if (!adapterName) {
 | 
					  const adapter = adapters.find((a) => a.name === adapterName);
 | 
				
			||||||
    adapterName = "pawsqlite";
 | 
					
 | 
				
			||||||
  } else {
 | 
					  if (!adapter) {
 | 
				
			||||||
    adapterName = adapterName.toLowerCase();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (adapterName === "pawsqlite") {
 | 
					 | 
				
			||||||
    return PSQLAdapter;
 | 
					 | 
				
			||||||
  } else if (adapterName === "websql") {
 | 
					 | 
				
			||||||
    return WebSQLAdapter;
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    throw new PawSQLiteError(`Unknown Adapter: ${adapterName}`);
 | 
					    throw new PawSQLiteError(`Unknown Adapter: ${adapterName}`);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return adapter;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user