mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-19 14:20:36 -04:00
@@ -10,12 +10,16 @@ import pLimit = require('p-limit')
|
||||
import {StoreController} from 'package-store'
|
||||
import uuid = require('uuid')
|
||||
|
||||
export type StoreServerController = StoreController & {
|
||||
stop (): Promise<void>,
|
||||
}
|
||||
|
||||
export default function (
|
||||
initOpts: {
|
||||
remotePrefix: string,
|
||||
concurrency?: number,
|
||||
},
|
||||
): Promise<StoreController> {
|
||||
): Promise<StoreServerController> {
|
||||
const remotePrefix = initOpts.remotePrefix
|
||||
const limitedFetch = fetch.bind(null, pLimit(initOpts.concurrency || 100))
|
||||
|
||||
@@ -39,6 +43,7 @@ export default function (
|
||||
saveState: async () => {
|
||||
await limitedFetch(`${remotePrefix}/saveState`, {})
|
||||
},
|
||||
stop: () => limitedFetch(`${remotePrefix}/stop`, {}),
|
||||
updateConnections: async (prefix: string, opts: {addDependencies: string[], removeDependencies: string[], prune: boolean}) => {
|
||||
await limitedFetch(`${remotePrefix}/updateConnections`, {
|
||||
opts,
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import logger from '@pnpm/logger'
|
||||
import {
|
||||
RequestPackageOptions,
|
||||
WantedDependency,
|
||||
} from '@pnpm/package-requester'
|
||||
import http = require('http')
|
||||
import {IncomingMessage, Server, ServerResponse} from 'http'
|
||||
|
||||
import {RequestPackageOptions, WantedDependency} from '@pnpm/package-requester'
|
||||
import {StoreController} from 'package-store'
|
||||
|
||||
interface RequestBody {
|
||||
@@ -22,6 +25,7 @@ export default function (
|
||||
path?: string,
|
||||
port?: number,
|
||||
hostname?: string,
|
||||
ignoreStopRequests?: boolean,
|
||||
},
|
||||
) {
|
||||
const manifestPromises = {}
|
||||
@@ -97,6 +101,17 @@ export default function (
|
||||
await store.importPackage(importPackageBody.from, importPackageBody.to, importPackageBody.opts)
|
||||
res.end(JSON.stringify('OK'))
|
||||
break
|
||||
case '/stop':
|
||||
if (opts.ignoreStopRequests) {
|
||||
res.statusCode = 403
|
||||
res.end()
|
||||
break
|
||||
}
|
||||
logger.info('Got request to stop the server')
|
||||
await close()
|
||||
res.end(JSON.stringify('OK'))
|
||||
logger.info('Server stopped')
|
||||
break
|
||||
default:
|
||||
res.statusCode = 404
|
||||
res.end(`${req.url} does not match any route`)
|
||||
@@ -114,7 +129,10 @@ export default function (
|
||||
listener = server.listen(opts.port, opts.hostname)
|
||||
}
|
||||
|
||||
return {
|
||||
close: () => listener.close(() => { return }),
|
||||
return { close }
|
||||
|
||||
function close () {
|
||||
listener.close()
|
||||
return store.close()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user