1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /**
- * Used as an optional.
- * `{ value: S } | { error: E }`.
- */
- export type SuccessOrFail<S, F> = {
- value: S;
- error?: undefined;
- } | {
- error: F;
- };
- export declare function isSuccess<S, F>(successOrFail: SuccessOrFail<S, F>): successOrFail is {
- value: S;
- };
- export declare function isFail<S, F>(successOrFail: SuccessOrFail<S, F>): successOrFail is {
- error: F;
- };
- /**
- * Used as an optional for results of a Vm call.
- * `{ value: VmHandle } | { error: VmHandle }`.
- */
- export type VmCallResult<VmHandle> = SuccessOrFail<VmHandle, VmHandle>;
- /**
- * A VmFunctionImplementation takes handles as arguments.
- * It should return a handle, or be void.
- *
- * To indicate an exception, a VMs can throw either a handle (transferred
- * directly) or any other Javascript value (only the poperties `name` and
- * `message` will be transferred). Or, the VmFunctionImplementation may return
- * a VmCallResult's `{ error: handle }` error variant.
- *
- * VmFunctionImplementation should not free its arguments or its return value.
- * It should not retain a reference to its return value or thrown error.
- */
- export type VmFunctionImplementation<VmHandle> = (this: VmHandle, ...args: VmHandle[]) => VmHandle | VmCallResult<VmHandle> | void;
- /**
- * A minimal interface to a Javascript execution environment.
- *
- * Higher-level tools should build over the LowLevelJavascriptVm interface to
- * share as much as possible between executors.
- *
- * From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/
- */
- export interface LowLevelJavascriptVm<VmHandle> {
- global: VmHandle;
- undefined: VmHandle;
- typeof(handle: VmHandle): string;
- getNumber(handle: VmHandle): number;
- getString(handle: VmHandle): string;
- newNumber(value: number): VmHandle;
- newString(value: string): VmHandle;
- newObject(prototype?: VmHandle): VmHandle;
- newFunction(name: string, value: VmFunctionImplementation<VmHandle>): VmHandle;
- getProp(handle: VmHandle, key: string | VmHandle): VmHandle;
- setProp(handle: VmHandle, key: string | VmHandle, value: VmHandle): void;
- defineProp(handle: VmHandle, key: string | VmHandle, descriptor: VmPropertyDescriptor<VmHandle>): void;
- callFunction(func: VmHandle, thisVal: VmHandle, ...args: VmHandle[]): VmCallResult<VmHandle>;
- evalCode(code: string, filename?: string): VmCallResult<VmHandle>;
- }
- /**
- * From https://www.figma.com/blog/how-we-built-the-figma-plugin-system/
- */
- export interface VmPropertyDescriptor<VmHandle> {
- value?: VmHandle;
- configurable?: boolean;
- enumerable?: boolean;
- get?: (this: VmHandle) => VmHandle;
- set?: (this: VmHandle, value: VmHandle) => void;
- }
|