@powersync/node 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.cjs +5 -3
- package/dist/bundle.cjs.map +1 -1
- package/download_core.js +6 -6
- package/lib/db/PowerSyncDatabase.js +5 -3
- package/lib/libpowersync.so +0 -0
- package/package.json +4 -4
package/dist/bundle.cjs
CHANGED
|
@@ -496,13 +496,14 @@ class PowerSyncDatabase extends common.AbstractPowerSyncDatabase {
|
|
|
496
496
|
return new BetterSQLite3DBAdapter(options.database);
|
|
497
497
|
}
|
|
498
498
|
generateBucketStorageAdapter() {
|
|
499
|
-
return new common.SqliteBucketStorage(this.database,
|
|
499
|
+
return new common.SqliteBucketStorage(this.database, this.logger);
|
|
500
500
|
}
|
|
501
501
|
connect(connector, options) {
|
|
502
502
|
return super.connect(connector, options);
|
|
503
503
|
}
|
|
504
504
|
generateSyncStreamImplementation(connector, options) {
|
|
505
|
-
const
|
|
505
|
+
const logger = this.logger;
|
|
506
|
+
const remote = new NodeRemote(connector, logger, {
|
|
506
507
|
dispatcher: options.dispatcher,
|
|
507
508
|
...this.options.remoteOptions
|
|
508
509
|
});
|
|
@@ -515,7 +516,8 @@ class PowerSyncDatabase extends common.AbstractPowerSyncDatabase {
|
|
|
515
516
|
},
|
|
516
517
|
retryDelayMs: this.options.retryDelayMs,
|
|
517
518
|
crudUploadThrottleMs: this.options.crudUploadThrottleMs,
|
|
518
|
-
identifier: this.database.name
|
|
519
|
+
identifier: this.database.name,
|
|
520
|
+
logger
|
|
519
521
|
});
|
|
520
522
|
}
|
|
521
523
|
}
|
package/dist/bundle.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.cjs","sources":["../lib/sync/stream/NodeRemote.js","../lib/sync/stream/NodeStreamingSyncImplementation.js","../lib/db/RemoteConnection.js","../lib/db/BetterSQLite3DBAdapter.js","../lib/db/PowerSyncDatabase.js"],"sourcesContent":["import * as os from 'node:os';\nimport { AbstractRemote, DEFAULT_REMOTE_LOGGER, FetchImplementationProvider } from '@powersync/common';\nimport { BSON } from 'bson';\nimport { EnvHttpProxyAgent, getGlobalDispatcher, ProxyAgent, WebSocket as UndiciWebSocket } from 'undici';\nexport const STREAMING_POST_TIMEOUT_MS = 30_000;\nclass NodeFetchProvider extends FetchImplementationProvider {\n getFetch() {\n return fetch.bind(globalThis);\n }\n}\nexport class NodeRemote extends AbstractRemote {\n connector;\n logger;\n wsDispatcher;\n constructor(connector, logger = DEFAULT_REMOTE_LOGGER, options) {\n const fetchDispatcher = options?.dispatcher ?? defaultFetchDispatcher();\n super(connector, logger, {\n fetchImplementation: options?.fetchImplementation ?? new NodeFetchProvider(),\n fetchOptions: {\n dispatcher: fetchDispatcher\n },\n ...(options ?? {})\n });\n this.connector = connector;\n this.logger = logger;\n this.wsDispatcher = options?.dispatcher;\n }\n createSocket(url) {\n // Create dedicated dispatcher for this WebSocket\n const baseDispatcher = this.getWebsocketDispatcher(url);\n // Create WebSocket with dedicated dispatcher\n const ws = new UndiciWebSocket(url, {\n dispatcher: baseDispatcher,\n headers: {\n 'User-Agent': this.getUserAgent()\n }\n });\n return ws;\n }\n getWebsocketDispatcher(url) {\n if (this.wsDispatcher != null) {\n return this.wsDispatcher;\n }\n const protocol = new URL(url).protocol.replace(':', '');\n const proxy = getProxyForProtocol(protocol);\n if (proxy != null) {\n return new ProxyAgent(proxy);\n }\n else {\n return getGlobalDispatcher();\n }\n }\n getUserAgent() {\n return [\n super.getUserAgent(),\n `powersync-node`,\n `node/${process.versions.node}`,\n `${os.platform()}/${os.release()}`\n ].join(' ');\n }\n async getBSON() {\n return BSON;\n }\n}\nfunction defaultFetchDispatcher() {\n // EnvHttpProxyAgent automatically uses HTTP_PROXY, HTTPS_PROXY and NO_PROXY env vars by default.\n // We add ALL_PROXY support.\n return new EnvHttpProxyAgent({\n httpProxy: getProxyForProtocol('http'),\n httpsProxy: getProxyForProtocol('https')\n });\n}\nfunction getProxyForProtocol(protocol) {\n return (process.env[`${protocol.toLowerCase()}_proxy`] ??\n process.env[`${protocol.toUpperCase()}_PROXY`] ??\n process.env[`all_proxy`] ??\n process.env[`ALL_PROXY`]);\n}\n","import { AbstractStreamingSyncImplementation, LockType } from '@powersync/common';\nimport Lock from 'async-lock';\n/**\n * Global locks which prevent multiple instances from syncing\n * concurrently.\n */\nconst LOCKS = new Map();\nconst lockTypes = new Set(Object.values(LockType));\nexport class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n locks;\n constructor(options) {\n super(options);\n this.initLocks();\n }\n /**\n * Configures global locks on sync process\n */\n initLocks() {\n const { identifier } = this.options;\n if (identifier && LOCKS.has(identifier)) {\n this.locks = LOCKS.get(identifier);\n return;\n }\n this.locks = new Lock();\n if (identifier) {\n LOCKS.set(identifier, this.locks);\n }\n }\n obtainLock(lockOptions) {\n if (!lockTypes.has(lockOptions.type)) {\n throw new Error(`Lock type ${lockOptions.type} not found`);\n }\n return this.locks.acquire(lockOptions.type, async () => {\n if (lockOptions.signal?.aborted) {\n throw new Error('Aborted');\n }\n return lockOptions.callback();\n });\n }\n}\n","import { releaseProxy } from 'comlink';\n/**\n * A PowerSync database connection implemented with RPC calls to a background worker.\n */\nexport class RemoteConnection {\n isBusy = false;\n worker;\n comlink;\n database;\n constructor(worker, comlink, database) {\n this.worker = worker;\n this.comlink = comlink;\n this.database = database;\n }\n /**\n * Runs the inner function, but appends the stack trace where this function was called. This is useful for workers\n * because stack traces from worker errors are otherwise unrelated to the application issue that has caused them.\n */\n async recoverTrace(inner) {\n const trace = {};\n Error.captureStackTrace(trace);\n try {\n return await inner();\n }\n catch (e) {\n if (e instanceof Error && e.stack) {\n e.stack += trace.stack;\n }\n throw e;\n }\n }\n executeBatch(query, params = []) {\n return this.recoverTrace(async () => {\n const result = await this.database.executeBatch(query, params ?? []);\n return RemoteConnection.wrapQueryResult(result);\n });\n }\n execute(query, params) {\n return this.recoverTrace(async () => {\n const result = await this.database.execute(query, params ?? []);\n return RemoteConnection.wrapQueryResult(result);\n });\n }\n executeRaw(query, params) {\n return this.recoverTrace(async () => {\n return await this.database.executeRaw(query, params ?? []);\n });\n }\n async getAll(sql, parameters) {\n const res = await this.execute(sql, parameters);\n return res.rows?._array ?? [];\n }\n async getOptional(sql, parameters) {\n const res = await this.execute(sql, parameters);\n return res.rows?.item(0) ?? null;\n }\n async get(sql, parameters) {\n const res = await this.execute(sql, parameters);\n const first = res.rows?.item(0);\n if (!first) {\n throw new Error('Result set is empty');\n }\n return first;\n }\n async refreshSchema() {\n await this.execute(\"pragma table_info('sqlite_master')\");\n }\n async close() {\n await this.database.close();\n this.database[releaseProxy]();\n this.comlink[releaseProxy]();\n await this.worker.terminate();\n }\n static wrapQueryResult(result) {\n let rows = undefined;\n if (result.rows) {\n rows = {\n ...result.rows,\n item: (idx) => result.rows?._array[idx]\n };\n }\n return {\n ...result,\n rows\n };\n }\n}\n","import fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { Worker } from 'node:worker_threads';\nimport * as Comlink from 'comlink';\nimport { BaseObserver } from '@powersync/common';\nimport { AsyncResource } from 'node:async_hooks';\nimport { RemoteConnection } from './RemoteConnection.js';\nconst READ_CONNECTIONS = 5;\n/**\n * Adapter for better-sqlite3\n */\nexport class BetterSQLite3DBAdapter extends BaseObserver {\n options;\n name;\n readConnections;\n writeConnection;\n readQueue = [];\n writeQueue = [];\n constructor(options) {\n super();\n if (options.readWorkerCount != null && options.readWorkerCount < 1) {\n throw `Needs at least one worker for reads, got ${options.readWorkerCount}`;\n }\n this.options = options;\n this.name = options.dbFilename;\n }\n async initialize() {\n let dbFilePath = this.options.dbFilename;\n if (this.options.dbLocation !== undefined) {\n // Make sure the dbLocation exists, we get a TypeError from better-sqlite3 otherwise.\n let directoryExists = false;\n try {\n const stat = await fs.stat(this.options.dbLocation);\n directoryExists = stat.isDirectory();\n }\n catch (_) {\n // If we can't even stat, the directory won't be accessible to SQLite either.\n }\n if (!directoryExists) {\n throw new Error(`The dbLocation directory at \"${this.options.dbLocation}\" does not exist. Please create it before opening the PowerSync database!`);\n }\n dbFilePath = path.join(this.options.dbLocation, dbFilePath);\n }\n const openWorker = async (isWriter) => {\n const isCommonJsModule = import.meta.isBundlingToCommonJs ?? false;\n let worker;\n const workerName = isWriter ? `write ${dbFilePath}` : `read ${dbFilePath}`;\n const workerFactory = this.options.openWorker ?? ((...args) => new Worker(...args));\n if (isCommonJsModule) {\n worker = workerFactory(path.resolve(__dirname, 'DefaultWorker.cjs'), { name: workerName });\n }\n else {\n worker = workerFactory(new URL('./DefaultWorker.js', import.meta.url), { name: workerName });\n }\n const listeners = new WeakMap();\n const comlink = Comlink.wrap({\n postMessage: worker.postMessage.bind(worker),\n addEventListener: (type, listener) => {\n let resolved = 'handleEvent' in listener ? listener.handleEvent.bind(listener) : listener;\n // Comlink wants message events, but the message event on workers in Node returns the data only.\n if (type === 'message') {\n const original = resolved;\n resolved = (data) => {\n original({ data });\n };\n }\n listeners.set(listener, resolved);\n worker.addListener(type, resolved);\n },\n removeEventListener: (type, listener) => {\n const resolved = listeners.get(listener);\n if (!resolved) {\n return;\n }\n worker.removeListener(type, resolved);\n }\n });\n worker.once('error', (e) => {\n console.error('Unexpected PowerSync database worker error', e);\n });\n const database = (await comlink.open(dbFilePath, isWriter));\n return new RemoteConnection(worker, comlink, database);\n };\n // Open the writer first to avoid multiple threads enabling WAL concurrently (causing \"database is locked\" errors).\n this.writeConnection = await openWorker(true);\n const createWorkers = [];\n const amountOfReaders = this.options.readWorkerCount ?? READ_CONNECTIONS;\n for (let i = 0; i < amountOfReaders; i++) {\n createWorkers.push(openWorker(false));\n }\n this.readConnections = await Promise.all(createWorkers);\n }\n async close() {\n await this.writeConnection.close();\n for (const connection of this.readConnections) {\n await connection.close();\n }\n }\n readLock(fn, _options) {\n let resolveConnectionPromise;\n const connectionPromise = new Promise((resolve, _reject) => {\n resolveConnectionPromise = AsyncResource.bind(resolve);\n });\n const connection = this.readConnections.find((connection) => !connection.isBusy);\n if (connection) {\n connection.isBusy = true;\n resolveConnectionPromise(connection);\n }\n else {\n this.readQueue.push(resolveConnectionPromise);\n }\n return (async () => {\n const connection = await connectionPromise;\n try {\n return await fn(connection);\n }\n finally {\n const next = this.readQueue.shift();\n if (next) {\n next(connection);\n }\n else {\n connection.isBusy = false;\n }\n }\n })();\n }\n writeLock(fn, _options) {\n let resolveLockPromise;\n const lockPromise = new Promise((resolve, _reject) => {\n resolveLockPromise = AsyncResource.bind(resolve);\n });\n if (!this.writeConnection.isBusy) {\n this.writeConnection.isBusy = true;\n resolveLockPromise();\n }\n else {\n this.writeQueue.push(resolveLockPromise);\n }\n return (async () => {\n await lockPromise;\n try {\n try {\n return await fn(this.writeConnection);\n }\n finally {\n const updates = await this.writeConnection.database.collectCommittedUpdates();\n if (updates.length > 0) {\n const event = {\n tables: updates,\n groupedUpdates: {},\n rawUpdates: []\n };\n this.iterateListeners((cb) => cb.tablesUpdated?.(event));\n }\n }\n }\n finally {\n const next = this.writeQueue.shift();\n if (next) {\n next();\n }\n else {\n this.writeConnection.isBusy = false;\n }\n }\n })();\n }\n readTransaction(fn, _options) {\n return this.readLock((ctx) => this.internalTransaction(ctx, fn));\n }\n writeTransaction(fn, _options) {\n return this.writeLock((ctx) => this.internalTransaction(ctx, fn));\n }\n async internalTransaction(connection, fn) {\n let finalized = false;\n const commit = async () => {\n if (!finalized) {\n finalized = true;\n await connection.execute('COMMIT');\n }\n return { rowsAffected: 0 };\n };\n const rollback = async () => {\n if (!finalized) {\n finalized = true;\n await connection.execute('ROLLBACK');\n }\n return { rowsAffected: 0 };\n };\n try {\n await connection.execute('BEGIN');\n const result = await fn({\n execute: (query, params) => connection.execute(query, params),\n executeRaw: (query, params) => connection.executeRaw(query, params),\n executeBatch: (query, params) => connection.executeBatch(query, params),\n get: (query, params) => connection.get(query, params),\n getAll: (query, params) => connection.getAll(query, params),\n getOptional: (query, params) => connection.getOptional(query, params),\n commit,\n rollback\n });\n await commit();\n return result;\n }\n catch (ex) {\n try {\n await rollback();\n }\n catch (ex2) {\n // In rare cases, a rollback may fail.\n // Safe to ignore.\n }\n throw ex;\n }\n }\n getAll(sql, parameters) {\n return this.readLock((ctx) => ctx.getAll(sql, parameters));\n }\n getOptional(sql, parameters) {\n return this.readLock((ctx) => ctx.getOptional(sql, parameters));\n }\n get(sql, parameters) {\n return this.readLock((ctx) => ctx.get(sql, parameters));\n }\n execute(query, params) {\n return this.writeLock((ctx) => ctx.execute(query, params));\n }\n executeRaw(query, params) {\n return this.writeLock((ctx) => ctx.executeRaw(query, params));\n }\n executeBatch(query, params) {\n return this.writeTransaction((ctx) => ctx.executeBatch(query, params));\n }\n async refreshSchema() {\n await this.writeConnection.refreshSchema();\n for (const readConnection of this.readConnections) {\n await readConnection.refreshSchema();\n }\n }\n}\n","import { AbstractPowerSyncDatabase, SqliteBucketStorage } from '@powersync/common';\nimport { NodeRemote } from '../sync/stream/NodeRemote.js';\nimport { NodeStreamingSyncImplementation } from '../sync/stream/NodeStreamingSyncImplementation.js';\nimport { BetterSQLite3DBAdapter } from './BetterSQLite3DBAdapter.js';\n/**\n * A PowerSync database which provides SQLite functionality\n * which is automatically synced.\n *\n * @example\n * ```typescript\n * export const db = new PowerSyncDatabase({\n * schema: AppSchema,\n * database: {\n * dbFilename: 'example.db'\n * }\n * });\n * ```\n */\nexport class PowerSyncDatabase extends AbstractPowerSyncDatabase {\n constructor(options) {\n super(options);\n }\n async _initialize() {\n await this.database.initialize();\n }\n /**\n * Opens a DBAdapter using better-sqlite3 as the default SQLite open factory.\n */\n openDBAdapter(options) {\n return new BetterSQLite3DBAdapter(options.database);\n }\n generateBucketStorageAdapter() {\n return new SqliteBucketStorage(this.database, AbstractPowerSyncDatabase.transactionMutex);\n }\n connect(connector, options) {\n return super.connect(connector, options);\n }\n generateSyncStreamImplementation(connector, options) {\n const remote = new NodeRemote(connector, this.options.logger, {\n dispatcher: options.dispatcher,\n ...this.options.remoteOptions\n });\n return new NodeStreamingSyncImplementation({\n adapter: this.bucketStorageAdapter,\n remote,\n uploadCrud: async () => {\n await this.waitForReady();\n await connector.uploadData(this);\n },\n retryDelayMs: this.options.retryDelayMs,\n crudUploadThrottleMs: this.options.crudUploadThrottleMs,\n identifier: this.database.name\n });\n }\n}\n"],"names":["FetchImplementationProvider","AbstractRemote","DEFAULT_REMOTE_LOGGER","UndiciWebSocket","ProxyAgent","getGlobalDispatcher","os","BSON","EnvHttpProxyAgent","LockType","AbstractStreamingSyncImplementation","releaseProxy","BaseObserver","path","Worker","Comlink","AsyncResource","AbstractPowerSyncDatabase","SqliteBucketStorage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAM,iBAAiB,SAASA,kCAA2B,CAAC;AAC5D,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,KAAK;AACL,CAAC;AACM,MAAM,UAAU,SAASC,qBAAc,CAAC;AAC/C,IAAI,SAAS,CAAC;AACd,IAAI,MAAM,CAAC;AACX,IAAI,YAAY,CAAC;AACjB,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,GAAGC,4BAAqB,EAAE,OAAO,EAAE;AACpE,QAAQ,MAAM,eAAe,GAAG,OAAO,EAAE,UAAU,IAAI,sBAAsB,EAAE,CAAC;AAChF,QAAQ,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;AACjC,YAAY,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,IAAI,iBAAiB,EAAE;AACxF,YAAY,YAAY,EAAE;AAC1B,gBAAgB,UAAU,EAAE,eAAe;AAC3C,aAAa;AACb,YAAY,IAAI,OAAO,IAAI,EAAE;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,UAAU,CAAC;AAChD,KAAK;AACL,IAAI,YAAY,CAAC,GAAG,EAAE;AACtB;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;AAChE;AACA,QAAQ,MAAM,EAAE,GAAG,IAAIC,gBAAe,CAAC,GAAG,EAAE;AAC5C,YAAY,UAAU,EAAE,cAAc;AACtC,YAAY,OAAO,EAAE;AACrB,gBAAgB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjD,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,sBAAsB,CAAC,GAAG,EAAE;AAChC,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AACvC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC;AACrC,SAAS;AACT,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAChE,QAAQ,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACpD,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3B,YAAY,OAAO,IAAIC,iBAAU,CAAC,KAAK,CAAC,CAAC;AACzC,SAAS;AACT,aAAa;AACb,YAAY,OAAOC,0BAAmB,EAAE,CAAC;AACzC,SAAS;AACT,KAAK;AACL,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,KAAK,CAAC,YAAY,EAAE;AAChC,YAAY,CAAC,cAAc,CAAC;AAC5B,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAY,CAAC,EAAEC,aAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAEA,aAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,OAAOC,SAAI,CAAC;AACpB,KAAK;AACL,CAAC;AACD,SAAS,sBAAsB,GAAG;AAClC;AACA;AACA,IAAI,OAAO,IAAIC,wBAAiB,CAAC;AACjC,QAAQ,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC;AAC9C,QAAQ,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,mBAAmB,CAAC,QAAQ,EAAE;AACvC,IAAI,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;AACtD,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAChC,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;AAClC;;AC3EA;AACA;AACA;AACA;AACA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AACxB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAACC,eAAQ,CAAC,CAAC,CAAC;AAC5C,MAAM,+BAA+B,SAASC,0CAAmC,CAAC;AACzF,IAAI,KAAK,CAAC;AACV,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5C,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAChC,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,SAAS;AACT,KAAK;AACL,IAAI,UAAU,CAAC,WAAW,EAAE;AAC5B,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC9C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACvE,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY;AAChE,YAAY,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE;AAC7C,gBAAgB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3C,aAAa;AACb,YAAY,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC1C,SAAS,CAAC,CAAC;AACX,KAAK;AACL;;ACtCA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,MAAM,CAAC;AACX,IAAI,OAAO,CAAC;AACZ,IAAI,QAAQ,CAAC;AACb,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE;AAC9B,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI;AACZ,YAAY,OAAO,MAAM,KAAK,EAAE,CAAC;AACjC,SAAS;AACT,QAAQ,OAAO,CAAC,EAAE;AAClB,YAAY,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;AAC/C,gBAAgB,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;AACvC,aAAa;AACb,YAAY,MAAM,CAAC,CAAC;AACpB,SAAS;AACT,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE;AACrC,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY;AAC7C,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;AACjF,YAAY,OAAO,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY;AAC7C,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;AAC5E,YAAY,OAAO,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5D,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY;AAC7C,YAAY,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE;AAClC,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACxD,QAAQ,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;AACtC,KAAK;AACL,IAAI,MAAM,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE;AACvC,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACxD,QAAQ,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACzC,KAAK;AACL,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE;AAC/B,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACxD,QAAQ,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,YAAY,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACnD,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,CAACC,oBAAY,CAAC,EAAE,CAAC;AACtC,QAAQ,IAAI,CAAC,OAAO,CAACA,oBAAY,CAAC,EAAE,CAAC;AACrC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AACtC,KAAK;AACL,IAAI,OAAO,eAAe,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,IAAI,GAAG,SAAS,CAAC;AAC7B,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,IAAI,GAAG;AACnB,gBAAgB,GAAG,MAAM,CAAC,IAAI;AAC9B,gBAAgB,IAAI,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;AACvD,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,GAAG,MAAM;AACrB,YAAY,IAAI;AAChB,SAAS,CAAC;AACV,KAAK;AACL;;AC/EA,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B;AACA;AACA;AACO,MAAM,sBAAsB,SAASC,mBAAY,CAAC;AACzD,IAAI,OAAO,CAAC;AACZ,IAAI,IAAI,CAAC;AACT,IAAI,eAAe,CAAC;AACpB,IAAI,eAAe,CAAC;AACpB,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,IAAI,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,OAAO,CAAC,eAAe,GAAG,CAAC,EAAE;AAC5E,YAAY,MAAM,CAAC,yCAAyC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AACxF,SAAS;AACT,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;AACvC,KAAK;AACL,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACjD,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE;AACnD;AACA,YAAY,IAAI,eAAe,GAAG,KAAK,CAAC;AACxC,YAAY,IAAI;AAChB,gBAAgB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpE,gBAAgB,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACrD,aAAa;AACb,YAAY,OAAO,CAAC,EAAE;AACtB;AACA,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,yEAAyE,CAAC,CAAC,CAAC;AACpK,aAAa;AACb,YAAY,UAAU,GAAGC,eAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AACxE,SAAS;AACT,QAAQ,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK;AAC/C,YAAY,MAAM,gBAAgB,GAAG,IAAgC,IAAI,KAAK,CAAC;AAC/E,YAAY,IAAI,MAAM,CAAC;AACvB,YAAY,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACvF,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,GAAG,IAAI,KAAK,IAAIC,0BAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAChG,YAAY,IAAI,gBAAgB,EAAE;AAClC,gBAAgB,MAAM,GAAG,aAAa,CAACD,eAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3G,aAAa;AACb,iBAAiB;AACjB,gBAAgB,MAAM,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,+LAAe,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7G,aAAa;AACb,YAAY,MAAM,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5C,YAAY,MAAM,OAAO,GAAGE,kBAAO,CAAC,IAAI,CAAC;AACzC,gBAAgB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,gBAAgB,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK;AACtD,oBAAoB,IAAI,QAAQ,GAAG,aAAa,IAAI,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAC9G;AACA,oBAAoB,IAAI,IAAI,KAAK,SAAS,EAAE;AAC5C,wBAAwB,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAClD,wBAAwB,QAAQ,GAAG,CAAC,IAAI,KAAK;AAC7C,4BAA4B,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,yBAAyB,CAAC;AAC1B,qBAAqB;AACrB,oBAAoB,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtD,oBAAoB,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD,iBAAiB;AACjB,gBAAgB,mBAAmB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK;AACzD,oBAAoB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7D,oBAAoB,IAAI,CAAC,QAAQ,EAAE;AACnC,wBAAwB,OAAO;AAC/B,qBAAqB;AACrB,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1D,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;AACxC,gBAAgB,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC;AAC/E,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,QAAQ,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxE,YAAY,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnE,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;AACtD,QAAQ,MAAM,aAAa,GAAG,EAAE,CAAC;AACjC,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,gBAAgB,CAAC;AACjF,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;AAClD,YAAY,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAChE,KAAK;AACL,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC3C,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE;AACvD,YAAY,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AACrC,SAAS;AACT,KAAK;AACL,IAAI,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE;AAC3B,QAAQ,IAAI,wBAAwB,CAAC;AACrC,QAAQ,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK;AACpE,YAAY,wBAAwB,GAAGC,8BAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnE,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACzF,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;AACrC,YAAY,wBAAwB,CAAC,UAAU,CAAC,CAAC;AACjD,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC1D,SAAS;AACT,QAAQ,OAAO,CAAC,YAAY;AAC5B,YAAY,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;AACvD,YAAY,IAAI;AAChB,gBAAgB,OAAO,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;AAC5C,aAAa;AACb,oBAAoB;AACpB,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpD,gBAAgB,IAAI,IAAI,EAAE;AAC1B,oBAAoB,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;AAC9C,iBAAiB;AACjB,aAAa;AACb,SAAS,GAAG,CAAC;AACb,KAAK;AACL,IAAI,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE;AAC5B,QAAQ,IAAI,kBAAkB,CAAC;AAC/B,QAAQ,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK;AAC9D,YAAY,kBAAkB,GAAGA,8BAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;AAC1C,YAAY,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/C,YAAY,kBAAkB,EAAE,CAAC;AACjC,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,OAAO,CAAC,YAAY;AAC5B,YAAY,MAAM,WAAW,CAAC;AAC9B,YAAY,IAAI;AAChB,gBAAgB,IAAI;AACpB,oBAAoB,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1D,iBAAiB;AACjB,wBAAwB;AACxB,oBAAoB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;AAClG,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,wBAAwB,MAAM,KAAK,GAAG;AACtC,4BAA4B,MAAM,EAAE,OAAO;AAC3C,4BAA4B,cAAc,EAAE,EAAE;AAC9C,4BAA4B,UAAU,EAAE,EAAE;AAC1C,yBAAyB,CAAC;AAC1B,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;AACjF,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,oBAAoB;AACpB,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACrD,gBAAgB,IAAI,IAAI,EAAE;AAC1B,oBAAoB,IAAI,EAAE,CAAC;AAC3B,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC;AACxD,iBAAiB;AACjB,aAAa;AACb,SAAS,GAAG,CAAC;AACb,KAAK;AACL,IAAI,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACzE,KAAK;AACL,IAAI,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE,EAAE,EAAE;AAC9C,QAAQ,IAAI,SAAS,GAAG,KAAK,CAAC;AAC9B,QAAQ,MAAM,MAAM,GAAG,YAAY;AACnC,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAgB,SAAS,GAAG,IAAI,CAAC;AACjC,gBAAgB,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnD,aAAa;AACb,YAAY,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AACvC,SAAS,CAAC;AACV,QAAQ,MAAM,QAAQ,GAAG,YAAY;AACrC,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAgB,SAAS,GAAG,IAAI,CAAC;AACjC,gBAAgB,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACrD,aAAa;AACb,YAAY,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AACvC,SAAS,CAAC;AACV,QAAQ,IAAI;AACZ,YAAY,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAY,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACpC,gBAAgB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7E,gBAAgB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AACnF,gBAAgB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AACvF,gBAAgB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;AACrE,gBAAgB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AAC3E,gBAAgB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AACrF,gBAAgB,MAAM;AACtB,gBAAgB,QAAQ;AACxB,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,MAAM,EAAE,CAAC;AAC3B,YAAY,OAAO,MAAM,CAAC;AAC1B,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,IAAI;AAChB,gBAAgB,MAAM,QAAQ,EAAE,CAAC;AACjC,aAAa;AACb,YAAY,OAAO,GAAG,EAAE;AACxB;AACA;AACA,aAAa;AACb,YAAY,MAAM,EAAE,CAAC;AACrB,SAAS;AACT,KAAK;AACL,IAAI,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AACxE,KAAK;AACL,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AAChE,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACtE,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,KAAK;AACL,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;AACnD,QAAQ,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE;AAC3D,YAAY,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;AACjD,SAAS;AACT,KAAK;AACL;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,SAASC,gCAAyB,CAAC;AACjE,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,4BAA4B,GAAG;AACnC,QAAQ,OAAO,IAAIC,0BAAmB,CAAC,IAAI,CAAC,QAAQ,EAAED,gCAAyB,CAAC,gBAAgB,CAAC,CAAC;AAClG,KAAK;AACL,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE;AAChC,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,KAAK;AACL,IAAI,gCAAgC,CAAC,SAAS,EAAE,OAAO,EAAE;AACzD,QAAQ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACtE,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU;AAC1C,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AACzC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,IAAI,+BAA+B,CAAC;AACnD,YAAY,OAAO,EAAE,IAAI,CAAC,oBAAoB;AAC9C,YAAY,MAAM;AAClB,YAAY,UAAU,EAAE,YAAY;AACpC,gBAAgB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1C,gBAAgB,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjD,aAAa;AACb,YAAY,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;AACnD,YAAY,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;AACnE,YAAY,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC1C,SAAS,CAAC,CAAC;AACX,KAAK;AACL;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"bundle.cjs","sources":["../lib/sync/stream/NodeRemote.js","../lib/sync/stream/NodeStreamingSyncImplementation.js","../lib/db/RemoteConnection.js","../lib/db/BetterSQLite3DBAdapter.js","../lib/db/PowerSyncDatabase.js"],"sourcesContent":["import * as os from 'node:os';\nimport { AbstractRemote, DEFAULT_REMOTE_LOGGER, FetchImplementationProvider } from '@powersync/common';\nimport { BSON } from 'bson';\nimport { EnvHttpProxyAgent, getGlobalDispatcher, ProxyAgent, WebSocket as UndiciWebSocket } from 'undici';\nexport const STREAMING_POST_TIMEOUT_MS = 30_000;\nclass NodeFetchProvider extends FetchImplementationProvider {\n getFetch() {\n return fetch.bind(globalThis);\n }\n}\nexport class NodeRemote extends AbstractRemote {\n connector;\n logger;\n wsDispatcher;\n constructor(connector, logger = DEFAULT_REMOTE_LOGGER, options) {\n const fetchDispatcher = options?.dispatcher ?? defaultFetchDispatcher();\n super(connector, logger, {\n fetchImplementation: options?.fetchImplementation ?? new NodeFetchProvider(),\n fetchOptions: {\n dispatcher: fetchDispatcher\n },\n ...(options ?? {})\n });\n this.connector = connector;\n this.logger = logger;\n this.wsDispatcher = options?.dispatcher;\n }\n createSocket(url) {\n // Create dedicated dispatcher for this WebSocket\n const baseDispatcher = this.getWebsocketDispatcher(url);\n // Create WebSocket with dedicated dispatcher\n const ws = new UndiciWebSocket(url, {\n dispatcher: baseDispatcher,\n headers: {\n 'User-Agent': this.getUserAgent()\n }\n });\n return ws;\n }\n getWebsocketDispatcher(url) {\n if (this.wsDispatcher != null) {\n return this.wsDispatcher;\n }\n const protocol = new URL(url).protocol.replace(':', '');\n const proxy = getProxyForProtocol(protocol);\n if (proxy != null) {\n return new ProxyAgent(proxy);\n }\n else {\n return getGlobalDispatcher();\n }\n }\n getUserAgent() {\n return [\n super.getUserAgent(),\n `powersync-node`,\n `node/${process.versions.node}`,\n `${os.platform()}/${os.release()}`\n ].join(' ');\n }\n async getBSON() {\n return BSON;\n }\n}\nfunction defaultFetchDispatcher() {\n // EnvHttpProxyAgent automatically uses HTTP_PROXY, HTTPS_PROXY and NO_PROXY env vars by default.\n // We add ALL_PROXY support.\n return new EnvHttpProxyAgent({\n httpProxy: getProxyForProtocol('http'),\n httpsProxy: getProxyForProtocol('https')\n });\n}\nfunction getProxyForProtocol(protocol) {\n return (process.env[`${protocol.toLowerCase()}_proxy`] ??\n process.env[`${protocol.toUpperCase()}_PROXY`] ??\n process.env[`all_proxy`] ??\n process.env[`ALL_PROXY`]);\n}\n","import { AbstractStreamingSyncImplementation, LockType } from '@powersync/common';\nimport Lock from 'async-lock';\n/**\n * Global locks which prevent multiple instances from syncing\n * concurrently.\n */\nconst LOCKS = new Map();\nconst lockTypes = new Set(Object.values(LockType));\nexport class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplementation {\n locks;\n constructor(options) {\n super(options);\n this.initLocks();\n }\n /**\n * Configures global locks on sync process\n */\n initLocks() {\n const { identifier } = this.options;\n if (identifier && LOCKS.has(identifier)) {\n this.locks = LOCKS.get(identifier);\n return;\n }\n this.locks = new Lock();\n if (identifier) {\n LOCKS.set(identifier, this.locks);\n }\n }\n obtainLock(lockOptions) {\n if (!lockTypes.has(lockOptions.type)) {\n throw new Error(`Lock type ${lockOptions.type} not found`);\n }\n return this.locks.acquire(lockOptions.type, async () => {\n if (lockOptions.signal?.aborted) {\n throw new Error('Aborted');\n }\n return lockOptions.callback();\n });\n }\n}\n","import { releaseProxy } from 'comlink';\n/**\n * A PowerSync database connection implemented with RPC calls to a background worker.\n */\nexport class RemoteConnection {\n isBusy = false;\n worker;\n comlink;\n database;\n constructor(worker, comlink, database) {\n this.worker = worker;\n this.comlink = comlink;\n this.database = database;\n }\n /**\n * Runs the inner function, but appends the stack trace where this function was called. This is useful for workers\n * because stack traces from worker errors are otherwise unrelated to the application issue that has caused them.\n */\n async recoverTrace(inner) {\n const trace = {};\n Error.captureStackTrace(trace);\n try {\n return await inner();\n }\n catch (e) {\n if (e instanceof Error && e.stack) {\n e.stack += trace.stack;\n }\n throw e;\n }\n }\n executeBatch(query, params = []) {\n return this.recoverTrace(async () => {\n const result = await this.database.executeBatch(query, params ?? []);\n return RemoteConnection.wrapQueryResult(result);\n });\n }\n execute(query, params) {\n return this.recoverTrace(async () => {\n const result = await this.database.execute(query, params ?? []);\n return RemoteConnection.wrapQueryResult(result);\n });\n }\n executeRaw(query, params) {\n return this.recoverTrace(async () => {\n return await this.database.executeRaw(query, params ?? []);\n });\n }\n async getAll(sql, parameters) {\n const res = await this.execute(sql, parameters);\n return res.rows?._array ?? [];\n }\n async getOptional(sql, parameters) {\n const res = await this.execute(sql, parameters);\n return res.rows?.item(0) ?? null;\n }\n async get(sql, parameters) {\n const res = await this.execute(sql, parameters);\n const first = res.rows?.item(0);\n if (!first) {\n throw new Error('Result set is empty');\n }\n return first;\n }\n async refreshSchema() {\n await this.execute(\"pragma table_info('sqlite_master')\");\n }\n async close() {\n await this.database.close();\n this.database[releaseProxy]();\n this.comlink[releaseProxy]();\n await this.worker.terminate();\n }\n static wrapQueryResult(result) {\n let rows = undefined;\n if (result.rows) {\n rows = {\n ...result.rows,\n item: (idx) => result.rows?._array[idx]\n };\n }\n return {\n ...result,\n rows\n };\n }\n}\n","import fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { Worker } from 'node:worker_threads';\nimport * as Comlink from 'comlink';\nimport { BaseObserver } from '@powersync/common';\nimport { AsyncResource } from 'node:async_hooks';\nimport { RemoteConnection } from './RemoteConnection.js';\nconst READ_CONNECTIONS = 5;\n/**\n * Adapter for better-sqlite3\n */\nexport class BetterSQLite3DBAdapter extends BaseObserver {\n options;\n name;\n readConnections;\n writeConnection;\n readQueue = [];\n writeQueue = [];\n constructor(options) {\n super();\n if (options.readWorkerCount != null && options.readWorkerCount < 1) {\n throw `Needs at least one worker for reads, got ${options.readWorkerCount}`;\n }\n this.options = options;\n this.name = options.dbFilename;\n }\n async initialize() {\n let dbFilePath = this.options.dbFilename;\n if (this.options.dbLocation !== undefined) {\n // Make sure the dbLocation exists, we get a TypeError from better-sqlite3 otherwise.\n let directoryExists = false;\n try {\n const stat = await fs.stat(this.options.dbLocation);\n directoryExists = stat.isDirectory();\n }\n catch (_) {\n // If we can't even stat, the directory won't be accessible to SQLite either.\n }\n if (!directoryExists) {\n throw new Error(`The dbLocation directory at \"${this.options.dbLocation}\" does not exist. Please create it before opening the PowerSync database!`);\n }\n dbFilePath = path.join(this.options.dbLocation, dbFilePath);\n }\n const openWorker = async (isWriter) => {\n const isCommonJsModule = import.meta.isBundlingToCommonJs ?? false;\n let worker;\n const workerName = isWriter ? `write ${dbFilePath}` : `read ${dbFilePath}`;\n const workerFactory = this.options.openWorker ?? ((...args) => new Worker(...args));\n if (isCommonJsModule) {\n worker = workerFactory(path.resolve(__dirname, 'DefaultWorker.cjs'), { name: workerName });\n }\n else {\n worker = workerFactory(new URL('./DefaultWorker.js', import.meta.url), { name: workerName });\n }\n const listeners = new WeakMap();\n const comlink = Comlink.wrap({\n postMessage: worker.postMessage.bind(worker),\n addEventListener: (type, listener) => {\n let resolved = 'handleEvent' in listener ? listener.handleEvent.bind(listener) : listener;\n // Comlink wants message events, but the message event on workers in Node returns the data only.\n if (type === 'message') {\n const original = resolved;\n resolved = (data) => {\n original({ data });\n };\n }\n listeners.set(listener, resolved);\n worker.addListener(type, resolved);\n },\n removeEventListener: (type, listener) => {\n const resolved = listeners.get(listener);\n if (!resolved) {\n return;\n }\n worker.removeListener(type, resolved);\n }\n });\n worker.once('error', (e) => {\n console.error('Unexpected PowerSync database worker error', e);\n });\n const database = (await comlink.open(dbFilePath, isWriter));\n return new RemoteConnection(worker, comlink, database);\n };\n // Open the writer first to avoid multiple threads enabling WAL concurrently (causing \"database is locked\" errors).\n this.writeConnection = await openWorker(true);\n const createWorkers = [];\n const amountOfReaders = this.options.readWorkerCount ?? READ_CONNECTIONS;\n for (let i = 0; i < amountOfReaders; i++) {\n createWorkers.push(openWorker(false));\n }\n this.readConnections = await Promise.all(createWorkers);\n }\n async close() {\n await this.writeConnection.close();\n for (const connection of this.readConnections) {\n await connection.close();\n }\n }\n readLock(fn, _options) {\n let resolveConnectionPromise;\n const connectionPromise = new Promise((resolve, _reject) => {\n resolveConnectionPromise = AsyncResource.bind(resolve);\n });\n const connection = this.readConnections.find((connection) => !connection.isBusy);\n if (connection) {\n connection.isBusy = true;\n resolveConnectionPromise(connection);\n }\n else {\n this.readQueue.push(resolveConnectionPromise);\n }\n return (async () => {\n const connection = await connectionPromise;\n try {\n return await fn(connection);\n }\n finally {\n const next = this.readQueue.shift();\n if (next) {\n next(connection);\n }\n else {\n connection.isBusy = false;\n }\n }\n })();\n }\n writeLock(fn, _options) {\n let resolveLockPromise;\n const lockPromise = new Promise((resolve, _reject) => {\n resolveLockPromise = AsyncResource.bind(resolve);\n });\n if (!this.writeConnection.isBusy) {\n this.writeConnection.isBusy = true;\n resolveLockPromise();\n }\n else {\n this.writeQueue.push(resolveLockPromise);\n }\n return (async () => {\n await lockPromise;\n try {\n try {\n return await fn(this.writeConnection);\n }\n finally {\n const updates = await this.writeConnection.database.collectCommittedUpdates();\n if (updates.length > 0) {\n const event = {\n tables: updates,\n groupedUpdates: {},\n rawUpdates: []\n };\n this.iterateListeners((cb) => cb.tablesUpdated?.(event));\n }\n }\n }\n finally {\n const next = this.writeQueue.shift();\n if (next) {\n next();\n }\n else {\n this.writeConnection.isBusy = false;\n }\n }\n })();\n }\n readTransaction(fn, _options) {\n return this.readLock((ctx) => this.internalTransaction(ctx, fn));\n }\n writeTransaction(fn, _options) {\n return this.writeLock((ctx) => this.internalTransaction(ctx, fn));\n }\n async internalTransaction(connection, fn) {\n let finalized = false;\n const commit = async () => {\n if (!finalized) {\n finalized = true;\n await connection.execute('COMMIT');\n }\n return { rowsAffected: 0 };\n };\n const rollback = async () => {\n if (!finalized) {\n finalized = true;\n await connection.execute('ROLLBACK');\n }\n return { rowsAffected: 0 };\n };\n try {\n await connection.execute('BEGIN');\n const result = await fn({\n execute: (query, params) => connection.execute(query, params),\n executeRaw: (query, params) => connection.executeRaw(query, params),\n executeBatch: (query, params) => connection.executeBatch(query, params),\n get: (query, params) => connection.get(query, params),\n getAll: (query, params) => connection.getAll(query, params),\n getOptional: (query, params) => connection.getOptional(query, params),\n commit,\n rollback\n });\n await commit();\n return result;\n }\n catch (ex) {\n try {\n await rollback();\n }\n catch (ex2) {\n // In rare cases, a rollback may fail.\n // Safe to ignore.\n }\n throw ex;\n }\n }\n getAll(sql, parameters) {\n return this.readLock((ctx) => ctx.getAll(sql, parameters));\n }\n getOptional(sql, parameters) {\n return this.readLock((ctx) => ctx.getOptional(sql, parameters));\n }\n get(sql, parameters) {\n return this.readLock((ctx) => ctx.get(sql, parameters));\n }\n execute(query, params) {\n return this.writeLock((ctx) => ctx.execute(query, params));\n }\n executeRaw(query, params) {\n return this.writeLock((ctx) => ctx.executeRaw(query, params));\n }\n executeBatch(query, params) {\n return this.writeTransaction((ctx) => ctx.executeBatch(query, params));\n }\n async refreshSchema() {\n await this.writeConnection.refreshSchema();\n for (const readConnection of this.readConnections) {\n await readConnection.refreshSchema();\n }\n }\n}\n","import { AbstractPowerSyncDatabase, SqliteBucketStorage } from '@powersync/common';\nimport { NodeRemote } from '../sync/stream/NodeRemote.js';\nimport { NodeStreamingSyncImplementation } from '../sync/stream/NodeStreamingSyncImplementation.js';\nimport { BetterSQLite3DBAdapter } from './BetterSQLite3DBAdapter.js';\n/**\n * A PowerSync database which provides SQLite functionality\n * which is automatically synced.\n *\n * @example\n * ```typescript\n * export const db = new PowerSyncDatabase({\n * schema: AppSchema,\n * database: {\n * dbFilename: 'example.db'\n * }\n * });\n * ```\n */\nexport class PowerSyncDatabase extends AbstractPowerSyncDatabase {\n constructor(options) {\n super(options);\n }\n async _initialize() {\n await this.database.initialize();\n }\n /**\n * Opens a DBAdapter using better-sqlite3 as the default SQLite open factory.\n */\n openDBAdapter(options) {\n return new BetterSQLite3DBAdapter(options.database);\n }\n generateBucketStorageAdapter() {\n return new SqliteBucketStorage(this.database, this.logger);\n }\n connect(connector, options) {\n return super.connect(connector, options);\n }\n generateSyncStreamImplementation(connector, options) {\n const logger = this.logger;\n const remote = new NodeRemote(connector, logger, {\n dispatcher: options.dispatcher,\n ...this.options.remoteOptions\n });\n return new NodeStreamingSyncImplementation({\n adapter: this.bucketStorageAdapter,\n remote,\n uploadCrud: async () => {\n await this.waitForReady();\n await connector.uploadData(this);\n },\n retryDelayMs: this.options.retryDelayMs,\n crudUploadThrottleMs: this.options.crudUploadThrottleMs,\n identifier: this.database.name,\n logger\n });\n }\n}\n"],"names":["FetchImplementationProvider","AbstractRemote","DEFAULT_REMOTE_LOGGER","UndiciWebSocket","ProxyAgent","getGlobalDispatcher","os","BSON","EnvHttpProxyAgent","LockType","AbstractStreamingSyncImplementation","releaseProxy","BaseObserver","path","Worker","Comlink","AsyncResource","AbstractPowerSyncDatabase","SqliteBucketStorage"],"mappings":"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"}
|
package/download_core.js
CHANGED
|
@@ -8,13 +8,13 @@ import { finished } from 'node:stream/promises';
|
|
|
8
8
|
import { exit } from 'node:process';
|
|
9
9
|
|
|
10
10
|
// When changing this version, run node download_core.js update_hashes
|
|
11
|
-
const version = '0.4.
|
|
11
|
+
const version = '0.4.2';
|
|
12
12
|
const versionHashes = {
|
|
13
|
-
'powersync_x64.dll': '
|
|
14
|
-
'libpowersync_x64.so': '
|
|
15
|
-
'libpowersync_aarch64.so': '
|
|
16
|
-
'libpowersync_x64.dylib': '
|
|
17
|
-
'libpowersync_aarch64.dylib': '
|
|
13
|
+
'powersync_x64.dll': '1106ea05b6c5671cb273300ba0712382a4b7f93b925d0d3640993ea6adab1415',
|
|
14
|
+
'libpowersync_x64.so': '9a6c8b501ffa1cc1e41c8ccf3859e1263da8699ba125196e853b792b0c8932a5',
|
|
15
|
+
'libpowersync_aarch64.so': '790f668982ffadff838bc3340a7a60464b10f060ea4eeb78a2c51a0bb930121e',
|
|
16
|
+
'libpowersync_x64.dylib': 'e3886580a4f2aa5ecfc6bd9a09e478c525fb35c88c7983ebc65039d253caf2f0',
|
|
17
|
+
'libpowersync_aarch64.dylib': '93f559a2eb181f7b97c8a56386b098fcc15f3b11169516c58598d8930ebce92b'
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
const platform = OS.platform();
|
|
@@ -30,13 +30,14 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
|
30
30
|
return new BetterSQLite3DBAdapter(options.database);
|
|
31
31
|
}
|
|
32
32
|
generateBucketStorageAdapter() {
|
|
33
|
-
return new SqliteBucketStorage(this.database,
|
|
33
|
+
return new SqliteBucketStorage(this.database, this.logger);
|
|
34
34
|
}
|
|
35
35
|
connect(connector, options) {
|
|
36
36
|
return super.connect(connector, options);
|
|
37
37
|
}
|
|
38
38
|
generateSyncStreamImplementation(connector, options) {
|
|
39
|
-
const
|
|
39
|
+
const logger = this.logger;
|
|
40
|
+
const remote = new NodeRemote(connector, logger, {
|
|
40
41
|
dispatcher: options.dispatcher,
|
|
41
42
|
...this.options.remoteOptions
|
|
42
43
|
});
|
|
@@ -49,7 +50,8 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
|
49
50
|
},
|
|
50
51
|
retryDelayMs: this.options.retryDelayMs,
|
|
51
52
|
crudUploadThrottleMs: this.options.crudUploadThrottleMs,
|
|
52
|
-
identifier: this.database.name
|
|
53
|
+
identifier: this.database.name,
|
|
54
|
+
logger
|
|
53
55
|
});
|
|
54
56
|
}
|
|
55
57
|
}
|
package/lib/libpowersync.so
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://docs.powersync.com/",
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@powersync/common": "^1.
|
|
40
|
+
"@powersync/common": "^1.35.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@powersync/better-sqlite3": "^0.2.0",
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
"bson": "^6.6.0",
|
|
46
46
|
"comlink": "^4.4.2",
|
|
47
47
|
"undici": "^7.11.0",
|
|
48
|
-
"@powersync/common": "1.
|
|
48
|
+
"@powersync/common": "1.35.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/async-lock": "^1.4.0",
|
|
52
52
|
"drizzle-orm": "^0.35.2",
|
|
53
53
|
"rollup": "4.14.3",
|
|
54
54
|
"typescript": "^5.5.3",
|
|
55
|
-
"vitest": "^3.
|
|
55
|
+
"vitest": "^3.2.4",
|
|
56
56
|
"@powersync/drizzle-driver": "0.4.0"
|
|
57
57
|
},
|
|
58
58
|
"keywords": [
|