diff --git a/.changeset/busy-crabs-swim.md b/.changeset/busy-crabs-swim.md new file mode 100644 index 00000000..fd40035e --- /dev/null +++ b/.changeset/busy-crabs-swim.md @@ -0,0 +1,5 @@ +--- +"stack54": patch +--- + +Execute transform hook in dev/serve mode diff --git a/packages/core/src/core/build/index.ts b/packages/core/src/core/build/index.ts index e394d0b3..62a1970d 100644 --- a/packages/core/src/core/build/index.ts +++ b/packages/core/src/core/build/index.ts @@ -40,7 +40,7 @@ export function* build({ cwd, ..._ }: EntryOption) { const mode = process.env.NODE_ENV ?? "production"; - const shared_vite_config = make_vite_config(resolved_config, { + const shared_vite_config = yield* make_vite_config(resolved_config, { mode, command, }); diff --git a/packages/core/src/core/dev/index.ts b/packages/core/src/core/dev/index.ts index f2eacc26..ff3fc48f 100644 --- a/packages/core/src/core/dev/index.ts +++ b/packages/core/src/core/dev/index.ts @@ -110,7 +110,7 @@ export function* setup( const mode = process.env.NODE_ENV ?? "development"; - const shared_vite_config = make_vite_config(resolved_config, { + const shared_vite_config = yield* make_vite_config(resolved_config, { mode, command, }); diff --git a/packages/core/src/core/utils/vite.ts b/packages/core/src/core/utils/vite.ts index 3ff94b83..a90cf908 100644 --- a/packages/core/src/core/utils/vite.ts +++ b/packages/core/src/core/utils/vite.ts @@ -26,7 +26,7 @@ export function get_svelte_config(config: ResolvedConfig) { return { ...svelte_config, preprocess: preprocessors }; } -export function make_vite_config( +export function* make_vite_config( config: ResolvedConfig, { mode, command, logger }: CreateViteOptions, ) { @@ -51,7 +51,7 @@ export function make_vite_config( resolve: { conditions: ["browser", "default"] }, plugins: [ svelte(config.svelte) as vite.PluginOption, - integrations_container_plugin(config), + yield* integrations_container_plugin(config), ...(plugins ?? []), ], optimizeDeps: diff --git a/packages/core/src/core/vite-plugins/integrations/index.ts b/packages/core/src/core/vite-plugins/integrations/index.ts index 54ecf6ab..2cd02870 100644 --- a/packages/core/src/core/vite-plugins/integrations/index.ts +++ b/packages/core/src/core/vite-plugins/integrations/index.ts @@ -1,8 +1,22 @@ +import { call, Operation, useScope } from "effection"; import { Plugin } from "vite"; + +import type { Processed } from "svelte/compiler"; +import * as compiler from "svelte/compiler"; + import { ResolvedConfig } from "../../config/index.js"; +import { + run_html_post_transform, + run_html_pre_transform, +} from "../../integrations/hooks.js"; + +export function* integrations_container_plugin( + config: ResolvedConfig, +): Operation { + const scope = yield* useScope(); -export function integrations_container_plugin(config: ResolvedConfig): Plugin { return { + apply: "serve", name: "stack54:integrations", async configureServer(server) { const callbacks = await Promise.all( @@ -10,12 +24,34 @@ export function integrations_container_plugin(config: ResolvedConfig): Plugin { const plugin = integration instanceof Promise ? await integration : integration; return plugin.configureServer?.call(plugin, server); - }) + }), ); return () => { callbacks.forEach((fn) => fn?.()); }; }, + transform: { + order: "pre", + async handler(code, filename) { + return scope.run(function* () { + const preprocessors = config.svelte.preprocess ?? []; + + const processed: Processed = yield* call(() => + compiler.preprocess(code, preprocessors, { filename }), + ); + + const pre = yield* run_html_pre_transform(config, { + code: processed.code, + filename, + }); + + return yield* run_html_post_transform(config, { + filename, + code: pre, + }); + }); + }, + }, }; }