├── .gitignore
├── .npmignore
├── .travis.yml
├── LICENSE.txt
├── Makefile
├── README.md
├── bower.json
├── build
├── url-search-params.amd.js
├── url-search-params.js
├── url-search-params.max.amd.js
├── url-search-params.max.js
└── url-search-params.node.js
├── index.html
├── package-lock.json
├── package.json
├── src
├── upgrades.js
├── url-search-params-sort.js
├── url-search-params.js
└── utilities.js
├── template
├── amd.after
├── amd.before
├── copyright
├── license.after
├── license.before
├── md.after
├── md.before
├── node.after
├── node.before
├── var.after
└── var.before
└── test
├── .test.js
└── url-search-params.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src/*
2 | test/*
3 | template/*
4 | node_modules/*
5 | Makefile
6 | index.html
7 | .travis.yml
8 | bower.json
9 | template/license.*
10 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 0.10
4 | - 0.12
5 | git:
6 | depth: 1
7 | branches:
8 | only:
9 | - master
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (C) 2015-2017 Andrea Giammarchi - @WebReflection
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: build duk var node amd size hint clean test web preview pages dependencies
2 |
3 | # repository name
4 | REPO = url-search-params
5 |
6 | # make var files
7 | VAR = src/$(REPO).js \
8 | src/utilities.js\
9 | src/upgrades.js
10 |
11 | # make node files
12 | NODE = src/$(REPO).js
13 |
14 | # make amd files
15 | AMD = $(VAR)
16 |
17 | # README constant
18 |
19 |
20 | # default build task
21 | build:
22 | make clean
23 | make var
24 | make node
25 | make amd
26 | make test
27 | make hint
28 | make size
29 |
30 | # build generic version
31 | var:
32 | mkdir -p build
33 | cat template/var.before $(VAR) template/var.after src/$(REPO)-sort.js >build/no-copy.$(REPO).max.js
34 | node node_modules/uglify-js/bin/uglifyjs --ie8 --verbose build/no-copy.$(REPO).max.js >build/no-copy.$(REPO).js
35 | cat template/license.before LICENSE.txt template/license.after build/no-copy.$(REPO).max.js >build/$(REPO).max.js
36 | cat template/copyright build/no-copy.$(REPO).js >build/$(REPO).js
37 | rm build/no-copy.$(REPO).max.js
38 | rm build/no-copy.$(REPO).js
39 |
40 | # build node.js version
41 | node:
42 | mkdir -p build
43 | cat template/license.before LICENSE.txt template/license.after template/node.before $(NODE) template/node.after src/$(REPO)-sort.js >build/$(REPO).node.js
44 |
45 | # build AMD version
46 | amd:
47 | mkdir -p build
48 | cat template/amd.before $(AMD) src/$(REPO)-sort.js template/amd.after >build/no-copy.$(REPO).max.amd.js
49 | node node_modules/uglify-js/bin/uglifyjs --ie8 --verbose build/no-copy.$(REPO).max.amd.js >build/no-copy.$(REPO).amd.js
50 | cat template/license.before LICENSE.txt template/license.after build/no-copy.$(REPO).max.amd.js >build/$(REPO).max.amd.js
51 | cat template/copyright build/no-copy.$(REPO).amd.js >build/$(REPO).amd.js
52 | rm build/no-copy.$(REPO).max.amd.js
53 | rm build/no-copy.$(REPO).amd.js
54 |
55 | # build self executable for duktape
56 | duk:
57 | node -e 'var fs=require("fs");\
58 | fs.writeFileSync(\
59 | "test/duk.js",\
60 | fs.readFileSync("node_modules/wru/build/wru.console.js") +\
61 | "\n" +\
62 | fs.readFileSync("build/$(REPO).js") +\
63 | "\n" +\
64 | fs.readFileSync("test/$(REPO).js").toString().replace(/^[^\x00]+?\/\/:remove\s*/,"")\
65 | );'
66 |
67 |
68 | size:
69 | wc -c build/$(REPO).max.js
70 | gzip -c build/$(REPO).js | wc -c
71 |
72 | # hint built file
73 | hint:
74 | node node_modules/jshint/bin/jshint build/$(REPO).max.js
75 |
76 | # clean/remove build folder
77 | clean:
78 | rm -rf build
79 |
80 | # tests, as usual and of course
81 | test:
82 | npm test
83 |
84 | # launch tiny-cdn (ctrl+click to open the page)
85 | web:
86 | node node_modules/.bin/tiny-cdn run
87 |
88 | # markdown the readme and view it
89 | preview:
90 | node_modules/markdown/bin/md2html.js README.md >README.md.htm
91 | cat template/md.before README.md.htm template/md.after >README.md.html
92 | open README.md.html
93 | sleep 3
94 | rm README.md.htm README.md.html
95 |
96 | pages:
97 | git pull --rebase
98 | make var
99 | mkdir -p ~/tmp
100 | mkdir -p ~/tmp/$(REPO)
101 | cp .gitignore ~/tmp/
102 | cp -rf src ~/tmp/$(REPO)
103 | cp -rf build ~/tmp/$(REPO)
104 | cp -rf test ~/tmp/$(REPO)
105 | cp index.html ~/tmp/$(REPO)
106 | git checkout gh-pages
107 | cp ~/tmp/.gitignore ./
108 | mkdir -p test
109 | rm -rf test
110 | cp -rf ~/tmp/$(REPO) test
111 | git add .gitignore
112 | git add test
113 | git add test/.
114 | git commit -m 'automatic test generator'
115 | git push
116 | git checkout master
117 | rm -r ~/tmp/$(REPO)
118 |
119 | # modules used in this repo
120 | dependencies:
121 | rm -rf node_modules
122 | mkdir node_modules
123 | npm install wru
124 | npm install tiny-cdn
125 | npm install uglify-js@1
126 | npm install jshint
127 | npm install markdown
128 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | url-search-params
2 | =================
3 |
4 | [](http://travis-ci.org/WebReflection/url-search-params) [](https://cdnjs.com/libraries/url-search-params) [](https://github.com/WebReflection/donate)
5 |
6 | # Deprecated
7 |
8 | This polyfill has been improved, better tested, and moved under the [ungap](https://ungap.github.io) umbrella.
9 |
10 | The new version is available as [@ungap/url-search-params](https://github.com/ungap/url-search-params).
11 |
12 | - - -
13 |
14 | This is a polyfill for the [URLSearchParams API](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams).
15 |
16 | It is possible to simply include [build/url-search-params.js](build/url-search-params.js) or grab it via npm.
17 |
18 | ```
19 | npm install url-search-params
20 | ```
21 |
22 | The function is exported directly.
23 | ```js
24 | var URLSearchParams = require('url-search-params');
25 | ```
26 |
27 | MIT Style License
28 |
29 | ### iOS 10 + other platforms bug
30 |
31 | In case you'd like to replace the broken global native constructor, you can check some well known issue before including this polyfill on your project/page.
32 |
33 | ```html
34 |
41 | ```
42 |
43 | #### About HTMLAnchorElement.prototype.searchParams
44 | This property is already implemented in Firefox and polyfilled here only for browsers that exposes getters and setters
45 | through the `HTMLAnchorElement.prototype`.
46 |
47 | In order to know if such property is supported, you **must** do the check as such:
48 | ```
49 | if ('searchParams' in HTMLAnchorElement.prototype) {
50 | // polyfill for links supported
51 | }
52 | ```
53 | If you do this check instead:
54 | ```js
55 | if (HTMLAnchorElement.prototype.searchParams) {
56 | // throws a TypeError
57 | }
58 | ```
59 | this polyfill will reflect native behavior, throwing a type error due access to a property in a non instance of `HTMLAnchorElement`.
60 |
61 | Nothing new to learn here, [just a reminder](http://webreflection.blogspot.co.uk/2011/08/please-stop-reassigning-for-no-reason.html).
62 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "url-search-params",
3 | "description": "Simple polyfill for URLSearchParams standard",
4 | "main": "./build/url-search-params.max.js",
5 | "authors": [
6 | "Andrea Giammarchi"
7 | ],
8 | "license": "MIT",
9 | "keywords": [
10 | "DOM",
11 | "URLSearchParams",
12 | "polyfill",
13 | "shim"
14 | ],
15 | "homepage": "https://github.com/WebReflection/url-search-params",
16 | "moduleType": [
17 | "amd",
18 | "globals",
19 | "node"
20 | ],
21 | "ignore": [
22 | "**/.*",
23 | "node_modules",
24 | "bower_components",
25 | "test",
26 | "tests"
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/build/url-search-params.amd.js:
--------------------------------------------------------------------------------
1 | /*! (C) Andrea Giammarchi - Mit Style License */
2 | define(function(){"use strict";function URLSearchParams(query){var index,key,value,pairs,i,length,dict=Object.create(null);this[secret]=dict;if(!query)return;if(typeof query==="string"){if(query.charAt(0)==="?"){query=query.slice(1)}for(pairs=query.split("&"),i=0,length=pairs.length;i
2 |
3 |
4 | wru test
5 |
6 |
7 |
8 |
9 |
13 |
54 |
55 |
56 |
88 |
89 |
90 |
91 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "url-search-params",
3 | "version": "1.1.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "ajv": {
8 | "version": "5.5.2",
9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
10 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
11 | "dev": true,
12 | "optional": true,
13 | "requires": {
14 | "co": "^4.6.0",
15 | "fast-deep-equal": "^1.0.0",
16 | "fast-json-stable-stringify": "^2.0.0",
17 | "json-schema-traverse": "^0.3.0"
18 | }
19 | },
20 | "asn1": {
21 | "version": "0.2.4",
22 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
23 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
24 | "dev": true,
25 | "optional": true,
26 | "requires": {
27 | "safer-buffer": "~2.1.0"
28 | }
29 | },
30 | "assert-plus": {
31 | "version": "1.0.0",
32 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
33 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
34 | "dev": true
35 | },
36 | "async": {
37 | "version": "1.0.0",
38 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
39 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
40 | "dev": true,
41 | "optional": true
42 | },
43 | "asynckit": {
44 | "version": "0.4.0",
45 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
46 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
47 | "dev": true,
48 | "optional": true
49 | },
50 | "aws-sign2": {
51 | "version": "0.7.0",
52 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
53 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
54 | "dev": true,
55 | "optional": true
56 | },
57 | "aws4": {
58 | "version": "1.8.0",
59 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
60 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
61 | "dev": true,
62 | "optional": true
63 | },
64 | "balanced-match": {
65 | "version": "1.0.0",
66 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
67 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
68 | "dev": true
69 | },
70 | "bcrypt-pbkdf": {
71 | "version": "1.0.2",
72 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
73 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
74 | "dev": true,
75 | "optional": true,
76 | "requires": {
77 | "tweetnacl": "^0.14.3"
78 | }
79 | },
80 | "brace-expansion": {
81 | "version": "1.1.11",
82 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
83 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
84 | "dev": true,
85 | "requires": {
86 | "balanced-match": "^1.0.0",
87 | "concat-map": "0.0.1"
88 | }
89 | },
90 | "buffer-from": {
91 | "version": "1.1.1",
92 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
93 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
94 | "dev": true,
95 | "optional": true
96 | },
97 | "caseless": {
98 | "version": "0.12.0",
99 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
100 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
101 | "dev": true,
102 | "optional": true
103 | },
104 | "cli": {
105 | "version": "1.0.1",
106 | "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
107 | "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
108 | "dev": true,
109 | "requires": {
110 | "exit": "0.1.2",
111 | "glob": "^7.1.1"
112 | }
113 | },
114 | "co": {
115 | "version": "4.6.0",
116 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
117 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
118 | "dev": true,
119 | "optional": true
120 | },
121 | "colors": {
122 | "version": "1.0.3",
123 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
124 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
125 | "dev": true,
126 | "optional": true
127 | },
128 | "combined-stream": {
129 | "version": "1.0.6",
130 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
131 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
132 | "dev": true,
133 | "requires": {
134 | "delayed-stream": "~1.0.0"
135 | }
136 | },
137 | "commander": {
138 | "version": "2.17.1",
139 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
140 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
141 | "dev": true
142 | },
143 | "concat-map": {
144 | "version": "0.0.1",
145 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
146 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
147 | "dev": true
148 | },
149 | "concat-stream": {
150 | "version": "1.6.2",
151 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
152 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
153 | "dev": true,
154 | "optional": true,
155 | "requires": {
156 | "buffer-from": "^1.0.0",
157 | "inherits": "^2.0.3",
158 | "readable-stream": "^2.2.2",
159 | "typedarray": "^0.0.6"
160 | },
161 | "dependencies": {
162 | "isarray": {
163 | "version": "1.0.0",
164 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
165 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
166 | "dev": true,
167 | "optional": true
168 | },
169 | "readable-stream": {
170 | "version": "2.3.6",
171 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
172 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
173 | "dev": true,
174 | "optional": true,
175 | "requires": {
176 | "core-util-is": "~1.0.0",
177 | "inherits": "~2.0.3",
178 | "isarray": "~1.0.0",
179 | "process-nextick-args": "~2.0.0",
180 | "safe-buffer": "~5.1.1",
181 | "string_decoder": "~1.1.1",
182 | "util-deprecate": "~1.0.1"
183 | }
184 | },
185 | "string_decoder": {
186 | "version": "1.1.1",
187 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
188 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
189 | "dev": true,
190 | "optional": true,
191 | "requires": {
192 | "safe-buffer": "~5.1.0"
193 | }
194 | }
195 | }
196 | },
197 | "console-browserify": {
198 | "version": "1.1.0",
199 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
200 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
201 | "dev": true,
202 | "requires": {
203 | "date-now": "^0.1.4"
204 | }
205 | },
206 | "core-util-is": {
207 | "version": "1.0.2",
208 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
209 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
210 | "dev": true
211 | },
212 | "cycle": {
213 | "version": "1.0.3",
214 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
215 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
216 | "dev": true,
217 | "optional": true
218 | },
219 | "dashdash": {
220 | "version": "1.14.1",
221 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
222 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
223 | "dev": true,
224 | "optional": true,
225 | "requires": {
226 | "assert-plus": "^1.0.0"
227 | }
228 | },
229 | "date-now": {
230 | "version": "0.1.4",
231 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
232 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
233 | "dev": true
234 | },
235 | "debug": {
236 | "version": "2.6.9",
237 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
238 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
239 | "dev": true,
240 | "optional": true,
241 | "requires": {
242 | "ms": "2.0.0"
243 | }
244 | },
245 | "delayed-stream": {
246 | "version": "1.0.0",
247 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
248 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
249 | "dev": true
250 | },
251 | "dom-serializer": {
252 | "version": "0.1.0",
253 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
254 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
255 | "dev": true,
256 | "requires": {
257 | "domelementtype": "~1.1.1",
258 | "entities": "~1.1.1"
259 | },
260 | "dependencies": {
261 | "domelementtype": {
262 | "version": "1.1.3",
263 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
264 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
265 | "dev": true
266 | },
267 | "entities": {
268 | "version": "1.1.1",
269 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
270 | "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
271 | "dev": true
272 | }
273 | }
274 | },
275 | "domelementtype": {
276 | "version": "1.3.0",
277 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
278 | "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
279 | "dev": true
280 | },
281 | "domhandler": {
282 | "version": "2.3.0",
283 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
284 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
285 | "dev": true,
286 | "requires": {
287 | "domelementtype": "1"
288 | }
289 | },
290 | "domutils": {
291 | "version": "1.5.1",
292 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
293 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
294 | "dev": true,
295 | "requires": {
296 | "dom-serializer": "0",
297 | "domelementtype": "1"
298 | }
299 | },
300 | "ecc-jsbn": {
301 | "version": "0.1.2",
302 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
303 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
304 | "dev": true,
305 | "optional": true,
306 | "requires": {
307 | "jsbn": "~0.1.0",
308 | "safer-buffer": "^2.1.0"
309 | }
310 | },
311 | "entities": {
312 | "version": "1.0.0",
313 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
314 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
315 | "dev": true
316 | },
317 | "es6-promise": {
318 | "version": "4.2.4",
319 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
320 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
321 | "dev": true,
322 | "optional": true
323 | },
324 | "exit": {
325 | "version": "0.1.2",
326 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
327 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
328 | "dev": true
329 | },
330 | "extend": {
331 | "version": "3.0.2",
332 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
333 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
334 | "dev": true,
335 | "optional": true
336 | },
337 | "extract-zip": {
338 | "version": "1.6.7",
339 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
340 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
341 | "dev": true,
342 | "optional": true,
343 | "requires": {
344 | "concat-stream": "1.6.2",
345 | "debug": "2.6.9",
346 | "mkdirp": "0.5.1",
347 | "yauzl": "2.4.1"
348 | }
349 | },
350 | "extsprintf": {
351 | "version": "1.3.0",
352 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
353 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
354 | "dev": true
355 | },
356 | "eyes": {
357 | "version": "0.1.8",
358 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
359 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
360 | "dev": true,
361 | "optional": true
362 | },
363 | "fast-deep-equal": {
364 | "version": "1.1.0",
365 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
366 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
367 | "dev": true,
368 | "optional": true
369 | },
370 | "fast-json-stable-stringify": {
371 | "version": "2.0.0",
372 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
373 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
374 | "dev": true,
375 | "optional": true
376 | },
377 | "fd-slicer": {
378 | "version": "1.0.1",
379 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
380 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
381 | "dev": true,
382 | "optional": true,
383 | "requires": {
384 | "pend": "~1.2.0"
385 | }
386 | },
387 | "forever-agent": {
388 | "version": "0.6.1",
389 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
390 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
391 | "dev": true,
392 | "optional": true
393 | },
394 | "form-data": {
395 | "version": "2.3.2",
396 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
397 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
398 | "dev": true,
399 | "optional": true,
400 | "requires": {
401 | "asynckit": "^0.4.0",
402 | "combined-stream": "1.0.6",
403 | "mime-types": "^2.1.12"
404 | }
405 | },
406 | "fs-extra": {
407 | "version": "1.0.0",
408 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
409 | "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
410 | "dev": true,
411 | "optional": true,
412 | "requires": {
413 | "graceful-fs": "^4.1.2",
414 | "jsonfile": "^2.1.0",
415 | "klaw": "^1.0.0"
416 | }
417 | },
418 | "fs.realpath": {
419 | "version": "1.0.0",
420 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
421 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
422 | "dev": true
423 | },
424 | "getpass": {
425 | "version": "0.1.7",
426 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
427 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
428 | "dev": true,
429 | "optional": true,
430 | "requires": {
431 | "assert-plus": "^1.0.0"
432 | }
433 | },
434 | "glob": {
435 | "version": "7.1.3",
436 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
437 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
438 | "dev": true,
439 | "requires": {
440 | "fs.realpath": "^1.0.0",
441 | "inflight": "^1.0.4",
442 | "inherits": "2",
443 | "minimatch": "^3.0.4",
444 | "once": "^1.3.0",
445 | "path-is-absolute": "^1.0.0"
446 | }
447 | },
448 | "graceful-fs": {
449 | "version": "4.1.11",
450 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
451 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
452 | "dev": true,
453 | "optional": true
454 | },
455 | "har-schema": {
456 | "version": "2.0.0",
457 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
458 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
459 | "dev": true,
460 | "optional": true
461 | },
462 | "har-validator": {
463 | "version": "5.1.0",
464 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
465 | "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
466 | "dev": true,
467 | "optional": true,
468 | "requires": {
469 | "ajv": "^5.3.0",
470 | "har-schema": "^2.0.0"
471 | }
472 | },
473 | "hasha": {
474 | "version": "2.2.0",
475 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
476 | "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
477 | "dev": true,
478 | "optional": true,
479 | "requires": {
480 | "is-stream": "^1.0.1",
481 | "pinkie-promise": "^2.0.0"
482 | }
483 | },
484 | "holdon": {
485 | "version": "0.2.1",
486 | "resolved": "https://registry.npmjs.org/holdon/-/holdon-0.2.1.tgz",
487 | "integrity": "sha1-dO2aSM04MmKl18qnczBI2GRT5as=",
488 | "dev": true
489 | },
490 | "htmlparser2": {
491 | "version": "3.8.3",
492 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
493 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
494 | "dev": true,
495 | "requires": {
496 | "domelementtype": "1",
497 | "domhandler": "2.3",
498 | "domutils": "1.5",
499 | "entities": "1.0",
500 | "readable-stream": "1.1"
501 | }
502 | },
503 | "http-signature": {
504 | "version": "1.2.0",
505 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
506 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
507 | "dev": true,
508 | "optional": true,
509 | "requires": {
510 | "assert-plus": "^1.0.0",
511 | "jsprim": "^1.2.2",
512 | "sshpk": "^1.7.0"
513 | }
514 | },
515 | "inflight": {
516 | "version": "1.0.6",
517 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
518 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
519 | "dev": true,
520 | "requires": {
521 | "once": "^1.3.0",
522 | "wrappy": "1"
523 | }
524 | },
525 | "inherits": {
526 | "version": "2.0.3",
527 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
528 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
529 | "dev": true
530 | },
531 | "is-stream": {
532 | "version": "1.1.0",
533 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
534 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
535 | "dev": true,
536 | "optional": true
537 | },
538 | "is-typedarray": {
539 | "version": "1.0.0",
540 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
541 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
542 | "dev": true,
543 | "optional": true
544 | },
545 | "isarray": {
546 | "version": "0.0.1",
547 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
548 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
549 | "dev": true
550 | },
551 | "isexe": {
552 | "version": "2.0.0",
553 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
554 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
555 | "dev": true,
556 | "optional": true
557 | },
558 | "isstream": {
559 | "version": "0.1.2",
560 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
561 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
562 | "dev": true
563 | },
564 | "jsbn": {
565 | "version": "0.1.1",
566 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
567 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
568 | "dev": true,
569 | "optional": true
570 | },
571 | "jshint": {
572 | "version": "2.9.6",
573 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.6.tgz",
574 | "integrity": "sha512-KO9SIAKTlJQOM4lE64GQUtGBRpTOuvbrRrSZw3AhUxMNG266nX9hK2cKA4SBhXOj0irJGyNyGSLT62HGOVDEOA==",
575 | "dev": true,
576 | "requires": {
577 | "cli": "~1.0.0",
578 | "console-browserify": "1.1.x",
579 | "exit": "0.1.x",
580 | "htmlparser2": "3.8.x",
581 | "lodash": "~4.17.10",
582 | "minimatch": "~3.0.2",
583 | "phantom": "~4.0.1",
584 | "phantomjs-prebuilt": "~2.1.7",
585 | "shelljs": "0.3.x",
586 | "strip-json-comments": "1.0.x",
587 | "unicode-5.2.0": "^0.7.5"
588 | }
589 | },
590 | "json-schema": {
591 | "version": "0.2.3",
592 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
593 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
594 | "dev": true,
595 | "optional": true
596 | },
597 | "json-schema-traverse": {
598 | "version": "0.3.1",
599 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
600 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
601 | "dev": true,
602 | "optional": true
603 | },
604 | "json-stringify-safe": {
605 | "version": "5.0.1",
606 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
607 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
608 | "dev": true,
609 | "optional": true
610 | },
611 | "jsonfile": {
612 | "version": "2.4.0",
613 | "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
614 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
615 | "dev": true,
616 | "optional": true,
617 | "requires": {
618 | "graceful-fs": "^4.1.6"
619 | }
620 | },
621 | "jsprim": {
622 | "version": "1.4.1",
623 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
624 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
625 | "dev": true,
626 | "optional": true,
627 | "requires": {
628 | "assert-plus": "1.0.0",
629 | "extsprintf": "1.3.0",
630 | "json-schema": "0.2.3",
631 | "verror": "1.10.0"
632 | }
633 | },
634 | "kew": {
635 | "version": "0.7.0",
636 | "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
637 | "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
638 | "dev": true,
639 | "optional": true
640 | },
641 | "klaw": {
642 | "version": "1.3.1",
643 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
644 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
645 | "dev": true,
646 | "optional": true,
647 | "requires": {
648 | "graceful-fs": "^4.1.9"
649 | }
650 | },
651 | "lodash": {
652 | "version": "4.17.10",
653 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
654 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
655 | "dev": true
656 | },
657 | "mime-db": {
658 | "version": "1.29.0",
659 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz",
660 | "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=",
661 | "dev": true
662 | },
663 | "mime-types": {
664 | "version": "2.1.16",
665 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz",
666 | "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=",
667 | "dev": true,
668 | "requires": {
669 | "mime-db": "~1.29.0"
670 | }
671 | },
672 | "minimatch": {
673 | "version": "3.0.4",
674 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
675 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
676 | "dev": true,
677 | "requires": {
678 | "brace-expansion": "^1.1.7"
679 | }
680 | },
681 | "minimist": {
682 | "version": "0.0.8",
683 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
684 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
685 | "dev": true,
686 | "optional": true
687 | },
688 | "mkdirp": {
689 | "version": "0.5.1",
690 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
691 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
692 | "dev": true,
693 | "optional": true,
694 | "requires": {
695 | "minimist": "0.0.8"
696 | }
697 | },
698 | "ms": {
699 | "version": "2.0.0",
700 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
701 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
702 | "dev": true,
703 | "optional": true
704 | },
705 | "oauth-sign": {
706 | "version": "0.9.0",
707 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
708 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
709 | "dev": true,
710 | "optional": true
711 | },
712 | "once": {
713 | "version": "1.4.0",
714 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
715 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
716 | "dev": true,
717 | "requires": {
718 | "wrappy": "1"
719 | }
720 | },
721 | "path-is-absolute": {
722 | "version": "1.0.1",
723 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
724 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
725 | "dev": true
726 | },
727 | "pend": {
728 | "version": "1.2.0",
729 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
730 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
731 | "dev": true,
732 | "optional": true
733 | },
734 | "performance-now": {
735 | "version": "2.1.0",
736 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
737 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
738 | "dev": true,
739 | "optional": true
740 | },
741 | "phantom": {
742 | "version": "4.0.12",
743 | "resolved": "https://registry.npmjs.org/phantom/-/phantom-4.0.12.tgz",
744 | "integrity": "sha512-Tz82XhtPmwCk1FFPmecy7yRGZG2btpzY2KI9fcoPT7zT9det0CcMyfBFPp1S8DqzsnQnm8ZYEfdy528mwVtksA==",
745 | "dev": true,
746 | "optional": true,
747 | "requires": {
748 | "phantomjs-prebuilt": "^2.1.16",
749 | "split": "^1.0.1",
750 | "winston": "^2.4.0"
751 | }
752 | },
753 | "phantomjs-prebuilt": {
754 | "version": "2.1.16",
755 | "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
756 | "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
757 | "dev": true,
758 | "optional": true,
759 | "requires": {
760 | "es6-promise": "^4.0.3",
761 | "extract-zip": "^1.6.5",
762 | "fs-extra": "^1.0.0",
763 | "hasha": "^2.2.0",
764 | "kew": "^0.7.0",
765 | "progress": "^1.1.8",
766 | "request": "^2.81.0",
767 | "request-progress": "^2.0.1",
768 | "which": "^1.2.10"
769 | }
770 | },
771 | "pinkie": {
772 | "version": "2.0.4",
773 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
774 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
775 | "dev": true,
776 | "optional": true
777 | },
778 | "pinkie-promise": {
779 | "version": "2.0.1",
780 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
781 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
782 | "dev": true,
783 | "optional": true,
784 | "requires": {
785 | "pinkie": "^2.0.0"
786 | }
787 | },
788 | "process-nextick-args": {
789 | "version": "2.0.0",
790 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
791 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
792 | "dev": true,
793 | "optional": true
794 | },
795 | "progress": {
796 | "version": "1.1.8",
797 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
798 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
799 | "dev": true,
800 | "optional": true
801 | },
802 | "psl": {
803 | "version": "1.1.29",
804 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
805 | "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
806 | "dev": true,
807 | "optional": true
808 | },
809 | "punycode": {
810 | "version": "1.4.1",
811 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
812 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
813 | "dev": true,
814 | "optional": true
815 | },
816 | "qs": {
817 | "version": "6.5.2",
818 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
819 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
820 | "dev": true,
821 | "optional": true
822 | },
823 | "readable-stream": {
824 | "version": "1.1.14",
825 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
826 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
827 | "dev": true,
828 | "requires": {
829 | "core-util-is": "~1.0.0",
830 | "inherits": "~2.0.1",
831 | "isarray": "0.0.1",
832 | "string_decoder": "~0.10.x"
833 | }
834 | },
835 | "request": {
836 | "version": "2.88.0",
837 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
838 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
839 | "dev": true,
840 | "optional": true,
841 | "requires": {
842 | "aws-sign2": "~0.7.0",
843 | "aws4": "^1.8.0",
844 | "caseless": "~0.12.0",
845 | "combined-stream": "~1.0.6",
846 | "extend": "~3.0.2",
847 | "forever-agent": "~0.6.1",
848 | "form-data": "~2.3.2",
849 | "har-validator": "~5.1.0",
850 | "http-signature": "~1.2.0",
851 | "is-typedarray": "~1.0.0",
852 | "isstream": "~0.1.2",
853 | "json-stringify-safe": "~5.0.1",
854 | "mime-types": "~2.1.19",
855 | "oauth-sign": "~0.9.0",
856 | "performance-now": "^2.1.0",
857 | "qs": "~6.5.2",
858 | "safe-buffer": "^5.1.2",
859 | "tough-cookie": "~2.4.3",
860 | "tunnel-agent": "^0.6.0",
861 | "uuid": "^3.3.2"
862 | },
863 | "dependencies": {
864 | "mime-db": {
865 | "version": "1.36.0",
866 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
867 | "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
868 | "dev": true,
869 | "optional": true
870 | },
871 | "mime-types": {
872 | "version": "2.1.20",
873 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
874 | "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
875 | "dev": true,
876 | "optional": true,
877 | "requires": {
878 | "mime-db": "~1.36.0"
879 | }
880 | }
881 | }
882 | },
883 | "request-progress": {
884 | "version": "2.0.1",
885 | "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
886 | "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
887 | "dev": true,
888 | "optional": true,
889 | "requires": {
890 | "throttleit": "^1.0.0"
891 | }
892 | },
893 | "safe-buffer": {
894 | "version": "5.1.2",
895 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
896 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
897 | "dev": true
898 | },
899 | "safer-buffer": {
900 | "version": "2.1.2",
901 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
902 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
903 | "dev": true
904 | },
905 | "shelljs": {
906 | "version": "0.3.0",
907 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
908 | "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
909 | "dev": true
910 | },
911 | "source-map": {
912 | "version": "0.6.1",
913 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
914 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
915 | "dev": true
916 | },
917 | "split": {
918 | "version": "1.0.1",
919 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
920 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
921 | "dev": true,
922 | "optional": true,
923 | "requires": {
924 | "through": "2"
925 | }
926 | },
927 | "sshpk": {
928 | "version": "1.14.2",
929 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
930 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
931 | "dev": true,
932 | "optional": true,
933 | "requires": {
934 | "asn1": "~0.2.3",
935 | "assert-plus": "^1.0.0",
936 | "bcrypt-pbkdf": "^1.0.0",
937 | "dashdash": "^1.12.0",
938 | "ecc-jsbn": "~0.1.1",
939 | "getpass": "^0.1.1",
940 | "jsbn": "~0.1.0",
941 | "safer-buffer": "^2.0.2",
942 | "tweetnacl": "~0.14.0"
943 | }
944 | },
945 | "stack-trace": {
946 | "version": "0.0.10",
947 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
948 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
949 | "dev": true,
950 | "optional": true
951 | },
952 | "string_decoder": {
953 | "version": "0.10.31",
954 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
955 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
956 | "dev": true
957 | },
958 | "strip-json-comments": {
959 | "version": "1.0.4",
960 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
961 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
962 | "dev": true
963 | },
964 | "throttleit": {
965 | "version": "1.0.0",
966 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
967 | "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
968 | "dev": true,
969 | "optional": true
970 | },
971 | "through": {
972 | "version": "2.3.8",
973 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
974 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
975 | "dev": true,
976 | "optional": true
977 | },
978 | "tiny-cdn": {
979 | "version": "0.7.0",
980 | "resolved": "https://registry.npmjs.org/tiny-cdn/-/tiny-cdn-0.7.0.tgz",
981 | "integrity": "sha1-NqxMHkPDFab+oB0bBKqq8sXGE5A=",
982 | "dev": true,
983 | "requires": {
984 | "holdon": "*",
985 | "mime-types": "*"
986 | }
987 | },
988 | "tough-cookie": {
989 | "version": "2.4.3",
990 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
991 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
992 | "dev": true,
993 | "optional": true,
994 | "requires": {
995 | "psl": "^1.1.24",
996 | "punycode": "^1.4.1"
997 | }
998 | },
999 | "tunnel-agent": {
1000 | "version": "0.6.0",
1001 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1002 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1003 | "dev": true,
1004 | "optional": true,
1005 | "requires": {
1006 | "safe-buffer": "^5.0.1"
1007 | }
1008 | },
1009 | "tweetnacl": {
1010 | "version": "0.14.5",
1011 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1012 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1013 | "dev": true,
1014 | "optional": true
1015 | },
1016 | "typedarray": {
1017 | "version": "0.0.6",
1018 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1019 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
1020 | "dev": true,
1021 | "optional": true
1022 | },
1023 | "uglify-js": {
1024 | "version": "3.4.9",
1025 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
1026 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
1027 | "dev": true,
1028 | "requires": {
1029 | "commander": "~2.17.1",
1030 | "source-map": "~0.6.1"
1031 | }
1032 | },
1033 | "unicode-5.2.0": {
1034 | "version": "0.7.5",
1035 | "resolved": "https://registry.npmjs.org/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz",
1036 | "integrity": "sha512-KVGLW1Bri30x00yv4HNM8kBxoqFXr0Sbo55735nvrlsx4PYBZol3UtoWgO492fSwmsetzPEZzy73rbU8OGXJcA==",
1037 | "dev": true
1038 | },
1039 | "util-deprecate": {
1040 | "version": "1.0.2",
1041 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1042 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1043 | "dev": true,
1044 | "optional": true
1045 | },
1046 | "uuid": {
1047 | "version": "3.3.2",
1048 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
1049 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
1050 | "dev": true,
1051 | "optional": true
1052 | },
1053 | "verror": {
1054 | "version": "1.10.0",
1055 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1056 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1057 | "dev": true,
1058 | "optional": true,
1059 | "requires": {
1060 | "assert-plus": "^1.0.0",
1061 | "core-util-is": "1.0.2",
1062 | "extsprintf": "^1.2.0"
1063 | }
1064 | },
1065 | "which": {
1066 | "version": "1.3.1",
1067 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1068 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1069 | "dev": true,
1070 | "optional": true,
1071 | "requires": {
1072 | "isexe": "^2.0.0"
1073 | }
1074 | },
1075 | "winston": {
1076 | "version": "2.4.4",
1077 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
1078 | "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
1079 | "dev": true,
1080 | "optional": true,
1081 | "requires": {
1082 | "async": "~1.0.0",
1083 | "colors": "1.0.x",
1084 | "cycle": "1.0.x",
1085 | "eyes": "0.1.x",
1086 | "isstream": "0.1.x",
1087 | "stack-trace": "0.0.x"
1088 | }
1089 | },
1090 | "wrappy": {
1091 | "version": "1.0.2",
1092 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1093 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1094 | "dev": true
1095 | },
1096 | "wru": {
1097 | "version": "0.3.0",
1098 | "resolved": "https://registry.npmjs.org/wru/-/wru-0.3.0.tgz",
1099 | "integrity": "sha1-LwQgjH6vwhFRLaXwR/BqoAMrTDg=",
1100 | "dev": true
1101 | },
1102 | "yauzl": {
1103 | "version": "2.4.1",
1104 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
1105 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
1106 | "dev": true,
1107 | "optional": true,
1108 | "requires": {
1109 | "fd-slicer": "~1.0.1"
1110 | }
1111 | }
1112 | }
1113 | }
1114 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.1.0",
3 | "license": "MIT",
4 | "name": "url-search-params",
5 | "description": "Simple polyfill for URLSearchParams standard",
6 | "homepage": "https://github.com/WebReflection/url-search-params",
7 | "keywords": [
8 | "DOM",
9 | "URLSearchParams",
10 | "polyfill",
11 | "shim"
12 | ],
13 | "author": {
14 | "name": "Andrea Giammarchi",
15 | "web": "http://webreflection.blogspot.com/"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git://github.com/WebReflection/url-search-params.git"
20 | },
21 | "unpkg": "build/url-search-params.js",
22 | "main": "build/url-search-params.node.js",
23 | "scripts": {
24 | "test": "node test/.test.js"
25 | },
26 | "devDependencies": {
27 | "jshint": "^2.9.6",
28 | "tiny-cdn": "^0.7.0",
29 | "uglify-js": "^3.4.9",
30 | "wru": "^0.3.0"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/upgrades.js:
--------------------------------------------------------------------------------
1 |
2 | upgradeClass(HTMLAnchorElement);
3 | if (/^function|object$/.test(typeof URL) && URL.prototype) upgradeClass(URL);
4 |
5 | /*
6 |
7 | function spUpdate(a) {
8 | var
9 | search = this.toString(),
10 | password = a.password,
11 | username = a.username
12 | ;
13 | a.href = ''.concat(
14 | a.protocol, '//',
15 | username,
16 | password ? (':' + password) : '',
17 | username ? '@' : '',
18 | a.host,
19 | a.pathname,
20 | search ? ('?' + search) : '',
21 | a.hash
22 | );
23 | }
24 |
25 | */
26 |
--------------------------------------------------------------------------------
/src/url-search-params-sort.js:
--------------------------------------------------------------------------------
1 |
2 | (function (URLSearchParamsProto) {
3 |
4 | var iterable = (function () {
5 | try {
6 | return !!Symbol.iterator;
7 | } catch(error) {
8 | return false;
9 | }
10 | }());
11 |
12 | // mostly related to issue #24
13 | if (!('forEach' in URLSearchParamsProto)) {
14 | URLSearchParamsProto.forEach = function forEach(callback, thisArg) {
15 | var names = Object.create(null);
16 | this.toString()
17 | .replace(/=[\s\S]*?(?:&|$)/g, '=')
18 | .split('=')
19 | .forEach(function (name) {
20 | if (!name.length || name in names) return;
21 | (names[name] = this.getAll(name)).forEach(function(value) {
22 | callback.call(thisArg, value, name, this);
23 | }, this);
24 | }, this);
25 | };
26 | }
27 |
28 | if (!('keys' in URLSearchParamsProto)) {
29 | URLSearchParamsProto.keys = function keys() {
30 | var items = [];
31 | this.forEach(function(value, name) { items.push(name); });
32 | var iterator = {
33 | next: function() {
34 | var value = items.shift();
35 | return {done: value === undefined, value: value};
36 | }
37 | };
38 |
39 | if (iterable) {
40 | iterator[Symbol.iterator] = function() {
41 | return iterator;
42 | };
43 | }
44 |
45 | return iterator;
46 | };
47 | }
48 |
49 | if (!('values' in URLSearchParamsProto)) {
50 | URLSearchParamsProto.values = function values() {
51 | var items = [];
52 | this.forEach(function(value) { items.push(value); });
53 | var iterator = {
54 | next: function() {
55 | var value = items.shift();
56 | return {done: value === undefined, value: value};
57 | }
58 | };
59 |
60 | if (iterable) {
61 | iterator[Symbol.iterator] = function() {
62 | return iterator;
63 | };
64 | }
65 |
66 | return iterator;
67 | };
68 | }
69 |
70 | if (!('entries' in URLSearchParamsProto)) {
71 | URLSearchParamsProto.entries = function entries() {
72 | var items = [];
73 | this.forEach(function(value, name) { items.push([name, value]); });
74 | var iterator = {
75 | next: function() {
76 | var value = items.shift();
77 | return {done: value === undefined, value: value};
78 | }
79 | };
80 |
81 | if (iterable) {
82 | iterator[Symbol.iterator] = function() {
83 | return iterator;
84 | };
85 | }
86 |
87 | return iterator;
88 | };
89 | }
90 |
91 | if (iterable && !(Symbol.iterator in URLSearchParamsProto)) {
92 | URLSearchParamsProto[Symbol.iterator] = URLSearchParamsProto.entries;
93 | }
94 |
95 | if (!('sort' in URLSearchParamsProto)) {
96 | URLSearchParamsProto.sort = function sort() {
97 | var
98 | entries = this.entries(),
99 | entry = entries.next(),
100 | done = entry.done,
101 | keys = [],
102 | values = Object.create(null),
103 | i, key, value
104 | ;
105 | while (!done) {
106 | value = entry.value;
107 | key = value[0];
108 | keys.push(key);
109 | if (!(key in values)) {
110 | values[key] = [];
111 | }
112 | values[key].push(value[1]);
113 | entry = entries.next();
114 | done = entry.done;
115 | }
116 | // not the champion in efficiency
117 | // but these two bits just do the job
118 | keys.sort();
119 | for (i = 0; i < keys.length; i++) {
120 | this.delete(keys[i]);
121 | }
122 | for (i = 0; i < keys.length; i++) {
123 | key = keys[i];
124 | this.append(key, values[key].shift());
125 | }
126 | };
127 | }
128 |
129 | }(URLSearchParams.prototype));
130 |
--------------------------------------------------------------------------------
/src/url-search-params.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | function URLSearchParams(query) {
4 | var
5 | index, key, value,
6 | pairs, i, length,
7 | dict = Object.create(null)
8 | ;
9 | this[secret] = dict;
10 | if (!query) return;
11 | if (typeof query === 'string') {
12 | if (query.charAt(0) === '?') {
13 | query = query.slice(1);
14 | }
15 | for (
16 | pairs = query.split('&'),
17 | i = 0,
18 | length = pairs.length; i < length; i++
19 | ) {
20 | value = pairs[i];
21 | index = value.indexOf('=');
22 | if (-1 < index) {
23 | appendTo(
24 | dict,
25 | decode(value.slice(0, index)),
26 | decode(value.slice(index + 1))
27 | );
28 | } else if (value.length){
29 | appendTo(
30 | dict,
31 | decode(value),
32 | ''
33 | );
34 | }
35 | }
36 | } else {
37 | if (isArray(query)) {
38 | for (
39 | i = 0,
40 | length = query.length; i < length; i++
41 | ) {
42 | value = query[i];
43 | appendTo(dict, value[0], value[1]);
44 | }
45 | } else if (query.forEach) {
46 | query.forEach(addEach, dict);
47 | } else {
48 | for (key in query) {
49 | appendTo(dict, key, query[key]);
50 | }
51 | }
52 | }
53 | }
54 |
55 | var
56 | isArray = Array.isArray,
57 | URLSearchParamsProto = URLSearchParams.prototype,
58 | find = /[!'\(\)~]|%20|%00/g,
59 | plus = /\+/g,
60 | replace = {
61 | '!': '%21',
62 | "'": '%27',
63 | '(': '%28',
64 | ')': '%29',
65 | '~': '%7E',
66 | '%20': '+',
67 | '%00': '\x00'
68 | },
69 | replacer = function (match) {
70 | return replace[match];
71 | },
72 | secret = '__URLSearchParams__:' + Math.random()
73 | ;
74 |
75 | function addEach(value, key) {
76 | /* jshint validthis:true */
77 | appendTo(this, key, value);
78 | }
79 |
80 | function appendTo(dict, name, value) {
81 | var res = isArray(value) ? value.join(',') : value;
82 | if (name in dict)
83 | dict[name].push(res);
84 | else
85 | dict[name] = [res];
86 | }
87 |
88 | function decode(str) {
89 | return decodeURIComponent(str.replace(plus, ' '));
90 | }
91 |
92 | function encode(str) {
93 | return encodeURIComponent(str).replace(find, replacer);
94 | }
95 |
96 | URLSearchParamsProto.append = function append(name, value) {
97 | appendTo(this[secret], name, value);
98 | };
99 |
100 | URLSearchParamsProto.delete = function del(name) {
101 | delete this[secret][name];
102 | };
103 |
104 | URLSearchParamsProto.get = function get(name) {
105 | var dict = this[secret];
106 | return name in dict ? dict[name][0] : null;
107 | };
108 |
109 | URLSearchParamsProto.getAll = function getAll(name) {
110 | var dict = this[secret];
111 | return name in dict ? dict[name].slice(0) : [];
112 | };
113 |
114 | URLSearchParamsProto.has = function has(name) {
115 | return name in this[secret];
116 | };
117 |
118 | URLSearchParamsProto.set = function set(name, value) {
119 | this[secret][name] = ['' + value];
120 | };
121 |
122 | URLSearchParamsProto.forEach = function forEach(callback, thisArg) {
123 | var dict = this[secret];
124 | Object.getOwnPropertyNames(dict).forEach(function(name) {
125 | dict[name].forEach(function(value) {
126 | callback.call(thisArg, value, name, this);
127 | }, this);
128 | }, this);
129 | };
130 |
131 | /*
132 | URLSearchParamsProto.toBody = function() {
133 | return new Blob(
134 | [this.toString()],
135 | {type: 'application/x-www-form-urlencoded'}
136 | );
137 | };
138 | */
139 |
140 | URLSearchParamsProto.toJSON = function toJSON() {
141 | return {};
142 | };
143 |
144 | URLSearchParamsProto.toString = function toString() {
145 | var dict = this[secret], query = [], i, key, name, value;
146 | for (key in dict) {
147 | name = encode(key);
148 | for (
149 | i = 0,
150 | value = dict[key];
151 | i < value.length; i++
152 | ) {
153 | query.push(name + '=' + encode(value[i]));
154 | }
155 | }
156 | return query.join('&');
157 | };
158 |
--------------------------------------------------------------------------------
/src/utilities.js:
--------------------------------------------------------------------------------
1 | var
2 | dP = Object.defineProperty,
3 | gOPD = Object.getOwnPropertyDescriptor,
4 | createSearchParamsPollute = function (search) {
5 | /*jshint validthis:true */
6 | function append(name, value) {
7 | URLSearchParamsProto.append.call(this, name, value);
8 | name = this.toString();
9 | search.set.call(this._usp, name ? ('?' + name) : '');
10 | }
11 | function del(name) {
12 | URLSearchParamsProto.delete.call(this, name);
13 | name = this.toString();
14 | search.set.call(this._usp, name ? ('?' + name) : '');
15 | }
16 | function set(name, value) {
17 | URLSearchParamsProto.set.call(this, name, value);
18 | name = this.toString();
19 | search.set.call(this._usp, name ? ('?' + name) : '');
20 | }
21 | return function (sp, value) {
22 | sp.append = append;
23 | sp.delete = del;
24 | sp.set = set;
25 | return dP(sp, '_usp', {
26 | configurable: true,
27 | writable: true,
28 | value: value
29 | });
30 | };
31 | },
32 | createSearchParamsCreate = function (polluteSearchParams) {
33 | return function (obj, sp) {
34 | dP(
35 | obj, '_searchParams', {
36 | configurable: true,
37 | writable: true,
38 | value: polluteSearchParams(sp, obj)
39 | }
40 | );
41 | return sp;
42 | };
43 | },
44 | updateSearchParams = function (sp) {
45 | var append = sp.append;
46 | sp.append = URLSearchParamsProto.append;
47 | URLSearchParams.call(sp, sp._usp.search.slice(1));
48 | sp.append = append;
49 | },
50 | verifySearchParams = function (obj, Class) {
51 | if (!(obj instanceof Class)) throw new TypeError(
52 | "'searchParams' accessed on an object that " +
53 | "does not implement interface " + Class.name
54 | );
55 | },
56 | upgradeClass = function(Class){
57 | var
58 | ClassProto = Class.prototype,
59 | searchParams = gOPD(ClassProto, 'searchParams'),
60 | href = gOPD(ClassProto, 'href'),
61 | search = gOPD(ClassProto, 'search'),
62 | createSearchParams
63 | ;
64 | if (!searchParams && search && search.set) {
65 | createSearchParams = createSearchParamsCreate(
66 | createSearchParamsPollute(search)
67 | );
68 | Object.defineProperties(
69 | ClassProto,
70 | {
71 | href: {
72 | get: function () {
73 | return href.get.call(this);
74 | },
75 | set: function (value) {
76 | var sp = this._searchParams;
77 | href.set.call(this, value);
78 | if (sp) updateSearchParams(sp);
79 | }
80 | },
81 | search: {
82 | get: function () {
83 | return search.get.call(this);
84 | },
85 | set: function (value) {
86 | var sp = this._searchParams;
87 | search.set.call(this, value);
88 | if (sp) updateSearchParams(sp);
89 | }
90 | },
91 | searchParams: {
92 | get: function () {
93 | verifySearchParams(this, Class);
94 | return this._searchParams || createSearchParams(
95 | this,
96 | new URLSearchParams(this.search.slice(1))
97 | );
98 | },
99 | set: function (sp) {
100 | verifySearchParams(this, Class);
101 | createSearchParams(this, sp);
102 | }
103 | }
104 | }
105 | );
106 | }
107 |
108 | }
109 | ;
--------------------------------------------------------------------------------
/template/amd.after:
--------------------------------------------------------------------------------
1 |
2 | return URLSearchParams;
3 | });
--------------------------------------------------------------------------------
/template/amd.before:
--------------------------------------------------------------------------------
1 | define(function () {
2 |
--------------------------------------------------------------------------------
/template/copyright:
--------------------------------------------------------------------------------
1 | /*! (C) Andrea Giammarchi - Mit Style License */
2 |
--------------------------------------------------------------------------------
/template/license.after:
--------------------------------------------------------------------------------
1 |
2 | */
3 |
--------------------------------------------------------------------------------
/template/license.before:
--------------------------------------------------------------------------------
1 | /*!
2 |
--------------------------------------------------------------------------------
/template/md.after:
--------------------------------------------------------------------------------
1 |