@withgraphite/graphite-cli 0.21.0 → 0.21.2-alpha.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.
- package/593.js +1 -1
- package/593.js.map +1 -1
- package/build/asset-manifest.json +7 -7
- package/build/index.html +1 -1
- package/build/static/css/{420.b0ea26e5.chunk.css → 96.dcede1be.chunk.css} +1 -1
- package/build/static/css/96.dcede1be.chunk.css.map +1 -0
- package/build/static/css/main.b3d89104.css +2 -0
- package/build/static/css/main.b3d89104.css.map +1 -0
- package/build/static/js/96.3d2fff41.chunk.js +1 -0
- package/build/static/js/96.3d2fff41.chunk.js.map +1 -0
- package/build/static/js/main.js +1 -1
- package/build/static/js/main.js.map +1 -1
- package/child.js +1 -1
- package/child.js.map +1 -1
- package/graphite.js +1 -1
- package/install.js +1 -1
- package/install.js.map +1 -1
- package/package.json +4 -20
- package/bin/gt +0 -3
- package/bin/gt-linux +0 -0
- package/bin/gt-macos +0 -0
- package/build/static/css/420.b0ea26e5.chunk.css.map +0 -1
- package/build/static/css/main.5b8fc4fe.css +0 -2
- package/build/static/css/main.5b8fc4fe.css.map +0 -1
- package/build/static/js/420.f5fa91d0.chunk.js +0 -1
- package/build/static/js/420.f5fa91d0.chunk.js.map +0 -1
- package/graphite.js.map +0 -1
- package/gti-server_proxy_server_ts-gti-server_proxy_startServer_ts-gti-server_src_index_ts.js +0 -5649
- package/gti-server_proxy_server_ts-gti-server_proxy_startServer_ts-gti-server_src_index_ts.js.map +0 -1
- package/vendors-_yarn_cache_execa-npm-5_1_1-191347acf5-fba9022c8c_zip_node_modules_execa_index_js-_ya-c6c02d.js +0 -13496
- package/vendors-_yarn_cache_execa-npm-5_1_1-191347acf5-fba9022c8c_zip_node_modules_execa_index_js-_ya-c6c02d.js.map +0 -1
package/gti-server_proxy_server_ts-gti-server_proxy_startServer_ts-gti-server_src_index_ts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gti-server_proxy_server_ts-gti-server_proxy_startServer_ts-gti-server_src_index_ts.js","mappings":"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","sources":["webpack://@withgraphite/graphite-cli/../../src/Comparison.ts","webpack://@withgraphite/graphite-cli/../../src/LRU.ts","webpack://@withgraphite/graphite-cli/../../../src/analytics/index.ts","webpack://@withgraphite/graphite-cli/../../../src/analytics/tracker.ts","webpack://@withgraphite/graphite-cli/../../src/compat.ts","webpack://@withgraphite/graphite-cli/../../src/debounce.ts","webpack://@withgraphite/graphite-cli/../../src/immutableExt.ts","webpack://@withgraphite/graphite-cli/../../src/index.ts","webpack://@withgraphite/graphite-cli/../../src/minimalDisambiguousPaths.ts","webpack://@withgraphite/graphite-cli/../../../src/patch/parse.ts","webpack://@withgraphite/graphite-cli/../../src/serialize.ts","webpack://@withgraphite/graphite-cli/../../../src/types/client.ts","webpack://@withgraphite/graphite-cli/../../../src/types/common.ts","webpack://@withgraphite/graphite-cli/../../../src/types/constants.ts","webpack://@withgraphite/graphite-cli/../../../src/types/index.ts","webpack://@withgraphite/graphite-cli/../../src/utils.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/existingServerStateFiles.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/proxyUtils.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/rmtree.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/server.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/serverLifecycle.ts","webpack://@withgraphite/graphite-cli/../gti-server/proxy/startServer.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/OperationQueue.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/PageFocusTracker.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/RateLimiter.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/Repository.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/RepositoryCache.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/ServerToClientAPI.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/TypedEventEmitter.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/WatchForChanges.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/analytics/environment.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/analytics/serverSideTracker.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/fs.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/github/githubCodeReviewProvider.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/index.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/logger.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/serverPlatform.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/utils.ts","webpack://@withgraphite/graphite-cli/../gti-server/src/watchman.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import rmtree from \"./rmtree\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport { unwrap } from \"@withgraphite/gti-shared\";\n\nexport type ExistingServerInfo = {\n sensitiveToken: string;\n challengeToken: string;\n logFileLocation: string;\n /** Which command name was used to launch this server instance,\n * so it can be propagated to run further gt commands by the server.\n * Usually, \"gt\". */\n command: string;\n /**\n * `gt version` string. If the version of gt changes, we shouldn't re-use that server instance,\n * due to potential incompatibilities between the old running server javascript and the new client javascript.\n */\n gtVersion: string;\n};\n\nconst cacheDir =\n process.platform == \"win32\"\n ? path.join(unwrap(process.env.LOCALAPPDATA), \"cache\")\n : process.platform == \"darwin\"\n ? path.join(os.homedir(), \"Library/Caches\")\n : process.env.XDG_CACHE_HOME || path.join(os.homedir(), \".cache\");\n\n/**\n * Per-user cache dir with restrictive permissions.\n * Inside this folder will be a number of files, one per port for an active GTI server.\n */\nconst savedActiveServerUrlsDirectory = path.join(cacheDir, \"graphite-gti\");\n\nfunction fileNameForPort(port: number): string {\n return `reusable_server_${port}`;\n}\n\nfunction isMode700(stat: fs.Stats): boolean {\n // eslint-disable-next-line no-bitwise\n return (stat.mode & 0o777) === 0o700;\n}\n\n/**\n * Make a temp directory with restrictive permissions where we can write existing server information.\n * Ensures directory has proper restrictive mode if the directory already exists.\n */\nexport async function ensureExistingServerFolder(): Promise<void> {\n await fs.promises.mkdir(savedActiveServerUrlsDirectory, {\n // directory needs rwx\n mode: 0o700,\n recursive: true,\n });\n\n const stat = await fs.promises.stat(savedActiveServerUrlsDirectory);\n if (process.platform !== \"win32\" && !isMode700(stat)) {\n throw new Error(\n `active servers folder ${savedActiveServerUrlsDirectory} has the wrong permissions: ${stat.mode}`\n );\n }\n if (stat.isSymbolicLink()) {\n throw new Error(\n `active servers folder ${savedActiveServerUrlsDirectory} is a symlink`\n );\n }\n}\n\nexport function deleteExistingServerFile(port: number): Promise<void> {\n const folder = path.join(\n savedActiveServerUrlsDirectory,\n fileNameForPort(port)\n );\n if (typeof fs.promises.rm === \"function\") {\n return fs.promises.rm(folder, { force: true });\n } else {\n return rmtree(folder);\n }\n}\n\nexport async function writeExistingServerFile(\n port: number,\n data: ExistingServerInfo\n): Promise<void> {\n await fs.promises.writeFile(\n path.join(savedActiveServerUrlsDirectory, fileNameForPort(port)),\n JSON.stringify(data),\n { encoding: \"utf-8\", flag: \"w\", mode: 0o600 }\n );\n}\n\nexport async function readExistingServerFile(\n port: number\n): Promise<ExistingServerInfo> {\n // TODO: do we need to verify the permissions of this file?\n const data: string = await fs.promises.readFile(\n path.join(savedActiveServerUrlsDirectory, fileNameForPort(port)),\n { encoding: \"utf-8\", flag: \"r\" }\n );\n return JSON.parse(data) as ExistingServerInfo;\n}\n","import { timingSafeEqual } from \"crypto\";\n\n/**\n * Timing safe comparison of tokens coming from strings.\n */\nexport function areTokensEqual(a: string, b: string): boolean {\n const aBuf = Buffer.from(a);\n const bBuf = Buffer.from(b);\n return aBuf.length === bBuf.length && timingSafeEqual(aBuf, bBuf);\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * fs.promises.rm() was introduced in Node v14.14.0, so to in order to run in\n * Node v10, we must provide our own implementation.\n *\n * This functions like `rm -rf <file>`.\n */\nexport default async function rmtree(file: string): Promise<void> {\n let stat;\n try {\n stat = await fs.promises.lstat(file);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n // If the file does not exist, nothing to do!\n return;\n } else {\n throw error;\n }\n }\n\n if (stat.isDirectory()) {\n const stack = [file];\n while (stack.length !== 0) {\n // eslint-disable-next-line no-await-in-loop\n await rmtreeIterative(stack);\n }\n } else {\n await fs.promises.unlink(file);\n }\n}\n\n/**\n * fs.promises.rm() was introduced in Node v14.14.0, so to in order to run in\n * Node v10, we must provide our own implementation.\n *\n * @param stack a list of folders to remove recursively. Folders at the end of\n * the array will be removed before preceding folders.\n */\nasync function rmtreeIterative(stack: Array<string>): Promise<void> {\n // This is effectively a \"peek\" on the stack.\n const folder = stack[stack.length - 1];\n if (folder == null) {\n throw new Error(`invariant violation: empty stack`);\n }\n\n // We rely on the caller to ensure `folder` is a path to a directory rather\n // than stat each argument that was passed in.\n const files = await fs.promises.readdir(folder);\n\n const stackLength = stack.length;\n await Promise.all(\n files.map(async (file: string) => {\n const fullPath = path.join(folder, file);\n const stat = await fs.promises.lstat(fullPath);\n if (stat.isDirectory()) {\n stack.push(fullPath);\n } else {\n await fs.promises.unlink(fullPath);\n }\n })\n );\n\n // If nothing was pushed onto the stack, then we can assume this folder is\n // now empty and rmdir() will succeed.\n if (stack.length === stackLength) {\n await fs.promises.rmdir(folder);\n stack.pop();\n }\n}\n","import type { ServerPlatform } from \"../src/serverPlatform\";\nimport type { PlatformName } from \"@withgraphite/gti-shared\";\nimport type { AddressInfo } from \"net\";\n\nimport { repositoryCache } from \"../src/RepositoryCache\";\nimport { CLOSED_AND_SHOULD_NOT_RECONNECT_CODE } from \"@withgraphite/gti-shared\";\nimport { onClientConnection } from \"../src/index\";\nimport { areTokensEqual } from \"./proxyUtils\";\nimport fs from \"fs\";\nimport http from \"http\";\nimport path from \"path\";\nimport urlModule from \"url\";\nimport WebSocket from \"ws\";\n\n\nexport type StartServerArgs = {\n port: number;\n sensitiveToken: string;\n challengeToken: string;\n logFileLocation: string;\n logInfo: (...args: Parameters<typeof console.log>) => void;\n command: string;\n gtVersion: string;\n foreground: boolean;\n frontendDir: string;\n};\n\nexport type StartServerResult =\n | { type: \"addressInUse\" }\n | { type: \"success\"; port: number; pid: number }\n | { type: \"error\"; error: string };\n\nexport type ServerChallengeResponse = {\n challengeToken: string;\n /** Process ID for the server. */\n pid: number;\n};\n\nexport function startServer({\n port,\n sensitiveToken,\n challengeToken,\n logFileLocation,\n logInfo,\n command,\n gtVersion,\n foreground,\n frontendDir\n}: StartServerArgs): Promise<StartServerResult> {\n return new Promise((resolve) => {\n try {\n const manifest = JSON.parse(\n fs.readFileSync(\n path.join(frontendDir, \"build/asset-manifest.json\"),\n \"utf-8\"\n )\n ) as { files: Array<string> };\n for (const file of Object.values(manifest.files)) {\n if (!file.startsWith(\"/\")) {\n resolve({\n type: \"error\",\n error: `expected entry to start with / but was: \\`${file}\\``,\n });\n }\n\n requestUrlToResource[file] = file.slice(1);\n }\n } catch (e) {\n // ignore...\n }\n\n // Anything not part of the asset-manifest we need to explicitly serve\n requestUrlToResource[`/favicon.ico`] = \"favicon.ico\";\n\n /**\n * Event listener for HTTP server \"error\" event.\n */\n function onError(error: { syscall?: string; code?: string }) {\n if (error.syscall !== \"listen\") {\n resolve({ type: \"error\", error: error.toString() });\n throw error;\n }\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case \"EACCES\": {\n resolve({\n type: \"error\",\n error: `Port ${port} requires elevated privileges`,\n });\n throw error;\n }\n case \"EADDRINUSE\": {\n resolve({ type: \"addressInUse\" });\n return;\n }\n default:\n resolve({ type: \"error\", error: error.toString() });\n throw error;\n }\n }\n\n /**\n * Create HTTP server.\n */\n const server = http.createServer(async (req, res) => {\n if (req.url) {\n // Only the websocket is sensitive and requires the token.\n // Normal resource requests don't need to check the token.\n const { pathname } = urlModule.parse(req.url);\n // eslint-disable-next-line no-prototype-builtins\n if (pathname != null && requestUrlToResource.hasOwnProperty(pathname)) {\n const relativePath = requestUrlToResource[pathname];\n let contents: string | Buffer;\n try {\n contents = await fs.promises.readFile(\n path.join(frontendDir, \"build\", relativePath)\n );\n } catch (e: unknown) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(htmlEscape((e as Error).toString()));\n return;\n }\n\n const lastDot = relativePath.lastIndexOf(\".\");\n const ext = relativePath.slice(lastDot + 1);\n const contentType = extensionToMIMEType[ext] ?? \"text/plain\";\n\n res.writeHead(200, { \"Content-Type\": contentType });\n res.end(contents);\n return;\n } else if (pathname === \"/challenge_authenticity\") {\n // requests to /challenge_authenticity?token=... allow using the sensistive token to ask\n // for the secondary challenge token.\n const requestToken = getSearchParams(req.url).get(\"token\");\n if (requestToken && areTokensEqual(requestToken, sensitiveToken)) {\n // they know the original token, we can tell them our challenge token\n res.writeHead(200, { \"Content-Type\": \"text/json\" });\n const response: ServerChallengeResponse = {\n challengeToken,\n pid: process.pid,\n };\n res.end(JSON.stringify(response));\n } else {\n res.writeHead(401, { \"Content-Type\": \"text/json\" });\n res.end(JSON.stringify({ error: \"invalid token\" }));\n }\n return;\n }\n }\n\n res.writeHead(404, { \"Content-Type\": \"text/html\" });\n res.end(\"<html><body>Not Found!</body></html>\");\n });\n\n /**\n * Listen on provided port, on all network interfaces.\n */\n const httpServer = server.listen(port);\n const wsServer = new WebSocket.Server({ noServer: true, path: \"/ws\" });\n wsServer.on(\"connection\", async (socket, connectionRequest) => {\n // We require websocket connections to contain the token as a URL search parameter.\n let providedToken: string | undefined;\n let cwd: string | undefined;\n let platform: string | undefined;\n if (connectionRequest.url) {\n const searchParams = getSearchParams(connectionRequest.url);\n providedToken = searchParams.get(\"token\");\n const cwdParam = searchParams.get(\"cwd\");\n platform = searchParams.get(\"platform\") as string;\n if (cwdParam) {\n cwd = decodeURIComponent(cwdParam);\n }\n }\n if (!providedToken) {\n const reason = \"No token provided in websocket request\";\n logInfo(\"closing ws:\", reason);\n socket.close(CLOSED_AND_SHOULD_NOT_RECONNECT_CODE, reason);\n return;\n }\n if (!areTokensEqual(providedToken, sensitiveToken)) {\n const reason = \"Invalid token\";\n logInfo(\"closing ws:\", reason);\n socket.close(CLOSED_AND_SHOULD_NOT_RECONNECT_CODE, reason);\n return;\n }\n\n const platformImpl: ServerPlatform | undefined = undefined;\n switch (platform as PlatformName) {\n default:\n case undefined:\n break;\n }\n\n const dispose = onClientConnection({\n postMessage(message: string | ArrayBuffer) {\n socket.send(message);\n return Promise.resolve(true);\n },\n onDidReceiveMessage(handler) {\n const emitter = socket.on(\"message\", handler);\n const dispose = () => emitter.off(\"message\", handler);\n return { dispose };\n },\n cwd: cwd ?? process.cwd(),\n logFileLocation:\n logFileLocation === \"stdout\" ? undefined : logFileLocation,\n command,\n version: gtVersion,\n\n platform: platformImpl,\n });\n socket.on(\"close\", () => {\n dispose();\n\n // After disposing, we may not have anymore servers alive anymore.\n // We can proactively clean up the server so you get the latest version next time you try.\n // This way, we only re-use servers if you keep the tab open.\n // Note: since we trigger this cleanup on dispose, if you start a server with `--no-open`,\n // it won't clean itself up until you connect at least once.\n if (!foreground) {\n // We do this on a 1-minute delay in case you close a tab and quickly re-open it.\n setTimeout(() => {\n checkIfServerShouldCleanItselfUp();\n }, 60_000);\n }\n });\n });\n httpServer.on(\"upgrade\", (request, socket, head) => {\n wsServer.handleUpgrade(request, socket, head, (socket) => {\n wsServer.emit(\"connection\", socket, request);\n });\n });\n\n server.on(\"error\", onError);\n\n // return succesful result when the server is successfully listening\n server.on(\"listening\", () =>\n resolve({\n type: \"success\",\n port: (server.address() as AddressInfo).port,\n pid: process.pid,\n })\n );\n });\n}\n\nfunction checkIfServerShouldCleanItselfUp() {\n if (repositoryCache.numberOfActiveServers() === 0) {\n process.exit(0);\n }\n}\n\nfunction getSearchParams(url: string): Map<string, string> {\n const searchParamsArray = urlModule\n .parse(url)\n .search?.replace(/^\\?/, \"\")\n .split(\"&\")\n .map(\n (pair: string): [string, string] => pair.split(\"=\") as [string, string]\n );\n\n return new Map(searchParamsArray);\n}\n\nconst extensionToMIMEType: { [key: string]: string } = {\n css: \"text/css\",\n html: \"text/html\",\n js: \"text/javascript\",\n ttf: \"font/ttf\",\n};\n\nconst requestUrlToResource: { [key: string]: string } = {\n \"/\": \"index.html\",\n};\n\nfunction htmlEscape(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"\");\n}\n","import type { ServerChallengeResponse } from \"./server\";\n\nimport {\n type ExistingServerInfo,\n readExistingServerFile,\n} from \"./existingServerStateFiles\";\nimport { areTokensEqual } from \"./proxyUtils\";\nimport * as http from \"http\";\n\n/**\n * If it looks like something is serving on `localhost` on the same port,\n * send it a request to verify it's actually GTI.\n * Send it the token we recovered and then validate it responds with\n * the same challenge token we recovered.\n *\n * If the challenge is successful, returns the PID of the server; otherwise,\n * returns null.\n */\nexport async function checkIfServerIsAliveAndIsGTI(\n info: typeof console.info,\n port: number,\n existingServerInfo: ExistingServerInfo,\n silent = false\n): Promise<number | null> {\n let response: unknown;\n try {\n const result = await Promise.race<string>([\n new Promise<string>((res, rej) => {\n const req = http.request(\n {\n hostname: \"localhost\",\n port,\n path: `/challenge_authenticity?token=${existingServerInfo.sensitiveToken}`,\n method: \"GET\",\n },\n (response) => {\n response.on(\"data\", (d) => {\n res(d);\n });\n response.on(\"error\", (e) => {\n rej(e);\n });\n }\n );\n req.on(\"error\", rej);\n req.end();\n }),\n // Timeout so we don't wait around forever for it.\n // This should always be on localhost and therefore quite fast.\n new Promise<never>((_, rej) => setTimeout(() => rej(\"timeout\"), 500)),\n ]);\n\n response = JSON.parse(result);\n } catch (error) {\n if (!silent) {\n info(\n `error checking if existing Graphite Web server on port ${port} is authentic: `,\n error\n );\n }\n // if the request fails for any reason, we don't think it's an GTI server.\n return null;\n }\n\n if (!validateServerChallengeResponse(response)) {\n return null;\n }\n\n const { challengeToken, pid } = response;\n return areTokensEqual(challengeToken, existingServerInfo.challengeToken)\n ? pid\n : null;\n}\n\n/**\n * Try multiple times to read the server data, in case we try to read during the time between the server\n * starting and it writing to the token file.\n */\nexport async function readExistingServerFileWithRetries(\n port: number\n): Promise<ExistingServerInfo | undefined> {\n let tries = 3;\n while (tries > 0) {\n try {\n // eslint-disable-next-line no-await-in-loop\n return await readExistingServerFile(port);\n } catch (error) {\n await sleepMs(500);\n }\n tries--;\n }\n return undefined;\n}\n\nfunction sleepMs(timeMs: number): Promise<void> {\n return new Promise((res) => setTimeout(res, timeMs));\n}\n\nexport function validateServerChallengeResponse(\n v: unknown\n): v is ServerChallengeResponse {\n return (\n !!v &&\n typeof v === \"object\" &&\n typeof (v as ServerChallengeResponse).challengeToken === \"string\" &&\n typeof (v as ServerChallengeResponse).pid === \"number\"\n );\n}\n","import type { ChildProcessResponse } from \"./child\";\nimport type { StartServerArgs, StartServerResult } from \"./server\";\nimport type { IOType } from \"child_process\";\nimport type { PlatformName } from \"@withgraphite/gti-shared\";\n\nimport {\n ensureExistingServerFolder,\n deleteExistingServerFile,\n writeExistingServerFile,\n} from \"./existingServerStateFiles\";\nimport * as lifecycle from \"./serverLifecycle\";\nimport child_process from \"child_process\";\nimport crypto from \"crypto\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\n\nexport const DEFAULT_PORT = \"3001\";\n\nconst HELP_MESSAGE = `\\\nusage: gti [--port PORT]\n\noptional arguments:\n -h, --help Show this message\n -f, --foreground Run the server process in the foreground.\n --no-open Do not try to open a browser after starting the server\n -p, --port Port to listen on (default: ${DEFAULT_PORT})\n --json Output machine-readable JSON\n --stdout Write server logs to stdout instead of a tmp file\n --dev Open on port 3000 despite hosting ${DEFAULT_PORT} (or custom port with -p)\n This is useless unless running from source to hook into CRA dev mode\n --kill Do not start Graphite Web, just kill any previously running Graphite Web server on the specified port\n Note that this will disrupt other windows still using the previous Graphite Web server.\n --force Kill any existing Graphite Web server on the specified port, then start a new server.\n Note that this will disrupt other windows still using the previous Graphite Web server.\n --command name Set which command to run for gt commands (default: gt)\n --cwd dir Sets the current working directory, allowing changing the repo.\n --gt-version v Set version number of gt was used to spawn the server (default: '(dev)')\n --platform Set which platform implementation to use by changing the resulting URL.\n Used to embed Graphite Web into non-browser web environments like IDEs.\n`;\n\ntype JsonOutput =\n | {\n port: number;\n url: string;\n token: string;\n /** Process ID for the server. */\n pid: number;\n wasServerReused: boolean;\n logFileLocation: string | \"stdout\";\n cwd: string;\n command: string;\n }\n | { error: string };\n\nfunction errorAndExit(message: string, code = 1): never {\n // eslint-disable-next-line no-console\n console.error(message);\n process.exit(code);\n}\n\ntype Args = {\n help: boolean;\n foreground: boolean;\n openUrl: boolean;\n port: number;\n isDevMode: boolean;\n json: boolean;\n stdout: boolean;\n platform: string | undefined;\n kill: boolean;\n force: boolean;\n gtVersion: string;\n command: string;\n cwd: string | undefined;\n frontendDir: string;\n};\n\n// Rudimentary arg parser to avoid the need for a third-party dependency.\nexport function parseArgs(args: Array<string> = process.argv.slice(2)): Args {\n let help = false;\n // Before we added arg parsing, the $PORT environment variable was the only\n // way to set the port. Once callers have been updated to use --port, drop\n // support for the environment variable.\n let port = normalizePort(process.env.PORT || DEFAULT_PORT);\n let openUrl = true;\n\n const len = args.length;\n let isDevMode = false;\n let json = false;\n let stdout = false;\n let foreground = false;\n let kill = false;\n let force = false;\n let command = \"gt\";\n let cwd: string | undefined = undefined;\n let gtVersion = \"(dev)\";\n let platform: string | undefined = undefined;\n let i = 0;\n function consumeArgValue(arg: string) {\n if (i >= len) {\n errorAndExit(`no value supplied for ${arg}`);\n } else {\n return args[++i];\n }\n }\n while (i < len) {\n const arg = args[i];\n switch (arg) {\n case \"--no-open\": {\n openUrl = false;\n break;\n }\n case \"--foreground\":\n case \"-f\": {\n foreground = true;\n break;\n }\n case \"--port\":\n case \"-p\": {\n const rawPort = consumeArgValue(arg);\n const parsedPort = normalizePort(rawPort);\n if (parsedPort !== false) {\n port = parsedPort as number;\n } else {\n errorAndExit(`could not parse port: '${rawPort}'`);\n }\n break;\n }\n case \"--dev\": {\n isDevMode = true;\n break;\n }\n case \"--kill\": {\n kill = true;\n break;\n }\n case \"--force\": {\n force = true;\n break;\n }\n case \"--command\": {\n command = consumeArgValue(arg);\n break;\n }\n case \"--cwd\": {\n cwd = consumeArgValue(arg);\n break;\n }\n case \"--gt-version\": {\n gtVersion = consumeArgValue(arg);\n break;\n }\n case \"--json\": {\n json = true;\n break;\n }\n case \"--stdout\": {\n stdout = true;\n break;\n }\n case \"--platform\": {\n platform = consumeArgValue(arg);\n if (!isValidCustomPlatform(platform)) {\n errorAndExit(\n `\"${platform}\" is not a valid platform. Valid options: ${validPlatforms.join(\n \", \"\n )}`\n );\n }\n break;\n }\n case \"--help\":\n case \"-h\": {\n help = true;\n break;\n }\n default: {\n errorAndExit(`unexpected arg: ${arg}`);\n }\n }\n ++i;\n }\n\n if (port === false) {\n errorAndExit(\"port was not a positive integer\");\n }\n\n if (stdout && !foreground) {\n // eslint-disable-next-line no-console\n console.info(\"NOTE: setting --foreground because --stdout was specified\");\n foreground = true;\n }\n\n if (kill && force) {\n // eslint-disable-next-line no-console\n console.info(\"NOTE: setting --kill and --force is redundant\");\n }\n\n return {\n help,\n foreground,\n openUrl,\n port,\n isDevMode,\n json,\n stdout,\n platform,\n kill,\n force,\n gtVersion,\n command,\n cwd,\n frontendDir: path.join(__dirname, \"..\", \"..\", \"frontend\"),\n };\n}\n\nconst CRYPTO_KEY_LENGTH = 128;\n\n/** Generates a 128-bit secure random token. */\nfunction generateToken(): Promise<string> {\n // crypto.generateKey() was introduced in v15.0.0. For earlier versions of\n // Node, we can use crypto.createDiffieHellman().\n if (typeof crypto.generateKey === \"function\") {\n const { generateKey } = crypto;\n return new Promise((res, rej) =>\n generateKey(\"hmac\", { length: CRYPTO_KEY_LENGTH }, (err, key) =>\n err ? rej(err) : res(key.export().toString(\"hex\"))\n )\n );\n } else {\n return Promise.resolve(\n crypto\n .createDiffieHellman(CRYPTO_KEY_LENGTH)\n .generateKeys()\n .toString(\"hex\")\n );\n }\n}\n\nconst validPlatforms: Array<PlatformName> = [];\nfunction isValidCustomPlatform(name: unknown): name is PlatformName {\n return validPlatforms.includes(name as PlatformName);\n}\n\n/**\n * This calls the `startServer()` function that launches the server for GTI,\n * though the mechanism is conditional on the `foreground` param:\n *\n * - If `foreground` is true, then `startServer()` will be called directly as\n * part of this process and it will continue run in the foreground. The user\n * can do ctrl+c to kill the server (or ctrl+z to suspend it), as they would\n * for any other process.\n * - If `foreground` is false, then we will spawn a new process via\n * `child_process.fork()` that runs `child.ts` in this folder. IPC is done via\n * `child.on('message')` and `process.send()`, though once this process has\n * confirmed that the server is up and running, it can exit while the child\n * will continue to run in the background.\n */\nfunction callStartServer(args: StartServerArgs): Promise<StartServerResult> {\n if (args.foreground) {\n return import(\"./server\").then(({ startServer }) => startServer(args));\n } else {\n return new Promise((resolve) => {\n // We pass the args via an environment variable because StartServerArgs\n // contains sensitive information and users on the system can see the\n // command line arguments of other users' processes, but not the\n // environment variables of other users' processes.\n //\n // We could also consider streaming the input as newline-delimited JSON\n // via stdin, though the max length for an environment variable seems\n // large enough for our needs.\n const env = {\n ...process.env,\n GTI_SERVER_ARGS: JSON.stringify({ ...args, logInfo: null }),\n };\n const options = {\n env,\n detached: true,\n // Child process should not inherit fds from the parent process, or\n // else something like `node run-proxy.js --json | jq` will never\n // terminate because the child process will keep stdout from the\n // parent process open, so jq will continue to read from it.\n stdio: \"ignore\" as IOType,\n };\n const pathToChildModule = path.join(path.dirname(__filename), \"child\");\n const child = child_process.fork(pathToChildModule, [], options);\n child.on(\"message\", (message: ChildProcessResponse) => {\n switch (message.type) {\n case \"result\": {\n resolve(message.result);\n break;\n }\n case \"message\": {\n args.logInfo(...message.args);\n break;\n }\n }\n });\n });\n }\n}\n\nexport async function runProxyMain(args: Args) {\n const {\n help,\n foreground,\n openUrl,\n port,\n isDevMode,\n json,\n stdout,\n platform,\n kill,\n force,\n gtVersion,\n command,\n frontendDir\n } = args;\n if (help) {\n errorAndExit(HELP_MESSAGE, 0);\n }\n\n const cwd = args.cwd ?? process.cwd();\n\n function info(...args: Parameters<typeof console.log>): void {\n if (json) {\n return;\n }\n // eslint-disable-next-line no-console\n console.info(...args);\n }\n\n /**\n * Output JSON information for use with `--json`.\n * Should only be called once per lifecycle of the server.\n */\n function outputJson(data: JsonOutput) {\n if (!json) {\n return;\n }\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(data));\n }\n\n /////////////////////////////\n\n if (force) {\n // like kill, but don't exit the process, so we go on to start a fresh server\n let foundPid;\n try {\n foundPid = await killServerIfItExists(port, info);\n info(`killed Graphite Web server process ${foundPid}`);\n } catch (err: unknown) {\n info(\n `did not stop previous Graphite Web server: ${(\n err as Error\n ).toString()}`\n );\n }\n } else if (kill) {\n let foundPid;\n try {\n foundPid = await killServerIfItExists(port, info);\n } catch (err: unknown) {\n errorAndExit((err as Error).toString());\n }\n info(`killed Graphite Web server process ${foundPid}`);\n process.exit(0);\n }\n\n // Since our spawned server can run processes and make authenticated requests,\n // we require a token in requests to match the one created here.\n // The sensitive token is given the to the client to authenticate requests.\n // The challenge token can be queried by the client to authenticate the server.\n const [sensitiveToken, challengeToken] = await Promise.all([\n generateToken(),\n generateToken(),\n ]);\n\n const logFileLocation = stdout\n ? \"stdout\"\n : path.join(\n await fs.promises.mkdtemp(path.join(os.tmpdir(), \"gti-server-log\")),\n \"gti-server.log\"\n );\n\n /**\n * Returns the URL the user can use to open GTI. Because this is often handed\n * off as an argument to another process, we must take great care when\n * constructing this argument.\n */\n function getURL(port: number, token: string, cwd: string): URL {\n // Although `port` is where our server is actually hosting from,\n // in dev mode CRA will start on 3000 and proxy requests to the server.\n // We only get the source build by opening from port 3000.\n const CRA_DEFAULT_PORT = 3000;\n\n let serverPort: number;\n if (isDevMode) {\n serverPort = CRA_DEFAULT_PORT;\n } else {\n if (!Number.isInteger(port) || port < 0) {\n throw Error(`illegal port: \\`${port}\\``);\n }\n serverPort = port;\n }\n const urlArgs: Record<string, string> = {\n token: encodeURIComponent(token),\n cwd: encodeURIComponent(cwd),\n };\n const platformPath =\n platform && platform !== \"browser\" && isValidCustomPlatform(platform)\n ? `${encodeURIComponent(platform)}.html`\n : \"\";\n const url = `http://localhost:${serverPort}/${platformPath}?${Object.entries(\n urlArgs\n )\n .map(([key, value]) => `${key}=${value}`)\n .join(\"&\")}`;\n return new URL(url);\n }\n\n /////////////////////////////\n\n const result = await callStartServer({\n foreground,\n port,\n sensitiveToken,\n challengeToken,\n logFileLocation,\n logInfo: info,\n command,\n gtVersion,\n frontendDir\n });\n\n if (result.type === \"addressInUse\" && !force) {\n // This port is already in use. Determine if it's a pre-existing GTI server,\n // and find the appropriate saved token, and reconstruct URL if recovered.\n\n const existingServerInfo =\n await lifecycle.readExistingServerFileWithRetries(port);\n if (!existingServerInfo) {\n const errorMessage =\n \"failed to find existing server file. This port might not be being used by a Graphite Web server.\\n\" +\n suggestDebugPortIssue(port);\n if (json) {\n outputJson({\n error: errorMessage,\n });\n } else {\n info(errorMessage);\n }\n process.exit(1);\n }\n\n const pid = await lifecycle.checkIfServerIsAliveAndIsGTI(\n info,\n port,\n existingServerInfo\n );\n if (pid == null) {\n const errorMessage =\n `port ${port} is already in use, but not by an Graphite Web server.\\n` +\n suggestDebugPortIssue(port);\n if (json) {\n outputJson({\n error: errorMessage,\n });\n } else {\n info(errorMessage);\n }\n process.exit(1);\n }\n\n let killAndSpawnAgain = false;\n if (existingServerInfo.command !== command) {\n info(\n `warning: Starting a fresh server to use command '${command}' (existing server was using '${existingServerInfo.command}').`\n );\n killAndSpawnAgain = true;\n } else if (existingServerInfo.gtVersion !== gtVersion) {\n info(\n `warning: gt version has changed since last server was started. Starting a fresh server to use lastest version '${gtVersion}'.`\n );\n killAndSpawnAgain = true;\n }\n\n if (killAndSpawnAgain) {\n try {\n await killServerIfItExists(port, info);\n } catch (err: unknown) {\n errorAndExit(\n `did not stop previous Graphite Web server: ${(\n err as Error\n ).toString()}`\n );\n }\n\n // Now that we killed the server, try the whole thing again to spawn a new instance.\n // We're guaranteed to not go down the same code path since the last authentic server was killed.\n // We also know --force or --kill could not have been supplied.\n await runProxyMain(args);\n return;\n }\n\n const url = getURL(port as number, existingServerInfo.sensitiveToken, cwd);\n info(\"re-used existing Graphite Web server\");\n info(\"\\naccess Graphite Web with this link:\");\n info(String(url));\n\n if (json) {\n outputJson({\n url: url.href,\n port: port as number,\n token: existingServerInfo.sensitiveToken,\n pid,\n wasServerReused: true,\n logFileLocation: existingServerInfo.logFileLocation,\n cwd,\n command: existingServerInfo.command,\n });\n } else if (openUrl) {\n maybeOpenURL(url);\n }\n process.exit(0);\n } else if (result.type === \"success\") {\n // The server successfully started on this port\n // Save the server information for re-use and print the URL for use\n\n try {\n await ensureExistingServerFolder();\n await deleteExistingServerFile(port);\n await writeExistingServerFile(port, {\n sensitiveToken,\n challengeToken,\n logFileLocation,\n command,\n gtVersion,\n });\n } catch (error) {\n info(\n \"failed to save server information re-use. \" +\n \"This server will remain, but future invocations on this port will not be able to re-use this instance.\",\n error\n );\n }\n\n const { port: portInUse } = result;\n const url = getURL(portInUse, sensitiveToken, cwd);\n info(\"started a new server\");\n info(\"\\naccess Graphite Web with this link:\");\n info(String(url));\n if (json) {\n outputJson({\n url: url.href,\n port: portInUse,\n token: sensitiveToken,\n pid: result.pid,\n wasServerReused: false,\n logFileLocation,\n cwd,\n command,\n });\n }\n\n if (openUrl) {\n maybeOpenURL(url);\n }\n\n // If --foreground was not specified, we can kill this process, but the\n // web server in the child process will stay alive.\n if (!foreground) {\n process.exit(0);\n }\n } else if (result.type === \"error\") {\n errorAndExit(result.error);\n }\n}\n\n/**\n * Finds any existing GTI server process running on `port`.\n * If one is found, it is killed and the PID is returned.\n * Otherwise, an error is returned\n */\nexport async function killServerIfItExists(\n port: number,\n info: typeof console.info\n): Promise<number> {\n const existingServerInfo = await lifecycle.readExistingServerFileWithRetries(\n port\n );\n if (!existingServerInfo) {\n throw new Error(\n `could not find existing server information to kill on port ${port}`\n );\n }\n const pid = await lifecycle.checkIfServerIsAliveAndIsGTI(\n info,\n port,\n existingServerInfo,\n /* silent */ true\n );\n if (!pid) {\n throw new Error(\n `could not find existing server process to kill on port ${port}`\n );\n }\n try {\n process.kill(pid);\n } catch (err) {\n throw new Error(\n `could not kill previous Graphite Web server process with PID ${pid}. This instance may no longer be running.`\n );\n }\n return pid;\n}\n\n/**\n * Normalize a port into a number or false.\n */\nfunction normalizePort(val: string): number | false {\n const port = parseInt(val, 10);\n return !isNaN(port) && port >= 0 ? port : false;\n}\n\n/**\n * Text to include in an error message to help the user self-diagnose their\n * \"port already in use\" issue.\n */\nfunction suggestDebugPortIssue(port: number): string {\n if (process.platform !== \"win32\") {\n return (\n `try running \\`lsof -i :${port}\\` to see what is running on port ${port}, ` +\n \"or just try using a different port.\"\n );\n } else {\n return \"try using a different port.\";\n }\n}\n\n/**\n * Because `url` will be passed to the \"opener\" executable for the platform,\n * the caller must take responsibility for ensuring the integrity of the\n * `url` argument.\n */\nfunction maybeOpenURL(url: URL): void {\n const { href } = url;\n // Basic sanity checking: this does not eliminate all illegal inputs.\n if (!href.startsWith(\"http://\") || href.indexOf(\" \") !== -1) {\n throw Error(`illegal URL: \\`href\\``);\n }\n\n let openCommand: string;\n let commandOptions: string[] | null = null;\n switch (process.platform) {\n case \"darwin\": {\n openCommand = \"/usr/bin/open\";\n break;\n }\n case \"win32\": {\n // We cannot use `powershell -command 'start <URL>'` because then\n // `start <URL>` is a single argument and we have to worry about\n // escaping it safely. We use this construction in combination with\n // `windowsVerbatimArguments: true` below so that we do not have\n // to take responsibility for escaping the URL.\n openCommand = \"cmd\";\n commandOptions = [\"/c\", \"start\"];\n break;\n }\n default: {\n openCommand = \"xdg-open\";\n break;\n }\n }\n\n const args = commandOptions != null ? commandOptions.concat(href) : [href];\n\n // Note that if openCommand does not exist on the host, this will fail with\n // ENOENT. Often, this is fine: the user could start gti on a headless\n // machine, but then set up tunneling to reach the server from another host.\n const child = child_process.spawn(openCommand, args, {\n detached: true,\n stdio: \"ignore\" as IOType,\n windowsHide: true,\n windowsVerbatimArguments: true,\n });\n\n // While `/usr/bin/open` on macOS and `start` on Windows are expected to be\n // available, xdg-open is not guaranteed, so report an appropriate error in\n // this case.\n child.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n // eslint-disable-next-line no-console\n console.error(\n `command \\`${openCommand}\\` not found: run with --no-open to suppress this message`\n );\n } else {\n // eslint-disable-next-line no-console\n console.error(\n `unexpected error running command \\`${openCommand} ${args.join(\n \" \"\n )}\\`:`,\n error\n );\n }\n });\n}\n","import type { ServerSideTracker } from \"./analytics/serverSideTracker\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\nimport type {\n OperationCommandProgressReporter,\n OperationProgress,\n RunnableOperation,\n} from \"@withgraphite/gti-shared\";\n\nimport { newAbortController } from \"@withgraphite/gti-shared\";\n\n/**\n * Handle running & queueing all Operations so that only one Operation runs at once.\n * Operations may be run by gt in the Repository or other providers like ghstack in the RemoteRepository.\n */\nexport class OperationQueue {\n constructor(\n private logger: Logger,\n private runCallback: (\n operation: RunnableOperation,\n cwd: string,\n handleProgress: OperationCommandProgressReporter,\n signal: AbortSignal\n ) => Promise<void>\n ) {}\n\n private queuedOperations: Array<\n RunnableOperation & { tracker: ServerSideTracker }\n > = [];\n private runningOperation: RunnableOperation | undefined = undefined;\n private abortController: AbortController | undefined = undefined;\n\n async runOrQueueOperation(\n operation: RunnableOperation,\n onProgress: (progress: OperationProgress) => void,\n tracker: ServerSideTracker,\n cwd: string\n ): Promise<void> {\n if (this.runningOperation != null) {\n this.queuedOperations.push({ ...operation, tracker });\n onProgress({\n id: operation.id,\n kind: \"queue\",\n queue: this.queuedOperations.map((o) => o.id),\n });\n return;\n }\n this.runningOperation = operation;\n\n const handleCommandProgress: OperationCommandProgressReporter = (\n ...args\n ) => {\n switch (args[0]) {\n case \"spawn\":\n onProgress({\n id: operation.id,\n kind: \"spawn\",\n queue: this.queuedOperations.map((op) => op.id),\n });\n break;\n case \"stdout\":\n onProgress({ id: operation.id, kind: \"stdout\", message: args[1] });\n break;\n case \"stderr\":\n onProgress({ id: operation.id, kind: \"stderr\", message: args[1] });\n break;\n case \"exit\":\n onProgress({\n id: operation.id,\n kind: \"exit\",\n exitCode: args[1],\n timestamp: Date.now(),\n });\n break;\n }\n };\n\n try {\n const controller = newAbortController();\n this.abortController = controller;\n await tracker.operation(\n operation.trackEventName,\n \"RunOperationError\",\n { extras: { args: operation.args, runner: operation.runner } },\n (_p) =>\n this.runCallback(\n operation,\n cwd,\n handleCommandProgress,\n controller.signal\n )\n );\n this.runningOperation = undefined;\n\n // now that we successfully ran this operation, dequeue the next\n if (this.queuedOperations.length > 0) {\n const op = this.queuedOperations.shift();\n if (op != null) {\n // don't await this, the caller should resolve when the original operation finishes.\n void this.runOrQueueOperation(\n op,\n // TODO: we're using the onProgress from the LAST `runOperation`... should we be keeping the newer onProgress in the queued operation?\n onProgress,\n op.tracker,\n cwd\n );\n }\n }\n } catch (err) {\n const errString = (err as Error).toString();\n this.logger.log(\n \"error running operation: \",\n operation.args[0],\n errString\n );\n onProgress({ id: operation.id, kind: \"error\", error: errString });\n // clear queue to run when we hit an error\n this.queuedOperations = [];\n this.runningOperation = undefined;\n }\n }\n\n /**\n * Send kill signal to the running operation if the operationId matches.\n * If the process exits, the exit event will be noticed by the queue.\n * This function does not block on waiting for the operation process to exit.\n */\n abortRunningOperation(operationId: string) {\n if (this.runningOperation?.id == operationId) {\n this.abortController?.abort();\n }\n }\n}\n","import type { PageVisibility } from \"@withgraphite/gti-shared\";\n\n/**\n * Aggregates if any GTI page has focus or visibility.\n */\nexport class PageFocusTracker {\n private focusedPages = new Set();\n private visiblePages = new Set();\n\n private onChangeHandlers = new Set<(state: PageVisibility) => unknown>();\n\n setState(page: string, state: PageVisibility) {\n switch (state) {\n case \"focused\":\n this.focusedPages.add(page);\n this.visiblePages.add(page);\n break;\n case \"visible\":\n this.focusedPages.delete(page);\n this.visiblePages.add(page);\n break;\n case \"hidden\":\n this.focusedPages.delete(page);\n this.visiblePages.delete(page);\n break;\n }\n for (const handler of this.onChangeHandlers) {\n handler(state);\n }\n }\n\n public disposePage(page: string) {\n this.focusedPages.delete(page);\n this.visiblePages.delete(page);\n }\n\n public hasPageWithFocus() {\n return this.focusedPages.size > 0;\n }\n public hasVisiblePage() {\n return this.visiblePages.size > 0;\n }\n\n public onChange(callback: () => unknown): () => void {\n this.onChangeHandlers.add(callback);\n return () => this.onChangeHandlers.delete(callback);\n }\n}\n","import { TypedEventEmitter } from \"./TypedEventEmitter\";\n\ntype Id = number;\n\n/**\n * Rate limits requests to run an arbitrary task.\n * Up to `maxSimultaneousRunning` tasks can run at once,\n * futher requests will be queued and run when a running task finishes.\n *\n * Usage:\n * ```\n * const rateLimiter = new RateLimiter(5);\n * const result = await rateLimiter.enqueueRun(() => {\n * // ...do arbitrary async work...\n * });\n * ```\n */\nexport class RateLimiter {\n private queued: Array<Id> = [];\n private running: Array<Id> = [];\n private runs = new TypedEventEmitter<\"run\", Id>();\n\n constructor(\n private maxSimultaneousRunning: number,\n private log?: (s: string) => unknown\n ) {}\n\n private nextId = 1;\n private generateId(): Id {\n return this.nextId++;\n }\n\n async enqueueRun<T>(runner: () => Promise<T>): Promise<T> {\n const id = this.generateId();\n\n this.queued.push(id);\n this.tryDequeueNext();\n\n if (!this.running.includes(id)) {\n this.log?.(\n `${this.running.length} tasks are already running, enqueuing ID:${id}`\n );\n await new Promise((res) => {\n this.runs.on(\"run\", (ran) => {\n if (ran === id) {\n this.log?.(`now allowing ID:${id} to run`);\n res(undefined);\n }\n });\n });\n }\n\n try {\n return await runner();\n } finally {\n this.notifyFinished(id);\n }\n }\n\n private notifyFinished(id: Id): void {\n this.running = this.running.filter((running) => running !== id);\n this.tryDequeueNext();\n }\n\n private tryDequeueNext() {\n if (this.running.length < this.maxSimultaneousRunning) {\n const toRun = this.queued.shift();\n if (toRun != null) {\n this.run(toRun);\n }\n }\n }\n\n private run(id: Id) {\n this.running.push(id);\n this.runs.emit(\"run\", id);\n }\n}\n","import type {\n AbsolutePath,\n CodeReviewSystem,\n CommandArg,\n Disposable,\n FetchedCommits,\n FetchedUncommittedChanges,\n MergeConflicts,\n OperationCommandProgressReporter,\n OperationProgress,\n PageVisibility,\n RepoInfo,\n RunnableOperation,\n SmartlogCommits,\n SuccessorInfo,\n ValidatedRepoInfo,\n} from \"@withgraphite/gti-shared\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\n\nimport type {\n BranchInfo,\n PRNumber,\n RepoRelativePath,\n Status,\n RepoInfo as RepoInfoFromCLI,\n} from \"@withgraphite/gti-cli-shared-types\";\nimport { Comparison, ComparisonType } from \"@withgraphite/gti-shared\";\nimport { exists, removeLeadingPathSep } from \"./fs\";\nimport { RateLimiter } from \"./RateLimiter\";\nimport { notEmpty, unwrap } from \"@withgraphite/gti-shared\";\nimport { CommandRunner } from \"@withgraphite/gti-shared\";\nimport execa from \"execa\";\nimport path from \"path\";\nimport type { ServerSideTracker } from \"./analytics/serverSideTracker\";\nimport {\n DEFAULT_DAYS_OF_COMMITS_TO_LOAD,\n ErrorShortMessages,\n} from \"@withgraphite/gti-shared\";\nimport { GitHubCodeReviewProvider } from \"./github/githubCodeReviewProvider\";\nimport { OperationQueue } from \"./OperationQueue\";\nimport { PageFocusTracker } from \"./PageFocusTracker\";\nimport { handleAbortSignalOnProcess, serializeAsyncCall } from \"./utils\";\nimport { WatchForChanges } from \"./WatchForChanges\";\nimport semver from \"semver\";\nimport { TypedEventEmitter } from \"./TypedEventEmitter\";\n\nexport const COMMIT_END_MARK = \"<<COMMIT_END_MARK>>\";\nexport const NULL_CHAR = \"\\0\";\nconst MAX_SIMULTANEOUS_CAT_CALLS = 4;\n\nconst MIN_REQUIRED_CLI_VERSION = \"0.20.23\";\n\ntype ConflictFileData = {\n contents: string;\n exists: boolean;\n isexec: boolean;\n issymlink: boolean;\n};\nexport type ResolveCommandConflictOutput = [\n | {\n command: null;\n conflicts: [];\n pathconflicts: [];\n }\n | {\n command: string;\n command_details: { cmd: string; to_abort: string; to_continue: string };\n conflicts: Array<{\n base: ConflictFileData;\n local: ConflictFileData;\n output: ConflictFileData;\n other: ConflictFileData;\n path: string;\n }>;\n pathconflicts: Array<never>;\n }\n];\n\n/**\n * This class is responsible for providing information about the working copy\n * for a Graphite repository.\n *\n * A Repository may be reused by multiple connections, not just one GTI window.\n * This is so we don't duplicate watchman subscriptions and calls to status/log.\n * A Repository does not have a pre-defined `cwd`, so it may be re-used across cwds.\n *\n * Prefer using `RepositoryCache.getOrCreate()` to access and dispose `Repository`s.\n */\nexport class Repository {\n public IGNORE_COMMIT_MESSAGE_LINES_REGEX = /^((?:HG|SL):.*)/gm;\n\n private mergeConflicts: MergeConflicts | undefined = undefined;\n private uncommittedChanges: FetchedUncommittedChanges | null = null;\n private smartlogCommits: FetchedCommits | null = null;\n\n private mergeConflictsEmitter = new TypedEventEmitter<\n \"change\",\n MergeConflicts | undefined\n >();\n private uncommittedChangesEmitter = new TypedEventEmitter<\n \"change\",\n FetchedUncommittedChanges\n >();\n private smartlogCommitsChangesEmitter = new TypedEventEmitter<\n \"change\",\n FetchedCommits\n >();\n\n private smartlogCommitsBeginFetchingEmitter = new TypedEventEmitter<\n \"start\",\n undefined\n >();\n private uncommittedChangesBeginFetchingEmitter = new TypedEventEmitter<\n \"start\",\n undefined\n >();\n\n private disposables: Array<() => void> = [\n () => this.mergeConflictsEmitter.removeAllListeners(),\n () => this.uncommittedChangesEmitter.removeAllListeners(),\n () => this.smartlogCommitsChangesEmitter.removeAllListeners(),\n () => this.smartlogCommitsBeginFetchingEmitter.removeAllListeners(),\n () => this.uncommittedChangesBeginFetchingEmitter.removeAllListeners(),\n ];\n public onDidDispose(callback: () => unknown): void {\n this.disposables.push(callback);\n }\n\n private operationQueue: OperationQueue;\n private watchForChanges: WatchForChanges;\n private pageFocusTracker = new PageFocusTracker();\n public codeReviewProvider?: GitHubCodeReviewProvider;\n\n private currentVisibleCommitRangeIndex = 0;\n private visibleCommitRanges: Array<number | undefined> = [\n DEFAULT_DAYS_OF_COMMITS_TO_LOAD,\n 60,\n undefined,\n ];\n\n /** Prefer using `RepositoryCache.getOrCreate()` to access and dispose `Repository`s. */\n constructor(public info: ValidatedRepoInfo, public logger: Logger) {\n const remote = info.codeReviewSystem;\n if (remote.type === \"github\") {\n this.codeReviewProvider = new GitHubCodeReviewProvider(\n remote,\n this.runCommand.bind(this)\n );\n }\n\n this.watchForChanges = new WatchForChanges(\n info,\n logger,\n this.pageFocusTracker,\n (kind) => {\n if (kind === \"uncommitted changes\") {\n void this.fetchUncommittedChanges();\n } else if (kind === \"commits\") {\n void this.fetchSmartlogCommits();\n } else if (kind === \"merge conflicts\") {\n void this.checkForMergeConflicts();\n } else if (kind === \"everything\") {\n void this.fetchUncommittedChanges();\n void this.fetchSmartlogCommits();\n void this.checkForMergeConflicts();\n\n this.codeReviewProvider?.triggerDiffSummariesFetch(\n // We could choose to only fetch the diffs that changed (`newDiffs`) rather than all diffs,\n // but our UI doesn't cache old values, thus all other diffs would appear empty\n this.getAllDiffIds()\n );\n }\n }\n );\n\n this.operationQueue = new OperationQueue(\n this.logger,\n (\n operation: RunnableOperation,\n cwd: string,\n handleCommandProgress,\n signal: AbortSignal\n ): Promise<void> => {\n if (operation.runner === CommandRunner.Graphite) {\n return this.runOperation(\n operation,\n handleCommandProgress,\n cwd,\n signal\n );\n } else if (operation.runner === CommandRunner.CodeReviewProvider) {\n const normalizedArgs = this.normalizeOperationArgs(\n cwd,\n operation.args\n );\n\n if (this.codeReviewProvider?.runExternalCommand == null) {\n return Promise.reject(\n Error(\n \"CodeReviewProvider does not support running external commands\"\n )\n );\n }\n\n return (\n this.codeReviewProvider?.runExternalCommand(\n cwd,\n normalizedArgs,\n handleCommandProgress,\n signal\n ) ?? Promise.resolve()\n );\n }\n return Promise.resolve();\n }\n );\n\n // refetch summaries whenever we see new diffIds\n const seenDiffs = new Set();\n const subscription = this.subscribeToSmartlogCommitsChanges((fetched) => {\n if (fetched.commits.value) {\n const newDiffs = [];\n const diffIds = fetched.commits.value\n .filter((commit) => commit.pr)\n .map((commit) => commit.pr?.number);\n for (const diffId of diffIds) {\n if (!seenDiffs.has(diffId)) {\n newDiffs.push(diffId);\n seenDiffs.add(diffId);\n }\n }\n if (newDiffs.length > 0) {\n this.codeReviewProvider?.triggerDiffSummariesFetch(\n // We could choose to only fetch the diffs that changed (`newDiffs`) rather than all diffs,\n // but our UI doesn't cache old values, thus all other diffs would appear empty\n this.getAllDiffIds()\n );\n }\n }\n });\n\n // the repo may already be in a conflict state on startup\n void this.checkForMergeConflicts();\n\n this.disposables.push(() => subscription.dispose());\n }\n\n public nextVisibleCommitRangeInDays(): number | undefined {\n if (\n this.currentVisibleCommitRangeIndex + 1 <\n this.visibleCommitRanges.length\n ) {\n this.currentVisibleCommitRangeIndex++;\n }\n return this.visibleCommitRanges[this.currentVisibleCommitRangeIndex];\n }\n\n /**\n * Typically, disposing is handled by `RepositoryCache` and not used directly.\n */\n public dispose() {\n this.disposables.forEach((dispose) => dispose());\n this.codeReviewProvider?.dispose();\n this.watchForChanges.dispose();\n }\n\n public onChangeConflictState(\n callback: (conflicts: MergeConflicts | undefined) => unknown\n ): Disposable {\n this.mergeConflictsEmitter.on(\"change\", callback);\n\n if (this.mergeConflicts) {\n // if we're already in merge conflicts, let the client know right away\n callback(this.mergeConflicts);\n }\n\n return {\n dispose: () => this.mergeConflictsEmitter.off(\"change\", callback),\n };\n }\n\n public checkForMergeConflicts = serializeAsyncCall(async () => {\n this.logger.info(\"checking for merge conflicts\");\n // Fast path: check if .git/merge dir changed\n const wasAlreadyInConflicts = this.mergeConflicts != null;\n if (!wasAlreadyInConflicts) {\n const mergeDirExists = await exists(\n path.join(this.info.dotdir, \"rebase-merge\")\n );\n if (!mergeDirExists) {\n // Not in a conflict\n this.logger.info(\n `conflict state still the same (${\n wasAlreadyInConflicts ? \"IN merge conflict\" : \"NOT in conflict\"\n })`\n );\n return;\n }\n }\n\n if (this.mergeConflicts == null) {\n // notify UI that merge conflicts were detected and full details are loading\n this.mergeConflicts = { state: \"loading\" };\n this.mergeConflictsEmitter.emit(\"change\", this.mergeConflicts);\n }\n\n // More expensive full check for conflicts. Necessary if we see .gt/merge change, or if\n // we're already in a conflict and need to re-check if a conflict was resolved.\n\n const fetchStartTimestamp = Date.now();\n let output: Status;\n try {\n const proc = await this.runCommand([\"internal-only\", \"status\"]);\n output = JSON.parse(proc.stdout) as Status;\n } catch (err) {\n this.logger.error(`failed to check for merge conflicts: ${err}`);\n // To avoid being stuck in \"loading\" state forever, let's pretend there's no conflicts.\n this.mergeConflicts = undefined;\n this.mergeConflictsEmitter.emit(\"change\", this.mergeConflicts);\n return;\n }\n\n this.mergeConflicts = computeNewConflicts(\n this.mergeConflicts,\n output,\n fetchStartTimestamp\n );\n this.logger.info(\n `repo ${this.mergeConflicts ? \"IS\" : \"IS NOT\"} in merge conflicts`\n );\n if (this.mergeConflicts) {\n const maxConflictsToLog = 20;\n const remainingConflicts = (this.mergeConflicts.files ?? [])\n .filter((conflict) => conflict.status === \"UNRESOLVED\")\n .map((conflict) => conflict.path)\n .slice(0, maxConflictsToLog);\n this.logger.info(\"remaining files with conflicts: \", remainingConflicts);\n }\n this.mergeConflictsEmitter.emit(\"change\", this.mergeConflicts);\n });\n\n public getMergeConflicts(): MergeConflicts | undefined {\n return this.mergeConflicts;\n }\n\n /**\n * Determine basic repo info including the root and important config values.\n * Resulting RepoInfo may have null fields if cwd is not a valid repo root.\n * Throws if `command` is not found.\n */\n static async getRepoInfo(\n command: string,\n logger: Logger,\n cwd: string\n ): Promise<RepoInfo> {\n const repoVersion = await findVersion(command, logger, cwd).catch(\n (err: Error) => err\n );\n if (repoVersion instanceof Error) {\n return { type: \"invalidCommand\", command };\n }\n if (\n repoVersion !== \"local\" &&\n semver.lt(repoVersion, MIN_REQUIRED_CLI_VERSION)\n ) {\n return {\n type: \"invalidVersion\",\n command,\n versionFound: repoVersion,\n versionRequired: MIN_REQUIRED_CLI_VERSION,\n };\n }\n\n const [profile, repoInfoRaw, preferredBranchEdit] = await Promise.all([\n findRepoProfile(command, logger, cwd),\n findRepoInfo(command, logger, cwd),\n getConfig(command, logger, cwd, \"graphite.branch_edit\").then(\n (value) => (value as \"commit\" | \"amend\") ?? (\"amend\" as const)\n ),\n ]);\n if (repoInfoRaw == null) {\n return { type: \"cwdNotARepository\", cwd };\n }\n\n let codeReviewSystem: CodeReviewSystem;\n if (typeof repoInfoRaw.remote === \"undefined\") {\n codeReviewSystem = { type: \"none\" };\n } else {\n const { owner, name, hostname } = repoInfoRaw.remote;\n codeReviewSystem = {\n type: \"github\",\n owner,\n repo: name,\n hostname,\n };\n }\n\n const result: RepoInfo = {\n type: \"success\",\n command,\n dotdir: repoInfoRaw.dotDir,\n repoRoot: repoInfoRaw.rootDir,\n codeReviewSystem,\n preferredBranchEdit,\n profile,\n trunkBranch: repoInfoRaw.trunkBranch,\n };\n logger.info(\"repo info: \", result);\n return result;\n }\n\n /**\n * Run long-lived command which mutates the repository state.\n * Progress is streamed back as it comes in.\n * Operations are run immediately. For queueing, see OperationQueue.\n */\n async runOrQueueOperation(\n operation: RunnableOperation,\n onProgress: (progress: OperationProgress) => void,\n tracker: ServerSideTracker,\n cwd: string\n ): Promise<void> {\n await this.operationQueue.runOrQueueOperation(\n operation,\n onProgress,\n tracker,\n cwd\n );\n\n // After any operation finishes, make sure we poll right away,\n // so the UI is guarnateed to get the latest data.\n this.watchForChanges.poll(\"force\");\n }\n\n /**\n * Abort the running operation if it matches the given id.\n */\n abortRunningOpeation(operationId: string) {\n this.operationQueue.abortRunningOperation(operationId);\n }\n\n /**\n * Called by this.operationQueue in response to runOrQueueOperation when an operation is ready to actually run.\n */\n private normalizeOperationArgs(\n cwd: string,\n args: Array<CommandArg>\n ): Array<string> {\n const repoRoot = unwrap(this.info.repoRoot);\n\n return args.map((arg) => {\n if (typeof arg === \"object\") {\n switch (arg.type) {\n case \"repo-relative-file\":\n return path.normalize(\n path.relative(cwd, path.join(repoRoot, arg.path))\n );\n case \"succeedable-revset\":\n return `max(successors(${arg.revset}))`;\n }\n }\n return arg;\n });\n }\n\n /**\n * Called by this.operationQueue in response to runOrQueueOperation when an operation is ready to actually run.\n */\n private async runOperation(\n operation: {\n id: string;\n args: Array<CommandArg>;\n stdin?: string;\n },\n onProgress: OperationCommandProgressReporter,\n cwd: string,\n signal: AbortSignal\n ): Promise<void> {\n const cwdRelativeArgs = this.normalizeOperationArgs(cwd, operation.args);\n const { stdin } = operation;\n const { command, args, options } = getExecParams(\n this.info.command,\n cwdRelativeArgs,\n cwd,\n stdin ? { input: stdin } : undefined\n );\n\n this.logger.log(\"run operation: \", command, cwdRelativeArgs.join(\" \"));\n\n const execution = execa(command, args, {\n ...options,\n stdout: \"pipe\",\n stderr: \"pipe\",\n });\n // It would be more appropriate to call this in reponse to execution.on('spawn'), but\n // this seems to be inconsistent about firing in all versions of node.\n // Just send spawn immediately. Errors during spawn like ENOENT will still be reported by `exit`.\n onProgress(\"spawn\");\n execution.stdout?.on(\"data\", (data) => {\n onProgress(\"stdout\", data.toString());\n });\n execution.stderr?.on(\"data\", (data) => {\n onProgress(\"stderr\", data.toString());\n });\n void execution.on(\"exit\", (exitCode) => {\n onProgress(\"exit\", exitCode || 0);\n });\n signal.addEventListener(\"abort\", () => {\n this.logger.log(\"kill operation: \", command, cwdRelativeArgs.join(\" \"));\n });\n handleAbortSignalOnProcess(execution, signal);\n await execution;\n }\n\n setPageFocus(page: string, state: PageVisibility) {\n this.pageFocusTracker.setState(page, state);\n }\n\n /** Return the latest fetched value for UncommittedChanges. */\n getUncommittedChanges(): FetchedUncommittedChanges | null {\n return this.uncommittedChanges;\n }\n\n subscribeToUncommittedChanges(\n callback: (result: FetchedUncommittedChanges) => unknown\n ): Disposable {\n this.uncommittedChangesEmitter.on(\"change\", callback);\n return {\n dispose: () => {\n this.uncommittedChangesEmitter.off(\"change\", callback);\n },\n };\n }\n\n fetchUncommittedChanges = serializeAsyncCall(async () => {\n const fetchStartTimestamp = Date.now();\n try {\n this.uncommittedChangesBeginFetchingEmitter.emit(\"start\");\n const proc = await this.runCommand([\"internal-only\", \"status\"]);\n const files = (JSON.parse(proc.stdout) as Status).files.map((change) => ({\n ...change,\n path: removeLeadingPathSep(change.path),\n }));\n\n this.uncommittedChanges = {\n fetchStartTimestamp,\n fetchCompletedTimestamp: Date.now(),\n files: { value: files },\n };\n this.uncommittedChangesEmitter.emit(\"change\", this.uncommittedChanges);\n } catch (err) {\n this.logger.error(\"Error fetching files: \", err);\n if (isProcessError(err)) {\n if (err.stderr.includes(\"checkout is currently in progress\")) {\n this.logger.info(\n \"Ignoring `hg status` error caused by in-progress checkout\"\n );\n return;\n }\n }\n // emit an error, but don't save it to this.uncommittedChanges\n this.uncommittedChangesEmitter.emit(\"change\", {\n fetchStartTimestamp,\n fetchCompletedTimestamp: Date.now(),\n files: { error: err instanceof Error ? err : new Error(err as string) },\n });\n }\n });\n\n /** Return the latest fetched value for SmartlogCommits. */\n getSmartlogCommits(): FetchedCommits | null {\n return this.smartlogCommits;\n }\n\n subscribeToSmartlogCommitsChanges(\n callback: (result: FetchedCommits) => unknown\n ) {\n this.smartlogCommitsChangesEmitter.on(\"change\", callback);\n return {\n dispose: () => {\n this.smartlogCommitsChangesEmitter.off(\"change\", callback);\n },\n };\n }\n\n subscribeToSmartlogCommitsBeginFetching(\n callback: (isFetching: boolean) => unknown\n ) {\n const onStart = () => callback(true);\n this.smartlogCommitsBeginFetchingEmitter.on(\"start\", onStart);\n return {\n dispose: () => {\n this.smartlogCommitsBeginFetchingEmitter.off(\"start\", onStart);\n },\n };\n }\n\n subscribeToUncommittedChangesBeginFetching(\n callback: (isFetching: boolean) => unknown\n ) {\n const onStart = () => callback(true);\n this.uncommittedChangesBeginFetchingEmitter.on(\"start\", onStart);\n return {\n dispose: () => {\n this.uncommittedChangesBeginFetchingEmitter.off(\"start\", onStart);\n },\n };\n }\n\n fetchSmartlogCommits = serializeAsyncCall(async () => {\n const fetchStartTimestamp = Date.now();\n try {\n this.smartlogCommitsBeginFetchingEmitter.emit(\"start\");\n const proc = await this.runCommand([\"internal-only\", \"log\"]);\n const commits = parseCommitInfoOutput(this.logger, proc.stdout.trim());\n if (commits.length === 0) {\n throw new Error(ErrorShortMessages.NoCommitsFetched);\n }\n this.smartlogCommits = {\n fetchStartTimestamp,\n fetchCompletedTimestamp: Date.now(),\n commits: { value: commits },\n };\n this.smartlogCommitsChangesEmitter.emit(\"change\", this.smartlogCommits);\n } catch (err) {\n this.logger.error(\"Error fetching commits: \", err);\n this.smartlogCommitsChangesEmitter.emit(\"change\", {\n fetchStartTimestamp,\n fetchCompletedTimestamp: Date.now(),\n commits: {\n error: err instanceof Error ? err : new Error(err as string),\n },\n });\n }\n });\n\n /** Watch for changes to the head commit, e.g. from checking out a new commit */\n subscribeToHeadCommit(callback: (head: BranchInfo) => unknown) {\n let headCommit = this.smartlogCommits?.commits.value?.find(\n (commit) => commit.isHead\n );\n if (headCommit != null) {\n callback(headCommit);\n }\n const onData = (data: FetchedCommits) => {\n const newHead = data?.commits.value?.find((commit) => commit.isHead);\n if (newHead != null && newHead.branch !== headCommit?.branch) {\n callback(newHead);\n headCommit = newHead;\n }\n };\n this.smartlogCommitsChangesEmitter.on(\"change\", onData);\n return {\n dispose: () => {\n this.smartlogCommitsChangesEmitter.off(\"change\", onData);\n },\n };\n }\n\n private catLimiter = new RateLimiter(MAX_SIMULTANEOUS_CAT_CALLS, (s) =>\n this.logger.info(\"[cat]\", s)\n );\n /** Return file content at a given revset, e.g. hash or `.` */\n public cat(file: AbsolutePath, comparison: Comparison): Promise<string> {\n const relativePath = path.relative(this.info.repoRoot, file);\n\n return this.catLimiter.enqueueRun(async () => {\n // For `gt cat`, we want the output of the command verbatim.\n const options = { stripFinalNewline: false };\n return (\n await this.runCommand(\n [\n \"internal-only\",\n \"relative-cat\",\n ...this.catArgs(comparison, relativePath),\n ],\n /*cwd=*/ undefined,\n options\n )\n ).stdout;\n });\n }\n\n private catArgs(comparison: Comparison, file: string): Array<string> {\n switch (comparison.type) {\n case ComparisonType.UncommittedChanges:\n return [\"uncommitted\", file];\n case ComparisonType.HeadChanges:\n return [\"head\", file];\n case ComparisonType.StackChanges:\n return [\"stack\", file];\n case ComparisonType.Committed:\n return [\"stack\", file, \"--ref\", comparison.hash];\n }\n }\n\n public getAllDiffIds(): Array<PRNumber> {\n return (\n this.getSmartlogCommits()\n ?.commits.value?.map((commit) => commit.pr?.number)\n .filter(notEmpty) ?? []\n );\n }\n\n public runCommand(\n args: Array<string>,\n cwd?: string,\n options?: execa.Options\n ): execa.ExecaChildProcess<string> {\n return runCommand({\n command: this.info.command,\n args,\n logger: this.logger,\n cwd: unwrap(cwd ?? this.info.repoRoot),\n options,\n });\n }\n\n public getConfig(configName: string): Promise<string | undefined> {\n return getConfig(\n this.info.command,\n this.logger,\n this.info.repoRoot,\n configName\n );\n }\n public setConfig(\n level: ConfigLevel,\n configName: string,\n configValue: string\n ): Promise<void> {\n return setConfig(\n this.info.command,\n this.logger,\n this.info.repoRoot,\n level,\n configName,\n configValue\n );\n }\n}\n\nexport function runCommand({\n command: command_,\n args: args_,\n logger,\n cwd,\n options: options_,\n}: {\n command: string;\n args: Array<string>;\n logger?: Logger;\n cwd: string;\n options?: execa.Options;\n}): execa.ExecaChildProcess {\n const { command, args, options } = getExecParams(\n command_,\n args_,\n cwd,\n options_\n );\n if (logger) {\n logger.log(\"run command: \", command, ...args);\n }\n return execa(command, args, options);\n}\n\nasync function findVersion(\n command: string,\n logger: Logger,\n cwd: string\n): Promise<string> {\n try {\n return (\n await runCommand({\n command,\n args: [\"--version\"],\n logger,\n cwd,\n })\n ).stdout;\n } catch (error) {\n logger.error(`Failed to find gt version in ${cwd}`, error);\n throw error;\n }\n}\n\nasync function findRepoInfo(\n command: string,\n logger: Logger,\n cwd: string\n): Promise<RepoInfoFromCLI | undefined> {\n try {\n return JSON.parse(\n (\n await runCommand({\n command,\n args: [\"internal-only\", \"repo-info\"],\n logger,\n cwd,\n })\n ).stdout\n );\n } catch (error) {\n logger.error(`Failed to find repository info in ${cwd}`, error);\n return undefined;\n }\n}\n\nasync function findRepoProfile(\n command: string,\n logger: Logger,\n cwd: string\n): Promise<{\n appUrl: string;\n}> {\n try {\n return JSON.parse(\n (\n await runCommand({\n command,\n args: [\"internal-only\", \"profile\"],\n logger,\n cwd,\n })\n ).stdout\n );\n } catch (error) {\n logger.error(`Failed to find repository profile in ${cwd}`, error);\n return {\n appUrl: \"https://app.graphite.dev/\",\n };\n }\n}\n\nasync function getConfig(\n command: string,\n logger: Logger,\n cwd: string,\n configName: string\n): Promise<string | undefined> {\n try {\n return (\n await runCommand({\n command,\n args: [\"internal-only\", \"config\", configName],\n logger,\n cwd,\n })\n ).stdout.trim();\n } catch {\n // `config` exits with status 1 if config is not set. This is not an error.\n return undefined;\n }\n}\n\n// Eventually add repo\ntype ConfigLevel = \"user\";\nasync function setConfig(\n command: string,\n logger: Logger,\n cwd: string,\n level: ConfigLevel,\n configName: string,\n configValue: string\n): Promise<void> {\n await runCommand({\n command,\n args: [\n \"internal-only\",\n \"set-config\",\n `--level`,\n level,\n configName,\n configValue,\n ],\n logger,\n cwd,\n });\n}\n\nfunction getExecParams(\n command: string,\n args_: Array<string>,\n cwd: string,\n options_?: execa.Options\n): {\n command: string;\n args: Array<string>;\n options: execa.Options;\n} {\n let args = [...args_];\n // expandHomeDir is not supported on windows\n if (process.platform !== \"win32\") {\n // commit/amend have unconventional ways of escaping slashes from messages.\n // We have to 'unescape' to make it work correctly.\n args = args.map((arg) => arg.replace(/\\\\\\\\/g, \"\\\\\"));\n }\n const options = {\n ...options_,\n env: {\n LANG: \"en_US.utf-8\", // make sure to use unicode if user hasn't set LANG themselves\n EDITOR: undefined,\n GRAPHITE_INTERACTIVE: \"true\",\n },\n cwd,\n };\n\n // TODO: we could run with systemd for better OOM protection when on linux\n return { command, args, options };\n}\n\n/**\n * Extract CommitInfos from log calls that use FETCH_TEMPLATE.\n */\nexport function parseCommitInfoOutput(\n logger: Logger,\n output: string\n): SmartlogCommits {\n let commitInfos: Array<BranchInfo> = [];\n try {\n commitInfos = JSON.parse(output);\n } catch (err) {\n logger.error(\"failed to parse commit\");\n }\n return commitInfos;\n}\nexport function parseSuccessorData(\n successorData: string\n): SuccessorInfo | undefined {\n const [successorString] = successorData.split(\",\", 1); // we're only interested in the first available mutation\n if (!successorString) {\n return undefined;\n }\n const successor = successorString.split(\":\");\n return {\n hash: successor[1],\n type: successor[0],\n };\n}\n\n/**\n * Returns absolute path for a repo-relative file path.\n * If the path \"escapes\" the repository's root dir, returns null\n * Used to validate that a file path does not \"escape\" the repo, and the file can safely be modified on the filesystem.\n * absolutePathForFileInRepo(\"foo/bar/file.txt\", repo) -> /path/to/repo/foo/bar/file.txt\n * absolutePathForFileInRepo(\"../file.txt\", repo) -> null\n */\nexport function absolutePathForFileInRepo(\n filePath: RepoRelativePath,\n repo: Repository,\n pathMod = path\n): AbsolutePath | null {\n // Note that resolve() is contractually obligated to return an absolute path.\n const fullPath = pathMod.resolve(repo.info.repoRoot, filePath);\n // Prefix checks on paths can be footguns on Windows for C:\\\\ vs c:\\\\, but since\n // we use the same exact path check here and in the resolve, there should be\n // no incompatibility here.\n if (fullPath.startsWith(repo.info.repoRoot + pathMod.sep)) {\n return fullPath;\n } else {\n return null;\n }\n}\n\nexport function repoRelativePathForAbsolutePath(\n absolutePath: AbsolutePath,\n repo: Repository,\n pathMod = path\n): RepoRelativePath {\n return pathMod.relative(repo.info.repoRoot, absolutePath);\n}\n\nfunction isProcessError(s: unknown): s is { stderr: string } {\n return s != null && typeof s === \"object\" && \"stderr\" in s;\n}\n\nfunction computeNewConflicts(\n previousConflicts: MergeConflicts,\n commandOutput: Status,\n fetchStartTimestamp: number\n): MergeConflicts | undefined {\n const newConflictData = commandOutput;\n if (!newConflictData?.conflicts) {\n return undefined;\n }\n\n const newConflicts = newConflictData.files.filter(\n (file) => file.status === \"UNRESOLVED\"\n );\n const conflicts: MergeConflicts = {\n state: \"loaded\",\n files: [],\n fetchStartTimestamp,\n fetchCompletedTimestamp: Date.now(),\n };\n if (previousConflicts?.files != null && previousConflicts.files.length > 0) {\n // we saw conflicts before, some of which might now be resolved. Preserve previous ordering.\n const newConflictSet = new Set(\n newConflicts.map((conflict) => conflict.path)\n );\n conflicts.files = previousConflicts.files.map((conflict) =>\n newConflictSet.has(conflict.path)\n ? { path: conflict.path, status: \"UNRESOLVED\" }\n : // 'R' is overloaded to mean \"removed\" for `gt status` but 'Resolved' for `gt resolve --list`\n // let's re-write this to make the UI layer simpler.\n { path: conflict.path, status: \"RESOLVED\" }\n );\n } else {\n conflicts.files = newConflicts.map((conflict) => ({\n path: conflict.path,\n status: \"UNRESOLVED\",\n }));\n }\n\n return conflicts;\n}\n","import type { Logger } from \"@withgraphite/gti-shared\";\nimport type {\n AbsolutePath,\n RepositoryError,\n ValidatedRepoInfo,\n} from \"@withgraphite/gti-shared\";\n\nimport { Repository } from \"./Repository\";\nimport { TypedEventEmitter } from \"./TypedEventEmitter\";\nimport { ensureTrailingPathSep } from \"./fs\";\n\n/**\n * Reference-counting access to a {@link Repository}, via a Promise.\n * Be sure to `unref()` when no longer needed.\n */\nexport interface RepositoryReference {\n promise: Promise<Repository | RepositoryError>;\n unref: () => unknown;\n}\n\n/**\n * We return `RepositoryReference`s synchronously before we have the Repository,\n * but reference counts should be associated with the actual async constructed Repository,\n * which is why we can't return RefCounted<Repository> directly.\n */\nclass RepositoryReferenceImpl implements RepositoryReference {\n constructor(\n public promise: Promise<Repository | RepositoryError>,\n private disposeFunc: () => void\n ) {}\n public unref() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeFunc();\n }\n }\n\n internalReference: RefCounted<Repository> | undefined;\n disposed = false;\n}\n\nclass RefCounted<T extends { dispose: () => void }> {\n constructor(public value: T) {}\n private references = 0;\n\n public isDisposed = false;\n public ref() {\n this.references++;\n }\n public getNumberOfReferences() {\n return this.references;\n }\n public dispose() {\n this.references--;\n if (!this.isDisposed && this.references === 0) {\n this.isDisposed = true;\n this.value.dispose();\n }\n }\n}\n\n/**\n * Allow re-using Repository instances by storing instances by path,\n * and controlling how Repositories are created.\n *\n * Some async work is needed to construct repositories (finding repo root dir),\n * so it's possible to duplicate some work if multiple repos are constructed at similar times.\n * We still enable Repository re-use in this case by double checking for pre-existing Repos at the last second.\n */\nclass RepositoryCache {\n // allow mocking Repository in tests\n constructor(private RepositoryType = Repository) {}\n\n /**\n * Previously distributed RepositoryReferences, keyed by repository root path\n * Note that Repositories do not define their own `cwd`, and can be re-used across cwds.\n */\n private reposByRoot = new Map<AbsolutePath, RefCounted<Repository>>();\n private activeReposEmitter = new TypedEventEmitter<\"change\", undefined>();\n\n private lookup(dirGuess: AbsolutePath): RefCounted<Repository> | undefined {\n for (const repo of this.reposByRoot.values()) {\n if (\n dirGuess === repo.value.info.repoRoot ||\n dirGuess.startsWith(ensureTrailingPathSep(repo.value.info.repoRoot))\n ) {\n if (!repo.isDisposed) {\n return repo;\n }\n }\n }\n return undefined;\n }\n\n /**\n * Create a new Repository, or re-use if one already exists.\n * Repositories are reference-counted to ensure they can be disposed when no longer needed.\n */\n getOrCreate(cmd: string, logger: Logger, cwd: string): RepositoryReference {\n // Fast path: if this cwd is already a known repo root, we can use it directly.\n // This only works if the cwd happens to be the repo root.\n const found = this.lookup(cwd);\n if (found) {\n found.ref();\n return new RepositoryReferenceImpl(Promise.resolve(found.value), () =>\n found.dispose()\n );\n }\n\n // More typically, we can re-use a Repository among different cwds:\n\n // eslint-disable-next-line prefer-const\n let ref: RepositoryReferenceImpl;\n const lookupRepoInfoAndReuseIfPossible = async (): Promise<\n Repository | RepositoryError\n > => {\n // TODO: we should rate limit how many getRepoInfos we run at a time, and make other callers just wait.\n // this would guard against querying lots of redundant paths within the same repo.\n // This is probably not necessary right now, but would be useful for a VS Code extension where we need to query\n // individual file paths to add diff gutters.\n const repoInfo = await this.RepositoryType.getRepoInfo(cmd, logger, cwd);\n // important: there should be no `await` points after here, to ensure there is no race when re-using Repositories.\n if (repoInfo.type !== \"success\") {\n // No repository found at this root, or some other error prevents the repo from being created\n return repoInfo;\n }\n\n if (ref.disposed) {\n // If the reference is disposed, the caller gave up while waiting for the repo to be created.\n // make sure we don't create a dangling Repository.\n return {\n type: \"unknownError\",\n error: new Error(\"Repository already disposed\"),\n };\n }\n\n // Now that we've spent some async time to determine this repo's actual root,\n // we can check if we already have a reference to it saved.\n // This way, we can still re-use a Repository, and only risk duplicating `getRepoInfo` work.\n const newlyFound = this.lookup(repoInfo.repoRoot);\n if (newlyFound) {\n // if it is found now, it means either the cwd differs from the repo root (lookup fails), or\n // another instance was created at the same time and finished faster than this one (lookup failed before, but succeeds now).\n\n newlyFound.ref();\n ref.internalReference = newlyFound;\n return newlyFound.value;\n }\n\n // This is where we actually start new subscriptions and trigger work, so we should only do this\n // once we're sure we don't have a repository to re-use.\n const repo = new this.RepositoryType(\n repoInfo as ValidatedRepoInfo, // repoInfo is now guaranteed to have these root/dotdir set\n logger\n );\n\n const internalRef = new RefCounted(repo);\n internalRef.ref();\n ref.internalReference = internalRef;\n this.reposByRoot.set(repoInfo.repoRoot, internalRef);\n this.activeReposEmitter.emit(\"change\");\n return repo;\n };\n ref = new RepositoryReferenceImpl(\n lookupRepoInfoAndReuseIfPossible(),\n () => {\n if (ref.internalReference) {\n ref.internalReference.dispose();\n }\n ref.unref();\n }\n );\n return ref;\n }\n\n /**\n * Lookup a cached repository without creating a new one if it doens't exist\n */\n public cachedRepositoryForPath(path: AbsolutePath): Repository | undefined {\n const ref = this.lookup(path);\n return ref?.value;\n }\n\n public onChangeActiveRepos(\n cb: (repos: Array<Repository>) => unknown\n ): () => unknown {\n const onChange = () => {\n cb([...this.reposByRoot.values()].map((ref) => ref.value));\n };\n this.activeReposEmitter.on(\"change\", onChange);\n // start with initial repos set\n onChange();\n return () => this.activeReposEmitter.off(\"change\", onChange);\n }\n\n /** Clean up all known repos. Mostly useful for testing. */\n clearCache() {\n this.reposByRoot.forEach((value) => value.dispose());\n this.reposByRoot = new Map();\n this.activeReposEmitter.removeAllListeners();\n }\n\n public numberOfActiveServers(): number {\n let numActive = 0;\n for (const repo of this.reposByRoot.values()) {\n numActive += repo.getNumberOfReferences();\n }\n return numActive;\n }\n}\n\nexport const __TEST__ = { RepositoryCache };\n\nexport const repositoryCache = new RepositoryCache();\n","import type {\n ClientToServerMessage,\n ClientToServerMessageWithPayload,\n Disposable,\n FetchedCommits,\n FetchedUncommittedChanges,\n} from \"@withgraphite/gti-shared\";\nimport type { ChangedFiles } from \"@withgraphite/gti-cli-shared-types\";\nimport type { ClientConnection } from \".\";\nimport type { ServerSideTracker } from \"./analytics/serverSideTracker\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\nimport type { RepositoryReference } from \"./RepositoryCache\";\nimport type { ServerPlatform } from \"./serverPlatform\";\n\nimport { revsetArgsForComparison } from \"@withgraphite/gti-shared\";\nimport { randomId, unwrap } from \"@withgraphite/gti-shared\";\nimport {\n deserializeFromString,\n serializeToString,\n} from \"@withgraphite/gti-shared\";\nimport type {\n MergeConflicts,\n PlatformSpecificClientToServerMessages,\n RepositoryError,\n Result,\n ServerToClientMessage,\n} from \"@withgraphite/gti-shared\";\nimport fs from \"fs\";\nimport { absolutePathForFileInRepo, Repository } from \"./Repository\";\nimport { repositoryCache } from \"./RepositoryCache\";\nimport { findPublicAncestor } from \"./utils\";\n\ntype IncomingMessageWithPayload = ClientToServerMessageWithPayload;\nexport type IncomingMessage = ClientToServerMessage;\nexport type OutgoingMessage = ServerToClientMessage;\n\ntype GeneralMessage = IncomingMessage &\n (\n | { type: \"changeCwd\" }\n | { type: \"requestRepoInfo\" }\n | { type: \"requestApplicationInfo\" }\n | { type: \"fileBugReport\" }\n | { type: \"track\" }\n );\ntype WithRepoMessage = Exclude<IncomingMessage, GeneralMessage>;\n\n/**\n * Return true if a ClientToServerMessage is a ClientToServerMessageWithPayload\n */\nfunction expectsBinaryPayload(\n message: unknown\n): message is ClientToServerMessageWithPayload {\n return (\n message != null &&\n typeof message === \"object\" &&\n (message as ClientToServerMessageWithPayload).hasBinaryPayload === true\n );\n}\n\n/**\n * Message passing channel built on top of ClientConnection.\n * Use to send and listen for well-typed events with the client\n *\n * Note: you must set the current repository to start sending data back to the client.\n */\nexport default class ServerToClientAPI {\n private listenersByType = new Map<\n string,\n Set<(message: IncomingMessage) => void | Promise<void>>\n >();\n private incomingListener: Disposable;\n\n /** Disposables that must be disposed whenever the current repo is changed */\n private repoDisposables: Array<Disposable> = [];\n private subscriptions = new Map<string, Disposable>();\n private activeRepoRef: RepositoryReference | undefined;\n\n private queuedMessages: Array<IncomingMessage> = [];\n private currentState:\n | { type: \"loading\" }\n | { type: \"repo\"; repo: Repository; cwd: string }\n | { type: \"error\"; error: RepositoryError } = { type: \"loading\" };\n\n private pageId = randomId();\n\n constructor(\n private platform: ServerPlatform,\n private connection: ClientConnection,\n private tracker: ServerSideTracker,\n private logger: Logger\n ) {\n // messages with binary payloads are sent as two post calls. We first get the JSON message, then the binary payload,\n // which we will reconstruct together.\n let messageExpectingBinaryFollowup: ClientToServerMessageWithPayload | null =\n null;\n this.incomingListener = this.connection.onDidReceiveMessage(\n (buf, isBinary) => {\n if (isBinary) {\n if (messageExpectingBinaryFollowup == null) {\n connection.logger?.error(\n \"Error: got a binary message when not expecting one\"\n );\n return;\n }\n // TODO: we don't handle queueing up messages with payloads...\n this.handleIncomingMessageWithPayload(\n messageExpectingBinaryFollowup,\n buf\n );\n messageExpectingBinaryFollowup = null;\n return;\n } else if (messageExpectingBinaryFollowup != null) {\n connection.logger?.error(\n \"Error: didnt get binary payload after a message that requires one\"\n );\n messageExpectingBinaryFollowup = null;\n return;\n }\n const message = buf.toString(\"utf-8\");\n const data = deserializeFromString(message) as IncomingMessage;\n if (expectsBinaryPayload(data)) {\n // remember this message, and wait to get the binary payload before handling it\n messageExpectingBinaryFollowup = data;\n return;\n }\n\n // When the client is connected, we want to immediately start listening to messages.\n // However, we can't properly respond to these messages until we have a repository set up.\n // Queue up messages until a repository is set.\n if (this.currentState.type === \"loading\") {\n this.queuedMessages.push(data);\n } else {\n try {\n this.handleIncomingMessage(data);\n } catch (err) {\n connection.logger?.error(\n \"error handling incoming message: \",\n data,\n err\n );\n }\n }\n }\n );\n }\n\n private setRepoError(error: RepositoryError) {\n this.disposeRepoDisposables();\n\n this.currentState = { type: \"error\", error };\n\n this.tracker.context.setRepo(undefined);\n\n this.processQueuedMessages();\n }\n\n private setCurrentRepo(repo: Repository, cwd: string) {\n this.disposeRepoDisposables();\n\n this.currentState = { type: \"repo\", repo, cwd };\n\n this.tracker.context.setRepo(repo);\n\n if (repo.codeReviewProvider != null) {\n this.repoDisposables.push(\n repo.codeReviewProvider.onChangeDiffSummaries((value) => {\n this.postMessage({ type: \"fetchedDiffSummaries\", summaries: value });\n })\n );\n }\n\n this.repoDisposables.push(\n repo.subscribeToHeadCommit((head) => {\n const allCommits = repo.getSmartlogCommits();\n const ancestor = findPublicAncestor(allCommits?.commits.value, head);\n this.tracker.track(\"HeadCommitChanged\", {\n extras: {\n hash: head.branch,\n public: ancestor?.branch,\n },\n });\n })\n );\n\n this.processQueuedMessages();\n }\n\n postMessage(message: OutgoingMessage) {\n void this.connection.postMessage(serializeToString(message));\n }\n\n /** Get a repository reference for a given cwd, and set that as the active repo. */\n setActiveRepoForCwd(newCwd: string) {\n if (this.activeRepoRef !== undefined) {\n this.activeRepoRef.unref();\n }\n this.logger.info(`Setting active repo cwd to ${newCwd}`);\n // Set as loading right away while we determine the new cwd's repo\n // This ensures new messages coming in will be queued and handled only with the new repository\n this.currentState = { type: \"loading\" };\n const command = this.connection.command ?? \"gt\";\n this.activeRepoRef = repositoryCache.getOrCreate(\n command,\n this.logger,\n newCwd\n );\n void this.activeRepoRef.promise.then((repoOrError) => {\n if (repoOrError instanceof Repository) {\n this.setCurrentRepo(repoOrError, newCwd);\n } else {\n this.setRepoError(repoOrError);\n }\n });\n }\n\n dispose() {\n this.incomingListener.dispose();\n this.disposeRepoDisposables();\n\n if (this.activeRepoRef !== undefined) {\n this.activeRepoRef.unref();\n }\n }\n\n private disposeRepoDisposables() {\n this.repoDisposables.forEach((disposable) => disposable.dispose());\n this.repoDisposables = [];\n\n this.subscriptions.forEach((sub) => sub.dispose());\n this.subscriptions.clear();\n }\n\n private processQueuedMessages() {\n for (const message of this.queuedMessages) {\n try {\n this.handleIncomingMessage(message);\n } catch (err) {\n this.connection.logger?.error(\n \"error handling queued message: \",\n message,\n err\n );\n }\n }\n this.queuedMessages = [];\n }\n\n private handleIncomingMessageWithPayload(\n message: IncomingMessageWithPayload,\n payload: ArrayBuffer\n ) {\n switch (message.type) {\n case \"uploadFile\": {\n const { id, filename } = message;\n const uploadFile: null | ((value: any, opts: any) => Promise<string>) =\n null as null | ((value: any) => Promise<string>);\n if (uploadFile == null) {\n return;\n }\n this.tracker\n .operation(\"UploadImage\", \"UploadImageError\", {}, () =>\n uploadFile(unwrap(this.connection.logger), {\n filename,\n data: payload,\n })\n )\n .then((result: string) => {\n this.connection.logger?.info(\n \"sucessfully uploaded file\",\n filename,\n result\n );\n this.postMessage({\n type: \"uploadFileResult\",\n id,\n result: { value: result },\n });\n })\n .catch((error: Error) => {\n this.connection.logger?.info(\n \"error uploading file\",\n filename,\n error\n );\n this.postMessage({\n type: \"uploadFileResult\",\n id,\n result: { error },\n });\n });\n break;\n }\n }\n }\n\n private handleIncomingMessage(data: IncomingMessage) {\n this.handleIncomingGeneralMessage(data as GeneralMessage);\n const { currentState } = this;\n switch (currentState.type) {\n case \"repo\": {\n const { repo, cwd } = currentState;\n this.handleIncomingMessageWithRepo(data as WithRepoMessage, repo, cwd);\n break;\n }\n\n // If the repo is in the loading or error state, the client may still send\n // platform messages such as `platform/openExternal` that should be processed.\n case \"loading\":\n case \"error\":\n if (data.type.startsWith(\"platform/\")) {\n void this.platform.handleMessageFromClient(\n /*repo=*/ undefined,\n data as PlatformSpecificClientToServerMessages,\n (message) => this.postMessage(message),\n (dispose: () => unknown) => {\n this.repoDisposables.push({ dispose });\n }\n );\n this.notifyListeners(data);\n }\n break;\n }\n }\n\n /**\n * Handle messages which can be handled regardless of if a repo was successfully created or not\n */\n private handleIncomingGeneralMessage(data: GeneralMessage) {\n switch (data.type) {\n case \"track\": {\n this.tracker.trackData(data.data);\n break;\n }\n case \"changeCwd\": {\n this.setActiveRepoForCwd(data.cwd);\n break;\n }\n case \"requestRepoInfo\": {\n switch (this.currentState.type) {\n case \"repo\":\n this.postMessage({\n type: \"repoInfo\",\n info: this.currentState.repo.info,\n cwd: this.currentState.cwd,\n });\n break;\n case \"error\":\n this.postMessage({\n type: \"repoInfo\",\n info: this.currentState.error,\n });\n break;\n }\n break;\n }\n case \"requestApplicationInfo\": {\n this.postMessage({\n type: \"applicationInfo\",\n platformName: this.platform.platformName,\n version: this.connection.version,\n });\n break;\n }\n case \"fileBugReport\": {\n // Internal.fileABug?.(\n // data.data,\n // data.uiState,\n // this.tracker,\n // this.logger,\n // (progress: FileABugProgress) => {\n // this.connection.logger?.info('file a bug progress: ', JSON.stringify(progress));\n // this.postMessage({type: 'fileBugReportProgress', ...progress});\n // },\n // );\n break;\n }\n }\n }\n\n /**\n * Handle messages which require a repository to have been successfully set up to run\n */\n private handleIncomingMessageWithRepo(\n data: WithRepoMessage,\n repo: Repository,\n cwd: string\n ) {\n const { logger } = repo;\n switch (data.type) {\n case \"subscribe\": {\n const { subscriptionID, kind } = data;\n switch (kind) {\n case \"uncommittedChanges\": {\n const postUncommittedChanges = (\n result: FetchedUncommittedChanges\n ) => {\n this.postMessage({\n type: \"subscriptionResult\",\n kind: \"uncommittedChanges\",\n subscriptionID,\n data: result,\n });\n };\n\n const uncommittedChanges = repo.getUncommittedChanges();\n if (uncommittedChanges != null) {\n postUncommittedChanges(uncommittedChanges);\n }\n const disposables: Array<Disposable> = [];\n\n // send changes as they come in from watchman\n disposables.push(\n repo.subscribeToUncommittedChanges(postUncommittedChanges)\n );\n // trigger a fetch on startup\n void repo.fetchUncommittedChanges();\n\n disposables.push(\n repo.subscribeToUncommittedChangesBeginFetching(() =>\n this.postMessage({\n type: \"beganFetchingUncommittedChangesEvent\",\n })\n )\n );\n this.subscriptions.set(subscriptionID, {\n dispose: () => {\n disposables.forEach((d) => d.dispose());\n },\n });\n break;\n }\n case \"smartlogCommits\": {\n const postSmartlogCommits = (result: FetchedCommits) => {\n this.postMessage({\n type: \"subscriptionResult\",\n kind: \"smartlogCommits\",\n subscriptionID,\n data: result,\n });\n };\n\n const smartlogCommits = repo.getSmartlogCommits();\n if (smartlogCommits != null) {\n postSmartlogCommits(smartlogCommits);\n }\n const disposables: Array<Disposable> = [];\n // send changes as they come from file watcher\n disposables.push(\n repo.subscribeToSmartlogCommitsChanges(postSmartlogCommits)\n );\n // trigger a fetch on startup\n void repo.fetchSmartlogCommits();\n\n disposables.push(\n repo.subscribeToSmartlogCommitsBeginFetching(() =>\n this.postMessage({ type: \"beganFetchingSmartlogCommitsEvent\" })\n )\n );\n\n this.subscriptions.set(subscriptionID, {\n dispose: () => {\n disposables.forEach((d) => d.dispose());\n },\n });\n break;\n }\n case \"mergeConflicts\": {\n const postMergeConflicts = (\n conflicts: MergeConflicts | undefined\n ) => {\n this.postMessage({\n type: \"subscriptionResult\",\n kind: \"mergeConflicts\",\n subscriptionID,\n data: conflicts,\n });\n };\n\n const mergeConflicts = repo.getMergeConflicts();\n if (mergeConflicts != null) {\n postMergeConflicts(mergeConflicts);\n }\n\n this.subscriptions.set(\n subscriptionID,\n repo.onChangeConflictState(postMergeConflicts)\n );\n break;\n }\n }\n break;\n }\n case \"unsubscribe\": {\n const subscription = this.subscriptions.get(data.subscriptionID);\n subscription?.dispose();\n this.subscriptions.delete(data.subscriptionID);\n break;\n }\n case \"runOperation\": {\n const { operation } = data;\n void repo.runOrQueueOperation(\n operation,\n (progress) => {\n this.postMessage({ type: \"operationProgress\", ...progress });\n if (progress.kind === \"queue\") {\n this.tracker.track(\"QueueOperation\", {\n extras: { operation: operation.trackEventName },\n });\n }\n },\n this.tracker,\n cwd\n );\n break;\n }\n case \"abortRunningOperation\": {\n const { operationId } = data;\n repo.abortRunningOpeation(operationId);\n break;\n }\n case \"getConfig\": {\n void repo\n .getConfig(data.name)\n .catch(() => undefined)\n .then((value) => {\n logger.info(\"got config\", data.name, value);\n this.postMessage({ type: \"gotConfig\", name: data.name, value });\n });\n break;\n }\n case \"fetchRepoMessage\": {\n const repoMessage: Promise<Result<string>> = repo\n .runCommand([\"internal-only\", \"repo-message\"])\n .then((o) => ({ value: o.stdout }))\n .catch((error) => {\n logger?.error(\"error fetching repo message\", error.toString());\n return { error };\n });\n void repoMessage.then((data) =>\n this.postMessage({\n type: \"fetchedRepoMessage\",\n message: data.value || \"\",\n })\n );\n break;\n }\n case \"fetchUpgradePrompt\": {\n const upgradePrompt: Promise<Result<string>> = repo\n .runCommand([\"internal-only\", \"upgrade-prompt\"])\n .then((o) => ({ value: o.stdout }))\n .catch((error) => {\n logger?.error(\"error fetching upgrade prompt\", error.toString());\n return { error };\n });\n void upgradePrompt.then((data) =>\n this.postMessage({\n type: \"fetchedUpgradePrompt\",\n message: data.value || \"\",\n })\n );\n break;\n }\n case \"setConfig\": {\n logger.info(\"set config\", data.name, data.value);\n repo.setConfig(\"user\", data.name, data.value).catch((err) => {\n logger.error(\"error setting config\", data.name, data.value, err);\n });\n break;\n }\n case \"deleteFile\": {\n const { filePath } = data;\n const absolutePath = absolutePathForFileInRepo(filePath, repo);\n // security: don't trust client messages to allow us to delete files outside the repository\n if (absolutePath == null) {\n logger.warn(\"can't delete file outside of the repo\", filePath);\n return;\n }\n\n fs.promises\n .rm(absolutePath)\n .then(() => {\n logger.info(\"deleted file from filesystem\", absolutePath);\n })\n .catch((err) => {\n logger.error(\"unable to delete file\", absolutePath, err);\n });\n break;\n }\n case \"requestComparison\": {\n const { comparison } = data;\n const diff: Promise<Result<string>> = repo\n .runCommand([\n \"internal-only\",\n \"diff\",\n ...revsetArgsForComparison(comparison),\n ])\n .then((o) => ({ value: o.stdout }))\n .catch((error) => {\n logger?.error(\"error running diff\", error.toString());\n return { error };\n });\n void diff.then((data) =>\n this.postMessage({\n type: \"comparison\",\n comparison,\n data: { diff: data },\n })\n );\n break;\n }\n case \"requestChangedFiles\": {\n const { branch } = data;\n const resultPromise: Promise<ChangedFiles> = repo\n .runCommand([\"internal-only\", \"changed-files\", branch])\n .then((o) => JSON.parse(o.stdout))\n .catch((error) => {\n logger?.error(\"error running diff\", error.toString());\n return { error };\n });\n void resultPromise.then((result) =>\n this.postMessage({\n type: \"changedFiles\",\n branch,\n data: result,\n })\n );\n break;\n }\n case \"requestComparisonContextLines\": {\n const {\n id: { path: relativePath, comparison },\n start,\n numLines,\n } = data;\n\n // TODO: For context lines, before/after sides of the comparison\n // are identical... except for line numbers.\n // Typical comparisons with '.' would be much faster (nearly instant)\n // by reading from the filesystem rather than using cat,\n // we just need the caller to ask with \"after\" line numbers instead of \"before\".\n // Note: we would still need to fall back to cat for comparisons that do not involve\n // the working copy.\n const cat: Promise<string> = repo\n .cat(relativePath, comparison)\n .catch(() => \"\");\n\n void cat.then((content) =>\n this.postMessage({\n type: \"comparisonContextLines\",\n lines: content.split(\"\\n\").slice(start - 1, start - 1 + numLines),\n path: relativePath,\n })\n );\n break;\n }\n case \"refresh\": {\n logger?.log(\"refresh requested\");\n void repo.fetchSmartlogCommits();\n void repo.fetchUncommittedChanges();\n repo.codeReviewProvider?.triggerDiffSummariesFetch(\n repo.getAllDiffIds()\n );\n break;\n }\n case \"pageVisibility\": {\n repo.setPageFocus(this.pageId, data.state);\n break;\n }\n case \"fetchCommitMessageTemplate\": {\n repo\n .runCommand([\"internal-only\", \"templates\"])\n .then((result) => {\n const templates: Record<string, string> = JSON.parse(result.stdout);\n this.postMessage({\n type: \"fetchedCommitMessageTemplate\",\n templates: Object.fromEntries(\n Object.entries(templates).map(([path, contents]) => [\n path,\n contents.replace(repo.IGNORE_COMMIT_MESSAGE_LINES_REGEX, \"\"),\n ])\n ),\n });\n })\n .catch((err) => {\n logger?.error(\"Could not fetch commit message template\", err);\n });\n break;\n }\n case \"typeahead\": {\n // Current repo's code review provider should be able to handle all\n // TypeaheadKinds for the fields in its defined schema.\n void repo.codeReviewProvider\n ?.typeahead?.(data.kind, data.query)\n ?.then((result) =>\n this.postMessage({\n type: \"typeaheadResult\",\n id: data.id,\n result,\n })\n );\n break;\n }\n case \"fetchDiffSummaries\": {\n repo.codeReviewProvider?.triggerDiffSummariesFetch(\n repo.getAllDiffIds()\n );\n break;\n }\n case \"loadMoreCommits\": {\n const rangeInDays = repo.nextVisibleCommitRangeInDays();\n this.postMessage({ type: \"commitsShownRange\", rangeInDays });\n this.postMessage({ type: \"beganLoadingMoreCommits\" });\n void repo.fetchSmartlogCommits();\n this.tracker.track(\"LoadMoreCommits\", {\n extras: { daysToFetch: rangeInDays ?? \"Infinity\" },\n });\n return;\n }\n default: {\n void this.platform.handleMessageFromClient(\n repo,\n data,\n (message) => this.postMessage(message),\n (dispose: () => unknown) => {\n this.repoDisposables.push({ dispose });\n }\n );\n break;\n }\n }\n\n this.notifyListeners(data);\n }\n\n private notifyListeners(data: IncomingMessage): void {\n const listeners = this.listenersByType.get(data.type);\n if (listeners) {\n listeners.forEach((handle) => handle(data));\n }\n }\n}\n","import { EventEmitter } from \"events\";\n\n/**\n * Like {@link EventEmitter}, but with type checking for one particular subscription type,\n * plus errors.\n * ```\n * const myEmitter = new TypedEventEmitter<'data', number>();\n * myEmitter.on('data', (data: number) => ...); // typechecks 'data' param and callback\n * myEmitter.on('error', (error: Error) => ...); // errors are always allowed too\n * // Fields other than 'data' and 'error' are type errors.\n * ```\n */\nexport declare interface TypedEventEmitter<\n EventName extends string,\n EventType\n> {\n on(event: EventName, listener: (data: EventType) => void): this;\n on(event: \"error\", listener: (error: Error) => void): this;\n off(event: EventName, listener: (data: EventType) => void): this;\n off(event: \"error\", listener: (error: Error) => void): this;\n\n emit(\n ...args: EventType extends undefined\n ? [event: EventName] | [event: EventName, data: EventType]\n : [event: EventName, data: EventType]\n ): boolean;\n emit(event: \"error\", error: Error): boolean;\n}\n\nexport class TypedEventEmitter<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventName extends string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventType\n> extends EventEmitter {}\n","import type { PageFocusTracker } from \"./PageFocusTracker\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\nimport type { PageVisibility, RepoInfo } from \"@withgraphite/gti-shared\";\n\nimport { ONE_MINUTE_MS } from \"@withgraphite/gti-shared\";\nimport { Watchman } from \"./watchman\";\nimport path from \"path\";\nimport { debounce } from \"@withgraphite/gti-shared\";\n\nconst DEFAULT_POLL_INTERVAL = 5 * ONE_MINUTE_MS;\nconst VISIBLE_POLL_INTERVAL = 1 * ONE_MINUTE_MS;\nconst FOCUSED_POLL_INTERVAL = 0.25 * ONE_MINUTE_MS;\nconst ON_FOCUS_REFETCH_THROTTLE = 10_000;\nconst ON_VISIBLE_REFETCH_THROTTLE = 20_000;\n\nexport type KindOfChange =\n | \"uncommitted changes\"\n | \"commits\"\n | \"merge conflicts\"\n | \"everything\";\n\n/**\n * Handles watching for changes to files on disk which should trigger refetching data,\n * and polling for changes when watching is not reliable.\n */\nexport class WatchForChanges {\n static WATCHMAN_DEFER = `hg.update`; // TODO: update to sl\n public watchman: Watchman;\n\n private disposables: Array<() => unknown> = [];\n\n constructor(\n private repoInfo: RepoInfo,\n private logger: Logger,\n private pageFocusTracker: PageFocusTracker,\n private changeCallback: (kind: KindOfChange) => unknown,\n watchman?: Watchman | undefined\n ) {\n this.watchman = watchman ?? new Watchman(logger);\n\n void this.setupWatchmanSubscriptions();\n this.setupPolling();\n this.pageFocusTracker.onChange(this.poll.bind(this));\n }\n\n private timeout: NodeJS.Timeout | undefined;\n private lastFetch = new Date().valueOf();\n\n /**\n * Combine different signals to determine what interval to poll for information\n */\n private setupPolling() {\n this.timeout = setTimeout(this.poll, DEFAULT_POLL_INTERVAL);\n }\n\n /**\n * Re-trigger fetching data from the repository,\n * depending on how recently that data was last fetched,\n * and whether any GTI windows are focused or visible.\n *\n * This function calls itself on an interval to check whether we should fetch changes,\n * but it can also be called in response to events like focus being gained.\n */\n public poll = (kind?: PageVisibility | \"force\") => {\n // calculate how long we'd like to be waiting from what we know of the windows.\n let desiredNextTickTime = DEFAULT_POLL_INTERVAL;\n if (this.watchman.status !== \"healthy\") {\n if (this.pageFocusTracker.hasPageWithFocus()) {\n desiredNextTickTime = FOCUSED_POLL_INTERVAL;\n } else if (this.pageFocusTracker.hasVisiblePage()) {\n desiredNextTickTime = VISIBLE_POLL_INTERVAL;\n }\n }\n\n const now = Date.now();\n const elapsedTickTime = now - this.lastFetch;\n\n if (\n kind === \"force\" ||\n // we've been waiting longer than desired\n elapsedTickTime >= desiredNextTickTime ||\n // the moment a window gains focus or visibility, consider polling immediately\n (kind === \"focused\" && elapsedTickTime >= ON_FOCUS_REFETCH_THROTTLE) ||\n (kind === \"visible\" && elapsedTickTime >= ON_VISIBLE_REFETCH_THROTTLE)\n ) {\n // it's time to fetch\n this.changeCallback(\"everything\");\n this.lastFetch = Date.now();\n\n clearTimeout(this.timeout);\n this.timeout = setTimeout(this.poll, desiredNextTickTime);\n } else {\n // we have some time left before we we would expect to need to poll, schedule next poll\n clearTimeout(this.timeout);\n this.timeout = setTimeout(\n this.poll,\n desiredNextTickTime - elapsedTickTime\n );\n }\n };\n\n private async setupWatchmanSubscriptions() {\n if (this.repoInfo.type !== \"success\") {\n return;\n }\n const { repoRoot, dotdir } = this.repoInfo;\n\n if (repoRoot == null || dotdir == null) {\n this.logger.error(\n `skipping watchman subscription since ${repoRoot} is not a repository`\n );\n return;\n }\n const relativeDotdir = path.relative(repoRoot, dotdir);\n\n const FILE_CHANGE_WATCHMAN_SUBSCRIPTION = \"graphite-smartlog-file-change\";\n const DIRSTATE_WATCHMAN_SUBSCRIPTION = \"graphite-smartlog-dirstate-change\";\n try {\n const handleRepositoryStateChange = debounce(() => {\n // if the repo changes, also recheck files. E.g. if you commit, your uncommitted changes will also change.\n this.changeCallback(\"everything\");\n\n // reset timer for polling\n this.lastFetch = new Date().valueOf();\n }, 100); // debounce so that multiple quick changes don't trigger multiple fetches for no reason\n const dirstateSubscription = await this.watchman.watchDirectoryRecursive(\n repoRoot,\n DIRSTATE_WATCHMAN_SUBSCRIPTION,\n {\n fields: [\"name\"],\n expression: [\n \"name\",\n [\n `${relativeDotdir}/bookmarks.current`,\n `${relativeDotdir}/bookmarks`,\n `${relativeDotdir}/dirstate`,\n `${relativeDotdir}/merge`,\n ],\n \"wholename\",\n ],\n defer: [WatchForChanges.WATCHMAN_DEFER],\n empty_on_fresh_instance: true,\n }\n );\n dirstateSubscription.emitter.on(\"change\", (changes) => {\n if (changes.includes(`${relativeDotdir}/merge`)) {\n this.changeCallback(\"merge conflicts\");\n }\n if (changes.includes(`${relativeDotdir}/dirstate`)) {\n handleRepositoryStateChange();\n }\n });\n dirstateSubscription.emitter.on(\n \"fresh-instance\",\n handleRepositoryStateChange\n );\n\n const handleUncommittedChanges = () => {\n this.changeCallback(\"uncommitted changes\");\n\n // reset timer for polling\n this.lastFetch = new Date().valueOf();\n };\n const uncommittedChangesSubscription =\n await this.watchman.watchDirectoryRecursive(\n repoRoot,\n FILE_CHANGE_WATCHMAN_SUBSCRIPTION,\n {\n // We only need to know that a change happened (not the list of files) so that we can trigger `status`\n fields: [\"name\"],\n expression: [\n \"allof\",\n // This watchman subscription is used to determine when and which\n // files to fetch new statuses for. There is no reason to include\n // directories in these updates, and in fact they may make us overfetch\n // statuses.\n // This line restricts this subscription to only return files.\n [\"type\", \"f\"],\n [\"not\", [\"dirname\", relativeDotdir]],\n // Even though we tell it not to match .git, modifying a file inside .git\n // will emit an event for the folder itself, which we want to ignore.\n [\"not\", [\"match\", relativeDotdir, \"basename\"]],\n ],\n defer: [WatchForChanges.WATCHMAN_DEFER],\n empty_on_fresh_instance: true,\n }\n );\n uncommittedChangesSubscription.emitter.on(\n \"change\",\n handleUncommittedChanges\n );\n uncommittedChangesSubscription.emitter.on(\n \"fresh-instance\",\n handleUncommittedChanges\n );\n\n this.disposables.push(() => {\n this.logger.log(\"unsubscribe watchman\");\n void this.watchman.unwatch(repoRoot, DIRSTATE_WATCHMAN_SUBSCRIPTION);\n void this.watchman.unwatch(repoRoot, FILE_CHANGE_WATCHMAN_SUBSCRIPTION);\n });\n } catch (err) {\n this.logger.error(\"failed to setup watchman subscriptions\", err);\n }\n }\n\n public dispose() {\n this.disposables.forEach((dispose) => dispose());\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n }\n}\n","import type { ApplicationInfo } from \"@withgraphite/gti-shared\";\n\nimport os from \"os\";\nimport { randomId, unwrap } from \"@withgraphite/gti-shared\";\n\nexport function getUsername(): string {\n try {\n return os.userInfo().username;\n } catch (osInfoError) {\n try {\n const { env } = process;\n return unwrap(env.LOGNAME || env.USER || env.LNAME || env.USERNAME);\n } catch (processEnvError) {\n throw new Error(String(processEnvError) + String(osInfoError));\n }\n }\n}\n\nexport function generateAnalyticsInfo(\n platformName: string,\n version: string\n): ApplicationInfo {\n return {\n platform: platformName,\n version,\n repo: undefined,\n /**\n * Random id for this GTI session, created at startup.\n * Note: this is only generated on the server, so client-logged events share the ID with the server.\n */\n sessionId: randomId(),\n unixname: getUsername(),\n osArch: os.arch(),\n osType: os.platform(),\n osRelease: os.release(),\n hostname: os.hostname(),\n };\n}\n","import type { Repository } from \"../Repository\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\nimport type { ServerPlatform } from \"../serverPlatform\";\nimport type {\n ApplicationInfo,\n FullTrackData,\n TrackDataWithEventName,\n} from \"@withgraphite/gti-shared\";\n\nimport { generateAnalyticsInfo } from \"./environment\";\nimport { Tracker } from \"@withgraphite/gti-shared\";\n\nexport type ServerSideTracker = Tracker<ServerSideContext>;\n\nclass ServerSideContext {\n constructor(public logger: Logger, public data: ApplicationInfo) {}\n\n public setRepo(repo: Repository | undefined): void {\n this.data.repo = repo?.codeReviewProvider?.getSummaryName();\n }\n}\n\nconst noOp = (_data: FullTrackData): Promise<unknown> | void => {\n /* In open source builds, analytics tracking is completely disabled/removed. */\n};\n\n/**\n * Creates a Tracker which includes server-side-only cached application data like platform, username, etc,\n * and sends data to the underlying analytics engine outside of GTI.\n * This can not be global since two client connections may have different cached data.\n */\nexport function makeServerSideTracker(\n logger: Logger,\n platform: ServerPlatform,\n version: string,\n // prettier-ignore\n writeToServer = noOp\n): ServerSideTracker {\n return new Tracker(\n (data: TrackDataWithEventName, context: ServerSideContext) => {\n const { logger } = context;\n // log track event, since tracking events can be used as datapoints when reviewing logs\n logger.log(\n \"[track]\",\n data.eventName,\n data.errorName ?? \"\",\n data.extras != null ? JSON.stringify(data.extras) : \"\"\n );\n try {\n Promise.resolve(writeToServer({ ...data, ...context.data })).catch(\n (err) => void err\n );\n } catch {\n // pass\n }\n },\n new ServerSideContext(\n logger,\n generateAnalyticsInfo(platform.platformName, version)\n )\n );\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\n/**\n * Check if file path exists.\n * May still throw non-ENOENT fs access errors.\n * Note: this works on Node 10.x\n */\nexport function exists(file: string): Promise<boolean> {\n return fs.promises\n .stat(file)\n .then(() => true)\n .catch((error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") {\n return false;\n } else {\n throw error;\n }\n });\n}\n\n/**\n * Add a trailing path sep (/ or \\) if one does not exist\n */\nexport function ensureTrailingPathSep(p: string): string {\n if (p.endsWith(path.sep)) {\n return p;\n }\n return p + path.sep;\n}\n\n/**\n * Add a trailing path sep (/ or \\) if one does not exist\n */\nexport function removeLeadingPathSep(p: string): string {\n if (p.startsWith(path.sep)) {\n return p.slice(1);\n }\n return p;\n}\n","import type {\n CodeReviewSystem,\n Disposable,\n Result,\n GitHubDiffSummary,\n OperationCommandProgressReporter,\n} from \"@withgraphite/gti-shared\";\n\nimport { TypedEventEmitter } from \"../TypedEventEmitter\";\nimport type { PRInfo, PRNumber } from \"@withgraphite/gti-cli-shared-types\";\nimport type { TypeaheadKind, TypeaheadResult } from \"@withgraphite/gti-shared\";\nimport type execa from \"execa\";\n\ntype GitHubCodeReviewSystem = CodeReviewSystem & { type: \"github\" };\nexport class GitHubCodeReviewProvider {\n constructor(\n private codeReviewSystem: GitHubCodeReviewSystem,\n private runCommand: (\n args: Array<string>,\n cwd?: string,\n options?: execa.Options\n ) => execa.ExecaChildProcess<string>\n ) {}\n private diffSummaries = new TypedEventEmitter<\"data\", GitHubDiffSummary[]>();\n\n onChangeDiffSummaries(\n callback: (result: Result<GitHubDiffSummary[]>) => unknown\n ): Disposable {\n const handleData = (data: GitHubDiffSummary[]) => callback({ value: data });\n const handleError = (error: Error) => callback({ error });\n this.diffSummaries.on(\"data\", handleData);\n this.diffSummaries.on(\"error\", handleError);\n return {\n dispose: () => {\n this.diffSummaries.off(\"data\", handleData);\n this.diffSummaries.off(\"error\", handleError);\n },\n };\n }\n\n public async triggerDiffSummariesFetch(_diffs: Array<PRNumber>) {\n const value = await this.runCommand([\"internal-only\", \"prs\"]);\n const prs = JSON.parse(value.stdout) as PRInfo[];\n this.diffSummaries.emit(\"data\", prs);\n }\n\n public dispose() {\n this.diffSummaries.removeAllListeners();\n }\n\n public getSummaryName(): string {\n return `github:${this.codeReviewSystem.hostname}/${this.codeReviewSystem.owner}/${this.codeReviewSystem.repo}`;\n }\n\n /** Run a command not handled within graphite, such as a separate submit handler */\n public runExternalCommand(\n _cwd: string,\n _args: Array<string>,\n _onProgress: OperationCommandProgressReporter,\n _signal: AbortSignal\n ): Promise<void> {\n throw new Error(\n \"GitHub code review provider does not support running external commands\"\n );\n }\n\n public async typeahead(\n _kind: TypeaheadKind,\n _query: string\n ): Promise<Array<TypeaheadResult>> {\n return [];\n }\n}\n\n// function githubCheckSuitesToCIStatus(\n// checkSuites: CheckSuiteConnection | undefined | null,\n// ): DiffSignalSummary {\n// let anyInProgress = false;\n// let anyWarning = false;\n// for (const checkSuite of checkSuites?.nodes ?? []) {\n// switch (checkSuite?.status) {\n// case CheckStatusState.Completed:\n// {\n// switch (checkSuite?.conclusion) {\n// case CheckConclusionState.Success:\n// break;\n// case CheckConclusionState.Neutral:\n// case CheckConclusionState.Stale:\n// case CheckConclusionState.Skipped:\n// anyWarning = true;\n// break;\n// case CheckConclusionState.ActionRequired:\n// case CheckConclusionState.StartupFailure:\n// case CheckConclusionState.Cancelled:\n// case CheckConclusionState.TimedOut:\n// case CheckConclusionState.Failure:\n// return 'failed'; // no need to look at other signals\n// }\n// }\n// break;\n// case CheckStatusState.Waiting:\n// case CheckStatusState.Requested:\n// case CheckStatusState.Queued:\n// case CheckStatusState.Pending:\n// case CheckStatusState.InProgress:\n// anyInProgress = true;\n// break;\n// }\n// }\n// return anyWarning ? 'warning' : anyInProgress ? 'running' : 'pass';\n// }\n","import type { Logger } from \"@withgraphite/gti-shared\";\nimport type { ServerPlatform } from \"./serverPlatform\";\n\nimport { makeServerSideTracker } from \"./analytics/serverSideTracker\";\nimport { fileLogger, stdoutLogger } from \"./logger\";\nimport { browserServerPlatform } from \"./serverPlatform\";\nimport ServerToClientAPI from \"./ServerToClientAPI\";\nimport { runCommand } from \"./Repository\";\n\nexport { DEFAULT_PORT, runProxyMain } from \"../proxy/startServer\";\n\nexport interface ClientConnection {\n /**\n * Used to send a message from the server to the client.\n *\n * Designed to match\n * https://code.visualstudio.com/api/references/vscode-api#Webview.postMessage\n */\n postMessage(message: string): Promise<boolean>;\n\n /**\n * Designed to match\n * https://code.visualstudio.com/api/references/vscode-api#Webview.onDidReceiveMessage\n */\n onDidReceiveMessage(\n hander: (event: Buffer, isBinary: boolean) => void | Promise<void>\n ): {\n dispose(): void;\n };\n\n /**\n * Which command to use to run `gt`\n */\n command?: string;\n /**\n * Platform-specific version string.\n * For `gt interactive web`, this is the `gt` version.\n * For the VS Code extension, this is the extension version.\n */\n version: string;\n logFileLocation?: string;\n logger?: Logger;\n cwd: string;\n\n platform?: ServerPlatform;\n}\n\nexport function onClientConnection(connection: ClientConnection): () => void {\n const logger =\n connection.logger ??\n (connection.logFileLocation\n ? fileLogger(connection.logFileLocation)\n : stdoutLogger);\n connection.logger = logger;\n const platform = connection?.platform ?? browserServerPlatform;\n const version = connection?.version ?? \"unknown\";\n logger.log(`establish client connection for ${connection.cwd}`);\n logger.log(`platform '${platform.platformName}', version '${version}'`);\n\n const tracker = makeServerSideTracker(logger, platform, version, (data) => {\n return runCommand({\n command: connection.command || \"gt\",\n args: [\n \"internal-only\",\n \"log-action\",\n data.eventName || data.errorName || \"UNKNOWN_CLI_EVENT\",\n (data.timestamp ? new Date(data.timestamp) : new Date()).toISOString(),\n JSON.stringify(data),\n ],\n cwd: connection.cwd,\n });\n });\n tracker.track(\"ClientConnection\", { extras: { cwd: connection.cwd } });\n\n // start listening to messages\n let api: ServerToClientAPI | null = new ServerToClientAPI(\n platform,\n connection,\n tracker,\n logger\n );\n api.setActiveRepoForCwd(connection.cwd);\n\n return () => {\n api?.dispose();\n api = null;\n };\n}\n","import fs from \"fs\";\nimport util from \"util\";\nimport type { Logger } from \"@withgraphite/gti-shared\";\n\nexport const stdoutLogger = console;\n\nexport function fileLogger(filename: string): Logger {\n const log = (...args: Parameters<typeof console.log>) => {\n const str = util.format(...args) + \"\\n\";\n void fs.promises.appendFile(filename, str);\n };\n\n return {\n info: log,\n log,\n warn: log,\n error: log,\n\n getLogFileContents: () => {\n return fs.promises.readFile(filename, \"utf-8\");\n },\n };\n}\n","import type { Repository } from \"./Repository\";\nimport type {\n AbsolutePath,\n PlatformSpecificClientToServerMessages,\n ServerToClientMessage,\n} from \"@withgraphite/gti-shared\";\n\nimport { spawn } from \"child_process\";\nimport pathModule from \"path\";\nimport { unwrap } from \"@withgraphite/gti-shared\";\n\n/**\n * Platform-specific server-side API for each target: vscode extension host, electron standalone, browser, ...\n * See also platform.ts\n */\nexport interface ServerPlatform {\n platformName: string;\n handleMessageFromClient(\n repo: Repository | undefined,\n message: PlatformSpecificClientToServerMessages,\n postMessage: (message: ServerToClientMessage) => void,\n onDispose: (disapose: () => unknown) => void\n ): void | Promise<void>;\n}\n\nexport const browserServerPlatform: ServerPlatform = {\n platformName: \"browser\",\n handleMessageFromClient: (\n repo: Repository | undefined,\n message: PlatformSpecificClientToServerMessages\n ) => {\n switch (message.type) {\n case \"platform/openFile\": {\n const path: AbsolutePath = pathModule.join(\n unwrap(repo?.info.repoRoot),\n message.path\n );\n let command;\n if (command == null) {\n // use OS-builtin open command to open files\n // (which may open different file extensions with different programs)\n // TODO: add a config option to determine which program to launch\n switch (process.platform) {\n case \"darwin\":\n command = \"/usr/bin/open\";\n break;\n case \"win32\":\n command = \"notepad.exe\";\n break;\n case \"linux\":\n command = \"xdg-open\";\n break;\n }\n }\n if (command) {\n // Because the GTI server is likely running in the background and is\n // no longer attached to a terminal, this is designed for the case\n // where the user opens the file in a windowed editor (hence\n // `windowsHide: false`, which is the default for\n // `child_process.spawn()`, but not for `execa()`):\n //\n // - For users using a simple one-window-per-file graphical text\n // editor, like notepad.exe, this is relatively straightforward.\n // - For users who prefer a terminal-based editor, like Emacs,\n // a conduit like EmacsClient would be required.\n //\n // Further, killing GTI should not kill the editor, so this follows\n // the pattern for spawning an independent, long-running process in\n // Node.js as described here:\n //\n // https://nodejs.org/docs/latest-v10.x/api/child_process.html#child_process_options_detached\n repo?.logger.log(\"open file\", path);\n // TODO: Report error if spawn() fails?\n const proc = spawn(command, [path], {\n detached: true,\n stdio: \"ignore\",\n windowsHide: false,\n windowsVerbatimArguments: true,\n });\n // Silent error. Don't crash the server process.\n proc.on(\"error\", (err) => {\n repo?.logger.log(\"failed to open\", path, err);\n });\n proc.unref();\n }\n break;\n }\n }\n },\n};\n","import type { BranchInfo } from \"@withgraphite/gti-cli-shared-types\";\nimport type { SmartlogCommits } from \"@withgraphite/gti-shared\";\nimport type { ExecaChildProcess } from \"execa\";\n\nimport type execa from \"execa\";\n\nimport os from \"os\";\nimport { truncate } from \"@withgraphite/gti-shared\";\n\nexport function sleep(timeMs: number): Promise<void> {\n return new Promise((res) => setTimeout(res, timeMs));\n}\n\nexport function firstOfIterable<T>(\n iterable: IterableIterator<T>\n): T | undefined {\n return iterable.next().value;\n}\n\n/**\n * Limits async function execution parallelism to only one at a time.\n * Hence, if a call is already running, it will wait for it to finish,\n * then start the next async execution, but if called again while not finished,\n * it will return the scheduled execution promise.\n *\n * Sample Usage:\n * ```\n * let i = 1;\n * const oneExecAtATime = serializeAsyncCall(() => {\n * return new Promise((resolve, reject) => {\n * setTimeout(200, () => resolve(i++));\n * });\n * });\n *\n * const result1Promise = oneExecAtATime(); // Start an async, and resolve to 1 in 200 ms.\n * const result2Promise = oneExecAtATime(); // Schedule the next async, and resolve to 2 in 400 ms.\n * const result3Promise = oneExecAtATime(); // Reuse scheduled promise and resolve to 2 in 400 ms.\n * ```\n */\nexport function serializeAsyncCall<T>(\n asyncFun: () => Promise<T>\n): () => Promise<T> {\n let scheduledCall: Promise<T> | undefined = undefined;\n let pendingCall: Promise<undefined> | undefined = undefined;\n const startAsyncCall = () => {\n const resultPromise = asyncFun();\n pendingCall = resultPromise.then(\n () => (pendingCall = undefined),\n () => (pendingCall = undefined)\n );\n return resultPromise;\n };\n const callNext = () => {\n scheduledCall = undefined;\n return startAsyncCall();\n };\n const scheduleNextCall = () => {\n if (scheduledCall == null) {\n if (pendingCall == null) {\n throw new Error(\"pendingCall must not be null!\");\n }\n scheduledCall = pendingCall.then(callNext, callNext);\n }\n return scheduledCall;\n };\n return () => {\n if (pendingCall == null) {\n return startAsyncCall();\n } else {\n return scheduleNextCall();\n }\n };\n}\n\n/**\n * Kill `child` on `AbortSignal`.\n *\n * This is slightly more robust than execa 6.0 and nodejs' `signal` support:\n * if a process was stopped (by `SIGTSTP` or `SIGSTOP`), it can still be killed.\n */\nexport function handleAbortSignalOnProcess(\n child: ExecaChildProcess,\n signal: AbortSignal\n) {\n signal.addEventListener(\"abort\", () => {\n if (os.platform() == \"win32\") {\n // Signals are ignored on Windows.\n // execa's default forceKillAfterTimeout behavior does not\n // make sense for Windows. Disable it explicitly.\n child.kill(\"SIGKILL\", { forceKillAfterTimeout: false });\n } else {\n // If the process is stopped (ex. Ctrl+Z, kill -STOP), make it\n // continue first so it can respond to signals including SIGKILL.\n child.kill(\"SIGCONT\");\n // A good citizen process should exit soon after recieving SIGTERM.\n // In case it doesn't, send SIGKILL after 5 seconds.\n child.kill(\"SIGTERM\", { forceKillAfterTimeout: 5000 });\n }\n });\n}\n\n/**\n * Given a list of commits and a starting commit,\n * traverse up the chain of `parents` until we find a public commit\n */\nexport function findPublicAncestor(\n allCommits: SmartlogCommits | undefined,\n from: BranchInfo\n): BranchInfo | undefined {\n let publicCommit: BranchInfo | undefined;\n if (allCommits != null) {\n const map = new Map(allCommits.map((commit) => [commit.branch, commit]));\n\n let current: BranchInfo | undefined = from;\n while (current != null) {\n if (current.partOfTrunk) {\n publicCommit = current;\n break;\n }\n if (current.parents[0] == null) {\n break;\n }\n current = map.get(current.parents[0]);\n }\n }\n\n return publicCommit;\n}\n\n/**\n * Run a command that is expected to produce JSON output.\n * Return a JSON object. On error, the JSON object has property \"error\".\n */\nexport function parseExecJson<T>(\n exec: execa.ExecaChildProcess,\n reply: (parsed?: T, error?: string) => void\n) {\n exec\n .then((result) => {\n const stdout = result.stdout;\n try {\n const parsed = JSON.parse(stdout);\n if (parsed.error != null) {\n reply(undefined, parsed.error);\n } else {\n reply(parsed as T);\n }\n } catch (err) {\n const msg = `Cannot parse ${truncate(\n result.escapedCommand\n )} output. (error: ${err}, stdout: ${stdout})`;\n reply(undefined, msg);\n }\n })\n .catch((err) => {\n // Try extracting error from stdout '{error: message}'.\n try {\n const parsed = JSON.parse(err.stdout);\n if (parsed.error != null) {\n reply(undefined, parsed.error);\n return;\n }\n } catch {\n // pass\n }\n // Fallback to general error.\n const msg = `Cannot run ${truncate(err.escapedCommand)}. (error: ${err})`;\n reply(undefined, msg);\n });\n}\n","import type { Logger } from \"@withgraphite/gti-shared\";\n\nimport { firstOfIterable, serializeAsyncCall, sleep } from \"./utils\";\nimport { EventEmitter } from \"events\";\nimport watchman from \"fb-watchman\";\nimport path from \"path\";\n\nexport type WatchmanSubscriptionOptions = {\n fields?: Array<string>;\n expression?: Array<unknown>;\n since?: string;\n defer?: Array<string>;\n defer_vcs?: boolean;\n relative_root?: string;\n empty_on_fresh_instance?: boolean;\n};\n\nexport type WatchmanSubscription = {\n root: string;\n /**\n * The relative path from subscriptionRoot to subscriptionPath.\n * This is the 'relative_path' as described at\n * https://facebook.github.io/watchman/docs/cmd/watch-project.html#using-watch-project.\n * Notably, this value should be undefined if subscriptionRoot is the same as\n * subscriptionPath.\n */\n pathFromSubscriptionRootToSubscriptionPath: string | undefined;\n path: string;\n name: string;\n subscriptionCount: number;\n options: WatchmanSubscriptionOptions;\n emitter: EventEmitter;\n};\n\nexport type WatchmanSubscriptionResponse = {\n root: string;\n subscription: string;\n files?: Array<FileChange>;\n \"state-enter\"?: string;\n \"state-leave\"?: string;\n canceled?: boolean;\n clock?: string;\n is_fresh_instance?: boolean;\n};\n\nexport type FileChange = {\n name: string;\n new: boolean;\n exists: boolean;\n};\n\nconst WATCHMAN_SETTLE_TIME_MS = 2500;\nconst DEFAULT_WATCHMAN_RECONNECT_DELAY_MS = 100;\nconst MAXIMUM_WATCHMAN_RECONNECT_DELAY_MS = 60 * 1000;\n\nexport class Watchman {\n private client: watchman.Client;\n\n private serializedReconnect: () => Promise<void>;\n private reconnectDelayMs: number = DEFAULT_WATCHMAN_RECONNECT_DELAY_MS;\n private subscriptions: Map<string, WatchmanSubscription> = new Map();\n private lastKnownClockTimes: Map<string, string> = new Map();\n\n public readonly status:\n | \"initializing\"\n | \"reconnecting\"\n | \"healthy\"\n | \"ended\"\n | \"errored\" = \"initializing\";\n\n constructor(private logger: Logger) {\n this.client = new watchman.Client({\n // find watchman using PATH\n watchmanBinaryPath: undefined,\n });\n this.initWatchmanClient();\n this.serializedReconnect = serializeAsyncCall(async () => {\n let tries = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await this.reconnectClient();\n return;\n } catch (error) {\n this.logger.warn(\n `reconnectClient failed (try #${tries}):`,\n error instanceof Error ? error.message : error\n );\n tries++;\n\n this.reconnectDelayMs *= 2; // exponential backoff\n if (this.reconnectDelayMs > MAXIMUM_WATCHMAN_RECONNECT_DELAY_MS) {\n this.reconnectDelayMs = MAXIMUM_WATCHMAN_RECONNECT_DELAY_MS;\n }\n\n this.logger.info(\n \"Calling reconnectClient from _serializedReconnect in %dms\",\n this.reconnectDelayMs\n );\n // eslint-disable-next-line no-await-in-loop\n await sleep(this.reconnectDelayMs);\n }\n }\n });\n }\n\n setStatus(status: typeof this.status): void {\n this.logger.log(\"Watchman status: \", status);\n (this.status as string) = status;\n }\n\n public async watchDirectoryRecursive(\n localDirectoryPath: string,\n rawSubscriptionName: string,\n subscriptionOptions?: WatchmanSubscriptionOptions\n ): Promise<WatchmanSubscription> {\n // Subscriptions should be unique by name and by folder\n const subscriptionName = this.fixupName(\n localDirectoryPath,\n rawSubscriptionName\n );\n const existingSubscription = this.getSubscription(subscriptionName);\n if (existingSubscription) {\n existingSubscription.subscriptionCount++;\n\n return existingSubscription;\n } else {\n const { watch: watchRoot, relative_path: relativePath } =\n await this.watchProject(localDirectoryPath);\n const clock = await this.clock(watchRoot);\n const options: WatchmanSubscriptionOptions = {\n ...subscriptionOptions,\n // Do not add `mode` here, it is very unfriendly to watches on Eden (see https://fburl.com/0z023yy0)\n fields:\n subscriptionOptions != null && subscriptionOptions.fields != null\n ? subscriptionOptions.fields\n : [\"name\", \"new\", \"exists\"],\n since: clock,\n };\n if (relativePath) {\n options.relative_root = relativePath;\n }\n // Try this thing out where we always set empty_on_fresh_instance. Eden will be a lot happier\n // if we never ask Watchman to do something that results in a glob(**) near the root.\n options.empty_on_fresh_instance = true;\n\n // relativePath is undefined if watchRoot is the same as directoryPath.\n const subscription: WatchmanSubscription = {\n root: watchRoot,\n pathFromSubscriptionRootToSubscriptionPath: relativePath,\n path: localDirectoryPath,\n name: subscriptionName,\n subscriptionCount: 1,\n options,\n emitter: new EventEmitter(),\n };\n this.setSubscription(subscriptionName, subscription);\n await this.subscribe(watchRoot, subscriptionName, options);\n this.logger.log(\"watchman subscription %s established\", subscriptionName);\n this.setStatus(\"healthy\");\n\n return subscription;\n }\n }\n\n public async unwatch(path: string, name: string): Promise<void> {\n const subscriptionName = this.fixupName(path, name);\n const subscription = this.getSubscription(subscriptionName);\n\n if (subscription == null) {\n this.logger.error(\n `No watcher entity found with path [${path}] name [${name}]`\n );\n return;\n }\n\n if (--subscription.subscriptionCount === 0) {\n await this.unsubscribe(subscription.path, subscription.name);\n this.deleteSubscription(subscriptionName);\n this.logger.log(\"watchman subscription %s destroyed\", subscriptionName);\n }\n }\n\n private initWatchmanClient(): void {\n this.client.on(\"end\", () => {\n this.setStatus(\"ended\");\n this.logger.info(\"Watchman client ended\");\n this.client.removeAllListeners();\n void this.serializedReconnect();\n });\n this.client.on(\"error\", (error: Error) => {\n const statusBeforeError = this.status;\n this.logger.error(\"Error while talking to watchman: \", error);\n this.setStatus(\"errored\");\n // If Watchman encounters an error in the middle of a command, it may never finish!\n // The client must be immediately killed here so that the command fails and\n // `serializeAsyncCall` can be unblocked. Otherwise, we end up in a deadlock.\n this.client.removeAllListeners();\n this.client.end();\n if (statusBeforeError === \"initializing\") {\n // If we get an error while we're first initializing watchman, it probably means\n // it's not installed properly. No use spamming reconnection failures too.\n return;\n }\n // Those are errors in deserializing a stream of changes.\n // The only possible recovery here is reconnecting a new client,\n // but the failed to serialize events will be missed.\n void this.serializedReconnect();\n });\n this.client.on(\"subscription\", this.onSubscriptionResult.bind(this));\n }\n\n private async reconnectClient(): Promise<void> {\n // If we got an error after making a subscription, the reconnect needs to\n // remove that subscription to try again, so it doesn't keep leaking subscriptions.\n this.logger.info(\"Ending existing watchman client to reconnect a new one\");\n this.setStatus(\"reconnecting\");\n this.client.removeAllListeners();\n this.client.end();\n this.client = new watchman.Client({\n // find watchman using PATH\n watchmanBinaryPath: undefined,\n });\n this.logger.error(\n \"Watchman client disconnected, reconnecting a new client!\"\n );\n this.initWatchmanClient();\n this.logger.info(\"Watchman client re-initialized, restoring subscriptions\");\n await this.restoreSubscriptions();\n }\n\n private async restoreSubscriptions(): Promise<void> {\n const watchSubscriptions = Array.from(this.subscriptions.values());\n const numSubscriptions = watchSubscriptions.length;\n this.logger.info(\n `Attempting to restore ${numSubscriptions} Watchman subscriptions.`\n );\n let numRestored = 0;\n await Promise.all(\n watchSubscriptions.map(\n async (subscription: WatchmanSubscription, index: number) => {\n // Note that this call to `watchman watch-project` could fail if the\n // subscription.path has been unmounted/deleted.\n await this.watchProject(subscription.path);\n\n // We have already missed the change events from the disconnect time,\n // watchman could have died, so the last clock result is not valid.\n await sleep(WATCHMAN_SETTLE_TIME_MS);\n\n // Register the subscriptions after the filesystem settles.\n const { name, options, root } = subscription;\n\n // Assuming we had previously connected and gotten an event, we can\n // reconnect `since` that time, so that we get any events we missed.\n subscription.options.since =\n this.lastKnownClockTimes.get(root) || (await this.clock(root));\n\n this.logger.info(\n `Subscribing to ${name}: (${index + 1}/${numSubscriptions})`\n );\n await this.subscribe(root, name, options);\n ++numRestored;\n this.logger.info(\n `Subscribed to ${name}: (${numRestored}/${numSubscriptions}) complete.`\n );\n }\n )\n );\n if (numRestored > 0 && numRestored === numSubscriptions) {\n this.logger.info(\n \"Successfully reconnected all %d subscriptions.\",\n numRestored\n );\n // if everything got restored, reset the reconnect backoff time\n this.reconnectDelayMs = DEFAULT_WATCHMAN_RECONNECT_DELAY_MS;\n this.setStatus(\"healthy\");\n }\n }\n\n private getSubscription(entryPath: string): WatchmanSubscription | undefined {\n return this.subscriptions.get(path.normalize(entryPath));\n }\n\n private setSubscription(\n entryPath: string,\n subscription: WatchmanSubscription\n ): void {\n const key = path.normalize(entryPath);\n this.subscriptions.set(key, subscription);\n }\n\n private deleteSubscription(entryPath: string): void {\n const key = path.normalize(entryPath);\n this.subscriptions.delete(key);\n }\n\n private onSubscriptionResult(response: WatchmanSubscriptionResponse): void {\n const subscription = this.getSubscription(response.subscription);\n if (subscription == null) {\n this.logger.error(\"Subscription not found for response:!\", response);\n return;\n }\n\n // save the clock time of this event in case we disconnect in the future\n if (response != null && response.root != null && response.clock != null) {\n this.lastKnownClockTimes.set(response.root, response.clock);\n }\n if (response.is_fresh_instance === true) {\n this.logger.warn(\n `Watch for ${response.root} (${response.subscription}) returned an empty fresh instance.`\n );\n subscription.emitter.emit(\"fresh-instance\");\n } else if (Array.isArray(response.files)) {\n subscription.emitter.emit(\"change\", response.files);\n } else if (response.canceled === true) {\n this.logger.info(\n `Watch for ${response.root} was deleted: triggering a reconnect.`\n );\n // Ending the client will trigger a reconnect.\n this.client.end();\n } else {\n // Only log state transisions once per watchmanClient, since otherwise we'll just get 8x of this message spammed\n if (firstOfIterable(this.subscriptions.values()) === subscription) {\n // TODO(most): use state messages to decide on when to send updates.\n const stateEnter = response[\"state-enter\"];\n const stateLeave = response[\"state-leave\"];\n const stateMessage =\n stateEnter != null\n ? `Entering ${stateEnter}`\n : `Leaving ${stateLeave}`;\n const numSubscriptions = this.subscriptions.size;\n this.logger.info(\n `Subscription state: ${stateMessage} (${numSubscriptions})`\n );\n }\n }\n }\n\n private fixupName(path: string, name: string): string {\n const refinedPath = path.replace(/\\\\/g, \"-\").replace(/\\//g, \"-\");\n return `${refinedPath}-${name}`;\n }\n\n private unsubscribe(\n subscriptionPath: string,\n subscriptionName: string\n ): Promise<unknown> {\n return this.command(\"unsubscribe\", subscriptionPath, subscriptionName);\n }\n\n private async watchProject(\n directoryPath: string\n ): Promise<{ watch: string; relative_path: string }> {\n const response = (await this.command(\"watch-project\", directoryPath)) as {\n watch: string;\n relative_path: string;\n warning?: string;\n };\n if (response.warning) {\n this.logger.error(\"watchman warning: \", response.warning);\n }\n return response;\n }\n\n private async clock(directoryPath: string): Promise<string> {\n const { clock } = (await this.command(\"clock\", directoryPath)) as {\n clock: string;\n };\n return clock;\n }\n\n private subscribe(\n watchRoot: string,\n subscriptionName: string | undefined,\n options: WatchmanSubscriptionOptions\n ): Promise<WatchmanSubscription> {\n this.logger.info(\n `Creating Watchman subscription ${String(\n subscriptionName\n )} under ${watchRoot}`,\n JSON.stringify(options)\n );\n return this.command(\n \"subscribe\",\n watchRoot,\n subscriptionName,\n options\n ) as Promise<WatchmanSubscription>;\n }\n\n /**\n * Promisify calls to watchman client.\n */\n private async command(...args: Array<unknown>): Promise<unknown> {\n try {\n return await new Promise((resolve, reject) => {\n this.client.command(args, (error, response) =>\n error ? reject(error) : resolve(response)\n );\n });\n } catch (error) {\n this.logger.error(\"Watchman command error: \", args, error);\n throw error;\n }\n }\n}\n"],"names":["ComparisonType","exports","revsetArgsForComparison","comparison","type","UncommittedChanges","HeadChanges","StackChanges","Committed","hash","labelForComparison","comparisonIsAgainstHead","LRU","constructor","maxItems","maxHashCollision","Map","get","key","result","undefined","hashKey","getHashKey","valueMap","cache","maybeValue","k","v","delete","set","value","size","next","keys","done","clear","hashCodeFunc","hashCode","apply","cached","arg1","arg2","cachedFunction","cacheDecorator","func","opts","_a","cacheSize","_b","getExtraKeys","cachedFunc","args","stats","every","isCachable","skip","cacheKey","cachedValue","hit","miss","_c","Object","values","filter","_target","_propertyKey","descriptor","originalFunc","cachableTypeNames","Set","arg","typeName","has","__exportStar","Tracker","sendData","context","error","eventName","errorName","data","errorMessage","Error","message","String","track","operation","startTime","Date","now","id","parentId","then","finalResult","endTime","duration","catch","err","Promise","reject","trackAsParent","trackData","childTracker","childData","ctx","timestamp","newAbortController","AbortController","node_abort_controller_1","debounce","wait","leading","timeout","shouldCallLeading","debouncer","callback","clearTimeout","setTimeout","reset","isPending","SelfUpdate","inner","equals","other","otherInner","minimalDisambiguousPaths","paths","options","pathObjects","map","path","separator","guessSeparator","rootPrefixResult","exec","rootPrefix","depth","parts","split","reverse","part","hadLeadingSeparator","startsWith","length","maxDepth","Math","max","pathObject","pathObjectsToProcess","groupedPathObjects","currentDepth","slice","join","add","pathObjectGroup","Array","from","resultPathParts","alwaysShowLeadingSeparator","windowsCount","replace","unixCount","DiffType","DIFF","RENAME_FROM","RENAME_TO","COPY_FROM","COPY_TO","NEW_FILE_MODE","DELETED_FILE_MODE","OLD_MODE","NEW_MODE","HUNK_HEADER","OLD_FILE_HEADER","NEW_FILE_HEADER","DELIMITERS","assert","condition","msg","parsePatch","patch","diffstr","delimiters","match","list","i","parseIndex","index","hunks","push","parseHeader","line","test","parseOldMode","parseNewMode","parseDeletedFileMode","parseNewFileMode","parseCopy","parseRename","parseFileHeader","parseHunks","header","oldFileName","newFileName","arr","oldMode","Modified","newMode","Removed","Added","Copied","Renamed","parseHunk","hunkHeaderLine","hunkHeader","hunk","oldStart","oldLines","newStart","newLines","lines","linedelimiters","addCount","removeCount","indexOf","UNDEFINED_SERIALIZED","__rpcType","serialize","entries","val","stack","valueOf","isArray","a","newObj","propertyName","propertyValue","serializeToString","JSON","stringify","deserialize","specific","e","standardObject","deserializeFromString","parse","CommandRunner","SucceedableRevset","revset","ErrorShortMessages","notEmpty","unwrap","randomId","toString","random","defer","deferred","promise","resolve","basename","s","delimiter","foundIndex","lastIndexOf","findParentWithClassName","start","className","el","classList","contains","parentElement","mapObject","o","fromEntries","generatorContains","gen","zip","iter1","iter2","iterator1","Symbol","iterator","iterator2","result1","result2","truncate","text","maxLength","substring","isPromise"],"sourceRoot":""}
|