Move @annotator/dom scope utils to module
diff --git a/packages/dom/src/range.js b/packages/dom/src/range.js
index 2adb680..29c0708 100644
--- a/packages/dom/src/range.js
+++ b/packages/dom/src/range.js
@@ -13,16 +13,9 @@
  * the License.
  */
 
+import { ownerDocument } from './scope.js';
 import { product } from './cartesian.js';
 
-function ownerDocument(scope) {
-  if ('commonAncestorContainer' in scope) {
-    return scope.commonAncestorContainer.ownerDocument;
-  }
-
-  return scope.ownerDocument;
-}
-
 export function createRangeSelectorCreator(createSelector) {
   return function createRangeSelector(selector) {
     const startSelector = createSelector(selector.startSelector);
diff --git a/packages/dom/src/scope.js b/packages/dom/src/scope.js
new file mode 100644
index 0000000..49c6637
--- /dev/null
+++ b/packages/dom/src/scope.js
@@ -0,0 +1,35 @@
+/**
+ * @license
+ * Licensed 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.
+ */
+
+export function ownerDocument(scope) {
+  if ('commonAncestorContainer' in scope) {
+    return scope.commonAncestorContainer.ownerDocument;
+  }
+
+  return scope.ownerDocument;
+}
+
+export function rangeFromScope(scope) {
+  if ('commonAncestorContainer' in scope) {
+    return scope;
+  }
+
+  const document = scope.ownerDocument;
+  const range = document.createRange();
+
+  range.selectNodeContents(scope);
+
+  return range;
+}
diff --git a/packages/dom/src/text-quote.js b/packages/dom/src/text-quote.js
index 12e5a4a..ddebfbc 100644
--- a/packages/dom/src/text-quote.js
+++ b/packages/dom/src/text-quote.js
@@ -16,6 +16,8 @@
 import createNodeIterator from 'dom-node-iterator';
 import seek from 'dom-seek';
 
+import { ownerDocument, rangeFromScope } from './scope.js';
+
 // Node constants
 const TEXT_NODE = 3;
 
@@ -32,27 +34,6 @@
   return iter.nextNode();
 }
 
-function ownerDocument(scope) {
-  if ('commonAncestorContainer' in scope) {
-    return scope.commonAncestorContainer.ownerDocument;
-  }
-
-  return scope.ownerDocument;
-}
-
-function rangeFromScope(scope) {
-  if ('commonAncestorContainer' in scope) {
-    return scope;
-  }
-
-  const document = scope.ownerDocument;
-  const range = document.createRange();
-
-  range.selectNodeContents(scope);
-
-  return range;
-}
-
 export function createTextQuoteSelector(selector) {
   return async function* matchAll(scope) {
     const document = ownerDocument(scope);