aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jsdom/lib/jsdom/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jsdom/lib/jsdom/utils.js')
-rw-r--r--node_modules/jsdom/lib/jsdom/utils.js223
1 files changed, 0 insertions, 223 deletions
diff --git a/node_modules/jsdom/lib/jsdom/utils.js b/node_modules/jsdom/lib/jsdom/utils.js
deleted file mode 100644
index 1894611..0000000
--- a/node_modules/jsdom/lib/jsdom/utils.js
+++ /dev/null
@@ -1,223 +0,0 @@
-"use strict";
-var path = require("path");
-var url = require("url");
-
-exports.toFileUrl = function (fileName) {
- // Beyond just the `path.resolve`, this is mostly for the benefit of Windows,
- // where we need to convert "\" to "/" and add an extra "/" prefix before the
- // drive letter.
- var pathname = path.resolve(process.cwd(), fileName).replace(/\\/g, "/");
- if (pathname[0] !== "/") {
- pathname = "/" + pathname;
- }
-
- return "file://" + pathname;
-};
-
-/**
- * Define a setter on an object
- *
- * This method replaces any existing setter but leaves getters in place.
- *
- * - `object` {Object} the object to define the setter on
- * - `property` {String} the name of the setter
- * - `setterFn` {Function} the setter
- */
-exports.defineSetter = function defineSetter(object, property, setterFn) {
- var descriptor = Object.getOwnPropertyDescriptor(object, property) || {
- configurable: true,
- enumerable: true
- };
-
- descriptor.set = setterFn;
-
- Object.defineProperty(object, property, descriptor);
-};
-
-/**
- * Define a getter on an object
- *
- * This method replaces any existing getter but leaves setters in place.
- *
- * - `object` {Object} the object to define the getter on
- * - `property` {String} the name of the getter
- * - `getterFn` {Function} the getter
- */
-exports.defineGetter = function defineGetter(object, property, getterFn) {
- var descriptor = Object.getOwnPropertyDescriptor(object, property) || {
- configurable: true,
- enumerable: true
- };
-
- descriptor.get = getterFn;
-
- Object.defineProperty(object, property, descriptor);
-};
-
-/**
- * Create an object with the given prototype
- *
- * Optionally augment the created object.
- *
- * - `prototype` {Object} the created object's prototype
- * - `[properties]` {Object} properties to attach to the created object
- */
-exports.createFrom = function createFrom(prototype, properties) {
- properties = properties || {};
-
- var descriptors = {};
- Object.getOwnPropertyNames(properties).forEach(function (name) {
- descriptors[name] = Object.getOwnPropertyDescriptor(properties, name);
- });
-
- return Object.create(prototype, descriptors);
-};
-
-/**
- * Create an inheritance relationship between two classes
- *
- * Optionally augment the inherited prototype.
- *
- * - `Superclass` {Function} the inherited class
- * - `Subclass` {Function} the inheriting class
- * - `[properties]` {Object} properties to attach to the inherited prototype
- */
-exports.inheritFrom = function inheritFrom(Superclass, Subclass, properties) {
- properties = properties || {};
-
- Object.defineProperty(properties, "constructor", {
- value: Subclass,
- writable: true,
- configurable: true
- });
-
- Subclass.prototype = exports.createFrom(Superclass.prototype, properties);
-};
-
-/**
- * Define a list of constants on a constructor and its .prototype
- *
- * - `Constructor` {Function} the constructor to define the constants on
- * - `propertyMap` {Object} key/value map of properties to define
- */
-exports.addConstants = function addConstants(Constructor, propertyMap) {
- for (var property in propertyMap) {
- var value = propertyMap[property];
- addConstant(Constructor, property, value);
- addConstant(Constructor.prototype, property, value);
- }
-};
-
-function addConstant(object, property, value) {
- Object.defineProperty(object, property, {
- configurable: false,
- enumerable: true,
- value: value,
- writable: false
- });
-}
-
-var memoizeQueryTypeCounter = 0;
-
-/**
- * Returns a version of a method that memoizes specific types of calls on the object
- *
- * - `fn` {Function} the method to be memozied
- */
-exports.memoizeQuery = function memoizeQuery(fn) {
- // Only memoize query functions with arity <= 2
- if (fn.length > 2) {
- return fn;
- }
-
- var type = memoizeQueryTypeCounter++;
-
- return function () {
- if (!this._memoizedQueries) {
- return fn.apply(this, arguments);
- }
-
- if (!this._memoizedQueries[type]) {
- this._memoizedQueries[type] = Object.create(null);
- }
-
- var key;
- if (arguments.length === 1 && typeof arguments[0] === "string") {
- key = arguments[0];
- } else if (arguments.length === 2 && typeof arguments[0] === "string" && typeof arguments[1] === "string") {
- key = arguments[0] + "::" + arguments[1];
- } else {
- return fn.apply(this, arguments);
- }
-
- if (!(key in this._memoizedQueries[type])) {
- this._memoizedQueries[type][key] = fn.apply(this, arguments);
- }
- return this._memoizedQueries[type][key];
- };
-};
-
-/**
-* A slightly-more-compliant version of `url.resolve`, taking care of a few Node bugs.
-*/
-exports.resolveHref = function resolveHref(baseUrl, href) {
- var about = "about:blank";
-
- // if we're redirecting to another site on about:blank, just let it through
- if (href.substring(0, about.length) === about) {
- return href;
- }
-
- // if we have to resolve from about:blank we need a bit of special logic
- if (baseUrl.substring(0, about.length) === about) {
- if (href.search(/^([A-Za-z0-9]+):/) === 0) { // we have an absolute url
- baseUrl = href;
- href = "";
- } else if (href[0] === "#") { // we have a location hash on about:blank
- return baseUrl.split(/#/)[0] + href;
- } else if (!href) { // we just have some base url
- return baseUrl;
- } else { // must be a file url
- baseUrl = "file://" + href;
- href = "";
- }
- }
-
- if (baseUrl === resolveHref.memoizedUrl && resolveHref.cache && resolveHref.cache[href]) {
- return resolveHref.cache[href];
- }
-
- // When switching protocols, the path doesn't get canonicalized (i.e. .s and ..s are still left):
- // https://github.com/joyent/node/issues/5453
- var intermediate = url.resolve(baseUrl, href);
-
- // This canonicalizes the path, at the cost of overwriting the hash.
- var nextStep = url.resolve(intermediate, "#");
-
- // But it breaks file URLs by removing their colon O_o, so put that back.
- nextStep = nextStep.replace(/^file:\/\/([a-z])\//i, "file:///$1:/");
-
- // So, insert the hash back in, if there was one.
- var parsed = url.parse(intermediate);
- var fixed = nextStep.slice(0, -1) + (parsed.hash || "");
-
- // Finally, fix file:/// URLs on Windows, where Node removes their drive letters:
- // https://github.com/joyent/node/issues/5452
- if (/^file\:\/\/\/[a-z]\:\//i.test(baseUrl) && /^file\:\/\/\//.test(fixed) &&
- !/^file\:\/\/\/[a-z]\:\//i.test(fixed)) {
- fixed = fixed.replace(/^file\:\/\/\//, baseUrl.substring(0, 11));
- }
-
- // HORRIBLE HACK: encode \u00E4 correctly just so that we pass
- // https://github.com/w3c/web-platform-tests/blob/e75f01a689a3481f5c773315c2c2527712cf8c2c/dom/nodes/DOMImplementation-createHTMLDocument.html#L71-L72
- // Eventually we should replace this with a real URL parser based on the URL standard.
- fixed = fixed.replace(/\u00E4/, "%C3%A4");
-
- if (baseUrl !== resolveHref.memoizedUrl) {
- resolveHref.memoizedUrl = baseUrl;
- resolveHref.cache = {};
- }
- resolveHref.cache[href] = fixed;
-
- return fixed;
-};