mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 16:44:19 +01:00
bundle browser packages too in order to easily consume them without bundlers
This commit is contained in:
1
bindings/javascript/package-lock.json
generated
1
bindings/javascript/package-lock.json
generated
@@ -2765,6 +2765,7 @@
|
|||||||
"@vitest/browser": "^3.2.4",
|
"@vitest/browser": "^3.2.4",
|
||||||
"playwright": "^1.55.0",
|
"playwright": "^1.55.0",
|
||||||
"typescript": "^5.9.2",
|
"typescript": "^5.9.2",
|
||||||
|
"vite": "^7.1.5",
|
||||||
"vitest": "^3.2.4"
|
"vitest": "^3.2.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
24
bindings/javascript/packages/browser/index-bundle.ts
Normal file
24
bindings/javascript/packages/browser/index-bundle.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import { setupMainThread } from "@tursodatabase/database-browser-common";
|
||||||
|
//@ts-ignore
|
||||||
|
import TursoWorker from "./worker.js?worker&inline";
|
||||||
|
|
||||||
|
const __wasmUrl = new URL('./turso.wasm32-wasi.wasm', import.meta.url).href;
|
||||||
|
const __wasmFile = await fetch(__wasmUrl).then((res) => res.arrayBuffer())
|
||||||
|
|
||||||
|
export let MainWorker = null;
|
||||||
|
const napiModule = await setupMainThread(__wasmFile, () => {
|
||||||
|
const worker = new TursoWorker({
|
||||||
|
name: 'turso-database',
|
||||||
|
type: 'module',
|
||||||
|
})
|
||||||
|
MainWorker = worker;
|
||||||
|
return worker
|
||||||
|
});
|
||||||
|
|
||||||
|
export default napiModule.exports
|
||||||
|
export const Database = napiModule.exports.Database
|
||||||
|
export const Opfs = napiModule.exports.Opfs
|
||||||
|
export const OpfsFile = napiModule.exports.OpfsFile
|
||||||
|
export const Statement = napiModule.exports.Statement
|
||||||
|
export const connect = napiModule.exports.connect
|
||||||
|
export const initThreadPool = napiModule.exports.initThreadPool
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
".": {
|
".": {
|
||||||
"default": "./dist/promise-default.js"
|
"default": "./dist/promise-default.js"
|
||||||
},
|
},
|
||||||
"./bundled": {
|
"./bundle": {
|
||||||
"default": "./bundle/main.js"
|
"default": "./bundle/main.es.js"
|
||||||
},
|
},
|
||||||
"./vite": {
|
"./vite": {
|
||||||
"development": "./dist/promise-vite-dev-hack.js",
|
"development": "./dist/promise-vite-dev-hack.js",
|
||||||
|
|||||||
22
bindings/javascript/packages/browser/promise-bundle.ts
Normal file
22
bindings/javascript/packages/browser/promise-bundle.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { DatabaseOpts, SqliteError, } from "@tursodatabase/database-common"
|
||||||
|
import { connect as promiseConnect, Database } from "./promise.js";
|
||||||
|
import { connect as nativeConnect, initThreadPool, MainWorker } from "./index-bundle.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new database connection asynchronously.
|
||||||
|
*
|
||||||
|
* @param {string} path - Path to the database file.
|
||||||
|
* @param {Object} opts - Options for database behavior.
|
||||||
|
* @returns {Promise<Database>} - A promise that resolves to a Database instance.
|
||||||
|
*/
|
||||||
|
async function connect(path: string, opts: DatabaseOpts = {}): Promise<Database> {
|
||||||
|
return await promiseConnect(path, opts, nativeConnect, async () => {
|
||||||
|
await initThreadPool();
|
||||||
|
if (MainWorker == null) {
|
||||||
|
throw new Error("panic: MainWorker is not initialized");
|
||||||
|
}
|
||||||
|
return MainWorker;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export { connect, Database, SqliteError }
|
||||||
@@ -4,13 +4,15 @@ import { defineConfig } from 'vite';
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
base: './',
|
base: './',
|
||||||
build: {
|
build: {
|
||||||
|
lib: {
|
||||||
|
entry: resolve(__dirname, 'promise-bundle.ts'),
|
||||||
|
name: 'database-browser',
|
||||||
|
fileName: format => `main.${format}.js`,
|
||||||
|
formats: ['es'],
|
||||||
|
},
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
input: {
|
|
||||||
main: resolve(__dirname, 'promise-default.ts'),
|
|
||||||
},
|
|
||||||
output: {
|
output: {
|
||||||
dir: 'bundle',
|
dir: 'bundle',
|
||||||
entryFileNames: '[name].js',
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,48 @@
|
|||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/wasm-runtime/package.json
|
||||||
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/common/package.json
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/common/package.json
|
||||||
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/native/package.json
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/native/package.json
|
||||||
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/package.json
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/package.json
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser-common/package.json
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/common/package.json
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/native/package.json
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/package.json
|
||||||
|
|
||||||
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/wasm-runtime/package.json
|
||||||
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/common/package.json
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/common/package.json
|
||||||
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/native/package.json
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/native/package.json
|
||||||
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/browser/package.json
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/browser/package.json
|
||||||
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" packages/browser-common/package.json
|
||||||
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" sync/packages/common/package.json
|
||||||
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" sync/packages/native/package.json
|
||||||
|
sed -i "s/$VERSION_FROM/$VERSION_TO/g" sync/packages/browser/package.json
|
||||||
|
|
||||||
sed -i "s/$NAME_FROM\/database-common/$NAME_TO\/database-common/g" packages/native/promise.ts
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/native/promise.ts
|
||||||
sed -i "s/$NAME_FROM\/database-common/$NAME_TO\/database-common/g" packages/native/compat.ts
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/native/compat.ts
|
||||||
sed -i "s/$NAME_FROM\/database-common/$NAME_TO\/database-common/g" packages/browser/promise.ts
|
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser-common/index.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/promise.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/promise-bundle.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/promise-default.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/promise-vite-dev-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/promise-turbopack-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/index-default.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/index-bundle.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/index-vite-dev-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/index-turbopack-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/browser/worker.ts
|
||||||
|
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/native/promise.ts
|
||||||
|
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/promise.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/promise-bundle.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/promise-default.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/promise-vite-dev-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/promise-turbopack-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/index-default.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/index-bundle.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/index-vite-dev-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/index-turbopack-hack.ts
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" sync/packages/browser/worker.ts
|
||||||
|
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/wasm-runtime/runtime.cjs
|
||||||
|
sed -i "s/$NAME_FROM/$NAME_TO/g" packages/wasm-runtime/runtime.js
|
||||||
|
|||||||
33
bindings/javascript/sync/packages/browser/index-bundle.ts
Normal file
33
bindings/javascript/sync/packages/browser/index-bundle.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { setupMainThread } from "@tursodatabase/database-browser-common";
|
||||||
|
//@ts-ignore
|
||||||
|
import TursoWorker from "./worker.js?worker&inline";
|
||||||
|
|
||||||
|
export let MainWorker = null;
|
||||||
|
|
||||||
|
const __wasmUrl = new URL('./sync.wasm32-wasi.wasm', import.meta.url).href;
|
||||||
|
const __wasmFile = await fetch(__wasmUrl).then((res) => res.arrayBuffer())
|
||||||
|
|
||||||
|
const napiModule = await setupMainThread(__wasmFile, () => {
|
||||||
|
const worker = new TursoWorker({
|
||||||
|
name: 'turso-database-sync',
|
||||||
|
type: 'module',
|
||||||
|
})
|
||||||
|
MainWorker = worker;
|
||||||
|
return worker
|
||||||
|
});
|
||||||
|
|
||||||
|
export default napiModule.exports
|
||||||
|
export const Database = napiModule.exports.Database
|
||||||
|
export const Statement = napiModule.exports.Statement
|
||||||
|
export const Opfs = napiModule.exports.Opfs
|
||||||
|
export const OpfsFile = napiModule.exports.OpfsFile
|
||||||
|
export const connect = napiModule.exports.connect
|
||||||
|
export const initThreadPool = napiModule.exports.initThreadPool
|
||||||
|
export const GeneratorHolder = napiModule.exports.GeneratorHolder
|
||||||
|
export const JsDataCompletion = napiModule.exports.JsDataCompletion
|
||||||
|
export const JsProtocolIo = napiModule.exports.JsProtocolIo
|
||||||
|
export const JsProtocolRequestBytes = napiModule.exports.JsProtocolRequestBytes
|
||||||
|
export const SyncEngine = napiModule.exports.SyncEngine
|
||||||
|
export const DatabaseChangeTypeJs = napiModule.exports.DatabaseChangeTypeJs
|
||||||
|
export const SyncEngineProtocolVersion = napiModule.exports.SyncEngineProtocolVersion
|
||||||
|
|
||||||
@@ -11,12 +11,16 @@
|
|||||||
"packageManager": "yarn@4.9.2",
|
"packageManager": "yarn@4.9.2",
|
||||||
"files": [
|
"files": [
|
||||||
"dist/**",
|
"dist/**",
|
||||||
|
"bundle/**",
|
||||||
"README.md"
|
"README.md"
|
||||||
],
|
],
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
"default": "./dist/promise-default.js"
|
"default": "./dist/promise-default.js"
|
||||||
},
|
},
|
||||||
|
"./bundle": {
|
||||||
|
"default": "./bundle/main.es.js"
|
||||||
|
},
|
||||||
"./vite": {
|
"./vite": {
|
||||||
"development": "./dist/promise-vite-dev-hack.js",
|
"development": "./dist/promise-vite-dev-hack.js",
|
||||||
"default": "./dist/promise-default.js"
|
"default": "./dist/promise-default.js"
|
||||||
@@ -30,12 +34,14 @@
|
|||||||
"@vitest/browser": "^3.2.4",
|
"@vitest/browser": "^3.2.4",
|
||||||
"playwright": "^1.55.0",
|
"playwright": "^1.55.0",
|
||||||
"typescript": "^5.9.2",
|
"typescript": "^5.9.2",
|
||||||
|
"vite": "^7.1.5",
|
||||||
"vitest": "^3.2.4"
|
"vitest": "^3.2.4"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"napi-build": "napi build --features browser --release --platform --target wasm32-wasip1-threads --no-js --manifest-path ../../Cargo.toml --output-dir . && rm index.d.ts sync.wasi* wasi* browser.js",
|
"napi-build": "napi build --features browser --release --platform --target wasm32-wasip1-threads --no-js --manifest-path ../../Cargo.toml --output-dir . && rm index.d.ts sync.wasi* wasi* browser.js",
|
||||||
"tsc-build": "npm exec tsc && cp sync.wasm32-wasi.wasm ./dist/sync.wasm32-wasi.wasm && WASM_FILE=sync.wasm32-wasi.wasm JS_FILE=./dist/wasm-inline.js node ../../../scripts/inline-wasm-base64.js",
|
"tsc-build": "npm exec tsc && cp sync.wasm32-wasi.wasm ./dist/sync.wasm32-wasi.wasm && WASM_FILE=sync.wasm32-wasi.wasm JS_FILE=./dist/wasm-inline.js node ../../../scripts/inline-wasm-base64.js",
|
||||||
"build": "npm run napi-build && npm run tsc-build",
|
"bundle": "vite build",
|
||||||
|
"build": "npm run napi-build && npm run tsc-build && npm run bundle",
|
||||||
"test": "VITE_TURSO_DB_URL=http://b--a--a.localhost:10000 CI=1 vitest --browser=chromium --run && VITE_TURSO_DB_URL=http://b--a--a.localhost:10000 CI=1 vitest --browser=firefox --run"
|
"test": "VITE_TURSO_DB_URL=http://b--a--a.localhost:10000 CI=1 vitest --browser=chromium --run && VITE_TURSO_DB_URL=http://b--a--a.localhost:10000 CI=1 vitest --browser=firefox --run"
|
||||||
},
|
},
|
||||||
"napi": {
|
"napi": {
|
||||||
|
|||||||
23
bindings/javascript/sync/packages/browser/promise-bundle.ts
Normal file
23
bindings/javascript/sync/packages/browser/promise-bundle.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
||||||
|
import { connect as promiseConnect, Database } from "./promise.js";
|
||||||
|
import { SyncEngine, initThreadPool, MainWorker } from "./index-bundle.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new database connection asynchronously.
|
||||||
|
*
|
||||||
|
* @param {string} path - Path to the database file.
|
||||||
|
* @param {Object} opts - Options for database behavior.
|
||||||
|
* @returns {Promise<Database>} - A promise that resolves to a Database instance.
|
||||||
|
*/
|
||||||
|
async function connect(opts: SyncOpts): Promise<Database> {
|
||||||
|
return await promiseConnect(opts, x => new SyncEngine(x), async () => {
|
||||||
|
await initThreadPool();
|
||||||
|
if (MainWorker == null) {
|
||||||
|
throw new Error("panic: MainWorker is not initialized");
|
||||||
|
}
|
||||||
|
return MainWorker;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export { connect, Database, }
|
||||||
|
export type { DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult }
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
||||||
import { SyncEngine, initThreadPool, MainWorker } from "./index-default.js";
|
|
||||||
import { connect as promiseConnect, Database } from "./promise.js";
|
import { connect as promiseConnect, Database } from "./promise.js";
|
||||||
|
import { SyncEngine, initThreadPool, MainWorker } from "./index-default.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new database connection asynchronously.
|
* Creates a new database connection asynchronously.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
||||||
import { SyncEngine, initThreadPool, MainWorker } from "./index-turbopack-hack.js";
|
|
||||||
import { connect as promiseConnect, Database } from "./promise.js";
|
import { connect as promiseConnect, Database } from "./promise.js";
|
||||||
|
import { SyncEngine, initThreadPool, MainWorker } from "./index-turbopack-hack.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new database connection asynchronously.
|
* Creates a new database connection asynchronously.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
import { SyncOpts, DatabaseRowMutation, DatabaseRowStatement, DatabaseRowTransformResult } from "@tursodatabase/sync-common";
|
||||||
import { SyncEngine, initThreadPool, MainWorker } from "./index-vite-dev-hack.js";
|
|
||||||
import { connect as promiseConnect, Database } from "./promise.js";
|
import { connect as promiseConnect, Database } from "./promise.js";
|
||||||
|
import { SyncEngine, initThreadPool, MainWorker } from "./index-vite-dev-hack.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new database connection asynchronously.
|
* Creates a new database connection asynchronously.
|
||||||
|
|||||||
19
bindings/javascript/sync/packages/browser/vite.config.js
Normal file
19
bindings/javascript/sync/packages/browser/vite.config.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { resolve } from 'path';
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
base: './',
|
||||||
|
build: {
|
||||||
|
lib: {
|
||||||
|
entry: resolve(__dirname, 'promise-bundle.ts'),
|
||||||
|
name: 'sync-browser',
|
||||||
|
fileName: format => `main.${format}.js`,
|
||||||
|
formats: ['es'],
|
||||||
|
},
|
||||||
|
rollupOptions: {
|
||||||
|
output: {
|
||||||
|
dir: 'bundle',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user