{"ast":null,"code":"import { ByteQueue } from \"../byte_queue.js\";\nimport { Cursor } from \"../cursor.js\";\nimport * as jsond from \"../encoding/json/decode.js\";\nimport * as protobufd from \"../encoding/protobuf/decode.js\";\nimport { ClientError, ClosedError, ProtoError, InternalError } from \"../errors.js\";\nimport { impossible } from \"../util.js\";\nimport { CursorRespBody as json_CursorRespBody } from \"./json_decode.js\";\nimport { CursorRespBody as protobuf_CursorRespBody } from \"./protobuf_decode.js\";\nimport { CursorEntry as json_CursorEntry } from \"../shared/json_decode.js\";\nimport { CursorEntry as protobuf_CursorEntry } from \"../shared/protobuf_decode.js\";\nexport class HttpCursor extends Cursor {\n #stream;\n #encoding;\n #reader;\n #queue;\n #closed;\n #done;\n /** @private */\n constructor(stream, encoding) {\n super();\n this.#stream = stream;\n this.#encoding = encoding;\n this.#reader = undefined;\n this.#queue = new ByteQueue(16 * 1024);\n this.#closed = undefined;\n this.#done = false;\n }\n async open(response) {\n if (response.body === null) {\n throw new ProtoError(\"No response body for cursor request\");\n }\n this.#reader = response.body.getReader();\n const respBody = await this.#nextItem(json_CursorRespBody, protobuf_CursorRespBody);\n if (respBody === undefined) {\n throw new ProtoError(\"Empty response to cursor request\");\n }\n return respBody;\n }\n /** Fetch the next entry from the cursor. */\n next() {\n return this.#nextItem(json_CursorEntry, protobuf_CursorEntry);\n }\n /** Close the cursor. */\n close() {\n this._setClosed(new ClientError(\"Cursor was manually closed\"));\n }\n /** @private */\n _setClosed(error) {\n if (this.#closed !== undefined) {\n return;\n }\n this.#closed = error;\n this.#stream._cursorClosed(this);\n if (this.#reader !== undefined) {\n this.#reader.cancel();\n }\n }\n /** True if the cursor is closed. */\n get closed() {\n return this.#closed !== undefined;\n }\n async #nextItem(jsonFun, protobufDef) {\n for (;;) {\n if (this.#done) {\n return undefined;\n } else if (this.#closed !== undefined) {\n throw new ClosedError(\"Cursor is closed\", this.#closed);\n }\n if (this.#encoding === \"json\") {\n const jsonData = this.#parseItemJson();\n if (jsonData !== undefined) {\n const jsonText = new TextDecoder().decode(jsonData);\n const jsonValue = JSON.parse(jsonText);\n return jsond.readJsonObject(jsonValue, jsonFun);\n }\n } else if (this.#encoding === \"protobuf\") {\n const protobufData = this.#parseItemProtobuf();\n if (protobufData !== undefined) {\n return protobufd.readProtobufMessage(protobufData, protobufDef);\n }\n } else {\n throw impossible(this.#encoding, \"Impossible encoding\");\n }\n if (this.#reader === undefined) {\n throw new InternalError(\"Attempted to read from HTTP cursor before it was opened\");\n }\n const {\n value,\n done\n } = await this.#reader.read();\n if (done && this.#queue.length === 0) {\n this.#done = true;\n } else if (done) {\n throw new ProtoError(\"Unexpected end of cursor stream\");\n } else {\n this.#queue.push(value);\n }\n }\n }\n #parseItemJson() {\n const data = this.#queue.data();\n const newlineByte = 10;\n const newlinePos = data.indexOf(newlineByte);\n if (newlinePos < 0) {\n return undefined;\n }\n const jsonData = data.slice(0, newlinePos);\n this.#queue.shift(newlinePos + 1);\n return jsonData;\n }\n #parseItemProtobuf() {\n const data = this.#queue.data();\n let varintValue = 0;\n let varintLength = 0;\n for (;;) {\n if (varintLength >= data.byteLength) {\n return undefined;\n }\n const byte = data[varintLength];\n varintValue |= (byte & 0x7f) << 7 * varintLength;\n varintLength += 1;\n if (!(byte & 0x80)) {\n break;\n }\n }\n if (data.byteLength < varintLength + varintValue) {\n return undefined;\n }\n const protobufData = data.slice(varintLength, varintLength + varintValue);\n this.#queue.shift(varintLength + varintValue);\n return protobufData;\n }\n}","map":{"version":3,"names":["ByteQueue","Cursor","jsond","protobufd","ClientError","ClosedError","ProtoError","InternalError","impossible","CursorRespBody","json_CursorRespBody","protobuf_CursorRespBody","CursorEntry","json_CursorEntry","protobuf_CursorEntry","HttpCursor","stream","encoding","reader","queue","closed","done","constructor","undefined","open","response","body","getReader","respBody","nextItem","next","close","_setClosed","error","_cursorClosed","cancel","#nextItem","jsonFun","protobufDef","jsonData","parseItemJson","jsonText","TextDecoder","decode","jsonValue","JSON","parse","readJsonObject","protobufData","parseItemProtobuf","readProtobufMessage","value","read","length","push","#parseItemJson","data","newlineByte","newlinePos","indexOf","slice","shift","#parseItemProtobuf","varintValue","varintLength","byteLength","byte"],"sources":["/Users/shoofle/Projects/the-forest/node_modules/@libsql/hrana-client/lib-esm/http/cursor.js"],"sourcesContent":["import { ByteQueue } from \"../byte_queue.js\";\nimport { Cursor } from \"../cursor.js\";\nimport * as jsond from \"../encoding/json/decode.js\";\nimport * as protobufd from \"../encoding/protobuf/decode.js\";\nimport { ClientError, ClosedError, ProtoError, InternalError } from \"../errors.js\";\nimport { impossible } from \"../util.js\";\nimport { CursorRespBody as json_CursorRespBody } from \"./json_decode.js\";\nimport { CursorRespBody as protobuf_CursorRespBody } from \"./protobuf_decode.js\";\nimport { CursorEntry as json_CursorEntry } from \"../shared/json_decode.js\";\nimport { CursorEntry as protobuf_CursorEntry } from \"../shared/protobuf_decode.js\";\nexport class HttpCursor extends Cursor {\n #stream;\n #encoding;\n #reader;\n #queue;\n #closed;\n #done;\n /** @private */\n constructor(stream, encoding) {\n super();\n this.#stream = stream;\n this.#encoding = encoding;\n this.#reader = undefined;\n this.#queue = new ByteQueue(16 * 1024);\n this.#closed = undefined;\n this.#done = false;\n }\n async open(response) {\n if (response.body === null) {\n throw new ProtoError(\"No response body for cursor request\");\n }\n this.#reader = response.body.getReader();\n const respBody = await this.#nextItem(json_CursorRespBody, protobuf_CursorRespBody);\n if (respBody === undefined) {\n throw new ProtoError(\"Empty response to cursor request\");\n }\n return respBody;\n }\n /** Fetch the next entry from the cursor. */\n next() {\n return this.#nextItem(json_CursorEntry, protobuf_CursorEntry);\n }\n /** Close the cursor. */\n close() {\n this._setClosed(new ClientError(\"Cursor was manually closed\"));\n }\n /** @private */\n _setClosed(error) {\n if (this.#closed !== undefined) {\n return;\n }\n this.#closed = error;\n this.#stream._cursorClosed(this);\n if (this.#reader !== undefined) {\n this.#reader.cancel();\n }\n }\n /** True if the cursor is closed. */\n get closed() {\n return this.#closed !== undefined;\n }\n async #nextItem(jsonFun, protobufDef) {\n for (;;) {\n if (this.#done) {\n return undefined;\n }\n else if (this.#closed !== undefined) {\n throw new ClosedError(\"Cursor is closed\", this.#closed);\n }\n if (this.#encoding === \"json\") {\n const jsonData = this.#parseItemJson();\n if (jsonData !== undefined) {\n const jsonText = new TextDecoder().decode(jsonData);\n const jsonValue = JSON.parse(jsonText);\n return jsond.readJsonObject(jsonValue, jsonFun);\n }\n }\n else if (this.#encoding === \"protobuf\") {\n const protobufData = this.#parseItemProtobuf();\n if (protobufData !== undefined) {\n return protobufd.readProtobufMessage(protobufData, protobufDef);\n }\n }\n else {\n throw impossible(this.#encoding, \"Impossible encoding\");\n }\n if (this.#reader === undefined) {\n throw new InternalError(\"Attempted to read from HTTP cursor before it was opened\");\n }\n const { value, done } = await this.#reader.read();\n if (done && this.#queue.length === 0) {\n this.#done = true;\n }\n else if (done) {\n throw new ProtoError(\"Unexpected end of cursor stream\");\n }\n else {\n this.#queue.push(value);\n }\n }\n }\n #parseItemJson() {\n const data = this.#queue.data();\n const newlineByte = 10;\n const newlinePos = data.indexOf(newlineByte);\n if (newlinePos < 0) {\n return undefined;\n }\n const jsonData = data.slice(0, newlinePos);\n this.#queue.shift(newlinePos + 1);\n return jsonData;\n }\n #parseItemProtobuf() {\n const data = this.#queue.data();\n let varintValue = 0;\n let varintLength = 0;\n for (;;) {\n if (varintLength >= data.byteLength) {\n return undefined;\n }\n const byte = data[varintLength];\n varintValue |= (byte & 0x7f) << (7 * varintLength);\n varintLength += 1;\n if (!(byte & 0x80)) {\n break;\n }\n }\n if (data.byteLength < varintLength + varintValue) {\n return undefined;\n }\n const protobufData = data.slice(varintLength, varintLength + varintValue);\n this.#queue.shift(varintLength + varintValue);\n return protobufData;\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}