@powersync/node 0.0.0-dev-20251003085035 → 0.0.0-dev-20251020151114
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/DefaultWorker.cjs +44 -37
- package/dist/DefaultWorker.cjs.map +1 -1
- package/dist/worker.cjs +45 -37
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +5 -1
- package/download_core.js +14 -25
- package/lib/db/SqliteWorker.d.ts +4 -0
- package/lib/db/SqliteWorker.js +45 -38
- package/package.json +3 -3
- /package/lib/{libpowersync-aarch64.dylib → libpowersync_aarch64.dylib} +0 -0
- /package/lib/{libpowersync-aarch64.so → libpowersync_aarch64.so} +0 -0
- /package/lib/{libpowersync.dylib → libpowersync_x64.dylib} +0 -0
- /package/lib/{libpowersync.so → libpowersync_x64.so} +0 -0
- /package/lib/{powersync.dll → powersync_x64.dll} +0 -0
package/dist/DefaultWorker.cjs
CHANGED
|
@@ -135,48 +135,55 @@ async function openDatabase(worker, options) {
|
|
|
135
135
|
return new BlockingNodeDatabase(baseDB, options.isWriter);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* @returns The relevant PowerSync extension binary filename for the current platform and architecture
|
|
140
|
+
*/
|
|
141
|
+
function getPowerSyncExtensionFilename() {
|
|
142
|
+
const platform = OS.platform();
|
|
143
|
+
const arch = OS.arch();
|
|
144
|
+
let extensionFile;
|
|
145
|
+
if (platform == 'win32') {
|
|
146
|
+
if (arch == 'x64') {
|
|
147
|
+
extensionFile = 'powersync_x64.dll';
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
throw new Error('Windows platform only supports x64 architecture.');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (platform == 'linux') {
|
|
154
|
+
if (arch == 'x64') {
|
|
155
|
+
extensionFile = 'libpowersync_x64.so';
|
|
156
|
+
}
|
|
157
|
+
else if (arch == 'arm64') {
|
|
158
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
throw new Error('Linux platform only supports x64 and arm64 architectures.');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (platform == 'darwin') {
|
|
165
|
+
if (arch == 'x64') {
|
|
166
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
167
|
+
}
|
|
168
|
+
else if (arch == 'arm64') {
|
|
169
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
177
|
+
}
|
|
178
|
+
return extensionFile;
|
|
179
|
+
}
|
|
138
180
|
function startPowerSyncWorker(options) {
|
|
139
181
|
const resolvedOptions = {
|
|
140
182
|
extensionPath() {
|
|
141
|
-
const
|
|
142
|
-
const arch = OS.arch();
|
|
143
|
-
let extensionPath;
|
|
144
|
-
if (platform === 'win32') {
|
|
145
|
-
if (arch === 'x64') {
|
|
146
|
-
extensionPath = 'powersync.dll';
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
throw 'Windows platform only supports x64 architecture.';
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
else if (platform === 'linux') {
|
|
153
|
-
if (arch === 'x64') {
|
|
154
|
-
extensionPath = 'libpowersync.so';
|
|
155
|
-
}
|
|
156
|
-
else if (arch === 'arm64') {
|
|
157
|
-
extensionPath = 'libpowersync-aarch64.so';
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
throw 'Linux platform only supports x64 and arm64 architectures.';
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else if (platform === 'darwin') {
|
|
164
|
-
if (arch === 'x64') {
|
|
165
|
-
extensionPath = 'libpowersync.dylib';
|
|
166
|
-
}
|
|
167
|
-
else if (arch === 'arm64') {
|
|
168
|
-
extensionPath = 'libpowersync-aarch64.dylib';
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
throw 'macOS platform only supports x64 and arm64 architectures.';
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
throw 'Unknown platform, PowerSync for Node.js currently supports Windows, Linux and macOS.';
|
|
176
|
-
}
|
|
183
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
177
184
|
let resolved;
|
|
178
185
|
{
|
|
179
|
-
resolved = path__namespace.resolve(__dirname, '../lib/',
|
|
186
|
+
resolved = path__namespace.resolve(__dirname, '../lib/', extensionFilename);
|
|
180
187
|
}
|
|
181
188
|
return resolved;
|
|
182
189
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultWorker.cjs","sources":["../lib/utils/modules_commonjs.js","../lib/db/BetterSqliteWorker.js","../lib/db/NodeSqliteWorker.js","../lib/db/SqliteWorker.js","../lib/db/DefaultWorker.js"],"sourcesContent":["// NOTE! Do not import this file directly! We have a rollup plugin that rewrites imports to modules.js to this file when\n// bundling to CommonJS.\nexport const isBundledToCommonJs = true;\nexport async function dynamicImport(path) {\n return require(path);\n}\n","import { threadId } from 'node:worker_threads';\nclass BlockingAsyncDatabase {\n db;\n constructor(db) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n const rows = stmt.all(params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n else {\n const info = stmt.run(params);\n return {\n rowsAffected: info.changes,\n insertId: Number(info.lastInsertRowid)\n };\n }\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n return stmt.raw().all(params);\n }\n else {\n stmt.raw().run(params);\n return [];\n }\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n const BetterSQLite3Database = await worker.loadBetterSqlite3();\n const baseDB = new BetterSQLite3Database(options.path);\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n const asyncDb = new BlockingAsyncDatabase(baseDB);\n return asyncDb;\n}\n","import { threadId } from 'node:worker_threads';\nimport { dynamicImport } from '../utils/modules.js';\nclass BlockingNodeDatabase {\n db;\n constructor(db, write) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n const rows = stmt.all(...params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n stmt.setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled\n return stmt.all(...params);\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(...paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n // NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the\n // end, since that would make us incompatible with older Node.JS versions.\n const { DatabaseSync } = await dynamicImport('node:sqlite');\n const baseDB = new DatabaseSync(options.path, { allowExtension: true });\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n return new BlockingNodeDatabase(baseDB, options.isWriter);\n}\n","import * as Comlink from 'comlink';\nimport OS from 'node:os';\nimport * as path from 'node:path';\nimport url from 'node:url';\nimport { parentPort } from 'node:worker_threads';\nimport { dynamicImport, isBundledToCommonJs } from '../utils/modules.js';\nimport { openDatabase as openBetterSqliteDatabase } from './BetterSqliteWorker.js';\nimport { openDatabase as openNodeDatabase } from './NodeSqliteWorker.js';\nexport function startPowerSyncWorker(options) {\n const resolvedOptions = {\n extensionPath() {\n const isCommonJsModule = isBundledToCommonJs;\n const platform = OS.platform();\n const arch = OS.arch();\n let extensionPath;\n if (platform === 'win32') {\n if (arch === 'x64') {\n extensionPath = 'powersync.dll';\n }\n else {\n throw 'Windows platform only supports x64 architecture.';\n }\n }\n else if (platform === 'linux') {\n if (arch === 'x64') {\n extensionPath = 'libpowersync.so';\n }\n else if (arch === 'arm64') {\n extensionPath = 'libpowersync-aarch64.so';\n }\n else {\n throw 'Linux platform only supports x64 and arm64 architectures.';\n }\n }\n else if (platform === 'darwin') {\n if (arch === 'x64') {\n extensionPath = 'libpowersync.dylib';\n }\n else if (arch === 'arm64') {\n extensionPath = 'libpowersync-aarch64.dylib';\n }\n else {\n throw 'macOS platform only supports x64 and arm64 architectures.';\n }\n }\n else {\n throw 'Unknown platform, PowerSync for Node.js currently supports Windows, Linux and macOS.';\n }\n let resolved;\n if (isCommonJsModule) {\n resolved = path.resolve(__dirname, '../lib/', extensionPath);\n }\n else {\n resolved = url.fileURLToPath(new URL(`../${extensionPath}`, import.meta.url));\n }\n return resolved;\n },\n async loadBetterSqlite3() {\n const module = await dynamicImport('better-sqlite3');\n return module.default;\n },\n ...options\n };\n Comlink.expose(new DatabaseOpenHelper(resolvedOptions), parentPort);\n}\nclass DatabaseOpenHelper {\n options;\n constructor(options) {\n this.options = options;\n }\n async open(options) {\n let database;\n const implementation = options.implementation;\n switch (implementation.type) {\n case 'better-sqlite3':\n database = await openBetterSqliteDatabase(this.options, options);\n break;\n case 'node:sqlite':\n database = await openNodeDatabase(this.options, options);\n break;\n default:\n throw new Error(`Unknown database implementation: ${options.implementation}.`);\n }\n return Comlink.proxy(database);\n }\n}\n","import { startPowerSyncWorker } from './SqliteWorker.js';\nstartPowerSyncWorker();\n"],"names":["threadId","openDatabase","path","Comlink","parentPort","openBetterSqliteDatabase","openNodeDatabase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DefaultWorker.cjs","sources":["../lib/utils/modules_commonjs.js","../lib/db/BetterSqliteWorker.js","../lib/db/NodeSqliteWorker.js","../lib/db/SqliteWorker.js","../lib/db/DefaultWorker.js"],"sourcesContent":["// NOTE! Do not import this file directly! We have a rollup plugin that rewrites imports to modules.js to this file when\n// bundling to CommonJS.\nexport const isBundledToCommonJs = true;\nexport async function dynamicImport(path) {\n return require(path);\n}\n","import { threadId } from 'node:worker_threads';\nclass BlockingAsyncDatabase {\n db;\n constructor(db) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n const rows = stmt.all(params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n else {\n const info = stmt.run(params);\n return {\n rowsAffected: info.changes,\n insertId: Number(info.lastInsertRowid)\n };\n }\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n return stmt.raw().all(params);\n }\n else {\n stmt.raw().run(params);\n return [];\n }\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n const BetterSQLite3Database = await worker.loadBetterSqlite3();\n const baseDB = new BetterSQLite3Database(options.path);\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n const asyncDb = new BlockingAsyncDatabase(baseDB);\n return asyncDb;\n}\n","import { threadId } from 'node:worker_threads';\nimport { dynamicImport } from '../utils/modules.js';\nclass BlockingNodeDatabase {\n db;\n constructor(db, write) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n const rows = stmt.all(...params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n stmt.setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled\n return stmt.all(...params);\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(...paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n // NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the\n // end, since that would make us incompatible with older Node.JS versions.\n const { DatabaseSync } = await dynamicImport('node:sqlite');\n const baseDB = new DatabaseSync(options.path, { allowExtension: true });\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n return new BlockingNodeDatabase(baseDB, options.isWriter);\n}\n","import * as Comlink from 'comlink';\nimport OS from 'node:os';\nimport * as path from 'node:path';\nimport url from 'node:url';\nimport { parentPort } from 'node:worker_threads';\nimport { dynamicImport, isBundledToCommonJs } from '../utils/modules.js';\nimport { openDatabase as openBetterSqliteDatabase } from './BetterSqliteWorker.js';\nimport { openDatabase as openNodeDatabase } from './NodeSqliteWorker.js';\n/**\n * @returns The relevant PowerSync extension binary filename for the current platform and architecture\n */\nexport function getPowerSyncExtensionFilename() {\n const platform = OS.platform();\n const arch = OS.arch();\n let extensionFile;\n if (platform == 'win32') {\n if (arch == 'x64') {\n extensionFile = 'powersync_x64.dll';\n }\n else {\n throw new Error('Windows platform only supports x64 architecture.');\n }\n }\n else if (platform == 'linux') {\n if (arch == 'x64') {\n extensionFile = 'libpowersync_x64.so';\n }\n else if (arch == 'arm64') {\n extensionFile = 'libpowersync_aarch64.so';\n }\n else {\n throw new Error('Linux platform only supports x64 and arm64 architectures.');\n }\n }\n else if (platform == 'darwin') {\n if (arch == 'x64') {\n extensionFile = 'libpowersync_x64.dylib';\n }\n else if (arch == 'arm64') {\n extensionFile = 'libpowersync_aarch64.dylib';\n }\n else {\n throw new Error('macOS platform only supports x64 and arm64 architectures.');\n }\n }\n else {\n throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);\n }\n return extensionFile;\n}\nexport function startPowerSyncWorker(options) {\n const resolvedOptions = {\n extensionPath() {\n const isCommonJsModule = isBundledToCommonJs;\n const extensionFilename = getPowerSyncExtensionFilename();\n let resolved;\n if (isCommonJsModule) {\n resolved = path.resolve(__dirname, '../lib/', extensionFilename);\n }\n else {\n resolved = url.fileURLToPath(new URL(`../${extensionFilename}`, import.meta.url));\n }\n return resolved;\n },\n async loadBetterSqlite3() {\n const module = await dynamicImport('better-sqlite3');\n return module.default;\n },\n ...options\n };\n Comlink.expose(new DatabaseOpenHelper(resolvedOptions), parentPort);\n}\nclass DatabaseOpenHelper {\n options;\n constructor(options) {\n this.options = options;\n }\n async open(options) {\n let database;\n const implementation = options.implementation;\n switch (implementation.type) {\n case 'better-sqlite3':\n database = await openBetterSqliteDatabase(this.options, options);\n break;\n case 'node:sqlite':\n database = await openNodeDatabase(this.options, options);\n break;\n default:\n throw new Error(`Unknown database implementation: ${options.implementation}.`);\n }\n return Comlink.proxy(database);\n }\n}\n","import { startPowerSyncWorker } from './SqliteWorker.js';\nstartPowerSyncWorker();\n"],"names":["threadId","openDatabase","path","Comlink","parentPort","openBetterSqliteDatabase","openNodeDatabase"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAEO,eAAe,aAAa,CAAC,IAAI,EAAE;AAC1C,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB;;ACJA,MAAM,qBAAqB,CAAC;AAC5B,IAAI,EAAE,CAAC;AACP,IAAI,WAAW,CAAC,EAAE,EAAE;AACpB,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACrB,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAMA,4BAAQ,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AACjC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAY,OAAO;AACnB,gBAAgB,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,MAAM,EAAE,IAAI,CAAC,MAAM;AACvC,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAY,OAAO;AACnB,gBAAgB,YAAY,EAAE,IAAI,CAAC,OAAO;AAC1C,gBAAgB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;AACtD,aAAa,CAAC;AACd,SAAS;AACT,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AACpC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC1C,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnC,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS;AACT,KAAK;AACL,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;AACtC,QAAQ,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC9B,QAAQ,IAAI,YAAY,GAAG,CAAC,CAAC;AAC7B,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE;AACvC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAY,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC;AACzC,SAAS;AACT,QAAQ,OAAO,EAAE,YAAY,EAAE,CAAC;AAChC,KAAK;AACL,CAAC;AACM,eAAeC,cAAY,CAAC,MAAM,EAAE,OAAO,EAAE;AACpD,IAAI,MAAM,qBAAqB,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;AACnE,IAAI,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3D,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAC3E,IAAI,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtD,IAAI,OAAO,OAAO,CAAC;AACnB;;ACvDA,MAAM,oBAAoB,CAAC;AAC3B,IAAI,EAAE,CAAC;AACP,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACrB,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAMD,4BAAQ,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACxB,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AACjC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACzC,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE,CAAC;AAC3B,YAAY,IAAI,EAAE;AAClB,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnC,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AACpC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACnC,KAAK;AACL,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;AACtC,QAAQ,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC9B,QAAQ,IAAI,YAAY,GAAG,CAAC,CAAC;AAC7B,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAQ,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE;AACvC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/C,YAAY,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC;AACzC,SAAS;AACT,QAAQ,OAAO,EAAE,YAAY,EAAE,CAAC;AAChC,KAAK;AACL,CAAC;AACM,eAAe,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;AACpD;AACA;AACA,IAAI,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;AAChE,IAAI,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAC3E,IAAI,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9D;;ACrCA;AACA;AACA;AACO,SAAS,6BAA6B,GAAG;AAChD,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;AAC3B,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE;AAC7B,QAAQ,IAAI,IAAI,IAAI,KAAK,EAAE;AAC3B,YAAY,aAAa,GAAG,mBAAmB,CAAC;AAChD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAChF,SAAS;AACT,KAAK;AACL,SAAS,IAAI,QAAQ,IAAI,OAAO,EAAE;AAClC,QAAQ,IAAI,IAAI,IAAI,KAAK,EAAE;AAC3B,YAAY,aAAa,GAAG,qBAAqB,CAAC;AAClD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,OAAO,EAAE;AAClC,YAAY,aAAa,GAAG,yBAAyB,CAAC;AACtD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AACzF,SAAS;AACT,KAAK;AACL,SAAS,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACnC,QAAQ,IAAI,IAAI,IAAI,KAAK,EAAE;AAC3B,YAAY,aAAa,GAAG,wBAAwB,CAAC;AACrD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,OAAO,EAAE;AAClC,YAAY,aAAa,GAAG,4BAA4B,CAAC;AACzD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AACzF,SAAS;AACT,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,QAAQ,CAAC,oEAAoE,CAAC,CAAC,CAAC;AAC7H,KAAK;AACL,IAAI,OAAO,aAAa,CAAC;AACzB,CAAC;AACM,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,aAAa,GAAG;AAExB,YAAY,MAAM,iBAAiB,GAAG,6BAA6B,EAAE,CAAC;AACtE,YAAY,IAAI,QAAQ,CAAC;AACzB,YAAkC;AAClC,gBAAgB,QAAQ,GAAGE,eAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACjF,aAGa;AACb,YAAY,OAAO,QAAQ,CAAC;AAC5B,SAAS;AACT,QAAQ,MAAM,iBAAiB,GAAG;AAClC,YAAY,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;AACjE,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC;AAClC,SAAS;AACT,QAAQ,GAAG,OAAO;AAClB,KAAK,CAAC;AACN,IAAIC,kBAAO,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,eAAe,CAAC,EAAEC,8BAAU,CAAC,CAAC;AACxE,CAAC;AACD,MAAM,kBAAkB,CAAC;AACzB,IAAI,OAAO,CAAC;AACZ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,KAAK;AACL,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,QAAQ,CAAC;AACrB,QAAQ,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;AACtD,QAAQ,QAAQ,cAAc,CAAC,IAAI;AACnC,YAAY,KAAK,gBAAgB;AACjC,gBAAgB,QAAQ,GAAG,MAAMC,cAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjF,gBAAgB,MAAM;AACtB,YAAY,KAAK,aAAa;AAC9B,gBAAgB,QAAQ,GAAG,MAAMC,YAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzE,gBAAgB,MAAM;AACtB,YAAY;AACZ,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,SAAS;AACT,QAAQ,OAAOH,kBAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvC,KAAK;AACL;;AC3FA,oBAAoB,EAAE;;"}
|
package/dist/worker.cjs
CHANGED
|
@@ -135,48 +135,55 @@ async function openDatabase(worker, options) {
|
|
|
135
135
|
return new BlockingNodeDatabase(baseDB, options.isWriter);
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* @returns The relevant PowerSync extension binary filename for the current platform and architecture
|
|
140
|
+
*/
|
|
141
|
+
function getPowerSyncExtensionFilename() {
|
|
142
|
+
const platform = OS.platform();
|
|
143
|
+
const arch = OS.arch();
|
|
144
|
+
let extensionFile;
|
|
145
|
+
if (platform == 'win32') {
|
|
146
|
+
if (arch == 'x64') {
|
|
147
|
+
extensionFile = 'powersync_x64.dll';
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
throw new Error('Windows platform only supports x64 architecture.');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (platform == 'linux') {
|
|
154
|
+
if (arch == 'x64') {
|
|
155
|
+
extensionFile = 'libpowersync_x64.so';
|
|
156
|
+
}
|
|
157
|
+
else if (arch == 'arm64') {
|
|
158
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
throw new Error('Linux platform only supports x64 and arm64 architectures.');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (platform == 'darwin') {
|
|
165
|
+
if (arch == 'x64') {
|
|
166
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
167
|
+
}
|
|
168
|
+
else if (arch == 'arm64') {
|
|
169
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
177
|
+
}
|
|
178
|
+
return extensionFile;
|
|
179
|
+
}
|
|
138
180
|
function startPowerSyncWorker(options) {
|
|
139
181
|
const resolvedOptions = {
|
|
140
182
|
extensionPath() {
|
|
141
|
-
const
|
|
142
|
-
const arch = OS.arch();
|
|
143
|
-
let extensionPath;
|
|
144
|
-
if (platform === 'win32') {
|
|
145
|
-
if (arch === 'x64') {
|
|
146
|
-
extensionPath = 'powersync.dll';
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
throw 'Windows platform only supports x64 architecture.';
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
else if (platform === 'linux') {
|
|
153
|
-
if (arch === 'x64') {
|
|
154
|
-
extensionPath = 'libpowersync.so';
|
|
155
|
-
}
|
|
156
|
-
else if (arch === 'arm64') {
|
|
157
|
-
extensionPath = 'libpowersync-aarch64.so';
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
throw 'Linux platform only supports x64 and arm64 architectures.';
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else if (platform === 'darwin') {
|
|
164
|
-
if (arch === 'x64') {
|
|
165
|
-
extensionPath = 'libpowersync.dylib';
|
|
166
|
-
}
|
|
167
|
-
else if (arch === 'arm64') {
|
|
168
|
-
extensionPath = 'libpowersync-aarch64.dylib';
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
throw 'macOS platform only supports x64 and arm64 architectures.';
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
throw 'Unknown platform, PowerSync for Node.js currently supports Windows, Linux and macOS.';
|
|
176
|
-
}
|
|
183
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
177
184
|
let resolved;
|
|
178
185
|
{
|
|
179
|
-
resolved = path__namespace.resolve(__dirname, '../lib/',
|
|
186
|
+
resolved = path__namespace.resolve(__dirname, '../lib/', extensionFilename);
|
|
180
187
|
}
|
|
181
188
|
return resolved;
|
|
182
189
|
},
|
|
@@ -210,5 +217,6 @@ class DatabaseOpenHelper {
|
|
|
210
217
|
}
|
|
211
218
|
}
|
|
212
219
|
|
|
220
|
+
exports.getPowerSyncExtensionFilename = getPowerSyncExtensionFilename;
|
|
213
221
|
exports.startPowerSyncWorker = startPowerSyncWorker;
|
|
214
222
|
//# sourceMappingURL=worker.cjs.map
|
package/dist/worker.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.cjs","sources":["../lib/utils/modules_commonjs.js","../lib/db/BetterSqliteWorker.js","../lib/db/NodeSqliteWorker.js","../lib/db/SqliteWorker.js"],"sourcesContent":["// NOTE! Do not import this file directly! We have a rollup plugin that rewrites imports to modules.js to this file when\n// bundling to CommonJS.\nexport const isBundledToCommonJs = true;\nexport async function dynamicImport(path) {\n return require(path);\n}\n","import { threadId } from 'node:worker_threads';\nclass BlockingAsyncDatabase {\n db;\n constructor(db) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n const rows = stmt.all(params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n else {\n const info = stmt.run(params);\n return {\n rowsAffected: info.changes,\n insertId: Number(info.lastInsertRowid)\n };\n }\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n return stmt.raw().all(params);\n }\n else {\n stmt.raw().run(params);\n return [];\n }\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n const BetterSQLite3Database = await worker.loadBetterSqlite3();\n const baseDB = new BetterSQLite3Database(options.path);\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n const asyncDb = new BlockingAsyncDatabase(baseDB);\n return asyncDb;\n}\n","import { threadId } from 'node:worker_threads';\nimport { dynamicImport } from '../utils/modules.js';\nclass BlockingNodeDatabase {\n db;\n constructor(db, write) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n const rows = stmt.all(...params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n stmt.setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled\n return stmt.all(...params);\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(...paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n // NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the\n // end, since that would make us incompatible with older Node.JS versions.\n const { DatabaseSync } = await dynamicImport('node:sqlite');\n const baseDB = new DatabaseSync(options.path, { allowExtension: true });\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n return new BlockingNodeDatabase(baseDB, options.isWriter);\n}\n","import * as Comlink from 'comlink';\nimport OS from 'node:os';\nimport * as path from 'node:path';\nimport url from 'node:url';\nimport { parentPort } from 'node:worker_threads';\nimport { dynamicImport, isBundledToCommonJs } from '../utils/modules.js';\nimport { openDatabase as openBetterSqliteDatabase } from './BetterSqliteWorker.js';\nimport { openDatabase as openNodeDatabase } from './NodeSqliteWorker.js';\nexport function startPowerSyncWorker(options) {\n const resolvedOptions = {\n extensionPath() {\n const isCommonJsModule = isBundledToCommonJs;\n const platform = OS.platform();\n const arch = OS.arch();\n let extensionPath;\n if (platform === 'win32') {\n if (arch === 'x64') {\n extensionPath = 'powersync.dll';\n }\n else {\n throw 'Windows platform only supports x64 architecture.';\n }\n }\n else if (platform === 'linux') {\n if (arch === 'x64') {\n extensionPath = 'libpowersync.so';\n }\n else if (arch === 'arm64') {\n extensionPath = 'libpowersync-aarch64.so';\n }\n else {\n throw 'Linux platform only supports x64 and arm64 architectures.';\n }\n }\n else if (platform === 'darwin') {\n if (arch === 'x64') {\n extensionPath = 'libpowersync.dylib';\n }\n else if (arch === 'arm64') {\n extensionPath = 'libpowersync-aarch64.dylib';\n }\n else {\n throw 'macOS platform only supports x64 and arm64 architectures.';\n }\n }\n else {\n throw 'Unknown platform, PowerSync for Node.js currently supports Windows, Linux and macOS.';\n }\n let resolved;\n if (isCommonJsModule) {\n resolved = path.resolve(__dirname, '../lib/', extensionPath);\n }\n else {\n resolved = url.fileURLToPath(new URL(`../${extensionPath}`, import.meta.url));\n }\n return resolved;\n },\n async loadBetterSqlite3() {\n const module = await dynamicImport('better-sqlite3');\n return module.default;\n },\n ...options\n };\n Comlink.expose(new DatabaseOpenHelper(resolvedOptions), parentPort);\n}\nclass DatabaseOpenHelper {\n options;\n constructor(options) {\n this.options = options;\n }\n async open(options) {\n let database;\n const implementation = options.implementation;\n switch (implementation.type) {\n case 'better-sqlite3':\n database = await openBetterSqliteDatabase(this.options, options);\n break;\n case 'node:sqlite':\n database = await openNodeDatabase(this.options, options);\n break;\n default:\n throw new Error(`Unknown database implementation: ${options.implementation}.`);\n }\n return Comlink.proxy(database);\n }\n}\n"],"names":["threadId","openDatabase","path","Comlink","parentPort","openBetterSqliteDatabase","openNodeDatabase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.cjs","sources":["../lib/utils/modules_commonjs.js","../lib/db/BetterSqliteWorker.js","../lib/db/NodeSqliteWorker.js","../lib/db/SqliteWorker.js"],"sourcesContent":["// NOTE! Do not import this file directly! We have a rollup plugin that rewrites imports to modules.js to this file when\n// bundling to CommonJS.\nexport const isBundledToCommonJs = true;\nexport async function dynamicImport(path) {\n return require(path);\n}\n","import { threadId } from 'node:worker_threads';\nclass BlockingAsyncDatabase {\n db;\n constructor(db) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n const rows = stmt.all(params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n else {\n const info = stmt.run(params);\n return {\n rowsAffected: info.changes,\n insertId: Number(info.lastInsertRowid)\n };\n }\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n if (stmt.reader) {\n return stmt.raw().all(params);\n }\n else {\n stmt.raw().run(params);\n return [];\n }\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n const BetterSQLite3Database = await worker.loadBetterSqlite3();\n const baseDB = new BetterSQLite3Database(options.path);\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n const asyncDb = new BlockingAsyncDatabase(baseDB);\n return asyncDb;\n}\n","import { threadId } from 'node:worker_threads';\nimport { dynamicImport } from '../utils/modules.js';\nclass BlockingNodeDatabase {\n db;\n constructor(db, write) {\n this.db = db;\n db.function('node_thread_id', () => threadId);\n }\n async close() {\n this.db.close();\n }\n async execute(query, params) {\n const stmt = this.db.prepare(query);\n const rows = stmt.all(...params);\n return {\n rowsAffected: 0,\n rows: {\n _array: rows,\n length: rows.length\n }\n };\n }\n async executeRaw(query, params) {\n const stmt = this.db.prepare(query);\n stmt.setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled\n return stmt.all(...params);\n }\n async executeBatch(query, params) {\n params = params ?? [];\n let rowsAffected = 0;\n const stmt = this.db.prepare(query);\n for (const paramSet of params) {\n const info = stmt.run(...paramSet);\n rowsAffected += info.changes;\n }\n return { rowsAffected };\n }\n}\nexport async function openDatabase(worker, options) {\n // NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the\n // end, since that would make us incompatible with older Node.JS versions.\n const { DatabaseSync } = await dynamicImport('node:sqlite');\n const baseDB = new DatabaseSync(options.path, { allowExtension: true });\n baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');\n return new BlockingNodeDatabase(baseDB, options.isWriter);\n}\n","import * as Comlink from 'comlink';\nimport OS from 'node:os';\nimport * as path from 'node:path';\nimport url from 'node:url';\nimport { parentPort } from 'node:worker_threads';\nimport { dynamicImport, isBundledToCommonJs } from '../utils/modules.js';\nimport { openDatabase as openBetterSqliteDatabase } from './BetterSqliteWorker.js';\nimport { openDatabase as openNodeDatabase } from './NodeSqliteWorker.js';\n/**\n * @returns The relevant PowerSync extension binary filename for the current platform and architecture\n */\nexport function getPowerSyncExtensionFilename() {\n const platform = OS.platform();\n const arch = OS.arch();\n let extensionFile;\n if (platform == 'win32') {\n if (arch == 'x64') {\n extensionFile = 'powersync_x64.dll';\n }\n else {\n throw new Error('Windows platform only supports x64 architecture.');\n }\n }\n else if (platform == 'linux') {\n if (arch == 'x64') {\n extensionFile = 'libpowersync_x64.so';\n }\n else if (arch == 'arm64') {\n extensionFile = 'libpowersync_aarch64.so';\n }\n else {\n throw new Error('Linux platform only supports x64 and arm64 architectures.');\n }\n }\n else if (platform == 'darwin') {\n if (arch == 'x64') {\n extensionFile = 'libpowersync_x64.dylib';\n }\n else if (arch == 'arm64') {\n extensionFile = 'libpowersync_aarch64.dylib';\n }\n else {\n throw new Error('macOS platform only supports x64 and arm64 architectures.');\n }\n }\n else {\n throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);\n }\n return extensionFile;\n}\nexport function startPowerSyncWorker(options) {\n const resolvedOptions = {\n extensionPath() {\n const isCommonJsModule = isBundledToCommonJs;\n const extensionFilename = getPowerSyncExtensionFilename();\n let resolved;\n if (isCommonJsModule) {\n resolved = path.resolve(__dirname, '../lib/', extensionFilename);\n }\n else {\n resolved = url.fileURLToPath(new URL(`../${extensionFilename}`, import.meta.url));\n }\n return resolved;\n },\n async loadBetterSqlite3() {\n const module = await dynamicImport('better-sqlite3');\n return module.default;\n },\n ...options\n };\n Comlink.expose(new DatabaseOpenHelper(resolvedOptions), parentPort);\n}\nclass DatabaseOpenHelper {\n options;\n constructor(options) {\n this.options = options;\n }\n async open(options) {\n let database;\n const implementation = options.implementation;\n switch (implementation.type) {\n case 'better-sqlite3':\n database = await openBetterSqliteDatabase(this.options, options);\n break;\n case 'node:sqlite':\n database = await openNodeDatabase(this.options, options);\n break;\n default:\n throw new Error(`Unknown database implementation: ${options.implementation}.`);\n }\n return Comlink.proxy(database);\n }\n}\n"],"names":["threadId","openDatabase","path","Comlink","parentPort","openBetterSqliteDatabase","openNodeDatabase"],"mappings":"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"}
|
package/dist/worker.d.cts
CHANGED
|
@@ -10,7 +10,11 @@ interface PowerSyncWorkerOptions {
|
|
|
10
10
|
*/
|
|
11
11
|
loadBetterSqlite3: () => Promise<any>;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* @returns The relevant PowerSync extension binary filename for the current platform and architecture
|
|
15
|
+
*/
|
|
16
|
+
declare function getPowerSyncExtensionFilename(): string;
|
|
13
17
|
declare function startPowerSyncWorker(options?: Partial<PowerSyncWorkerOptions>): void;
|
|
14
18
|
|
|
15
|
-
export { startPowerSyncWorker };
|
|
19
|
+
export { getPowerSyncExtensionFilename, startPowerSyncWorker };
|
|
16
20
|
export type { PowerSyncWorkerOptions };
|
package/download_core.js
CHANGED
|
@@ -14,14 +14,7 @@ const versionHashes = {
|
|
|
14
14
|
'libpowersync_aarch64.dylib': 'bfb4f1ec207b298aff560f1825f8123d24316edaa27b6df3a17dd49466576b92'
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
const assetMap = {
|
|
19
|
-
'powersync_x64.dll': 'powersync.dll',
|
|
20
|
-
'libpowersync_x64.so': 'libpowersync.so',
|
|
21
|
-
'libpowersync_aarch64.so': 'libpowersync-aarch64.so',
|
|
22
|
-
'libpowersync_x64.dylib': 'libpowersync.dylib',
|
|
23
|
-
'libpowersync_aarch64.dylib': 'libpowersync-aarch64.dylib'
|
|
24
|
-
};
|
|
17
|
+
const assets = Object.keys(versionHashes);
|
|
25
18
|
|
|
26
19
|
const hashStream = async (input) => {
|
|
27
20
|
for await (const chunk of input.pipe(createHash('sha256')).setEncoding('hex')) {
|
|
@@ -42,14 +35,14 @@ const hashLocal = async (filePath) => {
|
|
|
42
35
|
}
|
|
43
36
|
};
|
|
44
37
|
|
|
45
|
-
const downloadAsset = async (asset
|
|
46
|
-
const destinationPath = path.resolve('lib',
|
|
38
|
+
const downloadAsset = async (asset) => {
|
|
39
|
+
const destinationPath = path.resolve('lib', asset);
|
|
47
40
|
const expectedHash = versionHashes[asset];
|
|
48
41
|
|
|
49
42
|
// Check if file exists and has correct hash
|
|
50
43
|
const currentHash = await hashLocal(destinationPath);
|
|
51
|
-
if (currentHash
|
|
52
|
-
console.debug(`${
|
|
44
|
+
if (currentHash == expectedHash) {
|
|
45
|
+
console.debug(`${asset} is up-to-date, skipping download`);
|
|
53
46
|
return;
|
|
54
47
|
}
|
|
55
48
|
|
|
@@ -68,22 +61,21 @@ const downloadAsset = async (asset, destination) => {
|
|
|
68
61
|
if (hashAfterDownloading != expectedHash) {
|
|
69
62
|
throw `Unexpected hash after downloading ${asset} (got ${hashAfterDownloading}, expected ${expectedHash})`;
|
|
70
63
|
}
|
|
71
|
-
console.log(`Successfully downloaded ${
|
|
64
|
+
console.log(`Successfully downloaded ${asset}`);
|
|
72
65
|
};
|
|
73
66
|
|
|
74
|
-
const checkAsset = async (asset
|
|
75
|
-
const destinationPath = path.resolve('lib',
|
|
67
|
+
const checkAsset = async (asset) => {
|
|
68
|
+
const destinationPath = path.resolve('lib', asset);
|
|
76
69
|
const expectedHash = versionHashes[asset];
|
|
77
70
|
const currentHash = await hashLocal(destinationPath);
|
|
78
71
|
|
|
79
72
|
return {
|
|
80
73
|
asset,
|
|
81
|
-
destination,
|
|
82
74
|
destinationPath,
|
|
83
75
|
expectedHash,
|
|
84
76
|
currentHash,
|
|
85
77
|
exists: currentHash !== null,
|
|
86
|
-
isValid: currentHash
|
|
78
|
+
isValid: currentHash == expectedHash
|
|
87
79
|
};
|
|
88
80
|
};
|
|
89
81
|
|
|
@@ -96,9 +88,7 @@ const download = async () => {
|
|
|
96
88
|
|
|
97
89
|
// First check all assets
|
|
98
90
|
console.log('Checking existing files...');
|
|
99
|
-
const checks = await Promise.all(
|
|
100
|
-
Object.entries(assetMap).map(([asset, destination]) => checkAsset(asset, destination))
|
|
101
|
-
);
|
|
91
|
+
const checks = await Promise.all(assets.map((asset) => checkAsset(asset, asset)));
|
|
102
92
|
|
|
103
93
|
const toDownload = checks.filter((check) => !check.isValid);
|
|
104
94
|
const upToDate = checks.filter((check) => check.isValid);
|
|
@@ -107,7 +97,7 @@ const download = async () => {
|
|
|
107
97
|
if (upToDate.length > 0) {
|
|
108
98
|
console.log('\nUp-to-date files:');
|
|
109
99
|
for (const check of upToDate) {
|
|
110
|
-
console.log(` ✓ ${check.
|
|
100
|
+
console.log(` ✓ ${check.asset}`);
|
|
111
101
|
}
|
|
112
102
|
}
|
|
113
103
|
|
|
@@ -115,15 +105,14 @@ const download = async () => {
|
|
|
115
105
|
console.log('\nFiles to download:');
|
|
116
106
|
for (const check of toDownload) {
|
|
117
107
|
if (!check.exists) {
|
|
118
|
-
console.log(` • ${check.
|
|
108
|
+
console.log(` • ${check.asset} (missing)`);
|
|
119
109
|
} else {
|
|
120
|
-
console.log(` • ${check.
|
|
110
|
+
console.log(` • ${check.asset} (hash mismatch)`);
|
|
121
111
|
}
|
|
122
112
|
}
|
|
123
113
|
|
|
124
114
|
console.log('\nStarting downloads...');
|
|
125
|
-
|
|
126
|
-
await Promise.all(toDownload.map((check) => downloadAsset(check.asset, check.destination)));
|
|
115
|
+
await Promise.all(toDownload.map((check) => downloadAsset(check.asset)));
|
|
127
116
|
|
|
128
117
|
console.log('\nAll downloads completed successfully!');
|
|
129
118
|
} else {
|
package/lib/db/SqliteWorker.d.ts
CHANGED
|
@@ -10,4 +10,8 @@ export interface PowerSyncWorkerOptions {
|
|
|
10
10
|
*/
|
|
11
11
|
loadBetterSqlite3: () => Promise<any>;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* @returns The relevant PowerSync extension binary filename for the current platform and architecture
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPowerSyncExtensionFilename(): string;
|
|
13
17
|
export declare function startPowerSyncWorker(options?: Partial<PowerSyncWorkerOptions>): void;
|
package/lib/db/SqliteWorker.js
CHANGED
|
@@ -6,52 +6,59 @@ import { parentPort } from 'node:worker_threads';
|
|
|
6
6
|
import { dynamicImport, isBundledToCommonJs } from '../utils/modules.js';
|
|
7
7
|
import { openDatabase as openBetterSqliteDatabase } from './BetterSqliteWorker.js';
|
|
8
8
|
import { openDatabase as openNodeDatabase } from './NodeSqliteWorker.js';
|
|
9
|
+
/**
|
|
10
|
+
* @returns The relevant PowerSync extension binary filename for the current platform and architecture
|
|
11
|
+
*/
|
|
12
|
+
export function getPowerSyncExtensionFilename() {
|
|
13
|
+
const platform = OS.platform();
|
|
14
|
+
const arch = OS.arch();
|
|
15
|
+
let extensionFile;
|
|
16
|
+
if (platform == 'win32') {
|
|
17
|
+
if (arch == 'x64') {
|
|
18
|
+
extensionFile = 'powersync_x64.dll';
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
throw new Error('Windows platform only supports x64 architecture.');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (platform == 'linux') {
|
|
25
|
+
if (arch == 'x64') {
|
|
26
|
+
extensionFile = 'libpowersync_x64.so';
|
|
27
|
+
}
|
|
28
|
+
else if (arch == 'arm64') {
|
|
29
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error('Linux platform only supports x64 and arm64 architectures.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (platform == 'darwin') {
|
|
36
|
+
if (arch == 'x64') {
|
|
37
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
38
|
+
}
|
|
39
|
+
else if (arch == 'arm64') {
|
|
40
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
48
|
+
}
|
|
49
|
+
return extensionFile;
|
|
50
|
+
}
|
|
9
51
|
export function startPowerSyncWorker(options) {
|
|
10
52
|
const resolvedOptions = {
|
|
11
53
|
extensionPath() {
|
|
12
54
|
const isCommonJsModule = isBundledToCommonJs;
|
|
13
|
-
const
|
|
14
|
-
const arch = OS.arch();
|
|
15
|
-
let extensionPath;
|
|
16
|
-
if (platform === 'win32') {
|
|
17
|
-
if (arch === 'x64') {
|
|
18
|
-
extensionPath = 'powersync.dll';
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
throw 'Windows platform only supports x64 architecture.';
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else if (platform === 'linux') {
|
|
25
|
-
if (arch === 'x64') {
|
|
26
|
-
extensionPath = 'libpowersync.so';
|
|
27
|
-
}
|
|
28
|
-
else if (arch === 'arm64') {
|
|
29
|
-
extensionPath = 'libpowersync-aarch64.so';
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
throw 'Linux platform only supports x64 and arm64 architectures.';
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if (platform === 'darwin') {
|
|
36
|
-
if (arch === 'x64') {
|
|
37
|
-
extensionPath = 'libpowersync.dylib';
|
|
38
|
-
}
|
|
39
|
-
else if (arch === 'arm64') {
|
|
40
|
-
extensionPath = 'libpowersync-aarch64.dylib';
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
throw 'macOS platform only supports x64 and arm64 architectures.';
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
throw 'Unknown platform, PowerSync for Node.js currently supports Windows, Linux and macOS.';
|
|
48
|
-
}
|
|
55
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
49
56
|
let resolved;
|
|
50
57
|
if (isCommonJsModule) {
|
|
51
|
-
resolved = path.resolve(__dirname, '../lib/',
|
|
58
|
+
resolved = path.resolve(__dirname, '../lib/', extensionFilename);
|
|
52
59
|
}
|
|
53
60
|
else {
|
|
54
|
-
resolved = url.fileURLToPath(new URL(`../${
|
|
61
|
+
resolved = url.fileURLToPath(new URL(`../${extensionFilename}`, import.meta.url));
|
|
55
62
|
}
|
|
56
63
|
return resolved;
|
|
57
64
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/node",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20251020151114",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"homepage": "https://docs.powersync.com/",
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@powersync/common": "
|
|
50
|
+
"@powersync/common": "^1.40.0",
|
|
51
51
|
"better-sqlite3": "12.x"
|
|
52
52
|
},
|
|
53
53
|
"peerDependenciesMeta": {
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"bson": "^6.6.0",
|
|
61
61
|
"comlink": "^4.4.2",
|
|
62
62
|
"undici": "^7.11.0",
|
|
63
|
-
"@powersync/common": "
|
|
63
|
+
"@powersync/common": "1.40.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@types/async-lock": "^1.4.0",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|