You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					114 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					114 lines
				
				3.0 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const conversions = require("webidl-conversions");
							 | 
						||
| 
								 | 
							
								const utils = require("./utils.js");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const impl = utils.implSymbol;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class XMLSerializer {
							 | 
						||
| 
								 | 
							
								  constructor() {
							 | 
						||
| 
								 | 
							
								    return iface.setup(Object.create(new.target.prototype));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  serializeToString(root) {
							 | 
						||
| 
								 | 
							
								    if (!this || !module.exports.is(this)) {
							 | 
						||
| 
								 | 
							
								      throw new TypeError("Illegal invocation");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (arguments.length < 1) {
							 | 
						||
| 
								 | 
							
								      throw new TypeError(
							 | 
						||
| 
								 | 
							
								        "Failed to execute 'serializeToString' on 'XMLSerializer': 1 argument required, but only " +
							 | 
						||
| 
								 | 
							
								          arguments.length +
							 | 
						||
| 
								 | 
							
								          " present."
							 | 
						||
| 
								 | 
							
								      );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const args = [];
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      let curArg = arguments[0];
							 | 
						||
| 
								 | 
							
								      curArg = utils.tryImplForWrapper(curArg);
							 | 
						||
| 
								 | 
							
								      args.push(curArg);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return this[impl].serializeToString(...args);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								Object.defineProperties(XMLSerializer.prototype, {
							 | 
						||
| 
								 | 
							
								  serializeToString: { enumerable: true },
							 | 
						||
| 
								 | 
							
								  [Symbol.toStringTag]: { value: "XMLSerializer", configurable: true }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								const iface = {
							 | 
						||
| 
								 | 
							
								  // When an interface-module that implements this interface as a mixin is loaded, it will append its own `.is()`
							 | 
						||
| 
								 | 
							
								  // method into this array. It allows objects that directly implements *those* interfaces to be recognized as
							 | 
						||
| 
								 | 
							
								  // implementing this mixin interface.
							 | 
						||
| 
								 | 
							
								  _mixedIntoPredicates: [],
							 | 
						||
| 
								 | 
							
								  is(obj) {
							 | 
						||
| 
								 | 
							
								    if (obj) {
							 | 
						||
| 
								 | 
							
								      if (utils.hasOwn(obj, impl) && obj[impl] instanceof Impl.implementation) {
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      for (const isMixedInto of module.exports._mixedIntoPredicates) {
							 | 
						||
| 
								 | 
							
								        if (isMixedInto(obj)) {
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return false;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  isImpl(obj) {
							 | 
						||
| 
								 | 
							
								    if (obj) {
							 | 
						||
| 
								 | 
							
								      if (obj instanceof Impl.implementation) {
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const wrapper = utils.wrapperForImpl(obj);
							 | 
						||
| 
								 | 
							
								      for (const isMixedInto of module.exports._mixedIntoPredicates) {
							 | 
						||
| 
								 | 
							
								        if (isMixedInto(wrapper)) {
							 | 
						||
| 
								 | 
							
								          return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return false;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  convert(obj, { context = "The provided value" } = {}) {
							 | 
						||
| 
								 | 
							
								    if (module.exports.is(obj)) {
							 | 
						||
| 
								 | 
							
								      return utils.implForWrapper(obj);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    throw new TypeError(`${context} is not of type 'XMLSerializer'.`);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  create(constructorArgs, privateData) {
							 | 
						||
| 
								 | 
							
								    let obj = Object.create(XMLSerializer.prototype);
							 | 
						||
| 
								 | 
							
								    obj = this.setup(obj, constructorArgs, privateData);
							 | 
						||
| 
								 | 
							
								    return obj;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  createImpl(constructorArgs, privateData) {
							 | 
						||
| 
								 | 
							
								    let obj = Object.create(XMLSerializer.prototype);
							 | 
						||
| 
								 | 
							
								    obj = this.setup(obj, constructorArgs, privateData);
							 | 
						||
| 
								 | 
							
								    return utils.implForWrapper(obj);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  _internalSetup(obj) {},
							 | 
						||
| 
								 | 
							
								  setup(obj, constructorArgs, privateData) {
							 | 
						||
| 
								 | 
							
								    if (!privateData) privateData = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    privateData.wrapper = obj;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    this._internalSetup(obj);
							 | 
						||
| 
								 | 
							
								    Object.defineProperty(obj, impl, {
							 | 
						||
| 
								 | 
							
								      value: new Impl.implementation(constructorArgs, privateData),
							 | 
						||
| 
								 | 
							
								      configurable: true
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    obj[impl][utils.wrapperSymbol] = obj;
							 | 
						||
| 
								 | 
							
								    if (Impl.init) {
							 | 
						||
| 
								 | 
							
								      Impl.init(obj[impl], privateData);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return obj;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  interface: XMLSerializer,
							 | 
						||
| 
								 | 
							
								  expose: {
							 | 
						||
| 
								 | 
							
								    Window: { XMLSerializer }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}; // iface
							 | 
						||
| 
								 | 
							
								module.exports = iface;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Impl = require("./XMLSerializer-impl.js");
							 |