How to use compileMatch method in Playwright Internal

Best JavaScript code snippet using playwright-internal

complier.js

Source:complier.js Github

copy

Full Screen

1//==============================================================================2// complier.js - no indexing3//==============================================================================4//==============================================================================5// overall6//==============================================================================7function compile (rules)8 {var code = '';9 code += prettycompile(rules);10 code += prettyprogram(rules);11 return code}12//==============================================================================13// normalize14//==============================================================================15function normalize (rules)16 {var out = [];17 for (var i=0; i<rules.length; i++)18 {out.push(normalizerule(rules[i]))};19 return out}20function normalizerule (rule)21 {if (symbolp(rule)) {return seq('rule',rule,true)};22 if (rule[0]==='transition') {return rule};23 if (rule[0]==='definition') {return rule};24 var newrule= seq('rule',rule[1]);25 for (var i=2; i<rule.length; i++)26 {newrule.push(normalizesubgoal(rule[i]))};27 return newrule}28function normalizesubgoal (subgoal)29 {if (symbolp(subgoal)) {return subgoal};30 if (subgoal[0]==='matches')31 {var query = seq('matches',subgoal[1],subgoal[2]);32 var result = seq('cons',newvar(),listify(subgoal.slice(3)));33 return seq('evaluate',query,result)};34 if (subgoal[0]==='submatches')35 {var query = seq('submatches',subgoal[1],subgoal[2]);36 var result = seq('cons',subgoal[3],newvar());37 return seq('evaluate',query,result)};38 if (builtinp(subgoal[0]))39 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};40 if (mathp(subgoal[0]))41 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};42 if (listop(subgoal[0]))43 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};44 if (subgoal[0]==='map')45 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};46 if (subgoal[0]==='setofall')47 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};48 if (subgoal[0]==='countofall')49 {return seq('evaluate',subgoal.slice(0,-1),subgoal[subgoal.length-1])};50 return subgoal}51//==============================================================================52// compile53//==============================================================================54//------------------------------------------------------------------------------55// prettycompile56//------------------------------------------------------------------------------57function prettycompile (rules)58 {var code = '';59 var views = getviewsfromrules(rules);60 for (var i=0; i<views.length; i++)61 {code += prettyjs(compileoneview(views[i],rules));62 code += prettyjs(compileallview(views[i],rules))};63 var atoms = getatomsfromrules(rules);64 for (var i=0; i<atoms.length; i++)65 {code += prettyjs(compileoneatomlist(atoms[i],rules));66 code += prettyjs(compileallatomlist(atoms[i],rules))};67 var bases = getbasesfromrules(rules);68 for (var i=0; i<bases.length; i++)69 {code += prettyjs(compileonebase(bases[i]));70 code += prettyjs(compileallbase(bases[i]))};71 return code}72//------------------------------------------------------------------------------73// compileoneview74//------------------------------------------------------------------------------75function compileoneview (view,rules)76 {var data = indexees(view,rules);77 var code = seq('function',single(view),seq('query','al','facts','rules'));78 code.push(seq('bind','answer','false'));79 for (var i=0; i<data.length; i++)80 {var rule = data[i];81 if (atomp(rule)) {rule = seq('rule',rule,'true')};82 code.push(compileoneviewrule(rule))};83 code.push(seq('return','answer'));84 return code}85function compileoneviewrule (rule)86 {var hlist = vars(rule[1]);87 var blist = {};88 var code = seq('block');89 code.push(seq('bind','head',codify(rule[1],[],{})));90 for (var i=2; i<rule.length; i++)91 {code.push(seq('bind','sub'+(i-1),codify(rule[i],[],{})))};92 code.push(seq('bind','bl',seq('obj')));93 code.push(seq('bind','ol',seq('seq')));94 var cond = seq('vnify','query','al','head','bl','ol');95 var subcode = seq('block');96 subcode.push(compileoneviewsubgoals(rule,2,hlist,blist));97 subcode.push(seq('backup','ol'));98 code.push(seq('if',cond,subcode));99 return code};100function compileoneviewsubgoals (rule,n,hlist,blist)101 {if (n>=rule.length)102 {var result = codify(rule[1],hlist,blist);103 return seq('block',seq('bind','answer',result))};104 return compileoneviewsubgoal(rule,n,hlist,blist)}105function compileoneviewsubgoal (rule,n,hlist,alist)106 {if (symbolp(rule[n]))107 {return compileoneviewatom(rule,n,hlist,alist)};108 if (rule[n][0]==='same')109 {return compileoneviewsame(rule,n,hlist,alist)};110 if (rule[n][0]==='distinct')111 {return compileoneviewdistinct(rule,n,hlist,alist)};112 if (rule[n][0]==='evaluate')113 {return compileoneviewevaluate(rule,n,hlist,alist)};114 if (rule[n][0]==='true' && rule[n].length===3)115 {return compileoneviewtrue(rule,n,hlist,alist)};116 if (rule[n][0]==='not')117 {return compileoneviewnot(rule,n,hlist,alist)};118 if (compgroundp(rule[n],alist))119 {return compileoneviewbound(rule,n,hlist,alist)};120 if (n===rule.length-1)121 {return compileoneviewlast(rule,n,hlist,alist)};122 return compileoneviewdb(rule,n,hlist,alist)}123function compileoneviewatom (rule,n,hlist,alist)124 {if (rule[n]==='true') {return compileoneviewsubgoals(rule,n+1,hlist,alist)};125 if (rule[n]==='false') {return 'false'};126 var subroutine = single(rule[n]);127 var cond = seq(subroutine,kwotify(rule[n]),'bl','facts','rules');128 return seq('if',cond,compileoneviewsubgoals(rule,n+1,hlist,alist))}129function compileoneviewsame (rule,n,hlist,alist)130 {var x = codify(rule[n][1],hlist,alist);131 var y = codify(rule[n][2],hlist,alist);132 var cond = seq('equalp',x,y);133 var code = compileoneviewsubgoals(rule,n+1,hlist,alist);134 return seq('if',cond,code)}135function compileoneviewdistinct (rule,n,hlist,alist)136 {var x = codify(rule[n][1],hlist,alist);137 var y = codify(rule[n][2],hlist,alist);138 var cond = seq('equalp',x,y);139 var code = compileoneviewsubgoals(rule,n+1,hlist,alist);140 return seq('if',seq('not',cond),code)}141function compileoneviewevaluate (rule,n,hlist,alist)142 {var subvar = 'sub'+(n-1);143 var datavar = 'l'+(n-1);144 var subgoal = seq('companswerx',subvar,'bl','facts','rules');145 var block = seq('block');146 block.push(seq('bind',datavar,subgoal));147 compilematch(rule[n],datavar,hlist,alist,'ol');148 block.push(seq('if',datavar,compileoneviewsubgoals(rule,n+1,hlist,alist)));149 return block}150function compileoneviewtrue (rule,n,hlist,alist)151 {var subvar = 'sub'+(n-1);152 var datavar = 'l'+(n-1);153 var indvar = 'i'+(n-1);154 var olvar = 'ol'+(n-1);155 var source = seq('sub','datasets',kwotify(rule[n][2]));156 var subgoal = seq(plural(operator(rule[n][1])),seq('sub',subvar,'1'),'bl',source,'rules');157 var block = seq('block');158 block.push(seq('bind',datavar,subgoal));159 compilematch(rule[n][1],seq('sub',datavar,indvar),hlist,alist,olvar);160 var bind = seq('maatchify',seq('sub',subvar,'1'),'bl',seq('sub',datavar,indvar),'bl',olvar);161 var code = compileoneviewsubgoals(rule,n+1,hlist,alist);162 var inner = seq('block');163 inner.push(seq('bind',olvar,seq('seq')));164 inner.push(bind);165 inner.push(code);166 inner.push(seq('backup',olvar));167 block.push(seq('loop',indvar,'0',datavar+'.length',inner));168 return block}169function compileoneviewnot (rule,n,hlist,blist)170 {var cond = compilecall(rule[n][1],hlist,blist); 171 var code = compileoneviewsubgoals(rule,n+1,hlist,blist);172 return seq('if',seq('not',cond),code)}173function compileoneviewbound (rule,n,hlist,alist)174 {var subroutine = single(operator(rule[n]));175 var cond = seq(subroutine,codify(rule[n],hlist,alist),'bl','facts','rules');176 return seq('if',cond,compileoneviewsubgoals(rule,n+1,hlist,alist))}177function compileoneviewlast (rule,n,hlist,alist)178 {var subvar = 'sub'+(n-1);179 var datavar = 'l'+(n-1);180 var subgoal = seq(single(operator(rule[n])),subvar,'bl','facts','rules');181 var block = seq('block');182 block.push(seq('bind',datavar,subgoal));183 compilematch(rule[n],datavar,hlist,alist,'ol');184 block.push(seq('if',datavar,compileoneviewsubgoals(rule,n+1,hlist,alist)));185 return block}186function compileoneviewdb (rule,n,hlist,alist)187 {var subvar = 'sub'+(n-1);188 var datavar = 'l'+(n-1);189 var indvar = 'i'+(n-1);190 var olvar = 'ol'+(n-1);191 var subgoal = seq(plural(operator(rule[n])),subvar,'bl','facts','rules');192 var block = seq('block');193 block.push(seq('bind',datavar,subgoal));194 compilematch(rule[n],seq('sub',datavar,indvar),hlist,alist,olvar);195 var bind = seq('maatchify',subvar,'bl',seq('sub',datavar,indvar),'bl',olvar);196 var code = compileoneviewsubgoals(rule,n+1,hlist,alist);197 var inner = seq('block');198 inner.push(seq('bind',olvar,seq('seq')));199 inner.push(bind);200 inner.push(code);201 inner.push(seq('backup',olvar));202 inner.push(seq('if','answer','break'));203 block.push(seq('loop',indvar,'0',datavar+'.length',inner));204 return block}205//------------------------------------------------------------------------------206// compileallview207//------------------------------------------------------------------------------208function compileallview (view,rules)209 {var data = indexees(view,rules);210 var code = seq('function',plural(view),seq('query','al','facts','rules'));211 code.push(seq('bind','answers',seq('seq')));212 for (var i=0; i<data.length; i++)213 {var rule = data[i];214 if (atomp(rule)) {rule = seq('rule',rule,'true')};215 code.push(compileallviewrule(rule))};216 code.push(seq('return','answers'));217 return code}218function compileallviewrule (rule)219 {var hlist = vars(rule[1]);220 var blist = {};221 var code = seq('block');222 code.push(seq('bind','head',codify(rule[1],[],{})));223 for (var i=2; i<rule.length; i++)224 {code.push(seq('bind','sub'+(i-1),codify(rule[i],[],{})))};225 code.push(seq('bind','bl',seq('obj')));226 code.push(seq('bind','ol',seq('seq')));227 var cond = seq('vnify','query','al','head','bl','ol');228 var subcode = seq('block');229 subcode.push(compileallviewsubgoals(rule,2,hlist,blist));230 subcode.push(seq('backup','ol'));231 code.push(seq('if',cond,subcode));232 return code};233function compileallviewsubgoals (rule,n,hlist,blist)234 {if (n>=rule.length)235 {var result = codify(rule[1],hlist,blist);236 return seq('block',seq('answers.push',result))};237 return compileallviewsubgoal(rule,n,hlist,blist)}238function compileallviewsubgoal (rule,n,hlist,alist)239 {if (symbolp(rule[n]))240 {return compileallviewatom(rule,n,hlist,alist)};241 if (rule[n][0]==='same')242 {return compileallviewsame(rule,n,hlist,alist)};243 if (rule[n][0]==='distinct')244 {return compileallviewdistinct(rule,n,hlist,alist)};245 if (rule[n][0]==='evaluate')246 {return compileallviewevaluate(rule,n,hlist,alist)};247 if (rule[n][0]==='true' && rule[n].length===3)248 {return compileallviewtrue(rule,n,hlist,alist)};249 if (rule[n][0]==='not')250 {return compileallviewnot(rule,n,hlist,alist)};251 if (compgroundp(rule[n],alist))252 {return compileallviewbound(rule,n,hlist,alist)};253 return compileallviewdb(rule,n,hlist,alist)}254function compileallviewatom (rule,n,hlist,alist)255 {if (rule[n]==='true') {return compileallviewsubgoals(rule,n+1,hlist,alist)};256 if (rule[n]==='false') {return 'false'};257 var subroutine = single(rule[n]);258 var cond = seq(subroutine,kwotify(rule[n]),'bl','facts','rules');259 return seq('if',cond,compileallviewsubgoals(rule,n+1,hlist,alist))}260function compileallviewsame (rule,n,hlist,alist)261 {var x = codify(rule[n][1],hlist,alist);262 var y = codify(rule[n][2],hlist,alist);263 var cond = seq('equalp',x,y);264 var code = compileallviewsubgoals(rule,n+1,hlist,alist);265 return seq('if',cond,code)}266function compileallviewdistinct (rule,n,hlist,alist)267 {var x = codify(rule[n][1],hlist,alist);268 var y = codify(rule[n][2],hlist,alist);269 var cond = seq('equalp',x,y);270 var code = compileallviewsubgoals(rule,n+1,hlist,alist);271 return seq('if',seq('not',cond),code)}272function compileallviewevaluate (rule,n,hlist,alist)273 {var subvar = 'sub'+(n-1);274 var datavar = 'l'+(n-1);275 var subgoal = seq('companswerx',subvar,'bl','facts','rules');276 var block = seq('block');277 block.push(seq('bind',datavar,subgoal));278 compilematch(rule[n],datavar,hlist,alist,'ol');279 block.push(seq('if',datavar,compileallviewsubgoals(rule,n+1,hlist,alist)));280 return block}281function compileallviewtrue (rule,n,hlist,alist)282 {var subvar = 'sub'+(n-1);283 var datavar = 'l'+(n-1);284 var indvar = 'i'+(n-1);285 var olvar = 'ol'+(n-1);286 var source = seq('sub','datasets',kwotify(rule[n][2]));287 var subgoal = seq(plural(operator(rule[n][1])),seq('sub',subvar,'1'),'bl',source,'rules');288 var block = seq('block');289 block.push(seq('bind',datavar,subgoal));290 compilematch(rule[n][1],seq('sub',datavar,indvar),hlist,alist,olvar);291 var bind = seq('maatchify',seq('sub',subvar,'1'),'bl',seq('sub',datavar,indvar),'bl',olvar);292 var code = compileallviewsubgoals(rule,n+1,hlist,alist);293 var inner = seq('block');294 inner.push(seq('bind',olvar,seq('seq')));295 inner.push(bind);296 inner.push(code);297 inner.push(seq('backup',olvar));298 block.push(seq('loop',indvar,'0',datavar+'.length',inner));299 return block}300function compileallviewnot (rule,n,hlist,blist)301 {var cond = compilecall(rule[n][1],hlist,blist);302 var code = compileallviewsubgoals(rule,n+1,hlist,blist);303 return seq('if',seq('not',cond),code)}304function compileallviewbound (rule,n,hlist,alist)305 {var subroutine = single(operator(rule[n]));306 var cond = seq(subroutine,codify(rule[n],hlist,alist),'bl','facts','rules');307 return seq('if',cond,compileallviewsubgoals(rule,n+1,hlist,alist))}308function compileallviewdb (rule,n,hlist,alist)309 {var subvar = 'sub'+(n-1);310 var datavar = 'l'+(n-1);311 var indvar = 'i'+(n-1);312 var olvar = 'ol'+(n-1);313 var subgoal = seq(plural(operator(rule[n])),subvar,'bl','facts','rules');314 var block = seq('block');315 block.push(seq('bind',datavar,subgoal));316 compilematch(rule[n],seq('sub',datavar,indvar),hlist,alist,olvar);317 var bind = seq('maatchify',subvar,'bl',seq('sub',datavar,indvar),'bl',olvar);318 var code = compileallviewsubgoals(rule,n+1,hlist,alist);319 var inner = seq('block');320 inner.push(seq('bind',olvar,seq('seq')));321 inner.push(bind);322 inner.push(code);323 inner.push(seq('backup',olvar));324 block.push(seq('loop',indvar,'0',datavar+'.length',inner));325 return block}326//------------------------------------------------------------------------------327function compilecall (subgoal,hlist,blist)328 {if (symbolp(subgoal))329 {return compilecallatom(subgoal,hlist,blist)};330 if (subgoal[0]==='same')331 {return compilecallsame(subgoal,hlist,blist)};332 if (subgoal[0]==='distinct')333 {return compilecalldistinct(subgoal,hlist,blist)};334 if (subgoal[0]==='evaluate')335 {return compilecallevaluate(subgoal,hlist,blist)};336 if (subgoal[0]==='true' && subgoal.length===3)337 {return compilecalltrue(subgoal,hlist,blist)};338 return compilecalldb(subgoal,hlist,blist)}339function compilecallatom (subgoal,hlist,blist)340 {return seq('$' + subgoal + '$',seq('seq'),'facts','rules')}341function compilecallsame (subgoal,hlist,blist)342 {var x1 = codify(subgoal[1],[],blist);343 var x2 = codify(subgoal[2],[],blist);344 return seq('equalp',x1,x2)}345function compilecalldistinct (subgoal,hlist,blist)346 {var x1 = codify(subgoal[1],[],blist);347 var x2 = codify(subgoal[2],[],blist);348 return seq('not',seq('equalp',x1,x2))}349function compilecallevaluate (subgoal,hlist,blist)350 {var query = codify(subgoal,hlist,blist);351 return seq('companswerx',query,'bl','facts','rules')}352function compilecalltrue (subgoal,hlist,blist)353 {var source = seq('sub','datasets',kwotify(subgoal[2]));354 var subroutine = single(operator(subgoal[1]));355 var query = codify(subgoal[1],hlist,blist);356 return seq(subroutine,query,seq('seq'),source,'rules')}357function compilecalldb (subgoal,hlist,blist)358 {var subroutine = single(operator(subgoal));359 var query = codify(subgoal,hlist,blist);360 return seq(subroutine,query,seq('seq'),'facts','rules')}361//------------------------------------------------------------------------------362function compilecalls (subgoal,hlist,blist)363 {if (symbolp(subgoal))364 {return compilecallsdb(subgoal,hlist,blist)};365 if (subgoal[0]==='true' && subgoal.length===3)366 {return compilecallstrue(subgoal,hlist,blist)};367 return compilecallsdb(subgoal,hlist,blist)}368function compilecallstrue (subgoal,hlist,blist)369 {var source = seq('sub','datasets',kwotify(subgoal[2]));370 var subroutine = plural(operator(subgoal[1]));371 var query = codify(subgoal[1],hlist,blist);372 return seq(subroutine,query,seq('seq'),source,'rules')}373function compilecallsdb (subgoal,hlist,blist)374 {var subroutine = plural(operator(subgoal));375 var query = codify(subgoal,hlist,blist);376 return seq(subroutine,query,seq('seq'),'facts','rules')}377//------------------------------------------------------------------------------378// compileoneatomlist379//------------------------------------------------------------------------------380function compileoneatomlist (view,rules)381 {var name = single(view);382 var params = ['query','al','facts','rules'];383 var dataname = static(view);384 var code = ['baseanswerx','query','al',dataname];385 return seq('function',name,params,seq('return',code))}386//------------------------------------------------------------------------------387// compileallatomlist388//------------------------------------------------------------------------------389function compileallatomlist (view,rules)390 {var name = plural(view);391 var params = ['query','al','facts','rules'];392 var dataname = static(view);393 var code = ['baseanswers','query','al',dataname];394 return seq('function',name,params,seq('return',code))}395//------------------------------------------------------------------------------396// compileonebase397//------------------------------------------------------------------------------398function compileonebase (rel)399 {var params = ['query','al','facts','rules'];400 return seq('function',single(rel),params,401 seq('return',seq('dataanswerx').concat(params)))}402//------------------------------------------------------------------------------403// compileallbase404//------------------------------------------------------------------------------405function compileallbase (rel)406 {var params = ['query','al','facts','rules'];407 return seq('function',plural(rel),params,408 seq('return',seq('dataanswers').concat(params)))}409//==============================================================================410// program411//==============================================================================412//------------------------------------------------------------------------------413// prettyprogram414//------------------------------------------------------------------------------415function prettyprogram (rules)416 {var code = '';417 var views = getviewsfromrules(rules);418 for (var i=0; i<views.length; i++)419 {var arity = getarity(views[i],rules);420 if (arity===0)421 {code += prettyjs(programoneviewbound(views[i],rules))};422 if (arity===1)423 {code += prettyjs(programoneviewbound(views[i],rules));424 code += prettyjs(programoneviewf(views[i],rules));425 code += prettyjs(programallviewf(views[i],rules))};426 if (arity===2)427 {code += prettyjs(programoneviewbound(views[i],rules));428 code += prettyjs(programoneviewbf(views[i],rules));429 code += prettyjs(programoneviewfb(views[i],rules));430 code += prettyjs(programoneviewfree(views[i],rules));431 code += prettyjs(programallviewbf(views[i],rules));432 code += prettyjs(programallviewfb(views[i],rules));433 code += prettyjs(programallviewfree(views[i],rules))};434 if (arity>2)435 {code += prettyjs(programoneviewbound(views[i],rules));436 code += prettyjs(programoneviewfree(views[i],rules));437 code += prettyjs(programallviewfree(views[i],rules))}};438 var atoms = getatomsfromrules(rules);439 for (var i=0; i<atoms.length; i++)440 {var arity = getarity(atoms[i],rules);441 if (arity===0)442 {code += prettyjs(programoneatombound(atoms[i],rules))};443 if (arity===1)444 {code += prettyjs(programoneatombound(atoms[i],rules))445 code += prettyjs(programoneatomf(atoms[i],rules));446 code += prettyjs(programallatomf(atoms[i],rules))};447 if (arity===2)448 {code += prettyjs(programoneatombound(atoms[i],rules))449 code += prettyjs(programoneatombf(atoms[i],rules));450 code += prettyjs(programoneatomfb(atoms[i],rules));451 code += prettyjs(programoneatomfree(atoms[i],rules));452 code += prettyjs(programallatombf(atoms[i],rules));453 code += prettyjs(programallatomfb(atoms[i],rules));454 code += prettyjs(programallatomfree(atoms[i],rules))};455 if (arity>2)456 {code += prettyjs(programoneatombound(atoms[i],rules));457 code += prettyjs(programoneatomfree(atoms[i],rules));458 code += prettyjs(programallatomfree(atoms[i],rules))};459 code += prettyjs(programatomdata(atoms[i],rules))};460 var bases = getbasesfromrules(rules);461 for (var i=0; i<bases.length; i++)462 {var arity = getarity(bases[i],rules);463 if (arity===0)464 {code += prettyjs(programonebasebound(bases[i],rules))};465 if (arity===1)466 {code += prettyjs(programonebasebound(bases[i],rules));467 code += prettyjs(programonebasef(bases[i],rules));468 code += prettyjs(programallbasef(bases[i],rules))};469 if (arity===2)470 {code += prettyjs(programonebasebound(bases[i],rules));471 code += prettyjs(programonebasebf(bases[i],rules));472 code += prettyjs(programonebasefb(bases[i],rules));473 code += prettyjs(programonebasefree(bases[i],rules));474 code += prettyjs(programallbasebf(bases[i],rules));475 code += prettyjs(programallbasefb(bases[i],rules));476 code += prettyjs(programallbasefree(bases[i],rules))};477 if (arity===3)478 {code += prettyjs(programonebasebound(bases[i],rules));479 code += prettyjs(programonebasefree(bases[i],rules));480 code += prettyjs(programallbaseffb(bases[i],rules));481 code += prettyjs(programallbasefree(bases[i],rules))};482 if (arity>3)483 {code += prettyjs(programonebasebound(bases[i],rules));484 code += prettyjs(programonebasefree(bases[i],rules));485 code += prettyjs(programallbasefree(bases[i],rules))}};486 return code}487//------------------------------------------------------------------------------488// programoneview cases489//------------------------------------------------------------------------------490function programoneviewbound (view,rules)491 {var arity = getrulearity(view,rules);492 var dataset = static(view);493 var subroutine = specialn(view,arity);494 var params = [];495 for (var i=0; i<arity; i++) {params.push('x' + (i+1))};496 params.push('facts');497 params.push('rules');498 var code = seq('function',subroutine,params);499 var data = indexees(view,rules);500 for (var i=0; i<data.length; i++)501 {var rule = data[i];502 if (atomp(rule)) {rule = seq('rule',rule,'true')};503 var blist = {};504 var cond = [];505 for (var j=0; j<params.length-2; j++)506 {cond.push(skinnymatch(params[j],rule[1][j+1],blist))};507 cond = programands(cond);508 var subcode = programoneviewsubgoals(rule,2,blist,true);509 code.push(seq('if',cond,subcode))};510 code.push(seq('return','false'));511 return code}512function programoneviewf (view,rules)513 {var subroutine = special(view,'f');514 var code = seq('function',subroutine,seq('facts','rules'));515 var data = indexees(view,rules);516 for (var i=0; i<data.length; i++)517 {var rule = data[i];518 if (atomp(rule)) {rule = seq('rule',rule,'true')};519 var blist = {};520 code.push(programoneviewsubgoals(rule,2,blist,rule[1][1]))};521 code.push(seq('return','false'));522 return code}523function programoneviewbf (view,rules)524 {var subroutine = special(view,'bf');525 var code = seq('function',subroutine,seq('x1','facts','rules'));526 var data = indexees(view,rules);527 for (var i=0; i<data.length; i++)528 {var rule = data[i];529 if (atomp(rule)) {rule = seq('rule',rule,'true')};530 var blist = {};531 var cond = skinnymatch('x1',rule[1][1],blist);532 var subcode = programoneviewsubgoals(rule,2,blist,rule[1][2]);533 code.push(seq('if',cond,subcode))};534 code.push(seq('return','false'));535 return code}536function programoneviewfb (view,rules)537 {var subroutine = special(view,'fb');538 var code = seq('function',subroutine,seq('x2','facts','rules'));539 var data = indexees(view,rules);540 for (var i=0; i<data.length; i++)541 {var rule = data[i];542 if (atomp(rule)) {rule = seq('rule',rule,'true')};543 var blist = {};544 var cond = skinnymatch('x2',rule[1][2],blist);545 var subcode = programoneviewsubgoals(rule,2,blist,rule[1][1]);546 code.push(seq('if',cond,subcode))};547 code.push(seq('return','false'));548 return code}549function programoneviewfree (view,rules)550 {var arity = getrulearity(view,rules);551 var subroutine = special(view,makesequence('f',arity));552 var code = seq('function',subroutine,seq('facts','rules'));553 var data = indexees(view,rules);554 for (var i=0; i<data.length; i++)555 {var rule = data[i];556 if (atomp(rule)) {rule = seq('rule',rule,'true')};557 var blist = {};558 code.push(programoneviewsubgoals(rule,2,blist,rule[1]))};559 code.push(seq('return','false'));560 return code}561function programoneviewsubgoals (rule,n,blist,out)562 {if (n>=rule.length)563 {if (typeof(out)==='boolean') {return seq('return','true')};564 return seq('return',codify(out,[],blist))};565 return programoneviewsubgoal(rule,n,blist,out)}566function programoneviewsubgoal (rule,n,blist,out)567 {if (symbolp(rule[n]))568 {return programoneviewsubatom(rule,n,blist,out)};569 if (rule[n][0]==='same')570 {return programoneviewsubsame(rule,n,blist,out)};571 if (rule[n][0]==='distinct')572 {return programoneviewsubdistinct(rule,n,blist,out)};573 if (rule[n][0]==='evaluate')574 {return programoneviewsubevaluate(rule,n,blist,out)};575 if (rule[n][0]==='true' && rule[n].length===3)576 {return programoneviewsubtrue(rule,n,blist,out)};577 if (rule[n][0]==='not')578 {return programoneviewsubnot(rule,n,blist,out)};579 if (compgroundp(rule[n],blist))580 {return programoneviewsubbound(rule,n,blist,out)};581 if (rule[n].length-1===1 && compfp(rule[n],blist))582 {return programoneviewsubf(rule,n,blist,out)};583 if (rule[n].length-1===2 && compbfp(rule[n],blist))584 {return programoneviewsubbf(rule,n,blist,out)};585 if (rule[n].length-1===2 && compfbp(rule[n],blist))586 {return programoneviewsubfb(rule,n,blist,out)};587 //if (rule[n].length-1===3 && compffbp(rule[n],blist))588 // {return programoneviewsubffb(rule,n,blist,out)};589 if (compfreep(rule[n],blist))590 {return programoneviewsubfree(rule,n,blist,out)};591 if (n===rule.length-1)592 {return programoneviewsublast(rule,n,blist,out)};593 return programoneviewsubdb(rule,n,blist,out)}594function programoneviewsubatom (rule,n,blist,out)595 {if (rule[n]==='true') {return programoneviewsubgoals(rule,n+1,blist,out)};596 if (rule[n]==='false') {return 'false'};597 var subroutine = specialn(rule[n],0);598 var cond = seq(subroutine,'facts','rules');599 return seq('if',cond,programoneviewsubgoals(rule,n+1,blist,out))}600function programoneviewsubsame (rule,n,blist,out)601 {var x = codify(rule[n][1],[],blist);602 var y = codify(rule[n][2],[],blist);603 var cond = seq('equalp',x,y);604 var code = programoneviewsubgoals(rule,n+1,blist,out);605 return seq('if',cond,code)}606function programoneviewsubdistinct (rule,n,blist,out)607 {var x = codify(rule[n][1],[],blist);608 var y = codify(rule[n][2],[],blist);609 var cond = seq('equalp',x,y);610 var code = programoneviewsubgoals(rule,n+1,blist,out);611 return seq('if',seq('not',cond),code)}612function programoneviewsubevaluate (rule,n,blist,out)613 {var datavar = 'l'+(n-1);614 var query = codify(rule[n][1],[],blist);615 var subgoal = seq('compvalue',query,'facts','rules')616 var cond = skinnymatch(datavar,rule[n][2],blist);617 var block = seq('block');618 block.push(seq('bind',datavar,subgoal));619 block.push(seq('if',cond,programoneviewsubgoals(rule,n+1,blist,out)));620 return block}621function programoneviewsubtrue (rule,n,blist,out)622 {var source = seq('sub','datasets',kwotify(rule[n][2]));623 var datavar = 'l'+(n-1);624 var indvar = 'i'+(n-1);625 var subgoal = compilecalls(rule[n],[],blist);626 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);627 var code = programoneviewsubgoals(rule,n+1,blist,out)628 var block = seq('block');629 block.push(seq('bind',datavar,subgoal));630 block.push(seq('loop',indvar,'0',datavar+'.length',code));631 return block}632function programoneviewsubnot (rule,n,blist,out)633 {var cond = programcall(rule[n][1],blist);634 var code = programoneviewsubgoals(rule,n+1,blist,out);635 return seq('if',seq('not',cond),code)}636function programoneviewsubbound (rule,n,blist,out)637 {var subroutine = specialn(operator(rule[n]),rule[n].length-1);638 var cond = seq(subroutine);639 for (var i=1; i<rule[n].length; i++)640 {cond.push(skinnyplug(rule[n][i],blist))}641 cond.push('facts');642 cond.push('rules');643 return seq('if',cond,programoneviewsubgoals(rule,n+1,blist,out))}644function programoneviewsubf (rule,n,blist,out)645 {var datavar = 'l'+(n-1);646 var indvar = 'i'+(n-1);647 var subroutine = specials(operator(rule[n]),'f');648 var subcode = seq(subroutine,'facts','rules');649 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);650 var code = programoneviewsubgoals(rule,n+1,blist,out)651 var block = seq('block');652 block.push(seq('bind',datavar,subcode));653 block.push(seq('loop',indvar,'0',datavar+'.length',code));654 return block}655function programoneviewsubbf (rule,n,blist,out)656 {var datavar = 'l'+(n-1);657 var indvar = 'i'+(n-1);658 var subroutine = specials(operator(rule[n]),'bf');659 var query = codify(rule[n][1],[],blist);660 var subcode = seq(subroutine,query,'facts','rules');661 skinnymatch(seq('sub',datavar,indvar),rule[n][2],blist);662 var code = programoneviewsubgoals(rule,n+1,blist,out)663 var block = seq('block');664 block.push(seq('bind',datavar,subcode));665 block.push(seq('loop',indvar,'0',datavar+'.length',code));666 return block}667function programoneviewsubfb (rule,n,blist,out)668 {var datavar = 'l'+(n-1);669 var indvar = 'i'+(n-1);670 var subroutine = specials(operator(rule[n]),'fb');671 var query = codify(rule[n][2],[],blist);672 var subcode = seq(subroutine,query,'facts','rules');673 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);674 var code = programoneviewsubgoals(rule,n+1,blist,out)675 var block = seq('block');676 block.push(seq('bind',datavar,subcode));677 block.push(seq('loop',indvar,'0',datavar+'.length',code));678 return block}679function programoneviewsubffb (rule,n,blist,out)680 {var datavar = 'l'+(n-1);681 var indvar = 'i'+(n-1);682 var subroutine = specials(operator(rule[n]),'ffb');683 var query = codify(rule[n][3],[],blist);684 var subcode = seq(subroutine,query,'facts','rules');685 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);686 var code = programoneviewsubgoals(rule,n+1,blist,out)687 var block = seq('block');688 block.push(seq('bind',datavar,subcode));689 block.push(seq('loop',indvar,'0',datavar+'.length',code));690 return block}691function programoneviewsubfree (rule,n,blist,out)692 {var arity = rule[n].length-1;693 var datavar = 'l'+(n-1);694 var indvar = 'i'+(n-1);695 var subroutine = specials(operator(rule[n]),makesequence('f',arity));696 var subcode = seq(subroutine,'facts','rules');697 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);698 var code = programoneviewsubgoals(rule,n+1,blist,out)699 var block = seq('block');700 block.push(seq('bind',datavar,subcode));701 block.push(seq('loop',indvar,'0',datavar+'.length',code));702 return block}703function programoneviewsublast (rule,n,blist,out)704 {var datavar = 'l'+(n-1);705 var subgoal = compilecall(rule[n],[],blist);706 skinnymatch(datavar,rule[n],blist);707 var code = programoneviewsubgoals(rule,n+1,blist,out)708 var block = seq('block');709 block.push(seq('bind',datavar,subgoal));710 block.push(seq('if',datavar,code));711 return block}712function programoneviewsubdb (rule,n,blist,out)713 {var datavar = 'l'+(n-1);714 var indvar = 'i'+(n-1);715 var subgoal = compilecalls(rule[n],[],blist);716 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);717 var code = programoneviewsubgoals(rule,n+1,blist,out)718 var block = seq('block');719 block.push(seq('bind',datavar,subgoal));720 block.push(seq('loop',indvar,'0',datavar+'.length',code));721 return block}722//------------------------------------------------------------------------------723function programcall (subgoal,blist)724 {if (symbolp(subgoal))725 {return programcallatom(subgoal,blist)};726 if (subgoal[0]==='same')727 {return programcallsame(subgoal,blist)};728 if (subgoal[0]==='distinct')729 {return programcalldistinct(subgoal,blist)};730 if (subgoal[0]==='evaluate')731 {return programcallevaluate(subgoal,blist)};732 if (subgoal[0]==='true' && subgoal.length===3)733 {return programcalltrue(subgoal,blist)};734 if (compgroundp(subgoal,blist))735 {return programcallbound(subgoal,blist)};736 if (subgoal.length-1===1 && compfp(subgoal,blist))737 {return programcallf(subgoal,blist)};738 if (subgoal.length-1===2 && compbfp(subgoal,blist))739 {return programcallbf(subgoal,blist)};740 if (subgoal.length-1===2 && compfbp(subgoal,blist))741 {return programcallfb(subgoal,blist)};742 if (subgoal.length-1===3 && compffbp(subgoal,blist))743 {return programcallffb(subgoal,blist)};744 if (compfreep(subgoal,blist))745 {return programcallfree(subgoal,blist)};746 return programcalldb(subgoal,blist)}747function programcallatom (subgoal,blist)748 {return seq('$' + subgoal + '$$','facts','rules')}749function programcallsame (subgoal,blist)750 {var x1 = codify(subgoal[1],[],blist);751 var x2 = codify(subgoal[2],[],blist);752 return seq('equalp',x1,x2)}753function programcalldistinct (subgoal,blist)754 {var x1 = codify(subgoal[1],[],blist);755 var x2 = codify(subgoal[2],[],blist);756 return seq('not',seq('equalp',x1,x2))}757function programcallevaluate (subgoal,blist)758 {var query = codify(subgoal,[],blist);759 return seq('companswerx',query,'bl','facts','rules')}760function programcalltrue (subgoal,blist)761 {var source = seq('sub','datasets',kwotify(subgoal[2]));762 var subroutine = single(operator(subgoal[1]));763 var query = codify(subgoal[1],[],blist);764 return seq(subroutine,query,seq('seq'),source,'rules')}765function programcallbound (subgoal,blist)766 {var arity = subgoal.length-1;767 var subroutine = special(operator(subgoal),makesequence('b',arity));768 var code = [subroutine];769 for (var i=1; i<subgoal.length; i++)770 {code.push(codify(subgoal[i],[],blist))}771 code.push('facts');772 code.push('rules');773 return code}774function programcallf (subgoal,blist)775 {var subroutine = '$' + operator(subgoal) + '$f$';776 return seq(subroutine,'facts','rules')}777function programcallbf (subgoal,blist)778 {var subroutine = '$' + operator(subgoal) + '$bf$';779 var query = codify(subgoal[1],[],blist);780 return seq(subroutine,query,'facts','rules')}781function programcallfb (subgoal,blist)782 {var subroutine = '$' + operator(subgoal) + '$fb$';783 var query = codify(subgoal[2],[],blist);784 return seq(subroutine,query,'facts','rules')}785function programcallffb (subgoal,blist)786 {var subroutine = '$' + operator(subgoal) + '$ffb$';787 var query = codify(subgoal[3],[],blist);788 return seq(subroutine,query,'facts','rules')}789function programcallfree (subgoal,blist)790 {var arity = subgoal.length-1;791 var subroutine = special(operator(subgoal),makesequence('f',arity))792 var code = [subroutine];793 for (var i=1; i<subgoal.length; i++)794 {code.push(codify(subgoal[i],[],blist))}795 code.push('facts');796 code.push('rules');797 return code}798function programcalldb (subgoal,blist)799 {var subroutine = single(operator(subgoal));800 var query = codify(subgoal,[],blist);801 return seq(subroutine,query,seq('seq'),'facts','rules')}802//------------------------------------------------------------------------------803// programallview cases804//------------------------------------------------------------------------------805function programallviewf (view,rules)806 {var subroutine = specials(view,'f');807 var code = seq('function',subroutine,seq('facts','rules'));808 code.push(seq('bind','answers',seq('seq')));809 var data = indexees(view,rules);810 for (var i=0; i<data.length; i++)811 {var rule = data[i];812 if (atomp(rule)) {rule = seq('rule',rule,'true')};813 var blist = {};814 code.push(programallviewsubgoals(rule,2,blist,1))};815 code.push(seq('return','answers'));816 return code}817function programallviewbf (view,rules)818 {var subroutine = specials(view,'bf');819 var code = seq('function',subroutine,seq('x1','facts','rules'));820 code.push(seq('bind','answers',seq('seq')));821 var data = indexees(view,rules);822 for (var i=0; i<data.length; i++)823 {var rule = data[i];824 if (atomp(rule)) {rule = seq('rule',rule,'true')};825 var blist = {};826 var cond = skinnymatch('x1',rule[1][1],blist);827 code.push(seq('if',cond,programallviewsubgoals(rule,2,blist,2)))};828 code.push(seq('return','answers'));829 return code}830function programallviewfb (view,rules)831 {var subroutine = specials(view,'fb');832 var code = seq('function',subroutine,seq('x2','facts','rules'));833 code.push(seq('bind','answers',seq('seq')));834 var data = indexees(view,rules);835 for (var i=0; i<data.length; i++)836 {var rule = data[i];837 if (atomp(rule)) {rule = seq('rule',rule,'true')};838 var blist = {};839 var cond = skinnymatch('x2',rule[1][2],blist);840 code.push(seq('if',cond,programallviewsubgoals(rule,2,blist,1)))};841 code.push(seq('return','answers'));842 return code}843function programallviewfree (view,rules)844 {var arity = getrulearity(view,rules);845 var subroutine = specials(view,makesequence('f',arity));846 var code = seq('function',subroutine,seq('facts','rules'));847 code.push(seq('bind','answers',seq('seq')));848 var data = indexees(view,rules);849 for (var i=0; i<data.length; i++)850 {var rule = data[i];851 if (atomp(rule)) {rule = seq('rule',rule,'true')};852 var blist = {};853 code.push(programallviewsubgoals(rule,2,blist,rule[1]))};854 code.push(seq('return','answers'));855 return code}856function programallviewsubgoals (rule,n,blist,out)857 {if (n>=rule.length)858 {if (typeof(out)==='number') {var result = codify(rule[1][out],[],blist)}859 else {var result = codify(out,[],blist)};860 return seq('answers.push',result)};861 return programallviewsubgoal(rule,n,blist,out)}862function programallviewsubgoal (rule,n,blist,out)863 {if (symbolp(rule[n]))864 {return programallviewsubatom(rule,n,blist,out)};865 if (rule[n][0]==='same')866 {return programallviewsubsame(rule,n,blist,out)};867 if (rule[n][0]==='distinct')868 {return programallviewsubdistinct(rule,n,blist,out)};869 if (rule[n][0]==='evaluate')870 {return programallviewsubevaluate(rule,n,blist,out)};871 if (rule[n][0]==='true' && rule[n].length===3)872 {return programallviewsubtrue(rule,n,blist,out)};873 if (rule[n][0]==='not')874 {return programallviewsubnot(rule,n,blist,out)};875 if (compgroundp(rule[n],blist))876 {return programallviewsubbound(rule,n,blist,out)};877 if (rule[n].length-1===1 && compfp(rule[n],blist))878 {return programallviewsubf(rule,n,blist,out)};879 if (rule[n].length-1===2 && compbfp(rule[n],blist))880 {return programallviewsubbf(rule,n,blist,out)};881 if (rule[n].length-1===2 && compfbp(rule[n],blist))882 {return programallviewsubfb(rule,n,blist,out)};883 //if (rule[n].length-1===3 && compffbp(rule[n],blist))884 // {return programallviewsubffb(rule,n,blist,out)};885 if (compfreep(rule[n],blist))886 {return programallviewsubfree(rule,n,blist,out)};887 return programallviewsubdb(rule,n,blist,out)}888function programallviewsubatom (rule,n,blist,out)889 {if (rule[n]==='true') {return programallviewsubgoals(rule,n+1,blist,out)};890 if (rule[n]==='false') {return 'false'};891 var subroutine = specialn(rule[n],0);892 var cond = seq(subroutine,'facts','rules');893 return seq('if',cond,programallviewsubgoals(rule,n+1,blist,out))}894function programallviewsubsame (rule,n,blist,out)895 {var x = codify(rule[n][1],[],blist);896 var y = codify(rule[n][2],[],blist);897 var cond = seq('equalp',x,y);898 var code = programallviewsubgoals(rule,n+1,blist,out);899 return seq('if',cond,code)}900function programallviewsubdistinct (rule,n,blist,out)901 {var x = codify(rule[n][1],[],blist);902 var y = codify(rule[n][2],[],blist);903 var cond = seq('equalp',x,y);904 var code = programallviewsubgoals(rule,n+1,blist,out);905 return seq('if',seq('not',cond),code)}906function programallviewsubevaluate (rule,n,blist,out)907 {var datavar = 'l'+(n-1);908 var query = codify(rule[n][1],[],blist);909 var subgoal = seq('compvalue',query,'facts','rules')910 var cond = skinnymatch(datavar,rule[n][2],blist);911 var block = seq('block');912 block.push(seq('bind',datavar,subgoal));913 block.push(seq('if',cond,programallviewsubgoals(rule,n+1,blist,out)));914 return block}915function programallviewsubtrue (rule,n,blist,out)916 {var source = seq('sub','datasets',kwotify(rule[n][2]));917 var datavar = 'l'+(n-1);918 var indvar = 'i'+(n-1);919 var subgoal = compilecalls(rule[n],[],blist);920 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);921 var code = programallviewsubgoals(rule,n+1,blist,out)922 var block = seq('block');923 block.push(seq('bind',datavar,subgoal));924 block.push(seq('loop',indvar,'0',datavar+'.length',code));925 return block}926function programallviewsubnot (rule,n,blist,out)927 {var cond = programcall(rule[n][1],blist);928 var code = programallviewsubgoals(rule,n+1,blist,out);929 return seq('if',seq('not',cond),code)}930function programallviewsubbound (rule,n,blist,out)931 {var subroutine = specialn(operator(rule[n]),rule[n].length-1);932 var cond = seq(subroutine);933 for (var i=1; i<rule[n].length; i++)934 {cond.push(skinnyplug(rule[n][i],blist))}935 cond.push('facts');936 cond.push('rules');937 return seq('if',cond,programallviewsubgoals(rule,n+1,blist,out))}938function programallviewsubf (rule,n,blist,out)939 {var datavar = 'l'+(n-1);940 var indvar = 'i'+(n-1);941 var subroutine = specials(operator(rule[n]),'f');942 var subcode = seq(subroutine,'facts','rules');943 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);944 var code = programallviewsubgoals(rule,n+1,blist,out)945 var block = seq('block');946 block.push(seq('bind',datavar,subcode));947 block.push(seq('loop',indvar,'0',datavar+'.length',code));948 return block}949function programallviewsubbf (rule,n,blist,out)950 {var datavar = 'l'+(n-1);951 var indvar = 'i'+(n-1);952 var subroutine = specials(operator(rule[n]),'bf');953 var query = codify(rule[n][1],[],blist);954 var subcode = seq(subroutine,query,'facts','rules');955 skinnymatch(seq('sub',datavar,indvar),rule[n][2],blist);956 var code = programallviewsubgoals(rule,n+1,blist,out)957 var block = seq('block');958 block.push(seq('bind',datavar,subcode));959 block.push(seq('loop',indvar,'0',datavar+'.length',code));960 return block}961function programallviewsubfb (rule,n,blist,out)962 {var datavar = 'l'+(n-1);963 var indvar = 'i'+(n-1);964 var subroutine = specials(operator(rule[n]),'fb');965 var query = codify(rule[n][2],[],blist);966 var subcode = seq(subroutine,query,'facts','rules');967 skinnymatch(seq('sub',datavar,indvar),rule[n][1],blist);968 var code = programallviewsubgoals(rule,n+1,blist,out)969 var block = seq('block');970 block.push(seq('bind',datavar,subcode));971 block.push(seq('loop',indvar,'0',datavar+'.length',code));972 return block}973function programallviewsubffb (rule,n,blist,out)974 {var datavar = 'l'+(n-1);975 var indvar = 'i'+(n-1);976 var subroutine = specials(operator(rule[n]),'ffb');977 var query = codify(rule[n][3],[],blist);978 var subcode = seq(subroutine,query,'facts','rules');979 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);980 var code = programallviewsubgoals(rule,n+1,blist,out)981 var block = seq('block');982 block.push(seq('bind',datavar,subcode));983 block.push(seq('loop',indvar,'0',datavar+'.length',code));984 return block}985function programallviewsubfree (rule,n,blist,out)986 {var arity = rule[n].length-1;987 var datavar = 'l'+(n-1);988 var indvar = 'i'+(n-1);989 var subroutine = specials(operator(rule[n]),makesequence('f',arity));990 var subcode = seq(subroutine,'facts','rules');991 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);992 var code = programallviewsubgoals(rule,n+1,blist,out)993 var block = seq('block');994 block.push(seq('bind',datavar,subcode));995 block.push(seq('loop',indvar,'0',datavar+'.length',code));996 return block}997function programallviewsubdb (rule,n,blist,out)998 {var datavar = 'l'+(n-1);999 var indvar = 'i'+(n-1);1000 var subgoal = compilecalls(rule[n],[],blist);1001 skinnymatch(seq('sub',datavar,indvar),rule[n],blist);1002 var code = programallviewsubgoals(rule,n+1,blist,out)1003 var block = seq('block');1004 block.push(seq('bind',datavar,subgoal));1005 block.push(seq('loop',indvar,'0',datavar+'.length',code));1006 return block}1007//------------------------------------------------------------------------------1008function programcalls (subgoal,blist)1009 {if (symbolp(subgoal)) {return programcallatom(subgoal,blist)};1010 if (compgroundp(subgoal,blist)) {return programcallsbound(subgoal,blist)};1011 var subroutine = plural(operator(subgoal));1012 var query = codify(subgoal,[],blist);1013 return seq(subroutine,query,seq('seq'),'facts','rules')}1014function programcallsatom (subgoal,blist)1015 {return seq('$' + subgoal + '$$','facts','rules')}1016function programcallsbound (subgoal,blist)1017 {var subroutine = specialn(subgoal[0],subgoal.length-1);1018 var code = [subroutine];1019 for (var i=1; i<subgoal.length; i++)1020 {code.push(codify(subgoal[i],blist))}1021 code.push('facts');1022 code.push('rules');1023 return code}1024function programcallsbf (subgoal,blist)1025 {var subroutine = '$$' + operator(subgoal) + '$bf$$';1026 var query = codify(subgoal[1],[],blist);1027 return seq(subroutine,query,'facts','rules')}1028function programcallsfb (subgoal,blist)1029 {var subroutine = '$$' + operator(subgoal) + '$fb$$';1030 var query = codify(subgoal[2],[],blist);1031 return seq(subroutine,query,'facts','rules')}1032function programcallsffb (subgoal,blist)1033 {var subroutine = '$$' + operator(subgoal) + '$ffb$$';1034 var query = codify(subgoal[3],[],blist);1035 return seq(subroutine,query,'facts','rules')}1036function programcallsff (subgoal,blist)1037 {var subroutine = '$$' + operator(subgoal) + '$ff$$';1038 return seq(subroutine,'facts','rules')}1039//------------------------------------------------------------------------------1040// programoneatom cases1041//------------------------------------------------------------------------------1042function programoneatombound (rel,rules)1043 {var arity = getfactarity(rel,rules);1044 var dataset = static(rel);1045 var subroutine = '$' + rel + '$' + makesequence('b',arity) + '$';1046 var params = [];1047 for (var i=0; i<arity; i++) {params.push('x' + (i+1))};1048 var code = seq('block');1049 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1050 for (var i=0; i<arity; i++)1051 {code.push(seq('bind','dum',seq('baseindexps',params[i],dataset)));1052 var cond = seq('and','dum',seq('less','dum.length','data.length'));1053 code.push(seq('if',cond,seq('block',seq('bind','data','dum'))))};1054 var cond = [];1055 for (var i=0; i<arity; i++)1056 {cond.push(seq('equalp',seq('sub',seq('sub','data','i'),i+1),params[i]))};1057 cond = programands(cond);1058 var inner = seq('if',cond,seq('return','true'));1059 code.push(seq('loop','i','0','data.length',inner));1060 code.push(seq('return','false'));1061 return seq('function',subroutine,params,code)}1062//------------------------------------------------------------------------------1063function programoneatomf (rel,rules)1064 {var dataset = static(rel);1065 var subroutine = special(rel,'f');1066 var params = seq('facts','rules');1067 var code = seq('function',subroutine,params);1068 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1069 var cond = seq('greater','data.length','0');1070 code.push(seq('if',cond,seq('return',seq('sub',seq('sub','data','0'),'1'))));1071 code.push(seq('return','false'));1072 return code}1073//------------------------------------------------------------------------------1074function programoneatombf (rel,rules)1075 {var dataset = static(rel);1076 var subroutine = special(rel,'bf');1077 var params = seq('x1','facts','rules');1078 var code = seq('function',subroutine,params);1079 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1080 code.push(seq('bind','dum',seq('baseindexps','x1',dataset)));1081 var cond = seq('and','dum',seq('less','dum.length','data.length'));1082 code.push(seq('if',cond,seq('block',seq('bind','data','dum'))));1083 var cond = seq('equalp',seq('sub',seq('sub','data','i'),'1'),'x1');1084 var result = seq('sub',seq('sub','data','i'),'2');1085 var subcode = seq('if',cond,seq('return',result));1086 code.push(seq('loop','i','0','data.length',subcode));1087 code.push(seq('return','false'));1088 return code}1089//------------------------------------------------------------------------------1090function programoneatomfb (rel,rules)1091 {var dataset = static(rel);1092 var subroutine = special(rel,'fb');1093 var params = seq('x2','facts','rules');1094 var code = seq('function',subroutine,params);1095 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1096 code.push(seq('bind','dum',seq('baseindexps','x2','facts')));1097 var cond = seq('and','dum',seq('less','dum.length','data.length'));1098 var cond = seq('equalp',seq('sub',seq('sub','data','i'),'2'),'x2');1099 var result = seq('sub',seq('sub','data','i'),'1');1100 var subcode = seq('if',cond,seq('return',result));1101 code.push(seq('loop','i','0','data.length',subcode));1102 code.push(seq('return','false'));1103 return code}1104//------------------------------------------------------------------------------1105function programoneatomfree (rel,rules)1106 {var arity = getrulearity(rel,rules);1107 var dataset = static(rel);1108 var subroutine = special(rel,makesequence('f',arity));1109 var params = seq('facts','rules');1110 var code = seq('function',subroutine,params);1111 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1112 var cond = seq('greater','data.length','0');1113 code.push(seq('if',cond,seq('return',seq('sub','data','0'))));1114 code.push(seq('return','false'))1115 return code}1116//------------------------------------------------------------------------------1117// programallatomlist cases1118//------------------------------------------------------------------------------1119function programallatomf (rel,rules)1120 {var dataset = static(rel);1121 var subroutine = specials(rel,'f');1122 var params = seq('facts','rules');1123 var code = seq('function',subroutine,params);1124 var method = seq('dot',seq('indexees',kwotify(rel),dataset),'map');1125 //var arg = seq('transform','x',seq('sub','x','1'));1126 var arg = 'arg1';1127 code.push(seq('return',seq('method',method,arg)));1128 return code}1129//------------------------------------------------------------------------------1130function programallatombf (rel,rules)1131 {var dataset = static(rel);1132 var subroutine = specials(rel,'bf');1133 var params = seq('x1','facts','rules');1134 var code = seq('function',subroutine,params);1135 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1136 code.push(seq('bind','dum',seq('baseindexps','x1',dataset)));1137 var cond = seq('and','dum',seq('less','dum.length','data.length'));1138 code.push(seq('if',cond,seq('block',seq('bind','data','dum'))));1139 var cond = seq('equalp',seq('sub',seq('sub','data','i'),'1'),'x1');1140 var result = seq('sub',seq('sub','data','i'),'2');1141 var subcode = seq('if',cond,seq('answers.push',result));1142 code.push(seq('bind','answers',seq('seq')));1143 code.push(seq('loop','i','0','data.length',subcode));1144 code.push(seq('return','answers'));1145 return code}1146//------------------------------------------------------------------------------1147function programallatomfb (rel,rules)1148 {var dataset = static(rel);1149 var subroutine = specials(rel,'fb');1150 var params = seq('x2','facts','rules');1151 var code = seq('function',subroutine,params);1152 code.push(seq('bind','data',seq('baseindexees',kwotify(rel),dataset)));1153 code.push(seq('bind','dum',seq('baseindexps','x2',dataset)));1154 var cond = seq('and','dum',seq('less','dum.length','data.length'));1155 code.push(seq('if',cond,seq('block',seq('bind','data','dum'))));1156 var cond = seq('equalp',seq('sub',seq('sub','data','i'),'2'),'x2');1157 var result = seq('sub',seq('sub','data','i'),'1');1158 var subcode = seq('if',cond,seq('answers.push',result));1159 code.push(seq('bind','answers',seq('seq')));1160 code.push(seq('loop','i','0','data.length',subcode));1161 code.push(seq('return','answers'));1162 return code}1163//------------------------------------------------------------------------------1164function programallatomfree (rel,rules)1165 {var arity = getrulearity(rel,rules);1166 var dataset = static(rel);1167 var subroutine = specials(rel,makesequence('f',arity));1168 var params = seq('facts','rules');1169 var code = seq('function',subroutine,params);1170 code.push(seq('return',seq('baseindexees',kwotify(rel),dataset)));1171 return code}1172//------------------------------------------------------------------------------1173// programonebase cases1174//------------------------------------------------------------------------------1175function programonebasebound (rel,rules)1176 {var arity = getarity(rel,rules);1177 var subroutine = '$' + rel + '$' + makesequence('b',arity) + '$';1178 var params = [];1179 for (var i=0; i<arity; i++) {params.push('x' + (i+1))};1180 params.push('facts');1181 var code = seq('function',subroutine,params);1182 code.push(seq('bind','data','facts'));1183 var cond = [seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel))];1184 for (var i=0; i<arity; i++)1185 {cond.push(seq('equalp',seq('sub',seq('sub','data','i'),i+1),params[i]))};1186 var inner = seq('if',programands(cond),seq('return','true'));1187 code.push(seq('loop','i','0','data.length',inner));1188 code.push(seq('return','false'));1189 return code}1190//------------------------------------------------------------------------------1191function programonebasef (rel,rules)1192 {var subroutine = special(rel,'f');1193 var params = seq('facts','rules');1194 var code = seq('function',subroutine,params);1195 code.push(seq('bind','data','facts'));1196 var cond = seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel));1197 var inner = seq('if',cond,seq('return','true'));1198 code.push(seq('loop','i','0','data.length',inner));1199 code.push(seq('return','false'));1200 return code}1201//------------------------------------------------------------------------------1202function programonebasebf (rel,rules)1203 {var subroutine = special(rel,'bf');1204 var params = seq('x1','facts','rules');1205 var code = seq('function',subroutine,params);1206 code.push(seq('bind','data','facts'));1207 var cond =1208 seq('and',1209 seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel)),1210 seq('equalp',seq('sub',seq('sub','data','i'),1),'x1'));1211 var result = seq('sub',seq('sub','data','i'),2);1212 var subcode = seq('if',cond,seq('return',result));1213 code.push(seq('bind','answers',seq('seq')));1214 code.push(seq('loop','i','0','data.length',subcode));1215 code.push(seq('return','false'));1216 return code}1217//------------------------------------------------------------------------------1218function programonebasefb (rel,rules)1219 {var subroutine = special(rel,'fb');1220 var params = seq('x2','facts','rules');1221 var code = seq('function',subroutine,params);1222 code.push(seq('bind','data','facts'));1223 var cond = 1224 seq('and',1225 seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel)),1226 seq('equalp',seq('sub',seq('sub','data','i'),2),'x2'));1227 var result = seq('sub',seq('sub','data','i'),1);1228 var subcode = seq('if',cond,seq('return',result));1229 code.push(seq('bind','answers',seq('seq')));1230 code.push(seq('loop','i','0','data.length',subcode));1231 code.push(seq('return','false'));1232 return code}1233//------------------------------------------------------------------------------1234function programonebasefree (rel,rules)1235 {var arity = getarity(rel,rules);1236 var subroutine = special(rel,makesequence('f',arity));1237 var params = seq('facts','rules');1238 var code = seq('function',subroutine,params);1239 code.push(seq('bind','data','facts'));1240 var cond = seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel));1241 var inner = seq('if',cond,seq('return',seq('sub','data','i')));1242 code.push(seq('loop','i','0','data.length',inner));1243 code.push(seq('return','false'))1244 return code}1245//------------------------------------------------------------------------------1246// programallbase cases1247//------------------------------------------------------------------------------1248function programallbasef (rel,rules)1249 {var subroutine = specials(rel,'f');1250 var params = seq('facts','rules');1251 var code = seq('function',subroutine,params);1252 var cond = seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel));1253 var result = seq('sub',seq('sub','data','i'),1);1254 var subcode = seq('if',cond,seq('answers.push',result));1255 code.push(seq('bind','answers',seq('seq')));1256 code.push(seq('loop','i','0','data.length',subcode));1257 code.push(seq('return','answers'));1258 return code}1259//------------------------------------------------------------------------------1260function programallbasebf (rel,rules)1261 {var subroutine = specials(rel,'bf');1262 var params = seq('x1','facts','rules');1263 var code = seq('function',subroutine,params);1264 code.push(seq('bind','data','facts'));1265 var cond =1266 seq('and',1267 seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel)),1268 seq('equalp',seq('sub',seq('sub','data','i'),1),'x1'));1269 var result = seq('sub',seq('sub','data','i'),2);1270 var subcode = seq('if',cond,seq('answers.push',result));1271 code.push(seq('bind','answers',seq('seq')));1272 code.push(seq('loop','i','0','data.length',subcode));1273 code.push(seq('return','answers'));1274 return code}1275//------------------------------------------------------------------------------1276function programallbasefb (rel,rules)1277 {var subroutine = specials(rel,'fb');1278 var params = seq('x2','facts','rules');1279 var code = seq('function',subroutine,params);1280 code.push(seq('bind','data','facts'));1281 var cond =1282 seq('and',1283 seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel)),1284 seq('equalp',seq('sub',seq('sub','data','i'),2),'x2'));1285 var result = seq('sub',seq('sub','data','i'),1);1286 var subcode = seq('if',cond,seq('answers.push',result));1287 code.push(seq('bind','answers',seq('seq')));1288 code.push(seq('loop','i','0','data.length',subcode));1289 code.push(seq('return','answers'));1290 return code}1291//------------------------------------------------------------------------------1292function programallbaseffb (rel,rules)1293 {var subroutine = specials(rel,'ffb');1294 var params = seq('x3','facts','rules');1295 var code = seq('function',subroutine,params);1296 code.push(seq('bind','data','facts'));1297 var cond =1298 seq('and',1299 seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel)),1300 seq('equalp',seq('sub',seq('sub','data','i'),3),'x3'));1301 var subcode = seq('if',cond,seq('answers.push',seq('sub','data','i')));1302 code.push(seq('bind','answers',seq('seq')));1303 code.push(seq('loop','i','0','data.length',subcode));1304 code.push(seq('return','answers'));1305 return code}1306//------------------------------------------------------------------------------1307function programallbasefree (rel,rules)1308 {var arity = getarity(rel,rules);1309 var subroutine = specials(rel,makesequence('f',arity));1310 var params = seq('facts','rules');1311 var code = seq('function',subroutine,params);1312 var cond = seq('eq',seq('sub',seq('sub','data','i'),0),kwotify(rel));1313 var result = seq('sub','data','i');1314 var subcode = seq('if',cond,seq('answers.push',result));1315 code.push(seq('bind','answers',seq('seq')));1316 code.push(seq('loop','i','0','data.length',subcode));1317 code.push(seq('return','answers'));1318 return code}1319//------------------------------------------------------------------------------1320// programatomdata1321//------------------------------------------------------------------------------1322function programatomdata (view,rules)1323 {var data = indexees(view,rules);1324 var name = static(view);1325 var code = ['defineindex',['readdata','`' + grindem(data) + '`']];1326 return seq('bind',name,code)}1327//==============================================================================1328// Miscellaneous1329//==============================================================================1330//------------------------------------------------------------------------------1331// getmyviews1332// getviewsfromrules1333// getatomsfromrules1334// getbasesfromrules1335//------------------------------------------------------------------------------1336function getmyviews (data)1337 {var views = seq();1338 for (var i=0; i<data.length; i++)1339 {var datum = data[i];1340 if (datum==='true' || datum==='false') {continue};1341 if (symbolp(datum)) {adjoin(datum,views); continue};1342 if (datum[0]==='definition') {continue};1343 if (datum[0]==='transition') {continue};1344 if (datum[0]==='rule') {adjoin(operator(datum),views); continue};1345 adjoin(datum[0],views)};1346 return views}1347//------------------------------------------------------------------------------1348function getviewsfromrules (rules)1349 {var views = getmyviews(rules);1350 var tables = seq();1351 for (var i=0; i<views.length; i++)1352 {if (!atomlistp(views[i],rules)) {tables = adjoin(views[i],tables)}};1353 return tables}1354//------------------------------------------------------------------------------1355function getatomsfromrules (rules)1356 {var views = getmyviews(rules);1357 var tables = seq();1358 for (var i=0; i<views.length; i++)1359 {if (views[i]==='definition') {continue};1360 if (views[i]==='transition') {continue};1361 if (atomlistp(views[i],rules)) {tables = adjoin(views[i],tables)}};1362 return tables}1363function atomlistp (view,rules)1364 {var data = indexees(view,rules);1365 for (var i=0; i<data.length; i++)1366 {if (!atomp(data[i])) {return false}};1367 return true}1368function atomp (rule)1369 {return (symbolp(rule) || rule[0]!=='rule')};1370//------------------------------------------------------------------------------1371function getbasesfromrules (rules)1372 {var bases = seq();1373 var views = getmyviews(rules);1374 for (var i=0; i<rules.length; i++)1375 {bases = getbasesexp(rules[i],views,bases)};1376 return bases}1377function getbasesexp (rule,views,bases)1378 {if (symbolp(rule))1379 {if (!find(rule,views)) {return adjoin(rule,bases)};1380 return bases};1381 if (rule[0]==='same') {return bases};1382 if (rule[0]==='distinct') {return bases};1383 if (rule[0]==='evaluate') {return bases};1384 if (rule[0]==='true' && rule.length===3) {return bases};1385 if (rule[0]==='not') {return getbasesexp(rule[1],views,bases)};1386 if (rule[0]==='and' || rule[0]==='or')1387 {for (var i=1; i<rule.length; i++)1388 {bases = getbasesexp(rule[i],views,bases)};1389 return bases};1390 if (rule[0]==='definition') {return bases};1391 if (rule[0]==='rule')1392 {for (var i=2; i<rule.length; i++)1393 {bases = getbasesexp(rule[i],views,bases)};1394 return bases};1395 if (rule[0]==='transition') {return bases};1396 if (find(rule[0],views)) {return bases};1397 return adjoin(rule[0],bases)}1398function basep (rel,rules)1399 {return (indexees(rel,rules).length===0)}1400//------------------------------------------------------------------------------1401// compilegroundp1402// compilealmostp1403//------------------------------------------------------------------------------1404function compgroundp (x,blist)1405 {if (varp(x)) {return blist[x]!==undefined};1406 if (symbolp(x)) {return true};1407 for (var i=1; i<x.length; i++)1408 {if (!compgroundp(x[i],blist)) {return false}};1409 return true}1410function compfp (subgoal,blist)1411 {if (!varp(subgoal[1])) {return false};1412 if (blist[subgoal[1]]!==undefined) {return false};1413 return true}1414function compbfp (subgoal,blist)1415 {if (!compgroundp(subgoal[1],blist)) {return false};1416 if (!varp(subgoal[2])) {return false};1417 if (blist[subgoal[2]]!==undefined) {return false};1418 return true}1419function compfbp (subgoal,blist)1420 {if (!varp(subgoal[1])) {return false};1421 if (blist[subgoal[1]]!==undefined) {return false};1422 if (!compgroundp(subgoal[2],blist)) {return false};1423 return true}1424function compffbp (subgoal,blist)1425 {if (!varp(subgoal[1])) {return false};1426 if (blist[subgoal[1]]!==undefined) {return false};1427 if (!varp(subgoal[2])) {return false};1428 if (blist[subgoal[2]]!==undefined) {return false};1429 if (!compgroundp(subgoal[3],blist)) {return false};1430 return true}1431function compfreep (subgoal,blist)1432 {for (var i=1; i<subgoal.length; i++)1433 {if (!varp(subgoal[i])) {return false};1434 if (blist[subgoal[i]]!==undefined) {return false};1435 if (subgoal.indexOf(subgoal[i],i+1)>0) {return false}};1436 return true}1437//------------------------------------------------------------------------------1438// compilematch1439//------------------------------------------------------------------------------1440function compilematch (x,y,hlist,alist,ol)1441 {if (varp(x))1442 {if (alist[x]) {return seq('equalp',alist[x],y)};1443 if (find(x,hlist))1444 {alist[x] = y;;1445 return seq('maatchify',kwotify(x),'bl',y,'bl',ol)};1446 alist[x] = y;1447 return 'true'};1448 if (symbolp(x)) {return seq('eq',kwotify(x),y)};1449 var code = [];1450 for (var i=0; i<x.length; i++)1451 {code.push(compilematch(x[i],seq('sub',y,i),hlist,alist,ol))};1452 code = programands(code);1453 return code}1454//------------------------------------------------------------------------------1455// skinnymatch1456//------------------------------------------------------------------------------1457function skinnymatch (x,y,blist)1458 {if (varp(y))1459 {if (blist[y]!==undefined) {return seq('equalp',blist[y],x)};1460 blist[y] = x;1461 return 'true'};1462 if (symbolp(y)) {return seq('eq',x,kwotify(y))};1463 var cond = seq(seq('not',seq('symbolp',x)));1464 for (var i=0; i<y.length; i++)1465 {cond.push(skinnymatch(seq('sub',x,i),y[i],blist))};1466 return programands(cond)}1467function skinnyplug (x,blist)1468 {if (varp(x))1469 {if (blist[x]) {return blist[x]};1470 return kwotify(x)};1471 if (symbolp(x)) {return kwotify(x)};1472 var exp = seq('seq');1473 for (var i=0; i<x.length; i++)1474 {exp.push(skinnyplug(x[i],blist))};1475 return exp}1476//------------------------------------------------------------------------------1477// sundry1478//------------------------------------------------------------------------------1479function single (s)1480 {return '$' + s + '$'}1481function plural (s)1482 {return '$$' + s + '$$'}1483function static (s)1484 {return '$' + s + '$data$'}1485function special (rel,suffix)1486 {return '$' + rel + '$' + suffix + '$'}1487function specials (rel,suffix)1488 {return '$$' + rel + '$' + suffix + '$$'}1489function specialn (rel,n)1490 {var out = '$' + rel + '$';1491 for (var i=0; i<n; i++) {out += 'b'};1492 out += '$'; 1493 return out}1494function codify (x,hlist,alist)1495 {if (varp(x))1496 {if (alist[x]) {return alist[x]};1497 if (find(x,hlist)) {return seq('pluug',kwotify(x),'bl','bl')};1498 return kwotify(x)};1499 if (symbolp(x)) {return kwotify(x)};1500 var exp = seq('seq');1501 for (var i=0; i<x.length; i++)1502 {exp.push(codify(x[i],hlist,alist))};1503 return exp}1504function kwotify (x)1505 {return ("'" + x + "'")}1506function makesequence (char,n)1507 {var out = '';1508 for (var i=0; i<n; i++)1509 {out = out.concat([char])};1510 return out}1511function getarity (rel,rules)1512 {for (var i=0; i<rules.length; i++)1513 {var dum = getarityexp(rel,rules[i]);1514 if (dum) {return dum}};1515 return 0}1516function getarityexp (rel,x)1517 {if (symbolp(x)) {if (x===rel) {return 0} else {return false}};1518 if (x[0]===rel) {return x.length-1};1519 for (var i=1; i<x.length; i++)1520 {var dum = getarityexp(rel,x[i]);1521 if (dum) {return dum}};1522 return false}1523function programands (s)1524 {if (s.length===0) {return 'true'};1525 if (s.length===1) {return s[0]};1526 var out = ['and'];1527 for (var i=0; i<s.length; i++)1528 {if (s[i]==='true') {continue};1529 if (s[i]==='false') {return 'false'};1530 out.push(s[i])};1531 if (out.length===1) {return 'true'};1532 if (out.length===2) {return out[1]};1533 return out}1534//==============================================================================1535// grind1536//==============================================================================1537//------------------------------------------------------------------------------1538// prettyjs1539//------------------------------------------------------------------------------1540function prettyjs (x)1541 {return '\r' + prettifyjs(x,0) + '\r'}1542function prettifyjs (x,n)1543 {if (symbolp(x)) {return x};1544 if (x[0]==='seq') {return '[' + grindjsargs(x.slice(1)) + ']'};1545 if (x[0]==='obj') {return '{' + grindjsargs(x.slice(1)) + '}'};1546 if (x[0]==='dot') {return grindjs(x[1]) + '.' + grindjs(x[2])};1547 if (x[0]==='sub') {return grindjs(x[1]) + '[' + x[2] + ']'};1548 if (x[0]==='bind') {return "var " + x[1] + " = " + grindjs(x[2])};1549 if (x[0]==='method') {return grindjs(x[1]) + grindjsarglist(x.slice(2))};1550 if (x[0]==='transform') {return grindjs(x[1]) + ' => ' + grindjs(x[2])};1551 if (x[0]==='less') {return grindjs(x[1]) + '<' + grindjs(x[2])};1552 if (x[0]==='greater') {return grindjs(x[1]) + '>' + grindjs(x[2])};1553 if (x[0]==='eq') {return grindjs(x[1]) + '===' + grindjs(x[2])};1554 if (x[0]==='if')1555 {var answer = 'if (' + grindjs(x[1]) + ")\r";1556 answer += grindindent(n+3) + prettifyjs(x[2],n+3);1557 return answer};1558 if (x[0]==='not') {return "!" + grindjs(x[1])};1559 if (x[0]==='and')1560 {var answer = '(';1561 for (var i=1; i<x.length-1; i++)1562 {answer += grindjs(x[i]) + ' && '};1563 answer += grindjs(x[x.length-1]) + ')';1564 return answer};1565 if (x[0]==='return') {return "return " + grindjs(x[1])};1566 if (x[0]==='block')1567 {var answer = '{';1568 if (x.length>1) {answer += prettifyjs(x[1],n+1) + ';'};1569 for (var i=2; i<x.length; i++)1570 {answer += '\r' + grindindent(n+1) + prettifyjs(x[i],n+1) + ';'};1571 answer += '}';1572 return answer};1573 if (x[0]==='loop')1574 {var answer = 'for ';1575 answer += '(var ' + x[1] + '=' + x[2] + '; ';1576 answer += x[1] + '<' + x[3] + '; ';1577 answer += x[1] + '++)\r';1578 answer += grindindent(n+4) + prettifyjs(x[4],n+4);1579 return answer}1580 if (x[0]=== 'function')1581 {var answer = 'function ' + x[1] + ' ' + grindjsarglist(x[2]) + '\r';1582 answer += grindindent(n+1) + '{';1583 if (x.length>3) {answer += prettifyjs(x[3],n+2)};1584 for (var i=4; i<x.length; i++)1585 {answer += ';\r' + grindindent(n+2) + prettifyjs(x[i],n+2)};1586 answer += '}';1587 return answer}1588 return x[0] + grindjsarglist(x.slice(1))}1589//------------------------------------------------------------------------------1590// grindjs1591//------------------------------------------------------------------------------1592function grindjs (x)1593 {if (symbolp(x)) {return x};1594 if (x[0]==='seq') {return '[' + grindjsargs(x.slice(1)) + ']'};1595 if (x[0]==='obj') {return '{' + grindjsargs(x.slice(1)) + '}'};1596 if (x[0]==='dot') {return grindjs(x[1]) + '.' + grindjs(x[2])};1597 if (x[0]==='sub') {return grindjs(x[1]) + '[' + x[2] + ']'};1598 if (x[0]==='bind') {return "var " + x[1] + " = " + grindjs(x[2])};1599 if (x[0]==='method') {return grindjs(x[1]) + grindjsarglist(x.slice(2))};1600 if (x[0]==='transform') {return grindjs(x[1]) + ' => ' + grindjs(x[2])};1601 if (x[0]==='less') {return grindjs(x[1]) + '<' + grindjs(x[2])};1602 if (x[0]==='greater') {return grindjs(x[1]) + '>' + grindjs(x[2])};1603 if (x[0]==='eq') {return grindjs(x[1]) + '===' + grindjs(x[2])};1604 if (x[0]==='if') {return "if (" + grindjs(x[1]) + ")\r" + grindjs(x[2])};1605 if (x[0]==='not') {return "!" + grindjs(x[1])};1606 if (x[0]==='and')1607 {var answer = '';1608 for (var i=1; i<x.length-1; i++)1609 {answer += grindjs(x[i]) + ' && '};1610 answer += grindjs(x[x.length-1]);1611 return answer};1612 if (x[0]==='return') {return "return " + grindjs(x[1])};1613 if (x[0]==='block')1614 {var answer = '{';1615 for (var i=1; i<x.length-1; i++)1616 {answer += grindjs(x[i]) + '; '};1617 answer += grindjs(x[x.length-1]) + '}';1618 return answer};1619 if (x[0]==='loop')1620 {var answer = 'for ';1621 answer += '(var ' + x[1] + '=' + x[2] + '; ';1622 answer += x[1] + '<' + x[3] + '; ';1623 answer += x[1] + '++)\r'1624 answer += grindjs(x[4]);1625 return answer}1626 if (x[0]=== 'function')1627 {var answer = 'function ' + x[1] + ' ' + grindjsarglist(x[2]) + '\r';1628 answer += '{';1629 for (var i=3; i<x.length-1; i++)1630 {answer += grindjs(x[i]) + '; '};1631 answer += grindjs(x[i]) + '}';1632 return answer}1633 return x[0] + grindjsarglist(x.slice(1))}1634function grindjsarglist (p)1635 {var exp = '(';1636 if (p.length>0) {exp += grindjs(p[0])};1637 for (var i=1; i<p.length; i++)1638 {exp = exp + ',' + grindjs(p[i])}1639 exp += ')';1640 return exp}1641function grindjsargs (l)1642 {var exp = '';1643 if (l.length>0) {exp += grindjs(l[0])};1644 for (var i=1; i<l.length; i++)1645 {exp = exp + ',' + grindjs(l[i])}1646 return exp}1647function grindindent (n)1648 {var out = '';1649 for (var i=0; i<n; i++) {out += ' '};1650 return out}1651//------------------------------------------------------------------------------1652// End of Script...

