mirrors* (function(a,b){ "use strict"; var c=a.Array; var d=a.isNaN; var e=a.JSON.stringify; var f=a.Map.prototype.entries; var g=(new a.Map).entries().next; var h=(new a.Set).values().next; var i=a.Set.prototype.values; var j={ UNDEFINED_TYPE:'undefined', NULL_TYPE:'null', BOOLEAN_TYPE:'boolean', NUMBER_TYPE:'number', STRING_TYPE:'string', SYMBOL_TYPE:'symbol', OBJECT_TYPE:'object', FUNCTION_TYPE:'function', REGEXP_TYPE:'regexp', ERROR_TYPE:'error', PROPERTY_TYPE:'property', INTERNAL_PROPERTY_TYPE:'internalProperty', FRAME_TYPE:'frame', SCRIPT_TYPE:'script', CONTEXT_TYPE:'context', SCOPE_TYPE:'scope', PROMISE_TYPE:'promise', MAP_TYPE:'map', SET_TYPE:'set', ITERATOR_TYPE:'iterator', GENERATOR_TYPE:'generator', } function MakeMirror(k){ var l; if((k===(void 0))){ l=new UndefinedMirror(); }else if((k===null)){ l=new NullMirror(); }else if((typeof(k)==='boolean')){ l=new BooleanMirror(k); }else if((typeof(k)==='number')){ l=new NumberMirror(k); }else if((typeof(k)==='string')){ l=new StringMirror(k); }else if((typeof(k)==='symbol')){ l=new SymbolMirror(k); }else if((%_IsArray(k))){ l=new ArrayMirror(k); }else if((%IsDate(k))){ l=new DateMirror(k); }else if((%IsFunction(k))){ l=new FunctionMirror(k); }else if(%IsRegExp(k)){ l=new RegExpMirror(k); }else if((%_ClassOf(k)==='Error')){ l=new ErrorMirror(k); }else if((%_ClassOf(k)==='Script')){ l=new ScriptMirror(k); }else if((%_ClassOf(k)==='Map')||(%_ClassOf(k)==='WeakMap')){ l=new MapMirror(k); }else if((%_ClassOf(k)==='Set')||(%_ClassOf(k)==='WeakSet')){ l=new SetMirror(k); }else if((%_ClassOf(k)==='Map Iterator')||(%_ClassOf(k)==='Set Iterator')){ l=new IteratorMirror(k); }else if(%is_promise(k)){ l=new PromiseMirror(k); }else if((%_ClassOf(k)==='Generator')){ l=new GeneratorMirror(k); }else{ l=new ObjectMirror(k,j.OBJECT_TYPE); } return l; } function GetUndefinedMirror(){ return MakeMirror((void 0)); } function inherits(m,n){ var o=function(){}; o.prototype=n.prototype; m.super_=n.prototype; m.prototype=new o(); m.prototype.constructor=m; } var p=80; var q={}; q.Data=0; q.Accessor=1; var r={}; r.None=0; r.ReadOnly=1; r.DontEnum=2; r.DontDelete=4; var s={Global:0, Local:1, With:2, Closure:3, Catch:4, Block:5, Script:6, Eval:7, Module:8, }; function Mirror(t){ this.type_=t; } Mirror.prototype.type=function(){ return this.type_; }; Mirror.prototype.isValue=function(){ return this instanceof ValueMirror; }; Mirror.prototype.isUndefined=function(){ return this instanceof UndefinedMirror; }; Mirror.prototype.isNull=function(){ return this instanceof NullMirror; }; Mirror.prototype.isBoolean=function(){ return this instanceof BooleanMirror; }; Mirror.prototype.isNumber=function(){ return this instanceof NumberMirror; }; Mirror.prototype.isString=function(){ return this instanceof StringMirror; }; Mirror.prototype.isSymbol=function(){ return this instanceof SymbolMirror; }; Mirror.prototype.isObject=function(){ return this instanceof ObjectMirror; }; Mirror.prototype.isFunction=function(){ return this instanceof FunctionMirror; }; Mirror.prototype.isUnresolvedFunction=function(){ return this instanceof UnresolvedFunctionMirror; }; Mirror.prototype.isArray=function(){ return this instanceof ArrayMirror; }; Mirror.prototype.isDate=function(){ return this instanceof DateMirror; }; Mirror.prototype.isRegExp=function(){ return this instanceof RegExpMirror; }; Mirror.prototype.isError=function(){ return this instanceof ErrorMirror; }; Mirror.prototype.isPromise=function(){ return this instanceof PromiseMirror; }; Mirror.prototype.isGenerator=function(){ return this instanceof GeneratorMirror; }; Mirror.prototype.isProperty=function(){ return this instanceof PropertyMirror; }; Mirror.prototype.isInternalProperty=function(){ return this instanceof InternalPropertyMirror; }; Mirror.prototype.isFrame=function(){ return this instanceof FrameMirror; }; Mirror.prototype.isScript=function(){ return this instanceof ScriptMirror; }; Mirror.prototype.isContext=function(){ return this instanceof ContextMirror; }; Mirror.prototype.isScope=function(){ return this instanceof ScopeMirror; }; Mirror.prototype.isMap=function(){ return this instanceof MapMirror; }; Mirror.prototype.isSet=function(){ return this instanceof SetMirror; }; Mirror.prototype.isIterator=function(){ return this instanceof IteratorMirror; }; Mirror.prototype.toText=function(){ return"#<"+this.constructor.name+">"; }; function ValueMirror(t,k){ %_Call(Mirror,this,t); this.value_=k; } inherits(ValueMirror,Mirror); ValueMirror.prototype.isPrimitive=function(){ var t=this.type(); return t==='undefined'|| t==='null'|| t==='boolean'|| t==='number'|| t==='string'|| t==='symbol'; }; ValueMirror.prototype.value=function(){ return this.value_; }; function UndefinedMirror(){ %_Call(ValueMirror,this,j.UNDEFINED_TYPE,(void 0)); } inherits(UndefinedMirror,ValueMirror); UndefinedMirror.prototype.toText=function(){ return'undefined'; }; function NullMirror(){ %_Call(ValueMirror,this,j.NULL_TYPE,null); } inherits(NullMirror,ValueMirror); NullMirror.prototype.toText=function(){ return'null'; }; function BooleanMirror(k){ %_Call(ValueMirror,this,j.BOOLEAN_TYPE,k); } inherits(BooleanMirror,ValueMirror); BooleanMirror.prototype.toText=function(){ return this.value_?'true':'false'; }; function NumberMirror(k){ %_Call(ValueMirror,this,j.NUMBER_TYPE,k); } inherits(NumberMirror,ValueMirror); NumberMirror.prototype.toText=function(){ return %NumberToString(this.value_); }; function StringMirror(k){ %_Call(ValueMirror,this,j.STRING_TYPE,k); } inherits(StringMirror,ValueMirror); StringMirror.prototype.length=function(){ return this.value_.length; }; StringMirror.prototype.getTruncatedValue=function(u){ if(u!=-1&&this.length()>u){ return this.value_.substring(0,u)+ '... (length: '+this.length()+')'; } return this.value_; }; StringMirror.prototype.toText=function(){ return this.getTruncatedValue(p); }; function SymbolMirror(k){ %_Call(ValueMirror,this,j.SYMBOL_TYPE,k); } inherits(SymbolMirror,ValueMirror); SymbolMirror.prototype.description=function(){ return %SymbolDescription(%ValueOf(this.value_)); } SymbolMirror.prototype.toText=function(){ return %SymbolDescriptiveString(%ValueOf(this.value_)); } function ObjectMirror(k,t){ t=t||j.OBJECT_TYPE; %_Call(ValueMirror,this,t,k); } inherits(ObjectMirror,ValueMirror); ObjectMirror.prototype.className=function(){ return %_ClassOf(this.value_); }; ObjectMirror.prototype.constructorFunction=function(){ return MakeMirror(%DebugGetProperty(this.value_,'constructor')); }; ObjectMirror.prototype.prototypeObject=function(){ return MakeMirror(%DebugGetProperty(this.value_,'prototype')); }; ObjectMirror.prototype.protoObject=function(){ return MakeMirror(%DebugGetPrototype(this.value_)); }; ObjectMirror.prototype.hasNamedInterceptor=function(){ var v=%GetInterceptorInfo(this.value_); return(v&2)!=0; }; ObjectMirror.prototype.hasIndexedInterceptor=function(){ var v=%GetInterceptorInfo(this.value_); return(v&1)!=0; }; ObjectMirror.prototype.propertyNames=function(){ return %GetOwnPropertyKeys(this.value_,0); }; ObjectMirror.prototype.properties=function(){ var w=this.propertyNames(); var x=new c(w.length); for(var y=0;y'; }; ObjectMirror.GetInternalProperties=function(k){ var x=%DebugGetInternalProperties(k); var D=[]; for(var y=0;yK)return new c(); var L=new c(K-J+1); for(var y=J;y<=K;y++){ var A=%DebugGetPropertyDetails(this.value_,(%_ToString(y))); var k; if(A){ k=new PropertyMirror(this,y,A); }else{ k=GetUndefinedMirror(); } L[y-J]=k; } return L; }; function DateMirror(k){ %_Call(ObjectMirror,this,k); } inherits(DateMirror,ObjectMirror); DateMirror.prototype.toText=function(){ var M=e(this.value_); return M.substring(1,M.length-1); }; function RegExpMirror(k){ %_Call(ObjectMirror,this,k,j.REGEXP_TYPE); } inherits(RegExpMirror,ObjectMirror); RegExpMirror.prototype.source=function(){ return this.value_.source; }; RegExpMirror.prototype.global=function(){ return this.value_.global; }; RegExpMirror.prototype.ignoreCase=function(){ return this.value_.ignoreCase; }; RegExpMirror.prototype.multiline=function(){ return this.value_.multiline; }; RegExpMirror.prototype.sticky=function(){ return this.value_.sticky; }; RegExpMirror.prototype.unicode=function(){ return this.value_.unicode; }; RegExpMirror.prototype.toText=function(){ return"/"+this.source()+"/"; }; function ErrorMirror(k){ %_Call(ObjectMirror,this,k,j.ERROR_TYPE); } inherits(ErrorMirror,ObjectMirror); ErrorMirror.prototype.message=function(){ return this.value_.message; }; ErrorMirror.prototype.toText=function(){ var N; try{ N=%ErrorToString(this.value_); }catch(e){ N='#'; } return N; }; function PromiseMirror(k){ %_Call(ObjectMirror,this,k,j.PROMISE_TYPE); } inherits(PromiseMirror,ObjectMirror); function PromiseGetStatus_(k){ var O=%PromiseStatus(k); if(O==0)return"pending"; if(O==1)return"resolved"; return"rejected"; } function PromiseGetValue_(k){ return %PromiseResult(k); } PromiseMirror.prototype.status=function(){ return PromiseGetStatus_(this.value_); }; PromiseMirror.prototype.promiseValue=function(){ return MakeMirror(PromiseGetValue_(this.value_)); }; function MapMirror(k){ %_Call(ObjectMirror,this,k,j.MAP_TYPE); } inherits(MapMirror,ObjectMirror); MapMirror.prototype.entries=function(P){ var D=[]; if((%_ClassOf(this.value_)==='WeakMap')){ var Q=%GetWeakMapEntries(this.value_,P||0); for(var y=0;y3){ this.exception_=A[3]; this.getter_=A[4]; this.setter_=A[5]; } } inherits(PropertyMirror,Mirror); PropertyMirror.prototype.isReadOnly=function(){ return(this.attributes()&r.ReadOnly)!=0; }; PropertyMirror.prototype.isEnum=function(){ return(this.attributes()&r.DontEnum)==0; }; PropertyMirror.prototype.canDelete=function(){ return(this.attributes()&r.DontDelete)==0; }; PropertyMirror.prototype.name=function(){ return this.name_; }; PropertyMirror.prototype.toText=function(){ if((typeof(this.name_)==='symbol'))return %SymbolDescriptiveString(this.name_); return this.name_; }; PropertyMirror.prototype.isIndexed=function(){ for(var y=0;y0; }; FrameDetails.prototype.inlinedFrameIndex=function(){ %CheckExecutionState(this.break_id_); var ap=an; return(this.details_[ag]&ap)>>2; }; FrameDetails.prototype.argumentCount=function(){ %CheckExecutionState(this.break_id_); return this.details_[ab]; }; FrameDetails.prototype.argumentName=function(G){ %CheckExecutionState(this.break_id_); if(G>=0&&G=0&&G=0&&G=0&&G0){ for(var y=0;y0){ D+=this.lineOffset(); D+='-'; D+=this.lineOffset()+this.lineCount()-1; }else{ D+=this.lineCount(); } D+=')'; return D; }; function ContextMirror(aQ){ %_Call(Mirror,this,j.CONTEXT_TYPE); this.data_=aQ; } inherits(ContextMirror,Mirror); ContextMirror.prototype.data=function(){ return this.data_; }; b.InstallFunctions(a,2,[ "MakeMirror",MakeMirror, ]); b.InstallConstants(a,[ "ScopeType",s, "PropertyType",q, "PropertyAttribute",r, "Mirror",Mirror, "ValueMirror",ValueMirror, "UndefinedMirror",UndefinedMirror, "NullMirror",NullMirror, "BooleanMirror",BooleanMirror, "NumberMirror",NumberMirror, "StringMirror",StringMirror, "SymbolMirror",SymbolMirror, "ObjectMirror",ObjectMirror, "FunctionMirror",FunctionMirror, "UnresolvedFunctionMirror",UnresolvedFunctionMirror, "ArrayMirror",ArrayMirror, "DateMirror",DateMirror, "RegExpMirror",RegExpMirror, "ErrorMirror",ErrorMirror, "PromiseMirror",PromiseMirror, "MapMirror",MapMirror, "SetMirror",SetMirror, "IteratorMirror",IteratorMirror, "GeneratorMirror",GeneratorMirror, "PropertyMirror",PropertyMirror, "InternalPropertyMirror",InternalPropertyMirror, "FrameMirror",FrameMirror, "ScriptMirror",ScriptMirror, "ScopeMirror",ScopeMirror, "FrameDetails",FrameDetails, ]); }) debugQ (function(a,b){ "use strict"; var c=a.FrameMirror; var d=a.Array; var e=a.RegExp; var f=a.isNaN; var g=a.MakeMirror; var h=a.Math.min; var i=a.Mirror; var j=a.ValueMirror; var k=10; var l={}; var m=/^(?:\s*(?:\/\*.*?\*\/)*)*/; l.DebugEvent={Break:1, Exception:2, AfterCompile:3, CompileError:4, AsyncTaskEvent:5}; l.ExceptionBreak={Caught:0, Uncaught:1}; l.StepAction={StepOut:0, StepNext:1, StepIn:2}; l.ScriptType={Native:0, Extension:1, Normal:2, Wasm:3}; l.ScriptCompilationType={Host:0, Eval:1, JSON:2}; l.ScriptBreakPointType={ScriptId:0, ScriptName:1, ScriptRegExp:2}; l.BreakPositionAlignment={ Statement:0, BreakPosition:1 }; function ScriptTypeFlag(n){ return(1<=this.frameCount()){ throw %make_type_error(35); } return new c(this.break_id,an); }; ExecutionState.prototype.setSelectedFrame=function(ao){ var C=(%_ToNumber(ao)); if(C<0||C>=this.frameCount()){ throw %make_type_error(35); } this.selected_frame=C; }; ExecutionState.prototype.selectedFrame=function(){ return this.selected_frame; }; function MakeBreakEvent(A,ap){ return new BreakEvent(A,ap); } function BreakEvent(A,ap){ this.frame_=new c(A,0); this.break_points_hit_=ap; } BreakEvent.prototype.eventType=function(){ return l.DebugEvent.Break; }; BreakEvent.prototype.func=function(){ return this.frame_.func(); }; BreakEvent.prototype.sourceLine=function(){ return this.frame_.sourceLine(); }; BreakEvent.prototype.sourceColumn=function(){ return this.frame_.sourceColumn(); }; BreakEvent.prototype.sourceLineText=function(){ return this.frame_.sourceLineText(); }; BreakEvent.prototype.breakPointsHit=function(){ return this.break_points_hit_; }; function MakeExceptionEvent(A,aq,ar,as){ return new ExceptionEvent(A,aq,ar,as); } function ExceptionEvent(A,aq,ar,as){ this.exec_state_=new ExecutionState(A); this.exception_=aq; this.uncaught_=ar; this.promise_=as; } ExceptionEvent.prototype.eventType=function(){ return l.DebugEvent.Exception; }; ExceptionEvent.prototype.exception=function(){ return this.exception_; }; ExceptionEvent.prototype.uncaught=function(){ return this.uncaught_; }; ExceptionEvent.prototype.promise=function(){ return this.promise_; }; ExceptionEvent.prototype.func=function(){ return this.exec_state_.frame(0).func(); }; ExceptionEvent.prototype.sourceLine=function(){ return this.exec_state_.frame(0).sourceLine(); }; ExceptionEvent.prototype.sourceColumn=function(){ return this.exec_state_.frame(0).sourceColumn(); }; ExceptionEvent.prototype.sourceLineText=function(){ return this.exec_state_.frame(0).sourceLineText(); }; function MakeCompileEvent(F,n){ return new CompileEvent(F,n); } function CompileEvent(F,n){ this.script_=g(F); this.type_=n; } CompileEvent.prototype.eventType=function(){ return this.type_; }; CompileEvent.prototype.script=function(){ return this.script_; }; function MakeScriptObject_(F,at){ var au={id:F.id(), name:F.name(), lineOffset:F.lineOffset(), columnOffset:F.columnOffset(), lineCount:F.lineCount(), }; if(!(F.data()===(void 0))){ au.data=F.data(); } if(at){ au.source=F.source(); } return au; } function MakeAsyncTaskEvent(n,av){ return new AsyncTaskEvent(n,av); } function AsyncTaskEvent(n,av){ this.type_=n; this.id_=av; } AsyncTaskEvent.prototype.type=function(){ return this.type_; } AsyncTaskEvent.prototype.id=function(){ return this.id_; } b.InstallConstants(a,[ "Debug",l, "BreakEvent",BreakEvent, "CompileEvent",CompileEvent, "BreakPoint",BreakPoint, ]); b.InstallFunctions(b,2,[ "MakeExecutionState",MakeExecutionState, "MakeExceptionEvent",MakeExceptionEvent, "MakeBreakEvent",MakeBreakEvent, "MakeCompileEvent",MakeCompileEvent, "MakeAsyncTaskEvent",MakeAsyncTaskEvent, "IsBreakPointTriggered",IsBreakPointTriggered, ]); }) liveedit} (function(a,b){ "use strict"; var c=a.Debug.findScriptSourcePosition; var d=a.Array; var e=a.Math.floor; var f=a.Math.max; var g=a.SyntaxError; var h; function ApplyPatchMultiChunk(script,diff_array,new_source,preview_only, change_log){ var i=script.source; var j=GatherCompileInfo(i,script); var k=BuildCodeInfoTree(j); var l=new PosTranslator(diff_array); MarkChangedFunctions(k,l.GetChunks()); FindLiveSharedInfos(k,script); var m; try{ m=GatherCompileInfo(new_source,script); }catch(e){ var n= new Failure("Failed to compile new version of script: "+e); if(e instanceof g){ var o={ type:"liveedit_compile_error", syntaxErrorMessage:e.message }; CopyErrorPositionToDetails(e,o); n.details=o; } throw n; } var p=m.reduce( (max,info)=>f(max,info.function_literal_id),0); var q=BuildCodeInfoTree(m); FindCorrespondingFunctions(k,q); var r=new d(); var s=new d(); var t=new d(); var u=new d(); function HarvestTodo(v){ function CollectDamaged(w){ s.push(w); for(var x=0;xO[E].start_position){ R=E; } } if(R!=x){ var S=O[R]; var T=P[R]; O[R]=O[x]; P[R]=P[x]; O[x]=S; P[x]=T; } } var U=0; function ResetIndexes(V,W){ var X=-1; while(U=ay.pos1+ay.len1){ return as+ay.pos2+ay.len2-ay.pos1-ay.len1; } if(!at){ at=PosTranslator.DefaultInsideChunkHandler; } return at(as,ay); }; PosTranslator.DefaultInsideChunkHandler=function(as,az){ Assert(false,"Cannot translate position in changed area"); }; PosTranslator.ShiftWithTopInsideChunkHandler= function(as,az){ return as-az.pos1+az.pos2; }; var h={ UNCHANGED:"unchanged", SOURCE_CHANGED:"source changed", CHANGED:"changed", DAMAGED:"damaged" }; function CodeInfoTreeNode(aA,aB,aC){ this.info=aA; this.children=aB; this.array_index=aC; this.parent=(void 0); this.status=h.UNCHANGED; this.status_explanation=(void 0); this.new_start_pos=(void 0); this.new_end_pos=(void 0); this.corresponding_node=(void 0); this.unmatched_new_nodes=(void 0); this.textual_corresponding_node=(void 0); this.textually_unmatched_new_nodes=(void 0); this.live_shared_function_infos=(void 0); } function BuildCodeInfoTree(aD){ var aE=0; function BuildNode(){ var aF=aE; aE++; var aG=new d(); while(aE=am.length;}; this.TranslatePos=function(as){return as+aL;}; }; function ProcessInternals(aM){ aM.new_start_pos=aJ.TranslatePos( aM.info.start_position); var aN=0; var aO=false; var aP=false; while(!aJ.done()&& aJ.current().pos1= aJ.current().pos1+aJ.current().len1){ aO=true; aJ.next(); continue; }else if(aQ.info.start_position<=aJ.current().pos1&& aQ.info.end_position>=aJ.current().pos1+ aJ.current().len1){ ProcessInternals(aQ); aP=aP|| (aQ.status!=h.UNCHANGED); aO=aO|| (aQ.status==h.DAMAGED); aN++; continue; }else{ aO=true; aQ.status=h.DAMAGED; aQ.status_explanation= "Text diff overlaps with function boundary"; aN++; continue; } }else{ if(aJ.current().pos1+aJ.current().len1<= aM.info.end_position){ aM.status=h.CHANGED; aJ.next(); continue; }else{ aM.status=h.DAMAGED; aM.status_explanation= "Text diff overlaps with function boundary"; return; } } Assert("Unreachable",false); } while(aN0){ return bd; } } function TraverseTree(w){ w.live_shared_function_infos=FindFunctionInfos(w.info); for(var x=0;x ["+bl+"]"; } return; } var bm; function CheckStackActivations(old_shared_wrapper_list, new_shared_list, Z){ var bn=new d(); for(var x=0;x0){ Z.push({dropped_from_stack:bq}); } if(bp.length>0){ Z.push({functions_on_stack:bp}); throw new Failure("Blocked by functions on stack"); } return bq.length; } var bm={ AVAILABLE_FOR_PATCH:1, BLOCKED_ON_ACTIVE_STACK:2, BLOCKED_ON_OTHER_STACK:3, BLOCKED_UNDER_NATIVE_CODE:4, REPLACED_ON_ACTIVE_STACK:5, BLOCKED_UNDER_GENERATOR:6, BLOCKED_ACTIVE_GENERATOR:7, BLOCKED_NO_NEW_TARGET_ON_RESTART:8 }; bm.SymbolName=function(bt){ var bu=bm; for(var bv in bu){ if(bu[bv]==bt){ return bv; } } }; function Failure(ag){ this.message=ag; } Failure.prototype.toString=function(){ return"LiveEdit Failure: "+this.message; }; function CopyErrorPositionToDetails(bw,o){ function createPositionStruct(M,bx){ if(bx==-1)return; var by=M.locationFromPosition(bx,true); if(by==null)return; return{ line:by.line+1, column:by.column+1, position:bx }; } if(!("scriptObject"in bw)||!("startPosition"in bw)){ return; } var M=bw.scriptObject; var bz={ start:createPositionStruct(M,bw.startPosition), end:createPositionStruct(M,bw.endPosition) }; o.position=bz; } function SetScriptSource(M,bA,bB,Z){ var i=M.source; var bC=CompareStrings(i,bA); return ApplyPatchMultiChunk(M,bC,bA,bB, Z); } function CompareStrings(bD,bE){ return %LiveEditCompareStrings(bD,bE); } function ApplySingleChunkPatch(M,change_pos,change_len,new_str, Z){ var i=M.source; var bA=i.substring(0,change_pos)+ new_str+i.substring(change_pos+change_len); return ApplyPatchMultiChunk(M, [change_pos,change_pos+change_len,change_pos+new_str.length], bA,false,Z); } function DescribeChangeTree(aR){ function ProcessOldNode(w){ var bF=[]; for(var x=0;x>1); var k=2|4|1; for(var l=0;l>1); for(var l=0;l>1)+(fields?fields.length:0); if(s>=4){ %OptimizeObjectForAddingMultipleProperties(r,s); } if(fields){ for(var l=0;l9007199254740991)throw %make_range_error(i); return j; } function MaxSimple(k,l){ return k>l?k:l; } function MinSimple(k,l){ return k>l?l:k; } %SetForceInlineFlag(MaxSimple); %SetForceInlineFlag(MinSimple); function SpeciesConstructor(m,n){ var o=m.constructor; if((o===(void 0))){ return n; } if(!(%_IsJSReceiver(o))){ throw %make_type_error(30); } var p=o[f]; if((p==null)){ return n; } if(%IsConstructor(p)){ return p; } throw %make_type_error(242); } %FunctionSetPrototype(c,new c(0)); b.Export(function(q){ q.MaxSimple=MaxSimple; q.MinSimple=MinSimple; q.ToPositiveInteger=ToPositiveInteger; q.ToIndex=ToIndex; q.SpeciesConstructor=SpeciesConstructor; }); }) $v8natives (function(a,b){ %CheckIsBootstrapping(); var c=a.Object; var d=b.ImportNow("iterator_symbol"); var e=b.ImportNow("object_to_string"); var f=2|4|1; function ObjectToLocaleString(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Object.prototype.toLocaleString"); return this.toString(); } function ObjectIsPrototypeOf(g){ if(!(%_IsJSReceiver(g)))return false; var h=(%_ToObject(this)); return %HasInPrototypeChain(g,h); } function GetMethod(i,j){ var k=i[j]; if((k==null))return(void 0); if((typeof(k)==='function'))return k; throw %make_type_error(15,typeof k); } function ObjectConstructor(l){ if(c!=new.target&&!(new.target===(void 0))){ return this; } if((l===null)||(l===(void 0)))return{}; return(%_ToObject(l)); } %SetNativeFlag(c); %SetCode(c,ObjectConstructor); %AddNamedProperty(c.prototype,"constructor",c, 2); b.InstallFunctions(c.prototype,2,[ "toString",e, "toLocaleString",ObjectToLocaleString, "isPrototypeOf",ObjectIsPrototypeOf, ]); function GetIterator(i,m){ if((m===(void 0))){ m=i[d]; } if(!(typeof(m)==='function')){ throw %make_type_error(73,i); } var n=%_Call(m,i); if(!(%_IsJSReceiver(n))){ throw %make_type_error(67,n); } return n; } b.Export(function(o){ o.GetIterator=GetIterator; o.GetMethod=GetMethod; o.ObjectHasOwnProperty=c.prototype.hasOwnProperty; }); }) array9 (function(a,b,c){ "use strict"; %CheckIsBootstrapping(); var d; var e; var f=a.Array; var g=b.InternalArray; var h=b.InternalPackedArray; var i; var j; var k; var l=b.ImportNow("object_to_string"); var m=b.ImportNow("iterator_symbol"); var n=b.ImportNow("unscopables_symbol"); b.Import(function(o){ d=o.GetIterator; e=o.GetMethod; i=o.MaxSimple; j=o.MinSimple; k=o.ObjectHasOwnProperty; }); function ArraySpeciesCreate(p,q){ q=((q)+0); var r=%ArraySpeciesConstructor(p); return new r(q); } function KeySortCompare(s,t){ return s-t; } function GetSortedArrayKeys(p,u){ if((typeof(u)==='number')){ var v=u; var w=new g(); for(var x=0;x>2; var H=%EstimateNumberOfElements(p); return(HH*4); } function Stack(){ this.length=0; this.values=new g(); } Stack.prototype.length=null; Stack.prototype.values=null; function StackPush(I,J){ I.values[I.length++]=J; } function StackPop(I){ I.values[--I.length]=null } function StackHas(I,K){ var q=I.length; var L=I.values; for(var x=0;x=O){ var S=p[D]; if(!(S===(void 0))||D in p){ %CreateDataProperty(R,D-O,S); } } } } } function SparseMove(p,O,P,Q,U){ if(U===P)return; var V=new g( j(Q-P+U,0xffffffff)); var W; var u=%GetArrayKeys(p,Q); if((typeof(u)==='number')){ var v=u; for(var x=0;x=O+P){ var S=p[D]; if(!(S===(void 0))||D in p){ var X=D-P+U; V[X]=S; if(X>0xfffffffe){ W=W||new g(); W.push(X); } } } } } %MoveArrayContents(V,p); if(!(W===(void 0))){ var q=W.length; for(var x=0;xP){ for(var x=Q-P;x>O;x--){ var Z=x+P-1; var aa=x+U-1; if(Z in p){ p[aa]=p[Z]; }else{ delete p[aa]; } } }else{ for(var x=O;xQ-P+U;x--){ delete p[x-1]; } } } } function ArrayToString(){ var p; var ab; if((%_IsArray(this))){ ab=this.join; if(ab===ArrayJoin){ return Join(this,this.length,',',false); } p=this; }else{ p=(%_ToObject(this)); ab=p.join; } if(!(typeof(ab)==='function')){ return %_Call(l,p); } return %_Call(ab,p); } function InnerArrayToLocaleString(p,q){ return Join(p,(%_ToLength(q)),',',true); } function ArrayToLocaleString(){ var p=(%_ToObject(this)); var ac=p.length; return InnerArrayToLocaleString(p,ac); } function InnerArrayJoin(A,p,q){ if((A===(void 0))){ A=','; }else{ A=(%_ToString(A)); } if(q===1){ var y=p[0]; if((y==null))return''; return(%_ToString(y)); } return Join(p,q,A,false); } function ArrayJoin(A){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Array.prototype.join"); var p=(%_ToObject(this)); var q=(%_ToLength(p.length)); return InnerArrayJoin(A,p,q); } function ArrayPop(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Array.prototype.pop"); var p=(%_ToObject(this)); var ad=(%_ToLength(p.length)); if(ad==0){ p.length=ad; return; } ad--; var J=p[ad]; %DeleteProperty_Strict(p,ad); p.length=ad; return J; } function ArrayPush(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Array.prototype.push"); var p=(%_ToObject(this)); var ad=(%_ToLength(p.length)); var ae=arguments.length; if(ae>9007199254740991-ad)throw %make_type_error(231,ae,ad); for(var x=0;x=x){ ak=x; while(w[++ah]==x){} al=Q-x-1; } var am=p[ak]; if(!(am===(void 0))||ak in p){ var an=p[al]; if(!(an===(void 0))||al in p){ p[ak]=an; p[al]=am; }else{ p[al]=am; delete p[ak]; } }else{ var an=p[al]; if(!(an===(void 0))||al in p){ p[ak]=an; delete p[al]; } } } } function PackedArrayReverse(p,Q){ var ai=Q-1; for(var x=0;x0&&UseSparseVariant(p,Q,(%_IsArray(p)),Q)&& !%object_is_sealed(p)){ SparseMove(p,0,0,Q,ar); }else{ SimpleMove(p,0,0,Q,ar); } for(var x=0;xQ)O=Q; } if(au<0){ au+=Q; if(au<0)au=0; }else{ if(au>Q)au=Q; } var av=ArraySpeciesCreate(p,i(au-O,0)); if(auQ?Q:O; } function ComputeSpliceDeleteCount(aw,ar,Q,O){ var P=0; if(ar==1) return Q-O; P=(%_ToInteger(aw)); if(P<0) return 0; if(P>Q-O) return Q-O; return P; } function ArraySplice(as,aw){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Array.prototype.splice"); var ar=arguments.length; var p=(%_ToObject(this)); var Q=(%_ToLength(p.length)); var O=ComputeSpliceStartIndex((%_ToInteger(as)),Q); var P=ComputeSpliceDeleteCount(aw,ar,Q, O); var R=ArraySpeciesCreate(p,P); R.length=P; var ax=ar>2?ar-2:0; if(P!=ax&&%object_is_sealed(p)){ throw %make_type_error(13); }else if(P>0&&%object_is_frozen(p)){ throw %make_type_error(12); } var ay=P; if(ax!=P){ ay+=Q-O-P; } if(UseSparseVariant(p,Q,(%_IsArray(p)),ay)){ %NormalizeElements(p); if((%_IsArray(R)))%NormalizeElements(R); SparseSlice(p,O,P,Q,R); SparseMove(p,O,P,Q,ax); }else{ SimpleSlice(p,O,P,Q,R); SimpleMove(p,O,P,Q,ax); } var x=O; var az=2; var aA=arguments.length; while(az=o;ai--){ var aF=s[ai]; var aG=aB(aF,aE); if(aG>0){ s[ai+1]=aF; }else{ break; } } s[ai+1]=aE; } }; function GetThirdIndex(s,o,aD){ var aH=new g(); var aI=200+((aD-o)&15); var ai=0; o+=1; aD-=1; for(var x=o;x>1][0]; return aJ; } function QuickSort(s,o,aD){ var aJ=0; while(true){ if(aD-o<=10){ InsertionSort(s,o,aD); return; } if(aD-o>1000){ aJ=GetThirdIndex(s,o,aD); }else{ aJ=o+((aD-o)>>1); } var aK=s[o]; var aL=s[aD-1]; var aM=s[aJ]; var aN=aB(aK,aL); if(aN>0){ var aF=aK; aK=aL; aL=aF; } var aO=aB(aK,aM); if(aO>=0){ var aF=aK; aK=aM; aM=aL; aL=aF; }else{ var aP=aB(aL,aM); if(aP>0){ var aF=aL; aL=aM; aM=aF; } } s[o]=aK; s[aD-1]=aM; var aQ=aL; var aR=o+1; var aS=aD-1; s[aJ]=s[aR]; s[aR]=aQ; partition:for(var x=aR+1;x0){ do{ aS--; if(aS==x)break partition; var aT=s[aS]; aG=aB(aT,aQ); }while(aG>0); s[x]=s[aS]; s[aS]=aE; if(aG<0){ aE=s[x]; s[x]=s[aR]; s[aR]=aE; aR++; } } } if(aD-aS=aV){aV=x+1;} } } }else{ for(var x=0;x=aV){aV=Y+1;} } } } } return aV; }; function ShadowPrototypeElements(aU,o,aD){ for(var aW=%object_get_prototype_of(aU);aW; aW=%object_get_prototype_of(aW)){ var u=(%_IsJSProxy(aW))?aD:%GetArrayKeys(aW,aD); if((typeof(u)==='number')){ var aX=u; for(var x=o;x=q)Y=q-1; } var bg=0; var aV=Y; if(UseSparseVariant(p,q,(%_IsArray(p)),Y)){ %NormalizeElements(p); var u=%GetArrayKeys(p,Y+1); if((typeof(u)==='number')){ aV=u; }else{ if(u.length==0)return-1; var bh=GetSortedArrayKeys(p,u); var x=bh.length-1; while(x>=0){ var D=bh[x]; if(p[D]===aE)return D; x--; } return-1; } } if(!(aE===(void 0))){ for(var x=aV;x>=bg;x--){ if(p[x]===aE)return x; } return-1; } for(var x=aV;x>=bg;x--){ if((p[x]===(void 0))&&x in p){ return x; } } return-1; } function ArrayCopyWithin(bi,as,at){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Array.prototype.copyWithin"); var p=(%_ToObject(this)); var q=(%_ToLength(p.length)); bi=(%_ToInteger(bi)); var aD; if(bi<0){ aD=i(q+bi,0); }else{ aD=j(bi,q); } as=(%_ToInteger(as)); var o; if(as<0){ o=i(q+as,0); }else{ o=j(as,q); } at=(at===(void 0))?q:(%_ToInteger(at)); var bj; if(at<0){ bj=i(q+at,0); }else{ bj=j(at,q); } var bk=j(bj-o,q-aD); var bl=1; if(o0){ if(o in p){ p[aD]=p[o]; }else{ delete p[aD]; } o=o+bl; aD=aD+bl; bk--; } return p; } function InnerArrayFind(bm,bn,p,q){ if(!(typeof(bm)==='function')){ throw %make_type_error(15,bm); } for(var x=0;xq)x=q; } if(at<0){ at+=q; if(at<0)at=0; }else{ if(at>q)at=q; } if((at-x)>0&&%object_is_frozen(p)){ throw %make_type_error(12); } for(;xn){ return''; } } if(p<0){ p+=n; if(p<0){ return''; } }else{ if(p>n){ p=n; } } if(p<=o){ return''; } return %_SubString(m,o,p); } function HtmlEscape(q){ return %RegExpInternalReplace(/"/g,(%_ToString(q)),"""); } function StringAnchor(r){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.anchor"); return""+(%_ToString(this))+ ""; } function StringBig(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.big"); return""+(%_ToString(this))+""; } function StringBlink(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.blink"); return""+(%_ToString(this))+""; } function StringBold(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.bold"); return""+(%_ToString(this))+""; } function StringFixed(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.fixed"); return""+(%_ToString(this))+""; } function StringFontcolor(s){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.fontcolor"); return""+(%_ToString(this))+ ""; } function StringFontsize(t){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.fontsize"); return""+(%_ToString(this))+ ""; } function StringItalics(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.italics"); return""+(%_ToString(this))+""; } function StringLink(m){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.link"); return""+(%_ToString(this))+""; } function StringSmall(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.small"); return""+(%_ToString(this))+""; } function StringStrike(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.strike"); return""+(%_ToString(this))+""; } function StringSub(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.sub"); return""+(%_ToString(this))+""; } function StringSup(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.sup"); return""+(%_ToString(this))+""; } function StringRepeat(u){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.repeat"); var m=(%_ToString(this)); var v=(%_ToInteger(u)); if(v<0||v===(1/0))throw %make_range_error(162); if(m.length===0)return""; if(v>%_MaxSmi())throw %make_range_error(171); var w=""; while(true){ if(v&1)w+=m; v>>=1; if(v===0)return w; m+=m; } } function StringCodePointAt(x){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.codePointAt"); var y=(%_ToString(this)); var t=y.length; x=(%_ToInteger(x)); if(x<0||x>=t){ return(void 0); } var z=%_StringCharCodeAt(y,x); if(z<0xD800||z>0xDBFF||x+1==t){ return z; } var A=%_StringCharCodeAt(y,x+1); if(A<0xDC00||A>0xDFFF){ return z; } return(z-0xD800)*0x400+A+0x2400; } function StringRaw(B){ "use strict"; var C=arguments.length; var D=(%_ToObject(B)); var E=(%_ToObject(D.raw)); var F=(%_ToLength(E.length)); if(F<=0)return""; var G=(%_ToString(E[0])); for(var H=1;H0){ for(var ar=0;ar=aw&&au>=av; ax--){ an[aq+ax]=ao[ax]; au-=at; av-=as; } return ax; } var ax=CopyRightPart(); var ay=new g(ax+1-aw); for(var ar=aw;ar<=ax;ar++){ ay[ar-aw]=ao[ar]; } for(ar=aw;ar<=ax;ar++){ an[aq+ar]=ay[ar-aw]; } } function TypedArraySet(S,aq){ var az=(aq===(void 0))?0:(%_ToInteger(aq)); if(az<0)throw %make_type_error(184); if(az>%_MaxSmi()){ throw %make_range_error(185); } switch(%TypedArraySetFastCases(this,S,az)){ case 0: return; case 1: TypedArraySetFromOverlappingTypedArray(this,S,az); return; case 2: TypedArraySetFromArrayLike(this, S,%_TypedArrayGetLength(S),az); return; case 3: var aA=S.length; if((aA===(void 0))){ if((typeof(S)==='number')){ throw %make_type_error(50); } return; } aA=(%_ToLength(aA)); if(az+aA>%_TypedArrayGetLength(this)){ throw %make_range_error(185); } TypedArraySetFromArrayLike(this,S,aA,az); return; } } %FunctionSetLength(TypedArraySet,1); function TypedArrayGetToStringTag(){ if(!(%_IsTypedArray(this)))return; var aB=%_ClassOf(this); if((aB===(void 0)))return; return aB; } function InnerTypedArrayEvery(aC,aD,aE,aa){ if(!(typeof(aC)==='function'))throw %make_type_error(15,aC); for(var ar=0;ar=0;ar--){ if(ar in aE){ aO=aE[ar--]; break find_initial; } } throw %make_type_error(124); } for(;ar>=0;ar--){ if(ar in aE){ var aF=aE[ar]; aO=aN(aO,aF,ar,aE); } } return aO; } function TypedArrayReduceRight(aN,aO){ if(!(%_IsTypedArray(this)))throw %make_type_error(75); var aa=%_TypedArrayGetLength(this); return InnerArrayReduceRight(aN,aO,this,aa, arguments.length); } %FunctionSetLength(TypedArrayReduceRight,1); function TypedArrayOf(){ var aa=arguments.length; var aE=TypedArrayCreate(this,aa); for(var ar=0;ar>>12); m=m+(m<<2); m=m^(m>>>4); m=(m*2057)|0; m=m^(m>>>16); return m&0x3fffffff; } %SetForceInlineFlag(ComputeIntegerHash); function GetExistingHash(p){ if(%_IsSmi(p)){ return ComputeIntegerHash(p,0); } if((typeof(p)==='string')){ var u=%_StringGetRawHashField(p); if((u&1)===0){ return u>>>2; } }else if((%_IsJSReceiver(p))&&!(%_IsJSProxy(p))&&!(%_ClassOf(p)==='global')){ var m=(p[f]); return m; } return %GenericHash(p); } %SetForceInlineFlag(GetExistingHash); function GetHash(p){ var m=GetExistingHash(p); if((m===(void 0))){ m=(g()*0x40000000)|0; if(m===0)m=1; (p[f]=m); } return m; } %SetForceInlineFlag(GetHash); function SetConstructor(v){ if((new.target===(void 0))){ throw %make_type_error(29,"Set"); } %_SetInitialize(this); if(!(v==null)){ var w=this.add; if(!(typeof(w)==='function')){ throw %make_type_error(90,w,'add',this); } for(var x of v){ %_Call(w,this,x); } } } function SetAdd(p){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48,'Set.prototype.add',this); } if(p===0){ p=0; } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetHash(p); if(SetFindEntry(l,n,p,m)!==-1)return this; var y=((%_FixedArrayGet(l,(0)|0))); var z=((%_FixedArrayGet(l,(1)|0))); var A=n<<1; if((y+z)>=A){ %SetGrow(this); l=%_JSCollectionGetTable(this); n=((%_FixedArrayGet(l,(2)|0))); y=((%_FixedArrayGet(l,(0)|0))); z=((%_FixedArrayGet(l,(1)|0))); } var q=y+z; var B=(3+(n)+((q)<<1)); var o=(m&((n)-1)); var C=((%_FixedArrayGet(l,(3+(o))|0))); ((%_FixedArraySet(l,(3+(o))|0,q))); (((%_FixedArraySet(l,(0)|0,(y+1)|0)))); (%_FixedArraySet(l,(B)|0,p)); ((%_FixedArraySet(l,(B+1)|0,(C)|0))); return this; } function SetHas(p){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48,'Set.prototype.has',this); } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetExistingHash(p); if((m===(void 0)))return false; return SetFindEntry(l,n,p,m)!==-1; } function SetDelete(p){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48, 'Set.prototype.delete',this); } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetExistingHash(p); if((m===(void 0)))return false; var q=SetFindEntry(l,n,p,m); if(q===-1)return false; var y=((%_FixedArrayGet(l,(0)|0)))-1; var z=((%_FixedArrayGet(l,(1)|0)))+1; var B=(3+(n)+((q)<<1)); (%_FixedArraySet(l,(B)|0,%_TheHole())); (((%_FixedArraySet(l,(0)|0,(y)|0)))); (((%_FixedArraySet(l,(1)|0,(z)|0)))); if(y<(n>>>1))%SetShrink(this); return true; } function SetGetSize(){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48, 'Set.prototype.size',this); } var l=%_JSCollectionGetTable(this); return((%_FixedArrayGet(l,(0)|0))); } function SetClearJS(){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48, 'Set.prototype.clear',this); } %_SetClear(this); } function SetForEach(D,E){ if(!(%_ClassOf(this)==='Set')){ throw %make_type_error(48, 'Set.prototype.forEach',this); } if(!(typeof(D)==='function'))throw %make_type_error(15,D); var F=new i(this,2); var p; var G=[(void 0)]; while(%SetIteratorNext(F,G)){ p=G[0]; %_Call(D,E,p,p,this); } } %SetCode(e,SetConstructor); %FunctionSetLength(e,0); %FunctionSetPrototype(e,new d()); %AddNamedProperty(e.prototype,"constructor",e,2); %AddNamedProperty(e.prototype,j,"Set", 2|1); %FunctionSetLength(SetForEach,1); b.InstallGetter(e.prototype,"size",SetGetSize); b.InstallFunctions(e.prototype,2,[ "add",SetAdd, "has",SetHas, "delete",SetDelete, "clear",SetClearJS, "forEach",SetForEach ]); function MapConstructor(v){ if((new.target===(void 0))){ throw %make_type_error(29,"Map"); } %_MapInitialize(this); if(!(v==null)){ var w=this.set; if(!(typeof(w)==='function')){ throw %make_type_error(90,w,'set',this); } for(var H of v){ if(!(%_IsJSReceiver(H))){ throw %make_type_error(54,H); } %_Call(w,this,H[0],H[1]); } } } function MapGet(p){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.get',this); } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetExistingHash(p); if((m===(void 0)))return(void 0); var q=MapFindEntry(l,n,p,m); if(q===-1)return(void 0); return((%_FixedArrayGet(l,((3+(n)+((q)*3))+1)|0))); } function MapSet(p,x){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.set',this); } if(p===0){ p=0; } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetHash(p); var q=MapFindEntry(l,n,p,m); if(q!==-1){ var I=(3+(n)+((q)*3)); (%_FixedArraySet(l,(I+1)|0,x)); return this; } var y=((%_FixedArrayGet(l,(0)|0))); var z=((%_FixedArrayGet(l,(1)|0))); var A=n<<1; if((y+z)>=A){ %MapGrow(this); l=%_JSCollectionGetTable(this); n=((%_FixedArrayGet(l,(2)|0))); y=((%_FixedArrayGet(l,(0)|0))); z=((%_FixedArrayGet(l,(1)|0))); } q=y+z; var B=(3+(n)+((q)*3)); var o=(m&((n)-1)); var C=((%_FixedArrayGet(l,(3+(o))|0))); ((%_FixedArraySet(l,(3+(o))|0,q))); (((%_FixedArraySet(l,(0)|0,(y+1)|0)))); (%_FixedArraySet(l,(B)|0,p)); (%_FixedArraySet(l,(B+1)|0,x)); (%_FixedArraySet(l,(B+2)|0,C)); return this; } function MapHas(p){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.has',this); } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetHash(p); return MapFindEntry(l,n,p,m)!==-1; } function MapDelete(p){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.delete',this); } var l=%_JSCollectionGetTable(this); var n=((%_FixedArrayGet(l,(2)|0))); var m=GetHash(p); var q=MapFindEntry(l,n,p,m); if(q===-1)return false; var y=((%_FixedArrayGet(l,(0)|0)))-1; var z=((%_FixedArrayGet(l,(1)|0)))+1; var B=(3+(n)+((q)*3)); (%_FixedArraySet(l,(B)|0,%_TheHole())); (%_FixedArraySet(l,(B+1)|0,%_TheHole())); (((%_FixedArraySet(l,(0)|0,(y)|0)))); (((%_FixedArraySet(l,(1)|0,(z)|0)))); if(y<(n>>>1))%MapShrink(this); return true; } function MapGetSize(){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.size',this); } var l=%_JSCollectionGetTable(this); return((%_FixedArrayGet(l,(0)|0))); } function MapClearJS(){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.clear',this); } %_MapClear(this); } function MapForEach(D,E){ if(!(%_ClassOf(this)==='Map')){ throw %make_type_error(48, 'Map.prototype.forEach',this); } if(!(typeof(D)==='function'))throw %make_type_error(15,D); var F=new h(this,3); var G=[(void 0),(void 0)]; while(%MapIteratorNext(F,G)){ %_Call(D,E,G[1],G[0],this); } } %SetCode(c,MapConstructor); %FunctionSetLength(c,0); %FunctionSetPrototype(c,new d()); %AddNamedProperty(c.prototype,"constructor",c,2); %AddNamedProperty( c.prototype,j,"Map",2|1); %FunctionSetLength(MapForEach,1); b.InstallGetter(c.prototype,"size",MapGetSize); b.InstallFunctions(c.prototype,2,[ "get",MapGet, "set",MapSet, "has",MapHas, "delete",MapDelete, "clear",MapClearJS, "forEach",MapForEach ]); %InstallToContext([ "map_get",MapGet, "map_set",MapSet, "map_has",MapHas, "map_delete",MapDelete, "set_add",SetAdd, "set_has",SetHas, "set_delete",SetDelete, ]); b.Export(function(J){ J.GetExistingHash=GetExistingHash; J.GetHash=GetHash; }); }) { if(p===true)return; p=true; n[m]=x; if(--k===0){ var q=[]; %MoveArrayContents(n,q); %_Call(o.resolve,(void 0),q); } }; } try{ var r=0; k=1; for(var s of h){ var t=this.resolve(s); ++k; var u=t.then( CreateResolveElementFunction(r,j,i), i.reject); if(l&&%is_promise(u)){ (u[e]=i.promise); } ++r; } if(--k===0){ var q=[]; %MoveArrayContents(j,q); %_Call(i.resolve,(void 0),q); } }catch(e){ %_Call(i.reject,(void 0),e); } return i.promise; } function PromiseRace(h){ if(!(%_IsJSReceiver(this))){ throw %make_type_error(16,PromiseRace); } var i=%new_promise_capability(this,false); var l=(%_DebugIsActive()!=0); if(l){ (i.reject[f]=true); } try{ for(var s of h){ var u=this.resolve(s).then(i.resolve, i.reject); if(l&&%is_promise(u)){ (u[e]=i.promise); } } }catch(e){ %_Call(i.reject,(void 0),e); } return i.promise; } b.InstallFunctions(g,2,[ "all",PromiseAll, "race",PromiseRace, ]); }) messages (function(a,b){ %CheckIsBootstrapping(); var c=b.ImportNow("Script"); %FunctionSetInstanceClassName(c,'Script'); %AddNamedProperty(c.prototype,'constructor',c, 2|4|1); function ScriptLocationFromPosition(position, include_resource_offset){ return %ScriptPositionInfo(this,position,!!include_resource_offset); } function ScriptNameOrSourceURL(){ if(this.source_url)return this.source_url; return this.name; } b.SetUpLockedPrototype(c,[ "source", "name", "source_url", "source_mapping_url", "line_offset", "column_offset" ],[ "locationFromPosition",ScriptLocationFromPosition, "nameOrSourceURL",ScriptNameOrSourceURL, ] ); }); $templates (function(a,b){ "use strict"; %CheckIsBootstrapping(); var c=a.Map; var d=b.InternalArray; var e=new c; var f=c.prototype.get; var g=c.prototype.set; function SameCallSiteElements(h,i){ var j=h.length; var i=i.raw; if(j!==i.length)return false; for(var k=0;k%JSProxyRevoke(f)}; } b.InstallFunctions(c,2,[ "revocable",ProxyCreateRevocable ]); }) Xharmony-string-paddingY (function(a,b){ %CheckIsBootstrapping(); var c=a.String; function StringPad(d,e,f){ e=(%_ToLength(e)); var g=d.length; if(e<=g)return""; if((f===(void 0))){ f=" "; }else{ f=(%_ToString(f)); if(f===""){ return""; } } var h=e-g; var i=(h/f.length)|0; var j=(h-f.length*i)|0; var k=""; while(true){ if(i&1)k+=f; i>>=1; if(i===0)break; f+=f; } if(j){ k+=%_SubString(f,0,j); } return k; } function StringPadStart(e,f){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.padStart") var d=(%_ToString(this)); return StringPad(d,e,f)+d; } %FunctionSetLength(StringPadStart,1); function StringPadEnd(e,f){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.padEnd") var d=(%_ToString(this)); return d+StringPad(d,e,f); } %FunctionSetLength(StringPadEnd,1); b.InstallFunctions(c.prototype,2,[ "padStart",StringPadStart, "padEnd",StringPadEnd ]); }); i18n. (function(a,b){ "use strict"; %CheckIsBootstrapping(); var c; var d; var e=a.Date; var f=a.Intl; var g=f.DateTimeFormat; var h=f.NumberFormat; var i=f.Collator; var j=f.v8BreakIterator; var k=a.Number; var l=a.RegExp; var m=a.String; var n=b.ImportNow("intl_fallback_symbol"); var o=b.InstallFunctions; var p=b.InstallGetter; var q=b.InternalArray; var r; var s=b.ImportNow("ObjectHasOwnProperty"); var t=b.OverrideFunction; var u=b.ImportNow("intl_pattern_symbol"); var v=b.ImportNow("intl_resolved_symbol"); var w=b.SetFunctionName; var x=m.prototype.substr; var y=m.prototype.substring; b.Import(function(z){ c=z.ArrayJoin; d=z.ArrayPush; r=z.MaxSimple; }); function InstallFunction(A,B,C){ o(A,2,[B,C]); } function AddBoundMethod(obj,methodName,implementation,length,typename, compat){ %CheckIsBootstrapping(); var D=%CreatePrivateSymbol(methodName); var E=(0,(function(){ var F=Unwrap(this,typename,obj,methodName,compat); if((F[D]===(void 0))){ var G; if((length===(void 0))||length===2){ G= (0,((fst,snd)=>implementation(F,fst,snd))); }else if(length===1){ G=(0,(fst=>implementation(F,fst))); }else{ G=(0,((...args)=>{ if(args.length>0){ return implementation(F,args[0]); }else{ return implementation(F); } })); } %SetNativeFlag(G); F[D]=G; } return F[D]; })); %FunctionRemovePrototype(E); %DefineGetterPropertyUnchecked(obj.prototype,methodName,E,2); %SetNativeFlag(E); } function IntlConstruct(F,constructor,create,newTarget,args, compat){ var H=args[0]; var I=args[1]; var J=create(H,I); if(compat&&(newTarget===(void 0))&&F instanceof constructor){ %object_define_property(F,n,{value:J}); return F; } return J; } function Unwrap(F,K,L,M,N){ if(!%IsInitializedIntlObjectOfType(F,K)){ if(N&&F instanceof L){ let fallback=F[n]; if(%IsInitializedIntlObjectOfType(fallback,K)){ return fallback; } } throw %make_type_error(48,M,F); } return F; } var O={ 'collator':(void 0), 'numberformat':(void 0), 'dateformat':(void 0), 'breakiterator':(void 0) }; var P=(void 0); function GetDefaultICULocaleJS(){ if((P===(void 0))){ P=%GetDefaultICULocale(); } return P; } var Q=(void 0); function GetUnicodeExtensionRE(){ if(((void 0)===(void 0))){ Q=new l('-u(-[a-z0-9]{2,8})+','g'); } return Q; } var R=(void 0); function GetAnyExtensionRE(){ if((R===(void 0))){ R=new l('-[a-z0-9]{1}-.*','g'); } return R; } var S=(void 0); function GetQuotedStringRE(){ if((S===(void 0))){ S=new l("'[^']+'",'g'); } return S; } var T=(void 0); function GetServiceRE(){ if((T===(void 0))){ T= new l('^(collator|numberformat|dateformat|breakiterator)$'); } return T; } var U=(void 0); function GetLanguageTagRE(){ if((U===(void 0))){ BuildLanguageTagREs(); } return U; } var V=(void 0); function GetLanguageVariantRE(){ if((V===(void 0))){ BuildLanguageTagREs(); } return V; } var W=(void 0); function GetLanguageSingletonRE(){ if((W===(void 0))){ BuildLanguageTagREs(); } return W; } var X=(void 0); function GetTimezoneNameCheckRE(){ if((X===(void 0))){ X=new l( '^([A-Za-z]+)/([A-Za-z_-]+)((?:\/[A-Za-z_-]+)+)*$'); } return X; } var Y=(void 0); function GetTimezoneNameLocationPartRE(){ if((Y===(void 0))){ Y= new l('^([A-Za-z]+)((?:[_-][A-Za-z]+)+)*$'); } return Y; } function supportedLocalesOf(Z,H,I){ if((%regexp_internal_match(GetServiceRE(),Z)===null)){ throw %make_error(7,Z); } if((I===(void 0))){ I={}; }else{ I=(%_ToObject(I)); } var aa=I.localeMatcher; if(!(aa===(void 0))){ aa=(%_ToString(aa)); if(aa!=='lookup'&&aa!=='best fit'){ throw %make_range_error(177,aa); } }else{ aa='best fit'; } var ab=initializeLocaleList(H); if((O[Z]===(void 0))){ O[Z]=getAvailableLocalesOf(Z); } if(aa==='best fit'){ return initializeLocaleList(bestFitSupportedLocalesOf( ab,O[Z])); } return initializeLocaleList(lookupSupportedLocalesOf( ab,O[Z])); } function lookupSupportedLocalesOf(ab,ac){ var ad=new q(); for(var ae=0;ae=3&&au<=8&&!(at===(void 0))){ if((an===(void 0))){ an=av; }else{ an=an+"-"+av; } }else{ return{}; } } if(!(at===(void 0))&&!(at in as)){ as[at]=an; } return as; } function setOptions(aw,as,ax,ai,ay){ var aq=''; var az=function updateExtension(at,an){ return'-'+at+'-'+(%_ToString(an)); } var aA=function updateProperty(aj,ak,an){ if(ak==='boolean'&&(typeof an==='string')){ an=(an==='true')?true:false; } if(!(aj===(void 0))){ defineWEProperty(ay,aj,an); } } for(var at in ax){ if((%_Call(s,ax,at))){ var an=(void 0); var aB=ax[at]; if(!(aB.property===(void 0))){ an=ai(aB.property,aB.type,aB.values); } if(!(an===(void 0))){ aA(aB.property,aB.type,an); aq+=az(at,an); continue; } if((%_Call(s,as,at))){ an=as[at]; if(!(an===(void 0))){ aA(aB.property,aB.type,an); aq+=az(at,an); }else if(aB.type==='boolean'){ aA(aB.property,aB.type,true); aq+=az(at,true); } } } } return aq===''?'':'-u'+aq; } function freezeArray(aC){ var aD=[]; var aE=aC.length; for(var ae=0;aebA){ throw %make_range_error(180,aj); } return %math_floor(an); } return bB; } function getNumberOption(I,aj,bz,bA,bB){ var an=I[aj]; return defaultNumberOption(an,bz,bA,bB,aj); } function SetNumberFormatDigitOptions(bo,I, mnfdDefault,mxfdDefault){ var bC=getNumberOption(I,'minimumIntegerDigits',1,21,1); defineWEProperty(bo,'minimumIntegerDigits',bC); var bD=getNumberOption(I,'minimumFractionDigits',0,20, mnfdDefault); defineWEProperty(bo,'minimumFractionDigits',bD); var bE=r(bD,mxfdDefault); var bF=getNumberOption(I,'maximumFractionDigits',bD,20, bE); defineWEProperty(bo,'maximumFractionDigits',bF); var bG=I['minimumSignificantDigits']; var bH=I['maximumSignificantDigits']; if(!(bG===(void 0))||!(bH===(void 0))){ bG=defaultNumberOption(bG,1,21,1,'minimumSignificantDigits'); defineWEProperty(bo,'minimumSignificantDigits',bG); bH=defaultNumberOption(bH,bG,21,21,'maximumSignificantDigits'); defineWEProperty(bo,'maximumSignificantDigits',bH); } } function CreateNumberFormat(H,I){ if((I===(void 0))){ I={}; } var ai=getGetOption(I,'numberformat'); var af=resolveLocale('numberformat',H,I); var bo={}; defineWEProperty(bo,'style',ai( 'style','string',['decimal','percent','currency'],'decimal')); var by=ai('currency','string'); if(!(by===(void 0))&&!isWellFormedCurrencyCode(by)){ throw %make_range_error(163,by); } if(bo.style==='currency'&&(by===(void 0))){ throw %make_type_error(31); } var bI,bJ; var bK=ai( 'currencyDisplay','string',['code','symbol','name'],'symbol'); if(bo.style==='currency'){ defineWEProperty(bo,'currency',%StringToUpperCaseI18N(by)); defineWEProperty(bo,'currencyDisplay',bK); bI=bJ=%CurrencyDigits(bo.currency); }else{ bI=0; bJ=bo.style==='percent'?0:3; } SetNumberFormatDigitOptions(bo,I,bI, bJ); defineWEProperty(bo,'useGrouping',ai( 'useGrouping','boolean',(void 0),true)); var as=parseExtension(af.extension); var bL={ 'nu':{'property':(void 0),'type':'string'} }; var aq=setOptions(I,as,bL, ai,bo); var bt=af.locale+aq; var ao=%object_define_properties({},{ currency:{writable:true}, currencyDisplay:{writable:true}, locale:{writable:true}, maximumFractionDigits:{writable:true}, minimumFractionDigits:{writable:true}, minimumIntegerDigits:{writable:true}, numberingSystem:{writable:true}, requestedLocale:{value:bt,writable:true}, style:{value:bo.style,writable:true}, useGrouping:{writable:true} }); if((%_Call(s,bo,'minimumSignificantDigits'))){ defineWEProperty(ao,'minimumSignificantDigits',(void 0)); } if((%_Call(s,bo,'maximumSignificantDigits'))){ defineWEProperty(ao,'maximumSignificantDigits',(void 0)); } var bM=%CreateNumberFormat(bt,bo, ao); if(bo.style==='currency'){ %object_define_property(ao,'currencyDisplay', {value:bK,writable:true}); } %MarkAsInitializedIntlObjectOfType(bM,'numberformat'); bM[v]=ao; return bM; } function NumberFormatConstructor(){ return IntlConstruct(this,h,CreateNumberFormat, new.target,arguments,true); } %SetCode(h,NumberFormatConstructor); InstallFunction(h.prototype,'resolvedOptions', function(){ var bN=Unwrap(this,'numberformat',h, 'resolvedOptions',true); var af=getOptimalLanguageTag(bN[v].requestedLocale, bN[v].locale); var aM={ locale:af, numberingSystem:bN[v].numberingSystem, style:bN[v].style, useGrouping:bN[v].useGrouping, minimumIntegerDigits:bN[v].minimumIntegerDigits, minimumFractionDigits:bN[v].minimumFractionDigits, maximumFractionDigits:bN[v].maximumFractionDigits, }; if(aM.style==='currency'){ defineWECProperty(aM,'currency',bN[v].currency); defineWECProperty(aM,'currencyDisplay', bN[v].currencyDisplay); } if((%_Call(s,bN[v],'minimumSignificantDigits'))){ defineWECProperty(aM,'minimumSignificantDigits', bN[v].minimumSignificantDigits); } if((%_Call(s,bN[v],'maximumSignificantDigits'))){ defineWECProperty(aM,'maximumSignificantDigits', bN[v].maximumSignificantDigits); } return aM; } ); InstallFunction(h,'supportedLocalesOf', function(H){ return supportedLocalesOf('numberformat',H,arguments[1]); } ); function formatNumber(bO,an){ var bP=(%_ToNumber(an))+0; return %InternalNumberFormat(bO,bP); } AddBoundMethod(h,'format',formatNumber,1, 'numberformat',true); function toLDMLString(I){ var ai=getGetOption(I,'dateformat'); var bQ=''; var bR=ai('weekday','string',['narrow','short','long']); bQ+=appendToLDMLString( bR,{narrow:'EEEEE',short:'EEE',long:'EEEE'}); bR=ai('era','string',['narrow','short','long']); bQ+=appendToLDMLString( bR,{narrow:'GGGGG',short:'GGG',long:'GGGG'}); bR=ai('year','string',['2-digit','numeric']); bQ+=appendToLDMLString(bR,{'2-digit':'yy','numeric':'y'}); bR=ai('month','string', ['2-digit','numeric','narrow','short','long']); bQ+=appendToLDMLString(bR,{'2-digit':'MM','numeric':'M', 'narrow':'MMMMM','short':'MMM','long':'MMMM'}); bR=ai('day','string',['2-digit','numeric']); bQ+=appendToLDMLString( bR,{'2-digit':'dd','numeric':'d'}); var bS=ai('hour12','boolean'); bR=ai('hour','string',['2-digit','numeric']); if((bS===(void 0))){ bQ+=appendToLDMLString(bR,{'2-digit':'jj','numeric':'j'}); }else if(bS===true){ bQ+=appendToLDMLString(bR,{'2-digit':'hh','numeric':'h'}); }else{ bQ+=appendToLDMLString(bR,{'2-digit':'HH','numeric':'H'}); } bR=ai('minute','string',['2-digit','numeric']); bQ+=appendToLDMLString(bR,{'2-digit':'mm','numeric':'m'}); bR=ai('second','string',['2-digit','numeric']); bQ+=appendToLDMLString(bR,{'2-digit':'ss','numeric':'s'}); bR=ai('timeZoneName','string',['short','long']); bQ+=appendToLDMLString(bR,{short:'z',long:'zzzz'}); return bQ; } function appendToLDMLString(bR,bT){ if(!(bR===(void 0))){ return bT[bR]; }else{ return''; } } function fromLDMLString(bQ){ bQ=%RegExpInternalReplace(GetQuotedStringRE(),bQ,''); var I={}; var aL=%regexp_internal_match(/E{3,5}/,bQ); I=appendToDateTimeObject( I,'weekday',aL,{EEEEE:'narrow',EEE:'short',EEEE:'long'}); aL=%regexp_internal_match(/G{3,5}/,bQ); I=appendToDateTimeObject( I,'era',aL,{GGGGG:'narrow',GGG:'short',GGGG:'long'}); aL=%regexp_internal_match(/y{1,2}/,bQ); I=appendToDateTimeObject( I,'year',aL,{y:'numeric',yy:'2-digit'}); aL=%regexp_internal_match(/M{1,5}/,bQ); I=appendToDateTimeObject(I,'month',aL,{MM:'2-digit', M:'numeric',MMMMM:'narrow',MMM:'short',MMMM:'long'}); aL=%regexp_internal_match(/L{1,5}/,bQ); I=appendToDateTimeObject(I,'month',aL,{LL:'2-digit', L:'numeric',LLLLL:'narrow',LLL:'short',LLLL:'long'}); aL=%regexp_internal_match(/d{1,2}/,bQ); I=appendToDateTimeObject( I,'day',aL,{d:'numeric',dd:'2-digit'}); aL=%regexp_internal_match(/h{1,2}/,bQ); if(aL!==null){ I['hour12']=true; } I=appendToDateTimeObject( I,'hour',aL,{h:'numeric',hh:'2-digit'}); aL=%regexp_internal_match(/H{1,2}/,bQ); if(aL!==null){ I['hour12']=false; } I=appendToDateTimeObject( I,'hour',aL,{H:'numeric',HH:'2-digit'}); aL=%regexp_internal_match(/m{1,2}/,bQ); I=appendToDateTimeObject( I,'minute',aL,{m:'numeric',mm:'2-digit'}); aL=%regexp_internal_match(/s{1,2}/,bQ); I=appendToDateTimeObject( I,'second',aL,{s:'numeric',ss:'2-digit'}); aL=%regexp_internal_match(/z|zzzz/,bQ); I=appendToDateTimeObject( I,'timeZoneName',aL,{z:'short',zzzz:'long'}); return I; } function appendToDateTimeObject(I,bR,aL,bT){ if((aL===null)){ if(!(%_Call(s,I,bR))){ defineWEProperty(I,bR,(void 0)); } return I; } var aj=aL[0]; defineWEProperty(I,bR,bT[aj]); return I; } function toDateTimeOptions(I,bU,bV){ if((I===(void 0))){ I={}; }else{ I=(%_ToObject(I)); } I=%object_create(I); var bW=true; if((bU==='date'||bU==='any')&& (!(I.weekday===(void 0))||!(I.year===(void 0))|| !(I.month===(void 0))||!(I.day===(void 0)))){ bW=false; } if((bU==='time'||bU==='any')&& (!(I.hour===(void 0))||!(I.minute===(void 0))|| !(I.second===(void 0)))){ bW=false; } if(bW&&(bV==='date'||bV==='all')){ %object_define_property(I,'year',{value:'numeric', writable:true, enumerable:true, configurable:true}); %object_define_property(I,'month',{value:'numeric', writable:true, enumerable:true, configurable:true}); %object_define_property(I,'day',{value:'numeric', writable:true, enumerable:true, configurable:true}); } if(bW&&(bV==='time'||bV==='all')){ %object_define_property(I,'hour',{value:'numeric', writable:true, enumerable:true, configurable:true}); %object_define_property(I,'minute',{value:'numeric', writable:true, enumerable:true, configurable:true}); %object_define_property(I,'second',{value:'numeric', writable:true, enumerable:true, configurable:true}); } return I; } function CreateDateTimeFormat(H,I){ if((I===(void 0))){ I={}; } var af=resolveLocale('dateformat',H,I); I=toDateTimeOptions(I,'any','date'); var ai=getGetOption(I,'dateformat'); var aa=ai('formatMatcher','string', ['basic','best fit'],'best fit'); var bQ=toLDMLString(I); var bX=canonicalizeTimeZoneID(I.timeZone); var bo={}; var as=parseExtension(af.extension); var bY={ 'ca':{'property':(void 0),'type':'string'}, 'nu':{'property':(void 0),'type':'string'} }; var aq=setOptions(I,as,bY, ai,bo); var bt=af.locale+aq; var ao=%object_define_properties({},{ calendar:{writable:true}, day:{writable:true}, era:{writable:true}, hour12:{writable:true}, hour:{writable:true}, locale:{writable:true}, minute:{writable:true}, month:{writable:true}, numberingSystem:{writable:true}, [u]:{writable:true}, requestedLocale:{value:bt,writable:true}, second:{writable:true}, timeZone:{writable:true}, timeZoneName:{writable:true}, tz:{value:bX,writable:true}, weekday:{writable:true}, year:{writable:true} }); var bZ=%CreateDateTimeFormat( bt,{skeleton:bQ,timeZone:bX},ao); if(ao.timeZone==="Etc/Unknown"){ throw %make_range_error(186,bX); } %MarkAsInitializedIntlObjectOfType(bZ,'dateformat'); bZ[v]=ao; return bZ; } function DateTimeFormatConstructor(){ return IntlConstruct(this,g,CreateDateTimeFormat, new.target,arguments,true); } %SetCode(g,DateTimeFormatConstructor); InstallFunction(g.prototype,'resolvedOptions', function(){ var bN=Unwrap(this,'dateformat',g, 'resolvedOptions',true); var ca={ 'gregorian':'gregory', 'ethiopic-amete-alem':'ethioaa' }; var cb=fromLDMLString(bN[v][u]); var cc=ca[bN[v].calendar]; if((cc===(void 0))){ cc=bN[v].calendar; } var af=getOptimalLanguageTag(bN[v].requestedLocale, bN[v].locale); var aM={ locale:af, numberingSystem:bN[v].numberingSystem, calendar:cc, timeZone:bN[v].timeZone }; addWECPropertyIfDefined(aM,'timeZoneName',cb.timeZoneName); addWECPropertyIfDefined(aM,'era',cb.era); addWECPropertyIfDefined(aM,'year',cb.year); addWECPropertyIfDefined(aM,'month',cb.month); addWECPropertyIfDefined(aM,'day',cb.day); addWECPropertyIfDefined(aM,'weekday',cb.weekday); addWECPropertyIfDefined(aM,'hour12',cb.hour12); addWECPropertyIfDefined(aM,'hour',cb.hour); addWECPropertyIfDefined(aM,'minute',cb.minute); addWECPropertyIfDefined(aM,'second',cb.second); return aM; } ); InstallFunction(g,'supportedLocalesOf', function(H){ return supportedLocalesOf('dateformat',H,arguments[1]); } ); function formatDate(bO,cd){ var ce; if((cd===(void 0))){ ce=%DateCurrentTime(); }else{ ce=(%_ToNumber(cd)); } if(!(%_IsSmi(%IS_VAR(ce))||((ce==ce)&&(ce!=1/0)&&(ce!=-1/0))))throw %make_range_error(154); return %InternalDateFormat(bO,new e(ce)); } function FormatDateToParts(cd){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"Intl.DateTimeFormat.prototype.formatToParts"); if(!(typeof(this)==='object')){ throw %make_type_error(16,this); } if(!%IsInitializedIntlObjectOfType(this,'dateformat')){ throw %make_type_error(48, 'Intl.DateTimeFormat.prototype.formatToParts', this); } var ce; if((cd===(void 0))){ ce=%DateCurrentTime(); }else{ ce=(%_ToNumber(cd)); } if(!(%_IsSmi(%IS_VAR(ce))||((ce==ce)&&(ce!=1/0)&&(ce!=-1/0))))throw %make_range_error(154); return %InternalDateFormatToParts(this,new e(ce)); } AddBoundMethod(g,'format',formatDate,1,'dateformat', true); function canonicalizeTimeZoneID(cf){ if((cf===(void 0))){ return cf; } cf=(%_ToString(cf)); var cg=%StringToUpperCaseI18N(cf); if(cg==='UTC'||cg==='GMT'|| cg==='ETC/UTC'||cg==='ETC/GMT'){ return'UTC'; } var aL=%regexp_internal_match(GetTimezoneNameCheckRE(),cf); if((aL===null))throw %make_range_error(155,cf); var aM=toTitleCaseTimezoneLocation(aL[1])+'/'+ toTitleCaseTimezoneLocation(aL[2]); if(!(aL[3]===(void 0))&&30?H[0]:GetDefaultICULocaleJS(); } var ag=%StringIndexOf(bl,'-',0); if(ag!==-1){ bl=%_Call(y,bl,0,ag); } return %StringLocaleConvertCase(cq,cr,bl); } t(m.prototype,'localeCompare',function(cs){ if((this==null)){ throw %make_type_error(57); } var H=arguments[1]; var I=arguments[2]; var bu=cachedOrNewService('collator',H,I); return compare(bu,this,cs); } ); function ToLowerCaseI18N(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.toLowerCase"); return %StringToLowerCaseI18N((%_ToString(this))); } function ToUpperCaseI18N(){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.toUpperCase"); return %StringToUpperCaseI18N((%_ToString(this))); } function ToLocaleLowerCaseI18N(H){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.toLocaleLowerCase"); return LocaleConvertCase((%_ToString(this)),H,false); } %FunctionSetLength(ToLocaleLowerCaseI18N,0); function ToLocaleUpperCaseI18N(H){ if((%IS_VAR(this)===null)||(this===(void 0)))throw %make_type_error(17,"String.prototype.toLocaleUpperCase"); return LocaleConvertCase((%_ToString(this)),H,true); } %FunctionSetLength(ToLocaleUpperCaseI18N,0); t(k.prototype,'toLocaleString',function(){ if(!(this instanceof k)&&typeof(this)!=='number'){ throw %make_type_error(58,"Number"); } var H=arguments[0]; var I=arguments[1]; var bM=cachedOrNewService('numberformat',H,I); return formatNumber(bM,this); } ); function toLocaleDateTime(ct,H,I,bU,bV,Z){ if(!(ct instanceof e)){ throw %make_type_error(58,"Date"); } var cd=(%_ToNumber(ct)); if((%IS_VAR(cd)!==cd))return'Invalid Date'; var bo=toDateTimeOptions(I,bU,bV); var bZ= cachedOrNewService(Z,H,I,bo); return formatDate(bZ,ct); } t(e.prototype,'toLocaleString',function(){ var H=arguments[0]; var I=arguments[1]; return toLocaleDateTime( this,H,I,'any','all','dateformatall'); } ); t(e.prototype,'toLocaleDateString',function(){ var H=arguments[0]; var I=arguments[1]; return toLocaleDateTime( this,H,I,'date','date','dateformatdate'); } ); t(e.prototype,'toLocaleTimeString',function(){ var H=arguments[0]; var I=arguments[1]; return toLocaleDateTime( this,H,I,'time','time','dateformattime'); } ); %FunctionRemovePrototype(FormatDateToParts); %FunctionRemovePrototype(ToLowerCaseI18N); %FunctionRemovePrototype(ToUpperCaseI18N); %FunctionRemovePrototype(ToLocaleLowerCaseI18N); %FunctionRemovePrototype(ToLocaleUpperCaseI18N); b.SetFunctionName(FormatDateToParts,"formatToParts"); b.SetFunctionName(ToLowerCaseI18N,"toLowerCase"); b.SetFunctionName(ToUpperCaseI18N,"toUpperCase"); b.SetFunctionName(ToLocaleLowerCaseI18N,"toLocaleLowerCase"); b.SetFunctionName(ToLocaleUpperCaseI18N,"toLocaleUpperCase"); b.Export(function(cu){ cu.FormatDateToParts=FormatDateToParts; cu.ToLowerCaseI18N=ToLowerCaseI18N; cu.ToUpperCaseI18N=ToUpperCaseI18N; cu.ToLocaleLowerCaseI18N=ToLocaleLowerCaseI18N; cu.ToLocaleUpperCaseI18N=ToLocaleUpperCaseI18N; }); }) 4CommonStringsI (function(global, binding, v8) { 'use strict'; binding.streamErrors = { illegalInvocation: 'Illegal invocation', illegalConstructor: 'Illegal constructor', invalidType: 'Invalid type is specified', invalidSize: 'The return value of a queuing strategy\'s size function must be a finite, non-NaN, non-negative number', sizeNotAFunction: 'A queuing strategy\'s size property must be a function', invalidHWM: 'A queueing strategy\'s highWaterMark property must be a nonnegative, non-NaN number', }; }); ,SimpleQueue (function(global, binding, v8) { 'use strict'; const QUEUE_MAX_ARRAY_SIZE = 16384; class SimpleQueue { constructor() { this.front = { elements: new v8.InternalPackedArray(), next: undefined, }; this.back = this.front; this.cursor = 0; this.size = 0; } get length() { return this.size; } push(element) { ++this.size; if (this.back.elements.length === QUEUE_MAX_ARRAY_SIZE) { const oldBack = this.back; this.back = { elements: new v8.InternalPackedArray(), next: undefined, }; oldBack.next = this.back; } this.back.elements.push(element); } shift() { --this.size; if (this.front.elements.length === this.cursor) { this.front = this.front.next; this.cursor = 0; } const element = this.front.elements[this.cursor]; this.front.elements[this.cursor] = undefined; ++this.cursor; return element; } forEach(callback) { let i = this.cursor; let node = this.front; let elements = node.elements; while (i !== elements.length || node.next !== undefined) { if (i === elements.length) { node = node.next; elements = node.elements; i = 0; } callback(elements[i]); ++i; } } peek() { if (this.front.elements.length === this.cursor) { return this.front.next.elements[0]; } return this.front.elements[this.cursor]; } } binding.SimpleQueue = SimpleQueue; }); dByteLengthQueuingStrategy (function(global, binding, v8) { 'use strict'; const defineProperty = global.Object.defineProperty; class ByteLengthQueuingStrategy { constructor(options) { defineProperty(this, 'highWaterMark', { value: options.highWaterMark, enumerable: true, configurable: true, writable: true }); } size(chunk) { return chunk.byteLength; } } defineProperty(global, 'ByteLengthQueuingStrategy', { value: ByteLengthQueuingStrategy, enumerable: false, configurable: true, writable: true }); }); PCountQueuingStrategy (function(global, binding, v8) { 'use strict'; const defineProperty = global.Object.defineProperty; class CountQueuingStrategy { constructor(options) { defineProperty(this, 'highWaterMark', { value: options.highWaterMark, enumerable: true, configurable: true, writable: true }); } size(chunk) { return 1; } } defineProperty(global, 'CountQueuingStrategy', { value: CountQueuingStrategy, enumerable: false, configurable: true, writable: true }); class BuiltInCountQueuingStrategy { constructor(highWaterMark) { defineProperty(this, 'highWaterMark', {value: highWaterMark}); } size(chunk) { return 1; } } binding.createBuiltInCountQueuingStrategy = highWaterMark => new BuiltInCountQueuingStrategy(highWaterMark); }); 8ReadableStream (function(global, binding, v8) { 'use strict'; const _reader = v8.createPrivateSymbol('[[reader]]'); const _storedError = v8.createPrivateSymbol('[[storedError]]'); const _controller = v8.createPrivateSymbol('[[controller]]'); const _closedPromise = v8.createPrivateSymbol('[[closedPromise]]'); const _ownerReadableStream = v8.createPrivateSymbol('[[ownerReadableStream]]'); const _readRequests = v8.createPrivateSymbol('[[readRequests]]'); const createWithExternalControllerSentinel = v8.createPrivateSymbol('flag for UA-created ReadableStream to pass'); const _readableStreamBits = v8.createPrivateSymbol('bit field for [[state]] and [[disturbed]]'); const DISTURBED = 0b1; const STATE_MASK = 0b110; const STATE_BITS_OFFSET = 1; const STATE_READABLE = 0; const STATE_CLOSED = 1; const STATE_ERRORED = 2; const _underlyingSource = v8.createPrivateSymbol('[[underlyingSource]]'); const _controlledReadableStream = v8.createPrivateSymbol('[[controlledReadableStream]]'); const _queue = v8.createPrivateSymbol('[[queue]]'); const _totalQueuedSize = v8.createPrivateSymbol('[[totalQueuedSize]]'); const _strategySize = v8.createPrivateSymbol('[[strategySize]]'); const _strategyHWM = v8.createPrivateSymbol('[[strategyHWM]]'); const _readableStreamDefaultControllerBits = v8.createPrivateSymbol( 'bit field for [[started]], [[closeRequested]], [[pulling]], [[pullAgain]]'); const STARTED = 0b1; const CLOSE_REQUESTED = 0b10; const PULLING = 0b100; const PULL_AGAIN = 0b1000; const EXTERNALLY_CONTROLLED = 0b10000; const undefined = global.undefined; const Infinity = global.Infinity; const defineProperty = global.Object.defineProperty; const hasOwnProperty = v8.uncurryThis(global.Object.hasOwnProperty); const callFunction = v8.uncurryThis(global.Function.prototype.call); const applyFunction = v8.uncurryThis(global.Function.prototype.apply); const TypeError = global.TypeError; const RangeError = global.RangeError; const Number = global.Number; const Number_isNaN = Number.isNaN; const Number_isFinite = Number.isFinite; const Promise = global.Promise; const thenPromise = v8.uncurryThis(Promise.prototype.then); const Promise_resolve = v8.simpleBind(Promise.resolve, Promise); const Promise_reject = v8.simpleBind(Promise.reject, Promise); const streamErrors = binding.streamErrors; const errCancelLockedStream = 'Cannot cancel a readable stream that is locked to a reader'; const errEnqueueCloseRequestedStream = 'Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed'; const errCancelReleasedReader = 'This readable stream reader has been released and cannot be used to cancel its previous owner stream'; const errReadReleasedReader = 'This readable stream reader has been released and cannot be used to read from its previous owner stream'; const errCloseCloseRequestedStream = 'Cannot close a readable stream that has already been requested to be closed'; const errEnqueueClosedStream = 'Cannot enqueue a chunk into a closed readable stream'; const errEnqueueErroredStream = 'Cannot enqueue a chunk into an errored readable stream'; const errCloseClosedStream = 'Cannot close a closed readable stream'; const errCloseErroredStream = 'Cannot close an errored readable stream'; const errErrorClosedStream = 'Cannot error a close readable stream'; const errErrorErroredStream = 'Cannot error a readable stream that is already errored'; const errGetReaderNotByteStream = 'This readable stream does not support BYOB readers'; const errGetReaderBadMode = 'Invalid reader mode given: expected undefined or "byob"'; const errReaderConstructorBadArgument = 'ReadableStreamReader constructor argument is not a readable stream'; const errReaderConstructorStreamAlreadyLocked = 'ReadableStreamReader constructor can only accept readable streams that are not yet locked to a reader'; const errReleaseReaderWithPendingRead = 'Cannot release a readable stream reader when it still has outstanding read() calls that have not yet settled'; const errReleasedReaderClosedPromise = 'This readable stream reader has been released and cannot be used to monitor the stream\'s state'; const errTmplMustBeFunctionOrUndefined = name => `${name} must be a function or undefined`; const errCannotPipeLockedStream = 'Cannot pipe a locked stream'; const errCannotPipeToALockedStream = 'Cannot pipe to a locked stream'; const errDestinationStreamClosed = 'Destination stream closed'; class ReadableStream { constructor() { const underlyingSource = arguments[0] === undefined ? {} : arguments[0]; const strategy = arguments[1] === undefined ? {} : arguments[1]; const size = strategy.size; let highWaterMark = strategy.highWaterMark; if (highWaterMark === undefined) { highWaterMark = 1; } this[_readableStreamBits] = 0b0; ReadableStreamSetState(this, STATE_READABLE); this[_reader] = undefined; this[_storedError] = undefined; this[_controller] = undefined; const type = underlyingSource.type; const typeString = String(type); if (typeString === 'bytes') { throw new RangeError('bytes type is not yet implemented'); } else if (type !== undefined) { throw new RangeError(streamErrors.invalidType); } this[_controller] = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark, arguments[2] === createWithExternalControllerSentinel); } get locked() { if (IsReadableStream(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } return IsReadableStreamLocked(this); } cancel(reason) { if (IsReadableStream(this) === false) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (IsReadableStreamLocked(this) === true) { return Promise_reject(new TypeError(errCancelLockedStream)); } return ReadableStreamCancel(this, reason); } getReader({ mode } = {}) { if (IsReadableStream(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } if (mode === 'byob') { throw new TypeError(errGetReaderNotByteStream); } if (mode === undefined) { return AcquireReadableStreamDefaultReader(this); } throw new RangeError(errGetReaderBadMode); } pipeThrough({writable, readable}, options) { const promise = this.pipeTo(writable, options); if (v8.isPromise(promise)) { v8.markPromiseAsHandled(promise); } return readable; } pipeTo(dest, {preventClose, preventAbort, preventCancel} = {}) { if (!IsReadableStream(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (!binding.IsWritableStream(dest)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } preventClose = Boolean(preventClose); preventAbort = Boolean(preventAbort); preventCancel = Boolean(preventCancel); if (IsReadableStreamLocked(this)) { return Promise_reject(new TypeError(errCannotPipeLockedStream)); } if (binding.IsWritableStreamLocked(dest)) { return Promise_reject(new TypeError(errCannotPipeToALockedStream)); } return ReadableStreamPipeTo(this, dest, preventClose, preventAbort, preventCancel); } tee() { if (IsReadableStream(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } return ReadableStreamTee(this); } } function ReadableStreamPipeTo(readable, dest, preventClose, preventAbort, preventCancel) { const reader = AcquireReadableStreamDefaultReader(readable); const writer = binding.AcquireWritableStreamDefaultWriter(dest); let shuttingDown = false; const promise = v8.createPromise(); let reading = false; if (checkInitialState()) { thenPromise(reader[_closedPromise], onReaderClosed, readableError); thenPromise( binding.getWritableStreamDefaultWriterClosedPromise(writer), undefined, writableError); pump(); } function checkInitialState() { const state = ReadableStreamGetState(readable); if (state === STATE_ERRORED) { readableError(readable[_storedError]); return false; } if (binding.isWritableStreamErrored(dest)) { writableError(binding.getWritableStreamStoredError(dest)); return false; } if (state === STATE_CLOSED) { readableClosed(); return false; } if (binding.isWritableStreamClosingOrClosed(dest)) { writableStartedClosed(); return false; } return true; } function pump() { if (shuttingDown) { return; } const desiredSize = binding.WritableStreamDefaultWriterGetDesiredSize(writer); if (desiredSize === null) { return; } if (desiredSize <= 0) { thenPromise( binding.getWritableStreamDefaultWriterReadyPromise(writer), pump, writableError); return; } reading = true; thenPromise( ReadableStreamDefaultReaderRead(reader), readFulfilled, readRejected); } function readFulfilled({value, done}) { reading = false; if (shuttingDown) { return; } if (done) { readableClosed(); return; } const write = binding.WritableStreamDefaultWriterWrite(writer, value); thenPromise(write, undefined, writableError); pump(); } function readRejected() { reading = false; readableError(readable[_storedError]); } function onReaderClosed() { if (!reading) { readableClosed(); } } function readableError(error) { if (!preventAbort) { shutdownWithAction( binding.WritableStreamAbort, [dest, error], error, true); } else { shutdown(error, true); } } function writableError(error) { if (!preventCancel) { shutdownWithAction( ReadableStreamCancel, [readable, error], error, true); } else { shutdown(error, true); } } function readableClosed() { if (!preventClose) { shutdownWithAction( binding.WritableStreamDefaultWriterCloseWithErrorPropagation, [writer]); } else { shutdown(); } } function writableStartedClosed() { const destClosed = new TypeError(errDestinationStreamClosed); if (!preventCancel) { shutdownWithAction( ReadableStreamCancel, [readable, destClosed], destClosed, true); } else { shutdown(destClosed, true); } } function shutdownWithAction( action, args, originalError = undefined, errorGiven = false) { if (shuttingDown) { return; } shuttingDown = true; const p = applyFunction(action, undefined, args); thenPromise( p, () => finalize(originalError, errorGiven), newError => finalize(newError, true)); } function shutdown(error = undefined, errorGiven = false) { if (shuttingDown) { return; } shuttingDown = true; finalize(error, errorGiven); } function finalize(error, errorGiven) { binding.WritableStreamDefaultWriterRelease(writer); ReadableStreamReaderGenericRelease(reader); if (errorGiven) { v8.rejectPromise(promise, error); } else { v8.resolvePromise(promise, undefined); } } return promise; } class ReadableStreamDefaultController { constructor(stream, underlyingSource, size, highWaterMark, isExternallyControlled) { if (IsReadableStream(stream) === false) { throw new TypeError(streamErrors.illegalConstructor); } if (stream[_controller] !== undefined) { throw new TypeError(streamErrors.illegalConstructor); } this[_controlledReadableStream] = stream; this[_underlyingSource] = underlyingSource; this[_queue] = new binding.SimpleQueue(); this[_totalQueuedSize] = 0; this[_readableStreamDefaultControllerBits] = 0b0; if (isExternallyControlled === true) { this[_readableStreamDefaultControllerBits] |= EXTERNALLY_CONTROLLED; } const normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this[_strategySize] = normalizedStrategy.size; this[_strategyHWM] = normalizedStrategy.highWaterMark; const controller = this; const startResult = CallOrNoop( underlyingSource, 'start', this, 'underlyingSource.start'); thenPromise(Promise_resolve(startResult), () => { controller[_readableStreamDefaultControllerBits] |= STARTED; ReadableStreamDefaultControllerCallPullIfNeeded(controller); }, r => { if (ReadableStreamGetState(stream) === STATE_READABLE) { ReadableStreamDefaultControllerError(controller, r); } }); } get desiredSize() { if (IsReadableStreamDefaultController(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } return ReadableStreamDefaultControllerGetDesiredSize(this); } close() { if (IsReadableStreamDefaultController(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } const stream = this[_controlledReadableStream]; if (this[_readableStreamDefaultControllerBits] & CLOSE_REQUESTED) { throw new TypeError(errCloseCloseRequestedStream); } const state = ReadableStreamGetState(stream); if (state === STATE_ERRORED) { throw new TypeError(errCloseErroredStream); } if (state === STATE_CLOSED) { throw new TypeError(errCloseClosedStream); } return ReadableStreamDefaultControllerClose(this); } enqueue(chunk) { if (IsReadableStreamDefaultController(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } const stream = this[_controlledReadableStream]; if (this[_readableStreamDefaultControllerBits] & CLOSE_REQUESTED) { throw new TypeError(errEnqueueCloseRequestedStream); } const state = ReadableStreamGetState(stream); if (state === STATE_ERRORED) { throw new TypeError(errEnqueueErroredStream); } if (state === STATE_CLOSED) { throw new TypeError(errEnqueueClosedStream); } return ReadableStreamDefaultControllerEnqueue(this, chunk); } error(e) { if (IsReadableStreamDefaultController(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } const stream = this[_controlledReadableStream]; const state = ReadableStreamGetState(stream); if (state === STATE_ERRORED) { throw new TypeError(errErrorErroredStream); } if (state === STATE_CLOSED) { throw new TypeError(errErrorClosedStream); } return ReadableStreamDefaultControllerError(this, e); } } function ReadableStreamDefaultControllerCancel(controller, reason) { controller[_queue] = new binding.SimpleQueue(); const underlyingSource = controller[_underlyingSource]; return PromiseCallOrNoop(underlyingSource, 'cancel', reason, 'underlyingSource.cancel'); } function ReadableStreamDefaultControllerPull(controller) { const stream = controller[_controlledReadableStream]; if (controller[_queue].length > 0) { const chunk = DequeueValue(controller); if ((controller[_readableStreamDefaultControllerBits] & CLOSE_REQUESTED) && controller[_queue].length === 0) { ReadableStreamClose(stream); } else { ReadableStreamDefaultControllerCallPullIfNeeded(controller); } return Promise_resolve(CreateIterResultObject(chunk, false)); } const pendingPromise = ReadableStreamAddReadRequest(stream); ReadableStreamDefaultControllerCallPullIfNeeded(controller); return pendingPromise; } function ReadableStreamAddReadRequest(stream) { const promise = v8.createPromise(); stream[_reader][_readRequests].push(promise); return promise; } class ReadableStreamDefaultReader { constructor(stream) { if (IsReadableStream(stream) === false) { throw new TypeError(errReaderConstructorBadArgument); } if (IsReadableStreamLocked(stream) === true) { throw new TypeError(errReaderConstructorStreamAlreadyLocked); } ReadableStreamReaderGenericInitialize(this, stream); this[_readRequests] = new binding.SimpleQueue(); } get closed() { if (IsReadableStreamDefaultReader(this) === false) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } return this[_closedPromise]; } cancel(reason) { if (IsReadableStreamDefaultReader(this) === false) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } const stream = this[_ownerReadableStream]; if (stream === undefined) { return Promise_reject(new TypeError(errCancelReleasedReader)); } return ReadableStreamReaderGenericCancel(this, reason); } read() { if (IsReadableStreamDefaultReader(this) === false) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (this[_ownerReadableStream] === undefined) { return Promise_reject(new TypeError(errReadReleasedReader)); } return ReadableStreamDefaultReaderRead(this); } releaseLock() { if (IsReadableStreamDefaultReader(this) === false) { throw new TypeError(streamErrors.illegalInvocation); } const stream = this[_ownerReadableStream]; if (stream === undefined) { return undefined; } if (this[_readRequests].length > 0) { throw new TypeError(errReleaseReaderWithPendingRead); } ReadableStreamReaderGenericRelease(this); } } function ReadableStreamReaderGenericCancel(reader, reason) { return ReadableStreamCancel(reader[_ownerReadableStream], reason); } function AcquireReadableStreamDefaultReader(stream) { return new ReadableStreamDefaultReader(stream); } function ReadableStreamCancel(stream, reason) { stream[_readableStreamBits] |= DISTURBED; const state = ReadableStreamGetState(stream); if (state === STATE_CLOSED) { return Promise_resolve(undefined); } if (state === STATE_ERRORED) { return Promise_reject(stream[_storedError]); } ReadableStreamClose(stream); const sourceCancelPromise = ReadableStreamDefaultControllerCancel(stream[_controller], reason); return thenPromise(sourceCancelPromise, () => undefined); } function ReadableStreamDefaultControllerClose(controller) { const stream = controller[_controlledReadableStream]; controller[_readableStreamDefaultControllerBits] |= CLOSE_REQUESTED; if (controller[_queue].length === 0) { ReadableStreamClose(stream); } } function ReadableStreamFulfillReadRequest(stream, chunk, done) { const reader = stream[_reader]; const readRequest = stream[_reader][_readRequests].shift(); v8.resolvePromise(readRequest, CreateIterResultObject(chunk, done)); } function ReadableStreamDefaultControllerEnqueue(controller, chunk) { const stream = controller[_controlledReadableStream]; if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { ReadableStreamFulfillReadRequest(stream, chunk, false); } else { let chunkSize = 1; const strategySize = controller[_strategySize]; if (strategySize !== undefined) { try { chunkSize = strategySize(chunk); } catch (chunkSizeE) { if (ReadableStreamGetState(stream) === STATE_READABLE) { ReadableStreamDefaultControllerError(controller, chunkSizeE); } throw chunkSizeE; } } try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { if (ReadableStreamGetState(stream) === STATE_READABLE) { ReadableStreamDefaultControllerError(controller, enqueueE); } throw enqueueE; } } ReadableStreamDefaultControllerCallPullIfNeeded(controller); } function ReadableStreamGetState(stream) { return (stream[_readableStreamBits] & STATE_MASK) >> STATE_BITS_OFFSET; } function ReadableStreamSetState(stream, state) { stream[_readableStreamBits] = (stream[_readableStreamBits] & ~STATE_MASK) | (state << STATE_BITS_OFFSET); } function ReadableStreamDefaultControllerError(controller, e) { controller[_queue] = new binding.SimpleQueue(); const stream = controller[_controlledReadableStream]; ReadableStreamError(stream, e); } function ReadableStreamError(stream, e) { stream[_storedError] = e; ReadableStreamSetState(stream, STATE_ERRORED); const reader = stream[_reader]; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { reader[_readRequests].forEach(request => v8.rejectPromise(request, e)); reader[_readRequests] = new binding.SimpleQueue(); } v8.rejectPromise(reader[_closedPromise], e); v8.markPromiseAsHandled(reader[_closedPromise]); } function ReadableStreamClose(stream) { ReadableStreamSetState(stream, STATE_CLOSED); const reader = stream[_reader]; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { reader[_readRequests].forEach(request => v8.resolvePromise(request, CreateIterResultObject(undefined, true))); reader[_readRequests] = new binding.SimpleQueue(); } v8.resolvePromise(reader[_closedPromise], undefined); } function ReadableStreamDefaultControllerGetDesiredSize(controller) { const queueSize = GetTotalQueueSize(controller); return controller[_strategyHWM] - queueSize; } function IsReadableStream(x) { return hasOwnProperty(x, _controller); } function IsReadableStreamDisturbed(stream) { return stream[_readableStreamBits] & DISTURBED; } function IsReadableStreamLocked(stream) { return stream[_reader] !== undefined; } function IsReadableStreamDefaultController(x) { return hasOwnProperty(x, _controlledReadableStream); } function IsReadableStreamDefaultReader(x) { return hasOwnProperty(x, _readRequests); } function IsReadableStreamReadable(stream) { return ReadableStreamGetState(stream) === STATE_READABLE; } function IsReadableStreamClosed(stream) { return ReadableStreamGetState(stream) === STATE_CLOSED; } function IsReadableStreamErrored(stream) { return ReadableStreamGetState(stream) === STATE_ERRORED; } function ReadableStreamReaderGenericInitialize(reader, stream) { const controller = stream[_controller]; if (controller[_readableStreamDefaultControllerBits] & EXTERNALLY_CONTROLLED) { const underlyingSource = controller[_underlyingSource]; callFunction(underlyingSource.notifyLockAcquired, underlyingSource); } reader[_ownerReadableStream] = stream; stream[_reader] = reader; switch (ReadableStreamGetState(stream)) { case STATE_READABLE: reader[_closedPromise] = v8.createPromise(); break; case STATE_CLOSED: reader[_closedPromise] = Promise_resolve(undefined); break; case STATE_ERRORED: reader[_closedPromise] = Promise_reject(stream[_storedError]); v8.markPromiseAsHandled(reader[_closedPromise]); break; } } function ReadableStreamReaderGenericRelease(reader) { const controller = reader[_ownerReadableStream][_controller]; if (controller[_readableStreamDefaultControllerBits] & EXTERNALLY_CONTROLLED) { const underlyingSource = controller[_underlyingSource]; callFunction(underlyingSource.notifyLockReleased, underlyingSource); } if (ReadableStreamGetState(reader[_ownerReadableStream]) === STATE_READABLE) { v8.rejectPromise(reader[_closedPromise], new TypeError(errReleasedReaderClosedPromise)); } else { reader[_closedPromise] = Promise_reject(new TypeError(errReleasedReaderClosedPromise)); } v8.markPromiseAsHandled(reader[_closedPromise]); reader[_ownerReadableStream][_reader] = undefined; reader[_ownerReadableStream] = undefined; } function ReadableStreamDefaultReaderRead(reader) { const stream = reader[_ownerReadableStream]; stream[_readableStreamBits] |= DISTURBED; if (ReadableStreamGetState(stream) === STATE_CLOSED) { return Promise_resolve(CreateIterResultObject(undefined, true)); } if (ReadableStreamGetState(stream) === STATE_ERRORED) { return Promise_reject(stream[_storedError]); } return ReadableStreamDefaultControllerPull(stream[_controller]); } function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); if (shouldPull === false) { return undefined; } if (controller[_readableStreamDefaultControllerBits] & PULLING) { controller[_readableStreamDefaultControllerBits] |= PULL_AGAIN; return undefined; } controller[_readableStreamDefaultControllerBits] |= PULLING; const underlyingSource = controller[_underlyingSource]; const pullPromise = PromiseCallOrNoop( underlyingSource, 'pull', controller, 'underlyingSource.pull'); thenPromise(pullPromise, () => { controller[_readableStreamDefaultControllerBits] &= ~PULLING; if (controller[_readableStreamDefaultControllerBits] & PULL_AGAIN) { controller[_readableStreamDefaultControllerBits] &= ~PULL_AGAIN; ReadableStreamDefaultControllerCallPullIfNeeded(controller); } }, e => { if (ReadableStreamGetState(controller[_controlledReadableStream]) === STATE_READABLE) { ReadableStreamDefaultControllerError(controller, e); } }); } function ReadableStreamDefaultControllerShouldCallPull(controller) { const stream = controller[_controlledReadableStream]; const state = ReadableStreamGetState(stream); if (state === STATE_CLOSED || state === STATE_ERRORED) { return false; } if (controller[_readableStreamDefaultControllerBits] & CLOSE_REQUESTED) { return false; } if (!(controller[_readableStreamDefaultControllerBits] & STARTED)) { return false; } if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableStreamGetNumReadRequests(stream) { const reader = stream[_reader]; const readRequests = reader[_readRequests]; return readRequests.length; } function ReadableStreamTee(stream) { const reader = AcquireReadableStreamDefaultReader(stream); let closedOrErrored = false; let canceled1 = false; let canceled2 = false; let reason1; let reason2; let promise = v8.createPromise(); const branch1Stream = new ReadableStream({pull, cancel: cancel1}); const branch2Stream = new ReadableStream({pull, cancel: cancel2}); const branch1 = branch1Stream[_controller]; const branch2 = branch2Stream[_controller]; thenPromise( reader[_closedPromise], undefined, function(r) { if (closedOrErrored === true) { return; } ReadableStreamDefaultControllerError(branch1, r); ReadableStreamDefaultControllerError(branch2, r); closedOrErrored = true; }); return [branch1Stream, branch2Stream]; function pull() { return thenPromise( ReadableStreamDefaultReaderRead(reader), function(result) { const value = result.value; const done = result.done; if (done === true && closedOrErrored === false) { if (canceled1 === false) { ReadableStreamDefaultControllerClose(branch1); } if (canceled2 === false) { ReadableStreamDefaultControllerClose(branch2); } closedOrErrored = true; } if (closedOrErrored === true) { return; } if (canceled1 === false) { ReadableStreamDefaultControllerEnqueue(branch1, value); } if (canceled2 === false) { ReadableStreamDefaultControllerEnqueue(branch2, value); } }); } function cancel1(reason) { canceled1 = true; reason1 = reason; if (canceled2 === true) { const compositeReason = [reason1, reason2]; const cancelResult = ReadableStreamCancel(stream, compositeReason); v8.resolvePromise(promise, cancelResult); } return promise; } function cancel2(reason) { canceled2 = true; reason2 = reason; if (canceled1 === true) { const compositeReason = [reason1, reason2]; const cancelResult = ReadableStreamCancel(stream, compositeReason); v8.resolvePromise(promise, cancelResult); } return promise; } } function DequeueValue(controller) { const result = controller[_queue].shift(); controller[_totalQueuedSize] -= result.size; return result.value; } function EnqueueValueWithSize(controller, value, size) { size = Number(size); if (Number_isNaN(size) || size === +Infinity || size < 0) { throw new RangeError(streamErrors.invalidSize); } controller[_totalQueuedSize] += size; controller[_queue].push({value, size}); } function GetTotalQueueSize(controller) { return controller[_totalQueuedSize]; } function ValidateAndNormalizeQueuingStrategy(size, highWaterMark) { if (size !== undefined && typeof size !== 'function') { throw new TypeError(streamErrors.sizeNotAFunction); } highWaterMark = Number(highWaterMark); if (Number_isNaN(highWaterMark)) { throw new RangeError(streamErrors.errInvalidHWM); } if (highWaterMark < 0) { throw new RangeError(streamErrors.invalidHWM); } return {size, highWaterMark}; } function CallOrNoop(O, P, arg, nameForError) { const method = O[P]; if (method === undefined) { return undefined; } if (typeof method !== 'function') { throw new TypeError(errTmplMustBeFunctionOrUndefined(nameForError)); } return callFunction(method, O, arg); } function PromiseCallOrNoop(O, P, arg, nameForError) { let method; try { method = O[P]; } catch (methodE) { return Promise_reject(methodE); } if (method === undefined) { return Promise_resolve(undefined); } if (typeof method !== 'function') { return Promise_reject(new TypeError(errTmplMustBeFunctionOrUndefined(nameForError))); } try { return Promise_resolve(callFunction(method, O, arg)); } catch (e) { return Promise_reject(e); } } function CreateIterResultObject(value, done) { return {value, done}; } defineProperty(global, 'ReadableStream', { value: ReadableStream, enumerable: false, configurable: true, writable: true }); binding.AcquireReadableStreamDefaultReader = AcquireReadableStreamDefaultReader; binding.IsReadableStream = IsReadableStream; binding.IsReadableStreamDisturbed = IsReadableStreamDisturbed; binding.IsReadableStreamLocked = IsReadableStreamLocked; binding.IsReadableStreamReadable = IsReadableStreamReadable; binding.IsReadableStreamClosed = IsReadableStreamClosed; binding.IsReadableStreamErrored = IsReadableStreamErrored; binding.IsReadableStreamDefaultReader = IsReadableStreamDefaultReader; binding.ReadableStreamDefaultReaderRead = ReadableStreamDefaultReaderRead; binding.ReadableStreamTee = ReadableStreamTee; binding.ReadableStreamDefaultControllerClose = ReadableStreamDefaultControllerClose; binding.ReadableStreamDefaultControllerGetDesiredSize = ReadableStreamDefaultControllerGetDesiredSize; binding.ReadableStreamDefaultControllerEnqueue = ReadableStreamDefaultControllerEnqueue; binding.ReadableStreamDefaultControllerError = ReadableStreamDefaultControllerError; binding.createReadableStreamWithExternalController = (underlyingSource, strategy) => { return new ReadableStream( underlyingSource, strategy, createWithExternalControllerSentinel); }; }); 8WritableStream (function(global, binding, v8) { 'use strict'; const _closeRequest = v8.createPrivateSymbol('[[closeRequest]]'); const _inFlightWriteRequest = v8.createPrivateSymbol('[[inFlightWriteRequest]]'); const _inFlightCloseRequest = v8.createPrivateSymbol('[[inFlightCloseRequest]]'); const _pendingAbortRequest = v8.createPrivateSymbol('[[pendingAbortRequest]]'); const _stateAndFlags = v8.createPrivateSymbol('[[state]] and flags'); const _storedError = v8.createPrivateSymbol('[[storedError]]'); const _writableStreamController = v8.createPrivateSymbol('[[writableStreamController]]'); const _writer = v8.createPrivateSymbol('[[writer]]'); const _writeRequests = v8.createPrivateSymbol('[[writeRequests]]'); const _closedPromise = v8.createPrivateSymbol('[[closedPromise]]'); const _ownerWritableStream = v8.createPrivateSymbol('[[ownerWritableStream]]'); const _readyPromise = v8.createPrivateSymbol('[[readyPromise]]'); const _controlledWritableStream = v8.createPrivateSymbol('[[controlledWritableStream]]'); const _queue = v8.createPrivateSymbol('[[queue]]'); const _queueTotalSize = v8.createPrivateSymbol('[[queueTotalSize]]'); const _started = v8.createPrivateSymbol('[[started]]'); const _strategyHWM = v8.createPrivateSymbol('[[strategyHWM]]'); const _strategySize = v8.createPrivateSymbol('[[strategySize]]'); const _underlyingSink = v8.createPrivateSymbol('[[underlyingSink]]'); const WRITABLE = 0; const CLOSED = 1; const ERRORING = 2; const ERRORED = 3; const STATE_MASK = 0xF; const BACKPRESSURE_FLAG = 0x10; const undefined = global.undefined; const defineProperty = global.Object.defineProperty; const hasOwnProperty = v8.uncurryThis(global.Object.hasOwnProperty); const Function_apply = v8.uncurryThis(global.Function.prototype.apply); const Function_call = v8.uncurryThis(global.Function.prototype.call); const TypeError = global.TypeError; const RangeError = global.RangeError; const Boolean = global.Boolean; const Number = global.Number; const Number_isNaN = Number.isNaN; const Number_isFinite = Number.isFinite; const Promise = global.Promise; const thenPromise = v8.uncurryThis(Promise.prototype.then); const Promise_resolve = v8.simpleBind(Promise.resolve, Promise); const Promise_reject = v8.simpleBind(Promise.reject, Promise); const streamErrors = binding.streamErrors; const errAbortLockedStream = 'Cannot abort a writable stream that is locked to a writer'; const errStreamAborted = 'The stream has been aborted'; const errStreamAborting = 'The stream is in the process of being aborted'; const errWriterLockReleasedPrefix = 'This writable stream writer has been released and cannot be '; const errCloseCloseRequestedStream = 'Cannot close a writable stream that has already been requested to be closed'; const errWriteCloseRequestedStream = 'Cannot write to a writable stream that is due to be closed'; const templateErrorCannotActionOnStateStream = (action, state) => `Cannot ${action} a ${state} writable stream`; const errReleasedWriterClosedPromise = 'This writable stream writer has been released and cannot be used to monitor the stream\'s state'; const templateErrorIsNotAFunction = f => `${f} is not a function`; const verbUsedToGetTheDesiredSize = 'used to get the desiredSize'; const verbAborted = 'aborted'; const verbClosed = 'closed'; const verbWrittenTo = 'written to'; function createWriterLockReleasedError(verb) { return new TypeError(errWriterLockReleasedPrefix + verb); } const stateNames = {[CLOSED]: 'closed', [ERRORED]: 'errored'}; function createCannotActionOnStateStreamError(action, state) { return new TypeError( templateErrorCannotActionOnStateStream(action, stateNames[state])); } function rejectPromises(queue, e) { queue.forEach(promise => v8.rejectPromise(promise, e)); } class WritableStream { constructor(underlyingSink = {}, { size, highWaterMark = 1 } = {}) { this[_stateAndFlags] = WRITABLE; this[_storedError] = undefined; this[_writer] = undefined; this[_writableStreamController] = undefined; this[_inFlightWriteRequest] = undefined; this[_closeRequest] = undefined; this[_inFlightCloseRequest] = undefined; this[_pendingAbortRequest] = undefined; this[_writeRequests] = new binding.SimpleQueue(); const type = underlyingSink.type; if (type !== undefined) { throw new RangeError(streamErrors.invalidType); } this[_writableStreamController] = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); WritableStreamDefaultControllerStartSteps(this[_writableStreamController]); } get locked() { if (!IsWritableStream(this)) { throw new TypeError(streamErrors.illegalInvocation); } return IsWritableStreamLocked(this); } abort(reason) { if (!IsWritableStream(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (IsWritableStreamLocked(this)) { return Promise_reject(new TypeError(errAbortLockedStream)); } return WritableStreamAbort(this, reason); } getWriter() { if (!IsWritableStream(this)) { throw new TypeError(streamErrors.illegalInvocation); } return AcquireWritableStreamDefaultWriter(this); } } function AcquireWritableStreamDefaultWriter(stream) { return new WritableStreamDefaultWriter(stream); } function IsWritableStream(x) { return hasOwnProperty(x, _writableStreamController); } function IsWritableStreamLocked(stream) { return stream[_writer] !== undefined; } function WritableStreamAbort(stream, reason) { const state = stream[_stateAndFlags] & STATE_MASK; if (state === CLOSED) { return Promise_resolve(undefined); } if (state === ERRORED) { return Promise_reject(stream[_storedError]); } const error = new TypeError(errStreamAborting); if (stream[_pendingAbortRequest] !== undefined) { return Promise_reject(error); } const wasAlreadyErroring = state === ERRORING; if (wasAlreadyErroring) { reason = undefined; } const promise = v8.createPromise(); stream[_pendingAbortRequest] = {promise, reason, wasAlreadyErroring}; if (!wasAlreadyErroring) { WritableStreamStartErroring(stream, error); } return promise; } function WritableStreamAddWriteRequest(stream) { const promise = v8.createPromise(); stream[_writeRequests].push(promise); return promise; } function WritableStreamDealWithRejection(stream, error) { const state = stream[_stateAndFlags] & STATE_MASK; if (state === WRITABLE) { WritableStreamStartErroring(stream, error); return; } WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { const controller = stream[_writableStreamController]; stream[_stateAndFlags] = (stream[_stateAndFlags] & ~STATE_MASK) | ERRORING; stream[_storedError] = reason; const writer = stream[_writer]; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (!WritableStreamHasOperationMarkedInFlight(stream) && controller[_started]) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { stream[_stateAndFlags] = (stream[_stateAndFlags] & ~STATE_MASK) | ERRORED; WritableStreamDefaultControllerErrorSteps( stream[_writableStreamController]); const storedError = stream[_storedError]; rejectPromises(stream[_writeRequests], storedError); stream[_writeRequests] = new binding.SimpleQueue(); if (stream[_pendingAbortRequest] === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } const abortRequest = stream[_pendingAbortRequest]; stream[_pendingAbortRequest] = undefined; if (abortRequest.wasAlreadyErroring === true) { v8.rejectPromise(abortRequest.promise, storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } const promise = WritableStreamDefaultControllerAbortSteps( stream[_writableStreamController], abortRequest.reason); thenPromise( promise, () => { v8.resolvePromise(abortRequest.promise, undefined); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, reason => { v8.rejectPromise(abortRequest.promise, reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { v8.resolvePromise(stream[_inFlightWriteRequest], undefined); stream[_inFlightWriteRequest] = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { v8.rejectPromise(stream[_inFlightWriteRequest], error); stream[_inFlightWriteRequest] = undefined; let state = stream[_stateAndFlags] & STATE_MASK; WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { v8.resolvePromise(stream[_inFlightCloseRequest], undefined); stream[_inFlightCloseRequest] = undefined; const state = stream[_stateAndFlags] & STATE_MASK; if (state === ERRORING) { stream[_storedError] = undefined; if (stream[_pendingAbortRequest] !== undefined) { v8.resolvePromise(stream[_pendingAbortRequest].promise, undefined); stream[_pendingAbortRequest] = undefined; } } stream[_stateAndFlags] = (stream[_stateAndFlags] & ~STATE_MASK) | CLOSED; const writer = stream[_writer]; if (writer !== undefined) { v8.resolvePromise(writer[_closedPromise], undefined); } } function WritableStreamFinishInFlightCloseWithError(stream, error) { v8.rejectPromise(stream[_inFlightCloseRequest], error); stream[_inFlightCloseRequest] = undefined; const state = stream[_stateAndFlags] & STATE_MASK; if (stream[_pendingAbortRequest] !== undefined) { v8.rejectPromise(stream[_pendingAbortRequest].promise, error); stream[_pendingAbortRequest] = undefined; } WritableStreamDealWithRejection(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { return stream[_closeRequest] !== undefined || stream[_inFlightCloseRequest] !== undefined; } function WritableStreamHasOperationMarkedInFlight(stream) { return stream[_inFlightWriteRequest] !== undefined || stream[_inFlightCloseRequest] !== undefined; } function WritableStreamMarkCloseRequestInFlight(stream) { stream[_inFlightCloseRequest] = stream[_closeRequest]; stream[_closeRequest] = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { const writeRequest = stream[_writeRequests].shift(); stream[_inFlightWriteRequest] = writeRequest; } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { if (stream[_closeRequest] !== undefined) { v8.rejectPromise(stream[_closeRequest], stream[_storedError]); stream[_closeRequest] = undefined; } const writer = stream[_writer]; if (writer !== undefined) { v8.rejectPromise(writer[_closedPromise], stream[_storedError]); v8.markPromiseAsHandled(writer[_closedPromise]); } } function WritableStreamUpdateBackpressure(stream, backpressure) { const writer = stream[_writer]; if (writer !== undefined && backpressure !== Boolean(stream[_stateAndFlags] & BACKPRESSURE_FLAG)) { if (backpressure) { writer[_readyPromise] = v8.createPromise(); } else { v8.resolvePromise(writer[_readyPromise], undefined); } } if (backpressure) { stream[_stateAndFlags] |= BACKPRESSURE_FLAG; } else { stream[_stateAndFlags] &= ~BACKPRESSURE_FLAG; } } function isWritableStreamErrored(stream) { return (stream[_stateAndFlags] & STATE_MASK) === ERRORED; } function isWritableStreamClosingOrClosed(stream) { return WritableStreamCloseQueuedOrInFlight(stream) || (stream[_stateAndFlags] & STATE_MASK) === CLOSED; } function getWritableStreamStoredError(stream) { return stream[_storedError]; } class WritableStreamDefaultWriter { constructor(stream) { if (!IsWritableStream(stream)) { throw new TypeError(streamErrors.illegalConstructor); } if (IsWritableStreamLocked(stream)) { throw new TypeError(streamErrors.illegalConstructor); } this[_ownerWritableStream] = stream; stream[_writer] = this; const state = stream[_stateAndFlags] & STATE_MASK; switch (state) { case WRITABLE: { if (!WritableStreamCloseQueuedOrInFlight(stream) && stream[_stateAndFlags] & BACKPRESSURE_FLAG) { this[_readyPromise] = v8.createPromise(); } else { this[_readyPromise] = Promise_resolve(undefined); } this[_closedPromise] = v8.createPromise(); break; } case ERRORING: { this[_readyPromise] = Promise_reject(stream[_storedError]); v8.markPromiseAsHandled(this[_readyPromise]); this[_closedPromise] = v8.createPromise(); break; } case CLOSED: { this[_readyPromise] = Promise_resolve(undefined); this[_closedPromise] = Promise_resolve(undefined); break; } default: { const storedError = stream[_storedError]; this[_readyPromise] = Promise_reject(storedError); v8.markPromiseAsHandled(this[_readyPromise]); this[_closedPromise] = Promise_reject(storedError); v8.markPromiseAsHandled(this[_closedPromise]); break; } } } get closed() { if (!IsWritableStreamDefaultWriter(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } return this[_closedPromise]; } get desiredSize() { if (!IsWritableStreamDefaultWriter(this)) { throw new TypeError(streamErrors.illegalInvocation); } if (this[_ownerWritableStream] === undefined) { throw createWriterLockReleasedError(verbUsedToGetTheDesiredSize); } return WritableStreamDefaultWriterGetDesiredSize(this); } get ready() { if (!IsWritableStreamDefaultWriter(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } return this[_readyPromise]; } abort(reason) { if (!IsWritableStreamDefaultWriter(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (this[_ownerWritableStream] === undefined) { return Promise_reject(createWriterLockReleasedError(verbAborted)); } return WritableStreamDefaultWriterAbort(this, reason); } close() { if (!IsWritableStreamDefaultWriter(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } const stream = this[_ownerWritableStream]; if (stream === undefined) { return Promise_reject(createWriterLockReleasedError(verbClosed)); } if (WritableStreamCloseQueuedOrInFlight(stream)) { return Promise_reject(new TypeError(errCloseCloseRequestedStream)); } return WritableStreamDefaultWriterClose(this); } releaseLock() { if (!IsWritableStreamDefaultWriter(this)) { throw new TypeError(streamErrors.illegalInvocation); } const stream = this[_ownerWritableStream]; if (stream === undefined) { return; } WritableStreamDefaultWriterRelease(this); } write(chunk) { if (!IsWritableStreamDefaultWriter(this)) { return Promise_reject(new TypeError(streamErrors.illegalInvocation)); } if (this[_ownerWritableStream] === undefined) { return Promise_reject(createWriterLockReleasedError(verbWrittenTo)); } return WritableStreamDefaultWriterWrite(this, chunk); } } function IsWritableStreamDefaultWriter(x) { return hasOwnProperty(x, _ownerWritableStream); } function WritableStreamDefaultWriterAbort(writer, reason) { const stream = writer[_ownerWritableStream]; return WritableStreamAbort(stream, reason); } function WritableStreamDefaultWriterClose(writer) { const stream = writer[_ownerWritableStream]; const state = stream[_stateAndFlags] & STATE_MASK; if (state === CLOSED || state === ERRORED) { return Promise_reject( createCannotActionOnStateStreamError('close', state)); } const promise = v8.createPromise(); stream[_closeRequest] = promise; if ((stream[_stateAndFlags] & BACKPRESSURE_FLAG) && state === WRITABLE) { v8.resolvePromise(writer[_readyPromise], undefined); } WritableStreamDefaultControllerClose(stream[_writableStreamController]); return promise; } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { const stream = writer[_ownerWritableStream]; const state = stream[_stateAndFlags] & STATE_MASK; if (WritableStreamCloseQueuedOrInFlight(stream) || state === CLOSED) { return Promise_resolve(undefined); } if (state === ERRORED) { return Promise_reject(stream[_storedError]); } return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected( writer, error) { if (v8.promiseState(writer[_closedPromise]) === v8.kPROMISE_PENDING) { v8.rejectPromise(writer[_closedPromise], error); } else { writer[_closedPromise] = Promise_reject(error); } v8.markPromiseAsHandled(writer[_closedPromise]); } function WritableStreamDefaultWriterEnsureReadyPromiseRejected( writer, error) { if (v8.promiseState(writer[_readyPromise]) === v8.kPROMISE_PENDING) { v8.rejectPromise(writer[_readyPromise], error); } else { writer[_readyPromise] = Promise_reject(error); } v8.markPromiseAsHandled(writer[_readyPromise]); } function WritableStreamDefaultWriterGetDesiredSize(writer) { const stream = writer[_ownerWritableStream]; const state = stream[_stateAndFlags] & STATE_MASK; if (state === ERRORED || state === ERRORING) { return null; } if (state === CLOSED) { return 0; } return WritableStreamDefaultControllerGetDesiredSize( stream[_writableStreamController]); } function WritableStreamDefaultWriterRelease(writer) { const stream = writer[_ownerWritableStream]; const releasedError = new TypeError(errReleasedWriterClosedPromise); WritableStreamDefaultWriterEnsureReadyPromiseRejected( writer, releasedError); WritableStreamDefaultWriterEnsureClosedPromiseRejected( writer, releasedError); stream[_writer] = undefined; writer[_ownerWritableStream] = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { const stream = writer[_ownerWritableStream]; const controller = stream[_writableStreamController]; const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer[_ownerWritableStream]) { return Promise_reject(createWriterLockReleasedError(verbWrittenTo)); } const state = stream[_stateAndFlags] & STATE_MASK; if (state === ERRORED) { return Promise_reject(stream[_storedError]); } if (WritableStreamCloseQueuedOrInFlight(stream)) { return Promise_reject(new TypeError( templateErrorCannotActionOnStateStream('write to', 'closing'))); } if (state === CLOSED) { return Promise_reject( createCannotActionOnStateStreamError('write to', CLOSED)); } if (state === ERRORING) { return Promise_reject(stream[_storedError]); } const promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); return promise; } function getWritableStreamDefaultWriterClosedPromise(writer) { return writer[_closedPromise]; } function getWritableStreamDefaultWriterReadyPromise(writer) { return writer[_readyPromise]; } class WritableStreamDefaultController { constructor(stream, underlyingSink, size, highWaterMark) { if (!IsWritableStream(stream)) { throw new TypeError(streamErrors.illegalConstructor); } if (stream[_writableStreamController] !== undefined) { throw new TypeError(streamErrors.illegalConstructor); } this[_controlledWritableStream] = stream; this[_underlyingSink] = underlyingSink; this[_queue] = undefined; this[_queueTotalSize] = undefined; ResetQueue(this); this[_started] = false; const normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this[_strategySize] = normalizedStrategy.size; this[_strategyHWM] = normalizedStrategy.highWaterMark; const backpressure = WritableStreamDefaultControllerGetBackpressure(this); WritableStreamUpdateBackpressure(stream, backpressure); } error(e) { if (!IsWritableStreamDefaultController(this)) { throw new TypeError(streamErrors.illegalInvocation); } const state = this[_controlledWritableStream][_stateAndFlags] & STATE_MASK; if (state !== WRITABLE) { return; } WritableStreamDefaultControllerError(this, e); } } function WritableStreamDefaultControllerAbortSteps(controller, reason) { return PromiseInvokeOrNoop(controller[_underlyingSink], 'abort', [reason]); } function WritableStreamDefaultControllerErrorSteps(controller) { ResetQueue(controller); } function WritableStreamDefaultControllerStartSteps(controller) { const startResult = InvokeOrNoop(controller[_underlyingSink], 'start', [controller]); const stream = controller[_controlledWritableStream]; const startPromise = Promise_resolve(startResult); thenPromise( startPromise, () => { const state = stream[_stateAndFlags] & STATE_MASK; controller[_started] = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, r => { const state = stream[_stateAndFlags] & STATE_MASK; controller[_started] = true; WritableStreamDealWithRejection(stream, r); }); } function IsWritableStreamDefaultController(x) { return hasOwnProperty(x, _underlyingSink); } function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, 'close', 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { const strategySize = controller[_strategySize]; if (strategySize === undefined) { return 1; } let value; try { value = Function_call(strategySize, undefined, chunk); } catch (e) { WritableStreamDefaultControllerErrorIfNeeded(controller, e); return 1; } return value; } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller[_strategyHWM] - controller[_queueTotalSize]; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { const writeRecord = {chunk}; try { EnqueueValueWithSize(controller, writeRecord, chunkSize); } catch (e) { WritableStreamDefaultControllerErrorIfNeeded(controller, e); return; } const stream = controller[_controlledWritableStream]; if (!WritableStreamCloseQueuedOrInFlight(stream) && (stream[_stateAndFlags] & STATE_MASK) === WRITABLE) { const backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { const stream = controller[_controlledWritableStream]; if (!controller[_started]) { return; } if (stream[_inFlightWriteRequest] !== undefined) { return; } const state = stream[_stateAndFlags] & STATE_MASK; if (state === CLOSED || state === ERRORED) { return; } if (state === ERRORING) { WritableStreamFinishErroring(stream); return; } if (controller[_queue].length === 0) { return; } const writeRecord = PeekQueueValue(controller); if (writeRecord === 'close') { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { const state = controller[_controlledWritableStream][_stateAndFlags] & STATE_MASK; if (state === WRITABLE) { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { const stream = controller[_controlledWritableStream]; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); const sinkClosePromise = PromiseInvokeOrNoop( controller[_underlyingSink], 'close', []); thenPromise( sinkClosePromise, () => WritableStreamFinishInFlightClose(stream), reason => WritableStreamFinishInFlightCloseWithError(stream, reason) ); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { const stream = controller[_controlledWritableStream]; WritableStreamMarkFirstWriteRequestInFlight(stream); const sinkWritePromise = PromiseInvokeOrNoop(controller[_underlyingSink], 'write', [chunk, controller]); thenPromise( sinkWritePromise, () => { WritableStreamFinishInFlightWrite(stream); const state = stream[_stateAndFlags] & STATE_MASK; DequeueValue(controller); if (!WritableStreamCloseQueuedOrInFlight(stream) && state === WRITABLE) { const backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, reason => { WritableStreamFinishInFlightWriteWithError(stream, reason); }); } function WritableStreamDefaultControllerGetBackpressure(controller) { const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); return desiredSize <= 0; } function WritableStreamDefaultControllerError(controller, error) { const stream = controller[_controlledWritableStream]; WritableStreamStartErroring(stream, error); } function DequeueValue(container) { const pair = container[_queue].shift(); container[_queueTotalSize] -= pair.size; if (container[_queueTotalSize] < 0) { container[_queueTotalSize] = 0; } return pair.value; } function EnqueueValueWithSize(container, value, size) { size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError(streamErrors.invalidSize); } container[_queue].push({value, size}); container[_queueTotalSize] += size; } function PeekQueueValue(container) { const pair = container[_queue].peek(); return pair.value; } function ResetQueue(container) { container[_queue] = new binding.SimpleQueue(); container[_queueTotalSize] = 0; } function InvokeOrNoop(O, P, args) { if (args === undefined) { args = []; } const method = O[P]; if (method === undefined) { return undefined; } if (typeof method !== 'function') { throw new TypeError(templateErrorIsNotAFunction(P)); } return Function_apply(method, O, args); } function IsFiniteNonNegativeNumber(v) { return Number_isFinite(v) && v >= 0; } function PromiseInvokeOrNoop(O, P, args) { try { return Promise_resolve(InvokeOrNoop(O, P, args)); } catch (e) { return Promise_reject(e); } } function ValidateAndNormalizeQueuingStrategy(size, highWaterMark) { if (size !== undefined && typeof size !== 'function') { throw new TypeError(streamErrors.sizeNotAFunction); } highWaterMark = Number(highWaterMark); if (Number_isNaN(highWaterMark)) { throw new RangeError(streamErrors.errInvalidHWM); } if (highWaterMark < 0) { throw new RangeError(streamErrors.invalidHWM); } return {size, highWaterMark}; } defineProperty(global, 'WritableStream', { value: WritableStream, enumerable: false, configurable: true, writable: true }); binding.AcquireWritableStreamDefaultWriter = AcquireWritableStreamDefaultWriter; binding.IsWritableStream = IsWritableStream; binding.isWritableStreamClosingOrClosed = isWritableStreamClosingOrClosed; binding.isWritableStreamErrored = isWritableStreamErrored; binding.IsWritableStreamLocked = IsWritableStreamLocked; binding.WritableStreamAbort = WritableStreamAbort; binding.WritableStreamDefaultWriterCloseWithErrorPropagation = WritableStreamDefaultWriterCloseWithErrorPropagation; binding.getWritableStreamDefaultWriterClosedPromise = getWritableStreamDefaultWriterClosedPromise; binding.WritableStreamDefaultWriterGetDesiredSize = WritableStreamDefaultWriterGetDesiredSize; binding.getWritableStreamDefaultWriterReadyPromise = getWritableStreamDefaultWriterReadyPromise; binding.WritableStreamDefaultWriterRelease = WritableStreamDefaultWriterRelease; binding.WritableStreamDefaultWriterWrite = WritableStreamDefaultWriterWrite; binding.getWritableStreamStoredError = getWritableStreamStoredError; }); dummy<(function() {})