UNPKG

full-stack-svelte-kit

Version:

This framework is built on top of `@sveltejs/kit`.

94 lines (74 loc) 2.56 kB
import checkKeywords from "./keywords.js"; import routeHelper from "./routeHelper.js"; import loadFunction from "./template/loadFunction.js"; import metadata from "./template/metadata.js"; import ssrContent from "./template/ssrContent.js"; import { getScripts, writeFileIfChanged, getGeneratedManifestFromFile, } from "./utils.js"; export default function () { getGeneratedManifestFromFile(); /** @type {import('svelte/types/compiler/preprocess').PreprocessorGroup} */ return { /** @type {import('svelte/types/compiler/preprocess').Preprocessor} */ markup: ({ filename, content }) => { const regex = /<script([^>]*?)>([\s\S]+?)<\/script>/gm; // Only check for files within routes if ( !filename || !filename.includes("/routes") || filename.startsWith("_") ) return { code: content }; // Get all the scripts within the markup const scripts = getScripts(content, regex); const ssr_module_script = scripts.find( (s) => s.attrs.context === "module" && s.attrs.ssr ); const dom_module_script = scripts.find( (s) => s.attrs.context === "module" && !s.attrs.ssr ); if (!ssr_module_script && !dom_module_script) { return { code: content, }; } let scriptsIndex = 0; const { hasAction, hasLoad, hasMetaFn } = checkKeywords({ ssr_content: ssr_module_script.content, }); let code = content.replace(regex, (_, _attrs, _content) => { const script = scripts[scriptsIndex++]; if (dom_module_script && script === dom_module_script) { _ = ""; } if (script === ssr_module_script) { let ssr_content = ssr_module_script.content; let usesTS = ssr_module_script.attrs?.lang === "ts"; ssr_content = ssrContent({ ssr_content, hasLoad, hasAction, usesTS, hasMetaFn, }); const { fileToWrite, routesName } = routeHelper({ filename, script }); writeFileIfChanged(fileToWrite, ssr_content); return loadFunction({ content: _, dom_module_script_content: dom_module_script?.content, routesName, hasLoad, }); } return _; }); code = metadata({ hasMetaFn, code }); return { code, }; }, }; }