packages/@jsii/kernel/src/api.ts (216 lines of code) (raw):

import { JsiiErrorType } from './kernel'; export const TOKEN_REF = '$jsii.byref'; export const TOKEN_INTERFACES = '$jsii.interfaces'; export const TOKEN_DATE = '$jsii.date'; export const TOKEN_ENUM = '$jsii.enum'; export const TOKEN_MAP = '$jsii.map'; export const TOKEN_STRUCT = '$jsii.struct'; export interface ObjRef { readonly [TOKEN_REF]: string; [TOKEN_INTERFACES]?: readonly string[]; } export function isObjRef(value: any): value is ObjRef { return typeof value === 'object' && value !== null && TOKEN_REF in value; } export interface WireDate { readonly [TOKEN_DATE]: string; } export function isWireDate(value: any): value is WireDate { return typeof value === 'object' && value !== null && TOKEN_DATE in value; } export interface WireEnum { readonly [TOKEN_ENUM]: string; } export function isWireEnum(value: any): value is WireEnum { return typeof value === 'object' && value !== null && TOKEN_ENUM in value; } export interface WireMap { readonly [TOKEN_MAP]: { readonly [key: string]: any }; } export function isWireMap(value: any): value is WireMap { return typeof value === 'object' && value !== null && TOKEN_MAP in value; } export interface WireStruct { readonly [TOKEN_STRUCT]: { readonly fqn: string; readonly data: { [key: string]: any }; }; } export function isWireStruct(value: any): value is WireStruct { return typeof value === 'object' && value !== null && TOKEN_STRUCT in value; } export type Override = MethodOverride | PropertyOverride; export interface MethodOverride { readonly method: string; readonly cookie?: string; } export function isMethodOverride(value: Override): value is MethodOverride { return (value as any).method != null; // Python passes "null" } export interface PropertyOverride { readonly property: string; readonly cookie?: string; } export function isPropertyOverride(value: Override): value is PropertyOverride { return (value as any).property != null; // Python passes "null" } export interface Callback { readonly cbid: string; readonly cookie: string | undefined; readonly invoke?: InvokeRequest; readonly get?: GetRequest; readonly set?: SetRequest; } export interface HelloResponse { readonly hello: string; } export interface LoadRequest { /** The name of the assembly */ readonly name: string; /** Assembly version */ readonly version: string; /** The tarball of the package */ readonly tarball: string; } export interface LoadResponse { readonly assembly: string; readonly types: number; } export interface GetScriptCommandRequest { readonly assembly: string; readonly script: string; readonly args?: string[]; } export interface GetScriptCommandResponse { command: string; args: string[]; env: Record<string, string>; } export interface InvokeScriptRequest { readonly assembly: string; readonly script: string; readonly args?: string[]; } export interface InvokeScriptResponse { readonly status: number | null; readonly stdout: string; readonly stderr: string; readonly signal: string | null; } export interface CreateRequest { /** * The FQN of the class of which an instance is requested (or "Object") */ readonly fqn: string; /** * The FQNs of interfaces the instance implements, if any. Declaring * interfaces that the class denoted by `fqn` implements is not necessary. * This means that members of interfaces found in this property should * declare members that are found in the `overrides` property. */ readonly interfaces?: string[]; /** * Arguments to pass to the constructor of `fqn`. ("Object" accepts none) */ readonly args?: any[]; /** * Declarations of method overrides that should trigger callbacks */ readonly overrides?: Override[]; } export type CreateResponse = ObjRef; export interface DelRequest { readonly objref: ObjRef; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface DelResponse {} export interface GetRequest { readonly objref: ObjRef; readonly property: string; } export interface StaticGetRequest { readonly fqn: string; readonly property: string; } export interface GetResponse { readonly value: any; } export interface StaticSetRequest { readonly fqn: string; readonly property: string; readonly value: any; } export interface SetRequest { readonly objref: ObjRef; readonly property: string; readonly value: any; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface SetResponse {} export interface StaticInvokeRequest { readonly fqn: string; readonly method: string; readonly args?: any[]; } export interface InvokeRequest { readonly objref: ObjRef; readonly method: string; readonly args?: any[]; } export interface InvokeResponse { readonly result: any; } export interface BeginRequest { readonly objref: ObjRef; readonly method: string; readonly args?: any[]; } export interface BeginResponse { readonly promiseid: string; } export interface EndRequest { readonly promiseid: string; } export interface EndResponse { readonly result: any; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface CallbacksRequest {} export interface CallbacksResponse { readonly callbacks: Callback[]; } export interface CompleteRequest { readonly cbid: string; readonly err?: string; readonly name?: string; readonly result?: any; } export interface CompleteResponse { readonly cbid: string; } export interface NamingRequest { readonly assembly: string; } export interface NamingResponse { readonly naming: { readonly [language: string]: { readonly [key: string]: any } | undefined; }; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface StatsRequest {} export interface StatsResponse { readonly objectCount: number; } export type KernelRequest = | LoadRequest | CreateRequest | DelRequest | GetRequest | SetRequest | InvokeRequest | BeginRequest | EndRequest | CallbacksRequest | CompleteRequest | NamingRequest | StatsRequest; export type KernelResponse = | HelloResponse | LoadResponse | CreateResponse | DelResponse | GetResponse | SetResponse | InvokeResponse | BeginResponse | EndResponse | CallbacksResponse | CompleteResponse | NamingResponse | StatsResponse; export interface OkayResponse { readonly ok: any; } export interface ErrorResponse { readonly error: string; readonly stack?: string; readonly name?: JsiiErrorType; }