UNPKG

@studiocms/ui

Version:

The UI library for StudioCMS. Includes the layouts & components we use to build StudioCMS.

131 lines (130 loc) 4.07 kB
import type { HookParameters } from 'astro'; import type { PluginOption } from 'vite'; export type Hooks = Required<Astro.IntegrationHooks>; /** * Allows resolving paths relatively to the integration folder easily. Call it like this: * * @param {string} _base - The location you want to create relative references from. `import.meta.url` is usually what you'll want. * * @see https://astro-integration-kit.netlify.app/core/create-resolver/ * * @example * ```ts * const { resolve } = createResolver(import.meta.url); * const pluginPath = resolve("./plugin.ts"); * ``` * * This way, you do not have to add your plugin to your package.json `exports`. */ export declare const createResolver: (_base: string) => { resolve: (...path: Array<string>) => string; }; /** * A utility to be used on an Astro hook. * * @see defineUtility */ export type HookUtility<THook extends keyof Hooks, TArgs extends Array<any>, TReturn> = (params: HookParameters<THook>, ...args: TArgs) => TReturn; /** * Allows defining a type-safe function requiring all the params of a given hook. * It uses currying to make TypeScript happy. * * @param {string} _hook * * @see https://astro-integration-kit.netlify.app/core/define-utility/ * * @example * ```ts * const test = defineUtility("astro:config:setup")((params, foo: boolean) => { * return "bar"; * }); * ``` */ export declare const defineUtility: <THook extends keyof Hooks>(_hook: THook) => <TArgs extends Array<any>, T>(fn: HookUtility<THook, TArgs, T>) => HookUtility<THook, TArgs, T>; /** * Checks for the existence of a Vite plugin inside the Astro config. * * @param {import("astro").HookParameters<"astro:config:setup">} params * @param {Params} options * @param {string | import("vite").PluginOption} options.plugin * * @see https://astro-integration-kit.netlify.app/utilities/has-vite-plugin/ * * @example * ```ts * hasVitePlugin(params, { * plugin: "vite-plugin-my-integration", * }) * ``` */ export declare const hasVitePlugin: HookUtility<"astro:config:setup", [{ plugin: string | PluginOption; }], boolean>; /** * Adds a [vite plugin](https://vitejs.dev/guide/using-plugins) to the * Astro config. * * @param {import("astro").HookParameters<"astro:config:setup">} params * @param {object} options * @param {import("vite").PluginOption} options.plugin * @param {boolean} [options.warnDuplicated=true] * * @see https://astro-integration-kit.netlify.app/utilities/add-vite-plugin/ * * @example * ```ts * addVitePlugin(params, { * plugin, * warnDuplicated: true, * }) * ``` */ export declare const addVitePlugin: HookUtility<"astro:config:setup", [{ plugin: PluginOption; warnDuplicated?: boolean; }], void>; type VirtualImport = { id: string; content: string; context?: 'server' | 'client' | undefined; }; type Imports = Record<string, string> | Array<VirtualImport>; /** * Creates a Vite virtual module and updates the Astro config. * Virtual imports are useful for passing things like config options, or data computed within the integration. * * @param {import("astro").HookParameters<"astro:config:setup">} params * @param {object} options * @param {string} options.name * @param {Imports} options.imports * * @see https://astro-integration-kit.netlify.app/utilities/add-virtual-imports/ * * @example * ```ts * // my-integration/index.ts * import { addVirtualImports } from "astro-integration-kit"; * * addVirtualImports(params, { * name: 'my-integration', * imports: { * 'virtual:my-integration/config': `export default ${ JSON.stringify({foo: "bar"}) }`, * }, * }); * ``` * * This is then readable anywhere else in your integration: * * ```ts * // myIntegration/src/component/layout.astro * import config from "virtual:my-integration/config"; * * console.log(config.foo) // "bar" * ``` */ export declare const addVirtualImports: HookUtility<"astro:config:setup", [{ name: string; imports: Imports; __enableCorePowerDoNotUseOrYouWillBeFired?: boolean; }], void>; export {};