Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/busy-crabs-swim.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"stack54": patch
---

Execute transform hook in dev/serve mode
2 changes: 1 addition & 1 deletion packages/core/src/core/build/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
});
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/core/dev/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/core/utils/vite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
) {
Expand All @@ -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:
Expand Down
40 changes: 38 additions & 2 deletions packages/core/src/core/vite-plugins/integrations/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,57 @@
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<Plugin> {
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(
config.integrations.map(async (integration) => {
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,
});
});
},
},
};
}
Loading