2018-12-14 05:41:57 +01:00
this [ "wp" ] = this [ "wp" ] || { } ; this [ "wp" ] [ "url" ] =
/******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
/******/ }
/******/ } ;
/******/
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/
/******/ // Load entry module and return exports
2019-09-19 17:19:18 +02:00
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = 378 ) ;
2018-12-14 05:41:57 +01:00
/******/ } )
/************************************************************************/
/******/ ( {
2019-09-19 17:19:18 +02:00
/***/ 222 :
2018-12-18 04:14:52 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-12-14 05:41:57 +01:00
"use strict" ;
2018-12-18 04:14:52 +01:00
var has = Object . prototype . hasOwnProperty ;
2019-06-27 13:28:19 +02:00
var isArray = Array . isArray ;
2018-12-18 04:14:52 +01:00
var hexTable = ( function ( ) {
var array = [ ] ;
for ( var i = 0 ; i < 256 ; ++ i ) {
array . push ( '%' + ( ( i < 16 ? '0' : '' ) + i . toString ( 16 ) ) . toUpperCase ( ) ) ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
return array ;
} ( ) ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var compactQueue = function compactQueue ( queue ) {
while ( queue . length > 1 ) {
var item = queue . pop ( ) ;
var obj = item . obj [ item . prop ] ;
2018-12-14 05:41:57 +01:00
2019-06-27 13:28:19 +02:00
if ( isArray ( obj ) ) {
2018-12-18 04:14:52 +01:00
var compacted = [ ] ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
for ( var j = 0 ; j < obj . length ; ++ j ) {
if ( typeof obj [ j ] !== 'undefined' ) {
compacted . push ( obj [ j ] ) ;
}
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
item . obj [ item . prop ] = compacted ;
}
}
} ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var arrayToObject = function arrayToObject ( source , options ) {
var obj = options && options . plainObjects ? Object . create ( null ) : { } ;
for ( var i = 0 ; i < source . length ; ++ i ) {
if ( typeof source [ i ] !== 'undefined' ) {
obj [ i ] = source [ i ] ;
}
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return obj ;
} ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var merge = function merge ( target , source , options ) {
if ( ! source ) {
return target ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( typeof source !== 'object' ) {
2019-06-27 13:28:19 +02:00
if ( isArray ( target ) ) {
2018-12-18 04:14:52 +01:00
target . push ( source ) ;
2019-06-27 13:28:19 +02:00
} else if ( target && typeof target === 'object' ) {
2018-12-18 04:14:52 +01:00
if ( ( options && ( options . plainObjects || options . allowPrototypes ) ) || ! has . call ( Object . prototype , source ) ) {
target [ source ] = true ;
}
} else {
return [ target , source ] ;
}
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
return target ;
}
2018-12-17 05:52:00 +01:00
2019-06-27 13:28:19 +02:00
if ( ! target || typeof target !== 'object' ) {
2018-12-18 04:14:52 +01:00
return [ target ] . concat ( source ) ;
}
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var mergeTarget = target ;
2019-06-27 13:28:19 +02:00
if ( isArray ( target ) && ! isArray ( source ) ) {
2018-12-18 04:14:52 +01:00
mergeTarget = arrayToObject ( target , options ) ;
}
2018-12-17 05:52:00 +01:00
2019-06-27 13:28:19 +02:00
if ( isArray ( target ) && isArray ( source ) ) {
2018-12-18 04:14:52 +01:00
source . forEach ( function ( item , i ) {
if ( has . call ( target , i ) ) {
2019-06-27 13:28:19 +02:00
var targetItem = target [ i ] ;
if ( targetItem && typeof targetItem === 'object' && item && typeof item === 'object' ) {
target [ i ] = merge ( targetItem , item , options ) ;
2018-12-18 04:14:52 +01:00
} else {
target . push ( item ) ;
}
} else {
target [ i ] = item ;
}
} ) ;
return target ;
}
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
return Object . keys ( source ) . reduce ( function ( acc , key ) {
var value = source [ key ] ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
if ( has . call ( acc , key ) ) {
acc [ key ] = merge ( acc [ key ] , value , options ) ;
} else {
acc [ key ] = value ;
}
return acc ;
} , mergeTarget ) ;
} ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var assign = function assignSingleSource ( target , source ) {
return Object . keys ( source ) . reduce ( function ( acc , key ) {
acc [ key ] = source [ key ] ;
return acc ;
} , target ) ;
} ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var decode = function ( str , decoder , charset ) {
var strWithoutPlus = str . replace ( /\+/g , ' ' ) ;
if ( charset === 'iso-8859-1' ) {
// unescape never throws, no try...catch needed:
return strWithoutPlus . replace ( /%[0-9a-f]{2}/gi , unescape ) ;
}
// utf-8
try {
return decodeURIComponent ( strWithoutPlus ) ;
} catch ( e ) {
return strWithoutPlus ;
}
} ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var encode = function encode ( str , defaultEncoder , charset ) {
// This code was originally written by Brian White (mscdex) for the io.js core querystring library.
// It has been adapted here for stricter adherence to RFC 3986
if ( str . length === 0 ) {
return str ;
}
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var string = typeof str === 'string' ? str : String ( str ) ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
if ( charset === 'iso-8859-1' ) {
return escape ( string ) . replace ( /%u[0-9a-f]{4}/gi , function ( $0 ) {
return '%26%23' + parseInt ( $0 . slice ( 2 ) , 16 ) + '%3B' ;
} ) ;
}
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
var out = '' ;
for ( var i = 0 ; i < string . length ; ++ i ) {
var c = string . charCodeAt ( i ) ;
2018-12-17 05:52:00 +01:00
2018-12-18 04:14:52 +01:00
if (
c === 0x2D // -
|| c === 0x2E // .
|| c === 0x5F // _
|| c === 0x7E // ~
|| ( c >= 0x30 && c <= 0x39 ) // 0-9
|| ( c >= 0x41 && c <= 0x5A ) // a-z
|| ( c >= 0x61 && c <= 0x7A ) // A-Z
) {
out += string . charAt ( i ) ;
continue ;
}
if ( c < 0x80 ) {
out = out + hexTable [ c ] ;
continue ;
}
if ( c < 0x800 ) {
out = out + ( hexTable [ 0xC0 | ( c >> 6 ) ] + hexTable [ 0x80 | ( c & 0x3F ) ] ) ;
continue ;
}
if ( c < 0xD800 || c >= 0xE000 ) {
out = out + ( hexTable [ 0xE0 | ( c >> 12 ) ] + hexTable [ 0x80 | ( ( c >> 6 ) & 0x3F ) ] + hexTable [ 0x80 | ( c & 0x3F ) ] ) ;
continue ;
}
i += 1 ;
c = 0x10000 + ( ( ( c & 0x3FF ) << 10 ) | ( string . charCodeAt ( i ) & 0x3FF ) ) ;
out += hexTable [ 0xF0 | ( c >> 18 ) ]
+ hexTable [ 0x80 | ( ( c >> 12 ) & 0x3F ) ]
+ hexTable [ 0x80 | ( ( c >> 6 ) & 0x3F ) ]
+ hexTable [ 0x80 | ( c & 0x3F ) ] ;
}
return out ;
} ;
var compact = function compact ( value ) {
var queue = [ { obj : { o : value } , prop : 'o' } ] ;
var refs = [ ] ;
for ( var i = 0 ; i < queue . length ; ++ i ) {
var item = queue [ i ] ;
var obj = item . obj [ item . prop ] ;
var keys = Object . keys ( obj ) ;
for ( var j = 0 ; j < keys . length ; ++ j ) {
var key = keys [ j ] ;
var val = obj [ key ] ;
if ( typeof val === 'object' && val !== null && refs . indexOf ( val ) === - 1 ) {
queue . push ( { obj : obj , prop : key } ) ;
refs . push ( val ) ;
}
}
}
compactQueue ( queue ) ;
return value ;
} ;
var isRegExp = function isRegExp ( obj ) {
return Object . prototype . toString . call ( obj ) === '[object RegExp]' ;
} ;
var isBuffer = function isBuffer ( obj ) {
2019-06-27 13:28:19 +02:00
if ( ! obj || typeof obj !== 'object' ) {
2018-12-18 04:14:52 +01:00
return false ;
}
return ! ! ( obj . constructor && obj . constructor . isBuffer && obj . constructor . isBuffer ( obj ) ) ;
} ;
var combine = function combine ( a , b ) {
return [ ] . concat ( a , b ) ;
} ;
module . exports = {
arrayToObject : arrayToObject ,
assign : assign ,
combine : combine ,
compact : compact ,
decode : decode ,
encode : encode ,
isBuffer : isBuffer ,
isRegExp : isRegExp ,
merge : merge
} ;
/***/ } ) ,
2019-09-19 17:19:18 +02:00
/***/ 223 :
2018-12-18 04:14:52 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
var replace = String . prototype . replace ;
var percentTwenties = /%20/g ;
module . exports = {
'default' : 'RFC3986' ,
formatters : {
RFC1738 : function ( value ) {
return replace . call ( value , percentTwenties , '+' ) ;
} ,
RFC3986 : function ( value ) {
return value ;
}
} ,
RFC1738 : 'RFC1738' ,
RFC3986 : 'RFC3986'
} ;
/***/ } ) ,
2019-09-19 17:19:18 +02:00
/***/ 378 :
2018-12-18 04:14:52 +01:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isURL" , function ( ) { return isURL ; } ) ;
2019-09-19 17:19:18 +02:00
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isEmail" , function ( ) { return isEmail ; } ) ;
2018-12-18 04:14:52 +01:00
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getProtocol" , function ( ) { return getProtocol ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isValidProtocol" , function ( ) { return isValidProtocol ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getAuthority" , function ( ) { return getAuthority ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isValidAuthority" , function ( ) { return isValidAuthority ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getPath" , function ( ) { return getPath ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isValidPath" , function ( ) { return isValidPath ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getQueryString" , function ( ) { return getQueryString ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isValidQueryString" , function ( ) { return isValidQueryString ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getFragment" , function ( ) { return getFragment ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "isValidFragment" , function ( ) { return isValidFragment ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "addQueryArgs" , function ( ) { return addQueryArgs ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "getQueryArg" , function ( ) { return getQueryArg ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "hasQueryArg" , function ( ) { return hasQueryArg ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "removeQueryArgs" , function ( ) { return removeQueryArgs ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "prependHTTP" , function ( ) { return prependHTTP ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "safeDecodeURI" , function ( ) { return safeDecodeURI ; } ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "filterURLForDisplay" , function ( ) { return filterURLForDisplay ; } ) ;
2019-03-07 10:09:59 +01:00
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "safeDecodeURIComponent" , function ( ) { return safeDecodeURIComponent ; } ) ;
2019-09-19 17:19:18 +02:00
/* harmony import */ var qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( 91 ) ;
2019-01-04 20:38:57 +01:00
/* harmony import */ var qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
2018-12-18 04:14:52 +01:00
/ * *
* External dependencies
* /
var URL _REGEXP = /^(?:https?:)?\/\/\S+$/i ;
var EMAIL _REGEXP = /^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i ;
var USABLE _HREF _REGEXP = /^(?:[a-z]+:|#|\?|\.|\/)/i ;
2019-09-19 17:19:18 +02:00
/ * *
* @ typedef { { [ key : string ] : QueryArgParsed } } QueryArgObject
* /
/ * *
* @ typedef { string | string [ ] | QueryArgObject } QueryArgParsed
* /
2018-12-18 04:14:52 +01:00
/ * *
* Determines whether the given string looks like a URL .
*
* @ param { string } url The string to scrutinise .
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isURL = isURL ( 'https://wordpress.org' ) ; // true
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } Whether or not it looks like a URL .
* /
function isURL ( url ) {
return URL _REGEXP . test ( url ) ;
}
2019-09-19 17:19:18 +02:00
/ * *
* Determines whether the given string looks like an email .
*
* @ param { string } email The string to scrutinise .
*
* @ example
* ` ` ` js
* const isEmail = isEmail ( 'hello@wordpress.org' ) ; // true
* ` ` `
*
* @ return { boolean } Whether or not it looks like an email .
* /
function isEmail ( email ) {
return EMAIL _REGEXP . test ( email ) ;
}
2018-12-18 04:14:52 +01:00
/ * *
* Returns the protocol part of the URL .
*
* @ param { string } url The full URL .
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const protocol1 = getProtocol ( 'tel:012345678' ) ; // 'tel:'
* const protocol2 = getProtocol ( 'https://wordpress.org' ) ; // 'https:'
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string | void } The protocol part of the URL .
2018-12-18 04:14:52 +01:00
* /
function getProtocol ( url ) {
var matches = /^([^\s:]+:)/ . exec ( url ) ;
2018-12-17 05:52:00 +01:00
if ( matches ) {
return matches [ 1 ] ;
}
}
/ * *
2018-12-18 04:14:52 +01:00
* Tests if a url protocol is valid .
2018-12-17 05:52:00 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } protocol The url protocol .
2018-12-17 05:52:00 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isValid = isValidProtocol ( 'https:' ) ; // true
* const isNotValid = isValidProtocol ( 'https :' ) ; // false
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } True if the argument is a valid protocol ( e . g . http : , tel : ) .
2018-12-17 05:52:00 +01:00
* /
2018-12-18 04:14:52 +01:00
function isValidProtocol ( protocol ) {
if ( ! protocol ) {
2018-12-17 05:52:00 +01:00
return false ;
}
2018-12-18 04:14:52 +01:00
return /^[a-z\-.\+]+[0-9]*:$/i . test ( protocol ) ;
2018-12-17 05:52:00 +01:00
}
/ * *
2018-12-18 04:14:52 +01:00
* Returns the authority part of the URL .
2018-12-17 05:52:00 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } url The full URL .
2018-12-17 05:52:00 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const authority1 = getAuthority ( 'https://wordpress.org/help/' ) ; // 'wordpress.org'
* const authority2 = getAuthority ( 'https://localhost:8080/test/' ) ; // 'localhost:8080'
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string | void } The authority part of the URL .
2018-12-17 05:52:00 +01:00
* /
2018-12-18 04:14:52 +01:00
function getAuthority ( url ) {
var matches = /^[^\/\s:]+:(?:\/\/)?\/?([^\/\s#?]+)[\/#?]{0,1}\S*$/ . exec ( url ) ;
2018-12-17 05:52:00 +01:00
if ( matches ) {
return matches [ 1 ] ;
}
}
/ * *
2018-12-18 04:14:52 +01:00
* Checks for invalid characters within the provided authority .
2018-12-17 05:52:00 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } authority A string containing the URL authority .
2018-12-17 05:52:00 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isValid = isValidAuthority ( 'wordpress.org' ) ; // true
* const isNotValid = isValidAuthority ( 'wordpress#org' ) ; // false
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } True if the argument contains a valid authority .
2018-12-17 05:52:00 +01:00
* /
2018-12-18 04:14:52 +01:00
function isValidAuthority ( authority ) {
if ( ! authority ) {
2018-12-17 05:52:00 +01:00
return false ;
}
2018-12-18 04:14:52 +01:00
return /^[^\s#?]+$/ . test ( authority ) ;
2018-12-17 05:52:00 +01:00
}
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Returns the path part of the URL .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } url The full URL .
2018-12-14 05:41:57 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const path1 = getPath ( 'http://localhost:8080/this/is/a/test?query=true' ) ; // 'this/is/a/test'
* const path2 = getPath ( 'https://wordpress.org/help/faq/' ) ; // 'help/faq'
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string | void } The path part of the URL .
2018-12-14 05:41:57 +01:00
* /
2018-12-18 04:14:52 +01:00
function getPath ( url ) {
var matches = /^[^\/\s:]+:(?:\/\/)?[^\/\s#?]+[\/]([^\s#?]+)[#?]{0,1}\S*$/ . exec ( url ) ;
if ( matches ) {
return matches [ 1 ] ;
}
2018-12-14 05:41:57 +01:00
}
2018-12-14 12:02:53 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Checks for invalid characters within the provided path .
2018-12-14 12:02:53 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } path The URL path .
2018-12-14 12:02:53 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isValid = isValidPath ( 'test/path/' ) ; // true
* const isNotValid = isValidPath ( '/invalid?test/path/' ) ; // false
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } True if the argument contains a valid path
2018-12-14 12:02:53 +01:00
* /
2018-12-18 04:14:52 +01:00
function isValidPath ( path ) {
if ( ! path ) {
return false ;
}
return /^[^\s#?]+$/ . test ( path ) ;
2018-12-14 12:02:53 +01:00
}
/ * *
2018-12-18 04:14:52 +01:00
* Returns the query string part of the URL .
2018-12-14 12:02:53 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } url The full URL .
2018-12-14 12:02:53 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const queryString1 = getQueryString ( 'http://localhost:8080/this/is/a/test?query=true#fragment' ) ; // 'query=true'
* const queryString2 = getQueryString ( 'https://wordpress.org#fragment?query=false&search=hello' ) ; // 'query=false&search=hello'
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string | void } The query string part of the URL .
2018-12-14 12:02:53 +01:00
* /
2018-12-18 04:14:52 +01:00
function getQueryString ( url ) {
var matches = /^\S+?\?([^\s#]+)/ . exec ( url ) ;
if ( matches ) {
return matches [ 1 ] ;
}
2018-12-14 12:02:53 +01:00
}
/ * *
2018-12-18 04:14:52 +01:00
* Checks for invalid characters within the provided query string .
2018-12-14 12:02:53 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } queryString The query string .
2018-12-14 12:02:53 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isValid = isValidQueryString ( 'query=true&another=false' ) ; // true
* const isNotValid = isValidQueryString ( 'query=true?another=false' ) ; // false
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } True if the argument contains a valid query string .
2018-12-14 12:02:53 +01:00
* /
2018-12-18 04:14:52 +01:00
function isValidQueryString ( queryString ) {
if ( ! queryString ) {
return false ;
2018-12-14 12:02:53 +01:00
}
2018-12-18 04:14:52 +01:00
return /^[^\s#?\/]+$/ . test ( queryString ) ;
2018-12-14 12:02:53 +01:00
}
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Returns the fragment part of the URL .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } url The full URL
2018-12-14 05:41:57 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const fragment1 = getFragment ( 'http://localhost:8080/this/is/a/test?query=true#fragment' ) ; // '#fragment'
* const fragment2 = getFragment ( 'https://wordpress.org#another-fragment?query=true' ) ; // '#another-fragment'
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string | void } The fragment part of the URL .
2018-12-14 05:41:57 +01:00
* /
2018-12-18 04:14:52 +01:00
function getFragment ( url ) {
var matches = /^\S+?(#[^\s\?]*)/ . exec ( url ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( matches ) {
return matches [ 1 ] ;
}
2018-12-14 05:41:57 +01:00
}
2018-12-14 05:53:54 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Checks for invalid characters within the provided fragment .
2018-12-14 05:53:54 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { string } fragment The url fragment .
2018-12-14 05:53:54 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const isValid = isValidFragment ( '#valid-fragment' ) ; // true
* const isNotValid = isValidFragment ( '#invalid-#fragment' ) ; // false
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { boolean } True if the argument contains a valid fragment .
2018-12-14 05:53:54 +01:00
* /
2018-12-18 04:14:52 +01:00
function isValidFragment ( fragment ) {
if ( ! fragment ) {
return false ;
2018-12-14 05:53:54 +01:00
}
2018-12-18 04:14:52 +01:00
return /^#[^\s#?\/]*$/ . test ( fragment ) ;
2018-12-14 05:53:54 +01:00
}
2018-12-14 12:02:53 +01:00
/ * *
2019-01-04 20:38:57 +01:00
* Appends arguments as querystring to the provided URL . If the URL already
* includes query arguments , the arguments are merged with ( and take precedent
* over ) the existing set .
2018-12-14 12:02:53 +01:00
*
2019-09-19 17:19:18 +02:00
* @ param { string } [ url = '' ] URL to which arguments should be appended . If omitted ,
* only the resulting querystring is returned .
* @ param { Object } args Query arguments to apply to URL .
2018-12-14 12:02:53 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const newURL = addQueryArgs ( 'https://google.com' , { q : 'test' } ) ; // https://google.com/?q=test
* ` ` `
*
2019-01-04 20:38:57 +01:00
* @ return { string } URL with arguments applied .
2018-12-14 12:02:53 +01:00
* /
2019-01-04 20:38:57 +01:00
function addQueryArgs ( ) {
var url = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : '' ;
var args = arguments . length > 1 ? arguments [ 1 ] : undefined ;
2019-03-07 10:09:59 +01:00
// If no arguments are to be appended, return original URL.
if ( ! args || ! Object . keys ( args ) . length ) {
return url ;
}
2019-01-04 20:38:57 +01:00
var baseUrl = url ; // Determine whether URL already had query arguments.
2018-12-18 04:14:52 +01:00
var queryStringIndex = url . indexOf ( '?' ) ;
2019-01-04 20:38:57 +01:00
if ( queryStringIndex !== - 1 ) {
// Merge into existing query arguments.
args = Object . assign ( Object ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "parse" ] ) ( url . substr ( queryStringIndex + 1 ) ) , args ) ; // Change working base URL to omit previous query arguments.
baseUrl = baseUrl . substr ( 0 , queryStringIndex ) ;
}
return baseUrl + '?' + Object ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "stringify" ] ) ( args ) ;
2018-12-14 12:02:53 +01:00
}
2018-12-18 04:14:52 +01:00
/ * *
* Returns a single query argument of the url
*
2019-09-19 17:19:18 +02:00
* @ param { string } url URL .
* @ param { string } arg Query arg name .
2018-12-18 04:14:52 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const foo = getQueryArg ( 'https://wordpress.org?foo=bar&bar=baz' , 'foo' ) ; // bar
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { QueryArgParsed | undefined } Query arg value .
2018-12-18 04:14:52 +01:00
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function getQueryArg ( url , arg ) {
var queryStringIndex = url . indexOf ( '?' ) ;
2019-01-04 20:38:57 +01:00
var query = queryStringIndex !== - 1 ? Object ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "parse" ] ) ( url . substr ( queryStringIndex + 1 ) ) : { } ;
2018-12-18 04:14:52 +01:00
return query [ arg ] ;
}
/ * *
* Determines whether the URL contains a given query arg .
*
2019-09-19 17:19:18 +02:00
* @ param { string } url URL .
* @ param { string } arg Query arg name .
2018-12-18 04:14:52 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const hasBar = hasQueryArg ( 'https://wordpress.org?foo=bar&bar=baz' , 'bar' ) ; // true
* ` ` `
*
2019-03-07 10:09:59 +01:00
* @ return { boolean } Whether or not the URL contains the query arg .
2018-12-18 04:14:52 +01:00
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function hasQueryArg ( url , arg ) {
return getQueryArg ( url , arg ) !== undefined ;
}
/ * *
* Removes arguments from the query string of the url
*
2019-09-19 17:19:18 +02:00
* @ param { string } url URL .
* @ param { ... string } args Query Args .
2018-12-18 04:14:52 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const newUrl = removeQueryArgs ( 'https://wordpress.org?foo=bar&bar=baz&baz=foobar' , 'foo' , 'bar' ) ; // https://wordpress.org?baz=foobar
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string } Updated URL .
2018-12-18 04:14:52 +01:00
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function removeQueryArgs ( url ) {
var queryStringIndex = url . indexOf ( '?' ) ;
2019-01-04 20:38:57 +01:00
var query = queryStringIndex !== - 1 ? Object ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "parse" ] ) ( url . substr ( queryStringIndex + 1 ) ) : { } ;
2018-12-18 04:14:52 +01:00
var baseUrl = queryStringIndex !== - 1 ? url . substr ( 0 , queryStringIndex ) : url ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
for ( var _len = arguments . length , args = new Array ( _len > 1 ? _len - 1 : 0 ) , _key = 1 ; _key < _len ; _key ++ ) {
args [ _key - 1 ] = arguments [ _key ] ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
args . forEach ( function ( arg ) {
return delete query [ arg ] ;
} ) ;
2019-01-04 20:38:57 +01:00
return baseUrl + '?' + Object ( qs _ _WEBPACK _IMPORTED _MODULE _0 _ _ [ "stringify" ] ) ( query ) ;
2018-12-18 04:14:52 +01:00
}
/ * *
* Prepends "http://" to a url , if it looks like something that is meant to be a TLD .
*
2019-09-19 17:19:18 +02:00
* @ param { string } url The URL to test .
2018-12-18 04:14:52 +01:00
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const actualURL = prependHTTP ( 'wordpress.org' ) ; // http://wordpress.org
* ` ` `
*
2019-09-19 17:19:18 +02:00
* @ return { string } The updated URL .
2018-12-18 04:14:52 +01:00
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function prependHTTP ( url ) {
2019-09-19 17:19:18 +02:00
url = url . trim ( ) ;
2018-12-18 04:14:52 +01:00
if ( ! USABLE _HREF _REGEXP . test ( url ) && ! EMAIL _REGEXP . test ( url ) ) {
return 'http://' + url ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return url ;
}
/ * *
* Safely decodes a URI with ` decodeURI ` . Returns the URI unmodified if
* ` decodeURI ` throws an error .
*
* @ param { string } uri URI to decode .
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const badUri = safeDecodeURI ( '%z' ) ; // does not throw an Error, simply returns '%z'
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { string } Decoded URI if possible .
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function safeDecodeURI ( uri ) {
try {
return decodeURI ( uri ) ;
} catch ( uriError ) {
return uri ;
}
}
/ * *
* Returns a URL for display .
*
* @ param { string } url Original URL .
*
2019-03-21 13:48:00 +01:00
* @ example
* ` ` ` js
* const displayUrl = filterURLForDisplay ( 'https://www.wordpress.org/gutenberg/' ) ; // wordpress.org/gutenberg
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ return { string } Displayed URL .
* /
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
function filterURLForDisplay ( url ) {
// Remove protocol and www prefixes.
var filteredURL = url . replace ( /^(?:https?:)\/\/(?:www\.)?/ , '' ) ; // Ends with / and only has that single slash, strip it.
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( filteredURL . match ( /^[^\/]+\/$/ ) ) {
return filteredURL . replace ( '/' , '' ) ;
}
return filteredURL ;
}
2019-03-07 10:09:59 +01:00
/ * *
* Safely decodes a URI component with ` decodeURIComponent ` . Returns the URI component unmodified if
* ` decodeURIComponent ` throws an error .
*
* @ param { string } uriComponent URI component to decode .
*
* @ return { string } Decoded URI component if possible .
* /
function safeDecodeURIComponent ( uriComponent ) {
try {
return decodeURIComponent ( uriComponent ) ;
} catch ( uriComponentError ) {
return uriComponent ;
}
}
2018-12-14 05:41:57 +01:00
/***/ } ) ,
2019-09-19 17:19:18 +02:00
/***/ 379 :
2018-12-14 05:41:57 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
2019-09-19 17:19:18 +02:00
var utils = _ _webpack _require _ _ ( 222 ) ;
var formats = _ _webpack _require _ _ ( 223 ) ;
2019-06-27 13:28:19 +02:00
var has = Object . prototype . hasOwnProperty ;
2018-12-14 05:41:57 +01:00
var arrayPrefixGenerators = {
brackets : function brackets ( prefix ) { // eslint-disable-line func-name-matching
return prefix + '[]' ;
} ,
2019-06-27 13:28:19 +02:00
comma : 'comma' ,
2018-12-14 05:41:57 +01:00
indices : function indices ( prefix , key ) { // eslint-disable-line func-name-matching
return prefix + '[' + key + ']' ;
} ,
repeat : function repeat ( prefix ) { // eslint-disable-line func-name-matching
return prefix ;
}
} ;
var isArray = Array . isArray ;
var push = Array . prototype . push ;
var pushToArray = function ( arr , valueOrArray ) {
push . apply ( arr , isArray ( valueOrArray ) ? valueOrArray : [ valueOrArray ] ) ;
} ;
var toISO = Date . prototype . toISOString ;
var defaults = {
addQueryPrefix : false ,
allowDots : false ,
charset : 'utf-8' ,
charsetSentinel : false ,
delimiter : '&' ,
encode : true ,
encoder : utils . encode ,
encodeValuesOnly : false ,
2019-06-27 13:28:19 +02:00
formatter : formats . formatters [ formats [ 'default' ] ] ,
2018-12-14 05:41:57 +01:00
// deprecated
indices : false ,
serializeDate : function serializeDate ( date ) { // eslint-disable-line func-name-matching
return toISO . call ( date ) ;
} ,
skipNulls : false ,
strictNullHandling : false
} ;
var stringify = function stringify ( // eslint-disable-line func-name-matching
object ,
prefix ,
generateArrayPrefix ,
strictNullHandling ,
skipNulls ,
encoder ,
filter ,
sort ,
allowDots ,
serializeDate ,
formatter ,
encodeValuesOnly ,
charset
) {
var obj = object ;
if ( typeof filter === 'function' ) {
obj = filter ( prefix , obj ) ;
} else if ( obj instanceof Date ) {
obj = serializeDate ( obj ) ;
2019-06-27 13:28:19 +02:00
} else if ( generateArrayPrefix === 'comma' && isArray ( obj ) ) {
obj = obj . join ( ',' ) ;
2018-12-14 05:41:57 +01:00
}
if ( obj === null ) {
if ( strictNullHandling ) {
return encoder && ! encodeValuesOnly ? encoder ( prefix , defaults . encoder , charset ) : prefix ;
}
obj = '' ;
}
if ( typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils . isBuffer ( obj ) ) {
if ( encoder ) {
var keyValue = encodeValuesOnly ? prefix : encoder ( prefix , defaults . encoder , charset ) ;
return [ formatter ( keyValue ) + '=' + formatter ( encoder ( obj , defaults . encoder , charset ) ) ] ;
}
return [ formatter ( prefix ) + '=' + formatter ( String ( obj ) ) ] ;
}
var values = [ ] ;
if ( typeof obj === 'undefined' ) {
return values ;
}
var objKeys ;
2019-06-27 13:28:19 +02:00
if ( isArray ( filter ) ) {
2018-12-14 05:41:57 +01:00
objKeys = filter ;
} else {
var keys = Object . keys ( obj ) ;
objKeys = sort ? keys . sort ( sort ) : keys ;
}
for ( var i = 0 ; i < objKeys . length ; ++ i ) {
var key = objKeys [ i ] ;
if ( skipNulls && obj [ key ] === null ) {
continue ;
}
2019-06-27 13:28:19 +02:00
if ( isArray ( obj ) ) {
2018-12-14 05:41:57 +01:00
pushToArray ( values , stringify (
obj [ key ] ,
2019-06-27 13:28:19 +02:00
typeof generateArrayPrefix === 'function' ? generateArrayPrefix ( prefix , key ) : prefix ,
2018-12-14 05:41:57 +01:00
generateArrayPrefix ,
strictNullHandling ,
skipNulls ,
encoder ,
filter ,
sort ,
allowDots ,
serializeDate ,
formatter ,
encodeValuesOnly ,
charset
) ) ;
} else {
pushToArray ( values , stringify (
obj [ key ] ,
prefix + ( allowDots ? '.' + key : '[' + key + ']' ) ,
generateArrayPrefix ,
strictNullHandling ,
skipNulls ,
encoder ,
filter ,
sort ,
allowDots ,
serializeDate ,
formatter ,
encodeValuesOnly ,
charset
) ) ;
}
}
return values ;
} ;
2019-06-27 13:28:19 +02:00
var normalizeStringifyOptions = function normalizeStringifyOptions ( opts ) {
if ( ! opts ) {
return defaults ;
}
2018-12-14 05:41:57 +01:00
2019-06-27 13:28:19 +02:00
if ( opts . encoder !== null && opts . encoder !== undefined && typeof opts . encoder !== 'function' ) {
2018-12-14 05:41:57 +01:00
throw new TypeError ( 'Encoder has to be a function.' ) ;
}
2019-06-27 13:28:19 +02:00
var charset = opts . charset || defaults . charset ;
if ( typeof opts . charset !== 'undefined' && opts . charset !== 'utf-8' && opts . charset !== 'iso-8859-1' ) {
throw new TypeError ( 'The charset option must be either utf-8, iso-8859-1, or undefined' ) ;
2018-12-14 05:41:57 +01:00
}
2019-06-27 13:28:19 +02:00
var format = formats [ 'default' ] ;
if ( typeof opts . format !== 'undefined' ) {
if ( ! has . call ( formats . formatters , opts . format ) ) {
throw new TypeError ( 'Unknown format option provided.' ) ;
}
format = opts . format ;
2018-12-14 05:41:57 +01:00
}
2019-06-27 13:28:19 +02:00
var formatter = formats . formatters [ format ] ;
var filter = defaults . filter ;
if ( typeof opts . filter === 'function' || isArray ( opts . filter ) ) {
filter = opts . filter ;
}
return {
addQueryPrefix : typeof opts . addQueryPrefix === 'boolean' ? opts . addQueryPrefix : defaults . addQueryPrefix ,
allowDots : typeof opts . allowDots === 'undefined' ? defaults . allowDots : ! ! opts . allowDots ,
charset : charset ,
charsetSentinel : typeof opts . charsetSentinel === 'boolean' ? opts . charsetSentinel : defaults . charsetSentinel ,
delimiter : typeof opts . delimiter === 'undefined' ? defaults . delimiter : opts . delimiter ,
encode : typeof opts . encode === 'boolean' ? opts . encode : defaults . encode ,
encoder : typeof opts . encoder === 'function' ? opts . encoder : defaults . encoder ,
encodeValuesOnly : typeof opts . encodeValuesOnly === 'boolean' ? opts . encodeValuesOnly : defaults . encodeValuesOnly ,
filter : filter ,
formatter : formatter ,
serializeDate : typeof opts . serializeDate === 'function' ? opts . serializeDate : defaults . serializeDate ,
skipNulls : typeof opts . skipNulls === 'boolean' ? opts . skipNulls : defaults . skipNulls ,
sort : typeof opts . sort === 'function' ? opts . sort : null ,
strictNullHandling : typeof opts . strictNullHandling === 'boolean' ? opts . strictNullHandling : defaults . strictNullHandling
} ;
} ;
module . exports = function ( object , opts ) {
var obj = object ;
var options = normalizeStringifyOptions ( opts ) ;
2018-12-14 05:41:57 +01:00
var objKeys ;
var filter ;
if ( typeof options . filter === 'function' ) {
filter = options . filter ;
obj = filter ( '' , obj ) ;
2019-06-27 13:28:19 +02:00
} else if ( isArray ( options . filter ) ) {
2018-12-14 05:41:57 +01:00
filter = options . filter ;
objKeys = filter ;
}
var keys = [ ] ;
if ( typeof obj !== 'object' || obj === null ) {
return '' ;
}
var arrayFormat ;
2019-06-27 13:28:19 +02:00
if ( opts && opts . arrayFormat in arrayPrefixGenerators ) {
arrayFormat = opts . arrayFormat ;
} else if ( opts && 'indices' in opts ) {
arrayFormat = opts . indices ? 'indices' : 'repeat' ;
2018-12-14 05:41:57 +01:00
} else {
arrayFormat = 'indices' ;
}
var generateArrayPrefix = arrayPrefixGenerators [ arrayFormat ] ;
if ( ! objKeys ) {
objKeys = Object . keys ( obj ) ;
}
2019-06-27 13:28:19 +02:00
if ( options . sort ) {
objKeys . sort ( options . sort ) ;
2018-12-14 05:41:57 +01:00
}
for ( var i = 0 ; i < objKeys . length ; ++ i ) {
var key = objKeys [ i ] ;
2019-06-27 13:28:19 +02:00
if ( options . skipNulls && obj [ key ] === null ) {
2018-12-14 05:41:57 +01:00
continue ;
}
pushToArray ( keys , stringify (
obj [ key ] ,
key ,
generateArrayPrefix ,
2019-06-27 13:28:19 +02:00
options . strictNullHandling ,
options . skipNulls ,
options . encode ? options . encoder : null ,
options . filter ,
options . sort ,
options . allowDots ,
options . serializeDate ,
options . formatter ,
options . encodeValuesOnly ,
options . charset
2018-12-14 05:41:57 +01:00
) ) ;
}
2019-06-27 13:28:19 +02:00
var joined = keys . join ( options . delimiter ) ;
2018-12-14 05:41:57 +01:00
var prefix = options . addQueryPrefix === true ? '?' : '' ;
if ( options . charsetSentinel ) {
2019-06-27 13:28:19 +02:00
if ( options . charset === 'iso-8859-1' ) {
2018-12-14 05:41:57 +01:00
// encodeURIComponent('✓'), the "numeric entity" representation of a checkmark
prefix += 'utf8=%26%2310003%3B&' ;
} else {
// encodeURIComponent('✓')
prefix += 'utf8=%E2%9C%93&' ;
}
}
return joined . length > 0 ? prefix + joined : '' ;
} ;
/***/ } ) ,
2019-09-19 17:19:18 +02:00
/***/ 380 :
2018-12-14 05:41:57 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
2019-09-19 17:19:18 +02:00
var utils = _ _webpack _require _ _ ( 222 ) ;
2018-12-18 04:14:52 +01:00
2018-12-14 05:41:57 +01:00
var has = Object . prototype . hasOwnProperty ;
2018-12-18 04:14:52 +01:00
var defaults = {
allowDots : false ,
allowPrototypes : false ,
arrayLimit : 20 ,
charset : 'utf-8' ,
charsetSentinel : false ,
2019-06-27 13:28:19 +02:00
comma : false ,
2018-12-18 04:14:52 +01:00
decoder : utils . decode ,
delimiter : '&' ,
depth : 5 ,
ignoreQueryPrefix : false ,
interpretNumericEntities : false ,
parameterLimit : 1000 ,
parseArrays : true ,
plainObjects : false ,
strictNullHandling : false
} ;
var interpretNumericEntities = function ( str ) {
return str . replace ( /&#(\d+);/g , function ( $0 , numberStr ) {
return String . fromCharCode ( parseInt ( numberStr , 10 ) ) ;
} ) ;
} ;
// This is what browsers will submit when the ✓ character occurs in an
// application/x-www-form-urlencoded body and the encoding of the page containing
// the form is iso-8859-1, or when the submitted form has an accept-charset
// attribute of iso-8859-1. Presumably also with other charsets that do not contain
// the ✓ character, such as us-ascii.
var isoSentinel = 'utf8=%26%2310003%3B' ; // encodeURIComponent('✓')
// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.
var charsetSentinel = 'utf8=%E2%9C%93' ; // encodeURIComponent('✓')
var parseValues = function parseQueryStringValues ( str , options ) {
var obj = { } ;
var cleanStr = options . ignoreQueryPrefix ? str . replace ( /^\?/ , '' ) : str ;
var limit = options . parameterLimit === Infinity ? undefined : options . parameterLimit ;
var parts = cleanStr . split ( options . delimiter , limit ) ;
var skipIndex = - 1 ; // Keep track of where the utf8 sentinel was found
var i ;
var charset = options . charset ;
if ( options . charsetSentinel ) {
for ( i = 0 ; i < parts . length ; ++ i ) {
if ( parts [ i ] . indexOf ( 'utf8=' ) === 0 ) {
if ( parts [ i ] === charsetSentinel ) {
charset = 'utf-8' ;
} else if ( parts [ i ] === isoSentinel ) {
charset = 'iso-8859-1' ;
}
skipIndex = i ;
i = parts . length ; // The eslint settings do not allow break;
}
}
}
for ( i = 0 ; i < parts . length ; ++ i ) {
if ( i === skipIndex ) {
continue ;
}
var part = parts [ i ] ;
var bracketEqualsPos = part . indexOf ( ']=' ) ;
var pos = bracketEqualsPos === - 1 ? part . indexOf ( '=' ) : bracketEqualsPos + 1 ;
var key , val ;
if ( pos === - 1 ) {
key = options . decoder ( part , defaults . decoder , charset ) ;
val = options . strictNullHandling ? null : '' ;
} else {
key = options . decoder ( part . slice ( 0 , pos ) , defaults . decoder , charset ) ;
val = options . decoder ( part . slice ( pos + 1 ) , defaults . decoder , charset ) ;
}
if ( val && options . interpretNumericEntities && charset === 'iso-8859-1' ) {
val = interpretNumericEntities ( val ) ;
}
2019-06-27 13:28:19 +02:00
if ( val && options . comma && val . indexOf ( ',' ) > - 1 ) {
val = val . split ( ',' ) ;
}
2018-12-18 04:14:52 +01:00
if ( has . call ( obj , key ) ) {
obj [ key ] = utils . combine ( obj [ key ] , val ) ;
} else {
obj [ key ] = val ;
}
}
return obj ;
} ;
var parseObject = function ( chain , val , options ) {
var leaf = val ;
for ( var i = chain . length - 1 ; i >= 0 ; -- i ) {
var obj ;
var root = chain [ i ] ;
if ( root === '[]' && options . parseArrays ) {
obj = [ ] . concat ( leaf ) ;
} else {
obj = options . plainObjects ? Object . create ( null ) : { } ;
var cleanRoot = root . charAt ( 0 ) === '[' && root . charAt ( root . length - 1 ) === ']' ? root . slice ( 1 , - 1 ) : root ;
var index = parseInt ( cleanRoot , 10 ) ;
if ( ! options . parseArrays && cleanRoot === '' ) {
obj = { 0 : leaf } ;
} else if (
! isNaN ( index )
&& root !== cleanRoot
&& String ( index ) === cleanRoot
&& index >= 0
&& ( options . parseArrays && index <= options . arrayLimit )
) {
obj = [ ] ;
obj [ index ] = leaf ;
} else {
obj [ cleanRoot ] = leaf ;
}
}
leaf = obj ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
return leaf ;
} ;
var parseKeys = function parseQueryStringKeys ( givenKey , val , options ) {
if ( ! givenKey ) {
return ;
}
// Transform dot notation to bracket notation
var key = options . allowDots ? givenKey . replace ( /\.([^.[]+)/g , '[$1]' ) : givenKey ;
// The regex chunks
var brackets = /(\[[^[\]]*])/ ;
var child = /(\[[^[\]]*])/g ;
// Get the parent
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var segment = brackets . exec ( key ) ;
var parent = segment ? key . slice ( 0 , segment . index ) : key ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
// Stash the parent if it exists
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var keys = [ ] ;
if ( parent ) {
// If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties
if ( ! options . plainObjects && has . call ( Object . prototype , parent ) ) {
if ( ! options . allowPrototypes ) {
return ;
2018-12-14 05:41:57 +01:00
}
}
2018-12-18 04:14:52 +01:00
keys . push ( parent ) ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
// Loop through children appending to the array until we hit depth
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
var i = 0 ;
while ( ( segment = child . exec ( key ) ) !== null && i < options . depth ) {
i += 1 ;
if ( ! options . plainObjects && has . call ( Object . prototype , segment [ 1 ] . slice ( 1 , - 1 ) ) ) {
if ( ! options . allowPrototypes ) {
return ;
2018-12-14 05:41:57 +01:00
}
}
2018-12-18 04:14:52 +01:00
keys . push ( segment [ 1 ] ) ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
// If there's a remainder, just add whatever is left
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( segment ) {
keys . push ( '[' + key . slice ( segment . index ) + ']' ) ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
return parseObject ( keys , val , options ) ;
} ;
2018-12-14 05:41:57 +01:00
2019-06-27 13:28:19 +02:00
var normalizeParseOptions = function normalizeParseOptions ( opts ) {
if ( ! opts ) {
return defaults ;
}
2018-12-14 05:41:57 +01:00
2019-06-27 13:28:19 +02:00
if ( opts . decoder !== null && opts . decoder !== undefined && typeof opts . decoder !== 'function' ) {
2018-12-18 04:14:52 +01:00
throw new TypeError ( 'Decoder has to be a function.' ) ;
}
2018-12-14 05:41:57 +01:00
2019-06-27 13:28:19 +02:00
if ( typeof opts . charset !== 'undefined' && opts . charset !== 'utf-8' && opts . charset !== 'iso-8859-1' ) {
2018-12-18 04:14:52 +01:00
throw new Error ( 'The charset option must be either utf-8, iso-8859-1, or undefined' ) ;
2018-12-14 05:41:57 +01:00
}
2019-06-27 13:28:19 +02:00
var charset = typeof opts . charset === 'undefined' ? defaults . charset : opts . charset ;
return {
allowDots : typeof opts . allowDots === 'undefined' ? defaults . allowDots : ! ! opts . allowDots ,
allowPrototypes : typeof opts . allowPrototypes === 'boolean' ? opts . allowPrototypes : defaults . allowPrototypes ,
arrayLimit : typeof opts . arrayLimit === 'number' ? opts . arrayLimit : defaults . arrayLimit ,
charset : charset ,
charsetSentinel : typeof opts . charsetSentinel === 'boolean' ? opts . charsetSentinel : defaults . charsetSentinel ,
comma : typeof opts . comma === 'boolean' ? opts . comma : defaults . comma ,
decoder : typeof opts . decoder === 'function' ? opts . decoder : defaults . decoder ,
delimiter : typeof opts . delimiter === 'string' || utils . isRegExp ( opts . delimiter ) ? opts . delimiter : defaults . delimiter ,
depth : typeof opts . depth === 'number' ? opts . depth : defaults . depth ,
ignoreQueryPrefix : opts . ignoreQueryPrefix === true ,
interpretNumericEntities : typeof opts . interpretNumericEntities === 'boolean' ? opts . interpretNumericEntities : defaults . interpretNumericEntities ,
parameterLimit : typeof opts . parameterLimit === 'number' ? opts . parameterLimit : defaults . parameterLimit ,
parseArrays : opts . parseArrays !== false ,
plainObjects : typeof opts . plainObjects === 'boolean' ? opts . plainObjects : defaults . plainObjects ,
strictNullHandling : typeof opts . strictNullHandling === 'boolean' ? opts . strictNullHandling : defaults . strictNullHandling
} ;
} ;
module . exports = function ( str , opts ) {
var options = normalizeParseOptions ( opts ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( str === '' || str === null || typeof str === 'undefined' ) {
return options . plainObjects ? Object . create ( null ) : { } ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
var tempObj = typeof str === 'string' ? parseValues ( str , options ) : str ;
var obj = options . plainObjects ? Object . create ( null ) : { } ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
// Iterate over the keys and setup the new object
var keys = Object . keys ( tempObj ) ;
for ( var i = 0 ; i < keys . length ; ++ i ) {
var key = keys [ i ] ;
var newObj = parseKeys ( key , tempObj [ key ] , options ) ;
obj = utils . merge ( obj , newObj , options ) ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
return utils . compact ( obj ) ;
} ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
/***/ } ) ,
2018-12-14 05:41:57 +01:00
2019-09-19 17:19:18 +02:00
/***/ 91 :
2018-12-18 04:14:52 +01:00
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
"use strict" ;
2018-12-14 05:41:57 +01:00
2019-09-19 17:19:18 +02:00
var stringify = _ _webpack _require _ _ ( 379 ) ;
var parse = _ _webpack _require _ _ ( 380 ) ;
var formats = _ _webpack _require _ _ ( 223 ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
module . exports = {
formats : formats ,
parse : parse ,
stringify : stringify
} ;
2018-12-14 05:41:57 +01:00
/***/ } )
2018-12-18 04:14:52 +01:00
/******/ } ) ;