{"version":3,"sources":["../src/http.ts"],"sourcesContent":["import * as http from 'http';\nimport invariant from 'invariant';\n\n/**\n * A Promise wrapper for server.listen\n */\nexport async function listen(handler: http.RequestListener | http.Server, port?: number) {\n  const server = typeof handler === 'function' ? http.createServer(handler) : handler;\n  let app: http.Server | undefined;\n  await new Promise((resolve, reject) => {\n    app = server.listen(port);\n    app.once('listening', resolve);\n    app.once('error', reject);\n  });\n\n  const address = app?.address();\n  invariant(address && typeof address === 'object', 'expected address to be an AddressInfo object');\n\n  return {\n    port: address.port,\n    async close() {\n      await new Promise<void>((resolve, reject) => {\n        if (app) {\n          app.close((err) => {\n            if (err) {\n              reject(err);\n            } else {\n              resolve();\n            }\n          });\n        } else {\n          resolve();\n        }\n      });\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AACtB,uBAAsB;AAKtB,eAAsB,OAAO,SAA6C,MAAe;AACvF,QAAM,SAAS,OAAO,YAAY,aAAkB,kBAAa,OAAO,IAAI;AAC5E,MAAI;AACJ,QAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,UAAM,OAAO,OAAO,IAAI;AACxB,QAAI,KAAK,aAAa,OAAO;AAC7B,QAAI,KAAK,SAAS,MAAM;AAAA,EAC1B,CAAC;AAED,QAAM,UAAU,KAAK,QAAQ;AAC7B,uBAAAA,SAAU,WAAW,OAAO,YAAY,UAAU,8CAA8C;AAEhG,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AACZ,YAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAI,KAAK;AACP,cAAI,MAAM,CAAC,QAAQ;AACjB,gBAAI,KAAK;AACP,qBAAO,GAAG;AAAA,YACZ,OAAO;AACL,sBAAQ;AAAA,YACV;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,kBAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":["invariant"]}