@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.98 kB
JavaScript
import*as Platform from"../../core/platform/platform.js";import*as Handlers from"./handlers/handlers.js";import*as Helpers from"./helpers/helpers.js";import{TraceProcessor,TraceParseProgressEvent}from"./Processor.js";export class Model extends EventTarget{#e=[];#t=new Map;#r=[];#a=0;#s;static createWithAllHandlers(){return new Model(Handlers.ModelHandlers)}static createWithRequiredHandlersForMigration(){return new Model(Handlers.Migration.ENABLED_TRACE_HANDLERS)}constructor(e){super(),this.#s=new TraceProcessor(e)}async parse(e,t){const r=t?.metadata||{},a=t?.isFreshRecording||!1,s=e=>{const{data:t}=e;this.dispatchEvent(new ModelUpdateEvent({type:"PROGRESS_UPDATE",data:t}))};this.#s.addEventListener(TraceParseProgressEvent.eventName,s);const n={traceEvents:e,metadata:r,traceParsedData:null};try{await this.#s.parse(e,a),this.#n(n,this.#s.data),this.#e.push(n)}catch(e){throw e}finally{this.#s.removeEventListener(TraceParseProgressEvent.eventName,s),this.dispatchEvent(new ModelUpdateEvent({type:"COMPLETE",data:"done"}))}}#n(e,t){e.traceParsedData=t,this.#a++;let r=`Trace ${this.#a}`,a=null;if(e.traceParsedData&&(a=Helpers.Trace.extractOriginFromTrace(e.traceParsedData.Meta.mainFrameURL),a)){const e=Platform.MapUtilities.getWithDefault(this.#t,a,(()=>1));r=`${a} (${e})`,this.#t.set(a,e+1)}this.#r.push(r)}traceParsedData(e=this.#e.length-1){return this.#e[e]?this.#e[e].traceParsedData:null}metadata(e){return this.#e[e]?this.#e[e].metadata:null}traceEvents(e){return this.#e[e]?this.#e[e].traceEvents:null}size(){return this.#e.length}deleteTraceByIndex(e){this.#e.splice(e,1),this.#r.splice(e,1)}getRecordingsAvailable(){return this.#r}resetProcessor(){this.#s.reset()}}export class ModelUpdateEvent extends Event{data;static eventName="modelupdate";constructor(e){super(ModelUpdateEvent.eventName),this.data=e}}export function isModelUpdateDataComplete(e){return"COMPLETE"===e.type}export function isModelUpdateDataProgress(e){return"PROGRESS_UPDATE"===e.type}