@astro-utils/forms
Version:
Server component for Astro (call server functions from client side with validation and state management)
36 lines (35 loc) • 1.26 kB
TypeScript
import type { AstroGlobal } from 'astro';
import AwaitLockDefault from 'await-lock';
import FormsReact from './form-tools/forms-react.js';
export declare function createLock(): InstanceType<typeof AwaitLockDefault['default']>;
export type ExtendedRequest = AstroGlobal['request'] & {
formDataLock?: ReturnType<typeof createLock>;
validateFormLock?: ReturnType<typeof createLock>;
formData: (Request['formData'] | (() => FormData | Promise<FormData>)) & {
requestFormValid?: boolean;
};
};
export interface AstroLinkHTTP {
request: ExtendedRequest;
cookies: AstroGlobal['cookies'];
locals: AstroGlobal['locals'];
}
declare global {
export namespace App {
interface Locals {
forms: FormsReact;
webFormOff?: boolean;
session: {
[key: string]: any;
};
}
}
}
export type ModifyDeep<A, B extends DeepPartialAny<A>> = {
[K in keyof A | keyof B]: K extends keyof A ? K extends keyof B ? A[K] extends AnyObject ? B[K] extends AnyObject ? ModifyDeep<A[K], B[K]> : B[K] : B[K] : A[K] : B[K];
};
type AnyObject = Record<string, any>;
type DeepPartialAny<T> = {
[P in keyof T]?: T[P] extends AnyObject ? DeepPartialAny<T[P]> : any;
};
export {};