aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js')
-rw-r--r--node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js b/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js
new file mode 100644
index 0000000..5f4622f
--- /dev/null
+++ b/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js
@@ -0,0 +1,63 @@
+"use strict";
+var xnv = require("xml-name-validator");
+
+// https://dom.spec.whatwg.org/#validate
+
+exports.name = function (name, core) {
+ try {
+ xnv.name(name);
+ } catch (e) {
+ throw new core.DOMException(core.DOMException.INVALID_CHARACTER_ERR,
+ "\"" + name + "\" did not match the Name production: " + e.message);
+ }
+};
+
+exports.qname = function (qname, core) {
+ exports.name(qname, core);
+
+ try {
+ xnv.qname(qname);
+ } catch (e) {
+ throw new core.DOMException(core.DOMException.NAMESPACE_ERR,
+ "\"" + qname + "\" did not match the QName production: " + e.message);
+ }
+};
+
+exports.validateAndExtract = function (namespace, qualifiedName, core) {
+ if (namespace === "") {
+ namespace = null;
+ }
+
+ exports.qname(qualifiedName, core);
+
+ var prefix = null;
+ var localName = qualifiedName;
+
+ var colonIndex = qualifiedName.indexOf(":");
+ if (colonIndex !== -1) {
+ prefix = qualifiedName.substring(0, colonIndex);
+ localName = qualifiedName.substring(colonIndex + 1);
+ }
+
+ if (prefix !== null && namespace === null) {
+ throw new core.DOMException(core.DOMException.NAMESPACE_ERR,
+ "A namespace was given but a prefix was also extracted from the qualifiedName");
+ }
+
+ if (prefix === "xml" && namespace !== "http://www.w3.org/XML/1998/namespace") {
+ throw new core.DOMException(core.DOMException.NAMESPACE_ERR,
+ "A prefix of \"xml\" was given but the namespace was not the XML namespace");
+ }
+
+ if ((qualifiedName === "xmlns" || prefix === "xmlns") && namespace !== "http://www.w3.org/2000/xmlns/") {
+ throw new core.DOMException(core.DOMException.NAMESPACE_ERR,
+ "A prefix or qualifiedName of \"xmlns\" was given but the namespace was not the XMLNS namespace");
+ }
+
+ if (namespace === "http://www.w3.org/2000/xmlns/" && qualifiedName !== "xmlns" && prefix !== "xmlns") {
+ throw new core.DOMException(core.DOMException.NAMESPACE_ERR,
+ "The XMLNS namespace was given but neither the prefix nor qualifiedName was \"xmlns\"");
+ }
+
+ return { namespace: namespace, prefix: prefix, localName: localName, qualifiedName: qualifiedName };
+};