defineUtility
Allows defining a type-safe function requiring all the params of a given hook.
1import type { InjectedRoute } from "astro";2import { defineUtility } from "astro-integration-kit";3
4export const injectDevRoute = defineUtility("astro:config:setup")(5 ({ command, injectRoute }, injectedRoute: InjectedRoute) => {6 if (command === "dev") {7 injectRoute(injectedRoute);8 }9 },10);
Usage
Even though the syntax looks a bit scary, it’s actually very simple!
-
Call
defineUtility
with a hook name. That will be used to type the next steps:1import { defineUtility } from "astro-integration-kit";23export const injectDevRoute = defineUtility("astro:config:setup") -
Using currying, call the returned function with the typed params:
1import { defineUtility } from "astro-integration-kit";23export const injectDevRoute = defineUtility("astro:config:setup")(4// Typed as HookParameters<"astro:config:setup">5(params) => {}6) -
(Optional) Add your own parameters:
1import type { InjectedRoute } from "astro";2import { defineUtility } from "astro-integration-kit";34export const injectDevRoute = defineUtility("astro:config:setup")(5(params, injectedRoute: InjectedRoute) => {}6) -
Implement the actual logic:
1import type { InjectedRoute } from "astro";2import { defineUtility } from "astro-integration-kit";34export const injectDevRoute = defineUtility("astro:config:setup")(5({ command, injectRoute }, injectedRoute: InjectedRoute) => {6if (command === "dev") {7injectRoute(injectedRoute);8}9},10); -
Use the utility in your integration:
1import { defineIntegration, createResolver, injectDevRoute } from "astro-integration-kit"23export const integration = defineIntegration({4name: "my-integration",5setup() {6const { resolve } = createResolver(import.meta.url)78return {9hooks: {10"astro:config:setup": (params) => {11injectDevRoute(params, {12pattern: "/",13entrypoint: resolve("./pages/index.astro")14})15}16}17}18}19})