@v5x/cli 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,52 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/.bun/unzipit@2.0.3/node_modules/unzipit/dist/unzipit.module.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/bindings/constants.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/bindings/posix.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/serialport.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/list.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/parsers/delimiter.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/parsers/byte-length.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/parsers/readline.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/parsers/index.js", "../../../node_modules/.bun/bun-serialport@0.1.1/node_modules/bun-serialport/src/index.js", "../../../node_modules/.bun/mri@1.2.0/node_modules/mri/lib/index.mjs", "../../../node_modules/.bun/sade@1.8.1/node_modules/sade/lib/index.mjs", "../../../node_modules/.bun/cmd-table@1.6.0/node_modules/cmd-table/dist/chunk-G76XL7PC.mjs", "../../../node_modules/.bun/cmd-table@1.6.0/node_modules/cmd-table/dist/index.mjs", "../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js", "../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js", "../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/utilities.js", "../../../node_modules/.bun/chalk@5.6.2/node_modules/chalk/source/index.js", "../../serial/dist/index.js", "../src/adapter.ts", "../src/device.ts", "../src/commands/kv.ts", "../src/commands/cat.ts", "../src/utils/project.ts", "../src/utils/detect.ts", "../src/utils/guards.ts", "../src/utils/process.ts", "../src/commands/build.ts", "../src/commands/devices.ts", "../src/commands/dir.ts", "../src/utils/upload.ts", "../src/commands/upload.ts", "../src/commands/run.ts", "../src/commands/new.ts", "../src/utils/scaffold.ts", "../../../node_modules/.bun/fflate@0.8.3/node_modules/fflate/esm/index.mjs", "../src/commands/init.ts", "../src/commands/rm.ts", "../src/commands/screenshot.ts", "../src/commands/install.ts", "../src/commands/clean.ts", "../src/commands/programs.ts", "../src/index.ts"],
4
+ "sourcesContent": [
5
+ "/* unzipit@2.0.3, license MIT */\nvar _a, _b;\nfunction readBlobAsArrayBuffer(blob) {\n if (blob.arrayBuffer) {\n return blob.arrayBuffer();\n }\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n resolve(reader.result);\n });\n reader.addEventListener('error', reject);\n reader.readAsArrayBuffer(blob);\n });\n}\nasync function readBlobAsUint8Array(blob) {\n const arrayBuffer = await readBlobAsArrayBuffer(blob);\n return new Uint8Array(arrayBuffer);\n}\nfunction isBlob(v) {\n return typeof Blob !== 'undefined' && v instanceof Blob;\n}\nfunction isSharedArrayBuffer(b) {\n return typeof SharedArrayBuffer !== 'undefined' && b instanceof SharedArrayBuffer;\n}\nconst isNode = (typeof process !== 'undefined') &&\n !!(process === null || process === void 0 ? void 0 : process.versions) &&\n (typeof ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== 'undefined') &&\n (typeof ((_b = process === null || process === void 0 ? void 0 : process.versions) === null || _b === void 0 ? void 0 : _b.electron) === 'undefined');\nfunction isTypedArraySameAsArrayBuffer(typedArray) {\n return typedArray.byteOffset === 0 && typedArray.byteLength === typedArray.buffer.byteLength;\n}\n\nclass ArrayBufferReader {\n constructor(arrayBufferOrView) {\n this.typedArray = (arrayBufferOrView instanceof ArrayBuffer || isSharedArrayBuffer(arrayBufferOrView))\n ? new Uint8Array(arrayBufferOrView)\n : new Uint8Array(arrayBufferOrView.buffer, arrayBufferOrView.byteOffset, arrayBufferOrView.byteLength);\n }\n async getLength() {\n return this.typedArray.byteLength;\n }\n async read(offset, length) {\n // Cast is necessary: backing buffer may be SharedArrayBuffer (ArrayBufferLike),\n // but callers need Uint8Array<ArrayBuffer>. The data is read-only view so this is safe.\n return new Uint8Array(this.typedArray.buffer, this.typedArray.byteOffset + offset, length);\n }\n}\n\nclass BlobReader {\n constructor(blob) {\n this.blob = blob;\n }\n async getLength() {\n return this.blob.size;\n }\n async read(offset, length) {\n const blob = this.blob.slice(offset, offset + length);\n const arrayBuffer = await readBlobAsArrayBuffer(blob);\n return new Uint8Array(arrayBuffer);\n }\n async sliceAsBlob(offset, length, type = '') {\n return this.blob.slice(offset, offset + length, type);\n }\n}\n\nclass HTTPRangeReader {\n constructor(url) {\n this.url = url;\n }\n async getLength() {\n if (this.length === undefined) {\n const req = await fetch(this.url, { method: 'HEAD' });\n if (!req.ok) {\n throw new Error(`failed http request ${this.url}, status: ${req.status}: ${req.statusText}`);\n }\n this.length = parseInt(req.headers.get('content-length'));\n if (Number.isNaN(this.length)) {\n throw Error('could not get length');\n }\n }\n return this.length;\n }\n async read(offset, size) {\n if (size === 0) {\n return new Uint8Array(0);\n }\n const req = await fetch(this.url, {\n headers: {\n Range: `bytes=${offset}-${offset + size - 1}`,\n },\n });\n if (!req.ok) {\n throw new Error(`failed http request ${this.url}, status: ${req.status} offset: ${offset} size: ${size}: ${req.statusText}`);\n }\n const buffer = await req.arrayBuffer();\n return new Uint8Array(buffer);\n }\n}\n\n/* global DecompressionStream */\nconst config = {\n numWorkers: 1,\n workerURL: '',\n useWorkers: false,\n};\nlet nextId = 0;\n// Requests are put on a queue.\n// We don't send the request to the worker until the worker\n// is finished. This probably adds a small amount of latency\n// but the issue is imagine you have 2 workers. You give worker\n// A x seconds of work to do and worker B y seconds of work to\n// do. You don't know which will finish first. If you give\n// the worker with more work to do the request then you'll\n// waste time.\n// note: we can't check `workers.length` for deciding if\n// we've reached `config.numWorkers` because creation the worker\n// is async which means other requests to make workers might\n// come in before a worker gets added to `workers`\nlet numWorkers = 0;\nlet canUseWorkers = true; // gets set to false if we can't start a worker\nconst workers = [];\nconst availableWorkers = [];\nconst waitingForWorkerQueue = [];\nconst currentlyProcessingIdToRequestMap = new Map();\nfunction handleResult(e) {\n makeWorkerAvailable(e.target);\n const { id, error, data } = e.data;\n const request = currentlyProcessingIdToRequestMap.get(id);\n currentlyProcessingIdToRequestMap.delete(id);\n if (error) {\n // The worker can only structured-clone the error as a string, so wrap it\n // back into an Error to match the rejection type of the non-worker path.\n request.reject(new Error(error));\n return;\n }\n // Verify that the decompressed size matches the declared uncompressedSize\n // Treat declared size as authoritative metadata that must be verified.\n const expected = request.uncompressedSize;\n const actual = data instanceof ArrayBuffer ? data.byteLength : data === null || data === void 0 ? void 0 : data.size;\n if (typeof expected === 'number' && typeof actual === 'number' && expected !== actual) {\n request.reject(new Error(`decompressed size mismatch. declared: ${expected}, actual: ${actual}`));\n return;\n }\n request.resolve(data);\n}\n// Because Firefox uses non-standard onerror to signal an error.\nfunction startWorker(url) {\n return new Promise((resolve, reject) => {\n const worker = new Worker(url);\n worker.onmessage = (e) => {\n if (e.data === 'start') {\n worker.onerror = null;\n worker.onmessage = null;\n resolve(worker);\n }\n else {\n reject(new Error(`unexpected message: ${e.data}`));\n }\n };\n worker.onerror = reject;\n });\n}\nconst workerHelper = (function () {\n if (isNode) {\n return {\n async createWorker(url) {\n const moduleId = 'node:worker_threads';\n const { Worker } = await import(moduleId);\n return new Worker(url);\n },\n addEventListener(worker, fn) {\n var _a;\n (_a = worker.on) === null || _a === void 0 ? void 0 : _a.call(worker, 'message', (data) => {\n fn({ target: worker, data });\n });\n },\n async terminate(worker) {\n var _a;\n await ((_a = worker.terminate) === null || _a === void 0 ? void 0 : _a.call(worker));\n },\n };\n }\n else {\n return {\n async createWorker(url) {\n // I don't understand this security issue\n // Apparently there is some iframe setting or http header\n // that prevents cross domain workers. But, I can manually\n // download the text and do it. I reported this to Chrome\n // and they said it was fine so ¯\\_(ツ)_/¯\n try {\n const worker = await startWorker(url);\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker:', url);\n }\n let text;\n try {\n const req = await fetch(url, { mode: 'cors' });\n if (!req.ok) {\n throw new Error(`could not load: ${url}`);\n }\n text = await req.text();\n url = URL.createObjectURL(new Blob([text], { type: 'application/javascript' }));\n const worker = await startWorker(url);\n config.workerURL = url; // this is a hack. What's a better way to structure this code?\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker via fetch:', url);\n }\n if (text !== undefined) {\n try {\n url = `data:application/javascript;base64,${btoa(text)}`;\n const worker = await startWorker(url);\n config.workerURL = url;\n return worker;\n }\n catch (_e) {\n console.warn('could not load worker via dataURI');\n }\n }\n console.warn('workers will not be used');\n throw new Error('can not start workers');\n },\n addEventListener(worker, fn) {\n var _a;\n // The browser delivers a MessageEvent whose `target` is the worker\n // and whose `data` is the InflateResultMessage, matching WorkerResultEvent.\n (_a = worker.addEventListener) === null || _a === void 0 ? void 0 : _a.call(worker, 'message', fn);\n },\n async terminate(worker) {\n var _a;\n await ((_a = worker.terminate) === null || _a === void 0 ? void 0 : _a.call(worker));\n },\n };\n }\n}());\nfunction makeWorkerAvailable(worker) {\n availableWorkers.push(worker);\n processWaitingForWorkerQueue();\n}\nasync function getAvailableWorker() {\n if (availableWorkers.length === 0 && numWorkers < config.numWorkers) {\n ++numWorkers; // see comment at numWorkers declaration\n try {\n const worker = await workerHelper.createWorker(config.workerURL);\n workers.push(worker);\n availableWorkers.push(worker);\n workerHelper.addEventListener(worker, handleResult);\n }\n catch (_e) {\n // set this global out-of-band (needs refactor)\n canUseWorkers = false;\n }\n }\n return availableWorkers.pop();\n}\nasync function decompressRaw(src, limit) {\n const ds = new DecompressionStream('deflate-raw');\n const writer = ds.writable.getWriter();\n // Do not await the write — doing so before reading causes a deadlock when\n // the internal buffer fills due to backpressure.\n writer.write(src).then(() => writer.close()).catch(() => { });\n const chunks = [];\n const reader = ds.readable.getReader();\n let seen = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n // If this chunk would push us past the configured/declared limit, abort\n const newSeen = seen + value.byteLength;\n if (typeof limit === 'number' && newSeen > limit) {\n throw new Error(`decompressed size exceeds limit: ${newSeen} > ${limit}`);\n }\n chunks.push(value);\n seen = newSeen;\n }\n const size = chunks.reduce((s, c) => s + c.byteLength, 0);\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return result;\n}\n// @param {Uint8Array} src\n// @param {string} [type] mime-type\n// @returns {ArrayBuffer|Blob} ArrayBuffer if type is falsy or Blob otherwise.\nasync function inflateRawLocal(src, uncompressedSize, type, resolve, reject) {\n try {\n const limit = uncompressedSize;\n const dst = await decompressRaw(src, limit);\n const actual = dst.byteLength;\n if (typeof uncompressedSize === 'number' && actual !== uncompressedSize) {\n reject(new Error(`decompressed size mismatch. declared: ${uncompressedSize}, actual: ${actual}`));\n return;\n }\n resolve(type ? new Blob([dst], { type }) : dst.buffer);\n }\n catch (e) {\n reject(e);\n }\n}\nasync function processWaitingForWorkerQueue() {\n var _a;\n if (waitingForWorkerQueue.length === 0) {\n return;\n }\n if (config.useWorkers && canUseWorkers) {\n const worker = await getAvailableWorker();\n // canUseWorkers might have been set out-of-band (need refactor)\n if (canUseWorkers) {\n if (worker) {\n if (waitingForWorkerQueue.length === 0) {\n // the queue might be empty while we awaited for a worker.\n makeWorkerAvailable(worker);\n return;\n }\n const { id, src, uncompressedSize, type, resolve, reject } = waitingForWorkerQueue.shift();\n currentlyProcessingIdToRequestMap.set(id, { id, src, uncompressedSize, type, resolve, reject });\n const transferables = [];\n // NOTE: Originally I thought you could transfer an ArrayBuffer.\n // The code on this side is often using views into the entire file\n // which means if we transferred we'd lose the entire file. That sucks\n // because it means there's an expensive copy to send the uncompressed\n // data to the worker.\n //\n // Also originally I thought we could send a Blob but we'd need to refactor\n // the code in unzipit/readEntryData as currently it reads the uncompressed\n // bytes.\n //\n //if (!isBlob(src) && !isSharedArrayBuffer(src)) {\n // transferables.push(src);\n //}\n (_a = worker.postMessage) === null || _a === void 0 ? void 0 : _a.call(worker, {\n type: 'inflate',\n data: {\n id,\n type,\n src,\n uncompressedSize,\n },\n }, transferables);\n }\n return;\n }\n }\n // inflate locally\n // We loop here because what happens if many requests happen at once\n // the first N requests will try to async make a worker. Other requests\n // will then be on the queue. But if we fail to make workers then there\n // are pending requests.\n while (waitingForWorkerQueue.length) {\n const { src, uncompressedSize, type, resolve, reject } = waitingForWorkerQueue.shift();\n const data = isBlob(src) ? await readBlobAsUint8Array(src) : src;\n try {\n await inflateRawLocal(data, uncompressedSize, type, resolve, reject);\n }\n catch (e) {\n reject(e);\n }\n }\n}\nfunction setOptions$1(options) {\n config.workerURL = options.workerURL || config.workerURL;\n // there's no reason to set the workerURL if you're not going to use workers\n if (options.workerURL) {\n config.useWorkers = true;\n }\n config.useWorkers = options.useWorkers !== undefined ? options.useWorkers : config.useWorkers;\n config.numWorkers = options.numWorkers || config.numWorkers;\n}\n// It has to take non-zero time to put a large typed array in a Blob since the very\n// next instruction you could change the contents of the array. So, if you're reading\n// the zip file for images/video/audio then all you want is a Blob on which to get a URL.\n// so that operation of putting the data in a Blob should happen in the worker.\n//\n// Conversely if you want the data itself then you want an ArrayBuffer immediately\n// since the worker can transfer its ArrayBuffer zero copy.\n//\n// @param {Uint8Array|Blob} src\n// @param {number} uncompressedSize\n// @param {string} [type] falsy or mimeType string (eg: 'image/png')\n// @returns {ArrayBuffer|Blob} ArrayBuffer if type is falsy or Blob otherwise.\nfunction inflateRawAsync(src, uncompressedSize, type) {\n return new Promise((resolve, reject) => {\n // note: there is potential an expensive copy here. In order for the data\n // to make it into the worker we need to copy the data to the worker unless\n // it's a Blob or a SharedArrayBuffer.\n //\n // Solutions:\n //\n // 1. A minor enhancement, if `uncompressedSize` is small don't call the worker.\n //\n // might be a win period as their is overhead calling the worker\n //\n // 2. Move the entire library to the worker\n //\n // Good, Maybe faster if you pass a URL, Blob, or SharedArrayBuffer? Not sure about that\n // as those are also easy to transfer. Still slow if you pass an ArrayBuffer\n // as the ArrayBuffer has to be copied to the worker.\n //\n // I guess benchmarking is really the only thing to try.\n waitingForWorkerQueue.push({ src, uncompressedSize, type, resolve, reject, id: nextId++ });\n processWaitingForWorkerQueue();\n });\n}\nfunction clearArray(arr) {\n arr.splice(0, arr.length);\n}\nasync function cleanup$1() {\n for (const worker of workers) {\n await workerHelper.terminate(worker);\n }\n clearArray(workers);\n clearArray(availableWorkers);\n clearArray(waitingForWorkerQueue);\n currentlyProcessingIdToRequestMap.clear();\n numWorkers = 0;\n canUseWorkers = true;\n}\n\nfunction dosDateTimeToDate(date, time) {\n const day = date & 0x1f; // 1-31\n const month = (date >> 5 & 0xf) - 1; // 1-12, 0-11\n const year = (date >> 9 & 0x7f) + 1980; // 0-128, 1980-2108\n const millisecond = 0;\n const second = (time & 0x1f) * 2; // 0-29, 0-58 (even numbers)\n const minute = time >> 5 & 0x3f; // 0-59\n const hour = time >> 11 & 0x1f; // 0-23\n return new Date(year, month, day, hour, minute, second, millisecond);\n}\nclass ZipEntry {\n constructor(reader, rawEntry) {\n this._reader = reader;\n this._rawEntry = rawEntry;\n this.name = rawEntry.name;\n this.nameBytes = rawEntry.nameBytes;\n this.size = rawEntry.uncompressedSize;\n this.compressedSize = rawEntry.compressedSize;\n this.comment = rawEntry.comment;\n this.commentBytes = rawEntry.commentBytes;\n this.compressionMethod = rawEntry.compressionMethod;\n this.lastModDate = dosDateTimeToDate(rawEntry.lastModFileDate, rawEntry.lastModFileTime);\n this.isDirectory = rawEntry.uncompressedSize === 0 && rawEntry.name.endsWith('/');\n this.encrypted = !!(rawEntry.generalPurposeBitFlag & 0x1);\n this.externalFileAttributes = rawEntry.externalFileAttributes;\n this.versionMadeBy = rawEntry.versionMadeBy;\n }\n // returns a promise that returns a Blob for this entry\n async blob(type = 'application/octet-stream') {\n return await readEntryDataAsBlob(this._reader, this._rawEntry, type);\n }\n // returns a promise that returns an ArrayBuffer for this entry\n async arrayBuffer() {\n return await readEntryDataAsArrayBuffer(this._reader, this._rawEntry);\n }\n // returns text, assumes the text is valid utf8. If you want more options decode arrayBuffer yourself\n async text() {\n const buffer = await this.arrayBuffer();\n return decodeBuffer(new Uint8Array(buffer));\n }\n // returns text with JSON.parse called on it. If you want more options decode arrayBuffer yourself\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async json() {\n const text = await this.text();\n return JSON.parse(text);\n }\n}\nconst EOCDR_WITHOUT_COMMENT_SIZE = 22;\nconst MAX_COMMENT_SIZE = 0xffff; // 2-byte size\nconst EOCDR_SIGNATURE = 0x06054b50;\nconst ZIP64_EOCDR_SIGNATURE = 0x06064b50;\nasync function readAs(reader, offset, length) {\n return await reader.read(offset, length);\n}\n// The point of this function is we want to be able to pass the data\n// to a worker as fast as possible so when decompressing if the data\n// is already a blob and we can get a blob then get a blob.\n//\n// I'm not sure what a better way to refactor this is. We've got examples\n// of multiple readers. Ideally, for every type of reader we could ask\n// it, \"give me a type that is zero copy both locally and when sent to a worker\".\n//\n// The problem is the worker would also have to know the how to handle this\n// opaque type. I suppose the correct solution is to register different\n// reader handlers in the worker so BlobReader would register some\n// `handleZeroCopyType<BlobReader>`. At the moment I don't feel like\n// refactoring. As it is you just pass in an instance of the reader\n// but instead you'd have to register the reader and some how get the\n// source for the `handleZeroCopyType` handler function into the worker.\n// That sounds like a huge PITA, requiring you to put the implementation\n// in a separate file so the worker can load it or some other workaround\n// hack.\n//\n// For now this hack works even if it's not generic.\nasync function readAsBlobOrTypedArray(reader, offset, length, type) {\n if (reader.sliceAsBlob) {\n return await reader.sliceAsBlob(offset, length, type);\n }\n return await reader.read(offset, length);\n}\nconst crc = {\n unsigned() {\n return 0;\n },\n};\nfunction getUint16LE(uint8View, offset) {\n return uint8View[offset] +\n uint8View[offset + 1] * 0x100;\n}\nfunction getUint32LE(uint8View, offset) {\n return uint8View[offset] +\n uint8View[offset + 1] * 0x100 +\n uint8View[offset + 2] * 0x10000 +\n uint8View[offset + 3] * 0x1000000;\n}\nfunction getUint64LE(uint8View, offset) {\n return getUint32LE(uint8View, offset) +\n getUint32LE(uint8View, offset + 4) * 0x100000000;\n}\n// const decodeCP437 = (function() {\n// const cp437 = '\\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';\n//\n// return function(uint8view) {\n// return Array.from(uint8view).map(v => cp437[v]).join('');\n// };\n// }());\nconst utf8Decoder = new TextDecoder();\nfunction decodeBuffer(uint8View, _isUTF8) {\n if (isSharedArrayBuffer(uint8View.buffer)) {\n uint8View = new Uint8Array(uint8View);\n }\n return utf8Decoder.decode(uint8View);\n /*\n AFAICT the UTF8 flat is not set so it's 100% up to the user\n to self decode if their file is not utf8 filenames\n return isUTF8\n ? utf8Decoder.decode(uint8View)\n : decodeCP437(uint8View);\n */\n}\nasync function findEndOfCentralDirector(reader, totalLength) {\n const size = Math.min(EOCDR_WITHOUT_COMMENT_SIZE + MAX_COMMENT_SIZE, totalLength);\n const readStart = totalLength - size;\n const data = await readAs(reader, readStart, size);\n for (let i = size - EOCDR_WITHOUT_COMMENT_SIZE; i >= 0; --i) {\n if (getUint32LE(data, i) !== EOCDR_SIGNATURE) {\n continue;\n }\n // 0 - End of central directory signature\n const eocdr = new Uint8Array(data.buffer, data.byteOffset + i, data.byteLength - i);\n // 4 - Number of this disk\n const diskNumber = getUint16LE(eocdr, 4);\n if (diskNumber !== 0) {\n throw new Error(`multi-volume zip files are not supported. This is volume: ${diskNumber}`);\n }\n // 6 - Disk where central directory starts\n // 8 - Number of central directory records on this disk\n // 10 - Total number of central directory records\n const entryCount = getUint16LE(eocdr, 10);\n // 12 - Size of central directory (bytes)\n const centralDirectorySize = getUint32LE(eocdr, 12);\n // 16 - Offset of start of central directory, relative to start of archive\n const centralDirectoryOffset = getUint32LE(eocdr, 16);\n // 20 - Comment length\n const commentLength = getUint16LE(eocdr, 20);\n const expectedCommentLength = eocdr.length - EOCDR_WITHOUT_COMMENT_SIZE;\n if (commentLength !== expectedCommentLength) {\n throw new Error(`invalid comment length. expected: ${expectedCommentLength}, actual: ${commentLength}`);\n }\n // 22 - Comment\n // the encoding is always cp437.\n const commentBytes = new Uint8Array(eocdr.buffer, eocdr.byteOffset + 22, commentLength);\n const comment = decodeBuffer(commentBytes);\n if (entryCount === 0xffff || centralDirectoryOffset === 0xffffffff) {\n return await readZip64CentralDirectory(reader, readStart + i, comment, commentBytes);\n }\n else {\n return await readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);\n }\n }\n throw new Error('could not find end of central directory. maybe not zip file');\n}\nconst END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE = 0x07064b50;\nasync function readZip64CentralDirectory(reader, offset, comment, commentBytes) {\n // ZIP64 Zip64 end of central directory locator\n const zip64EocdlOffset = offset - 20;\n const eocdl = await readAs(reader, zip64EocdlOffset, 20);\n // 0 - zip64 end of central dir locator signature\n if (getUint32LE(eocdl, 0) !== END_OF_CENTRAL_DIRECTORY_LOCATOR_SIGNATURE) {\n throw new Error('invalid zip64 end of central directory locator signature');\n }\n // 4 - number of the disk with the start of the zip64 end of central directory\n // 8 - relative offset of the zip64 end of central directory record\n const zip64EocdrOffset = getUint64LE(eocdl, 8);\n // 16 - total number of disks\n // ZIP64 end of central directory record\n const zip64Eocdr = await readAs(reader, zip64EocdrOffset, 56);\n // 0 - zip64 end of central dir signature 4 bytes (0x06064b50)\n if (getUint32LE(zip64Eocdr, 0) !== ZIP64_EOCDR_SIGNATURE) {\n throw new Error('invalid zip64 end of central directory record signature');\n }\n // 4 - size of zip64 end of central directory record 8 bytes\n // 12 - version made by 2 bytes\n // 14 - version needed to extract 2 bytes\n // 16 - number of this disk 4 bytes\n // 20 - number of the disk with the start of the central directory 4 bytes\n // 24 - total number of entries in the central directory on this disk 8 bytes\n // 32 - total number of entries in the central directory 8 bytes\n const entryCount = getUint64LE(zip64Eocdr, 32);\n // 40 - size of the central directory 8 bytes\n const centralDirectorySize = getUint64LE(zip64Eocdr, 40);\n // 48 - offset of start of central directory with respect to the starting disk number 8 bytes\n const centralDirectoryOffset = getUint64LE(zip64Eocdr, 48);\n // 56 - zip64 extensible data sector (variable size)\n return readEntries(reader, centralDirectoryOffset, centralDirectorySize, entryCount, comment, commentBytes);\n}\nconst CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE = 0x02014b50;\nasync function readEntries(reader, centralDirectoryOffset, centralDirectorySize, rawEntryCount, comment, commentBytes) {\n let readEntryCursor = 0;\n const allEntriesBuffer = await readAs(reader, centralDirectoryOffset, centralDirectorySize);\n const rawEntries = [];\n for (let e = 0; e < rawEntryCount; ++e) {\n const buffer = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + 46);\n // 0 - Central directory file header signature\n const signature = getUint32LE(buffer, 0);\n if (signature !== CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE) {\n throw new Error(`invalid central directory file header signature: 0x${signature.toString(16)}`);\n }\n const rawEntry = {\n // 4 - Version made by\n versionMadeBy: getUint16LE(buffer, 4),\n // 6 - Version needed to extract (minimum)\n versionNeededToExtract: getUint16LE(buffer, 6),\n // 8 - General purpose bit flag\n generalPurposeBitFlag: getUint16LE(buffer, 8),\n // 10 - Compression method\n compressionMethod: getUint16LE(buffer, 10),\n // 12 - File last modification time\n lastModFileTime: getUint16LE(buffer, 12),\n // 14 - File last modification date\n lastModFileDate: getUint16LE(buffer, 14),\n // 16 - CRC-32\n crc32: getUint32LE(buffer, 16),\n // 20 - Compressed size\n compressedSize: getUint32LE(buffer, 20),\n // 24 - Uncompressed size\n uncompressedSize: getUint32LE(buffer, 24),\n // 28 - File name length (n)\n fileNameLength: getUint16LE(buffer, 28),\n // 30 - Extra field length (m)\n extraFieldLength: getUint16LE(buffer, 30),\n // 32 - File comment length (k)\n fileCommentLength: getUint16LE(buffer, 32),\n // 34 - Disk number where file starts\n // 36 - Internal file attributes\n internalFileAttributes: getUint16LE(buffer, 36),\n // 38 - External file attributes\n externalFileAttributes: getUint32LE(buffer, 38),\n // 42 - Relative offset of local file header\n relativeOffsetOfLocalHeader: getUint32LE(buffer, 42),\n };\n if (rawEntry.generalPurposeBitFlag & 0x40) {\n throw new Error('strong encryption is not supported');\n }\n readEntryCursor += 46;\n const data = allEntriesBuffer.subarray(readEntryCursor, readEntryCursor + rawEntry.fileNameLength + rawEntry.extraFieldLength + rawEntry.fileCommentLength);\n // 46 - File name\n (rawEntry.generalPurposeBitFlag & 0x800) !== 0;\n rawEntry.nameBytes = data.slice(0, rawEntry.fileNameLength);\n rawEntry.name = decodeBuffer(rawEntry.nameBytes);\n // 46+n - Extra field\n const fileCommentStart = rawEntry.fileNameLength + rawEntry.extraFieldLength;\n const extraFieldBuffer = data.slice(rawEntry.fileNameLength, fileCommentStart);\n rawEntry.extraFields = [];\n let i = 0;\n while (i < extraFieldBuffer.length - 3) {\n const headerId = getUint16LE(extraFieldBuffer, i + 0);\n const dataSize = getUint16LE(extraFieldBuffer, i + 2);\n const dataStart = i + 4;\n const dataEnd = dataStart + dataSize;\n if (dataEnd > extraFieldBuffer.length) {\n throw new Error('extra field length exceeds extra field buffer size');\n }\n rawEntry.extraFields.push({\n id: headerId,\n data: extraFieldBuffer.slice(dataStart, dataEnd),\n });\n i = dataEnd;\n }\n // 46+n+m - File comment\n rawEntry.commentBytes = data.slice(fileCommentStart, fileCommentStart + rawEntry.fileCommentLength);\n rawEntry.comment = decodeBuffer(rawEntry.commentBytes);\n readEntryCursor += data.length;\n if (rawEntry.uncompressedSize === 0xffffffff ||\n rawEntry.compressedSize === 0xffffffff ||\n rawEntry.relativeOffsetOfLocalHeader === 0xffffffff) {\n // ZIP64 format\n // find the Zip64 Extended Information Extra Field\n const zip64ExtraField = rawEntry.extraFields.find(e => e.id === 0x0001);\n if (!zip64ExtraField) {\n throw new Error('expected zip64 extended information extra field');\n }\n const zip64EiefBuffer = zip64ExtraField.data;\n let index = 0;\n // 0 - Original Size 8 bytes\n if (rawEntry.uncompressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include uncompressed size');\n }\n rawEntry.uncompressedSize = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 8 - Compressed Size 8 bytes\n if (rawEntry.compressedSize === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include compressed size');\n }\n rawEntry.compressedSize = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 16 - Relative Header Offset 8 bytes\n if (rawEntry.relativeOffsetOfLocalHeader === 0xffffffff) {\n if (index + 8 > zip64EiefBuffer.length) {\n throw new Error('zip64 extended information extra field does not include relative header offset');\n }\n rawEntry.relativeOffsetOfLocalHeader = getUint64LE(zip64EiefBuffer, index);\n index += 8;\n }\n // 24 - Disk Start Number 4 bytes\n }\n // check for Info-ZIP Unicode Path Extra Field (0x7075)\n // see https://github.com/thejoshwolfe/yauzl/issues/33\n const nameField = rawEntry.extraFields.find(e => e.id === 0x7075 &&\n e.data.length >= 6 && // too short to be meaningful\n e.data[0] === 1 && // Version 1 byte version of this extra field, currently 1\n getUint32LE(e.data, 1), crc.unsigned()); // NameCRC32 4 bytes File Name Field CRC32 Checksum\n // > If the CRC check fails, this UTF-8 Path Extra Field should be\n // > ignored and the File Name field in the header should be used instead.\n if (nameField) {\n // UnicodeName Variable UTF-8 version of the entry File Name\n rawEntry.fileName = decodeBuffer(nameField.data.slice(5));\n }\n // validate file size\n if (rawEntry.compressionMethod === 0) {\n let expectedCompressedSize = rawEntry.uncompressedSize;\n if ((rawEntry.generalPurposeBitFlag & 0x1) !== 0) {\n // traditional encryption prefixes the file data with a header\n expectedCompressedSize += 12;\n }\n if (rawEntry.compressedSize !== expectedCompressedSize) {\n throw new Error(`compressed size mismatch for stored file: ${rawEntry.compressedSize} != ${expectedCompressedSize}`);\n }\n }\n rawEntries.push(rawEntry);\n }\n const zip = {\n comment,\n commentBytes,\n };\n return {\n zip,\n entries: rawEntries.map(e => new ZipEntry(reader, e)),\n };\n}\nasync function readEntryDataHeader(reader, rawEntry) {\n if (rawEntry.generalPurposeBitFlag & 0x1) {\n throw new Error('encrypted entries not supported');\n }\n const buffer = await readAs(reader, rawEntry.relativeOffsetOfLocalHeader, 30);\n // note: maybe this should be passed in or cached on entry\n // as it's async so there will be at least one tick (not sure about that)\n const totalLength = await reader.getLength();\n // 0 - Local file header signature = 0x04034b50\n const signature = getUint32LE(buffer, 0);\n if (signature !== 0x04034b50) {\n throw new Error(`invalid local file header signature: 0x${signature.toString(16)}`);\n }\n // all this should be redundant\n // 4 - Version needed to extract (minimum)\n // 6 - General purpose bit flag\n // 8 - Compression method\n // 10 - File last modification time\n // 12 - File last modification date\n // 14 - CRC-32\n // 18 - Compressed size\n // 22 - Uncompressed size\n // 26 - File name length (n)\n const fileNameLength = getUint16LE(buffer, 26);\n // 28 - Extra field length (m)\n const extraFieldLength = getUint16LE(buffer, 28);\n // 30 - File name\n // 30+n - Extra field\n const localFileHeaderEnd = rawEntry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength;\n let decompress;\n if (rawEntry.compressionMethod === 0) {\n // 0 - The file is stored (no compression)\n decompress = false;\n }\n else if (rawEntry.compressionMethod === 8) {\n // 8 - The file is Deflated\n decompress = true;\n }\n else {\n throw new Error(`unsupported compression method: ${rawEntry.compressionMethod}`);\n }\n const fileDataStart = localFileHeaderEnd;\n const fileDataEnd = fileDataStart + rawEntry.compressedSize;\n if (rawEntry.compressedSize !== 0) {\n // bounds check now, because the read streams will probably not complain loud enough.\n // since we're dealing with an unsigned offset plus an unsigned size,\n // we only have 1 thing to check for.\n if (fileDataEnd > totalLength) {\n throw new Error(`file data overflows file bounds: ${fileDataStart} + ${rawEntry.compressedSize} > ${totalLength}`);\n }\n }\n return {\n decompress,\n fileDataStart,\n };\n}\nasync function readEntryDataAsArrayBuffer(reader, rawEntry) {\n const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);\n if (!decompress) {\n const dataView = await readAs(reader, fileDataStart, rawEntry.compressedSize);\n // make copy?\n //\n // 1. The source is a Blob/file. In this case we'll get back TypedArray we can just hand to the user\n // 2. The source is a TypedArray. In this case we'll get back TypedArray that is a view into a larger buffer\n // but because ultimately this is used to return an ArrayBuffer to `someEntry.arrayBuffer()`\n // we need to return copy since we need the `ArrayBuffer`, not the TypedArray to exactly match the data.\n // Note: We could add another API function `bytes()` or something that returned a `Uint8Array`\n // instead of an `ArrayBuffer`. This would let us skip a copy here. But this case only happens for uncompressed\n // data. That seems like a rare enough case that adding a new API is not worth it? Or is it? A zip of jpegs or mp3s\n // might not be compressed. For now that's a TBD.\n return isTypedArraySameAsArrayBuffer(dataView) ? dataView.buffer : dataView.slice().buffer;\n }\n // see comment in readEntryDateAsBlob\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);\n const result = await inflateRawAsync(typedArrayOrBlob instanceof Uint8Array ? typedArrayOrBlob : typedArrayOrBlob, rawEntry.uncompressedSize);\n return result;\n}\nasync function readEntryDataAsBlob(reader, rawEntry, type) {\n const { decompress, fileDataStart } = await readEntryDataHeader(reader, rawEntry);\n if (!decompress) {\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize, type);\n if (isBlob(typedArrayOrBlob)) {\n return typedArrayOrBlob;\n }\n return new Blob([typedArrayOrBlob], { type });\n }\n // Here's the issue with this mess (should refactor?)\n // if the source is a blob then we really want to pass a blob to inflateRawAsync to avoid a large\n // copy if we're going to a worker.\n const typedArrayOrBlob = await readAsBlobOrTypedArray(reader, fileDataStart, rawEntry.compressedSize);\n const result = await inflateRawAsync(typedArrayOrBlob instanceof Uint8Array ? typedArrayOrBlob : typedArrayOrBlob, rawEntry.uncompressedSize, type);\n return result;\n}\nfunction setOptions(options) {\n setOptions$1(options);\n}\nasync function unzipRaw(source) {\n let reader;\n if (typeof Blob !== 'undefined' && source instanceof Blob) {\n reader = new BlobReader(source);\n }\n else if (source instanceof ArrayBuffer || (source && source.buffer && source.buffer instanceof ArrayBuffer)) {\n reader = new ArrayBufferReader(source);\n }\n else if (isSharedArrayBuffer(source) || isSharedArrayBuffer(source.buffer)) {\n reader = new ArrayBufferReader(source);\n }\n else if (typeof source === 'string') {\n const req = await fetch(source);\n if (!req.ok) {\n throw new Error(`failed http request ${source}, status: ${req.status}: ${req.statusText}`);\n }\n const blob = await req.blob();\n reader = new BlobReader(blob);\n }\n else if (typeof source.getLength === 'function' && typeof source.read === 'function') {\n reader = source;\n }\n else {\n throw new Error('unsupported source type');\n }\n const totalLength = await reader.getLength();\n if (totalLength > Number.MAX_SAFE_INTEGER) {\n throw new Error(`file too large. size: ${totalLength}. Only file sizes up 4503599627370496 bytes are supported`);\n }\n return await findEndOfCentralDirector(reader, totalLength);\n}\n// If the names are not utf8 you should use unzipitRaw\nasync function unzip(source) {\n const { zip, entries } = await unzipRaw(source);\n return {\n zip,\n entries: Object.fromEntries(entries.map(v => [v.name, v])),\n };\n}\nfunction cleanup() {\n cleanup$1();\n}\n\nexport { ArrayBufferReader, BlobReader, HTTPRangeReader, ZipEntry, cleanup, setOptions, unzip, unzipRaw };\n",
6
+ "// Platform-specific termios constants for bun:ffi serial port access.\n// Values differ between Linux and macOS — we detect at import time.\n\nimport { platform } from 'node:os'\n\nconst IS_LINUX = platform() === 'linux'\nconst IS_DARWIN = platform() === 'darwin'\n\nif (!IS_LINUX && !IS_DARWIN) {\n throw new Error(`bun-serialport: unsupported platform \"${platform()}\"`)\n}\n\n// --- Open flags ---\nexport const O_RDWR = 2\nexport const O_NOCTTY = IS_LINUX ? 256 : 0x20000\nexport const O_NONBLOCK = IS_LINUX ? 2048 : 4\n\n// --- fcntl ---\nexport const F_GETFL = IS_LINUX ? 3 : 3\nexport const F_SETFL = IS_LINUX ? 4 : 4\n\n// --- tcsetattr actions ---\nexport const TCSANOW = 0\nexport const TCSADRAIN = 1\nexport const TCSAFLUSH = 2\n\n// --- tcflush queue selectors ---\nexport const TCIFLUSH = IS_LINUX ? 0 : 1\nexport const TCOFLUSH = IS_LINUX ? 1 : 2\nexport const TCIOFLUSH = IS_LINUX ? 2 : 3\n\n// --- Control flags (c_cflag) ---\nexport const CSIZE = IS_LINUX ? 0x30 : 0x300\nexport const CS5 = IS_LINUX ? 0x00 : 0x000\nexport const CS6 = IS_LINUX ? 0x10 : 0x100\nexport const CS7 = IS_LINUX ? 0x20 : 0x200\nexport const CS8 = IS_LINUX ? 0x30 : 0x300\nexport const CSTOPB = IS_LINUX ? 0x40 : 0x400\nexport const CREAD = IS_LINUX ? 0x80 : 0x800\nexport const PARENB = IS_LINUX ? 0x100 : 0x1000\nexport const PARODD = IS_LINUX ? 0x200 : 0x2000\nexport const CLOCAL = IS_LINUX ? 0x800 : 0x8000\nexport const CRTSCTS = IS_LINUX ? 0x80000000 : 0x30000\n\n// --- Input flags (c_iflag) ---\nexport const IGNBRK = 1\nexport const BRKINT = 2\nexport const IGNPAR = 4\nexport const PARMRK = 8\nexport const INPCK = IS_LINUX ? 0x10 : 0x10\nexport const ISTRIP = IS_LINUX ? 0x20 : 0x20\nexport const INLCR = IS_LINUX ? 0x40 : 0x40\nexport const IGNCR = IS_LINUX ? 0x80 : 0x80\nexport const ICRNL = IS_LINUX ? 0x100 : 0x100\nexport const IXON = IS_LINUX ? 0x400 : 0x200\nexport const IXOFF = IS_LINUX ? 0x1000 : 0x400\nexport const IXANY = IS_LINUX ? 0x800 : 0x800\n\n// --- Output flags (c_oflag) ---\nexport const OPOST = 1\n\n// --- Local flags (c_lflag) ---\nexport const ISIG = IS_LINUX ? 1 : 0x80\nexport const ICANON = IS_LINUX ? 2 : 0x100\nexport const ECHO = IS_LINUX ? 8 : 0x8\nexport const ECHOE = IS_LINUX ? 0x10 : 0x2\nexport const ECHOK = IS_LINUX ? 0x20 : 0x4\nexport const ECHONL = IS_LINUX ? 0x40 : 0x10\nexport const NOFLSH = IS_LINUX ? 0x80 : 0x80000000\nexport const TOSTOP = IS_LINUX ? 0x100 : 0x400000\nexport const IEXTEN = IS_LINUX ? 0x8000 : 0x400\n\n// --- Special character indices ---\nexport const VMIN = IS_LINUX ? 6 : 16\nexport const VTIME = IS_LINUX ? 5 : 17\nexport const NCCS = IS_LINUX ? 32 : 20\n\n// --- ioctl modem control ---\nexport const TIOCMGET = IS_LINUX ? 0x5415 : 0x4004746a\nexport const TIOCMSET = IS_LINUX ? 0x5418 : 0x8004746d\nexport const TIOCMBIS = IS_LINUX ? 0x5416 : 0x8004746c\nexport const TIOCMBIC = IS_LINUX ? 0x5417 : 0x8004746b\n\n// --- Modem line bits ---\nexport const TIOCM_DTR = 0x002\nexport const TIOCM_RTS = 0x004\nexport const TIOCM_CTS = 0x020\nexport const TIOCM_DSR = 0x100\nexport const TIOCM_CD = 0x040\nexport const TIOCM_RI = 0x080\n\n// --- termios struct layout ---\n// Linux: tcflag_t = uint32, cc_t = uint8, speed_t = uint32, NCCS = 32\n// struct: c_iflag(4) + c_oflag(4) + c_cflag(4) + c_lflag(4) + c_line(1) + c_cc[32](32) + pad(3) + c_ispeed(4) + c_ospeed(4) = 60\n// macOS: tcflag_t = unsigned long (8 on 64-bit), cc_t = uint8, speed_t = unsigned long (8), NCCS = 20\n// struct: c_iflag(8) + c_oflag(8) + c_cflag(8) + c_lflag(8) + c_cc[20](20) + pad(4) + c_ispeed(8) + c_ospeed(8) = 72\n\nexport const TERMIOS_SIZE = IS_LINUX ? 60 : 72\nexport const TCFLAG_SIZE = IS_LINUX ? 4 : 8\nexport const SPEED_SIZE = IS_LINUX ? 4 : 8\n\n// Offsets into the termios struct\nexport const TERMIOS_OFFSETS = IS_LINUX\n ? { c_iflag: 0, c_oflag: 4, c_cflag: 8, c_lflag: 12, c_line: 16, c_cc: 17, c_ispeed: 52, c_ospeed: 56 }\n : { c_iflag: 0, c_oflag: 8, c_cflag: 16, c_lflag: 24, c_cc: 32, c_ispeed: 56, c_ospeed: 64 }\n\n// --- Baud rate mapping ---\n// Linux uses encoded constants; macOS uses the literal baud rate value.\nconst LINUX_BAUD_MAP = {\n 0: 0, 110: 3, 300: 7, 600: 8, 1200: 9, 2400: 11, 4800: 12,\n 9600: 13, 19200: 14, 38400: 15, 57600: 0x1001, 115200: 0x1002,\n 230400: 0x1003, 460800: 0x1004, 500000: 0x1005, 576000: 0x1006,\n 921600: 0x1007, 1000000: 0x1008, 1152000: 0x1009, 1500000: 0x100a,\n 2000000: 0x100b, 2500000: 0x100c, 3000000: 0x100d, 3500000: 0x100e,\n 4000000: 0x100f\n}\n\nexport function encodeBaudRate(rate) {\n if (IS_DARWIN) return rate // macOS uses literal values\n const encoded = LINUX_BAUD_MAP[rate]\n if (encoded === undefined) throw new Error(`Unsupported baud rate: ${rate}`)\n return encoded\n}\n\nexport function dataBitsFlag(bits) {\n switch (bits) {\n case 5: return CS5\n case 6: return CS6\n case 7: return CS7\n case 8: return CS8\n default: throw new Error(`Invalid data bits: ${bits}`)\n }\n}\n",
7
+ "// POSIX serial port bindings via bun:ffi.\n// Calls libc directly — no native addon, no compilation step.\n\nimport { dlopen, FFIType, ptr, toArrayBuffer, CString } from 'bun:ffi'\nimport {\n O_RDWR, O_NOCTTY, O_NONBLOCK,\n TCSADRAIN, TCSAFLUSH, TCIOFLUSH,\n CSIZE, CREAD, CLOCAL, CSTOPB, PARENB, PARODD, CRTSCTS,\n INPCK, IXON, IXOFF,\n VMIN, VTIME, NCCS,\n TIOCMGET, TIOCMBIS, TIOCMBIC,\n TIOCM_DTR, TIOCM_RTS, TIOCM_CTS, TIOCM_DSR, TIOCM_CD, TIOCM_RI,\n TERMIOS_SIZE, TCFLAG_SIZE, TERMIOS_OFFSETS,\n encodeBaudRate, dataBitsFlag\n} from './constants.js'\nimport { platform } from 'node:os'\n\nconst IS_LINUX = platform() === 'linux'\nconst IS_DARWIN = platform() === 'darwin'\n\n// Load libc\nconst LIBC_PATH = IS_LINUX ? 'libc.so.6' : 'libSystem.B.dylib'\n\nconst libc = dlopen(LIBC_PATH, {\n open: { args: [FFIType.cstring, FFIType.i32], returns: FFIType.i32 },\n close: { args: [FFIType.i32], returns: FFIType.i32 },\n read: { args: [FFIType.i32, FFIType.ptr, FFIType.u64], returns: FFIType.i64 },\n write: { args: [FFIType.i32, FFIType.ptr, FFIType.u64], returns: FFIType.i64 },\n tcgetattr: { args: [FFIType.i32, FFIType.ptr], returns: FFIType.i32 },\n tcsetattr: { args: [FFIType.i32, FFIType.i32, FFIType.ptr], returns: FFIType.i32 },\n tcflush: { args: [FFIType.i32, FFIType.i32], returns: FFIType.i32 },\n tcdrain: { args: [FFIType.i32], returns: FFIType.i32 },\n cfsetispeed: { args: [FFIType.ptr, FFIType.u64], returns: FFIType.i32 },\n cfsetospeed: { args: [FFIType.ptr, FFIType.u64], returns: FFIType.i32 },\n fcntl: { args: [FFIType.i32, FFIType.i32, FFIType.i32], returns: FFIType.i32 },\n ioctl: { args: [FFIType.i32, FFIType.u64, FFIType.ptr], returns: FFIType.i32 },\n strerror: { args: [FFIType.i32], returns: FFIType.ptr },\n})\n\n// Bun FFI doesn't expose errno directly. We read it from the thread-local.\n// For now, we use __errno_location (Linux) or __error (macOS) to get errno pointer.\nconst errnoLib = dlopen(LIBC_PATH, IS_LINUX\n ? { __errno_location: { args: [], returns: FFIType.ptr } }\n : { __error: { args: [], returns: FFIType.ptr } }\n)\n\nfunction getErrno() {\n const errPtr = IS_LINUX\n ? errnoLib.symbols.__errno_location()\n : errnoLib.symbols.__error()\n const view = new DataView(toArrayBuffer(errPtr, 0, 4))\n return view.getInt32(0, true)\n}\n\nfunction errnoError(syscall) {\n const code = getErrno()\n const msgPtr = libc.symbols.strerror(code)\n const msg = msgPtr ? new CString(msgPtr) : `errno ${code}`\n const err = new Error(`${syscall}: ${msg}`)\n err.code = code\n err.syscall = syscall\n return err\n}\n\n// --- termios struct helpers ---\n\nfunction readFlag(buf, offset) {\n if (TCFLAG_SIZE === 4) {\n return buf.getUint32(offset, true)\n }\n // macOS: 8-byte unsigned long, read lower 32 bits (baud/flag values fit in 32 bits)\n return Number(buf.getBigUint64(offset, true))\n}\n\nfunction writeFlag(buf, offset, value) {\n if (TCFLAG_SIZE === 4) {\n buf.setUint32(offset, value >>> 0, true)\n } else {\n buf.setBigUint64(offset, BigInt(value >>> 0), true)\n }\n}\n\nfunction writeSpeed(buf, offset, value) {\n if (TCFLAG_SIZE === 4) {\n buf.setUint32(offset, value >>> 0, true)\n } else {\n buf.setBigUint64(offset, BigInt(value), true)\n }\n}\n\n// --- Public API ---\n\nexport function openPort(path, options) {\n const {\n baudRate = 9600,\n dataBits = 8,\n stopBits = 1,\n parity = 'none',\n rtscts = false,\n xon = false,\n xoff = false,\n } = options\n\n // Open the device file\n const pathBuf = Buffer.from(path + '\\0', 'utf-8')\n const fd = libc.symbols.open(ptr(pathBuf), O_RDWR | O_NOCTTY | O_NONBLOCK)\n if (fd < 0) throw errnoError('open')\n\n // Get current termios — keep one Uint8Array alive so ptr() stays valid\n const termiosBuf = new ArrayBuffer(TERMIOS_SIZE)\n const termiosBytes = new Uint8Array(termiosBuf)\n const termiosView = new DataView(termiosBuf)\n const termiosPtr = ptr(termiosBytes)\n\n if (libc.symbols.tcgetattr(fd, termiosPtr) < 0) {\n libc.symbols.close(fd)\n throw errnoError('tcgetattr')\n }\n\n const off = TERMIOS_OFFSETS\n\n // Build c_cflag: clear CSIZE, set data bits, enable receiver + local\n let cflag = readFlag(termiosView, off.c_cflag)\n cflag &= ~CSIZE\n cflag |= dataBitsFlag(dataBits)\n cflag |= CREAD | CLOCAL\n\n // Stop bits\n if (stopBits === 2) cflag |= CSTOPB\n else cflag &= ~CSTOPB\n\n // Parity\n if (parity === 'none') {\n cflag &= ~(PARENB | PARODD)\n } else if (parity === 'even') {\n cflag |= PARENB\n cflag &= ~PARODD\n } else if (parity === 'odd') {\n cflag |= PARENB | PARODD\n }\n\n // Hardware flow control\n if (rtscts) cflag |= CRTSCTS\n else cflag &= ~CRTSCTS\n\n writeFlag(termiosView, off.c_cflag, cflag)\n\n // Input flags: raw mode — clear everything\n let iflag = 0\n if (parity !== 'none') iflag |= INPCK\n if (xon) iflag |= IXON\n if (xoff) iflag |= IXOFF\n writeFlag(termiosView, off.c_iflag, iflag)\n\n // Output flags: raw\n writeFlag(termiosView, off.c_oflag, 0)\n\n // Local flags: raw\n writeFlag(termiosView, off.c_lflag, 0)\n\n // Special characters: VMIN=1, VTIME=0 (blocking read until at least 1 byte)\n const ccOffset = off.c_cc\n // Clear all cc\n for (let i = 0; i < NCCS; i++) termiosBytes[ccOffset + i] = 0\n termiosBytes[ccOffset + VMIN] = 1\n termiosBytes[ccOffset + VTIME] = 0\n\n // Set baud rate\n const baudCode = encodeBaudRate(baudRate)\n if (IS_LINUX) {\n // Linux: write speed into c_ispeed and c_ospeed fields, and also\n // use cfsetispeed/cfsetospeed for the flag bits\n writeSpeed(termiosView, off.c_ispeed, baudCode)\n writeSpeed(termiosView, off.c_ospeed, baudCode)\n }\n // Use cfsetispeed/cfsetospeed which handles platform differences\n if (libc.symbols.cfsetispeed(termiosPtr, baudCode) < 0) {\n libc.symbols.close(fd)\n throw errnoError('cfsetispeed')\n }\n if (libc.symbols.cfsetospeed(termiosPtr, baudCode) < 0) {\n libc.symbols.close(fd)\n throw errnoError('cfsetospeed')\n }\n\n // Apply\n if (libc.symbols.tcsetattr(fd, TCSAFLUSH, termiosPtr) < 0) {\n libc.symbols.close(fd)\n throw errnoError('tcsetattr')\n }\n\n // Flush any stale data\n libc.symbols.tcflush(fd, TCIOFLUSH)\n\n return fd\n}\n\nexport function closePort(fd) {\n if (libc.symbols.close(fd) < 0) throw errnoError('close')\n}\n\nconst MAX_EAGAIN_RETRIES = 1000\n\nexport function writePort(fd, data) {\n // data should be Uint8Array or Buffer\n const buf = data instanceof Uint8Array ? data : Buffer.from(data, 'utf-8')\n let offset = 0\n let eagainCount = 0\n while (offset < buf.length) {\n const slice = buf.subarray(offset)\n const written = Number(libc.symbols.write(fd, ptr(slice), BigInt(slice.length)))\n if (written < 0) {\n const code = getErrno()\n if (code === 11 || code === 35) {\n // EAGAIN / EWOULDBLOCK — kernel buffer full\n if (++eagainCount > MAX_EAGAIN_RETRIES) {\n throw new Error('write: device not accepting data (EAGAIN limit exceeded)')\n }\n continue\n }\n throw errnoError('write')\n }\n eagainCount = 0\n offset += written\n }\n return offset\n}\n\nexport function readPort(fd, buffer) {\n // Non-blocking read into the provided buffer\n const n = Number(libc.symbols.read(fd, ptr(buffer), BigInt(buffer.length)))\n if (n < 0) {\n const code = getErrno()\n if (code === 11 || code === 35) return 0 // EAGAIN — no data available\n throw errnoError('read')\n }\n return n\n}\n\nexport function updateBaudRate(fd, baudRate) {\n const termiosBuf = new ArrayBuffer(TERMIOS_SIZE)\n const termiosPtr = ptr(new Uint8Array(termiosBuf))\n\n if (libc.symbols.tcgetattr(fd, termiosPtr) < 0) throw errnoError('tcgetattr')\n\n const baudCode = encodeBaudRate(baudRate)\n if (libc.symbols.cfsetispeed(termiosPtr, baudCode) < 0) throw errnoError('cfsetispeed')\n if (libc.symbols.cfsetospeed(termiosPtr, baudCode) < 0) throw errnoError('cfsetospeed')\n\n if (IS_LINUX) {\n const view = new DataView(termiosBuf)\n writeSpeed(view, TERMIOS_OFFSETS.c_ispeed, baudCode)\n writeSpeed(view, TERMIOS_OFFSETS.c_ospeed, baudCode)\n }\n\n if (libc.symbols.tcsetattr(fd, TCSADRAIN, termiosPtr) < 0) throw errnoError('tcsetattr')\n}\n\nexport function setModemLines(fd, flags) {\n const { dtr, rts, brk } = flags\n const intBuf = new ArrayBuffer(4)\n const intView = new DataView(intBuf)\n const intPtr = ptr(new Uint8Array(intBuf))\n\n // Set lines that are explicitly true\n let bitsToSet = 0\n let bitsToClear = 0\n\n if (dtr === true) bitsToSet |= TIOCM_DTR\n if (dtr === false) bitsToClear |= TIOCM_DTR\n if (rts === true) bitsToSet |= TIOCM_RTS\n if (rts === false) bitsToClear |= TIOCM_RTS\n\n if (bitsToSet) {\n intView.setInt32(0, bitsToSet, true)\n if (libc.symbols.ioctl(fd, TIOCMBIS, intPtr) < 0) throw errnoError('ioctl TIOCMBIS')\n }\n if (bitsToClear) {\n intView.setInt32(0, bitsToClear, true)\n if (libc.symbols.ioctl(fd, TIOCMBIC, intPtr) < 0) throw errnoError('ioctl TIOCMBIC')\n }\n}\n\nexport function getModemLines(fd) {\n const intBuf = new ArrayBuffer(4)\n const intView = new DataView(intBuf)\n const intPtr = ptr(new Uint8Array(intBuf))\n\n if (libc.symbols.ioctl(fd, TIOCMGET, intPtr) < 0) throw errnoError('ioctl TIOCMGET')\n\n const bits = intView.getInt32(0, true)\n return {\n cts: !!(bits & TIOCM_CTS),\n dsr: !!(bits & TIOCM_DSR),\n dcd: !!(bits & TIOCM_CD),\n ri: !!(bits & TIOCM_RI),\n }\n}\n\nexport function flushPort(fd) {\n if (libc.symbols.tcflush(fd, TCIOFLUSH) < 0) throw errnoError('tcflush')\n}\n\nexport function drainPort(fd) {\n if (libc.symbols.tcdrain(fd) < 0) throw errnoError('tcdrain')\n}\n",
8
+ "// SerialPort — EventEmitter-based serial port for Bun.\n// Opens a serial device via POSIX termios FFI, reads in a non-blocking loop,\n// and emits data as Uint8Array chunks.\n\nimport { EventEmitter } from 'node:events'\nimport {\n openPort, closePort, writePort, readPort,\n updateBaudRate, setModemLines, getModemLines,\n flushPort, drainPort\n} from './bindings/posix.js'\n\nconst DEFAULT_READ_BUFFER_SIZE = 65536\nconst DEFAULT_READ_INTERVAL_MS = 1\n\nexport class SerialPort extends EventEmitter {\n #fd = -1\n #path\n #baudRate\n #options\n #isOpen = false\n #isClosing = false\n #readBuf\n #readInterval\n #readTimer = null\n\n constructor(options) {\n super()\n if (!options || !options.path) throw new Error('options.path is required')\n if (!options.baudRate) throw new Error('options.baudRate is required')\n\n this.#path = options.path\n this.#baudRate = options.baudRate\n this.#options = { ...options }\n this.#readBuf = new Uint8Array(options.readBufferSize || DEFAULT_READ_BUFFER_SIZE)\n this.#readInterval = options.readInterval || DEFAULT_READ_INTERVAL_MS\n\n if (options.autoOpen !== false) {\n // Defer to next tick so caller can attach event listeners\n queueMicrotask(() => this.open().catch(err => this.emit('error', err)))\n }\n }\n\n get path() { return this.#path }\n get baudRate() { return this.#baudRate }\n get isOpen() { return this.#isOpen && !this.#isClosing }\n\n async open() {\n if (this.#isOpen) throw new Error('Port is already open')\n\n try {\n this.#fd = openPort(this.#path, this.#options)\n this.#isOpen = true\n this.#isClosing = false\n this.#startReading()\n this.emit('open')\n } catch (err) {\n this.#isOpen = false\n throw err\n }\n }\n\n async close() {\n if (!this.#isOpen) throw new Error('Port is not open')\n if (this.#isClosing) return\n\n this.#isClosing = true\n this.#stopReading()\n\n try {\n closePort(this.#fd)\n } catch (err) {\n this.#isClosing = false\n throw err\n }\n\n this.#fd = -1\n this.#isOpen = false\n this.#isClosing = false\n this.emit('close')\n }\n\n async write(data) {\n if (!this.#isOpen || this.#isClosing) {\n throw new Error('Port is not open')\n }\n\n const buf = typeof data === 'string'\n ? Buffer.from(data, 'utf-8')\n : data\n\n return writePort(this.#fd, buf)\n }\n\n async update(options) {\n if (!this.#isOpen) throw new Error('Port is not open')\n\n if (options.baudRate !== undefined) {\n updateBaudRate(this.#fd, options.baudRate)\n this.#baudRate = options.baudRate\n }\n }\n\n async set(flags) {\n if (!this.#isOpen) throw new Error('Port is not open')\n setModemLines(this.#fd, flags)\n }\n\n async get() {\n if (!this.#isOpen) throw new Error('Port is not open')\n return getModemLines(this.#fd)\n }\n\n async flush() {\n if (!this.#isOpen) throw new Error('Port is not open')\n flushPort(this.#fd)\n }\n\n async drain() {\n if (!this.#isOpen) throw new Error('Port is not open')\n drainPort(this.#fd)\n }\n\n // Wire a parser to receive data events\n pipe(parser) {\n const handler = (chunk) => parser.push(chunk)\n this.on('data', handler)\n parser._unpipe = () => this.off('data', handler)\n return parser\n }\n\n // Detach a previously piped parser\n unpipe(parser) {\n if (parser && typeof parser._unpipe === 'function') {\n parser._unpipe()\n parser._unpipe = undefined\n }\n }\n\n // --- Private ---\n\n #startReading() {\n // Non-blocking read loop using setInterval.\n // Bun doesn't currently expose epoll/kqueue for arbitrary fds,\n // so we poll with a tight interval. 1ms is a good balance for\n // robotics — low latency without busy-spinning.\n this.#readTimer = setInterval(() => {\n if (!this.#isOpen || this.#isClosing) return\n\n try {\n const n = readPort(this.#fd, this.#readBuf)\n if (n > 0) {\n // Emit a copy so the read buffer can be reused\n const data = this.#readBuf.slice(0, n)\n this.emit('data', data)\n }\n } catch (err) {\n err.disconnected = true\n this.emit('error', err)\n this.close().catch(() => {})\n }\n }, this.#readInterval)\n }\n\n #stopReading() {\n if (this.#readTimer !== null) {\n clearInterval(this.#readTimer)\n this.#readTimer = null\n }\n }\n}\n",
9
+ "// Enumerate available serial ports.\n// Linux: scan /sys/class/tty and /dev/\n// macOS: scan /dev/ for cu.* and tty.* devices\n\nimport { platform } from 'node:os'\nimport { readdir, readlink, access } from 'node:fs/promises'\nimport { join } from 'node:path'\n\nconst IS_LINUX = platform() === 'linux'\n\nasync function exists(path) {\n try { await access(path); return true } catch { return false }\n}\n\nasync function readFileQuiet(path) {\n try { return (await Bun.file(path).text()).trim() } catch { return '' }\n}\n\nasync function listLinux() {\n const ttys = await readdir('/sys/class/tty').catch(() => [])\n\n // Filter to real serial devices in parallel\n const checks = ttys.map(async (name) => {\n const sysPath = `/sys/class/tty/${name}`\n const devicePath = join(sysPath, 'device')\n if (!await exists(devicePath)) return null\n\n const devPath = `/dev/${name}`\n if (!await exists(devPath)) return null\n\n return { name, devPath, devicePath }\n })\n\n const valid = (await Promise.all(checks)).filter(Boolean)\n\n // Read USB metadata in parallel for each valid port\n const ports = await Promise.all(valid.map(async ({ devPath, devicePath }) => {\n const info = { path: devPath }\n\n const subsystem = await readlink(join(devicePath, 'subsystem')).catch(() => '')\n if (subsystem.includes('usb-serial') || subsystem.includes('usb')) {\n const usbDevice = await findUsbParent(devicePath)\n if (usbDevice) {\n const [manufacturer, serialNumber, vendorId, productId, product] = await Promise.all([\n readFileQuiet(join(usbDevice, 'manufacturer')),\n readFileQuiet(join(usbDevice, 'serial')),\n readFileQuiet(join(usbDevice, 'idVendor')),\n readFileQuiet(join(usbDevice, 'idProduct')),\n readFileQuiet(join(usbDevice, 'product')),\n ])\n info.manufacturer = manufacturer\n info.serialNumber = serialNumber\n info.vendorId = vendorId\n info.productId = productId\n info.product = product\n }\n }\n\n return info\n }))\n\n return ports\n}\n\nasync function findUsbParent(devicePath) {\n let current = devicePath\n for (let i = 0; i < 10; i++) {\n current = join(current, '..')\n if (await exists(join(current, 'idVendor'))) return current\n }\n return null\n}\n\nasync function listDarwin() {\n const devFiles = await readdir('/dev').catch(() => [])\n const seen = new Map() // device suffix -> port info\n\n for (const name of devFiles) {\n if (!name.startsWith('cu.') && !name.startsWith('tty.')) continue\n if (name === 'tty') continue\n\n const isCu = name.startsWith('cu.')\n const suffix = name.slice(isCu ? 3 : 4)\n\n // Prefer cu.* over tty.* (cu.* doesn't wait for carrier detect)\n if (seen.has(suffix) && !isCu) continue\n\n seen.set(suffix, { path: `/dev/${name}` })\n }\n\n return [...seen.values()]\n}\n\nexport async function list() {\n return IS_LINUX ? listLinux() : listDarwin()\n}\n",
10
+ "// Delimiter parser — splits incoming data on a delimiter byte or byte sequence.\n// Emits complete messages (without the delimiter) via EventEmitter 'data' event.\n\nimport { EventEmitter } from 'node:events'\n\nexport function delimiterParser(options = {}) {\n const { delimiter = 0x0a, includeDelimiter = false } = options\n\n // Normalize delimiter to Uint8Array\n const delim = typeof delimiter === 'number'\n ? new Uint8Array([delimiter])\n : typeof delimiter === 'string'\n ? new TextEncoder().encode(delimiter)\n : new Uint8Array(delimiter)\n\n const emitter = new EventEmitter()\n let buf = new Uint8Array(256)\n let len = 0\n\n function ensureCapacity(needed) {\n if (needed <= buf.length) return\n let cap = buf.length\n while (cap < needed) cap *= 2\n const next = new Uint8Array(cap)\n next.set(buf.subarray(0, len))\n buf = next\n }\n\n function push(chunk) {\n ensureCapacity(len + chunk.length)\n buf.set(chunk, len)\n len += chunk.length\n\n // Scan for delimiter\n let start = 0\n while (start <= len - delim.length) {\n const idx = findDelimiter(buf, delim, start, len)\n if (idx === -1) break\n\n const end = includeDelimiter ? idx + delim.length : idx\n if (end > start) {\n emitter.emit('data', buf.slice(start, end))\n }\n start = idx + delim.length\n }\n\n // Compact remainder\n if (start > 0) {\n const remaining = len - start\n if (remaining > 0) buf.copyWithin(0, start, len)\n len = remaining\n }\n }\n\n emitter.push = push\n return emitter\n}\n\nfunction findDelimiter(haystack, needle, start, haystackLen) {\n if (needle.length === 1) {\n const byte = needle[0]\n for (let i = start; i < haystackLen; i++) {\n if (haystack[i] === byte) return i\n }\n return -1\n }\n const limit = haystackLen - needle.length\n outer: for (let i = start; i <= limit; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) continue outer\n }\n return i\n }\n return -1\n}\n",
11
+ "// Byte-length parser — emits chunks of exactly N bytes.\n\nimport { EventEmitter } from 'node:events'\n\nexport function byteLengthParser(options = {}) {\n const { length = 1 } = options\n if (length < 1) throw new Error('length must be >= 1')\n\n const emitter = new EventEmitter()\n let buf = new Uint8Array(Math.max(length * 2, 256))\n let len = 0\n\n function ensureCapacity(needed) {\n if (needed <= buf.length) return\n let cap = buf.length\n while (cap < needed) cap *= 2\n const next = new Uint8Array(cap)\n next.set(buf.subarray(0, len))\n buf = next\n }\n\n function push(chunk) {\n ensureCapacity(len + chunk.length)\n buf.set(chunk, len)\n len += chunk.length\n\n while (len >= length) {\n emitter.emit('data', buf.slice(0, length))\n const remaining = len - length\n if (remaining > 0) buf.copyWithin(0, length, len)\n len = remaining\n }\n }\n\n emitter.push = push\n return emitter\n}\n",
12
+ "// Readline parser — convenience wrapper around delimiter parser.\n// Splits on newline, returns strings.\n\nimport { delimiterParser } from './delimiter.js'\n\nexport function readlineParser(options = {}) {\n const { delimiter = '\\n', encoding = 'utf-8' } = options\n const inner = delimiterParser({ delimiter })\n const decoder = new TextDecoder(encoding)\n\n // Wrap the inner emitter to decode data to string\n const origOn = inner.on.bind(inner)\n const origOnce = inner.once.bind(inner)\n const origOff = inner.off.bind(inner)\n const listeners = new Map()\n\n function wrapFn(fn) {\n const wrapped = (buf) => fn(decoder.decode(buf))\n listeners.set(fn, wrapped)\n return wrapped\n }\n\n inner.on = function (event, fn) {\n if (event === 'data') return origOn('data', wrapFn(fn))\n return origOn(event, fn)\n }\n\n inner.once = function (event, fn) {\n if (event === 'data') return origOnce('data', wrapFn(fn))\n return origOnce(event, fn)\n }\n\n inner.off = function (event, fn) {\n if (event === 'data' && listeners.has(fn)) {\n const wrapped = listeners.get(fn)\n listeners.delete(fn)\n return origOff('data', wrapped)\n }\n return origOff(event, fn)\n }\n\n // Alias removeListener to off for full EventEmitter compat\n inner.removeListener = inner.off\n\n return inner\n}\n",
13
+ "export { delimiterParser } from './delimiter.js'\nexport { byteLengthParser } from './byte-length.js'\nexport { readlineParser } from './readline.js'\n",
14
+ "export { SerialPort } from './serialport.js'\nexport { list } from './list.js'\nexport { delimiterParser, byteLengthParser, readlineParser } from './parsers/index.js'\n",
15
+ "function toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nexport default function (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n",
16
+ "import e from\"mri\";const t=\"__all__\",i=\"__default__\",s=\"\\n\";function r(e){if(!e.length)return\"\";let t=function(e){let t=0,i=0,s=0,r=e.length;if(r)for(;r--;)i=e[r].length,i>t&&(s=r,t=i);return e[s].length}(e.map(e=>e[0]))+4;return e.map(e=>e[0]+\" \".repeat(t-e[0].length)+e[1]+(null==e[2]?\"\":` (default ${e[2]})`))}function n(e){return e}function l(e,t,i){if(!t||!t.length)return\"\";let r=0,n=\"\";for(n+=\"\\n \"+e;r<t.length;r++)n+=\"\\n \"+i(t[r]);return n+s}function a(e,t,i=1){let s=l(\"ERROR\",[t],n);s+=`\\n Run \\`$ ${e} --help\\` for more info.\\n`,console.error(s),process.exit(i)}class o{constructor(e,s){let[r,...n]=e.split(/\\s+/);s=s||n.length>0,this.bin=r,this.ver=\"0.0.0\",this.default=\"\",this.tree={},this.command(t),this.command([i].concat(s?n:\"<command>\").join(\" \")),this.single=s,this.curr=\"\"}command(e,t,i={}){if(this.single)throw new Error('Disable \"single\" mode to add commands');let s=[],r=[],n=/(\\[|<)/;if(e.split(/\\s+/).forEach(e=>{(n.test(e.charAt(0))?r:s).push(e)}),s=s.join(\" \"),s in this.tree)throw new Error(\"Command already exists: \"+s);return s.includes(\"__\")||r.unshift(s),r=r.join(\" \"),this.curr=s,i.default&&(this.default=s),this.tree[s]={usage:r,alibi:[],options:[],alias:{},default:{},examples:[]},i.alias&&this.alias(i.alias),t&&this.describe(t),this}describe(e){return this.tree[this.curr||i].describe=Array.isArray(e)?e:function(e){return(e||\"\").replace(/([.?!])\\s*(?=[A-Z])/g,\"$1|\").split(\"|\")}(e),this}alias(...e){if(this.single)throw new Error('Cannot call `alias()` in \"single\" mode');if(!this.curr)throw new Error(\"Cannot call `alias()` before defining a command\");return(this.tree[this.curr].alibi=this.tree[this.curr].alibi.concat(...e)).forEach(e=>this.tree[e]=this.curr),this}option(e,i,s){let r=this.tree[this.curr||t],[n,l]=function(e){return(e||\"\").split(/^-{1,2}|,|\\s+-{1,2}|\\s+/).filter(Boolean)}(e);if(l&&l.length>1&&([n,l]=[l,n]),e=\"--\"+n,l&&l.length>0){e=`-${l}, ${e}`;let t=r.alias[l];r.alias[l]=(t||[]).concat(n)}let a=[e,i||\"\"];return void 0!==s?(a.push(s),r.default[n]=s):l||(r.default[n]=void 0),r.options.push(a),this}action(e){return this.tree[this.curr||i].handler=e,this}example(e){return this.tree[this.curr||i].examples.push(e),this}version(e){return this.ver=e,this}parse(s,r={}){s=s.slice();let n,l,o,h,u=2,f=e(s.slice(u),{alias:{h:\"help\",v:\"version\"}}),c=this.single,p=this.bin,d=\"\";if(c)h=this.tree[i];else{let e,t=1,i=f._.length+1;for(;t<i;t++)if(n=f._.slice(0,t).join(\" \"),e=this.tree[n],\"string\"==typeof e)l=(d=e).split(\" \"),s.splice(s.indexOf(f._[0]),t,...l),t+=l.length-t;else if(e)d=n;else if(d)break;if(h=this.tree[d],o=void 0===h,o)if(this.default)d=this.default,h=this.tree[d],s.unshift(d),u++;else if(n)return a(p,\"Invalid command: \"+n)}if(f.help)return this.help(!c&&!o&&d);if(f.version)return this._version();if(!c&&void 0===h)return a(p,\"No command specified.\");let g=this.tree[t];r.alias=Object.assign(g.alias,h.alias,r.alias),r.default=Object.assign(g.default,h.default,r.default),n=d.split(\" \"),l=s.indexOf(n[0],2),~l&&s.splice(l,n.length);let m=e(s.slice(u),r);if(!m||\"string\"==typeof m)return a(p,m||\"Parsed unknown option flag(s)!\");let b=h.usage.split(/\\s+/),_=b.filter(e=>\"<\"===e.charAt(0)),v=m._.splice(0,_.length);if(v.length<_.length)return d&&(p+=\" \"+d),a(p,\"Insufficient arguments!\");b.filter(e=>\"[\"===e.charAt(0)).forEach(e=>{v.push(m._.shift())}),v.push(m);let $=h.handler;return r.lazy?{args:v,name:d,handler:$}:$.apply(null,v)}help(e){console.log(function(e,a,o,h){let u=\"\",f=a[o],c=\"$ \"+e,p=a[t],d=e=>`${c} ${e}`.replace(/\\s+/g,\" \"),g=[[\"-h, --help\",\"Displays this message\"]];if(o===i&&g.unshift([\"-v, --version\",\"Displays current version\"]),f.options=(f.options||[]).concat(p.options,g),f.options.length>0&&(f.usage+=\" [options]\"),u+=l(\"Description\",f.describe,n),u+=l(\"Usage\",[f.usage],d),h||o!==i)h||o===i||(u+=l(\"Aliases\",f.alibi,d));else{let e,t=/^__/,i=\"\",o=[];for(e in a)\"string\"==typeof a[e]||t.test(e)||o.push([e,(a[e].describe||[\"\"])[0]])<3&&(i+=`\\n ${c} ${e} --help`);u+=l(\"Available Commands\",r(o),n),u+=\"\\n For more info, run any command with the `--help` flag\"+i+s}return u+=l(\"Options\",r(f.options),n),u+=l(\"Examples\",f.examples.map(d),n),u}(this.bin,this.tree,e||i,this.single))}_version(){console.log(`${this.bin}, ${this.ver}`)}}export default(e,t)=>new o(e,t);\n",
17
+ "// src/Column.ts\nvar Column = class {\n constructor(options = {}) {\n this.minWidth = 1;\n this.align = \"left\";\n this.vAlign = \"top\";\n this.paddingLeft = 1;\n this.paddingRight = 1;\n this.truncate = \"...\";\n this.wrapWord = true;\n this.priority = 100;\n this.hidden = false;\n this.name = options.name || \"\";\n this.key = options.key || this.name;\n this.width = options.width;\n if (options.minWidth !== void 0) this.minWidth = options.minWidth;\n if (options.maxWidth !== void 0) this.maxWidth = options.maxWidth;\n if (options.align) this.align = options.align;\n if (options.vAlign) this.vAlign = options.vAlign;\n if (options.paddingLeft !== void 0) this.paddingLeft = options.paddingLeft;\n if (options.paddingRight !== void 0) this.paddingRight = options.paddingRight;\n if (options.truncate !== void 0) this.truncate = options.truncate;\n if (options.wrapWord !== void 0) this.wrapWord = options.wrapWord;\n if (options.priority !== void 0) this.priority = options.priority;\n if (options.hidden !== void 0) this.hidden = options.hidden;\n if (options.color !== void 0) this.color = options.color;\n if (options.formatter !== void 0) this.formatter = options.formatter;\n }\n};\n\n// src/Cell.ts\nvar Cell = class {\n constructor(content) {\n this.colSpan = 1;\n this.rowSpan = 1;\n this.merged = false;\n if (typeof content === \"object\" && content !== null && \"content\" in content) {\n this.content = content.content;\n this.colSpan = content.colSpan || 1;\n this.rowSpan = content.rowSpan || 1;\n this.align = content.align;\n this.vAlign = content.vAlign;\n this.color = content.color;\n } else {\n this.content = content;\n }\n }\n getString() {\n return this.content === void 0 || this.content === null ? \"\" : String(this.content);\n }\n};\n\n// src/Row.ts\nvar Row = class {\n constructor(data, table) {\n this.cells = [];\n this.table = table;\n this.originalData = data;\n this.parseData(data);\n }\n getData() {\n return this.originalData;\n }\n parseData(data) {\n if (Array.isArray(data)) {\n data.forEach((val) => this.cells.push(new Cell(val)));\n return;\n }\n if (this.table.columns.length === 0) {\n Object.keys(data).forEach((key) => this.table.addColumn({ name: key, key }));\n }\n this.table.columns.forEach((column) => {\n this.cells.push(new Cell(data[column.key]));\n });\n }\n};\n\n// src/LayoutManager.ts\nvar LayoutManager = class {\n static layout(table) {\n const grid = [];\n const occupied = {};\n const isOccupied = (x, y) => occupied[`${x},${y}`];\n const markOccupied = (x, y) => occupied[`${x},${y}`] = true;\n let maxColumns = table.columns.length || 0;\n table.rows.forEach((row, rowIndex) => {\n if (!grid[rowIndex]) grid[rowIndex] = [];\n let colIndex = 0;\n row.cells.forEach((cell) => {\n while (isOccupied(colIndex, rowIndex)) {\n colIndex++;\n }\n if (cell.merged) return;\n if (table.columns.length && colIndex + cell.colSpan > table.columns.length) {\n throw new Error(\n `Row ${rowIndex} exceeds defined column count (${table.columns.length}).`\n );\n }\n for (let r = 0; r < cell.rowSpan; r++) {\n for (let c = 0; c < cell.colSpan; c++) {\n if (isOccupied(colIndex + c, rowIndex + r)) {\n throw new Error(`Cell span conflict at row ${rowIndex}, col ${colIndex}.`);\n }\n }\n }\n const gridCell = {\n cell,\n x: colIndex,\n y: rowIndex,\n realColSpan: cell.colSpan,\n realRowSpan: cell.rowSpan\n };\n grid[rowIndex][colIndex] = gridCell;\n for (let r = 0; r < cell.rowSpan; r++) {\n for (let c = 0; c < cell.colSpan; c++) {\n markOccupied(colIndex + c, rowIndex + r);\n if (r === 0 && c === 0) continue;\n if (!grid[rowIndex + r]) grid[rowIndex + r] = [];\n grid[rowIndex + r][colIndex + c] = {\n cell: gridCell.cell,\n x: colIndex + c,\n y: rowIndex + r,\n realColSpan: gridCell.realColSpan,\n realRowSpan: gridCell.realRowSpan,\n hidden: true\n };\n }\n }\n colIndex += cell.colSpan;\n maxColumns = Math.max(maxColumns, colIndex);\n });\n });\n const columnCount = table.columns.length || maxColumns;\n for (let r = 0; r < grid.length; r++) {\n if (!grid[r]) grid[r] = [];\n for (let c = 0; c < columnCount; c++) {\n if (grid[r][c]) continue;\n if (isOccupied(c, r)) {\n grid[r][c] = {\n cell: new Cell(\"\"),\n x: c,\n y: r,\n realColSpan: 1,\n realRowSpan: 1,\n hidden: true\n };\n continue;\n }\n grid[r][c] = {\n cell: new Cell(\"\"),\n x: c,\n y: r,\n realColSpan: 1,\n realRowSpan: 1\n };\n }\n }\n return grid;\n }\n};\n\n// src/utils/textUtils.ts\nvar ANSI_REGEX = new RegExp(\n [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\"),\n \"g\"\n);\nfunction stripAnsi(str) {\n return str.replace(ANSI_REGEX, \"\");\n}\nfunction isEmoji(cp) {\n return 128512 <= cp && cp <= 128591 || // Emoticons\n 127744 <= cp && cp <= 128511 || // Misc Symbols & Pictographs\n 128640 <= cp && cp <= 128767 || // Transport & Map\n 129280 <= cp && cp <= 129535 || // Supplemental Symbols & Pictographs\n 129536 <= cp && cp <= 129647 || // Chess Symbols\n 129648 <= cp && cp <= 129791 || // Symbols & Pictographs Extended-A\n 126980 === cp || // Mahjong Red Dragon\n 127183 === cp || // Playing Card Black Joker\n 127344 <= cp && cp <= 127345 || // Neg Squared A/B\n 127358 <= cp && cp <= 127359 || // Neg Squared O/P\n 127374 === cp || // Neg Squared AB\n 127377 <= cp && cp <= 127386 || // Squared CL..VS\n 127456 <= cp && cp <= 127487 || // Regional Indicators (flags)\n 8986 <= cp && cp <= 8987 || // Watch, Hourglass\n 9193 <= cp && cp <= 9203 || // Media symbols\n 9208 <= cp && cp <= 9210 || // Pause, Record\n 9642 <= cp && cp <= 9643 || // Small squares\n cp === 9654 || // Play button\n cp === 9664 || // Reverse play\n 9723 <= cp && cp <= 9726 || // Medium squares\n 9728 <= cp && cp <= 9983 || // Misc Symbols\n 9984 <= cp && cp <= 10175 || // Dingbats\n 10548 <= cp && cp <= 10549 || // Arrows\n 11013 <= cp && cp <= 11015 || // Arrows\n 11035 <= cp && cp <= 11036 || // Large squares\n cp === 11088 || // Star\n cp === 11093 || // Circle\n cp === 12336 || // Wavy dash\n cp === 12349 || // Part alternation mark\n cp === 12951 || // Circled Ideograph Congratulation\n cp === 12953;\n}\nfunction isZeroWidth(cp) {\n return cp === 8203 || // Zero-width space\n cp === 8204 || // Zero-width non-joiner\n cp === 8205 || // Zero-width joiner (ZWJ)\n cp === 8206 || // Left-to-right mark\n cp === 8207 || // Right-to-left mark\n cp === 65279 || // Zero-width no-break space (BOM)\n 65024 <= cp && cp <= 65039 || // Variation Selectors\n 917760 <= cp && cp <= 917999 || // Variation Selectors Supplement\n 127995 <= cp && cp <= 127999 || // Skin tone modifiers\n 8400 <= cp && cp <= 8447 || // Combining Diacritical Marks for Symbols\n 917536 <= cp && cp <= 917631;\n}\nfunction isFullWidth(codePoint) {\n if (codePoint >= 4352 && (codePoint <= 4447 || // Hangul Jamo\n codePoint === 9001 || // LEFT-POINTING ANGLE BRACKET\n codePoint === 9002 || // RIGHT-POINTING ANGLE BRACKET\n // CJK Radicals Supplement .. Enclosed CJK Letters and Months\n 11904 <= codePoint && codePoint <= 12871 && codePoint !== 12351 || // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n 12880 <= codePoint && codePoint <= 19903 || // CJK Unified Ideographs .. Yi Radicals\n 19968 <= codePoint && codePoint <= 42182 || // Hangul Jamo Extended-A\n 43360 <= codePoint && codePoint <= 43388 || // Hangul Syllables\n 44032 <= codePoint && codePoint <= 55203 || // CJK Compatibility Ideographs\n 63744 <= codePoint && codePoint <= 64255 || // Vertical Forms\n 65040 <= codePoint && codePoint <= 65049 || // CJK Compatibility Forms .. Small Form Variants\n 65072 <= codePoint && codePoint <= 65131 || // Halfwidth and Fullwidth Forms\n 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510 || // Kana Supplement\n 110592 <= codePoint && codePoint <= 110593 || // Enclosed Ideographic Supplement\n 127488 <= codePoint && codePoint <= 127569 || // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n 131072 <= codePoint && codePoint <= 262141)) {\n return true;\n }\n return false;\n}\nfunction stringWidth(str) {\n const stripped = stripAnsi(str);\n let width = 0;\n let inEmojiZwjSequence = false;\n for (let i = 0; i < stripped.length; i++) {\n const code = stripped.codePointAt(i);\n if (!code) continue;\n if (code > 65535) {\n i++;\n }\n if (code <= 31 || 127 <= code && code <= 159) {\n continue;\n }\n if (code === 8205) {\n inEmojiZwjSequence = true;\n continue;\n }\n if (isZeroWidth(code)) {\n continue;\n }\n if (isEmoji(code)) {\n if (inEmojiZwjSequence) {\n inEmojiZwjSequence = false;\n continue;\n }\n width += 2;\n continue;\n }\n if (isFullWidth(code)) {\n width += 2;\n } else {\n width += 1;\n }\n inEmojiZwjSequence = false;\n }\n return width;\n}\n\n// src/utils/colors.ts\nvar CODES = {\n reset: [0, 0],\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49]\n};\nfunction colorize(text, color) {\n if (!color || !CODES[color]) return text;\n const [start, end] = CODES[color];\n return `\\x1B[${start}m${text}\\x1B[${end}m`;\n}\n\n// src/renderers/CsvRenderer.ts\nvar CsvRenderer = class {\n constructor(options = {}) {\n this.delimiter = options.delimiter || \",\";\n this.quote = options.quote || '\"';\n this.includeHeader = options.includeHeader !== false;\n }\n render(table) {\n const visibleIndices = table.columns.map((column, index) => ({ column, index })).filter((item) => !item.column.hidden);\n const rows = [];\n if (this.includeHeader) {\n rows.push(this.drawRow(visibleIndices.map((item) => item.column.name)));\n }\n rows.push(\n ...table.rows.map(\n (row) => this.drawRow(visibleIndices.map((item) => row.cells[item.index]?.getString() ?? \"\"))\n )\n );\n return rows.join(\"\\n\");\n }\n drawRow(values) {\n return values.map((value) => this.escape(value)).join(this.delimiter);\n }\n escape(value) {\n if (value.includes(this.delimiter) || value.includes(this.quote) || value.includes(\"\\n\")) {\n return this.quote + value.replace(new RegExp(this.quote, \"g\"), this.quote + this.quote) + this.quote;\n }\n return value;\n }\n};\n\n// src/renderers/JsonRenderer.ts\nvar JsonRenderer = class {\n render(table) {\n const visibleColumns = table.columns.map((column, index) => ({ column, index })).filter((item) => !item.column.hidden);\n const data = table.rows.map((row) => {\n const obj = {};\n visibleColumns.forEach(({ column, index }) => {\n obj[column.key || column.name] = row.cells[index]?.content;\n });\n return obj;\n });\n return JSON.stringify(data, null, 2);\n }\n};\n\n// src/renderers/HtmlRenderer.ts\nvar escapeHtml = (value) => value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#39;\");\nvar HtmlRenderer = class {\n render(table) {\n const visible = table.columns.map((column, index) => ({ column, index })).filter((item) => !item.column.hidden);\n const head = `<thead><tr>${visible.map((item) => `<th>${escapeHtml(item.column.name)}</th>`).join(\"\")}</tr></thead>`;\n const bodyRows = table.rows.map(\n (row) => `<tr>${visible.map((item) => `<td>${escapeHtml(row.cells[item.index]?.getString() ?? \"\")}</td>`).join(\"\")}</tr>`\n ).join(\"\");\n return `<table>${head}<tbody>${bodyRows}</tbody></table>`;\n }\n};\n\n// src/renderers/MarkdownRenderer.ts\nvar MarkdownRenderer = class {\n render(table) {\n const cols = table.columns.filter((column) => !column.hidden);\n const header = this.drawRow(cols.map((column) => new Cell(column.name)));\n const separator = \"| \" + cols.map((column) => this.alignRule(column.align)).join(\" | \") + \" |\";\n const body = table.rows.map((row) => this.drawRow(row.cells.filter((_, idx) => !table.columns[idx]?.hidden))).join(\"\\n\");\n return [header, separator, body].filter(Boolean).join(\"\\n\");\n }\n drawRow(cells) {\n return \"| \" + cells.map((cell) => cell.getString().replace(/\\|/g, \"\\\\|\")).join(\" | \") + \" |\";\n }\n alignRule(align = \"left\") {\n if (align === \"center\") return \":---:\";\n if (align === \"right\") return \"---:\";\n return \":---\";\n }\n};\n\n// src/themes/Theme.ts\nvar THEME_DEFAULT = {\n topBody: \"-\",\n topJoin: \"+\",\n topLeft: \"+\",\n topRight: \"+\",\n bottomBody: \"-\",\n bottomJoin: \"+\",\n bottomLeft: \"+\",\n bottomRight: \"+\",\n bodyLeft: \"|\",\n bodyRight: \"|\",\n bodyJoin: \"|\",\n joinBody: \"-\",\n joinLeft: \"+\",\n joinRight: \"+\",\n joinJoin: \"+\"\n};\nvar THEME_Honeywell = {\n topBody: \"\\u2550\",\n topJoin: \"\\u2564\",\n topLeft: \"\\u2554\",\n topRight: \"\\u2557\",\n bottomBody: \"\\u2550\",\n bottomJoin: \"\\u2567\",\n bottomLeft: \"\\u255A\",\n bottomRight: \"\\u255D\",\n bodyLeft: \"\\u2551\",\n bodyRight: \"\\u2551\",\n bodyJoin: \"\\u2502\",\n joinBody: \"\\u2500\",\n joinLeft: \"\\u255F\",\n joinRight: \"\\u2562\",\n joinJoin: \"\\u253C\"\n};\nvar THEME_Norc = {\n topBody: \"\\u2500\",\n topJoin: \"\\u252C\",\n topLeft: \"\\u250C\",\n topRight: \"\\u2510\",\n bottomBody: \"\\u2500\",\n bottomJoin: \"\\u2534\",\n bottomLeft: \"\\u2514\",\n bottomRight: \"\\u2518\",\n bodyLeft: \"\\u2502\",\n bodyRight: \"\\u2502\",\n bodyJoin: \"\\u2502\",\n joinBody: \"\\u2500\",\n joinLeft: \"\\u251C\",\n joinRight: \"\\u2524\",\n joinJoin: \"\\u253C\"\n};\nvar THEME_Ramac = {\n topBody: \"\\u2501\",\n topJoin: \"\\u2533\",\n topLeft: \"\\u250F\",\n topRight: \"\\u2513\",\n bottomBody: \"\\u2501\",\n bottomJoin: \"\\u253B\",\n bottomLeft: \"\\u2517\",\n bottomRight: \"\\u251B\",\n bodyLeft: \"\\u2503\",\n bodyRight: \"\\u2503\",\n bodyJoin: \"\\u2502\",\n joinBody: \"\\u2500\",\n joinLeft: \"\\u2523\",\n joinRight: \"\\u252B\",\n joinJoin: \"\\u254B\"\n};\nvar THEME_Void = {\n topBody: \"\",\n topJoin: \"\",\n topLeft: \"\",\n topRight: \"\",\n bottomBody: \"\",\n bottomJoin: \"\",\n bottomLeft: \"\",\n bottomRight: \"\",\n bodyLeft: \"\",\n bodyRight: \"\",\n bodyJoin: \" \",\n joinBody: \"\",\n joinLeft: \"\",\n joinRight: \"\",\n joinJoin: \"\"\n};\nvar THEME_Rounded = {\n topBody: \"\\u2500\",\n topJoin: \"\\u252C\",\n topLeft: \"\\u256D\",\n topRight: \"\\u256E\",\n bottomBody: \"\\u2500\",\n bottomJoin: \"\\u2534\",\n bottomLeft: \"\\u2570\",\n bottomRight: \"\\u256F\",\n bodyLeft: \"\\u2502\",\n bodyRight: \"\\u2502\",\n bodyJoin: \"\\u2502\",\n joinBody: \"\\u2500\",\n joinLeft: \"\\u251C\",\n joinRight: \"\\u2524\",\n joinJoin: \"\\u253C\"\n};\nvar THEME_DoubleLine = {\n topBody: \"\\u2550\",\n topJoin: \"\\u2566\",\n topLeft: \"\\u2554\",\n topRight: \"\\u2557\",\n bottomBody: \"\\u2550\",\n bottomJoin: \"\\u2569\",\n bottomLeft: \"\\u255A\",\n bottomRight: \"\\u255D\",\n bodyLeft: \"\\u2551\",\n bodyRight: \"\\u2551\",\n bodyJoin: \"\\u2551\",\n joinBody: \"\\u2550\",\n joinLeft: \"\\u2560\",\n joinRight: \"\\u2563\",\n joinJoin: \"\\u256C\"\n};\nvar THEME_BoldBox = {\n topBody: \"\\u2501\",\n topJoin: \"\\u2533\",\n topLeft: \"\\u250F\",\n topRight: \"\\u2513\",\n bottomBody: \"\\u2501\",\n bottomJoin: \"\\u253B\",\n bottomLeft: \"\\u2517\",\n bottomRight: \"\\u251B\",\n bodyLeft: \"\\u2503\",\n bodyRight: \"\\u2503\",\n bodyJoin: \"\\u2503\",\n joinBody: \"\\u2501\",\n joinLeft: \"\\u2523\",\n joinRight: \"\\u252B\",\n joinJoin: \"\\u254B\"\n};\nvar THEME_Dots = {\n topBody: \"\\xB7\",\n topJoin: \"\\xB7\",\n topLeft: \"\\xB7\",\n topRight: \"\\xB7\",\n bottomBody: \"\\xB7\",\n bottomJoin: \"\\xB7\",\n bottomLeft: \"\\xB7\",\n bottomRight: \"\\xB7\",\n bodyLeft: \":\",\n bodyRight: \":\",\n bodyJoin: \":\",\n joinBody: \"\\xB7\",\n joinLeft: \":\",\n joinRight: \":\",\n joinJoin: \":\"\n};\nvar BUILTIN_THEMES = {\n default: THEME_DEFAULT,\n honeywell: THEME_Honeywell,\n norc: THEME_Norc,\n ramac: THEME_Ramac,\n void: THEME_Void,\n rounded: THEME_Rounded,\n doubleLine: THEME_DoubleLine,\n boldBox: THEME_BoldBox,\n dots: THEME_Dots,\n doubleHeader: {\n ...THEME_DEFAULT,\n topBody: \"\\u2550\",\n topJoin: \"\\u2564\",\n topLeft: \"\\u2552\",\n topRight: \"\\u2555\",\n joinBody: \"\\u2550\",\n joinLeft: \"\\u255E\",\n joinRight: \"\\u2561\",\n joinJoin: \"\\u256A\"\n },\n thinRounded: THEME_Rounded\n};\nfunction getTheme(name) {\n return BUILTIN_THEMES[name];\n}\n\n// src/Table.ts\nvar Table = class _Table {\n constructor(options = {}) {\n this.columns = [];\n this.rows = [];\n this.compact = false;\n this.responsiveMode = \"none\";\n this.zebra = false;\n this.headerGroups = [];\n this.theme = options.theme || THEME_Rounded;\n this.compact = Boolean(options.compact);\n this.terminalWidth = options.terminalWidth;\n this.responsiveMode = options.responsiveMode || \"none\";\n this.zebra = Boolean(options.zebra);\n this.headerGroups = options.headerGroups || [];\n this.headerColor = options.headerColor || \"magenta\";\n this.rowColor = options.rowColor;\n this.drawHorizontalLine = options.drawHorizontalLine;\n if (options.columns) {\n options.columns.forEach((col) => this.addColumn(col));\n }\n }\n addColumn(options) {\n const colOptions = typeof options === \"string\" ? { name: options, key: options } : options;\n if (this.columns.length === 0 && colOptions.color === void 0) {\n colOptions.color = \"cyan\";\n }\n const col = new Column(colOptions);\n this.columns.push(col);\n return col;\n }\n setColumns(columns) {\n this.columns = [];\n columns.forEach((column) => this.addColumn(column));\n return this;\n }\n addRow(data) {\n const row = new Row(data, this);\n this.rows.push(row);\n return row;\n }\n addRows(rows) {\n rows.forEach((row) => this.addRow(row));\n return this;\n }\n setFooter(footer) {\n this.footer = footer;\n return this;\n }\n summarize(columns, op = \"sum\") {\n const footer = this.footer && !Array.isArray(this.footer) ? { ...this.footer } : {};\n columns.forEach((name) => {\n const colIndex = this.columns.findIndex((c) => c.name === name || c.key === name);\n if (colIndex < 0) return;\n const values = this.rows.map((row) => Number(row.cells[colIndex]?.content)).filter((value) => Number.isFinite(value));\n if (op === \"count\") footer[name] = values.length;\n else if (op === \"avg\")\n footer[name] = values.length ? Number((values.reduce((a, b) => a + b, 0) / values.length).toFixed(2)) : 0;\n else footer[name] = values.reduce((a, b) => a + b, 0);\n });\n this.footer = footer;\n return this;\n }\n paginate(page, pageSize) {\n const start = Math.max(0, (page - 1) * pageSize);\n const end = start + pageSize;\n const next = new _Table({\n theme: this.theme,\n compact: this.compact,\n terminalWidth: this.terminalWidth,\n responsiveMode: this.responsiveMode,\n zebra: this.zebra,\n headerGroups: this.headerGroups,\n columns: this.columns.map((column) => ({ ...column }))\n });\n next.rows = this.rows.slice(start, end);\n next.footer = this.footer;\n return next;\n }\n render() {\n const renderer = new StringRenderer();\n return renderer.render(this);\n }\n getPages(pageSize) {\n const pages = [];\n const totalPages = Math.ceil(this.rows.length / pageSize);\n for (let i = 1; i <= totalPages; i++) {\n pages.push(this.paginate(i, pageSize));\n }\n return pages;\n }\n export(format, options = {}) {\n switch (format) {\n case \"csv\":\n return new CsvRenderer(options).render(this);\n case \"json\":\n return new JsonRenderer().render(this);\n case \"html\":\n return new HtmlRenderer().render(this);\n case \"md\":\n case \"markdown\":\n return new MarkdownRenderer().render(this);\n default:\n throw new Error(`Unknown export format: ${format}`);\n }\n }\n static fromVertical(record, options = {}) {\n const table = new _Table({\n ...options,\n columns: [\n { name: \"Key\", key: \"key\" },\n { name: \"Value\", key: \"value\" }\n ]\n });\n Object.entries(record).forEach(([key, value]) => table.addRow({ key, value }));\n return table;\n }\n sort(columnName, direction = \"asc\") {\n const colIndex = this.columns.findIndex((c) => c.name === columnName || c.key === columnName);\n if (colIndex === -1) return this;\n this.rows.sort((a, b) => {\n const cellA = a.cells[colIndex];\n const cellB = b.cells[colIndex];\n const valA = cellA ? cellA.content : \"\";\n const valB = cellB ? cellB.content : \"\";\n if (valA === valB) return 0;\n if (valA === null || valA === void 0) return 1;\n if (valB === null || valB === void 0) return -1;\n const numA = Number(valA);\n const numB = Number(valB);\n if (!isNaN(numA) && !isNaN(numB)) {\n return direction === \"asc\" ? numA - numB : numB - numA;\n }\n const strA = String(valA).toLowerCase();\n const strB = String(valB).toLowerCase();\n if (strA < strB) return direction === \"asc\" ? -1 : 1;\n if (strA > strB) return direction === \"asc\" ? 1 : -1;\n return 0;\n });\n return this;\n }\n static fromCross(rowHeader, columnHeaders, rows, options = {}) {\n const table = new _Table({\n ...options,\n columns: [\n { name: rowHeader, key: rowHeader },\n ...columnHeaders.map((header) => ({ name: String(header), key: String(header) }))\n ]\n });\n rows.forEach((row) => {\n table.addRow({\n [rowHeader]: row.label,\n ...row.values\n });\n });\n return table;\n }\n /**\n * Compare two data sets and return a table highlighting the differences.\n * @param oldData The original dataset\n * @param newData The new dataset\n * @param options Configures how the diff is matched and rendered\n */\n static compare(oldData, newData, options = {}) {\n const { primaryKey, showUnchanged = true, ...tableOpts } = options;\n const diffTable = new _Table(tableOpts);\n const allKeys = /* @__PURE__ */ new Set();\n [...oldData, ...newData].forEach((row) => Object.keys(row).forEach((k) => allKeys.add(k)));\n if (allKeys.size === 0) return diffTable;\n allKeys.forEach((key) => diffTable.addColumn(key));\n const processedOldIndices = /* @__PURE__ */ new Set();\n const processedNewIndices = /* @__PURE__ */ new Set();\n const compareAndAdd = (oldObj, newObj) => {\n const hasChanges = Array.from(allKeys).some((k) => oldObj[k] !== newObj[k]);\n if (!hasChanges && !showUnchanged) return;\n if (!hasChanges) {\n diffTable.addRow(newObj);\n return;\n }\n const diffRow = {};\n allKeys.forEach((key) => {\n const oldVal = oldObj[key] ?? \"\";\n const newVal = newObj[key] ?? \"\";\n if (oldVal !== newVal) {\n diffRow[key] = { content: String(`${oldVal} \\u2192 ${newVal}`), color: \"yellow\" };\n } else {\n diffRow[key] = newVal;\n }\n });\n diffTable.addRow(diffRow);\n };\n if (primaryKey) {\n oldData.forEach((oldObj, oldIdx) => {\n const pkValue = oldObj[primaryKey];\n const newIdx = newData.findIndex((n) => n[primaryKey] === pkValue);\n if (newIdx !== -1) {\n compareAndAdd(oldObj, newData[newIdx]);\n processedOldIndices.add(oldIdx);\n processedNewIndices.add(newIdx);\n } else {\n const row = {};\n allKeys.forEach((k) => row[k] = { content: String(oldObj[k] ?? \"\"), color: \"red\" });\n diffTable.addRow(row);\n processedOldIndices.add(oldIdx);\n }\n });\n newData.forEach((newObj, newIdx) => {\n if (!processedNewIndices.has(newIdx)) {\n const row = {};\n allKeys.forEach((k) => row[k] = { content: String(newObj[k] ?? \"\"), color: \"green\" });\n diffTable.addRow(row);\n }\n });\n } else {\n const maxLength = Math.max(oldData.length, newData.length);\n for (let i = 0; i < maxLength; i++) {\n const oldObj = oldData[i];\n const newObj = newData[i];\n if (oldObj && newObj) {\n compareAndAdd(oldObj, newObj);\n } else if (oldObj && !newObj) {\n const row = {};\n allKeys.forEach((k) => row[k] = { content: String(oldObj[k] ?? \"\"), color: \"red\" });\n diffTable.addRow(row);\n } else if (!oldObj && newObj) {\n const row = {};\n allKeys.forEach((k) => row[k] = { content: String(newObj[k] ?? \"\"), color: \"green\" });\n diffTable.addRow(row);\n }\n }\n }\n return diffTable;\n }\n addTree(labelColumn, nodes, indentSize = 2) {\n const processNode = (node, depth) => {\n const rowData = { ...node };\n delete rowData.children;\n if (rowData[labelColumn]) {\n const prefix = depth > 0 ? \" \".repeat((depth - 1) * indentSize) + \"\\u251C\\u2500 \" : \"\";\n rowData[labelColumn] = prefix + rowData[labelColumn];\n }\n this.addRow(rowData);\n if (node.children) {\n node.children.forEach((child) => {\n processNode(child, depth + 1);\n });\n }\n };\n nodes.forEach((node) => processNode(node, 0));\n }\n mergeAdjacent(columns) {\n const colIndices = columns ? columns.map((name) => this.columns.findIndex((c) => c.name === name || c.key === name)).filter((i) => i >= 0) : this.columns.map((_, i) => i);\n if (colIndices.length === 0) return;\n colIndices.forEach((colIndex) => {\n let lastCell = this.rows[0]?.cells[colIndex];\n for (let i = 1; i < this.rows.length; i++) {\n const currentCell = this.rows[i].cells[colIndex];\n if (lastCell && currentCell && lastCell.content === currentCell.content) {\n lastCell.rowSpan = (lastCell.rowSpan || 1) + 1;\n currentCell.merged = true;\n } else {\n lastCell = currentCell;\n }\n }\n });\n }\n /**\n * Transpose the table — flip rows ↔ columns.\n *\n * Each original column becomes a data row (first cell = column name).\n * Each original row becomes a new column (header = \"Row 1\", \"Row 2\", …).\n * Returns a **new** Table; the original is not mutated.\n *\n * @example\n * const t = new Table();\n * t.addColumn('Name'); t.addColumn('Age');\n * t.addRow({ Name: 'Alice', Age: 30 });\n * t.addRow({ Name: 'Bob', Age: 25 });\n *\n * console.log(t.transpose().render());\n * // ╭───────┬───────┬─────╮\n * // │ Field │ Row 1 │ Row 2 │\n * // ├───────┼───────┼─────┤\n * // │ Name │ Alice │ Bob │\n * // │ Age │ 30 │ 25 │\n * // ╰───────┴───────┴─────╯\n */\n transpose() {\n const newColumns = [\n { name: \"Field\", key: \"field\" },\n ...this.rows.map((_, i) => ({ name: `Row ${i + 1}`, key: `_row_${i}` }))\n ];\n const transposed = new _Table({\n theme: this.theme,\n compact: this.compact,\n columns: newColumns\n });\n this.columns.forEach((col, colIndex) => {\n const rowData = { field: col.name };\n this.rows.forEach((row, rowIndex) => {\n rowData[`_row_${rowIndex}`] = row.cells[colIndex]?.content ?? \"\";\n });\n transposed.addRow(rowData);\n });\n return transposed;\n }\n};\n\n// src/renderers/StringRenderer.ts\nvar StringRenderer = class {\n render(table) {\n if (table.columns.length === 0 && table.rows.length === 0) return \"\";\n const workingTable = this.getResponsiveTable(table);\n const visibleColumns = this.getVisibleColumns(workingTable);\n const theme = workingTable.theme;\n const grid = LayoutManager.layout(workingTable);\n const colWidths = this.calculateColumnWidths(workingTable, grid);\n const parts = [];\n const rowsToRender = [];\n if (workingTable.headerGroups.length) {\n rowsToRender.push({\n cells: this.createGroupHeaderCells(workingTable.headerGroups),\n zebra: false,\n rowIndex: 0,\n defaultBorderAfter: !workingTable.compact && !!theme.joinBody\n });\n }\n const headerCells = workingTable.columns.filter((c) => !c.hidden).map(\n (column, index) => ({\n cell: new Cell(column.name),\n x: index,\n y: -1,\n realColSpan: 1,\n realRowSpan: 1\n })\n );\n rowsToRender.push({\n cells: headerCells,\n zebra: false,\n rowIndex: 0,\n colorOverride: workingTable.headerColor,\n defaultBorderAfter: workingTable.rows.length > 0 ? !!theme.joinBody : !!workingTable.footer && !!theme.joinBody\n });\n grid.forEach((row, rowIndex) => {\n let rowColorOverride;\n if (workingTable.rowColor) {\n const rawRow = workingTable.rows[rowIndex];\n if (rawRow) {\n const rowObj = {};\n workingTable.columns.forEach((col, ci) => {\n rowObj[col.key || col.name] = rawRow.cells[ci]?.content ?? \"\";\n });\n const result = workingTable.rowColor(rowObj, rowIndex);\n if (result) rowColorOverride = result;\n }\n }\n rowsToRender.push({\n cells: row,\n zebra: workingTable.zebra,\n rowIndex,\n colorOverride: rowColorOverride,\n defaultBorderAfter: rowIndex < grid.length - 1 ? !workingTable.compact && !!theme.joinBody : !!workingTable.footer && !!theme.joinBody\n });\n });\n if (workingTable.footer) {\n rowsToRender.push({\n cells: this.createFooterRow(workingTable),\n zebra: false,\n rowIndex: 0,\n defaultBorderAfter: false\n });\n }\n const size = rowsToRender.length;\n const checkBorder = (index, defaultDraw) => {\n if (workingTable.drawHorizontalLine) {\n return workingTable.drawHorizontalLine(index, size);\n }\n return defaultDraw;\n };\n const pushBorder = (draw, left, body, join, right) => {\n left = left || theme.joinLeft;\n body = body || theme.joinBody;\n join = join || theme.joinJoin;\n right = right || theme.joinRight;\n if (draw && body) {\n parts.push(this.drawBorder(colWidths, visibleColumns, left, body, join, right));\n }\n };\n pushBorder(\n checkBorder(0, !!theme.topBody),\n theme.topLeft,\n theme.topBody,\n theme.topJoin,\n theme.topRight\n );\n rowsToRender.forEach((renderRow, index) => {\n parts.push(\n ...this.drawGridRowLines(\n renderRow.cells,\n colWidths,\n visibleColumns,\n theme,\n renderRow.rowIndex,\n renderRow.zebra,\n renderRow.colorOverride\n )\n );\n if (index < size - 1) {\n pushBorder(\n checkBorder(index + 1, renderRow.defaultBorderAfter),\n theme.joinLeft,\n theme.joinBody,\n theme.joinJoin,\n theme.joinRight\n );\n }\n });\n pushBorder(\n checkBorder(size, !!theme.bottomBody),\n theme.bottomLeft,\n theme.bottomBody,\n theme.bottomJoin,\n theme.bottomRight\n );\n return parts.join(\"\\n\");\n }\n getResponsiveTable(table) {\n const terminalWidth = table.terminalWidth || process.stdout.columns || 80;\n if (table.responsiveMode === \"none\") {\n if (table.columns.some((column) => column.hidden)) {\n return this.buildVisibleTable(table);\n }\n return table;\n }\n const next = new Table({\n ...table,\n columns: table.columns.map((column) => ({ ...column })),\n responsiveMode: \"none\"\n });\n next.rows = table.rows;\n next.footer = table.footer;\n const grid = LayoutManager.layout(next);\n const widths = this.calculateColumnWidths(next, grid);\n const total = this.calculateTableWidth(widths, this.getVisibleColumns(next), next.theme);\n if (total <= terminalWidth) return this.buildVisibleTable(next);\n const sorted = next.columns.map((column, index) => ({ index, priority: column.priority })).sort((a, b) => b.priority - a.priority);\n for (const col of sorted) {\n next.columns[col.index].hidden = true;\n if (this.getVisibleColumns(next).length === 0) break;\n const fake = this.buildVisibleTable(next);\n const g = LayoutManager.layout(fake);\n const w = this.calculateColumnWidths(fake, g);\n const size = this.calculateTableWidth(w, this.getVisibleColumns(fake), fake.theme);\n if (size <= terminalWidth) {\n if (table.responsiveMode === \"stack\") {\n return this.toStacked(fake);\n }\n return fake;\n }\n }\n return this.buildVisibleTable(next);\n }\n toStacked(table) {\n const stacked = new Table({\n theme: table.theme,\n compact: table.compact,\n columns: [\n { name: \"Field\", key: \"field\" },\n { name: \"Value\", key: \"value\" }\n ]\n });\n table.rows.forEach((row, idx) => {\n stacked.addRow([{ content: `Row ${idx + 1}`, colSpan: 2, align: \"center\" }]);\n table.columns.forEach((column, colIndex) => {\n if (column.hidden) return;\n stacked.addRow({ field: column.name, value: row.cells[colIndex]?.content ?? \"\" });\n });\n });\n return stacked;\n }\n createGroupHeaderCells(groups) {\n const cells = [];\n let cursor = 0;\n groups.forEach((group) => {\n cells[cursor] = {\n cell: new Cell({ content: group.title, colSpan: group.colSpan, align: \"center\" }),\n x: cursor,\n y: -2,\n realColSpan: group.colSpan,\n realRowSpan: 1\n };\n cursor += group.colSpan;\n });\n return cells;\n }\n createFooterRow(table) {\n const values = Array.isArray(table.footer) ? table.footer : table.columns.map(\n (column) => table.footer && !Array.isArray(table.footer) ? table.footer[column.key] ?? table.footer[column.name] ?? \"\" : \"\"\n );\n return values.map((value, index) => ({\n cell: new Cell(value),\n x: index,\n y: table.rows.length,\n realColSpan: 1,\n realRowSpan: 1\n }));\n }\n getVisibleColumns(table) {\n return table.columns.filter((column) => !column.hidden);\n }\n buildVisibleTable(table) {\n const visible = table.columns.map((column, index) => ({ column, index })).filter((item) => !item.column.hidden);\n const next = new Table({\n theme: table.theme,\n compact: table.compact,\n terminalWidth: table.terminalWidth,\n responsiveMode: \"none\",\n zebra: table.zebra,\n headerGroups: table.headerGroups,\n columns: visible.map((item) => ({ ...item.column }))\n });\n table.rows.forEach((row) => {\n const data = visible.map(({ index }) => {\n const cell = row.cells[index];\n if (!cell) return \"\";\n return {\n content: cell.content,\n colSpan: cell.colSpan,\n rowSpan: cell.rowSpan,\n align: cell.align,\n vAlign: cell.vAlign\n };\n });\n next.addRow(data);\n });\n if (table.footer) {\n const footer = table.footer;\n if (Array.isArray(footer)) {\n next.footer = visible.map(({ index }) => footer[index]);\n } else {\n next.footer = footer;\n }\n }\n return next;\n }\n calculateTableWidth(widths, columns, theme) {\n if (columns.length === 0) return 0;\n const joinWidth = this.strWidth(theme.bodyJoin);\n const leftWidth = this.strWidth(theme.bodyLeft);\n const rightWidth = this.strWidth(theme.bodyRight);\n const content = widths.reduce((sum, width) => sum + width, 0);\n const padding = columns.reduce(\n (sum, column) => sum + (column.paddingLeft ?? 1) + (column.paddingRight ?? 1),\n 0\n );\n return content + padding + joinWidth * Math.max(0, columns.length - 1) + leftWidth + rightWidth;\n }\n calculateColumnWidths(table, grid) {\n const visibleColumns = this.getVisibleColumns(table);\n const widths = visibleColumns.map((column) => {\n const base = Math.max(column.minWidth, column.width || this.strWidth(column.name));\n return column.maxWidth !== void 0 ? Math.min(base, column.maxWidth) : base;\n });\n const joinWidth = this.strWidth(table.theme.bodyJoin);\n grid.forEach((row) => {\n row.forEach((gridCell) => {\n if (!gridCell || gridCell.hidden || gridCell.realColSpan !== 1) return;\n const index = gridCell.x;\n const column = visibleColumns[index];\n if (!column || column.width) return;\n const rawLines = stripAnsi(gridCell.cell.getString()).split(\"\\n\");\n rawLines.forEach((line) => {\n widths[index] = Math.max(widths[index], this.strWidth(line), column.minWidth);\n if (column.maxWidth) widths[index] = Math.min(widths[index], column.maxWidth);\n });\n });\n });\n this.expandSpannedWidths(grid, widths, visibleColumns, joinWidth);\n return widths;\n }\n expandSpannedWidths(grid, widths, columns, joinWidth) {\n grid.forEach((row) => {\n row.forEach((gridCell) => {\n if (!gridCell || gridCell.hidden || gridCell.realColSpan <= 1) return;\n const start = gridCell.x;\n const span = gridCell.realColSpan;\n if (start + span > columns.length) return;\n const rawLines = stripAnsi(gridCell.cell.getString()).split(\"\\n\");\n const desired = Math.max(1, ...rawLines.map((line) => this.strWidth(line)));\n const current = this.sumWidths(widths, start, span, joinWidth);\n if (desired <= current) return;\n let remaining = desired - current;\n let candidates = [];\n for (let i = 0; i < span; i++) {\n const column = columns[start + i];\n if (!column || column.width !== void 0) continue;\n candidates.push(start + i);\n }\n if (candidates.length === 0) return;\n while (remaining > 0 && candidates.length > 0) {\n const per = Math.ceil(remaining / candidates.length);\n const next = [];\n for (const idx of candidates) {\n const column = columns[idx];\n const maxAdd = column.maxWidth !== void 0 ? Math.max(0, column.maxWidth - widths[idx]) : per;\n if (maxAdd > 0) {\n const applied = Math.min(per, maxAdd);\n widths[idx] += applied;\n remaining -= applied;\n }\n if (column.maxWidth === void 0 || widths[idx] < column.maxWidth) {\n next.push(idx);\n }\n }\n candidates = next;\n }\n });\n });\n }\n drawBorder(widths, columns, left, body, join, right) {\n const segments = widths.map((w, index) => {\n const column = columns[index];\n const padLeft = column?.paddingLeft ?? 1;\n const padRight = column?.paddingRight ?? 1;\n return body.repeat(Math.max(1, w + padLeft + padRight));\n });\n return left + segments.join(join) + right;\n }\n getSpanMetrics(columns, widths, start, span, joinWidth) {\n let contentWidth = 0;\n let padLeft = 1;\n let padRight = 1;\n let internalPadding = 0;\n for (let i = 0; i < span; i++) {\n const column = columns[start + i];\n const left = column?.paddingLeft ?? 1;\n const right = column?.paddingRight ?? 1;\n if (i === 0) padLeft = left;\n else internalPadding += left;\n if (i === span - 1) padRight = right;\n else internalPadding += right;\n contentWidth += widths[start + i] || 0;\n }\n return {\n contentWidth: contentWidth + internalPadding + joinWidth * Math.max(0, span - 1),\n padLeft,\n padRight\n };\n }\n drawGridRowLines(row, widths, columns, theme, rowIndex, zebra, overrideColor) {\n const visibleCols = widths.length;\n const joinWidth = this.strWidth(theme.bodyJoin);\n const cellLines = [];\n for (let i = 0; i < visibleCols; i++) {\n const gridCell = row[i];\n if (!gridCell || gridCell.hidden) continue;\n const col = gridCell.x;\n const column = columns[col];\n const metrics = this.getSpanMetrics(columns, widths, col, gridCell.realColSpan, joinWidth);\n const wrapWord = column?.wrapWord ?? true;\n const truncate = column?.truncate ?? \"...\";\n let rawContent = gridCell.cell.getString();\n if (column?.formatter && gridCell.y >= 0) {\n rawContent = String(column.formatter(rawContent, gridCell.y));\n }\n const lines2 = this.wrapCell(rawContent, metrics.contentWidth, wrapWord, truncate);\n cellLines.push({\n x: col,\n span: gridCell.realColSpan,\n lines: lines2,\n align: gridCell.cell.align || column?.align || \"left\",\n vAlign: gridCell.cell.vAlign || column?.vAlign || \"top\",\n padLeft: metrics.padLeft,\n padRight: metrics.padRight,\n contentWidth: metrics.contentWidth,\n color: gridCell.cell.color\n });\n i += gridCell.realColSpan - 1;\n }\n const rowHeight = Math.max(1, ...cellLines.map((entry) => entry.lines.length));\n const lines = [];\n for (let lineIndex = 0; lineIndex < rowHeight; lineIndex++) {\n let line = theme.bodyLeft;\n for (let col = 0; col < visibleCols; col++) {\n const current = cellLines.find((entry) => entry.x === col);\n if (!current) {\n const metrics = this.getSpanMetrics(columns, widths, col, 1, joinWidth);\n const blank = \" \".repeat(widths[col]);\n line += \" \".repeat(metrics.padLeft) + blank + \" \".repeat(metrics.padRight);\n if (col < visibleCols - 1) line += theme.bodyJoin;\n continue;\n }\n const maxHeight = current.lines.length;\n const offset = this.verticalOffset(current.vAlign, rowHeight, maxHeight);\n const text = lineIndex < offset || lineIndex >= offset + maxHeight ? \"\" : current.lines[lineIndex - offset];\n let aligned = this.alignText(text, current.contentWidth, current.align);\n const colIndex = current.x;\n const column = columns[colIndex];\n if (overrideColor) {\n aligned = colorize(aligned, overrideColor);\n } else if (current.color) {\n aligned = colorize(aligned, current.color);\n } else if (column?.color) {\n aligned = colorize(aligned, column.color);\n }\n line += \" \".repeat(current.padLeft) + aligned + \" \".repeat(current.padRight);\n col += current.span - 1;\n if (col < visibleCols - 1) line += theme.bodyJoin;\n }\n line += theme.bodyRight;\n if (zebra && rowIndex % 2 === 1) line = `\\x1B[2m${line}\\x1B[0m`;\n lines.push(line);\n }\n return lines;\n }\n wrapCell(text, width, wrapWord, truncate) {\n if (width <= 0) return [\"\"];\n const clean = stripAnsi(text);\n if (!wrapWord && this.strWidth(clean) > width) {\n return [this.truncateText(clean, width, truncate)];\n }\n const result = [];\n clean.split(\"\\n\").forEach((rawLine) => {\n if (this.strWidth(rawLine) <= width) {\n result.push(rawLine);\n return;\n }\n if (!wrapWord) {\n result.push(this.truncateText(rawLine, width, truncate));\n return;\n }\n let chunk = \"\";\n rawLine.split(/(\\s+)/).forEach((part) => {\n if (this.strWidth(chunk + part) <= width) {\n chunk += part;\n return;\n }\n if (chunk.trim()) result.push(chunk.trimEnd());\n if (this.strWidth(part) > width) {\n let remainder = part;\n while (this.strWidth(remainder) > width) {\n result.push(this.truncateText(remainder, width, \"\"));\n remainder = remainder.slice(Math.max(1, Math.floor(width / 2)));\n }\n chunk = remainder;\n } else {\n chunk = part;\n }\n });\n if (chunk.trim()) result.push(chunk.trimEnd());\n });\n return result.length ? result : [\"\"];\n }\n truncateText(text, width, suffix) {\n if (this.strWidth(text) <= width) return text;\n if (width <= this.strWidth(suffix)) return suffix.slice(0, Math.max(0, width));\n let out = \"\";\n for (const ch of text) {\n if (this.strWidth(out + ch + suffix) > width) break;\n out += ch;\n }\n return out + suffix;\n }\n alignText(text, width, align) {\n const textWidth = this.strWidth(text);\n if (textWidth >= width) return text;\n const gap = width - textWidth;\n if (align === \"right\") return \" \".repeat(gap) + text;\n if (align === \"center\") {\n const left = Math.floor(gap / 2);\n return \" \".repeat(left) + text + \" \".repeat(gap - left);\n }\n return text + \" \".repeat(gap);\n }\n verticalOffset(vAlign, rowHeight, contentHeight) {\n if (vAlign === \"bottom\") return rowHeight - contentHeight;\n if (vAlign === \"center\") return Math.floor((rowHeight - contentHeight) / 2);\n return 0;\n }\n sumWidths(widths, start, span, joinWidth) {\n let sum = 0;\n for (let i = 0; i < span; i++) sum += widths[start + i] || 0;\n return sum + Math.max(0, span - 1) * joinWidth;\n }\n strWidth(value) {\n return stringWidth(stripAnsi(value));\n }\n};\n\n// src/integrations/csv.ts\nvar CsvTable = class {\n /**\n * Parse a CSV string into a Table.\n * @param csvString Raw CSV content.\n * @param options Parsing options.\n */\n static from(csvString, options = {}) {\n const { hasHeader = true, delimiter = \",\" } = options;\n const lines = csvString.trim().split(/\\r?\\n/).filter((l) => l.trim() !== \"\");\n if (lines.length === 0) {\n return new Table();\n }\n const parseLine = (line) => {\n const result = [];\n let current = \"\";\n let inQuotes = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === '\"') {\n if (inQuotes && line[i + 1] === '\"') {\n current += '\"';\n i++;\n } else {\n inQuotes = !inQuotes;\n }\n } else if (ch === delimiter && !inQuotes) {\n result.push(current.trim());\n current = \"\";\n } else {\n current += ch;\n }\n }\n result.push(current.trim());\n return result;\n };\n const table = new Table();\n let headers;\n let dataStartIndex;\n if (hasHeader) {\n headers = parseLine(lines[0]);\n dataStartIndex = 1;\n } else {\n const firstRow = parseLine(lines[0]);\n headers = firstRow.map((_, i) => `Col${i + 1}`);\n dataStartIndex = 0;\n }\n headers.forEach((h) => table.addColumn(h));\n for (let i = dataStartIndex; i < lines.length; i++) {\n const values = parseLine(lines[i]);\n const row = {};\n headers.forEach((h, j) => {\n row[h] = values[j] !== void 0 ? values[j] : \"\";\n });\n table.addRow(row);\n }\n return table;\n }\n /**\n * Convert a Table to a CSV string.\n * @param table The table instance to export.\n * @param options CSV formatting options (delimiter, quote).\n */\n static toCsv(table, options) {\n return table.export(\"csv\", options);\n }\n};\n\n// src/InteractiveTable.ts\nimport * as readline from \"readline\";\nvar InteractiveTable = class {\n constructor(table, options = {}) {\n this.currentPage = 1;\n this.sortColumnIndex = 0;\n this.sortDirection = \"asc\";\n // TUI State\n this.mode = \"nav\";\n this.searchQuery = \"\";\n this.selectedRows = /* @__PURE__ */ new Set();\n this.displayedRows = [];\n this.hiddenColumns = /* @__PURE__ */ new Set();\n // Store column keys or names\n this.columnSelectionIndex = 0;\n this.cursorIndex = 0;\n this.table = table;\n this.pageSize = options.pageSize || 10;\n this.onSelect = options.onSelect;\n this.onExit = options.onExit;\n this.displayedRows = [...this.table.rows];\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n }\n start() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n readline.emitKeypressEvents(process.stdin);\n process.stdin.on(\"keypress\", this.handleKey.bind(this));\n this.applyFilterAndSort();\n this.render();\n process.stdout.on(\"resize\", () => this.render());\n }\n clearScreen() {\n const blank = \"\\n\".repeat(process.stdout.rows);\n console.log(blank);\n readline.cursorTo(process.stdout, 0, 0);\n readline.clearScreenDown(process.stdout);\n }\n handleKey(str, key) {\n if (key.name === \"c\" && key.ctrl) {\n this.stop();\n return;\n }\n if (this.mode === \"nav\" && key.name === \"q\") {\n this.stop();\n return;\n }\n if (this.mode === \"search\") {\n this.handleSearchInput(str, key);\n return;\n }\n if (this.mode === \"columns\") {\n this.handleColumnSelection(str, key);\n return;\n }\n if ((key.name === \"slash\" || str === \"/\") && this.mode === \"nav\") {\n this.mode = \"search\";\n this.searchQuery = \"\";\n this.render();\n return;\n }\n switch (key.name) {\n case \"up\": {\n this.cursorIndex = Math.max(0, this.cursorIndex - 1);\n this.render();\n break;\n }\n case \"down\": {\n const pageRowsLength = Math.min(\n this.pageSize,\n this.displayedRows.length - (this.currentPage - 1) * this.pageSize\n );\n this.cursorIndex = Math.min(pageRowsLength - 1, this.cursorIndex + 1);\n this.render();\n break;\n }\n case \"c\":\n this.mode = \"columns\";\n this.columnSelectionIndex = 0;\n this.render();\n break;\n case \"n\":\n case \"right\":\n this.nextPage();\n break;\n case \"p\":\n case \"left\":\n this.prevPage();\n break;\n case \"s\":\n this.toggleSort();\n break;\n case \"space\": {\n const start = (this.currentPage - 1) * this.pageSize;\n const target = this.displayedRows[start + this.cursorIndex];\n if (target) {\n if (this.selectedRows.has(target)) this.selectedRows.delete(target);\n else this.selectedRows.add(target);\n }\n this.render();\n break;\n }\n case \"a\": {\n const allSelected = this.displayedRows.every((r) => this.selectedRows.has(r));\n if (allSelected) this.displayedRows.forEach((r) => this.selectedRows.delete(r));\n else this.displayedRows.forEach((r) => this.selectedRows.add(r));\n this.render();\n break;\n }\n case \"return\":\n // Enter -> Action\n case \"enter\":\n if (this.onSelect) {\n const selected = Array.from(this.selectedRows);\n const result = selected.length > 0 ? selected : this.displayedRows;\n this.stop();\n this.onSelect(result.map((r) => r.getData()));\n }\n break;\n case \"escape\":\n if (this.searchQuery) {\n this.searchQuery = \"\";\n this.applyFilterAndSort();\n this.render();\n } else if (this.selectedRows.size > 0) {\n this.selectedRows.clear();\n this.render();\n }\n break;\n }\n }\n handleSearchInput(str, key) {\n if (key.name === \"return\" || key.name === \"enter\") {\n this.mode = \"nav\";\n this.render();\n return;\n }\n if (key.name === \"escape\") {\n this.mode = \"nav\";\n this.searchQuery = \"\";\n this.applyFilterAndSort();\n this.render();\n return;\n }\n if (key.name === \"backspace\") {\n this.searchQuery = this.searchQuery.slice(0, -1);\n } else if (str && str.length === 1 && !key.ctrl && !key.meta) {\n this.searchQuery += str;\n }\n this.applyFilterAndSort();\n this.render();\n }\n handleColumnSelection(str, key) {\n if (key.name === \"escape\" || key.name === \"return\" || key.name === \"enter\") {\n this.mode = \"nav\";\n this.render();\n return;\n }\n const maxIdx = this.table.columns.length - 1;\n if (key.name === \"up\") {\n this.columnSelectionIndex = Math.max(0, this.columnSelectionIndex - 1);\n this.render();\n } else if (key.name === \"down\") {\n this.columnSelectionIndex = Math.min(maxIdx, this.columnSelectionIndex + 1);\n this.render();\n } else if (key.name === \"space\") {\n const col = this.table.columns[this.columnSelectionIndex];\n const colKey = col.key || col.name;\n if (this.hiddenColumns.has(colKey)) {\n this.hiddenColumns.delete(colKey);\n } else {\n this.hiddenColumns.add(colKey);\n }\n this.render();\n }\n }\n applyFilterAndSort() {\n let rows = [...this.table.rows];\n if (this.searchQuery) {\n const lower = this.searchQuery.toLowerCase();\n rows = rows.filter((row) => {\n return row.cells.some((cell) => String(cell.content).toLowerCase().includes(lower));\n });\n }\n if (this.sortColumnIndex >= 0) {\n const col = this.table.columns[this.sortColumnIndex];\n if (col) {\n rows.sort((a, b) => {\n const valA = a.cells[this.sortColumnIndex]?.content ?? \"\";\n const valB = b.cells[this.sortColumnIndex]?.content ?? \"\";\n const numA = Number(valA);\n const numB = Number(valB);\n if (!isNaN(numA) && !isNaN(numB)) {\n return this.sortDirection === \"asc\" ? numA - numB : numB - numA;\n }\n if (valA < valB) return this.sortDirection === \"asc\" ? -1 : 1;\n if (valA > valB) return this.sortDirection === \"asc\" ? 1 : -1;\n return 0;\n });\n }\n }\n this.displayedRows = rows;\n this.currentPage = 1;\n this.cursorIndex = 0;\n }\n nextPage() {\n const totalPages = Math.ceil(this.displayedRows.length / this.pageSize);\n if (this.currentPage < totalPages) {\n this.currentPage++;\n this.cursorIndex = 0;\n this.render();\n }\n }\n prevPage() {\n if (this.currentPage > 1) {\n this.currentPage--;\n this.cursorIndex = 0;\n this.render();\n }\n }\n toggleSort() {\n if (this.sortDirection === \"asc\") {\n this.sortDirection = \"desc\";\n } else {\n this.sortDirection = \"asc\";\n }\n this.applyFilterAndSort();\n this.render();\n }\n render() {\n this.clearScreen();\n if (this.mode === \"columns\") {\n this.renderColumnSelection();\n return;\n }\n console.log(\"--- Interactive Table (Advanced) ---\");\n console.log(\n `keys: [\\u2191\\u2193] Cursor | [Space] Toggle | [a] All | [Right] Next | [Left] Prev | [s] Sort | [/] Search | [c] Columns | [Enter] Confirm\n`\n );\n const visibleColumns = this.table.columns.filter(\n (c) => !this.hiddenColumns.has(c.key || c.name)\n );\n if (visibleColumns.length === 0) {\n console.log(\"No columns visible. Press [c] to toggle columns.\");\n return;\n }\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n const pageRows = this.displayedRows.slice(start, end);\n const viewTable = new Table({\n columns: visibleColumns.map((c) => ({ ...c })),\n theme: this.table.theme,\n compact: this.table.compact,\n terminalWidth: this.table.terminalWidth || process.stdout.columns || 80,\n responsiveMode: this.table.responsiveMode\n });\n const validIndices = this.table.columns.map((c, i) => !this.hiddenColumns.has(c.key || c.name) ? i : -1).filter((i) => i !== -1);\n viewTable.rows = pageRows.map((row, pageIdx) => {\n const isSelected = this.selectedRows.has(row);\n const isCursor = pageIdx === this.cursorIndex;\n const newCells = validIndices.map((i) => {\n const cell = row.cells[i];\n if (!isSelected && !isCursor) return cell;\n let content;\n if (isSelected && isCursor) {\n content = `\\x1B[1;32m${cell.content}\\x1B[0m`;\n } else if (isSelected) {\n content = `\\x1B[32m${cell.content}\\x1B[0m`;\n } else {\n content = `\\x1B[36m${cell.content}\\x1B[0m`;\n }\n const highlighted = new Cell({\n content,\n colSpan: cell.colSpan,\n rowSpan: cell.rowSpan,\n align: cell.align,\n vAlign: cell.vAlign,\n color: cell.color\n });\n highlighted.merged = cell.merged;\n return highlighted;\n });\n const nextRow = new Row(row.getData(), viewTable);\n nextRow.cells = newCells;\n return nextRow;\n });\n viewTable.footer = this.table.footer;\n console.log(viewTable.render());\n const total = this.displayedRows.length;\n const selectedCount = this.selectedRows.size;\n const maxPage = Math.ceil(total / this.pageSize) || 1;\n let status = `\nPage ${this.currentPage}/${maxPage} | Items: ${total}`;\n if (selectedCount > 0) status += ` | \\x1B[32mSelected: ${selectedCount}\\x1B[0m`;\n if (this.searchQuery) status += ` | Filter: \"${this.searchQuery}\"`;\n if (this.sortColumnIndex >= 0)\n status += ` | Sort: ${this.table.columns[this.sortColumnIndex]?.name} (${this.sortDirection})`;\n status += ` | Cursor: ${this.cursorIndex + 1}/${pageRows.length}`;\n console.log(status);\n if (this.mode === \"search\") {\n process.stdout.write(`\nSearch > ${this.searchQuery}`);\n }\n }\n renderColumnSelection() {\n console.log(\"--- Toggle Columns ---\\n\");\n console.log(\"keys: [Up/Down] Navigate | [Space] Toggle | [Enter] Done\\n\");\n this.table.columns.forEach((col, idx) => {\n const isHidden = this.hiddenColumns.has(col.key || col.name);\n const isSelected = this.columnSelectionIndex === idx;\n const checkbox = isHidden ? \"[ ]\" : \"[x]\";\n const cursor = isSelected ? \">\" : \" \";\n const name = col.name;\n const line = `${cursor} ${checkbox} ${name}`;\n if (isSelected) {\n console.log(`\\x1B[36m${line}\\x1B[0m`);\n } else {\n console.log(line);\n }\n });\n }\n stop() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n this.rl.close();\n if (this.onExit) this.onExit();\n else process.exit(0);\n }\n};\n\nexport {\n Column,\n Cell,\n Row,\n LayoutManager,\n stripAnsi,\n isEmoji,\n isZeroWidth,\n isFullWidth,\n stringWidth,\n colorize,\n StringRenderer,\n CsvRenderer,\n JsonRenderer,\n HtmlRenderer,\n MarkdownRenderer,\n THEME_DEFAULT,\n THEME_Honeywell,\n THEME_Norc,\n THEME_Ramac,\n THEME_Void,\n THEME_Rounded,\n THEME_DoubleLine,\n THEME_BoldBox,\n THEME_Dots,\n BUILTIN_THEMES,\n getTheme,\n Table,\n CsvTable,\n InteractiveTable\n};\n//# sourceMappingURL=chunk-G76XL7PC.mjs.map",
18
+ "import {\n BUILTIN_THEMES,\n Cell,\n Column,\n CsvRenderer,\n CsvTable,\n HtmlRenderer,\n InteractiveTable,\n JsonRenderer,\n LayoutManager,\n MarkdownRenderer,\n Row,\n StringRenderer,\n THEME_BoldBox,\n THEME_DEFAULT,\n THEME_Dots,\n THEME_DoubleLine,\n THEME_Honeywell,\n THEME_Norc,\n THEME_Ramac,\n THEME_Rounded,\n THEME_Void,\n Table,\n colorize,\n getTheme,\n isEmoji,\n isFullWidth,\n isZeroWidth,\n stringWidth,\n stripAnsi\n} from \"./chunk-G76XL7PC.mjs\";\n\n// src/visuals/Sparkline.ts\nvar _Sparkline = class _Sparkline {\n /**\n * Generate a sparkline string from an array of numbers.\n * @param values Array of numbers to chart\n * @param options Configuration options\n */\n static generate(values, options) {\n if (!values || values.length === 0) return \"\";\n const min = options?.min ?? Math.min(...values);\n let max = options?.max ?? Math.max(...values);\n if (min === max) {\n max = min + 1;\n }\n const range = max - min;\n return values.map((v) => {\n const val = Math.max(min, Math.min(max, v));\n const normalized = (val - min) / range;\n const index = Math.floor(normalized * (_Sparkline.BARS.length - 1));\n return _Sparkline.BARS[index];\n }).join(\"\");\n }\n};\n_Sparkline.BARS = [\" \", \"\\u2582\", \"\\u2583\", \"\\u2584\", \"\\u2585\", \"\\u2586\", \"\\u2587\", \"\\u2588\"];\nvar Sparkline = _Sparkline;\n\n// src/visuals/Heatmap.ts\nvar _Heatmap = class _Heatmap {\n /**\n * Apply color to a value based on a range.\n * @param value The value to color\n * @param min Minimum expected value\n * @param max Maximum expected value\n * @param type 'text' or 'bg' (background)\n */\n static color(value, min, max, type = \"text\") {\n const range = max - min;\n const normalized = range === 0 ? 0.5 : (value - min) / range;\n let color = \"\";\n if (type === \"text\") {\n if (normalized < 0.33) color = _Heatmap.RED;\n else if (normalized < 0.66) color = _Heatmap.YELLOW;\n else color = _Heatmap.GREEN;\n } else {\n if (normalized < 0.5) color = _Heatmap.BG_RED;\n else color = _Heatmap.BG_GREEN;\n }\n return `${color}${value}${_Heatmap.RESET}`;\n }\n /**\n * Auto-color an array of numbers.\n */\n static autoColor(values) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n return values.map((v) => _Heatmap.color(v, min, max));\n }\n};\n// ANSI Colors\n_Heatmap.RED = \"\\x1B[31m\";\n_Heatmap.GREEN = \"\\x1B[32m\";\n_Heatmap.YELLOW = \"\\x1B[33m\";\n_Heatmap.BLUE = \"\\x1B[34m\";\n_Heatmap.RESET = \"\\x1B[0m\";\n_Heatmap.BG_RED = \"\\x1B[41m\";\n_Heatmap.BG_GREEN = \"\\x1B[42m\";\nvar Heatmap = _Heatmap;\n\n// src/visuals/ProgressBar.ts\nvar ProgressBar = class {\n /**\n * Generate a progress bar string.\n *\n * @param value - Current value (numerator).\n * @param max - Maximum value (denominator). Defaults to 100.\n * @param options - Display options.\n * @returns A string like `\"███████▒▒▒ 65%\"` ready to place in a cell.\n */\n static generate(value, max = 100, options = {}) {\n const width = options.width ?? 10;\n const filled = options.filled ?? \"\\u2588\";\n const empty = options.empty ?? \"\\u2592\";\n const showPercent = options.showPercent ?? true;\n const safeMax = max === 0 ? 1 : max;\n const clamped = Math.max(0, Math.min(safeMax, value));\n const ratio = clamped / safeMax;\n const filledCount = Math.round(ratio * width);\n const emptyCount = width - filledCount;\n const bar = filled.repeat(filledCount) + empty.repeat(emptyCount);\n if (!showPercent) return bar;\n const label = options.label ?? `${Math.round(ratio * 100)}%`;\n return `${bar} ${label}`;\n }\n};\n\n// src/integrations/html.ts\nvar HtmlTable = class _HtmlTable {\n /**\n * Create a Table from an HTML string\n * @param html String containing a <table>...</table>\n * @param options Configuration\n */\n static from(html, options = {}) {\n const tableMatch = html.match(/<table[^>]*>([\\s\\S]*?)<\\/table>/i);\n if (!tableMatch) {\n throw new Error(\"No <table> tag found in HTML\");\n }\n const content = tableMatch[1];\n const headerMatch = content.match(/<thead[^>]*>([\\s\\S]*?)<\\/thead>/i);\n const headerContent = headerMatch ? headerMatch[1] : content;\n const headers = [];\n const thRegex = /<th[^>]*>([\\s\\S]*?)<\\/th>/gi;\n let thMatch;\n while ((thMatch = thRegex.exec(headerContent)) !== null) {\n headers.push(_HtmlTable.stripTags(thMatch[1]));\n }\n if (headers.length === 0) {\n const trMatch = content.match(/<tr[^>]*>([\\s\\S]*?)<\\/tr>/i);\n if (trMatch) {\n const tdRegex = /<td[^>]*>([\\s\\S]*?)<\\/td>/gi;\n while ((thMatch = tdRegex.exec(trMatch[1])) !== null) {\n headers.push(_HtmlTable.stripTags(thMatch[1]));\n }\n }\n }\n const table = new Table({\n columns: headers.map((h2) => ({ name: h2 })),\n compact: options.compact\n });\n const bodyMatch = content.match(/<tbody[^>]*>([\\s\\S]*?)<\\/tbody>/i);\n const bodyContent = bodyMatch ? bodyMatch[1] : content;\n const trRegex = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi;\n let tr;\n while ((tr = trRegex.exec(bodyContent)) !== null) {\n const rowContent = tr[1];\n if (bodyContent === content && headerMatch && headerMatch.index !== void 0 && tr.index < headerMatch.index + headerMatch[0].length)\n continue;\n const cells = {};\n const tdRegex = /<td[^>]*>([\\s\\S]*?)<\\/td>/gi;\n let td;\n let i = 0;\n let hasData = false;\n while ((td = tdRegex.exec(rowContent)) !== null) {\n if (i < headers.length) {\n cells[headers[i]] = _HtmlTable.stripTags(td[1]);\n hasData = true;\n }\n i++;\n }\n if (hasData) {\n table.addRow(cells);\n }\n }\n return table;\n }\n /**\n * Helper to remove HTML tags\n */\n static stripTags(html) {\n return html.replace(/<\\/?[^>]+(>|$)/g, \"\").trim();\n }\n /**\n * Convert a Table to an HTML string\n */\n static toHtml(table) {\n return table.export(\"html\");\n }\n};\n\n// src/integrations/json.ts\nvar JsonTable = class {\n /**\n * Convert a Table to a JSON string.\n * @param table The table instance to export.\n */\n static toJson(table) {\n return table.export(\"json\");\n }\n};\n\n// src/integrations/jsx.ts\nfunction createElement(tag, props, ...children) {\n if (typeof tag === \"function\") {\n return tag({ ...props, children });\n }\n return { tag, props, children: children.flat() };\n}\nfunction render(element) {\n if (element.tag !== \"cmd-table\") {\n throw new Error(\"Root element must be <cmd-table>\");\n }\n const table = new Table({\n theme: element.props.theme ? BUILTIN_THEMES[element.props.theme] || element.props.theme : void 0,\n compact: element.props.compact\n });\n element.children.forEach((child) => {\n if (!child) return;\n if (child.tag === \"cmd-column\") {\n table.addColumn({\n name: child.props.name,\n key: child.props.key,\n width: child.props.width\n });\n } else if (child.tag === \"cmd-row\") {\n const { children, ...rowData } = child.props;\n table.addRow(rowData);\n }\n });\n return table;\n}\n\n// src/integrations/react.ts\nvar h = createElement;\nvar React = { createElement };\nvar render2 = render;\n\n// src/renderers/StreamRenderer.ts\nvar StreamRenderer = class extends StringRenderer {\n constructor(table) {\n super();\n this.headerRendered = false;\n this.widths = [];\n this.table = table;\n this.widths = this.calculateInitialWidths();\n }\n calculateInitialWidths() {\n return this.getStreamColumns().map((column) => {\n const base = Math.max(column.minWidth, column.width || stringWidth(column.name));\n return column.maxWidth !== void 0 ? Math.min(base, column.maxWidth) : base;\n });\n }\n renderHeader() {\n if (this.headerRendered) return \"\";\n const theme = this.table.theme;\n const visibleColumns = this.getStreamColumns();\n const parts = [];\n if (theme.topBody) {\n parts.push(\n this.drawBorder(\n this.widths,\n visibleColumns,\n theme.topLeft,\n theme.topBody,\n theme.topJoin,\n theme.topRight\n )\n );\n }\n const headerCells = visibleColumns.map(\n (column, i) => ({ cell: new Cell(column.name), x: i, y: -1, realColSpan: 1, realRowSpan: 1 })\n );\n parts.push(...this.drawGridRowLines(headerCells, this.widths, visibleColumns, theme, 0, false));\n if (theme.joinBody) {\n parts.push(\n this.drawBorder(\n this.widths,\n visibleColumns,\n theme.joinLeft,\n theme.joinBody,\n theme.joinJoin,\n theme.joinRight\n )\n );\n }\n this.headerRendered = true;\n return parts.join(\"\\n\");\n }\n renderRows(rows) {\n let output = \"\";\n if (!this.headerRendered) output += this.renderHeader() + \"\\n\";\n const visibleIndices = this.table.columns.map((column, index) => ({ column, index })).filter((item) => !item.column.hidden);\n const visibleColumns = visibleIndices.map((item) => item.column);\n const tempTable = new Table({\n theme: this.table.theme,\n columns: visibleColumns.map((column) => ({ ...column }))\n });\n tempTable.rows = rows.map((row) => {\n const filtered = visibleIndices.map(({ index }) => row.cells[index] ?? new Cell(\"\"));\n return { cells: filtered };\n });\n const grid = LayoutManager.layout(tempTable);\n const theme = this.table.theme;\n output += grid.map(\n (row) => this.drawGridRowLines(row, this.widths, visibleColumns, theme, 0, false).join(\"\\n\")\n ).join(\"\\n\");\n return output;\n }\n renderFooter() {\n const theme = this.table.theme;\n const visibleColumns = this.getStreamColumns();\n if (theme.bottomBody)\n return this.drawBorder(\n this.widths,\n visibleColumns,\n theme.bottomLeft,\n theme.bottomBody,\n theme.bottomJoin,\n theme.bottomRight\n );\n return \"\";\n }\n getStreamColumns() {\n return this.table.columns.filter((column) => !column.hidden);\n }\n};\n\n// src/utils/mergeUtils.ts\nfunction mergeAdjacent(table, columns) {\n const colIndices = columns ? columns.map((name) => table.columns.findIndex((c) => c.name === name || c.key === name)).filter((i) => i >= 0) : table.columns.map((_, i) => i);\n if (colIndices.length === 0) return;\n colIndices.forEach((colIndex) => {\n let lastRowIndex = 0;\n let lastCell = table.rows[0]?.cells[colIndex];\n for (let i = 1; i < table.rows.length; i++) {\n const currentCell = table.rows[i].cells[colIndex];\n if (lastCell && currentCell && lastCell.content === currentCell.content) {\n lastCell.rowSpan = (lastCell.rowSpan || 1) + 1;\n currentCell.merged = true;\n } else {\n lastCell = currentCell;\n lastRowIndex = i;\n }\n }\n });\n}\n\n// src/utils/treeUtils.ts\nfunction addTree(table, labelColumn, nodes, indentSize = 2) {\n const processNode = (node, depth) => {\n const rowData = { ...node };\n delete rowData.children;\n if (rowData[labelColumn]) {\n const prefix = depth > 0 ? \" \".repeat((depth - 1) * indentSize) + \"\\u251C\\u2500 \" : \"\";\n rowData[labelColumn] = prefix + rowData[labelColumn];\n }\n table.addRow(rowData);\n if (node.children) {\n node.children.forEach((child, index) => {\n processNode(child, depth + 1);\n });\n }\n };\n nodes.forEach((node) => processNode(node, 0));\n}\n\n// src/AsyncInteractiveTable.ts\nimport * as readline from \"readline\";\nvar AsyncInteractiveTable = class {\n constructor(dataSource, tableTemplate, options = {}) {\n this.currentPage = 1;\n this.totalRows = 0;\n this.sortColumn = null;\n this.sortDirection = \"asc\";\n this.mode = \"nav\";\n this.filterQuery = \"\";\n // Cache current page data\n this.currentRows = [];\n this.isLoading = false;\n this.dataSource = dataSource;\n this.table = tableTemplate;\n this.pageSize = options.pageSize || 10;\n this.onSelect = options.onSelect;\n this.onExit = options.onExit;\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n }\n async start() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n readline.emitKeypressEvents(process.stdin);\n process.stdin.on(\"keypress\", this.handleKey.bind(this));\n await this.refreshData();\n this.render();\n process.stdout.on(\"resize\", () => this.render());\n }\n async refreshData() {\n this.isLoading = true;\n this.render();\n try {\n await this.dataSource.count().then((c) => this.totalRows = c);\n const offset = (this.currentPage - 1) * this.pageSize;\n this.currentRows = await this.dataSource.getRows(offset, this.pageSize);\n } catch (e) {\n console.error(\"Error fetching data:\", e);\n } finally {\n this.isLoading = false;\n this.render();\n }\n }\n clearScreen() {\n const blank = \"\\n\".repeat(process.stdout.rows);\n console.log(blank);\n readline.cursorTo(process.stdout, 0, 0);\n readline.clearScreenDown(process.stdout);\n }\n handleKey(str, key) {\n if (this.isLoading) return;\n if (key.name === \"c\" && key.ctrl) {\n this.stop();\n return;\n }\n if (this.mode === \"nav\" && key.name === \"q\") {\n this.stop();\n return;\n }\n if (this.mode === \"filter\") {\n this.handleFilterInput(str, key);\n return;\n }\n if ((key.name === \"slash\" || str === \"/\") && this.mode === \"nav\") {\n this.mode = \"filter\";\n this.filterQuery = \"\";\n this.render();\n return;\n }\n switch (key.name) {\n case \"n\":\n case \"right\":\n this.nextPage();\n break;\n case \"p\":\n case \"left\":\n this.prevPage();\n break;\n case \"enter\":\n case \"return\":\n this.stop();\n break;\n }\n }\n handleFilterInput(str, key) {\n if (key.name === \"return\" || key.name === \"enter\") {\n this.mode = \"nav\";\n if (this.dataSource.filter) {\n this.dataSource.filter(this.filterQuery);\n this.currentPage = 1;\n this.refreshData();\n } else {\n this.render();\n }\n return;\n }\n if (key.name === \"escape\") {\n this.mode = \"nav\";\n this.filterQuery = \"\";\n if (this.dataSource.filter) {\n this.dataSource.filter(\"\");\n this.currentPage = 1;\n this.refreshData();\n }\n return;\n }\n if (key.name === \"backspace\") {\n this.filterQuery = this.filterQuery.slice(0, -1);\n } else if (str && str.length === 1 && !key.ctrl && !key.meta) {\n this.filterQuery += str;\n }\n this.render();\n }\n nextPage() {\n const maxPage = Math.ceil(this.totalRows / this.pageSize);\n if (this.currentPage < maxPage) {\n this.currentPage++;\n this.refreshData();\n }\n }\n prevPage() {\n if (this.currentPage > 1) {\n this.currentPage--;\n this.refreshData();\n }\n }\n render() {\n this.clearScreen();\n console.log(\"--- Async Interactive Table ---\");\n console.log(`keys: [Right] Next | [Left] Prev | [/] Filter | [q] Quit\n`);\n if (this.isLoading) {\n console.log(\"\\n Loading data...\\n\");\n return;\n }\n const viewTable = new Table({\n columns: this.table.columns.map((c) => ({ ...c })),\n theme: this.table.theme,\n compact: this.table.compact,\n terminalWidth: this.table.terminalWidth || process.stdout.columns || 80\n });\n this.currentRows.forEach((row) => viewTable.addRow(row));\n console.log(viewTable.render());\n const maxPage = Math.ceil(this.totalRows / this.pageSize) || 1;\n let status = `\nPage ${this.currentPage}/${maxPage} | Total: ${this.totalRows}`;\n if (this.filterQuery) status += ` | Filter: \"${this.filterQuery}\"`;\n console.log(status);\n if (this.mode === \"filter\") {\n process.stdout.write(`\nFilter > ${this.filterQuery}`);\n }\n }\n stop() {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n this.rl.close();\n if (this.onExit) this.onExit();\n else process.exit(0);\n }\n};\n\n// src/integrations/sql.ts\nvar SqlDataSource = class {\n constructor(db, tableName) {\n this.orderBy = \"\";\n this.whereClause = \"\";\n this.db = db;\n this.tableName = tableName;\n }\n async count() {\n const sql = `SELECT COUNT(*) as c FROM ${this.tableName}${this.whereClause}`;\n const row = this.db.prepare(sql).get();\n return row.c;\n }\n async getRows(offset, limit) {\n const sql = `SELECT * FROM ${this.tableName}${this.whereClause}${this.orderBy} LIMIT ? OFFSET ?`;\n return this.db.prepare(sql).all(limit, offset);\n }\n sort(column, direction) {\n this.orderBy = ` ORDER BY ${column} ${direction.toUpperCase()}`;\n }\n filter(query) {\n if (!query) {\n this.whereClause = \"\";\n return;\n }\n const columns = this.db.pragma(`table_info(${this.tableName})`);\n const conditions = columns.map((col) => `${col.name} LIKE '%${query}%'`);\n this.whereClause = ` WHERE ${conditions.join(\" OR \")}`;\n }\n};\n\n// src/analysis/Aggregations.ts\nvar Aggregations = class {\n static sum(values) {\n return values.reduce((a, b) => a + b, 0);\n }\n static avg(values) {\n if (values.length === 0) return 0;\n return Number((this.sum(values) / values.length).toFixed(2));\n }\n static min(values) {\n if (values.length === 0) return 0;\n return Math.min(...values);\n }\n static max(values) {\n if (values.length === 0) return 0;\n return Math.max(...values);\n }\n static count(values) {\n return values.length;\n }\n static stdDev(values) {\n if (values.length === 0) return 0;\n const mean = this.avg(values);\n const squareDiffs = values.map((value) => Math.pow(value - mean, 2));\n const avgSquareDiff = this.avg(squareDiffs);\n return Number(Math.sqrt(avgSquareDiff).toFixed(2));\n }\n static variance(values) {\n if (values.length === 0) return 0;\n const mean = this.avg(values);\n const squareDiffs = values.map((value) => Math.pow(value - mean, 2));\n return Number(this.avg(squareDiffs).toFixed(2));\n }\n static percentile(values, p) {\n if (values.length === 0) return 0;\n const sorted = [...values].sort((a, b) => a - b);\n const pos = (sorted.length - 1) * p;\n const base = Math.floor(pos);\n const rest = pos - base;\n if (sorted[base + 1] !== void 0) {\n return Number((sorted[base] + rest * (sorted[base + 1] - sorted[base])).toFixed(2));\n } else {\n return Number(sorted[base].toFixed(2));\n }\n }\n};\n\n// src/analysis/PivotTable.ts\nvar PivotTable = class {\n static create(data, options) {\n const { groupBy, pivot, algorithm = \"count\", targetColumn, onError } = options;\n const table = new Table();\n try {\n const groups = {};\n data.forEach((row) => {\n const key = String(row[groupBy]);\n if (!groups[key]) groups[key] = [];\n groups[key].push(row);\n });\n let pivotKeys = [\"Value\"];\n if (pivot) {\n const allPivotValues = /* @__PURE__ */ new Set();\n data.forEach((row) => allPivotValues.add(String(row[pivot])));\n pivotKeys = Array.from(allPivotValues).sort();\n }\n table.addColumn(groupBy);\n pivotKeys.forEach((key) => table.addColumn(key));\n Object.entries(groups).forEach(([groupKey, rows]) => {\n const rowData = { [groupBy]: groupKey };\n pivotKeys.forEach((pivotKey) => {\n const cellRows = pivot ? rows.filter((r) => String(r[pivot]) === pivotKey) : rows;\n const values = targetColumn ? cellRows.map((r) => r[targetColumn]) : cellRows;\n let result;\n if (typeof algorithm === \"function\") {\n result = algorithm(values);\n } else if (algorithm === \"count\") {\n result = values.length;\n } else {\n const nums = values.map((v) => Number(v)).filter((n) => !isNaN(n));\n result = Aggregations[algorithm](nums);\n }\n rowData[pivotKey] = result;\n });\n table.addRow(rowData);\n });\n } catch (error) {\n if (onError) onError(error);\n else throw error;\n }\n return table;\n }\n};\n\n// src/analysis/CrossTab.ts\nvar CrossTab = class {\n static create(data, options) {\n const { rowKey, colKey, valueKey, aggregator = \"sum\", missingValue = \"-\" } = options;\n const table = new Table();\n const rows = /* @__PURE__ */ new Set();\n const cols = /* @__PURE__ */ new Set();\n data.forEach((item) => {\n rows.add(String(item[rowKey]));\n cols.add(String(item[colKey]));\n });\n const sortedRows = Array.from(rows).sort();\n const sortedCols = Array.from(cols).sort();\n table.addColumn(rowKey);\n sortedCols.forEach((col) => table.addColumn(col));\n sortedRows.forEach((r) => {\n const rowData = { [rowKey]: r };\n sortedCols.forEach((c) => {\n const matches = data.filter(\n (item) => String(item[rowKey]) === r && String(item[colKey]) === c\n );\n if (matches.length === 0) {\n rowData[c] = missingValue;\n } else {\n const values = matches.map((m) => m[valueKey]);\n let result;\n if (typeof aggregator === \"function\") {\n result = aggregator(values);\n } else if (aggregator === \"count\") {\n result = values.length;\n } else if (aggregator === \"first\") {\n result = values[0];\n } else if (aggregator === \"last\") {\n result = values[values.length - 1];\n } else {\n result = values.reduce((sum, v) => sum + (Number(v) || 0), 0);\n }\n rowData[c] = result;\n }\n });\n table.addRow(rowData);\n });\n return table;\n }\n};\nexport {\n Aggregations,\n AsyncInteractiveTable,\n BUILTIN_THEMES,\n Cell,\n Column,\n CrossTab,\n CsvRenderer,\n CsvTable,\n Heatmap,\n HtmlRenderer,\n HtmlTable,\n InteractiveTable,\n JsonRenderer,\n JsonTable,\n LayoutManager,\n MarkdownRenderer,\n PivotTable,\n ProgressBar,\n React,\n Row,\n Sparkline,\n SqlDataSource,\n StreamRenderer,\n StringRenderer,\n THEME_BoldBox,\n THEME_DEFAULT,\n THEME_Dots,\n THEME_DoubleLine,\n THEME_Honeywell,\n THEME_Norc,\n THEME_Ramac,\n THEME_Rounded,\n THEME_Void,\n Table,\n addTree,\n colorize,\n getTheme,\n h,\n isEmoji,\n isFullWidth,\n isZeroWidth,\n mergeAdjacent,\n render2 as render,\n stringWidth,\n stripAnsi\n};\n//# sourceMappingURL=index.mjs.map",
19
+ "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n",
20
+ "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n",
21
+ "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n",
22
+ "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n",
23
+ "var __defProp = Object.defineProperty;\nvar __returnValue = (v) => v;\nfunction __exportSetter(name, newValue) {\n this[name] = __returnValue.bind(null, newValue);\n}\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: __exportSetter.bind(all, name)\n });\n};\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n if (typeof require !== \"undefined\")\n return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\n\n// src/Vex.ts\nvar USER_PROG_CHUNK_SIZE = 4096;\nvar USER_FLASH_START = 50331648;\nvar USER_FLASH_SYS_CODE_START = 54525952;\nvar USER_FLASH_USR_CODE_START = 58720256;\nvar USER_FLASH_END = 134217728;\nvar USER_FLASH_MAX_FILE_SIZE = 2097152;\nvar USER_FLASH_START_B = 270532608;\nvar USER_FLASH_END_B = 272629760;\nvar USER_FLASH_START_C = 807403520;\nvar USER_FLASH_END_C = 822083584;\nvar FileVendor;\n((FileVendor2) => {\n FileVendor2[FileVendor2[\"USER\"] = 1] = \"USER\";\n FileVendor2[FileVendor2[\"SYS\"] = 15] = \"SYS\";\n FileVendor2[FileVendor2[\"DEV1\"] = 16] = \"DEV1\";\n FileVendor2[FileVendor2[\"DEV2\"] = 24] = \"DEV2\";\n FileVendor2[FileVendor2[\"DEV3\"] = 32] = \"DEV3\";\n FileVendor2[FileVendor2[\"DEV4\"] = 40] = \"DEV4\";\n FileVendor2[FileVendor2[\"DEV5\"] = 48] = \"DEV5\";\n FileVendor2[FileVendor2[\"DEV6\"] = 56] = \"DEV6\";\n FileVendor2[FileVendor2[\"VEXVM\"] = 64] = \"VEXVM\";\n FileVendor2[FileVendor2[\"VEX\"] = 240] = \"VEX\";\n FileVendor2[FileVendor2[\"UNDEFINED\"] = 241] = \"UNDEFINED\";\n})(FileVendor ||= {});\nvar FileDownloadTarget;\n((FileDownloadTarget2) => {\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_DDR\"] = 0] = \"FILE_TARGET_DDR\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_QSPI\"] = 1] = \"FILE_TARGET_QSPI\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_CBUF\"] = 2] = \"FILE_TARGET_CBUF\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_VBUF\"] = 3] = \"FILE_TARGET_VBUF\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_DDRC\"] = 4] = \"FILE_TARGET_DDRC\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_DDRE\"] = 5] = \"FILE_TARGET_DDRE\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_FLASH\"] = 6] = \"FILE_TARGET_FLASH\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_RADIO\"] = 7] = \"FILE_TARGET_RADIO\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_A1\"] = 13] = \"FILE_TARGET_A1\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_B1\"] = 14] = \"FILE_TARGET_B1\";\n FileDownloadTarget2[FileDownloadTarget2[\"FILE_TARGET_B2\"] = 15] = \"FILE_TARGET_B2\";\n})(FileDownloadTarget ||= {});\nvar FileInitAction;\n((FileInitAction2) => {\n FileInitAction2[FileInitAction2[\"WRITE\"] = 1] = \"WRITE\";\n FileInitAction2[FileInitAction2[\"READ\"] = 2] = \"READ\";\n})(FileInitAction ||= {});\nvar FileInitOption;\n((FileInitOption2) => {\n FileInitOption2[FileInitOption2[\"NONE\"] = 0] = \"NONE\";\n FileInitOption2[FileInitOption2[\"OVERWRITE\"] = 1] = \"OVERWRITE\";\n})(FileInitOption ||= {});\nvar FileLoadAction;\n((FileLoadAction2) => {\n FileLoadAction2[FileLoadAction2[\"RUN\"] = 0] = \"RUN\";\n FileLoadAction2[FileLoadAction2[\"STOP\"] = 128] = \"STOP\";\n})(FileLoadAction ||= {});\nvar FileExitAction;\n((FileExitAction2) => {\n FileExitAction2[FileExitAction2[\"EXIT_NONE\"] = 0] = \"EXIT_NONE\";\n FileExitAction2[FileExitAction2[\"EXIT_RUN\"] = 1] = \"EXIT_RUN\";\n FileExitAction2[FileExitAction2[\"EXIT_HALT\"] = 3] = \"EXIT_HALT\";\n})(FileExitAction ||= {});\nvar RadioChannelType;\n((RadioChannelType2) => {\n RadioChannelType2[RadioChannelType2[\"PIT\"] = 0] = \"PIT\";\n RadioChannelType2[RadioChannelType2[\"DOWNLOAD\"] = 1] = \"DOWNLOAD\";\n})(RadioChannelType ||= {});\nvar AckType;\n((AckType2) => {\n AckType2[AckType2[\"CDC2_ACK\"] = 118] = \"CDC2_ACK\";\n AckType2[AckType2[\"CDC2_NACK\"] = 255] = \"CDC2_NACK\";\n AckType2[AckType2[\"CDC2_NACK_PACKET_CRC\"] = 206] = \"CDC2_NACK_PACKET_CRC\";\n AckType2[AckType2[\"CDC2_NACK_CMD_LENGTH\"] = 208] = \"CDC2_NACK_CMD_LENGTH\";\n AckType2[AckType2[\"CDC2_NACK_SIZE\"] = 209] = \"CDC2_NACK_SIZE\";\n AckType2[AckType2[\"CDC2_NACK_CRC\"] = 210] = \"CDC2_NACK_CRC\";\n AckType2[AckType2[\"CDC2_NACK_FILE\"] = 211] = \"CDC2_NACK_FILE\";\n AckType2[AckType2[\"CDC2_NACK_INIT\"] = 212] = \"CDC2_NACK_INIT\";\n AckType2[AckType2[\"CDC2_NACK_FUNC\"] = 213] = \"CDC2_NACK_FUNC\";\n AckType2[AckType2[\"CDC2_NACK_ALIGN\"] = 214] = \"CDC2_NACK_ALIGN\";\n AckType2[AckType2[\"CDC2_NACK_ADDR\"] = 215] = \"CDC2_NACK_ADDR\";\n AckType2[AckType2[\"CDC2_NACK_INCOMPLETE\"] = 216] = \"CDC2_NACK_INCOMPLETE\";\n AckType2[AckType2[\"CDC2_NACK_DIR_INDEX\"] = 217] = \"CDC2_NACK_DIR_INDEX\";\n AckType2[AckType2[\"CDC2_NACK_MAX_USER_FILES\"] = 218] = \"CDC2_NACK_MAX_USER_FILES\";\n AckType2[AckType2[\"CDC2_NACK_FILE_EXISTS\"] = 219] = \"CDC2_NACK_FILE_EXISTS\";\n AckType2[AckType2[\"CDC2_NACK_FILE_SYS_FULL\"] = 220] = \"CDC2_NACK_FILE_SYS_FULL\";\n AckType2[AckType2[\"TIMEOUT\"] = 256] = \"TIMEOUT\";\n AckType2[AckType2[\"WRITE_ERROR\"] = 257] = \"WRITE_ERROR\";\n})(AckType ||= {});\nvar SmartDeviceType;\n((SmartDeviceType2) => {\n SmartDeviceType2[SmartDeviceType2[\"EMPTY\"] = 0] = \"EMPTY\";\n SmartDeviceType2[SmartDeviceType2[\"V5_POWER\"] = 1] = \"V5_POWER\";\n SmartDeviceType2[SmartDeviceType2[\"MOTOR\"] = 2] = \"MOTOR\";\n SmartDeviceType2[SmartDeviceType2[\"LED\"] = 3] = \"LED\";\n SmartDeviceType2[SmartDeviceType2[\"ABS_ENCODER_SENSOR\"] = 4] = \"ABS_ENCODER_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"CR_MOTOR\"] = 5] = \"CR_MOTOR\";\n SmartDeviceType2[SmartDeviceType2[\"IMU_SENSOR\"] = 6] = \"IMU_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"DISTANCE_SENSOR\"] = 7] = \"DISTANCE_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"RADIO_SENSOR\"] = 8] = \"RADIO_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"CONTROLLER\"] = 9] = \"CONTROLLER\";\n SmartDeviceType2[SmartDeviceType2[\"BRAIN\"] = 10] = \"BRAIN\";\n SmartDeviceType2[SmartDeviceType2[\"VISION_SENSOR\"] = 11] = \"VISION_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"ADI\"] = 12] = \"ADI\";\n SmartDeviceType2[SmartDeviceType2[\"PARTNER_CONTROLLER\"] = 13] = \"PARTNER_CONTROLLER\";\n SmartDeviceType2[SmartDeviceType2[\"BATTERY\"] = 14] = \"BATTERY\";\n SmartDeviceType2[SmartDeviceType2[\"SOL\"] = 15] = \"SOL\";\n SmartDeviceType2[SmartDeviceType2[\"OPTICAL_SENSOR\"] = 16] = \"OPTICAL_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"MAGNET\"] = 17] = \"MAGNET\";\n SmartDeviceType2[SmartDeviceType2[\"GPS_SENSOR\"] = 20] = \"GPS_SENSOR\";\n SmartDeviceType2[SmartDeviceType2[\"UNDEFINED_SENSOR\"] = 255] = \"UNDEFINED_SENSOR\";\n})(SmartDeviceType ||= {});\nvar SerialDeviceType;\n((SerialDeviceType2) => {\n SerialDeviceType2[SerialDeviceType2[\"V5_BRAIN\"] = 1281] = \"V5_BRAIN\";\n SerialDeviceType2[SerialDeviceType2[\"V5_BRAIN_DFU\"] = 1282] = \"V5_BRAIN_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"V5_CONTROLLER\"] = 1283] = \"V5_CONTROLLER\";\n SerialDeviceType2[SerialDeviceType2[\"XILINX\"] = 256] = \"XILINX\";\n SerialDeviceType2[SerialDeviceType2[\"IQ_BRAIN\"] = 2] = \"IQ_BRAIN\";\n SerialDeviceType2[SerialDeviceType2[\"IQ_BRAIN2\"] = 3] = \"IQ_BRAIN2\";\n SerialDeviceType2[SerialDeviceType2[\"IQ_BRAIN_DFU\"] = 255] = \"IQ_BRAIN_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"IQ2_BRAIN\"] = 512] = \"IQ2_BRAIN\";\n SerialDeviceType2[SerialDeviceType2[\"IQ2_BRAIN_DFU\"] = 527] = \"IQ2_BRAIN_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"IQ2_CONTROLLER\"] = 528] = \"IQ2_CONTROLLER\";\n SerialDeviceType2[SerialDeviceType2[\"IQ2_CONTROLLER_DFU\"] = 543] = \"IQ2_CONTROLLER_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"EXP_BRAIN\"] = 1536] = \"EXP_BRAIN\";\n SerialDeviceType2[SerialDeviceType2[\"EXP_BRAIN_DFU\"] = 1551] = \"EXP_BRAIN_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"EXP_CONTROLLER\"] = 1552] = \"EXP_CONTROLLER\";\n SerialDeviceType2[SerialDeviceType2[\"EXP_CONTROLLER_DFU\"] = 1567] = \"EXP_CONTROLLER_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"PIXY\"] = 61440] = \"PIXY\";\n SerialDeviceType2[SerialDeviceType2[\"PIXY_DFU\"] = 12] = \"PIXY_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"VEXCAM\"] = 1287] = \"VEXCAM\";\n SerialDeviceType2[SerialDeviceType2[\"VEXCAM_DFU\"] = 1288] = \"VEXCAM_DFU\";\n SerialDeviceType2[SerialDeviceType2[\"SENSOR_TEST\"] = 1535] = \"SENSOR_TEST\";\n SerialDeviceType2[SerialDeviceType2[\"CORTEX_PROGCBL\"] = 10] = \"CORTEX_PROGCBL\";\n SerialDeviceType2[SerialDeviceType2[\"CORTEX_BRAIN\"] = 11] = \"CORTEX_BRAIN\";\n SerialDeviceType2[SerialDeviceType2[\"CORTEX_JOYSTK\"] = 12] = \"CORTEX_JOYSTK\";\n SerialDeviceType2[SerialDeviceType2[\"VEXNET_KEY_20\"] = 7] = \"VEXNET_KEY_20\";\n SerialDeviceType2[SerialDeviceType2[\"VEXNET_KEY_10\"] = 9587] = \"VEXNET_KEY_10\";\n SerialDeviceType2[SerialDeviceType2[\"PROLIFIC\"] = 8963] = \"PROLIFIC\";\n})(SerialDeviceType ||= {});\nvar SelectDashScreen;\n((SelectDashScreen2) => {\n SelectDashScreen2[SelectDashScreen2[\"HOME\"] = 0] = \"HOME\";\n SelectDashScreen2[SelectDashScreen2[\"BATTERY\"] = 1] = \"BATTERY\";\n SelectDashScreen2[SelectDashScreen2[\"LED\"] = 3] = \"LED\";\n SelectDashScreen2[SelectDashScreen2[\"MATCH_CONFIG\"] = 4] = \"MATCH_CONFIG\";\n SelectDashScreen2[SelectDashScreen2[\"MATCH_CONFIG_MORE\"] = 5] = \"MATCH_CONFIG_MORE\";\n SelectDashScreen2[SelectDashScreen2[\"WIRING\"] = 6] = \"WIRING\";\n SelectDashScreen2[SelectDashScreen2[\"RADIO\"] = 8] = \"RADIO\";\n SelectDashScreen2[SelectDashScreen2[\"BRAIN\"] = 10] = \"BRAIN\";\n SelectDashScreen2[SelectDashScreen2[\"RUN_PROGRAM\"] = 13] = \"RUN_PROGRAM\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_PROGRAM_CONTROL_LEFT_MAPPING\"] = 14] = \"DRIVE_PROGRAM_CONTROL_LEFT_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_PROGRAM_MENU\"] = 15] = \"DRIVE_PROGRAM_MENU\";\n SelectDashScreen2[SelectDashScreen2[\"DEVICES\"] = 16] = \"DEVICES\";\n SelectDashScreen2[SelectDashScreen2[\"USER_PROGRAM_FOLDER\"] = 17] = \"USER_PROGRAM_FOLDER\";\n SelectDashScreen2[SelectDashScreen2[\"VEX_PROGRAM_FOLDER\"] = 18] = \"VEX_PROGRAM_FOLDER\";\n SelectDashScreen2[SelectDashScreen2[\"SETTINGS\"] = 19] = \"SETTINGS\";\n SelectDashScreen2[SelectDashScreen2[\"SCARY_CONFIGURATION\"] = 20] = \"SCARY_CONFIGURATION\";\n SelectDashScreen2[SelectDashScreen2[\"LANGUAGE\"] = 21] = \"LANGUAGE\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_MOTOR_CONFIG\"] = 22] = \"DRIVE_MOTOR_CONFIG\";\n SelectDashScreen2[SelectDashScreen2[\"PROGRAM_MENU\"] = 24] = \"PROGRAM_MENU\";\n SelectDashScreen2[SelectDashScreen2[\"SHUTDOWN\"] = 25] = \"SHUTDOWN\";\n SelectDashScreen2[SelectDashScreen2[\"CONTROLLER_2_MAPPING\"] = 26] = \"CONTROLLER_2_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"SCARY_CONFIGURATION_MORE\"] = 27] = \"SCARY_CONFIGURATION_MORE\";\n SelectDashScreen2[SelectDashScreen2[\"CONFIRM_XX\"] = 28] = \"CONFIRM_XX\";\n SelectDashScreen2[SelectDashScreen2[\"CONTROLLER_1_MAPPING\"] = 29] = \"CONTROLLER_1_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_PROGRAM_CONTROL_DUAL_MAPPING\"] = 30] = \"DRIVE_PROGRAM_CONTROL_DUAL_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_PROGRAM_CONTROL_SPLIT_MAPPING\"] = 31] = \"DRIVE_PROGRAM_CONTROL_SPLIT_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"DRIVE_PROGRAM_CONTROL_RIGHT_MAPPING\"] = 32] = \"DRIVE_PROGRAM_CONTROL_RIGHT_MAPPING\";\n SelectDashScreen2[SelectDashScreen2[\"MATCH_2_4_PLAYERS\"] = 33] = \"MATCH_2_4_PLAYERS\";\n SelectDashScreen2[SelectDashScreen2[\"EVENT_LOG\"] = 34] = \"EVENT_LOG\";\n SelectDashScreen2[SelectDashScreen2[\"USER_PROGRAM_WIRING\"] = 40] = \"USER_PROGRAM_WIRING\";\n SelectDashScreen2[SelectDashScreen2[\"CLAWBOT_PROGRAM_MENU\"] = 41] = \"CLAWBOT_PROGRAM_MENU\";\n SelectDashScreen2[SelectDashScreen2[\"ABOUT\"] = 42] = \"ABOUT\";\n SelectDashScreen2[SelectDashScreen2[\"LANGUAGE_MORE\"] = 43] = \"LANGUAGE_MORE\";\n SelectDashScreen2[SelectDashScreen2[\"OBJECT_COLOR\"] = 45] = \"OBJECT_COLOR\";\n SelectDashScreen2[SelectDashScreen2[\"SIGNATURE_ID\"] = 46] = \"SIGNATURE_ID\";\n SelectDashScreen2[SelectDashScreen2[\"LOG_DATA\"] = 47] = \"LOG_DATA\";\n})(SelectDashScreen ||= {});\n// src/VexError.ts\nclass VexSerialError extends Error {\n kind;\n constructor(kind, message) {\n super(message);\n this.name = \"VexSerialError\";\n this.kind = kind;\n }\n}\n\nclass VexNotConnectedError extends VexSerialError {\n constructor(message = \"no connection to a V5 device\") {\n super(\"not-connected\", message);\n this.name = \"VexNotConnectedError\";\n }\n}\n\nclass VexInvalidArgumentError extends VexSerialError {\n constructor(message) {\n super(\"invalid-argument\", message);\n this.name = \"VexInvalidArgumentError\";\n }\n}\n\nclass VexProtocolError extends VexSerialError {\n constructor(message) {\n super(\"protocol\", message);\n this.name = \"VexProtocolError\";\n }\n}\n\nclass VexTransferError extends VexSerialError {\n constructor(message) {\n super(\"transfer\", message);\n this.name = \"VexTransferError\";\n }\n}\n\nclass VexDownloadError extends VexSerialError {\n constructor(message) {\n super(\"download\", message);\n this.name = \"VexDownloadError\";\n }\n}\n\nclass VexFirmwareError extends VexSerialError {\n constructor(message) {\n super(\"firmware\", message);\n this.name = \"VexFirmwareError\";\n }\n}\n\nclass VexIoError extends VexSerialError {\n constructor(message) {\n super(\"io\", message);\n this.name = \"VexIoError\";\n }\n}\nfunction toVexSerialError(error, fallback = \"io\") {\n if (error instanceof VexSerialError)\n return error;\n const message = error instanceof Error ? error.message : String(error);\n return new VexSerialError(fallback, message);\n}\n\n// src/VexEvent.ts\nclass VexEventEmitter {\n handlerMap;\n constructor() {\n this.handlerMap = new Map;\n }\n on(eventName, listener) {\n let listeners = this.handlerMap.get(eventName);\n listeners ??= [];\n listeners.push(listener);\n this.handlerMap.set(eventName, listeners);\n }\n remove(eventName, listener) {\n let listeners = this.handlerMap.get(eventName);\n listeners ??= [];\n const index = listeners.indexOf(listener);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n this.handlerMap.set(eventName, listeners);\n }\n emit(eventName, data) {\n (this.handlerMap.get(eventName) ?? []).forEach((callback) => {\n callback(data);\n });\n }\n clearListeners() {\n this.handlerMap.clear();\n }\n}\n\nclass VexEventTarget {\n emitter;\n constructor() {\n this.emitter = new VexEventEmitter;\n }\n emit(eventName, data) {\n this.emitter.emit(String(eventName), data);\n }\n on(eventName, listener) {\n this.emitter.on(String(eventName), listener);\n }\n remove(eventName, listener) {\n this.emitter.remove(String(eventName), listener);\n }\n clearListeners() {\n this.emitter.clearListeners();\n }\n}\n\n// ../../node_modules/.bun/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js\nvar defaultErrorConfig = {\n withStackTrace: false\n};\nvar createNeverThrowError = (message, result, config = defaultErrorConfig) => {\n const data = result.isOk() ? { type: \"Ok\", value: result.value } : { type: \"Err\", value: result.error };\n const maybeStack = config.withStackTrace ? new Error().stack : undefined;\n return {\n data,\n message,\n stack: maybeStack\n };\n};\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m)\n return m.call(o);\n if (o && typeof o.length === \"number\")\n return {\n next: function() {\n if (o && i >= o.length)\n o = undefined;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator)\n throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function() {\n return this;\n }, i;\n function awaitReturn(f) {\n return function(v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function(v) {\n return new Promise(function(a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n if (f)\n i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length)\n resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function() {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function(v) {\n return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator)\n throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function(v) {\n return new Promise(function(resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function(v2) {\n resolve({ value: v2, done: d });\n }, reject);\n }\n}\nclass ResultAsync {\n constructor(res) {\n this._promise = res;\n }\n static fromSafePromise(promise) {\n const newPromise = promise.then((value) => new Ok(value));\n return new ResultAsync(newPromise);\n }\n static fromPromise(promise, errorFn) {\n const newPromise = promise.then((value) => new Ok(value)).catch((e) => new Err(errorFn(e)));\n return new ResultAsync(newPromise);\n }\n static fromThrowable(fn, errorFn) {\n return (...args) => {\n return new ResultAsync((() => __awaiter(this, undefined, undefined, function* () {\n try {\n return new Ok(yield fn(...args));\n } catch (error) {\n return new Err(errorFn ? errorFn(error) : error);\n }\n }))());\n };\n }\n static combine(asyncResultList) {\n return combineResultAsyncList(asyncResultList);\n }\n static combineWithAllErrors(asyncResultList) {\n return combineResultAsyncListWithAllErrors(asyncResultList);\n }\n map(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isErr()) {\n return new Err(res.error);\n }\n return new Ok(yield f(res.value));\n })));\n }\n andThrough(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isErr()) {\n return new Err(res.error);\n }\n const newRes = yield f(res.value);\n if (newRes.isErr()) {\n return new Err(newRes.error);\n }\n return new Ok(res.value);\n })));\n }\n andTee(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isErr()) {\n return new Err(res.error);\n }\n try {\n yield f(res.value);\n } catch (e) {}\n return new Ok(res.value);\n })));\n }\n orTee(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isOk()) {\n return new Ok(res.value);\n }\n try {\n yield f(res.error);\n } catch (e) {}\n return new Err(res.error);\n })));\n }\n mapErr(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isOk()) {\n return new Ok(res.value);\n }\n return new Err(yield f(res.error));\n })));\n }\n andThen(f) {\n return new ResultAsync(this._promise.then((res) => {\n if (res.isErr()) {\n return new Err(res.error);\n }\n const newValue = f(res.value);\n return newValue instanceof ResultAsync ? newValue._promise : newValue;\n }));\n }\n orElse(f) {\n return new ResultAsync(this._promise.then((res) => __awaiter(this, undefined, undefined, function* () {\n if (res.isErr()) {\n return f(res.error);\n }\n return new Ok(res.value);\n })));\n }\n match(ok, _err) {\n return this._promise.then((res) => res.match(ok, _err));\n }\n unwrapOr(t) {\n return this._promise.then((res) => res.unwrapOr(t));\n }\n safeUnwrap() {\n return __asyncGenerator(this, arguments, function* safeUnwrap_1() {\n return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap()))))));\n });\n }\n then(successCallback, failureCallback) {\n return this._promise.then(successCallback, failureCallback);\n }\n [Symbol.asyncIterator]() {\n return __asyncGenerator(this, arguments, function* _a() {\n const result = yield __await(this._promise);\n if (result.isErr()) {\n yield yield __await(errAsync(result.error));\n }\n return yield __await(result.value);\n });\n }\n}\nfunction errAsync(err) {\n return new ResultAsync(Promise.resolve(new Err(err)));\n}\nvar fromPromise = ResultAsync.fromPromise;\nvar fromSafePromise = ResultAsync.fromSafePromise;\nvar fromAsyncThrowable = ResultAsync.fromThrowable;\nvar combineResultList = (resultList) => {\n let acc = ok([]);\n for (const result of resultList) {\n if (result.isErr()) {\n acc = err(result.error);\n break;\n } else {\n acc.map((list) => list.push(result.value));\n }\n }\n return acc;\n};\nvar combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList);\nvar combineResultListWithAllErrors = (resultList) => {\n let acc = ok([]);\n for (const result of resultList) {\n if (result.isErr() && acc.isErr()) {\n acc.error.push(result.error);\n } else if (result.isErr() && acc.isOk()) {\n acc = err([result.error]);\n } else if (result.isOk() && acc.isOk()) {\n acc.value.push(result.value);\n }\n }\n return acc;\n};\nvar combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors);\nvar Result;\n(function(Result2) {\n function fromThrowable(fn, errorFn) {\n return (...args) => {\n try {\n const result = fn(...args);\n return ok(result);\n } catch (e) {\n return err(errorFn ? errorFn(e) : e);\n }\n };\n }\n Result2.fromThrowable = fromThrowable;\n function combine(resultList) {\n return combineResultList(resultList);\n }\n Result2.combine = combine;\n function combineWithAllErrors(resultList) {\n return combineResultListWithAllErrors(resultList);\n }\n Result2.combineWithAllErrors = combineWithAllErrors;\n})(Result || (Result = {}));\nfunction ok(value) {\n return new Ok(value);\n}\nfunction err(err2) {\n return new Err(err2);\n}\nclass Ok {\n constructor(value) {\n this.value = value;\n }\n isOk() {\n return true;\n }\n isErr() {\n return !this.isOk();\n }\n map(f) {\n return ok(f(this.value));\n }\n mapErr(_f) {\n return ok(this.value);\n }\n andThen(f) {\n return f(this.value);\n }\n andThrough(f) {\n return f(this.value).map((_value) => this.value);\n }\n andTee(f) {\n try {\n f(this.value);\n } catch (e) {}\n return ok(this.value);\n }\n orTee(_f) {\n return ok(this.value);\n }\n orElse(_f) {\n return ok(this.value);\n }\n asyncAndThen(f) {\n return f(this.value);\n }\n asyncAndThrough(f) {\n return f(this.value).map(() => this.value);\n }\n asyncMap(f) {\n return ResultAsync.fromSafePromise(f(this.value));\n }\n unwrapOr(_v) {\n return this.value;\n }\n match(ok2, _err) {\n return ok2(this.value);\n }\n safeUnwrap() {\n const value = this.value;\n return function* () {\n return value;\n }();\n }\n _unsafeUnwrap(_) {\n return this.value;\n }\n _unsafeUnwrapErr(config) {\n throw createNeverThrowError(\"Called `_unsafeUnwrapErr` on an Ok\", this, config);\n }\n *[Symbol.iterator]() {\n return this.value;\n }\n}\n\nclass Err {\n constructor(error) {\n this.error = error;\n }\n isOk() {\n return false;\n }\n isErr() {\n return !this.isOk();\n }\n map(_f) {\n return err(this.error);\n }\n mapErr(f) {\n return err(f(this.error));\n }\n andThrough(_f) {\n return err(this.error);\n }\n andTee(_f) {\n return err(this.error);\n }\n orTee(f) {\n try {\n f(this.error);\n } catch (e) {}\n return err(this.error);\n }\n andThen(_f) {\n return err(this.error);\n }\n orElse(f) {\n return f(this.error);\n }\n asyncAndThen(_f) {\n return errAsync(this.error);\n }\n asyncAndThrough(_f) {\n return errAsync(this.error);\n }\n asyncMap(_f) {\n return errAsync(this.error);\n }\n unwrapOr(v) {\n return v;\n }\n match(_ok, err2) {\n return err2(this.error);\n }\n safeUnwrap() {\n const error = this.error;\n return function* () {\n yield err(error);\n throw new Error(\"Do not use this generator out of `safeTry`\");\n }();\n }\n _unsafeUnwrap(config) {\n throw createNeverThrowError(\"Called `_unsafeUnwrap` on an Err\", this, config);\n }\n _unsafeUnwrapErr(_) {\n return this.error;\n }\n *[Symbol.iterator]() {\n const self = this;\n yield self;\n return self;\n }\n}\nvar fromThrowable = Result.fromThrowable;\n\n// src/VexPacketBase.ts\nvar MATCH_STATUS_ALT_ACK = 167;\n\nclass Packet {\n data;\n static ENCODER;\n constructor(rawData) {\n this.data = rawData instanceof ArrayBuffer ? new Uint8Array(rawData) : rawData;\n }\n}\n\nclass DeviceBoundPacket extends Packet {\n get commandId() {\n return this.constructor.COMMAND_ID;\n }\n get commandExtendedId() {\n return this.constructor.COMMAND_EXTENDED_ID;\n }\n static COMMAND_ID;\n static COMMAND_EXTENDED_ID;\n constructor(payload) {\n super(new Uint8Array);\n const me = this.constructor;\n if (me.COMMAND_EXTENDED_ID === undefined) {\n if (payload === undefined) {\n this.data = Packet.ENCODER.cdcCommand(me.COMMAND_ID);\n } else {\n this.data = Packet.ENCODER.cdcCommandWithData(me.COMMAND_ID, payload);\n }\n } else {\n if (payload === undefined) {\n this.data = Packet.ENCODER.cdc2Command(me.COMMAND_ID, me.COMMAND_EXTENDED_ID);\n } else {\n this.data = Packet.ENCODER.cdc2CommandWithData(me.COMMAND_ID, me.COMMAND_EXTENDED_ID, payload);\n }\n }\n }\n}\n\nclass HostBoundPacket extends Packet {\n ack = 255 /* CDC2_NACK */;\n payloadSize;\n ackIndex;\n constructor(data) {\n super(data);\n this.payloadSize = Packet.ENCODER.getPayloadSize(this.data);\n const n = Packet.ENCODER.getHostHeaderLength(this.data);\n this.ack = this.data[this.ackIndex = n + 1];\n }\n static isValidPacket(data, n) {\n const ack = data[n + 1];\n return ack === 118 /* CDC2_ACK */ || ack === MATCH_STATUS_ALT_ACK;\n }\n}\n\n// src/VexCRC.ts\nvar CRC16TABLE = [\n 0,\n 4129,\n 8258,\n 12387,\n 16516,\n 20645,\n 24774,\n 28903,\n 33032,\n 37161,\n 41290,\n 45419,\n 49548,\n 53677,\n 57806,\n 61935,\n 4657,\n 528,\n 12915,\n 8786,\n 21173,\n 17044,\n 29431,\n 25302,\n 37689,\n 33560,\n 45947,\n 41818,\n 54205,\n 50076,\n 62463,\n 58334,\n 9314,\n 13379,\n 1056,\n 5121,\n 25830,\n 29895,\n 17572,\n 21637,\n 42346,\n 46411,\n 34088,\n 38153,\n 58862,\n 62927,\n 50604,\n 54669,\n 13907,\n 9842,\n 5649,\n 1584,\n 30423,\n 26358,\n 22165,\n 18100,\n 46939,\n 42874,\n 38681,\n 34616,\n 63455,\n 59390,\n 55197,\n 51132,\n 18628,\n 22757,\n 26758,\n 30887,\n 2112,\n 6241,\n 10242,\n 14371,\n 51660,\n 55789,\n 59790,\n 63919,\n 35144,\n 39273,\n 43274,\n 47403,\n 23285,\n 19156,\n 31415,\n 27286,\n 6769,\n 2640,\n 14899,\n 10770,\n 56317,\n 52188,\n 64447,\n 60318,\n 39801,\n 35672,\n 47931,\n 43802,\n 27814,\n 31879,\n 19684,\n 23749,\n 11298,\n 15363,\n 3168,\n 7233,\n 60846,\n 64911,\n 52716,\n 56781,\n 44330,\n 48395,\n 36200,\n 40265,\n 32407,\n 28342,\n 24277,\n 20212,\n 15891,\n 11826,\n 7761,\n 3696,\n 65439,\n 61374,\n 57309,\n 53244,\n 48923,\n 44858,\n 40793,\n 36728,\n 37256,\n 33193,\n 45514,\n 41451,\n 53516,\n 49453,\n 61774,\n 57711,\n 4224,\n 161,\n 12482,\n 8419,\n 20484,\n 16421,\n 28742,\n 24679,\n 33721,\n 37784,\n 41979,\n 46042,\n 49981,\n 54044,\n 58239,\n 62302,\n 689,\n 4752,\n 8947,\n 13010,\n 16949,\n 21012,\n 25207,\n 29270,\n 46570,\n 42443,\n 38312,\n 34185,\n 62830,\n 58703,\n 54572,\n 50445,\n 13538,\n 9411,\n 5280,\n 1153,\n 29798,\n 25671,\n 21540,\n 17413,\n 42971,\n 47098,\n 34713,\n 38840,\n 59231,\n 63358,\n 50973,\n 55100,\n 9939,\n 14066,\n 1681,\n 5808,\n 26199,\n 30326,\n 17941,\n 22068,\n 55628,\n 51565,\n 63758,\n 59695,\n 39368,\n 35305,\n 47498,\n 43435,\n 22596,\n 18533,\n 30726,\n 26663,\n 6336,\n 2273,\n 14466,\n 10403,\n 52093,\n 56156,\n 60223,\n 64286,\n 35833,\n 39896,\n 43963,\n 48026,\n 19061,\n 23124,\n 27191,\n 31254,\n 2801,\n 6864,\n 10931,\n 14994,\n 64814,\n 60687,\n 56684,\n 52557,\n 48554,\n 44427,\n 40424,\n 36297,\n 31782,\n 27655,\n 23652,\n 19525,\n 15522,\n 11395,\n 7392,\n 3265,\n 61215,\n 65342,\n 53085,\n 57212,\n 44955,\n 49082,\n 36825,\n 40952,\n 28183,\n 32310,\n 20053,\n 24180,\n 11923,\n 16050,\n 3793,\n 7920\n];\n\nclass CrcGenerator {\n crc32Table;\n static POLYNOMIAL_CRC32 = 79764919;\n static POLYNOMIAL_CRC16 = 4129;\n constructor() {\n this.crc32Table = new Uint32Array(256);\n this.crc32GenTable();\n }\n crc16(buf, initValue) {\n const numberOfBytes = buf.byteLength;\n let accumulator = initValue;\n let i;\n let j;\n for (j = 0;j < numberOfBytes; j++) {\n i = (accumulator >>> 8 ^ buf[j]) & 255;\n accumulator = (accumulator << 8 ^ CRC16TABLE[i]) >>> 0;\n }\n return (accumulator & 65535) >>> 0;\n }\n crc32GenTable() {\n let i;\n let j;\n let crcAccumulator;\n for (i = 0;i < 256; i++) {\n crcAccumulator = i << 24;\n for (j = 0;j < 8; j++) {\n if ((crcAccumulator & 2147483648) !== 0)\n crcAccumulator = crcAccumulator << 1 ^ CrcGenerator.POLYNOMIAL_CRC32;\n else\n crcAccumulator = crcAccumulator << 1;\n }\n this.crc32Table[i] = crcAccumulator;\n }\n }\n crc32(buf, initValue) {\n const numberOfBytes = buf.byteLength;\n let crcAccumulator = initValue;\n let i;\n let j;\n for (j = 0;j < numberOfBytes; j++) {\n i = (crcAccumulator >>> 24 ^ buf[j]) & 255;\n crcAccumulator = (crcAccumulator << 8 ^ this.crc32Table[i]) >>> 0;\n }\n return (crcAccumulator & 4294967295) >>> 0;\n }\n}\n\n// src/VexPacketModels.ts\nvar exports_VexPacketModels = {};\n__export(exports_VexPacketModels, {\n WriteKeyValueReplyD2HPacket: () => WriteKeyValueReplyD2HPacket,\n WriteKeyValueH2DPacket: () => WriteKeyValueH2DPacket,\n WriteFileReplyD2HPacket: () => WriteFileReplyD2HPacket,\n WriteFileH2DPacket: () => WriteFileH2DPacket,\n UpdateMatchModeH2DPacket: () => UpdateMatchModeH2DPacket,\n SystemVersionReplyD2HPacket: () => SystemVersionReplyD2HPacket,\n SystemVersionH2DPacket: () => SystemVersionH2DPacket,\n SendDashTouchReplyD2HPacket: () => SendDashTouchReplyD2HPacket,\n SendDashTouchH2DPacket: () => SendDashTouchH2DPacket,\n SelectDashReplyD2HPacket: () => SelectDashReplyD2HPacket,\n SelectDashH2DPacket: () => SelectDashH2DPacket,\n ScreenCaptureReplyD2HPacket: () => ScreenCaptureReplyD2HPacket,\n ScreenCaptureH2DPacket: () => ScreenCaptureH2DPacket,\n ReadLogPageReplyD2HPacket: () => ReadLogPageReplyD2HPacket,\n ReadLogPageH2DPacket: () => ReadLogPageH2DPacket,\n ReadKeyValueReplyD2HPacket: () => ReadKeyValueReplyD2HPacket,\n ReadKeyValueH2DPacket: () => ReadKeyValueH2DPacket,\n ReadFileReplyD2HPacket: () => ReadFileReplyD2HPacket,\n ReadFileH2DPacket: () => ReadFileH2DPacket,\n Query1ReplyD2HPacket: () => Query1ReplyD2HPacket,\n Query1H2DPacket: () => Query1H2DPacket,\n MatchStatusReplyD2HPacket: () => MatchStatusReplyD2HPacket,\n MatchModeReplyD2HPacket: () => MatchModeReplyD2HPacket,\n LoadFileActionReplyD2HPacket: () => LoadFileActionReplyD2HPacket,\n LoadFileActionH2DPacket: () => LoadFileActionH2DPacket,\n LinkFileReplyD2HPacket: () => LinkFileReplyD2HPacket,\n LinkFileH2DPacket: () => LinkFileH2DPacket,\n InitFileTransferReplyD2HPacket: () => InitFileTransferReplyD2HPacket,\n InitFileTransferH2DPacket: () => InitFileTransferH2DPacket,\n GetSystemStatusReplyD2HPacket: () => GetSystemStatusReplyD2HPacket,\n GetSystemStatusH2DPacket: () => GetSystemStatusH2DPacket,\n GetSystemFlagsReplyD2HPacket: () => GetSystemFlagsReplyD2HPacket,\n GetSystemFlagsH2DPacket: () => GetSystemFlagsH2DPacket,\n GetSlot5to8InfoReplyD2HPacket: () => GetSlot5to8InfoReplyD2HPacket,\n GetSlot5to8InfoH2DPacket: () => GetSlot5to8InfoH2DPacket,\n GetSlot1to4InfoReplyD2HPacket: () => GetSlot1to4InfoReplyD2HPacket,\n GetSlot1to4InfoH2DPacket: () => GetSlot1to4InfoH2DPacket,\n GetRadioStatusReplyD2HPacket: () => GetRadioStatusReplyD2HPacket,\n GetRadioStatusH2DPacket: () => GetRadioStatusH2DPacket,\n GetRadioModeH2DPacket: () => GetRadioModeH2DPacket,\n GetProgramSlotInfoReplyD2HPacket: () => GetProgramSlotInfoReplyD2HPacket,\n GetProgramSlotInfoH2DPacket: () => GetProgramSlotInfoH2DPacket,\n GetMatchStatusH2DPacket: () => GetMatchStatusH2DPacket,\n GetLogCountReplyD2HPacket: () => GetLogCountReplyD2HPacket,\n GetLogCountH2DPacket: () => GetLogCountH2DPacket,\n GetFileMetadataReplyD2HPacket: () => GetFileMetadataReplyD2HPacket,\n GetFileMetadataH2DPacket: () => GetFileMetadataH2DPacket,\n GetFdtStatusReplyD2HPacket: () => GetFdtStatusReplyD2HPacket,\n GetFdtStatusH2DPacket: () => GetFdtStatusH2DPacket,\n GetDirectoryFileCountReplyD2HPacket: () => GetDirectoryFileCountReplyD2HPacket,\n GetDirectoryFileCountH2DPacket: () => GetDirectoryFileCountH2DPacket,\n GetDirectoryEntryReplyD2HPacket: () => GetDirectoryEntryReplyD2HPacket,\n GetDirectoryEntryH2DPacket: () => GetDirectoryEntryH2DPacket,\n GetDeviceStatusReplyD2HPacket: () => GetDeviceStatusReplyD2HPacket,\n GetDeviceStatusH2DPacket: () => GetDeviceStatusH2DPacket,\n FileFormatReplyD2HPacket: () => FileFormatReplyD2HPacket,\n FileFormatH2DPacket: () => FileFormatH2DPacket,\n FileControlReplyD2HPacket: () => FileControlReplyD2HPacket,\n FileControlH2DPacket: () => FileControlH2DPacket,\n FileClearUpReplyD2HPacket: () => FileClearUpReplyD2HPacket,\n FileClearUpH2DPacket: () => FileClearUpH2DPacket,\n FactoryStatusReplyD2HPacket: () => FactoryStatusReplyD2HPacket,\n FactoryStatusH2DPacket: () => FactoryStatusH2DPacket,\n FactoryEnableReplyD2HPacket: () => FactoryEnableReplyD2HPacket,\n FactoryEnableH2DPacket: () => FactoryEnableH2DPacket,\n ExitFileTransferReplyD2HPacket: () => ExitFileTransferReplyD2HPacket,\n ExitFileTransferH2DPacket: () => ExitFileTransferH2DPacket,\n EraseFileReplyD2HPacket: () => EraseFileReplyD2HPacket,\n EraseFileH2DPacket: () => EraseFileH2DPacket\n});\n\n// src/VexFirmwareVersion.ts\nclass VexFirmwareVersion {\n major;\n minor;\n build;\n beta;\n constructor(major, minor, build, beta) {\n this.major = major;\n this.minor = minor;\n this.build = build;\n this.beta = beta;\n }\n static fromString(version) {\n const parts = version.toLowerCase().replace(/b/g, \"\").split(\".\").map((x) => parseInt(x, 10));\n while (parts.length < 4) {\n parts.push(0);\n }\n return new VexFirmwareVersion(parts[0], parts[1], parts[2], parts[3]);\n }\n static fromUint8Array(data, offset = 0, reverse = false) {\n return new VexFirmwareVersion(data[offset + (reverse ? 3 : 0)], data[offset + (reverse ? 2 : 1)], data[offset + (reverse ? 1 : 2)], data[offset + (reverse ? 0 : 3)]);\n }\n static allZero() {\n return new VexFirmwareVersion(0, 0, 0, 0);\n }\n static fromCatalogString(version) {\n return VexFirmwareVersion.fromString(version.replace(/_/g, \".\"));\n }\n isBeta() {\n return this.beta !== 0;\n }\n toUint8Array(reverse = false) {\n const data = new Uint8Array(4);\n data[reverse ? 3 : 0] = this.major;\n data[reverse ? 2 : 1] = this.minor;\n data[reverse ? 1 : 2] = this.build;\n data[reverse ? 0 : 3] = this.beta;\n return data;\n }\n toUserString() {\n return `${this.major}.${this.minor}.${this.build}`;\n }\n toInternalString() {\n return `${this.toUserString()}.b${this.beta}`;\n }\n compare(that) {\n const majorComp = this.major - that.major;\n const minorComp = this.minor - that.minor;\n const buildComp = this.build - that.build;\n const betaComp = this.beta - that.beta;\n if (majorComp !== 0) {\n return majorComp;\n } else if (minorComp !== 0) {\n return minorComp;\n } else if (buildComp !== 0) {\n return buildComp;\n } else if (betaComp !== 0) {\n return betaComp;\n }\n return 0;\n }\n}\n\n// src/VexPacketView.ts\nclass PacketView extends DataView {\n position = 0;\n littleEndianDefault = true;\n constructor(buffer, offset = 0, length = buffer.byteLength - offset) {\n super(buffer, offset, length);\n }\n static fromPacket(packet) {\n const view = new PacketView(packet.data.buffer, packet.data.byteOffset);\n view.position = packet.ackIndex + 1;\n return view;\n }\n nextInt8() {\n const result = this.getInt8(this.position);\n this.position += 1;\n return result;\n }\n nextUint8() {\n const result = this.getUint8(this.position);\n this.position += 1;\n return result;\n }\n nextInt16(littleEndian = this.littleEndianDefault) {\n const result = this.getInt16(this.position, littleEndian);\n this.position += 2;\n return result;\n }\n nextUint16(littleEndian = this.littleEndianDefault) {\n const result = this.getUint16(this.position, littleEndian);\n this.position += 2;\n return result;\n }\n nextInt32(littleEndian = this.littleEndianDefault) {\n const result = this.getInt32(this.position, littleEndian);\n this.position += 4;\n return result;\n }\n nextUint32(littleEndian = this.littleEndianDefault) {\n const result = this.getUint32(this.position, littleEndian);\n this.position += 4;\n return result;\n }\n nextString(length) {\n let result = \"\";\n for (let i = 0;i < length; i++) {\n result += String.fromCharCode(this.nextUint8());\n }\n return result;\n }\n nextNTBS(length) {\n let result = \"\";\n const lastPosition = this.position;\n for (let i = 0;i < length; i++) {\n if (this.byteLength <= this.position)\n break;\n const g = this.nextUint8();\n if (g === 0)\n break;\n result += String.fromCharCode(g);\n }\n this.position = lastPosition + length;\n return result;\n }\n nextVarNTBS(length) {\n let result = \"\";\n for (let i = 0;i < length; i++) {\n if (this.byteLength <= this.position)\n break;\n const g = this.nextUint8();\n if (g === 0)\n break;\n result += String.fromCharCode(g);\n }\n return result;\n }\n nextVersion(reverse = false) {\n const result = VexFirmwareVersion.fromUint8Array(new Uint8Array(this.buffer, this.byteOffset, this.byteLength), this.position, reverse);\n this.position += 4;\n return result;\n }\n}\n\n// src/VexPacketModels.ts\nvar textEncoder = new TextEncoder;\n\nclass Query1H2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 33;\n static COMMAND_EXTENDED_ID = undefined;\n constructor() {\n super(undefined);\n }\n}\n\nclass SystemVersionH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 164;\n static COMMAND_EXTENDED_ID = undefined;\n constructor() {\n super(undefined);\n }\n}\n\nclass UpdateMatchModeH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 88;\n static COMMAND_EXTENDED_ID = 193;\n constructor(mode, matchClock) {\n let bit1;\n switch (mode) {\n case \"autonomous\":\n bit1 = 10;\n break;\n case \"driver\":\n bit1 = 8;\n break;\n case \"disabled\":\n bit1 = 11;\n }\n const payload = new Uint8Array(5);\n const view = new DataView(payload.buffer);\n payload[0] = (15 & bit1) >>> 0;\n view.setUint32(1, matchClock, true);\n super(payload);\n }\n}\n\nclass GetMatchStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 88;\n static COMMAND_EXTENDED_ID = 194;\n constructor() {\n super(undefined);\n }\n}\n\nclass GetRadioModeH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 88;\n static COMMAND_EXTENDED_ID = 65;\n constructor(mode) {\n const payload = new Uint8Array(1);\n payload[0] = mode;\n super(payload);\n }\n}\n\nclass FileControlH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 16;\n constructor(a, b) {\n const payload = new Uint8Array(2);\n payload.set([a, b], 0);\n super(payload);\n }\n}\n\nclass InitFileTransferH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 17;\n constructor(operation, target, vendor, options, binary, addr, name, type, version = new VexFirmwareVersion(1, 0, 0, 0)) {\n const payload = new Uint8Array(52);\n const view = new DataView(payload.buffer);\n view.setUint8(0, operation);\n view.setUint8(1, target);\n view.setUint8(2, vendor);\n view.setUint8(3, options);\n view.setUint32(4, binary.length, true);\n view.setUint32(8, addr, true);\n view.setUint32(12, operation === 1 /* WRITE */ ? Packet.ENCODER.crcgen.crc32(binary, 0) : 0, true);\n const re = /(?:\\.([^.]+))?$/;\n const reResult = re.exec(name);\n let ext = reResult != null ? reResult[1] : undefined;\n ext ??= \"\";\n ext = ext === \"gz\" ? \"bin\" : ext;\n payload.set(encodeFixedText(type ?? ext, \"File type\", 4), 16);\n const timestamp = (Date.now() / 1000 >>> 0) - PacketEncoder.J2000_EPOCH;\n view.setUint32(20, timestamp, true);\n payload.set(version.toUint8Array(), 24);\n const nameEncoded = encodeFixedText(name, \"Filename\", 23);\n payload.set(nameEncoded, 28);\n view.setUint8(51, 0);\n super(payload);\n }\n}\n\nclass ExitFileTransferH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 18;\n constructor(action) {\n const payload = new Uint8Array(1);\n payload[0] = action;\n super(payload);\n }\n}\n\nclass WriteFileH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 19;\n constructor(addr, buf) {\n const payload = new Uint8Array(4 + buf.length);\n const view = new DataView(payload.buffer);\n view.setUint32(0, addr, true);\n payload.set(buf, 4);\n super(payload);\n }\n}\n\nclass ReadFileH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 20;\n constructor(addr, size) {\n const payload = new Uint8Array(6);\n const view = new DataView(payload.buffer);\n view.setUint32(0, addr, true);\n view.setUint16(4, size, true);\n super(payload);\n }\n}\n\nclass LinkFileH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 21;\n constructor(vendor, fileName, options) {\n const str = encodeFixedText(fileName, \"Filename\", 23);\n const payload = new Uint8Array(26);\n payload.set([vendor, options], 0);\n payload.set(str, 2);\n super(payload);\n }\n}\n\nclass GetDirectoryFileCountH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 22;\n constructor(vendor) {\n const payload = new Uint8Array(2);\n payload.set([vendor, 0], 0);\n super(payload);\n }\n}\n\nclass GetDirectoryEntryH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 23;\n constructor(index) {\n const payload = new Uint8Array(2);\n payload.set([index, 0], 0);\n super(payload);\n }\n}\n\nclass LoadFileActionH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 24;\n constructor(vendor, actionId, fileNameOrSlotNumber) {\n let fileName;\n if (typeof fileNameOrSlotNumber === \"string\") {\n fileName = fileNameOrSlotNumber;\n } else {\n fileName = \"___s_\" + (fileNameOrSlotNumber - 1) + \".bin\";\n }\n const encodedName = encodeFixedText(fileName, \"Filename\", 23);\n const payload = new Uint8Array(26);\n payload.set([vendor, actionId], 0);\n payload.set(encodedName, 2);\n super(payload);\n }\n}\n\nclass GetFileMetadataH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 25;\n constructor(vendor, fileName, options) {\n const encodedName = encodeFixedText(fileName, \"Filename\", 23);\n const payload = new Uint8Array(26);\n payload.set([vendor, options], 0);\n payload.set(encodedName, 2);\n super(payload);\n }\n}\n\nclass EraseFileH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 27;\n constructor(vendor, fileName) {\n const encodedName = encodeFixedText(fileName, \"Filename\", 23);\n const payload = new Uint8Array(26);\n payload.set([vendor, 128], 0);\n payload.set(encodedName, 2);\n super(payload);\n }\n}\n\nclass GetProgramSlotInfoH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 28;\n constructor(vendor, fileName) {\n const encodedName = encodeFixedText(fileName, \"Filename\", 23);\n const payload = new Uint8Array(26);\n payload.set([vendor, 0], 0);\n payload.set(encodedName, 2);\n super(payload);\n }\n}\n\nclass FileClearUpH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 30;\n constructor(vendor) {\n const payload = new Uint8Array(2);\n payload.set([vendor, 0], 0);\n super(payload);\n }\n}\n\nclass FileFormatH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 31;\n constructor() {\n const payload = new Uint8Array(4);\n payload.set([68, 67, 66, 65], 0);\n super(payload);\n }\n}\n\nclass GetSystemFlagsH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 32;\n}\n\nclass GetDeviceStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 33;\n constructor() {\n super(undefined);\n }\n}\n\nclass GetSystemStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 34;\n constructor() {\n super(undefined);\n }\n}\n\nclass GetFdtStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 35;\n constructor() {\n super(undefined);\n }\n}\n\nclass GetLogCountH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 36;\n constructor() {\n super(undefined);\n }\n}\n\nclass ReadLogPageH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 37;\n constructor(offset, count) {\n const payload = new Uint8Array(8);\n const view = new DataView(payload.buffer);\n view.setUint32(0, offset, true);\n view.setUint32(4, count, true);\n super(payload);\n }\n}\n\nclass GetRadioStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 38;\n constructor() {\n super(undefined);\n }\n}\n\nclass ScreenCaptureH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 40;\n constructor(e) {\n const payload = new Uint8Array(1);\n payload[0] = e;\n super(payload);\n }\n}\n\nclass SendDashTouchH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 42;\n constructor(x, y, press) {\n const payload = new Uint8Array(6);\n const view = new DataView(payload.buffer);\n view.setUint16(0, x, true);\n view.setUint16(2, y, true);\n view.setUint16(4, press ? 1 : 0, true);\n super(payload);\n }\n}\n\nclass SelectDashH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 43;\n constructor(screen, port) {\n const payload = new Uint8Array(2);\n payload[0] = screen;\n payload[1] = port;\n super(payload);\n }\n}\n\nclass ReadKeyValueH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 46;\n constructor(key) {\n const encodedKey = encodeFixedText(key, \"Key\", 31);\n const payload = new Uint8Array(32);\n payload.set(encodedKey, 0);\n super(payload);\n }\n}\n\nclass WriteKeyValueH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 47;\n constructor(key, value) {\n const strk = encodeFixedText(key, \"Key\", 31);\n const strv = textEncoder.encode(value);\n if (strk.byteLength + strv.byteLength + 20 > 32767) {\n throw new RangeError(\"Key and value are too large for a protocol packet\");\n }\n const payload = new Uint8Array(strk.length + strv.length + 20);\n payload.set(strk, 0);\n payload.set(strv, strk.length + 1);\n super(payload);\n }\n}\n\nclass GetSlot1to4InfoH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 49;\n constructor() {\n super(undefined);\n }\n}\n\nclass GetSlot5to8InfoH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 50;\n constructor() {\n super(undefined);\n }\n}\n\nclass FactoryStatusH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 241;\n}\n\nclass FactoryEnableH2DPacket extends DeviceBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 255;\n constructor() {\n const payload = new Uint8Array(4);\n payload.set([77, 76, 75, 74], 0);\n super(payload);\n }\n}\n\nclass Query1ReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 33;\n static COMMAND_EXTENDED_ID = undefined;\n joystickFlag1;\n joystickFlag2;\n brainFlag1;\n brainFlag2;\n bootloadFlag1;\n bootloadFlag2;\n constructor(data) {\n super(data);\n this.joystickFlag1 = this.data[4];\n this.joystickFlag2 = this.data[5];\n this.brainFlag1 = this.data[6];\n this.brainFlag2 = this.data[7];\n this.bootloadFlag1 = this.data[10];\n this.bootloadFlag2 = this.data[11];\n }\n}\n\nclass SystemVersionReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 164;\n static COMMAND_EXTENDED_ID = undefined;\n version;\n hardware;\n constructor(data) {\n super(data);\n this.version = new VexFirmwareVersion(this.data[4], this.data[5], this.data[6], this.data[8]);\n this.hardware = this.data[7];\n }\n}\n\nclass MatchModeReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 88;\n static COMMAND_EXTENDED_ID = 193;\n modebit;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.modebit = dataView.nextUint8();\n }\n}\n\nclass MatchStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 88;\n static COMMAND_EXTENDED_ID = 194;\n rssi;\n systemStatusBits;\n radioStatusBits;\n fieldStatusBits;\n matchClock;\n brainBatteryPercent;\n controllerBatteryPercent;\n partnerControllerBatteryPercent;\n pad;\n buttons;\n activeProgram;\n radioType;\n radioChannel;\n radioSlot;\n robotName;\n controllerFlags;\n rxSignalQuality;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n const n = this.ackIndex;\n this.rssi = dataView.nextInt8();\n this.systemStatusBits = dataView.nextUint16();\n this.radioStatusBits = dataView.nextUint16();\n this.fieldStatusBits = dataView.nextUint8();\n this.matchClock = dataView.nextUint8();\n this.brainBatteryPercent = dataView.nextUint8();\n this.controllerBatteryPercent = dataView.nextUint8();\n this.partnerControllerBatteryPercent = dataView.nextUint8();\n this.pad = dataView.nextUint8();\n this.buttons = dataView.nextUint16();\n this.activeProgram = dataView.nextUint8();\n this.radioType = dataView.nextUint8();\n this.radioChannel = dataView.nextUint8();\n this.radioSlot = dataView.nextUint8();\n this.robotName = dataView.nextNTBS(10);\n this.controllerFlags = dataView.getUint8(n + 28);\n this.rxSignalQuality = dataView.getUint8(n + 29);\n let rawStr = new TextDecoder(\"UTF-8\").decode(data.slice(n + 18, n + this.payloadSize + 28));\n const endIdx = rawStr.indexOf(\"\\x00\");\n if (endIdx > -1) {\n rawStr = rawStr.substr(0, endIdx);\n }\n this.robotName = rawStr;\n }\n}\n\nclass FileControlReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 16;\n}\n\nclass InitFileTransferReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 17;\n windowSize;\n fileSize;\n crc32;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.windowSize = dataView.nextUint16();\n this.fileSize = dataView.nextUint32();\n this.crc32 = dataView.nextUint32();\n }\n}\n\nclass ExitFileTransferReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 18;\n}\n\nclass WriteFileReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 19;\n}\n\nclass ReadFileReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 20;\n addr;\n length;\n buf;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.addr = dataView.nextUint32();\n this.length = this.payloadSize - 8;\n this.buf = this.data.slice(dataView.position, dataView.position + this.length).buffer;\n }\n static isValidPacket(data, n) {\n return super.isValidPacket(data, n);\n }\n}\n\nclass LinkFileReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 21;\n}\n\nclass GetDirectoryFileCountReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 22;\n count;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.count = dataView.nextUint16();\n }\n}\n\nclass GetDirectoryEntryReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 23;\n file;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n if (this.payloadSize > 4) {\n this.file = {\n index: dataView.nextUint8(),\n size: dataView.nextUint32(),\n loadAddress: dataView.nextUint32(),\n crc32: dataView.nextUint32(),\n type: dataView.nextString(4),\n timestamp: dataView.nextUint32() + PacketEncoder.J2000_EPOCH,\n version: dataView.nextVersion(),\n filename: dataView.nextNTBS(32)\n };\n }\n }\n}\n\nclass LoadFileActionReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 24;\n}\n\nclass GetFileMetadataReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 25;\n file;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n dataView.nextUint8();\n if (this.payloadSize > 4) {\n this.file = {\n size: dataView.nextUint32(),\n loadAddress: dataView.nextUint32(),\n crc32: dataView.nextUint32(),\n type: dataView.nextString(4),\n timestamp: dataView.nextUint32() + PacketEncoder.J2000_EPOCH,\n version: dataView.nextVersion()\n };\n }\n }\n}\n\nclass EraseFileReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 27;\n}\n\nclass GetProgramSlotInfoReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 28;\n requestedSlot;\n slot;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.slot = dataView.nextUint8();\n this.requestedSlot = dataView.nextUint8();\n }\n}\n\nclass FileClearUpReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 30;\n}\n\nclass FileFormatReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 31;\n}\n\nclass GetSystemFlagsReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 32;\n flags;\n radioSearching;\n radioQuality;\n controllerBatteryPercent;\n partnerControllerBatteryPercent;\n battery;\n currentProgram;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.radioSearching = false;\n this.currentProgram = 0;\n this.flags = dataView.nextUint32();\n const hasPartner = (8192 & this.flags) !== 0;\n const hasRadio = (1536 & this.flags) === 1536;\n const byte1 = dataView.nextUint8();\n const byte2 = dataView.nextUint8();\n if (this.payloadSize === 11) {\n this.battery = 8 * (byte1 & 15);\n if ((this.flags & 256) !== 0 || hasRadio)\n this.controllerBatteryPercent = 8 * (byte1 >> 4 & 15);\n if (hasRadio)\n this.radioQuality = 8 * (byte2 & 15);\n this.radioSearching = (this.flags & 1536) === 512;\n if (hasPartner)\n this.partnerControllerBatteryPercent = 8 * (byte2 >> 4 & 15);\n this.currentProgram = dataView.nextUint8();\n if (this.battery != null && this.battery > 100)\n this.battery = 100;\n if (this.controllerBatteryPercent != null && this.controllerBatteryPercent > 100)\n this.controllerBatteryPercent = 100;\n if (this.radioQuality != null && this.radioQuality > 100)\n this.radioQuality = 100;\n if (this.partnerControllerBatteryPercent != null && this.partnerControllerBatteryPercent > 100)\n this.partnerControllerBatteryPercent = 100;\n }\n }\n}\n\nclass GetDeviceStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 33;\n count;\n devices;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.count = dataView.nextUint8();\n this.devices = [];\n for (let i = 0;i < this.count; i++) {\n this.devices.push({\n port: dataView.nextUint8(),\n type: dataView.nextUint8(),\n status: dataView.nextUint8(),\n betaversion: dataView.nextUint8(),\n version: dataView.nextUint16(),\n bootversion: dataView.nextUint16()\n });\n }\n }\n}\n\nclass GetSystemStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 34;\n systemVersion;\n cpu0Version;\n cpu1Version;\n nxpVersion;\n touchVersion;\n uniqueId;\n sysflags;\n eventBrain;\n romBootloaderActive;\n ramBootloaderActive;\n goldenVersion;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n dataView.nextUint8();\n this.systemVersion = dataView.nextVersion();\n this.cpu0Version = dataView.nextVersion();\n this.cpu1Version = dataView.nextVersion();\n this.touchVersion = dataView.nextVersion(true);\n this.uniqueId = 1234;\n this.sysflags = [0, 0, 0, 0, 0, 0, 0];\n this.goldenVersion = VexFirmwareVersion.allZero();\n this.nxpVersion = VexFirmwareVersion.allZero();\n this.eventBrain = false;\n this.romBootloaderActive = false;\n this.ramBootloaderActive = false;\n if (this.payloadSize > 25) {\n this.uniqueId = dataView.nextUint32();\n this.sysflags = [\n dataView.nextUint8(),\n dataView.nextUint8(),\n dataView.nextUint8(),\n dataView.nextUint8(),\n dataView.nextUint8(),\n 0,\n dataView.nextUint8()\n ];\n this.eventBrain = (1 & this.sysflags[6]) !== 0;\n this.romBootloaderActive = (2 & this.sysflags[6]) !== 0;\n this.ramBootloaderActive = (4 & this.sysflags[6]) !== 0;\n dataView.nextUint16();\n this.goldenVersion = dataView.nextVersion();\n }\n if (this.payloadSize > 37) {\n this.nxpVersion = dataView.nextVersion();\n }\n }\n}\n\nclass GetFdtStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 35;\n count;\n status;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.count = dataView.nextUint8();\n this.status = [];\n for (let i = 0;i < this.count; i++) {\n this.status.push({\n index: dataView.nextUint8(),\n type: dataView.nextUint8(),\n status: dataView.nextUint8(),\n betaversion: dataView.nextUint8(),\n version: dataView.nextUint16(),\n bootversion: dataView.nextUint16()\n });\n }\n }\n}\n\nclass GetLogCountReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 36;\n count;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n dataView.nextUint8();\n this.count = dataView.nextUint32();\n }\n}\n\nclass ReadLogPageReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 37;\n offset;\n count;\n entries;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n const n = this.ackIndex;\n const size = dataView.nextUint8();\n this.offset = dataView.nextUint32();\n this.count = dataView.nextUint16();\n this.entries = [];\n let j = n + 8;\n for (let i = 0;i < this.count; i++) {\n this.entries.push({\n code: dataView.getUint8(j),\n type: dataView.getUint8(j + 1),\n desc: dataView.getUint8(j + 2),\n spare: dataView.getUint8(j + 3),\n time: dataView.getUint32(j + 4, true)\n });\n j += size;\n }\n }\n}\n\nclass GetRadioStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 38;\n device;\n quality;\n strength;\n channel;\n timeslot;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n const n = this.ackIndex;\n this.device = dataView.nextUint8();\n this.quality = dataView.nextUint16();\n this.strength = dataView.nextInt16();\n this.channel = this.data[n + 6];\n this.timeslot = this.data[n + 7];\n }\n}\n\nclass ScreenCaptureReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 40;\n}\n\nclass SendDashTouchReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 42;\n}\n\nclass SelectDashReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 43;\n}\n\nclass ReadKeyValueReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 46;\n value;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.value = dataView.nextVarNTBS(255);\n }\n}\n\nclass WriteKeyValueReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 47;\n}\n\nclass GetSlot1to4InfoReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 49;\n slotFlags;\n slots;\n constructor(data, start = 1) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.slotFlags = dataView.nextUint8();\n this.slots = [];\n for (let i = 0;i < 4; i++) {\n const hasData = (this.slotFlags & 2 ** (start - 1 + i)) !== 0;\n if (!hasData)\n continue;\n const iconNum = dataView.nextUint16();\n const nameLen = dataView.nextUint8();\n const name = dataView.nextString(nameLen);\n this.slots.push({\n slot: start + i,\n icon: iconNum,\n name\n });\n }\n }\n}\n\nclass GetSlot5to8InfoReplyD2HPacket extends GetSlot1to4InfoReplyD2HPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 50;\n slotStartIndex = 5;\n constructor(data) {\n super(data, 5);\n }\n}\n\nclass FactoryStatusReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 241;\n status;\n percent;\n constructor(data) {\n super(data);\n const dataView = PacketView.fromPacket(this);\n this.status = dataView.nextUint8();\n this.percent = dataView.nextUint8();\n }\n}\n\nclass FactoryEnableReplyD2HPacket extends HostBoundPacket {\n static COMMAND_ID = 86;\n static COMMAND_EXTENDED_ID = 255;\n}\n\n// src/VexPacketEncoder.ts\nvar textEncoder2 = new TextEncoder;\nfunction encodeFixedText(value, field, maxBytes) {\n const encoded = textEncoder2.encode(value);\n if (encoded.byteLength > maxBytes) {\n throw new RangeError(`${field} must be at most ${maxBytes} UTF-8 bytes`);\n }\n return encoded;\n}\n\nclass PacketEncoder {\n static HEADERS_LENGTH = 4;\n static HEADER_TO_DEVICE = [201, 54, 184, 71];\n static HEADER_TO_HOST = [170, 85];\n static J2000_EPOCH = 946684800;\n vexVersion;\n crcgen;\n allPacketsTable = {};\n static getInstance() {\n if (Packet.ENCODER === undefined) {\n Packet.ENCODER = new PacketEncoder;\n }\n return Packet.ENCODER;\n }\n constructor() {\n this.vexVersion = 0;\n this.crcgen = new CrcGenerator;\n Object.values(exports_VexPacketModels).forEach((packet) => {\n if (typeof packet === \"function\" && packet.prototype instanceof HostBoundPacket) {\n const packetType = packet;\n this.allPacketsTable[packetType.COMMAND_ID + \" \" + packetType.COMMAND_EXTENDED_ID] = packetType;\n }\n });\n }\n createHeader(buf) {\n if (buf === undefined || buf.byteLength < PacketEncoder.HEADERS_LENGTH) {\n buf = new ArrayBuffer(PacketEncoder.HEADERS_LENGTH);\n }\n const h = new Uint8Array(buf);\n h.set(PacketEncoder.HEADER_TO_DEVICE);\n return h;\n }\n cdcCommand(cmd) {\n const buf = new ArrayBuffer(PacketEncoder.HEADERS_LENGTH + 1);\n const h = this.createHeader(buf);\n h.set([cmd], PacketEncoder.HEADERS_LENGTH);\n return h;\n }\n cdcCommandWithData(cmd, data) {\n const buf = new ArrayBuffer(PacketEncoder.HEADERS_LENGTH + 2 + data.length);\n const h = this.createHeader(buf);\n h.set([cmd, data.length], PacketEncoder.HEADERS_LENGTH);\n h.set(data, PacketEncoder.HEADERS_LENGTH + 2);\n return h;\n }\n cdc2Command(cmd, ext) {\n const buf = new ArrayBuffer(PacketEncoder.HEADERS_LENGTH + 5);\n const h = this.createHeader(buf);\n h.set([cmd, ext, 0], PacketEncoder.HEADERS_LENGTH);\n const crc = this.crcgen.crc16(h.subarray(0, buf.byteLength - 2), 0) >>> 0;\n h.set([crc >>> 8, crc & 255], buf.byteLength - 2);\n return h;\n }\n cdc2CommandBufferLength(data) {\n let length = PacketEncoder.HEADERS_LENGTH + data.length + 3 + 2;\n if (data.length > 127)\n length += 1;\n return length;\n }\n cdc2CommandWithData(cmd, ext, data) {\n const buf = new ArrayBuffer(this.cdc2CommandBufferLength(data));\n const h = this.createHeader(buf);\n if (data.length < 128) {\n h.set([cmd, ext, data.length], PacketEncoder.HEADERS_LENGTH);\n h.set(data, PacketEncoder.HEADERS_LENGTH + 3);\n } else {\n const lengthMsb = (data.length >>> 8 | 128) >>> 0;\n const lengthLsb = (data.length & 255) >>> 0;\n h.set([cmd, ext, lengthMsb, lengthLsb], PacketEncoder.HEADERS_LENGTH);\n h.set(data, PacketEncoder.HEADERS_LENGTH + 4);\n }\n const crc = this.crcgen.crc16(h.subarray(0, buf.byteLength - 2), 0);\n h.set([crc >>> 8, crc & 255], buf.byteLength - 2);\n return h;\n }\n validateHeader(data) {\n return !(data[0] !== PacketEncoder.HEADER_TO_HOST[0] || data[1] !== PacketEncoder.HEADER_TO_HOST[1]);\n }\n validateMessageCdc(data) {\n const message = data.subarray(0, data.byteLength - 2);\n const lastTwoBytes = (data[data.byteLength - 2] << 8) + data[data.byteLength - 1];\n return this.crcgen.crc16(message, 0) === lastTwoBytes;\n }\n getPayloadSize(data) {\n let t = 0;\n let a = data[3];\n if ((128 & a) !== 0) {\n t = 127 & a;\n a = data[4];\n }\n return (t << 8) + a;\n }\n getHostHeaderLength(data) {\n return (data[3] & 128) === 0 ? 4 : 5;\n }\n}\n\n// src/VexConnection.ts\nvar thePacketEncoder = PacketEncoder.getInstance();\nvar SCREEN_CAPTURE_HEIGHT = 272;\nvar SCREEN_CAPTURE_WIDTH = 480;\nvar SCREEN_CAPTURE_CHANNELS = 3;\nvar SCREEN_CAPTURE_MESSAGE_WIDTH = 512;\nvar SCREEN_CAPTURE_MESSAGE_CHANNELS = 4;\n\nclass VexSerialConnection extends VexEventTarget {\n filters = [{ usbVendorId: 10376 }];\n writer;\n reader;\n port;\n serial;\n callbacksQueue = [];\n _onPortDisconnect = null;\n _closePromise = null;\n _wasConnected = false;\n fileTransferTail = Promise.resolve();\n fileTransferDepth = 0;\n get isConnected() {\n return this.port !== undefined && this.reader !== undefined && this.writer !== undefined;\n }\n get isFileTransferring() {\n return this.fileTransferDepth > 0;\n }\n constructor(serial) {\n super();\n this.serial = serial;\n }\n async close() {\n if (this._closePromise)\n return this._closePromise;\n if (!this._hasOpenResources())\n return;\n this._closePromise = this._doClose();\n try {\n await this._closePromise;\n } finally {\n this._closePromise = null;\n }\n }\n _hasOpenResources() {\n return this.port !== undefined || this.reader !== undefined || this.writer !== undefined || this._onPortDisconnect !== null || this.callbacksQueue.length > 0;\n }\n async _doClose() {\n for (const callback of this.callbacksQueue.splice(0)) {\n clearTimeout(callback.timeout);\n callback.callback(255 /* CDC2_NACK */);\n }\n const onDisconnect = this._onPortDisconnect;\n this._onPortDisconnect = null;\n if (onDisconnect !== null) {\n try {\n this.port?.removeEventListener(\"disconnect\", onDisconnect);\n } catch {}\n }\n const writer = this.writer;\n this.writer = undefined;\n if (writer !== undefined) {\n try {\n await writer.close();\n } catch {} finally {\n try {\n writer.releaseLock();\n } catch {}\n }\n }\n const reader = this.reader;\n this.reader = undefined;\n if (reader !== undefined) {\n try {\n await reader.cancel();\n } catch {}\n try {\n while (true) {\n const { done } = await reader.read();\n if (done)\n break;\n }\n } catch {} finally {\n try {\n reader.releaseLock();\n } catch {}\n }\n }\n const port = this.port;\n this.port = undefined;\n if (port !== undefined) {\n try {\n await port.close();\n } catch (e) {\n console.warn(\"Close port error.\", e);\n }\n }\n if (this._wasConnected) {\n this._wasConnected = false;\n this.emit(\"disconnected\", undefined);\n }\n }\n open(use = 0, askUser = true) {\n if (this.port !== undefined) {\n return errAsyncVex(new VexIoError(\"Already connected.\"));\n }\n return new ResultAsync(this._open(use, askUser));\n }\n async _open(use, askUser) {\n let port;\n if (use !== undefined) {\n const ports = (await this.serial.getPorts()).filter((p) => {\n const info = p.getInfo();\n return this.filters.find((f) => (f.usbVendorId === undefined || f.usbVendorId === info.usbVendorId) && (f.usbProductId === undefined || f.usbProductId === info.usbProductId));\n }).filter((candidate) => candidate.readable === null);\n port = ports[use];\n }\n if (port == null && askUser) {\n try {\n port = await this.serial.requestPort({ filters: this.filters });\n } catch {}\n }\n if (port == null)\n return ok(undefined);\n if (port.readable != null)\n return ok(false);\n try {\n this.port = port;\n await port.open({ baudRate: 115200 });\n this._onPortDisconnect = () => {\n this.close();\n };\n this.port.addEventListener(\"disconnect\", this._onPortDisconnect);\n this.writer = this.port.writable.getWriter();\n this.reader = this.port.readable.getReader();\n this.startReader();\n this._wasConnected = true;\n this.emit(\"connected\", undefined);\n return ok(true);\n } catch {\n await this.close();\n return ok(false);\n }\n }\n writeData(rawData, resolve, timeout = 1000) {\n this.writeDataAsync(rawData, timeout).then(resolve);\n }\n async writeDataAsync(rawData, timeout = 1000) {\n return new Promise((resolve) => {\n if (this.writer === undefined) {\n resolve(255 /* CDC2_NACK */);\n return;\n }\n const data = rawData instanceof DeviceBoundPacket ? rawData.data : rawData;\n const cb = {\n callback: resolve,\n timeout: setTimeout(() => {\n const index = this.callbacksQueue.indexOf(cb);\n if (index === -1)\n return;\n this.callbacksQueue.splice(index, 1);\n cb.callback(256 /* TIMEOUT */);\n }, timeout),\n wantedCommandId: rawData instanceof DeviceBoundPacket ? rawData.commandId : undefined,\n wantedCommandExId: rawData instanceof DeviceBoundPacket ? rawData.commandExtendedId : undefined\n };\n this.callbacksQueue.push(cb);\n this.writer.write(data).catch(() => {\n const index = this.callbacksQueue.indexOf(cb);\n if (index === -1)\n return;\n this.callbacksQueue.splice(index, 1);\n clearTimeout(cb.timeout);\n resolve(257 /* WRITE_ERROR */);\n });\n });\n }\n async readData(cache, expectedSize) {\n if (this.reader == null)\n throw new Error(\"No reader\");\n while (cache.byteLength < expectedSize) {\n const { value: readData, done: isDone } = await this.reader.read();\n if (isDone)\n throw new Error(\"No data\");\n cache = binaryArrayJoin(cache, readData);\n }\n return cache;\n }\n async startReader() {\n let cache = new Uint8Array([]);\n let sliceIdx = 0;\n for (;; )\n try {\n cache = await this.readData(cache, 5);\n sliceIdx = 0;\n while (!thePacketEncoder.validateHeader(cache)) {\n const nextHeader = cache.findIndex((byte, index) => index > 0 && byte === PacketEncoder.HEADER_TO_HOST[0] && cache[index + 1] === PacketEncoder.HEADER_TO_HOST[1]);\n if (nextHeader >= 0) {\n cache = cache.slice(nextHeader);\n } else {\n cache = cache.slice(cache.at(-1) === PacketEncoder.HEADER_TO_HOST[0] ? -1 : cache.length);\n }\n cache = await this.readData(cache, 5);\n }\n const payloadExpectedSize = thePacketEncoder.getPayloadSize(cache);\n const n = thePacketEncoder.getHostHeaderLength(cache);\n const totalSize = n + payloadExpectedSize;\n cache = await this.readData(cache, totalSize);\n sliceIdx = totalSize;\n const cmdId = cache[2];\n const hasExtId = cmdId === 88 || cmdId === 86;\n const cmdExId = hasExtId ? cache[n] : undefined;\n const ack = cache[n + 1];\n if (hasExtId) {\n if (!thePacketEncoder.validateMessageCdc(cache))\n throw new Error(\"Invalid message CDC\");\n }\n let callbackInfo;\n let wantedCmdId;\n let wantedCmdExId;\n let tryIdx = 0;\n while ((callbackInfo = this.callbacksQueue[tryIdx++]) !== undefined) {\n wantedCmdId = callbackInfo?.wantedCommandId;\n wantedCmdExId = callbackInfo?.wantedCommandExId;\n if (wantedCmdId !== undefined && wantedCmdId !== cmdId || wantedCmdExId !== undefined && wantedCmdExId !== cmdExId) {\n continue;\n }\n break;\n }\n if (callbackInfo === undefined) {\n console.warn(\"Unexpected command\", cmdId, cmdExId, ack);\n continue;\n }\n const data = cache.slice(0, sliceIdx);\n const PackageType = thePacketEncoder.allPacketsTable[wantedCmdId + \" \" + wantedCmdExId];\n if (wantedCmdId === undefined && wantedCmdExId === undefined || PackageType === undefined) {\n callbackInfo.callback(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength));\n } else {\n if (!hasExtId || PackageType.isValidPacket(data, n)) {\n callbackInfo.callback(new PackageType(data));\n } else {\n console.warn(\"ack\", ack);\n callbackInfo.callback(ack);\n }\n }\n clearTimeout(callbackInfo.timeout);\n this.callbacksQueue.splice(tryIdx - 1, 1);\n } catch (e) {\n if (!(e instanceof Error && e.message === \"No data\")) {\n console.warn(\"Read error.\", e, cache);\n }\n await this.close();\n break;\n } finally {\n cache = cache.slice(sliceIdx);\n }\n }\n query1() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new Query1H2DPacket, 100);\n return result instanceof Query1ReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"query1 was not acknowledged\"));\n })());\n }\n getSystemVersion() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new SystemVersionH2DPacket);\n if (result instanceof SystemVersionReplyD2HPacket) {\n return ok(result.version);\n }\n return err(new VexProtocolError(\"system version was not acknowledged\"));\n })());\n }\n}\n\nclass V5SerialConnection extends VexSerialConnection {\n filters = [\n { usbVendorId: 10376, usbProductId: 1281 /* V5_BRAIN */ },\n { usbVendorId: 10376, usbProductId: 1282 /* V5_BRAIN_DFU */ },\n { usbVendorId: 10376, usbProductId: 1283 /* V5_CONTROLLER */ }\n ];\n async withFileTransfer(operation) {\n const previous = this.fileTransferTail;\n let release = () => {};\n const current = new Promise((resolve) => {\n release = resolve;\n });\n this.fileTransferTail = previous.then(() => current);\n this.fileTransferDepth++;\n try {\n await previous;\n return await operation();\n } finally {\n this.fileTransferDepth--;\n release();\n }\n }\n getDeviceStatus() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new GetDeviceStatusH2DPacket);\n return result instanceof GetDeviceStatusReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"device status was not acknowledged\"));\n })());\n }\n getRadioStatus() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new GetRadioStatusH2DPacket);\n return result instanceof GetRadioStatusReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"radio status was not acknowledged\"));\n })());\n }\n getSystemFlags() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new GetSystemFlagsH2DPacket);\n return result instanceof GetSystemFlagsReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"system flags were not acknowledged\"));\n })());\n }\n getSystemStatus(timeout = 1000) {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new GetSystemStatusH2DPacket, timeout);\n return result instanceof GetSystemStatusReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"system status was not acknowledged\"));\n })());\n }\n getMatchStatus() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new GetMatchStatusH2DPacket);\n return result instanceof MatchStatusReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"match status was not acknowledged\"));\n })());\n }\n uploadProgramToDevice(iniConfig, binFileBuf, coldFileBuf, progressCallback) {\n return wrapTransfer(this, () => this._uploadProgramToDevice(iniConfig, binFileBuf, coldFileBuf, progressCallback));\n }\n async _uploadProgramToDevice(iniConfig, binFileBuf, coldFileBuf, progressCallback) {\n const iniFileBuffer = new TextEncoder().encode(iniConfig.createIni());\n const basename = iniConfig.baseName;\n const iniRequest = {\n filename: basename + \".ini\",\n buf: iniFileBuffer,\n downloadTarget: 1 /* FILE_TARGET_QSPI */,\n vendor: 1 /* USER */,\n autoRun: false\n };\n const r1 = await this.uploadFileToDeviceUnlocked(iniRequest, (current, total) => {\n progressCallback(\"INI\", current, total);\n });\n if (r1.isErr())\n return err(r1.error);\n if (!r1.value)\n return ok(false);\n const coldRequest = coldFileBuf !== undefined ? {\n filename: basename + \"_lib.bin\",\n buf: coldFileBuf,\n downloadTarget: 1 /* FILE_TARGET_QSPI */,\n vendor: 24 /* DEV2 */,\n autoRun: false\n } : undefined;\n if (coldRequest != null) {\n const r2 = await this.uploadFileToDeviceUnlocked(coldRequest, (current, total) => {\n progressCallback(\"COLD\", current, total);\n });\n if (r2.isErr())\n return err(r2.error);\n if (!r2.value)\n return ok(false);\n }\n const binRequest = {\n filename: basename + \".bin\",\n buf: binFileBuf,\n downloadTarget: 1 /* FILE_TARGET_QSPI */,\n vendor: 1 /* USER */,\n loadAddress: coldFileBuf != null ? 125829120 : undefined,\n autoRun: iniConfig.autorun,\n linkedFile: coldRequest\n };\n const r3 = await this.uploadFileToDeviceUnlocked(binRequest, (current, total) => {\n progressCallback(\"BIN\", current, total);\n });\n return r3;\n }\n downloadFileToHost(request, downloadTarget = 1 /* FILE_TARGET_QSPI */, progressCallback) {\n return wrapTransfer(this, () => this.downloadFileToHostUnlocked(request, downloadTarget, progressCallback));\n }\n downloadFileToHostUnlocked(request, downloadTarget = 1 /* FILE_TARGET_QSPI */, progressCallback) {\n return new ResultAsync(this._downloadFileToHostUnlocked(request, downloadTarget, progressCallback));\n }\n async _downloadFileToHostUnlocked(request, downloadTarget, progressCallback) {\n const { filename, vendor, loadAddress, size } = request;\n let nextAddress = loadAddress ?? USER_FLASH_USR_CODE_START;\n const p1 = await this.writeDataAsync(new InitFileTransferH2DPacket(2 /* READ */, downloadTarget, vendor, 0 /* NONE */, new Uint8Array, nextAddress, filename, \"\"));\n if (!(p1 instanceof InitFileTransferReplyD2HPacket)) {\n return err(new VexTransferError(\"InitFileTransferH2DPacket failed\"));\n }\n let transferFailed = true;\n let result = ok(new Uint8Array);\n try {\n const fileSize = size ?? p1.fileSize;\n const bufferChunkSize = getTransferChunkSize(p1.windowSize);\n let bufferOffset = 0;\n const fileBuf = new Uint8Array(fileSize);\n while (bufferOffset < fileSize) {\n const requestedSize = Math.min(bufferChunkSize, fileSize - bufferOffset);\n const p2 = await this.writeDataAsync(new ReadFileH2DPacket(nextAddress, requestedSize), 3000);\n if (!(p2 instanceof ReadFileReplyD2HPacket)) {\n throw new VexTransferError(\"ReadFileReplyD2HPacket failed\");\n }\n if (p2.addr !== nextAddress) {\n throw new VexTransferError(`ReadFileReplyD2HPacket returned address ${p2.addr}, expected ${nextAddress}`);\n }\n if (p2.length <= 0 || p2.length > requestedSize || p2.buf.byteLength !== p2.length) {\n throw new VexTransferError(`ReadFileReplyD2HPacket returned invalid length ${p2.length}`);\n }\n fileBuf.set(new Uint8Array(p2.buf), bufferOffset);\n bufferOffset += p2.length;\n nextAddress += p2.length;\n progressCallback?.(bufferOffset, fileSize);\n }\n transferFailed = false;\n result = ok(fileBuf);\n } catch (e) {\n result = err(e instanceof VexSerialError ? e : toVexSerialError(e, \"transfer\"));\n } finally {\n try {\n await this.writeDataAsync(new ExitFileTransferH2DPacket(3 /* EXIT_HALT */), 30000);\n } catch (cleanupError) {\n if (!transferFailed) {\n result = err(toVexSerialError(cleanupError, \"io\"));\n }\n }\n }\n return result;\n }\n uploadFileToDevice(request, progressCallback) {\n return wrapTransfer(this, () => this.uploadFileToDeviceUnlocked(request, progressCallback));\n }\n async uploadFileToDeviceUnlocked(request, progressCallback) {\n let {\n filename,\n buf,\n downloadTarget,\n vendor,\n loadAddress,\n exttype,\n autoRun,\n linkedFile\n } = request;\n if (buf === undefined) {\n return err(new VexTransferError(\"no buffer provided for upload\"));\n }\n downloadTarget = downloadTarget ?? 1 /* FILE_TARGET_QSPI */;\n vendor = vendor ?? 1 /* USER */;\n let nextAddress = loadAddress ?? USER_FLASH_USR_CODE_START;\n const p1 = await this.writeDataAsync(new InitFileTransferH2DPacket(1 /* WRITE */, downloadTarget, vendor, 1 /* OVERWRITE */, buf, nextAddress, filename, exttype));\n if (!(p1 instanceof InitFileTransferReplyD2HPacket)) {\n return err(new VexTransferError(\"InitFileTransferH2DPacket failed\"));\n }\n const bufferChunkSize = getTransferChunkSize(p1.windowSize);\n let bufferOffset = 0;\n let lastBlock = false;\n let transferFailed = true;\n let exitReply;\n let result = ok(false);\n try {\n if (linkedFile !== undefined) {\n const p3 = await this.writeDataAsync(new LinkFileH2DPacket(linkedFile.vendor ?? 1 /* USER */, linkedFile.filename, 0), 1e4);\n if (!(p3 instanceof LinkFileReplyD2HPacket)) {\n throw new VexTransferError(\"LinkFileH2DPacket failed\");\n }\n }\n while (!lastBlock) {\n let tmpbuf;\n if (buf.byteLength - bufferOffset > bufferChunkSize) {\n tmpbuf = buf.subarray(bufferOffset, bufferOffset + bufferChunkSize);\n } else {\n const length = (buf.byteLength - bufferOffset + 3) / 4 >>> 0;\n tmpbuf = new Uint8Array(length * 4);\n tmpbuf.set(buf.subarray(bufferOffset, buf.byteLength));\n lastBlock = true;\n }\n const p2 = await this.writeDataAsync(new WriteFileH2DPacket(nextAddress, tmpbuf), 3000);\n if (!(p2 instanceof WriteFileReplyD2HPacket))\n throw new VexTransferError(\"WriteFileReplyD2DPacket failed\");\n if (progressCallback != null)\n progressCallback(bufferOffset, buf.byteLength);\n bufferOffset += bufferChunkSize;\n nextAddress += bufferChunkSize;\n }\n progressCallback?.(buf.byteLength, buf.byteLength);\n transferFailed = false;\n } catch (e) {\n result = err(e instanceof VexSerialError ? e : toVexSerialError(e, \"transfer\"));\n } finally {\n try {\n exitReply = await this.writeDataAsync(new ExitFileTransferH2DPacket(transferFailed ? 3 /* EXIT_HALT */ : autoRun ? 1 /* EXIT_RUN */ : 3 /* EXIT_HALT */), 30000);\n if (!transferFailed) {\n result = ok(exitReply !== undefined && exitReply instanceof ExitFileTransferReplyD2HPacket);\n }\n } catch (cleanupError) {\n if (!transferFailed) {\n result = err(toVexSerialError(cleanupError, \"io\"));\n }\n }\n }\n return result;\n }\n removeFile(request) {\n return new ResultAsync(this.withFileTransfer(async () => {\n let vendor, filename;\n if (typeof request === \"string\") {\n vendor = 1 /* USER */;\n filename = request;\n } else {\n vendor = request.vendor;\n filename = request.filename;\n }\n let result;\n try {\n const ack = await this.writeDataAsync(new EraseFileH2DPacket(vendor, filename));\n result = ack instanceof EraseFileReplyD2HPacket ? ok(undefined) : err(new VexProtocolError(\"removeFile was not acknowledged\"));\n } catch (e) {\n result = err(toVexSerialError(e, \"io\"));\n } finally {\n try {\n await this.writeDataAsync(new ExitFileTransferH2DPacket(3 /* EXIT_HALT */));\n } catch {}\n }\n return result;\n }));\n }\n removeAllFiles() {\n return new ResultAsync(this.withFileTransfer(async () => {\n let result;\n try {\n const ack = await this.writeDataAsync(new FileClearUpH2DPacket(1 /* USER */), 30000);\n result = ack instanceof FileClearUpReplyD2HPacket ? ok(undefined) : err(new VexProtocolError(\"removeAllFiles was not acknowledged\"));\n } catch (e) {\n result = err(toVexSerialError(e, \"io\"));\n } finally {\n try {\n await this.writeDataAsync(new ExitFileTransferH2DPacket(3 /* EXIT_HALT */));\n } catch {}\n }\n return result;\n }));\n }\n captureScreenSetup() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new ScreenCaptureH2DPacket(0));\n return result instanceof ScreenCaptureReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"screen capture was rejected\"));\n })());\n }\n captureScreen(progressCallback) {\n return wrapTransfer(this, () => this._captureScreen(progressCallback));\n }\n async _captureScreen(progressCallback) {\n const response = await this.captureScreenSetup();\n if (response.isErr()) {\n return err(response.error);\n }\n const framebuffer = await this.downloadFileToHostUnlocked({\n filename: \"screen\",\n vendor: 15 /* SYS */,\n loadAddress: 0,\n size: SCREEN_CAPTURE_MESSAGE_WIDTH * SCREEN_CAPTURE_HEIGHT * SCREEN_CAPTURE_MESSAGE_CHANNELS\n }, 2 /* FILE_TARGET_CBUF */, progressCallback);\n if (framebuffer.isErr())\n return err(framebuffer.error);\n return ok(convertScreenCapture(framebuffer.value));\n }\n setMatchMode(mode) {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new UpdateMatchModeH2DPacket(mode, 0));\n return result instanceof MatchModeReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"setMatchMode was not acknowledged\"));\n })());\n }\n runProgram(value) {\n return this.loadProgram(value);\n }\n loadProgram(value) {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new LoadFileActionH2DPacket(1 /* USER */, 0 /* RUN */, value));\n return result instanceof LoadFileActionReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"loadProgram was not acknowledged\"));\n })());\n }\n stopProgram() {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new LoadFileActionH2DPacket(1 /* USER */, 128 /* STOP */, \"\"));\n return result instanceof LoadFileActionReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"stopProgram was not acknowledged\"));\n })());\n }\n mockTouch(x, y, press) {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new SendDashTouchH2DPacket(x, y, press));\n return result instanceof SendDashTouchReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"mockTouch was not acknowledged\"));\n })());\n }\n openScreen(screen, port) {\n return new ResultAsync((async () => {\n const result = await this.writeDataAsync(new SelectDashH2DPacket(screen, port));\n return result instanceof SelectDashReplyD2HPacket ? ok(result) : err(new VexProtocolError(\"openScreen was not acknowledged\"));\n })());\n }\n}\nfunction binaryArrayJoin(left, right) {\n const leftSize = left != null ? left.byteLength : 0;\n const rightSize = right != null ? right.byteLength : 0;\n const all = new Uint8Array(leftSize + rightSize);\n if (all.length === 0)\n return new Uint8Array;\n if (left != null)\n all.set(new Uint8Array(left), 0);\n if (right != null)\n all.set(new Uint8Array(right), leftSize);\n return all;\n}\nfunction getTransferChunkSize(windowSize) {\n return windowSize > 0 && windowSize <= USER_PROG_CHUNK_SIZE ? windowSize : USER_PROG_CHUNK_SIZE;\n}\nfunction convertScreenCapture(framebuffer) {\n const pixels = new Uint8Array(SCREEN_CAPTURE_WIDTH * SCREEN_CAPTURE_HEIGHT * SCREEN_CAPTURE_CHANNELS);\n for (let row = 0;row < SCREEN_CAPTURE_HEIGHT; row++) {\n for (let column = 0;column < SCREEN_CAPTURE_WIDTH; column++) {\n const source = (row * SCREEN_CAPTURE_MESSAGE_WIDTH + column) * SCREEN_CAPTURE_MESSAGE_CHANNELS;\n const target = (row * SCREEN_CAPTURE_WIDTH + column) * SCREEN_CAPTURE_CHANNELS;\n pixels[target] = framebuffer[source + 2] ?? 0;\n pixels[target + 1] = framebuffer[source + 1] ?? 0;\n pixels[target + 2] = framebuffer[source] ?? 0;\n }\n }\n return pixels;\n}\nfunction wrapTransfer(conn, operation) {\n return new ResultAsync(conn.withFileTransfer(async () => {\n try {\n return await operation();\n } catch (e) {\n if (e instanceof VexSerialError)\n return err(e);\n return err(toVexSerialError(e, \"io\"));\n }\n }));\n}\nfunction errAsyncVex(error) {\n return new ResultAsync(Promise.resolve(err(error)));\n}\n// src/VexFirmware.ts\nvar MAX_CATALOG_BYTES = 4 * 1024;\nvar MAX_VEXOS_BYTES = 64 * 1024 * 1024;\nvar MAX_FIRMWARE_IMAGE_BYTES = 32 * 1024 * 1024;\nvar MAX_AGGREGATE_IMAGE_BYTES = 48 * 1024 * 1024;\nfunction fromAsyncFn(fn) {\n return new ResultAsync(fn());\n}\nfunction downloadFileFromInternet(link, options = {}) {\n const { maxBytes = Number.POSITIVE_INFINITY, timeout = 30000 } = options;\n if (maxBytes <= 0) {\n return errAsync(new VexInvalidArgumentError(\"maxBytes must be positive\"));\n }\n if (timeout < 0) {\n return errAsync(new VexInvalidArgumentError(\"timeout must be non-negative\"));\n }\n return fromAsyncFn(() => runDownload(link, maxBytes, timeout));\n}\nasync function runDownload(link, maxBytes, timeout) {\n const controller = new AbortController;\n const timer = setTimeout(() => controller.abort(), timeout);\n try {\n let response;\n try {\n response = await fetch(link, { signal: controller.signal });\n } catch (e) {\n return err(new VexDownloadError(`failed to download ${link} (${e instanceof Error ? e.message : String(e)})`));\n }\n if (!response.ok) {\n return err(new VexDownloadError(`failed to download ${link} (${response.status})`));\n }\n const declaredLength = response.headers.get(\"content-length\");\n if (declaredLength !== null) {\n const declared = Number.parseInt(declaredLength, 10);\n if (!Number.isNaN(declared) && declared > 0 && declared > maxBytes) {\n return err(new VexDownloadError(`declared content length ${declared} exceeds limit ${maxBytes} for ${link}`));\n }\n }\n if (response.body == null) {\n return err(new VexDownloadError(`no response body for ${link}`));\n }\n const reader = response.body.getReader();\n const chunks = [];\n let total = 0;\n try {\n for (;; ) {\n const { value, done } = await reader.read();\n if (done)\n break;\n if (value === undefined)\n continue;\n total += value.byteLength;\n if (total > maxBytes) {\n try {\n await reader.cancel();\n } catch {}\n return err(new VexDownloadError(`downloaded body exceeds limit ${maxBytes} for ${link}`));\n }\n chunks.push(value);\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {}\n }\n const result = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return ok(result.buffer);\n } finally {\n clearTimeout(timer);\n }\n}\nfunction sleepUntilAsync(f, timeout, interval = 20) {\n if (timeout < 0) {\n return errAsync(new VexInvalidArgumentError(\"timeout must be non-negative\"));\n }\n if (interval <= 0) {\n return errAsync(new VexInvalidArgumentError(\"interval must be positive\"));\n }\n return fromAsyncFn(() => runSleepUntilAsync(f, timeout, interval));\n}\nasync function runSleepUntilAsync(f, timeout, interval) {\n const deadline = Date.now() + timeout;\n while (Date.now() <= deadline) {\n try {\n if (await f())\n return ok(true);\n } catch (e) {\n return err(toVexSerialError(e, \"io\"));\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0)\n break;\n await sleepInner(Math.min(interval, remaining));\n }\n return ok(false);\n}\nfunction sleepUntil(f, timeout, interval = 20) {\n if (timeout < 0) {\n return errAsync(new VexInvalidArgumentError(\"timeout must be non-negative\"));\n }\n if (interval <= 0) {\n return errAsync(new VexInvalidArgumentError(\"interval must be positive\"));\n }\n return fromAsyncFn(() => runSleepUntil(f, timeout, interval));\n}\nasync function runSleepUntil(f, timeout, interval) {\n const deadline = Date.now() + timeout;\n while (Date.now() <= deadline) {\n try {\n if (f())\n return ok(true);\n } catch (e) {\n return err(toVexSerialError(e, \"io\"));\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0)\n break;\n await sleepInner(Math.min(interval, remaining));\n }\n return ok(false);\n}\nfunction sleep(ms) {\n if (ms < 0) {\n return errAsync(new VexInvalidArgumentError(\"ms must be non-negative\"));\n }\n return ResultAsync.fromSafePromise(sleepInner(ms));\n}\nasync function sleepInner(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nasync function extractFirmwareImages(usingVersion, vexos) {\n const { unzip } = await import(\"unzipit\");\n const { entries } = await unzip(vexos);\n const expectedPaths = new Set([\n `${usingVersion}/BOOT.bin`,\n `${usingVersion}/assets.bin`\n ]);\n const unexpected = [];\n for (const name of Object.keys(entries)) {\n if (!expectedPaths.has(name))\n unexpected.push(name);\n }\n if (unexpected.length > 0) {\n throw new VexFirmwareError(`VEXos archive contains unexpected entries: ${unexpected.join(\", \")}`);\n }\n const ordered = [];\n let aggregate = 0;\n for (const name of expectedPaths) {\n const entry = entries[name];\n if (entry === undefined) {\n throw new VexFirmwareError(`VEXos archive is missing ${name}`);\n }\n if (entry.encrypted) {\n throw new VexFirmwareError(`VEXos entry ${name} is encrypted`);\n }\n if (entry.size <= 0) {\n throw new VexFirmwareError(`VEXos entry ${name} is empty`);\n }\n if (entry.size > MAX_FIRMWARE_IMAGE_BYTES) {\n throw new VexFirmwareError(`VEXos entry ${name} (${entry.size} bytes) exceeds per-entry limit ${MAX_FIRMWARE_IMAGE_BYTES}`);\n }\n aggregate += entry.size;\n if (aggregate > MAX_AGGREGATE_IMAGE_BYTES) {\n throw new VexFirmwareError(`VEXos aggregate extracted size exceeds limit ${MAX_AGGREGATE_IMAGE_BYTES}`);\n }\n const buf = new Uint8Array(await entry.arrayBuffer());\n if (buf.byteLength === 0) {\n throw new VexFirmwareError(`VEXos entry ${name} is empty`);\n }\n if (buf.byteLength !== entry.size) {\n throw new VexFirmwareError(`VEXos entry ${name} size does not match its metadata (${buf.byteLength} vs ${entry.size})`);\n }\n ordered.push({ name, buf });\n }\n return ordered;\n}\nfunction uploadFirmware(state, publicUrl = \"https://content.vexrobotics.com/vexos/public/V5/\", usingVersion, progressCallback) {\n return fromAsyncFn(() => runUploadFirmware(state, publicUrl, usingVersion, progressCallback));\n}\nasync function runUploadFirmware(state, publicUrl, usingVersion, progressCallback) {\n const device = state._instance;\n const conn = device.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n const pcb = progressCallback ?? (() => {});\n let version = usingVersion;\n if (version === undefined) {\n pcb(\"FETCH CATALOG\", 0, 1);\n const catalog = await downloadFileFromInternet(publicUrl + \"catalog.txt\", {\n maxBytes: MAX_CATALOG_BYTES\n });\n if (catalog.isErr())\n return err(catalog.error);\n version = new TextDecoder().decode(catalog.value).trim();\n pcb(\"FETCH CATALOG\", 1, 1);\n }\n if (!/^[A-Za-z0-9._-]+$/.test(version)) {\n return err(new VexFirmwareError(`invalid VEXos version: ${version}`));\n }\n pcb(\"FETCH VEXOS\", 0, 1);\n const vexosResult = await downloadFileFromInternet(publicUrl + version + \".vexos\", { maxBytes: MAX_VEXOS_BYTES });\n if (vexosResult.isErr())\n return err(vexosResult.error);\n const vexos = vexosResult.value;\n if (vexos.byteLength === 0) {\n return err(new VexFirmwareError(\"VEXos archive is empty\"));\n }\n pcb(\"FETCH VEXOS\", 1, 1);\n pcb(\"UNZIP VEXOS\", 0, 1);\n let images;\n try {\n images = await extractFirmwareImages(version, vexos);\n } catch (e) {\n if (e instanceof VexSerialError)\n return err(e);\n return err(toVexSerialError(e, \"firmware\"));\n }\n pcb(\"UNZIP VEXOS\", 1, 1);\n return state.withFileTransfer(async () => {\n pcb(\"FACTORY ENB BOOT\", 0, 0);\n const result = await conn.writeDataAsync(new FactoryEnableH2DPacket);\n if (!(result instanceof FactoryEnableReplyD2HPacket)) {\n return err(new VexProtocolError(\"FactoryEnableH2DPacket failed\"));\n }\n const boot = images.find((image) => image.name.endsWith(\"BOOT.bin\"));\n if (boot === undefined) {\n return err(new VexFirmwareError(\"VEXos archive is missing BOOT.bin\"));\n }\n const assertImage = images.find((image) => image.name.endsWith(\"assets.bin\"));\n if (assertImage === undefined) {\n return err(new VexFirmwareError(\"VEXos archive is missing assets.bin\"));\n }\n const bootWriteRequest = {\n filename: \"null.bin\",\n vendor: 1 /* USER */,\n loadAddress: USER_FLASH_USR_CODE_START,\n buf: boot.buf,\n downloadTarget: 14 /* FILE_TARGET_B1 */,\n exttype: \"bin\",\n autoRun: true,\n linkedFile: undefined\n };\n const bootUpload = await conn.uploadFileToDevice(bootWriteRequest, (c, t) => {\n pcb(\"UPLOAD BOOT\", c, t);\n });\n if (bootUpload.isErr())\n return err(bootUpload.error);\n if (!bootUpload.value)\n return ok(false);\n const bootDeadline = Date.now() + 120000;\n let bootComplete = false;\n while (Date.now() < bootDeadline) {\n const result3 = await conn.writeDataAsync(new FactoryStatusH2DPacket, 1e4);\n if (result3 instanceof FactoryStatusReplyD2HPacket) {\n switch (result3.status) {\n case 2:\n pcb(\"ERASE BOOT\", result3.percent, 100);\n break;\n case 3:\n pcb(\"WRITE BOOT\", result3.percent, 100);\n break;\n case 4:\n pcb(\"VERIFY BOOT\", result3.percent, 100);\n break;\n case 8:\n pcb(\"FINISHING BOOT\", result3.percent, 100);\n break;\n }\n if (result3.status === 0 && result3.percent === 100) {\n bootComplete = true;\n break;\n }\n } else {\n return ok(false);\n }\n await sleepInner(500);\n }\n if (!bootComplete)\n return ok(false);\n pcb(\"FACTORY ENB ASSERT\", 0, 0);\n const result5 = await conn.writeDataAsync(new FactoryEnableH2DPacket);\n if (!(result5 instanceof FactoryEnableReplyD2HPacket)) {\n return err(new VexProtocolError(\"FactoryEnableH2DPacket failed\"));\n }\n const assertWriteRequest = {\n filename: \"null.bin\",\n vendor: 1 /* USER */,\n loadAddress: USER_FLASH_USR_CODE_START,\n buf: assertImage.buf,\n downloadTarget: 13 /* FILE_TARGET_A1 */,\n exttype: \"bin\",\n autoRun: true,\n linkedFile: undefined\n };\n const assertUpload = await conn.uploadFileToDevice(assertWriteRequest, (c, t) => {\n pcb(\"UPLOAD ASSERT\", c, t);\n });\n if (assertUpload.isErr())\n return err(assertUpload.error);\n if (!assertUpload.value)\n return ok(false);\n const assertDeadline = Date.now() + 120000;\n let assertComplete = false;\n while (Date.now() < assertDeadline) {\n const result7 = await conn.writeDataAsync(new FactoryStatusH2DPacket, 1e4);\n if (result7 instanceof FactoryStatusReplyD2HPacket) {\n switch (result7.status) {\n case 2:\n pcb(\"ERASE ASSERT\", result7.percent, 100);\n break;\n case 3:\n pcb(\"WRITE ASSERT\", result7.percent, 100);\n break;\n case 4:\n pcb(\"VERIFY ASSERT\", result7.percent, 100);\n break;\n case 8:\n pcb(\"FINISHING ASSERT\", result7.percent, 100);\n break;\n }\n if (result7.status === 0 && result7.percent === 100) {\n assertComplete = true;\n break;\n }\n } else {\n return ok(false);\n }\n await sleepInner(500);\n }\n if (!assertComplete)\n return ok(false);\n return ok(true);\n });\n}\n\n// src/VexTransfers.ts\nfunction getValue(state, key) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n const result = await conn.writeDataAsync(new ReadKeyValueH2DPacket(key));\n return result instanceof ReadKeyValueReplyD2HPacket ? ok(result.value) : err(new VexProtocolError(\"getValue was not acknowledged\"));\n })());\n}\nfunction setValue(state, key, value) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n const result = await conn.writeDataAsync(new WriteKeyValueH2DPacket(key, value));\n return result instanceof WriteKeyValueReplyD2HPacket ? ok(undefined) : err(new VexProtocolError(\"setValue was not acknowledged\"));\n })());\n}\nfunction listFiles(state, vendor = 1 /* USER */) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n const result = await conn.writeDataAsync(new GetDirectoryFileCountH2DPacket(vendor));\n if (!(result instanceof GetDirectoryFileCountReplyD2HPacket)) {\n return err(new VexProtocolError(\"directory file count was not acknowledged\"));\n }\n const files = [];\n for (let i = 0;i < result.count; i++) {\n const result2 = await conn.writeDataAsync(new GetDirectoryEntryH2DPacket(i));\n if (!(result2 instanceof GetDirectoryEntryReplyD2HPacket)) {\n return err(new VexProtocolError(\"directory entry was not acknowledged\"));\n }\n if (result2.file != null) {\n files.push({\n filename: result2.file.filename,\n vendor,\n loadAddress: result2.file.loadAddress,\n size: result2.file.size,\n crc32: result2.file.crc32,\n type: result2.file.type,\n timestamp: result2.file.timestamp,\n version: result2.file.version\n });\n }\n }\n return ok(files);\n })());\n}\nfunction listProgram(state) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n const files = await listFiles(state, 1 /* USER */);\n if (files.isErr())\n return err(files.error);\n const programList = [];\n const iniFiles = files.value.filter((file) => file.filename.endsWith(\".ini\"));\n for (let i = 0;i < iniFiles.length; i++) {\n const ini = iniFiles[i];\n if (ini.size === 0)\n continue;\n const programName = /(.+?)(\\.[^.]*$|$)/.exec(ini.filename)?.[1] ?? \"\";\n const bin = files.value.find((file) => file.filename === programName + \".bin\");\n if (bin == null || bin.timestamp === 0 || bin.size === 0)\n continue;\n const n = new Date;\n n.setTime(1000 * bin.timestamp);\n const program = {\n name: programName,\n binfile: bin.filename,\n size: ini.size + bin.size,\n slot: -1,\n time: n,\n requestedSlot: -1\n };\n const result2 = await conn.writeDataAsync(new GetProgramSlotInfoH2DPacket(1 /* USER */, program.binfile));\n if (result2 instanceof GetProgramSlotInfoReplyD2HPacket) {\n program.slot = result2.slot;\n program.requestedSlot = result2.requestedSlot;\n }\n programList.push(program);\n }\n return ok(programList);\n })());\n}\nfunction readFile(state, request, downloadTarget = 1 /* FILE_TARGET_QSPI */, progressCallback) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n let handle;\n if (typeof request === \"string\") {\n handle = { filename: request, vendor: 1 /* USER */ };\n } else {\n handle = request;\n }\n return state.withFileTransfer(() => conn.downloadFileToHost(handle, downloadTarget, progressCallback));\n })());\n}\nfunction removeFile(state, request) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n return state.withFileTransfer(() => conn.removeFile(request));\n })());\n}\nfunction removeAllFiles(state) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n return state.withFileTransfer(() => conn.removeAllFiles());\n })());\n}\nfunction uploadProgram(state, iniConfig, binFileBuf, coldFileBuf, progressCallback) {\n return new ResultAsync(runUploadProgram(state, iniConfig, binFileBuf, coldFileBuf, progressCallback));\n}\nasync function runUploadProgram(state, iniConfig, binFileBuf, coldFileBuf, progressCallback) {\n const device = state._instance;\n const conn = device.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n let switchedToDownload = false;\n return state.withFileTransfer(async () => {\n try {\n if (device.isV5Controller) {\n await sleep(250);\n const refreshed = await device.refresh();\n if (refreshed.isErr() || !refreshed.value) {\n return err(new VexProtocolError(\"device is unavailable\"));\n }\n progressCallback(\"CHANNEL\", 0, 1);\n const p1 = await device.radio.changeChannel(1 /* DOWNLOAD */);\n if (p1.isErr())\n return err(p1.error);\n switchedToDownload = true;\n await sleep(250);\n const transferred = await sleepUntilAsync(async () => (await conn?.getSystemStatus(150))?.isOk() ?? false, 1e4, 200);\n if (transferred.isErr())\n return err(transferred.error);\n if (!transferred.value) {\n return err(new VexProtocolError(\"channel switch timed out\"));\n }\n progressCallback(\"CHANNEL\", 1, 1);\n }\n const p2 = await conn.uploadProgramToDevice(iniConfig, binFileBuf, coldFileBuf, progressCallback);\n if (p2.isErr())\n return err(p2.error);\n if (!p2.value)\n return err(new VexProtocolError(\"program upload rejected\"));\n if (device.isV5Controller) {\n if (!device.brain.isAvailable) {\n return err(new VexProtocolError(\"brain unavailable after upload\"));\n }\n progressCallback(\"CHANNEL\", 0, 1);\n const p3 = await device.radio.changeChannel(0 /* PIT */);\n if (p3.isErr())\n return err(p3.error);\n switchedToDownload = false;\n await sleep(250);\n const transferred = await sleepUntilAsync(async () => (await conn?.getSystemStatus(150))?.isOk() ?? false, 1e4, 200);\n if (transferred.isErr())\n return err(transferred.error);\n if (!transferred.value) {\n return err(new VexProtocolError(\"channel switch timed out\"));\n }\n progressCallback(\"CHANNEL\", 1, 1);\n }\n return ok(true);\n } finally {\n if (switchedToDownload) {\n await device.radio.changeChannel(0 /* PIT */);\n }\n }\n });\n}\nfunction writeFile(state, request, progressCallback) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n return state.withFileTransfer(() => conn.uploadFileToDevice(request, progressCallback));\n })());\n}\nfunction captureScreen(state, progressCallback) {\n return new ResultAsync((async () => {\n const conn = state._instance.connection;\n if (conn == null || !conn.isConnected) {\n return err(new VexNotConnectedError);\n }\n return state.withFileTransfer(() => conn.captureScreen(progressCallback));\n })());\n}\n\n// src/VexDeviceState.ts\nclass VexSerialDevice extends VexEventTarget {\n connection;\n defaultSerial;\n get isConnected() {\n return this.connection != null ? this.connection.isConnected : false;\n }\n get deviceType() {\n return this.isConnected ? this.connection?.port?.getInfo().usbProductId : undefined;\n }\n constructor(defaultSerial) {\n super();\n this.defaultSerial = defaultSerial;\n }\n}\n\nclass V5SerialDeviceState {\n _instance;\n refreshPauseDepth = 0;\n get isFileTransferring() {\n return this.refreshPauseDepth > 0;\n }\n async withFileTransfer(operation) {\n this.refreshPauseDepth++;\n try {\n return await operation();\n } finally {\n this.refreshPauseDepth--;\n }\n }\n brain = {\n activeProgram: 0,\n battery: {\n batteryPercent: 0,\n isCharging: false\n },\n button: {\n isPressed: false,\n isDoublePressed: false\n },\n cpu0Version: VexFirmwareVersion.allZero(),\n cpu1Version: VexFirmwareVersion.allZero(),\n isAvailable: false,\n settings: {\n isScreenReversed: false,\n isWhiteTheme: false,\n usingLanguage: 0\n },\n systemVersion: VexFirmwareVersion.allZero(),\n uniqueId: 0\n };\n controllers = [\n {\n battery: 0,\n isAvailable: false,\n isCharging: false\n },\n {\n battery: 0,\n isAvailable: false\n }\n ];\n devices = [];\n isFieldControllerConnected = false;\n matchMode = \"disabled\";\n radio = {\n channel: 0,\n isAvailable: false,\n isConnected: false,\n isVexNet: false,\n isRadioData: false,\n latency: 0,\n signalQuality: 0,\n signalStrength: 0\n };\n constructor(instance) {\n this._instance = instance;\n }\n}\n\nclass V5Brain {\n state;\n constructor(state) {\n this.state = state;\n }\n get isRunningProgram() {\n return this.activeProgram !== 0;\n }\n get activeProgram() {\n return this.state.brain.activeProgram;\n }\n set activeProgram(value) {\n this.setActiveProgram(value).mapErr(() => {});\n }\n setActiveProgram(value) {\n return new ResultAsync((async () => {\n if (this.state.brain.activeProgram === value)\n return ok(undefined);\n const conn = this.state._instance.connection;\n if (conn == null)\n return err(new VexNotConnectedError);\n const result = value === 0 ? await conn.stopProgram() : await conn.loadProgram(value);\n if (result.isErr())\n return err(result.error);\n this.state.brain.activeProgram = value;\n return ok(undefined);\n })());\n }\n runProgram(slot) {\n return new ResultAsync((async () => {\n const conn = this.state._instance.connection;\n if (conn == null)\n return err(new VexNotConnectedError);\n const reply = await conn.runProgram(slot);\n if (reply.isErr())\n return err(reply.error);\n const slotNumber = typeof slot === \"string\" ? Number.parseInt(slot, 10) : slot;\n if (Number.isFinite(slotNumber))\n this.state.brain.activeProgram = slotNumber;\n return ok(undefined);\n })());\n }\n stopProgram() {\n return new ResultAsync((async () => {\n const conn = this.state._instance.connection;\n if (conn == null)\n return err(new VexNotConnectedError);\n const reply = await conn.stopProgram();\n if (reply.isErr())\n return err(reply.error);\n this.state.brain.activeProgram = 0;\n return ok(undefined);\n })());\n }\n get battery() {\n return new V5Battery(this.state);\n }\n get button() {\n return new V5BrainButton(this.state);\n }\n get cpu0Version() {\n return this.state.brain.cpu0Version;\n }\n get cpu1Version() {\n return this.state.brain.cpu1Version;\n }\n get isAvailable() {\n return this.state.brain.isAvailable;\n }\n get settings() {\n return new V5BrainSettings(this.state);\n }\n get systemVersion() {\n return this.state.brain.systemVersion;\n }\n get uniqueId() {\n return this.state.brain.uniqueId;\n }\n getValue(key) {\n return getValue(this.state, key);\n }\n setValue(key, value) {\n return setValue(this.state, key, value);\n }\n listFiles(vendor = 1 /* USER */) {\n return listFiles(this.state, vendor);\n }\n listProgram() {\n return listProgram(this.state);\n }\n readFile(request, downloadTarget = 1 /* FILE_TARGET_QSPI */, progressCallback) {\n return readFile(this.state, request, downloadTarget, progressCallback);\n }\n removeFile(request) {\n return removeFile(this.state, request);\n }\n removeAllFiles() {\n return removeAllFiles(this.state);\n }\n uploadFirmware(publicUrl = \"https://content.vexrobotics.com/vexos/public/V5/\", usingVersion, progressCallback) {\n return uploadFirmware(this.state, publicUrl, usingVersion, progressCallback);\n }\n uploadProgram(iniConfig, binFileBuf, coldFileBuf, progressCallback) {\n return uploadProgram(this.state, iniConfig, binFileBuf, coldFileBuf, progressCallback);\n }\n writeFile(request, progressCallback) {\n return writeFile(this.state, request, progressCallback);\n }\n captureScreen(progressCallback) {\n return captureScreen(this.state, progressCallback);\n }\n}\n\nclass V5Battery {\n state;\n constructor(state) {\n this.state = state;\n }\n get batteryPercent() {\n return this.state.brain.battery.batteryPercent;\n }\n get isCharging() {\n return this.state.brain.battery.isCharging;\n }\n}\n\nclass V5BrainButton {\n state;\n constructor(state) {\n this.state = state;\n }\n get isPressed() {\n return this.state.brain.button.isPressed;\n }\n get isDoublePressed() {\n return this.state.brain.button.isDoublePressed;\n }\n}\n\nclass V5BrainSettings {\n state;\n constructor(state) {\n this.state = state;\n }\n get isScreenReversed() {\n return this.state.brain.settings.isScreenReversed;\n }\n get isWhiteTheme() {\n return this.state.brain.settings.isWhiteTheme;\n }\n get usingLanguage() {\n return this.state.brain.settings.usingLanguage;\n }\n}\n\nclass V5Controller {\n state;\n controllerIndex;\n constructor(state, controllerIndex) {\n this.state = state;\n this.controllerIndex = controllerIndex;\n }\n get batteryPercent() {\n return this.state.controllers[this.controllerIndex].battery;\n }\n get isMasterController() {\n return this.controllerIndex === 0;\n }\n get isAvailable() {\n return this.state.controllers[this.controllerIndex].isAvailable;\n }\n get isCharging() {\n return this.state.controllers[this.controllerIndex].isCharging;\n }\n}\n\nclass V5SmartDevice {\n state;\n deviceIndex;\n constructor(state, index) {\n this.state = state;\n this.deviceIndex = index;\n }\n getDeviceInfo() {\n return this.state.devices[this.deviceIndex];\n }\n get isAvailable() {\n return this.getDeviceInfo() !== undefined;\n }\n get port() {\n return this.deviceIndex;\n }\n get type() {\n return this.getDeviceInfo()?.type ?? 0 /* EMPTY */;\n }\n get version() {\n return this.getDeviceInfo()?.version ?? 0;\n }\n}\n\nclass V5Radio {\n state;\n constructor(state) {\n this.state = state;\n }\n get channel() {\n return this.state.radio.channel;\n }\n get isAvailable() {\n return this.state.radio.isAvailable;\n }\n get isConnected() {\n return this.state.radio.isConnected;\n }\n get isVexNet() {\n return this.state.radio.isVexNet;\n }\n get isRadioData() {\n return this.state.radio.isRadioData;\n }\n get latency() {\n return this.state.radio.latency;\n }\n changeChannel(channel) {\n return new ResultAsync((async () => {\n const result = await this.state._instance.connection?.writeDataAsync(new FileControlH2DPacket(1, channel));\n return result instanceof FileControlReplyD2HPacket ? ok(undefined) : err(new VexProtocolError(\"changeChannel was not acknowledged\"));\n })());\n }\n}\n\n// src/VexDevice.ts\nclass V5SerialDevice extends VexSerialDevice {\n autoReconnect = true;\n autoRefresh = true;\n pauseRefreshOnFileTransfer = true;\n _isReconnecting = false;\n _isDisconnecting = false;\n _refreshInterval;\n state = new V5SerialDeviceState(this);\n _disposed = false;\n _refreshGeneration = 0;\n constructor(defaultSerial) {\n super(defaultSerial);\n let isLastRefreshComplete = true;\n this._refreshInterval = setInterval(() => {\n if (this._disposed)\n return;\n if (this.autoRefresh && isLastRefreshComplete) {\n if (!this.isConnected) {\n this.state.brain.isAvailable = false;\n return;\n }\n if (!this.pauseRefreshOnFileTransfer || !this.state.isFileTransferring) {\n isLastRefreshComplete = false;\n (async () => {\n try {\n const r = await this.refresh();\n if (r.isErr())\n this.emit(\"error\", r.error);\n } catch (error) {\n this.emit(\"error\", error);\n } finally {\n isLastRefreshComplete = true;\n }\n })();\n }\n }\n }, 200);\n }\n get isV5Controller() {\n return this.deviceType === 1283 /* V5_CONTROLLER */;\n }\n get brain() {\n return new V5Brain(this.state);\n }\n get controllers() {\n return [new V5Controller(this.state, 0), new V5Controller(this.state, 1)];\n }\n get devices() {\n const rtn = [];\n for (let i = 1;i <= this.state.devices.length; i++) {\n if (this.state.devices[i] != null)\n rtn.push(new V5SmartDevice(this.state, i));\n }\n return rtn;\n }\n get isFieldControllerConnected() {\n return this.state.isFieldControllerConnected;\n }\n get matchMode() {\n return this.state.matchMode;\n }\n set matchMode(value) {\n this.setMatchMode(value).mapErr(() => {});\n }\n setMatchMode(mode) {\n return new ResultAsync((async () => {\n const reply = await this.connection?.setMatchMode(mode);\n if (reply === undefined)\n return err(new VexNotConnectedError);\n if (reply.isErr())\n return err(reply.error);\n this.state.matchMode = mode;\n return ok(undefined);\n })());\n }\n get radio() {\n return new V5Radio(this.state);\n }\n mockTouch(x, y, press) {\n return new ResultAsync((async () => {\n const reply = await this.connection?.mockTouch(x, y, press);\n if (reply === undefined)\n return err(new VexNotConnectedError);\n if (reply.isErr())\n return err(reply.error);\n return ok(undefined);\n })());\n }\n connect(conn) {\n return new ResultAsync(this._connect(conn));\n }\n async _connect(conn) {\n if (this.isConnected)\n return ok(undefined);\n if (conn != null) {\n if (!conn.isConnected) {\n const opened = await conn.open();\n if (opened.isErr() || opened.value !== true) {\n return err(new VexIoError(\"failed to open the supplied connection\"));\n }\n }\n const q = await conn.query1();\n if (q.isErr()) {\n await conn.close();\n return err(q.error);\n }\n this.connection = conn;\n } else {\n let tryIdx = 0;\n while (true) {\n const c = new V5SerialConnection(this.defaultSerial);\n const result = await c.open(tryIdx++, true);\n if (result.isErr()) {\n await c.close();\n return err(result.error);\n }\n if (result.value === undefined) {\n return err(new VexNotConnectedError(\"no V5 device was found\"));\n }\n if (!result.value) {\n await c.close();\n continue;\n }\n const q = await c.query1();\n if (q.isErr()) {\n await c.close();\n continue;\n }\n this.connection = c;\n break;\n }\n }\n if (!this.isConnected)\n return err(new VexNotConnectedError);\n await this.doAfterConnect();\n return ok(undefined);\n }\n async disconnect() {\n this._isDisconnecting = true;\n const connection = this.connection;\n this.connection = undefined;\n try {\n await connection?.close();\n } finally {\n this._isDisconnecting = false;\n }\n }\n async dispose() {\n this.autoReconnect = false;\n this.autoRefresh = false;\n this._disposed = true;\n if (this._refreshInterval !== undefined) {\n clearInterval(this._refreshInterval);\n this._refreshInterval = undefined;\n }\n await this.disconnect();\n }\n reconnect(timeout = 0) {\n return new ResultAsync(this._reconnect(timeout));\n }\n async _reconnect(timeout) {\n if (this.isConnected)\n return ok(undefined);\n if (timeout < 0) {\n return err(new VexInvalidArgumentError(\"timeout must be non-negative\"));\n }\n const endTime = Date.now() + timeout;\n if (this._isReconnecting) {\n if (timeout === 0) {\n await this.waitForReconnectToFinish();\n } else {\n const waited = await sleepUntil(() => !this._isReconnecting, timeout);\n if (waited.isErr() || !waited.value) {\n return err(new VexNotConnectedError);\n }\n }\n if (this.isConnected)\n return ok(undefined);\n }\n this._isReconnecting = true;\n try {\n while (timeout === 0 || Date.now() < endTime) {\n let tryIdx = 0;\n while (true) {\n const c = new V5SerialConnection(this.defaultSerial);\n const result = await c.open(tryIdx++, false);\n if (result.isErr()) {\n await c.close();\n return err(result.error);\n }\n if (result.value === undefined)\n break;\n if (!result.value) {\n await c.close();\n continue;\n }\n const status = await c.getSystemStatus(200);\n if (status.isErr()) {\n await c.close();\n continue;\n }\n if (this.brain.uniqueId !== 0 && status.value.uniqueId !== this.brain.uniqueId) {\n await c.close();\n continue;\n }\n this.connection = c;\n break;\n }\n if (this.isConnected)\n break;\n const getPortCount = async () => (await this.defaultSerial.getPorts()).length;\n const portsCount = await getPortCount();\n await sleepUntilAsync(async () => await getPortCount() !== portsCount, 1000);\n }\n } catch (e) {\n return err(toVexSerialError(e));\n } finally {\n this._isReconnecting = false;\n }\n if (!this.isConnected)\n return err(new VexNotConnectedError);\n await this.doAfterConnect();\n return ok(undefined);\n }\n async waitForReconnectToFinish() {\n while (this._isReconnecting) {\n const r = await sleepUntil(() => !this._isReconnecting, 1000);\n if (r.isOk() && r.value)\n return;\n }\n }\n async doAfterConnect() {\n if (this.connection == null)\n return;\n this.connection.on(\"disconnected\", (_data) => {\n if (this.autoReconnect && !this._isDisconnecting) {\n this.reconnect().mapErr((e) => this.emit(\"error\", e));\n }\n });\n await this.refresh();\n }\n refresh() {\n return new ResultAsync(this._refresh());\n }\n async _refresh() {\n if (this._disposed)\n return ok(false);\n const generation = ++this._refreshGeneration;\n const conn = this.connection;\n if (conn == null || !conn.isConnected) {\n this._applySnapshotIfCurrent(generation, { isAvailable: false });\n return ok(false);\n }\n const ssPacket = await conn.getSystemStatus();\n if (generation !== this._refreshGeneration || this._disposed)\n return ok(false);\n if (ssPacket.isErr()) {\n this._applySnapshotIfCurrent(generation, { isAvailable: false });\n return ok(false);\n }\n const sfPacket = await conn.getSystemFlags();\n if (generation !== this._refreshGeneration || this._disposed)\n return ok(false);\n if (sfPacket.isErr()) {\n this._applySnapshotIfCurrent(generation, { isAvailable: false });\n return ok(false);\n }\n const rdPacket = await conn.getRadioStatus();\n if (generation !== this._refreshGeneration || this._disposed)\n return ok(false);\n if (rdPacket.isErr()) {\n this._applySnapshotIfCurrent(generation, { isAvailable: false });\n return ok(false);\n }\n const dsPacket = await conn.getDeviceStatus();\n if (generation !== this._refreshGeneration || this._disposed)\n return ok(false);\n if (dsPacket.isErr()) {\n this._applySnapshotIfCurrent(generation, { isAvailable: false });\n return ok(false);\n }\n const snapshot = this._buildSnapshot(ssPacket.value, sfPacket.value, rdPacket.value, dsPacket.value);\n return ok(this._applySnapshotIfCurrent(generation, snapshot));\n }\n _buildSnapshot(ssPacket, sfPacket, rdPacket, dsPacket) {\n const flags2 = ssPacket.sysflags[2];\n const matchMode = (flags2 & 32) !== 0 ? \"disabled\" : (flags2 & 64) !== 0 ? \"autonomous\" : \"driver\";\n const isFieldControllerConnected = (flags2 & 16) !== 0;\n const flags4 = ssPacket.sysflags[4];\n const usingLanguage = (flags4 & 240) >> 4;\n const isWhiteTheme = (flags4 & 4) !== 0;\n const isScreenReversed = (flags4 & 1) === 0;\n const flags5 = sfPacket.flags;\n const hasFlag = (bit) => (flags5 & 2 ** (32 - bit)) !== 0;\n const isRadioData = hasFlag(12);\n const isDoublePressed = hasFlag(14);\n const isCharging = hasFlag(15);\n const isPressed = hasFlag(17);\n const isVexNet = hasFlag(18);\n const controller1Available = hasFlag(19);\n const radioConnected = hasFlag(22);\n const radioAvailable = hasFlag(23);\n const batteryPercent = sfPacket.battery ?? 0;\n const controller0Available = radioConnected || sfPacket.controllerBatteryPercent !== undefined;\n const controller0Battery = sfPacket.controllerBatteryPercent ?? 0;\n const controller1Battery = sfPacket.partnerControllerBatteryPercent ?? 0;\n const activeProgram = sfPacket.currentProgram;\n const isAvailable = !this.isV5Controller || radioConnected;\n const devices = dsPacket.devices.map((d) => ({ ...d }));\n return {\n isAvailable: true,\n matchMode,\n isFieldControllerConnected,\n brain: {\n ...this.state.brain,\n activeProgram,\n battery: { batteryPercent, isCharging },\n button: { isPressed, isDoublePressed },\n cpu0Version: ssPacket.cpu0Version,\n cpu1Version: ssPacket.cpu1Version,\n isAvailable,\n settings: { isScreenReversed, isWhiteTheme, usingLanguage },\n systemVersion: ssPacket.systemVersion,\n uniqueId: ssPacket.uniqueId\n },\n controllers: [\n {\n battery: controller0Battery,\n isAvailable: controller0Available,\n isCharging: (flags2 & 128) !== 0\n },\n {\n battery: controller1Battery,\n isAvailable: controller1Available\n }\n ],\n radio: {\n channel: rdPacket.channel,\n latency: rdPacket.timeslot,\n signalQuality: rdPacket.quality,\n signalStrength: rdPacket.strength,\n isRadioData,\n isVexNet,\n isConnected: radioConnected,\n isAvailable: radioAvailable\n },\n devices\n };\n }\n _applySnapshotIfCurrent(generation, snapshot) {\n if (this._disposed)\n return false;\n if (generation !== this._refreshGeneration)\n return false;\n if (snapshot.isAvailable === false) {\n this.state.brain.isAvailable = false;\n return false;\n }\n this.state.matchMode = snapshot.matchMode;\n this.state.isFieldControllerConnected = snapshot.isFieldControllerConnected;\n Object.assign(this.state.brain, snapshot.brain);\n Object.assign(this.state.controllers[0], snapshot.controllers[0]);\n Object.assign(this.state.controllers[1], snapshot.controllers[1]);\n Object.assign(this.state.radio, snapshot.radio);\n const next = [];\n for (const device of snapshot.devices) {\n if (device != null)\n next[device.port] = device;\n }\n this.state.devices = next;\n return true;\n }\n}\n// src/VexIniConfig.ts\nclass BaseIniBuilder {\n str = \"\";\n addLine(line) {\n this.str += line + `\n`;\n }\n addComment(comment) {\n this.addLine(\"; \" + comment);\n return this;\n }\n getContent() {\n return this.str;\n }\n}\n\nclass IniSectionBuilder extends BaseIniBuilder {\n name;\n object;\n keyTransform;\n constructor(name, object, keyTransform = (k) => k.toString()) {\n super();\n this.name = name;\n this.object = object;\n this.keyTransform = keyTransform;\n }\n addSingleObjProperty(key, maxValueLength) {\n if (this.object[key] == null || this.object[key].toString().length === 0)\n return;\n const formattedKey = this.keyTransform(key).padEnd(12).slice(0, 12);\n const trimmedVal = this.object[key].toString().slice(0, maxValueLength);\n const escapedVal = trimmedVal.replace(/[\"\\\\\\u0000-\\u001f\\u007f]/g, (character) => `\\\\x${character.charCodeAt(0).toString(16).padStart(2, \"0\")}`);\n this.addLine(`${formattedKey} = \"${escapedVal}\"`);\n }\n addObjProperty(key, maxValueLength) {\n const keys = Array.isArray(key) ? key : [key];\n for (const k of keys) {\n this.addSingleObjProperty(k, maxValueLength);\n }\n return this;\n }\n addAllObjProps(maxValueLength) {\n const keys = Object.keys(this.object);\n for (const k of keys) {\n this.addSingleObjProperty(k, maxValueLength);\n }\n return this;\n }\n}\n\nclass IniFileBuilder extends BaseIniBuilder {\n addSection(section) {\n this.addLine(`[${section.name}]`);\n this.str += section.getContent();\n return this;\n }\n}\n\nclass ProgramIniConfig {\n baseName = \"slot_1\";\n autorun = false;\n project = { version: \"1\", ide: \"Unknown\", file: \"none\" };\n program = {\n version: \"1\",\n name: \"program\",\n slot: 0,\n icon: \"default.bmp\",\n iconalt: \"\",\n description: \"\",\n date: \"\",\n timezone: \"0\"\n };\n config = {};\n controller1 = {};\n controller2 = {};\n constructor() {\n this.config = {\n 22: \"adi\"\n };\n }\n setProgramDate(date) {\n const d = date;\n this.program.date = d.toISOString();\n const tzo = Math.abs(d.getTimezoneOffset());\n const tzh = tzo / 60 >>> 0;\n const tzm = tzo - tzh * 60;\n this.program.timezone = (d.getTimezoneOffset() > 0 ? \"-\" : \"+\") + this.dec2(tzh) + \":\" + this.dec2(tzm);\n }\n createIni() {\n if (this.program.date.length === 0) {\n this.setProgramDate(new Date);\n }\n return new IniFileBuilder().addComment(\"\").addComment(\"VEX program ini file\").addComment(\"Generated by Vex V5 Serial Protocol Library\").addComment(\"\").addSection(new IniSectionBuilder(\"project\", this.project).addObjProperty(\"ide\", 16)).addComment(\"\").addSection(new IniSectionBuilder(\"program\", this.program).addObjProperty(\"name\", 32).addObjProperty(\"description\", 256).addObjProperty(\"icon\", 16).addObjProperty(\"iconalt\", 16).addObjProperty(\"slot\", 16)).addComment(\"\").addSection(new IniSectionBuilder(\"config\", this.config, (k) => \"port_\" + this.dec2(k)).addAllObjProps()).addComment(\"\").addSection(new IniSectionBuilder(\"controller_1\", this.controller1).addAllObjProps()).addComment(\"\").addSection(new IniSectionBuilder(\"controller_2\", this.controller2).addAllObjProps()).getContent();\n }\n dec2(value) {\n const str = (\"00\" + value.toString(10)).substr(-2, 2);\n return str.toUpperCase();\n }\n}\nexport {\n uploadFirmware,\n toVexSerialError,\n sleepUntilAsync,\n sleepUntil,\n sleep,\n encodeFixedText,\n downloadFileFromInternet,\n WriteKeyValueReplyD2HPacket,\n WriteKeyValueH2DPacket,\n WriteFileReplyD2HPacket,\n WriteFileH2DPacket,\n VexTransferError,\n VexSerialError,\n VexSerialDevice,\n VexSerialConnection,\n VexProtocolError,\n VexNotConnectedError,\n VexIoError,\n VexInvalidArgumentError,\n VexFirmwareVersion,\n VexFirmwareError,\n VexEventTarget,\n VexEventEmitter,\n VexDownloadError,\n V5SmartDevice,\n V5SerialDeviceState,\n V5SerialDevice,\n V5SerialConnection,\n V5Radio,\n V5Controller,\n V5BrainSettings,\n V5BrainButton,\n V5Brain,\n V5Battery,\n UpdateMatchModeH2DPacket,\n USER_PROG_CHUNK_SIZE,\n USER_FLASH_USR_CODE_START,\n USER_FLASH_SYS_CODE_START,\n USER_FLASH_START_C,\n USER_FLASH_START_B,\n USER_FLASH_START,\n USER_FLASH_MAX_FILE_SIZE,\n USER_FLASH_END_C,\n USER_FLASH_END_B,\n USER_FLASH_END,\n SystemVersionReplyD2HPacket,\n SystemVersionH2DPacket,\n SmartDeviceType,\n SerialDeviceType,\n SendDashTouchReplyD2HPacket,\n SendDashTouchH2DPacket,\n SelectDashScreen,\n SelectDashReplyD2HPacket,\n SelectDashH2DPacket,\n ScreenCaptureReplyD2HPacket,\n ScreenCaptureH2DPacket,\n ReadLogPageReplyD2HPacket,\n ReadLogPageH2DPacket,\n ReadKeyValueReplyD2HPacket,\n ReadKeyValueH2DPacket,\n ReadFileReplyD2HPacket,\n ReadFileH2DPacket,\n RadioChannelType,\n Query1ReplyD2HPacket,\n Query1H2DPacket,\n ProgramIniConfig,\n PacketView,\n PacketEncoder,\n Packet,\n MatchStatusReplyD2HPacket,\n MatchModeReplyD2HPacket,\n LoadFileActionReplyD2HPacket,\n LoadFileActionH2DPacket,\n LinkFileReplyD2HPacket,\n LinkFileH2DPacket,\n InitFileTransferReplyD2HPacket,\n InitFileTransferH2DPacket,\n HostBoundPacket,\n GetSystemStatusReplyD2HPacket,\n GetSystemStatusH2DPacket,\n GetSystemFlagsReplyD2HPacket,\n GetSystemFlagsH2DPacket,\n GetSlot5to8InfoReplyD2HPacket,\n GetSlot5to8InfoH2DPacket,\n GetSlot1to4InfoReplyD2HPacket,\n GetSlot1to4InfoH2DPacket,\n GetRadioStatusReplyD2HPacket,\n GetRadioStatusH2DPacket,\n GetRadioModeH2DPacket,\n GetProgramSlotInfoReplyD2HPacket,\n GetProgramSlotInfoH2DPacket,\n GetMatchStatusH2DPacket,\n GetLogCountReplyD2HPacket,\n GetLogCountH2DPacket,\n GetFileMetadataReplyD2HPacket,\n GetFileMetadataH2DPacket,\n GetFdtStatusReplyD2HPacket,\n GetFdtStatusH2DPacket,\n GetDirectoryFileCountReplyD2HPacket,\n GetDirectoryFileCountH2DPacket,\n GetDirectoryEntryReplyD2HPacket,\n GetDirectoryEntryH2DPacket,\n GetDeviceStatusReplyD2HPacket,\n GetDeviceStatusH2DPacket,\n FileVendor,\n FileLoadAction,\n FileInitOption,\n FileInitAction,\n FileFormatReplyD2HPacket,\n FileFormatH2DPacket,\n FileExitAction,\n FileDownloadTarget,\n FileControlReplyD2HPacket,\n FileControlH2DPacket,\n FileClearUpReplyD2HPacket,\n FileClearUpH2DPacket,\n FactoryStatusReplyD2HPacket,\n FactoryStatusH2DPacket,\n FactoryEnableReplyD2HPacket,\n FactoryEnableH2DPacket,\n ExitFileTransferReplyD2HPacket,\n ExitFileTransferH2DPacket,\n EraseFileReplyD2HPacket,\n EraseFileH2DPacket,\n DeviceBoundPacket,\n AckType\n};\n\n//# debugId=AEA86FF140C3172464756E2164756E21\n//# sourceMappingURL=index.js.map\n",
24
+ "import type { SerialPort as BunSerialPortRaw } from \"bun-serialport\";\nimport { readdir, realpath, readlink } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { platform } from \"node:os\";\n\nexport interface SerialPortFilter {\n usbVendorId?: number;\n usbProductId?: number;\n}\n\nexport interface SerialPortInfo {\n usbVendorId?: number;\n usbProductId?: number;\n}\n\nexport interface SerialPort extends EventTarget {\n onconnect: (event: Event) => void;\n ondisconnect: (event: Event) => void;\n readonly readable: ReadableStream<Uint8Array> | null;\n readonly writable: WritableStream<Uint8Array> | null;\n getInfo(): SerialPortInfo;\n open(options: { baudRate: number }): Promise<void>;\n close(): Promise<void>;\n forget(): Promise<void>;\n}\n\nexport interface Serial extends EventTarget {\n onconnect: (event: Event) => void;\n ondisconnect: (event: Event) => void;\n getPorts(): Promise<SerialPort[]>;\n requestPort(options?: { filters?: SerialPortFilter[] }): Promise<SerialPort>;\n}\n\nexport interface AdapterPortInfo {\n path: string;\n vendorId?: string;\n productId?: string;\n}\n\nasync function listPorts(): Promise<AdapterPortInfo[]> {\n const serialPort = await import(\"bun-serialport\");\n return serialPort.list();\n}\n\nexport class WebSerialPortAdapter extends EventTarget implements SerialPort {\n onconnect: (event: Event) => void = () => {};\n ondisconnect: (event: Event) => void = () => {};\n\n private _port: BunSerialPortRaw | null = null;\n private _path: string;\n private _info: SerialPortInfo;\n private _readable: ReadableStream<Uint8Array> | null = null;\n private _writable: WritableStream<Uint8Array> | null = null;\n private _readerController: ReadableStreamDefaultController<Uint8Array> | null =\n null;\n\n constructor(path: string, info: SerialPortInfo) {\n super();\n this._path = path;\n this._info = info;\n }\n\n get readable(): ReadableStream<Uint8Array> | null {\n return this._readable;\n }\n get writable(): WritableStream<Uint8Array> | null {\n return this._writable;\n }\n\n getInfo(): SerialPortInfo {\n return this._info;\n }\n\n async open(options: { baudRate: number }): Promise<void> {\n if (this._port) throw new Error(\"Port already open\");\n\n const { SerialPort } = await import(\"bun-serialport\");\n const port = new SerialPort({\n path: this._path,\n baudRate: options.baudRate,\n autoOpen: false,\n });\n\n await port.open();\n this._port = port;\n\n this._readable = new ReadableStream({\n start: (controller) => {\n this._readerController = controller;\n this._port?.on(\"data\", (data: Uint8Array) => {\n controller.enqueue(data);\n });\n this._port?.on(\"error\", (err) => {\n controller.error(err);\n this.close().catch(() => {});\n });\n },\n cancel: () => {\n void this.close();\n },\n });\n\n this._writable = new WritableStream({\n write: async (chunk) => {\n if (!this._port) throw new Error(\"Port closed\");\n await this._port.write(chunk);\n },\n close: async () => {\n await this.close();\n },\n });\n }\n\n async close(): Promise<void> {\n if (!this._port) return;\n\n const port = this._port;\n this._port = null;\n\n if (this._readerController) {\n try {\n this._readerController.close();\n } catch {\n // The controller may already have been closed by the native port.\n }\n this._readerController = null;\n }\n\n try {\n await port.close();\n } finally {\n try {\n port.removeAllListeners?.();\n } catch {\n // Some native serial implementations do not expose listener cleanup.\n }\n this._readable = null;\n this._writable = null;\n this.dispatchEvent(new Event(\"disconnect\"));\n }\n }\n\n async forget(): Promise<void> {\n await this.close();\n }\n}\n\nexport class WebSerialAdapter extends EventTarget implements Serial {\n onconnect: (event: Event) => void = () => {};\n ondisconnect: (event: Event) => void = () => {};\n\n private readonly _ports = new Map<string, WebSerialPortAdapter>();\n private readonly _operatingSystem: NodeJS.Platform;\n private readonly _listPorts: () => Promise<AdapterPortInfo[]>;\n\n constructor(\n operatingSystem: NodeJS.Platform = platform(),\n listPortsCallback: () => Promise<AdapterPortInfo[]> = listPorts,\n ) {\n super();\n this._operatingSystem = operatingSystem;\n this._listPorts = listPortsCallback;\n }\n\n private async _listPortsLinux() {\n const ttys = await readdir(\"/sys/class/tty\").catch(() => []);\n const ports: AdapterPortInfo[] = [];\n\n for (const name of ttys) {\n const sysPath = `/sys/class/tty/${name}`;\n const devicePath = join(sysPath, \"device\");\n\n try {\n const realDevicePath = await realpath(devicePath);\n const subsystem = await readlink(\n join(realDevicePath, \"subsystem\"),\n ).catch(() => \"\");\n\n const info: AdapterPortInfo = { path: `/dev/${name}` };\n\n if (subsystem.includes(\"usb\")) {\n let current = realDevicePath;\n for (let i = 0; i < 5; i++) {\n try {\n const vendorId = await Bun.file(join(current, \"idVendor\"))\n .text()\n .then((t) => t.trim());\n const productId = await Bun.file(join(current, \"idProduct\"))\n .text()\n .then((t) => t.trim());\n info.vendorId = vendorId;\n info.productId = productId;\n break;\n } catch {\n current = join(current, \"..\");\n }\n }\n }\n ports.push(info);\n } catch {\n // Not a real device or no permission\n }\n }\n return ports;\n }\n\n async getPorts(): Promise<SerialPort[]> {\n if (this._operatingSystem === \"win32\") {\n throw new Error(\n \"Windows serial access needs a Windows-capable serial backend; bun-serialport only supports Linux and macOS\",\n );\n }\n\n const ports =\n this._operatingSystem === \"linux\"\n ? await this._listPortsLinux()\n : await this._listPorts();\n\n const activePaths = new Set(ports.map((port) => port.path));\n for (const [path, port] of this._ports) {\n if (!activePaths.has(path) && port.readable === null)\n this._ports.delete(path);\n }\n\n return ports.map((port) => {\n const cached = this._ports.get(port.path);\n if (cached) return cached;\n\n const vendorId = port.vendorId\n ? parseInt(port.vendorId, 16)\n : this._operatingSystem === \"darwin\"\n ? 10376\n : undefined;\n const adapter = new WebSerialPortAdapter(port.path, {\n usbVendorId: vendorId,\n usbProductId: port.productId ? parseInt(port.productId, 16) : undefined,\n });\n this._ports.set(port.path, adapter);\n return adapter;\n });\n }\n\n async requestPort(options?: {\n filters?: SerialPortFilter[];\n }): Promise<SerialPort> {\n const ports = await this.getPorts();\n if (options?.filters && options.filters.length > 0) {\n const filtered = ports.filter((p) => {\n const info = p.getInfo();\n return options.filters?.some(\n (f) =>\n (f.usbVendorId === undefined ||\n f.usbVendorId === info.usbVendorId) &&\n (f.usbProductId === undefined ||\n f.usbProductId === info.usbProductId),\n );\n });\n const port = filtered[0];\n if (port) return port;\n throw new Error(\"No port found matching filters\");\n }\n const port = ports[0];\n if (port) return port;\n throw new Error(\"No port found\");\n }\n}\n\nexport const serial = new WebSerialAdapter();\n",
25
+ "import { V5SerialDevice } from \"@v5x/serial\";\nimport { serial } from \"./adapter\";\n\nexport async function connectV5Device(\n device = new V5SerialDevice(serial),\n): Promise<V5SerialDevice> {\n device.autoRefresh = false;\n try {\n const result = await device.connect();\n if (result.isErr()) {\n throw new Error(\n `v5 device not connected: ${result.error.message ?? result.error.kind}`,\n );\n }\n return device;\n } catch (error) {\n await device.dispose();\n throw error;\n }\n}\n\nexport async function withV5Device<Result>(\n operation: (device: V5SerialDevice) => Promise<Result>,\n device = new V5SerialDevice(serial),\n): Promise<Result> {\n const connectedDevice = await connectV5Device(device);\n try {\n return await operation(connectedDevice);\n } finally {\n await connectedDevice.dispose();\n }\n}\n",
26
+ "import type { Sade } from \"sade\";\nimport { Table } from \"cmd-table\";\nimport chalk from \"chalk\";\nimport { withV5Device } from \"../device\";\n\nconst WELL_KNOWN_KEYS = [\"teamnumber\", \"robotname\"] as const;\n\nexport default function registerKvCommand(program: Sade) {\n program\n .command(\"kv\", \"list well-known system variables on a brain\")\n .action(async () => {\n await withV5Device(async (device) => {\n const table = new Table({ compact: true });\n table.addColumn(\"key\");\n table.addColumn(\"value\");\n\n for (const key of WELL_KNOWN_KEYS) {\n const result = await device.brain.getValue(key);\n const value = result.isOk() ? result.value : undefined;\n table.addRow([\n key,\n value === undefined || value === \"\" ? chalk.dim(\"(unset)\") : value,\n ]);\n }\n\n console.log(table.render());\n });\n });\n\n program\n .command(\"kv get <key>\", \"get the value of a system variable on a brain\")\n .action(async (key) => {\n await withV5Device(async (device) => {\n const result = await device.brain.getValue(key);\n console.log(result.isOk() ? result.value : undefined);\n });\n });\n\n program\n .command(\"kv set <key> <value>\", \"set a system variable on a brain\")\n .action(async (key, value) => {\n await withV5Device(async (device) => {\n const result = await device.brain.setValue(key, value);\n if (result.isErr()) throw new Error(`failed to set ${key} to ${value}`);\n console.log(`set ${key} to ${value}`);\n });\n });\n}\n",
27
+ "import type { Sade } from \"sade\";\nimport { withV5Device } from \"../device\";\n\nexport default function registerCatCommand(program: Sade) {\n program\n .command(\"cat <file>\", \"read a file from flash\")\n .action(async (file) => {\n await withV5Device(async (device) => {\n const decoder = new TextDecoder();\n const result = await device.brain.readFile(file);\n if (result.isErr()) throw new Error(`failed to read ${file}`);\n console.log(decoder.decode(result.value));\n });\n });\n}\n",
28
+ "import { basename, dirname, join, resolve } from \"node:path\";\nimport { stat } from \"node:fs/promises\";\nimport {\n ProgramIniConfig,\n USER_FLASH_MAX_FILE_SIZE,\n type ZerobaseSlotNumber,\n} from \"@v5x/serial\";\nimport { detectProgramType, type ProgramType } from \"./detect\";\nimport { isRecord } from \"./guards\";\nimport { runProcess } from \"./process\";\n\nexport interface ProjectInfo {\n path: string;\n type: ProgramType;\n name: string;\n description: string;\n artifact?: string;\n}\n\nfunction stringAt(value: unknown, keys: string[]): string | undefined {\n let current = value;\n for (const key of keys) {\n if (!isRecord(current)) return undefined;\n current = current[key];\n }\n return typeof current === \"string\" ? current : undefined;\n}\n\nasync function readProsInfo(path: string) {\n const metadata: unknown = await Bun.file(join(path, \"project.pros\")).json();\n const name = stringAt(metadata, [\"py/state\", \"project_name\"]);\n const output = stringAt(metadata, [\n \"py/state\",\n \"templates\",\n \"kernel\",\n \"metadata\",\n \"output\",\n ]);\n const description = stringAt(metadata, [\n \"py/state\",\n \"upload_options\",\n \"description\",\n ]);\n return { name, description, output };\n}\n\nasync function readVexideInfo(path: string) {\n const manifest = Bun.TOML.parse(\n await Bun.file(join(path, \"Cargo.toml\")).text(),\n );\n const name = stringAt(manifest, [\"package\", \"name\"]);\n const description = stringAt(manifest, [\"package\", \"description\"]);\n return { name, description };\n}\n\nexport async function inspectProject(inputPath: string): Promise<ProjectInfo> {\n const path = resolve(inputPath);\n const type = await detectProgramType(path);\n const fallbackName = basename(path);\n\n switch (type) {\n case \"pros\": {\n const metadata = await readProsInfo(path);\n return {\n path,\n type,\n name: metadata.name ?? fallbackName,\n description: metadata.description ?? \"\",\n artifact: metadata.output ? resolve(path, metadata.output) : undefined,\n };\n }\n case \"vexide\": {\n const metadata = await readVexideInfo(path);\n return {\n path,\n type,\n name: metadata.name ?? fallbackName,\n description: metadata.description ?? \"\",\n };\n }\n case \"vexcode-cpp\":\n case \"vexcode-py\":\n return { path, type, name: fallbackName, description: \"\" };\n case \"unknown\":\n throw new Error(`no supported V5 project found at ${path}`);\n }\n}\n\nexport async function buildProject(project: ProjectInfo): Promise<void> {\n switch (project.type) {\n case \"pros\":\n case \"vexcode-cpp\":\n await runProcess([\"make\"], project.path);\n return;\n case \"vexide\":\n await runProcess([\"cargo\", \"v5\", \"build\", \"--release\"], project.path);\n return;\n case \"vexcode-py\":\n throw new Error(\"building VEXcode Python projects is not supported\");\n case \"unknown\":\n throw new Error(\"cannot build an unknown project type\");\n }\n}\n\nexport async function cleanProject(project: ProjectInfo): Promise<void> {\n switch (project.type) {\n case \"pros\":\n case \"vexcode-cpp\":\n await runProcess([\"make\", \"clean\"], project.path);\n return;\n case \"vexide\":\n await runProcess([\"cargo\", \"clean\"], project.path);\n return;\n case \"vexcode-py\":\n throw new Error(\"cleaning VEXcode Python projects is not supported\");\n case \"unknown\":\n throw new Error(\"cannot clean an unknown project type\");\n }\n}\n\nasync function existingFile(\n path: string | undefined,\n): Promise<string | undefined> {\n if (path === undefined) return undefined;\n return (await stat(path).catch(() => undefined))?.isFile() ? path : undefined;\n}\n\nasync function newestNamedBinary(\n root: string,\n name: string,\n): Promise<string | undefined> {\n if (!(await stat(root).catch(() => undefined))?.isDirectory())\n return undefined;\n const glob = new Bun.Glob(`**/${name}.bin`);\n const candidates: Array<{ path: string; modified: number }> = [];\n for await (const relativePath of glob.scan({ cwd: root, onlyFiles: true })) {\n const path = resolve(root, relativePath);\n const info = await stat(path);\n candidates.push({ path, modified: info.mtimeMs });\n }\n candidates.sort((left, right) => right.modified - left.modified);\n return candidates[0]?.path;\n}\n\nexport async function findProgramArtifact(\n project: ProjectInfo,\n explicitPath?: string,\n): Promise<string> {\n const explicit = await existingFile(\n explicitPath === undefined ? undefined : resolve(explicitPath),\n );\n if (explicitPath !== undefined && explicit === undefined) {\n throw new Error(\n `program artifact does not exist: ${resolve(explicitPath)}`,\n );\n }\n if (explicit !== undefined) return explicit;\n\n const configured = await existingFile(project.artifact);\n if (configured !== undefined) return configured;\n\n const conventionalPaths =\n project.type === \"pros\"\n ? [\"bin/monolith.bin\", \"bin/hot.package.bin\"]\n : project.type === \"vexcode-cpp\"\n ? [`build/${project.name}.bin`]\n : [];\n for (const relativePath of conventionalPaths) {\n const candidate = await existingFile(join(project.path, relativePath));\n if (candidate !== undefined) return candidate;\n }\n\n const outputRoot =\n project.type === \"vexide\" ? join(project.path, \"target\") : undefined;\n const artifact =\n outputRoot === undefined\n ? undefined\n : await newestNamedBinary(outputRoot, project.name);\n if (artifact === undefined) {\n throw new Error(\n `no program artifact found for ${project.name}; build the project or pass --file`,\n );\n }\n return artifact;\n}\n\nexport interface ProgramArtifacts {\n hot: string;\n cold?: string;\n}\n\nexport const PROGRAM_ARTIFACT_SIZE_LIMIT = USER_FLASH_MAX_FILE_SIZE;\n\nexport interface ValidatedProgramArtifact {\n path: string;\n size: number;\n}\n\nexport interface ValidatedProgramArtifacts {\n hot: ValidatedProgramArtifact;\n cold?: ValidatedProgramArtifact;\n}\n\nasync function validateProgramArtifact(\n path: string,\n role: \"hot\" | \"cold\",\n): Promise<ValidatedProgramArtifact> {\n const info = await stat(path).catch(() => undefined);\n if (info === undefined || !info.isFile()) {\n throw new Error(`program ${role} artifact does not exist: ${path}`);\n }\n if (info.size === 0) {\n throw new Error(`program ${role} artifact is empty: ${path}`);\n }\n if (info.size > PROGRAM_ARTIFACT_SIZE_LIMIT) {\n throw new Error(\n `program ${role} artifact ${path} is ${info.size} bytes; supported limit is ${PROGRAM_ARTIFACT_SIZE_LIMIT} bytes`,\n );\n }\n return { path, size: info.size };\n}\n\nexport async function validateProgramArtifacts(\n artifacts: ProgramArtifacts,\n): Promise<ValidatedProgramArtifacts> {\n return {\n hot: await validateProgramArtifact(artifacts.hot, \"hot\"),\n cold:\n artifacts.cold === undefined\n ? undefined\n : await validateProgramArtifact(artifacts.cold, \"cold\"),\n };\n}\n\nexport async function findProgramArtifacts(\n project: ProjectInfo,\n explicitPath?: string,\n): Promise<ProgramArtifacts> {\n const hot = await findProgramArtifact(project, explicitPath);\n if (project.type !== \"pros\" || basename(hot) !== \"hot.package.bin\") {\n return { hot };\n }\n\n const cold = await existingFile(join(dirname(hot), \"cold.package.bin\"));\n if (cold === undefined) {\n throw new Error(`PROS hot package is missing its cold package: ${hot}`);\n }\n return { hot, cold };\n}\n\nexport function createProgramConfig(options: {\n slot: number;\n name: string;\n description: string;\n icon: string;\n type: ProgramType;\n run: boolean;\n}): ProgramIniConfig {\n if (!Number.isInteger(options.slot) || options.slot < 1 || options.slot > 8) {\n throw new Error(\"slot must be an integer from 1 through 8\");\n }\n\n const config = new ProgramIniConfig();\n config.baseName = `slot_${options.slot}`;\n config.autorun = options.run;\n config.project.ide = options.type;\n config.program.name = options.name;\n config.program.description = options.description;\n config.program.icon = options.icon;\n config.program.slot = (options.slot - 1) as ZerobaseSlotNumber;\n return config;\n}\n",
29
+ "import { join } from \"node:path\";\nimport { isRecord } from \"./guards\";\n\nexport type ProgramType =\n | \"pros\"\n | \"vexide\"\n | \"vexcode-cpp\"\n | \"vexcode-py\"\n | \"unknown\";\n\nfunction hasVexideDependency(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (!(\"dependencies\" in value)) return false;\n const dependencies = value.dependencies;\n return isRecord(dependencies) && \"vexide\" in dependencies;\n}\n\nexport async function detectProgramType(path: string): Promise<ProgramType> {\n const prosFile = Bun.file(join(path, \"project.pros\"));\n const cargoFile = Bun.file(join(path, \"Cargo.toml\"));\n const vexPyFile = Bun.file(join(path, \"src\", \"main.py\"));\n const vexMkFiles = [\n Bun.file(join(path, \"vex\", \"mkenv.mk\")),\n Bun.file(join(path, \"vex\", \"mkrules.mk\")),\n ];\n\n if (await prosFile.exists()) {\n return \"pros\";\n }\n\n if (await cargoFile.exists()) {\n const config: unknown = Bun.TOML.parse(await cargoFile.text());\n if (hasVexideDependency(config)) return \"vexide\";\n }\n\n if (\n (await Promise.all(vexMkFiles.map((file) => file.exists()))).some(Boolean)\n ) {\n return \"vexcode-cpp\";\n }\n\n if (await vexPyFile.exists()) {\n return \"vexcode-py\";\n }\n\n return \"unknown\";\n}\n",
30
+ "export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function hasErrorCode(error: unknown, code: string): boolean {\n return isRecord(error) && error.code === code;\n}\n",
31
+ "export async function runProcess(\n command: string[],\n cwd: string,\n): Promise<void> {\n const [program, ...args] = command;\n if (program === undefined) throw new Error(\"cannot run an empty command\");\n const executable = Bun.which(program);\n if (executable === null) {\n throw new Error(`${program} is not installed or is not available on PATH`);\n }\n\n const process = Bun.spawn({\n cmd: [executable, ...args],\n cwd,\n stdin: \"inherit\",\n stdout: \"inherit\",\n stderr: \"inherit\",\n });\n const exitCode = await process.exited;\n if (exitCode !== 0) {\n throw new Error(`${command.join(\" \")} exited with code ${exitCode}`);\n }\n}\n",
32
+ "import type { Sade } from \"sade\";\nimport chalk from \"chalk\";\nimport { buildProject, inspectProject } from \"../utils/project\";\n\nexport default function registerBuildCommand(program: Sade) {\n program\n .command(\"build [path]\", \"build a program for the V5 brain\", { alias: \"b\" })\n .action(async (path: string) => {\n path ??= process.cwd();\n const project = await inspectProject(path);\n console.log(chalk.yellow(`building ${project.type} program...`));\n await buildProject(project);\n });\n}\n",
33
+ "import type { Sade } from \"sade\";\nimport { withV5Device } from \"../device\";\nimport { Table } from \"cmd-table\";\nimport { SmartDeviceType, VexFirmwareVersion } from \"@v5x/serial\";\n\nexport const SMART_DEVICE_LABELS: Record<number, string> = {\n [SmartDeviceType.EMPTY]: \"empty\",\n [SmartDeviceType.V5_POWER]: \"v5 power\",\n [SmartDeviceType.MOTOR]: \"motor\",\n [SmartDeviceType.LED]: \"led\",\n [SmartDeviceType.ABS_ENCODER_SENSOR]: \"abs encoder sensor\",\n [SmartDeviceType.CR_MOTOR]: \"cr motor\",\n [SmartDeviceType.IMU_SENSOR]: \"imu sensor\",\n [SmartDeviceType.DISTANCE_SENSOR]: \"distance sensor\",\n [SmartDeviceType.RADIO_SENSOR]: \"radio sensor\",\n [SmartDeviceType.CONTROLLER]: \"controller\",\n [SmartDeviceType.BRAIN]: \"brain\",\n [SmartDeviceType.VISION_SENSOR]: \"vision sensor\",\n [SmartDeviceType.ADI]: \"adi\",\n [SmartDeviceType.PARTNER_CONTROLLER]: \"partner controller\",\n [SmartDeviceType.BATTERY]: \"battery\",\n [SmartDeviceType.SOL]: \"solenoid\",\n [SmartDeviceType.OPTICAL_SENSOR]: \"optical sensor\",\n [SmartDeviceType.MAGNET]: \"magnet\",\n [SmartDeviceType.GPS_SENSOR]: \"gps sensor\",\n [SmartDeviceType.UNDEFINED_SENSOR]: \"undefined sensor\",\n};\n\nexport function formatSmartDeviceType(type: number): string {\n return SMART_DEVICE_LABELS[type] ?? `unknown (${type})`;\n}\n\nexport function formatSmartDeviceVersion(version: number): string {\n const major = (version >>> 14) & 0xff;\n const minor = (version >>> 8) & 0x3f;\n const patch = version & 0xff;\n return new VexFirmwareVersion(major, minor, patch, 0).toUserString();\n}\n\nexport function formatDeviceRows(\n smartDevices: Array<{ port: number; type: number; version: number }>,\n): string[][] {\n return smartDevices.map((device) => [\n device.port.toString(),\n formatSmartDeviceType(device.type),\n formatSmartDeviceVersion(device.version),\n ]);\n}\n\nexport default function registerDevicesCommand(program: Sade) {\n program\n .command(\"devices\", \"list devices connected to brain\", { alias: \"lsdev\" })\n .action(async () => {\n await withV5Device(async (device) => {\n const smartDevices = device.devices;\n const table = new Table({ compact: true });\n table.addColumn(\"port\");\n table.addColumn(\"type\");\n table.addColumn(\"version\");\n formatDeviceRows(smartDevices).forEach((row) => table.addRow(row));\n console.log(table.render());\n });\n });\n}\n",
34
+ "import type { Sade } from \"sade\";\nimport { withV5Device } from \"../device\";\nimport { Table } from \"cmd-table\";\nimport { FileVendor } from \"@v5x/serial\";\n\nconst VENDORS = [\n FileVendor.USER,\n FileVendor.SYS,\n FileVendor.DEV1,\n FileVendor.DEV2,\n FileVendor.DEV3,\n FileVendor.DEV4,\n FileVendor.DEV5,\n FileVendor.DEV6,\n FileVendor.VEXVM,\n FileVendor.VEX,\n FileVendor.UNDEFINED,\n] as const;\n\nfunction vendorPrefix(vid: FileVendor): string {\n switch (vid) {\n case FileVendor.USER:\n return \"user/\";\n case FileVendor.SYS:\n return \"sys_/\";\n case FileVendor.DEV1:\n return \"rmsh/\";\n case FileVendor.DEV2:\n return \"pros/\";\n case FileVendor.DEV3:\n return \"mwrk/\";\n case FileVendor.DEV4:\n return \"deva/\";\n case FileVendor.DEV5:\n return \"devb/\";\n case FileVendor.DEV6:\n return \"devc/\";\n case FileVendor.VEXVM:\n return \"vxvm/\";\n case FileVendor.VEX:\n return \"vex_/\";\n case FileVendor.UNDEFINED:\n return \"test/\";\n }\n}\n\nexport function formatFileTimestamp(timestamp: number): string {\n return new Intl.DateTimeFormat(\"en-US\", {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n }).format(new Date(timestamp * 1000));\n}\n\nexport function formatFileSize(bytes: number): string {\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n let size = bytes;\n let unit = 0;\n\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024;\n unit++;\n }\n\n return `${size.toFixed(size < 10 && unit > 0 ? 1 : 0)} ${units[unit]}`;\n}\n\nexport function formatFileRows(\n files: Array<{\n vendor: FileVendor;\n filename: string;\n size: number;\n loadAddress: number;\n timestamp: number;\n crc32: number;\n }>,\n): string[][] {\n return files.map(\n ({ vendor, filename, size, loadAddress, timestamp, crc32 }) => [\n vendorPrefix(vendor) + filename,\n formatFileSize(size),\n `0x${loadAddress.toString(16)}`,\n formatFileTimestamp(timestamp),\n `0x${crc32.toString(16)}`,\n ],\n );\n}\n\nexport default function registerDirCommand(program: Sade) {\n program\n .command(\"dir\", \"list files on flash\", { alias: \"ls\" })\n .action(async () => {\n await withV5Device(async (device) => {\n const files = [];\n for (const vendor of VENDORS) {\n const result = await device.brain.listFiles(vendor);\n if (result.isErr()) continue;\n files.push(\n ...result.value.map((file) => ({\n ...file,\n vendor,\n })),\n );\n }\n const table = new Table({ compact: true });\n table.addColumn(\"name\");\n table.addColumn(\"size\");\n table.addColumn(\"load address\");\n table.addColumn(\"timestamp\");\n table.addColumn(\"crc32\");\n formatFileRows(files).forEach((row) => table.addRow(row));\n console.log(table.render());\n });\n });\n}\n",
35
+ "import { withV5Device } from \"../device\";\nimport {\n buildProject,\n createProgramConfig,\n findProgramArtifacts,\n inspectProject,\n validateProgramArtifacts,\n} from \"./project\";\n\nexport interface UploadOptions {\n path: string;\n slot: number;\n name?: string;\n description?: string;\n icon: string;\n artifact?: string;\n build: boolean;\n run: boolean;\n}\n\nexport interface UploadCommandOptions {\n slot: string;\n name?: string;\n description?: string;\n icon: string;\n file?: string;\n build?: boolean;\n run?: boolean;\n}\n\nexport async function uploadProgramFromCommand(\n path: string | undefined,\n options: UploadCommandOptions,\n runDefault: boolean,\n): Promise<void> {\n await uploadProgram({\n path: path ?? process.cwd(),\n slot: Number(options.slot),\n name: options.name,\n description: options.description,\n icon: options.icon,\n artifact: options.file,\n build: options.build ?? true,\n run: options.run ?? runDefault,\n });\n}\n\nexport async function uploadProgram(options: UploadOptions): Promise<void> {\n const project = await inspectProject(options.path);\n if (options.build) await buildProject(project);\n const artifacts = await findProgramArtifacts(project, options.artifact);\n const config = createProgramConfig({\n slot: options.slot,\n name: options.name ?? project.name,\n description: options.description ?? project.description,\n icon: options.icon,\n type: project.type,\n run: options.run,\n });\n const validatedArtifacts = await validateProgramArtifacts(artifacts);\n const bytes = new Uint8Array(\n await Bun.file(validatedArtifacts.hot.path).arrayBuffer(),\n );\n const coldBytes = validatedArtifacts.cold\n ? new Uint8Array(await Bun.file(validatedArtifacts.cold.path).arrayBuffer())\n : undefined;\n await withV5Device(async (device) => {\n let previousState = \"\";\n const uploaded = await device.brain.uploadProgram(\n config,\n bytes,\n coldBytes,\n (state, current, total) => {\n if (state !== previousState) {\n if (previousState !== \"\") process.stderr.write(\"\\n\");\n previousState = state;\n }\n const percent = total === 0 ? 0 : Math.floor((current / total) * 100);\n const message = `${state.toLowerCase().padEnd(5)} ${percent}%`;\n process.stderr.write(\n process.stderr.isTTY ? `\\r${message}` : `${message}\\n`,\n );\n },\n );\n if (previousState !== \"\") process.stderr.write(\"\\n\");\n if (uploaded.isErr() || !uploaded.value)\n throw new Error(\"the brain rejected the program upload\");\n console.log(\n `${options.run ? \"uploaded and started\" : \"uploaded\"} ${config.program.name} in slot ${options.slot}`,\n );\n });\n}\n",
36
+ "import type { Sade } from \"sade\";\nimport {\n uploadProgramFromCommand,\n type UploadCommandOptions,\n} from \"../utils/upload\";\n\nexport default function registerUploadCommand(program: Sade) {\n program\n .command(\"upload [path]\", \"build and upload a program to the V5 brain\", {\n alias: \"u\",\n })\n .option(\"-s, --slot\", \"program slot\", \"1\")\n .option(\"-n, --name\", \"program name shown on the brain\")\n .option(\"-d, --description\", \"program description\")\n .option(\"-i, --icon\", \"program icon file\", \"default.bmp\")\n .option(\"-f, --file\", \"upload an existing .bin artifact\")\n .option(\"--no-build\", \"skip building the project\")\n .option(\"--run\", \"start the program after uploading\")\n .action((path: string | undefined, options: UploadCommandOptions) =>\n uploadProgramFromCommand(path, options, false),\n );\n}\n",
37
+ "import type { Sade } from \"sade\";\nimport {\n uploadProgramFromCommand,\n type UploadCommandOptions,\n} from \"../utils/upload\";\n\nexport default function registerRunCommand(program: Sade) {\n program\n .command(\"run [path]\", \"build, upload, and run a program on a V5 brain\", {\n alias: \"r\",\n })\n .option(\"-s, --slot\", \"program slot\", \"1\")\n .option(\"-n, --name\", \"program name shown on the brain\")\n .option(\"-d, --description\", \"program description\")\n .option(\"-i, --icon\", \"program icon file\", \"default.bmp\")\n .option(\"-f, --file\", \"upload an existing .bin artifact\")\n .option(\"--no-build\", \"skip building the project\")\n .action((path: string | undefined, options: UploadCommandOptions) =>\n uploadProgramFromCommand(path, options, true),\n );\n}\n",
38
+ "import type { Sade } from \"sade\";\nimport { basename, join, resolve } from \"node:path\";\nimport { createProject, type ProjectToolchain } from \"../utils/scaffold\";\n\nexport function assertProjectNameArgument(name: string): void {\n if (/[\\\\/]/.test(name)) {\n throw new Error(\n \"project name cannot contain path separators; use --path for nested destinations\",\n );\n }\n}\n\nexport default function registerNewCommand(program: Sade) {\n program\n .command(\"new <name>\", \"create a new V5 program\", { alias: \"n\" })\n .option(\"-t, --type\", \"project toolchain\")\n .option(\"-p, --path\", \"destination path\")\n .action(\n async (\n name: string,\n options: { type: ProjectToolchain; path?: string },\n ) => {\n if (options.type !== \"pros\" && options.type !== \"vexide\") {\n throw new Error(\"--type must be either pros or vexide\");\n }\n assertProjectNameArgument(name);\n const destination =\n options.path === undefined\n ? join(process.cwd(), name)\n : resolve(options.path);\n const path = await createProject(destination, options.type, {\n displayName: name,\n cargoPackageName:\n options.type === \"vexide\" ? name : basename(destination),\n prosRemoteName: name,\n });\n console.log(`created ${options.type} project at ${path}`);\n },\n );\n}\n",
39
+ "import {\n mkdir,\n mkdtemp,\n readdir,\n rename,\n rm,\n rmdir,\n stat,\n} from \"node:fs/promises\";\nimport { basename, dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { unzipSync } from \"fflate\";\nimport { hasErrorCode, isRecord } from \"./guards\";\n\nexport type ProjectToolchain = \"pros\" | \"vexide\";\n\nexport interface ProsTemplateSource {\n tag: string;\n archiveUrl: string;\n sha256: string;\n}\n\ninterface DestinationReservation {\n created: boolean;\n device: bigint;\n inode: bigint;\n}\n\ninterface ProjectNames {\n displayName: string;\n cargoPackageName: string;\n prosRemoteName: string;\n}\n\nexport interface CreateProjectOptions {\n displayName?: string;\n cargoPackageName?: string;\n prosRemoteName?: string;\n}\n\nconst FETCH_TIMEOUT_MS = 30_000;\nconst PROS_ARCHIVE_LIMIT = 64 * 1024 * 1024;\nconst PROS_EXTRACTED_LIMIT = 256 * 1024 * 1024;\nconst DEFAULT_PROS_TEMPLATE: ProsTemplateSource = {\n tag: \"4.2.2\",\n archiveUrl:\n \"https://github.com/purduesigbots/pros/releases/download/4.2.2/kernel%404.2.2.zip\",\n sha256: \"f019642af93dc3d164d1c3e67a2a7dc75c795ac6a4d550c9221c480e2e7f4899\",\n};\n\nfunction validateDisplayName(name: string): void {\n if (name.length === 0 || /[\\u0000-\\u001f]/.test(name)) {\n throw new Error(\n \"project name cannot be empty or contain control characters\",\n );\n }\n}\n\nfunction validateCargoPackageName(name: string): void {\n if (!/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(name)) {\n throw new Error(\n \"Cargo package name must start with a letter or number and contain only letters, numbers, hyphens, or underscores\",\n );\n }\n}\n\nfunction validateProsRemoteName(name: string): void {\n validateDisplayName(name);\n if (/[\\\\/]/.test(name)) {\n throw new Error(\"PROS remote name cannot contain path separators\");\n }\n}\n\nfunction createProjectNames(\n toolchain: ProjectToolchain,\n fallbackName: string,\n options: CreateProjectOptions = {},\n): ProjectNames {\n const displayName = options.displayName ?? fallbackName;\n const cargoPackageName = options.cargoPackageName ?? displayName;\n const prosRemoteName = options.prosRemoteName ?? displayName;\n\n validateDisplayName(displayName);\n if (toolchain === \"vexide\") validateCargoPackageName(cargoPackageName);\n else validateProsRemoteName(prosRemoteName);\n\n return { displayName, cargoPackageName, prosRemoteName };\n}\n\nasync function reserveDestination(\n path: string,\n): Promise<DestinationReservation> {\n let created = false;\n try {\n await mkdir(path);\n created = true;\n } catch (error) {\n if (!hasErrorCode(error, \"EEXIST\")) throw error;\n }\n\n const destination = await stat(path, { bigint: true }).catch(() => undefined);\n if (\n destination === undefined ||\n !destination.isDirectory() ||\n (await readdir(path)).length !== 0\n ) {\n throw new Error(`project directory is not empty: ${path}`);\n }\n return {\n created,\n device: destination.dev,\n inode: destination.ino,\n };\n}\n\nasync function removeOwnedReservation(\n path: string,\n reservation: DestinationReservation,\n): Promise<void> {\n if (!reservation.created) return;\n const destination = await stat(path, { bigint: true }).catch(() => undefined);\n if (\n destination?.isDirectory() &&\n destination.dev === reservation.device &&\n destination.ino === reservation.inode\n ) {\n await rmdir(path).catch(() => undefined);\n }\n}\n\nasync function fetchBytes(\n url: string,\n description: string,\n limit: number,\n init?: RequestInit,\n): Promise<Uint8Array> {\n const response = await fetch(url, {\n ...init,\n signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`failed to ${description} (${response.status})`);\n }\n\n const declaredLength = Number(response.headers.get(\"content-length\"));\n if (Number.isFinite(declaredLength) && declaredLength > limit) {\n throw new Error(`${description} exceeds the ${limit}-byte size limit`);\n }\n\n if (response.body === null) return new Uint8Array();\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let length = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n length += value.byteLength;\n if (length > limit) {\n await reader.cancel();\n throw new Error(`${description} exceeds the ${limit}-byte size limit`);\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const bytes = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nasync function writeFiles(\n root: string,\n files: Record<string, string | Uint8Array>,\n): Promise<void> {\n for (const [relativePath, content] of Object.entries(files)) {\n if (\n isAbsolute(relativePath) ||\n relativePath.split(/[\\\\/]/).includes(\"..\")\n ) {\n throw new Error(`template contains an unsafe path: ${relativePath}`);\n }\n const path = join(root, relativePath);\n await mkdir(dirname(path), { recursive: true });\n await Bun.write(path, content);\n }\n}\n\nasync function createProsProject(\n path: string,\n names: ProjectNames,\n source: ProsTemplateSource,\n): Promise<void> {\n const bytes = await fetchBytes(\n source.archiveUrl,\n `download PROS kernel ${source.tag}`,\n PROS_ARCHIVE_LIMIT,\n );\n const digest = new Bun.CryptoHasher(\"sha256\").update(bytes).digest(\"hex\");\n if (digest !== source.sha256) {\n throw new Error(`PROS kernel ${source.tag} failed SHA-256 verification`);\n }\n let extractedLength = 0;\n const archive = unzipSync(bytes, {\n filter(file) {\n extractedLength += file.originalSize;\n if (extractedLength > PROS_EXTRACTED_LIMIT) {\n throw new Error(\n `PROS kernel archive exceeds the ${PROS_EXTRACTED_LIMIT}-byte extracted size limit`,\n );\n }\n return true;\n },\n });\n const templateBytes = archive[\"template.pros\"];\n if (templateBytes === undefined) {\n throw new Error(\"the PROS kernel archive does not contain template.pros\");\n }\n const template: unknown = JSON.parse(new TextDecoder().decode(templateBytes));\n if (!isRecord(template)) throw new Error(\"invalid PROS project template\");\n\n const files: Record<string, string | Uint8Array> = {};\n for (const [relativePath, content] of Object.entries(archive)) {\n if (relativePath !== \"template.pros\" && !relativePath.endsWith(\"/\")) {\n files[relativePath] = content;\n }\n }\n files[\"project.pros\"] = `${JSON.stringify(\n {\n \"py/object\": \"pros.conductor.project.Project\",\n \"py/state\": {\n project_name: names.displayName,\n target: \"v5\",\n templates: { kernel: template },\n upload_options: {\n compress_bin: true,\n description: \"\",\n remote_name: names.prosRemoteName,\n slot: 1,\n },\n use_early_access: false,\n },\n },\n null,\n 2,\n )}\\n`;\n await writeFiles(path, files);\n}\n\nasync function createVexideProject(\n path: string,\n names: ProjectNames,\n): Promise<void> {\n const cargoName = JSON.stringify(names.cargoPackageName);\n await writeFiles(path, {\n \".gitignore\": \"/target\\n\",\n \".cargo/config.toml\": `[target.'cfg(target_os = \"vexos\")']\nrustflags = [\"-Clink-arg=-Tvexide.ld\"]\n\n[unstable]\nbuild-std = [\"std\", \"panic_abort\"]\nbuild-std-features = [\"compiler-builtins-mem\"]\n`,\n \"rust-toolchain.toml\": `[toolchain]\nchannel = \"nightly-2025-11-26\"\ncomponents = [\"rust-src\"]\n`,\n \"Cargo.toml\": `[package]\nname = ${cargoName}\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[profile.release]\nopt-level = \"z\"\nlto = \"fat\"\n\n[package.metadata.v5]\nupload-strategy = \"differential\"\nslot = 1\nicon = \"cool-x\"\ncompress = true\n\n[dependencies]\nvexide = { version = \"0.8.0\", features = [\"full\", \"default-sdk\"] }\n`,\n \"src/main.rs\": `use vexide::prelude::*;\n\nstruct Robot {}\n\nimpl Compete for Robot {\n async fn autonomous(&mut self) {\n println!(\"Autonomous!\");\n }\n\n async fn driver(&mut self) {\n println!(\"Driver!\");\n }\n}\n\n#[vexide::main]\nasync fn main(_peripherals: Peripherals) {\n Robot {}.compete().await;\n}\n`,\n \"README.md\": `# ${names.displayName}\\n\\nA vexide project created with @v5x/cli.\\n`,\n });\n}\n\nexport async function createProject(\n inputPath: string,\n toolchain: ProjectToolchain,\n nameOrOptions: string | CreateProjectOptions = basename(resolve(inputPath)),\n prosTemplate = DEFAULT_PROS_TEMPLATE,\n): Promise<string> {\n const path = resolve(inputPath);\n const nameOptions =\n typeof nameOrOptions === \"string\"\n ? { displayName: nameOrOptions }\n : nameOrOptions;\n const names = createProjectNames(toolchain, basename(path), nameOptions);\n const parent = dirname(path);\n await mkdir(parent, { recursive: true });\n const stagingPath = await mkdtemp(join(parent, `.${basename(path)}.v5x-`));\n let reservation: DestinationReservation | undefined;\n\n try {\n reservation = await reserveDestination(path);\n if (toolchain === \"pros\")\n await createProsProject(stagingPath, names, prosTemplate);\n else await createVexideProject(stagingPath, names);\n\n try {\n await rename(stagingPath, path);\n } catch (error) {\n const destination = await stat(path).catch(() => undefined);\n if (destination?.isDirectory() && (await readdir(path)).length === 0) {\n // Windows cannot replace an existing empty directory with rename().\n // rmdir() is atomic and fails if another process populated the directory.\n await rmdir(path);\n try {\n await rename(stagingPath, path);\n } catch (publishError) {\n await mkdir(path).catch(() => undefined);\n throw publishError;\n }\n } else if (destination !== undefined) {\n throw new Error(`project directory is not empty: ${path}`, {\n cause: error,\n });\n } else {\n throw error;\n }\n }\n } catch (error) {\n await rm(stagingPath, { recursive: true, force: true });\n if (reservation !== undefined) {\n await removeOwnedReservation(path, reservation);\n }\n throw error;\n }\n\n return path;\n}\n",
40
+ "import { createRequire } from 'module';\nvar require = createRequire('/');\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar _a;\n// Mediocre shim\nvar Worker;\nvar isMarkedAsUntransferable;\nvar workerAdd = \";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global\";\ntry {\n (_a = require('worker_threads'), Worker = _a.Worker, isMarkedAsUntransferable = _a.isMarkedAsUntransferable);\n}\ncatch (e) {\n}\nvar wk = Worker ? function (c, _, msg, transfer, cb) {\n var done = false;\n var w = new Worker(c + workerAdd, { eval: true })\n .on('error', function (e) { return cb(e, null); })\n .on('message', function (m) { return cb(null, m); })\n .on('exit', function (c) {\n if (c && !done)\n cb(new Error('exited with code ' + c), null);\n });\n if (isMarkedAsUntransferable)\n transfer = transfer.filter(function (t) { return !isMarkedAsUntransferable(t); });\n w.postMessage(msg, transfer);\n w.terminate = function () {\n done = true;\n return Worker.prototype.terminate.call(w);\n };\n return w;\n} : function (_, __, ___, ____, cb) {\n setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });\n var NOP = function () { };\n return {\n terminate: NOP,\n postMessage: NOP\n };\n};\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n",
41
+ "import type { Sade } from \"sade\";\nimport { basename, resolve } from \"node:path\";\nimport { createProject, type ProjectToolchain } from \"../utils/scaffold\";\n\nexport default function registerInitCommand(program: Sade) {\n program\n .command(\"init [path]\", \"create a new V5 program in an empty directory\")\n .option(\"-t, --type\", \"project toolchain\")\n .action(async (inputPath: string, options: { type: ProjectToolchain }) => {\n inputPath ??= process.cwd();\n if (options.type !== \"pros\" && options.type !== \"vexide\") {\n throw new Error(\"--type must be either pros or vexide\");\n }\n const path = resolve(inputPath);\n await createProject(path, options.type, basename(path));\n console.log(`created ${options.type} project at ${path}`);\n });\n}\n",
42
+ "import type { Sade } from \"sade\";\nimport { withV5Device } from \"../device\";\n\nexport default function registerRmCommand(program: Sade) {\n program\n .command(\"rm <file>\", \"erase a file from flash\")\n .action(async (file) => {\n await withV5Device(async (device) => {\n const result = await device.brain.removeFile(file);\n if (result.isErr()) throw new Error(`failed to erase ${file}`);\n console.log(`erased ${file}`);\n });\n });\n}\n",
43
+ "import type { Sade } from \"sade\";\nimport { withV5Device } from \"../device\";\n\nfunction printKittyRGB(bytes: Uint8Array) {\n const WIDTH = 480;\n const HEIGHT = 272;\n\n if (bytes.length !== WIDTH * HEIGHT * 3) {\n throw new Error(`bad screenshot size: ${bytes.length}`);\n }\n\n const base64 = Buffer.from(bytes).toString(\"base64\");\n\n process.stdout.write(\n `\\x1b_G` +\n `a=T,` +\n `f=24,` +\n `s=${WIDTH},` +\n `v=${HEIGHT},` +\n `c=40;` +\n base64 +\n `\\x1b\\\\\\n`,\n );\n}\n\nexport default function registerScreenshotCommand(program: Sade) {\n program\n .command(\"screenshot\", \"take a screen capture of the brain\", {\n alias: \"sc\",\n })\n .action(async () => {\n await withV5Device(async (device) => {\n const result = await device.brain.captureScreen();\n if (result.isErr()) throw new Error(\"failed to capture screenshot\");\n printKittyRGB(result.value);\n });\n });\n}\n",
44
+ "import type { Sade } from \"sade\";\nimport { runProcess } from \"../utils/process\";\n\nexport default function registerInstallCommand(program: Sade) {\n program\n .command(\"install <toolchain>\", \"install a V5 development toolchain\")\n .action(async (toolchain: string) => {\n if (toolchain !== \"pros\" && toolchain !== \"vexide\") {\n throw new Error(\"toolchain must be either pros or vexide\");\n }\n if (toolchain === \"vexide\") {\n await runProcess([\"cargo\", \"install\", \"cargo-v5\"], process.cwd());\n return;\n }\n\n const python = Bun.which(\"python3\") ?? Bun.which(\"python\");\n if (python === null)\n throw new Error(\"Python is required to install PROS\");\n await runProcess(\n [python, \"-m\", \"pip\", \"install\", \"--user\", \"pros-cli\"],\n process.cwd(),\n );\n });\n}\n",
45
+ "import type { Sade } from \"sade\";\nimport chalk from \"chalk\";\nimport { cleanProject, inspectProject } from \"../utils/project\";\n\nexport default function registerCleanCommand(program: Sade) {\n program\n .command(\"clean [path]\", \"clean build outputs\", { alias: \"cl\" })\n .action(async (path: string) => {\n path ??= process.cwd();\n const project = await inspectProject(path);\n console.log(chalk.yellow(`cleaning ${project.type} program...`));\n await cleanProject(project);\n });\n}\n",
46
+ "import type { IProgramInfo, SlotNumber } from \"@v5x/serial\";\nimport type { Sade } from \"sade\";\nimport { Table } from \"cmd-table\";\nimport { withV5Device } from \"../device\";\nimport { formatFileSize } from \"./dir\";\n\nexport function parseSlotArgument(slot: string): SlotNumber {\n switch (slot) {\n case \"1\":\n return 1;\n case \"2\":\n return 2;\n case \"3\":\n return 3;\n case \"4\":\n return 4;\n case \"5\":\n return 5;\n case \"6\":\n return 6;\n case \"7\":\n return 7;\n case \"8\":\n return 8;\n default:\n throw new Error(\"slot must be a number from 1 to 8\");\n }\n}\n\nexport function formatProgramTimestamp(time: Date): string {\n return new Intl.DateTimeFormat(\"en-US\", {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n }).format(time);\n}\n\nfunction formatSlot(slot: number): string {\n return slot >= 1 && slot <= 8 ? slot.toString() : \"unknown\";\n}\n\nexport function formatProgramRows(programs: IProgramInfo[]): string[][] {\n return programs.map((programInfo) => [\n formatSlot(programInfo.slot),\n formatSlot(programInfo.requestedSlot),\n programInfo.name,\n formatFileSize(programInfo.size),\n formatProgramTimestamp(programInfo.time),\n programInfo.binfile,\n ]);\n}\n\nexport default function registerProgramsCommand(program: Sade) {\n program\n .command(\"programs\", \"list programs on the V5 brain\")\n .action(async () => {\n await withV5Device(async (device) => {\n const result = await device.brain.listProgram();\n if (result.isErr()) throw new Error(\"failed to list programs\");\n\n const table = new Table({ compact: true });\n table.addColumn(\"slot\");\n table.addColumn(\"requested\");\n table.addColumn(\"name\");\n table.addColumn(\"size\");\n table.addColumn(\"timestamp\");\n table.addColumn(\"file\");\n formatProgramRows(result.value).forEach((row) => table.addRow(row));\n console.log(table.render());\n });\n });\n\n program\n .command(\"start <slot>\", \"start a program slot on the V5 brain\")\n .action(async (slot: string) => {\n const slotNumber = parseSlotArgument(slot);\n await withV5Device(async (device) => {\n const result = await device.brain.runProgram(slotNumber);\n if (result.isErr()) throw new Error(`failed to start slot ${slot}`);\n console.log(`started slot ${slot}`);\n });\n });\n\n program\n .command(\"stop\", \"stop the running program on the V5 brain\")\n .action(async () => {\n await withV5Device(async (device) => {\n const result = await device.brain.stopProgram();\n if (result.isErr()) throw new Error(\"failed to stop program\");\n console.log(\"stopped program\");\n });\n });\n}\n",
47
+ "#!/usr/bin/env bun\n\nimport sade from \"sade\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport registerKvCommand from \"./commands/kv\";\nimport registerCatCommand from \"./commands/cat\";\nimport registerBuildCommand from \"./commands/build\";\nimport registerDevicesCommand from \"./commands/devices\";\nimport registerDirCommand from \"./commands/dir\";\nimport registerUploadCommand from \"./commands/upload\";\nimport registerRunCommand from \"./commands/run\";\nimport registerNewCommand from \"./commands/new\";\nimport registerInitCommand from \"./commands/init\";\nimport registerRmCommand from \"./commands/rm\";\nimport registerScreenshotCommand from \"./commands/screenshot\";\nimport registerInstallCommand from \"./commands/install\";\nimport registerCleanCommand from \"./commands/clean\";\nimport registerProgramsCommand from \"./commands/programs\";\n\nconst program = sade(\"v5x\").version(pkg.version).describe(pkg.description);\n\nregisterBuildCommand(program);\nregisterCleanCommand(program);\nregisterUploadCommand(program);\nregisterRunCommand(program);\nregisterProgramsCommand(program);\nregisterNewCommand(program);\nregisterInitCommand(program);\nregisterDirCommand(program);\nregisterCatCommand(program);\nregisterRmCommand(program);\nregisterDevicesCommand(program);\nregisterScreenshotCommand(program);\nregisterInstallCommand(program);\nregisterKvCommand(program);\n\ntry {\n await program.parse(process.argv);\n} catch (error) {\n console.error(error instanceof Error ? error.message : String(error));\n process.exitCode = 1;\n}\n"
48
+ ],
49
+ "mappings": "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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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",
50
+ "debugId": "E94DD2FCEB92EAD064756E2164756E21",
51
+ "names": []
52
+ }