business-as-code 0.2.1 → 2.0.1

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.
Files changed (190) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +9 -0
  3. package/IMPLEMENTATION.md +226 -0
  4. package/README.md +1133 -193
  5. package/dist/business.d.ts +62 -0
  6. package/dist/business.d.ts.map +1 -0
  7. package/dist/business.js +109 -0
  8. package/dist/business.js.map +1 -0
  9. package/dist/dollar.d.ts +60 -0
  10. package/dist/dollar.d.ts.map +1 -0
  11. package/dist/dollar.js +107 -0
  12. package/dist/dollar.js.map +1 -0
  13. package/dist/entities/assets.d.ts +21 -0
  14. package/dist/entities/assets.d.ts.map +1 -0
  15. package/dist/entities/assets.js +323 -0
  16. package/dist/entities/assets.js.map +1 -0
  17. package/dist/entities/business.d.ts +36 -0
  18. package/dist/entities/business.d.ts.map +1 -0
  19. package/dist/entities/business.js +370 -0
  20. package/dist/entities/business.js.map +1 -0
  21. package/dist/entities/communication.d.ts +21 -0
  22. package/dist/entities/communication.d.ts.map +1 -0
  23. package/dist/entities/communication.js +255 -0
  24. package/dist/entities/communication.js.map +1 -0
  25. package/dist/entities/customers.d.ts +58 -0
  26. package/dist/entities/customers.d.ts.map +1 -0
  27. package/dist/entities/customers.js +989 -0
  28. package/dist/entities/customers.js.map +1 -0
  29. package/dist/entities/financials.d.ts +59 -0
  30. package/dist/entities/financials.d.ts.map +1 -0
  31. package/dist/entities/financials.js +932 -0
  32. package/dist/entities/financials.js.map +1 -0
  33. package/dist/entities/goals.d.ts +58 -0
  34. package/dist/entities/goals.d.ts.map +1 -0
  35. package/dist/entities/goals.js +800 -0
  36. package/dist/entities/goals.js.map +1 -0
  37. package/dist/entities/index.d.ts +299 -0
  38. package/dist/entities/index.d.ts.map +1 -0
  39. package/dist/entities/index.js +198 -0
  40. package/dist/entities/index.js.map +1 -0
  41. package/dist/entities/legal.d.ts +21 -0
  42. package/dist/entities/legal.d.ts.map +1 -0
  43. package/dist/entities/legal.js +301 -0
  44. package/dist/entities/legal.js.map +1 -0
  45. package/dist/entities/market.d.ts +21 -0
  46. package/dist/entities/market.d.ts.map +1 -0
  47. package/dist/entities/market.js +301 -0
  48. package/dist/entities/market.js.map +1 -0
  49. package/dist/entities/marketing.d.ts +67 -0
  50. package/dist/entities/marketing.d.ts.map +1 -0
  51. package/dist/entities/marketing.js +1157 -0
  52. package/dist/entities/marketing.js.map +1 -0
  53. package/dist/entities/offerings.d.ts +51 -0
  54. package/dist/entities/offerings.d.ts.map +1 -0
  55. package/dist/entities/offerings.js +727 -0
  56. package/dist/entities/offerings.js.map +1 -0
  57. package/dist/entities/operations.d.ts +58 -0
  58. package/dist/entities/operations.d.ts.map +1 -0
  59. package/dist/entities/operations.js +787 -0
  60. package/dist/entities/operations.js.map +1 -0
  61. package/dist/entities/organization.d.ts +57 -0
  62. package/dist/entities/organization.d.ts.map +1 -0
  63. package/dist/entities/organization.js +807 -0
  64. package/dist/entities/organization.js.map +1 -0
  65. package/dist/entities/partnerships.d.ts +21 -0
  66. package/dist/entities/partnerships.d.ts.map +1 -0
  67. package/dist/entities/partnerships.js +300 -0
  68. package/dist/entities/partnerships.js.map +1 -0
  69. package/dist/entities/planning.d.ts +87 -0
  70. package/dist/entities/planning.d.ts.map +1 -0
  71. package/dist/entities/planning.js +271 -0
  72. package/dist/entities/planning.js.map +1 -0
  73. package/dist/entities/projects.d.ts +25 -0
  74. package/dist/entities/projects.d.ts.map +1 -0
  75. package/dist/entities/projects.js +349 -0
  76. package/dist/entities/projects.js.map +1 -0
  77. package/dist/entities/risk.d.ts +21 -0
  78. package/dist/entities/risk.d.ts.map +1 -0
  79. package/dist/entities/risk.js +293 -0
  80. package/dist/entities/risk.js.map +1 -0
  81. package/dist/entities/sales.d.ts +72 -0
  82. package/dist/entities/sales.d.ts.map +1 -0
  83. package/dist/entities/sales.js +1248 -0
  84. package/dist/entities/sales.js.map +1 -0
  85. package/dist/financials.d.ts +130 -0
  86. package/dist/financials.d.ts.map +1 -0
  87. package/dist/financials.js +297 -0
  88. package/dist/financials.js.map +1 -0
  89. package/dist/goals.d.ts +87 -0
  90. package/dist/goals.d.ts.map +1 -0
  91. package/dist/goals.js +215 -0
  92. package/dist/goals.js.map +1 -0
  93. package/dist/index.d.ts +97 -4
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +131 -1079
  96. package/dist/index.js.map +1 -1
  97. package/dist/kpis.d.ts +118 -0
  98. package/dist/kpis.d.ts.map +1 -0
  99. package/dist/kpis.js +232 -0
  100. package/dist/kpis.js.map +1 -0
  101. package/dist/metrics.d.ts +448 -0
  102. package/dist/metrics.d.ts.map +1 -0
  103. package/dist/metrics.js +325 -0
  104. package/dist/metrics.js.map +1 -0
  105. package/dist/okrs.d.ts +123 -0
  106. package/dist/okrs.d.ts.map +1 -0
  107. package/dist/okrs.js +269 -0
  108. package/dist/okrs.js.map +1 -0
  109. package/dist/organization.d.ts +585 -0
  110. package/dist/organization.d.ts.map +1 -0
  111. package/dist/organization.js +173 -0
  112. package/dist/organization.js.map +1 -0
  113. package/dist/process.d.ts +112 -0
  114. package/dist/process.d.ts.map +1 -0
  115. package/dist/process.js +241 -0
  116. package/dist/process.js.map +1 -0
  117. package/dist/product.d.ts +85 -0
  118. package/dist/product.d.ts.map +1 -0
  119. package/dist/product.js +145 -0
  120. package/dist/product.js.map +1 -0
  121. package/dist/queries.d.ts +304 -0
  122. package/dist/queries.d.ts.map +1 -0
  123. package/dist/queries.js +415 -0
  124. package/dist/queries.js.map +1 -0
  125. package/dist/roles.d.ts +340 -0
  126. package/dist/roles.d.ts.map +1 -0
  127. package/dist/roles.js +255 -0
  128. package/dist/roles.js.map +1 -0
  129. package/dist/service.d.ts +61 -0
  130. package/dist/service.d.ts.map +1 -0
  131. package/dist/service.js +140 -0
  132. package/dist/service.js.map +1 -0
  133. package/dist/types.d.ts +459 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/dist/types.js +5 -0
  136. package/dist/types.js.map +1 -0
  137. package/dist/vision.d.ts +38 -0
  138. package/dist/vision.d.ts.map +1 -0
  139. package/dist/vision.js +68 -0
  140. package/dist/vision.js.map +1 -0
  141. package/dist/workflow.d.ts +115 -0
  142. package/dist/workflow.d.ts.map +1 -0
  143. package/dist/workflow.js +247 -0
  144. package/dist/workflow.js.map +1 -0
  145. package/examples/basic-usage.ts +307 -0
  146. package/package.json +19 -60
  147. package/src/business.ts +121 -0
  148. package/src/dollar.ts +132 -0
  149. package/src/entities/assets.ts +332 -0
  150. package/src/entities/business.ts +406 -0
  151. package/src/entities/communication.ts +264 -0
  152. package/src/entities/customers.ts +1072 -0
  153. package/src/entities/financials.ts +1011 -0
  154. package/src/entities/goals.ts +871 -0
  155. package/src/entities/index.ts +383 -0
  156. package/src/entities/legal.ts +310 -0
  157. package/src/entities/market.ts +310 -0
  158. package/src/entities/marketing.ts +1249 -0
  159. package/src/entities/offerings.ts +789 -0
  160. package/src/entities/operations.ts +861 -0
  161. package/src/entities/organization.ts +876 -0
  162. package/src/entities/partnerships.ts +309 -0
  163. package/src/entities/planning.ts +307 -0
  164. package/src/entities/projects.ts +360 -0
  165. package/src/entities/risk.ts +302 -0
  166. package/src/entities/sales.ts +1352 -0
  167. package/src/financials.ts +352 -0
  168. package/src/goals.ts +250 -0
  169. package/src/index.test.ts +336 -0
  170. package/src/index.ts +530 -0
  171. package/src/kpis.ts +275 -0
  172. package/src/metrics.ts +825 -0
  173. package/src/okrs.ts +325 -0
  174. package/src/organization.ts +909 -0
  175. package/src/process.ts +272 -0
  176. package/src/product.ts +178 -0
  177. package/src/queries.ts +767 -0
  178. package/src/roles.ts +686 -0
  179. package/src/service.ts +164 -0
  180. package/src/types.ts +493 -0
  181. package/src/vision.ts +88 -0
  182. package/src/workflow.ts +280 -0
  183. package/tsconfig.json +9 -0
  184. package/dist/loaders/index.d.ts +0 -174
  185. package/dist/loaders/index.js +0 -366
  186. package/dist/loaders/index.js.map +0 -1
  187. package/dist/schema/index.d.ts +0 -146
  188. package/dist/schema/index.js +0 -716
  189. package/dist/schema/index.js.map +0 -1
  190. package/dist/types-CJ9eGS_C.d.ts +0 -86
