UNPKG

web-service

Version:

Instantiates web services: REST Api, file upload, etc

321 lines (259 loc) 8.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _keys = require("babel-runtime/core-js/object/keys"); var _keys2 = _interopRequireDefault(_keys); var _getIterator2 = require("babel-runtime/core-js/get-iterator"); var _getIterator3 = _interopRequireDefault(_getIterator2); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _helpers = require("./helpers"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // parseUri 1.2.2 // (c) Steven Levithan <stevenlevithan.com> // MIT License // // takes a string // returns an object { protocol, host, port, path, query, anchor, ... } function parse_uri() { var uri = arguments.length <= 0 || arguments[0] === undefined ? document.location : arguments[0]; var options = { strictMode: false, key: ["source", // protocol: "protocol", "authority", // //user:password@ "userInfo", // user:password "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], query: { name: "parameters", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { // protocol : // user :password @ host :port path (relative,directory,file) ? query #anchor strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }; var matches = options.parser[options.strictMode ? "strict" : "loose"].exec(uri); var result = {}; var i = 14; while (i--) { result[options.key[i]] = matches[i] || ""; } result[options.query.name] = {}; // options.key[12] === "query" result[options.key[12]].replace(options.query.parser, function ($0, $1, $2) { if ($1) { result[options.query.name][$1] = $2; } }); return result; } var Uri = function () { function Uri(uri) { (0, _classCallCheck3.default)(this, Uri); if ((0, _helpers.is_object)(uri)) { uri = uri.pathname + (uri.search ? "?" + uri.search : ''); } var parsed = parse_uri(uri); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(parsed)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; this[key] = parsed[key]; } // this.protocol = this.protocol || 'http' } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } this.path = decodeURI(this.path); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = (0, _getIterator3.default)((0, _keys2.default)(this.parameters)), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _key = _step2.value; var decoded_key = decodeURIComponent(_key); var decoded_value = decodeURIComponent(this.parameters[_key]); this.parameters[decoded_key] = decoded_value; if (decoded_key !== _key) { delete this.parameters[_key]; } if (!(0, _helpers.exists)(this[_key])) { this[_key] = decoded_value; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } (0, _createClass3.default)(Uri, [{ key: "to_relative_url", value: function to_relative_url() { this.protocol = ''; this.host = ''; this.port = ''; return this.print(); } }, { key: "no_parameters", value: function no_parameters() { this.parameters = {}; return this; } }, { key: "set_parameters", value: function set_parameters(map) { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = (0, _getIterator3.default)((0, _keys2.default)(map)), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var key = _step3.value; this.parameter(key, map[key]); } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } return this; } }, { key: "parameter", value: function parameter(_parameter, value) { if (value === undefined) { return; } if (Array.isArray(value)) { throw new Error("URL parameter \"" + _parameter + "\" was attempted to be set as an array: [" + value + "]"); } this.parameters[_parameter] = value; return this; } }, { key: "remove_parameter", value: function remove_parameter(parameter) { delete this.parameters[parameter]; return this; } }, { key: "path", value: function path(_path) { if (!(0, _helpers.starts_with)(_path, '/')) { _path = '/' + _path; } this.path = _path; return this; } }, { key: "print", value: function print(options) { options = (0, _helpers.extend)({ machine: true }, options); var uri = ''; if (this.protocol) { var omit_protocol = false; if (options.omit_common_protocols) { if (this.protocol === 'http' || this.protocol === 'https') { omit_protocol = true; } } if (!omit_protocol) { uri += this.protocol + '://'; } } if (this.host) { uri += this.host + (this.port ? ':' + this.port : ''); } uri += this.path; //encodeURI(this.path) var first_parameter = true; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = (0, _getIterator3.default)((0, _keys2.default)(this.parameters)), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var key = _step4.value; uri += first_parameter ? '?' : '&'; uri += options.machine ? encodeURIComponent(key) : key; uri += '='; uri += options.machine ? encodeURIComponent(this.parameters[key]) : this.parameters[key]; first_parameter = false; } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } if (this.anchor) { uri += '#'; uri += options.machine ? encodeURIComponent(this.anchor) : this.anchor; } return uri; } }, { key: "toString", value: function toString() { return this.print(); } }]); return Uri; }(); // self testing exports.default = Uri; ;(function () { function assert(left, right) { if (left !== right) { throw new Error("Assertion failed: got \"" + left + "\", expected \"" + right + "\""); } } assert(new Uri('http://гугл.рф?раз=два#три').print(), 'http://гугл.рф?%D1%80%D0%B0%D0%B7=%D0%B4%D0%B2%D0%B0#%D1%82%D1%80%D0%B8'); assert(new Uri('http://гугл.рф?раз=два#три').print({ machine: false }), 'http://гугл.рф?раз=два#три'); assert(new Uri('google.ru').print(), 'google.ru'); assert(parse_uri('http://google.ru/root/path/test?parameters').path, '/root/path/test'); })(); module.exports = exports['default']; //# sourceMappingURL=url.js.map