@hcrosse/opencode-pr-tracker 0.0.0

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,27 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js", "../node_modules/.bun/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js", "../node_modules/.bun/retry@0.12.0/node_modules/retry/lib/retry_operation.js", "../node_modules/.bun/retry@0.12.0/node_modules/retry/lib/retry.js", "../node_modules/.bun/signal-exit@3.0.7/node_modules/signal-exit/signals.js", "../node_modules/.bun/signal-exit@3.0.7/node_modules/signal-exit/index.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/mtime-precision.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/lockfile.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/adapter.js", "../node_modules/.bun/proper-lockfile@4.1.2/node_modules/proper-lockfile/index.js", "../src/tui.tsx", "../src/github.ts", "../src/exhaustive.ts", "../src/url.ts", "../src/attach.ts", "../src/state.ts"],
4
+ "sourcesContent": [
5
+ "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n",
6
+ "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n",
7
+ "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n",
8
+ "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n",
9
+ "function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(this._errors.length - 1, this._errors.length);\n this._timeouts = this._cachedTimeouts.slice(0);\n timeout = this._timeouts.shift();\n } else {\n return false;\n }\n }\n\n var self = this;\n var timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n",
10
+ "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && options.forever,\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n",
11
+ "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n",
12
+ "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n",
13
+ "'use strict';\n\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n const cachedPrecision = fs[cacheSymbol];\n\n if (cachedPrecision) {\n return fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n callback(null, stat.mtime, cachedPrecision);\n });\n }\n\n // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n fs.utimes(file, mtime, mtime, (err) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n // Cache the precision in a non-enumerable way\n Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n callback(null, stat.mtime, precision);\n });\n });\n}\n\nfunction getMtime(precision) {\n let now = Date.now();\n\n if (precision === 's') {\n now = Math.ceil(now / 1000) * 1000;\n }\n\n return new Date(now);\n}\n\nmodule.exports.probe = probe;\nmodule.exports.getMtime = getMtime;\n",
14
+ "'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n",
15
+ "'use strict';\n\nconst fs = require('graceful-fs');\n\nfunction createSyncFs(fs) {\n const methods = ['mkdir', 'realpath', 'stat', 'rmdir', 'utimes'];\n const newFs = { ...fs };\n\n methods.forEach((method) => {\n newFs[method] = (...args) => {\n const callback = args.pop();\n let ret;\n\n try {\n ret = fs[`${method}Sync`](...args);\n } catch (err) {\n return callback(err);\n }\n\n callback(null, ret);\n };\n });\n\n return newFs;\n}\n\n// ----------------------------------------------------------\n\nfunction toPromise(method) {\n return (...args) => new Promise((resolve, reject) => {\n args.push((err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n\n method(...args);\n });\n}\n\nfunction toSync(method) {\n return (...args) => {\n let err;\n let result;\n\n args.push((_err, _result) => {\n err = _err;\n result = _result;\n });\n\n method(...args);\n\n if (err) {\n throw err;\n }\n\n return result;\n };\n}\n\nfunction toSyncOptions(options) {\n // Shallow clone options because we are oging to mutate them\n options = { ...options };\n\n // Transform fs to use the sync methods instead\n options.fs = createSyncFs(options.fs || fs);\n\n // Retries are not allowed because it requires the flow to be sync\n if (\n (typeof options.retries === 'number' && options.retries > 0) ||\n (options.retries && typeof options.retries.retries === 'number' && options.retries.retries > 0)\n ) {\n throw Object.assign(new Error('Cannot use retries with the sync api'), { code: 'ESYNC' });\n }\n\n return options;\n}\n\nmodule.exports = {\n toPromise,\n toSync,\n toSyncOptions,\n};\n",
16
+ "'use strict';\n\nconst lockfile = require('./lib/lockfile');\nconst { toPromise, toSync, toSyncOptions } = require('./lib/adapter');\n\nasync function lock(file, options) {\n const release = await toPromise(lockfile.lock)(file, options);\n\n return toPromise(release);\n}\n\nfunction lockSync(file, options) {\n const release = toSync(lockfile.lock)(file, toSyncOptions(options));\n\n return toSync(release);\n}\n\nfunction unlock(file, options) {\n return toPromise(lockfile.unlock)(file, options);\n}\n\nfunction unlockSync(file, options) {\n return toSync(lockfile.unlock)(file, toSyncOptions(options));\n}\n\nfunction check(file, options) {\n return toPromise(lockfile.check)(file, options);\n}\n\nfunction checkSync(file, options) {\n return toSync(lockfile.check)(file, toSyncOptions(options));\n}\n\nmodule.exports = lock;\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.lockSync = lockSync;\nmodule.exports.unlockSync = unlockSync;\nmodule.exports.check = check;\nmodule.exports.checkSync = checkSync;\n",
17
+ "import { memo as _$memo } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { TextAttributes } from \"@opentui/core\";\nimport { createSignal, onCleanup } from \"solid-js\";\nimport { resolvePullRequestInput } from \"./attach.js\";\nimport { createGitHubClient, execFileRunner, statusAppearance } from \"./github.js\";\nimport { createStateStore } from \"./state.js\";\nimport { formatPullRequestRef, parsePullRequestUrl } from \"./url.js\";\nconst pollIntervalMilliseconds = 60_000;\nconst defaultScheduler = {\n setInterval: (task, delay) => globalThis.setInterval(task, delay),\n // SAFETY: this scheduler only receives handles returned by setInterval above.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- PollScheduler erases the host-specific handle type\n clearInterval: handle => globalThis.clearInterval(handle)\n};\nexport function attachPullRequest(store, sessionID, input) {\n const pullRequest = parsePullRequestUrl(input);\n if (!pullRequest.ok) return Promise.resolve(pullRequest);\n return store.attach(sessionID, pullRequest.value);\n}\nexport function startSessionPolling(input) {\n const scheduler = input.scheduler ?? defaultScheduler;\n const statuses = new Map();\n const controller = new AbortController();\n let timer;\n let timerRegistered = false;\n let stopped = false;\n let inFlight;\n let refreshQueued = false;\n function project(attachments) {\n return attachments.map(attachment => ({\n attachment,\n status: statuses.get(attachment.pullRequest.url) ?? {\n tag: \"Unavailable\"\n }\n }));\n }\n async function poll() {\n const attachments = await input.store.list(input.sessionID);\n if (stopped) return;\n if (!attachments.ok) {\n input.publish([]);\n input.onStateFailure(attachments.error);\n return;\n }\n const attachedUrls = new Set(attachments.value.map(attachment => attachment.pullRequest.url));\n for (const url of statuses.keys()) {\n if (!attachedUrls.has(url)) statuses.delete(url);\n }\n input.publish(project(attachments.value));\n const refreshable = attachments.value.filter(attachment => {\n const previous = statuses.get(attachment.pullRequest.url);\n return previous?.tag !== \"Available\" || previous.state.tag !== \"Merged\";\n });\n const batch = await input.github.get(refreshable.map(attachment => attachment.pullRequest), {\n signal: controller.signal\n });\n if (stopped) return;\n let batchDiagnostic;\n if (!batch.ok) {\n if (batch.error.tag === \"GitHubCancelled\") return;\n batchDiagnostic = batch.error.tag === \"GitHubBatchLimitExceeded\" ? \"GitHubUnavailable\" : batch.error.tag;\n }\n for (const [index, attachment] of refreshable.entries()) {\n const previous = statuses.get(attachment.pullRequest.url);\n const result = batch.ok ? batch.value[index] : undefined;\n if (result?.ok) {\n statuses.set(attachment.pullRequest.url, result.value);\n continue;\n }\n const diagnostic = result === undefined ? batchDiagnostic ?? \"GitHubUnavailable\" : result.error.tag;\n statuses.set(attachment.pullRequest.url, previous?.tag === \"Available\" ? {\n ...previous,\n stale: true,\n diagnostic\n } : {\n tag: \"Unavailable\",\n diagnostic\n });\n }\n if (!stopped) input.publish(project(attachments.value));\n }\n function refresh() {\n if (stopped) return Promise.resolve();\n if (inFlight) {\n refreshQueued = true;\n return inFlight;\n }\n const wrapped = poll().finally(() => {\n inFlight = undefined;\n if (refreshQueued && !stopped) {\n refreshQueued = false;\n return refresh();\n }\n return undefined;\n });\n inFlight = wrapped;\n return wrapped;\n }\n return {\n start() {\n if (stopped) return Promise.resolve();\n if (!timerRegistered) {\n timer = scheduler.setInterval(() => {\n refresh().catch(input.onError);\n }, pollIntervalMilliseconds);\n timerRegistered = true;\n }\n return refresh();\n },\n refresh,\n stop() {\n if (stopped) return;\n stopped = true;\n controller.abort();\n if (timerRegistered) scheduler.clearInterval(timer);\n }\n };\n}\nexport async function openPullRequest(pullRequest, options = {}) {\n const platform = options.platform ?? process.platform;\n const executable = platform === \"darwin\" ? \"open\" : platform === \"linux\" ? \"xdg-open\" : undefined;\n if (executable === undefined) {\n return {\n ok: false,\n error: {\n tag: \"UnsupportedPlatform\",\n message: `Opening pull requests is unsupported on ${platform}`,\n platform\n }\n };\n }\n try {\n await (options.runner ?? execFileRunner)(executable, [pullRequest.url], options.signal ? {\n signal: options.signal\n } : {});\n return {\n ok: true,\n value: undefined\n };\n } catch (cause) {\n return {\n ok: false,\n error: {\n tag: \"OpenPullRequestFailed\",\n message: \"Unable to open the pull request\",\n cause\n }\n };\n }\n}\nfunction createRefreshBus() {\n const listeners = new Map();\n return {\n emit(sessionID) {\n for (const listener of listeners.get(sessionID) ?? []) listener();\n },\n subscribe(sessionID, listener) {\n const sessionListeners = listeners.get(sessionID) ?? new Set();\n sessionListeners.add(listener);\n listeners.set(sessionID, sessionListeners);\n return () => {\n sessionListeners.delete(listener);\n if (sessionListeners.size === 0) listeners.delete(sessionID);\n };\n }\n };\n}\nfunction currentSessionID(api) {\n const route = api.route.current;\n if (route.name !== \"session\" || !(\"params\" in route)) return undefined;\n return typeof route.params?.sessionID === \"string\" ? route.params.sessionID : undefined;\n}\nfunction promptForPullRequest(api, options) {\n return new Promise(resolve => {\n const controller = new AbortController();\n const signal = AbortSignal.any([options.signal, controller.signal]);\n let finished = false;\n const finish = value => {\n if (finished) return;\n finished = true;\n controller.abort();\n api.ui.dialog.clear();\n resolve(value);\n };\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => {\n const [error, setError] = createSignal();\n const [busy, setBusy] = createSignal(false);\n const DialogPrompt = api.ui.DialogPrompt;\n return _$createComponent(DialogPrompt, {\n title: \"Attach pull request\",\n placeholder: \"https://github.com/owner/repository/pull/123 or 123\",\n description: () => error() ? (() => {\n var _el$ = _$createElement(\"text\");\n _$insert(_el$, error);\n _$effect(_$p => _$setProp(_el$, \"fg\", api.theme.current.error, _$p));\n return _el$;\n })() : null,\n get busy() {\n return busy();\n },\n busyText: \"Resolving repository\",\n onConfirm: value => {\n if (busy()) return;\n setBusy(true);\n void resolvePullRequestInput(value, {\n directory: options.directory,\n ...(options.runner ? {\n runner: options.runner\n } : {}),\n signal\n }).then(result => {\n if (finished) return;\n setBusy(false);\n if (result.ok) {\n finish(result.value);\n return;\n }\n if (result.error.tag === \"RepositoryResolutionCancelled\") {\n finish(undefined);\n return;\n }\n setError(result.error.message);\n });\n },\n onCancel: () => finish(undefined)\n });\n }, () => {\n if (finished) return;\n finished = true;\n controller.abort();\n resolve(undefined);\n });\n });\n}\nfunction selectPullRequest(api, title, attachments) {\n return new Promise(resolve => {\n let finished = false;\n const finish = value => {\n if (finished) return;\n finished = true;\n api.ui.dialog.clear();\n resolve(value);\n };\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => {\n const DialogSelect = api.ui.DialogSelect;\n return _$createComponent(DialogSelect, {\n title: title,\n get options() {\n return attachments.map(attachment => ({\n title: formatPullRequestRef(attachment.pullRequest),\n value: attachment.pullRequest,\n description: attachment.pullRequest.url\n }));\n },\n onSelect: option => finish(option.value)\n });\n }, () => {\n if (!finished) resolve(undefined);\n });\n });\n}\nfunction showStateFailure(api, failure) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: failure.message\n });\n}\nfunction toneColor(theme, tone) {\n const colors = {\n green: theme.success,\n yellow: theme.warning,\n red: theme.error,\n purple: theme.secondary,\n gray: theme.textMuted\n };\n return colors[tone];\n}\nfunction PullRequestSidebar(props) {\n const [items, setItems] = createSignal([]);\n const [failure, setFailure] = createSignal();\n const polling = startSessionPolling({\n sessionID: props.sessionID,\n store: props.dependencies.store,\n github: props.dependencies.github,\n publish: value => {\n setFailure(undefined);\n setItems(value);\n },\n onStateFailure: error => setFailure(error.message),\n onError: () => setFailure(\"Unable to refresh pull request status\")\n });\n polling.start().catch(() => setFailure(\"Unable to refresh pull request status\"));\n const unsubscribe = props.refreshBus.subscribe(props.sessionID, () => {\n polling.refresh().catch(() => setFailure(\"Unable to refresh pull request status\"));\n });\n const onAbort = () => polling.stop();\n props.api.lifecycle.signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n onCleanup(() => {\n unsubscribe();\n polling.stop();\n props.api.lifecycle.signal.removeEventListener(\"abort\", onAbort);\n });\n return (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"b\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"gap\", 1);\n _$insertNode(_el$3, _el$4);\n _$insertNode(_el$4, _$createTextNode(`Pull requests`));\n _$insert(_el$2, (() => {\n var _c$ = _$memo(() => !!failure());\n return () => _c$() ? (() => {\n var _el$6 = _$createElement(\"text\");\n _$insert(_el$6, failure);\n _$effect(_$p => _$setProp(_el$6, \"fg\", props.api.theme.current.error, _$p));\n return _el$6;\n })() : null;\n })(), null);\n _$insert(_el$2, (() => {\n var _c$2 = _$memo(() => !!(!failure() && items().length === 0));\n return () => _c$2() ? (() => {\n var _el$7 = _$createElement(\"text\");\n _$insertNode(_el$7, _$createTextNode(`No pull requests attached`));\n _$effect(_$p => _$setProp(_el$7, \"fg\", props.api.theme.current.textMuted, _$p));\n return _el$7;\n })() : null;\n })(), null);\n _$insert(_el$2, () => items().map(item => {\n const appearance = statusAppearance(item.status);\n const attributes = appearance.strikethrough ? TextAttributes.STRIKETHROUGH : TextAttributes.NONE;\n const title = item.status.tag === \"Available\" ? item.status.title : \"Title unavailable\";\n return (() => {\n var _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"text\"),\n _el$1 = _$createElement(\"b\"),\n _el$10 = _$createTextNode(` `),\n _el$11 = _$createElement(\"text\");\n _$insertNode(_el$9, _el$0);\n _$insertNode(_el$9, _el$11);\n _$setProp(_el$9, \"flexDirection\", \"column\");\n _$setProp(_el$9, \"onMouseUp\", () => {\n openPullRequest(item.attachment.pullRequest, {\n ...(props.dependencies.runner ? {\n runner: props.dependencies.runner\n } : {}),\n signal: props.api.lifecycle.signal\n }).then(result => {\n if (!result.ok) {\n props.api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n }).catch(() => {\n props.api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: \"Unable to open the pull request\"\n });\n });\n });\n _$insertNode(_el$0, _el$1);\n _$insertNode(_el$0, _el$10);\n _$setProp(_el$0, \"attributes\", attributes);\n _$insert(_el$1, () => formatPullRequestRef(item.attachment.pullRequest));\n _$insert(_el$0, () => appearance.label, null);\n _$setProp(_el$11, \"attributes\", attributes);\n _$insert(_el$11, title);\n _$effect(_p$ => {\n var _v$ = toneColor(props.api.theme.current, appearance.tone),\n _v$2 = props.api.theme.current.textMuted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$0, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$11, \"fg\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$9;\n })();\n }), null);\n _$effect(_$p => _$setProp(_el$3, \"fg\", props.api.theme.current.text, _$p));\n return _el$2;\n })();\n}\nexport function registerTui(api, dependencies) {\n const refreshBus = createRefreshBus();\n api.event.on(\"session.updated\", event => refreshBus.emit(event.properties.sessionID));\n api.event.on(\"message.updated\", event => refreshBus.emit(event.properties.sessionID));\n api.event.on(\"message.part.updated\", event => refreshBus.emit(event.properties.sessionID));\n const disposeCommands = api.keymap.registerLayer({\n commands: [{\n name: \"pr.attach\",\n title: \"Attach pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-attach\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const pullRequest = await promptForPullRequest(api, {\n directory: api.state.path.directory,\n ...(dependencies.runner ? {\n runner: dependencies.runner\n } : {}),\n signal: api.lifecycle.signal\n });\n if (pullRequest === undefined) return;\n const result = await dependencies.store.attach(sessionID, pullRequest);\n if (!result.ok) {\n showStateFailure(api, result.error);\n return;\n }\n const message = result.value === \"added\" ? `Attached ${formatPullRequestRef(pullRequest)}` : `${formatPullRequestRef(pullRequest)} is already attached`;\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message\n });\n refreshBus.emit(sessionID);\n }\n }, {\n name: \"pr.open\",\n title: \"Open pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-open\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const attachments = await dependencies.store.list(sessionID);\n if (!attachments.ok) {\n showStateFailure(api, attachments.error);\n return;\n }\n if (attachments.value.length === 0) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"No pull requests are attached\"\n });\n return;\n }\n const pullRequest = await selectPullRequest(api, \"Open pull request\", attachments.value);\n if (pullRequest === undefined) return;\n const result = await openPullRequest(pullRequest, {\n ...(dependencies.runner ? {\n runner: dependencies.runner\n } : {}),\n signal: api.lifecycle.signal\n });\n if (!result.ok) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n }\n }, {\n name: \"pr.detach\",\n title: \"Detach pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-detach\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const attachments = await dependencies.store.list(sessionID);\n if (!attachments.ok) {\n showStateFailure(api, attachments.error);\n return;\n }\n if (attachments.value.length === 0) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"No pull requests are attached\"\n });\n return;\n }\n const pullRequest = await selectPullRequest(api, \"Detach pull request\", attachments.value);\n if (pullRequest === undefined) return;\n const result = await dependencies.store.detach(sessionID, pullRequest);\n if (!result.ok) {\n showStateFailure(api, result.error);\n return;\n }\n const message = result.value === \"removed\" ? `Detached ${formatPullRequestRef(pullRequest)}` : `${formatPullRequestRef(pullRequest)} was not attached`;\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message\n });\n refreshBus.emit(sessionID);\n }\n }],\n bindings: []\n });\n api.lifecycle.onDispose(disposeCommands);\n api.slots.register({\n order: 250,\n slots: {\n sidebar_content(_context, value) {\n return _$createComponent(PullRequestSidebar, {\n api: api,\n get sessionID() {\n return value.session_id;\n },\n dependencies: dependencies,\n refreshBus: refreshBus\n });\n }\n }\n });\n}\nconst plugin = {\n id: \"opencode-pr-tracker\",\n async tui(api, options) {\n if (options?.enabled === false) return;\n registerTui(api, {\n store: createStateStore(),\n github: createGitHubClient()\n });\n }\n};\nexport default plugin;",
18
+ "import { execFile } from \"node:child_process\"\n\nimport { casesHandled } from \"./exhaustive.js\"\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport type PullRequestCi = \"passed\" | \"pending\" | \"failed\" | \"none\"\nexport type PullRequestMergeability = \"mergeable\" | \"conflicting\" | \"unknown\"\n\nexport type PullRequestState =\n | Readonly<{ tag: \"Open\"; ci: PullRequestCi; mergeability: PullRequestMergeability }>\n | Readonly<{ tag: \"Merged\" }>\n | Readonly<{ tag: \"Closed\" }>\n\nexport type AvailablePullRequestStatus = Readonly<{\n tag: \"Available\"\n pullRequest: PullRequestUrl\n title: string\n state: PullRequestState\n}> &\n (Readonly<{ stale: false }> | Readonly<{ stale: true; diagnostic: PullRequestDiagnostic }>)\n\nexport type PullRequestStatus =\n | AvailablePullRequestStatus\n | Readonly<{ tag: \"Unavailable\"; diagnostic?: PullRequestDiagnostic }>\n\nexport type GitHubUnavailable = Readonly<{\n tag: \"GitHubUnavailable\"\n message: \"GitHub status unavailable\"\n cause: unknown\n}>\n\nexport type GitHubCliMissing = Readonly<{\n tag: \"GitHubCliMissing\"\n message: \"GitHub CLI is not installed\"\n cause: unknown\n}>\n\nexport type GitHubAuthenticationRequired = Readonly<{\n tag: \"GitHubAuthenticationRequired\"\n message: \"GitHub CLI authentication required\"\n cause: unknown\n}>\n\nexport type GitHubCancelled = Readonly<{\n tag: \"GitHubCancelled\"\n message: \"GitHub status request cancelled\"\n cause: unknown\n}>\n\nexport type InvalidGitHubResponse = Readonly<{\n tag: \"InvalidGitHubResponse\"\n message: \"GitHub returned an invalid pull request response\"\n}>\n\nexport type GitHubBatchLimitExceeded = Readonly<{\n tag: \"GitHubBatchLimitExceeded\"\n limit: 20\n message: \"GitHub batch cannot contain more than 20 pull requests\"\n}>\n\nexport type GitHubFailure =\n | GitHubCliMissing\n | GitHubAuthenticationRequired\n | GitHubUnavailable\n | GitHubCancelled\n | InvalidGitHubResponse\n | GitHubBatchLimitExceeded\n\nexport type GitHubBatch = readonly Result<AvailablePullRequestStatus, InvalidGitHubResponse>[]\n\nexport type PullRequestDiagnostic = Exclude<GitHubFailure, GitHubCancelled | GitHubBatchLimitExceeded>[\"tag\"]\n\nexport type ProcessRunner = (\n file: string,\n args: readonly string[],\n options: Readonly<{ signal?: AbortSignal; cwd?: string }>,\n) => Promise<Readonly<{ stdout: string }>>\n\nexport type GitHubClient = Readonly<{\n get(\n pullRequests: readonly PullRequestUrl[],\n options?: Readonly<{ signal?: AbortSignal }>,\n ): Promise<Result<GitHubBatch, GitHubFailure>>\n}>\n\nconst invalidGitHubResponse: Result<never, InvalidGitHubResponse> = {\n ok: false,\n error: {\n tag: \"InvalidGitHubResponse\",\n message: \"GitHub returned an invalid pull request response\",\n },\n}\nconst githubBatchLimitExceeded: Result<never, GitHubBatchLimitExceeded> = {\n ok: false,\n error: {\n tag: \"GitHubBatchLimitExceeded\",\n limit: 20,\n message: \"GitHub batch cannot contain more than 20 pull requests\",\n },\n}\n\nconst checkRunPending = new Set([\"QUEUED\", \"IN_PROGRESS\", \"WAITING\", \"PENDING\"])\nconst checkRunPassed = new Set([\"SUCCESS\"])\nconst checkRunFailed = new Set([\"FAILURE\", \"CANCELLED\", \"TIMED_OUT\", \"ACTION_REQUIRED\", \"STARTUP_FAILURE\", \"STALE\"])\nconst checkRunIgnored = new Set([\"NEUTRAL\", \"SKIPPED\"])\nconst statusContextPending = new Set([\"EXPECTED\", \"PENDING\"])\nconst statusContextPassed = new Set([\"SUCCESS\"])\nconst statusContextFailed = new Set([\"ERROR\", \"FAILURE\"])\nconst maximumPullRequestsPerBatch = 20\nconst pullRequestSelection = `__typename ... on PullRequest { title state url mergedAt mergeable statusCheckRollup { contexts(first: 1) { checkRunCount statusContextCount checkRunCountsByState { state count } statusContextCountsByState { state count } } } }`\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\ntype CheckBucket = \"passed\" | \"pending\" | \"failed\" | \"ignored\"\n\ntype ProcessExecutionFailed = Readonly<{\n tag: \"ProcessExecutionFailed\"\n code: string | number | null\n stderr: string\n stdout: string\n cause: unknown\n}>\n\nfunction parseProcessExecutionFailed(value: unknown): ProcessExecutionFailed | undefined {\n if (\n !isRecord(value) ||\n value.tag !== \"ProcessExecutionFailed\" ||\n (value.code !== null && typeof value.code !== \"string\" && typeof value.code !== \"number\") ||\n typeof value.stderr !== \"string\" ||\n typeof value.stdout !== \"string\" ||\n !(\"cause\" in value)\n ) {\n return undefined\n }\n\n return {\n tag: \"ProcessExecutionFailed\",\n code: value.code,\n stderr: value.stderr,\n stdout: value.stdout,\n cause: value.cause,\n }\n}\n\nfunction classifyCountState(\n state: string,\n states: Readonly<{\n passed: ReadonlySet<string>\n pending: ReadonlySet<string>\n failed: ReadonlySet<string>\n ignored?: ReadonlySet<string>\n }>,\n): CheckBucket | undefined {\n if (states.failed.has(state)) return \"failed\"\n if (states.pending.has(state)) return \"pending\"\n if (states.passed.has(state)) return \"passed\"\n if (states.ignored?.has(state)) return \"ignored\"\n return undefined\n}\n\nfunction aggregateCounts(\n input: unknown,\n expectedTotal: unknown,\n states: Parameters<typeof classifyCountState>[1],\n): Result<ReadonlySet<CheckBucket>, InvalidGitHubResponse> {\n if (!Array.isArray(input) || !Number.isInteger(expectedTotal) || Number(expectedTotal) < 0) {\n return invalidGitHubResponse\n }\n const buckets = new Set<CheckBucket>()\n const seenStates = new Set<string>()\n let total = 0\n for (const item of input) {\n if (\n !isRecord(item) ||\n typeof item.state !== \"string\" ||\n !Number.isInteger(item.count) ||\n Number(item.count) < 0 ||\n seenStates.has(item.state)\n ) {\n return invalidGitHubResponse\n }\n const bucket = classifyCountState(item.state, states)\n if (bucket === undefined && Number(item.count) > 0) return invalidGitHubResponse\n seenStates.add(item.state)\n total += Number(item.count)\n if (bucket !== undefined && Number(item.count) > 0) buckets.add(bucket)\n }\n return total === expectedTotal ? { ok: true, value: buckets } : invalidGitHubResponse\n}\n\nfunction parseStatusCheckRollup(input: unknown): Result<PullRequestCi, InvalidGitHubResponse> {\n if (input === null) return { ok: true, value: \"none\" }\n if (!isRecord(input) || !isRecord(input.contexts)) return invalidGitHubResponse\n const contexts = input.contexts\n const checkRuns = aggregateCounts(contexts.checkRunCountsByState, contexts.checkRunCount, {\n passed: checkRunPassed,\n pending: checkRunPending,\n failed: checkRunFailed,\n ignored: checkRunIgnored,\n })\n if (!checkRuns.ok) return checkRuns\n const statusContexts = aggregateCounts(contexts.statusContextCountsByState, contexts.statusContextCount, {\n passed: statusContextPassed,\n pending: statusContextPending,\n failed: statusContextFailed,\n })\n if (!statusContexts.ok) return statusContexts\n const buckets = new Set([...checkRuns.value, ...statusContexts.value])\n if (buckets.has(\"failed\")) return { ok: true, value: \"failed\" }\n if (buckets.has(\"pending\")) return { ok: true, value: \"pending\" }\n if (buckets.has(\"passed\")) return { ok: true, value: \"passed\" }\n return { ok: true, value: \"none\" }\n}\n\nfunction samePullRequest(left: PullRequestUrl, right: PullRequestUrl): boolean {\n return (\n left.number === right.number &&\n left.owner.toLowerCase() === right.owner.toLowerCase() &&\n left.repository.toLowerCase() === right.repository.toLowerCase()\n )\n}\n\nfunction parseMergeability(input: unknown): Result<PullRequestMergeability, InvalidGitHubResponse> {\n switch (input) {\n case \"MERGEABLE\":\n return { ok: true, value: \"mergeable\" }\n case \"CONFLICTING\":\n return { ok: true, value: \"conflicting\" }\n case \"UNKNOWN\":\n return { ok: true, value: \"unknown\" }\n default:\n return invalidGitHubResponse\n }\n}\n\nfunction parseResponse(\n input: unknown,\n pullRequest: PullRequestUrl,\n): Result<AvailablePullRequestStatus, InvalidGitHubResponse> {\n if (\n !isRecord(input) ||\n input.__typename !== \"PullRequest\" ||\n typeof input.title !== \"string\" ||\n input.title.trim() === \"\"\n ) {\n return invalidGitHubResponse\n }\n if (input.state !== \"OPEN\" && input.state !== \"CLOSED\" && input.state !== \"MERGED\") {\n return invalidGitHubResponse\n }\n if (input.mergedAt !== null && typeof input.mergedAt !== \"string\") return invalidGitHubResponse\n if (typeof input.mergedAt === \"string\" && Number.isNaN(new Date(input.mergedAt).valueOf())) {\n return invalidGitHubResponse\n }\n if (input.state === \"MERGED\" && typeof input.mergedAt !== \"string\") return invalidGitHubResponse\n if (input.state !== \"MERGED\" && input.mergedAt !== null) return invalidGitHubResponse\n if (typeof input.url !== \"string\") return invalidGitHubResponse\n\n const responseUrl = parsePullRequestUrl(input.url)\n if (!responseUrl.ok || !samePullRequest(responseUrl.value, pullRequest)) return invalidGitHubResponse\n\n const ci = parseStatusCheckRollup(input.statusCheckRollup)\n if (!ci.ok) return ci\n const mergeability = parseMergeability(input.mergeable)\n if (!mergeability.ok) return mergeability\n\n let state: PullRequestState\n switch (input.state) {\n case \"OPEN\":\n state = { tag: \"Open\", ci: ci.value, mergeability: mergeability.value }\n break\n case \"MERGED\":\n state = { tag: \"Merged\" }\n break\n case \"CLOSED\":\n state = { tag: \"Closed\" }\n break\n default:\n return casesHandled(input.state)\n }\n\n return {\n ok: true,\n value: {\n tag: \"Available\",\n pullRequest,\n title: input.title,\n state,\n stale: false,\n },\n }\n}\n\nfunction createBatchQuery(size: number): string {\n const variables = Array.from({ length: size }, (_, index) => `$url${index}: URI!`).join(\", \")\n const fields = Array.from(\n { length: size },\n (_, index) => `pr${index}: resource(url: $url${index}) { ${pullRequestSelection} }`,\n ).join(\" \")\n return `query BatchPullRequests(${variables}) { ${fields} }`\n}\n\nfunction parseGraphqlErrorAliases(input: unknown, size: number): Result<ReadonlySet<number>, InvalidGitHubResponse> {\n if (input === undefined) return { ok: true, value: new Set() }\n if (!Array.isArray(input)) return invalidGitHubResponse\n const aliases = new Set<number>()\n for (const error of input) {\n if (\n !isRecord(error) ||\n typeof error.message !== \"string\" ||\n !Array.isArray(error.path) ||\n typeof error.path[0] !== \"string\"\n ) {\n return invalidGitHubResponse\n }\n const match = /^pr([0-9]+)$/.exec(error.path[0])\n if (match === null) return invalidGitHubResponse\n const index = Number(match[1])\n if (!Number.isInteger(index) || index < 0 || index >= size) return invalidGitHubResponse\n aliases.add(index)\n }\n return { ok: true, value: aliases }\n}\n\nfunction parseBatchResponse(\n input: unknown,\n pullRequests: readonly PullRequestUrl[],\n): Result<GitHubBatch, InvalidGitHubResponse> {\n if (!isRecord(input) || !isRecord(input.data)) return invalidGitHubResponse\n const data = input.data\n const errorAliases = parseGraphqlErrorAliases(input.errors, pullRequests.length)\n if (!errorAliases.ok) return errorAliases\n return {\n ok: true,\n value: pullRequests.map((pullRequest, index) =>\n errorAliases.value.has(index) ? invalidGitHubResponse : parseResponse(data[`pr${index}`], pullRequest),\n ),\n }\n}\n\nfunction isCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n if (signal?.aborted) return true\n const originalCause = parseProcessExecutionFailed(cause)?.cause ?? cause\n return originalCause instanceof Error && originalCause.name === \"AbortError\"\n}\n\nconst authenticationFailureMarkers = [\"http 401\", \"bad credentials\", \"not logged into\", \"gh auth login\"] as const\n\nfunction isAuthenticationFailure(failure: ProcessExecutionFailed): boolean {\n if (failure.code === 4) return true\n const stderr = failure.stderr.toLowerCase()\n return authenticationFailureMarkers.some((marker) => stderr.includes(marker))\n}\n\nfunction classifyProcessFailure(cause: unknown): GitHubCliMissing | GitHubAuthenticationRequired | GitHubUnavailable {\n const failure = parseProcessExecutionFailed(cause)\n if (failure?.code === \"ENOENT\") {\n return { tag: \"GitHubCliMissing\", message: \"GitHub CLI is not installed\", cause }\n }\n if (failure && isAuthenticationFailure(failure)) {\n return { tag: \"GitHubAuthenticationRequired\", message: \"GitHub CLI authentication required\", cause }\n }\n return { tag: \"GitHubUnavailable\", message: \"GitHub status unavailable\", cause }\n}\n\nfunction processFailureStdout(cause: unknown): string | undefined {\n if (!isRecord(cause) || typeof cause.stdout !== \"string\" || cause.stdout.trim() === \"\") return undefined\n return cause.stdout\n}\n\nexport const execFileRunner: ProcessRunner = (file, args, options) =>\n new Promise((resolve, reject) => {\n execFile(\n file,\n [...args],\n {\n encoding: \"utf8\",\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.cwd ? { cwd: options.cwd } : {}),\n },\n (error, stdout, stderr) => {\n if (error) {\n reject({\n tag: \"ProcessExecutionFailed\",\n code: error.code ?? null,\n stderr,\n stdout,\n cause: error,\n } satisfies ProcessExecutionFailed)\n return\n }\n resolve({ stdout })\n },\n )\n })\n\nexport function createGitHubClient(runner: ProcessRunner = execFileRunner): GitHubClient {\n return {\n async get(pullRequests, options = {}) {\n if (pullRequests.length === 0) return { ok: true, value: [] }\n if (pullRequests.length > maximumPullRequestsPerBatch) return githubBatchLimitExceeded\n const query = createBatchQuery(pullRequests.length)\n const args = [\"api\", \"graphql\", \"--method\", \"POST\", \"-f\", `query=${query}`]\n for (const [index, pullRequest] of pullRequests.entries()) {\n args.push(\"-f\", `url${index}=${pullRequest.url}`)\n }\n let stdout: string\n let processFailure: GitHubCliMissing | GitHubAuthenticationRequired | GitHubUnavailable | undefined\n try {\n const output = await runner(\"gh\", args, options)\n stdout = output.stdout\n } catch (cause) {\n if (isCancellation(cause, options.signal)) {\n return {\n ok: false,\n error: {\n tag: \"GitHubCancelled\",\n message: \"GitHub status request cancelled\",\n cause,\n },\n }\n }\n processFailure = classifyProcessFailure(cause)\n const partialStdout = processFailureStdout(cause)\n if (partialStdout !== undefined) {\n stdout = partialStdout\n } else {\n return { ok: false, error: processFailure }\n }\n }\n\n let decoded: unknown\n try {\n decoded = JSON.parse(stdout)\n } catch {\n return processFailure === undefined ? invalidGitHubResponse : { ok: false, error: processFailure }\n }\n const parsed = parseBatchResponse(decoded, pullRequests)\n if (processFailure === undefined || parsed.ok) return parsed\n return { ok: false, error: processFailure }\n },\n }\n}\n\nexport type StatusAppearance = Readonly<{\n tone: \"green\" | \"yellow\" | \"red\" | \"purple\" | \"gray\"\n label: string\n strikethrough: boolean\n}>\n\nconst openAppearances = {\n passed: { tone: \"green\", label: \"checks passed\", strikethrough: false },\n pending: { tone: \"yellow\", label: \"checks pending\", strikethrough: false },\n failed: { tone: \"red\", label: \"checks failed\", strikethrough: false },\n none: { tone: \"gray\", label: \"no checks\", strikethrough: false },\n} satisfies Record<PullRequestCi, StatusAppearance>\n\nconst diagnosticLabels = {\n GitHubCliMissing: \"install gh\",\n GitHubAuthenticationRequired: \"run gh auth login\",\n GitHubUnavailable: \"GitHub unavailable\",\n InvalidGitHubResponse: \"invalid GitHub response\",\n} satisfies Record<PullRequestDiagnostic, string>\n\nfunction stateAppearance(state: PullRequestState): StatusAppearance {\n switch (state.tag) {\n case \"Open\": {\n switch (state.mergeability) {\n case \"conflicting\":\n return { tone: \"red\", label: \"merge conflict\", strikethrough: false }\n case \"mergeable\":\n case \"unknown\":\n return openAppearances[state.ci]\n default:\n return casesHandled(state.mergeability)\n }\n }\n case \"Merged\":\n return { tone: \"purple\", label: \"merged\", strikethrough: true }\n case \"Closed\":\n return { tone: \"red\", label: \"closed\", strikethrough: true }\n default:\n return casesHandled(state)\n }\n}\n\nexport function statusAppearance(status: PullRequestStatus): StatusAppearance {\n if (status.tag === \"Unavailable\") {\n return {\n tone: \"gray\",\n label: status.diagnostic === undefined ? \"status unavailable\" : diagnosticLabels[status.diagnostic],\n strikethrough: false,\n }\n }\n\n const appearance = stateAppearance(status.state)\n return status.stale\n ? { ...appearance, label: `${appearance.label} (stale; ${diagnosticLabels[status.diagnostic]})` }\n : appearance\n}\n",
19
+ "export function casesHandled(value: never): never {\n throw new Error(`Unhandled case: ${String(value)}`)\n}\n",
20
+ "declare const pullRequestUrlBrand: unique symbol\ndeclare const pullRequestBrand: unique symbol\n\nexport type CanonicalPullRequestUrl = string & {\n readonly [pullRequestUrlBrand]: \"CanonicalPullRequestUrl\"\n}\n\nexport type PullRequestUrl = Readonly<{\n url: CanonicalPullRequestUrl\n owner: string\n repository: string\n number: number\n readonly [pullRequestBrand]: \"PullRequestUrl\"\n}>\n\nexport type InvalidPullRequestUrl = Readonly<{\n tag: \"InvalidPullRequestUrl\"\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>\"\n}>\n\nexport type Result<Value, Failure> = Readonly<{ ok: true; value: Value }> | Readonly<{ ok: false; error: Failure }>\n\nconst invalidPullRequestUrl: Result<never, InvalidPullRequestUrl> = {\n ok: false,\n error: {\n tag: \"InvalidPullRequestUrl\",\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>\",\n },\n}\n\nconst segmentPattern = /^[A-Za-z0-9._-]+$/\n\nexport function parsePullRequestUrl(input: string): Result<PullRequestUrl, InvalidPullRequestUrl> {\n if (input.trim() !== input) return invalidPullRequestUrl\n if (!input.startsWith(\"https://\")) return invalidPullRequestUrl\n\n const authorityEnd = input.indexOf(\"/\", \"https://\".length)\n if (authorityEnd === -1) return invalidPullRequestUrl\n if (input.slice(\"https://\".length, authorityEnd).toLowerCase() !== \"github.com\") {\n return invalidPullRequestUrl\n }\n\n const rawPath = input.slice(authorityEnd).split(/[?#]/, 1).join(\"\")\n for (const segment of rawPath.split(\"/\")) {\n let decoded: string\n try {\n decoded = decodeURIComponent(segment)\n } catch {\n return invalidPullRequestUrl\n }\n if (decoded === \".\" || decoded === \"..\") return invalidPullRequestUrl\n }\n\n let parsed: URL\n try {\n parsed = new URL(input)\n } catch {\n return invalidPullRequestUrl\n }\n\n if (\n parsed.protocol !== \"https:\" ||\n parsed.hostname !== \"github.com\" ||\n parsed.username !== \"\" ||\n parsed.password !== \"\" ||\n parsed.port !== \"\" ||\n parsed.search !== \"\" ||\n parsed.hash !== \"\"\n ) {\n return invalidPullRequestUrl\n }\n\n const segments = parsed.pathname.split(\"/\")\n if (segments.length !== 5 || segments[0] !== \"\" || segments[3] !== \"pull\") {\n return invalidPullRequestUrl\n }\n\n const owner = segments[1]\n const repository = segments[2]\n const numberText = segments[4]\n if (\n owner === undefined ||\n repository === undefined ||\n numberText === undefined ||\n !segmentPattern.test(owner) ||\n !segmentPattern.test(repository) ||\n !/^\\d+$/.test(numberText)\n ) {\n return invalidPullRequestUrl\n }\n\n const number = Number(numberText)\n if (!Number.isSafeInteger(number) || number <= 0) return invalidPullRequestUrl\n\n // SAFETY: every URL component passed the canonical GitHub PR checks above.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the parser establishes the brand invariant\n const url = `https://github.com/${owner}/${repository}/pull/${number}` as CanonicalPullRequestUrl\n const value = { url, owner, repository, number }\n // SAFETY: the parser established canonical URL and component consistency.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- parser establishes the object brand\n return { ok: true, value: value as PullRequestUrl }\n}\n\nexport function formatPullRequestRef(pullRequest: PullRequestUrl): string {\n return `${pullRequest.owner}/${pullRequest.repository}#${pullRequest.number}`\n}\n",
21
+ "import { execFileRunner, type ProcessRunner } from \"./github.js\"\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport type InvalidPullRequestInput = Readonly<{\n tag: \"InvalidPullRequestInput\"\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer> or a positive pull request number\"\n}>\n\nexport type RepositoryResolutionFailed = Readonly<{\n tag: \"RepositoryResolutionFailed\"\n message: \"Unable to resolve the current GitHub repository with gh; attach with a full URL instead\"\n cause?: unknown\n}>\n\nexport type RepositoryResolutionCancelled = Readonly<{\n tag: \"RepositoryResolutionCancelled\"\n}>\n\nexport type PullRequestInputFailure =\n | InvalidPullRequestInput\n | RepositoryResolutionFailed\n | RepositoryResolutionCancelled\n\nconst invalidPullRequestInput: Result<never, InvalidPullRequestInput> = {\n ok: false,\n error: {\n tag: \"InvalidPullRequestInput\",\n message:\n \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer> or a positive pull request number\",\n },\n}\n\nconst repositoryResolutionFailed: RepositoryResolutionFailed = {\n tag: \"RepositoryResolutionFailed\",\n message: \"Unable to resolve the current GitHub repository with gh; attach with a full URL instead\",\n}\n\nconst repositoryResolutionCancelled: Result<never, RepositoryResolutionCancelled> = {\n ok: false,\n error: { tag: \"RepositoryResolutionCancelled\" },\n}\n\nfunction isCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n if (signal?.aborted) return true\n return cause instanceof Error && cause.name === \"AbortError\"\n}\n\nfunction parseRepositoryPullRequest(\n stdout: string,\n number: number,\n): Result<PullRequestUrl, RepositoryResolutionFailed> {\n let decoded: unknown\n try {\n decoded = JSON.parse(stdout)\n } catch {\n return { ok: false, error: repositoryResolutionFailed }\n }\n if (\n decoded === null ||\n typeof decoded !== \"object\" ||\n !(\"url\" in decoded) ||\n typeof decoded.url !== \"string\" ||\n decoded.url === \"\"\n ) {\n return { ok: false, error: repositoryResolutionFailed }\n }\n\n const repositoryUrl = decoded.url.endsWith(\"/\") ? decoded.url.slice(0, -1) : decoded.url\n const pullRequest = parsePullRequestUrl(`${repositoryUrl}/pull/${number}`)\n return pullRequest.ok ? pullRequest : { ok: false, error: repositoryResolutionFailed }\n}\n\nexport async function resolvePullRequestInput(\n input: string,\n options: Readonly<{\n directory: string\n runner?: ProcessRunner\n signal?: AbortSignal\n }>,\n): Promise<Result<PullRequestUrl, PullRequestInputFailure>> {\n const direct = parsePullRequestUrl(input)\n if (direct.ok) return direct\n if (input.trim() !== input || !/^\\d+$/.test(input)) return invalidPullRequestInput\n\n const number = Number(input)\n if (!Number.isSafeInteger(number) || number <= 0) return invalidPullRequestInput\n\n let stdout: string\n try {\n const result = await (options.runner ?? execFileRunner)(\"gh\", [\"repo\", \"view\", \"--json\", \"url\"], {\n cwd: options.directory,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n stdout = result.stdout\n } catch (cause) {\n if (isCancellation(cause, options.signal)) return repositoryResolutionCancelled\n return { ok: false, error: { ...repositoryResolutionFailed, cause } }\n }\n\n return parseRepositoryPullRequest(stdout, number)\n}\n",
22
+ "import { createHash, randomUUID } from \"node:crypto\"\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { lock as lockFile } from \"proper-lockfile\"\n\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport const maximumPullRequestsPerSession = 20\n\nexport type PullRequestAttachment = Readonly<{\n pullRequest: PullRequestUrl\n attachedAt: string\n}>\n\nexport type InvalidStateFile = Readonly<{\n tag: \"InvalidStateFile\"\n message: \"The session pull request state file is invalid\"\n}>\n\nexport type StateUnavailable = Readonly<{\n tag: \"StateUnavailable\"\n operation: \"read\" | \"write\"\n message: string\n cause: unknown\n}>\n\nexport type AttachmentLimitReached = Readonly<{\n tag: \"AttachmentLimitReached\"\n limit: 20\n message: \"A session can track at most 20 pull requests\"\n}>\n\nexport type StateFailure = InvalidStateFile | StateUnavailable\nexport type AttachFailure = StateFailure | AttachmentLimitReached\nexport type DetachByNumberOutcome =\n | Readonly<{ tag: \"removed\"; pullRequest: PullRequestUrl }>\n | Readonly<{ tag: \"absent\" }>\n | Readonly<{ tag: \"ambiguous\"; pullRequests: readonly PullRequestUrl[] }>\n\nexport type StateStore = Readonly<{\n list(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>>\n attach(sessionID: string, pullRequest: PullRequestUrl): Promise<Result<\"added\" | \"already_attached\", AttachFailure>>\n detach(sessionID: string, pullRequest: PullRequestUrl): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n detachByNumber(sessionID: string, number: number): Promise<Result<DetachByNumberOutcome, StateFailure>>\n removeSession(sessionID: string): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n}>\n\ntype PersistedState = Readonly<{\n version: 1\n pullRequests: readonly Readonly<{ url: string; attachedAt: string }>[]\n}>\n\nconst invalidStateFile: Result<never, InvalidStateFile> = {\n ok: false,\n error: {\n tag: \"InvalidStateFile\",\n message: \"The session pull request state file is invalid\",\n },\n}\n\nconst lockStaleMilliseconds = 10_000\nconst lockUpdateMilliseconds = 2_000\n\nfunction stateUnavailable(operation: \"read\" | \"write\", message: string, cause: unknown): StateUnavailable {\n return { tag: \"StateUnavailable\", operation, message, cause }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction hasExactKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const actual = Object.keys(value)\n return actual.length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n}\n\nfunction parseState(input: unknown): Result<readonly PullRequestAttachment[], InvalidStateFile> {\n if (!isRecord(input) || !hasExactKeys(input, [\"version\", \"pullRequests\"])) return invalidStateFile\n if (input.version !== 1 || !Array.isArray(input.pullRequests)) return invalidStateFile\n if (input.pullRequests.length > maximumPullRequestsPerSession) return invalidStateFile\n\n const attachments: PullRequestAttachment[] = []\n const seen = new Set<string>()\n for (const item of input.pullRequests) {\n if (!isRecord(item) || !hasExactKeys(item, [\"url\", \"attachedAt\"])) return invalidStateFile\n if (typeof item.url !== \"string\" || typeof item.attachedAt !== \"string\") return invalidStateFile\n\n const parsed = parsePullRequestUrl(item.url)\n if (!parsed.ok || parsed.value.url !== item.url || seen.has(item.url)) return invalidStateFile\n\n const attachedAt = new Date(item.attachedAt)\n if (Number.isNaN(attachedAt.valueOf()) || attachedAt.toISOString() !== item.attachedAt) return invalidStateFile\n\n seen.add(item.url)\n attachments.push({ pullRequest: parsed.value, attachedAt: item.attachedAt })\n }\n\n return { ok: true, value: attachments }\n}\n\nfunction isMissingFile(cause: unknown): boolean {\n return cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\"\n}\n\nfunction fileName(sessionID: string): string {\n return `${createHash(\"sha256\").update(sessionID).digest(\"hex\")}.json`\n}\n\nexport function defaultStateDirectory(\n environment: Readonly<Record<string, string | undefined>> = process.env,\n home: string = homedir(),\n): string {\n const dataHome = environment.XDG_DATA_HOME || join(home, \".local\", \"share\")\n return join(dataHome, \"opencode\", \"opencode-pr-tracker\")\n}\n\nexport function createStateStore(options: Readonly<{ directory?: string; now?: () => Date }> = {}): StateStore {\n const directory = options.directory ?? defaultStateDirectory()\n const now = options.now ?? (() => new Date())\n\n async function acquireLock(sessionID: string): Promise<\n Result<\n Readonly<{\n release(): Promise<void>\n compromised(): Error | undefined\n }>,\n StateUnavailable\n >\n > {\n const stateFile = join(directory, fileName(sessionID))\n let compromised: Error | undefined\n try {\n await mkdir(directory, { recursive: true })\n const release = await lockFile(stateFile, {\n realpath: false,\n stale: lockStaleMilliseconds,\n update: lockUpdateMilliseconds,\n retries: { retries: 50, factor: 1, minTimeout: 10, maxTimeout: 100 },\n onCompromised: (error) => {\n compromised = error\n },\n })\n return { ok: true, value: { release, compromised: () => compromised } }\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to lock the session pull request state\", cause),\n }\n }\n }\n\n async function withLock<Value, Failure>(\n sessionID: string,\n operation: () => Promise<Result<Value, Failure>>,\n ): Promise<Result<Value, Failure | StateUnavailable>> {\n const lock = await acquireLock(sessionID)\n if (!lock.ok) return lock\n let result: Result<Value, Failure>\n try {\n result = await operation()\n } catch (cause) {\n await lock.value.release().catch(() => undefined)\n throw cause\n }\n\n try {\n await lock.value.release()\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to unlock the session pull request state\", cause),\n }\n }\n\n const compromise = lock.value.compromised()\n if (compromise !== undefined) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"The session pull request state lock was compromised\", compromise),\n }\n }\n return result\n }\n\n async function readExisting(\n sessionID: string,\n ): Promise<Result<readonly PullRequestAttachment[] | undefined, StateFailure>> {\n const path = join(directory, fileName(sessionID))\n let content: string\n try {\n content = await readFile(path, \"utf8\")\n } catch (cause) {\n if (isMissingFile(cause)) return { ok: true, value: undefined }\n return {\n ok: false,\n error: stateUnavailable(\"read\", \"Unable to read the session pull request state\", cause),\n }\n }\n\n let decoded: unknown\n try {\n decoded = JSON.parse(content)\n } catch {\n return invalidStateFile\n }\n return parseState(decoded)\n }\n\n async function read(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>> {\n const result = await readExisting(sessionID)\n if (!result.ok) return result\n return { ok: true, value: result.value ?? [] }\n }\n\n async function write(\n sessionID: string,\n attachments: readonly PullRequestAttachment[],\n ): Promise<Result<void, StateUnavailable>> {\n const destination = join(directory, fileName(sessionID))\n const temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`\n const state: PersistedState = {\n version: 1,\n pullRequests: attachments.map((attachment) => ({\n url: attachment.pullRequest.url,\n attachedAt: attachment.attachedAt,\n })),\n }\n\n try {\n await mkdir(directory, { recursive: true })\n await writeFile(temporary, `${JSON.stringify(state, null, 2)}\\n`, { mode: 0o600 })\n await rename(temporary, destination)\n return { ok: true, value: undefined }\n } catch (cause) {\n await rm(temporary, { force: true }).catch(() => undefined)\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to write the session pull request state\", cause),\n }\n }\n }\n\n return {\n list: read,\n async attach(sessionID, pullRequest) {\n return withLock<\"added\" | \"already_attached\", AttachFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n if (current.value.some((attachment) => attachment.pullRequest.url === pullRequest.url)) {\n return { ok: true, value: \"already_attached\" } as const\n }\n if (current.value.length >= maximumPullRequestsPerSession) {\n return {\n ok: false,\n error: {\n tag: \"AttachmentLimitReached\",\n limit: maximumPullRequestsPerSession,\n message: \"A session can track at most 20 pull requests\",\n },\n } as const\n }\n\n const written = await write(sessionID, [...current.value, { pullRequest, attachedAt: now().toISOString() }])\n if (!written.ok) return written\n return { ok: true, value: \"added\" } as const\n })\n },\n async detach(sessionID, pullRequest) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== pullRequest.url)\n if (next.length === current.value.length) return { ok: true, value: \"absent\" } as const\n\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: \"removed\" } as const\n })\n },\n async detachByNumber(sessionID, number) {\n return withLock<DetachByNumberOutcome, StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const matches = current.value.filter((attachment) => attachment.pullRequest.number === number)\n if (matches.length === 0) return { ok: true, value: { tag: \"absent\" } } as const\n if (matches.length > 1) {\n return {\n ok: true,\n value: { tag: \"ambiguous\", pullRequests: matches.map((attachment) => attachment.pullRequest) },\n } as const\n }\n\n const match = matches[0]\n if (match === undefined) return { ok: true, value: { tag: \"absent\" } } as const\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== match.pullRequest.url)\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: { tag: \"removed\", pullRequest: match.pullRequest } } as const\n })\n },\n async removeSession(sessionID) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await readExisting(sessionID)\n if (!current.ok) return current\n if (current.value === undefined) return { ok: true, value: \"absent\" } as const\n try {\n await rm(join(directory, fileName(sessionID)), { force: true })\n return { ok: true, value: \"removed\" } as const\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to remove the session pull request state\", cause),\n } as const\n }\n })\n },\n }\n}\n"
23
+ ],
24
+ "mappings": "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",
25
+ "debugId": "73D7339550CD79BA64756E2164756E21",
26
+ "names": []
27
+ }
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@hcrosse/opencode-pr-tracker",
4
+ "version": "0.0.0",
5
+ "description": "Track GitHub pull requests in the OpenCode sidebar.",
6
+ "homepage": "https://github.com/hcrosse/opencode-pr-tracker#readme",
7
+ "bugs": {
8
+ "url": "https://github.com/hcrosse/opencode-pr-tracker/issues"
9
+ },
10
+ "license": "MIT",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/hcrosse/opencode-pr-tracker.git"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "type": "module",
21
+ "main": "./dist/server.js",
22
+ "exports": {
23
+ "./server": {
24
+ "import": "./dist/server.js"
25
+ },
26
+ "./tui": {
27
+ "import": "./dist/tui.js"
28
+ }
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "test": "bun test",
35
+ "lint": "oxlint .",
36
+ "format": "oxfmt .",
37
+ "format:check": "oxfmt --check .",
38
+ "build": "bun ./scripts/build.ts",
39
+ "smoke:opencode": "bun ./scripts/smoke-opencode.ts",
40
+ "prepack": "bun run build",
41
+ "package:check": "bun run build && npm pack --dry-run --ignore-scripts",
42
+ "check": "bun run lint && bun run format:check && bun test && bun run package:check && git diff --check"
43
+ },
44
+ "dependencies": {
45
+ "@opencode-ai/plugin": "1.18.15",
46
+ "proper-lockfile": "4.1.2"
47
+ },
48
+ "devDependencies": {
49
+ "@opentui/core": "0.4.5",
50
+ "@opentui/keymap": "0.4.5",
51
+ "@opentui/solid": "0.4.5",
52
+ "@types/bun": "1.3.14",
53
+ "@types/node": "24.12.2",
54
+ "@types/proper-lockfile": "4.1.4",
55
+ "oxfmt": "0.62.0",
56
+ "oxlint": "1.77.0",
57
+ "oxlint-tsgolint": "7.0.2001",
58
+ "solid-js": "1.9.12",
59
+ "web-tree-sitter": "0.25.10"
60
+ },
61
+ "peerDependencies": {
62
+ "@opentui/core": "0.4.5",
63
+ "@opentui/keymap": "0.4.5",
64
+ "@opentui/solid": "0.4.5",
65
+ "solid-js": "1.9.12"
66
+ },
67
+ "engines": {
68
+ "node": ">=22.12.0",
69
+ "opencode": ">=1.18.15 <2"
70
+ },
71
+ "packageManager": "bun@1.3.14",
72
+ "trustedDependencies": []
73
+ }