UNPKG

cardamon

Version:

A CLI tool for measuring the carbon footprint and energy consumption of web pages using the Cardamon model

2 lines 4.88 kB
#!/usr/bin/env node 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x9bd552){return _0x9bd552&&_0x9bd552['__esModule']?_0x9bd552:{'default':_0x9bd552};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const commander_1=require('commander'),cardamon_1=require('./cardamon/cardamon'),constants_1=require('./cardamon/constants'),ora_1=__importDefault(require('ora')),OutputFormatter_1=require('./OutputFormatter'),CardamonMeasurer_1=require('./CardamonMeasurer'),program=new commander_1['Command']();function validateUrl(_0x1376ac){try{const _0x57d9c9=new URL(_0x1376ac);return _0x57d9c9['protocol']==='http:'||_0x57d9c9['protocol']==='https:';}catch{return![];}}async function checkServerAccessibility(_0x2d3c0a){try{const _0x478fc3=await fetch(_0x2d3c0a,{'method':'HEAD'});return _0x478fc3['ok'];}catch{return![];}}program['name']('cardamon')['description']('Measure\x20the\x20carbon\x20footprint\x20and\x20energy\x20consumption\x20of\x20web\x20pages\x20(10s\x20duration,\x20scrolls\x20to\x20bottom)')['version']('1.0.0'),program['argument']('<url>','URL\x20to\x20measure\x20(e.g.,\x20http://localhost:3000)')['option']('-c,\x20--carbon-intensity\x20<value>','carbon\x20intensity\x20in\x20g\x20CO2/kWh','494')['option']('-q,\x20--quick','quick\x20mode:\x20scroll\x20to\x20bottom\x20quickly\x20without\x20waiting\x20for\x20full\x20duration')['action'](async(_0x428f4c,_0x3873a)=>{!validateUrl(_0x428f4c)&&(console['error']('❌\x20Invalid\x20URL\x20format.\x20Please\x20use\x20http://\x20or\x20https://\x20protocol.'),console['error']('Example:\x20cardamon\x20http://localhost:3000'),process['exit'](0x1));const _0x49ccdc={'url':_0x428f4c,'duration':0x2710,'carbonIntensity':parseInt(_0x3873a['carbonIntensity']),'device':'desktop','quick':_0x3873a['quick']},_0x309237=(0x0,ora_1['default'])('Checking\x20server\x20accessibility...')['start'](),_0x3a4b94=await checkServerAccessibility(_0x428f4c);!_0x3a4b94&&(_0x309237['fail']('Server\x20not\x20accessible'),console['error']('❌\x20Cannot\x20connect\x20to\x20the\x20server\x20at:',_0x428f4c),console['error']('Please\x20make\x20sure:'),console['error']('\x20\x20•\x20The\x20server\x20is\x20running'),console['error']('\x20\x20•\x20The\x20URL\x20is\x20correct'),console['error']('\x20\x20•\x20The\x20port\x20is\x20accessible'),process['exit'](0x1));_0x309237['text']='Initializing\x20browser...';const _0x325ad5=new CardamonMeasurer_1['CardamonMeasurer'](),_0x234c9a=new OutputFormatter_1['OutputFormatter']();try{await _0x325ad5['initialize'](),_0x309237['text']='Measuring\x20'+_0x428f4c+'...';const _0x3e8282=await _0x325ad5['measurePage'](_0x49ccdc);_0x309237['text']='Calculating\x20carbon\x20footprint...';const _0x6733ea={'page_visit_count':0x1,'return_visit_count':0x0,'start_date':new Date()['toISOString'](),'end_date':new Date()['toISOString'](),'average_session_duration':0xa,'regional_distribution':[{'region_code':'global','carbon_intensity':_0x49ccdc['carbonIntensity'],'proportion':0x1}],'report_page_count':0x1,'device_breakdown':{'desktop':{'percentage':0x64}}},_0x249bf5={'frontend':{'device':constants_1['REFERENCE_DEVICES']['desktop'],'cpu':_0x3e8282['frontend']['cpu'],'screen':_0x3e8282['frontend']['colorProfile'],'network':{'cachedBytes':_0x3e8282['network']['cachedBytes'],'uncachedBytes':_0x3e8282['network']['totalBytes'],'duration':_0x3e8282['network']['duration']}},'backend':{'serverConfig':[{'serverId':'platform_compute_low','cpuUtilization':0x0,'quantity':0x1,'totalReportVisit':0x1,'totalServerVisit':0x1,'vcpu':0x1,'isDedicated':![],'regionalDistribution':{'regionCode':'global','carbonIntensity':_0x49ccdc['carbonIntensity']}}],'network':{'cachedBytes':_0x3e8282['network']['cachedBytes'],'uncachedBytes':_0x3e8282['network']['totalBytes'],'duration':_0x3e8282['network']['duration']}},'userAnalytics':_0x6733ea,'scalingMethod':'frontend'},_0x32c820=new cardamon_1['Cardamon'](_0x249bf5),_0x6a470a=_0x32c820['calculateMetrics']();_0x309237['succeed']('Measurement\x20completed!'),_0x234c9a['displayCardamonResult'](_0x6a470a,_0x49ccdc,_0x3e8282);}catch(_0x455baf){_0x309237['fail']('Measurement\x20failed');if(_0x455baf instanceof Error){if(_0x455baf['message']['includes']('ERR_ABORTED')||_0x455baf['message']['includes']('net::'))console['error']('❌\x20Network\x20error:\x20Cannot\x20load\x20the\x20page'),console['error']('Please\x20check\x20that\x20the\x20server\x20is\x20running\x20and\x20accessible');else _0x455baf['message']['includes']('timeout')?(console['error']('❌\x20Timeout\x20error:\x20Page\x20took\x20too\x20long\x20to\x20load'),console['error']('Try\x20increasing\x20the\x20duration\x20or\x20check\x20server\x20performance')):console['error']('❌\x20Error:',_0x455baf['message']);}else console['error']('❌\x20Unknown\x20error\x20occurred');process['exit'](0x1);}finally{await _0x325ad5['cleanup']();}}),program['parse']();