UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

57 lines (47 loc) 1.4 kB
import {isString} from 'lodash' import {type Plugin, type PluginOptions} from './types' /** * @hidden * @beta */ export type PluginFactory<TOptions> = (options: TOptions) => PluginOptions function validatePlugin(pluginResult: PluginOptions) { // TODO: name is required etc const messages = [ 'projectId' in pluginResult && '`projectId` not allowed in plugin configuration', 'dataset' in pluginResult && '`dataset` not allowed in plugin configuration', ].filter(isString) if (messages.length) throw new Error( `Invalid plugin configuration:\n${messages.map((message) => `\t${message}`).join('\n')}`, ) } /** * @hidden * @beta */ export function definePlugin<TOptions = void>( arg: PluginFactory<TOptions> | PluginOptions, ): Plugin<TOptions> { if (typeof arg === 'function') { const pluginFactory = arg return (options: TOptions) => { // TODO: there's a possiblity of passing default arguments to users' // plugin factories or reading from default options in `TOptions` const result = pluginFactory(options) validatePlugin(result) return result } } validatePlugin(arg) return () => arg } /** * @deprecated Use `definePlugin` instead * * @hidden * @beta */ export function createPlugin<TOptions = void>( arg: PluginFactory<TOptions> | PluginOptions, ): Plugin<TOptions> { return definePlugin(arg) }