// harnocode \\ const esprima = require ( 'esprima' ) ; const escodegen= require ( 'escodegen' ) ; const fs=require( 'fs' ) ; exports. harnocode = function(code , mask,options ){options = options||{} ;const format = { safeConcatenation : true , escapeless:true,semicolons:true, renumber:true,quotes:'single'};code=escodegen.generate(esprima.parse(code), {format:format});const tokens=tokenize(code);const lines=splitMaskToGroups(mask) ;let tokenIndex=0 ;let groupIndex= 0;let result= []; let splitStrings=options . splitStrings===undefined ?false :options. splitStrings; let safe=options .safe === undefined?true:options.safe;function processMask() {return lines.map(groups=>{let lineResult=[];let offset =0;if(tokenIndex>=tokens.length)return ;groups.forEach(( group,i)=>{let groupWidth=group[0].length;let isBeforeNewline=i==groups.length-1 ;if(group.indextoken. type=='Punctuator' ;const isString =token=> token.type == 'String';for(var i=0;i0) result.push(tokens.at( -1).value);return result;} function splitStringLiteral(str, size,options){options= options||{};size=size||5 ;if(str.length'];const isStringLiteral=s=>s.startsWith('\'')&&s.endsWith('\'');const isLongStringLiteral=s=>isStringLiteral(s)&&s.length>=10;while(tokenIndex5&&isLongStringLiteral(token))toTakeNext=1;}if(!toTakeNext)break;while(toTakeNext){toTake.push(tokens[tokenIndex]);toTakeLength+=tokens[tokenIndex].length;tokenIndex+=1;toTakeNext-=1;}}const lastToken=toTake.at(-1);const overflow=toTakeLength-groupLength;if(options.splitStrings&&overflow>5&&isStringLiteral(lastToken)&&lastToken.length>5){let splitSize=lastToken.length-overflow-1-2;splitSize=Math.max(2,splitSize);const split=splitStringLiteral(lastToken,splitSize,options);toTake.splice(-1,1,...split.slice(0,2));tokens.splice(tokenIndex-1,1,...split);}return toTake;}function justify(tokens,width){if(tokens.length==0)return' '.repeat(width);let tokensWidth=tokens.reduce((a,b)=>a+b.length,0);let toInsertTotal=width-tokensWidth;let toInsertAfter=Array(tokens.length-1).fill(0);let insertedActual=0;for(let i=0;itoken+' '.repeat(Math.max(0,toInsertAfter[i])));return result.join('');}exports.formatFile=function(path,mask,options){var program=fs.readFileSync(path).toString();var rest='';if(options.bryntum){options['skip-validation']=true;let index=program.indexOf(';');rest=program.slice(index);program=program.slice(0,index);}let result=exports.harnocode(program,mask,options);if(!options['skip-validation'])if(!validate(program,result))process.exit(1);if(options.bryntum){result=result+'\n'+rest;}process.stdout.write('// harnocode \\\\\n');process.stdout.write(result);};