const t=require("ready-resource");class s extends t{constructor(t){super(),this.keet=t,this.room=null,this.dbSnapshot=null,this.blobSnapshot=null,this.localSnapshot=null}async _close(){await Promise.all([this.dbSnapshot?this.dbSnapshot.close():null,this.blobSnapshot?this.blobSnapshot.close():null,this.localSnapshot?this.localSnapshot.close():null]),this.room&&this.keet.internalReleaseRoom(this.room)}setRoom(t){return this.room=this.keet.internalOpenExistingRoom(t),this.room}snapshot(){if(!this.room)throw new Error("Must set a room before taking a db snapshot");return this.dbSnapshot||(this.dbSnapshot=this.room.db.snapshot()),this.dbSnapshot}blobSnapshot(){if(!this.room)throw new Error("Must set a room before taking a db snapshot");return this.blobSnapshot?this.dbSnapshot:(this.blobSnapshot=this.room.blobs.snapshot(),this.blobSnapshot)}localSnapshot(){return this.localSnapshot||(this.localSnapshot=this.keet.local.snapshot()),this.localSnapshot}}module.exports={KeetMethod:class{constructor(t,o){this.backend=t,this.keet=t.keet,this.req=o,this.ctx=new s(this.keet)}async _run(){}async run(){this.backend.opened||await this.backend.ready();try{const t=Date.now(),s=await this._run();return{header:{duration:Date.now()-t},...s}}finally{await this.ctx.close()}}static run(t,s){return new this(t,s).run()}}};