addDts
addDts allows you to inject a .d.ts file into the user’s project. It will
create a file inside .astro and reference it from src/env.d.ts. For example:
1import {2    defineIntegration,3    addDts4} from "astro-integration-kit";5
6export default defineIntegration({7    // ...8    setup() {9        return {10            hooks: {11                "astro:config:setup": (params) => {12                    addDts(params, {13                        name: "my-integration",14                        content: `declare module "virtual:my-integration" {}`15                    })16                }17            }18        }19    }20})How to generate content?
Here are a few suggestions regarding how to deal with content conveniently.
Static content
If content is a static string and you want to have a nice DX instead of managing it inside a string,
we recommend you use a stub approach:
1declare module "virtual:my-integration" {}1import { defineIntegration, createResolver, addDts } from "astro-integration-kit";2import { readFileSync } from "node:fs";3
4export default defineIntegration({5    // ...6    setup() {7        const { resolve } = createResolver(import.meta.url)8
9        return {10            hooks: {11                "astro:config:setup": (params) => {12                    addDts(params, {13                        name: "my-integration",14                        content: readFileSync(resolve("./stubs/virtual-import.d.ts"), "utf-8")15                    })16                }17            }18        }19    }20})Dynamic content
If you want to generate type from user data/input (codegen), you can go for interpolation or a buffer approach.
Interpolation
1import { defineIntegration, addDts } from "astro-integration-kit";2import { z } from "astro/zod"3
4export default defineIntegration({5    // ...6    optionsSchema: z.object({ locales: z.array(z.string()) }),7    setup({ options }) {8        return {9            hooks: {10                "astro:config:setup": (params) => {11                    addDts(params, {12                        name: "my-integration",13                        content: `declare module "virtual:my-integration" {14                            export type Locale: ${options.locales.map(e => `"${e}"`).join(" | ")};15                        }`16                    })17                }18            }19        }20    }21})Buffer
1import { defineIntegration, addDts } from "astro-integration-kit";2import { z } from "astro/zod"3
4export default defineIntegration({5    // ...6    optionsSchema: z.object({ locales: z.array(z.string()) }),7    setup({ options }) {8        return {9            hooks: {10                "astro:config:setup": (params) => {11                    let content = `declare module "virtual:my-integration" {12                        export type Locale:`13                    for (const locale of locales) {14                        content += ` | ${locale}`15                    }16                    content += ";\n}"17
18                    addDts(params, {19                        name: "my-integration",20                        content21                    })22                }23            }24        }25    }26})