From 980c3919983d78bc38a37bf7187a3aa97b94a64b Mon Sep 17 00:00:00 2001 From: DH Date: Sun, 28 Dec 2025 21:31:58 +0300 Subject: [PATCH] kit: add skia initialization copy canvaskit.wasm to web build dir --- package.json | 4 +-- rpcsx-ui-kit/src/generators.ts | 50 +++++++++++++++++++++++++++++----- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 28bf6f1..0ec819a 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "build:web:server": "node ./build.mjs", "build:web:ui": "expo export --platform web --dev --output-dir electron/build/ui --no-minify --source-maps", "build:web:ui:release": "expo export --platform web --dev --output-dir electron/build/ui", - "build:web": "npm run build:kit && npm run build:web:server && npm run build:web:ui && npm run build:extensions && npm run install:extensions", - "build:web:release": "npm run build:kit && npm run build:web:server && npm run build:web:ui:release && npm run build:extensions && npm run install:extensions", + "build:web": "npm run build:kit && npm run build:web:server && npm run build:web:ui && cp node_modules/canvaskit-wasm/bin/full/canvaskit.wasm electron/build/ui/ && npm run build:extensions && npm run install:extensions", + "build:web:release": "npm run build:kit && npm run build:web:server && npm run build:web:ui:release && cp node_modules/canvaskit-wasm/bin/full/canvaskit.wasm electron/build/ui/ && npm run build:extensions && npm run install:extensions", "build:android": "npm run build:kit && expo prebuild --platform android && ./android/gradlew assembleDebug -p ./android", "build:android:release": "npm run build:kit && expo prebuild --platform android && ./android/gradlew assembleRelease -p ./android", "build:all": "npm run build && npm run build:web && npm run build:android", diff --git a/rpcsx-ui-kit/src/generators.ts b/rpcsx-ui-kit/src/generators.ts index 7ec1f69..66708db 100644 --- a/rpcsx-ui-kit/src/generators.ts +++ b/rpcsx-ui-kit/src/generators.ts @@ -2242,22 +2242,58 @@ export async function startup() { `; } + const viewListFile = await fileDb.createFile(path.join(genDir, "view-list.ts"), viewsListFile); + + if (viewListFile) { + viewListFile.content = `${generatedHeader} +${Object.keys(views).map(x => `import { ${x} } from '${pathWithoutExt(views[x])}'`).join(';\n')}; + +export const builtinViews: Record React.JSX.Element> = { +${Object.keys(views).map(x => ` "${x}": ${x}`).join(',\n')} +}; +`; + } + + const viewsWebFile = await fileDb.createFile(path.join(genDir, "views.web.ts"), viewsListFile); + + if (viewsWebFile) { + viewsWebFile.content = `${generatedHeader} +import { LoadSkiaWeb } from '@shopify/react-native-skia/lib/module/web'; + +export default async function getViews() { + await LoadSkiaWeb({ locateFile: () => 'app://-/canvaskit.wasm' }); + return (await import('./view-list')).builtinViews; +} +`; + } + + + const viewsFile = await fileDb.createFile(path.join(genDir, "views.ts"), viewsListFile); + + if (viewsFile) { + viewsFile.content = `${generatedHeader} +import { builtinViews } from './view-list'; + +export default async function getViews() { + return builtinViews; +} +`; + } + + const indexFile = await fileDb.createFile(path.join(genDir, "index.tsx"), viewsListFile); if (indexFile) { indexFile.content = `${generatedHeader} import { main } from '$core/main'; import { startup } from './startup'; - -${Object.keys(views).map(x => `import { ${x} } from '${pathWithoutExt(views[x])}'`).join(';\n')}; +import getViews from './views'; const serverInitializationPromise = startup(); -const builtinViews: Record React.JSX.Element> = { -${Object.keys(views).map(x => ` "${x}": ${x}`).join(',\n')} -}; - -main(builtinViews, serverInitializationPromise); +getViews().then(builtinViews => { + main(builtinViews, serverInitializationPromise); +}); `; }