UNPKG

@wearesage/schema

Version:

A flexible schema definition and validation system for TypeScript with multi-database support

65 lines (54 loc) 2.6 kB
// Example of using the new schema system with explicit dependencies import { MetadataRegistry, SchemaBuilder, SchemaReflector } from "../core"; import { MongoDBAdapter } from "../adapters/mongodb"; import { Neo4jAdapter } from "../adapters/neo4j"; import { PostgreSQLAdapter } from "../adapters/postgresql"; import { Repository } from "../adapters/repository"; // Import the blog entities import { User } from "./blog/User"; import { Post } from "./blog/Post"; import { Tag } from "./blog/Tag"; // Create a registry and builder const registry = new MetadataRegistry(); const builder = new SchemaBuilder(registry); // Register all blog entities console.log("Registering blog entities..."); builder.registerEntities([User, Post, Tag]); // Get entity metadata const userMetadata = registry.getEntityMetadata(User); console.log("\nUser entity metadata:", userMetadata); // Get all entity properties const postProperties = registry.getAllProperties(Post); console.log("\nPost properties:"); postProperties?.forEach((options, key) => { console.log(`- ${key}: ${JSON.stringify(options)}`); }); // Get all entity relationships const userRelationships = registry.getAllRelationships(User); console.log("\nUser relationships:"); userRelationships?.forEach((options, key) => { console.log(`- ${key}: ${JSON.stringify(options)}`); }); // Create database adapters with the registry console.log("\nCreating database adapters..."); const mongoAdapter = new MongoDBAdapter(registry, "mongodb://localhost:27017/blog"); const neo4jAdapter = new Neo4jAdapter(registry, "bolt://localhost:7687"); const postgresAdapter = new PostgreSQLAdapter(registry, "postgres://user:pass@localhost:5432/blog"); // Create repositories console.log("Creating repositories with explicit registry dependency..."); const userRepo = new Repository<User>(User, mongoAdapter, registry); const postRepo = new Repository<Post>(Post, neo4jAdapter, registry); const tagRepo = new Repository<Tag>(Tag, postgresAdapter, registry); // Create a schema reflector with our registry const reflector = new SchemaReflector(registry); // Get a schema for an entity const userSchema = reflector.getEntitySchema(User); console.log("\nUser schema:", JSON.stringify(userSchema, null, 2)); console.log("\nDone! New architecture successfully demonstrated."); console.log("The decorated entities are registered with the SchemaBuilder instead of directly with the registry."); console.log("This separates schema definition from schema registration."); console.log("All components now use explicit dependency injection instead of singletons.\n");