'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var axios = require('axios');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);

var instance = axios__default["default"];
var T_GIT_BASE_URL = 'https://git.woa.com/api/v3';
/**
 * 处理 baseUrl，去掉尾部斜杠，并在 path 以 /api 开头时去掉 baseUrl 末尾可能重复的 /api/v3 后缀，然后拼接请求路径。
 *
 * 使用场景：tgit 中所有请求统一通过此函数拼接完整 URL，防止 baseUrl 末尾带 /api/v3 导致路径重复。
 *
 * @param {string} baseUrl 基础路径，如 https://git.woa.com 或 https://git.woa.com/api/v3
 * @param {string} path 请求路径，如 /api/v3/projects/xxx/merge_requests
 * @returns {string} 拼接后的完整 URL
 * @example
 *
 * resolveBaseUrl('https://git.woa.com', '/api/v3/projects/xxx')
 * // => 'https://git.woa.com/api/v3/projects/xxx'
 *
 * resolveBaseUrl('https://git.woa.com/api/v3', '/api/v3/projects/xxx')
 * // => 'https://git.woa.com/api/v3/projects/xxx'
 *
 * resolveBaseUrl('https://git.woa.com/api/v3/', '/api/v3/projects/xxx')
 * // => 'https://git.woa.com/api/v3/projects/xxx'
 *
 * // path 不以 /api 开头时，保留 baseUrl 末尾的 /api/v3
 * resolveBaseUrl('https://git.woa.com/api/v3', '/projects/xxx')
 * // => 'https://git.woa.com/api/v3/projects/xxx'
 *
 * // 不传 baseUrl 时，使用统一默认值 T_GIT_BASE_URL
 * resolveBaseUrl(undefined, '/api/v3/projects/xxx')
 * // => 'https://git.woa.com/api/v3/projects/xxx'
 */
function resolveBaseUrl() {
  var baseUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : T_GIT_BASE_URL;
  var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  // 兼容显式传入空字符串的场景：fallback 到默认值
  var effective = baseUrl || T_GIT_BASE_URL;
  // 去掉尾部斜杠
  var url = effective.replace(/\/+$/, '');
  // 仅当 path 以 /api 开头时，才去掉 baseUrl 尾部的 /api/v3（防止重复）
  if (path.startsWith('/api')) {
    url = url.replace(/\/api\/v3$/, '');
  }
  return "".concat(url).concat(path);
}
/**
 * 对 projectName（string | number）进行统一编码，用于拼接到 URL path 中。
 *
 * - 数字：直接转成字符串（项目 ID）
 * - 字符串：按 path 段进行 URI 编码，例如 `group/sub/repo` -> `group%2Fsub%2Frepo`
 *
 * @param {string | number} projectName 项目名称或项目 ID
 * @returns {string} 编码后的字符串
 * @example
 *
 * encodeProject('group/sub/repo') // 'group%2Fsub%2Frepo'
 * encodeProject(12345)            // '12345'
 */
function encodeProject(projectName) {
  return typeof projectName === 'number' ? String(projectName) : encodeURIComponent(projectName);
}
/**
 * 将 base64 字符串按 utf-8 解码（兼容 Node 与浏览器环境）。
 *
 * 工蜂 GET /repository/files 接口返回的 `content` 字段是 base64 编码的，
 * 调用方通常需要解码后再使用，本函数将该逻辑内聚到一处。
 *
 * @param {string} content base64 内容
 * @returns {string} utf-8 解码后的字符串
 * @example
 *
 * base64DecodeUtf8('aGVsbG8='); // 'hello'
 * base64DecodeUtf8('5L2g5aW9'); // '你好'
 */
function base64DecodeUtf8(content) {
  if (typeof Buffer !== 'undefined') {
    return Buffer.from(content, 'base64').toString('utf-8');
  }
  // 浏览器兜底
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  var g = typeof globalThis !== 'undefined' ? globalThis : {};
  if (typeof g.atob === 'function') {
    var bin = g.atob(content);
    try {
      return decodeURIComponent(bin.split('').map(function (c) {
        return "%".concat("00".concat(c.charCodeAt(0).toString(16)).slice(-2));
      }).join(''));
    } catch (_a) {
      return bin;
    }
  }
  return content;
}

exports.T_GIT_BASE_URL = T_GIT_BASE_URL;
exports.base64DecodeUtf8 = base64DecodeUtf8;
exports.encodeProject = encodeProject;
exports.instance = instance;
exports.resolveBaseUrl = resolveBaseUrl;
