@arnosaine/is
Version:
Feature Flags, Roles and Permissions-based rendering, A/B Testing, Experimental Features, and more in React.
43 lines (42 loc) • 3.12 kB
TypeScript
import type * as RemixNode from "@remix-run/node";
import type * as RemixReact from "@remix-run/react";
import { ReactNode } from "react";
import type * as ReactRouter from "react-router";
import { Boolean, Flatten, HasUnknownKeys, Merge, Never, NonBoolean, Unflatten, Writeable } from "./utils.js";
export * from "./utils.js";
type HandleUnknownKeys<Conditions> = HasUnknownKeys<Conditions> extends true ? any : Conditions;
export interface ElementProps {
children?: ReactNode;
fallback?: ReactNode;
}
export type Condition<Value> = Flatten<Boolean<Value> | NonBoolean<Writeable<Value>>> | NonBoolean<Flatten<Value>>[] | Unflatten<NonBoolean<Writeable<Value>>>;
export type Conditions<Values> = Partial<{
[P in keyof Values]: Readonly<Condition<Values[P]>>;
}> & Never<ElementProps>;
export type Values<Value = unknown> = {
[key: string]: Value;
} & Never<ElementProps>;
export type Loader<Values> = (args: ExtendedDataFunctionArgs) => Values | Promise<Values>;
export type DataFunctionArgs = ReactRouter.ActionFunctionArgs | ReactRouter.LoaderFunctionArgs | ReactRouter.ClientActionFunctionArgs | ReactRouter.ClientLoaderFunctionArgs | RemixNode.ActionFunctionArgs | RemixNode.LoaderFunctionArgs | RemixReact.ClientActionFunctionArgs | RemixReact.ClientLoaderFunctionArgs;
export type ExtendedDataFunctionArgs = DataFunctionArgs & {
serverAction: any;
serverLoader: any;
context: any;
};
export interface Options {
method?: "every" | "some";
}
export interface LoaderOptions extends Options {
routeId?: string;
prop?: string;
}
export declare function __create<V extends Values, C extends Conditions<V>>(useValues: () => V, defaultConditions?: C, options?: Options): {
Is: ({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<C>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null;
useIs: (conditions?: C) => boolean;
is: import("lodash").CurriedFunction2<V, C | undefined, boolean>;
};
export declare function create<V extends Values>(useValues: () => V, defaultConditions?: Conditions<V>, options?: Options): readonly [({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<Conditions<V>>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null, (conditions?: Conditions<V> | undefined) => boolean];
export declare function createFromLoader<V extends Values>(loadValues: Loader<V>, defaultConditions?: Conditions<V>, options?: LoaderOptions): readonly [({ children, fallback, ...conditions }: Partial<Merge<ElementProps, HandleUnknownKeys<Conditions<V>>>>) => string | number | boolean | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null, (conditions?: Conditions<V> | undefined) => boolean, (args: DataFunctionArgs) => Promise<import("lodash").CurriedFunction1<Conditions<V> | undefined, boolean> & {
[x: string]: V;
__values: V;
}>];