This directory contains usage examples of the ProtoObject library for various scenarios.
- tcp-chat/ - Simple TCP client-server chat
- tcp-api/ - RESTful API over TCP connections
- tcp-nested/ - Nested ProtoObject classes for complex protocols
- fs-backup/ - Object backup system
- fs-csv/ - CSV export/import
- fs-streaming/ - Streaming processing for large files
- stream-validation/ - Object validation in streams
- stream-transform/ - Data transformation
- stream-batch/ - Batch processing
- crypto-signing/ - Digital signatures for objects
- crypto-encryption/ - Encryption of sensitive data
- crypto-integrity/ - Data integrity verification
- sqlite-orm/ - ORM-like behavior
- sqlite-relations/ - Related objects
- sqlite-migrations/ - Schema migrations
Browser compatibility examples:
browser-demo.html- Interactive browser demonstration with core features- Compatible with modern browsers (Chrome 80+, Firefox 75+, Safari 13+, Edge 80+)
- Note: Streaming features require Node.js environment
JavaScript examples:
user-classes.js- Complete example with factory, inheritance and serializationdemo.js- Interactive demonstration of all features
TypeScript examples:
user-classes.ts- Type-safe examples with decorators and genericsdemo.ts- Interactive demonstration with full typing
SQL database examples:
example-base-class.ts- Base class for database recordsexample-heir-class.ts- Concrete table implementation
Each example contains:
README.md- description and instructionspackage.json- dependencies (if needed)- Source code with comments
cd examples/tcp-chat
npm install # if package.json exists
node server.js # in one terminal
node client.js # in another terminal- Node.js 18+ (for experimental SQLite features)
- TypeScript (for compiling .ts examples)
- Factory: Use
protoObjectFactory()for flexible class creation - Inheritance: Inherit from
ProtoObjectfor traditional OOP
- toJSON(): Custom serialization for complex types (Date, Buffer, nested objects)
- fromJSON(): Custom deserialization with type conversion
- Decorators:
@StaticImplementsfor compile-time validation - Generics: Type-safe ProtoObject usage
- Interfaces: Define contracts for your data classes
Important: Always call this.assign(data) in constructors after super() for proper field initialization.
constructor(data) {
super(data);
if (data) this.assign(data); // This is required!
return this;
}