UNPKG

figma-export-assets

Version:

Script to generate and download assets from a Figma file

231 lines (230 loc) 6.57 kB
/** * @typedef {Object} Config * @property {string} figmaPersonalToken - Personal access token for the Figma API. * @property {string} fileId - The ID of the Figma file to export assets from. * @property {string} page - The name of the page to export assets from. * @property {string} assetsPath - The path to save the exported assets. * @property {string} [format='svg'] - The format of the exported assets. * @property {number} [scale=1] - The scale at which to export assets. * @property {boolean} [exportVariants=true] - Whether to export variants of the assets. * @property {string} [frame] - The name of the frame to export assets from. * @property {number} [batchSize=100] - The number of assets to export in each batch. * @property {number} [concurrencyLimit=5] - The maximum number of concurrent requests. * @property {boolean} [skipExistingFiles=false] - Whether to skip existing files. */ /** * @typedef {Object} Asset * @property {string} id - The ID of the asset. * @property {string} name - The name of the asset. * @property {string} [url] - The URL of the asset image. * @property {string} [assetsPath] - The path to save the asset. */ export default class FigmaExporter { /** * Creates a FigmaExporter. * @param {Config} config * * @property {Array<Asset>} assets - The array of assets to be exported. * * @example * const exporter = new FigmaExporter({ * * // Optional * baseURL: 'https://api.figma.com/v1', * format: 'svg', * scale: 1, * exportVariants: true, * * // Required * figmaPersonalToken: 'your-personal-token', * fileId: 'your-file-id', * page: 'your-page-name', * assetsPath: 'path/to/assets', * * // Optional * frame: 'your-frame-name' * }); */ constructor(config: Config); config: { /** * - Personal access token for the Figma API. */ figmaPersonalToken: string; /** * - The ID of the Figma file to export assets from. */ fileId: string; /** * - The name of the page to export assets from. */ page: string; /** * - The path to save the exported assets. */ assetsPath: string; /** * - The format of the exported assets. */ format: string; /** * - The scale at which to export assets. */ scale: number; /** * - Whether to export variants of the assets. */ exportVariants: boolean; /** * - The name of the frame to export assets from. */ frame?: string; /** * - The number of assets to export in each batch. */ batchSize: number; /** * - The maximum number of concurrent requests. */ concurrencyLimit: number; /** * - Whether to skip existing files. */ skipExistingFiles?: boolean; baseURL: string; }; assets: any[]; /** * Makes a `GET` request to the Figma API * * @private * @param {string} endpoint - API endpoint * @returns {Promise<any>} Parsed JSON response */ private figmaGet; /** * Sets the assets by fetching them from the Figma API. * * @returns {Promise<FigmaExporter>} The FigmaExporter instance. */ setAssets(): Promise<FigmaExporter>; processAssets(config?: { /** * - Personal access token for the Figma API. */ figmaPersonalToken: string; /** * - The ID of the Figma file to export assets from. */ fileId: string; /** * - The name of the page to export assets from. */ page: string; /** * - The path to save the exported assets. */ assetsPath: string; /** * - The format of the exported assets. */ format: string; /** * - The scale at which to export assets. */ scale: number; /** * - Whether to export variants of the assets. */ exportVariants: boolean; /** * - The name of the frame to export assets from. */ frame?: string; /** * - The number of assets to export in each batch. */ batchSize: number; /** * - The maximum number of concurrent requests. */ concurrencyLimit: number; /** * - Whether to skip existing files. */ skipExistingFiles?: boolean; baseURL: string; }, assets?: any[]): Promise<void>; /** * Creates assets by asking the Figma API for the assets and saving them to the specified path. * * @param {function} [assetTransformFn] - Callback function to transform the asset names. * @param {Object} [configOverrides] - Overrides for the default configuration. * @returns {Promise<FigmaExporter>} The FigmaExporter instance. */ createAssets(assetTransformFn?: Function, configOverrides?: any): Promise<FigmaExporter>; } export type Config = { /** * - Personal access token for the Figma API. */ figmaPersonalToken: string; /** * - The ID of the Figma file to export assets from. */ fileId: string; /** * - The name of the page to export assets from. */ page: string; /** * - The path to save the exported assets. */ assetsPath: string; /** * - The format of the exported assets. */ format?: string; /** * - The scale at which to export assets. */ scale?: number; /** * - Whether to export variants of the assets. */ exportVariants?: boolean; /** * - The name of the frame to export assets from. */ frame?: string; /** * - The number of assets to export in each batch. */ batchSize?: number; /** * - The maximum number of concurrent requests. */ concurrencyLimit?: number; /** * - Whether to skip existing files. */ skipExistingFiles?: boolean; }; export type Asset = { /** * - The ID of the asset. */ id: string; /** * - The name of the asset. */ name: string; /** * - The URL of the asset image. */ url?: string; /** * - The path to save the asset. */ assetsPath?: string; };