or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

file-operations.mdindex.mdtask-management.md
tile.json

file-operations.mddocs/

File Operations

Gulp's file system operations provide streaming interfaces for reading source files, writing processed outputs, and creating symbolic links. All operations work with vinyl files and support glob patterns for flexible file selection.

Capabilities

Source File Reading

Creates a readable stream from filesystem glob patterns for processing files.

/**
 * Creates a readable stream from filesystem glob patterns
 * @param globs - Glob pattern(s) to match files
 * @param options - Configuration options for reading files
 * @returns Readable stream of vinyl files
 */
function src(
  globs: string | string[],
  options?: SrcOptions
): NodeJS.ReadableStream;

interface SrcOptions {
  /** Whether to buffer file contents (default: true) */
  buffer?: boolean;
  /** Whether to read file contents (default: true) */
  read?: boolean;
  /** Only process files modified after this date */
  since?: Date;
  /** Remove BOM from UTF-8 encoded files (default: true) */
  removeBOM?: boolean;
  /** Enable sourcemap support */
  sourcemaps?: boolean | string;
  /** Allow empty globs (default: true) */
  allowEmpty?: boolean;
  /** Include dotfiles in matches (default: false) */
  dot?: boolean;
  /** Current working directory for glob resolution */
  cwd?: string;
  /** Base path for relative path calculation */
  base?: string;
}

Usage Examples:

const gulp = require('gulp');

// Basic file reading
gulp.src('src/**/*.js')
  .pipe(/* transform */)
  .pipe(gulp.dest('dist/'));

// Multiple glob patterns
gulp.src(['src/**/*.js', 'src/**/*.ts', '!src/**/*.test.js'])
  .pipe(/* transform */)
  .pipe(gulp.dest('dist/'));

// With options
gulp.src('src/**/*.scss', {
  base: 'src',
  since: gulp.lastRun('styles'),
  sourcemaps: true
})
  .pipe(/* transform */)
  .pipe(gulp.dest('dist/', { sourcemaps: '.' }));

// Stream without buffering (for large files)
gulp.src('data/**/*.csv', { buffer: false })
  .pipe(/* streaming transform */)
  .pipe(gulp.dest('processed/'));

Destination Writing

Creates a writable stream to filesystem destination for saving processed files.

/**
 * Creates a writable stream to filesystem destination
 * @param path - Destination path or function returning path
 * @param options - Configuration options for writing files
 * @returns Writable stream for vinyl files
 */
function dest(
  path: string | Function,
  options?: DestOptions
): NodeJS.WritableStream;

interface DestOptions {
  /** Current working directory for path resolution */
  cwd?: string;
  /** File mode (permissions) for created files */
  mode?: string | number;
  /** Directory mode (permissions) for created directories */
  dirMode?: string | number;
  /** Whether to overwrite existing files (default: true) */
  overwrite?: boolean;
  /** Whether to append to existing files (default: false) */
  append?: boolean;
  /** Enable sourcemap output */
  sourcemaps?: boolean | string;
}

Usage Examples:

const gulp = require('gulp');
const path = require('path');

// Basic destination
gulp.src('src/**/*.js')
  .pipe(/* transform */)
  .pipe(gulp.dest('dist/'));

// Dynamic destination path
gulp.src('src/**/*.scss')
  .pipe(/* transform to CSS */)
  .pipe(gulp.dest((file) => {
    return path.join('dist', path.dirname(file.relative));
  }));

// With options
gulp.src('src/**/*.ts')
  .pipe(/* compile */)
  .pipe(gulp.dest('dist/', {
    mode: 0o644,
    sourcemaps: './maps'
  }));

// Multiple destinations
const stream = gulp.src('src/**/*.js')
  .pipe(/* transform */);

stream.pipe(gulp.dest('dist/'));
stream.pipe(gulp.dest('backup/'));

Symbolic Link Creation

Creates symbolic links in the filesystem instead of copying files.

/**
 * Creates symbolic links in the filesystem
 * @param path - Destination path or function returning path
 * @param options - Configuration options for symlink creation
 * @returns Writable stream for creating symlinks
 */
function symlink(
  path: string | Function,
  options?: SymlinkOptions
): NodeJS.WritableStream;

interface SymlinkOptions {
  /** Current working directory for path resolution */
  cwd?: string;
  /** File mode (permissions) for created symlinks */
  mode?: string | number;
  /** Directory mode (permissions) for created directories */
  dirMode?: string | number;
  /** Whether to overwrite existing symlinks (default: true) */
  overwrite?: boolean;
  /** Use junctions on Windows (default: false) */
  useJunctions?: boolean;
}

Usage Examples:

const gulp = require('gulp');

// Basic symlink creation
gulp.src('src/assets/**/*')
  .pipe(gulp.symlink('dist/assets/'));

// With options
gulp.src('node_modules/library/dist/**/*')
  .pipe(gulp.symlink('public/vendor/', {
    useJunctions: true,
    overwrite: false
  }));

// Dynamic symlink paths
gulp.src('src/shared/**/*')
  .pipe(gulp.symlink((file) => {
    return `dist/${file.relative}`;
  }));

Glob Pattern Support

All file operations support powerful glob patterns:

  • *
    - Matches any number of characters within a single path segment
  • **
    - Matches any number of characters across multiple path segments
  • ?
    - Matches a single character
  • [abc]
    - Matches any character in the set
  • {a,b,c}
    - Matches any of the alternatives
  • !pattern
    - Excludes files matching the pattern (negation)

Examples:

// All JavaScript files recursively
gulp.src('src/**/*.js')

// Specific file types
gulp.src('src/**/*.{js,ts,jsx,tsx}')

// Exclude test files
gulp.src(['src/**/*.js', '!src/**/*.test.js'])

// Files in specific directories only
gulp.src('src/+(components|utils)/**/*.js')