UNPKG

workspaces-filter

Version:

A companion for filtering monorepo workspaces, by package name or package dir. Because all package manager's are weird. Useful for running scripts on a subset of workspaces. The primary reason is because Bun's "--filter" feature is buggy, but it's also us

78 lines 2.82 kB
//#region src/index.d.ts interface GraphValue { dir: string; name: string; version: string; license: string; exports: Record<string, string>; scripts: Record<string, string>; dependencies: Record<string, string>; } type Graph = Record<string, GraphValue>; /** * Filters workspace packages based on provided glob patterns and search patterns. * * @example * import { filter } from 'workspaces-filter'; * * // Filter workspaces matching 'pkg-*' pattern * const graph = await filter(['packages/*'], 'pkg-*'); * * // Filter multiple patterns * const graph = await filter(['packages/*'], ['pkg-1', 'pkg-2']); * * // Filter with package dirs * const graph = await filter(['packages/*'], ['packages/foo']); * * // Filter with custom working directory * const graph = await filter(['packages/*'], '*', '/path/to/project'); * * * @param {string|string[]} wsGlobs - Array of workspace glob patterns to search for package.json files. * @param {string|string[]} pattern - String or array of strings to filter workspaces by name or directory. * @param {string} [cwd] - Optional current working directory (defaults to `process.cwd()`). * * @throws {Error} When no workspace globs are provided. * @throws {Error} When no pattern is provided. * * @returns {Promise<Graph>} Resolving to a Graph object containing filtered workspace metadata. * @public */ declare function filter(wsGlobs: string[], pattern: string | string[], cwd?: string): Promise<Graph>; interface RunCommandOnOptions { cwd: string; isShell: boolean; packageManager: string; onTestCallback: (_err: any, _ok: any) => void | Promise<void>; } /** * Executes a shell command or a package script in the context of each package in the graph. * * @example * import { filter, runCommandOn } from 'workspaces-filter'; * * const graph = await filter(['packages/*'], ['@scope/*']); * console.log(graph); * * type RunCommandOnOptions = { * cwd?: string; * isShell?: boolean; * packageManager?: string; * onTestCallback?: (_err: any, _ok: any) => void | Promise<void>; * }; * * // Run a shell command in each package * await runCommandOn(['echo', 'Hello, World!'], graph, { isShell: true } as RunCommandOnOptions); * * // Run a package script in each package * await runCommandOn(['build'], graph); * * @param {string[]} args - Arguments to pass to the command. * @param {Graph} graph - Graph object containing package metadata. * @param {RunCommandOnOptions} options - Optional configuration for running the command. * @returns {Promise<Graph>} Resolving to the input graph object. * @public */ declare function runCommandOn(args: string[], graph: Graph, options?: Partial<RunCommandOnOptions>): Promise<Graph>; //#endregion export { Graph, GraphValue, RunCommandOnOptions, filter, runCommandOn };