// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

export default class NodeURL {
  /**
   * @param {!Object} object
   */
  static patch(object) {
    process(object, '');

    /**
     * @param {!Object} object
     * @param {string} path
     */
    function process(object, path) {
      if (object.url && NodeURL._isPlatformPath(object.url, Host.isWin())) {
        object.url = Common.ParsedURL.platformPathToURL(object.url);
      }
      for (const entry of Object.entries(object)) {
        const key = entry[0];
        const value = entry[1];
        const entryPath = path + '.' + key;
        if (entryPath !== '.result.result.value' && value !== null && typeof value === 'object') {
          process(value, entryPath);
        }
      }
    }
  }

  /**
   * @param {string} fileSystemPath
   * @param {boolean} isWindows
   * @return {boolean}
   */
  static _isPlatformPath(fileSystemPath, isWindows) {
    if (isWindows) {
      const re = /^([a-z]:[\/\\]|\\\\)/i;
      return re.test(fileSystemPath);
    } else {
      return fileSystemPath.length ? fileSystemPath[0] === '/' : false;
    }
  }
}

/* Legacy exported object */
self.Protocol = self.Protocol || {};

/* Legacy exported object */
Protocol = Protocol || {};

/** @constructor */
Protocol.NodeURL = NodeURL;
