CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-now--build-utils

Build utilities for Now (Vercel) serverless platform runtime development

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

filesystem.mddocs/

File System Operations

Core file handling utilities for managing different types of file references and performing filesystem operations during builds.

Capabilities

Download Function

Downloads and processes files from various sources to the local filesystem, handling symbolic links and development scenarios.

/**
 * Downloads files to the local filesystem with support for incremental builds
 * @param files - Map of file paths to File objects
 * @param basePath - Base directory to download files to
 * @param meta - Optional metadata for build context
 * @returns Promise resolving to downloaded files as FileFsRef objects
 */
function download(files: Files, basePath: string, meta?: Meta): Promise<DownloadedFiles>;

interface DownloadedFiles {
  [filePath: string]: FileFsRef;
}

Usage Examples:

import { download, FileFsRef } from "@now/build-utils";

// Download files for build
const files = {
  "index.js": new FileFsRef({ fsPath: "/src/index.js" }),
  "package.json": new FileFsRef({ fsPath: "/src/package.json" })
};

const downloadedFiles = await download(files, "/tmp/build");
// Files are now available in /tmp/build/

Glob Pattern Matching

Performs glob pattern matching to find files matching specific patterns.

/**
 * Find files matching glob patterns
 * @param pattern - Glob pattern to match files against
 * @param options - Optional glob configuration
 * @returns Promise resolving to array of matching file paths
 */
function glob(pattern: string, options?: GlobOptions): Promise<string[]>;

interface GlobOptions {
  cwd?: string;
  ignore?: string | string[];
  dot?: boolean;
  matchBase?: boolean;
  nodir?: boolean;
}

Usage Examples:

import { glob } from "@now/build-utils";

// Find all JavaScript files
const jsFiles = await glob("**/*.js", { cwd: "/project" });

// Find TypeScript files, ignoring node_modules
const tsFiles = await glob("src/**/*.ts", {
  cwd: "/project",
  ignore: ["node_modules/**", "dist/**"]
});

File Renaming

Renames files in a Files collection using a transformation function.

/**
 * Rename files in a Files collection
 * @param files - Files collection to rename
 * @param renameFn - Function that transforms file names
 * @returns New Files collection with renamed paths
 */
function rename(files: Files, renameFn: (name: string) => string): Files;

Usage Examples:

import { rename } from "@now/build-utils";

// Add prefix to all files
const prefixedFiles = rename(originalFiles, (name) => `build/${name}`);

// Change file extensions
const renamedFiles = rename(originalFiles, (name) => 
  name.replace(/\.ts$/, ".js")
);

Writable Directory

Creates a writable temporary directory for build operations.

/**
 * Create a writable temporary directory
 * @returns Promise resolving to absolute path to writable directory
 */
function getWriteableDirectory(): Promise<string>;

Usage Examples:

import { getWriteableDirectory } from "@now/build-utils";

// Create temporary directory for build
const tempDir = await getWriteableDirectory();
console.log("Temp directory:", tempDir);
// Example output: /tmp/7a3f2b1c

Stream to Buffer

Converts a readable stream to a Buffer.

/**
 * Convert a readable stream to Buffer
 * @param stream - Node.js readable stream
 * @returns Promise resolving to Buffer containing stream data
 */
function streamToBuffer(stream: NodeJS.ReadableStream): Promise<Buffer>;

Symbolic Link Detection

Checks if a file mode represents a symbolic link.

/**
 * Check if file mode represents a symbolic link
 * @param mode - File mode number
 * @returns True if the mode represents a symbolic link
 */
function isSymbolicLink(mode: number): boolean;

Configuration File Reading

Reads and parses configuration files in various formats (JSON, YAML, TOML).

/**
 * Read and parse configuration file
 * @param files - Single file path or array of file paths to try
 * @returns Promise resolving to parsed configuration or null if not found
 */
function readConfigFile<T>(files: string | string[]): Promise<T | null>;

Usage Examples:

import { readConfigFile } from "@now/build-utils";

// Try multiple config file names
const config = await readConfigFile([
  'app.json',
  'app.yaml', 
  'app.toml'
]);

if (config) {
  console.log("Found config:", config);
} else {
  console.log("No config file found");
}

// Read specific config file
const packageConfig = await readConfigFile('package.json');

Utility Functions

File Mode Constants

// Standard file permissions
const S_IFMT = 61440;   // 0170000 type of file
const S_IFLNK = 40960;  // 0120000 symbolic link

Install with Tessl CLI

npx tessl i tessl/npm-now--build-utils

docs

detection.md

file-classes.md

filesystem.md

index.md

lambda.md

script-execution.md

tile.json