UNPKG

@drincs/pixi-vn-ink

Version:

Pixi'VN gives you the ability to write your own narrative using Ink

138 lines (133 loc) 5.88 kB
import { I as InkValidationInfo } from './types-D6WoW3qe.js'; import { Plugin } from 'vite'; export { InkHashtagCommandInfo } from '@drincs/pixi-vn-ink/parser'; /** * Dev-server endpoint that exposes and accepts the list of registered * {@link HashtagCommands} handlers as {@link InkHashtagCommandInfo} objects. * * - `GET /__pixi-vn-ink/hashtag-commands` – returns the stored `InkHashtagCommandInfo[]` as JSON. * - `POST /__pixi-vn-ink/hashtag-commands` – replaces the stored list with the JSON body * (`InkHashtagCommandInfo[]`). Called automatically by {@link setupInkHmrListener} on * startup and after each HMR update. * - `InkHashtagCommandInfo.validation` serializes the original validation rule: * - `{ type: "regexp", source, flags }` * - `{ type: "zod", schema }` (JSON Schema generated from Zod) * - `{ type: "literal", value }` * * @example * // VS Code extension reading the registered handlers * const res = await fetch("http://localhost:5173/__pixi-vn-ink/hashtag-commands"); * const commands: InkHashtagCommandInfo[] = await res.json(); */ declare const INK_DEV_API_HASHTAG_COMMANDS = "/__pixi-vn-ink/hashtag-commands"; /** * Dev-server endpoint that exposes and accepts the list of registered * {@link TextReplaces} handlers as {@link InkTextReplaceInfo} objects. * * - `GET /__pixi-vn-ink/text-replaces` – returns the stored `InkTextReplaceInfo[]` as JSON. * - `POST /__pixi-vn-ink/text-replaces` – replaces the stored list with the JSON body * (`InkTextReplaceInfo[]`). Called automatically by {@link setupInkHmrListener} on * startup and after each HMR update. * - `InkTextReplaceInfo.validation` serializes the original validation rule: * - `{ type: "regexp", source, flags }` * - `{ type: "zod", schema }` (JSON Schema generated from Zod) * - `{ type: "literal", value }` for string modes like `"all"` / `"characterId"` * * @example * // VS Code extension reading the registered text-replace handlers * const res = await fetch("http://localhost:5173/__pixi-vn-ink/text-replaces"); * const replaces: InkTextReplaceInfo[] = await res.json(); */ declare const INK_DEV_API_TEXT_REPLACES = "/__pixi-vn-ink/text-replaces"; /** * Serializable representation of a registered {@link TextReplaces} handler, * as exposed by the pixi-vn-ink Vite dev-server API. * * Instances of this type are returned by * `GET /__pixi-vn-ink/text-replaces` * and accepted by * `POST /__pixi-vn-ink/text-replaces`. * * @see https://pixi-vn.web.app/ink#vite-plugin */ interface InkTextReplaceInfo { /** * Unique name that identifies the handler. * Matches {@link ReplaceHandlerOptions.name}. */ name: string; /** * Human-readable description of what the handler does. * Matches {@link ReplaceHandlerOptions.description}. */ description?: string; /** * Serializable form of {@link ReplaceHandlerOptions.validation}. */ validation: InkValidationInfo; /** * When the handler runs relative to the translation step. * Matches {@link ReplaceHandlerOptions.type}. * @default "before-translation" */ type?: "before-translation" | "after-translation"; } /** * Options for {@link vitePluginInk}. */ interface VitePluginInkOptions { /** * Glob pattern specifying which `.ink` files to scan and load automatically. * * When provided, a virtual module `virtual:pixi-vn-ink` is generated and can be imported * anywhere in your app. It exports, as its default export, an array of strings (`string[]`) * containing the raw text of every matched `.ink` file. * * This eliminates the need to manually write a glob-import helper such as `getInkText`. * * The pattern follows the standard glob format used by * [Vite's `import.meta.glob`](https://vite.dev/guide/features#glob-import). * The plugin resolves it from Vite `root` and internally normalizes it to a root-absolute * pattern for the generated virtual module. * * @example "./ink/**\/*.ink" * @example "/src/stories/**\/*.ink" */ inkGlob?: string; /** * Output pattern for generated JSON files from matched `.ink` sources. * * When provided together with {@link VitePluginInkOptions.inkGlob}, each matched `.ink` file is * converted with `convertInkToJson` and written to the rendered destination. * * Placeholders: * - `[name]`: filename without extension * - `[ext]`: source extension without dot * - `[extname]`: source extension with dot * - `[file]`: source path relative to the `inkGlob` static base * - `[path]`: source directory relative to the `inkGlob` static base (with trailing slash) * - `[dir]`: source directory relative to Vite `root` (with trailing slash) * * Relative values are resolved from Vite `root`. * * @example "./public/ink-json/[path][name].json" * @example "/absolute/output/[dir][name].json" */ inkJsonOutputPattern?: string; /** * Custom path (including filename) for the manifest file generated alongside the exported JSON * files. * * When {@link VitePluginInkOptions.inkJsonOutputPattern} is set, a `manifest.json` file listing * all exported JSON URLs is written into the output base directory by default. Use this option * to override the manifest file location and/or its name. * * Relative values are resolved from Vite `root`. * * @example "./public/ink-json/index.json" * @example "./generated/manifest.json" */ inkJsonManifestPath?: string; } declare function vitePluginInk(options?: VitePluginInkOptions): Plugin; export { INK_DEV_API_HASHTAG_COMMANDS, INK_DEV_API_TEXT_REPLACES, type InkTextReplaceInfo, type VitePluginInkOptions, vitePluginInk as noHmrInkPlugin, vitePluginInk };