UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

175 lines (174 loc) 6.49 kB
/// <reference types="gulp" /> /// <reference types="node" /> import { FSWatcher } from "fs"; import { Gulp, TaskFunction } from "gulp"; import * as typescript from "typescript"; import { CleanOptions } from "../options/clean"; import { CopyOptions } from "../options/copy"; import { CompilerOptionsJson } from "../options/tsc"; import { OutModules } from "../options/typescript"; import { Project, ResolvedProject } from "../project"; import { AbsPosixPath, RelPosixPath } from "../types"; export declare type WatchTaskFunction = (TaskFunction & (() => FSWatcher)); /** * Generate a copy task (and the corresponding watch task) for the copy operations described by `copyOptions` * * @param gulp Gulp instance to use for utility methods. * @param srcDir Base directory for source resolution. * @param targetDir Base directory for target (build) resolution. * @param copyOptions Simple copy operations to apply for this copy task. * @return A tuple with the task function and corresponding watch task function. */ export declare function getCopy(gulp: Gulp, srcDir: string, targetDir: string, copyOptions: Iterable<CopyOptions>): [TaskFunction, TaskFunction]; export interface TargetBase { project: Project; /** * Name of the target. * All the tasks related to this target will be prefixed by this name. * It will also be used to resolve the default values for some paths, so it must avoid any special characters. */ name: string; /** * Relative path to the base directory for the sources, relative to `project.rootDir`. * The default value is `project.srcDir`. */ srcDir?: RelPosixPath; /** * Relative path to the build directory for this target, relative to `project.rootDir`. * The default value is `join(project.buildDir, target.name)`. */ buildDir?: RelPosixPath; /** * Glob patterns for the Typescript sources, relative to `target.srcDir`. * * It uses the `minimatch` patterns. Glob stars (wild stars, `**`) use `target.srcDir` as their base directory. * * Default: `[join(target.srcDir, "**", "*.ts")]` */ scripts?: Iterable<string>; /** * Directory containing custom typings, relative to `project.rootDir`. * Custom typings are typings that are not available on `@types`. * `null` means that you don't use custom typings. * The default value will be `join(target.srcDir, "custom-typings")` if it exists (sync test), else `null`. */ customTypingsDir?: RelPosixPath | null; /** * Overrides for the options of the Typescript compiler. */ tscOptions?: CompilerOptionsJson; /** * Output modules. * * - `Js`: Use the compiler options to emit `*.js` files. * - `Mjs`: Enforce `es2015` modules and emit `*.mjs` files. * - `Both`: Emit both `*.js` files using the compiler options and `*.mjs` using `es2015`. * * Default: `Js` */ outModules?: OutModules; /** * Path to the `tsconfig.json` file for this target, relative to `project.rootDir`. * Use `null` to not generate a `tsconfig.json` task. * * The default value is `join(target.srcDir, "tsconfig.json")`. */ tsconfigJson?: RelPosixPath | null; /** * Override default dependencies or provide optional dependencies. */ dependencies?: BaseDependencies; /** * A list of copy operations to perform during the build process. * * Default: `[]` */ copy?: CopyOptions[]; /** * Minimatch patterns to clean the files create during the `build` and `dist` tasks, relative to `project.root`. * * Default: * { * dirs: [ * path.join(project.buildDir, target.targetDir), * path.join(project.distDir, target.targetDir) * ] * } */ clean?: CleanOptions; } /** * Library with fully resolved paths and dependencies. */ export interface ResolvedTargetBase extends TargetBase { readonly project: ResolvedProject; readonly srcDir: AbsPosixPath; readonly buildDir: AbsPosixPath; readonly scripts: Iterable<string>; readonly customTypingsDir: AbsPosixPath | null; readonly tscOptions: CompilerOptionsJson; readonly outModules: OutModules; readonly tsconfigJson: AbsPosixPath | null; readonly dependencies: ResolvedBaseDependencies; readonly copy?: CopyOptions[]; readonly clean?: CleanOptions; } export interface BaseDependencies { readonly typescript?: typeof typescript; } /** * Fully resolved dependencies, either using defaults or the library provided by the user. */ export interface ResolvedBaseDependencies extends BaseDependencies { readonly typescript: typeof typescript; } /** * Resolve absolute paths and dependencies for the provided target. * * @param target Non-resolved target. * @return Resolved target. */ export declare function resolveTargetBase(target: TargetBase): ResolvedTargetBase; /** * Adds a display name to the supplied task function and returns the task function. * * @param name The display name to set. * @param task The task function to name. * @return The input task, with its `displayName` property set to `name`. */ export declare function nameTask<T extends TaskFunction>(name: string, task: T): T & { displayName: string; }; /** * Name a task function and register it to the provided gulp instance. */ export declare function addTask(gulp: Gulp, displayName: string, task: TaskFunction): TaskFunction; /** * Creates a Vinyl stream source from a Buffer. */ export declare function gulpBufferSrc(filename: string, data: Buffer): NodeJS.ReadableStream; /** * Base tasks available for every target. */ export interface BaseTasks { buildScripts: TaskFunction; buildCopy?: TaskFunction; build: TaskFunction; watch?: TaskFunction; clean?: TaskFunction; tsconfigJson?: TaskFunction; } /** * Generates gulp tasks available for every target (base tasks). * * @param gulp Gulp instance used to generate tasks manipulating files. * @param targetOptions Target configuration. */ export declare function generateBaseTasks(gulp: Gulp, targetOptions: TargetBase): BaseTasks; /** * Generates and registers gulp tasks available for every target (base tasks). * * @param gulp Gulp instance where the tasks will be registered. * @param targetOptions Target configuration. */ export declare function registerBaseTasks(gulp: Gulp, targetOptions: TargetBase): BaseTasks;