loggerを置きかえ
This commit is contained in:
parent
c34087b81a
commit
8753c3cc37
|
@ -11,6 +11,7 @@ import JSON5 from 'json5';
|
||||||
import MagicString from 'magic-string';
|
import MagicString from 'magic-string';
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import { hash, toBase62 } from '../vite.config';
|
import { hash, toBase62 } from '../vite.config';
|
||||||
|
import { createLogger } from 'vite';
|
||||||
|
|
||||||
export type AnalysisResult = {
|
export type AnalysisResult = {
|
||||||
filePath: string;
|
filePath: string;
|
||||||
|
@ -26,15 +27,35 @@ export type SearchIndexItem = {
|
||||||
children?: (SearchIndexItem[] | string);
|
children?: (SearchIndexItem[] | string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const logger = createLogger();
|
||||||
|
const loggerInfo = logger.info;
|
||||||
|
const loggerWarn = logger.warn;
|
||||||
|
const loggerError = logger.error;
|
||||||
|
|
||||||
|
logger.info = (msg, options) => {
|
||||||
|
msg = `[create-search-index] ${msg}`;
|
||||||
|
loggerInfo(msg, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.warn = (msg, options) => {
|
||||||
|
msg = `[create-search-index] ${msg}`;
|
||||||
|
loggerWarn(msg, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.error = (msg, options) => {
|
||||||
|
msg = `[create-search-index] ${msg}`;
|
||||||
|
loggerError(msg, options);
|
||||||
|
}
|
||||||
|
|
||||||
function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisResult[]): void {
|
function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisResult[]): void {
|
||||||
console.log(`[create-search-index] Processing ${analysisResults.length} files for output`);
|
logger.info(`Processing ${analysisResults.length} files for output`);
|
||||||
|
|
||||||
// 新しいツリー構造を構築
|
// 新しいツリー構造を構築
|
||||||
const allMarkers = new Map<string, SearchIndexItem>();
|
const allMarkers = new Map<string, SearchIndexItem>();
|
||||||
|
|
||||||
// 1. すべてのマーカーを一旦フラットに収集
|
// 1. すべてのマーカーを一旦フラットに収集
|
||||||
for (const file of analysisResults) {
|
for (const file of analysisResults) {
|
||||||
console.log(`[create-search-index] Processing file: ${file.filePath} with ${file.usage.length} markers`);
|
logger.info(`Processing file: ${file.filePath} with ${file.usage.length} markers`);
|
||||||
for (const marker of file.usage) {
|
for (const marker of file.usage) {
|
||||||
if (marker.id) {
|
if (marker.id) {
|
||||||
// キーワードの処理(文字列から配列へ変換)
|
// キーワードの処理(文字列から配列へ変換)
|
||||||
|
@ -45,7 +66,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
keywords = JSON5.parse(keywords.replace(/'/g, '"'));
|
keywords = JSON5.parse(keywords.replace(/'/g, '"'));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 解析に失敗した場合は文字列のままにする
|
// 解析に失敗した場合は文字列のままにする
|
||||||
console.log(`[create-search-index] Keeping keywords as string expression: ${keywords}`);
|
logger.warn(`Keeping keywords as string expression: ${keywords}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,14 +78,14 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
children = JSON5.parse(children.replace(/'/g, '"'));
|
children = JSON5.parse(children.replace(/'/g, '"'));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 解析に失敗した場合は空配列に
|
// 解析に失敗した場合は空配列に
|
||||||
console.log(`[create-search-index] Could not parse children: ${children}, using empty array`);
|
logger.warn(`Could not parse children: ${children}, using empty array`);
|
||||||
children = [];
|
children = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 子マーカーの内部構造を適切に更新
|
// 子マーカーの内部構造を適切に更新
|
||||||
if (Array.isArray(children) && children.length > 0) {
|
if (Array.isArray(children) && children.length > 0) {
|
||||||
console.log(`[create-search-index] Marker ${marker.id} has ${children.length} children: ${JSON.stringify(children)}`);
|
logger.info(`Marker ${marker.id} has ${children.length} children: ${JSON.stringify(children)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
allMarkers.set(marker.id, {
|
allMarkers.set(marker.id, {
|
||||||
|
@ -76,7 +97,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[create-search-index] Collected total ${allMarkers.size} unique markers`);
|
logger.info(`Collected total ${allMarkers.size} unique markers`);
|
||||||
|
|
||||||
// 2. 子マーカーIDの収集
|
// 2. 子マーカーIDの収集
|
||||||
const childIds = new Set<string>();
|
const childIds = new Set<string>();
|
||||||
|
@ -87,7 +108,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
children.forEach(childId => {
|
children.forEach(childId => {
|
||||||
if (typeof childId === 'string') {
|
if (typeof childId === 'string') {
|
||||||
if (!allMarkers.has(childId)) {
|
if (!allMarkers.has(childId)) {
|
||||||
console.warn(`[create-search-index] Warning: Child marker ID ${childId} referenced but not found`);
|
logger.warn(`Warning: Child marker ID ${childId} referenced but not found`);
|
||||||
} else {
|
} else {
|
||||||
childIds.add(childId);
|
childIds.add(childId);
|
||||||
}
|
}
|
||||||
|
@ -96,7 +117,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`[create-search-index] Found ${childIds.size} child markers`);
|
logger.info(`Found ${childIds.size} child markers`);
|
||||||
|
|
||||||
// 3. ルートマーカーの特定(他の誰かの子でないマーカー)
|
// 3. ルートマーカーの特定(他の誰かの子でないマーカー)
|
||||||
const rootMarkers: SearchIndexItem[] = [];
|
const rootMarkers: SearchIndexItem[] = [];
|
||||||
|
@ -105,11 +126,11 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
if (!childIds.has(id)) {
|
if (!childIds.has(id)) {
|
||||||
// このマーカーはルート(他の誰の子でもない)
|
// このマーカーはルート(他の誰の子でもない)
|
||||||
rootMarkers.push(marker);
|
rootMarkers.push(marker);
|
||||||
console.log(`[create-search-index] Added root marker to output: ${id} with label ${marker.label}`);
|
logger.info(`Added root marker to output: ${id} with label ${marker.label}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`[create-search-index] Found ${rootMarkers.length} root markers`);
|
logger.info(`Found ${rootMarkers.length} root markers`);
|
||||||
|
|
||||||
// 4. 子マーカーの参照を解決(IDから実際のオブジェクトに)
|
// 4. 子マーカーの参照を解決(IDから実際のオブジェクトに)
|
||||||
function resolveChildrenReferences(marker: SearchIndexItem): SearchIndexItem {
|
function resolveChildrenReferences(marker: SearchIndexItem): SearchIndexItem {
|
||||||
|
@ -128,7 +149,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
// 子マーカーの子も再帰的に解決
|
// 子マーカーの子も再帰的に解決
|
||||||
const resolvedChild = resolveChildrenReferences(childMarker);
|
const resolvedChild = resolveChildrenReferences(childMarker);
|
||||||
children.push(resolvedChild);
|
children.push(resolvedChild);
|
||||||
console.log(`[create-search-index] Resolved child ${childId} for parent ${marker.id}`);
|
logger.info(`Resolved child ${childId} for parent ${marker.id}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,7 +254,7 @@ function outputAnalysisResultAsTS(outputPath: string, analysisResults: AnalysisR
|
||||||
}
|
}
|
||||||
|
|
||||||
countNestedMarkers(resolvedRootMarkers);
|
countNestedMarkers(resolvedRootMarkers);
|
||||||
console.log(`[create-search-index] Total markers in tree: ${totalMarkers} (${resolvedRootMarkers.length} roots + ${totalChildren} nested children)`);
|
logger.info(`Total markers in tree: ${totalMarkers} (${resolvedRootMarkers.length} roots + ${totalChildren} nested children)`);
|
||||||
|
|
||||||
// 結果をTS形式で出力
|
// 結果をTS形式で出力
|
||||||
const tsOutput = `
|
const tsOutput = `
|
||||||
|
@ -267,9 +288,9 @@ export type SearchIndex = typeof searchIndexes;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fs.writeFileSync(outputPath, tsOutput, 'utf-8');
|
fs.writeFileSync(outputPath, tsOutput, 'utf-8');
|
||||||
console.log(`[create-search-index] Successfully wrote search index to ${outputPath} with ${resolvedRootMarkers.length} root entries and ${totalChildren} nested children`);
|
logger.info(`Successfully wrote search index to ${outputPath} with ${resolvedRootMarkers.length} root entries and ${totalChildren} nested children`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[create-search-index]: error: ', error);
|
logger.error('[create-search-index]: error: ', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +310,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
}
|
}
|
||||||
|
|
||||||
// デバッグ情報
|
// デバッグ情報
|
||||||
console.log('[create-search-index] Started extracting markers from AST');
|
logger.info('Started extracting markers from AST');
|
||||||
|
|
||||||
// マーカーの基本情報を収集
|
// マーカーの基本情報を収集
|
||||||
function collectMarkers(node: any, parentId: string | null = null) {
|
function collectMarkers(node: any, parentId: string | null = null) {
|
||||||
|
@ -301,7 +322,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
node.__markerId ||
|
node.__markerId ||
|
||||||
`marker-${Math.random().toString(36).substring(2, 10)}`;
|
`marker-${Math.random().toString(36).substring(2, 10)}`;
|
||||||
|
|
||||||
console.log(`[create-search-index] Found SearchMarker with ID: ${markerId}`);
|
logger.info(`Found SearchMarker with ID: ${markerId}`);
|
||||||
|
|
||||||
// マーカー基本情報
|
// マーカー基本情報
|
||||||
const markerInfo: SearchIndexItem = {
|
const markerInfo: SearchIndexItem = {
|
||||||
|
@ -320,7 +341,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
else if (prop.name === 'icon') markerInfo.icon = prop.value?.content || '';
|
else if (prop.name === 'icon') markerInfo.icon = prop.value?.content || '';
|
||||||
else if (prop.name === 'label') markerInfo.label = prop.value?.content || '';
|
else if (prop.name === 'label') markerInfo.label = prop.value?.content || '';
|
||||||
|
|
||||||
console.log(`[create-search-index] Static prop ${prop.name}:`, prop.value?.content);
|
logger.info(`Static prop ${prop.name}:`, prop.value?.content);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -332,7 +353,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
const propName = prop.arg.content;
|
const propName = prop.arg.content;
|
||||||
const propValue = prop.exp?.content || '';
|
const propValue = prop.exp?.content || '';
|
||||||
|
|
||||||
console.log(`[create-search-index] Bind prop ${propName}:`, propValue);
|
logger.info(`Bind prop ${propName}:`, propValue);
|
||||||
|
|
||||||
if (propName === 'label') {
|
if (propName === 'label') {
|
||||||
markerInfo.label = propValue;
|
markerInfo.label = propValue;
|
||||||
|
@ -374,7 +395,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
parent.children = [markerId];
|
parent.children = [markerId];
|
||||||
}
|
}
|
||||||
childrenIds.add(markerId);
|
childrenIds.add(markerId);
|
||||||
console.log(`[create-search-index] Added ${markerId} as child of ${parentId}`);
|
logger.info(`Added ${markerId} as child of ${parentId}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,7 +423,7 @@ function extractUsageInfoFromTemplateAst(
|
||||||
collectMarkers(templateAst);
|
collectMarkers(templateAst);
|
||||||
|
|
||||||
// デバッグ情報
|
// デバッグ情報
|
||||||
console.log(`[create-search-index] Found ${markerMap.size} markers, ${childrenIds.size} children`);
|
logger.info(`Found ${markerMap.size} markers, ${childrenIds.size} children`);
|
||||||
|
|
||||||
// 重要: すべてのマーカー情報を返す
|
// 重要: すべてのマーカー情報を返す
|
||||||
return allMarkers;
|
return allMarkers;
|
||||||
|
@ -421,20 +442,20 @@ export async function analyzeVueProps(options: {
|
||||||
return [...acc, ...matchedFiles];
|
return [...acc, ...matchedFiles];
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
console.log(`[create-search-index] Found ${filePaths.length} matching files to analyze`);
|
logger.info(`Found ${filePaths.length} matching files to analyze`);
|
||||||
|
|
||||||
for (const filePath of filePaths) {
|
for (const filePath of filePaths) {
|
||||||
const id = path.resolve(filePath); // 絶対パスに変換
|
const id = path.resolve(filePath); // 絶対パスに変換
|
||||||
const code = options.transformedCodeCache[id]; // options 経由でキャッシュ参照
|
const code = options.transformedCodeCache[id]; // options 経由でキャッシュ参照
|
||||||
if (!code) { // キャッシュミスの場合
|
if (!code) { // キャッシュミスの場合
|
||||||
console.error(`[create-search-index] Error: No cached code found for: ${filePath}.`); // エラーログ
|
logger.error(`Error: No cached code found for: ${filePath}.`); // エラーログ
|
||||||
// ファイルを直接読み込む代替策を実行
|
// ファイルを直接読み込む代替策を実行
|
||||||
try {
|
try {
|
||||||
const directCode = fs.readFileSync(filePath, 'utf-8');
|
const directCode = fs.readFileSync(filePath, 'utf-8');
|
||||||
options.transformedCodeCache[id] = directCode;
|
options.transformedCodeCache[id] = directCode;
|
||||||
console.log(`[create-search-index] Loaded file directly instead: ${filePath}`);
|
logger.info(`Loaded file directly instead: ${filePath}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`[create-search-index] Failed to load file directly: ${filePath}`, err);
|
logger.error(`Failed to load file directly: ${filePath}`, err);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -445,7 +466,7 @@ export async function analyzeVueProps(options: {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (errors.length) {
|
if (errors.length) {
|
||||||
console.error(`[create-search-index] Compile Error: ${filePath}`, errors);
|
logger.error(`Compile Error: ${filePath}`, errors);
|
||||||
continue; // エラーが発生したファイルはスキップ
|
continue; // エラーが発生したファイルはスキップ
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -453,12 +474,12 @@ export async function analyzeVueProps(options: {
|
||||||
|
|
||||||
if (fileMarkers && fileMarkers.length > 0) {
|
if (fileMarkers && fileMarkers.length > 0) {
|
||||||
allMarkers.push(...fileMarkers); // すべてのマーカーを収集
|
allMarkers.push(...fileMarkers); // すべてのマーカーを収集
|
||||||
console.log(`[create-search-index] Successfully extracted ${fileMarkers.length} markers from ${filePath}`);
|
logger.info(`Successfully extracted ${fileMarkers.length} markers from ${filePath}`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`[create-search-index] No markers found in ${filePath}`);
|
logger.info(`No markers found in ${filePath}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`[create-search-index] Error analyzing file ${filePath}:`, error);
|
logger.error(`Error analyzing file ${filePath}:`, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,7 +508,7 @@ async function processVueFile(
|
||||||
) {
|
) {
|
||||||
// すでにキャッシュに存在する場合は、そのまま返す
|
// すでにキャッシュに存在する場合は、そのまま返す
|
||||||
if (transformedCodeCache[id] && transformedCodeCache[id].includes('markerId=')) {
|
if (transformedCodeCache[id] && transformedCodeCache[id].includes('markerId=')) {
|
||||||
console.log(`[create-search-index] Using cached version for ${id}`);
|
logger.info(`Using cached version for ${id}`);
|
||||||
return {
|
return {
|
||||||
code: transformedCodeCache[id],
|
code: transformedCodeCache[id],
|
||||||
map: null
|
map: null
|
||||||
|
@ -555,9 +576,9 @@ async function processVueFile(
|
||||||
|
|
||||||
if (!markerIdRegex.test(tagText)) {
|
if (!markerIdRegex.test(tagText)) {
|
||||||
s.appendRight(endOfStartTag, ` markerId="${generatedMarkerId}"`);
|
s.appendRight(endOfStartTag, ` markerId="${generatedMarkerId}"`);
|
||||||
console.log(`[create-search-index] Adding markerId="${generatedMarkerId}" to ${id}:${lineNumber}`);
|
logger.info(`Adding markerId="${generatedMarkerId}" to ${id}:${lineNumber}`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`[create-search-index] markerId already exists in ${id}:${lineNumber}`);
|
logger.warn(`markerId already exists in ${id}:${lineNumber}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -619,11 +640,11 @@ async function processVueFile(
|
||||||
childrenArray = [...childrenArray, ...newIds];
|
childrenArray = [...childrenArray, ...newIds];
|
||||||
const updatedChildrenArrayStr = JSON5.stringify(childrenArray).replace(/"/g, "'");
|
const updatedChildrenArrayStr = JSON5.stringify(childrenArray).replace(/"/g, "'");
|
||||||
s.overwrite(childrenStart, childrenEnd + 1, updatedChildrenArrayStr);
|
s.overwrite(childrenStart, childrenEnd + 1, updatedChildrenArrayStr);
|
||||||
console.log(`[create-search-index] Added ${newIds.length} child markerIds to existing :children in ${id}`);
|
logger.info(`Added ${newIds.length} child markerIds to existing :children in ${id}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[create-search-index] Error updating :children attribute:', e);
|
logger.error('Error updating :children attribute:', e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// AST では検出されなかった場合、タグテキストを調べる
|
// AST では検出されなかった場合、タグテキストを調べる
|
||||||
|
@ -652,17 +673,17 @@ async function processVueFile(
|
||||||
const absoluteEnd = parentNodeStart + attrValueEnd;
|
const absoluteEnd = parentNodeStart + attrValueEnd;
|
||||||
const updatedArrayStr = JSON5.stringify(childrenArray).replace(/"/g, "'");
|
const updatedArrayStr = JSON5.stringify(childrenArray).replace(/"/g, "'");
|
||||||
s.overwrite(absoluteStart, absoluteEnd, updatedArrayStr);
|
s.overwrite(absoluteStart, absoluteEnd, updatedArrayStr);
|
||||||
console.log(`[create-search-index] Updated existing :children in tag text for ${id}`);
|
logger.info(`Updated existing :children in tag text for ${id}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[create-search-index] Error updating :children in tag text:', e);
|
logger.error('Error updating :children in tag text:', e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// :children 属性がまだない場合、新規作成
|
// :children 属性がまだない場合、新規作成
|
||||||
s.appendRight(endOfParentStartTag, ` :children="${JSON5.stringify(childIds).replace(/"/g, "'")}"`);
|
s.appendRight(endOfParentStartTag, ` :children="${JSON5.stringify(childIds).replace(/"/g, "'")}"`);
|
||||||
console.log(`[create-search-index] Created new :children attribute with ${childIds.length} markerIds in ${id}`);
|
logger.info(`Created new :children attribute with ${childIds.length} markerIds in ${id}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue