{"version":3,"sources":["jsdelivr-header.js","/npm/@pre-bundled/hyperswarm-replicator@2.0.2/index.js"],"names":[],"mappings":"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","file":"/npm/@pre-bundled/hyperswarm-replicator@2.0.2/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@pre-bundled/hyperswarm-replicator@2.0.2/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const pump = require(\"./pre-bundled/node_modules/pump\")\nconst hyperswarm = require(\"./pre-bundled/node_modules/hyperswarm\")\nconst Protocol = require(\"./pre-bundled/node_modules/hypercore-protocol\")\nconst { EventEmitter } = require('events')\n\nconst promises = Symbol.for('hypercore.promises')\n\nclass Event {\n  constructor () {\n    this.triggered = false\n    this.fns = new Set()\n  }\n\n  on (fn) {\n    if (this.triggered) return fn()\n    this.fns.add(fn)\n  }\n\n  emit () {\n    this.triggered = true\n    for (const fn of this.fns) fn()\n  }\n}\n\nmodule.exports = class Replicator extends EventEmitter {\n  constructor (options = {}) {\n    super()\n\n    this.swarm = hyperswarm({\n      announceLocalAddress: !!options.announceLocalAddress,\n      preferredPort: 49737,\n      bootstrap: options.bootstrap,\n      queue: {\n        multiplex: true\n      }\n    })\n\n    this.createStream = options.createStream || ((init) => new Protocol(init, options))\n    this.swarm.on('connection', this._onconnection.bind(this))\n    this.swarming = new Map()\n    this.streams = new Set()\n  }\n\n  static replicate (cores, options) {\n    const r = new Replicator({ createStream () { return null } })\n    if (!Array.isArray(cores)) cores = [cores]\n\n    for (const core of cores) {\n      r.add(core, options).catch(() => {})\n    }\n\n    return r\n  }\n\n  get dht () {\n    return this.swarm.network && this.swarm.network.discovery && this.swarm.network.discovery.dht\n  }\n\n  _onconnection (socket, info) {\n    this.emit('connection', socket, info)\n\n    let stream = this.createStream(info.client)\n\n    for (const { core, options, one } of this.swarming.values()) {\n      stream = core.replicate(info.client, { ...options, stream })\n      one.emit()\n    }\n\n    this.emit('replication-stream', stream, info)\n\n    pump(stream, socket, stream)\n    stream.on('discovery-key', this._ondiscoverykey.bind(this, stream))\n\n    this.streams.add(stream)\n    stream.on('close', () => this.streams.delete(stream))\n  }\n\n  _ondiscoverykey (stream, discoveryKey) {\n    const key = discoveryKey.toString('hex')\n\n    if (!this.swarming.has(key)) {\n      this.emit('discovery-key', discoveryKey, stream)\n      return\n    }\n\n    const { core, options, one } = this.swarming.get(key)\n    core.replicate(false, { ...options, stream })\n    one.emit()\n  }\n\n  listen () {\n    this.swarm.listen()\n  }\n\n  destroy () {\n    return new Promise((resolve, reject) => {\n      this.swarm.destroy((err) => {\n        if (err) return reject(err)\n        this.emit('close')\n        resolve()\n      })\n    })\n  }\n\n  async add (core, options = {}) {\n    await ready(core)\n\n    const key = core.discoveryKey.toString('hex')\n    const { announce, lookup } = options\n    const defaultLookup = lookup === undefined && announce === undefined\n    const added = this.swarming.has(key)\n\n    const one = new Event()\n    const all = new Event()\n\n    this.swarming.set(key, { core, options, one, all })\n\n    if (announce || lookup || defaultLookup) {\n      this.swarm.join(core.discoveryKey, { announce: !!announce, lookup: !!lookup || defaultLookup })\n      this.swarm.flush(onflush)\n    } else {\n      onflush()\n    }\n\n    if (core.timeouts) { // current timeout api support ...\n      const { update, get } = core.timeouts\n      if (update) core.timeouts.update = (cb) => one.on(() => update(cb))\n      if (get) core.timeouts.get = (cb) => all.on(() => get(cb))\n    }\n\n    if (!added) {\n      for (const stream of this.streams) {\n        core.replicate(false, { ...options, stream })\n        one.emit()\n      }\n    }\n\n    this.emit('add', core, options)\n\n    function onflush () {\n      one.emit()\n      all.emit()\n    }\n  }\n\n  async remove (core) {\n    await ready(core)\n\n    const key = core.discoveryKey.toString('hex')\n\n    if (!this.swarming.has(key)) return\n\n    const { options } = this.swarming.get(key)\n    this.swarming.delete(key)\n    this.swarm.leave(core.discoveryKey)\n\n    this.emit('remove', core, options)\n  }\n}\n\nfunction ready (core) {\n  if (!core.ready) return\n  if (core[promises]) return core.ready()\n\n  return new Promise((resolve, reject) => {\n    const p = core.ready((err) => {\n      if (err) return reject(err)\n      resolve()\n    })\n\n    if (p && typeof p.then === 'function') {\n      p.then(resolve, reject)\n    }\n  })\n}\n"]}