{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-server/stop.ts"],
  "sourcesContent": ["import { promisify } from 'node:util';\nimport path from 'node:path';\nimport { globalInfo, globalWarn } from '../logger/index.ts';\nimport { connectStoreController } from '../server/index.ts';\nimport {\n  serverConnectionInfoDir,\n  tryLoadServerJson,\n} from '../store-connection-manager/index.ts';\nimport { getStorePath } from '../store-path/index.ts';\nimport delay from 'delay';\nimport { processExists } from 'process-exists';\nimport killcb from 'tree-kill';\n\nconst kill = promisify(killcb) as (\n  pid: number,\n  signal: string\n) => Promise<void>;\n\nexport async function stop(opts: {\n  storeDir?: string | undefined;\n  dir: string;\n  pnpmHomeDir: string;\n}): Promise<void> {\n  const storeDir = await getStorePath({\n    pkgRoot: opts.dir,\n    storePath: opts.storeDir,\n    pnpmHomeDir: opts.pnpmHomeDir,\n  });\n\n  const connectionInfoDir = serverConnectionInfoDir(storeDir);\n\n  const serverJson = await tryLoadServerJson({\n    serverJsonPath: path.join(connectionInfoDir, 'server.json'),\n    shouldRetryOnNoent: false,\n  });\n\n  if (serverJson === null) {\n    globalInfo(\n      `Nothing to stop. No server is running for the store at ${storeDir}`\n    );\n    return;\n  }\n\n  const storeController = await connectStoreController(\n    serverJson.connectionOptions\n  );\n\n  await storeController.stop();\n\n  if (await serverGracefullyStops(serverJson.pid)) {\n    globalInfo('Server gracefully stopped');\n    return;\n  }\n\n  globalWarn('Graceful shutdown failed');\n\n  await kill(serverJson.pid, 'SIGINT');\n\n  globalInfo('Server process terminated');\n}\n\nasync function serverGracefullyStops(pid: number): Promise<boolean> {\n  if ((await processExists(pid)) !== true) {\n    return true;\n  }\n\n  await delay(5000);\n\n  return (await processExists(pid)) !== true;\n}\n"],
  "mappings": "AAAA,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AACjB,SAAS,YAAY,kBAAkB;AACvC,SAAS,8BAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,OAAO,WAAW;AAClB,SAAS,qBAAqB;AAC9B,OAAO,YAAY;AAEnB,MAAM,OAAO,UAAU,MAAM;AAK7B,eAAsB,KAAK,MAIT;AAChB,QAAM,WAAW,MAAM,aAAa;AAAA,IAClC,SAAS,KAAK;AAAA,IACd,WAAW,KAAK;AAAA,IAChB,aAAa,KAAK;AAAA,EACpB,CAAC;AAED,QAAM,oBAAoB,wBAAwB,QAAQ;AAE1D,QAAM,aAAa,MAAM,kBAAkB;AAAA,IACzC,gBAAgB,KAAK,KAAK,mBAAmB,aAAa;AAAA,IAC1D,oBAAoB;AAAA,EACtB,CAAC;AAED,MAAI,eAAe,MAAM;AACvB;AAAA,MACE,0DAA0D,QAAQ;AAAA,IACpE;AACA;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAAA,IAC5B,WAAW;AAAA,EACb;AAEA,QAAM,gBAAgB,KAAK;AAE3B,MAAI,MAAM,sBAAsB,WAAW,GAAG,GAAG;AAC/C,eAAW,2BAA2B;AACtC;AAAA,EACF;AAEA,aAAW,0BAA0B;AAErC,QAAM,KAAK,WAAW,KAAK,QAAQ;AAEnC,aAAW,2BAA2B;AACxC;AAEA,eAAe,sBAAsB,KAA+B;AAClE,MAAK,MAAM,cAAc,GAAG,MAAO,MAAM;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,GAAI;AAEhB,SAAQ,MAAM,cAAc,GAAG,MAAO;AACxC;",
  "names": []
}
