johanlabs-librarian
v0.0.2
Published
Librarian is a powerful tool for managing multiple isolated npm package workspaces per tenant. It provides safe addition, removal, and listing of packages and registries, ensuring no conflicts through file-based locking.
Readme
Librarian
Librarian is a powerful tool for managing multiple isolated npm package workspaces per tenant. It provides safe addition, removal, and listing of packages and registries, ensuring no conflicts through file-based locking.
Features
- Manage multiple tenants with isolated workspaces.
- Add, remove, and list npm packages.
- Add and list multiple registries.
- Automatic cleanup of unused dependencies.
- File-based locking to prevent concurrent conflicts.
- Caching of npm packages for faster installations.
Installation
Clone the repository and install dependencies:
npm install johanlabs-librarianUsage
Import and initialize Librarian:
import { Librarian } from 'johanlabs-librarian';
const librarian = new Librarian({ path: '/path/to/workspaces' });Managing Tenants
Access a specific tenant:
const tenant = librarian.tenant('tenant1');Registries
Add a registry:
tenant.addRegistry({ type: 'npm', url: 'https://registry.npmjs.org/' });List registries:
console.log(tenant.listRegistry());Packages
Add a package:
await tenant.addPackage({ name: 'lodash', version: '^4.17.21' });List installed packages:
console.log(tenant.listPackages());Remove a package:
await tenant.removePackage('lodash');File-based Locking
Operations that modify the workspace use locks automatically to prevent conflicts between concurrent processes.
Project Structure
src/Librarian.ts: Main class to access tenants.src/Tenant.ts: Represents an isolated tenant workspace.src/package/PackageStore.ts: Manages package addition, removal, and installation.src/package/PackageCleaner.ts: Cleans up unused dependencies.src/registry/RegistryManager.ts: Manages registries and writes.npmrc.src/lock/TenantLock.ts: Implements file-based locking for safe concurrent operations.src/types.ts: TypeScript interfaces and types.src/index.ts: Entry point exporting the main Librarian class.
Scripts
npm run build: Compiles TypeScript to JavaScript.npm test: Placeholder for tests.
Contributing
Contributions are welcome! Please fork the repository and submit a pull request with your improvements.
License
MIT License