Full Screen

Full Screen

routes-loader.js

Source:routes-loader.js Github

copy

Full Screen

...22 if (err) return cb(err);23 this.matches = matches;24 this.acc = [];25 this.indent = 0;26 this.compileMatch();27 this.push(''); // add a space between the functions28 this.compileResolve();29 cb(null, this.acc.join('\n'));30 }31};32Routes.prototype.glob = function(cb) {33 glob(this.dir + '/**/*' + this.ext, {mark: true}, function(err, files) {34 if (err) return cb(err);35 cb(null, files.reduce(this.handleFile.bind(this), []));36 }.bind(this));37};38Routes.prototype.handleFile = function(acc, file) {39 var pathname = Path.basename(Path.dirname(file));40 var isDefault = pathname === '__default__';...

Full Screen

Full Screen

bindings.js

Source:bindings.js Github

copy

Full Screen

...180 //#endif181 }182 183 //always give a function, no async calls (could also just error on execution)184 c[name] = ppc.lm.compileMatch(s); 185 186 //#ifdef __WITH_AML_BINDINGS187 c[name].hasAml = hasAml;188 //#endif189 190 return c;191 }192 193 for (name in this) {194 if (name == "each")195 continue;196 197 rules = this[name];198 if (rules.dataType != ppc.ARRAY)199 continue;200 201 s = [], hasAml = false;202 for (var rule, i = 0, l = rules.length; i < l; i++) {203 if (!(rule = rules[i]).match && !rule.value)204 continue;205206 s.push(rule.match, rule.value);207 //#ifdef __WITH_AML_BINDINGS208 if (!hasAml && rule.value)209 hasAml = rule.hasaml || rule.value.indexOf("<a:") > -1;210 //#endif211 }212 213 //always give a function, no async calls (could also just error on execution)214 c[name] = ppc.lm.compileMatch(s); 215 216 //#ifdef __WITH_AML_BINDINGS217 c[name].hasAml = hasAml;218 //#endif219 }220221 this.$isCompiled = true;222 223 return c;224 },225 226 getRuleIndex : function(name, index) {227 var rule = this[name][index];228 if (rule.value) { ...