package/dist/index.js.map CHANGED
@@ -1 +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","../src/loaders/mdx.ts","../src/loaders/yaml.ts","../src/loaders/json.ts","../src/loaders/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","/**\n * MDX Loader\n *\n * Load business schemas from MDX files using the DSL parser from db.sb\n */\n\nimport { parseMDXAsync, extractNodesByName, type DSLNode } from 'db.sb'\nimport type { BusinessSchema, NounSchema, FieldSchema, LoaderOptions, BusinessDomain } from '../types'\n\n/**\n * Convert a DSLNode to a NounSchema\n */\nfunction nodeToNounSchema(node: DSLNode): NounSchema {\n const fields: FieldSchema[] = []\n\n if (node.children) {\n for (const child of node.children) {\n if (typeof child === 'object' && '__dsl' in child) {\n const fieldNode = child as DSLNode\n fields.push({\n name: fieldNode.name,\n type: fieldNode.type as any,\n required: fieldNode.props.required as boolean,\n unique: fieldNode.props.unique as boolean,\n config: fieldNode.props,\n })\n }\n }\n }\n\n return {\n slug: node.props.slug as string || node.name,\n group: node.props.group as string,\n titleField: node.props.titleField as string || node.props.useAsTitle as string,\n fields,\n }\n}\n\n/**\n * Load a business schema from MDX source\n *\n * @example\n * ```typescript\n * const mdx = `\n * <Business name=\"My Startup\">\n * <Noun name=\"Customer\" group=\"Success\">\n * <Name text required />\n * <Email />\n * <Status status=\"active|inactive|churned\" />\n * </Noun>\n * </Business>\n * `\n * const schema = await loadFromMDX(mdx)\n * ```\n */\nexport async function loadFromMDX(\n source: string,\n options: LoaderOptions = {}\n): Promise<BusinessSchema> {\n const ast = await parseMDXAsync(source, options.context || 'app')\n\n // Extract business name and version from root node\n const name = ast.props.name as string || 'unnamed'\n const version = ast.props.version as string || '1.0.0'\n const description = ast.props.description as string\n\n // Extract all Noun nodes\n const nounNodes = extractNodesByName(ast, 'noun')\n\n // Group nouns by their group property (which maps to domain)\n const domains: Partial<Record<BusinessDomain, NounSchema[]>> = {}\n\n for (const node of nounNodes) {\n const noun = nodeToNounSchema(node)\n const group = (noun.group?.toLowerCase() || 'business') as BusinessDomain\n\n if (!domains[group]) {\n domains[group] = []\n }\n domains[group]!.push(noun)\n }\n\n return {\n name,\n version,\n description,\n domains,\n }\n}\n\n/**\n * Load a single noun definition from MDX\n *\n * @example\n * ```typescript\n * const mdx = `\n * <Noun name=\"Customer\" group=\"Success\">\n * <Name text required />\n * <Email />\n * </Noun>\n * `\n * const noun = await loadNounFromMDX(mdx)\n * ```\n */\nexport async function loadNounFromMDX(\n source: string,\n options: LoaderOptions = {}\n): Promise<NounSchema> {\n const ast = await parseMDXAsync(source, options.context || 'noun')\n\n // The root should be a Noun node\n if (ast.name !== 'noun') {\n // Try to find a Noun node\n const nounNodes = extractNodesByName(ast, 'noun')\n if (nounNodes.length === 0) {\n throw new Error('No Noun definition found in MDX')\n }\n return nodeToNounSchema(nounNodes[0])\n }\n\n return nodeToNounSchema(ast)\n}\n\n/**\n * Load multiple noun definitions from MDX\n */\nexport async function loadNounsFromMDX(\n source: string,\n options: LoaderOptions = {}\n): Promise<NounSchema[]> {\n const ast = await parseMDXAsync(source, options.context || 'app')\n const nounNodes = extractNodesByName(ast, 'noun')\n return nounNodes.map(nodeToNounSchema)\n}\n","/**\n * YAML Loader\n *\n * Load business schemas from YAML files\n */\n\nimport YAML from 'yaml'\nimport type { BusinessSchema, NounSchema, FieldSchema, LoaderOptions, BusinessDomain, FieldShorthand } from '../types'\n\n/**\n * Parse a field shorthand into a FieldSchema\n *\n * Supports formats like:\n * - \"email\" -> { type: 'email' }\n * - \"text required\" -> { type: 'text', required: true }\n * - \"status:active|inactive\" -> { type: 'status', options: ['active', 'inactive'] }\n * - \"ref:customers\" -> { type: 'ref', to: 'customers' }\n */\nfunction parseFieldShorthand(name: string, value: FieldShorthand): FieldSchema {\n if (typeof value === 'object') {\n // Spread value first, then override with name to avoid duplicate key\n return { ...value, name } as FieldSchema\n }\n\n const parts = value.split(' ')\n const field: FieldSchema = { name, type: 'text' }\n\n for (const part of parts) {\n if (part === 'required') {\n field.required = true\n } else if (part === 'unique') {\n field.unique = true\n } else if (part.includes(':')) {\n const [type, options] = part.split(':')\n field.type = type as any\n\n if (type === 'status' || type === 'select') {\n field.options = options.split('|')\n } else if (type === 'ref') {\n // Use 'to' property for relationships (DSL uses 'to', Payload uses 'relationTo')\n field.to = options\n }\n } else {\n // It's a type name\n field.type = part as any\n }\n }\n\n return field\n}\n\n/**\n * Parse a YAML noun definition into a NounSchema\n */\nfunction parseNoun(data: any): NounSchema {\n const fields: FieldSchema[] = []\n\n if (data.fields) {\n if (Array.isArray(data.fields)) {\n // Fields as array of objects\n for (const field of data.fields) {\n fields.push(field as FieldSchema)\n }\n } else {\n // Fields as object (shorthand format)\n for (const [name, value] of Object.entries(data.fields)) {\n fields.push(parseFieldShorthand(name, value as FieldShorthand))\n }\n }\n }\n\n return {\n slug: data.slug || data.name?.toLowerCase().replace(/\\s+/g, '-'),\n group: data.group,\n titleField: data.titleField || data.useAsTitle,\n fields,\n }\n}\n\n/**\n * Load a business schema from YAML source\n *\n * @example\n * ```yaml\n * name: My Startup\n * version: 1.0.0\n *\n * domains:\n * success:\n * - name: Customer\n * titleField: name\n * fields:\n * name: text required\n * email: email\n * status: status:active|inactive|churned\n * healthScore: score\n * ```\n */\nexport function loadFromYAML(\n source: string,\n _options: LoaderOptions = {}\n): BusinessSchema {\n const data = YAML.parse(source)\n\n const schema: BusinessSchema = {\n name: data.name || 'unnamed',\n version: data.version || '1.0.0',\n description: data.description,\n domains: {},\n }\n\n if (data.domains) {\n for (const [domain, nouns] of Object.entries(data.domains)) {\n if (Array.isArray(nouns)) {\n schema.domains[domain as BusinessDomain] = nouns.map(parseNoun)\n }\n }\n }\n\n // Also support flat noun definitions under a 'nouns' key\n if (data.nouns) {\n for (const nounData of data.nouns) {\n const noun = parseNoun(nounData)\n const domain = (noun.group?.toLowerCase() || 'business') as BusinessDomain\n\n if (!schema.domains[domain]) {\n schema.domains[domain] = []\n }\n schema.domains[domain]!.push(noun)\n }\n }\n\n return schema\n}\n\n/**\n * Load a single noun from YAML\n */\nexport function loadNounFromYAML(\n source: string,\n _options: LoaderOptions = {}\n): NounSchema {\n const data = YAML.parse(source)\n return parseNoun(data)\n}\n\n/**\n * Load multiple nouns from YAML\n */\nexport function loadNounsFromYAML(\n source: string,\n _options: LoaderOptions = {}\n): NounSchema[] {\n const data = YAML.parse(source)\n\n if (Array.isArray(data)) {\n return data.map(parseNoun)\n }\n\n if (data.nouns) {\n return data.nouns.map(parseNoun)\n }\n\n // Single noun\n return [parseNoun(data)]\n}\n\n/**\n * Serialize a business schema to YAML\n */\nexport function toYAML(schema: BusinessSchema): string {\n return YAML.stringify({\n name: schema.name,\n version: schema.version,\n description: schema.description,\n domains: schema.domains,\n })\n}\n\n/**\n * Serialize a noun to YAML\n */\nexport function nounToYAML(noun: NounSchema): string {\n return YAML.stringify(noun)\n}\n","/**\n * JSON Loader\n *\n * Load business schemas from JSON files\n */\n\nimport type { BusinessSchema, NounSchema, FieldSchema, LoaderOptions, BusinessDomain, FieldShorthand } from '../types'\n\n/**\n * Parse a field shorthand into a FieldSchema\n *\n * Supports formats like:\n * - \"email\" -> { type: 'email' }\n * - \"text required\" -> { type: 'text', required: true }\n * - \"status:active|inactive\" -> { type: 'status', options: ['active', 'inactive'] }\n * - \"ref:customers\" -> { type: 'ref', to: 'customers' }\n */\nfunction parseFieldShorthand(name: string, value: FieldShorthand): FieldSchema {\n if (typeof value === 'object') {\n // Spread value first, then override with name to avoid duplicate key\n return { ...value, name } as FieldSchema\n }\n\n const parts = value.split(' ')\n const field: FieldSchema = { name, type: 'text' }\n\n for (const part of parts) {\n if (part === 'required') {\n field.required = true\n } else if (part === 'unique') {\n field.unique = true\n } else if (part.includes(':')) {\n const [type, options] = part.split(':')\n field.type = type as any\n\n if (type === 'status' || type === 'select') {\n field.options = options.split('|')\n } else if (type === 'ref') {\n // Use 'to' property for relationships (DSL uses 'to', Payload uses 'relationTo')\n field.to = options\n }\n } else {\n field.type = part as any\n }\n }\n\n return field\n}\n\n/**\n * Parse a JSON noun definition into a NounSchema\n */\nfunction parseNoun(data: any): NounSchema {\n const fields: FieldSchema[] = []\n\n if (data.fields) {\n if (Array.isArray(data.fields)) {\n for (const field of data.fields) {\n fields.push(field as FieldSchema)\n }\n } else {\n for (const [name, value] of Object.entries(data.fields)) {\n fields.push(parseFieldShorthand(name, value as FieldShorthand))\n }\n }\n }\n\n return {\n slug: data.slug || data.name?.toLowerCase().replace(/\\s+/g, '-'),\n group: data.group,\n titleField: data.titleField || data.useAsTitle,\n fields,\n }\n}\n\n/**\n * Load a business schema from JSON source\n *\n * @example\n * ```json\n * {\n * \"name\": \"My Startup\",\n * \"version\": \"1.0.0\",\n * \"domains\": {\n * \"success\": [\n * {\n * \"name\": \"Customer\",\n * \"titleField\": \"name\",\n * \"fields\": {\n * \"name\": \"text required\",\n * \"email\": \"email\",\n * \"status\": \"status:active|inactive|churned\"\n * }\n * }\n * ]\n * }\n * }\n * ```\n */\nexport function loadFromJSON(\n source: string,\n _options: LoaderOptions = {}\n): BusinessSchema {\n const data = JSON.parse(source)\n\n const schema: BusinessSchema = {\n name: data.name || 'unnamed',\n version: data.version || '1.0.0',\n description: data.description,\n domains: {},\n }\n\n if (data.domains) {\n for (const [domain, nouns] of Object.entries(data.domains)) {\n if (Array.isArray(nouns)) {\n schema.domains[domain as BusinessDomain] = nouns.map(parseNoun)\n }\n }\n }\n\n if (data.nouns) {\n for (const nounData of data.nouns) {\n const noun = parseNoun(nounData)\n const domain = (noun.group?.toLowerCase() || 'business') as BusinessDomain\n\n if (!schema.domains[domain]) {\n schema.domains[domain] = []\n }\n schema.domains[domain]!.push(noun)\n }\n }\n\n return schema\n}\n\n/**\n * Load a single noun from JSON\n */\nexport function loadNounFromJSON(\n source: string,\n _options: LoaderOptions = {}\n): NounSchema {\n const data = JSON.parse(source)\n return parseNoun(data)\n}\n\n/**\n * Load multiple nouns from JSON\n */\nexport function loadNounsFromJSON(\n source: string,\n _options: LoaderOptions = {}\n): NounSchema[] {\n const data = JSON.parse(source)\n\n if (Array.isArray(data)) {\n return data.map(parseNoun)\n }\n\n if (data.nouns) {\n return data.nouns.map(parseNoun)\n }\n\n return [parseNoun(data)]\n}\n\n/**\n * Serialize a business schema to JSON\n */\nexport function toJSON(schema: BusinessSchema, pretty = true): string {\n return JSON.stringify(\n {\n name: schema.name,\n version: schema.version,\n description: schema.description,\n domains: schema.domains,\n },\n null,\n pretty ? 2 : undefined\n )\n}\n\n/**\n * Serialize a noun to JSON\n */\nexport function nounToJSON(noun: NounSchema, pretty = true): string {\n return JSON.stringify(noun, null, pretty ? 2 : undefined)\n}\n","/**\n * Loaders Module\n *\n * Load business schemas from various formats (MDX, YAML, JSON)\n */\n\nimport type { BusinessSchema, NounSchema, LoaderOptions, LoadResult } from '../types'\n\n// Export all loader functions\nexport * from './mdx'\nexport * from './yaml'\nexport * from './json'\n\n// Import for unified loader\nimport { loadFromMDX, loadNounFromMDX, loadNounsFromMDX } from './mdx'\nimport { loadFromYAML, loadNounFromYAML, loadNounsFromYAML, toYAML, nounToYAML } from './yaml'\nimport { loadFromJSON, loadNounFromJSON, loadNounsFromJSON, toJSON, nounToJSON } from './json'\n\n/**\n * Detect format from source content\n */\nfunction detectFormat(source: string): 'mdx' | 'yaml' | 'json' {\n const trimmed = source.trim()\n\n // JSON starts with { or [\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return 'json'\n }\n\n // MDX contains JSX tags\n if (trimmed.includes('<') && trimmed.includes('>')) {\n return 'mdx'\n }\n\n // Default to YAML\n return 'yaml'\n}\n\n/**\n * Load a business schema from any supported format\n *\n * Automatically detects the format from the source content.\n */\nexport async function load(\n source: string,\n options: LoaderOptions & { format?: 'mdx' | 'yaml' | 'json' } = {}\n): Promise<LoadResult> {\n const format = options.format || detectFormat(source)\n\n let schema: BusinessSchema\n\n switch (format) {\n case 'mdx':\n schema = await loadFromMDX(source, options)\n break\n case 'yaml':\n schema = loadFromYAML(source, options)\n break\n case 'json':\n schema = loadFromJSON(source, options)\n break\n default:\n throw new Error(`Unsupported format: ${format}`)\n }\n\n return {\n schema,\n format,\n }\n}\n\n/**\n * Load a single noun from any supported format\n */\nexport async function loadNoun(\n source: string,\n options: LoaderOptions & { format?: 'mdx' | 'yaml' | 'json' } = {}\n): Promise<NounSchema> {\n const format = options.format || detectFormat(source)\n\n switch (format) {\n case 'mdx':\n return loadNounFromMDX(source, options)\n case 'yaml':\n return loadNounFromYAML(source, options)\n case 'json':\n return loadNounFromJSON(source, options)\n default:\n throw new Error(`Unsupported format: ${format}`)\n }\n}\n\n/**\n * Load multiple nouns from any supported format\n */\nexport async function loadNouns(\n source: string,\n options: LoaderOptions & { format?: 'mdx' | 'yaml' | 'json' } = {}\n): Promise<NounSchema[]> {\n const format = options.format || detectFormat(source)\n\n switch (format) {\n case 'mdx':\n return loadNounsFromMDX(source, options)\n case 'yaml':\n return loadNounsFromYAML(source, options)\n case 'json':\n return loadNounsFromJSON(source, options)\n default:\n throw new Error(`Unsupported format: ${format}`)\n }\n}\n\n/**\n * Serialize a business schema to a specific format\n */\nexport function serialize(\n schema: BusinessSchema,\n format: 'yaml' | 'json' = 'yaml'\n): string {\n switch (format) {\n case 'yaml':\n return toYAML(schema)\n case 'json':\n return toJSON(schema)\n default:\n throw new Error(`Unsupported format: ${format}`)\n }\n}\n\n/**\n * Serialize a noun to a specific format\n */\nexport function serializeNoun(\n noun: NounSchema,\n format: 'yaml' | 'json' = 'yaml'\n): string {\n switch (format) {\n case 'yaml':\n return nounToYAML(noun)\n case 'json':\n return nounToJSON(noun)\n default:\n throw new Error(`Unsupported format: ${format}`)\n }\n}\n"],"mappings":"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","names":["parseFieldShorthand","parseNoun"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/kpis.d.ts ADDED
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Key Performance Indicators (KPIs) management
3
+ */
4
+ import type { KPIDefinition, TimePeriod } from './types.js';
5
+ /**
6
+ * Define Key Performance Indicators for tracking business metrics
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const businessKPIs = kpis([
11
+ * {
12
+ * name: 'Monthly Recurring Revenue',
13
+ * description: 'Total predictable revenue per month',
14
+ * category: 'financial',
15
+ * unit: 'USD',
16
+ * target: 100000,
17
+ * current: 85000,
18
+ * frequency: 'monthly',
19
+ * dataSource: 'Billing System',
20
+ * formula: 'SUM(active_subscriptions.price)',
21
+ * },
22
+ * {
23
+ * name: 'Customer Churn Rate',
24
+ * description: 'Percentage of customers lost per month',
25
+ * category: 'customer',
26
+ * unit: 'percent',
27
+ * target: 5,
28
+ * current: 3.2,
29
+ * frequency: 'monthly',
30
+ * dataSource: 'CRM',
31
+ * formula: '(churned_customers / total_customers) * 100',
32
+ * },
33
+ * {
34
+ * name: 'Net Promoter Score',
35
+ * description: 'Customer satisfaction and loyalty metric',
36
+ * category: 'customer',
37
+ * unit: 'score',
38
+ * target: 50,
39
+ * current: 48,
40
+ * frequency: 'quarterly',
41
+ * dataSource: 'Survey Platform',
42
+ * },
43
+ * ])
44
+ * ```
45
+ */
46
+ export declare function kpis(definitions: KPIDefinition[]): KPIDefinition[];
47
+ /**
48
+ * Define a single KPI
49
+ */
50
+ export declare function kpi(definition: KPIDefinition): KPIDefinition;
51
+ /**
52
+ * Calculate KPI achievement percentage
53
+ */
54
+ export declare function calculateAchievement(kpi: KPIDefinition): number;
55
+ /**
56
+ * Check if KPI meets target
57
+ */
58
+ export declare function meetsTarget(kpi: KPIDefinition): boolean;
59
+ /**
60
+ * Update KPI current value
61
+ */
62
+ export declare function updateCurrent(kpi: KPIDefinition, value: number): KPIDefinition;
63
+ /**
64
+ * Update KPI target
65
+ */
66
+ export declare function updateTarget(kpi: KPIDefinition, target: number): KPIDefinition;
67
+ /**
68
+ * Get KPIs by category
69
+ */
70
+ export declare function getKPIsByCategory(kpis: KPIDefinition[], category: KPIDefinition['category']): KPIDefinition[];
71
+ /**
72
+ * Get KPIs by frequency
73
+ */
74
+ export declare function getKPIsByFrequency(kpis: KPIDefinition[], frequency: TimePeriod): KPIDefinition[];
75
+ /**
76
+ * Get KPIs that meet their targets
77
+ */
78
+ export declare function getKPIsOnTarget(kpis: KPIDefinition[]): KPIDefinition[];
79
+ /**
80
+ * Get KPIs that don't meet their targets
81
+ */
82
+ export declare function getKPIsOffTarget(kpis: KPIDefinition[]): KPIDefinition[];
83
+ /**
84
+ * Calculate overall KPI health score (0-100)
85
+ */
86
+ export declare function calculateHealthScore(kpis: KPIDefinition[]): number;
87
+ /**
88
+ * Group KPIs by category
89
+ */
90
+ export declare function groupByCategory(kpis: KPIDefinition[]): Map<string, KPIDefinition[]>;
91
+ /**
92
+ * Calculate variance from target
93
+ */
94
+ export declare function calculateVariance(kpi: KPIDefinition): number;
95
+ /**
96
+ * Calculate variance percentage from target
97
+ */
98
+ export declare function calculateVariancePercentage(kpi: KPIDefinition): number;
99
+ /**
100
+ * Format KPI value with unit
101
+ */
102
+ export declare function formatValue(kpi: KPIDefinition, value?: number): string;
103
+ /**
104
+ * Compare KPI performance over time
105
+ */
106
+ export declare function comparePerformance(current: KPIDefinition, previous: KPIDefinition): {
107
+ change: number;
108
+ changePercent: number;
109
+ improved: boolean;
110
+ };
111
+ /**
112
+ * Validate KPI definitions
113
+ */
114
+ export declare function validateKPIs(kpis: KPIDefinition[]): {
115
+ valid: boolean;
116
+ errors: string[];
117
+ };
118
+ //# sourceMappingURL=kpis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpis.d.ts","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAElE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,aAAa,CAE5D;AAkBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAI/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAavD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAK9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAK9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,aAAa,EAAE,EACrB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GAClC,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,UAAU,GAAG,aAAa,EAAE,CAEhG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAKlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAUnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAItE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,aAAa,GACtB;IACD,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAiBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqBxF"}
package/dist/kpis.js ADDED
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Key Performance Indicators (KPIs) management
3
+ */
4
+ /**
5
+ * Define Key Performance Indicators for tracking business metrics
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const businessKPIs = kpis([
10
+ * {
11
+ * name: 'Monthly Recurring Revenue',
12
+ * description: 'Total predictable revenue per month',
13
+ * category: 'financial',
14
+ * unit: 'USD',
15
+ * target: 100000,
16
+ * current: 85000,
17
+ * frequency: 'monthly',
18
+ * dataSource: 'Billing System',
19
+ * formula: 'SUM(active_subscriptions.price)',
20
+ * },
21
+ * {
22
+ * name: 'Customer Churn Rate',
23
+ * description: 'Percentage of customers lost per month',
24
+ * category: 'customer',
25
+ * unit: 'percent',
26
+ * target: 5,
27
+ * current: 3.2,
28
+ * frequency: 'monthly',
29
+ * dataSource: 'CRM',
30
+ * formula: '(churned_customers / total_customers) * 100',
31
+ * },
32
+ * {
33
+ * name: 'Net Promoter Score',
34
+ * description: 'Customer satisfaction and loyalty metric',
35
+ * category: 'customer',
36
+ * unit: 'score',
37
+ * target: 50,
38
+ * current: 48,
39
+ * frequency: 'quarterly',
40
+ * dataSource: 'Survey Platform',
41
+ * },
42
+ * ])
43
+ * ```
44
+ */
45
+ export function kpis(definitions) {
46
+ return definitions.map(kpi => validateAndNormalizeKPI(kpi));
47
+ }
48
+ /**
49
+ * Define a single KPI
50
+ */
51
+ export function kpi(definition) {
52
+ return validateAndNormalizeKPI(definition);
53
+ }
54
+ /**
55
+ * Validate and normalize a KPI definition
56
+ */
57
+ function validateAndNormalizeKPI(kpi) {
58
+ if (!kpi.name) {
59
+ throw new Error('KPI name is required');
60
+ }
61
+ return {
62
+ ...kpi,
63
+ category: kpi.category || 'operations',
64
+ frequency: kpi.frequency || 'monthly',
65
+ metadata: kpi.metadata || {},
66
+ };
67
+ }
68
+ /**
69
+ * Calculate KPI achievement percentage
70
+ */
71
+ export function calculateAchievement(kpi) {
72
+ if (kpi.target === undefined || kpi.current === undefined)
73
+ return 0;
74
+ if (kpi.target === 0)
75
+ return 100;
76
+ return (kpi.current / kpi.target) * 100;
77
+ }
78
+ /**
79
+ * Check if KPI meets target
80
+ */
81
+ export function meetsTarget(kpi) {
82
+ if (kpi.target === undefined || kpi.current === undefined)
83
+ return false;
84
+ // For metrics where lower is better (like churn rate)
85
+ const lowerIsBetter = ['churn', 'cost', 'time', 'error', 'downtime'].some(term => kpi.name.toLowerCase().includes(term));
86
+ if (lowerIsBetter) {
87
+ return kpi.current <= kpi.target;
88
+ }
89
+ return kpi.current >= kpi.target;
90
+ }
91
+ /**
92
+ * Update KPI current value
93
+ */
94
+ export function updateCurrent(kpi, value) {
95
+ return {
96
+ ...kpi,
97
+ current: value,
98
+ };
99
+ }
100
+ /**
101
+ * Update KPI target
102
+ */
103
+ export function updateTarget(kpi, target) {
104
+ return {
105
+ ...kpi,
106
+ target,
107
+ };
108
+ }
109
+ /**
110
+ * Get KPIs by category
111
+ */
112
+ export function getKPIsByCategory(kpis, category) {
113
+ return kpis.filter(k => k.category === category);
114
+ }
115
+ /**
116
+ * Get KPIs by frequency
117
+ */
118
+ export function getKPIsByFrequency(kpis, frequency) {
119
+ return kpis.filter(k => k.frequency === frequency);
120
+ }
121
+ /**
122
+ * Get KPIs that meet their targets
123
+ */
124
+ export function getKPIsOnTarget(kpis) {
125
+ return kpis.filter(meetsTarget);
126
+ }
127
+ /**
128
+ * Get KPIs that don't meet their targets
129
+ */
130
+ export function getKPIsOffTarget(kpis) {
131
+ return kpis.filter(kpi => !meetsTarget(kpi));
132
+ }
133
+ /**
134
+ * Calculate overall KPI health score (0-100)
135
+ */
136
+ export function calculateHealthScore(kpis) {
137
+ if (kpis.length === 0)
138
+ return 0;
139
+ const onTarget = getKPIsOnTarget(kpis).length;
140
+ return (onTarget / kpis.length) * 100;
141
+ }
142
+ /**
143
+ * Group KPIs by category
144
+ */
145
+ export function groupByCategory(kpis) {
146
+ const groups = new Map();
147
+ for (const kpi of kpis) {
148
+ const category = kpi.category || 'other';
149
+ const existing = groups.get(category) || [];
150
+ groups.set(category, [...existing, kpi]);
151
+ }
152
+ return groups;
153
+ }
154
+ /**
155
+ * Calculate variance from target
156
+ */
157
+ export function calculateVariance(kpi) {
158
+ if (kpi.target === undefined || kpi.current === undefined)
159
+ return 0;
160
+ return kpi.current - kpi.target;
161
+ }
162
+ /**
163
+ * Calculate variance percentage from target
164
+ */
165
+ export function calculateVariancePercentage(kpi) {
166
+ if (kpi.target === undefined || kpi.current === undefined)
167
+ return 0;
168
+ if (kpi.target === 0)
169
+ return 0;
170
+ return ((kpi.current - kpi.target) / kpi.target) * 100;
171
+ }
172
+ /**
173
+ * Format KPI value with unit
174
+ */
175
+ export function formatValue(kpi, value) {
176
+ const val = value ?? kpi.current;
177
+ if (val === undefined)
178
+ return 'N/A';
179
+ const formatted = val.toLocaleString(undefined, {
180
+ minimumFractionDigits: 0,
181
+ maximumFractionDigits: 2,
182
+ });
183
+ if (!kpi.unit)
184
+ return formatted;
185
+ switch (kpi.unit.toLowerCase()) {
186
+ case 'usd':
187
+ case 'eur':
188
+ case 'gbp':
189
+ return `$${formatted}`;
190
+ case 'percent':
191
+ case '%':
192
+ return `${formatted}%`;
193
+ default:
194
+ return `${formatted} ${kpi.unit}`;
195
+ }
196
+ }
197
+ /**
198
+ * Compare KPI performance over time
199
+ */
200
+ export function comparePerformance(current, previous) {
201
+ if (current.current === undefined || previous.current === undefined) {
202
+ return { change: 0, changePercent: 0, improved: false };
203
+ }
204
+ const change = current.current - previous.current;
205
+ const changePercent = previous.current !== 0 ? (change / previous.current) * 100 : 0;
206
+ // Determine if change is an improvement
207
+ const lowerIsBetter = ['churn', 'cost', 'time', 'error', 'downtime'].some(term => current.name.toLowerCase().includes(term));
208
+ const improved = lowerIsBetter ? change < 0 : change > 0;
209
+ return { change, changePercent, improved };
210
+ }
211
+ /**
212
+ * Validate KPI definitions
213
+ */
214
+ export function validateKPIs(kpis) {
215
+ const errors = [];
216
+ for (const kpi of kpis) {
217
+ if (!kpi.name) {
218
+ errors.push('KPI name is required');
219
+ }
220
+ if (kpi.target !== undefined && kpi.target < 0) {
221
+ errors.push(`KPI ${kpi.name} target cannot be negative`);
222
+ }
223
+ if (kpi.current !== undefined && kpi.current < 0) {
224
+ errors.push(`KPI ${kpi.name} current value cannot be negative`);
225
+ }
226
+ }
227
+ return {
228
+ valid: errors.length === 0,
229
+ errors,
230
+ };
231
+ }
232
+ //# sourceMappingURL=kpis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpis.js","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"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"}