npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@iyulab/oops

v0.1.3

Published

Core SDK for Oops - Safe text file editing with automatic backup

Readme

@iyulab/oops

Core SDK for Oops - Safe text file editing with automatic backup and simple undo.

Installation

npm install @iyulab/oops

Quick Start

import { Oops } from '@iyulab/oops';

const oops = new Oops();

// Initialize workspace
await oops.initWorkspace();

// Start tracking a file
await oops.begin('/path/to/file.txt');

// Check for changes
const hasChanges = await oops.hasChanges('/path/to/file.txt');

// Get diff
const diff = await oops.diff('/path/to/file.txt');

// Apply changes
await oops.keep('/path/to/file.txt');

// Or undo changes
await oops.undo('/path/to/file.txt');

Features

  • 🔒 Safe file editing with automatic backup
  • 📝 Simple undo functionality
  • 🗂️ Workspace management with temporary or local storage
  • 🔄 Batch operations for multiple files
  • 📊 File validation and health checks
  • ⚙️ Configurable safety options

API Reference

Core Methods

initWorkspace()

Initialize a new workspace for tracking files.

begin(filePath: string)

Start tracking a file by creating a backup.

hasChanges(filePath: string): Promise<boolean>

Check if a tracked file has changes.

diff(filePath: string): Promise<DiffResult>

Generate diff information for a tracked file.

keep(filePath: string)

Apply changes and stop tracking the file.

undo(filePath: string)

Revert file to backup and stop tracking.

abort(filePath: string)

Stop tracking without reverting changes.

Batch Operations

keepAll()

Apply changes to all tracked files.

undoAll()

Revert all tracked files to their backups.

abortAll()

Stop tracking all files without reverting.

Workspace Management

getWorkspaceInfo(): Promise<WorkspaceInfo>

Get information about the current workspace.

isWorkspaceHealthy(): Promise<boolean>

Check if the workspace is in a healthy state.

cleanWorkspace()

Clean up the workspace and all tracking data.

getWorkspaceSize(): Promise<{files: number, sizeBytes: number}>

Get workspace size information.

Configuration

getConfig(): OopsConfig

Get current configuration.

setConfig(key: string, value: any)

Set configuration values (supports nested keys like 'safety.confirmKeep').

Configuration Options

interface OopsConfig {
  workspace: {
    useTemp: boolean;    // Use temporary directory
    path: string | null; // Custom workspace path
  };
  safety: {
    confirmKeep: boolean;   // Confirm before applying changes
    confirmUndo: boolean;   // Confirm before undoing
    autoBackup: boolean;    // Automatic backup creation
  };
  diff: {
    tool: string;    // External diff tool ('auto', 'code', 'vimdiff', etc.)
    context: number; // Number of context lines in diff
  };
}

Static Factory Methods

Oops.createTempWorkspace(): Promise<Oops>

Create an instance with a temporary workspace.

Oops.createLocalWorkspace(basePath: string): Promise<Oops>

Create an instance with a local workspace.

Error Handling

The SDK provides specific error types for better error handling:

  • FileNotFoundError
  • FileAlreadyTrackedError
  • FileNotTrackedError
  • WorkspaceNotInitializedError
  • WorkspaceCorruptedError
  • GitOperationError

TypeScript Support

This package is written in TypeScript and includes complete type definitions.

License

MIT - see LICENSE for details.

Repository

https://github.com/iyulab/oops