Skip to content

Commit

Permalink
Merge pull request #53 from danielmsft/optional_logger
Browse files Browse the repository at this point in the history
Optional logger
  • Loading branch information
M1Les committed Aug 28, 2023
2 parents 9347402 + d757f1c commit 2735dda
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 13 deletions.
1 change: 1 addition & 0 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export {
DBClosure,
OnCloseHandler,
openListOfProviders,
IObjectStoreProviderLogger,
} from "./src/ObjectStoreProvider";
export {
isIE,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@microsoft/objectstoreprovider",
"version": "0.6.41",
"version": "0.6.42",
"description": "A cross-browser object store library",
"author": "Mukundan Kavanur Kidambi <[email protected]>",
"scripts": {
Expand Down
20 changes: 16 additions & 4 deletions src/InMemoryProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {
QuerySortOrder,
ItemType,
KeyPathType,
IObjectStoreProviderLogger,
KeyType,
} from "./ObjectStoreProvider";
import {
Expand All @@ -61,18 +62,24 @@ export interface StoreData {
mapType?: OrderedMapType;
}

// Very simple in-memory dbprov ider for handling IE inprivate windows (and unit tests, maybe?)
export class InMemoryProvider extends DbProvider {
private _stores: Map<string, StoreData> = new Map();

private _lockHelper: TransactionLockHelper | undefined;
private readonly _mapType?: OrderedMapType;
private readonly _supportsRollback?: boolean;
private logger: IObjectStoreProviderLogger;

constructor(mapType?: OrderedMapType, supportsRollback = false) {
constructor(
mapType?: OrderedMapType,
supportsRollback = false,
logger?: IObjectStoreProviderLogger
) {
super();
this._mapType = mapType;
this._supportsRollback = supportsRollback;

this.logger = logger ? logger : console;
}

open(
Expand Down Expand Up @@ -112,7 +119,8 @@ export class InMemoryProvider extends DbProvider {
this._lockHelper!!!,
token,
writeNeeded,
this._supportsRollback!
this._supportsRollback!,
this.logger
)
);
}
Expand All @@ -137,7 +145,8 @@ class InMemoryTransaction implements DbTransaction {
private _lockHelper: TransactionLockHelper,
private _transToken: TransactionToken,
private _writeNeeded: boolean,
private _supportsRollback: boolean
private _supportsRollback: boolean,
private logger: IObjectStoreProviderLogger
) {
// Close the transaction on the next tick. By definition, anything is completed synchronously here, so after an event tick
// goes by, there can't have been anything pending.
Expand Down Expand Up @@ -166,6 +175,9 @@ class InMemoryTransaction implements DbTransaction {

abort(): void {
if (!this._supportsRollback) {
this.logger.error(
"Unable to abort transaction since provider doesn't support rollback"
);
throw new Error(
"Unable to abort transaction since provider doesn't support rollback"
);
Expand Down
24 changes: 16 additions & 8 deletions src/IndexedDbProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import {
IDBCloseConnectionEventDetails,
IDBCloseConnectionPayload,
OnCloseHandler,
IObjectStoreProviderLogger,
} from "./ObjectStoreProvider";
import { ItemType, KeyPathType, KeyType } from "./ObjectStoreProvider";
import {
Expand Down Expand Up @@ -79,15 +80,19 @@ export class IndexedDbProvider extends DbProvider {
private _handleOnClose: OnCloseHandler | undefined = undefined;

private _lockHelper: TransactionLockHelper | undefined;
private logger: IObjectStoreProviderLogger;

// By default, it uses the in-browser indexed db factory, but you can pass in an explicit factory. Currently only used for unit tests.
constructor(
explicitDbFactory?: IDBFactory,
explicitDbFactorySupportsCompoundKeys?: boolean,
handleOnClose?: OnCloseHandler
handleOnClose?: OnCloseHandler,
logger?: IObjectStoreProviderLogger
) {
super();

this.logger = logger ? logger : console;

if (explicitDbFactory) {
this._dbFactory = explicitDbFactory;
this._fakeComplicatedKeys = !explicitDbFactorySupportsCompoundKeys;
Expand Down Expand Up @@ -185,7 +190,7 @@ export class IndexedDbProvider extends DbProvider {
event.oldVersion < schema.lastUsableVersion
) {
// Clear all stores if it's past the usable version
console.log(
this.logger.log(
"Old version detected (" + event.oldVersion + "), clearing all data"
);
each(db.objectStoreNames, (name) => {
Expand Down Expand Up @@ -333,7 +338,8 @@ export class IndexedDbProvider extends DbProvider {
undefined,
fakeToken,
schema,
this._fakeComplicatedKeys
this._fakeComplicatedKeys,
this.logger
);
const tStore = iTrans.getStore(storeSchema.name);

Expand Down Expand Up @@ -403,7 +409,7 @@ export class IndexedDbProvider extends DbProvider {
err.target.error.name === "VersionError"
) {
if (!wipeIfExists) {
console.log(
this.logger.log(
"Database version too new, Wiping: " +
(err.target.error.message || err.target.error.name)
);
Expand Down Expand Up @@ -513,7 +519,8 @@ export class IndexedDbProvider extends DbProvider {
this._lockHelper,
transToken,
this._schema!!!,
this._fakeComplicatedKeys
this._fakeComplicatedKeys,
this.logger
)
);
}
Expand All @@ -530,7 +537,8 @@ class IndexedDbTransaction implements DbTransaction {
lockHelper: TransactionLockHelper | undefined,
private _transToken: TransactionToken,
private _schema: DbSchema,
private _fakeComplicatedKeys: boolean
private _fakeComplicatedKeys: boolean,
private logger: IObjectStoreProviderLogger
) {
this._stores = map(this._transToken.storeNames, (storeName) =>
this._trans.objectStore(storeName)
Expand Down Expand Up @@ -558,7 +566,7 @@ class IndexedDbTransaction implements DbTransaction {
);

if (history.length > 1) {
console.warn(
this.logger.warn(
"IndexedDbTransaction Errored after Resolution, Swallowing. Error: " +
(this._trans.error ? this._trans.error.message : undefined) +
", History: " +
Expand All @@ -582,7 +590,7 @@ class IndexedDbTransaction implements DbTransaction {
);

if (history.length > 1) {
console.warn(
this.logger.warn(
"IndexedDbTransaction Aborted after Resolution, Swallowing. Error: " +
(this._trans.error ? this._trans.error.message : undefined) +
", History: " +
Expand Down
6 changes: 6 additions & 0 deletions src/ObjectStoreProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ export enum QuerySortOrder {
Reverse,
}

export interface IObjectStoreProviderLogger {
log(message?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
error(message?: any, ...optionalParams: any[]): void;
}

// Schema type describing an index for a store.
export interface IndexSchema {
name: string;
Expand Down

0 comments on commit 2735dda

Please sign in to comment.