An agnostic platform abstraction layer for TypeScript/JavaScript and Go that provides consistent APIs across Node.js, Deno, Cloudflare Workers, and other runtimes.
Cement provides a unified interface for common system operations, logging, and utilities across different JavaScript/TypeScript runtimes and Go. Write your code once and run it anywhere - whether that's Node.js, Deno, browsers, or Cloudflare Workers.
Cross-platform system operations through a unified interface:
interface SysAbstraction {
Time(): Time;
Stdout(): WritableStream<Uint8Array>;
Stderr(): WritableStream<Uint8Array>;
NextId(): string;
Random0ToValue(value: number): number;
System(): SystemService;
FileSystem(): FileService;
}
Inspired by Go's zerolog, providing efficient structured logging:
logger
.Str("user", "john")
.Uint64("id", 123)
.Info()
.Log("User logged in");
npm install @adviser/cement
pnpm add @adviser/cement
import { ... } from "jsr:@adviser/cement";
go get github.com/mabels/cement
import { BuildBasicSystemService } from "@adviser/cement/node";
const sys = BuildBasicSystemService();
const logger = sys.Logger();
logger
.Str("module", "app")
.Info()
.Log("Application started");
// Use file system operations
const fs = sys.FileSystem();
await fs.writeFile("output.txt", "Hello World");
// Node.js
import { BuildBasicSystemService } from "@adviser/cement/node";
// Deno
import { BuildBasicSystemService } from "@adviser/cement/deno";
// Cloudflare Workers
import { BuildBasicSystemService } from "@adviser/cement/cf";
// Browser/Web
import { BuildBasicSystemService } from "@adviser/cement/web";
import { Result } from "@adviser/cement";
function divide(a: number, b: number): Result<number> {
if (b === 0) {
return Result.Err(new Error("Division by zero"));
}
return Result.Ok(a / b);
}
const result = divide(10, 2);
if (result.isOk()) {
console.log("Result:", result.unwrap());
} else {
console.error("Error:", result.unwrapErr());
}
For comprehensive documentation, API references, and advanced usage examples, visit:
https://mabels.github.io/cement
# Install dependencies
pnpm install
# Run tests
pnpm test
# Run tests for specific platform
pnpm test:js # Node.js/JavaScript tests
pnpm test:deno # Deno tests
# Build
pnpm build
# Lint
pnpm lint
# Format code
pnpm format
Contributions are welcome! Please feel free to submit a Pull Request.
Apache License 2.0 - See LICENSE for details.