1
0
forked from mirror/misskey

embedのbootエントリーポイントを分離

This commit is contained in:
kakkokari-gtyih 2024-06-07 16:50:13 +09:00
parent bd0b7f90cf
commit 29033bd460
8 changed files with 65 additions and 36 deletions

View File

@ -161,6 +161,7 @@ export type Config = {
driveUrl: string; driveUrl: string;
userAgent: string; userAgent: string;
clientEntry: string; clientEntry: string;
clientEmbedEntry: string;
clientManifestExists: boolean; clientManifestExists: boolean;
mediaProxy: string; mediaProxy: string;
externalMediaProxyEnabled: boolean; externalMediaProxyEnabled: boolean;
@ -199,7 +200,7 @@ export function loadConfig(): Config {
const clientManifestExists = fs.existsSync(_dirname + '/../../../built/_vite_/manifest.json'); const clientManifestExists = fs.existsSync(_dirname + '/../../../built/_vite_/manifest.json');
const clientManifest = clientManifestExists ? const clientManifest = clientManifestExists ?
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_vite_/manifest.json`, 'utf-8')) JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_vite_/manifest.json`, 'utf-8'))
: { 'src/_boot_.ts': { file: 'src/_boot_.ts' } }; : { 'src/_boot_.ts': { file: 'src/_boot_.ts' }, 'src/_embed_boot_.ts': { file: 'src/_embed_boot_.ts' } };
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source; const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
const url = tryCreateUrl(config.url); const url = tryCreateUrl(config.url);
@ -267,6 +268,7 @@ export function loadConfig(): Config {
: null, : null,
userAgent: `Misskey/${version} (${config.url})`, userAgent: `Misskey/${version} (${config.url})`,
clientEntry: clientManifest['src/_boot_.ts'], clientEntry: clientManifest['src/_boot_.ts'],
clientEmbedEntry: clientManifest['src/_embed_boot_.ts'],
clientManifestExists: clientManifestExists, clientManifestExists: clientManifestExists,
perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000, perChannelMaxNoteCacheCount: config.perChannelMaxNoteCacheCount ?? 1000,
perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500, perUserNotificationsMaxCount: config.perUserNotificationsMaxCount ?? 500,

View File

@ -1,7 +1,7 @@
block vars block vars
block loadClientEntry block loadClientEntry
- const clientEntry = config.clientEntry; - const clientEntry = embed ? config.clientEmbedEntry : config.clientEntry;
doctype html doctype html

View File

@ -7,33 +7,12 @@
import 'vite/modulepreload-polyfill'; import 'vite/modulepreload-polyfill';
import '@/style.scss'; import '@/style.scss';
import type { CommonBootOptions } from '@/boot/common.js';
import { mainBoot } from '@/boot/main-boot.js'; import { mainBoot } from '@/boot/main-boot.js';
import { subBoot } from '@/boot/sub-boot.js'; import { subBoot } from '@/boot/sub-boot.js';
import { isEmbedPage } from '@/scripts/embed-page.js';
import { setIframeId, postMessageToParentWindow } from '@/scripts/post-message.js';
const subBootPaths = ['/share', '/auth', '/miauth', '/signup-complete']; const subBootPaths = ['/share', '/auth', '/miauth', '/signup-complete'];
if (isEmbedPage()) { if (subBootPaths.some(i => location.pathname === i || location.pathname.startsWith(i + '/'))) {
const bootOptions: Partial<CommonBootOptions> = {};
const params = new URLSearchParams(location.search);
const color = params.get('colorMode');
if (color && ['light', 'dark'].includes(color)) {
bootOptions.forceColorMode = color as 'light' | 'dark';
}
window.addEventListener('message', event => {
if (event.data?.type === 'misskey:embedParent:registerIframeId' && event.data.payload?.iframeId != null) {
setIframeId(event.data.payload.iframeId);
}
});
subBoot(bootOptions, true).then(() => {
postMessageToParentWindow('misskey:embed:ready');
});
} else if (subBootPaths.some(i => location.pathname === i || location.pathname.startsWith(i + '/'))) {
subBoot(); subBoot();
} else { } else {
mainBoot(); mainBoot();

View File

@ -7,10 +7,15 @@
// よって、devモードとして起動されるときはビルド時に組み込む形としておく。 // よって、devモードとして起動されるときはビルド時に組み込む形としておく。
// (pnpm start時はpugファイルの中で静的リソースとして読み込むようになっており、この問題は起こっていない) // (pnpm start時はpugファイルの中で静的リソースとして読み込むようになっており、この問題は起こっていない)
import '@tabler/icons-webfont/dist/tabler-icons.scss'; import '@tabler/icons-webfont/dist/tabler-icons.scss';
import { isEmbedPage } from '@/scripts/embed-page.js';
await main(); await main();
if (isEmbedPage()) {
import('@/_embed_boot_.js');
} else {
import('@/_boot_.js'); import('@/_boot_.js');
}
/** /**
* backend/src/server/web/boot.jsで差し込まれている起動処理のうち * backend/src/server/web/boot.jsで差し込まれている起動処理のうち

View File

@ -0,0 +1,35 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
// https://vitejs.dev/config/build-options.html#build-modulepreload
import 'vite/modulepreload-polyfill';
import '@/style.scss';
import '@/style.embed.scss';
import type { CommonBootOptions } from '@/boot/common.js';
import { subBoot } from '@/boot/sub-boot.js';
import { setIframeId, postMessageToParentWindow } from '@/scripts/post-message.js';
const bootOptions: Partial<CommonBootOptions> = {};
// カラーモードのオーバーライド
const params = new URLSearchParams(location.search);
const color = params.get('colorMode');
if (color && ['light', 'dark'].includes(color)) {
bootOptions.forceColorMode = color as 'light' | 'dark';
}
// iframeIdの設定
window.addEventListener('message', event => {
if (event.data?.type === 'misskey:embedParent:registerIframeId' && event.data.payload?.iframeId != null) {
setIframeId(event.data.payload.iframeId);
}
});
// 起動
subBoot(bootOptions, true).then(() => {
// 起動完了を通知(このあとクライアント側から misskey:embedParent:registerIframeId が送信される)
postMessageToParentWindow('misskey:embed:ready');
});

View File

@ -0,0 +1,18 @@
@charset "utf-8";
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
html.embed {
background-color: transparent;
overflow: hidden;
}
html.embed,
html.embed body,
html.embed #misskey_app {
height: 100%;
}

View File

@ -90,17 +90,6 @@ html {
&.useSystemFont { &.useSystemFont {
font-family: system-ui; font-family: system-ui;
} }
&.embed {
background-color: transparent;
overflow: hidden;
}
}
html.embed,
html.embed body,
html.embed #misskey_app {
height: 100%;
} }
html._themeChanging_ { html._themeChanging_ {

View File

@ -130,6 +130,7 @@ export function getConfig(): UserConfig {
rollupOptions: { rollupOptions: {
input: { input: {
app: './src/_boot_.ts', app: './src/_boot_.ts',
embedApp: './src/_embed_boot_.ts',
}, },
external: externalPackages.map(p => p.match), external: externalPackages.map(p => p.match),
output: { output: {