@powersync/node 0.0.0-dev-20251003085035 → 0.0.0-dev-20251021113138
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 +54 -37
- package/dist/DefaultWorker.cjs.map +1 -1
- package/dist/worker.cjs +55 -37
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +5 -1
- package/download_core.js +19 -25
- package/lib/db/SqliteWorker.d.ts +4 -0
- package/lib/db/SqliteWorker.js +55 -38
- package/lib/libpowersync_armv7.so +0 -0
- package/lib/libpowersync_riscv64gc.so +0 -0
- package/lib/libpowersync_x86.so +0 -0
- package/lib/powersync_aarch64.dll +0 -0
- package/lib/powersync_x86.dll +0 -0
- 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,65 @@ 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 if (arch == 'ia32') {
|
|
150
|
+
extensionFile = 'powersync_x86.dll';
|
|
151
|
+
}
|
|
152
|
+
else if (arch == 'arm64') {
|
|
153
|
+
extensionFile = 'powersync_aarch64.dll';
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw new Error('Windows platform only supports arm64, ia32 and x64 architecture.');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (platform == 'linux') {
|
|
160
|
+
if (arch == 'x64') {
|
|
161
|
+
extensionFile = 'libpowersync_x64.so';
|
|
162
|
+
}
|
|
163
|
+
else if (arch == 'arm64') {
|
|
164
|
+
// TODO detect armv7 as an option
|
|
165
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
166
|
+
}
|
|
167
|
+
else if (arch == 'riscv64') {
|
|
168
|
+
extensionFile = 'libpowersync_riscv64gc.so';
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
throw new Error('Linux platform only supports x64, arm64 and riscv64 architectures.');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (platform == 'darwin') {
|
|
175
|
+
if (arch == 'x64') {
|
|
176
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
177
|
+
}
|
|
178
|
+
else if (arch == 'arm64') {
|
|
179
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
187
|
+
}
|
|
188
|
+
return extensionFile;
|
|
189
|
+
}
|
|
138
190
|
function startPowerSyncWorker(options) {
|
|
139
191
|
const resolvedOptions = {
|
|
140
192
|
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
|
-
}
|
|
193
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
177
194
|
let resolved;
|
|
178
195
|
{
|
|
179
|
-
resolved = path__namespace.resolve(__dirname, '../lib/',
|
|
196
|
+
resolved = path__namespace.resolve(__dirname, '../lib/', extensionFilename);
|
|
180
197
|
}
|
|
181
198
|
return resolved;
|
|
182
199
|
},
|
|
@@ -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 if (arch == 'ia32') {\n extensionFile = 'powersync_x86.dll';\n }\n else if (arch == 'arm64') {\n extensionFile = 'powersync_aarch64.dll';\n }\n else {\n throw new Error('Windows platform only supports arm64, ia32 and 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 // TODO detect armv7 as an option\n extensionFile = 'libpowersync_aarch64.so';\n }\n else if (arch == 'riscv64') {\n extensionFile = 'libpowersync_riscv64gc.so';\n }\n else {\n throw new Error('Linux platform only supports x64, arm64 and riscv64 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,IAAI,IAAI,IAAI,MAAM,EAAE;AACjC,YAAY,aAAa,GAAG,mBAAmB,CAAC;AAChD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,OAAO,EAAE;AAClC,YAAY,aAAa,GAAG,uBAAuB,CAAC;AACpD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AAChG,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;AACA,YAAY,aAAa,GAAG,yBAAyB,CAAC;AACtD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,SAAS,EAAE;AACpC,YAAY,aAAa,GAAG,2BAA2B,CAAC;AACxD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AAClG,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;;ACrGA,oBAAoB,EAAE;;"}
|
package/dist/worker.cjs
CHANGED
|
@@ -135,48 +135,65 @@ 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 if (arch == 'ia32') {
|
|
150
|
+
extensionFile = 'powersync_x86.dll';
|
|
151
|
+
}
|
|
152
|
+
else if (arch == 'arm64') {
|
|
153
|
+
extensionFile = 'powersync_aarch64.dll';
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw new Error('Windows platform only supports arm64, ia32 and x64 architecture.');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (platform == 'linux') {
|
|
160
|
+
if (arch == 'x64') {
|
|
161
|
+
extensionFile = 'libpowersync_x64.so';
|
|
162
|
+
}
|
|
163
|
+
else if (arch == 'arm64') {
|
|
164
|
+
// TODO detect armv7 as an option
|
|
165
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
166
|
+
}
|
|
167
|
+
else if (arch == 'riscv64') {
|
|
168
|
+
extensionFile = 'libpowersync_riscv64gc.so';
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
throw new Error('Linux platform only supports x64, arm64 and riscv64 architectures.');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (platform == 'darwin') {
|
|
175
|
+
if (arch == 'x64') {
|
|
176
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
177
|
+
}
|
|
178
|
+
else if (arch == 'arm64') {
|
|
179
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
187
|
+
}
|
|
188
|
+
return extensionFile;
|
|
189
|
+
}
|
|
138
190
|
function startPowerSyncWorker(options) {
|
|
139
191
|
const resolvedOptions = {
|
|
140
192
|
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
|
-
}
|
|
193
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
177
194
|
let resolved;
|
|
178
195
|
{
|
|
179
|
-
resolved = path__namespace.resolve(__dirname, '../lib/',
|
|
196
|
+
resolved = path__namespace.resolve(__dirname, '../lib/', extensionFilename);
|
|
180
197
|
}
|
|
181
198
|
return resolved;
|
|
182
199
|
},
|
|
@@ -210,5 +227,6 @@ class DatabaseOpenHelper {
|
|
|
210
227
|
}
|
|
211
228
|
}
|
|
212
229
|
|
|
230
|
+
exports.getPowerSyncExtensionFilename = getPowerSyncExtensionFilename;
|
|
213
231
|
exports.startPowerSyncWorker = startPowerSyncWorker;
|
|
214
232
|
//# 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 if (arch == 'ia32') {\n extensionFile = 'powersync_x86.dll';\n }\n else if (arch == 'arm64') {\n extensionFile = 'powersync_aarch64.dll';\n }\n else {\n throw new Error('Windows platform only supports arm64, ia32 and 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 // TODO detect armv7 as an option\n extensionFile = 'libpowersync_aarch64.so';\n }\n else if (arch == 'riscv64') {\n extensionFile = 'libpowersync_riscv64gc.so';\n }\n else {\n throw new Error('Linux platform only supports x64, arm64 and riscv64 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;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,IAAI,IAAI,IAAI,MAAM,EAAE;AACjC,YAAY,aAAa,GAAG,mBAAmB,CAAC;AAChD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,OAAO,EAAE;AAClC,YAAY,aAAa,GAAG,uBAAuB,CAAC;AACpD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AAChG,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;AACA,YAAY,aAAa,GAAG,yBAAyB,CAAC;AACtD,SAAS;AACT,aAAa,IAAI,IAAI,IAAI,SAAS,EAAE;AACpC,YAAY,aAAa,GAAG,2BAA2B,CAAC;AACxD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AAClG,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;;;;;"}
|
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
|
@@ -8,20 +8,18 @@ import { finished } from 'node:stream/promises';
|
|
|
8
8
|
const version = '0.4.6';
|
|
9
9
|
const versionHashes = {
|
|
10
10
|
'powersync_x64.dll': '5efaa9ad4975094912a36843cb7b503376cacd233d21ae0956f0f4b42dcb457b',
|
|
11
|
+
'powersync_x86.dll': '4151ba8aa6f024b50b7aebe52ba59f2c5be54e3fed26f7f3f48e1127dcda027d',
|
|
12
|
+
'powersync_aarch64.dll': '3abe46074432593ff5cfc2098b186c592f020c5cfa81285f8e49962732a94bf5',
|
|
13
|
+
'libpowersync_x86.so': '1321a7de13fda0b2de7d2bc231a68cb5691f84010f3858e5cf02e47f88ba6f4a',
|
|
11
14
|
'libpowersync_x64.so': 'e9d78620d69d3cf7d57353891fe0bf85b79d326b42c4669b9500b9e610388f76',
|
|
12
15
|
'libpowersync_aarch64.so': '0d84c0dc0134fc89af65724d11e2c45e3c15569c575ecda52d0ec2fa2aeec495',
|
|
16
|
+
'libpowersync_armv7.so': 'c7887181ce9c524b68a7ac284ab447b8584511c87527ca26186e5874bf9ba3d6',
|
|
17
|
+
'libpowersync_riscv64gc.so': 'a89f3a71f22f707707d97517e9310e42e2a57dc5343cee08d09002a8cea048d5',
|
|
13
18
|
'libpowersync_x64.dylib': '9b484eaf361451f7758ca6ad53190a73563be930a8f8a39ccefd29390046ef6c',
|
|
14
19
|
'libpowersync_aarch64.dylib': 'bfb4f1ec207b298aff560f1825f8123d24316edaa27b6df3a17dd49466576b92'
|
|
15
20
|
};
|
|
16
21
|
|
|
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
|
-
};
|
|
22
|
+
const assets = Object.keys(versionHashes);
|
|
25
23
|
|
|
26
24
|
const hashStream = async (input) => {
|
|
27
25
|
for await (const chunk of input.pipe(createHash('sha256')).setEncoding('hex')) {
|
|
@@ -42,14 +40,14 @@ const hashLocal = async (filePath) => {
|
|
|
42
40
|
}
|
|
43
41
|
};
|
|
44
42
|
|
|
45
|
-
const downloadAsset = async (asset
|
|
46
|
-
const destinationPath = path.resolve('lib',
|
|
43
|
+
const downloadAsset = async (asset) => {
|
|
44
|
+
const destinationPath = path.resolve('lib', asset);
|
|
47
45
|
const expectedHash = versionHashes[asset];
|
|
48
46
|
|
|
49
47
|
// Check if file exists and has correct hash
|
|
50
48
|
const currentHash = await hashLocal(destinationPath);
|
|
51
|
-
if (currentHash
|
|
52
|
-
console.debug(`${
|
|
49
|
+
if (currentHash == expectedHash) {
|
|
50
|
+
console.debug(`${asset} is up-to-date, skipping download`);
|
|
53
51
|
return;
|
|
54
52
|
}
|
|
55
53
|
|
|
@@ -68,22 +66,21 @@ const downloadAsset = async (asset, destination) => {
|
|
|
68
66
|
if (hashAfterDownloading != expectedHash) {
|
|
69
67
|
throw `Unexpected hash after downloading ${asset} (got ${hashAfterDownloading}, expected ${expectedHash})`;
|
|
70
68
|
}
|
|
71
|
-
console.log(`Successfully downloaded ${
|
|
69
|
+
console.log(`Successfully downloaded ${asset}`);
|
|
72
70
|
};
|
|
73
71
|
|
|
74
|
-
const checkAsset = async (asset
|
|
75
|
-
const destinationPath = path.resolve('lib',
|
|
72
|
+
const checkAsset = async (asset) => {
|
|
73
|
+
const destinationPath = path.resolve('lib', asset);
|
|
76
74
|
const expectedHash = versionHashes[asset];
|
|
77
75
|
const currentHash = await hashLocal(destinationPath);
|
|
78
76
|
|
|
79
77
|
return {
|
|
80
78
|
asset,
|
|
81
|
-
destination,
|
|
82
79
|
destinationPath,
|
|
83
80
|
expectedHash,
|
|
84
81
|
currentHash,
|
|
85
82
|
exists: currentHash !== null,
|
|
86
|
-
isValid: currentHash
|
|
83
|
+
isValid: currentHash == expectedHash
|
|
87
84
|
};
|
|
88
85
|
};
|
|
89
86
|
|
|
@@ -96,9 +93,7 @@ const download = async () => {
|
|
|
96
93
|
|
|
97
94
|
// First check all assets
|
|
98
95
|
console.log('Checking existing files...');
|
|
99
|
-
const checks = await Promise.all(
|
|
100
|
-
Object.entries(assetMap).map(([asset, destination]) => checkAsset(asset, destination))
|
|
101
|
-
);
|
|
96
|
+
const checks = await Promise.all(assets.map((asset) => checkAsset(asset, asset)));
|
|
102
97
|
|
|
103
98
|
const toDownload = checks.filter((check) => !check.isValid);
|
|
104
99
|
const upToDate = checks.filter((check) => check.isValid);
|
|
@@ -107,7 +102,7 @@ const download = async () => {
|
|
|
107
102
|
if (upToDate.length > 0) {
|
|
108
103
|
console.log('\nUp-to-date files:');
|
|
109
104
|
for (const check of upToDate) {
|
|
110
|
-
console.log(` ✓ ${check.
|
|
105
|
+
console.log(` ✓ ${check.asset}`);
|
|
111
106
|
}
|
|
112
107
|
}
|
|
113
108
|
|
|
@@ -115,15 +110,14 @@ const download = async () => {
|
|
|
115
110
|
console.log('\nFiles to download:');
|
|
116
111
|
for (const check of toDownload) {
|
|
117
112
|
if (!check.exists) {
|
|
118
|
-
console.log(` • ${check.
|
|
113
|
+
console.log(` • ${check.asset} (missing)`);
|
|
119
114
|
} else {
|
|
120
|
-
console.log(` • ${check.
|
|
115
|
+
console.log(` • ${check.asset} (hash mismatch)`);
|
|
121
116
|
}
|
|
122
117
|
}
|
|
123
118
|
|
|
124
119
|
console.log('\nStarting downloads...');
|
|
125
|
-
|
|
126
|
-
await Promise.all(toDownload.map((check) => downloadAsset(check.asset, check.destination)));
|
|
120
|
+
await Promise.all(toDownload.map((check) => downloadAsset(check.asset)));
|
|
127
121
|
|
|
128
122
|
console.log('\nAll downloads completed successfully!');
|
|
129
123
|
} 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,69 @@ 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 if (arch == 'ia32') {
|
|
21
|
+
extensionFile = 'powersync_x86.dll';
|
|
22
|
+
}
|
|
23
|
+
else if (arch == 'arm64') {
|
|
24
|
+
extensionFile = 'powersync_aarch64.dll';
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw new Error('Windows platform only supports arm64, ia32 and x64 architecture.');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if (platform == 'linux') {
|
|
31
|
+
if (arch == 'x64') {
|
|
32
|
+
extensionFile = 'libpowersync_x64.so';
|
|
33
|
+
}
|
|
34
|
+
else if (arch == 'arm64') {
|
|
35
|
+
// TODO detect armv7 as an option
|
|
36
|
+
extensionFile = 'libpowersync_aarch64.so';
|
|
37
|
+
}
|
|
38
|
+
else if (arch == 'riscv64') {
|
|
39
|
+
extensionFile = 'libpowersync_riscv64gc.so';
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error('Linux platform only supports x64, arm64 and riscv64 architectures.');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (platform == 'darwin') {
|
|
46
|
+
if (arch == 'x64') {
|
|
47
|
+
extensionFile = 'libpowersync_x64.dylib';
|
|
48
|
+
}
|
|
49
|
+
else if (arch == 'arm64') {
|
|
50
|
+
extensionFile = 'libpowersync_aarch64.dylib';
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw new Error('macOS platform only supports x64 and arm64 architectures.');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new Error(`Unknown platform: ${platform}, PowerSync for Node.js currently supports Windows, Linux and macOS.`);
|
|
58
|
+
}
|
|
59
|
+
return extensionFile;
|
|
60
|
+
}
|
|
9
61
|
export function startPowerSyncWorker(options) {
|
|
10
62
|
const resolvedOptions = {
|
|
11
63
|
extensionPath() {
|
|
12
64
|
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
|
-
}
|
|
65
|
+
const extensionFilename = getPowerSyncExtensionFilename();
|
|
49
66
|
let resolved;
|
|
50
67
|
if (isCommonJsModule) {
|
|
51
|
-
resolved = path.resolve(__dirname, '../lib/',
|
|
68
|
+
resolved = path.resolve(__dirname, '../lib/', extensionFilename);
|
|
52
69
|
}
|
|
53
70
|
else {
|
|
54
|
-
resolved = url.fileURLToPath(new URL(`../${
|
|
71
|
+
resolved = url.fileURLToPath(new URL(`../${extensionFilename}`, import.meta.url));
|
|
55
72
|
}
|
|
56
73
|
return resolved;
|
|
57
74
|
},
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
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-20251021113138",
|
|
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": "0.0.0-dev-
|
|
50
|
+
"@powersync/common": "0.0.0-dev-20251021113138",
|
|
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": "0.0.0-dev-
|
|
63
|
+
"@powersync/common": "0.0.0-dev-20251021113138"
|
|
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
|