Full Screen

Full Screen

compileMatch.mjs

Source:compileMatch.mjs Github

copy

Full Screen

1const PRELUDE = `// * * * * * * * * * * * * * * * * BEGIN PRELUDE * * * * * * * * * * * * * * * * //2function node (name) {3 let c = (class extends Array {})4 Object.defineProperty(c, 'name', { value: name })5 return new c()6}7function matchRegex (origtext, regex) {8 let matches = origtext.match(regex)9 if (matches !== null) {10 let text = origtext.slice(matches[0].length)11 return [matches[0], text]12 } else {13 return [null, origtext]14 }15}16function matchWhitespace (text) {17 let token = node('WHITESPACE')18 let _token, _text = text19 // Consume (or backtrack)20 ;[_token, _text] = matchRegex(_text, /^(\\s*(--[^\\n]*\\n)?)*/)21 if (_token === null) { return [null, text] } else { _token && token.push(_token) }22 return [token, _text]23}24const matchJustIdentifier = (text) => {25 let _token, _text = text26 ;[_token, _text] = matchRegex(_text, /^[a-zA-Z_]\\w*/)27 if (_token === null) { return [null, text] } else { return [_token, _text] }28}29function matchJustNumber (origtext) {30 let matches = origtext.match(/^[0-9]+/)31 if (matches !== null) {32 let text = origtext.slice(matches[0].length)33 return [['NUMBER', matches[0]], text]34 } else {35 return [null, origtext]36 }37}38const matchJustString = (origtext) => {39 if (origtext.startsWith("'")) {40 // search for ending quote41 let i = 142 i = origtext.indexOf("'", i)43 while (i + 1 < origtext.length && origtext[i+1] === "'") {44 // keep searching45 i = origtext.indexOf("'", i + 2)46 if (i === -1) {47 return [null, origtext]48 }49 }50 return [origtext.slice(1, i).replace(/''/g, "'"), origtext.slice(i+1)]51 }52 return [null, origtext]53}54function _matchSTRING (text) {55 let token = node('STRING')56 let _token, _text = text57 // Consume (or backtrack)58 ;[_token, _text] = matchWhitespace(_text)59 if (_token !== null) _token = false // Discard literal60 if (_token === null) { return [null, text] } else { _token && token.push(_token) }61 // Consume (or backtrack)62 ;[_token, _text] = matchJustString(_text)63 if (_token === null) { return [null, text] } else { _token && token.push(_token) }64 return [token, _text]65}66function _matchID (text) {67 let token = node('ID')68 let _token, _text = text69 // Consume (or backtrack)70 ;[_token, _text] = matchWhitespace(_text)71 if (_token !== null) _token = false // Discard literal72 if (_token === null) { return [null, text] } else { _token && token.push(_token) }73 // Consume (or backtrack)74 ;[_token, _text] = matchJustIdentifier(_text)75 if (_token === null) { return [null, text] } else { _token && token.push(_token) }76 return [token, _text]77}78function _matchLITERAL (text, literal) {79 let token = node('LITERAL')80 let _token, _text = text81 ;[_token, _text] = matchWhitespace(_text)82 if (_text.startsWith(literal)) {83 token.push(literal)84 return [token, _text.slice(literal.length)]85 } else {86 return [null, text]87 }88}89// * * * * * * * * * * * * * * * * END PRELUDE * * * * * * * * * * * * * * * * //90`91export { compileMatch }92function compileMatch (ast) {93 let text = PRELUDE94 let indent = 095 function out (line) {96 text += ' '.repeat(indent * 2) + line + '\n'97 }98 function start (line = '') {99 text += ' '.repeat(indent * 2) + line100 }101 function mid (line = '') {102 text += line103 }104 function end (line = '') {105 text += line + '\n'106 }107 function call (ast) {108 fns(ast.constructor.name)(...ast)109 }110 const fns = {111 SYNTAX (id, rules) {112 start(`export { match`)113 call(id)114 end(` }`)115 end()116 call(rules)117 },118 ID (value) {119 mid(value)120 },121 RULES (...rules) {122 for (let rule of rules) {123 call(rule)124 }125 },126 RULE (id, exp) {127 start(`function match`)128 call(id)129 end(`} (text) {`)130 indent++131 out(`let _token, _text = text`)132 end()133 call(exp)134 out(`return [token, _text]`)135 indent--136 out(`}`)137 end()138 },139 EXP (alt) {140 call(alt)141 },142 ALT (...seqs) {143 if (seqs.length === 1) {144 call(seqs[0])145 } else {146 out(`{`)147 indent++148 out(`let __text = _text`)149 out(`for (let i = 0; i <= ${seqs.length}; i++) {`)150 indent++151 out(`let breakFor = false`)152 out(`switch (i) {`)153 indent++154 for (let seq of seqs) {155 out(`case ${i}: {`)156 indent++157 call(seq)158 out(`breakFor = true`)159 indent--160 out(`}`)161 }162 out(`case ${seqs.length}: {`)163 indent++164 out(`// Backtrack`)165 out(`return [null, text]`)166 indent--167 out(`}`)168 indent--169 out(`}`)170 indent--171 out(`_text = __text`)172 indent--173 out(`}`)174 }175 },176 TYPE (alt, id) {177 start(`let token = node('`)178 call(id)179 end(`}')`)180 call(alt)181 },182 SEQ (...terms) {183 if (terms.length === 1) {184 call(terms[0])185 } else {186 let first = terms.shift()187 out(`// Consume (or backtrack)`)188 call(first)189 out(`if (_token === null) { return [null, text] } else { _token && token.push(_token) }`)190 end()191 for (let term of terms) {192 out(`// Consume (or throw)`)193 call(term)194 out(`if (_token === null) { throw new Error(text) } else { _token && token.push(_token) }`)195 end()196 }197 }198 },199 ID2 (value) {200 start(`;[_token, _text] = match`)201 mid(value)202 end(`(_text)`)203 },204 STRING (value) {205 start(`;[_token, _text] = _matchLITERAL(_text, '`)206 mid(value)207 end(`')`)208 out(`if (_token !== null) _token = false // Discard literal`)209 },210 LITERAL (value) {211 if (value === '.ID') {212 out(`;[_token, _text] = _matchID(_text)`)213 }214 },215 REPEAT (term) {216 out(`// Consume 0 or more times`)217 out(`while (true) {`)218 end()219 indent++220 call(term)221 out(`if (_token === null) { break } else { _token && token.push(_token) }`)222 end()223 indent--224 out(`}`)225 end()226 }227 }228 call(ast)229 return text...

Full Screen

Full Screen

compiler.js

Source:compiler.js Github

copy

Full Screen

...7 return compileSeries(node.subExpressions);8 case "SUB_EXPRESSION":9 return compileSeries(node.subExpressionItems);10 case "MATCH":11 return compileMatch(node);12 case "GROUP":13 return compileGroup(node);14 case "QUANTIFIER":15 return compileQuantifier(node);16 }17 throw new Error(`unsupported node ${node.kind}`);18}19// a is the input token, b is the expression token20// if b is a function, pass a to b and return the result21// return true if a is contains b22const tokensMatch = (a, b) => {23 if (a == null || b == null) {24 return false;25 }...

