Works on iphone and android
This commit is contained in:
Generated
+14
@@ -12,6 +12,7 @@
|
|||||||
"wa-sqlite": "^1.0.0"
|
"wa-sqlite": "^1.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@vitejs/plugin-basic-ssl": "^2.3.0",
|
||||||
"typescript": "~6.0.2",
|
"typescript": "~6.0.2",
|
||||||
"vite": "^8.0.12"
|
"vite": "^8.0.12"
|
||||||
}
|
}
|
||||||
@@ -360,6 +361,19 @@
|
|||||||
"tslib": "^2.4.0"
|
"tslib": "^2.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@vitejs/plugin-basic-ssl": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/detect-libc": {
|
"node_modules/detect-libc": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@vitejs/plugin-basic-ssl": "^2.3.0",
|
||||||
"typescript": "~6.0.2",
|
"typescript": "~6.0.2",
|
||||||
"vite": "^8.0.12"
|
"vite": "^8.0.12"
|
||||||
},
|
},
|
||||||
|
|||||||
+6
-7
@@ -3,6 +3,10 @@
|
|||||||
* Воркер необходим, так как createSyncAccessHandle() доступен только в Worker'ах.
|
* Воркер необходим, так как createSyncAccessHandle() доступен только в Worker'ах.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { Factory } from 'wa-sqlite/src/sqlite-api.js';
|
||||||
|
import { OriginPrivateFileSystemVFS } from 'wa-sqlite/src/examples/OriginPrivateFileSystemVFS.js';
|
||||||
|
import ModuleConstructor from 'wa-sqlite/dist/wa-sqlite-async.mjs';
|
||||||
|
|
||||||
let sqlite: any = null;
|
let sqlite: any = null;
|
||||||
let db: number | null = null;
|
let db: number | null = null;
|
||||||
let vfs: any = null;
|
let vfs: any = null;
|
||||||
@@ -16,19 +20,13 @@ const OPEN_FLAGS = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
|
|||||||
async function init() {
|
async function init() {
|
||||||
if (initialized) return;
|
if (initialized) return;
|
||||||
|
|
||||||
const { Factory } = await import('wa-sqlite/src/sqlite-api.js');
|
|
||||||
const { OriginPrivateFileSystemVFS } = await import(
|
|
||||||
'wa-sqlite/src/examples/OriginPrivateFileSystemVFS.js'
|
|
||||||
);
|
|
||||||
const ModuleConstructor = (await import('wa-sqlite/dist/wa-sqlite-async.mjs')).default;
|
|
||||||
|
|
||||||
const module = await ModuleConstructor();
|
const module = await ModuleConstructor();
|
||||||
const api = Factory(module);
|
const api = Factory(module);
|
||||||
sqlite = api;
|
sqlite = api;
|
||||||
|
|
||||||
const opfsVfs = new OriginPrivateFileSystemVFS();
|
const opfsVfs = new OriginPrivateFileSystemVFS();
|
||||||
vfs = opfsVfs;
|
|
||||||
|
|
||||||
|
vfs = opfsVfs;
|
||||||
const rc = api.vfs_register(opfsVfs, true);
|
const rc = api.vfs_register(opfsVfs, true);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
throw new Error(`Не удалось зарегистрировать OPFS VFS, код ${rc}`);
|
throw new Error(`Не удалось зарегистрировать OPFS VFS, код ${rc}`);
|
||||||
@@ -39,6 +37,7 @@ async function init() {
|
|||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
self.postMessage({ type: 'ready', ok: true });
|
self.postMessage({ type: 'ready', ok: true });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function execSchema() {
|
async function execSchema() {
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ function initWorker(): Promise<void> {
|
|||||||
if (initPromise) return initPromise;
|
if (initPromise) return initPromise;
|
||||||
|
|
||||||
initPromise = new Promise((resolve, reject) => {
|
initPromise = new Promise((resolve, reject) => {
|
||||||
worker = new DbWorker();
|
worker = new Worker(
|
||||||
|
new URL('./db-worker.ts', import.meta.url),
|
||||||
|
{ type: 'module' } // <--- ЭТО КЛЮЧЕВОЙ ПАРАМЕТР, КОТОРЫЙ ЛЕЧИТ SAFAFI/iOS
|
||||||
|
);
|
||||||
|
|
||||||
worker.onmessage = (e: MessageEvent) => {
|
worker.onmessage = (e: MessageEvent) => {
|
||||||
const msg = e.data;
|
const msg = e.data;
|
||||||
@@ -49,7 +52,7 @@ function initWorker(): Promise<void> {
|
|||||||
if (msg.ok) {
|
if (msg.ok) {
|
||||||
pendingReq.resolve(msg.data);
|
pendingReq.resolve(msg.data);
|
||||||
} else {
|
} else {
|
||||||
console.log(msg);
|
console.log(msg)
|
||||||
pendingReq.reject(new Error(msg.error || 'Неизвестная ошибка Worker'));
|
pendingReq.reject(new Error(msg.error || 'Неизвестная ошибка Worker'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -1,8 +1,11 @@
|
|||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
|
import basicSsl from '@vitejs/plugin-basic-ssl'; // npm i -D @vitejs/plugin-basic-ssl
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
plugins: [basicSsl()], // Добавит локальный HTTPS
|
||||||
|
|
||||||
build: {
|
build: {
|
||||||
target: 'es2020',
|
target: 'esnext',
|
||||||
},
|
},
|
||||||
optimizeDeps: {
|
optimizeDeps: {
|
||||||
exclude: ['wa-sqlite'],
|
exclude: ['wa-sqlite'],
|
||||||
|
|||||||
Reference in New Issue
Block a user