text: /*
   * Copyright 2020 Adobe. All rights reserved.
   * This file is licensed to you under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License. You may obtain a copy
   * of the License at http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software distributed under
   * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
   * OF ANY KIND, either express or implied. See the License for the specific language
   * governing permissions and limitations under the License.
   */
  const assert = require('assert');
  const nock = require('nock');
  
  function Nock() {
    const scopes = {};
  
    let unmatched;
  
    function noMatchHandler(req) {
      unmatched.push(req);
    }
  
    function nocker(url) {
      let scope = scopes[url];
      if (!scope) {
        scope = nock(url);
        scopes[url] = scope;
      }
      if (!unmatched) {
        unmatched = [];
        nock.emitter.on('no match', noMatchHandler);
      }
      return scope;
    }
  
    nocker.done = () => {
      Object.values(scopes).forEach((s) => s.done());
      if (unmatched) {
        assert.deepStrictEqual(unmatched.map((req) => req.options || req), []);
        nock.emitter.off('no match', noMatchHandler);
      }
    };
  
    return nocker;
  }
  
  module.exports = { Nock };
  