/**
 * @license
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * 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 CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/**
 * Get the ownerDocument for either a range or a node.
 *
 * @param nodeOrRange the node or range for which to get the owner document.
 */
export function ownerDocument(nodeOrRange: Node | Range): Document {
  const node = isRange(nodeOrRange)
    ? nodeOrRange.startContainer
    : nodeOrRange;
  // node.ownerDocument is null iff node is itself a Document.
  return node.ownerDocument ?? (node as Document);
}

function isRange(nodeOrRange: Node | Range): nodeOrRange is Range {
  return ('startContainer' in nodeOrRange);
}
