Website Structure
This commit is contained in:
parent
62812f2090
commit
71f0676a62
22365 changed files with 4265753 additions and 791 deletions
21
Frontend-Learner/node_modules/parse-url/LICENSE
generated
vendored
Normal file
21
Frontend-Learner/node_modules/parse-url/LICENSE
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-24 Ionică Bizău <bizauionica@gmail.com> (https://ionicabizau.net)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
595
Frontend-Learner/node_modules/parse-url/README.md
generated
vendored
Normal file
595
Frontend-Learner/node_modules/parse-url/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,595 @@
|
|||
<!-- Please do not edit this file. Edit the `blah` field in the `package.json` instead. If in doubt, open an issue. -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# parse-url
|
||||
|
||||
[![Support me on Patreon][badge_patreon]][patreon] [![Buy me a book][badge_amazon]][amazon] [![PayPal][badge_paypal_donate]][paypal-donations] [](https://github.com/IonicaBizau/ama) [](https://www.npmjs.com/package/parse-url) [](https://www.npmjs.com/package/parse-url) [](https://www.codementor.io/johnnyb?utm_source=github&utm_medium=button&utm_term=johnnyb&utm_campaign=github)
|
||||
|
||||
<a href="https://www.buymeacoffee.com/H96WwChMy" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png" alt="Buy Me A Coffee"></a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
> An advanced url parser supporting git urls too.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
For low-level path parsing, check out [`parse-path`](https://github.com/IonicaBizau/parse-path). This very module is designed to parse urls. By default the urls are normalized.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :cloud: Installation
|
||||
|
||||
```sh
|
||||
# Using npm
|
||||
npm install --save parse-url
|
||||
|
||||
# Using yarn
|
||||
yarn add parse-url
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :clipboard: Example
|
||||
|
||||
|
||||
|
||||
```js
|
||||
// Dependencies
|
||||
import parseUrl from "parse-url";
|
||||
|
||||
console.log(parseUrl("http://ionicabizau.net/blog"))
|
||||
// {
|
||||
// protocols: [ 'http' ],
|
||||
// protocol: 'http',
|
||||
// port: '',
|
||||
// resource: 'ionicabizau.net',
|
||||
// user: '',
|
||||
// password: '',
|
||||
// pathname: '/blog',
|
||||
// hash: '',
|
||||
// search: '',
|
||||
// href: 'http://ionicabizau.net/blog',
|
||||
// query: {}
|
||||
// }
|
||||
|
||||
console.log(parseUrl("http://domain.com/path/name?foo=bar&bar=42#some-hash"))
|
||||
// {
|
||||
// protocols: [ 'http' ],
|
||||
// protocol: 'http',
|
||||
// port: '',
|
||||
// resource: 'domain.com',
|
||||
// user: '',
|
||||
// password: '',
|
||||
// pathname: '/path/name',
|
||||
// hash: 'some-hash',
|
||||
// search: 'foo=bar&bar=42',
|
||||
// href: 'http://domain.com/path/name?foo=bar&bar=42#some-hash',
|
||||
// query: { foo: 'bar', bar: '42' }
|
||||
// }
|
||||
|
||||
// If you want to parse fancy Git urls, turn off the automatic url normalization
|
||||
console.log(parseUrl("git+ssh://git@host.xz/path/name.git", false))
|
||||
// {
|
||||
// protocols: [ 'git', 'ssh' ],
|
||||
// protocol: 'git',
|
||||
// port: '',
|
||||
// resource: 'host.xz',
|
||||
// user: 'git',
|
||||
// password: '',
|
||||
// pathname: '/path/name.git',
|
||||
// hash: '',
|
||||
// search: '',
|
||||
// href: 'git+ssh://git@host.xz/path/name.git',
|
||||
// query: {}
|
||||
// }
|
||||
|
||||
console.log(parseUrl("git@github.com:IonicaBizau/git-stats.git", false))
|
||||
// {
|
||||
// protocols: [ 'ssh' ],
|
||||
// protocol: 'ssh',
|
||||
// port: '',
|
||||
// resource: 'github.com',
|
||||
// user: 'git',
|
||||
// password: '',
|
||||
// pathname: '/IonicaBizau/git-stats.git',
|
||||
// hash: '',
|
||||
// search: '',
|
||||
// href: 'git@github.com:IonicaBizau/git-stats.git',
|
||||
// query: {}
|
||||
// }
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :question: Get Help
|
||||
|
||||
There are few ways to get help:
|
||||
|
||||
|
||||
|
||||
1. Please [post questions on Stack Overflow](https://stackoverflow.com/questions/ask). You can open issues with questions, as long you add a link to your Stack Overflow question.
|
||||
2. For bug reports and feature requests, open issues. :bug:
|
||||
3. For direct and quick help, you can [use Codementor](https://www.codementor.io/johnnyb). :rocket:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :memo: Documentation
|
||||
|
||||
|
||||
### `interopDefaultLegacy()`
|
||||
#__PURE__
|
||||
|
||||
### `parseUrl(url, normalize)`
|
||||
Parses the input url.
|
||||
|
||||
**Note**: This *throws* if invalid urls are provided.
|
||||
|
||||
#### Params
|
||||
|
||||
- **String** `url`: The input url.
|
||||
- **Boolean|Object** `normalize`: Whether to normalize the url or not. Default is `false`. If `true`, the url will
|
||||
be normalized. If an object, it will be the
|
||||
options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).
|
||||
|
||||
For SSH urls, normalize won't work.
|
||||
|
||||
#### Return
|
||||
- **Object** An object containing the following fields:
|
||||
- `protocols` (Array): An array with the url protocols (usually it has one element).
|
||||
- `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
||||
- `port` (null|Number): The domain port.
|
||||
- `resource` (String): The url domain (including subdomains).
|
||||
- `host` (String): The fully qualified domain name of a network host, or its IP address.
|
||||
- `user` (String): The authentication user (usually for ssh urls).
|
||||
- `pathname` (String): The url pathname.
|
||||
- `hash` (String): The url hash.
|
||||
- `search` (String): The url querystring value.
|
||||
- `href` (String): The input url.
|
||||
- `query` (Object): The url querystring, parsed as object.
|
||||
- `parse_failed` (Boolean): Whether the parsing failed or not.
|
||||
|
||||
### GIT_RE
|
||||
|
||||
([a-zA-Z_][a-zA-Z0-9_-]{0,31}) Try to match the user
|
||||
([\w\.\-@]+) Match the host/resource
|
||||
(([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?) Match the path, allowing spaces/white
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :yum: How to contribute
|
||||
Have an idea? Found a bug? See [how to contribute][contributing].
|
||||
|
||||
|
||||
## :sparkling_heart: Support my projects
|
||||
I open-source almost everything I can, and I try to reply to everyone needing help using these projects. Obviously,
|
||||
this takes time. You can integrate and use these projects in your applications *for free*! You can even change the source code and redistribute (even resell it).
|
||||
|
||||
However, if you get some profit from this or just want to encourage me to continue creating stuff, there are few ways you can do it:
|
||||
|
||||
|
||||
- Starring and sharing the projects you like :rocket:
|
||||
- [![Buy me a book][badge_amazon]][amazon]—I love books! I will remember you after years if you buy me one. :grin: :book:
|
||||
- [![PayPal][badge_paypal]][paypal-donations]—You can make one-time donations via PayPal. I'll probably buy a ~~coffee~~ tea. :tea:
|
||||
- [![Support me on Patreon][badge_patreon]][patreon]—Set up a recurring monthly donation and you will get interesting news about what I'm doing (things that I don't share with everyone).
|
||||
- **Bitcoin**—You can send me bitcoins at this address (or scanning the code below): `1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6`
|
||||
|
||||

|
||||
|
||||
|
||||
Thanks! :heart:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :dizzy: Where is this library used?
|
||||
If you are using this library in one of your projects, add it in this list. :sparkles:
|
||||
|
||||
- `@_nomtek/react-native-shimmer-animation`
|
||||
- `@aabelmann/ui-layer`
|
||||
- `@ali5049/react-native-buttons`
|
||||
- `@amirdiafi/react-native-ios-haptics`
|
||||
- `@angga30prabu/wa-modified`
|
||||
- `@apardellass/react-native-audio-stream`
|
||||
- `@aysea/react-native-ui-library`
|
||||
- `@azalpacir/react-native-dhp-printer`
|
||||
- `@brantalikp/rn-resize`
|
||||
- `@buganto/client`
|
||||
- `@con-test/react-native-concent-common`
|
||||
- `@cs6/react-native-test-native-view-library`
|
||||
- `@damruravihara/react-native-testing-package`
|
||||
- `@dataparty/api`
|
||||
- `@enkeledi/react-native-week-month-date-picker`
|
||||
- `@extrieve_technologies/quickcapture_react_native`
|
||||
- `@foundernetes/machines`
|
||||
- `@foundernetes/metal-debian`
|
||||
- `@geeky-apo/react-native-advanced-clipboard`
|
||||
- `@hbglobal/react-native-actions-shortcuts`
|
||||
- `@heycharge/heycharge-react-native-sdk`
|
||||
- `@hieuquang2212/form`
|
||||
- `@hstech/utils`
|
||||
- `@idas1/ui-component-lib`
|
||||
- `@jfilipe-sparta/react-native-module_2`
|
||||
- `@jimengio/mocked-proxy`
|
||||
- `@klevn/solid-router`
|
||||
- `@lakutata-module/service`
|
||||
- `@mockswitch/cli`
|
||||
- `@ndla/source-map-resolver`
|
||||
- `@npm_fluentco/adflow-react-native-sdk`
|
||||
- `@oiti/rn-liveness2d`
|
||||
- `@open-wa/wa-automate`
|
||||
- `@phpboyscout/semantic-release-gitlab`
|
||||
- `@phuocnb/semrelease-gitlab`
|
||||
- `@positionex/position-sdk`
|
||||
- `@praella/localisationist`
|
||||
- `@qiwi/sourcecrumbs`
|
||||
- `@react-native-ui-design/button`
|
||||
- `@roq/ui-react`
|
||||
- `@roshub/api`
|
||||
- `@saad27/react-native-bottom-tab-tour`
|
||||
- `@semantic-release/gitlab`
|
||||
- `@sephriot/react-native-persistable-uri`
|
||||
- `@sidghimire/react-native-mapbox-navigation`
|
||||
- `@taingo97/react-native-awesome-module`
|
||||
- `@taingo97/react-native-bluetooth-xprinter`
|
||||
- `@taingo97/react-native-expo-key-rsa-kt`
|
||||
- `@taingo97/react-native-generate-key-rsa`
|
||||
- `@taingo97/react-native-key-rsa`
|
||||
- `@taingo97/react-native-print-xprinter`
|
||||
- `@taingo97/react-native-rsa-expo`
|
||||
- `@taingo97/react-native-sunmi-printer`
|
||||
- `@taingo97/react-native-telpo-printer`
|
||||
- `@teles1-semantic-release/gitlab`
|
||||
- `@thinxviewx/core-rn`
|
||||
- `@tomw2w/my-nuxt-layer`
|
||||
- `@valifysolutions/react-native-vidvliveness`
|
||||
- `@wecraftapps/react-native-use-keyboard`
|
||||
- `agent-get-agent`
|
||||
- `angularvezba`
|
||||
- `apaas-track`
|
||||
- `api-reach-react-native-fix`
|
||||
- `archlibrary`
|
||||
- `arifbudixz`
|
||||
- `astra-ufo-sdk`
|
||||
- `awesome-module-kd`
|
||||
- `ba-js-cookie-banner`
|
||||
- `begg`
|
||||
- `bilibili2local`
|
||||
- `biometric-st`
|
||||
- `birken-react-native-community-image-editor`
|
||||
- `blitzzz`
|
||||
- `build-plugin-ssr`
|
||||
- `candlelabssdk`
|
||||
- `checkbox-component`
|
||||
- `cli-live-tutorial`
|
||||
- `delta-screen`
|
||||
- `demo-test-scrn`
|
||||
- `deploy-versioning`
|
||||
- `design-system-trial-milyasbpa`
|
||||
- `dogandev-simple-toast`
|
||||
- `egg-muc-custom-loader`
|
||||
- `electron-info`
|
||||
- `eval-spider`
|
||||
- `expo-renavigate`
|
||||
- `fawaterak-online-payment`
|
||||
- `fawatrak-online-payment`
|
||||
- `fixed_form_builder`
|
||||
- `fluent.adflow.reactnativesdk`
|
||||
- `fluent.adflow.reactnativesdk-alpha`
|
||||
- `fmsl`
|
||||
- `framework_test_library_sixdee`
|
||||
- `framework_test_library_sixdee_new`
|
||||
- `framework_test_library_sixdee_new_new`
|
||||
- `fuge-runner`
|
||||
- `gamification-integration-new`
|
||||
- `gaurav-react-native-loop`
|
||||
- `generator-bootstrap-boilerplate-template`
|
||||
- `genz-native-elements`
|
||||
- `gh-monoproject-cli`
|
||||
- `git-up`
|
||||
- `gitlab-backup-util-harduino`
|
||||
- `griffin-ui-library`
|
||||
- `heroku-wp-environment-sync`
|
||||
- `hologit`
|
||||
- `hong1-utils`
|
||||
- `hubot-will-it-connect`
|
||||
- `hui-plugin-wss`
|
||||
- `ipsamvel`
|
||||
- `jamuskalim`
|
||||
- `jordy-frijters-test-lib`
|
||||
- `kakapo`
|
||||
- `khaled-salem-custom-components`
|
||||
- `luojia-cli-dev`
|
||||
- `markdownalint-cli2`
|
||||
- `michael-stun`
|
||||
- `microbe.js`
|
||||
- `miguelcostero-ng2-toasty`
|
||||
- `native-apple-login`
|
||||
- `native-date-picker-module`
|
||||
- `native-google-login`
|
||||
- `native-kakao-login`
|
||||
- `native-modal-damage-vehicle`
|
||||
- `native-zip`
|
||||
- `ndla-source-map-resolver`
|
||||
- `new-awesome-4321`
|
||||
- `njs-wa-auto`
|
||||
- `normalize-id`
|
||||
- `normalize-ssh`
|
||||
- `npm_one_12_34_1_`
|
||||
- `npm_one_1_2_3`
|
||||
- `npm_one_2_2`
|
||||
- `npm_qwerty`
|
||||
- `parse-db-uri`
|
||||
- `pasbeaucoupmoinsrave`
|
||||
- `payutesting`
|
||||
- `pnm-yph-react-native-custom-components`
|
||||
- `project-wajs-dv`
|
||||
- `pyreswap-sdk`
|
||||
- `quickcapture_react_native`
|
||||
- `raact-native-arunramya151`
|
||||
- `reac-native-arun-ramya-test`
|
||||
- `react-native-addition`
|
||||
- `react-native-android-video-player-view`
|
||||
- `react-native-animate-text`
|
||||
- `react-native-app-bubble`
|
||||
- `react-native-app-integrity-checksum`
|
||||
- `react-native-arps-authorize-net`
|
||||
- `react-native-arun-ramya-test`
|
||||
- `react-native-arunjeyam1987`
|
||||
- `react-native-arunmeena1987`
|
||||
- `react-native-arunramya151`
|
||||
- `react-native-auth-service-client`
|
||||
- `react-native-aventonfacetec-aventon`
|
||||
- `react-native-awesome-android-123`
|
||||
- `react-native-awesome-android-123-zeotap`
|
||||
- `react-native-awesome-module-latest`
|
||||
- `react-native-awesome-module-two`
|
||||
- `react-native-azure-communication-services`
|
||||
- `react-native-badge-control`
|
||||
- `react-native-basic-app`
|
||||
- `react-native-basic-screen`
|
||||
- `react-native-biometric-authenticate`
|
||||
- `react-native-bleccs-components`
|
||||
- `react-native-bluetooth-device-detect`
|
||||
- `react-native-bridge-package`
|
||||
- `react-native-bubble-chart`
|
||||
- `react-native-build-vesion-getter`
|
||||
- `react-native-check-component`
|
||||
- `react-native-chenaar`
|
||||
- `react-native-components-design`
|
||||
- `react-native-conekta-card-tokenizer`
|
||||
- `react-native-contact-list`
|
||||
- `react-native-cplus`
|
||||
- `react-native-create-video-thumbnail`
|
||||
- `react-native-ctp-odp`
|
||||
- `react-native-dhp-printer`
|
||||
- `react-native-dimensions-layout`
|
||||
- `react-native-dsphoto-module`
|
||||
- `react-native-fedlight-dsm`
|
||||
- `react-native-flyy`
|
||||
- `react-native-get-countries`
|
||||
- `react-native-ghn-ekyc`
|
||||
- `react-native-innity-2`
|
||||
- `react-native-innity-remaster`
|
||||
- `react-native-input-library`
|
||||
- `react-native-is7`
|
||||
- `react-native-jsi-device-info`
|
||||
- `react-native-kakao-maps`
|
||||
- `react-native-klarify-ios`
|
||||
- `react-native-klarify-ui`
|
||||
- `react-native-klc`
|
||||
- `react-native-lib-test-rn-1`
|
||||
- `react-native-library-testing-422522`
|
||||
- `react-native-line-login-android`
|
||||
- `react-native-login-demo-test`
|
||||
- `react-native-lowlatency`
|
||||
- `react-native-loyalty-platforms`
|
||||
- `react-native-manh-test`
|
||||
- `react-native-manual-ios-sdk`
|
||||
- `react-native-modal-progress-bar`
|
||||
- `react-native-module-arge`
|
||||
- `react-native-module-for-testing`
|
||||
- `react-native-multiplier-altroncoso`
|
||||
- `react-native-multiplier-component`
|
||||
- `react-native-multiplier-demo`
|
||||
- `react-native-multiplier2`
|
||||
- `react-native-multiply`
|
||||
- `react-native-multiply-component`
|
||||
- `react-native-multiselector`
|
||||
- `react-native-mun-kit`
|
||||
- `react-native-my-first-try-arun-ramya`
|
||||
- `react-native-native-audio-engine`
|
||||
- `react-native-native-ios-test1`
|
||||
- `react-native-nativewind`
|
||||
- `react-native-nghia-sharering`
|
||||
- `react-native-nice-learning`
|
||||
- `react-native-omental-framework`
|
||||
- `react-native-onramp`
|
||||
- `react-native-payu-payment-testing`
|
||||
- `react-native-plugpag-wrapper`
|
||||
- `react-native-progress-arrow`
|
||||
- `react-native-pulsator-native`
|
||||
- `react-native-rabbitmq-all`
|
||||
- `react-native-radio-bic-group-lib`
|
||||
- `react-native-reanimated-sortable-list`
|
||||
- `react-native-recent-framework-update`
|
||||
- `react-native-responsive-helper`
|
||||
- `react-native-responsive-size`
|
||||
- `react-native-return-usb-data`
|
||||
- `react-native-rn-app`
|
||||
- `react-native-rn-icons-library`
|
||||
- `react-native-rom-components`
|
||||
- `react-native-rtn-ips-poslin-test`
|
||||
- `react-native-sandycomponent`
|
||||
- `react-native-savczuk-feature-library`
|
||||
- `react-native-sayhello-module`
|
||||
- `react-native-screen-idle-timer`
|
||||
- `react-native-scroll-tab-to-index`
|
||||
- `react-native-shared-gesture`
|
||||
- `react-native-simple-timeline`
|
||||
- `react-native-sixdee_test_lib`
|
||||
- `react-native-sp-test-common`
|
||||
- `react-native-teknoctrl-components`
|
||||
- `react-native-test-comlibrary`
|
||||
- `react-native-test-module-hhh`
|
||||
- `react-native-test-view`
|
||||
- `react-native-ticker-tape`
|
||||
- `react-native-tone-framework`
|
||||
- `react-native-transtracker-library`
|
||||
- `react-native-ui-components-library`
|
||||
- `react-native-uvc-camera-android`
|
||||
- `react-native-version-app`
|
||||
- `react-native-volume-phisical`
|
||||
- `react-native-withframework-check`
|
||||
- `react-native-wtf`
|
||||
- `react-native-xiaomi-permissions`
|
||||
- `react-native-xprinter-thermal-ble`
|
||||
- `react-native-ytximkit`
|
||||
- `reactnatively`
|
||||
- `reat-native-multiplierkpr`
|
||||
- `refinejs-repo`
|
||||
- `rn-adyen-dropin`
|
||||
- `rn-agora-ios-m`
|
||||
- `rn-circular-chart`
|
||||
- `rn-counter-demo`
|
||||
- `rn-session-multiplier-demo`
|
||||
- `rn-tm-notify`
|
||||
- `rn_unique_device_id`
|
||||
- `robots-agent`
|
||||
- `rocomp`
|
||||
- `smart_one_connect`
|
||||
- `soajs.repositories`
|
||||
- `sourcecrumbs`
|
||||
- `stun`
|
||||
- `sushi-sdk-ftm`
|
||||
- `test-haptik-lib`
|
||||
- `test-zeo-collect`
|
||||
- `ts-scraper`
|
||||
- `tumblr-text`
|
||||
- `url-local`
|
||||
- `vision-camera-base64-resized`
|
||||
- `vision-camera-plugin-face-detector`
|
||||
- `vision-camera-plugin-scan-faces`
|
||||
- `vrt-cli`
|
||||
- `vue-cli-plugin-ice-builder`
|
||||
- `vue-cli-plugin-ut-builder`
|
||||
- `wa-frikz`
|
||||
- `wander-cli`
|
||||
- `warp-api`
|
||||
- `warp-server`
|
||||
- `web-yii2`
|
||||
- `wifi_configuration_package`
|
||||
- `workpad`
|
||||
- `xbuilder-forms`
|
||||
- `xl-git-up`
|
||||
- `yangtao-js`
|
||||
- `zeo-collect`
|
||||
- `zzzxxxyyy321123`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## :scroll: License
|
||||
|
||||
[MIT][license] © [Ionică Bizău][website]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[license]: /LICENSE
|
||||
[website]: https://ionicabizau.net
|
||||
[contributing]: /CONTRIBUTING.md
|
||||
[docs]: /DOCUMENTATION.md
|
||||
[badge_patreon]: https://ionicabizau.github.io/badges/patreon.svg
|
||||
[badge_amazon]: https://ionicabizau.github.io/badges/amazon.svg
|
||||
[badge_paypal]: https://ionicabizau.github.io/badges/paypal.svg
|
||||
[badge_paypal_donate]: https://ionicabizau.github.io/badges/paypal_donate.svg
|
||||
[patreon]: https://www.patreon.com/ionicabizau
|
||||
[amazon]: http://amzn.eu/hRo9sIZ
|
||||
[paypal-donations]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RVXDDLKKLQRJW
|
||||
401
Frontend-Learner/node_modules/parse-url/dist/index.js
generated
vendored
Normal file
401
Frontend-Learner/node_modules/parse-url/dist/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,401 @@
|
|||
'use strict';
|
||||
|
||||
var require$$1 = require('parse-path');
|
||||
|
||||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
||||
|
||||
var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
|
||||
|
||||
function getAugmentedNamespace(n) {
|
||||
if (n.__esModule) return n;
|
||||
var f = n.default;
|
||||
if (typeof f == "function") {
|
||||
var a = function a () {
|
||||
if (this instanceof a) {
|
||||
var args = [null];
|
||||
args.push.apply(args, arguments);
|
||||
var Ctor = Function.bind.apply(f, args);
|
||||
return new Ctor();
|
||||
}
|
||||
return f.apply(this, arguments);
|
||||
};
|
||||
a.prototype = f.prototype;
|
||||
} else a = {};
|
||||
Object.defineProperty(a, '__esModule', {value: true});
|
||||
Object.keys(n).forEach(function (k) {
|
||||
var d = Object.getOwnPropertyDescriptor(n, k);
|
||||
Object.defineProperty(a, k, d.get ? d : {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return n[k];
|
||||
}
|
||||
});
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
var src = {};
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
||||
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
|
||||
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
|
||||
|
||||
const testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
|
||||
|
||||
const normalizeDataURL = (urlString, {stripHash}) => {
|
||||
const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
|
||||
|
||||
if (!match) {
|
||||
throw new Error(`Invalid URL: ${urlString}`);
|
||||
}
|
||||
|
||||
let {type, data, hash} = match.groups;
|
||||
const mediaType = type.split(';');
|
||||
hash = stripHash ? '' : hash;
|
||||
|
||||
let isBase64 = false;
|
||||
if (mediaType[mediaType.length - 1] === 'base64') {
|
||||
mediaType.pop();
|
||||
isBase64 = true;
|
||||
}
|
||||
|
||||
// Lowercase MIME type
|
||||
const mimeType = (mediaType.shift() || '').toLowerCase();
|
||||
const attributes = mediaType
|
||||
.map(attribute => {
|
||||
let [key, value = ''] = attribute.split('=').map(string => string.trim());
|
||||
|
||||
// Lowercase `charset`
|
||||
if (key === 'charset') {
|
||||
value = value.toLowerCase();
|
||||
|
||||
if (value === DATA_URL_DEFAULT_CHARSET) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
return `${key}${value ? `=${value}` : ''}`;
|
||||
})
|
||||
.filter(Boolean);
|
||||
|
||||
const normalizedMediaType = [
|
||||
...attributes,
|
||||
];
|
||||
|
||||
if (isBase64) {
|
||||
normalizedMediaType.push('base64');
|
||||
}
|
||||
|
||||
if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
|
||||
normalizedMediaType.unshift(mimeType);
|
||||
}
|
||||
|
||||
return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
|
||||
};
|
||||
|
||||
function normalizeUrl(urlString, options) {
|
||||
options = {
|
||||
defaultProtocol: 'http:',
|
||||
normalizeProtocol: true,
|
||||
forceHttp: false,
|
||||
forceHttps: false,
|
||||
stripAuthentication: true,
|
||||
stripHash: false,
|
||||
stripTextFragment: true,
|
||||
stripWWW: true,
|
||||
removeQueryParameters: [/^utm_\w+/i],
|
||||
removeTrailingSlash: true,
|
||||
removeSingleSlash: true,
|
||||
removeDirectoryIndex: false,
|
||||
sortQueryParameters: true,
|
||||
...options,
|
||||
};
|
||||
|
||||
urlString = urlString.trim();
|
||||
|
||||
// Data URL
|
||||
if (/^data:/i.test(urlString)) {
|
||||
return normalizeDataURL(urlString, options);
|
||||
}
|
||||
|
||||
if (/^view-source:/i.test(urlString)) {
|
||||
throw new Error('`view-source:` is not supported as it is a non-standard protocol');
|
||||
}
|
||||
|
||||
const hasRelativeProtocol = urlString.startsWith('//');
|
||||
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
||||
|
||||
// Prepend protocol
|
||||
if (!isRelativeUrl) {
|
||||
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
|
||||
}
|
||||
|
||||
const urlObject = new URL(urlString);
|
||||
|
||||
if (options.forceHttp && options.forceHttps) {
|
||||
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
|
||||
}
|
||||
|
||||
if (options.forceHttp && urlObject.protocol === 'https:') {
|
||||
urlObject.protocol = 'http:';
|
||||
}
|
||||
|
||||
if (options.forceHttps && urlObject.protocol === 'http:') {
|
||||
urlObject.protocol = 'https:';
|
||||
}
|
||||
|
||||
// Remove auth
|
||||
if (options.stripAuthentication) {
|
||||
urlObject.username = '';
|
||||
urlObject.password = '';
|
||||
}
|
||||
|
||||
// Remove hash
|
||||
if (options.stripHash) {
|
||||
urlObject.hash = '';
|
||||
} else if (options.stripTextFragment) {
|
||||
urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');
|
||||
}
|
||||
|
||||
// Remove duplicate slashes if not preceded by a protocol
|
||||
// NOTE: This could be implemented using a single negative lookbehind
|
||||
// regex, but we avoid that to maintain compatibility with older js engines
|
||||
// which do not have support for that feature.
|
||||
if (urlObject.pathname) {
|
||||
// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\b[a-z][a-z\d+\-.]{1,50}:)\/{2,}/g, '/');` when Safari supports negative lookbehind.
|
||||
|
||||
// Split the string by occurrences of this protocol regex, and perform
|
||||
// duplicate-slash replacement on the strings between those occurrences
|
||||
// (if any).
|
||||
const protocolRegex = /\b[a-z][a-z\d+\-.]{1,50}:\/\//g;
|
||||
|
||||
let lastIndex = 0;
|
||||
let result = '';
|
||||
for (;;) {
|
||||
const match = protocolRegex.exec(urlObject.pathname);
|
||||
if (!match) {
|
||||
break;
|
||||
}
|
||||
|
||||
const protocol = match[0];
|
||||
const protocolAtIndex = match.index;
|
||||
const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);
|
||||
|
||||
result += intermediate.replace(/\/{2,}/g, '/');
|
||||
result += protocol;
|
||||
lastIndex = protocolAtIndex + protocol.length;
|
||||
}
|
||||
|
||||
const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);
|
||||
result += remnant.replace(/\/{2,}/g, '/');
|
||||
|
||||
urlObject.pathname = result;
|
||||
}
|
||||
|
||||
// Decode URI octets
|
||||
if (urlObject.pathname) {
|
||||
try {
|
||||
urlObject.pathname = decodeURI(urlObject.pathname);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
// Remove directory index
|
||||
if (options.removeDirectoryIndex === true) {
|
||||
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
||||
}
|
||||
|
||||
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
|
||||
let pathComponents = urlObject.pathname.split('/');
|
||||
const lastComponent = pathComponents[pathComponents.length - 1];
|
||||
|
||||
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
||||
pathComponents = pathComponents.slice(0, -1);
|
||||
urlObject.pathname = pathComponents.slice(1).join('/') + '/';
|
||||
}
|
||||
}
|
||||
|
||||
if (urlObject.hostname) {
|
||||
// Remove trailing dot
|
||||
urlObject.hostname = urlObject.hostname.replace(/\.$/, '');
|
||||
|
||||
// Remove `www.`
|
||||
if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) {
|
||||
// Each label should be max 63 at length (min: 1).
|
||||
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
||||
// Each TLD should be up to 63 characters long (min: 2).
|
||||
// It is technically possible to have a single character TLD, but none currently exist.
|
||||
urlObject.hostname = urlObject.hostname.replace(/^www\./, '');
|
||||
}
|
||||
}
|
||||
|
||||
// Remove query unwanted parameters
|
||||
if (Array.isArray(options.removeQueryParameters)) {
|
||||
// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
|
||||
for (const key of [...urlObject.searchParams.keys()]) {
|
||||
if (testParameter(key, options.removeQueryParameters)) {
|
||||
urlObject.searchParams.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.removeQueryParameters === true) {
|
||||
urlObject.search = '';
|
||||
}
|
||||
|
||||
// Sort query parameters
|
||||
if (options.sortQueryParameters) {
|
||||
urlObject.searchParams.sort();
|
||||
|
||||
// Calling `.sort()` encodes the search parameters, so we need to decode them again.
|
||||
try {
|
||||
urlObject.search = decodeURIComponent(urlObject.search);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
if (options.removeTrailingSlash) {
|
||||
urlObject.pathname = urlObject.pathname.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
const oldUrlString = urlString;
|
||||
|
||||
// Take advantage of many of the Node `url` normalizations
|
||||
urlString = urlObject.toString();
|
||||
|
||||
if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {
|
||||
urlString = urlString.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
// Remove ending `/` unless removeSingleSlash is false
|
||||
if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {
|
||||
urlString = urlString.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
// Restore relative protocol, if applicable
|
||||
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
||||
urlString = urlString.replace(/^http:\/\//, '//');
|
||||
}
|
||||
|
||||
// Remove http/https
|
||||
if (options.stripProtocol) {
|
||||
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
|
||||
}
|
||||
|
||||
return urlString;
|
||||
}
|
||||
|
||||
var normalizeUrl$1 = /*#__PURE__*/Object.freeze({
|
||||
__proto__: null,
|
||||
'default': normalizeUrl
|
||||
});
|
||||
|
||||
var require$$0 = /*@__PURE__*/getAugmentedNamespace(normalizeUrl$1);
|
||||
|
||||
Object.defineProperty(src, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Dependencies
|
||||
|
||||
var _normalizeUrl = require$$0;
|
||||
|
||||
var _normalizeUrl2 = _interopRequireDefault(_normalizeUrl);
|
||||
|
||||
var _parsePath = require$$1__default["default"];
|
||||
|
||||
var _parsePath2 = _interopRequireDefault(_parsePath);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* parseUrl
|
||||
* Parses the input url.
|
||||
*
|
||||
* **Note**: This *throws* if invalid urls are provided.
|
||||
*
|
||||
* @name parseUrl
|
||||
* @function
|
||||
* @param {String} url The input url.
|
||||
* @param {Boolean|Object} normalize Whether to normalize the url or not.
|
||||
* Default is `false`. If `true`, the url will
|
||||
* be normalized. If an object, it will be the
|
||||
* options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).
|
||||
*
|
||||
* For SSH urls, normalize won't work.
|
||||
*
|
||||
* @return {Object} An object containing the following fields:
|
||||
*
|
||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
||||
* - `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
||||
* - `port` (null|Number): The domain port.
|
||||
* - `resource` (String): The url domain (including subdomains).
|
||||
* - `host` (String): The fully qualified domain name of a network host, or its IP address.
|
||||
* - `user` (String): The authentication user (usually for ssh urls).
|
||||
* - `pathname` (String): The url pathname.
|
||||
* - `hash` (String): The url hash.
|
||||
* - `search` (String): The url querystring value.
|
||||
* - `href` (String): The input url.
|
||||
* - `query` (Object): The url querystring, parsed as object.
|
||||
* - `parse_failed` (Boolean): Whether the parsing failed or not.
|
||||
*/
|
||||
var parseUrl = function parseUrl(url) {
|
||||
var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
|
||||
// Constants
|
||||
/**
|
||||
* ([a-zA-Z_][a-zA-Z0-9_-]{0,31}) Try to match the user
|
||||
* ([\w\.\-@]+) Match the host/resource
|
||||
* (([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?) Match the path, allowing spaces/white
|
||||
*/
|
||||
var GIT_RE = /^(?:([a-zA-Z_][a-zA-Z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:](([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?)$/;
|
||||
|
||||
var throwErr = function throwErr(msg) {
|
||||
var err = new Error(msg);
|
||||
err.subject_url = url;
|
||||
throw err;
|
||||
};
|
||||
|
||||
if (typeof url !== "string" || !url.trim()) {
|
||||
throwErr("Invalid url.");
|
||||
}
|
||||
|
||||
if (url.length > parseUrl.MAX_INPUT_LENGTH) {
|
||||
throwErr("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.");
|
||||
}
|
||||
|
||||
if (normalize) {
|
||||
if ((typeof normalize === "undefined" ? "undefined" : _typeof(normalize)) !== "object") {
|
||||
normalize = {
|
||||
stripHash: false
|
||||
};
|
||||
}
|
||||
url = (0, _normalizeUrl2.default)(url, normalize);
|
||||
}
|
||||
|
||||
var parsed = (0, _parsePath2.default)(url);
|
||||
|
||||
// Potential git-ssh urls
|
||||
if (parsed.parse_failed) {
|
||||
var matched = parsed.href.match(GIT_RE);
|
||||
|
||||
if (matched) {
|
||||
parsed.protocols = ["ssh"];
|
||||
parsed.protocol = "ssh";
|
||||
parsed.resource = matched[2];
|
||||
parsed.host = matched[2];
|
||||
parsed.user = matched[1];
|
||||
parsed.pathname = "/" + matched[3];
|
||||
parsed.parse_failed = false;
|
||||
} else {
|
||||
throwErr("URL parsing failed.");
|
||||
}
|
||||
}
|
||||
|
||||
return parsed;
|
||||
};
|
||||
|
||||
parseUrl.MAX_INPUT_LENGTH = 2048;
|
||||
|
||||
var _default = src.default = parseUrl;
|
||||
|
||||
module.exports = _default;
|
||||
395
Frontend-Learner/node_modules/parse-url/dist/index.mjs
generated
vendored
Normal file
395
Frontend-Learner/node_modules/parse-url/dist/index.mjs
generated
vendored
Normal file
|
|
@ -0,0 +1,395 @@
|
|||
import require$$1 from 'parse-path';
|
||||
|
||||
function getAugmentedNamespace(n) {
|
||||
if (n.__esModule) return n;
|
||||
var f = n.default;
|
||||
if (typeof f == "function") {
|
||||
var a = function a () {
|
||||
if (this instanceof a) {
|
||||
var args = [null];
|
||||
args.push.apply(args, arguments);
|
||||
var Ctor = Function.bind.apply(f, args);
|
||||
return new Ctor();
|
||||
}
|
||||
return f.apply(this, arguments);
|
||||
};
|
||||
a.prototype = f.prototype;
|
||||
} else a = {};
|
||||
Object.defineProperty(a, '__esModule', {value: true});
|
||||
Object.keys(n).forEach(function (k) {
|
||||
var d = Object.getOwnPropertyDescriptor(n, k);
|
||||
Object.defineProperty(a, k, d.get ? d : {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return n[k];
|
||||
}
|
||||
});
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
var src = {};
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
||||
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
|
||||
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
|
||||
|
||||
const testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
|
||||
|
||||
const normalizeDataURL = (urlString, {stripHash}) => {
|
||||
const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
|
||||
|
||||
if (!match) {
|
||||
throw new Error(`Invalid URL: ${urlString}`);
|
||||
}
|
||||
|
||||
let {type, data, hash} = match.groups;
|
||||
const mediaType = type.split(';');
|
||||
hash = stripHash ? '' : hash;
|
||||
|
||||
let isBase64 = false;
|
||||
if (mediaType[mediaType.length - 1] === 'base64') {
|
||||
mediaType.pop();
|
||||
isBase64 = true;
|
||||
}
|
||||
|
||||
// Lowercase MIME type
|
||||
const mimeType = (mediaType.shift() || '').toLowerCase();
|
||||
const attributes = mediaType
|
||||
.map(attribute => {
|
||||
let [key, value = ''] = attribute.split('=').map(string => string.trim());
|
||||
|
||||
// Lowercase `charset`
|
||||
if (key === 'charset') {
|
||||
value = value.toLowerCase();
|
||||
|
||||
if (value === DATA_URL_DEFAULT_CHARSET) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
return `${key}${value ? `=${value}` : ''}`;
|
||||
})
|
||||
.filter(Boolean);
|
||||
|
||||
const normalizedMediaType = [
|
||||
...attributes,
|
||||
];
|
||||
|
||||
if (isBase64) {
|
||||
normalizedMediaType.push('base64');
|
||||
}
|
||||
|
||||
if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
|
||||
normalizedMediaType.unshift(mimeType);
|
||||
}
|
||||
|
||||
return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
|
||||
};
|
||||
|
||||
function normalizeUrl(urlString, options) {
|
||||
options = {
|
||||
defaultProtocol: 'http:',
|
||||
normalizeProtocol: true,
|
||||
forceHttp: false,
|
||||
forceHttps: false,
|
||||
stripAuthentication: true,
|
||||
stripHash: false,
|
||||
stripTextFragment: true,
|
||||
stripWWW: true,
|
||||
removeQueryParameters: [/^utm_\w+/i],
|
||||
removeTrailingSlash: true,
|
||||
removeSingleSlash: true,
|
||||
removeDirectoryIndex: false,
|
||||
sortQueryParameters: true,
|
||||
...options,
|
||||
};
|
||||
|
||||
urlString = urlString.trim();
|
||||
|
||||
// Data URL
|
||||
if (/^data:/i.test(urlString)) {
|
||||
return normalizeDataURL(urlString, options);
|
||||
}
|
||||
|
||||
if (/^view-source:/i.test(urlString)) {
|
||||
throw new Error('`view-source:` is not supported as it is a non-standard protocol');
|
||||
}
|
||||
|
||||
const hasRelativeProtocol = urlString.startsWith('//');
|
||||
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
||||
|
||||
// Prepend protocol
|
||||
if (!isRelativeUrl) {
|
||||
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
|
||||
}
|
||||
|
||||
const urlObject = new URL(urlString);
|
||||
|
||||
if (options.forceHttp && options.forceHttps) {
|
||||
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
|
||||
}
|
||||
|
||||
if (options.forceHttp && urlObject.protocol === 'https:') {
|
||||
urlObject.protocol = 'http:';
|
||||
}
|
||||
|
||||
if (options.forceHttps && urlObject.protocol === 'http:') {
|
||||
urlObject.protocol = 'https:';
|
||||
}
|
||||
|
||||
// Remove auth
|
||||
if (options.stripAuthentication) {
|
||||
urlObject.username = '';
|
||||
urlObject.password = '';
|
||||
}
|
||||
|
||||
// Remove hash
|
||||
if (options.stripHash) {
|
||||
urlObject.hash = '';
|
||||
} else if (options.stripTextFragment) {
|
||||
urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');
|
||||
}
|
||||
|
||||
// Remove duplicate slashes if not preceded by a protocol
|
||||
// NOTE: This could be implemented using a single negative lookbehind
|
||||
// regex, but we avoid that to maintain compatibility with older js engines
|
||||
// which do not have support for that feature.
|
||||
if (urlObject.pathname) {
|
||||
// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\b[a-z][a-z\d+\-.]{1,50}:)\/{2,}/g, '/');` when Safari supports negative lookbehind.
|
||||
|
||||
// Split the string by occurrences of this protocol regex, and perform
|
||||
// duplicate-slash replacement on the strings between those occurrences
|
||||
// (if any).
|
||||
const protocolRegex = /\b[a-z][a-z\d+\-.]{1,50}:\/\//g;
|
||||
|
||||
let lastIndex = 0;
|
||||
let result = '';
|
||||
for (;;) {
|
||||
const match = protocolRegex.exec(urlObject.pathname);
|
||||
if (!match) {
|
||||
break;
|
||||
}
|
||||
|
||||
const protocol = match[0];
|
||||
const protocolAtIndex = match.index;
|
||||
const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);
|
||||
|
||||
result += intermediate.replace(/\/{2,}/g, '/');
|
||||
result += protocol;
|
||||
lastIndex = protocolAtIndex + protocol.length;
|
||||
}
|
||||
|
||||
const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);
|
||||
result += remnant.replace(/\/{2,}/g, '/');
|
||||
|
||||
urlObject.pathname = result;
|
||||
}
|
||||
|
||||
// Decode URI octets
|
||||
if (urlObject.pathname) {
|
||||
try {
|
||||
urlObject.pathname = decodeURI(urlObject.pathname);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
// Remove directory index
|
||||
if (options.removeDirectoryIndex === true) {
|
||||
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
||||
}
|
||||
|
||||
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
|
||||
let pathComponents = urlObject.pathname.split('/');
|
||||
const lastComponent = pathComponents[pathComponents.length - 1];
|
||||
|
||||
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
||||
pathComponents = pathComponents.slice(0, -1);
|
||||
urlObject.pathname = pathComponents.slice(1).join('/') + '/';
|
||||
}
|
||||
}
|
||||
|
||||
if (urlObject.hostname) {
|
||||
// Remove trailing dot
|
||||
urlObject.hostname = urlObject.hostname.replace(/\.$/, '');
|
||||
|
||||
// Remove `www.`
|
||||
if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) {
|
||||
// Each label should be max 63 at length (min: 1).
|
||||
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
||||
// Each TLD should be up to 63 characters long (min: 2).
|
||||
// It is technically possible to have a single character TLD, but none currently exist.
|
||||
urlObject.hostname = urlObject.hostname.replace(/^www\./, '');
|
||||
}
|
||||
}
|
||||
|
||||
// Remove query unwanted parameters
|
||||
if (Array.isArray(options.removeQueryParameters)) {
|
||||
// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
|
||||
for (const key of [...urlObject.searchParams.keys()]) {
|
||||
if (testParameter(key, options.removeQueryParameters)) {
|
||||
urlObject.searchParams.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.removeQueryParameters === true) {
|
||||
urlObject.search = '';
|
||||
}
|
||||
|
||||
// Sort query parameters
|
||||
if (options.sortQueryParameters) {
|
||||
urlObject.searchParams.sort();
|
||||
|
||||
// Calling `.sort()` encodes the search parameters, so we need to decode them again.
|
||||
try {
|
||||
urlObject.search = decodeURIComponent(urlObject.search);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
if (options.removeTrailingSlash) {
|
||||
urlObject.pathname = urlObject.pathname.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
const oldUrlString = urlString;
|
||||
|
||||
// Take advantage of many of the Node `url` normalizations
|
||||
urlString = urlObject.toString();
|
||||
|
||||
if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {
|
||||
urlString = urlString.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
// Remove ending `/` unless removeSingleSlash is false
|
||||
if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {
|
||||
urlString = urlString.replace(/\/$/, '');
|
||||
}
|
||||
|
||||
// Restore relative protocol, if applicable
|
||||
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
||||
urlString = urlString.replace(/^http:\/\//, '//');
|
||||
}
|
||||
|
||||
// Remove http/https
|
||||
if (options.stripProtocol) {
|
||||
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
|
||||
}
|
||||
|
||||
return urlString;
|
||||
}
|
||||
|
||||
var normalizeUrl$1 = /*#__PURE__*/Object.freeze({
|
||||
__proto__: null,
|
||||
'default': normalizeUrl
|
||||
});
|
||||
|
||||
var require$$0 = /*@__PURE__*/getAugmentedNamespace(normalizeUrl$1);
|
||||
|
||||
Object.defineProperty(src, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Dependencies
|
||||
|
||||
var _normalizeUrl = require$$0;
|
||||
|
||||
var _normalizeUrl2 = _interopRequireDefault(_normalizeUrl);
|
||||
|
||||
var _parsePath = require$$1;
|
||||
|
||||
var _parsePath2 = _interopRequireDefault(_parsePath);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* parseUrl
|
||||
* Parses the input url.
|
||||
*
|
||||
* **Note**: This *throws* if invalid urls are provided.
|
||||
*
|
||||
* @name parseUrl
|
||||
* @function
|
||||
* @param {String} url The input url.
|
||||
* @param {Boolean|Object} normalize Whether to normalize the url or not.
|
||||
* Default is `false`. If `true`, the url will
|
||||
* be normalized. If an object, it will be the
|
||||
* options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).
|
||||
*
|
||||
* For SSH urls, normalize won't work.
|
||||
*
|
||||
* @return {Object} An object containing the following fields:
|
||||
*
|
||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
||||
* - `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
||||
* - `port` (null|Number): The domain port.
|
||||
* - `resource` (String): The url domain (including subdomains).
|
||||
* - `host` (String): The fully qualified domain name of a network host, or its IP address.
|
||||
* - `user` (String): The authentication user (usually for ssh urls).
|
||||
* - `pathname` (String): The url pathname.
|
||||
* - `hash` (String): The url hash.
|
||||
* - `search` (String): The url querystring value.
|
||||
* - `href` (String): The input url.
|
||||
* - `query` (Object): The url querystring, parsed as object.
|
||||
* - `parse_failed` (Boolean): Whether the parsing failed or not.
|
||||
*/
|
||||
var parseUrl = function parseUrl(url) {
|
||||
var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
|
||||
// Constants
|
||||
/**
|
||||
* ([a-zA-Z_][a-zA-Z0-9_-]{0,31}) Try to match the user
|
||||
* ([\w\.\-@]+) Match the host/resource
|
||||
* (([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?) Match the path, allowing spaces/white
|
||||
*/
|
||||
var GIT_RE = /^(?:([a-zA-Z_][a-zA-Z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:](([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?)$/;
|
||||
|
||||
var throwErr = function throwErr(msg) {
|
||||
var err = new Error(msg);
|
||||
err.subject_url = url;
|
||||
throw err;
|
||||
};
|
||||
|
||||
if (typeof url !== "string" || !url.trim()) {
|
||||
throwErr("Invalid url.");
|
||||
}
|
||||
|
||||
if (url.length > parseUrl.MAX_INPUT_LENGTH) {
|
||||
throwErr("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.");
|
||||
}
|
||||
|
||||
if (normalize) {
|
||||
if ((typeof normalize === "undefined" ? "undefined" : _typeof(normalize)) !== "object") {
|
||||
normalize = {
|
||||
stripHash: false
|
||||
};
|
||||
}
|
||||
url = (0, _normalizeUrl2.default)(url, normalize);
|
||||
}
|
||||
|
||||
var parsed = (0, _parsePath2.default)(url);
|
||||
|
||||
// Potential git-ssh urls
|
||||
if (parsed.parse_failed) {
|
||||
var matched = parsed.href.match(GIT_RE);
|
||||
|
||||
if (matched) {
|
||||
parsed.protocols = ["ssh"];
|
||||
parsed.protocol = "ssh";
|
||||
parsed.resource = matched[2];
|
||||
parsed.host = matched[2];
|
||||
parsed.user = matched[1];
|
||||
parsed.pathname = "/" + matched[3];
|
||||
parsed.parse_failed = false;
|
||||
} else {
|
||||
throwErr("URL parsing failed.");
|
||||
}
|
||||
}
|
||||
|
||||
return parsed;
|
||||
};
|
||||
|
||||
parseUrl.MAX_INPUT_LENGTH = 2048;
|
||||
|
||||
var _default = src.default = parseUrl;
|
||||
|
||||
export { _default as default };
|
||||
7
Frontend-Learner/node_modules/parse-url/index.d.mts
generated
vendored
Normal file
7
Frontend-Learner/node_modules/parse-url/index.d.mts
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import parseUrl = require("./index");
|
||||
|
||||
export type ParsedUrl = parseUrl.ParsedUrl;
|
||||
export type NormalizeOptions = parseUrl.NormalizeOptions;
|
||||
export type ParsingError = parseUrl.ParsingError;
|
||||
|
||||
export default parseUrl;
|
||||
21
Frontend-Learner/node_modules/parse-url/index.d.ts
generated
vendored
Normal file
21
Frontend-Learner/node_modules/parse-url/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import parsePath = require("parse-path");
|
||||
import normalizeUrl = require("normalize-url");
|
||||
|
||||
declare namespace parseUrl {
|
||||
const MAX_INPUT_LENGTH: 2048;
|
||||
|
||||
type NormalizeOptions = normalizeUrl.Options;
|
||||
|
||||
type ParsedUrl = parsePath.ParsedPath;
|
||||
|
||||
interface ParsingError extends Error {
|
||||
readonly subject_url: string;
|
||||
}
|
||||
}
|
||||
|
||||
declare function parseUrl(
|
||||
url: string,
|
||||
normalize?: boolean | parseUrl.NormalizeOptions
|
||||
): parseUrl.ParsedUrl;
|
||||
|
||||
export = parseUrl;
|
||||
81
Frontend-Learner/node_modules/parse-url/package.json
generated
vendored
Normal file
81
Frontend-Learner/node_modules/parse-url/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
"name": "parse-url",
|
||||
"version": "9.2.0",
|
||||
"description": "An advanced url parser supporting git urls too.",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.mjs",
|
||||
"types": "./index.d.ts",
|
||||
"exports": {
|
||||
"require": {
|
||||
"types": "./index.d.ts",
|
||||
"default": "./dist/index.js"
|
||||
},
|
||||
"import": {
|
||||
"types": "./index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
}
|
||||
},
|
||||
"directories": {
|
||||
"example": "example",
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node test/index.mjs && tsd",
|
||||
"build": "pkgroll"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/IonicaBizau/parse-url.git"
|
||||
},
|
||||
"keywords": [
|
||||
"parse",
|
||||
"url",
|
||||
"node",
|
||||
"git",
|
||||
"advanced"
|
||||
],
|
||||
"author": "Ionică Bizău <bizauionica@gmail.com> (https://ionicabizau.net)",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/IonicaBizau/parse-url/issues"
|
||||
},
|
||||
"homepage": "https://github.com/IonicaBizau/parse-url",
|
||||
"devDependencies": {
|
||||
"normalize-url": "^7.0.3",
|
||||
"pkgroll": "^1.11.1",
|
||||
"tester": "^1.3.1",
|
||||
"tsd": "^0.24.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/parse-path": "^7.0.0",
|
||||
"parse-path": "^7.0.0"
|
||||
},
|
||||
"files": [
|
||||
"bin/",
|
||||
"app/",
|
||||
"lib/",
|
||||
"dist/",
|
||||
"src/",
|
||||
"scripts/",
|
||||
"resources/",
|
||||
"menu/",
|
||||
"cli.js",
|
||||
"index.js",
|
||||
"index.d.ts",
|
||||
"index.d.mts",
|
||||
"bloggify.js",
|
||||
"bloggify.json",
|
||||
"bloggify/"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=14.13.0"
|
||||
},
|
||||
"blah": {
|
||||
"description": [
|
||||
"For low-level path parsing, check out [`parse-path`](https://github.com/IonicaBizau/parse-path). This very module is designed to parse urls. By default the urls are normalized."
|
||||
]
|
||||
},
|
||||
"tsd": {
|
||||
"directory": "test"
|
||||
}
|
||||
}
|
||||
109
Frontend-Learner/node_modules/parse-url/src/index.js
generated
vendored
Normal file
109
Frontend-Learner/node_modules/parse-url/src/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // Dependencies
|
||||
|
||||
var _normalizeUrl = require("normalize-url");
|
||||
|
||||
var _normalizeUrl2 = _interopRequireDefault(_normalizeUrl);
|
||||
|
||||
var _parsePath = require("parse-path");
|
||||
|
||||
var _parsePath2 = _interopRequireDefault(_parsePath);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
/**
|
||||
* parseUrl
|
||||
* Parses the input url.
|
||||
*
|
||||
* **Note**: This *throws* if invalid urls are provided.
|
||||
*
|
||||
* @name parseUrl
|
||||
* @function
|
||||
* @param {String} url The input url.
|
||||
* @param {Boolean|Object} normalize Whether to normalize the url or not.
|
||||
* Default is `false`. If `true`, the url will
|
||||
* be normalized. If an object, it will be the
|
||||
* options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).
|
||||
*
|
||||
* For SSH urls, normalize won't work.
|
||||
*
|
||||
* @return {Object} An object containing the following fields:
|
||||
*
|
||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
||||
* - `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
||||
* - `port` (null|Number): The domain port.
|
||||
* - `resource` (String): The url domain (including subdomains).
|
||||
* - `host` (String): The fully qualified domain name of a network host, or its IP address.
|
||||
* - `user` (String): The authentication user (usually for ssh urls).
|
||||
* - `pathname` (String): The url pathname.
|
||||
* - `hash` (String): The url hash.
|
||||
* - `search` (String): The url querystring value.
|
||||
* - `href` (String): The input url.
|
||||
* - `query` (Object): The url querystring, parsed as object.
|
||||
* - `parse_failed` (Boolean): Whether the parsing failed or not.
|
||||
*/
|
||||
var parseUrl = function parseUrl(url) {
|
||||
var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
|
||||
// Constants
|
||||
/**
|
||||
* ([a-zA-Z_][a-zA-Z0-9_-]{0,31}) Try to match the user
|
||||
* ([\w\.\-@]+) Match the host/resource
|
||||
* (([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?) Match the path, allowing spaces/white
|
||||
*/
|
||||
var GIT_RE = /^(?:([a-zA-Z_][a-zA-Z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:](([\~,\.\w,\-,\_,\/,\s]|%[0-9A-Fa-f]{2})+?(?:\.git|\/)?)$/;
|
||||
|
||||
var throwErr = function throwErr(msg) {
|
||||
var err = new Error(msg);
|
||||
err.subject_url = url;
|
||||
throw err;
|
||||
};
|
||||
|
||||
if (typeof url !== "string" || !url.trim()) {
|
||||
throwErr("Invalid url.");
|
||||
}
|
||||
|
||||
if (url.length > parseUrl.MAX_INPUT_LENGTH) {
|
||||
throwErr("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.");
|
||||
}
|
||||
|
||||
if (normalize) {
|
||||
if ((typeof normalize === "undefined" ? "undefined" : _typeof(normalize)) !== "object") {
|
||||
normalize = {
|
||||
stripHash: false
|
||||
};
|
||||
}
|
||||
url = (0, _normalizeUrl2.default)(url, normalize);
|
||||
}
|
||||
|
||||
var parsed = (0, _parsePath2.default)(url);
|
||||
|
||||
// Potential git-ssh urls
|
||||
if (parsed.parse_failed) {
|
||||
var matched = parsed.href.match(GIT_RE);
|
||||
|
||||
if (matched) {
|
||||
parsed.protocols = ["ssh"];
|
||||
parsed.protocol = "ssh";
|
||||
parsed.resource = matched[2];
|
||||
parsed.host = matched[2];
|
||||
parsed.user = matched[1];
|
||||
parsed.pathname = "/" + matched[3];
|
||||
parsed.parse_failed = false;
|
||||
} else {
|
||||
throwErr("URL parsing failed.");
|
||||
}
|
||||
}
|
||||
|
||||
return parsed;
|
||||
};
|
||||
|
||||
parseUrl.MAX_INPUT_LENGTH = 2048;
|
||||
|
||||
exports.default = parseUrl;
|
||||
Loading…
Add table
Add a link
Reference in a new issue