vite-plugin-shopify-theme-islands
Version:
Vite plugin for island architecture in Shopify themes
88 lines (87 loc) • 2.53 kB
TypeScript
import { type ClientDirective, type NormalizedReviveOptions } from "./contract.js";
export type GateResult = {
kind: "visible";
attribute: string;
rawValue: string;
rootMargin: string;
threshold: number;
} | {
kind: "media";
attribute: string;
rawValue: string;
query: string | null;
} | {
kind: "custom";
attribute: string;
value: string;
directive: ClientDirective;
} | {
kind: "idle";
attribute: string;
timeout: number;
invalid: boolean;
rawValue: string;
} | {
kind: "defer";
attribute: string;
delay: number;
invalid: boolean;
rawValue: string;
} | {
kind: "interaction";
attribute: string;
rawValue: string;
events: string[];
invalidTokens: string[];
emptyTokens: boolean;
usedDefaultEvents: boolean;
};
export type GateWarning = {
kind: "emptyMediaQuery";
attribute: string;
} | {
kind: "invalidIdleValue";
attribute: string;
rawValue: string;
defaultMs: number;
} | {
kind: "invalidDeferValue";
attribute: string;
rawValue: string;
defaultMs: number;
} | {
kind: "emptyInteractionTokens";
attribute: string;
} | {
kind: "invalidInteractionTokens";
attribute: string;
invalidTokens: string[];
usedDefaultEvents: boolean;
};
export type BuiltInGateResult = Exclude<GateResult, {
kind: "custom";
}>;
export type CustomGateResult = Extract<GateResult, {
kind: "custom";
}>;
export interface GatePlan {
/** All gates in built-in order followed by custom directives. */
gates: GateResult[];
/** Custom directive gates only, for custom directive execution. */
customGates: CustomGateResult[];
/** Canonical description used for same-Tag conflict detection. */
conflictSignature: string;
/** Raw-value description parts for pre-Activation debug logging. */
initialDiagnosticParts: string[];
/** Structured warning facts from invalid built-in Gate states. */
warnings: GateWarning[];
}
export interface DirectiveSpine {
readGates(el: HTMLElement): GateResult[];
planGates(el: HTMLElement): GatePlan;
describe(el: HTMLElement): string;
attributeNames: ReadonlySet<string>;
}
export declare function createDirectiveSpine(directives?: NormalizedReviveOptions["directives"]): DirectiveSpine;
export declare function extendDirectiveSpine(base: DirectiveSpine, customDirectives?: Map<string, ClientDirective>): DirectiveSpine;
export declare const DEFAULT_DIRECTIVE_SPINE: DirectiveSpine;