@happyvertical/smrt-products 0.55.7 → 0.55.9

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 (32) hide show
  1. package/dist/lib/chunks/{ProductAssetCollection-BZBV2HDk.js → ProductAssetCollection-pTm67_Vn.js} +3 -3
  2. package/dist/lib/chunks/{ProductAssetCollection-BZBV2HDk.js.map → ProductAssetCollection-pTm67_Vn.js.map} +1 -1
  3. package/dist/lib/chunks/{ProductCollection-BvRm14q5.js → ProductCollection-BJXVIE6A.js} +2 -2
  4. package/dist/lib/chunks/{ProductCollection-BvRm14q5.js.map → ProductCollection-BJXVIE6A.js.map} +1 -1
  5. package/dist/lib/chunks/{Sku-BN7ydk5h.js → Sku-CdhhTtjd.js} +23 -6
  6. package/dist/lib/chunks/Sku-CdhhTtjd.js.map +1 -0
  7. package/dist/lib/chunks/__smrt-register__-DsDATBUg.js +6 -0
  8. package/dist/lib/chunks/__smrt-register__-DsDATBUg.js.map +1 -0
  9. package/dist/lib/chunks/{collections-CqifjBOG.js → collections-Coxcp5DF.js} +5 -5
  10. package/dist/lib/chunks/{collections-CqifjBOG.js.map → collections-Coxcp5DF.js.map} +1 -1
  11. package/dist/lib/chunks/{generated-CUnONwMT.js → generated-Qqhe2UtP.js} +2 -2
  12. package/dist/lib/chunks/{generated-CUnONwMT.js.map → generated-Qqhe2UtP.js.map} +1 -1
  13. package/dist/lib/chunks/models-DX4BouL2.js +2 -0
  14. package/dist/lib/collections.js +3 -3
  15. package/dist/lib/generated.js +1 -1
  16. package/dist/lib/index.js +163 -9
  17. package/dist/lib/index.js.map +1 -1
  18. package/dist/lib/lib/index.d.ts +1 -0
  19. package/dist/lib/lib/index.d.ts.map +1 -1
  20. package/dist/lib/lib/models/Product.d.ts.map +1 -1
  21. package/dist/lib/lib/models/ProductVariant.d.ts.map +1 -1
  22. package/dist/lib/lib/models/Sku.d.ts.map +1 -1
  23. package/dist/lib/lib/recipes.d.ts +211 -0
  24. package/dist/lib/lib/recipes.d.ts.map +1 -0
  25. package/dist/lib/manifest.json +335 -13
  26. package/dist/lib/models.js +2 -2
  27. package/dist/lib/smrt-knowledge.json +310 -16
  28. package/package.json +14 -14
  29. package/dist/lib/chunks/Sku-BN7ydk5h.js.map +0 -1
  30. package/dist/lib/chunks/__smrt-register__-DTpJWzEc.js +0 -6
  31. package/dist/lib/chunks/__smrt-register__-DTpJWzEc.js.map +0 -1
  32. package/dist/lib/chunks/models-A3KLrfkP.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/client.ts","../../src/mcp.ts","../../src/server.ts","../../src/index.ts"],"sourcesContent":["/**\n * SMRT Template Client\n *\n * Demonstrates auto-generated TypeScript client from SMRT objects.\n * No manual client code needed - everything is generated from @smrt() decorated classes.\n */\n\nimport createClient from '@happyvertical/smrt-virt-client'; // Virtual module from Vite plugin\nimport type { CategoryData, ProductData } from '@happyvertical/smrt-virt-types'; // Virtual module from Vite plugin\n\nasync function demonstrateClient() {\n console.log('🔌 Creating auto-generated API client...');\n\n // Create client pointing to local server\n const api = createClient('http://localhost:3000/api/v1');\n\n try {\n console.log('\\n📦 Testing Product operations:');\n\n // Create a product\n const newProduct: Partial<ProductData> = {\n name: 'Demo Product',\n description: 'A product created by the auto-generated client',\n price: 29.99,\n inStock: true,\n tags: ['demo', 'auto-generated'],\n };\n\n console.log('Creating product:', newProduct);\n const createdProduct = await api.products.create(newProduct);\n console.log('✅ Created:', createdProduct);\n\n // List products\n console.log('\\n📋 Listing all products:');\n const products = await api.products.list();\n console.log('Products:', products);\n\n // Get specific product\n if (createdProduct?.id) {\n console.log(`\\n🔍 Getting product ${createdProduct.id}:`);\n const product = await api.products.get(createdProduct.id);\n console.log('Product:', product);\n\n // Update product\n console.log('\\n✏️ Updating product:');\n const updatedProduct = await api.products.update(createdProduct.id, {\n price: 39.99,\n description: 'Updated description',\n });\n console.log('Updated:', updatedProduct);\n }\n\n console.log('\\n🏷️ Testing Category operations:');\n\n // Create a category\n const newCategory: Partial<CategoryData> = {\n name: 'Demo Category',\n description: 'A category created by the auto-generated client',\n active: true,\n };\n\n console.log('Creating category:', newCategory);\n const createdCategory = await api.categories.create(newCategory);\n console.log('✅ Created:', createdCategory);\n\n // List categories\n console.log('\\n📋 Listing all categories:');\n const categories = await api.categories.list();\n console.log('Categories:', categories);\n } catch (error) {\n console.error('❌ Client error:', error);\n }\n}\n\n// Run demonstration if called directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n demonstrateClient().catch(console.error);\n}\n\nexport { demonstrateClient };\n","/**\n * MCP Server Generator Script for @have/products\n *\n * This script generates a complete MCP server with stdio transport\n * from the Product and Category SMRT objects.\n *\n * Run with: npm run generate:mcp\n */\n\nimport { MCPGenerator } from '@happyvertical/smrt-core/generators/mcp';\n\n/**\n * Generate MCP server for products package\n */\nasync function generateMCPServer() {\n console.log('🤖 Generating MCP Server for @have/products...\\n');\n\n // Create generator instance\n const generator = new MCPGenerator(\n {\n name: 'products-mcp-server',\n version: '1.0.0',\n description: 'MCP server exposing Product and Category SMRT objects',\n },\n {\n // Database and AI context will be configured via environment variables in generated server\n // DATABASE_URL - for database connection\n // OPENAI_API_KEY or ANTHROPIC_API_KEY - for AI client\n },\n );\n\n // Generate tools to preview what will be available\n const tools = await generator.generateTools();\n console.log(`📝 Discovered ${tools.length} tools from SMRT objects:`);\n tools.forEach((tool) => {\n console.log(` - ${tool.name}: ${tool.description}`);\n });\n console.log();\n\n // Generate complete MCP server with stdio transport\n await generator.generateServer({\n outputPath: 'dist/mcp-server.js',\n serverName: 'products-mcp',\n debug: false, // Set to true for debug logging\n generateClaudeConfigFile: true,\n generateReadme: true,\n });\n\n console.log('\\n✅ MCP Server generation complete!');\n console.log('\\n📚 Next steps:');\n console.log(' 1. Build the server: npm run build');\n console.log(\n ' 2. Add to Claude Desktop config (see dist/claude-config.example.json)',\n );\n console.log(' 3. Restart Claude Desktop');\n console.log(' 4. Use the tools in Claude Code!\\n');\n}\n\n// Run if executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n generateMCPServer().catch((error) => {\n console.error('❌ MCP server generation failed:', error);\n process.exit(1);\n });\n}\n\nexport { generateMCPServer };\n","/**\n * SMRT Template Server\n *\n * Demonstrates auto-generated REST API from SMRT objects.\n * No manual route definitions needed - everything is generated from @smrt() decorated classes.\n */\n\nimport { startRestServer } from '@happyvertical/smrt-core';\nimport { Category } from './lib/models/Category';\nimport { Product } from './lib/models/Product';\n\n/**\n * Reference auth stub (#1540). Generated routes are FAIL-CLOSED: without an\n * `authMiddleware` (or `@smrt({ api: { public: true } })` on the model) every\n * route returns 401. This stub demonstrates the contract — replace it with your\n * real auth (verify a session cookie / bearer token, attach the principal).\n *\n * Returning the (optionally augmented) request allows the call; returning a\n * `Response` rejects it.\n */\nfunction demoAuthMiddleware(_objectName: string, _action: string) {\n return async (req: Request): Promise<Request | Response> => {\n const token = req.headers.get('authorization');\n if (!token) {\n return new Response(\n JSON.stringify({ error: 'Authentication required' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n },\n );\n }\n // TODO: verify `token` and attach the resolved principal to the request.\n return req;\n };\n}\n\nasync function startServer() {\n console.log('🚀 Starting SMRT Template Server...');\n\n // Start server with registered SMRT objects. Secure defaults (#1540): bind to\n // loopback, an explicit CORS origin allowlist (never `*`), and a fail-closed\n // auth middleware.\n const shutdown = await startRestServer(\n [Product, Category], // SMRT objects to generate API for\n {}, // context\n {\n port: 3000,\n hostname: '127.0.0.1',\n basePath: '/api/v1',\n enableCors: true,\n allowedOrigins: ['http://localhost:3000'],\n authMiddleware: demoAuthMiddleware,\n },\n );\n\n console.log('✅ Server ready!');\n console.log('📡 REST API: http://localhost:3000/api/v1');\n console.log('📚 Endpoints:');\n console.log(' GET /api/v1/products - List products');\n console.log(' POST /api/v1/products - Create product');\n console.log(' GET /api/v1/products/:id - Get product');\n console.log(' PUT /api/v1/products/:id - Update product');\n console.log(' GET /api/v1/categories - List categories');\n console.log(' POST /api/v1/categories - Create category');\n\n console.log('\\n💡 Try these endpoints (auth required — send a token):');\n console.log(\n ' curl http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl http://localhost:3000/api/v1/categories -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl -X POST http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\" -H \"Content-Type: application/json\" -d \\'{\"name\":\"Test Product\",\"price\":29.99}\\'',\n );\n\n return { shutdown };\n}\n\n// Start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startServer().catch(console.error);\n}\n\nexport { startServer };\n","/**\n * SMRT Template: Triple-Purpose Export\n *\n * This is the main entry point when this template is used as an NPM library.\n * It re-exports everything from the lib directory for easy consumption.\n *\n * Usage examples:\n *\n * // Import models\n * import { Product, Category } from '@happyvertical/core-template';\n *\n * // Import UI components\n * import { ProductCard, ProductForm } from '@happyvertical/core-template/components';\n *\n * // Import stores\n * import { ProductStoreClass } from '@happyvertical/core-template/stores';\n */\n\n// Self-register this package's manifest before any @smrt() decorator fires\n// downstream. Must come first so the side effect runs ahead of the class\n// module loads below. See __smrt-register__.ts for issue #1132 context.\nimport './__smrt-register__.js';\n\nexport { demonstrateClient } from './client';\n// Re-export everything from the lib directory\nexport * from './lib/index';\nexport { generateMCPServer } from './mcp';\n// Legacy exports for backward compatibility\nexport { startServer } from './server';\n\n/**\n * Start all services for demonstration (legacy function)\n */\nexport async function startAll() {\n const { startServer } = await import('./server');\n const { generateMCPServer } = await import('./mcp');\n\n console.log('🚀 Starting SMRT Template - Full Demo\\n');\n\n // Start REST API server\n console.log('1️⃣ Starting REST API...');\n const server = await startServer();\n\n // Start MCP server\n console.log('\\n2️⃣ Starting MCP Server...');\n const mcp = await generateMCPServer();\n\n console.log('\\n✨ All services running!');\n console.log('\\n🎯 What was auto-generated:');\n console.log(' • REST endpoints for Product and Category');\n console.log(' • TypeScript client with full type safety');\n console.log(' • MCP tools for AI model integration');\n console.log(' • OpenAPI/Swagger documentation');\n console.log(' • Live reloading during development');\n\n console.log('\\n📝 Next steps:');\n console.log(' • Modify src/lib/models/ to add new fields');\n console.log(' • Add new @smrt() classes to auto-generate more APIs');\n console.log(' • Run bun run dev to see live updates');\n\n return { server, mcp };\n}\n\n// Auto-start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startAll().catch(console.error);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/client.ts","../../src/lib/recipes.ts","../../src/mcp.ts","../../src/server.ts","../../src/index.ts"],"sourcesContent":["/**\n * SMRT Template Client\n *\n * Demonstrates auto-generated TypeScript client from SMRT objects.\n * No manual client code needed - everything is generated from @smrt() decorated classes.\n */\n\nimport createClient from '@happyvertical/smrt-virt-client'; // Virtual module from Vite plugin\nimport type { CategoryData, ProductData } from '@happyvertical/smrt-virt-types'; // Virtual module from Vite plugin\n\nasync function demonstrateClient() {\n console.log('🔌 Creating auto-generated API client...');\n\n // Create client pointing to local server\n const api = createClient('http://localhost:3000/api/v1');\n\n try {\n console.log('\\n📦 Testing Product operations:');\n\n // Create a product\n const newProduct: Partial<ProductData> = {\n name: 'Demo Product',\n description: 'A product created by the auto-generated client',\n price: 29.99,\n inStock: true,\n tags: ['demo', 'auto-generated'],\n };\n\n console.log('Creating product:', newProduct);\n const createdProduct = await api.products.create(newProduct);\n console.log('✅ Created:', createdProduct);\n\n // List products\n console.log('\\n📋 Listing all products:');\n const products = await api.products.list();\n console.log('Products:', products);\n\n // Get specific product\n if (createdProduct?.id) {\n console.log(`\\n🔍 Getting product ${createdProduct.id}:`);\n const product = await api.products.get(createdProduct.id);\n console.log('Product:', product);\n\n // Update product\n console.log('\\n✏️ Updating product:');\n const updatedProduct = await api.products.update(createdProduct.id, {\n price: 39.99,\n description: 'Updated description',\n });\n console.log('Updated:', updatedProduct);\n }\n\n console.log('\\n🏷️ Testing Category operations:');\n\n // Create a category\n const newCategory: Partial<CategoryData> = {\n name: 'Demo Category',\n description: 'A category created by the auto-generated client',\n active: true,\n };\n\n console.log('Creating category:', newCategory);\n const createdCategory = await api.categories.create(newCategory);\n console.log('✅ Created:', createdCategory);\n\n // List categories\n console.log('\\n📋 Listing all categories:');\n const categories = await api.categories.list();\n console.log('Categories:', categories);\n } catch (error) {\n console.error('❌ Client error:', error);\n }\n}\n\n// Run demonstration if called directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n demonstrateClient().catch(console.error);\n}\n\nexport { demonstrateClient };\n","/**\n * Declared recipes for smrt-products (#3590, #3604): user-facing units of\n * functionality an app or agent can pick instead of the whole package.\n * The scanner reads these statics into the `recipes` array of `manifest.json`\n * and `smrt-knowledge.json`; nothing here runs at that point.\n *\n * @packageDocumentation\n */\n\nimport { SmrtRecipe } from '@happyvertical/smrt-core';\nimport { Product } from './models/Product.js';\nimport { ProductVariant } from './models/ProductVariant.js';\nimport { Sku } from './models/Sku.js';\n\n/** Simple products: Items with a name, a price and a description. */\nexport class SimpleProductsRecipe extends SmrtRecipe {\n static id = 'products.simple';\n static help = './simple.recipe.md';\n static label = 'Simple products';\n static summary = 'Items with a name, a price and a description.';\n static synonyms = ['items', 'goods', 'catalog'];\n static group = {\n id: 'products',\n label: 'Products',\n summary:\n 'Sell goods: simple items, or clothing that comes in sizes and colors.',\n };\n static section = {\n id: 'catalog',\n label: 'Catalog',\n icon: 'package',\n description: 'Products, ingredients and the stock you hold.',\n };\n static models = [Product];\n static nav = [\n {\n label: 'Products',\n model: Product,\n icon: 'package',\n description: 'What you sell, with prices and details.',\n },\n ];\n static options = {\n Product: {\n fields: {\n productType: { visibility: 'hidden' },\n category: { visibility: 'hidden' },\n manufacturer: { visibility: 'hidden' },\n model: { visibility: 'hidden' },\n inStock: { visibility: 'hidden' },\n specifications: { visibility: 'hidden' },\n tags: { visibility: 'hidden' },\n },\n },\n } as const;\n}\n\n/** Clothing: Products that come in sizes and colors, with a stock-keeping unit for each combination. */\nexport class ClothingProductsRecipe extends SmrtRecipe {\n static id = 'products.clothing';\n static help = './clothing.recipe.md';\n static label = 'Clothing';\n static summary =\n 'Products that come in sizes and colors, with a stock-keeping unit for each combination.';\n static synonyms = ['apparel', 'garments', 'sizes', 'variants'];\n static group = {\n id: 'products',\n label: 'Products',\n summary:\n 'Sell goods: simple items, or clothing that comes in sizes and colors.',\n };\n static section = {\n id: 'catalog',\n label: 'Catalog',\n icon: 'package',\n description: 'Products, ingredients and the stock you hold.',\n };\n static models = [Product, ProductVariant, Sku];\n static nav = [\n {\n label: 'Products',\n model: Product,\n icon: 'package',\n description: 'What you sell, with prices and details.',\n },\n ];\n static options = {\n Product: {\n fields: {\n productType: { visibility: 'hidden' },\n category: { visibility: 'hidden' },\n manufacturer: { visibility: 'hidden' },\n model: { visibility: 'hidden' },\n inStock: { visibility: 'hidden' },\n specifications: { visibility: 'hidden' },\n tags: { visibility: 'hidden' },\n description: { visibility: 'hidden' },\n },\n },\n ProductVariant: {\n fields: {\n label: { visibility: 'hidden' },\n sortOrder: { visibility: 'hidden' },\n },\n },\n Sku: {\n fields: {\n barcode: { visibility: 'hidden' },\n name: { visibility: 'hidden' },\n weightGrams: { visibility: 'hidden' },\n parentSkuId: { visibility: 'hidden' },\n active: { visibility: 'hidden' },\n },\n },\n } as const;\n}\n\n/** Ingredients: Things you buy in to make what you sell, kept as products of the material kind with their own list. */\nexport class IngredientsRecipe extends SmrtRecipe {\n static id = 'products.ingredients';\n static help = './ingredients.recipe.md';\n static label = 'Ingredients';\n static summary =\n 'Things you buy in to make what you sell, kept as products of the material kind with their own list.';\n static synonyms = ['materials', 'raw materials', 'supplies', 'stock items'];\n static group = {\n id: 'products',\n label: 'Products',\n summary:\n 'Sell goods: simple items, or clothing that comes in sizes and colors.',\n };\n static section = {\n id: 'catalog',\n label: 'Catalog',\n icon: 'package',\n description: 'Products, ingredients and the stock you hold.',\n };\n static models = [Product];\n static nav = [\n {\n label: 'Ingredients',\n model: Product,\n icon: 'package',\n description: 'What you buy to make what you sell, with what each costs.',\n key: 'ingredients',\n noun: 'ingredient',\n filter: { field: 'productType', value: 'material' },\n },\n ];\n static requires = ['products.simple'];\n static options = {\n Product: {\n fields: {\n productType: { visibility: 'hidden' },\n category: { visibility: 'hidden' },\n manufacturer: { visibility: 'hidden' },\n model: { visibility: 'hidden' },\n inStock: { visibility: 'hidden' },\n specifications: { visibility: 'hidden' },\n tags: { visibility: 'hidden' },\n },\n },\n } as const;\n}\n","/**\n * MCP Server Generator Script for @have/products\n *\n * This script generates a complete MCP server with stdio transport\n * from the Product and Category SMRT objects.\n *\n * Run with: npm run generate:mcp\n */\n\nimport { MCPGenerator } from '@happyvertical/smrt-core/generators/mcp';\n\n/**\n * Generate MCP server for products package\n */\nasync function generateMCPServer() {\n console.log('🤖 Generating MCP Server for @have/products...\\n');\n\n // Create generator instance\n const generator = new MCPGenerator(\n {\n name: 'products-mcp-server',\n version: '1.0.0',\n description: 'MCP server exposing Product and Category SMRT objects',\n },\n {\n // Database and AI context will be configured via environment variables in generated server\n // DATABASE_URL - for database connection\n // OPENAI_API_KEY or ANTHROPIC_API_KEY - for AI client\n },\n );\n\n // Generate tools to preview what will be available\n const tools = await generator.generateTools();\n console.log(`📝 Discovered ${tools.length} tools from SMRT objects:`);\n tools.forEach((tool) => {\n console.log(` - ${tool.name}: ${tool.description}`);\n });\n console.log();\n\n // Generate complete MCP server with stdio transport\n await generator.generateServer({\n outputPath: 'dist/mcp-server.js',\n serverName: 'products-mcp',\n debug: false, // Set to true for debug logging\n generateClaudeConfigFile: true,\n generateReadme: true,\n });\n\n console.log('\\n✅ MCP Server generation complete!');\n console.log('\\n📚 Next steps:');\n console.log(' 1. Build the server: npm run build');\n console.log(\n ' 2. Add to Claude Desktop config (see dist/claude-config.example.json)',\n );\n console.log(' 3. Restart Claude Desktop');\n console.log(' 4. Use the tools in Claude Code!\\n');\n}\n\n// Run if executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n generateMCPServer().catch((error) => {\n console.error('❌ MCP server generation failed:', error);\n process.exit(1);\n });\n}\n\nexport { generateMCPServer };\n","/**\n * SMRT Template Server\n *\n * Demonstrates auto-generated REST API from SMRT objects.\n * No manual route definitions needed - everything is generated from @smrt() decorated classes.\n */\n\nimport { startRestServer } from '@happyvertical/smrt-core';\nimport { Category } from './lib/models/Category';\nimport { Product } from './lib/models/Product';\n\n/**\n * Reference auth stub (#1540). Generated routes are FAIL-CLOSED: without an\n * `authMiddleware` (or `@smrt({ api: { public: true } })` on the model) every\n * route returns 401. This stub demonstrates the contract — replace it with your\n * real auth (verify a session cookie / bearer token, attach the principal).\n *\n * Returning the (optionally augmented) request allows the call; returning a\n * `Response` rejects it.\n */\nfunction demoAuthMiddleware(_objectName: string, _action: string) {\n return async (req: Request): Promise<Request | Response> => {\n const token = req.headers.get('authorization');\n if (!token) {\n return new Response(\n JSON.stringify({ error: 'Authentication required' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n },\n );\n }\n // TODO: verify `token` and attach the resolved principal to the request.\n return req;\n };\n}\n\nasync function startServer() {\n console.log('🚀 Starting SMRT Template Server...');\n\n // Start server with registered SMRT objects. Secure defaults (#1540): bind to\n // loopback, an explicit CORS origin allowlist (never `*`), and a fail-closed\n // auth middleware.\n const shutdown = await startRestServer(\n [Product, Category], // SMRT objects to generate API for\n {}, // context\n {\n port: 3000,\n hostname: '127.0.0.1',\n basePath: '/api/v1',\n enableCors: true,\n allowedOrigins: ['http://localhost:3000'],\n authMiddleware: demoAuthMiddleware,\n },\n );\n\n console.log('✅ Server ready!');\n console.log('📡 REST API: http://localhost:3000/api/v1');\n console.log('📚 Endpoints:');\n console.log(' GET /api/v1/products - List products');\n console.log(' POST /api/v1/products - Create product');\n console.log(' GET /api/v1/products/:id - Get product');\n console.log(' PUT /api/v1/products/:id - Update product');\n console.log(' GET /api/v1/categories - List categories');\n console.log(' POST /api/v1/categories - Create category');\n\n console.log('\\n💡 Try these endpoints (auth required — send a token):');\n console.log(\n ' curl http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl http://localhost:3000/api/v1/categories -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl -X POST http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\" -H \"Content-Type: application/json\" -d \\'{\"name\":\"Test Product\",\"price\":29.99}\\'',\n );\n\n return { shutdown };\n}\n\n// Start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startServer().catch(console.error);\n}\n\nexport { startServer };\n","/**\n * SMRT Template: Triple-Purpose Export\n *\n * This is the main entry point when this template is used as an NPM library.\n * It re-exports everything from the lib directory for easy consumption.\n *\n * Usage examples:\n *\n * // Import models\n * import { Product, Category } from '@happyvertical/core-template';\n *\n * // Import UI components\n * import { ProductCard, ProductForm } from '@happyvertical/core-template/components';\n *\n * // Import stores\n * import { ProductStoreClass } from '@happyvertical/core-template/stores';\n */\n\n// Self-register this package's manifest before any @smrt() decorator fires\n// downstream. Must come first so the side effect runs ahead of the class\n// module loads below. See __smrt-register__.ts for issue #1132 context.\nimport './__smrt-register__.js';\n\nexport { demonstrateClient } from './client';\n// Re-export everything from the lib directory\nexport * from './lib/index';\nexport { generateMCPServer } from './mcp';\n// Legacy exports for backward compatibility\nexport { startServer } from './server';\n\n/**\n * Start all services for demonstration (legacy function)\n */\nexport async function startAll() {\n const { startServer } = await import('./server');\n const { generateMCPServer } = await import('./mcp');\n\n console.log('🚀 Starting SMRT Template - Full Demo\\n');\n\n // Start REST API server\n console.log('1️⃣ Starting REST API...');\n const server = await startServer();\n\n // Start MCP server\n console.log('\\n2️⃣ Starting MCP Server...');\n const mcp = await generateMCPServer();\n\n console.log('\\n✨ All services running!');\n console.log('\\n🎯 What was auto-generated:');\n console.log(' • REST endpoints for Product and Category');\n console.log(' • TypeScript client with full type safety');\n console.log(' • MCP tools for AI model integration');\n console.log(' • OpenAPI/Swagger documentation');\n console.log(' • Live reloading during development');\n\n console.log('\\n📝 Next steps:');\n console.log(' • Modify src/lib/models/ to add new fields');\n console.log(' • Add new @smrt() classes to auto-generate more APIs');\n console.log(' • Run bun run dev to see live updates');\n\n return { server, mcp };\n}\n\n// Auto-start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startAll().catch(console.error);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,eAAe,oBAAoB;CACjC,QAAQ,IAAI,0CAA0C;CAGtD,MAAM,MAAM,eAAa,8BAA8B;CAEvD,IAAI;EACF,QAAQ,IAAI,kCAAkC;EAG9C,MAAM,aAAmC;GACvC,MAAM;GACN,aAAa;GACb,OAAO;GACP,SAAS;GACT,MAAM,CAAC,QAAQ,gBAAgB;EACjC;EAEA,QAAQ,IAAI,qBAAqB,UAAU;EAC3C,MAAM,iBAAiB,MAAM,IAAI,SAAS,OAAO,UAAU;EAC3D,QAAQ,IAAI,cAAc,cAAc;EAGxC,QAAQ,IAAI,4BAA4B;EACxC,MAAM,WAAW,MAAM,IAAI,SAAS,KAAK;EACzC,QAAQ,IAAI,aAAa,QAAQ;EAGjC,IAAI,gBAAgB,IAAI;GACtB,QAAQ,IAAI,wBAAwB,eAAe,GAAG,EAAE;GACxD,MAAM,UAAU,MAAM,IAAI,SAAS,IAAI,eAAe,EAAE;GACxD,QAAQ,IAAI,YAAY,OAAO;GAG/B,QAAQ,IAAI,wBAAwB;GACpC,MAAM,iBAAiB,MAAM,IAAI,SAAS,OAAO,eAAe,IAAI;IAClE,OAAO;IACP,aAAa;GACf,CAAC;GACD,QAAQ,IAAI,YAAY,cAAc;EACxC;EAEA,QAAQ,IAAI,oCAAoC;EAGhD,MAAM,cAAqC;GACzC,MAAM;GACN,aAAa;GACb,QAAQ;EACV;EAEA,QAAQ,IAAI,sBAAsB,WAAW;EAC7C,MAAM,kBAAkB,MAAM,IAAI,WAAW,OAAO,WAAW;EAC/D,QAAQ,IAAI,cAAc,eAAe;EAGzC,QAAQ,IAAI,8BAA8B;EAC1C,MAAM,aAAa,MAAM,IAAI,WAAW,KAAK;EAC7C,QAAQ,IAAI,eAAe,UAAU;CACvC,SAAS,OAAO;EACd,QAAQ,MAAM,mBAAmB,KAAK;CACxC;AACF;AAGA,IAAI,OAAO,KAAK,QAAQ,UAAU,QAAQ,KAAK,MAC7C,kBAAkB,CAAC,CAAC,MAAM,QAAQ,KAAK;;;;;;;;;;;;AC7DzC,IAAa,uBAAb,cAA0C,WAAW;CACnD,OAAO,KAAK;CACZ,OAAO,OAAO;CACd,OAAO,QAAQ;CACf,OAAO,UAAU;CACjB,OAAO,WAAW;EAAC;EAAS;EAAS;CAAS;CAC9C,OAAO,QAAQ;EACb,IAAI;EACJ,OAAO;EACP,SACE;CACJ;CACA,OAAO,UAAU;EACf,IAAI;EACJ,OAAO;EACP,MAAM;EACN,aAAa;CACf;CACA,OAAO,SAAS,CAAC,OAAO;CACxB,OAAO,MAAM,CACX;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,aAAa;CACf,CACF;CACA,OAAO,UAAU,EACf,SAAS,EACP,QAAQ;EACN,aAAa,EAAE,YAAY,SAAS;EACpC,UAAU,EAAE,YAAY,SAAS;EACjC,cAAc,EAAE,YAAY,SAAS;EACrC,OAAO,EAAE,YAAY,SAAS;EAC9B,SAAS,EAAE,YAAY,SAAS;EAChC,gBAAgB,EAAE,YAAY,SAAS;EACvC,MAAM,EAAE,YAAY,SAAS;CAC/B,EACF,EACF;AACF;;AAGA,IAAa,yBAAb,cAA4C,WAAW;CACrD,OAAO,KAAK;CACZ,OAAO,OAAO;CACd,OAAO,QAAQ;CACf,OAAO,UACL;CACF,OAAO,WAAW;EAAC;EAAW;EAAY;EAAS;CAAU;CAC7D,OAAO,QAAQ;EACb,IAAI;EACJ,OAAO;EACP,SACE;CACJ;CACA,OAAO,UAAU;EACf,IAAI;EACJ,OAAO;EACP,MAAM;EACN,aAAa;CACf;CACA,OAAO,SAAS;EAAC;EAAS;EAAgB;CAAG;CAC7C,OAAO,MAAM,CACX;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,aAAa;CACf,CACF;CACA,OAAO,UAAU;EACf,SAAS,EACP,QAAQ;GACN,aAAa,EAAE,YAAY,SAAS;GACpC,UAAU,EAAE,YAAY,SAAS;GACjC,cAAc,EAAE,YAAY,SAAS;GACrC,OAAO,EAAE,YAAY,SAAS;GAC9B,SAAS,EAAE,YAAY,SAAS;GAChC,gBAAgB,EAAE,YAAY,SAAS;GACvC,MAAM,EAAE,YAAY,SAAS;GAC7B,aAAa,EAAE,YAAY,SAAS;EACtC,EACF;EACA,gBAAgB,EACd,QAAQ;GACN,OAAO,EAAE,YAAY,SAAS;GAC9B,WAAW,EAAE,YAAY,SAAS;EACpC,EACF;EACA,KAAK,EACH,QAAQ;GACN,SAAS,EAAE,YAAY,SAAS;GAChC,MAAM,EAAE,YAAY,SAAS;GAC7B,aAAa,EAAE,YAAY,SAAS;GACpC,aAAa,EAAE,YAAY,SAAS;GACpC,QAAQ,EAAE,YAAY,SAAS;EACjC,EACF;CACF;AACF;;AAGA,IAAa,oBAAb,cAAuC,WAAW;CAChD,OAAO,KAAK;CACZ,OAAO,OAAO;CACd,OAAO,QAAQ;CACf,OAAO,UACL;CACF,OAAO,WAAW;EAAC;EAAa;EAAiB;EAAY;CAAa;CAC1E,OAAO,QAAQ;EACb,IAAI;EACJ,OAAO;EACP,SACE;CACJ;CACA,OAAO,UAAU;EACf,IAAI;EACJ,OAAO;EACP,MAAM;EACN,aAAa;CACf;CACA,OAAO,SAAS,CAAC,OAAO;CACxB,OAAO,MAAM,CACX;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,aAAa;EACb,KAAK;EACL,MAAM;EACN,QAAQ;GAAE,OAAO;GAAe,OAAO;EAAW;CACpD,CACF;CACA,OAAO,WAAW,CAAC,iBAAiB;CACpC,OAAO,UAAU,EACf,SAAS,EACP,QAAQ;EACN,aAAa,EAAE,YAAY,SAAS;EACpC,UAAU,EAAE,YAAY,SAAS;EACjC,cAAc,EAAE,YAAY,SAAS;EACrC,OAAO,EAAE,YAAY,SAAS;EAC9B,SAAS,EAAE,YAAY,SAAS;EAChC,gBAAgB,EAAE,YAAY,SAAS;EACvC,MAAM,EAAE,YAAY,SAAS;CAC/B,EACF,EACF;AACF;;;;;;;;;;;;;;;ACrJA,eAAe,oBAAoB;CACjC,QAAQ,IAAI,kDAAkD;CAG9D,MAAM,YAAY,IAAI,aACpB;EACE,MAAM;EACN,SAAS;EACT,aAAa;CACf,GACA,CAIA,CACF;CAGA,MAAM,QAAQ,MAAM,UAAU,cAAc;CAC5C,QAAQ,IAAI,iBAAiB,MAAM,OAAO,0BAA0B;CACpE,MAAM,SAAS,SAAS;EACtB,QAAQ,IAAI,QAAQ,KAAK,KAAK,IAAI,KAAK,aAAa;CACtD,CAAC;CACD,QAAQ,IAAI;CAGZ,MAAM,UAAU,eAAe;EAC7B,YAAY;EACZ,YAAY;EACZ,OAAO;EACP,0BAA0B;EAC1B,gBAAgB;CAClB,CAAC;CAED,QAAQ,IAAI,qCAAqC;CACjD,QAAQ,IAAI,kBAAkB;CAC9B,QAAQ,IAAI,uCAAuC;CACnD,QAAQ,IACN,0EACF;CACA,QAAQ,IAAI,8BAA8B;CAC1C,QAAQ,IAAI,uCAAuC;AACrD;AAGA,IAAI,OAAO,KAAK,QAAQ,UAAU,QAAQ,KAAK,MAC7C,kBAAkB,CAAC,CAAC,OAAO,UAAU;CACnC,QAAQ,MAAM,mCAAmC,KAAK;CACtD,QAAQ,KAAK,CAAC;AAChB,CAAC;;;;;;;;;;;;;;;;;;;AC3CH,SAAS,mBAAmB,aAAqB,SAAiB;CAChE,OAAO,OAAO,QAA8C;EAE1D,IAAI,CADU,IAAI,QAAQ,IAAI,eACzB,GACH,OAAO,IAAI,SACT,KAAK,UAAU,EAAE,OAAO,0BAA0B,CAAC,GACnD;GACE,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;EAChD,CACF;EAGF,OAAO;CACT;AACF;AAEA,eAAe,cAAc;CAC3B,QAAQ,IAAI,qCAAqC;CAKjD,MAAM,WAAW,MAAM,gBACrB,CAAC,SAAS,QAAQ,GAClB,CAAC,GACD;EACE,MAAM;EACN,UAAU;EACV,UAAU;EACV,YAAY;EACZ,gBAAgB,CAAC,uBAAuB;EACxC,gBAAgB;CAClB,CACF;CAEA,QAAQ,IAAI,iBAAiB;CAC7B,QAAQ,IAAI,2CAA2C;CACvD,QAAQ,IAAI,eAAe;CAC3B,QAAQ,IAAI,4CAA4C;CACxD,QAAQ,IAAI,6CAA6C;CACzD,QAAQ,IAAI,8CAA8C;CAC1D,QAAQ,IAAI,iDAAiD;CAC7D,QAAQ,IAAI,gDAAgD;CAC5D,QAAQ,IAAI,gDAAgD;CAE5D,QAAQ,IAAI,0DAA0D;CACtE,QAAQ,IACN,oFACF;CACA,QAAQ,IACN,sFACF;CACA,QAAQ,IACN,mLACF;CAEA,OAAO,EAAE,SAAS;AACpB;AAGA,IAAI,OAAO,KAAK,QAAQ,UAAU,QAAQ,KAAK,MAC7C,YAAY,CAAC,CAAC,MAAM,QAAQ,KAAK;;;;;;ACjDnC,eAAsB,WAAW;CAC/B,MAAM,EAAE,gBAAgB,MAAA,QAAA,QAAA,CAAA,CAAA,WAAA,cAAA;CACxB,MAAM,EAAE,sBAAsB,MAAA,QAAA,QAAA,CAAA,CAAA,WAAA,WAAA;CAE9B,QAAQ,IAAI,yCAAyC;CAGrD,QAAQ,IAAI,0BAA0B;CACtC,MAAM,SAAS,MAAM,YAAY;CAGjC,QAAQ,IAAI,8BAA8B;CAC1C,MAAM,MAAM,MAAM,kBAAkB;CAEpC,QAAQ,IAAI,2BAA2B;CACvC,QAAQ,IAAI,+BAA+B;CAC3C,QAAQ,IAAI,8CAA8C;CAC1D,QAAQ,IAAI,8CAA8C;CAC1D,QAAQ,IAAI,yCAAyC;CACrD,QAAQ,IAAI,oCAAoC;CAChD,QAAQ,IAAI,wCAAwC;CAEpD,QAAQ,IAAI,kBAAkB;CAC9B,QAAQ,IAAI,+CAA+C;CAC3D,QAAQ,IAAI,yDAAyD;CACrE,QAAQ,IAAI,0CAA0C;CAEtD,OAAO;EAAE;EAAQ;CAAI;AACvB;AAGA,IAAI,OAAO,KAAK,QAAQ,UAAU,QAAQ,KAAK,MAC7C,SAAS,CAAC,CAAC,MAAM,QAAQ,KAAK"}
