{"version":3,"sources":["../../src/environment/node.ts"],"sourcesContent":["import { FirestoreServer } from \"@firestore-emulator/server\";\nimport type {\n  EnvironmentContext,\n  JestEnvironmentConfig,\n} from \"@jest/environment\";\nimport { findFreePorts } from \"find-free-ports\";\nimport { TestEnvironment } from \"jest-environment-node\";\n\nimport type { FirestoreEmulatorEnvironmentConfig } from \"../types\";\n\nexport default class FirestoreEmulatorEnvironment extends TestEnvironment {\n  private server: FirestoreServer;\n\n  constructor(\n    config: FirestoreEmulatorEnvironmentConfig & JestEnvironmentConfig,\n    context: EnvironmentContext,\n  ) {\n    super(config, context);\n    this.server = new FirestoreServer();\n  }\n\n  override async setup() {\n    await super.setup();\n\n    let tryCount = 0;\n    while (tryCount < 50) {\n      const [port] = await findFreePorts(1);\n      if (!port) throw new Error(\"Could not find a free port\");\n      try {\n        await this.server.start(port);\n        this.global.emulator = {\n          host: `0.0.0.0:${port}`,\n          port,\n          state: this.server.state,\n        };\n        return;\n      } catch (err) {\n        if (!(err instanceof Error)) throw err;\n        if (!err.message.startsWith(\"No address added out of total\")) throw err;\n      }\n      tryCount++;\n    }\n    throw new Error(\"Could not find a free port\");\n  }\n\n  override async teardown() {\n    this.server.stop();\n    await super.teardown();\n  }\n}\n"],"mappings":";AAAA,SAAS,uBAAuB;AAKhC,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAIhC,IAAqB,+BAArB,cAA0D,gBAAgB;AAAA,EAChE;AAAA,EAER,YACE,QACA,SACA;AACA,UAAM,QAAQ,OAAO;AACrB,SAAK,SAAS,IAAI,gBAAgB;AAAA,EACpC;AAAA,EAEA,MAAe,QAAQ;AACrB,UAAM,MAAM,MAAM;AAElB,QAAI,WAAW;AACf,WAAO,WAAW,IAAI;AACpB,YAAM,CAAC,IAAI,IAAI,MAAM,cAAc,CAAC;AACpC,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,4BAA4B;AACvD,UAAI;AACF,cAAM,KAAK,OAAO,MAAM,IAAI;AAC5B,aAAK,OAAO,WAAW;AAAA,UACrB,MAAM,WAAW,IAAI;AAAA,UACrB;AAAA,UACA,OAAO,KAAK,OAAO;AAAA,QACrB;AACA;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,EAAE,eAAe,OAAQ,OAAM;AACnC,YAAI,CAAC,IAAI,QAAQ,WAAW,+BAA+B,EAAG,OAAM;AAAA,MACtE;AACA;AAAA,IACF;AACA,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAAA,EAEA,MAAe,WAAW;AACxB,SAAK,OAAO,KAAK;AACjB,UAAM,MAAM,SAAS;AAAA,EACvB;AACF;","names":[]}