Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/giant-moose-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@powersync/web': minor
---

Removed `js-logger` dependency, using the logger helper exposed by `@powersync/common`.
5 changes: 5 additions & 0 deletions .changeset/lemon-shrimps-pretend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@powersync/common': minor
---

Added logger helpers, which can be used instead of the `js-logger` dependency.
4 changes: 1 addition & 3 deletions packages/common/rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ export default (commandLineArgs) => {
// This makes life easier
external: [
// This has dynamic logic - makes bundling hard
'cross-fetch',
// TODO: make the useDefaults logic better. Currently need access to this package directly
'js-logger'
'cross-fetch'
]
};
};
1 change: 1 addition & 0 deletions packages/common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export * from './db/DBAdapter.js';
export * from './utils/AbortOperation.js';
export * from './utils/BaseObserver.js';
export * from './utils/DataStream.js';
export * from './utils/Logger.js';
export * from './utils/parseQuery.js';

export * from './types/types.js';
32 changes: 32 additions & 0 deletions packages/common/src/utils/Logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Logger, { type ILogger, type ILogLevel } from 'js-logger';

export { GlobalLogger, ILogger, ILoggerOpts, ILogHandler, ILogLevel } from 'js-logger';

const TypedLogger: ILogger = Logger as any;

export const LogLevel = {
TRACE: TypedLogger.TRACE,
DEBUG: TypedLogger.DEBUG,
INFO: TypedLogger.INFO,
TIME: TypedLogger.TIME,
WARN: TypedLogger.WARN,
ERROR: TypedLogger.ERROR,
OFF: TypedLogger.OFF
};

export interface CreateLoggerOptions {
logLevel?: ILogLevel;
}

export function createBaseLogger() {
return Logger;
}

