Build utilities for Now (Vercel) serverless platform runtime development
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Core file handling utilities for managing different types of file references and performing filesystem operations during builds.
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/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/**"]
});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")
);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/7a3f2b1cConverts 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>;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;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');// Standard file permissions
const S_IFMT = 61440; // 0170000 type of file
const S_IFLNK = 40960; // 0120000 symbolic linkInstall with Tessl CLI
npx tessl i tessl/npm-now--build-utils