Full Screen

Full Screen

validation.js

Source:validation.js Github

copy

Full Screen

...64 /*var rules = this.$rules[name];65 //@todo Shouldn't allow async calls..., should always give a function66 for (var rule, i = 0, l = rules.length; i < l; i++) {67 var rule = rules[i];68 if ((rule[1] || (rule[1] = (rule[5] = apf.lm.compileMatch(rule[0]))[0] ||apf.K))(xmlNode)) 69 return rule;70 }*/7172 var id = apf.xmldb.nodeConnect(apf.xmldb.getXmlDocId(xmlNode), xmlNode.nodeType == 1 ? xmlNode : xmlNode.parentNode);73 for (var i = 0, l = this.$rules.length; i < l; i++) {74 if (xmlNode.ownerDocument.selectSingleNode("(.//" + this.$rules[i][0].split("|").join("|.//") + ")[@" + apf.xmldb.xmlIdTag + "='" + id + "']"))75 return this.$rules[i][1];76 }77 }78 79 this.validate = function(xmlNode, checkRequired, validityState){80 var rule = this.getRule(xmlNode);81 if (!rule) return validityState;82 ...

Full Screen

Full Screen

compiler_extensions.js

Source:compiler_extensions.js Github

copy

Full Screen

...53/**54 * `match` to match a single expression for readability55 * @type {CompilerExt}56 */57export function compileMatch(mode, _parent) {58 if (!mode.match) return;59 if (mode.begin || mode.end) throw new Error("begin & end are not supported with match");60 mode.begin = mode.match;61 delete mode.match;62}63/**64 * provides the default 1 relevance to all modes65 * @type {CompilerExt}66 */67export function compileRelevance(mode, _parent) {68 // eslint-disable-next-line no-undefined69 if (mode.relevance === undefined) mode.relevance = 1;...

Full Screen

Full Screen

compileMatch.spec.mjs

Source:compileMatch.spec.mjs Github

copy

Full Screen

...7describe('compiler', () => {8 const ast = matchSYNTAX(demo)[0]9 it("compiler hasn't broken", () => {10 expect(true).toBe(true)11 let compiled = compileMatch(ast)12 // console.log(compiled)13 expect(compiled).toBe(parser)14 })...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/utils/utils');2const { match } = require('playwright/lib/utils/matchers');3const { compileMatch } = require('playwright/lib/utils/utils');4const { match } = require('playwright/lib/utils/matchers');5const { compileMatch } = require('playwright/lib/utils/utils');6const { match } = require('playwright/lib/utils/matchers');7const { compileMatch } = require('playwright/lib/utils/utils');8const { match } = require('playwright/lib/utils/matchers');9const { compileMatch } = require('playwright/lib/utils/utils');10const { match } = require('playwright/lib/utils/matchers');11const { compileMatch } = require('playwright/lib/utils/utils');12const { match } = require('playwright/lib/utils/matchers');13const { compileMatch } = require('playwright/lib/utils/utils');14const { match } = require('playwright/lib/utils/matchers');15const { compileMatch } = require('playwright/lib/utils/utils');16const { match } = require('playwright/lib/utils/matchers');17const { compileMatch } = require('playwright/lib/utils/utils');18const { match } = require('playwright/lib/utils/matchers');19const { compileMatch } = require('playwright/lib/utils/utils');20const { match } = require('playwright/lib/utils/matchers');21const { compileMatch } = require('playwright/lib/utils/utils');22const { match } = require('playwright/lib/utils/matchers');23const { compileMatch } = require('playwright/lib/utils/utils');24const { match } = require('playwright/lib/utils/matchers');25const { compileMatch } =

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/utils/utils');2const { match } = require('playwright/lib/utils/utils');3const { parseURL } = require('playwright/lib/utils/utils');4const { parseDomain } = require('playwright/lib/utils/utils');5const { parsePath } = require('playwright/lib/utils/utils');6const { parseQuery } = require('playwright/lib/utils/utils');7const { parseFragment } = require('playwright/lib/utils/utils');8const parsedUrl = parseURL(url);9const parsedPattern = parseURL(pattern);10const compiledMatch = compileMatch(parsedPattern);11const result = match(compiledMatch, parsedUrl);12const domain = parseDomain(url);13const path = parsePath(url);14const query = parseQuery(url);15const fragment = parseFragment(url);16console.log(result);17console.log(domain);18console.log(path);19console.log(query);20console.log(fragment);21{ query: 'playwright' }

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/utils/utils');2const match = compileMatch('**/test.js');3const { compileMatch } = require('playwright/lib/utils/utils');4const match = compileMatch('**/test.js');5const { compileMatch } = require('playwright/lib/utils/utils');6const match = compileMatch('**/test.js');7const { compileMatch } = require('playwright/lib/utils/utils');8const match = compileMatch('**/test.js');9const { compileMatch } = require('playwright/lib/utils/utils');10const match = compileMatch('**/test.js');11const { compileMatch } = require('playwright/lib/utils/utils');12const match = compileMatch('**/test.js');13const { compileMatch } = require('playwright/lib/utils/utils');14const match = compileMatch('**/test.js');15const { compileMatch } = require('playwright/lib/utils/utils');16const match = compileMatch('**/test.js');17console.log(match('/home/user/test.ts

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/utils/utils');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frame');4const { compileMatch } = require('playwright/lib/utils/utils');5const { Page } = require('playwright/lib/server/page');6const { Frame } = require('playwright/lib/server/frame');7const { compileMatch } = require('playwright/lib/utils/utils');8const { Page } = require('playwright/lib/server/page');9const { Frame } = require('playwright/lib/server/frame');10const { compileMatch } = require('playwright/lib/utils/utils');11const { Page } = require('playwright/lib/server/page');12const { Frame } = require('playwright/lib/server/frame');13const { compileMatch } = require('playwright/lib/utils/utils');14const { Page } = require('playwright/lib/server/page');15const { Frame } = require('playwright/lib/server/frame');16const { compileMatch } = require('playwright/lib/utils/utils');17const { Page } = require('playwright/lib/server/page');18const { Frame } = require('playwright/lib/server/frame');19const { compileMatch } = require('playwright/lib/utils/utils');20const { Page } = require('playwright/lib/server/page');21const { Frame } = require('playwright/lib/server/frame');22const { compileMatch } = require('playwright/lib/utils/utils');23const { Page } = require('playwright/lib/server/page');24const { Frame } = require('playwright/lib/server/frame');25const { compileMatch } = require('playwright/lib/utils/utils');26const { Page } = require('playwright/lib/server/page');27const { Frame } = require('playwright/lib/server/frame');28const { compileMatch } = require('playwright/lib/utils/utils');29const { Page } = require

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/server/utils');2const { parse } = require('url');3const path = '/a/b/c/d';4const compiled = compileMatch(path);5const parsed = parse(url);6console.log(compiled(parsed.pathname));7const { compileMatch } = require('playwright/lib/server/utils');8const { parse } = require('url');9const path = '/a/b/c/d';10const compiled = compileMatch(path);11const parsed = parse(url);12console.log(compiled(parsed.pathname));13const { compileMatch } = require('playwright/lib/server/utils');14const { parse } = require('url');15const path = '/a/b/c/d';16const compiled = compileMatch(path);17const parsed = parse(url);18console.log(compiled(parsed.pathname));19const { compileMatch } = require('playwright/lib/server/utils');20const { parse } = require('url');21const path = '/a/b/c/d';22const compiled = compileMatch(path);23const parsed = parse(url);24console.log(compiled(parsed.pathname));25const { compileMatch } = require('playwright/lib/server/utils');26const { parse } = require('url');27const path = '/a/b/c/d';28const compiled = compileMatch(path);29const parsed = parse(url);30console.log(compiled(parsed.pathname));31const { compileMatch } = require('playwright/lib/server/utils');32const { parse } = require('url');33const path = '/a/b/c/d';

Full Screen

Using AI Code Generation

copy

Full Screen

1const { compileMatch } = require('playwright/lib/utils/selectorParser');2const matcher = compileMatch('css=div >> text=Hello');3const element = document.querySelector('div');4const { compileSelector } = require('playwright/lib/utils/selectorParser');5const selector = compileSelector({name: 'text', args: 'Hello'}, 'css=div');6const { parseSelector } = require('playwright/lib/utils/selectorParser');7const parsedSelector = parseSelector('css=div >> text=Hello');8const { parseSelectorList } = require('playwright/lib/utils/selectorParser');9const parsedSelectorList = parseSelectorList('css=div >> text=Hello, css=div >> text=World');10const { serializeSelector } = require('playwright/lib/utils/selectorParser');11const serializedSelector = serializeSelector({name: 'text', args: 'Hello'}, 'css=div');12const { serializeSelectorList } = require('playwright/lib/utils/selectorParser');13const serializedSelectorList = serializeSelectorList([{ name: 'text', args: 'Hello', body: 'css=div' }, { name: 'text', args: 'World', body: 'css=div' }]);

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful