Turbocache

This section contains the API reference the parameters passed to each actions
export interface Action {
  title: string;
  description?: string;
  icon?: string;
  execute: (io: InputOutput) => Promise<void>;
}export interface Action {
  title: string;
  description?: string;
  icon?: string;
  execute: (io: InputOutput) => Promise<void>;
}Type: InputOutput
io is a fluid API for interacting with the client/frontend/user.
const execute = (io: InputOutput) => {
  // ...
};const execute = (io: InputOutput) => {
  // ...
};Type: text(opts: TextOptions): FormPromise<string>;
Send a text input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const email = await io.input.text({
    label: 'Enter an email',
    helperText: 'This must be unique.',
    placeholder: 'michael@dundermifflin.com',
    type: 'text',
    validation: (email) => {
      if (!email.includes('@')) {
        return 'Must be a valid email.';
      }
      return true;
    },
  });
};const execute = (io: InputOutput) => {
  const email = await io.input.text({
    label: 'Enter an email',
    helperText: 'This must be unique.',
    placeholder: 'michael@dundermifflin.com',
    type: 'text',
    validation: (email) => {
      if (!email.includes('@')) {
        return 'Must be a valid email.';
      }
      return true;
    },
  });
};interface TextOptions {
  label: string;
  helperText?: string;
  placeholder?: string;
  defaultValue?: string;
  optional?: boolean;
  type?: 'text' | 'password' | 'email';
  validation?: Validator<string>;
}interface TextOptions {
  label: string;
  helperText?: string;
  placeholder?: string;
  defaultValue?: string;
  optional?: boolean;
  type?: 'text' | 'password' | 'email';
  validation?: Validator<string>;
}Type: number(opts: NumberOptions): FormPromise<number>;
Send a number input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const age = await io.input.text({
    label: 'Enter your age',
  });
};const execute = (io: InputOutput) => {
  const age = await io.input.text({
    label: 'Enter your age',
  });
};interface NumberOptions {
  label: string;
  helperText?: string;
  placeholder?: string;
  defaultValue?: number;
  validation?: Validator<number>;
}interface NumberOptions {
  label: string;
  helperText?: string;
  placeholder?: string;
  defaultValue?: number;
  validation?: Validator<number>;
}Type: boolean(opts: BooleanOptions): FormPromise<boolean>;
Send a boolean input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const shouldSendEmail = await io.input.boolean({
    label: 'Should the user receive an email notification of the change?',
  });
};const execute = (io: InputOutput) => {
  const shouldSendEmail = await io.input.boolean({
    label: 'Should the user receive an email notification of the change?',
  });
};interface BooleanOptions {
  label: string;
  helperText?: string;
  defaultValue?: boolean;
}interface BooleanOptions {
  label: string;
  helperText?: string;
  defaultValue?: boolean;
}Type: color(opts: ColorOptions): FormPromise<string>;
Send a color input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const color = await io.input.color({
    label: 'Select a color',
  });
};const execute = (io: InputOutput) => {
  const color = await io.input.color({
    label: 'Select a color',
  });
};interface ColorOptions {
  label: string;
  helperText?: string;
  defaultValue?: string;
}interface ColorOptions {
  label: string;
  helperText?: string;
  defaultValue?: string;
}Type: imageURL(opts: ImageOptions): FormPromise<string>;
Send an image URL input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const imageURL = await io.input.imageURL({
    label: 'Enter an image URL',
  });
};const execute = (io: InputOutput) => {
  const imageURL = await io.input.imageURL({
    label: 'Enter an image URL',
  });
};interface ImageOptions {
  label: string;
  helperText?: string;
  defaultValue?: string;
}interface ImageOptions {
  label: string;
  helperText?: string;
  defaultValue?: string;
}Type: radio<T>(opts: SelectOptions<T>): FormPromise<T>;
Send a select input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const color = await io.select.radio({
    label: 'Select a color',
    data: ['red', 'green', 'blue'],
    getLabel: (color) => color.toUpperCase(),
    getValue: (color) => color,
  });
  const format = await io.select.dropdown({
    label: 'Select a format',
    data: ['json', 'yaml', 'toml'],
    getLabel: (format) => format.toUpperCase(),
    getValue: (format) => format,
  });
};const execute = (io: InputOutput) => {
  const color = await io.select.radio({
    label: 'Select a color',
    data: ['red', 'green', 'blue'],
    getLabel: (color) => color.toUpperCase(),
    getValue: (color) => color,
  });
  const format = await io.select.dropdown({
    label: 'Select a format',
    data: ['json', 'yaml', 'toml'],
    getLabel: (format) => format.toUpperCase(),
    getValue: (format) => format,
  });
};interface SelectOptions<T> {
  label: string;
  helperText?: string;
  initialSelection?: string;
  validation?: Validator<T>;
  data: T[];
  getLabel: (item: T) => string;
  getValue: (item: T) => string;
}interface SelectOptions<T> {
  label: string;
  helperText?: string;
  initialSelection?: string;
  validation?: Validator<T>;
  data: T[];
  getLabel: (item: T) => string;
  getValue: (item: T) => string;
}Type: table<T>(opts: TableOptions<T>): FormPromise<T>;
Send a table input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const team = await io.input.table({
    label: 'Select a team',
    data: ['HR', 'Sales', 'Marketing'],
    getValue: (team) => team,
    getColumns: (team) => [team],
  });
};const execute = (io: InputOutput) => {
  const team = await io.input.table({
    label: 'Select a team',
    data: ['HR', 'Sales', 'Marketing'],
    getValue: (team) => team,
    getColumns: (team) => [team],
  });
};interface TableOptions<T> {
  label: string;
  helperText?: string;
  validation?: Validator<T>;
  data: T[];
  headers: string[];
  initialSelection?: string;
  getValue: (item: T) => string;
  getColumns: (item: T) => TableCellValue[];
}interface TableOptions<T> {
  label: string;
  helperText?: string;
  validation?: Validator<T>;
  data: T[];
  headers: string[];
  initialSelection?: string;
  getValue: (item: T) => string;
  getColumns: (item: T) => TableCellValue[];
}Type: checkbox<T>(opts: MultiSelectOptions<T>): FormPromise<T[]>;
Send a multi-select input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const colors = await io.multiSelect.checkbox({
    label: 'Select colors',
    data: ['red', 'green', 'blue'],
    getLabel: (color) => color.toUpperCase(),
    getValue: (color) => color,
  });
  const format = await io.multiSelect.dropdown({
    label: 'Select a format',
    data: ['json', 'yaml', 'toml'],
    getLabel: (format) => format.toUpperCase(),
    getValue: (format) => format,
  });
};const execute = (io: InputOutput) => {
  const colors = await io.multiSelect.checkbox({
    label: 'Select colors',
    data: ['red', 'green', 'blue'],
    getLabel: (color) => color.toUpperCase(),
    getValue: (color) => color,
  });
  const format = await io.multiSelect.dropdown({
    label: 'Select a format',
    data: ['json', 'yaml', 'toml'],
    getLabel: (format) => format.toUpperCase(),
    getValue: (format) => format,
  });
};interface MultiSelectOptions<T> {
  label: string;
  helperText?: string;
  initialSelection?: string[];
  validation?: Validator<T[]>;
  data: T[];
  getLabel: (item: T) => string;
  getValue: (item: T) => string;
}interface MultiSelectOptions<T> {
  label: string;
  helperText?: string;
  initialSelection?: string[];
  validation?: Validator<T[]>;
  data: T[];
  getLabel: (item: T) => string;
  getValue: (item: T) => string;
}Type: table<T>(opts: MultiTableOptions<T>): FormPromise<T[]>
Send a multi-select table input to the client, and wait for a response.
const execute = (io: InputOutput) => {
  const teams = await io.multiSelect.table({
    label: 'Select teams',
    data: ['HR', 'Sales', 'Marketing'],
    getValue: (team) => team,
    getColumns: (team) => [team],
  });
};const execute = (io: InputOutput) => {
  const teams = await io.multiSelect.table({
    label: 'Select teams',
    data: ['HR', 'Sales', 'Marketing'],
    getValue: (team) => team,
    getColumns: (team) => [team],
  });
};interface MultiTableOptions<T> {
  label: string;
  helperText?: string;
  validation?: Validator<T[]>;
  data: T[];
  headers: string[];
  initialSelection?: string[];
  getValue: (item: T) => string;
  getColumns: (item: T) => TableCellValue[];
}interface MultiTableOptions<T> {
  label: string;
  helperText?: string;
  validation?: Validator<T[]>;
  data: T[];
  headers: string[];
  initialSelection?: string[];
  getValue: (item: T) => string;
  getColumns: (item: T) => TableCellValue[];
}Type: (opts: { dangerouslySetInnerHTML: string; }): void
Send an HTML message to the client.
const execute = (io: InputOutput) => {
  io.message.html({
    dangerouslySetInnerHTML: '<h1>Hello World</h1>',
  });
};const execute = (io: InputOutput) => {
  io.message.html({
    dangerouslySetInnerHTML: '<h1>Hello World</h1>',
  });
};Type: (opts: { message: string; message: string }): void
Send a message to the client.
const execute = (io: InputOutput) => {
  io.message.info({
    title: 'Hello World',
    message: 'This is a description',
  });
};const execute = (io: InputOutput) => {
  io.message.info({
    title: 'Hello World',
    message: 'This is a description',
  });
};Type: table(opts: { title: string; headers: string[]; rows: TableCellValue[][] }): FormPromise<void>;
Send a read-only table to the client.
const execute = (io: InputOutput) => {
  io.message.table({
    title: 'Users',
    headers: ['Name', 'Age'],
    rows: [
      ['John', 30],
      ['Jane', 25],
    ],
  });
};const execute = (io: InputOutput) => {
  io.message.table({
    title: 'Users',
    headers: ['Name', 'Age'],
    rows: [
      ['John', 30],
      ['Jane', 25],
    ],
  });
};Create a composite form with multiple inputs.
const execute = (io: InputOutput) => {
  const { name, email } = await io.form({
    name: io.input.text({
      label: 'Name',
      helperText: 'Enter the name of the user',
    }),
    email: io.input.text({
      label: 'Email',
      helperText: 'Enter the email of the user',
      type: 'email',
    }),
  });const execute = (io: InputOutput) => {
  const { name, email } = await io.form({
    name: io.input.text({
      label: 'Name',
      helperText: 'Enter the name of the user',
    }),
    email: io.input.text({
      label: 'Email',
      helperText: 'Enter the email of the user',
      type: 'email',
    }),
  });Create a horizontal or vertical stack of inputs.
const execute = (io: InputOutput) => {
  const [, [newUser]] = await io.hstack(
    io.message.table({
      label: 'Existing Users',
      headers: ['Name', 'Email'],
      rows: users,
    }),
    io.vstack(
      io.form({
        name: io.input.text({
          label: 'Name',
          helperText: 'Enter the name of the user',
        }),
        email: io.input.text({
          label: 'Email',
          helperText: 'Enter the email of the user',
          type: 'email',
        }),
      }),
      io.message.warning({
        description: 'Some message about creating users.',
      })
    )
  );
};const execute = (io: InputOutput) => {
  const [, [newUser]] = await io.hstack(
    io.message.table({
      label: 'Existing Users',
      headers: ['Name', 'Email'],
      rows: users,
    }),
    io.vstack(
      io.form({
        name: io.input.text({
          label: 'Name',
          helperText: 'Enter the name of the user',
        }),
        email: io.input.text({
          label: 'Email',
          helperText: 'Enter the email of the user',
          type: 'email',
        }),
      }),
      io.message.warning({
        description: 'Some message about creating users.',
      })
    )
  );
};