+
+ 新增 + 删除 +
diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/css/index.css" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/css/index.css" new file mode 100644 index 0000000000000000000000000000000000000000..59a5e20f64c036215f3d6f8f34987f7f3bf8306a --- /dev/null +++ "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/css/index.css" @@ -0,0 +1,63 @@ +* { + margin: 0; + padding: 0; +} + +.base { + display: flex; + justify-content: center; + flex-wrap: nowrap; +} + +.main { + display: flex; +} + +.name { + margin: 0; + padding: 0; + width: 260px; + height: 260px; + line-height: 260px; + font-size: 20px; + text-align: center; + border: 1px solid black; + font-weight: bold; +} + +.image { + width: 200px; + height: 260px; + border: 1px solid black; +} + +.total { + width: 200px; + height: 260px; + text-align: center; + border: 1px solid black; +} + +.balance { + display: block; + font-size: 20px; + height: 100px; + line-height: 100px; +} + +.text { + width: 50px; + height: 20px; + margin-bottom: 5px; + font-size: 16px; +} + +.null { + width: 665px; + height: 100px; + font-size: 20px; + font-weight: bold; + border: 1px solid black; + line-height: 100px; + text-align: center; +} diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250.jpeg" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250.jpeg" new file mode 100644 index 0000000000000000000000000000000000000000..825dfaf3351951f88695d44e5267c4cde299549d Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250.jpeg" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250\345\260\217\345\215\241.jpg" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250\345\260\217\345\215\241.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bd8bf0547617e8e5c8cb545ed7f173f5293dce0f Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\345\221\250\350\257\227\351\233\250\345\260\217\345\215\241.jpg" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266.gif" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266.gif" new file mode 100644 index 0000000000000000000000000000000000000000..10dd04278d56dabb6decdb62f72d5a075a6efca0 Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266.gif" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266\345\260\217\345\215\241.jpg" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266\345\260\217\345\215\241.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bdf8054932bb7c0c9b20db2e0c4f2f5de5c94ac5 Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\346\262\210\346\242\246\347\221\266\345\260\217\345\215\241.jpg" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215.gif" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215.gif" new file mode 100644 index 0000000000000000000000000000000000000000..9a6b8a078aae1e7be2b3976be1474c8d212b152e Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215.gif" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215\345\260\217\345\215\241.jpg" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215\345\260\217\345\215\241.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..35489148c619cc9e5d01529dcb35d5801f805c1a Binary files /dev/null and "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/image/\351\207\221\347\237\245\345\246\215\345\260\217\345\215\241.jpg" differ diff --git "a/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/index.html" "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/index.html" new file mode 100644 index 0000000000000000000000000000000000000000..082533470d9087824447b17d081e5d4baee128a0 --- /dev/null +++ "b/\346\236\227\347\217\212/Vue\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/index.html" @@ -0,0 +1,54 @@ + + + +
+ + + +Welcome back, ' + escapeHtml(name) + '!
'); + } else { + res.write('Hello, new visitor!
'); + } + + res.write(''); +} + +http.createServer(onRequest).listen(3000); +``` + +## Testing + +```sh +$ npm test +``` + +## Benchmark + +``` +$ npm run bench + +> cookie@0.4.2 bench +> node benchmark/index.js + + node@16.14.0 + v8@9.4.146.24-node.20 + uv@1.43.0 + zlib@1.2.11 + brotli@1.0.9 + ares@1.18.1 + modules@93 + nghttp2@1.45.1 + napi@8 + llhttp@6.0.4 + openssl@1.1.1m+quic + cldr@40.0 + icu@70.1 + tz@2021a3 + unicode@14.0 + ngtcp2@0.1.0-DEV + nghttp3@0.1.0-DEV + +> node benchmark/parse-top.js + + cookie.parse - top sites + + 15 tests completed. + + parse accounts.google.com x 2,421,245 ops/sec ±0.80% (188 runs sampled) + parse apple.com x 2,684,710 ops/sec ±0.59% (189 runs sampled) + parse cloudflare.com x 2,231,418 ops/sec ±0.76% (186 runs sampled) + parse docs.google.com x 2,316,357 ops/sec ±1.28% (187 runs sampled) + parse drive.google.com x 2,363,543 ops/sec ±0.49% (189 runs sampled) + parse en.wikipedia.org x 839,414 ops/sec ±0.53% (189 runs sampled) + parse linkedin.com x 553,797 ops/sec ±0.63% (190 runs sampled) + parse maps.google.com x 1,314,779 ops/sec ±0.72% (189 runs sampled) + parse microsoft.com x 153,783 ops/sec ±0.53% (190 runs sampled) + parse play.google.com x 2,249,574 ops/sec ±0.59% (187 runs sampled) + parse plus.google.com x 2,258,682 ops/sec ±0.60% (188 runs sampled) + parse sites.google.com x 2,247,069 ops/sec ±0.68% (189 runs sampled) + parse support.google.com x 1,456,840 ops/sec ±0.70% (187 runs sampled) + parse www.google.com x 1,046,028 ops/sec ±0.58% (188 runs sampled) + parse youtu.be x 937,428 ops/sec ±1.47% (190 runs sampled) + parse youtube.com x 963,878 ops/sec ±0.59% (190 runs sampled) + +> node benchmark/parse.js + + cookie.parse - generic + + 6 tests completed. + + simple x 2,745,604 ops/sec ±0.77% (185 runs sampled) + decode x 557,287 ops/sec ±0.60% (188 runs sampled) + unquote x 2,498,475 ops/sec ±0.55% (189 runs sampled) + duplicates x 868,591 ops/sec ±0.89% (187 runs sampled) + 10 cookies x 306,745 ops/sec ±0.49% (190 runs sampled) + 100 cookies x 22,414 ops/sec ±2.38% (182 runs sampled) +``` + +## References + +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-09-5.4.7] + +[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1 +[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/cookie/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/cookie +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie diff --git "a/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/SECURITY.md" "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/SECURITY.md" new file mode 100644 index 0000000000000000000000000000000000000000..fd4a6c53a9cd1abacf91125dab3fde3163b4c412 --- /dev/null +++ "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/SECURITY.md" @@ -0,0 +1,25 @@ +# Security Policies and Procedures + +## Reporting a Bug + +The `cookie` team and community take all security bugs seriously. Thank +you for improving the security of the project. We appreciate your efforts and +responsible disclosure and will make every effort to acknowledge your +contributions. + +Report security bugs by emailing the current owner(s) of `cookie`. This +information can be found in the npm registry using the command +`npm owner ls cookie`. +If unsure or unable to get the information from the above, open an issue +in the [project issue tracker](https://github.com/jshttp/cookie/issues) +asking for the current contact information. + +To ensure the timely response to your report, please ensure that the entirety +of the report is contained within the email body and not solely behind a web +link or an attachment. + +At least one owner will acknowledge your email within 48 hours, and will send a +more detailed response within 48 hours indicating the next steps in handling +your report. After the initial reply to your report, the owners will +endeavor to keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. diff --git "a/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/index.js" "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/index.js" new file mode 100644 index 0000000000000000000000000000000000000000..9c3d07d890de51262462fd80b2e13b7bd37d401d --- /dev/null +++ "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/index.js" @@ -0,0 +1,270 @@ +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +exports.parse = parse; +exports.serialize = serialize; + +/** + * Module variables. + * @private + */ + +var __toString = Object.prototype.toString + +/** + * RegExp to match field-content in RFC 7230 sec 3.2 + * + * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] + * field-vchar = VCHAR / obs-text + * obs-text = %x80-FF + */ + +var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + +/** + * Parse a cookie header. + * + * Parse the given cookie header string into an object + * The object has the various cookies as keys(names) => values + * + * @param {string} str + * @param {object} [options] + * @return {object} + * @public + */ + +function parse(str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string'); + } + + var obj = {} + var opt = options || {}; + var dec = opt.decode || decode; + + var index = 0 + while (index < str.length) { + var eqIdx = str.indexOf('=', index) + + // no more cookie pairs + if (eqIdx === -1) { + break + } + + var endIdx = str.indexOf(';', index) + + if (endIdx === -1) { + endIdx = str.length + } else if (endIdx < eqIdx) { + // backtrack on prior semicolon + index = str.lastIndexOf(';', eqIdx - 1) + 1 + continue + } + + var key = str.slice(index, eqIdx).trim() + + // only assign once + if (undefined === obj[key]) { + var val = str.slice(eqIdx + 1, endIdx).trim() + + // quoted values + if (val.charCodeAt(0) === 0x22) { + val = val.slice(1, -1) + } + + obj[key] = tryDecode(val, dec); + } + + index = endIdx + 1 + } + + return obj; +} + +/** + * Serialize data into a cookie header. + * + * Serialize the a name value pair into a cookie string suitable for + * http headers. An optional options object specified cookie parameters. + * + * serialize('foo', 'bar', { httpOnly: true }) + * => "foo=bar; httpOnly" + * + * @param {string} name + * @param {string} val + * @param {object} [options] + * @return {string} + * @public + */ + +function serialize(name, val, options) { + var opt = options || {}; + var enc = opt.encode || encode; + + if (typeof enc !== 'function') { + throw new TypeError('option encode is invalid'); + } + + if (!fieldContentRegExp.test(name)) { + throw new TypeError('argument name is invalid'); + } + + var value = enc(val); + + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError('argument val is invalid'); + } + + var str = name + '=' + value; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + + if (isNaN(maxAge) || !isFinite(maxAge)) { + throw new TypeError('option maxAge is invalid') + } + + str += '; Max-Age=' + Math.floor(maxAge); + } + + if (opt.domain) { + if (!fieldContentRegExp.test(opt.domain)) { + throw new TypeError('option domain is invalid'); + } + + str += '; Domain=' + opt.domain; + } + + if (opt.path) { + if (!fieldContentRegExp.test(opt.path)) { + throw new TypeError('option path is invalid'); + } + + str += '; Path=' + opt.path; + } + + if (opt.expires) { + var expires = opt.expires + + if (!isDate(expires) || isNaN(expires.valueOf())) { + throw new TypeError('option expires is invalid'); + } + + str += '; Expires=' + expires.toUTCString() + } + + if (opt.httpOnly) { + str += '; HttpOnly'; + } + + if (opt.secure) { + str += '; Secure'; + } + + if (opt.priority) { + var priority = typeof opt.priority === 'string' + ? opt.priority.toLowerCase() + : opt.priority + + switch (priority) { + case 'low': + str += '; Priority=Low' + break + case 'medium': + str += '; Priority=Medium' + break + case 'high': + str += '; Priority=High' + break + default: + throw new TypeError('option priority is invalid') + } + } + + if (opt.sameSite) { + var sameSite = typeof opt.sameSite === 'string' + ? opt.sameSite.toLowerCase() : opt.sameSite; + + switch (sameSite) { + case true: + str += '; SameSite=Strict'; + break; + case 'lax': + str += '; SameSite=Lax'; + break; + case 'strict': + str += '; SameSite=Strict'; + break; + case 'none': + str += '; SameSite=None'; + break; + default: + throw new TypeError('option sameSite is invalid'); + } + } + + return str; +} + +/** + * URL-decode string value. Optimized to skip native call when no %. + * + * @param {string} str + * @returns {string} + */ + +function decode (str) { + return str.indexOf('%') !== -1 + ? decodeURIComponent(str) + : str +} + +/** + * URL-encode value. + * + * @param {string} str + * @returns {string} + */ + +function encode (val) { + return encodeURIComponent(val) +} + +/** + * Determine if value is a Date. + * + * @param {*} val + * @private + */ + +function isDate (val) { + return __toString.call(val) === '[object Date]' || + val instanceof Date +} + +/** + * Try decoding a string using a decoding function. + * + * @param {string} str + * @param {function} decode + * @private + */ + +function tryDecode(str, decode) { + try { + return decode(str); + } catch (e) { + return str; + } +} diff --git "a/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/package.json" "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/package.json" new file mode 100644 index 0000000000000000000000000000000000000000..ed5606a987e11096405225274869f94be3c2a7ca --- /dev/null +++ "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/cookie/package.json" @@ -0,0 +1,44 @@ +{ + "name": "cookie", + "description": "HTTP server cookie parsing and serialization", + "version": "0.5.0", + "author": "Roman ShtylmanLocation ' + escapeHtml(url) + ' not found
' + + // send a 404 + res.statusCode = 404 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.end(body, 'utf-8') +}) +``` + +### Encode a URL for use in a header field + +```js +var encodeUrl = require('encodeurl') +var escapeHtml = require('escape-html') +var url = require('url') + +http.createServer(function onRequest (req, res) { + // parse inbound url + var href = url.parse(req) + + // set new host for redirect + href.host = 'localhost' + href.protocol = 'https:' + href.slashes = true + + // create location header + var location = encodeUrl(url.format(href)) + + // create html message + var body = 'Redirecting to new site: ' + escapeHtml(location) + '
' + + // send a 301 + res.statusCode = 301 + res.setHeader('Content-Type', 'text/html; charset=UTF-8') + res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) + res.setHeader('Location', location) + res.end(body, 'utf-8') +}) +``` + +## Testing + +```sh +$ npm test +$ npm run lint +``` + +## References + +- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986] +- [WHATWG URL Living Standard][whatwg-url] + +[rfc-3986]: https://tools.ietf.org/html/rfc3986 +[whatwg-url]: https://url.spec.whatwg.org/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/encodeurl.svg +[npm-url]: https://npmjs.org/package/encodeurl +[node-version-image]: https://img.shields.io/node/v/encodeurl.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg +[travis-url]: https://travis-ci.org/pillarjs/encodeurl +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg +[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master +[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg +[downloads-url]: https://npmjs.org/package/encodeurl diff --git "a/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/index.js" "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/index.js" new file mode 100644 index 0000000000000000000000000000000000000000..fc4906c6c7896396a877e1f369c78f804e3afa10 --- /dev/null +++ "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/index.js" @@ -0,0 +1,60 @@ +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = encodeUrl + +/** + * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") + * and including invalid escape sequences. + * @private + */ + +var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g + +/** + * RegExp to match unmatched surrogate pair. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g + +/** + * String to replace unmatched surrogate pair with. + * @private + */ + +var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' + +/** + * Encode a URL to a percent-encoded form, excluding already-encoded sequences. + * + * This function will take an already-encoded URL and encode all the non-URL + * code points. This function will not encode the "%" character unless it is + * not part of a valid sequence (`%20` will be left as-is, but `%foo` will + * be encoded as `%25foo`). + * + * This encode is meant to be "safe" and does not throw errors. It will try as + * hard as it can to properly encode the given URL, including replacing any raw, + * unpaired surrogate pairs with the Unicode replacement character prior to + * encoding. + * + * @param {string} url + * @return {string} + * @public + */ + +function encodeUrl (url) { + return String(url) + .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) + .replace(ENCODE_CHARS_REGEXP, encodeURI) +} diff --git "a/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/package.json" "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/package.json" new file mode 100644 index 0000000000000000000000000000000000000000..b9f25ef10b2fc15b4a9c2ea5aa48856d73f1aade --- /dev/null +++ "b/\346\236\227\347\217\212/\347\224\237\345\221\275\345\221\250\346\234\237\344\275\234\344\270\232/node_modules/encodeurl/package.json" @@ -0,0 +1,40 @@ +{ + "name": "encodeurl", + "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", + "version": "1.0.2", + "contributors": [ + "Douglas Christopher Wilson