UNPKG

svelte-trace

Version:

svelte-trace is a Svelte 5 preprocessor that enables 'click-to-open VS Code' functionality by adding metadata to HTML elements.

46 lines (45 loc) 2.02 kB
import { parse } from "svelte/compiler"; import { isValidFilePath, isRootLayoutFile } from "./utils/path_utility.js"; import { processNodes } from "./processors/core_processor.js"; import { injectIntoHead } from "./processors/head_processor.js"; /** * A preprocessor for Svelte files for tracking element's metadata. This function returns an object containing the preprocessor name, and a markup function. * * Set `openInCode` parameter to `false` if you don't want "Open in VSCode" functionality. */ export function svelteTrace(openInCode = true) { return { name: "svelte-trace", markup: ({ content, filename }) => { if (!isValidFilePath(filename)) return; try { let ast = parse(content, { modern: true }); let processedContent = content; // If file is "src/routes/+layout.svelte" if (isRootLayoutFile(filename)) { // If enabled, we have to inject the script to allow "openInCode" to work if (openInCode) { processedContent = injectIntoHead(processedContent, ast); } // Re-parse content in case of head injection if (processedContent !== content) { const newAst = parse(processedContent, { modern: true }); processedContent = processNodes(filename, processedContent, newAst); } else { processedContent = processNodes(filename, processedContent, ast); } } else { processedContent = processNodes(filename, processedContent, ast); } return { code: processedContent }; } catch (error) { console.error(`Failed to parse ${filename}:`, error); return { code: content }; } }, }; }