mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-24 10:12:44 +00:00
* fix(plugins): keep React out of the server plugin host * fix(plugins): align SDK guidance and tests with runtime boundaries * fix(plugin): loosen the react peer to ~19.1.0 The plugin SDK pins its react peer to exactly 19.1.0, and that pin is what a downstream `npm i -g @getpaseo/cli` resolves against. So every user ends up with react 19.1.0 in their global node_modules, where corporate dependency scanners flag it: the CVE-2025-55182 advisory range covers 19.1.0 even though the vulnerability itself lives in react-server-dom-webpack/-parcel/-turbopack, none of which the CLI installs. The user is then left hand-patching node_modules or uninstalling Paseo. Widening the peer to ~19.1.0 lets a downstream install pick the latest 19.1.x patch (19.1.9 today) while this repo stays on 19.1.0, which the root override still pins. Keeping the repo itself on 19.1.0 is deliberate. react-native 0.81.5 embeds a 19.1.0 Paper renderer that hard-throws "Incompatible React versions" on any exact mismatch, and it is reachable from Fabric builds too: RendererImplementation.js requires the Paper shim unconditionally in findNodeHandle, unstable_batchedUpdates, sendAccessibilityEvent and three other entry points, and react-native-gesture-handler re-exports findNodeHandle. Bumping the app's react is therefore not safe until react-native moves. The published CLI tree contains no react-native, so downstream installs are not subject to that constraint. Supersedes the earlier 19.1.5/19.1.9 version-bump approach on this branch, which would have broken the mobile app. * Enforce example import ownership including client types * Update Nix dependency hash for plugin peer metadata * Group plugin APIs under client and server entry trees * Resolve plugin type dependencies through declarations * Validate declarations for implicit plugin type imports * Preserve optional imports and validate declaration references * Refresh Nix hash for plugin declaration resolver * Canonicalize plugin paths consistently on Windows * Normalize plugin ownership paths across resolver boundaries --------- Co-authored-by: liujin0506 <liujin0506@qq.com> Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import type {
|
|
ComponentType,
|
|
FunctionComponent,
|
|
ReactNode,
|
|
ForwardRefExoticComponent,
|
|
RefAttributes,
|
|
ReactElement,
|
|
Ref,
|
|
} from "react";
|
|
import type {
|
|
StyleProp,
|
|
ViewStyle,
|
|
ScrollView as NativeScrollView,
|
|
ScrollViewProps,
|
|
FlatList as NativeFlatList,
|
|
FlatListProps,
|
|
TextInput as NativeTextInput,
|
|
TextInputProps,
|
|
} from "react-native";
|
|
import type { PluginIconProps } from "./contracts.js";
|
|
|
|
export interface ModalProps {
|
|
title: string;
|
|
icon?: ReactNode;
|
|
open: boolean;
|
|
onOpenChange(open: boolean): void;
|
|
children: ReactNode;
|
|
}
|
|
|
|
export interface ModalContentProps {
|
|
children: ReactNode;
|
|
/** Paint the full body below the header. */
|
|
style?: StyleProp<ViewStyle>;
|
|
/** Overrides the default 24px padding and 16px gap. Safe-area clearance stays host-owned. */
|
|
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
/** Default true. Set false for a bounded body with your own ScrollView or FlatList. */
|
|
scrollable?: boolean;
|
|
}
|
|
|
|
export interface ModalComponent extends FunctionComponent<ModalProps> {
|
|
Content: ComponentType<ModalContentProps>;
|
|
}
|
|
|
|
export type ToastVariant = "default" | "info" | "success" | "warning" | "error";
|
|
|
|
export interface ToastOptions {
|
|
variant?: ToastVariant;
|
|
durationMs?: number;
|
|
}
|
|
|
|
export interface ToastApi {
|
|
show(message: string, options?: ToastOptions): void;
|
|
error(message: string): void;
|
|
}
|
|
|
|
export declare const Icon: ComponentType<PluginIconProps>;
|
|
export declare const Modal: ModalComponent;
|
|
export declare function useToast(): ToastApi;
|
|
export declare function useRevealedText(text: string, phase: "streaming" | "complete"): string;
|
|
|
|
export type { PluginIconProps } from "./contracts.js";
|
|
|
|
/** React Native scrolling with the host's sheet gestures when rendered inside a sheet. */
|
|
export declare const ScrollView: ForwardRefExoticComponent<
|
|
ScrollViewProps & RefAttributes<NativeScrollView>
|
|
>;
|
|
export declare function FlatList<Item>(
|
|
props: FlatListProps<Item> & { ref?: Ref<NativeFlatList<Item>> },
|
|
): ReactElement;
|
|
/** Copies text to this client's clipboard. Rejects when copying is unavailable or denied. */
|
|
export declare function copyText(text: string): Promise<void>;
|
|
|
|
/** Native input focus integrated with modal keyboard positioning. */
|
|
export declare const TextInput: ForwardRefExoticComponent<
|
|
TextInputProps & RefAttributes<NativeTextInput>
|
|
>;
|