astro-gists/package/src/integration.ts

61 lines
1.9 KiB
TypeScript

import { defineIntegration, createResolver } from "astro-integration-kit"
import { corePlugins } from "astro-integration-kit/plugins"
import { isThereAToken, TOKEN_MISSING_ERROR } from "./lib"
import { optionsSchema } from "./index"
import { readFileSync } from "node:fs";
/**
* Astro-Gist - An Astro.js integration for embedding GitHub Gists in your Astro.js project.
*/
export default defineIntegration({
name: "@matthiesenxyz/astro-gists",
optionsSchema,
plugins: [...corePlugins],
setup({ options }) {
const { resolve } = createResolver(import.meta.url)
return {
"astro:config:setup": ({
watchIntegration, addVirtualImports, logger, addDts
}) => {
logger.info("Setting up Astro Gists Integration.")
const configSetup = logger.fork("astro-gists/config:setup")
// WATCH INTEGRATION FOR CHANGES
watchIntegration(resolve())
// Check for GITHUB_PERSONAL_TOKEN
if (!isThereAToken) {configSetup.warn(TOKEN_MISSING_ERROR)}
// Add virtual imports
addVirtualImports({
"virtual:astro-gists/config": `export default ${JSON.stringify(options)}`,
"astro-gists:components": `export * from "@matthiesenxyz/astro-gists/components";`
});
addDts({
name: "astro-gists",
content: readFileSync(resolve("./stubs/astro-gists.d.ts"), "utf-8")
})
},
"astro:config:done": ({ logger }) => {
const configDone = logger.fork("astro-gists/config:done")
configDone.info("Astro Gists Integration Loaded.")
},
"astro:server:setup": ({ logger }) => {
const serverSetup = logger.fork("astro-gists/server:setup")
serverSetup.info("Setting up Astro Gists Integration for Development.")
},
"astro:build:start": ({ logger }) => {
const buildStart = logger.fork("astro-gists/build:start")
buildStart.info("Building Astro Gists Integration.")
},
"astro:build:done": ({ logger }) => {
const buildDone = logger.fork("astro-gists/build:done")
buildDone.info("Astro Gists Integration Built.")
}
}
}
})