UNPKG

nodulator

Version:

Complete NodeJS Framework for Restfull APIs

181 lines (156 loc) 4.53 kB
/* * Copyright 2015 the original author or authors * @license MIT, see LICENSE.txt for details * * @author Scott Andrews */ (function (define) { 'use strict'; define(function (/* require */) { var charMap; charMap = (function () { var strings = { alpha: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', digit: '0123456789' }; strings.genDelims = ':/?#[]@'; strings.subDelims = '!$&\'()*+,;='; strings.reserved = strings.genDelims + strings.subDelims; strings.unreserved = strings.alpha + strings.digit + '-._~'; strings.url = strings.reserved + strings.unreserved; strings.scheme = strings.alpha + strings.digit + '+-.'; strings.userinfo = strings.unreserved + strings.subDelims + ':'; strings.host = strings.unreserved + strings.subDelims; strings.port = strings.digit; strings.pchar = strings.unreserved + strings.subDelims + ':@'; strings.segment = strings.pchar; strings.path = strings.segment + '/'; strings.query = strings.pchar + '/?'; strings.fragment = strings.pchar + '/?'; return Object.keys(strings).reduce(function (charMap, set) { charMap[set] = strings[set].split('').reduce(function (chars, myChar) { chars[myChar] = true; return chars; }, {}); return charMap; }, {}); }()); function encode(str, allowed) { if (typeof str !== 'string') { throw new Error('String required for URL encoding'); } return str.split('').map(function (myChar) { if (allowed.hasOwnProperty(myChar)) { return myChar; } var code = myChar.charCodeAt(0); if (code <= 127) { var encoded = code.toString(16).toUpperCase(); return '%' + (encoded.length % 2 === 1 ? '0' : '') + encoded; } else { return encodeURIComponent(myChar).toUpperCase(); } }).join(''); } function makeEncoder(allowed) { allowed = allowed || charMap.unreserved; return function (str) { return encode(str, allowed); }; } function decode(str) { return decodeURIComponent(str); } return { /* * Decode URL encoded strings * * @param {string} URL encoded string * @returns {string} URL decoded string */ decode: decode, /* * URL encode a string * * All but alpha-numerics and a very limited set of punctuation - . _ ~ are * encoded. * * @param {string} string to encode * @returns {string} URL encoded string */ encode: makeEncoder(), /* * URL encode a URL * * All character permitted anywhere in a URL are left unencoded even * if that character is not permitted in that portion of a URL. * * Note: This method is typically not what you want. * * @param {string} string to encode * @returns {string} URL encoded string */ encodeURL: makeEncoder(charMap.url), /* * URL encode the scheme portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodeScheme: makeEncoder(charMap.scheme), /* * URL encode the user info portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodeUserInfo: makeEncoder(charMap.userinfo), /* * URL encode the host portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodeHost: makeEncoder(charMap.host), /* * URL encode the port portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodePort: makeEncoder(charMap.port), /* * URL encode a path segment portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodePathSegment: makeEncoder(charMap.segment), /* * URL encode the path portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodePath: makeEncoder(charMap.path), /* * URL encode the query portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodeQuery: makeEncoder(charMap.query), /* * URL encode the fragment portion of a URL * * @param {string} string to encode * @returns {string} URL encoded string */ encodeFragment: makeEncoder(charMap.fragment) }; }); }( typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); } // Boilerplate for AMD and Node ));