34 lines
1.8 KiB
JavaScript
34 lines
1.8 KiB
JavaScript
import fs from 'node:fs'
|
|
|
|
const components=JSON.parse(fs.readFileSync('generated/component-manifest.json','utf8'))
|
|
const catalog=JSON.parse(fs.readFileSync('generated/catalog-manifest.json','utf8'))
|
|
const catalogMap=new Map(catalog.map(x=>[x.component,x]))
|
|
const core=new Set([
|
|
'KbxButton','KbxInput','KbxNumberField','KbxMoneyField','KbxQuantityField','KbxDateField','KbxDateRange','KbxSelect','KbxLookup',
|
|
'KbxPageHeader','KbxCommandBar','KbxSearchPanel','KbxFormSection','KbxDataGrid','KbxBulkActionBar','KbxStatus',
|
|
'KbxDialog','KbxDrawer','KbxToast','KbxConfirm','KbxExcelMenu','KbxExcelImport','KbxJobProgress',
|
|
'KbxAuditTrail','KbxHelpPanel','KbxAiPanel','KbxProposalPanel','KbxListPage','KbxMasterPage','KbxTransactionPage','KbxMasterDetailPage','KbxQueuePage','KbxReconcilePage','KbxWmsMobilePage'
|
|
])
|
|
const groupName={primitive:'Primitive',business:'Business',template:'Template',wms:'WMS',shell:'Shell'}
|
|
const result={
|
|
schemaVersion:'1.0',
|
|
namingRule:'KBX/{Category}/{Component}',
|
|
componentCount:components.length,
|
|
coreComponentCount:core.size,
|
|
components:components.map(c=>{
|
|
const cat=catalogMap.get(c.name)
|
|
return {
|
|
codeName:c.name,
|
|
figmaName:`KBX/${groupName[c.category] ?? c.category}/${c.name}`,
|
|
category:c.category,
|
|
version:c.version,
|
|
designRequired:core.has(c.name),
|
|
designStatus:cat?'cataloged':'code-only',
|
|
variants:{state:cat?.states?.length?cat.states:['default'],density:['compact','comfortable',...(c.category==='wms'||c.name==='KbxWmsMobilePage'?['touch']:[])]}
|
|
}
|
|
})
|
|
}
|
|
fs.mkdirSync('design/figma',{recursive:true})
|
|
fs.writeFileSync('design/figma/components.contract.json',JSON.stringify(result,null,2)+'\n')
|
|
console.log(`generated Figma component contract for ${components.length} components (${core.size} core)`)
|