export function createLogger(name: string, options: CreateLoggerOptions = {}): ILogger {
const logger = Logger.get(name);
if (options.logLevel) {
logger.setLevel(options.logLevel);
}

return logger;
}
3 changes: 1 addition & 2 deletions packages/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@
"async-mutex": "^0.4.0",
"bson": "^6.6.0",
"comlink": "^4.4.2",
"commander": "^12.1.0",
"js-logger": "^1.6.1"
"commander": "^12.1.0"
},
"devDependencies": {
"@journeyapps/wa-sqlite": "^1.2.2",
Expand Down
5 changes: 2 additions & 3 deletions packages/web/src/db/adapters/AbstractWebSQLOpenFactory.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { DBAdapter, SQLOpenFactory } from '@powersync/common';
import Logger, { ILogger } from 'js-logger';
import { type ILogger, createLogger, DBAdapter, SQLOpenFactory } from '@powersync/common';
import { SSRDBAdapter } from './SSRDBAdapter';
import { ResolvedWebSQLFlags, WebSQLOpenFactoryOptions, isServerSide, resolveWebSQLFlags } from './web-sql-flags';

Expand All @@ -9,7 +8,7 @@ export abstract class AbstractWebSQLOpenFactory implements SQLOpenFactory {

constructor(protected options: WebSQLOpenFactoryOptions) {
this.resolvedFlags = resolveWebSQLFlags(options.flags);
this.logger = options.logger ?? Logger.get(`AbstractWebSQLOpenFactory - ${this.options.dbFilename}`);
this.logger = options.logger ?? createLogger(`AbstractWebSQLOpenFactory - ${this.options.dbFilename}`);
}

/**
Expand Down
5 changes: 3 additions & 2 deletions packages/web/src/db/adapters/LockedAsyncDatabaseAdapter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {
type ILogger,
BaseObserver,
createLogger,
DBAdapter,
DBAdapterListener,
DBGetUtils,
Expand All @@ -8,7 +10,6 @@ import {
QueryResult,
Transaction
} from '@powersync/common';
import Logger, { ILogger } from 'js-logger';
import { getNavigatorLocks } from '../..//shared/navigator';
import { AsyncDatabaseConnection } from './AsyncDatabaseConnection';
import { SharedConnectionWorker, WebDBAdapter } from './WebDBAdapter';
Expand Down Expand Up @@ -50,7 +51,7 @@ export class LockedAsyncDatabaseAdapter
constructor(protected options: LockedAsyncDatabaseAdapterOptions) {
super();
this._dbIdentifier = options.name;
this.logger = options.logger ?? Logger.get(`LockedAsyncDatabaseAdapter - ${this._dbIdentifier}`);
this.logger = options.logger ?? createLogger(`LockedAsyncDatabaseAdapter - ${this._dbIdentifier}`);
// Set the name if provided. We can query for the name if not available yet
this.debugMode = options.debugMode ?? false;
if (this.debugMode) {
Expand Down
3 changes: 1 addition & 2 deletions packages/web/src/db/adapters/web-sql-flags.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { SQLOpenOptions } from '@powersync/common';
import { ILogger } from 'js-logger';
import { type ILogger, SQLOpenOptions } from '@powersync/common';

/**
* Common settings used when creating SQL connections on web.
Expand Down
3 changes: 1 addition & 2 deletions packages/web/src/db/sync/WebRemote.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { type ILogger } from 'js-logger';

import {
AbstractRemote,
AbstractRemoteOptions,
BSONImplementation,
DEFAULT_REMOTE_LOGGER,
FetchImplementation,
FetchImplementationProvider,
ILogger,
RemoteConnector
} from '@powersync/common';

Expand Down
18 changes: 9 additions & 9 deletions packages/web/src/worker/sync/BroadcastLogger.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Logger, { type ILogLevel, type ILogger } from 'js-logger';
import { type ILogger, type ILogLevel, LogLevel } from '@powersync/common';
import { type WrappedSyncPort } from './SharedSyncImplementation';

/**
Expand All @@ -14,13 +14,13 @@ export class BroadcastLogger implements ILogger {
OFF: ILogLevel;

constructor(protected clients: WrappedSyncPort[]) {
this.TRACE = Logger.TRACE;
this.DEBUG = Logger.DEBUG;
this.INFO = Logger.INFO;
this.TIME = Logger.TIME;
this.WARN = Logger.WARN;
this.ERROR = Logger.ERROR;
this.OFF = Logger.OFF;
this.TRACE = LogLevel.TRACE;
this.DEBUG = LogLevel.DEBUG;
this.INFO = LogLevel.INFO;
this.TIME = LogLevel.TIME;
this.WARN = LogLevel.WARN;
this.ERROR = LogLevel.ERROR;
this.OFF = LogLevel.OFF;
}

trace(...x: any[]): void {
Expand Down Expand Up @@ -75,7 +75,7 @@ export class BroadcastLogger implements ILogger {

getLevel(): ILogLevel {
// Levels are not adjustable on this level.
return Logger.INFO;
return LogLevel.INFO;
}

enabledFor(level: ILogLevel): boolean {
Expand Down
5 changes: 3 additions & 2 deletions packages/web/src/worker/sync/SharedSyncImplementation.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import {
type AbstractStreamingSyncImplementation,
type ILogger,
type LockOptions,
type PowerSyncConnectionOptions,
type StreamingSyncImplementation,
type StreamingSyncImplementationListener,
type SyncStatusOptions,
AbortOperation,
BaseObserver,
createLogger,
DBAdapter,
SqliteBucketStorage,
SyncStatus
} from '@powersync/common';
import { Mutex } from 'async-mutex';
import * as Comlink from 'comlink';
import Logger, { type ILogger } from 'js-logger';
import { WebRemote } from '../../db/sync/WebRemote';
import {
WebStreamingSyncImplementation,
Expand Down Expand Up @@ -107,7 +108,7 @@ export class SharedSyncImplementation
this.dbAdapter = null;
this.syncParams = null;
this.syncStreamClient = null;
this.logger = Logger.get('shared-sync');
this.logger = createLogger('shared-sync');
this.lastConnectOptions = undefined;

this.isInitialized = new Promise((resolve) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import {
SharedSyncClientEvent,
type ManualSharedSyncPayload
} from './SharedSyncImplementation';
import Logger from 'js-logger';
import { createBaseLogger } from '@powersync/common';

const _self: SharedWorkerGlobalScope = self as any;
Logger.useDefaults();
const logger = createBaseLogger();
logger.useDefaults();

const sharedSyncImplementation = new SharedSyncImplementation();

_self.onconnect = function (event: MessageEvent<string>) {
Expand Down
14 changes: 10 additions & 4 deletions packages/web/tests/multiple_instances.test.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
import { AbstractPowerSyncDatabase, SqliteBucketStorage, SyncStatus } from '@powersync/common';
import {
AbstractPowerSyncDatabase,
createBaseLogger,
createLogger,
SqliteBucketStorage,
SyncStatus
} from '@powersync/common';
import {
SharedWebStreamingSyncImplementation,
SharedWebStreamingSyncImplementationOptions,
WebRemote
} from '@powersync/web';
import { Mutex } from 'async-mutex';
import Logger from 'js-logger';

import { beforeAll, describe, expect, it, vi } from 'vitest';
import { WebDBAdapter } from '../src/db/adapters/WebDBAdapter';
import { TestConnector } from './utils/MockStreamOpenFactory';
Expand All @@ -20,7 +26,7 @@ describe('Multiple Instances', { sequential: true }, () => {
schema: testSchema
});

beforeAll(() => Logger.useDefaults());
beforeAll(() => createBaseLogger().useDefaults());

function createAsset(powersync: AbstractPowerSyncDatabase) {
return powersync.execute('INSERT INTO assets(id, description) VALUES(uuid(), ?)', ['test']);
Expand All @@ -39,7 +45,7 @@ describe('Multiple Instances', { sequential: true }, () => {
});

it('should broadcast logs from shared sync worker', { timeout: 20000 }, async () => {
const logger = Logger.get('test-logger');
const logger = createLogger('test-logger');
const spiedErrorLogger = vi.spyOn(logger, 'error');
const spiedDebugLogger = vi.spyOn(logger, 'debug');

Expand Down
9 changes: 4 additions & 5 deletions packages/web/tests/uploads.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { WebPowerSyncDatabaseOptions } from '@powersync/web';
import Logger from 'js-logger';
import { createBaseLogger, createLogger, WebPowerSyncDatabaseOptions } from '@powersync/web';
import p from 'p-defer';
import { v4 } from 'uuid';
import { beforeAll, describe, expect, it, vi } from 'vitest';
Expand Down Expand Up @@ -40,10 +39,10 @@ describe(

function describeCrudUploadTests(getDatabaseOptions: () => WebPowerSyncDatabaseOptions) {
return () => {
beforeAll(() => Logger.useDefaults());
beforeAll(() => createBaseLogger().useDefaults());

it('should warn for missing upload operations in uploadData', async () => {
const logger = Logger.get('crud-logger');
const logger = createLogger('crud-logger');

const options = getDatabaseOptions();

Expand Down Expand Up @@ -83,7 +82,7 @@ function describeCrudUploadTests(getDatabaseOptions: () => WebPowerSyncDatabaseO
});

it('should immediately upload sequential transactions', async () => {
const logger = Logger.get('crud-logger');
const logger = createLogger('crud-logger');

const options = getDatabaseOptions();

Expand Down
1 change: 0 additions & 1 deletion packages/web/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ module.exports = () => {
'@powersync/common': '@powersync/common',
'async-mutex': 'async-mutex',
comlink: 'comlink',
'js-logger': 'js-logger',
lodash: 'lodash'
},
devtool: production ? 'source-map' : 'cheap-module-source-map',
Expand Down
3 changes: 0 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.