@@ -15,6 +15,7 @@ export * from "./collections/index.js";
15
15
  export * from "./components/index.js";
16
16
  export * from "./generated/index.js";
17
17
  export * from "./models/index.js";
18
+ export { ClothingProductsRecipe, IngredientsRecipe, SimpleProductsRecipe, } from "./recipes.js";
18
19
  export * from "./stores/index.js";
19
20
  export * from "./utils/index.js";
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AACtD,mBAAmB,aAAa,CAAC;AACjC,cAAc,wBAAqB,CAAC;AAEpC,cAAc,uBAAoB,CAAC;AAEnC,cAAc,sBAAmB,CAAC;AAElC,cAAc,mBAAgB,CAAC;AAE/B,cAAc,mBAAgB,CAAC;AAE/B,cAAc,kBAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AACtD,mBAAmB,aAAa,CAAC;AACjC,cAAc,wBAAqB,CAAC;AAEpC,cAAc,uBAAoB,CAAC;AAEnC,cAAc,sBAAmB,CAAC;AAElC,cAAc,mBAAgB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAW,CAAC;AAEnB,cAAc,mBAAgB,CAAC;AAE/B,cAAc,kBAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Product.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAS,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAea,OAAQ,SAAQ,UAAU;IACrC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,WAAW,EAAE,WAAW,CAAuB;IAE/C,IAAI,SAAM;IACV,WAAW,SAAM;IACjB,QAAQ,SAAM;IACd,YAAY,SAAM;IAClB,KAAK,SAAM;IACX;;;;;;;;;;OAUG;IACH,KAAK,SAAK;IACV,OAAO,UAAQ;IACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAM;gBAER,OAAO,GAAE,cAAmB;IAwBlC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAIvD,yBAAyB;IAMjC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuClD,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC;IAoBV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzE"}
1
+ {"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Product.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAS,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAea,OAAQ,SAAQ,UAAU;IACrC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,WAAW,EAAE,WAAW,CAAuB;IAK/C,IAAI,SAAM;IAIV,WAAW,SAAM;IACjB,QAAQ,SAAM;IACd,YAAY,SAAM;IAClB,KAAK,SAAM;IACX;;;;;;;;;;OAUG;IAKH,KAAK,SAAK;IACV,OAAO,UAAQ;IACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAM;gBAER,OAAO,GAAE,cAAmB;IAwBlC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAIvD,yBAAyB;IAMjC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuClD,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC;IAoBV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductVariant.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/ProductVariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAQa,cAAe,SAAQ,UAAU;IAC5C,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;OAIG;IAEH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAM;IAEtB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAM;IAEnB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAQ;IAE7B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAK;gBAEV,OAAO,GAAE,qBAA0B;IAmB/C;;;OAGG;IACH,SAAS,IAAI,MAAM,EAAE;IAUrB;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;CAO1C"}
1
+ {"version":3,"file":"ProductVariant.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/ProductVariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAQa,cAAe,SAAQ,UAAU;IAC5C,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;OAIG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;OAGG;IAKH,QAAQ,EAAE,MAAM,CAAM;IAEtB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAM;IAEnB;;;;;OAKG;IAKH,aAAa,EAAE,MAAM,CAAQ;IAE7B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAK;gBAEV,OAAO,GAAE,qBAA0B;IAmB/C;;;OAGG;IACH,SAAS,IAAI,MAAM,EAAE;IAUrB;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;CAO1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sku.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Sku.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAQa,GAAI,SAAQ,UAAU;IACjC,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;;;;;;;;;OAYG;IAEH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;;;OAKG;IAEH,IAAI,EAAE,MAAM,CAAM;IAElB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAM;IAErB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAM;IAElB;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAQ;IAE1B,0EAA0E;IAE1E,WAAW,EAAE,MAAM,CAAO;IAE1B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAQ;gBAEX,OAAO,GAAE,UAAe;IAgBpC;;;;OAIG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYxC;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;CAO7D"}
1
+ {"version":3,"file":"Sku.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Sku.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAQa,GAAI,SAAQ,UAAU;IACjC,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;;;;;;;;;OAYG;IAKH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;;;OAKG;IAMH,IAAI,EAAE,MAAM,CAAM;IAElB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAM;IAErB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAM;IAElB;;;;;;;OAOG;IAKH,UAAU,EAAE,MAAM,CAAQ;IAE1B,0EAA0E;IAE1E,WAAW,EAAE,MAAM,CAAO;IAE1B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAQ;gBAEX,OAAO,GAAE,UAAe;IAgBpC;;;;OAIG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYxC;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;CAO7D"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Declared recipes for smrt-products (#3590, #3604): user-facing units of
3
+ * functionality an app or agent can pick instead of the whole package.
4
+ * The scanner reads these statics into the `recipes` array of `manifest.json`
5
+ * and `smrt-knowledge.json`; nothing here runs at that point.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { SmrtRecipe } from '@happyvertical/smrt-core';
10
+ import { Product } from './models/Product.js';
11
+ import { ProductVariant } from './models/ProductVariant.js';
12
+ import { Sku } from './models/Sku.js';
13
+ /** Simple products: Items with a name, a price and a description. */
14
+ export declare class SimpleProductsRecipe extends SmrtRecipe {
15
+ static id: string;
16
+ static help: string;
17
+ static label: string;
18
+ static summary: string;
19
+ static synonyms: string[];
20
+ static group: {
21
+ id: string;
22
+ label: string;
23
+ summary: string;
24
+ };
25
+ static section: {
26
+ id: string;
27
+ label: string;
28
+ icon: string;
29
+ description: string;
30
+ };
31
+ static models: (typeof Product)[];
32
+ static nav: {
33
+ label: string;
34
+ model: typeof Product;
35
+ icon: string;
36
+ description: string;
37
+ }[];
38
+ static options: {
39
+ readonly Product: {
40
+ readonly fields: {
41
+ readonly productType: {
42
+ readonly visibility: "hidden";
43
+ };
44
+ readonly category: {
45
+ readonly visibility: "hidden";
46
+ };
47
+ readonly manufacturer: {
48
+ readonly visibility: "hidden";
49
+ };
50
+ readonly model: {
51
+ readonly visibility: "hidden";
52
+ };
53
+ readonly inStock: {
54
+ readonly visibility: "hidden";
55
+ };
56
+ readonly specifications: {
57
+ readonly visibility: "hidden";
58
+ };
59
+ readonly tags: {
60
+ readonly visibility: "hidden";
61
+ };
62
+ };
63
+ };
64
+ };
65
+ }
66
+ /** Clothing: Products that come in sizes and colors, with a stock-keeping unit for each combination. */
67
+ export declare class ClothingProductsRecipe extends SmrtRecipe {
68
+ static id: string;
69
+ static help: string;
70
+ static label: string;
71
+ static summary: string;
72
+ static synonyms: string[];
73
+ static group: {
74
+ id: string;
75
+ label: string;
76
+ summary: string;
77
+ };
78
+ static section: {
79
+ id: string;
80
+ label: string;
81
+ icon: string;
82
+ description: string;
83
+ };
84
+ static models: (typeof Product | typeof ProductVariant | typeof Sku)[];
85
+ static nav: {
86
+ label: string;
87
+ model: typeof Product;
88
+ icon: string;
89
+ description: string;
90
+ }[];
91
+ static options: {
92
+ readonly Product: {
93
+ readonly fields: {
94
+ readonly productType: {
95
+ readonly visibility: "hidden";
96
+ };
97
+ readonly category: {
98
+ readonly visibility: "hidden";
99
+ };
100
+ readonly manufacturer: {
101
+ readonly visibility: "hidden";
102
+ };
103
+ readonly model: {
104
+ readonly visibility: "hidden";
105
+ };
106
+ readonly inStock: {
107
+ readonly visibility: "hidden";
108
+ };
109
+ readonly specifications: {
110
+ readonly visibility: "hidden";
111
+ };
112
+ readonly tags: {
113
+ readonly visibility: "hidden";
114
+ };
115
+ readonly description: {
116
+ readonly visibility: "hidden";
117
+ };
118
+ };
119
+ };
120
+ readonly ProductVariant: {
121
+ readonly fields: {
122
+ readonly label: {
123
+ readonly visibility: "hidden";
124
+ };
125
+ readonly sortOrder: {
126
+ readonly visibility: "hidden";
127
+ };
128
+ };
129
+ };
130
+ readonly Sku: {
131
+ readonly fields: {
132
+ readonly barcode: {
133
+ readonly visibility: "hidden";
134
+ };
135
+ readonly name: {
136
+ readonly visibility: "hidden";
137
+ };
138
+ readonly weightGrams: {
139
+ readonly visibility: "hidden";
140
+ };
141
+ readonly parentSkuId: {
142
+ readonly visibility: "hidden";
143
+ };
144
+ readonly active: {
145
+ readonly visibility: "hidden";
146
+ };
147
+ };
148
+ };
149
+ };
150
+ }
151
+ /** Ingredients: Things you buy in to make what you sell, kept as products of the material kind with their own list. */
152
+ export declare class IngredientsRecipe extends SmrtRecipe {
153
+ static id: string;
154
+ static help: string;
155
+ static label: string;
156
+ static summary: string;
157
+ static synonyms: string[];
158
+ static group: {
159
+ id: string;
160
+ label: string;
161
+ summary: string;
162
+ };
163
+ static section: {
164
+ id: string;
165
+ label: string;
166
+ icon: string;
167
+ description: string;
168
+ };
169
+ static models: (typeof Product)[];
170
+ static nav: {
171
+ label: string;
172
+ model: typeof Product;
173
+ icon: string;
174
+ description: string;
175
+ key: string;
176
+ noun: string;
177
+ filter: {
178
+ field: string;
179
+ value: string;
180
+ };
181
+ }[];
182
+ static requires: string[];
183
+ static options: {
184
+ readonly Product: {
185
+ readonly fields: {
186
+ readonly productType: {
187
+ readonly visibility: "hidden";
188
+ };
189
+ readonly category: {
190
+ readonly visibility: "hidden";
191
+ };
192
+ readonly manufacturer: {
193
+ readonly visibility: "hidden";
194
+ };
195
+ readonly model: {
196
+ readonly visibility: "hidden";
197
+ };
198
+ readonly inStock: {
199
+ readonly visibility: "hidden";
200
+ };
201
+ readonly specifications: {
202
+ readonly visibility: "hidden";
203
+ };
204
+ readonly tags: {
205
+ readonly visibility: "hidden";
206
+ };
207
+ };
208
+ };
209
+ };
210
+ }
211
+ //# sourceMappingURL=recipes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,qEAAqE;AACrE,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,MAAM,CAAC,EAAE,SAAqB;IAC9B,MAAM,CAAC,IAAI,SAAwB;IACnC,MAAM,CAAC,KAAK,SAAqB;IACjC,MAAM,CAAC,OAAO,SAAmD;IACjE,MAAM,CAAC,QAAQ,WAAiC;IAChD,MAAM,CAAC,KAAK;;;;MAKV;IACF,MAAM,CAAC,OAAO;;;;;MAKZ;IACF,MAAM,CAAC,MAAM,qBAAa;IAC1B,MAAM,CAAC,GAAG;;;;;QAOR;IACF,MAAM,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;MAYH;CACZ;AAED,wGAAwG;AACxG,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,MAAM,CAAC,EAAE,SAAuB;IAChC,MAAM,CAAC,IAAI,SAA0B;IACrC,MAAM,CAAC,KAAK,SAAc;IAC1B,MAAM,CAAC,OAAO,SAC8E;IAC5F,MAAM,CAAC,QAAQ,WAAgD;IAC/D,MAAM,CAAC,KAAK;;;;MAKV;IACF,MAAM,CAAC,OAAO;;;;;MAKZ;IACF,MAAM,CAAC,MAAM,0DAAkC;IAC/C,MAAM,CAAC,GAAG;;;;;QAOR;IACF,MAAM,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4BH;CACZ;AAED,uHAAuH;AACvH,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,MAAM,CAAC,EAAE,SAA0B;IACnC,MAAM,CAAC,IAAI,SAA6B;IACxC,MAAM,CAAC,KAAK,SAAiB;IAC7B,MAAM,CAAC,OAAO,SAC0F;IACxG,MAAM,CAAC,QAAQ,WAA6D;IAC5E,MAAM,CAAC,KAAK;;;;MAKV;IACF,MAAM,CAAC,OAAO;;;;;MAKZ;IACF,MAAM,CAAC,MAAM,qBAAa;IAC1B,MAAM,CAAC,GAAG;;;;;;;;;;;QAUR;IACF,MAAM,CAAC,QAAQ,WAAuB;IACtC,MAAM,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;MAYH;CACZ"}