UNPKG

@typecad/typecad

Version:

🤖programmatically 💥create 🛰️hardware

1 lines 13.4 kB
let errors=[],warnings=[];import a3_0x1d7010 from'chalk';function a3_0x3581(){const _0x8c3cc2=['unnamed','reference','forEach','write','👺\x20ERC\x20error:','length','bold','type','\x20not\x20driven\x20by\x20an\x20output\x20pin','power_in','input','output\x20pin\x20','output','number','free','push','unspecified\x20pin\x20','\x20connected\x20to\x20tri_state\x20pin\x20','unspecified','power_in\x20pin\x20','power_out\x20pin\x20','\x20connected\x20to\x20power_out\x20pin\x20','bidirectional','max','pin','min','V\x20to\x20','minimum_voltage','powerInfo','V)\x20cannot\x20supply\x20power\x20input\x20','filter','\x22:\x20','A\x20supplied','toFixed','maximum_voltage','map','Overvoltage\x20risk\x20on\x20net\x20\x22'];a3_0x3581=function(){return _0x8c3cc2;};return a3_0x3581();}export function erc(_0x144883,_0x52e19f=!![]){errors['length']=0x0,warnings['length']=0x0,_0x144883['Nodes']['forEach'](_0x40287e=>{erc_node_pin(_0x40287e['nodes']);function _0x5c74ff(_0xec00c5,_0x134955){return a3_0x571a(_0xec00c5-0x2f6,_0x134955);}erc_power_checks(_0x40287e['nodes'],_0x40287e['name']||_0x5c74ff(0x2f6,0x301)),_0x40287e['nodes']['forEach'](_0x510fa2=>{_0x40287e['nodes']['forEach'](_0x428123=>{function _0x203b26(_0x31639a,_0x5ee1ec){return a3_0x571a(_0x5ee1ec-0x264,_0x31639a);}if(_0x510fa2[_0x203b26(0x26f,0x265)]===_0x428123[_0x203b26(0x26d,0x265)])return;erc_pin_pin(_0x510fa2,_0x428123);});});});errors['length']>0x0&&errors[_0x1b0702(-0x322,-0x334)](_0x99c8e0=>{function _0x33e8e9(_0x2672a6,_0x1fb6f4){return a3_0x571a(_0x1fb6f4-0x2e1,_0x2672a6);}process['stdout'][_0x33e8e9(0x2f6,0x2e4)](a3_0x1d7010['whiteBright']['bgRed'](_0x33e8e9(0x2dd,0x2e5))+('\x20'+_0x99c8e0)+'\x0a');});warnings[_0x1b0702(-0x31f,-0x319)]>0x0&&warnings['forEach'](_0x4ea141=>{process['stdout']['write'](a3_0x1d7010['whiteBright']['bgYellow']('ERC\x20warning:')+('\x20'+_0x4ea141)+'\x0a');});process['stdout']['write'](a3_0x1d7010[_0x1b0702(-0x31e,-0x316)]['magentaBright']('🧐\x20ERC')+('\x20'+errors['length']+'\x20errors,\x20'+warnings['length']+'\x20warnings')+'\x0a');function _0x1b0702(_0x426c3e,_0x3c1058){return a3_0x571a(_0x426c3e- -0x324,_0x3c1058);}errors['length']>0x0&&_0x52e19f&&process['exit'](0x1);}function a3_0x571a(_0x358102,_0x571a32){const _0x4bb836=a3_0x3581();return a3_0x571a=function(_0x5f4dd3,_0x55b477){_0x5f4dd3=_0x5f4dd3-0x0;let _0x5a81d0=_0x4bb836[_0x5f4dd3];return _0x5a81d0;},a3_0x571a(_0x358102,_0x571a32);}function erc_node_pin(_0x53a890){_0x53a890['forEach'](_0x3feb0a=>{function _0x118636(_0x1295ef,_0x2f4d34){return a3_0x571a(_0x1295ef-0x4c,_0x2f4d34);}if(_0x3feb0a['type']==='input'){const _0x2f2d8c=_0x53a890['some'](_0x11a5c2=>_0x11a5c2[_0x118636(0x53,0x42)]==='output');!_0x2f2d8c&&errors['push']('input\x20pin\x20'+_0x3feb0a['reference']+':'+_0x3feb0a['number']+_0x118636(0x54,0x47));}}),_0x53a890['forEach'](_0x1f8cb5=>{function _0x18a97a(_0x3fb095,_0x40c701){return a3_0x571a(_0x3fb095- -0x15,_0x40c701);}if(_0x1f8cb5['type']===_0x18a97a(-0xc,-0x14)){const _0xf0907a=_0x53a890['some'](_0x267c22=>_0x267c22['type']==='power_out');!_0xf0907a&&errors['push']('power_in\x20pin\x20'+_0x1f8cb5['reference']+':'+_0x1f8cb5['number']+'\x20not\x20driven\x20by\x20a\x20power_out\x20pin.\x20Use\x20[pin].type\x20=\x20\x27power_out\x27\x20to\x20designate\x20a\x20power_out\x20pin');}});}function erc_pin_pin(_0x35a275,_0x2df6b4){function _0x45dbfc(_0x2e7d2a,_0x4b69ed){return a3_0x571a(_0x2e7d2a- -0x31d,_0x4b69ed);}switch(_0x35a275['type']){case _0x45dbfc(-0x313,-0x321):_0x2df6b4[_0x45dbfc(-0x316,-0x31c)]==='unspecified'&&warnings['push']('input\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20unspecified\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);break;case'output':_0x2df6b4['type']==='bidirectional'&&errors['push'](_0x45dbfc(-0x312,-0x322)+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20bidirectional\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);break;case'tri_state':_0x2df6b4[_0x45dbfc(-0x316,-0x321)]===_0x45dbfc(-0x311,-0x308)&&warnings['push']('tri_state\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275[_0x45dbfc(-0x310,-0x31a)]+'\x20connected\x20to\x20output\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x322)]);break;case'unspecified':_0x2df6b4['type']!==_0x45dbfc(-0x30f,-0x30b)&&warnings[_0x45dbfc(-0x30e,-0x320)](_0x45dbfc(-0x30d,-0x315)+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20non-free\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x317)]);break;case'power_in':_0x2df6b4['type']==='tri_state'&&warnings['push']('power_in\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275[_0x45dbfc(-0x310,-0x310)]+_0x45dbfc(-0x30c,-0x30a)+_0x2df6b4[_0x45dbfc(-0x31c,-0x31e)]+':'+_0x2df6b4['number']);_0x2df6b4[_0x45dbfc(-0x316,-0x30f)]===_0x45dbfc(-0x30b,-0x308)&&warnings['push'](_0x45dbfc(-0x30a,-0x30a)+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20unspecified\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);break;case'power_out':_0x2df6b4['type']==='output'&&errors['push'](_0x45dbfc(-0x309,-0x315)+_0x35a275['reference']+':'+_0x35a275[_0x45dbfc(-0x310,-0x311)]+'\x20connected\x20to\x20output\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);_0x2df6b4['type']==='bidirectional'&&warnings['push']('power_out\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20bidirectional\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);_0x2df6b4['type']==='tri_state'&&errors['push'](_0x45dbfc(-0x309,-0x304)+_0x35a275[_0x45dbfc(-0x31c,-0x320)]+':'+_0x35a275['number']+'\x20connected\x20to\x20tri_state\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x30a)]);_0x2df6b4['type']==='unspecified'&&warnings[_0x45dbfc(-0x30e,-0x314)](_0x45dbfc(-0x309,-0x303)+_0x35a275[_0x45dbfc(-0x31c,-0x31d)]+':'+_0x35a275[_0x45dbfc(-0x310,-0x306)]+'\x20connected\x20to\x20unspecified\x20pin\x20'+_0x2df6b4[_0x45dbfc(-0x31c,-0x31b)]+':'+_0x2df6b4['number']);_0x2df6b4[_0x45dbfc(-0x316,-0x323)]==='power_out'&&errors['push']('power_out\x20pin\x20'+_0x35a275[_0x45dbfc(-0x31c,-0x317)]+':'+_0x35a275['number']+_0x45dbfc(-0x308,-0x306)+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x2ff)]);break;case'open_collector':_0x2df6b4['type']==='output'&&errors['push']('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20output\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x300)]);_0x2df6b4[_0x45dbfc(-0x316,-0x31b)]==='tri_state'&&warnings[_0x45dbfc(-0x30e,-0x314)]('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20tri_state\x20pin\x20'+_0x2df6b4[_0x45dbfc(-0x31c,-0x314)]+':'+_0x2df6b4['number']);_0x2df6b4[_0x45dbfc(-0x316,-0x313)]==='unspecified'&&warnings[_0x45dbfc(-0x30e,-0x31e)]('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20unspecified\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);_0x2df6b4['type']==='power_out'&&errors['push']('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275[_0x45dbfc(-0x310,-0x318)]+_0x45dbfc(-0x308,-0x319)+_0x2df6b4['reference']+':'+_0x2df6b4['number']);break;case'open_emitter':_0x2df6b4[_0x45dbfc(-0x316,-0x307)]==='output'&&errors['push']('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20output\x20pin\x20'+_0x2df6b4[_0x45dbfc(-0x31c,-0x30e)]+':'+_0x2df6b4['number']);_0x2df6b4['type']===_0x45dbfc(-0x307,-0x306)&&warnings[_0x45dbfc(-0x30e,-0x318)]('open_collector\x20pin\x20'+_0x35a275[_0x45dbfc(-0x31c,-0x326)]+':'+_0x35a275['number']+'\x20connected\x20to\x20bidirectional\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);_0x2df6b4['type']==='tri_state'&&warnings['push']('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20tri_state\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x307)]);_0x2df6b4['type']==='unspecified'&&warnings[_0x45dbfc(-0x30e,-0x309)]('open_collector\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20unspecified\x20pin\x20'+_0x2df6b4[_0x45dbfc(-0x31c,-0x318)]+':'+_0x2df6b4[_0x45dbfc(-0x310,-0x316)]);_0x2df6b4[_0x45dbfc(-0x316,-0x319)]==='power_out'&&errors['push']('open_emitter\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20power_out\x20pin\x20'+_0x2df6b4['reference']+':'+_0x2df6b4['number']);break;case'no_connect':warnings[_0x45dbfc(-0x30e,-0x31b)]('no_connect\x20pin\x20'+_0x35a275['reference']+':'+_0x35a275['number']+'\x20connected\x20to\x20'+_0x2df6b4[_0x45dbfc(-0x31c,-0x314)]+':'+_0x2df6b4['number']);break;default:break;}}function erc_power_checks(_0x55860f,_0x2202d0='unnamed'){const _0x780399=_0x55860f['filter'](_0x55a1cb=>_0x55a1cb['type']==='power_out'&&_0x55a1cb['powerInfo']),_0x43d186=_0x55860f['filter'](_0x385821=>_0x385821['type']==='power_in'&&_0x385821['powerInfo']),_0x2cabbd=_0x55860f['filter'](_0x462639=>_0x462639['powerInfo']);if(_0x780399['length']>0x1){const _0x23f96e=_0x780399['map'](_0x3ba445=>({'pin':_0x3ba445,'min':_0x3ba445['powerInfo']?.['minimum_voltage']??-Infinity,'max':_0x3ba445['powerInfo']?.['maximum_voltage']??Infinity}));for(let _0x18c778=0x0;_0x18c778<_0x23f96e['length'];_0x18c778++){for(let _0x12d9a7=_0x18c778+0x1;_0x12d9a7<_0x23f96e['length'];_0x12d9a7++){const _0x38265b=_0x23f96e[_0x18c778],_0x46c4d7=_0x23f96e[_0x12d9a7],_0x5046e4=Math['max'](_0x38265b['min'],_0x46c4d7['min']),_0x3605c6=Math['min'](_0x38265b[_0x504fe5(-0x15a,-0x155)],_0x46c4d7['max']);_0x5046e4>_0x3605c6&&errors['push']('Voltage\x20range\x20conflict\x20on\x20net\x20\x22'+_0x2202d0+'\x22:\x20'+_0x38265b[_0x504fe5(-0x144,-0x154)]['reference']+':'+_0x38265b[_0x504fe5(-0x158,-0x154)]['number']+'\x20('+_0x38265b[_0x504fe5(-0x15b,-0x153)]+_0x504fe5(-0x145,-0x152)+_0x38265b['max']+'V)\x20incompatible\x20with\x20'+_0x46c4d7['pin'][_0x504fe5(-0x16d,-0x16b)]+':'+_0x46c4d7[_0x504fe5(-0x164,-0x154)]['number']+'\x20('+_0x46c4d7['min']+'V\x20to\x20'+_0x46c4d7['max']+'V)');}}}_0x780399['length']>0x0&&_0x43d186['length']>0x0&&_0x780399[_0x504fe5(-0x160,-0x16a)](_0x1238ec=>{if(!_0x1238ec['powerInfo'])return;const _0x42dda6=_0x1238ec['powerInfo'][_0xec91a8(-0x121,-0x129)]??-Infinity,_0x1a3e72=_0x1238ec['powerInfo']['maximum_voltage']??Infinity;function _0xec91a8(_0x66b173,_0x1ba217){return a3_0x571a(_0x1ba217- -0x144,_0x66b173);}_0x43d186['forEach'](_0x810d6=>{function _0x24bc8f(_0xfeed39,_0x1a9ce4){return a3_0x571a(_0xfeed39-0x1d3,_0x1a9ce4);}if(!_0x810d6['powerInfo'])return;const _0x5ecc02=_0x810d6['powerInfo']['minimum_voltage']??-Infinity,_0x4669d3=_0x810d6[_0x24bc8f(0x1ef,0x1e7)]['maximum_voltage']??Infinity,_0x17b18c=Math[_0x24bc8f(0x1ea,0x1de)](_0x42dda6,_0x5ecc02),_0x4ed35b=Math['min'](_0x1a3e72,_0x4669d3);_0x17b18c>_0x4ed35b&&errors[_0x24bc8f(0x1e2,0x1e1)]('Voltage\x20incompatibility\x20on\x20net\x20\x22'+_0x2202d0+'\x22:\x20power\x20output\x20'+_0x1238ec[_0x24bc8f(0x1d4,0x1d3)]+':'+_0x1238ec['number']+'\x20('+_0x42dda6+'V\x20to\x20'+_0x1a3e72+_0x24bc8f(0x1f0,0x1f9)+_0x810d6['reference']+':'+_0x810d6[_0x24bc8f(0x1e0,0x1dd)]+'\x20(accepts\x20'+_0x5ecc02+'V\x20to\x20'+_0x4669d3+'V)');});});const _0x47fd84=_0x2cabbd[_0x504fe5(-0x15c,-0x14e)](_0x22e74f=>_0x22e74f['type']==='power_in'&&_0x22e74f[_0x504fe5(-0x14f,-0x150)]?.['current'])['reduce']((_0x230524,_0x4824e3)=>_0x230524+(_0x4824e3['powerInfo']?.['current']??0x0),0x0);function _0x504fe5(_0x6096df,_0x5e0918){return a3_0x571a(_0x5e0918- -0x16c,_0x6096df);}const _0x31b58f=_0x2cabbd['filter'](_0x1d439b=>_0x1d439b['type']==='power_out'&&_0x1d439b['powerInfo']?.['current'])['reduce']((_0x8ad9b4,_0x1ae5da)=>_0x8ad9b4+(_0x1ae5da['powerInfo']?.['current']??0x0),0x0);if(_0x47fd84>0x0&&_0x31b58f>0x0){if(_0x47fd84>_0x31b58f)errors[_0x504fe5(-0x14c,-0x15d)]('Current\x20capacity\x20exceeded\x20on\x20net\x20\x22'+_0x2202d0+_0x504fe5(-0x157,-0x14d)+_0x47fd84+'A\x20demanded\x20but\x20only\x20'+_0x31b58f+_0x504fe5(-0x14b,-0x14c));else _0x47fd84>_0x31b58f*0.8&&warnings[_0x504fe5(-0x15f,-0x15d)]('High\x20current\x20utilization\x20on\x20net\x20\x22'+_0x2202d0+_0x504fe5(-0x155,-0x14d)+_0x47fd84+'A\x20demanded\x20from\x20'+_0x31b58f+'A\x20capacity\x20('+(_0x47fd84/_0x31b58f*0x64)[_0x504fe5(-0x14d,-0x14b)](0x1)+'%\x20utilization)');}_0x2cabbd[_0x504fe5(-0x16f,-0x16a)](_0x913159=>{if(!_0x913159[_0x2c86b8(0x3fa,0x3e9)])return;const _0x30c649=Math[_0x2c86b8(0x3ea,0x3e4)](..._0x780399['filter'](_0x798313=>_0x798313['powerInfo']?.[_0x2c86b8(0x3de,0x3ef)]!==undefined)[_0x2c86b8(0x3e0,0x3f0)](_0x5295a3=>_0x5295a3[_0x2c86b8(0x3ed,0x3e9)]['maximum_voltage']),0x0);function _0x2c86b8(_0xfd9cb,_0x2a3a30){return a3_0x571a(_0x2a3a30-0x3cd,_0xfd9cb);}_0x913159[_0x2c86b8(0x3f1,0x3e9)][_0x2c86b8(0x3f1,0x3ef)]!==undefined&&_0x30c649>_0x913159[_0x2c86b8(0x3f7,0x3e9)]['maximum_voltage']&&errors[_0x2c86b8(0x3cd,0x3dc)](_0x2c86b8(0x403,0x3f1)+_0x2202d0+'\x22:\x20'+_0x913159['reference']+':'+_0x913159[_0x2c86b8(0x3d9,0x3da)]+'\x20maximum\x20rating\x20('+_0x913159['powerInfo'][_0x2c86b8(0x3dd,0x3ef)]+'V)\x20exceeded\x20by\x20net\x20voltage\x20('+_0x30c649+'V)');});const _0x1abce2=_0x55860f['filter'](_0x3d4d57=>(_0x3d4d57['type']===_0x504fe5(-0x171,-0x163)||_0x3d4d57['type']==='power_out')&&!_0x3d4d57['powerInfo']);_0x1abce2['forEach'](_0x538909=>{});}