Skip to content

Commit 2735dda

Browse files
authored
Merge pull request #53 from danielmsft/optional_logger
Optional logger
2 parents 9347402 + d757f1c commit 2735dda

File tree

5 files changed

+40
-13
lines changed

5 files changed

+40
-13
lines changed

index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export {
2323
DBClosure,
2424
OnCloseHandler,
2525
openListOfProviders,
26+
IObjectStoreProviderLogger,
2627
} from "./src/ObjectStoreProvider";
2728
export {
2829
isIE,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/objectstoreprovider",
3-
"version": "0.6.41",
3+
"version": "0.6.42",
44
"description": "A cross-browser object store library",
55
"author": "Mukundan Kavanur Kidambi <[email protected]>",
66
"scripts": {

src/InMemoryProvider.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
QuerySortOrder,
3737
ItemType,
3838
KeyPathType,
39+
IObjectStoreProviderLogger,
3940
KeyType,
4041
} from "./ObjectStoreProvider";
4142
import {
@@ -61,18 +62,24 @@ export interface StoreData {
6162
mapType?: OrderedMapType;
6263
}
6364

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

6868
private _lockHelper: TransactionLockHelper | undefined;
6969
private readonly _mapType?: OrderedMapType;
7070
private readonly _supportsRollback?: boolean;
71+
private logger: IObjectStoreProviderLogger;
7172

72-
constructor(mapType?: OrderedMapType, supportsRollback = false) {
73+
constructor(
74+
mapType?: OrderedMapType,
75+
supportsRollback = false,
76+
logger?: IObjectStoreProviderLogger
77+
) {
7378
super();
7479
this._mapType = mapType;
7580
this._supportsRollback = supportsRollback;
81+
82+
this.logger = logger ? logger : console;
7683
}
7784

7885
open(
@@ -112,7 +119,8 @@ export class InMemoryProvider extends DbProvider {
112119
this._lockHelper!!!,
113120
token,
114121
writeNeeded,
115-
this._supportsRollback!
122+
this._supportsRollback!,
123+
this.logger
116124
)
117125
);
118126
}
@@ -137,7 +145,8 @@ class InMemoryTransaction implements DbTransaction {
137145
private _lockHelper: TransactionLockHelper,
138146
private _transToken: TransactionToken,
139147
private _writeNeeded: boolean,
140-
private _supportsRollback: boolean
148+
private _supportsRollback: boolean,
149+
private logger: IObjectStoreProviderLogger
141150
) {
142151
// Close the transaction on the next tick. By definition, anything is completed synchronously here, so after an event tick
143152
// goes by, there can't have been anything pending.
@@ -166,6 +175,9 @@ class InMemoryTransaction implements DbTransaction {
166175

167176
abort(): void {
168177
if (!this._supportsRollback) {
178+
this.logger.error(
179+
"Unable to abort transaction since provider doesn't support rollback"
180+
);
169181
throw new Error(
170182
"Unable to abort transaction since provider doesn't support rollback"
171183
);

src/IndexedDbProvider.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import {
4040
IDBCloseConnectionEventDetails,
4141
IDBCloseConnectionPayload,
4242
OnCloseHandler,
43+
IObjectStoreProviderLogger,
4344
} from "./ObjectStoreProvider";
4445
import { ItemType, KeyPathType, KeyType } from "./ObjectStoreProvider";
4546
import {
@@ -79,15 +80,19 @@ export class IndexedDbProvider extends DbProvider {
7980
private _handleOnClose: OnCloseHandler | undefined = undefined;
8081

8182
private _lockHelper: TransactionLockHelper | undefined;
83+
private logger: IObjectStoreProviderLogger;
8284

8385
// By default, it uses the in-browser indexed db factory, but you can pass in an explicit factory. Currently only used for unit tests.
8486
constructor(
8587
explicitDbFactory?: IDBFactory,
8688
explicitDbFactorySupportsCompoundKeys?: boolean,
87-
handleOnClose?: OnCloseHandler
89+
handleOnClose?: OnCloseHandler,
90+
logger?: IObjectStoreProviderLogger
8891
) {
8992
super();
9093

94+
this.logger = logger ? logger : console;
95+
9196
if (explicitDbFactory) {
9297
this._dbFactory = explicitDbFactory;
9398
this._fakeComplicatedKeys = !explicitDbFactorySupportsCompoundKeys;
@@ -185,7 +190,7 @@ export class IndexedDbProvider extends DbProvider {
185190
event.oldVersion < schema.lastUsableVersion
186191
) {
187192
// Clear all stores if it's past the usable version
188-
console.log(
193+
this.logger.log(
189194
"Old version detected (" + event.oldVersion + "), clearing all data"
190195
);
191196
each(db.objectStoreNames, (name) => {
@@ -333,7 +338,8 @@ export class IndexedDbProvider extends DbProvider {
333338
undefined,
334339
fakeToken,
335340
schema,
336-
this._fakeComplicatedKeys
341+
this._fakeComplicatedKeys,
342+
this.logger
337343
);
338344
const tStore = iTrans.getStore(storeSchema.name);
339345

@@ -403,7 +409,7 @@ export class IndexedDbProvider extends DbProvider {
403409
err.target.error.name === "VersionError"
404410
) {
405411
if (!wipeIfExists) {
406-
console.log(
412+
this.logger.log(
407413
"Database version too new, Wiping: " +
408414
(err.target.error.message || err.target.error.name)
409415
);
@@ -513,7 +519,8 @@ export class IndexedDbProvider extends DbProvider {
513519
this._lockHelper,
514520
transToken,
515521
this._schema!!!,
516-
this._fakeComplicatedKeys
522+
this._fakeComplicatedKeys,
523+
this.logger
517524
)
518525
);
519526
}
@@ -530,7 +537,8 @@ class IndexedDbTransaction implements DbTransaction {
530537
lockHelper: TransactionLockHelper | undefined,
531538
private _transToken: TransactionToken,
532539
private _schema: DbSchema,
533-
private _fakeComplicatedKeys: boolean
540+
private _fakeComplicatedKeys: boolean,
541+
private logger: IObjectStoreProviderLogger
534542
) {
535543
this._stores = map(this._transToken.storeNames, (storeName) =>
536544
this._trans.objectStore(storeName)
@@ -558,7 +566,7 @@ class IndexedDbTransaction implements DbTransaction {
558566
);
559567

560568
if (history.length > 1) {
561-
console.warn(
569+
this.logger.warn(
562570
"IndexedDbTransaction Errored after Resolution, Swallowing. Error: " +
563571
(this._trans.error ? this._trans.error.message : undefined) +
564572
", History: " +
@@ -582,7 +590,7 @@ class IndexedDbTransaction implements DbTransaction {
582590
);
583591

584592
if (history.length > 1) {
585-
console.warn(
593+
this.logger.warn(
586594
"IndexedDbTransaction Aborted after Resolution, Swallowing. Error: " +
587595
(this._trans.error ? this._trans.error.message : undefined) +
588596
", History: " +

src/ObjectStoreProvider.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ export enum QuerySortOrder {
2323
Reverse,
2424
}
2525

26+
export interface IObjectStoreProviderLogger {
27+
log(message?: any, ...optionalParams: any[]): void;
28+
warn(message?: any, ...optionalParams: any[]): void;
29+
error(message?: any, ...optionalParams: any[]): void;
30+
}
31+
2632
// Schema type describing an index for a store.
2733
export interface IndexSchema {
2834
name: string;

0 commit comments

Comments
 (0)