/** * defineAsset — registry for reusable project assets (utils, components, flows, pages, hooks). * * Each asset declares its name, category, import path, tags, and optional usage example. * CLI scans all asset declarations, supports query (by tag/category) and generate (import links). * * // assets/utils.assets.ts * import { defineAsset } from '@pylonts/dsl'; * export const formatAmt = defineAsset({ * name: 'formatAmt', * category: 'util', * tags: ['amount', 'format'], * import: { name: 'formatAmt', from: '@/utils/amount' }, * example: 'formatAmt(12345) => "12,345.00"', * }); * * // CLI: * // pylonts gen asset list --tag form → all form-related assets * // pylonts gen asset import formatAmt → import { formatAmt } from '@/utils/amount'; */ export type AssetCategory = 'util' | 'component' | 'flow' | 'page' | 'hook'; export interface AssetImport { /** Named export, e.g. 'formatAmt' */ name: string; /** Module path, e.g. '@/utils/amount' */ from: string; } export interface AssetConfig { name: string; category: AssetCategory; tags: string[]; import: AssetImport; description?: string; /** One-liner usage example */ example?: string; /** Link to detailed docs */ see?: string; } export interface AssetDef { name: string; category: AssetCategory; tags: string[]; import: AssetImport; description?: string; example?: string; see?: string; } export function defineAsset(config: AssetConfig): AssetDef { return { name: config.name, category: config.category, tags: config.tags, import: config.import, description: config.description, example: config.example, see: config.see, }; }