Plato on Github
Report Home
src/interfaces/promisify.js
Maintainability
81.83
Lines of code
65
Difficulty
11.67
Estimated Errors
0.20
Function weight
By Complexity
By SLOC
/** * @file Generates interfaces as a promise wrapper * @since 0.2.8 */ /*#ifndef(UMD)*/ "use strict"; /*global _gpfGetFunctionName*/ // Get the function name /*global _gpfInterfaceQuery*/ // gpf.interfaces.query /*global _gpfObjectForEach*/ // Similar to [].forEach but for objects /*global _gpfPromisify*/ // Converts any value into a Promise /*#endif*/ function _gpfInterfacesWrap (iInterfaceImpl, interfaceSpecifier, promise) { var fThen = promise.then; promise.then = function () { return _gpfInterfacesWrap(iInterfaceImpl, interfaceSpecifier, fThen.apply(promise, arguments)); }; _gpfObjectForEach(interfaceSpecifier.prototype, function (referenceMethod, name) { promise[name] = function () { var args = arguments; return promise.then(function () { return _gpfPromisify(iInterfaceImpl[name].apply(iInterfaceImpl, args)); }); }; }); return promise; } /** * Build promisified interface wrapper * * @param {Function} interfaceSpecifier Reference interface * @return {Function} Interface Wrapper constructor * @since 0.2.8 */ function _gpfInterfacesPromisify (interfaceSpecifier) { return function (object) { var iInterfaceImpl = _gpfInterfaceQuery(interfaceSpecifier, object); if (!iInterfaceImpl) { gpf.Error.interfaceExpected({ name: _gpfGetFunctionName(interfaceSpecifier) }); } return _gpfInterfacesWrap(iInterfaceImpl, interfaceSpecifier, Promise.resolve()); }; } /** * @gpf:sameas _gpfInterfacesPromisify * @since 0.2.8 * * @example <caption>IXmlContentHandler wrapper</caption> * var wrapXmlContentHandler = gpf.interfaces.promisify(gpf.interfaces.IXmlContentHandler), * writer = new gpf.xml.Writer(), * output = new gpf.stream.WritableString(); * gpf.stream.pipe(writer, output).then(function () { * console.log(output.toString()); * }); * wrapXmlContentHandler(writer) * .startDocument() * .startElement("document") * .endElement(); * // <document/> */ gpf.interfaces.promisify = _gpfInterfacesPromisify;