business-as-code 0.0.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/domains/admin.ts","../../src/schema/domains/business.ts","../../src/schema/domains/product.ts","../../src/schema/domains/success.ts","../../src/schema/domains/sales.ts","../../src/schema/domains/marketing.ts","../../src/schema/domains/work.ts","../../src/schema/domains/financial.ts","../../src/schema/domains/communications.ts","../../src/schema/index.ts"],"sourcesContent":["/**\n * Admin Domain - Core system entities\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Users: NounSchema = {\n slug: 'users',\n group: 'Admin',\n titleField: 'email',\n fields: [\n { name: 'email', type: 'email', required: true, unique: true },\n { name: 'name', type: 'text' },\n { name: 'avatar', type: 'image' },\n { name: 'role', type: 'status', options: ['admin', 'user', 'viewer'] },\n ],\n}\n\nexport const Orgs: NounSchema = {\n slug: 'orgs',\n group: 'Admin',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'slug', type: 'text', required: true, unique: true },\n { name: 'logo', type: 'image' },\n { name: 'domain', type: 'text' },\n ],\n}\n\nexport const ServiceAccounts: NounSchema = {\n slug: 'service-accounts',\n group: 'Admin',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'org', type: 'ref', config: { relationTo: 'orgs' } },\n { name: 'apiKey', type: 'text', unique: true },\n { name: 'scopes', type: 'array' },\n ],\n}\n\nexport const adminNouns: NounSchema[] = [Users, Orgs, ServiceAccounts]\n","/**\n * Business Domain - Core business entities\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Businesses: NounSchema = {\n slug: 'businesses',\n group: 'Business',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'legalName', type: 'text' },\n { name: 'type', type: 'status', options: ['LLC', 'Corporation', 'Partnership', 'Sole Proprietorship', 'Nonprofit'] },\n { name: 'status', type: 'status', options: ['Active', 'Inactive', 'Dissolved'] },\n { name: 'foundedDate', type: 'date' },\n { name: 'website', type: 'url' },\n { name: 'description', type: 'rich' },\n ],\n}\n\nexport const Goals: NounSchema = {\n slug: 'goals',\n group: 'Business',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['Revenue', 'Growth', 'Retention', 'Efficiency', 'Quality'] },\n { name: 'targetValue', type: 'number' },\n { name: 'currentValue', type: 'number' },\n { name: 'unit', type: 'text' },\n { name: 'deadline', type: 'date' },\n { name: 'status', type: 'status', options: ['Not Started', 'In Progress', 'At Risk', 'Achieved'] },\n ],\n}\n\nexport const Metrics: NounSchema = {\n slug: 'metrics',\n group: 'Business',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['KPI', 'OKR', 'North Star', 'Health', 'Vanity'] },\n { name: 'value', type: 'number' },\n { name: 'unit', type: 'text' },\n { name: 'frequency', type: 'status', options: ['Real-time', 'Daily', 'Weekly', 'Monthly', 'Quarterly'] },\n ],\n}\n\nexport const Teams: NounSchema = {\n slug: 'teams',\n group: 'Business',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['Engineering', 'Product', 'Design', 'Marketing', 'Sales', 'Support', 'Operations', 'Finance', 'HR', 'Legal'] },\n { name: 'description', type: 'text' },\n ],\n}\n\nexport const Processes: NounSchema = {\n slug: 'processes',\n group: 'Business',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['Core', 'Support', 'Management'] },\n { name: 'owner', type: 'ref', config: { relationTo: 'teams' } },\n { name: 'description', type: 'rich' },\n { name: 'status', type: 'status', options: ['Draft', 'Active', 'Deprecated'] },\n ],\n}\n\nexport const businessNouns: NounSchema[] = [Businesses, Goals, Metrics, Teams, Processes]\n","/**\n * Product Domain - Products, services, and offerings\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Products: NounSchema = {\n slug: 'products',\n group: 'Product',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['API', 'App', 'CLI', 'SDK', 'MCP', 'Agent', 'Dataset', 'DataFeed', 'Function', 'Database', 'Queue', 'Storage', 'Cache', 'Platform'] },\n { name: 'description', type: 'text' },\n { name: 'isActive', type: 'boolean' },\n { name: 'stripeProductId', type: 'text', unique: true },\n ],\n}\n\nexport const Services: NounSchema = {\n slug: 'services',\n group: 'Product',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['Consulting', 'Implementation', 'Training', 'Support', 'Managed'] },\n { name: 'description', type: 'text' },\n { name: 'hourlyRate', type: 'money' },\n { name: 'isActive', type: 'boolean' },\n ],\n}\n\nexport const Offers: NounSchema = {\n slug: 'offers',\n group: 'Product',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'products', type: 'ref', config: { relationTo: 'products', hasMany: true } },\n { name: 'type', type: 'status', options: ['Trial', 'Freemium', 'Subscription', 'One-time', 'Usage-based'] },\n { name: 'description', type: 'text' },\n { name: 'isActive', type: 'boolean' },\n ],\n}\n\nexport const Prices: NounSchema = {\n slug: 'prices',\n group: 'Product',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'offer', type: 'ref', config: { relationTo: 'offers' } },\n { name: 'amount', type: 'money', required: true },\n { name: 'currency', type: 'status', options: ['USD', 'EUR', 'GBP', 'JPY'] },\n { name: 'interval', type: 'status', options: ['once', 'day', 'week', 'month', 'year'] },\n { name: 'stripePriceId', type: 'text', unique: true },\n { name: 'isActive', type: 'boolean' },\n ],\n}\n\nexport const Features: NounSchema = {\n slug: 'features',\n group: 'Product',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'product', type: 'ref', config: { relationTo: 'products' } },\n { name: 'description', type: 'text' },\n { name: 'type', type: 'status', options: ['Core', 'Premium', 'Enterprise', 'Add-on'] },\n { name: 'status', type: 'status', options: ['Planned', 'In Development', 'Beta', 'GA', 'Deprecated'] },\n ],\n}\n\nexport const productNouns: NounSchema[] = [Products, Services, Offers, Prices, Features]\n","/**\n * Success Domain - Customer success and relationships\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Customers: NounSchema = {\n slug: 'customers',\n group: 'Success',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'type', type: 'status', options: ['Business', 'Developer', 'Consumer', 'Professional'], required: true },\n { name: 'user', type: 'ref', config: { relationTo: 'users' } },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'company', type: 'text' },\n { name: 'email', type: 'email' },\n { name: 'stripeCustomerId', type: 'text', unique: true },\n { name: 'status', type: 'status', options: ['Active', 'Churned', 'Paused'] },\n { name: 'healthScore', type: 'score' },\n ],\n}\n\nexport const Contacts: NounSchema = {\n slug: 'contacts',\n group: 'Success',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'email', type: 'email' },\n { name: 'phone', type: 'text' },\n { name: 'title', type: 'text' },\n { name: 'role', type: 'status', options: ['Decision Maker', 'Influencer', 'Champion', 'End User', 'Billing'] },\n { name: 'isPrimary', type: 'boolean' },\n ],\n}\n\nexport const Subscriptions: NounSchema = {\n slug: 'subscriptions',\n group: 'Success',\n titleField: 'id',\n fields: [\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' }, required: true },\n { name: 'offer', type: 'ref', config: { relationTo: 'offers' } },\n { name: 'price', type: 'ref', config: { relationTo: 'prices' } },\n { name: 'status', type: 'status', options: ['Active', 'Past Due', 'Canceled', 'Paused', 'Trialing'] },\n { name: 'stripeSubscriptionId', type: 'text', unique: true },\n { name: 'currentPeriodStart', type: 'date' },\n { name: 'currentPeriodEnd', type: 'date' },\n { name: 'canceledAt', type: 'date' },\n ],\n}\n\nexport const successNouns: NounSchema[] = [Customers, Contacts, Subscriptions]\n","/**\n * Sales Domain - Sales pipeline and deals\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Deals: NounSchema = {\n slug: 'deals',\n group: 'Sales',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'contact', type: 'ref', config: { relationTo: 'contacts' } },\n { name: 'value', type: 'money' },\n { name: 'stage', type: 'status', options: ['Qualification', 'Discovery', 'Proposal', 'Negotiation', 'Closed Won', 'Closed Lost'] },\n { name: 'probability', type: 'score' },\n { name: 'expectedCloseDate', type: 'date' },\n { name: 'actualCloseDate', type: 'date' },\n { name: 'lostReason', type: 'text' },\n ],\n}\n\nexport const Quotes: NounSchema = {\n slug: 'quotes',\n group: 'Sales',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'deal', type: 'ref', config: { relationTo: 'deals' } },\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'total', type: 'money', required: true },\n { name: 'status', type: 'status', options: ['Draft', 'Sent', 'Viewed', 'Accepted', 'Rejected', 'Expired'] },\n { name: 'validUntil', type: 'date' },\n { name: 'terms', type: 'rich' },\n ],\n}\n\nexport const Proposals: NounSchema = {\n slug: 'proposals',\n group: 'Sales',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'deal', type: 'ref', config: { relationTo: 'deals' } },\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'content', type: 'rich' },\n { name: 'status', type: 'status', options: ['Draft', 'In Review', 'Sent', 'Accepted', 'Rejected'] },\n { name: 'sentAt', type: 'date' },\n ],\n}\n\nexport const salesNouns: NounSchema[] = [Deals, Quotes, Proposals]\n","/**\n * Marketing Domain - Leads, brands, and marketing assets\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Leads: NounSchema = {\n slug: 'leads',\n group: 'Marketing',\n titleField: 'email',\n fields: [\n { name: 'email', type: 'email', required: true },\n { name: 'name', type: 'text' },\n { name: 'company', type: 'text' },\n { name: 'title', type: 'text' },\n { name: 'source', type: 'status', options: ['Website', 'Referral', 'Event', 'Ads', 'Content', 'Outbound', 'Partner'] },\n { name: 'status', type: 'status', options: ['New', 'Contacted', 'Qualified', 'Unqualified', 'Converted'] },\n { name: 'score', type: 'score' },\n { name: 'convertedTo', type: 'ref', config: { relationTo: 'customers' } },\n ],\n}\n\nexport const Brands: NounSchema = {\n slug: 'brands',\n group: 'Marketing',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'tagline', type: 'text' },\n { name: 'description', type: 'rich' },\n { name: 'logo', type: 'image' },\n { name: 'primaryColor', type: 'text' },\n { name: 'secondaryColor', type: 'text' },\n ],\n}\n\nexport const Domains: NounSchema = {\n slug: 'domains',\n group: 'Marketing',\n titleField: 'domain',\n fields: [\n { name: 'domain', type: 'text', required: true, unique: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'brand', type: 'ref', config: { relationTo: 'brands' } },\n { name: 'type', type: 'status', options: ['Primary', 'Redirect', 'Vanity', 'Product'] },\n { name: 'status', type: 'status', options: ['Active', 'Pending', 'Expired'] },\n { name: 'registrar', type: 'text' },\n { name: 'expiresAt', type: 'date' },\n ],\n}\n\nexport const Competitors: NounSchema = {\n slug: 'competitors',\n group: 'Marketing',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'website', type: 'url' },\n { name: 'description', type: 'text' },\n { name: 'strengths', type: 'rich' },\n { name: 'weaknesses', type: 'rich' },\n { name: 'threat', type: 'status', options: ['Low', 'Medium', 'High', 'Critical'] },\n ],\n}\n\nexport const marketingNouns: NounSchema[] = [Leads, Brands, Domains, Competitors]\n","/**\n * Work Domain - Projects, tasks, and workflows\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Projects: NounSchema = {\n slug: 'projects',\n group: 'Work',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'team', type: 'ref', config: { relationTo: 'teams' } },\n { name: 'description', type: 'rich' },\n { name: 'status', type: 'status', options: ['Planning', 'Active', 'On Hold', 'Completed', 'Archived'] },\n { name: 'startDate', type: 'date' },\n { name: 'targetDate', type: 'date' },\n { name: 'completedDate', type: 'date' },\n ],\n}\n\nexport const Tasks: NounSchema = {\n slug: 'tasks',\n group: 'Work',\n titleField: 'title',\n fields: [\n { name: 'title', type: 'text', required: true },\n { name: 'project', type: 'ref', config: { relationTo: 'projects' } },\n { name: 'assignee', type: 'ref', config: { relationTo: 'users' } },\n { name: 'description', type: 'rich' },\n { name: 'status', type: 'status', options: ['Backlog', 'Todo', 'In Progress', 'In Review', 'Done'] },\n { name: 'priority', type: 'status', options: ['Low', 'Medium', 'High', 'Urgent'] },\n { name: 'dueDate', type: 'date' },\n { name: 'estimatedHours', type: 'number' },\n { name: 'actualHours', type: 'number' },\n ],\n}\n\nexport const Issues: NounSchema = {\n slug: 'issues',\n group: 'Work',\n titleField: 'title',\n fields: [\n { name: 'title', type: 'text', required: true },\n { name: 'project', type: 'ref', config: { relationTo: 'projects' } },\n { name: 'reporter', type: 'ref', config: { relationTo: 'users' } },\n { name: 'assignee', type: 'ref', config: { relationTo: 'users' } },\n { name: 'description', type: 'rich' },\n { name: 'type', type: 'status', options: ['Bug', 'Feature', 'Task', 'Epic', 'Story'] },\n { name: 'status', type: 'status', options: ['Open', 'In Progress', 'Resolved', 'Closed'] },\n { name: 'priority', type: 'status', options: ['Low', 'Medium', 'High', 'Critical'] },\n ],\n}\n\nexport const Workflows: NounSchema = {\n slug: 'workflows',\n group: 'Work',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'description', type: 'text' },\n { name: 'trigger', type: 'status', options: ['Manual', 'Schedule', 'Event', 'Webhook'] },\n { name: 'status', type: 'status', options: ['Draft', 'Active', 'Paused', 'Archived'] },\n ],\n}\n\nexport const Roles: NounSchema = {\n slug: 'roles',\n group: 'Work',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'team', type: 'ref', config: { relationTo: 'teams' } },\n { name: 'description', type: 'text' },\n { name: 'level', type: 'status', options: ['Individual Contributor', 'Lead', 'Manager', 'Director', 'VP', 'C-Level'] },\n ],\n}\n\nexport const Agents: NounSchema = {\n slug: 'agents',\n group: 'Work',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'role', type: 'ref', config: { relationTo: 'roles' } },\n { name: 'type', type: 'status', options: ['AI', 'Human', 'Hybrid'] },\n { name: 'status', type: 'status', options: ['Active', 'Paused', 'Retired'] },\n { name: 'capabilities', type: 'array' },\n ],\n}\n\nexport const workNouns: NounSchema[] = [Projects, Tasks, Issues, Workflows, Roles, Agents]\n","/**\n * Financial Domain - Accounting, invoicing, and payments\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Invoices: NounSchema = {\n slug: 'invoices',\n group: 'Financial',\n titleField: 'number',\n fields: [\n { name: 'number', type: 'text', required: true, unique: true },\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'subscription', type: 'ref', config: { relationTo: 'subscriptions' } },\n { name: 'total', type: 'money', required: true },\n { name: 'tax', type: 'money' },\n { name: 'status', type: 'status', options: ['Draft', 'Sent', 'Paid', 'Void', 'Uncollectible'] },\n { name: 'dueDate', type: 'date' },\n { name: 'paidAt', type: 'date' },\n { name: 'stripeInvoiceId', type: 'text', unique: true },\n ],\n}\n\nexport const Payments: NounSchema = {\n slug: 'payments',\n group: 'Financial',\n titleField: 'id',\n fields: [\n { name: 'customer', type: 'ref', config: { relationTo: 'customers' } },\n { name: 'invoice', type: 'ref', config: { relationTo: 'invoices' } },\n { name: 'amount', type: 'money', required: true },\n { name: 'currency', type: 'status', options: ['USD', 'EUR', 'GBP', 'JPY'] },\n { name: 'status', type: 'status', options: ['Pending', 'Succeeded', 'Failed', 'Refunded'] },\n { name: 'method', type: 'status', options: ['Card', 'ACH', 'Wire', 'Check'] },\n { name: 'stripePaymentId', type: 'text', unique: true },\n ],\n}\n\nexport const Refunds: NounSchema = {\n slug: 'refunds',\n group: 'Financial',\n titleField: 'id',\n fields: [\n { name: 'payment', type: 'ref', config: { relationTo: 'payments' }, required: true },\n { name: 'amount', type: 'money', required: true },\n { name: 'reason', type: 'status', options: ['Duplicate', 'Fraudulent', 'Customer Request', 'Product Issue'] },\n { name: 'status', type: 'status', options: ['Pending', 'Succeeded', 'Failed'] },\n { name: 'notes', type: 'text' },\n ],\n}\n\nexport const ChartOfAccounts: NounSchema = {\n slug: 'chart-of-accounts',\n group: 'Financial',\n titleField: 'name',\n fields: [\n { name: 'code', type: 'text', required: true, unique: true },\n { name: 'name', type: 'text', required: true },\n { name: 'type', type: 'status', options: ['Asset', 'Liability', 'Equity', 'Revenue', 'Expense'], required: true },\n { name: 'subtype', type: 'text' },\n { name: 'description', type: 'text' },\n { name: 'isActive', type: 'boolean' },\n ],\n}\n\nexport const JournalEntries: NounSchema = {\n slug: 'journal-entries',\n group: 'Financial',\n titleField: 'reference',\n fields: [\n { name: 'reference', type: 'text', required: true },\n { name: 'date', type: 'date', required: true },\n { name: 'description', type: 'text' },\n { name: 'debitAccount', type: 'ref', config: { relationTo: 'chart-of-accounts' } },\n { name: 'creditAccount', type: 'ref', config: { relationTo: 'chart-of-accounts' } },\n { name: 'amount', type: 'money', required: true },\n { name: 'status', type: 'status', options: ['Draft', 'Posted', 'Voided'] },\n ],\n}\n\nexport const financialNouns: NounSchema[] = [Invoices, Payments, Refunds, ChartOfAccounts, JournalEntries]\n","/**\n * Communications Domain - Messaging, sequences, and engagement\n */\n\nimport type { NounSchema } from '../../types'\n\nexport const Channels: NounSchema = {\n slug: 'channels',\n group: 'Communications',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'type', type: 'status', options: ['Email', 'SMS', 'Slack', 'Discord', 'WhatsApp', 'In-App', 'Push'] },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'isActive', type: 'boolean' },\n { name: 'config', type: 'text' },\n ],\n}\n\nexport const Messages: NounSchema = {\n slug: 'messages',\n group: 'Communications',\n titleField: 'subject',\n fields: [\n { name: 'subject', type: 'text' },\n { name: 'body', type: 'rich', required: true },\n { name: 'channel', type: 'ref', config: { relationTo: 'channels' } },\n { name: 'from', type: 'text' },\n { name: 'to', type: 'text', required: true },\n { name: 'status', type: 'status', options: ['Draft', 'Queued', 'Sent', 'Delivered', 'Bounced', 'Failed'] },\n { name: 'sentAt', type: 'date' },\n { name: 'openedAt', type: 'date' },\n { name: 'clickedAt', type: 'date' },\n ],\n}\n\nexport const Sequences: NounSchema = {\n slug: 'sequences',\n group: 'Communications',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'type', type: 'status', options: ['Onboarding', 'Nurture', 'Re-engagement', 'Upsell', 'Support'] },\n { name: 'status', type: 'status', options: ['Draft', 'Active', 'Paused', 'Archived'] },\n { name: 'description', type: 'text' },\n ],\n}\n\nexport const Templates: NounSchema = {\n slug: 'templates',\n group: 'Communications',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', required: true },\n { name: 'channel', type: 'ref', config: { relationTo: 'channels' } },\n { name: 'subject', type: 'text' },\n { name: 'body', type: 'rich', required: true },\n { name: 'type', type: 'status', options: ['Transactional', 'Marketing', 'System'] },\n { name: 'isActive', type: 'boolean' },\n ],\n}\n\nexport const Posts: NounSchema = {\n slug: 'posts',\n group: 'Communications',\n titleField: 'title',\n fields: [\n { name: 'title', type: 'text', required: true },\n { name: 'content', type: 'rich', required: true },\n { name: 'author', type: 'ref', config: { relationTo: 'users' } },\n { name: 'business', type: 'ref', config: { relationTo: 'businesses' } },\n { name: 'status', type: 'status', options: ['Draft', 'Scheduled', 'Published', 'Archived'] },\n { name: 'publishedAt', type: 'date' },\n { name: 'channels', type: 'ref', config: { relationTo: 'channels', hasMany: true } },\n ],\n}\n\nexport const communicationsNouns: NounSchema[] = [Channels, Messages, Sequences, Templates, Posts]\n","/**\n * Business Schema Module\n *\n * Exports the default business schema and utilities for working with\n * business definitions.\n */\n\nimport type { BusinessSchema, BusinessDomain, NounSchema } from '../types'\n\n// Import all domain nouns\nimport {\n adminNouns,\n businessNouns,\n productNouns,\n successNouns,\n salesNouns,\n marketingNouns,\n workNouns,\n financialNouns,\n communicationsNouns,\n} from './domains'\n\n// Re-export all domains\nexport * from './domains'\n\n/**\n * The default business schema\n *\n * This represents a complete business with all standard domains.\n * Use this as a base and extend/customize for specific use cases.\n */\nexport const defaultBusinessSchema: BusinessSchema = {\n name: 'default',\n version: '1.0.0',\n description: 'Default business schema with all standard domains',\n domains: {\n admin: adminNouns,\n business: businessNouns,\n product: productNouns,\n success: successNouns,\n sales: salesNouns,\n marketing: marketingNouns,\n work: workNouns,\n financial: financialNouns,\n communications: communicationsNouns,\n },\n}\n\n/**\n * Get all nouns from a business schema as a flat array\n */\nexport function getAllNouns(schema: BusinessSchema): NounSchema[] {\n const nouns: NounSchema[] = []\n for (const domain of Object.values(schema.domains)) {\n if (domain) {\n nouns.push(...domain)\n }\n }\n return nouns\n}\n\n/**\n * Get nouns for a specific domain\n */\nexport function getDomainNouns(\n schema: BusinessSchema,\n domain: BusinessDomain\n): NounSchema[] {\n return schema.domains[domain] || []\n}\n\n/**\n * Find a noun by slug across all domains\n */\nexport function findNounBySlug(\n schema: BusinessSchema,\n slug: string\n): NounSchema | undefined {\n for (const domain of Object.values(schema.domains)) {\n if (domain) {\n const noun = domain.find((n) => n.slug === slug)\n if (noun) return noun\n }\n }\n return undefined\n}\n\n/**\n * Get all domain names in a schema\n */\nexport function getDomains(schema: BusinessSchema): BusinessDomain[] {\n return Object.keys(schema.domains) as BusinessDomain[]\n}\n\n/**\n * Merge two business schemas\n *\n * The extension schema's nouns override the base schema's nouns\n * when they have the same slug.\n */\nexport function mergeSchemas(\n base: BusinessSchema,\n extension: Partial<BusinessSchema>\n): BusinessSchema {\n const merged: BusinessSchema = {\n name: extension.name || base.name,\n version: extension.version || base.version,\n description: extension.description || base.description,\n domains: { ...base.domains },\n }\n\n if (extension.domains) {\n for (const [domain, nouns] of Object.entries(extension.domains)) {\n if (nouns) {\n const existing = merged.domains[domain as BusinessDomain] || []\n const existingSlugs = new Set(existing.map((n) => n.slug))\n\n // Add new nouns and override existing ones\n const newNouns = nouns.filter((n) => !existingSlugs.has(n.slug))\n const overrides = nouns.filter((n) => existingSlugs.has(n.slug))\n\n merged.domains[domain as BusinessDomain] = [\n ...existing.filter((n) => !overrides.find((o) => o.slug === n.slug)),\n ...overrides,\n ...newNouns,\n ]\n }\n }\n }\n\n return merged\n}\n\n/**\n * Create a minimal business schema with only specified domains\n */\nexport function createMinimalSchema(\n domains: BusinessDomain[],\n options?: { name?: string; version?: string }\n): BusinessSchema {\n const schema: BusinessSchema = {\n name: options?.name || 'minimal',\n version: options?.version || '1.0.0',\n domains: {},\n }\n\n for (const domain of domains) {\n schema.domains[domain] = defaultBusinessSchema.domains[domain]\n }\n\n return schema\n}\n\n/**\n * Validate a business schema\n */\nexport function validateSchema(schema: BusinessSchema): string[] {\n const errors: string[] = []\n\n if (!schema.name) {\n errors.push('Schema must have a name')\n }\n\n if (!schema.version) {\n errors.push('Schema must have a version')\n }\n\n const allSlugs = new Set<string>()\n for (const [domain, nouns] of Object.entries(schema.domains)) {\n if (nouns) {\n for (const noun of nouns) {\n if (!noun.slug) {\n errors.push(`Noun in domain '${domain}' is missing a slug`)\n } else if (allSlugs.has(noun.slug)) {\n errors.push(`Duplicate slug '${noun.slug}' found in domain '${domain}'`)\n } else {\n allSlugs.add(noun.slug)\n }\n\n if (!noun.fields || noun.fields.length === 0) {\n errors.push(`Noun '${noun.slug}' has no fields`)\n }\n }\n }\n }\n\n return errors\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,86 @@
1
+ import { NounSchema, FieldSchema } from 'db.sb';
2
+
3
+ /**
4
+ * Business-as-Code Type Definitions
5
+ *
6
+ * These types define the structure of a business schema that can be
7
+ * represented in MDX, YAML, JSON, or TypeScript code.
8
+ */
9
+
10
+ /**
11
+ * Business domain categories
12
+ */
13
+ type BusinessDomain = 'admin' | 'ai' | 'business' | 'code' | 'communications' | 'content' | 'data' | 'design' | 'experiments' | 'financial' | 'integrations' | 'marketing' | 'markets' | 'product' | 'sales' | 'startup' | 'success' | 'tech' | 'web' | 'work';
14
+ /**
15
+ * A business schema is a collection of nouns organized by domain
16
+ */
17
+ interface BusinessSchema {
18
+ /** Schema name/identifier */
19
+ name: string;
20
+ /** Schema version for migrations */
21
+ version: string;
22
+ /** Optional description */
23
+ description?: string;
24
+ /** Nouns organized by domain */
25
+ domains: Partial<Record<BusinessDomain, NounSchema[]>>;
26
+ }
27
+ /**
28
+ * Options for loading business schemas
29
+ */
30
+ interface LoaderOptions {
31
+ /** Base context for DSL parsing */
32
+ context?: 'app' | 'noun' | 'field';
33
+ /** Whether to validate schema after loading */
34
+ validate?: boolean;
35
+ /** Custom noun resolver for inheritance */
36
+ resolveNoun?: (name: string) => NounSchema | undefined;
37
+ }
38
+ /**
39
+ * Result of loading a business schema
40
+ */
41
+ interface LoadResult {
42
+ /** The loaded schema */
43
+ schema: BusinessSchema;
44
+ /** Any warnings during loading */
45
+ warnings?: string[];
46
+ /** Source format that was loaded */
47
+ format: 'mdx' | 'yaml' | 'json' | 'typescript';
48
+ }
49
+ /**
50
+ * Extension definition for customizing base schemas
51
+ */
52
+ interface BusinessExtension {
53
+ /** Extension name */
54
+ name: string;
55
+ /** Base schema to extend (defaults to 'default') */
56
+ extends?: string;
57
+ /** Nouns to add */
58
+ add?: Partial<Record<BusinessDomain, NounSchema[]>>;
59
+ /** Nouns to override (by slug) */
60
+ override?: Partial<Record<BusinessDomain, NounSchema[]>>;
61
+ /** Nouns to remove (by slug) */
62
+ remove?: Partial<Record<BusinessDomain, string[]>>;
63
+ }
64
+ /**
65
+ * Field definition shorthand for MDX/YAML
66
+ * Allows concise field definitions like:
67
+ * - "email" (known type)
68
+ * - "text required" (type with modifier)
69
+ * - "status:active|inactive|pending" (select with options)
70
+ */
71
+ type FieldShorthand = string | FieldSchema;
72
+ /**
73
+ * Noun definition shorthand for MDX/YAML
74
+ */
75
+ interface NounShorthand {
76
+ /** Noun name (becomes slug in camelCase) */
77
+ name: string;
78
+ /** Fields as shorthand or full definitions */
79
+ fields: Record<string, FieldShorthand>;
80
+ /** Admin group for UI organization */
81
+ group?: string;
82
+ /** Field to use as title in admin UI */
83
+ titleField?: string;
84
+ }
85
+
86
+ export type { BusinessSchema as B, FieldShorthand as F, LoaderOptions as L, NounShorthand as N, BusinessDomain as a, BusinessExtension as b, LoadResult as c };
package/package.json CHANGED
@@ -1,56 +1,75 @@
1
1
  {
2
2
  "name": "business-as-code",
3
- "version": "0.0.2",
4
- "description": "Define, launch, experiment, iterate, and grow your business entirely in code.",
5
- "keywords": [
6
- "ai",
7
- "business",
8
- "strategy",
9
- "operations",
10
- "automation",
11
- "sdk",
12
- "typescript"
13
- ],
14
- "homepage": "https://business-as-code.dev",
3
+ "version": "0.2.0",
4
+ "description": "Define, launch, experiment, iterate, and grow your business entirely in code",
15
5
  "type": "module",
16
- "main": "dist/index.js",
17
- "module": "dist/index.js",
18
- "types": "dist/index.d.ts",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
19
9
  "exports": {
20
10
  ".": {
21
11
  "import": "./dist/index.js",
22
12
  "types": "./dist/index.d.ts"
13
+ },
14
+ "./schema": {
15
+ "import": "./dist/schema/index.js",
16
+ "types": "./dist/schema/index.d.ts"
17
+ },
18
+ "./loaders": {
19
+ "import": "./dist/loaders/index.js",
20
+ "types": "./dist/loaders/index.d.ts"
23
21
  }
24
22
  },
25
23
  "files": [
26
- "dist",
27
- "README.md"
24
+ "dist"
28
25
  ],
26
+ "scripts": {
27
+ "build": "tsup",
28
+ "dev": "tsup --watch",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "typecheck": "tsc --noEmit"
32
+ },
33
+ "keywords": [
34
+ "business",
35
+ "schema",
36
+ "dsl",
37
+ "mdx",
38
+ "yaml",
39
+ "json",
40
+ "startups",
41
+ "platform",
42
+ "ai",
43
+ "human-ai-collaboration",
44
+ "organization",
45
+ "processes",
46
+ "departments",
47
+ "roles",
48
+ "entities",
49
+ "nouns"
50
+ ],
51
+ "author": "Startups.Studio",
52
+ "license": "MIT",
29
53
  "repository": {
30
54
  "type": "git",
31
- "url": "https://github.com/drivly/ai.git",
32
- "directory": "pkgs/business-as-code"
55
+ "url": "https://github.com/StartupsStudio/db.sb",
56
+ "directory": "packages/business-as-code"
33
57
  },
34
- "author": "Drivly",
35
- "license": "MIT",
58
+ "homepage": "https://business-as.code",
36
59
  "bugs": {
37
- "url": "https://github.com/drivly/ai/issues"
60
+ "url": "https://github.com/StartupsStudio/db.sb/issues"
38
61
  },
39
- "scripts": {
40
- "build": "tsup src/index.ts --format esm --dts",
41
- "dev": "tsup src/index.ts --format esm --dts --watch",
42
- "lint": "eslint \"src/**/*.ts*\"",
43
- "clean": "rimraf .turbo node_modules dist",
44
- "test": "vitest run",
45
- "test:watch": "vitest"
62
+ "dependencies": {
63
+ "db.sb": "workspace:^",
64
+ "yaml": "^2.7.0"
46
65
  },
47
- "engines": {
48
- "node": ">=18.0.0"
66
+ "devDependencies": {
67
+ "@types/node": "^22.0.0",
68
+ "tsup": "^8.0.0",
69
+ "typescript": "^5.5.0",
70
+ "vitest": "~3.2.0"
49
71
  },
50
- "dependencies": {
51
- "apis.do": "0.0.1",
52
- "database.do": "0.0.1",
53
- "functions.do": "0.0.1",
54
- "workflows.do": "0.0.1"
72
+ "engines": {
73
+ "node": ">=18"
55
74
  }
56
75
  }