From e594fb0037f440f589c36c01e0108f011545a681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 12 Mar 2025 14:37:57 +0900 Subject: [PATCH] =?UTF-8?q?enhance(dev):=20frontend=E3=81=AE=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=E3=82=A4=E3=83=B3=E3=83=87=E3=83=83=E3=82=AF=E3=82=B9?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=82=92=E5=8D=98=E7=8B=AC=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=9E=E3=83=B3=E3=83=89=E3=81=A7=E8=A1=8C=E3=81=88=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=20(#15653)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + .../lib/vite-plugin-create-search-index.ts | 31 +++++++++++-------- packages/frontend/package.json | 2 ++ .../frontend/scripts/generate-search-index.ts | 15 +++++++++ packages/frontend/vite-node.config.ts | 3 ++ packages/frontend/vite.config.ts | 19 ++++++++---- pnpm-lock.yaml | 3 ++ 7 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 packages/frontend/scripts/generate-search-index.ts create mode 100644 packages/frontend/vite-node.config.ts diff --git a/package.json b/package.json index 591aa2a573..7142e1f660 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "build": "pnpm build-pre && pnpm -r build && pnpm build-assets", "build-storybook": "pnpm --filter frontend build-storybook", "build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api", + "build-frontend-search-index": "pnpm --filter frontend build-search-index", "start": "pnpm check:connect && cd packages/backend && node ./built/boot/entry.js", "start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./built/boot/entry.js", "init": "pnpm migrate", diff --git a/packages/frontend/lib/vite-plugin-create-search-index.ts b/packages/frontend/lib/vite-plugin-create-search-index.ts index e194872640..d506e84bb6 100644 --- a/packages/frontend/lib/vite-plugin-create-search-index.ts +++ b/packages/frontend/lib/vite-plugin-create-search-index.ts @@ -1428,6 +1428,23 @@ async function processVueFile( }; } +export async function generateSearchIndex(options: Options, transformedCodeCache: Record = {}) { + const filePaths = options.targetFilePaths.reduce((acc, filePathPattern) => { + const matchedFiles = glob.sync(filePathPattern); + return [...acc, ...matchedFiles]; + }, []); + + for (const filePath of filePaths) { + const id = path.resolve(filePath); // 絶対パスに変換 + const code = fs.readFileSync(filePath, 'utf-8'); // ファイル内容を読み込む + const { transformedCodeCache: newCache } = await processVueFile(code, id, options, transformedCodeCache); // processVueFile 関数を呼び出す + transformedCodeCache = newCache; // キャッシュを更新 + } + + await analyzeVueProps({ ...options, transformedCodeCache }); // 開発サーバー起動時にも analyzeVueProps を実行 + + return transformedCodeCache; // キャッシュを返す +} // Rollup プラグインとして export export default function pluginCreateSearchIndex(options: Options): Plugin { @@ -1445,19 +1462,7 @@ export default function pluginCreateSearchIndex(options: Options): Plugin { return; } - const filePaths = options.targetFilePaths.reduce((acc, filePathPattern) => { - const matchedFiles = glob.sync(filePathPattern); - return [...acc, ...matchedFiles]; - }, []); - - for (const filePath of filePaths) { - const id = path.resolve(filePath); // 絶対パスに変換 - const code = fs.readFileSync(filePath, 'utf-8'); // ファイル内容を読み込む - const { transformedCodeCache: newCache } = await processVueFile(code, id, options, transformedCodeCache); // processVueFile 関数を呼び出す - transformedCodeCache = newCache; // キャッシュを更新 - } - - await analyzeVueProps({ ...options, transformedCodeCache }); // 開発サーバー起動時にも analyzeVueProps を実行 + transformedCodeCache = await generateSearchIndex(options, transformedCodeCache); }, async transform(code, id) { diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 946a0be48f..d829a34804 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -5,6 +5,7 @@ "scripts": { "watch": "vite", "build": "vite build", + "build-search-index": "vite-node --config \"./vite-node.config.ts\" \"./scripts/generate-search-index.ts\"", "storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"", "build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js", "build-storybook": "pnpm build-storybook-pre && storybook build --webpack-stats-json storybook-static", @@ -133,6 +134,7 @@ "start-server-and-test": "2.0.10", "storybook": "8.6.4", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", + "vite-node": "3.0.8", "vite-plugin-turbosnap": "1.0.3", "vitest": "3.0.8", "vitest-fetch-mock": "0.4.5", diff --git a/packages/frontend/scripts/generate-search-index.ts b/packages/frontend/scripts/generate-search-index.ts new file mode 100644 index 0000000000..cbb4bb8c51 --- /dev/null +++ b/packages/frontend/scripts/generate-search-index.ts @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { searchIndexes } from '../vite.config.js'; +import { generateSearchIndex } from '../lib/vite-plugin-create-search-index.js'; + +async function main() { + for (const searchIndex of searchIndexes) { + await generateSearchIndex(searchIndex); + } +} + +main(); diff --git a/packages/frontend/vite-node.config.ts b/packages/frontend/vite-node.config.ts new file mode 100644 index 0000000000..c049f46e10 --- /dev/null +++ b/packages/frontend/vite-node.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({}); diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index a28fc553f4..ec80e71ae4 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -1,7 +1,8 @@ import path from 'path'; import pluginReplace from '@rollup/plugin-replace'; import pluginVue from '@vitejs/plugin-vue'; -import { type UserConfig, defineConfig } from 'vite'; +import { defineConfig } from 'vite'; +import type { UserConfig } from 'vite'; import * as yaml from 'js-yaml'; import { promises as fsp } from 'fs'; @@ -11,12 +12,22 @@ import packageInfo from './package.json' with { type: 'json' }; import pluginUnwindCssModuleClassName from './lib/rollup-plugin-unwind-css-module-class-name.js'; import pluginJson5 from './vite.json5.js'; import pluginCreateSearchIndex from './lib/vite-plugin-create-search-index.js'; +import type { Options as SearchIndexOptions } from './lib/vite-plugin-create-search-index.js'; const url = process.env.NODE_ENV === 'development' ? yaml.load(await fsp.readFile('../../.config/default.yml', 'utf-8')).url : null; const host = url ? (new URL(url)).hostname : undefined; const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.json', '.json5', '.svg', '.sass', '.scss', '.css', '.vue']; +/** + * 検索インデックスの生成設定 + */ +export const searchIndexes = [{ + targetFilePaths: ['src/pages/settings/*.vue'], + exportFilePath: './src/utility/autogen/settings-search-index.ts', + verbose: process.env.FRONTEND_SEARCH_INDEX_VERBOSE === 'true', +}] satisfies SearchIndexOptions[]; + /** * Misskeyのフロントエンドにバンドルせず、CDNなどから別途読み込むリソースを記述する。 * CDNを使わずにバンドルしたい場合、以下の配列から該当要素を削除orコメントアウトすればOK @@ -84,11 +95,7 @@ export function getConfig(): UserConfig { }, plugins: [ - pluginCreateSearchIndex({ - targetFilePaths: ['src/pages/settings/*.vue'], - exportFilePath: './src/utility/autogen/settings-search-index.ts', - verbose: process.env.FRONTEND_SEARCH_INDEX_VERBOSE === 'true', - }), + ...searchIndexes.map(options => pluginCreateSearchIndex(options)), pluginVue(), pluginUnwindCssModuleClassName(), pluginJson5(), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b70b273d0..681cf6fb18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1040,6 +1040,9 @@ importers: storybook-addon-misskey-theme: specifier: github:misskey-dev/storybook-addon-misskey-theme version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@8.6.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/components@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/core-events@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/manager-api@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/preview-api@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/theming@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(@storybook/types@8.6.4(storybook@8.6.4(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@6.0.5)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + vite-node: + specifier: 3.0.8 + version: 3.0.8(@types/node@22.13.9)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3) vite-plugin-turbosnap: specifier: 1.0.3 version: 1.0.3