// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.

import type { CallbackWithError } from "./_fs_common.ts";
import { fromFileUrl } from "../path.ts";

/**
 * TODO: Also accept 'path' parameter as a Node polyfill Buffer type once these
 * are implemented. See https://github.com/denoland/deno/issues/3403
 */
export function link(
  existingPath: string | URL,
  newPath: string | URL,
  callback: CallbackWithError,
): void {
  existingPath = existingPath instanceof URL
    ? fromFileUrl(existingPath)
    : existingPath;
  newPath = newPath instanceof URL ? fromFileUrl(newPath) : newPath;

  Deno.link(existingPath, newPath)
    .then(() => callback())
    .catch(callback);
}

/**
 * TODO: Also accept 'path' parameter as a Node polyfill Buffer type once these
 * are implemented. See https://github.com/denoland/deno/issues/3403
 */
export function linkSync(
  existingPath: string | URL,
  newPath: string | URL,
): void {
  existingPath = existingPath instanceof URL
    ? fromFileUrl(existingPath)
    : existingPath;
  newPath = newPath instanceof URL ? fromFileUrl(newPath) : newPath;

  Deno.linkSync(existingPath, newPath);
}
