From 55a2f4650c3da1ffba5852a47ac7e5a5601362a3 Mon Sep 17 00:00:00 2001 From: Luigi Morel Date: Fri, 21 Jun 2024 13:55:47 +0300 Subject: [PATCH 1/2] website with updated modules --- .cspell.yml | 8 + .github/dependabot.yml | 20 +- .github/workflows/node.yml | 46 - .gitignore | 22 +- .nvmrc | 1 + CNAME | 1 - LICENSE | 222 +- README.md | 33 +- assets/scss/_variables_project.scss | 3 - content/en/_index.html | 77 - content/en/_index.md | 91 + content/en/blog/_index.md | 10 +- content/en/blog/news/_index.md | 6 +- .../how-to-build-one-effective-middleware.md | 24 +- content/en/blog/releases/_index.md | 7 +- content/en/blog/releases/release13.md | 87 +- content/en/blog/releases/release14.md | 159 +- content/en/blog/releases/release15.md | 101 +- content/en/blog/releases/release16.md | 120 +- content/en/search.md | 1 - content/es/_index.html | 77 - content/es/_index.md | 94 + content/fa/_index.html | 77 - content/fa/_index.md | 93 + content/ja/_index.html | 76 - content/ja/_index.md | 95 + content/ko-kr/_index.html | 77 - content/ko-kr/_index.md | 90 + .../how-to-build-one-effective-middleware.md | 24 +- content/pt/_index.html | 82 - content/pt/_index.md | 92 + content/ru/_index.html | 77 - content/ru/_index.md | 96 + content/tr/_index.html | 76 - content/tr/_index.md | 95 + content/zh-cn/_index.html | 77 - content/zh-cn/_index.md | 91 + content/zh-tw/_index.html | 77 - content/zh-tw/_index.md | 91 + go.mod | 10 +- go.sum | 18 +- hugo.toml | 6 +- layouts/404.html | 7 + layouts/_default/_markup/render-heading.html | 1 + layouts/partials/footer.html | 39 - package-lock.json | 1991 +++++++++++++++-- package.json | 60 +- static/comment.js | 7 - static/favicons/android-chrome-192x192.png | Bin 26618 -> 0 bytes static/favicons/android-chrome-512x512.png | Bin 93925 -> 0 bytes static/favicons/apple-touch-icon.png | Bin 24393 -> 0 bytes static/favicons/browserconfig.xml | 9 - static/favicons/favicon-16x16.png | Bin 1415 -> 0 bytes static/favicons/favicon-32x32.png | Bin 2586 -> 0 bytes static/favicons/favicon.ico | Bin 15086 -> 0 bytes static/favicons/mstile-150x150.png | Bin 14776 -> 0 bytes static/favicons/safari-pinned-tab.svg | 325 --- static/favicons/site.webmanifest | 19 - 58 files changed, 3427 insertions(+), 1661 deletions(-) create mode 100644 .cspell.yml delete mode 100644 .github/workflows/node.yml create mode 100644 .nvmrc delete mode 100644 CNAME delete mode 100644 content/en/_index.html create mode 100644 content/en/_index.md delete mode 100644 content/es/_index.html create mode 100644 content/es/_index.md delete mode 100644 content/fa/_index.html create mode 100644 content/fa/_index.md delete mode 100644 content/ja/_index.html create mode 100644 content/ja/_index.md delete mode 100644 content/ko-kr/_index.html create mode 100644 content/ko-kr/_index.md delete mode 100644 content/pt/_index.html create mode 100644 content/pt/_index.md delete mode 100644 content/ru/_index.html create mode 100644 content/ru/_index.md delete mode 100644 content/tr/_index.html create mode 100644 content/tr/_index.md delete mode 100644 content/zh-cn/_index.html create mode 100644 content/zh-cn/_index.md delete mode 100644 content/zh-tw/_index.html create mode 100644 content/zh-tw/_index.md create mode 100644 layouts/404.html create mode 100644 layouts/_default/_markup/render-heading.html delete mode 100644 layouts/partials/footer.html delete mode 100644 static/comment.js delete mode 100644 static/favicons/android-chrome-192x192.png delete mode 100644 static/favicons/android-chrome-512x512.png delete mode 100644 static/favicons/apple-touch-icon.png delete mode 100644 static/favicons/browserconfig.xml delete mode 100644 static/favicons/favicon-16x16.png delete mode 100644 static/favicons/favicon-32x32.png delete mode 100644 static/favicons/favicon.ico delete mode 100644 static/favicons/mstile-150x150.png delete mode 100644 static/favicons/safari-pinned-tab.svg delete mode 100644 static/favicons/site.webmanifest diff --git a/.cspell.yml b/.cspell.yml new file mode 100644 index 000000000..1d9219716 --- /dev/null +++ b/.cspell.yml @@ -0,0 +1,8 @@ +# cSpell:ignore textlintrc +# For settings, see +# https://www.streetsidesoftware.com/vscode-spell-checker/docs/configuration/ +version: '0.2' +caseSensitive: true +words: + - Docsy + - Gin Web Framework diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 632e8eb25..573e2f0c3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,10 +1,14 @@ version: 2 updates: - - package-ecosystem: github-actions - directory: / - schedule: - interval: weekly - - package-ecosystem: gomod - directory: / - schedule: - interval: weekly +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + time: '20:00' + open-pull-requests-limit: 10 +- package-ecosystem: bundler + directory: "/" + schedule: + interval: daily + time: '20:00' + open-pull-requests-limit: 10 diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml deleted file mode 100644 index d1c2b73d7..000000000 --- a/.github/workflows/node.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Run Deploy - -on: - push: - branches: - - master - pull_request: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - node: [ '20' ] - name: Node ${{ matrix.node }} Setup - steps: - - uses: actions/checkout@v4 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - name: Install node module - run: | - npm install -D --save autoprefixer - npm install -D --save postcss-cli - npm audit fix - - - name: Setup Hugo - uses: peaceiris/actions-hugo@v3 - with: - hugo-version: '0.125.4' - extended: true - - - name: Build - run: | - hugo --minify - echo 'gin-gonic.com' > public/CNAME - - - name: Deploy - uses: peaceiris/actions-gh-pages@v4 - if: github.ref == 'refs/heads/master' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./public diff --git a/.gitignore b/.gitignore index 516d63513..40b67f41a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,5 @@ -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -public -resources -node_modules -.hugo_build.lock +/public +resources/ +node_modules/ +package-lock.json +.hugo_build.lock \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..b009dfb9d --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/CNAME b/CNAME deleted file mode 100644 index 8005f2314..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -gin-gonic.com \ No newline at end of file diff --git a/LICENSE b/LICENSE index 397ecca79..261eeb9e9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,201 @@ -MIT License - -Copyright (c) 2018 Gin-Gonic - -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. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 4a7c3b51e..8ca9d8981 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,24 @@ - # Gin website [![Run Deploy](https://github.com/gin-gonic/website/actions/workflows/node.yml/badge.svg)](https://github.com/gin-gonic/website/actions/workflows/node.yml) -Welcome! This repository houses all the assets required to build the Gin website and documentation. We're pleased that you want to contribute! The website is hosted at https://gin-gonic.com. +Welcome! This repository houses all the assets required to build the Gin website +and documentation. We're pleased that you want to contribute! The website is +hosted at https://gin-gonic.com. -We use [Hugo](https://gohugo.io/) to format and generate our website, the [Docsy](https://github.com/google/docsy) theme for styling and site structure. Thanks!. +We use [Hugo](https://gohugo.io/) to format and generate our website, the +[Docsy](https://github.com/google/docsy) theme for styling and site structure. +Thanks!. -**Note:** We only support hugo [v0.75.1 version](https://github.com/gohugoio/hugo/releases/tag/v0.75.1). +**Note:** We only support hugo +[v0.75.1 version](https://github.com/gohugoio/hugo/releases/tag/v0.75.1). ## Contribution - Fork the repository -You can click the Fork button in the upper-right area of the screen to create a copy of this repository in your GitHub account. This copy is called as fork. +You can click the Fork button in the upper-right area of the screen to create a +copy of this repository in your GitHub account. This copy is called as fork. > You need to use the below command to clone code for docsy theme. @@ -23,15 +28,20 @@ git clone --recurse-submodules --depth 1 https://github.com/google/docsy.git the - Create one pull request -Make any changes you want in your fork, and when you are ready to send those changes to us, go to your fork and create a new pull request to let us know about it. +Make any changes you want in your fork, and when you are ready to send those +changes to us, go to your fork and create a new pull request to let us know +about it. - Merge the pull request -Once your pull request is created, a Gin reviewer will take responsibility for providing clear, actionable feedback, re-improve and merge. +Once your pull request is created, a Gin reviewer will take responsibility for +providing clear, actionable feedback, re-improve and merge. ## Running -See the [official Hugo documentation](https://gohugo.io/getting-started/installing/) for Hugo installation instructions. +See the +[official Hugo documentation](https://gohugo.io/getting-started/installing/) for +Hugo installation instructions. To run the site locally when you have Hugo installed: @@ -43,8 +53,11 @@ $ hugo $ hugo server ``` -This will start the local Hugo server on port 1313. Open up your browser to http://localhost:1313 to view the site. As you make changes to the source files, Hugo updates the site and forces a browser refresh. +This will start the local Hugo server on port 1313. Open up your browser to +http://localhost:1313 to view the site. As you make changes to the source files, +Hugo updates the site and forces a browser refresh. ## Thanks -Gin thrives on community participation, and we really appreciate your contributions to our site and our documentation! +Gin thrives on community participation, and we really appreciate your +contributions to our site and our documentation! diff --git a/assets/scss/_variables_project.scss b/assets/scss/_variables_project.scss index ea30c0e40..256902739 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/_variables_project.scss @@ -4,6 +4,3 @@ Add styles or override variables from the theme here. */ -$primary: #3176d9 !default; -$dark: #3176d9 !default; - diff --git a/content/en/_index.html b/content/en/_index.html deleted file mode 100644 index d5a8b9299..000000000 --- a/content/en/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Learn More - - - Download - -

The fastest full-featured web framework for Go. Crystal clear.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**What is Gin?** - -Gin is a web framework written in Golang. - -It features a Martini-like API, but with performance up to 40 times faster than Martini. - -If you need performance and productivity, you will love Gin. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Fast" %}} -Radix tree based routing, small memory foot print. No reflection. Predictable API performance. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Middleware support" %}} -An incoming HTTP request can be handled by a chain of middleware and the final action. -For example: Logger, Authorization, GZIP and finally post a message in the DB. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash-free" %}} -Gin can catch a panic occurred during a HTTP request and recover it. This way, your server will be always available. It’s also possible to report this panic to Sentry for example! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON validation" %}} -Gin can parse and validate the JSON of a request, checking, for example, the existence of required values. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Routes grouping" %}} -Organize your routes better. Authorization required vs non required, different API versions. In addition, groups can be nested infinitely without degrading performance. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Error management" %}} -Gin provides a convenient way to collect all the errors occurred during a HTTP request. Eventually, middleware can write them to a log file, to a database and send them through the network. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Rendering built-in" %}} -Gin provides an easy to use API for JSON, XML and HTML rendering. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Extendable" %}} -Creating new middleware is so easy, just check out the sample code. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/en/_index.md b/content/en/_index.md new file mode 100644 index 000000000..45fd10398 --- /dev/null +++ b/content/en/_index.md @@ -0,0 +1,91 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Learn More + + +Download + +

The fastest full-featured web framework for Go. Crystal clear.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**What is Gin?** + +Gin is a web framework written in Golang. It features a Martini-like API, but +with performance up to 40 times faster than Martini. If you need performance and +productivity, you will love Gin. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Radix tree based routing, small memory foot print. No reflection. Predictable +API performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware support"%}} + +An incoming HTTP request can be handled by a chain of middleware and the final +action. For example: Logger, Authorization, GZIP and finally post a message in +the DB. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash-free" %}} + +Gin can catch a panic occurred during a HTTP request and recover it. This way, +your server will be always available. It’s also possible to report this panic to +Sentry for example! {{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} + +{{% blocks/feature icon="fa-check-circle" title="JSON validation" %}} + +Gin can parse and validate the JSON of a request, checking, for example, the +existence of required values. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Routes grouping"%}} + +Organize your routes better. Authorization required vs non required, different +API versions. In addition, groups can be nested infinitely without degrading +performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Error management" %}} + +Gin provides a convenient way to collect all the errors occurred during a HTTP +request. Eventually, middleware can write them to a log file, to a database and +send them through the network. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Rendering built-in" %}} + +Gin provides an easy to use API for JSON, XML and HTML rendering. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extendable"%}} + +Creating new middleware is so easy, just check out the sample code. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/en/blog/_index.md b/content/en/blog/_index.md index bfe08e93d..13fbd0522 100644 --- a/content/en/blog/_index.md +++ b/content/en/blog/_index.md @@ -1,13 +1,9 @@ --- -title: "Blog" -linkTitle: "Blog" -menu: - main: - weight: 30 +title: Blog +menu: { main: { weight: 30 } } +linkTitle: Blog --- - This is the **blog** section. It has two categories: News and Releases. Files in these directories will be listed in reverse chronological order. - diff --git a/content/en/blog/news/_index.md b/content/en/blog/news/_index.md index 6d6f3ad0a..c609aa254 100644 --- a/content/en/blog/news/_index.md +++ b/content/en/blog/news/_index.md @@ -1,8 +1,4 @@ - --- -title: "News" -linkTitle: "News" +title: News weight: 20 --- - - diff --git a/content/en/blog/news/how-to-build-one-effective-middleware.md b/content/en/blog/news/how-to-build-one-effective-middleware.md index d93e7cbc3..497dc1f5c 100644 --- a/content/en/blog/news/how-to-build-one-effective-middleware.md +++ b/content/en/blog/news/how-to-build-one-effective-middleware.md @@ -1,6 +1,6 @@ --- -title: "How to build one effective middleware?" -linkTitle: "How to build one effective middleware?" +title: How to build one effective middleware? +linkTitle: How to build one effective middleware? date: 2019-02-26 --- @@ -8,9 +8,14 @@ date: 2019-02-26 The middleware has two parts: - - part one is what is executed once, when you initialize your middleware. That's where you set up all the global objects, logicals etc. Everything that happens once per application lifetime. +- part one is what is executed once, when you initialize your middleware. That's + where you set up all the global objects, logicals etc. Everything that happens + once per application lifetime. - - part two is what executes on every request. For example, a database middleware you simply inject your "global" database object into the context. Once it's inside the context, you can retrieve it from within other middlewares and your handler function. +- part two is what executes on every request. For example, a database middleware + you simply inject your "global" database object into the context. Once it's + inside the context, you can retrieve it from within other middlewares and your + handler function. ```go func funcName(params string) gin.HandlerFunc { @@ -28,7 +33,7 @@ func funcName(params string) gin.HandlerFunc { // ---> // The following code is an example c.Set("TestVar", params) - c.Next() + c.Next() } } ``` @@ -84,7 +89,9 @@ func mid2() gin.HandlerFunc { } ``` -According to [Constituent parts](#Constituent-parts) said, when we run the gin process, **part one** will execute firstly and will print the following information: +According to [Constituent parts](#Constituent-parts) said, when we run the gin +process, **part one** will execute firstly and will print the following +information: ```go globalMiddleware...1 @@ -104,7 +111,8 @@ mid1...1 mid2...1 ``` -When we curl one request `curl -v localhost:8080/rest/n/api/some`, **part two** will execute their middleware and output the following information: +When we curl one request `curl -v localhost:8080/rest/n/api/some`, **part two** +will execute their middleware and output the following information: ```go globalMiddleware...2 @@ -139,5 +147,3 @@ mid1...3 v globalMiddleware...3 ``` - - diff --git a/content/en/blog/releases/_index.md b/content/en/blog/releases/_index.md index 2e7b975d9..e0862723a 100644 --- a/content/en/blog/releases/_index.md +++ b/content/en/blog/releases/_index.md @@ -1,8 +1,5 @@ - --- -title: "Releases" -linkTitle: "Releases" +title: Releases +linkTitle: Releases weight: 20 --- - - diff --git a/content/en/blog/releases/release13.md b/content/en/blog/releases/release13.md index 43f4656f4..9322d3776 100644 --- a/content/en/blog/releases/release13.md +++ b/content/en/blog/releases/release13.md @@ -1,29 +1,70 @@ --- -title: "Gin 1.3.0 is released" -linkTitle: "Gin 1.3.0 is released" +title: Gin 1.3.0 is released +linkTitle: Gin 1.3.0 is released date: 2018-08-14 --- ### CHANGELOG -- [NEW] Add [`func (*Context) QueryMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.QueryMap), [`func (*Context) GetQueryMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.GetQueryMap), [`func (*Context) PostFormMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.PostFormMap) and [`func (*Context) GetPostFormMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.GetPostFormMap) to support `type map[string]string` as query string or form parameters, see [#1383](https://github.com/gin-gonic/gin/pull/1383) -- [NEW] Add [`func (*Context) AsciiJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.AsciiJSON), see [#1358](https://github.com/gin-gonic/gin/pull/1358) -- [NEW] Add `Pusher()` in [`type ResponseWriter`](https://pkg.go.dev/github.com/gin-gonic/gin#ResponseWriter) for supporting http2 push, see [#1273](https://github.com/gin-gonic/gin/pull/1273) -- [NEW] Add [`func (*Context) DataFromReader`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.DataFromReader) for serving dynamic data, see [#1304](https://github.com/gin-gonic/gin/pull/1304) -- [NEW] Add [`func (*Context) ShouldBindBodyWith`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindBodyWith) allowing to call binding multiple times, see [#1341](https://github.com/gin-gonic/gin/pull/1341) -- [NEW] Support pointers in form binding, see [#1336](https://github.com/gin-gonic/gin/pull/1336) -- [NEW] Add [`func (*Context) JSONP`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.JSONP), see [#1333](https://github.com/gin-gonic/gin/pull/1333) -- [NEW] Support default value in form binding, see [#1138](https://github.com/gin-gonic/gin/pull/1138) -- [NEW] Expose validator engine in [`type StructValidator`](https://pkg.go.dev/github.com/gin-gonic/gin/binding#StructValidator), see [#1277](https://github.com/gin-gonic/gin/pull/1277) -- [NEW] Add [`func (*Context) ShouldBind`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBind), [`func (*Context) ShouldBindQuery`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindQuery) and [`func (*Context) ShouldBindJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindJSON), see [#1047](https://github.com/gin-gonic/gin/pull/1047) -- [NEW] Add support for `time.Time` location in form binding, see [#1117](https://github.com/gin-gonic/gin/pull/1117) -- [NEW] Add [`func (*Context) BindQuery`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.BindQuery), see [#1029](https://github.com/gin-gonic/gin/pull/1029) -- [NEW] Make [jsonite](https://github.com/json-iterator/go) optional with build tags, see [#1026](https://github.com/gin-gonic/gin/pull/1026) -- [NEW] Show query string in logger, see [#999](https://github.com/gin-gonic/gin/pull/999) -- [NEW] Add [`func (*Context) SecureJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.SecureJSON), see [#987](https://github.com/gin-gonic/gin/pull/987) and [#993](https://github.com/gin-gonic/gin/pull/993) -- [DEPRECATE] `func (*Context) GetCookie` for [`func (*Context) Cookie`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.Cookie) -- [FIX] Don't display color tags if [`func DisableConsoleColor`](https://pkg.go.dev/github.com/gin-gonic/gin#DisableConsoleColor) called, see [#1072](https://github.com/gin-gonic/gin/pull/1072) -- [FIX] Gin Mode `""` when calling [`func Mode`](https://pkg.go.dev/github.com/gin-gonic/gin#Mode) now returns `const DebugMode`, see [#1250](https://github.com/gin-gonic/gin/pull/1250) -- [FIX] `Flush()` now doesn't overwrite `responseWriter` status code, see [#1460](https://github.com/gin-gonic/gin/pull/1460) - - +- [NEW] Add + [`func (*Context) QueryMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.QueryMap), + [`func (*Context) GetQueryMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.GetQueryMap), + [`func (*Context) PostFormMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.PostFormMap) + and + [`func (*Context) GetPostFormMap`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.GetPostFormMap) + to support `type map[string]string` as query string or form parameters, see + [#1383](https://github.com/gin-gonic/gin/pull/1383) +- [NEW] Add + [`func (*Context) AsciiJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.AsciiJSON), + see [#1358](https://github.com/gin-gonic/gin/pull/1358) +- [NEW] Add `Pusher()` in + [`type ResponseWriter`](https://pkg.go.dev/github.com/gin-gonic/gin#ResponseWriter) + for supporting http2 push, see + [#1273](https://github.com/gin-gonic/gin/pull/1273) +- [NEW] Add + [`func (*Context) DataFromReader`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.DataFromReader) + for serving dynamic data, see + [#1304](https://github.com/gin-gonic/gin/pull/1304) +- [NEW] Add + [`func (*Context) ShouldBindBodyWith`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindBodyWith) + allowing to call binding multiple times, see + [#1341](https://github.com/gin-gonic/gin/pull/1341) +- [NEW] Support pointers in form binding, see + [#1336](https://github.com/gin-gonic/gin/pull/1336) +- [NEW] Add + [`func (*Context) JSONP`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.JSONP), + see [#1333](https://github.com/gin-gonic/gin/pull/1333) +- [NEW] Support default value in form binding, see + [#1138](https://github.com/gin-gonic/gin/pull/1138) +- [NEW] Expose validator engine in + [`type StructValidator`](https://pkg.go.dev/github.com/gin-gonic/gin/binding#StructValidator), + see [#1277](https://github.com/gin-gonic/gin/pull/1277) +- [NEW] Add + [`func (*Context) ShouldBind`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBind), + [`func (*Context) ShouldBindQuery`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindQuery) + and + [`func (*Context) ShouldBindJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.ShouldBindJSON), + see [#1047](https://github.com/gin-gonic/gin/pull/1047) +- [NEW] Add support for `time.Time` location in form binding, see + [#1117](https://github.com/gin-gonic/gin/pull/1117) +- [NEW] Add + [`func (*Context) BindQuery`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.BindQuery), + see [#1029](https://github.com/gin-gonic/gin/pull/1029) +- [NEW] Make [jsonite](https://github.com/json-iterator/go) optional with build + tags, see [#1026](https://github.com/gin-gonic/gin/pull/1026) +- [NEW] Show query string in logger, see + [#999](https://github.com/gin-gonic/gin/pull/999) +- [NEW] Add + [`func (*Context) SecureJSON`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.SecureJSON), + see [#987](https://github.com/gin-gonic/gin/pull/987) and + [#993](https://github.com/gin-gonic/gin/pull/993) +- [DEPRECATE] `func (*Context) GetCookie` for + [`func (*Context) Cookie`](https://pkg.go.dev/github.com/gin-gonic/gin#Context.Cookie) +- [FIX] Don't display color tags if + [`func DisableConsoleColor`](https://pkg.go.dev/github.com/gin-gonic/gin#DisableConsoleColor) + called, see [#1072](https://github.com/gin-gonic/gin/pull/1072) +- [FIX] Gin Mode `""` when calling + [`func Mode`](https://pkg.go.dev/github.com/gin-gonic/gin#Mode) now returns + `const DebugMode`, see [#1250](https://github.com/gin-gonic/gin/pull/1250) +- [FIX] `Flush()` now doesn't overwrite `responseWriter` status code, see + [#1460](https://github.com/gin-gonic/gin/pull/1460) diff --git a/content/en/blog/releases/release14.md b/content/en/blog/releases/release14.md index 23fd64829..46804251a 100644 --- a/content/en/blog/releases/release14.md +++ b/content/en/blog/releases/release14.md @@ -1,6 +1,6 @@ --- -title: "Gin 1.4.0 is released" -linkTitle: "Gin 1.4.0 is released" +title: Gin 1.4.0 is released +linkTitle: Gin 1.4.0 is released date: 2019-05-08 --- @@ -8,59 +8,114 @@ date: 2019-05-08 #### Feature -- [NEW] Support for [Go Modules](https://github.com/golang/go/wiki/Modules) [#1569](https://github.com/gin-gonic/gin/pull/1569) -- [NEW] Refactor of form mapping multipart request [#1829](https://github.com/gin-gonic/gin/pull/1829) -- [NEW] Supporting file binding [#1264](https://github.com/gin-gonic/gin/pull/1264) -- [NEW] Add support for mapping arrays [#1797](https://github.com/gin-gonic/gin/pull/1797) -- [NEW] Make context.Keys available as LogFormatterParams [#1779](https://github.com/gin-gonic/gin/pull/1779) -- [NEW] Use internal/json for Marshal/Unmarshal [#1791](https://github.com/gin-gonic/gin/pull/1791) -- [NEW] Support mapping time.Duration [#1794](https://github.com/gin-gonic/gin/pull/1794) -- [NEW] Refactor form mappings [#1749](https://github.com/gin-gonic/gin/pull/1749) -- [NEW] Added flag to context.Stream indicates if client disconnected in middle of stream [#1252](https://github.com/gin-gonic/gin/pull/1252) -- [NEW] Extend context.File to allow for the content-dispositon attachments via a new method context.Attachment [#1260](https://github.com/gin-gonic/gin/pull/1260) -- [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash [#1238](https://github.com/gin-gonic/gin/pull/1238) -- [NEW] Add context.HandlerNames() [#1729](https://github.com/gin-gonic/gin/pull/1729) -- [NEW] Add response size to LogFormatterParams [#1752](https://github.com/gin-gonic/gin/pull/1752) -- [NEW] Allow ignoring field on form mapping [#1733](https://github.com/gin-gonic/gin/pull/1733) -- [NEW] Add a function to force color in console output. [#1724](https://github.com/gin-gonic/gin/pull/1724) -- [NEW] Binding for URL Params [#1694](https://github.com/gin-gonic/gin/pull/1694) -- [NEW] Add LoggerWithFormatter method [#1677](https://github.com/gin-gonic/gin/pull/1677) -- [NEW] RunFd method to run http.Server through a file descriptor [#1609](https://github.com/gin-gonic/gin/pull/1609) +- [NEW] Support for [Go Modules](https://github.com/golang/go/wiki/Modules) + [#1569](https://github.com/gin-gonic/gin/pull/1569) +- [NEW] Refactor of form mapping multipart request + [#1829](https://github.com/gin-gonic/gin/pull/1829) +- [NEW] Supporting file binding + [#1264](https://github.com/gin-gonic/gin/pull/1264) +- [NEW] Add support for mapping arrays + [#1797](https://github.com/gin-gonic/gin/pull/1797) +- [NEW] Make context.Keys available as LogFormatterParams + [#1779](https://github.com/gin-gonic/gin/pull/1779) +- [NEW] Use internal/json for Marshal/Unmarshal + [#1791](https://github.com/gin-gonic/gin/pull/1791) +- [NEW] Support mapping time.Duration + [#1794](https://github.com/gin-gonic/gin/pull/1794) +- [NEW] Refactor form mappings + [#1749](https://github.com/gin-gonic/gin/pull/1749) +- [NEW] Added flag to context.Stream indicates if client disconnected in middle + of stream [#1252](https://github.com/gin-gonic/gin/pull/1252) +- [NEW] Extend context.File to allow for the content-dispositon attachments via + a new method context.Attachment + [#1260](https://github.com/gin-gonic/gin/pull/1260) +- [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash + [#1238](https://github.com/gin-gonic/gin/pull/1238) +- [NEW] Add context.HandlerNames() + [#1729](https://github.com/gin-gonic/gin/pull/1729) +- [NEW] Add response size to LogFormatterParams + [#1752](https://github.com/gin-gonic/gin/pull/1752) +- [NEW] Allow ignoring field on form mapping + [#1733](https://github.com/gin-gonic/gin/pull/1733) +- [NEW] Add a function to force color in console output. + [#1724](https://github.com/gin-gonic/gin/pull/1724) +- [NEW] Binding for URL Params + [#1694](https://github.com/gin-gonic/gin/pull/1694) +- [NEW] Add LoggerWithFormatter method + [#1677](https://github.com/gin-gonic/gin/pull/1677) +- [NEW] RunFd method to run http.Server through a file descriptor + [#1609](https://github.com/gin-gonic/gin/pull/1609) - [NEW] Yaml binding support [#1618](https://github.com/gin-gonic/gin/pull/1618) - [NEW] Add PureJSON renderer [#694](https://github.com/gin-gonic/gin/pull/694) -- [NEW] Set default time format in form binding [#1487](https://github.com/gin-gonic/gin/pull/1487) -- [NEW] Upgrade dependency libraries [#1491](https://github.com/gin-gonic/gin/pull/1491) +- [NEW] Set default time format in form binding + [#1487](https://github.com/gin-gonic/gin/pull/1487) +- [NEW] Upgrade dependency libraries + [#1491](https://github.com/gin-gonic/gin/pull/1491) #### Bug fix -- [FIX] Truncate Latency precision in long running request [#1830](https://github.com/gin-gonic/gin/pull/1830) -- [FIX] IsTerm flag should not be affected by DisableConsoleColor method. [#1802](https://github.com/gin-gonic/gin/pull/1802) -- [FIX] Readme updates [#1793](https://github.com/gin-gonic/gin/pull/1793) [#1788](https://github.com/gin-gonic/gin/pull/1788) [1789](https://github.com/gin-gonic/gin/pull/1789) -- [FIX] StaticFS: Fixed Logging two log lines on 404. [#1805](https://github.com/gin-gonic/gin/pull/1805), [#1804](https://github.com/gin-gonic/gin/pull/1804) -- [FIX] Moved [examples](https://github.com/gin-gonic/examples) to stand alone Repo [#1775](https://github.com/gin-gonic/gin/pull/1775) -- [FIX] Support HTTP content negotiation wildcards [#1112](https://github.com/gin-gonic/gin/pull/1112) -- [FIX] Pass MaxMultipartMemory when FormFile is called [#1600](https://github.com/gin-gonic/gin/pull/1600) -- [FIX] LoadHTML* tests [#1559](https://github.com/gin-gonic/gin/pull/1559) -- [FIX] Removed use of sync.pool from HandleContext [#1565](https://github.com/gin-gonic/gin/pull/1565) -- [FIX] Format output log to os.Stderr [#1571](https://github.com/gin-gonic/gin/pull/1571) -- [FIX] Make logger use a yellow background and a darkgray text for legibility [#1570](https://github.com/gin-gonic/gin/pull/1570) -- [FIX] Remove sensitive request information from panic log. [#1370](https://github.com/gin-gonic/gin/pull/1370) -- [FIX] log.Println() does not print timestamp [#829](https://github.com/gin-gonic/gin/pull/829) [#1560](https://github.com/gin-gonic/gin/pull/1560) -- [FIX] Add missing copyright and update if/else [#1497](https://github.com/gin-gonic/gin/pull/1497) +- [FIX] Truncate Latency precision in long running request + [#1830](https://github.com/gin-gonic/gin/pull/1830) +- [FIX] IsTerm flag should not be affected by DisableConsoleColor method. + [#1802](https://github.com/gin-gonic/gin/pull/1802) +- [FIX] Readme updates [#1793](https://github.com/gin-gonic/gin/pull/1793) + [#1788](https://github.com/gin-gonic/gin/pull/1788) + [1789](https://github.com/gin-gonic/gin/pull/1789) +- [FIX] StaticFS: Fixed Logging two log lines on 404. + [#1805](https://github.com/gin-gonic/gin/pull/1805), + [#1804](https://github.com/gin-gonic/gin/pull/1804) +- [FIX] Moved [examples](https://github.com/gin-gonic/examples) to stand alone + Repo [#1775](https://github.com/gin-gonic/gin/pull/1775) +- [FIX] Support HTTP content negotiation wildcards + [#1112](https://github.com/gin-gonic/gin/pull/1112) +- [FIX] Pass MaxMultipartMemory when FormFile is called + [#1600](https://github.com/gin-gonic/gin/pull/1600) +- [FIX] LoadHTML\* tests [#1559](https://github.com/gin-gonic/gin/pull/1559) +- [FIX] Removed use of sync.pool from HandleContext + [#1565](https://github.com/gin-gonic/gin/pull/1565) +- [FIX] Format output log to os.Stderr + [#1571](https://github.com/gin-gonic/gin/pull/1571) +- [FIX] Make logger use a yellow background and a darkgray text for legibility + [#1570](https://github.com/gin-gonic/gin/pull/1570) +- [FIX] Remove sensitive request information from panic log. + [#1370](https://github.com/gin-gonic/gin/pull/1370) +- [FIX] log.Println() does not print timestamp + [#829](https://github.com/gin-gonic/gin/pull/829) + [#1560](https://github.com/gin-gonic/gin/pull/1560) +- [FIX] Add missing copyright and update if/else + [#1497](https://github.com/gin-gonic/gin/pull/1497) - [FIX] Update msgpack usage [#1498](https://github.com/gin-gonic/gin/pull/1498) -- [FIX] Use protobuf on render [#1496](https://github.com/gin-gonic/gin/pull/1496) -- [FIX] Add support for Protobuf format response [#1479](https://github.com/gin-gonic/gin/pull/1479) -- [FIX] Add BindXML and ShouldBindXML [#1485](https://github.com/gin-gonic/gin/pull/1485) -- [FIX] CI testing updates [#1671](https://github.com/gin-gonic/gin/pull/1671) [#1670](https://github.com/gin-gonic/gin/pull/1670) [#1682](https://github.com/gin-gonic/gin/pull/1682) [#1669](https://github.com/gin-gonic/gin/pull/1669) -- [FIX] StaticFS(): Send 404 when path does not exist [#1663](https://github.com/gin-gonic/gin/pull/1663) -- [FIX] Handle nil body for JSON binding [#1638](https://github.com/gin-gonic/gin/pull/1638) -- [FIX] Support bind uri param [#1612](https://github.com/gin-gonic/gin/pull/1612) -- [FIX] recovery: fix issue with syscall import on google app engine [#1640](https://github.com/gin-gonic/gin/pull/1640) -- [FIX] Make sure the debug log contains line breaks [#1650](https://github.com/gin-gonic/gin/pull/1650) -- [FIX] Panic stack trace being printed during recovery of broken pipe [#1089](https://github.com/gin-gonic/gin/pull/1089) [#1259](https://github.com/gin-gonic/gin/pull/1259) -- [FIX] Context.Next() - recheck len of handlers on every iteration. [#1745](https://github.com/gin-gonic/gin/pull/1745) -- [FIX] Fix all errcheck warnings [#1739](https://github.com/gin-gonic/gin/pull/1739) [#1653](https://github.com/gin-gonic/gin/pull/1653) -- [FIX] Change color methods to public in the defaultLogger. [#1771](https://github.com/gin-gonic/gin/pull/1771) -- [FIX] Update writeHeaders method to use http.Header.Set [#1722](https://github.com/gin-gonic/gin/pull/1722) -- [FIX] context.Copy() race condition [#1020](https://github.com/gin-gonic/gin/pull/1020) - +- [FIX] Use protobuf on render + [#1496](https://github.com/gin-gonic/gin/pull/1496) +- [FIX] Add support for Protobuf format response + [#1479](https://github.com/gin-gonic/gin/pull/1479) +- [FIX] Add BindXML and ShouldBindXML + [#1485](https://github.com/gin-gonic/gin/pull/1485) +- [FIX] CI testing updates [#1671](https://github.com/gin-gonic/gin/pull/1671) + [#1670](https://github.com/gin-gonic/gin/pull/1670) + [#1682](https://github.com/gin-gonic/gin/pull/1682) + [#1669](https://github.com/gin-gonic/gin/pull/1669) +- [FIX] StaticFS(): Send 404 when path does not exist + [#1663](https://github.com/gin-gonic/gin/pull/1663) +- [FIX] Handle nil body for JSON binding + [#1638](https://github.com/gin-gonic/gin/pull/1638) +- [FIX] Support bind uri param + [#1612](https://github.com/gin-gonic/gin/pull/1612) +- [FIX] recovery: fix issue with syscall import on google app engine + [#1640](https://github.com/gin-gonic/gin/pull/1640) +- [FIX] Make sure the debug log contains line breaks + [#1650](https://github.com/gin-gonic/gin/pull/1650) +- [FIX] Panic stack trace being printed during recovery of broken pipe + [#1089](https://github.com/gin-gonic/gin/pull/1089) + [#1259](https://github.com/gin-gonic/gin/pull/1259) +- [FIX] Context.Next() - recheck len of handlers on every iteration. + [#1745](https://github.com/gin-gonic/gin/pull/1745) +- [FIX] Fix all errcheck warnings + [#1739](https://github.com/gin-gonic/gin/pull/1739) + [#1653](https://github.com/gin-gonic/gin/pull/1653) +- [FIX] Change color methods to public in the defaultLogger. + [#1771](https://github.com/gin-gonic/gin/pull/1771) +- [FIX] Update writeHeaders method to use http.Header.Set + [#1722](https://github.com/gin-gonic/gin/pull/1722) +- [FIX] context.Copy() race condition + [#1020](https://github.com/gin-gonic/gin/pull/1020) diff --git a/content/en/blog/releases/release15.md b/content/en/blog/releases/release15.md index e4593b3ce..6ff52721e 100644 --- a/content/en/blog/releases/release15.md +++ b/content/en/blog/releases/release15.md @@ -1,6 +1,6 @@ --- -title: "Gin 1.5.0 is released" -linkTitle: "Gin 1.5.0 is released" +title: Gin 1.5.0 is released +linkTitle: Gin 1.5.0 is released date: 2019-11-28 --- @@ -8,40 +8,71 @@ date: 2019-11-28 #### Feature -- [NEW] Now you can parse the inline lowercase start structure [#1893](https://github.com/gin-gonic/gin/pull/1893) -- [NEW] **[Break-Backward]** Hold matched route full path in the Context [#1826](https://github.com/gin-gonic/gin/pull/1826) -- [NEW] Add context param query cache [#1450](https://github.com/gin-gonic/gin/pull/1450) -- [NEW] Add support of multipart multi files [#1949](https://github.com/gin-gonic/gin/pull/1949) -- [NEW] Support bind http header param [#1957](https://github.com/gin-gonic/gin/pull/1957) -- [NEW] Support bind unix time [#1980](https://github.com/gin-gonic/gin/pull/1980) -- [NEW] Support negative Content-Length in DataFromReader [#1981](https://github.com/gin-gonic/gin/pull/1981) -- [NEW] Add DisallowUnknownFields() in gin.Context.BindJSON() [#2028](https://github.com/gin-gonic/gin/pull/2028) -- [NEW] Use specific `net.Listener` with Engine.RunListener() [#2023](https://github.com/gin-gonic/gin/pull/2023) +- [NEW] Now you can parse the inline lowercase start structure + [#1893](https://github.com/gin-gonic/gin/pull/1893) +- [NEW] **[Break-Backward]** Hold matched route full path in the Context + [#1826](https://github.com/gin-gonic/gin/pull/1826) +- [NEW] Add context param query cache + [#1450](https://github.com/gin-gonic/gin/pull/1450) +- [NEW] Add support of multipart multi files + [#1949](https://github.com/gin-gonic/gin/pull/1949) +- [NEW] Support bind http header param + [#1957](https://github.com/gin-gonic/gin/pull/1957) +- [NEW] Support bind unix time + [#1980](https://github.com/gin-gonic/gin/pull/1980) +- [NEW] Support negative Content-Length in DataFromReader + [#1981](https://github.com/gin-gonic/gin/pull/1981) +- [NEW] Add DisallowUnknownFields() in gin.Context.BindJSON() + [#2028](https://github.com/gin-gonic/gin/pull/2028) +- [NEW] Use specific `net.Listener` with Engine.RunListener() + [#2023](https://github.com/gin-gonic/gin/pull/2023) #### Bug fix -- [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages [#1891](https://github.com/gin-gonic/gin/pull/1891) -- [FIX] Some code improvements [#1909](https://github.com/gin-gonic/gin/pull/1909) -- [FIX] Use encode replace json marshal increase json encoder speed [#1546](https://github.com/gin-gonic/gin/pull/1546) -- [FIX] Fix context.Params race condition on Copy() [#1841](https://github.com/gin-gonic/gin/pull/1841) -- [FIX] Improve GetQueryMap performance [#1918](https://github.com/gin-gonic/gin/pull/1918) -- [FIX] Improve get post data [#1920](https://github.com/gin-gonic/gin/pull/1920) -- [FIX] Use context instead of x/net/context [#1922](https://github.com/gin-gonic/gin/pull/1922) -- [FIX] Attempt to fix PostForm cache bug [#1931](https://github.com/gin-gonic/gin/pull/1931) -- [FIX] **[Break-Backward]** Drop support for go1.8 and go1.9 [#1933](https://github.com/gin-gonic/gin/pull/1933) -- [FIX] Bugfix for the FullPath feature [#1919](https://github.com/gin-gonic/gin/pull/1919) -- [FIX] Gin1.5 bytes.Buffer to strings.Builder [#1939](https://github.com/gin-gonic/gin/pull/1939) -- [FIX] Upgrade github.com/ugorji/go/codec [#1969](https://github.com/gin-gonic/gin/pull/1969) +- [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages + [#1891](https://github.com/gin-gonic/gin/pull/1891) +- [FIX] Some code improvements + [#1909](https://github.com/gin-gonic/gin/pull/1909) +- [FIX] Use encode replace json marshal increase json encoder speed + [#1546](https://github.com/gin-gonic/gin/pull/1546) +- [FIX] Fix context.Params race condition on Copy() + [#1841](https://github.com/gin-gonic/gin/pull/1841) +- [FIX] Improve GetQueryMap performance + [#1918](https://github.com/gin-gonic/gin/pull/1918) +- [FIX] Improve get post data + [#1920](https://github.com/gin-gonic/gin/pull/1920) +- [FIX] Use context instead of x/net/context + [#1922](https://github.com/gin-gonic/gin/pull/1922) +- [FIX] Attempt to fix PostForm cache bug + [#1931](https://github.com/gin-gonic/gin/pull/1931) +- [FIX] **[Break-Backward]** Drop support for go1.8 and go1.9 + [#1933](https://github.com/gin-gonic/gin/pull/1933) +- [FIX] Bugfix for the FullPath feature + [#1919](https://github.com/gin-gonic/gin/pull/1919) +- [FIX] Gin1.5 bytes.Buffer to strings.Builder + [#1939](https://github.com/gin-gonic/gin/pull/1939) +- [FIX] Upgrade github.com/ugorji/go/codec + [#1969](https://github.com/gin-gonic/gin/pull/1969) - [FIX] Simplify code [#2004](https://github.com/gin-gonic/gin/pull/2004) -- [FIX] Identify terminal on a RISC-V architecture for auto-colored logs [#2019](https://github.com/gin-gonic/gin/pull/2019) -- [FIX] **[Break-Backward]** Context.JSONP() now expects a semicolon (;) at the end [#2007](https://github.com/gin-gonic/gin/pull/2007) -- [FIX] **[Break-Backward]** Upgrade validator version to v9 [#1015](https://github.com/gin-gonic/gin/pull/1015) -- [FIX] Fix some typo [#2079](https://github.com/gin-gonic/gin/pull/2079) [#2080](https://github.com/gin-gonic/gin/pull/2080) -- [FIX] Relocate binding body tests [#2086](https://github.com/gin-gonic/gin/pull/2086) -- [FIX] Use Writer in Context.Status [#1606](https://github.com/gin-gonic/gin/pull/1606) -- [FIX] `Engine.RunUnix()` now returns the error if it can't change the file mode [#2093](https://github.com/gin-gonic/gin/pull/2093) -- [FIX] `RouterGroup.StaticFS()` leaked files. Now it closes them. [#2118](https://github.com/gin-gonic/gin/pull/2118) -- [FIX] `Context.Request.FormFile` leaked file, now it closes it [#2114](https://github.com/gin-gonic/gin/pull/2114) -- [FIX] Ignore walking on `form:"-"` mapping [#1943](https://github.com/gin-gonic/gin/pull/1943) -- [REFACTOR] **[Break-Backward]** Use encode replace json marshal increase json encoder speed [#1546 ](https://github.com/gin-gonic/gin/pull/1546) - +- [FIX] Identify terminal on a RISC-V architecture for auto-colored logs + [#2019](https://github.com/gin-gonic/gin/pull/2019) +- [FIX] **[Break-Backward]** Context.JSONP() now expects a semicolon (;) at the + end [#2007](https://github.com/gin-gonic/gin/pull/2007) +- [FIX] **[Break-Backward]** Upgrade validator version to v9 + [#1015](https://github.com/gin-gonic/gin/pull/1015) +- [FIX] Fix some typo [#2079](https://github.com/gin-gonic/gin/pull/2079) + [#2080](https://github.com/gin-gonic/gin/pull/2080) +- [FIX] Relocate binding body tests + [#2086](https://github.com/gin-gonic/gin/pull/2086) +- [FIX] Use Writer in Context.Status + [#1606](https://github.com/gin-gonic/gin/pull/1606) +- [FIX] `Engine.RunUnix()` now returns the error if it can't change the file + mode [#2093](https://github.com/gin-gonic/gin/pull/2093) +- [FIX] `RouterGroup.StaticFS()` leaked files. Now it closes them. + [#2118](https://github.com/gin-gonic/gin/pull/2118) +- [FIX] `Context.Request.FormFile` leaked file, now it closes it + [#2114](https://github.com/gin-gonic/gin/pull/2114) +- [FIX] Ignore walking on `form:"-"` mapping + [#1943](https://github.com/gin-gonic/gin/pull/1943) +- [REFACTOR] **[Break-Backward]** Use encode replace json marshal increase json + encoder speed [#1546 ](https://github.com/gin-gonic/gin/pull/1546) diff --git a/content/en/blog/releases/release16.md b/content/en/blog/releases/release16.md index 539997c96..cec8b7bdf 100644 --- a/content/en/blog/releases/release16.md +++ b/content/en/blog/releases/release16.md @@ -1,60 +1,94 @@ --- -title: "Gin 1.6.0 is released" -linkTitle: "Gin 1.6.0 is released" +title: Gin 1.6.0 is released +linkTitle: Gin 1.6.0 is released date: 2020-03-22 --- ### CHANGELOG #### BREAKING - * chore(performance): Improve performance for adding RemoveExtraSlash flag [#2159](https://github.com/gin-gonic/gin/pull/2159) - * drop support govendor [#2148](https://github.com/gin-gonic/gin/pull/2148) - * Added support for SameSite cookie flag [#1615](https://github.com/gin-gonic/gin/pull/1615) + +- chore(performance): Improve performance for adding RemoveExtraSlash flag + [#2159](https://github.com/gin-gonic/gin/pull/2159) +- drop support govendor [#2148](https://github.com/gin-gonic/gin/pull/2148) +- Added support for SameSite cookie flag + [#1615](https://github.com/gin-gonic/gin/pull/1615) #### FEATURES - * add yaml negotitation [#2220](https://github.com/gin-gonic/gin/pull/2220) - * FileFromFS [#2112](https://github.com/gin-gonic/gin/pull/2112) + +- add yaml negotitation [#2220](https://github.com/gin-gonic/gin/pull/2220) +- FileFromFS [#2112](https://github.com/gin-gonic/gin/pull/2112) #### BUGFIXES - * Unix Socket Handling [#2280](https://github.com/gin-gonic/gin/pull/2280) - * Use json marshall in context json to fix breaking new line issue. Fixes #2209 [#2228](https://github.com/gin-gonic/gin/pull/2228) - * fix accept incoming network connections [#2216](https://github.com/gin-gonic/gin/pull/2216) - * Fixed a bug in the calculation of the maximum number of parameters [#2166](https://github.com/gin-gonic/gin/pull/2166) - * [FIX] allow empty headers on DataFromReader [#2121](https://github.com/gin-gonic/gin/pull/2121) - * Add mutex for protect Context.Keys map [#1391](https://github.com/gin-gonic/gin/pull/1391) + +- Unix Socket Handling [#2280](https://github.com/gin-gonic/gin/pull/2280) +- Use json marshall in context json to fix breaking new line issue. Fixes #2209 + [#2228](https://github.com/gin-gonic/gin/pull/2228) +- fix accept incoming network connections + [#2216](https://github.com/gin-gonic/gin/pull/2216) +- Fixed a bug in the calculation of the maximum number of parameters + [#2166](https://github.com/gin-gonic/gin/pull/2166) +- [FIX] allow empty headers on DataFromReader + [#2121](https://github.com/gin-gonic/gin/pull/2121) +- Add mutex for protect Context.Keys map + [#1391](https://github.com/gin-gonic/gin/pull/1391) #### ENHANCEMENTS - * Add mitigation for log injection [#2277](https://github.com/gin-gonic/gin/pull/2277) - * tree: range over nodes values [#2229](https://github.com/gin-gonic/gin/pull/2229) - * tree: remove duplicate assignment [#2222](https://github.com/gin-gonic/gin/pull/2222) - * chore: upgrade go-isatty and json-iterator/go [#2215](https://github.com/gin-gonic/gin/pull/2215) - * path: sync code with httprouter [#2212](https://github.com/gin-gonic/gin/pull/2212) - * Use zero-copy approach to convert types between string and byte slice [#2206](https://github.com/gin-gonic/gin/pull/2206) - * Reuse bytes when cleaning the URL paths [#2179](https://github.com/gin-gonic/gin/pull/2179) - * tree: remove one else statement [#2177](https://github.com/gin-gonic/gin/pull/2177) - * tree: sync httprouter update (#2173) (#2172) [#2171](https://github.com/gin-gonic/gin/pull/2171) - * tree: sync part httprouter codes and reduce if/else [#2163](https://github.com/gin-gonic/gin/pull/2163) - * use http method constant [#2155](https://github.com/gin-gonic/gin/pull/2155) - * upgrade go-validator to v10 [#2149](https://github.com/gin-gonic/gin/pull/2149) - * Refactor redirect request in gin.go [#1970](https://github.com/gin-gonic/gin/pull/1970) - * Add build tag nomsgpack [#1852](https://github.com/gin-gonic/gin/pull/1852) + +- Add mitigation for log injection + [#2277](https://github.com/gin-gonic/gin/pull/2277) +- tree: range over nodes values + [#2229](https://github.com/gin-gonic/gin/pull/2229) +- tree: remove duplicate assignment + [#2222](https://github.com/gin-gonic/gin/pull/2222) +- chore: upgrade go-isatty and json-iterator/go + [#2215](https://github.com/gin-gonic/gin/pull/2215) +- path: sync code with httprouter + [#2212](https://github.com/gin-gonic/gin/pull/2212) +- Use zero-copy approach to convert types between string and byte slice + [#2206](https://github.com/gin-gonic/gin/pull/2206) +- Reuse bytes when cleaning the URL paths + [#2179](https://github.com/gin-gonic/gin/pull/2179) +- tree: remove one else statement + [#2177](https://github.com/gin-gonic/gin/pull/2177) +- tree: sync httprouter update (#2173) (#2172) + [#2171](https://github.com/gin-gonic/gin/pull/2171) +- tree: sync part httprouter codes and reduce if/else + [#2163](https://github.com/gin-gonic/gin/pull/2163) +- use http method constant [#2155](https://github.com/gin-gonic/gin/pull/2155) +- upgrade go-validator to v10 + [#2149](https://github.com/gin-gonic/gin/pull/2149) +- Refactor redirect request in gin.go + [#1970](https://github.com/gin-gonic/gin/pull/1970) +- Add build tag nomsgpack [#1852](https://github.com/gin-gonic/gin/pull/1852) #### DOCS - * docs(path): improve comments [#2223](https://github.com/gin-gonic/gin/pull/2223) - * Renew README to fit the modification of SetCookie method [#2217](https://github.com/gin-gonic/gin/pull/2217) - * Fix spelling [#2202](https://github.com/gin-gonic/gin/pull/2202) - * Remove broken link from README. [#2198](https://github.com/gin-gonic/gin/pull/2198) - * Update docs on Context.Done(), Context.Deadline() and Context.Err() [#2196](https://github.com/gin-gonic/gin/pull/2196) - * Update validator to v10 [#2190](https://github.com/gin-gonic/gin/pull/2190) - * upgrade go-validator to v10 for README [#2189](https://github.com/gin-gonic/gin/pull/2189) - * Update to currently output [#2188](https://github.com/gin-gonic/gin/pull/2188) - * Fix "Custom Validators" example [#2186](https://github.com/gin-gonic/gin/pull/2186) - * Add project to README [#2165](https://github.com/gin-gonic/gin/pull/2165) - * docs(benchmarks): for gin v1.5 [#2153](https://github.com/gin-gonic/gin/pull/2153) - * Changed wording for clarity in README.md [#2122](https://github.com/gin-gonic/gin/pull/2122) + +- docs(path): improve comments + [#2223](https://github.com/gin-gonic/gin/pull/2223) +- Renew README to fit the modification of SetCookie method + [#2217](https://github.com/gin-gonic/gin/pull/2217) +- Fix spelling [#2202](https://github.com/gin-gonic/gin/pull/2202) +- Remove broken link from README. + [#2198](https://github.com/gin-gonic/gin/pull/2198) +- Update docs on Context.Done(), Context.Deadline() and Context.Err() + [#2196](https://github.com/gin-gonic/gin/pull/2196) +- Update validator to v10 [#2190](https://github.com/gin-gonic/gin/pull/2190) +- upgrade go-validator to v10 for README + [#2189](https://github.com/gin-gonic/gin/pull/2189) +- Update to currently output [#2188](https://github.com/gin-gonic/gin/pull/2188) +- Fix "Custom Validators" example + [#2186](https://github.com/gin-gonic/gin/pull/2186) +- Add project to README [#2165](https://github.com/gin-gonic/gin/pull/2165) +- docs(benchmarks): for gin v1.5 + [#2153](https://github.com/gin-gonic/gin/pull/2153) +- Changed wording for clarity in README.md + [#2122](https://github.com/gin-gonic/gin/pull/2122) #### MISC - * ci support go1.14 [#2262](https://github.com/gin-gonic/gin/pull/2262) - * chore: upgrade depend version [#2231](https://github.com/gin-gonic/gin/pull/2231) - * Drop support go1.10 [#2147](https://github.com/gin-gonic/gin/pull/2147) - * fix comment in `mode.go` [#2129](https://github.com/gin-gonic/gin/pull/2129) + +- ci support go1.14 [#2262](https://github.com/gin-gonic/gin/pull/2262) +- chore: upgrade depend version + [#2231](https://github.com/gin-gonic/gin/pull/2231) +- Drop support go1.10 [#2147](https://github.com/gin-gonic/gin/pull/2147) +- fix comment in `mode.go` [#2129](https://github.com/gin-gonic/gin/pull/2129) diff --git a/content/en/search.md b/content/en/search.md index 4cde3a93d..394feea5f 100644 --- a/content/en/search.md +++ b/content/en/search.md @@ -2,4 +2,3 @@ title: Search Results layout: search --- - diff --git a/content/es/_index.html b/content/es/_index.html deleted file mode 100644 index 6095a42f9..000000000 --- a/content/es/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Ver Más - - - Descargar - -

Claramente, el framework más rápido para desarrollo web en Go.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**¿Qué es Gin?** - -Gin es un framework para desarrollo web escrito en Golang. - -Cuenta con una API tipo martini con un rendimiento mucho mayor, hasta 40 veces más rápido. - -Si necesitas rendimiento y productividad amarás a Gin. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Veloz" %}} -Enrutamiento basado en Radix tree, poco consumo de memoria. Sin reflection. Rendimiento predecible del API. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Soporte de middleware" %}} -Una petición entrante HTTP puede ser manejada por diversos middleware encadenados y la acción final. -Ejemplo: Logger, Authorization, GZIP y por úlitmo guardar el mensaje en la BD. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Libre de crashes" %}} -Gin puede recibir y recuperarse de un panic ocurrido durante una petición HTTP. Así tu servidor estará siempre disponible. También es posible hacer un reporte del panic, por ejemplo ¡a Sentry! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="Validación de JSON" %}} -Gin permite analizar y validar datos JSON en una petición, y por ejemplo, revisar la existencia de datos requeridos. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Agrupación de rutas" %}} -Organiza mejor tus rutas: Rutas con autorización vs rutas públicas, versiones diferentes de API. Adicionalmente los grupos de rutas pueden anidarse ilimitadamente sin afectar el rendimiento. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Manejo de errores" %}} -Gin ofrece una conveniente forma de recopilar los errores ocurridos durante una petición HTTP. Un middleware puede incluso registrarlos en un archivo de logs, la BD o enviarlos por la red. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Render incluído" %}} -Gin cuenta con una API fácil de usar para el render de JSON, XML y HTML. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Extensible" %}} -Crear un middleware nuevo es muy sencillo. Sólo debes revisar los códigos de ejemplo. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/es/_index.md b/content/es/_index.md new file mode 100644 index 000000000..8cf501a6a --- /dev/null +++ b/content/es/_index.md @@ -0,0 +1,94 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Ver Más + + +Descargar + +

Claramente, el framework más rápido para desarrollo web en Go.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**¿Qué es Gin?** + +Gin es un framework para desarrollo web escrito en Golang. Cuenta con una API +tipo martini con un rendimiento mucho mayor, hasta 40 veces más rápido. + +Si necesitas rendimiento y productividad amarás a Gin. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Veloz" %}} + +Enrutamiento basado en Radix tree, poco consumo de memoria. Sin reflection. +Rendimiento predecible del API. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Soporte de middleware"%}} + +Una petición entrante HTTP puede ser manejada por diversos middleware +encadenados y la acción final. Ejemplo: Logger, Authorization, GZIP y por úlitmo +guardar el mensaje en la BD. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Libre de crashes"%}} + +Gin puede recibir y recuperarse de un panic ocurrido durante una petición HTTP. +Así tu servidor estará siempre disponible. También es posible hacer un reporte +del panic, por ejemplo ¡a Sentry! + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="Validación de JSON" %}} + +Gin permite analizar y validar datos JSON en una petición, y por ejemplo, +revisar la existencia de datos requeridos. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Agrupación de rutas"%}} + +Organiza mejor tus rutas: Rutas con autorización vs rutas públicas, versiones +diferentes de API. Adicionalmente los grupos de rutas pueden anidarse +ilimitadamente sin afectar el rendimiento. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Manejo de errores"%}} + +Gin ofrece una conveniente forma de recopilar los errores ocurridos durante una +petición HTTP. Un middleware puede incluso registrarlos en un archivo de logs, +la BD o enviarlos por la red. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Render incluído" %}} + +Gin cuenta con una API fácil de usar para el render de JSON, XML y HTML. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extensible" %}} + +Crear un middleware nuevo es muy sencillo. Sólo debes revisar los códigos de +ejemplo. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/fa/_index.html b/content/fa/_index.html deleted file mode 100644 index e856f95c3..000000000 --- a/content/fa/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Learn More - - - Download - -

The fastest full-featured web framework for Go. Crystal clear.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**Gin چیست?** - -جین یک فریم ورک وبه که با زبان گو ساخته شده. - - .جین یک فریم ورک شبیه به مارتینه(یکی دیگه از وب فریم ورک های گو) ولی با پرفورمنس بهتر . چیزی حدود 40 برار سریع تر - - اگه شما نیازمند پرفورمنس و کارایی بالا(بهره بری بالا) هستید عاشق جین میشید. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Fast" %}} -Radix tree based routing(مسیریابی مبتنی بر درخت ردیکس), small memory foot print. No reflection(بدون تامل). Predictable API performance. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Middleware support" %}} -An incoming HTTP request can be handled by a chain of middleware and the final action. -For example: Logger, Authorization, GZIP and finally post a message in the DB. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash-free" %}} -Gin can catch a panic occurred during a HTTP request and recover it. This way, your server will be always available. It’s also possible to report this panic to Sentry for example! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON validation" %}} -Gin can parse and validate the JSON of a request, checking, for example, the existence of required values. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Routes grouping" %}} -Organize your routes better. Authorization required vs non required, different API versions. In addition, groups can be nested infinitely without degrading performance. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Error management" %}} -Gin provides a convenient way to collect all the errors occurred during a HTTP request. Eventually, middleware can write them to a log file, to a database and send them through the network. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Rendering built-in" %}} -Gin provides an easy to use API for JSON, XML and HTML rendering. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Extendable" %}} -Creating new middleware is so easy, just check out the sample code. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/fa/_index.md b/content/fa/_index.md new file mode 100644 index 000000000..0d74cd88c --- /dev/null +++ b/content/fa/_index.md @@ -0,0 +1,93 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Learn More + + +Download + +

The fastest full-featured web framework for Go. Crystal clear.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**Gin چیست?** + +جین یک فریم ورک وبه که با زبان گو ساخته شده. + +.جین یک فریم ورک شبیه به مارتینه(یکی دیگه از وب فریم ورک های گو) ولی با پرفورمنس +بهتر . چیزی حدود 40 برار سریع تر + +اگه شما نیازمند پرفورمنس و کارایی بالا(بهره بری بالا) هستید عاشق جین میشید. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Radix tree based routing(مسیریابی مبتنی بر درخت ردیکس), small memory foot print. +No reflection(بدون تامل). Predictable API performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware support"%}}. + +An incoming HTTP request can be handled by a chain of middleware and the final +action. For example: Logger, Authorization, GZIP and finally post a message in +the DB. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash-free" %}} + +Gin can catch a panic occurred during a HTTP request and recover it. This way, +your server will be always available. It’s also possible to report this panic to +Sentry for example! {{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="JSON validation" %}} + +Gin can parse and validate the JSON of a request, checking, for example, the +existence of required values. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Routes grouping"%}} + +Organize your routes better. Authorization required vs non required, different +API versions. In addition, groups can be nested infinitely without degrading +performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Error management" %}} + +Gin provides a convenient way to collect all the errors occurred during a HTTP +request. Eventually, middleware can write them to a log file, to a database and +send them through the network. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Rendering built-in" %}} + +Gin provides an easy to use API for JSON, XML and HTML rendering. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extendable"%}} + +Creating new middleware is so easy, just check out the sample code. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/ja/_index.html b/content/ja/_index.html deleted file mode 100644 index 776fa4548..000000000 --- a/content/ja/_index.html +++ /dev/null @@ -1,76 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - 詳しく見る - - - ダウンロード - -

Go 言語のためのフル機能の最速 Web フレームワーク。水晶のようにクリア。

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**Ginとは何か?** - -Gin は、Golang で書かれた Web フレームワークです。 - -martini に似た API を持ちながら、非常に優れたパフォーマンスを発揮し、最大で40倍高速であることが特徴です。 - -性能と優れた生産性が必要なら、きっと Gin が好きになれるでしょう。 - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="高速" %}} -基数木(redix tree)を元にしたルーティング、小さなメモリフットプリント、リフレクションなし、予測可能な API 性能などの特徴があります。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="ミドルウェアのサポート" %}} -受信したHTTPリクエストをミドルウェアのチェーンと最終的なアクションによりハンドリングできます。たとえば、ロガー、認証、GZIP、さらに DB へのメッセージのポストなどが可能です。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="クラッシュフリー" %}} -Gin は、HTTP リクエスト中に発生した panic をキャッチし、回復することが可能です。これにより、サーバーが常に利用可能な状態になります。さらに、この panic を Sentry などに報告することもできます。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON のバリデーション" %}} -Gin はリクエストの JSON をパース・検証できます。たとえば、必須の値が存在するかどうかをチェックできます。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="ルートのグループ化" %}} -ルートを上手く組織化しましょう。認証が必要なページと必要のないページ、異なるバージョンの API などを区別できます。さらに、各グループは性能劣化なしに無制限にネストできます。 -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="エラーの管理" %}} -Gin は HTTP リクエスト中に発生したすべてのエラーを収集する便利な手段を提供します。最終的に、ミドルウェアによって、ログファイルへの書き込み、データベースへの格納、ネットワーク越しの送信などが行われます。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="レンダリングのビルトイン" %}} -Gin は JSON、XML、HTML のレンダリングのための簡単に使える API を提供します。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="拡張可能" %}} -新しいミドルウェアの作成は非常に簡単です。サンプルコードを見てみてください。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/ja/_index.md b/content/ja/_index.md new file mode 100644 index 000000000..0780a07a2 --- /dev/null +++ b/content/ja/_index.md @@ -0,0 +1,95 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + 詳しく見る + + +ダウンロード + +

Go 言語のためのフル機能の最速 Web フレームワーク。水晶のようにクリア。

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**Gin とは何か?** + +Gin は、Golang で書かれた Web フレームワークです。 + +martini に似た API を持ちながら、非常に優れたパフォーマンスを発揮し、最大で 40 +倍高速であることが特徴です。 + +性能と優れた生産性が必要なら、きっと Gin が好きになれるでしょう。 + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="高速" %}} + +基数木(redix tree)を元にしたルーティング、小さなメモリフットプリント、リフレク +ションなし、予測可能な API 性能などの特徴があります。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="ミドルウェアのサポート"%}} + +受信した HTTP リクエストをミドルウェアのチェーンと最終的なアクションによりハンド +リングできます。たとえば、ロガー、認証、GZIP、さらに DB へのメッセージのポストな +どが可能です。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="クラッシュフリー" %}} + +Gin は、HTTP リクエスト中に発生した panic をキャッチし、回復することが可能です。 +これにより、サーバーが常に利用可能な状態になります。さらに、この panic を Sentry +などに報告することもできます。 + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="JSON のバリデーション" %}} + +Gin はリクエストの JSON をパース・検証できます。たとえば、必須の値が存在するかど +うかをチェックできます。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="ルートのグループ化"%}} + +ルートを上手く組織化しましょう。認証が必要なページと必要のないページ、異なるバー +ジョンの API などを区別できます。さらに、各グループは性能劣化なしに無制限にネス +トできます。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="エラーの管理" %}} + +Gin は HTTP リクエスト中に発生したすべてのエラーを収集する便利な手段を提供します +。最終的に、ミドルウェアによって、ログファイルへの書き込み、データベースへの格納 +、ネットワーク越しの送信などが行われます。 + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="レンダリングのビルトイン" %}} + +Gin は JSON、XML、HTML のレンダリングのための簡単に使える API を提供します。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="拡張可能" %}} + +新しいミドルウェアの作成は非常に簡単です。サンプルコードを見てみてください。 + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/ko-kr/_index.html b/content/ko-kr/_index.html deleted file mode 100644 index fd2efc05d..000000000 --- a/content/ko-kr/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Learn More - - - Download - -

The fastest full-featured web framework for Go. Crystal clear.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**What is Gin?** - -Gin is a web framework written in Golang. - -It features a martini-like API with much better performance, up to 40 times faster. - -If you need performance and good productivity, you will love Gin. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Fast" %}} -Radix tree based routing, small memory foot print. No reflection. Predictable API performance. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Middleware support" %}} -A incoming HTTP request can be handled by a chain of middlewares and the final action. -For example: Logger, Authorization, GZIP and finally post a message in the DB. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash-free" %}} -Gin can catch a panic occurred during a HTTP request and recover it. This way, your server will be always available. It’s also possible to report this panic to Sentry for example! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON validation" %}} -Gin can parse and validate the JSON of a request, checking for example the existence of required values. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Routes grouping" %}} -Organize your routes better. Authorization required vs non required, different API versions. In addition, the groups can be nested unlimitedly without degrading performance. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Error management" %}} -Gin provides a convenient way to collect all the errors occurred during a HTTP request. Eventually, a middleware can write them to a log file, to a database and send them through the network. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Rendering built-in" %}} -Gin provides an easy to use API for JSON, XML and HTML rendering. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Extendable" %}} -Creating a new middleware is so easy, just check out the sample codes. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/ko-kr/_index.md b/content/ko-kr/_index.md new file mode 100644 index 000000000..290c6db5b --- /dev/null +++ b/content/ko-kr/_index.md @@ -0,0 +1,90 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Learn More + + +Download + +

The fastest full-featured web framework for Go. Crystal clear.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**What is Gin?** + +Gin is a web framework written in Golang. It features a Martini-like API, but +with performance up to 40 times faster than Martini. If you need performance and +productivity, you will love Gin. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Radix tree based routing, small memory foot print. No reflection. Predictable +API performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware support"%}} + +An incoming HTTP request can be handled by a chain of middleware and the final +action. For example: Logger, Authorization, GZIP and finally post a message in +the DB. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash-free" %}} + +Gin can catch a panic occurred during a HTTP request and recover it. This way, +your server will be always available. It’s also possible to report this panic to +Sentry for example! {{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="JSON validation" %}} + +Gin can parse and validate the JSON of a request, checking, for example, the +existence of required values. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Routes grouping"%}} + +Organize your routes better. Authorization required vs non required, different +API versions. In addition, groups can be nested infinitely without degrading +performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Error management" %}} + +Gin provides a convenient way to collect all the errors occurred during a HTTP +request. Eventually, middleware can write them to a log file, to a database and +send them through the network. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Rendering built-in" %}} + +Gin provides an easy to use API for JSON, XML and HTML rendering. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extendable"%}} + +Creating new middleware is so easy, just check out the sample code. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/ko-kr/blog/news/how-to-build-one-effective-middleware.md b/content/ko-kr/blog/news/how-to-build-one-effective-middleware.md index d93e7cbc3..2bbf61612 100644 --- a/content/ko-kr/blog/news/how-to-build-one-effective-middleware.md +++ b/content/ko-kr/blog/news/how-to-build-one-effective-middleware.md @@ -1,6 +1,6 @@ --- -title: "How to build one effective middleware?" -linkTitle: "How to build one effective middleware?" +title: 'How to build one effective middleware?' +linkTitle: 'How to build one effective middleware?' date: 2019-02-26 --- @@ -8,9 +8,14 @@ date: 2019-02-26 The middleware has two parts: - - part one is what is executed once, when you initialize your middleware. That's where you set up all the global objects, logicals etc. Everything that happens once per application lifetime. +- part one is what is executed once, when you initialize your middleware. That's + where you set up all the global objects, logicals etc. Everything that happens + once per application lifetime. - - part two is what executes on every request. For example, a database middleware you simply inject your "global" database object into the context. Once it's inside the context, you can retrieve it from within other middlewares and your handler function. +- part two is what executes on every request. For example, a database middleware + you simply inject your "global" database object into the context. Once it's + inside the context, you can retrieve it from within other middlewares and your + handler function. ```go func funcName(params string) gin.HandlerFunc { @@ -28,7 +33,7 @@ func funcName(params string) gin.HandlerFunc { // ---> // The following code is an example c.Set("TestVar", params) - c.Next() + c.Next() } } ``` @@ -84,7 +89,9 @@ func mid2() gin.HandlerFunc { } ``` -According to [Constituent parts](#Constituent-parts) said, when we run the gin process, **part one** will execute firstly and will print the following information: +According to [Constituent parts](#Constituent-parts) said, when we run the gin +process, **part one** will execute firstly and will print the following +information: ```go globalMiddleware...1 @@ -104,7 +111,8 @@ mid1...1 mid2...1 ``` -When we curl one request `curl -v localhost:8080/rest/n/api/some`, **part two** will execute their middleware and output the following information: +When we curl one request `curl -v localhost:8080/rest/n/api/some`, **part two** +will execute their middleware and output the following information: ```go globalMiddleware...2 @@ -139,5 +147,3 @@ mid1...3 v globalMiddleware...3 ``` - - diff --git a/content/pt/_index.html b/content/pt/_index.html deleted file mode 100644 index 3dd3e758a..000000000 --- a/content/pt/_index.html +++ /dev/null @@ -1,82 +0,0 @@ -+++ -title = "A Abstração de Web Gin" -linkTitle = "A Abstração de Web Gin" -+++ - -{{< blocks/cover title="A Abstração de Web Gin" image_anchor="top" height="full" color="orange">}} -
- }}"> - Aprenda mais - - - Descarregar - -

A mais rápida e completa abstração de web em Go. Transparente.

-
- {{< blocks/link-down color="info">}} -
- {{< /blocks/cover>}} - - - {{% blocks/lead color="white" %}} - - **O que é a Gin?** - - A Gin é uma abstração de web escrita em Golang. - - Ela apresenta uma API parecida com a Martini, mais com desempenho mais alto, 40 vezes mais rápida do que a Martini. - - Se precisas de desempenho e produtividade, amarás a Gin. - - {{% /blocks/lead %}} - - {{< blocks/section color="light">}} - - {{% blocks/feature icon="fa fa-tachometer-alt" title="Fast" %}} - Árvore de roteamento baseada em Radix, pouco consumo de memória. Sem reflexão. Desempenho de API previsível. - {{% /blocks/feature %}} - - {{% blocks/feature icon="fa fa-bars" title="Suporte à Intermediário" %}} - Uma requisição futura de HTTP pode ser manipulada por uma cadeia de intermediários e pela ação final. - Por exemplo: Registador, Autorização, GZIP e finalmente publicar uma mensagem na BD. - {{% /blocks/feature %}} - - {{% blocks/feature icon="fa fa-life-ring" title="Livre de Avaria" %}} - A Gin pode capturar um pânico que ocorreu durante uma requisição de HTTP e recuperá-lo. Deste maneira, o teu - servidor estará sempre disponível. Também é possível informar este pânico ao Sentry por exemplo! - {{% /blocks/feature %}} - - {{< /blocks/section>}} - - {{< blocks/section color="white">}} - - {{% blocks/feature icon="fa fa-check-circle" title="Validação de JSON" %}} - A Gin pode analisar e validar o JSON de uma requisição, verificando, por exemplo, a existência de valores - obrigatórios. - {{% /blocks/feature %}} - - {{% blocks/feature icon="fa fa-users-cog" title="Agrupamento de Rotas" %}} - Organiza melhor as tuas rotas. Autorização obrigatória vs não obrigatória, diferentes versões de API. Além - disso, grupos podem ser encaixados infinitamente sem a degradação do desempenho. - {{% /blocks/feature %}} - - - {{% blocks/feature icon="fa fa-briefcase" title="Gestão de Erro" %}} - A Gin fornece uma maneira conveniente de coletar todos os erros ocorridos durante uma requisição de HTTP. - Eventualmente, o intermediário pode escrevê-los em um ficheiro de registo, em uma base de dados e enviá-los - através da rede. - {{% /blocks/feature %}} - - {{< /blocks/section>}} - - {{< blocks/section color="info">}} - - {{% blocks/feature icon="fa fa-images" title="Interpretação Embutida" %}} - A Gin fornece uma API fácil de utilizar para interpretação de JSON, XML e HTML. - {{% /blocks/feature %}} - - {{% blocks/feature icon="fa fa-code" title="Extensível" %}} - A criação de um novo intermediário é tão fácil, apenas consulte o código de exemplo. - {{% /blocks/feature %}} - - {{< /blocks/section>}} diff --git a/content/pt/_index.md b/content/pt/_index.md new file mode 100644 index 000000000..12c734ed4 --- /dev/null +++ b/content/pt/_index.md @@ -0,0 +1,92 @@ +--- +title: A Abstração de Web Gin +linkTitle: A Abstração de Web Gin +--- + +{{< blocks/cover title="A Abstração de Web Gin" image_anchor="top" height="full" >}} + Aprenda mais + + +Descarregar + +

A mais rápida e completa abstração de web em Go. Transparente.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**O que é a Gin?** + +A Gin é uma abstração de web escrita em Golang. Ela apresenta uma API parecida +com a Martini, mais com desempenho mais alto, 40 vezes mais rápida do que a +Martini. Se precisas de desempenho e produtividade, amarás a Gin. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Árvore de roteamento baseada em Radix, pouco consumo de memória. Sem reflexão. +Desempenho de API previsível. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Suporte à Intermediário"%}} + +Uma requisição futura de HTTP pode ser manipulada por uma cadeia de +intermediários e pela ação final. Por exemplo: Registador, Autorização, GZIP e +finalmente publicar uma mensagem na BD. {{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Livre de Avaria" %}} + +A Gin pode capturar um pânico que ocorreu durante uma requisição de HTTP e +recuperá-lo. Deste maneira, o teu servidor estará sempre disponível. Também é +possível informar este pânico ao Sentry por exemplo! + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} + +{{% blocks/feature icon="fa-check-circle" title="Validação de JSON" %}} + +A Gin pode analisar e validar o JSON de uma requisição, verificando, por +exemplo, a existência de valores obrigatórios. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Agrupamento de Rotas"%}} + +Organiza melhor as tuas rotas. Autorização obrigatória vs não obrigatória, +diferentes versões de API. Além disso, grupos podem ser encaixados infinitamente +sem a degradação do desempenho. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Gestão de Erro" %}} + +A Gin fornece uma maneira conveniente de coletar todos os erros ocorridos +durante uma requisição de HTTP. Eventualmente, o intermediário pode escrevê-los +em um ficheiro de registo, em uma base de dados e enviá-los através da rede. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Interpretação Embutida" %}} + +A Gin fornece uma API fácil de utilizar para interpretação de JSON, XML e HTML. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extensível"%}} + +A criação de um novo intermediário é tão fácil, apenas consulte o código de +exemplo. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/ru/_index.html b/content/ru/_index.html deleted file mode 100644 index 85c54d4f2..000000000 --- a/content/ru/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Подробнее - - - Скачать - -

Самый быстрый полнофункциональный веб-фреймворк для Go. Кристально чистый.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**Что такое Gin?** - -Gin - это веб-фреймворк, написанный на языке Golang. - -В нем реализован API, похожий на Martini, но производительность в 40 раз выше, чем у Martini. - -Если вам нужна производительность и продуктивность, Gin вам понравится. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Fast" %}} -Маршрутизация на основе радиксного дерева, малый объем памяти. Никаких отражений. Предсказуемая производительность API. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Middleware support" %}} -Входящий HTTP-запрос может быть обработан цепочкой промежуточного ПО (Middleware) и конечным действием. -Например: Логгер, авторизация, GZIP и, наконец, публикация сообщения в БД. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash-free" %}} -Gin может поймать панику, возникшую во время HTTP-запроса, и восстановить ее. Таким образом, ваш сервер будет всегда доступен. Также можно сообщить об этой панике, например, в Sentry! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON validation" %}} -Gin может анализировать и проверять JSON-запросы, например, на наличие необходимых значений. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Routes grouping" %}} -Организуйте свои маршруты лучше. Требуется и не требуется авторизация, разные версии API. Кроме того, группы могут быть вложены бесконечно без снижения производительности. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Error management" %}} -Gin обеспечивает удобный способ сбора всех ошибок, возникших во время HTTP-запроса. В конечном итоге промежуточное ПО (Middleware) может записывать их в файл журнала, в базу данных и отправлять через сеть. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Rendering built-in" %}} -Gin предоставляет простой в использовании API для рендеринга JSON, XML и HTML. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Extendable" %}} -Создать новое промежуточное программное обеспечение очень просто, просто посмотрите пример кода. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/ru/_index.md b/content/ru/_index.md new file mode 100644 index 000000000..e7e7ff29c --- /dev/null +++ b/content/ru/_index.md @@ -0,0 +1,96 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Подробнее + + +Скачать + +

Самый быстрый полнофункциональный веб-фреймворк для Go. Кристально чистый.

+{{< blocks/link-down color="info" >}} +{{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**Что такое Gin?** + +Gin - это веб-фреймворк, написанный на языке Golang. + +В нем реализован API, похожий на Martini, но производительность в 40 раз выше, +чем у Martini. + +Если вам нужна производительность и продуктивность, Gin вам понравится. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Маршрутизация на основе радиксного дерева, малый объем памяти. Никаких +отражений. Предсказуемая производительность API. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware support"%}} + +Входящий HTTP-запрос может быть обработан цепочкой промежуточного ПО +(Middleware) и конечным действием. Например: Логгер, авторизация, GZIP и, +наконец, публикация сообщения в БД. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash-free" %}} + +Gin может поймать панику, возникшую во время HTTP-запроса, и восстановить ее. +Таким образом, ваш сервер будет всегда доступен. Также можно сообщить об этой +панике, например, в Sentry! + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="JSON validation" %}} + +Gin может анализировать и проверять JSON-запросы, например, на наличие +необходимых значений. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Routes grouping"%}} + +Организуйте свои маршруты лучше. Требуется и не требуется авторизация, разные +версии API. Кроме того, группы могут быть вложены бесконечно без снижения +производительности. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Error management" %}} + +Gin обеспечивает удобный способ сбора всех ошибок, возникших во время +HTTP-запроса. В конечном итоге промежуточное ПО (Middleware) может записывать их +в файл журнала, в базу данных и отправлять через сеть. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Rendering built-in" %}} + +Gin предоставляет простой в использовании API для рендеринга JSON, XML и HTML. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extendable"%}} + +Создать новое промежуточное программное обеспечение очень просто, просто +посмотрите пример кода. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/tr/_index.html b/content/tr/_index.html deleted file mode 100644 index 04904a8b3..000000000 --- a/content/tr/_index.html +++ /dev/null @@ -1,76 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - Daha Fazla Öğren - - - İndir - -

Go ile yazılmış, en hızlı, tam teşekküllü ve kristal berraklığında bir web çerçevesi.

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - - -{{% blocks/lead color="white" %}} - -**Gin nedir??** - -Gin, Golang'da yazılmış bir web çerçevesidir. - -Martini benzeri bir API'ye sahiptir, ancak performans açısından Martini'den 40 kata kadar daha hızlıdır. - -Performans ve üretkenliğe ihtiyacınız varsa Gin'i seveceksiniz. - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="Hızlı" %}} -Radix ağacı tabanlı routing, küçük bellek ayak izi. Reflection yok. Öngörülebilir API performansı. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="Middleware desteği" %}} -Gelen bir HTTP isteği, bir middleware zinciri ve son eylem tarafından işlenebilir. Örneğin: Logger, Authorization, GZIP ve son olarak veritabanına bir mesaj gönderin. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Çökmeye Dirençli" %}} -Gin, bir HTTP isteği sırasında oluşan bir paniği yakalayabilir ve düzeltebilir. Bu şekilde sunucunuz her zaman çalışacaktır. Ayrıca bir paniği Sentry'ye bildirmek de mümkündür. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON doğrulama" %}} -Gin, bir isteğin JSON'ını ayrıştırabilir ve doğrulayabilir. Örneğin gerekli değerlerin varlığını kontrol edebilir. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="Route gruplama" %}} -Routelarınızı daha iyi düzenleyin. Authorization gerektiren veya gerektirmeyen, farklı API sürümlerini kolayca düzenleyin. Ayrıca, gruplar performansı düşürmeden sınırsız olarak iç içe yerleştirilebilir. -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="Hata yönetimi" %}} -Gin, bir HTTP isteği sırasında meydana gelen tüm hataları toplamak için uygun bir yol sağlar. Sonunda, middleware bunları bir log dosyasına veya bir veritabanına yazabilir ve ağ üzerinden gönderebilir. -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="Hazır rendering" %}} -Gin, JSON, XML ve HTML işleme için kullanımı kolay bir API sağlar. -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="Genişletilebilir" %}} -Yeni middleware oluşturmak çok kolaydır, sadece örnek kodları inceleyin. -{{% /blocks/feature %}} - -{{< /blocks/section >}} diff --git a/content/tr/_index.md b/content/tr/_index.md new file mode 100644 index 000000000..023d21bec --- /dev/null +++ b/content/tr/_index.md @@ -0,0 +1,95 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Daha Fazla Öğren + + +İndir + +

Go ile yazılmış, en hızlı, tam teşekküllü ve kristal berraklığında bir web çerçevesi.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**Gin nedir??** + +Gin, Golang'da yazılmış bir web çerçevesidir. + +Martini benzeri bir API'ye sahiptir, ancak performans açısından Martini'den 40 +kata kadar daha hızlıdır. + +Performans ve üretkenliğe ihtiyacınız varsa Gin'i seveceksiniz. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Hızlı" %}} + +Radix ağacı tabanlı routing, küçük bellek ayak izi. Reflection yok. +Öngörülebilir API performansı. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware desteği" %}} + +Gelen bir HTTP isteği, bir middleware zinciri ve son eylem tarafından +işlenebilir. Örneğin: Logger, Authorization, GZIP ve son olarak veritabanına bir +mesaj gönderin. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Çökmeye Dirençli" %}} + +Gin, bir HTTP isteği sırasında oluşan bir paniği yakalayabilir ve düzeltebilir. +Bu şekilde sunucunuz her zaman çalışacaktır. Ayrıca bir paniği Sentry'ye +bildirmek de mümkündür. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} +{{% blocks/feature icon="fa-check-circle" title="JSON doğrulama" %}} + +Gin, bir isteğin JSON'ını ayrıştırabilir ve doğrulayabilir. Örneğin gerekli +değerlerin varlığını kontrol edebilir. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Route gruplama" %}} + +Routelarınızı daha iyi düzenleyin. Authorization gerektiren veya gerektirmeyen, +farklı API sürümlerini kolayca düzenleyin. Ayrıca, gruplar performansı +düşürmeden sınırsız olarak iç içe yerleştirilebilir. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Hata yönetimi" %}} + +Gin, bir HTTP isteği sırasında meydana gelen tüm hataları toplamak için uygun +bir yol sağlar. Sonunda, middleware bunları bir log dosyasına veya bir +veritabanına yazabilir ve ağ üzerinden gönderebilir. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Hazır rendering" %}} + +Gin, JSON, XML ve HTML işleme için kullanımı kolay bir API sağlar. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Genişletilebilir" %}} + +Yeni middleware oluşturmak çok kolaydır, sadece örnek kodları inceleyin. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/content/zh-cn/_index.html b/content/zh-cn/_index.html deleted file mode 100644 index 8610720a4..000000000 --- a/content/zh-cn/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - 了解更多 - - - 下载 - -

Go语言最快的全功能Web框架。晶莹剔透。

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - -{{% blocks/lead color="white" %}} - -**什么是Gin?** - -Gin是一个使用Go语言开发的Web框架。 - -它提供类似Martini的API,但性能更佳,速度提升高达40倍。 - -如果你是性能和高效的追求者, 你会爱上 Gin。 - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="快速" %}} -基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="支持中间件" %}} -传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 -例如:Logger,Authorization,GZIP,最终操作 DB。 - -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash 处理" %}} -Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON 验证" %}} -Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="路由组" %}} -Gin帮助您更好地组织您的路由,例如,按照需要授权和不需要授权和不同API版本进行分组。此外,路由分组可以无限嵌套而不降低性能。 -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="错误管理" %}} -Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="内置渲染" %}} -Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="可扩展性" %}} -新建一个中间件非常简单,去查看[示例代码](https://gin-gonic.com/zh-cn/docs/examples/using-middleware/)吧。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} \ No newline at end of file diff --git a/content/zh-cn/_index.md b/content/zh-cn/_index.md new file mode 100644 index 000000000..b644598ef --- /dev/null +++ b/content/zh-cn/_index.md @@ -0,0 +1,91 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + 了解更多 + + +下载 + +

Go语言最快的全功能Web框架。晶莹剔透。

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**什么是 Gin?** + +Gin 是一个使用 Go 语言开发的 Web 框架。 + +它提供类似 Martini 的 API,但性能更佳,速度提升高达 40 倍。 + +如果你是性能和高效的追求者, 你会爱上 Gin。 + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} + +{{% blocks/feature icon="fa-tachometer-alt" title="快速" %}} + +基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="支持中间件" %}} + +传入的 HTTP 请求可以由一系列中间件和最终操作来处理。例如 +:Logger,Authorization,GZIP,最终操作 DB。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash 处理" %}} + +Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将 +始终可用。例如,你可以向 Sentry 报告这个 panic! + +{{% /blocks/feature %}} + +{{< /blocks/section >}} + +{{% blocks/section color="white" type="row" %}} + +{{% blocks/feature icon="fa-check-circle" title="JSON 验证" %}} + +Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="路由组" %}} + +Gin 帮助您更好地组织您的路由,例如,按照需要授权和不需要授权和不同 API 版本进行 +分组。此外,路由分组可以无限嵌套而不降低性能。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="错误管理" %}} + +Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它 +们写入日志文件,数据库并通过网络发送。 + +{{% /blocks/feature %}} + +{{< /blocks/section >}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa fa-images" title="内置渲染" %}} + +Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa fa-code" title="可扩展性" %}} + +新建一个中间件非常简单,去查 +看[示例代码](https://gin-gonic.com/zh-cn/docs/examples/using-middleware/)吧。 + +{{% /blocks/feature %}} + +{{< /blocks/section >}} diff --git a/content/zh-tw/_index.html b/content/zh-tw/_index.html deleted file mode 100644 index ec687dee2..000000000 --- a/content/zh-tw/_index.html +++ /dev/null @@ -1,77 +0,0 @@ -+++ -title = "Gin Web Framework" -linkTitle = "Gin Web Framework" -+++ - -{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" color="orange" >}} -
- }}"> - 了解更多 - - - 下載 - -

Go語言最快的全功能Web框架。晶瑩剔透。

-
- {{< blocks/link-down color="info" >}} -
-{{< /blocks/cover >}} - -{{% blocks/lead color="white" %}} - -**什麼是Gin?** - -Gin是一個使用Go語言開發的Web框架。 - -它提供類似Martini的API,但性能更佳,速度提升高達40倍。 - -如果你是性能和高效的追求者, 你會愛上 Gin。 - -{{% /blocks/lead %}} - -{{< blocks/section color="light" >}} - -{{% blocks/feature icon="fa fa-tachometer-alt" title="快速" %}} -基於 Radix 樹的路由,小內存佔用。沒有反射。可預測的 API 性能。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-bars" title="支持中間件" %}} -傳入的 HTTP 請求可以由一系列中間件和最終操作來處理。 -例如:Logger,Authorization,GZIP,最終操作 DB。 - -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-life-ring" title="Crash 處理" %}} -Gin 可以 catch 一個發生在 HTTP 請求中的 panic 並 recover 它。這樣,你的服務器將始終可用。例如,你可以向 Sentry 報告這個 panic! -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="white" >}} - -{{% blocks/feature icon="fa fa-check-circle" title="JSON 驗證" %}} -Gin 可以解析並驗證請求的 JSON,例如檢查所需值的存在。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-users-cog" title="路由組" %}} -Gin幫助您更好地組織您的路由,例如,按照需要授權和不需要授權和不同API版本進行分組。此外,路由分組可以無限嵌套而不降低性能。 -{{% /blocks/feature %}} - - -{{% blocks/feature icon="fa fa-briefcase" title="錯誤管理" %}} -Gin 提供了一種方便的方法來收集 HTTP 請求期間發生的所有錯誤。最終,中間件可以將它們寫入日誌文件,數據庫並通過網絡發送。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section color="info" >}} - -{{% blocks/feature icon="fa fa-images" title="內置渲染" %}} -Gin 為 JSON,XML 和 HTML 渲染提供了易於使用的 API。 -{{% /blocks/feature %}} - -{{% blocks/feature icon="fa fa-code" title="可擴展性" %}} -新建一個中間件非常簡單,去查看[示例代碼](https://gin-gonic.com/zh-tw/docs/examples/using-middleware/)吧。 -{{% /blocks/feature %}} - -{{< /blocks/section >}} \ No newline at end of file diff --git a/content/zh-tw/_index.md b/content/zh-tw/_index.md new file mode 100644 index 000000000..45fd10398 --- /dev/null +++ b/content/zh-tw/_index.md @@ -0,0 +1,91 @@ +--- +title: Gin Web Framework +linkTitle: Gin Web Framework +--- + +{{< blocks/cover title="Gin Web Framework" image_anchor="top" height="full" >}} + Learn More + + +Download + +

The fastest full-featured web framework for Go. Crystal clear.

+ +{{< blocks/link-down color="info" >}} {{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +**What is Gin?** + +Gin is a web framework written in Golang. It features a Martini-like API, but +with performance up to 40 times faster than Martini. If you need performance and +productivity, you will love Gin. + +{{% /blocks/lead %}} + +{{% blocks/section color="light" type="row" %}} +{{% blocks/feature icon="fa-tachometer-alt" title="Fast" %}} + +Radix tree based routing, small memory foot print. No reflection. Predictable +API performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-bars" title="Middleware support"%}} + +An incoming HTTP request can be handled by a chain of middleware and the final +action. For example: Logger, Authorization, GZIP and finally post a message in +the DB. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-life-ring" title="Crash-free" %}} + +Gin can catch a panic occurred during a HTTP request and recover it. This way, +your server will be always available. It’s also possible to report this panic to +Sentry for example! {{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="white" type="row" %}} + +{{% blocks/feature icon="fa-check-circle" title="JSON validation" %}} + +Gin can parse and validate the JSON of a request, checking, for example, the +existence of required values. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-users-cog" title="Routes grouping"%}} + +Organize your routes better. Authorization required vs non required, different +API versions. In addition, groups can be nested infinitely without degrading +performance. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-briefcase" title="Error management" %}} + +Gin provides a convenient way to collect all the errors occurred during a HTTP +request. Eventually, middleware can write them to a log file, to a database and +send them through the network. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="info" type="row" %}} + +{{% blocks/feature icon="fa-images" title="Rendering built-in" %}} + +Gin provides an easy to use API for JSON, XML and HTML rendering. + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fa-code" title="Extendable"%}} + +Creating new middleware is so easy, just check out the sample code. + +{{% /blocks/feature %}} + +{{% /blocks/section %}} diff --git a/go.mod b/go.mod index 0e69b2a75..884c85570 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,5 @@ -module github.com/gin-gonic/website +module github.com/google/docsy-example -go 1.22.2 +go 1.12 -require ( - github.com/google/docsy v0.9.2-0.20240426161215-e9eca0fcb3b5 // indirect - github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7 // indirect - github.com/twbs/bootstrap v5.3.3+incompatible // indirect -) +require github.com/google/docsy v0.10.1-0.20240529105443-333c2f8d4172 // indirect - v0.10.0-12-g333c2f8 diff --git a/go.sum b/go.sum index 9b580b446..c74f991fe 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,10 @@ -github.com/FortAwesome/Font-Awesome v0.0.0-20240108205627-a1232e345536/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7 h1:2aWEKCRLqQ9nPyXaz4/IYtRrDr3PzEiX0DUSUr2/EDs= github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/FortAwesome/Font-Awesome v4.7.0+incompatible h1:3trjm7NtX5NXlju1AxSWSzedDMq2hsfH78Qtqrc8EgY= -github.com/FortAwesome/Font-Awesome v4.7.0+incompatible/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.9.1 h1:+jqges1YCd+yHeuZ1BUvD8V8mEGVtPxULg5j/vaJ984= -github.com/google/docsy v0.9.1/go.mod h1:saOqKEUOn07Bc0orM/JdIF3VkOanHta9LU5Y53bwN2U= -github.com/google/docsy v0.9.2-0.20240426161215-e9eca0fcb3b5 h1:EDs9FRTZ75agHdnMeO3HjfqJV10jKpdsM6XEARy/FsM= -github.com/google/docsy v0.9.2-0.20240426161215-e9eca0fcb3b5/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= -github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= -github.com/twbs/bootstrap v5.3.3+incompatible h1:goFoqinzdHfkeegpFP7pvhbd0g+A3O2hbU3XCjuNrEQ= +github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg= +github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= +github.com/google/docsy v0.10.1-0.20240516225026-36746913371a h1:Fmx4SmmyWZf4q3rq9jhVWr6/h2MKEi4+61irjQO2ylI= +github.com/google/docsy v0.10.1-0.20240516225026-36746913371a/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= +github.com/google/docsy v0.10.1-0.20240528200232-6549143cf323 h1:T4UiGpcrIgiuyQj0tc7BtJwv6u736J8Jnl4QZno0fk4= +github.com/google/docsy v0.10.1-0.20240528200232-6549143cf323/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= +github.com/google/docsy v0.10.1-0.20240529105443-333c2f8d4172 h1:1gAAuOfHRok/hJqfF+wpjOYqlH0d76dwUsskLEnOzxo= +github.com/google/docsy v0.10.1-0.20240529105443-333c2f8d4172/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/hugo.toml b/hugo.toml index f97f392a5..2d2f14e02 100644 --- a/hugo.toml +++ b/hugo.toml @@ -151,7 +151,7 @@ time_format_blog = "02.01.2006" # Everything below this are Site Params [params] -copyright = "Gin Team" +copyright = "Gin Team All Rights Reserved" #privacy_policy = "https://policies.google.com/privacy" # First one is picked as the Twitter card image if not set on page. @@ -217,7 +217,7 @@ no = 'Sorry to hear that. Please home page.

+

You can learn how to make a 404 page like this in Custom 404 Pages.

+
+{{- end }} diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html new file mode 100644 index 000000000..7f8e97424 --- /dev/null +++ b/layouts/_default/_markup/render-heading.html @@ -0,0 +1 @@ +{{ template "_default/_markup/td-render-heading.html" . }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html deleted file mode 100644 index 9242b69d6..000000000 --- a/layouts/partials/footer.html +++ /dev/null @@ -1,39 +0,0 @@ -{{ $links := .Site.Params.links }} -
-
-
-
- {{ with $links }} - {{ with index . "user"}} - {{ template "footer-links-block" . }} - {{ end }} - {{ end }} -
-
- {{ with $links }} - {{ with index . "developer"}} - {{ template "footer-links-block" . }} - {{ end }} - {{ end }} -
-
- {{ with .Site.Params.copyright }}© {{ now.Year}} {{ .}} {{ T "footer_all_rights_reserved" }}{{ end }} - {{ with .Site.Params.privacy_policy }}{{ T "footer_privacy_policy" }}{{ end }} - {{ if .Site.Params.ui.footer_about_enable }} - {{ with .Site.GetPage "about" }}

{{ .Title }}

{{ end }} - {{ end }} -
-
-
-
-{{ define "footer-links-block" }} -
    - {{ range . }} -
  • - - - -
  • - {{ end }} -
-{{ end }} diff --git a/package-lock.json b/package-lock.json index f11dedf1e..818a122c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,111 @@ { - "name": "tech-doc-hugo", - "version": "0.0.1", + "name": "docsy-example-site", + "version": "0.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "tech-doc-hugo", - "version": "0.0.1", - "license": "ISC", - "dependencies": { - "postcss": "^7.0.27" - }, + "name": "docsy-example-site", + "version": "0.10.0", + "license": "Apache-2.0", "devDependencies": { - "autoprefixer": "^10.4.19", - "postcss": "^8.4.38", + "autoprefixer": "^10.4.14", + "cross-env": "^7.0.3", + "hugo-extended": "0.127.0", "postcss-cli": "^11.0.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -35,6 +119,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -44,6 +129,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -52,11 +138,25 @@ "node": ">= 8" } }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -64,11 +164,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -78,6 +206,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -93,6 +222,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -120,6 +250,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-lite": "^1.0.30001599", @@ -138,11 +269,33 @@ "postcss": "^8.1.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -150,22 +303,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -181,11 +346,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -194,10 +360,112 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001612", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", - "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "dev": true, "funding": [ { @@ -212,13 +480,46 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" + }, + "node_modules/careful-downloader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/careful-downloader/-/careful-downloader-3.0.0.tgz", + "integrity": "sha512-5KMIPa0Yoj+2tY6OK9ewdwcPebp+4XS0dMYvvF9/8fkFEfvnEpWmHWYs9JNcZ7RZUvY/v6oPzLpmmTzSIbroSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "decompress": "^4.2.1", + "fs-extra": "^11.1.1", + "got": "^12.6.0", + "is-path-inside": "^4.0.0", + "tempy": "^3.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -243,6 +544,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -257,6 +559,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -268,144 +571,503 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.750", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz", - "integrity": "sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==", - "dev": true + "license": "MIT" }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">=8.6.0" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=14.14" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=4" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.807", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.807.tgz", + "integrity": "sha512-kSmJl2ZwhNf/bcIuCH/imtNOKlpkLDn2jqT5FJ+/0CXjhnFaOa9cOe9gHKKy71eM49izwuQjZhKk+lWQ1JxB7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" @@ -416,6 +1078,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -431,26 +1094,180 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/hugo-extended": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/hugo-extended/-/hugo-extended-0.127.0.tgz", + "integrity": "sha512-TDjizLf8cUpkRPkHXeDq3rZJKSAUdguV7KPddOZrclNcnL1QQh/9BgKddCZP0+4/nolPOb6GI+2LhIehfjrUHw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "careful-downloader": "^3.0.0", + "log-symbols": "^5.1.0", + "read-pkg-up": "^9.1.0" + }, + "bin": { + "hugo": "lib/cli.js", + "hugo-extended": "lib/cli.js" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -458,11 +1275,25 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -472,6 +1303,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -481,6 +1313,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -488,20 +1321,100 @@ "node": ">=0.10.0" } }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -509,11 +1422,22 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -521,28 +1445,139 @@ "url": "https://github.com/sponsors/antonk52" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -554,6 +1589,8 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -565,24 +1602,157 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/path-type": { @@ -590,6 +1760,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -597,17 +1768,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -615,6 +1795,39 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { "version": "8.4.38", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", @@ -634,6 +1847,8 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -648,6 +1863,7 @@ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.3.0", "dependency-graph": "^0.11.0", @@ -673,9 +1889,9 @@ } }, "node_modules/postcss-load-config": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.0.3.tgz", - "integrity": "sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", "dev": true, "funding": [ { @@ -687,16 +1903,18 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" }, "engines": { "node": ">= 18" }, "peerDependencies": { "jiti": ">=1.21.0", - "postcss": ">=8.0.9" + "postcss": ">=8.0.9", + "tsx": "^4.8.1" }, "peerDependenciesMeta": { "jiti": { @@ -704,6 +1922,9 @@ }, "postcss": { "optional": true + }, + "tsx": { + "optional": true } } }, @@ -722,6 +1943,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "thenby": "^1.3.4" @@ -737,17 +1959,26 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -766,31 +1997,98 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -803,15 +2101,40 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -836,15 +2159,88 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -857,15 +2253,71 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -880,6 +2332,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -887,17 +2340,117 @@ "node": ">=8" } }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/thenby": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -905,11 +2458,36 @@ "node": ">=8.0" } }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -917,19 +2495,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -945,9 +2540,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -956,11 +2552,46 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -973,20 +2604,46 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -999,6 +2656,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1017,9 +2675,34 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 0b8682a43..44c0e1f37 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,47 @@ { - "name": "tech-doc-hugo", - "version": "0.0.1", - "description": "Hugo theme for technical documentation.", - "main": "none.js", + "name": "docsy-example-site", + "version": "0.10.0", + "version.next": "0.10.1-dev.0-unreleased", + "description": "Example site that uses Docsy theme for technical documentation.", + "repository": "github:google/docsy-example", + "homepage": "https://example.docsy.dev", + "author": "Docsy Authors", + "license": "Apache-2.0", + "bugs": "https://github.com/google/docsy-example/issues", + "spelling": "cSpell:ignore docsy hugo htmltest precheck postbuild -", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bep/tech-doc-hugo.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/bep/tech-doc-hugo/issues" - }, - "homepage": "https://github.com/bep/tech-doc-hugo#readme", - "dependencies": { - "postcss": "^7.0.27" + "_build": "npm run _hugo-dev --", + "_check:links": "echo IMPLEMENTATION PENDING for check-links; echo", + "_hugo": "hugo --cleanDestinationDir", + "_hugo-dev": "npm run _hugo -- -e dev -DFE", + "_local": "npx cross-env HUGO_MODULE_WORKSPACE=docsy.work", + "_serve": "npm run _hugo-dev -- --minify serve --renderToMemory", + "build:preview": "npm run _hugo-dev -- --minify --baseURL \"${DEPLOY_PRIME_URL:-/}\"", + "build:production": "npm run _hugo -- --minify", + "build": "npm run _build -- ", + "check:links:all": "HTMLTEST_ARGS= npm run _check:links", + "check:links": "npm run _check:links", + "clean": "rm -Rf public/* resources", + "local": "npm run _local -- npm run", + "make:public": "git init -b main public", + "precheck:links:all": "npm run build", + "precheck:links": "npm run build", + "postbuild:preview": "npm run _check:links", + "postbuild:production": "npm run _check:links", + "serve": "npm run _serve", + "test": "npm run check:links", + "update:dep": "npm install --save-dev autoprefixer@latest postcss-cli@latest", + "update:hugo": "npm install --save-dev --save-exact hugo-extended@latest" }, "devDependencies": { - "autoprefixer": "^10.4.19", - "postcss": "^8.4.38", + "autoprefixer": "^10.4.14", + "cross-env": "^7.0.3", + "hugo-extended": "0.127.0", "postcss-cli": "^11.0.0" + }, + "private": true, + "prettier": { + "proseWrap": "always", + "singleQuote": true } } diff --git a/static/comment.js b/static/comment.js deleted file mode 100644 index 572225f61..000000000 --- a/static/comment.js +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/static/favicons/android-chrome-192x192.png b/static/favicons/android-chrome-192x192.png deleted file mode 100644 index 297f5de6a07687bfd818fd648891b244bff8a34d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26618 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 VxgRQuC*f`Zc&4JMT&@TY{vT51?7jd1 diff --git a/static/favicons/apple-touch-icon.png b/static/favicons/apple-touch-icon.png deleted file mode 100644 index 56b86f1c08504e4dc777a843ec8e2243d8abc626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24393 zcmV)qK$^daP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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

U!btpOftkpGMhe?w)-IWTXhzriC!xd>Cl2 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 Ubn-$ql>h($07*qoM6N<$g5fFYm;e9( diff --git a/static/favicons/browserconfig.xml b/static/favicons/browserconfig.xml deleted file mode 100644 index b3930d0f0..000000000 --- a/static/favicons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/static/favicons/favicon-16x16.png b/static/favicons/favicon-16x16.png deleted file mode 100644 index 8bb6cbd71980d0a7fd45f4201a0574d33a40def2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1415 zcma)5X;9Nw5P$z1TuCO75CRxNnwSs>!5o0Y5ikgbgu?(qV1yYU1VlsvL=n(VU?PVH zhiHw86|2-zMUEgH6k9|pm#JC=u~dc;@c^+Bq@uN?e?Rs^XZq&7{k?s=J3GI9yVde& z3C_mZ1^|GQhKI(&X#4qCAz{hp;^SaIWr?H20Cd!1KBb{you&+rjRK&A1%Oruz(@E= z`x1aXJOJiX0r1xYKvp+ij|l_-ks*&%guxEWk6g@VFmaVT-pVC1*^`|fuLt-fj}39r z>&ZMH0-a?xn+Z&g`44YuxSSX$3(HL=Z_l@oWm7gu%m7%+vRt=Bg60pH0Qr8i*;*8j z^9m$z1b7zL$=lDCw%*x4n8;w!kXV zrcZR^P}TLU)5C5}W1inlmh{%okF!=LDa((jOB1xIUXK%6PkWIJSJdp#I39ShyRf~y zpyOacyKZ+|RZdH}Us9y=wk%}z9Zb2wDkQ}sM~~3admlPH0&4C-)q|k+0o*)Yl4mBk(CwPo=+8a-zZSM*mw4e32WiW6 zrMUUJR!=-Gg*FFxIFp6%}hF@2aI zLkIs_9$4wK37P#CL2Z8iac%X*4N1?AQ=ex9N{^6)V#^FMN?5VfNTb3mXAyWyh%e+` z3Wd#(G*ql`98;!hp)I&5E-TXlbuMPRB%u~Pls>+Z=PmH%`v`w%?@Cu@&9rxSTr(7@ zH3fU~_Y}UL$(S*{GyS==vW&OF+DzLLMvQ&8*Evw_oJcOjb>wq(LxcDFXm!VX`Ai?K zh#}00>!#h8pKtu#xV?M#)Q`#+S9|xTHEFAM+a$vJEt}r6!40h;f=c3EmlqaH_2mU6qM#@mn+@gZ~Rr6i1gf+&- zW|8m0ZDHbaix2>( zQ*kT(L+(bnK1@wmq9!9vqw-f4s9*pB9^a446L9%H3f@M49^c>Fj{{2{FS8=D>|X)7 zc^TQ6#s3{Zo_Z&O0}@IUiJI87BAU7&FEe|Wil!-6t7zG34g5X(8fQ&dtNd+j_Q=-J zyVAK>fMj62lo%p|7|~#lB+^2)-nTQ541BSq?Z2!ZqWyZ diff --git a/static/favicons/favicon-32x32.png b/static/favicons/favicon-32x32.png deleted file mode 100644 index d007e06e096a30c7ebc75dfa8287c480842f2a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2586 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 diff --git a/static/favicons/favicon.ico b/static/favicons/favicon.ico deleted file mode 100644 index 6e8ab1f8fe46e2adf5c584f5a23bf140a6e69685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 diff --git a/static/favicons/mstile-150x150.png b/static/favicons/mstile-150x150.png deleted file mode 100644 index bb9ac96cdf297b8d09c1230e29fc502211c3e68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14776 zcmc(GRa9F~wD$=?f(I)Op=fa{?oh17wG=H-ptw5(hvMEAcM8SbDNvw5@#608t~dX6 zpT39h`L3*U&N`D!X14ui@0q=-z6e^-cU~q-M&l zXnAQ|fgT-QH0Mh=5_33YAUx1d&cqC!6=m8j#LRR4I45g?%4#YJMI+Mu0uzO`p^SSw zIa}Lx6dkus>vf1@9p>Xz+m_~8^U*4()auu@x z)82}NeJab_ifq2cX}vHk_A`EGBuSM)nF(p zU<2rMjdqkhO|)tjjHDj+1O#b~;{h)Y?}EADZ80RGyzok$08kRHvs*pmjSgta%ejx!FuM9k!knU0bos1Z^zQM27E1+jATWiH3| zHNVW-%F^F;wm|%1leL%XUlJvju^?GWp2?8ih|2hvC-c7s=X=b)XJLq`+6+bWelf&Y zac$8H;gz3GHg551*pB}7O>c}SxjnR-5)DTiy$|d$($4p#2&~CZbp5j$V!NYJ`Xun& zsA$x)8U;op*O=8xq=UzTX53x7fhse&Oz-mfZG`MZ-G78=-+AHaPzcQE3X^r-<}GN0 zndnP>@KrK{~m3hE=IW6IF-IRS7Ggcqu{Z=e9rrrsD;nw7r#eQs8!I|KjR z|3+%vHRH(r_dh}yogsM(^+cV-AVNurmjnm1Qy|k5<+2^y+9Amec{J_D|518n#*?7JZ~7d#b0!&b9x zy=QD$`;XcU?tma=RREw~=;Jd0{K73s?nZziz$0`MRn&!OW@X%(b?1J=pnqwKSB> z5T*}`coT~AInlo^gR|bDi{g2BuIR6Js#Lr=)6= zcMFz>qy_qU$>1{EgcKYvA#wDTl(uv)VC5Ci9q#q^4zvOKiF85-p9SpZ2luhy+kg%D zB;;^praaKx8ri&Q`>L<3&7z!Vzm3JWGAIVzC*U%iMO9b-aGSa3vtJlt;$~UTzOf~G z67kHVkvgamjX@qgZe{w8qE{DyNWp`d5|ae04?vrZZC$5c!Rr?UOmZ?1@Focn-|k00 zudn2pRGpp5I^y&;MITtS$T!Y4w3=pYx?n_1^x3a-z1=x#mLl9l!kH#bMh*A&$rqe! z4oVbw0DbTZ2v|nr1b4mwtY!HG@yF!HDd5b&VK_dKJK%xW*+$D)xqhsvhib?zqngl? z@ty1I4=J^v;<8{$GYWy;Z$FOPb`FT!Z+2CRecWQ$i5d4`{hgLb=(Mb*67>^|tuuNi z^9Eh@E&ZoL1^aID)3%9K9z_OP^W<4RJ)^bm83uRj!pbvj(l?tGKT|oDy{!L@e$m;I zEcKXJ(?}7yzZ@YRX2tXiH&kTq?QszfefkM+MD}@ zN?aVQ7-Ya~dvfn>NM>_5V=EZ+AB}kQ6y@L(-dw{3lOXWc-u=_7XwRV)bsp}#I3Hno`n3Af zvB^ck?O(nS(1GlL1K$UwLsq~oHr&YB!P9(SQGp}i1RHP!a*UD=^(MRv%3`N-bg_YbBg7Tr}T+13bofN<|O-VD;yoNYvhoX~JwR7&{aH5~u(ILx7U`~Xw zX&|_d;ZeZ{e9qAorj1`av@*g{SIDzMtr`zDgz^X_isfT_^F zaeYcL>*`4ez4J;&SObbpnF@UAHI5kDC{|6U2@a^e%&aJ*@;s10M&rZ<3CuZNq|a?3 z-3hHR5gXnYy$#+{G&@!6K{W zl)pxg5YXB^_hFIkwedlgcI3@Sz_VFT*Y&z&`xSbC2iFXH`J=NTn!AsWjF%Ra-Rx`-UnhIZA$w?S9^l}Ie zfg;7>_rJgv@_t?K5;8MN_3?6xdoC>FPSEJCzV0q`BxbNatAie4Tb=%yPANJ^pVO=Z zJDIOts1py5o)53GPa9VL%@eDW#Bnxv$agJ77x$>C(>%Tj$^D>semRF8lBhr;iBv(# z9aEgYN&A_1F^UPd?=4V>(KRh^{1S^Mjq#^0+QOwVyvXq2jhqVHMl6_`q?4pyhC9Qs zW~qxE+&lB@R~xgb@oB6dhqnKDvr+JD&S1ZrR7?4;BTM{UMq-qBV!D9UVC!2kUYEYx z?Y#!S{HliCUxKHaO1ETy#sJFxT?)!$ciaAWpZuUcJ=>!j{wHocy4*Cu*y6h}Y-6a} zh+;UCB@|B{(ik{ejQ#h-ck&V&zib&x+zsj)m02INxpuTZi{Hj+eGov435qIZHti`Z^Q9-DI&dnnKALPd z8Z{C46Ks;GW|E=3NBEleLKzEtwxAqGNh+zo+KH~rX5apICyUYjn(F#kA2#S?c>hM7 zq_QG2^BciI=Q^k+2H}^KZL4|icIs@Vg|AMO>H!sBdasg*YibE0kppLc-dau9tmrA0 zs-lE+YS(X*%{#-`Kpx9fS=VzpjRocMAQTRXwN0M+$;H8%x`hp)+njCkye=YMOB5 z{qs|7M-pvxf0z^ zB&;YdRM-YO5XFZ|BQKNp8)RFHQ7b7wc5-^SNcbtArmK?#oM%!SIu;t!Gcj-AfftmqeYm>Xev=eFh1s}ZRNB6YlQ81hL%m|60% zYIlHX)VsEgbxCl%zp~%5&qFdl&B*CJK1gER5$FsrIUO2Vze)0E8L~4Py zXC3JWGED|yu_8gqMDX6wu$&f|JY#@aAoLm-;i^0=o|cIN85=`?S00u&+2UHDlIg`> zR6}W~B4y+8)%ds^)n|-$aql@h5fm=?4}a`9-67D<)z6)M_E;p?x4WP9J6`ub{VF>d z2ay47XYX=_w$IPAY5&}TQmTm9UACPJJxHldXNsDiqeK>7`&P3PgzK_4@0uRAln<$^I=pc5c>E`ajOOozQyGRqWdcaXj$Rq%@*4b>JGHuyd)>&Ju^cQo|zzBW}D|V!YVd7Aj_Lo}Ee4lR|#zjSY z0eCz~9A0+}%8ERl_*Q%GmcF=~Pq)o@Z<370YTB0(*dHhA%3e}90#E$O^&$ikg-sn} zjr9+;GPYTiBX%sC)>yTGh9WS6maOU(mgW2}n`-}!vg0sLdSa~Wd#v!2J=|uD=v+JzU zQ?U6zdf&dY{jVqEbrm`NVsC56i2765h~Lg*>aa|by>r;07nZ2^qwBvWrF{#OAm4K> z8gci(Iu)WwbPQcipF>iI!exBZ$x11|l`wq!86dACO=k^DAPx5*>v{`cAnA9L82_S2 zFR41yfp>&-_pLO||6z0!``Nn+RSEUPR;J(!VeZB+d^OoKVrVoZ;~KTa8yB7i(hp&} z*Lj`$>f)`e;WE-n9`GXe;QF#>tRuj@oCe5(U2-7=(<~JnDF%7z~}Tg+UuISN*c!hcqQ{c z=XM&mbY5jk%m`k0%V4L>e_(Z=tH@rRhuA%@;$?Yzs@;WHC&#k^PuObUT`3vsjwjMi zZ;(E)f+r(sYShHJ6vMRQgQAv@H3Gh2&Mn`O11(?}3&L?}F_eYzRQu|N3K1tGz!}`EISF!yE6#bR!+hAdg3}dhL+>=Fd3Qw!@slDd}?rOYFe^_&l zKb+~G5dmBSNJq(zDlXgN2CkTJs-T_EumN!|LHIcov z#p*Vy%*5t$5L3AR7pCQ2VLY}(7~bE6MN}BNlrxRBsr~y7h(x_{92=gQlGozbRy8aD zA!0_;s`8!-!9k3)slO0Zue5h0UwU$#;{^7(JI{JqRS&)x^9{$AJuI-*R0zD{ys864 z09??GDBS;z=D-aI?k|<(Y$}$E`j;B%YmDV%;-eQikd9%Dm%Gv94!(H}&w}Yi{gKsd zzX`-B7UbVK5?vJnnH$jtv+AAR^m6&HkQF_}c#*`je;aT9Dm$@)U+}!cbSAgN~;VAtPkN~Q^pHFCX zvGQI>n4_jB=GYfNvvBf%1? zyL=n6z9oTd>OF>BQ`N9%@J;UdvX}JvLd<-l4-X}p7@AC1F6$zVh+6o30JWp2%Wy@~ z$8fI@hS)RRd&TG-&{sIq`%_jD-VId!fvdLDxLBL9PDp7*0sSux&0Z*i%Wm6id9`EB zDl=||y@}-Se!#m3++Q9X$M8X&HfVCEI)b{PLkWWu4Sw53jQ)?(1O1qIz5(LV#q*aK z0AsApJ$Ej0&np@19O-cGq=uJ@#|qlc2Qte5ft z@=$-$^Nu8^Zo_K{L&3JDU5kyYIwQ9g2dx4m`Ea(m>)1LTEe-_iU`7r;eaWr>+nw|F z?|Jp#{i#eV>?*NErRUBzC=6@cH0{O`II(}Un;_QC)IC3Ql?}fQSH!;tZa9Ff?&02H z^KhgdVQ4aEJMPMJ)Wgy2Wc&y3no@?cnRRFxGt@shrCAqZ3Z~`JljbVZ&p)Os>3)Oi z@-lZEd#qm-tBgs9c{YjK={u$%xd{||duFLtjT;Bm6`y`R+f3gjxQ;~IQKa<>odnM= z?Ww7BP{sf0yP|(>7&Z!Y@&7fa7&$*k6gf zzkv%MzJUar(;Ugqq`(P3Hsp|d&wU{M-6_#|0rK!DtUJ1*R%yE`Hv8!UM%Pd>(|%i= zM#19k{A$SOFMJ6l4s{4aVYO~RcN=MvBfEV~uSq<)YZ4FnJe_So90cej`Bg+cQi1i5 zzp^Xr-Tn1d8VN-|_Mk6&FKLXu-Fi;{A4hFO0cAwjXyLpwwN9Osu)sw3c13rB*YGE+;=Apj4j zZ2#L2Y+#TYRx~5qm1IjofEI7tkM!=+aJh!bM`rpB5T(B3zhj3yKezHuJb|$xnrm24 z4`jqIyWp~BCGM#H$Ncu!f?U|h?SZ4o@*zY=XJ6gf~7;iueyk7zBoK@OgYAZrwgnxhf-StP3)az9@TRM{D*qWb<0;D^!Y@ z#sy$AW$G>b1;IRBAd^q-PP-$Zld|jfs$IUL-T8?3M-WqN?DoR+K5Heo%}Rf*7+yiJ zyOp@yF4X_YLRbA~j?c2A<=6WA(NlgBqGnO_;j3Wc9KP@rzxhW7LS){2%J;ULVhuku zQ}vBXYA&Dw#vgmnKEgvk90jktOBdtUZ%Yb)u6`9Sxyx`I@P{u|9i1yCTt2 z*aUI=NY)LLG2*Lc2IsDebYm7^XF+H_&oP9S^1{W*;4XGoZ7WmOzyLaIU8*mqq|j!p zibfPEqDt>Sp_S`}4Crhk0-MV6$&07nY!vdzVWZ{;WE8pMZ}7e!7+lrxNRTAN{esGl zk=E$6F$euE@InqLb`A}`DA;$>IUrf@RHHGpT_htp)UE$VKQK!%6tKq+!Y>a&uXE(p zl|C7u6fTtjfS^%Dx#hc6PD37$87?XkGMHuP&_nhQNm4S^tJeoqK!0#$An0ZZIoJ&w z>piELBqnjd1VB$v*=2HIZ`BPSC7t{jxr|J$JZX*%sJ}306?3T+W2|?l5MVaD>Z{nn zkC{-G7-MM5)O3)z+DE5OY?aK{;$Kj|r;?A|Xdv}|`_7@~y{kAyey;-1kG-Z@!tc<5b(TjS-P zmK~0D7Wk&>_Xmd)@zYe6%8{8Y7fFv1IMGebExcIsmWfs$orXYNni+K+AX z2f9yNs^0o@EqTRxKk^Lh3GgK`9*9~30A3U^3Xbm7$;Ml8H)FE!nPSHk612hs3~&l3 z8XcaJT8ky-9v+z^T<)6kp(+qHc!@IzdlS8X_lDelpB})6ro4Wb5WwZ9wnq3g0n3^G z+Ovswo{sRNzwMksN`5>TbE0&is08mOGgtYIYnFqntExuuqg^CkVo)TDJ$K_ZI7SgT zj(F+aB~9cgwEy!Z1s<8B1FuHSu5*UTLW9Y^ZF2cRu?XoP1+xh*meUUt{}CdiYGUjU5>!?#R2xZ3 zfATgd^Fsn)bZ9Y(EBJi^To0-9OSIc|Z%4hKNkeh;MfhP@#k|!*G0fkjGbp5_UYJDF zt&>Hn_g@(o(5Q~{g}Nd=GKZvpk(B=EPp+4ddW>T00jji-&=a{SMG|m`0^8pYUuT#v zKM%8h{(z!J5vr)UE`cM7h9yNiMy_oFdq=~rSezi3Z%##Z8<+3?Dx&q4`%igA)R`3| zST;A`cEc4*kW$*PZ-pFFm^gTLB##tKwuh<-siu@pm=|CUK%8?Jx1_MGNAQN$OJcc6 z(Ocs6r(9ru{hy|Yzz5JCx6o` zJ3GT$^bOkbevIN4O{^x7fps$o8(5PQA**UQ6=$ZIB>uJ-r zt8IP-YvhTTpx4ibaV%8mCXOq`$aWNzXysnZv*xR-C3N!BwIAI9#ZEOf@ z!_s3+<>|SK)mubEHSxQdBTSMdv>8=LseDZ32u9s7NzjUDre>%DO_#uQB|b0Xsk`|j zqyL+0x|~_CZ9@=bvJTY6@zICQf+x=>>e7ldTwfd_1T7yVSYU=DxF=a(6OxazcMR{p zq8KW`!?Bf#lQyVKUBJ5e&Fy*W%ihq5BZ7las^p>Cgw30NT&atCrxg!TI#>%oFwY0- zVpi{J6GbRC^hqb}J-II>9o(obS42iL|w~&3c zao!k9rcY0`|GL`{A<(0UC!$>AB5sj__WyK-Alf36hpBDm1q8IWh!npsUR%N<)52l& zs%Q9_x^o|vCvgjs`PRvF%*T6{bceCxNU`3NN1UZ)C*pQW2HB@DyNBKD<&=C_a`+bf zDCPY=aw_WLOKb9HJaho{Ab3El&E2G~>!zHHp)l4?MtH}$rsO9hlg$Zl zI})7XSVkMGBGVkUe#snHdlvVCbWq`khtfMGQLQ|aF5<%uU0O7?|bUvyTbXibj}m4mn6f(OxKs`TNQpc@0zZDp#NHnR5f(qtKDpk zNWckjfgl&eZ|<94WkoD~M4&Y(LdbXx^^QD(cEsVIM(dTJx1eH|?zHA#GJepd#E#H5 z#Q6#Rg&vE>WmLwuoAeCD3Q3U(T&s98Dob|v+V--CHEND(Lth7FkBg?<)*Y!Gk4y3t zG5Iiu%tz65`VQ{;Z4vUUmXnstNM)~+O?!W5`~5T#uRr6L;{KP6;$luKn-&$X*l#xr zK6-q}^%#)LW+T4WI)ed1$RU1&B!UqtzY!t7-1lWqJC)^{*b3aR9xSX&iK}`k^Y2$J z8PW+;-^xbHof_KCh`qO>?n|~g^zW`l{0fi78D1ZHrj{d}^l#KGJ=T1jPbq!e_PbUX zYpO5t8Ga41W;hb{fd2Bl1PQ#gn{wm!w7%qGH0)T7F=}WKeHz`*9C@Y^l?LfP#mpbK zxc!Y@_NTudUtH!^&TaM>N4xgc6aN8)_(IVknMLYc3#HsKtW5{L<}C60I5eORV77|v ze)@$3R7hs->{-C#smHnfX?Fdo=`tRT%4;)h`DpR&=uFOKj(7vr=L`4YkmKVQgzcF)fpes8v~Uvlko3JF*1AJ6LX|!0?4#W1OFxuEnY^!p}Lx4*wnd?Cb3NT|C}r-JWgReRX?6V~p7%DYd)17AYvP z&n+7a`+23+`DA8=GcYd~&0Kx(E9lOoa{70GX?lc8dh7efqZd$6wgsR*s_g_^!t7FfNgDHqrqur85xe(0d(K1GSNBS@Gld+q-_ zrUW0)?AlA!Z&ZHT;B0!oT+Gd3c95S~kKa&zY06X2aes>gtHSHD_dRt}t{rb59`=M` zw$rLs)9UTmbZ@wXA6H2U1P{`;`MZ!M7=hHzzx@5ZC3^8$B# z_Way0jD*hD-WFZApInqR)eZXV&NS|6%qCYXG#-9q?C@P6Zs#k(+9N2xIY9mP!&l4Y zX9&a%$G0fQ7Org`Uw%lgS9hS-(P2Rr74brToaUiD^V)2>tks3LZ^!pwm^D~ea*;f5 zua8O1go)Wve)sM4W{F}5!qzP8VB^{^Z(k~)lYnRIo$@JHu%Qy0BG4qMZv#6yT7%DJ z3lqMD=stm5qnin=ZnXwej~naT(OVRmLRC37^y+D9Lr5l`*CqHMgi*y;T zzc8+aRCgbX9a=QRGMhKW<>GFNWXp-)Bsx8+wX4xYc11eou3@Ym%{cZCYqm+%8*m0t z%Uv^s=h%+AY8d+4gn*)I^ImI7yUI3o9J5-sorf|8UJb@9FT3Nzm!q~Q@;N_`@V!ke z0m}=)1@Td<4o4CXzxLF=caKj}i97tMBTAX~UHoH{a)!P4m`{ot7j$-M$2X4K;x_@p z#R^8aSaH)c)yj>AMd81(iBO{t^crGO)xn8BLnADH8hf1R1_#vKS76IS;*!ep1fRB} z;+x~Fd8>G%Hf6QwO>^T5s*+TjR$tlKJ}N>$Bw&IY&ArdUbIJ@;ZV#8M;-Z%!`&WV| z8$A_EaeUdg&2|`3n^9Y}5_&;SzGIj2)-z>g>$L$yT>+*P-*1l28x%O|hixql?S8M@ zIt`X)^AAXW#(F0L7IkDt0sEpCwOd7m{~n}ci>rmTem$Ogz4YxX_hbDS#dG_9yE-+_ z<;cHi9%CE#4HB{vH~fpqJhh`;!>?btFD(owdOrNzYj)LkePr1EE#%rnLH+j$l}q2g&-!D4)w=+cH1sr=`dsX+>*Nut8 z?Uh^&YayjwKl+4!^>_l77UaQPkV4jAeIL9BM*I7jt$F+RO*cgyk7F5_jLd+?E_v4c z_7jKxl3m-)H^<96g;r6@aXb{ewJh6CV0m`%&E?3&gdOGqj6dXk1l1Cmr6 zQRJnD>cF3}!RuQxQ$ePzJG`CdSC|7Iw4aU7gqQg}{bObwdhZEli8%ZOU3iM_iVQI@ z1}pi+aJ?@HD*4+1gdd`cv6(0qyfSmXc6(J%p4q%MzQ67FG+&oD`|N1co^y9wDt@)O zs+88Dspk_x@J_FiTH{u(*Wm^QiXLZs9rIY!Rlkmi3$#S9i|Y@X|B1?y%lBF7d`KC7 z!Dt9!Th3-S=I#0(!Ib6A=5Xyk^0(aZZcxD@^FGA+`2PG{+;JBhEohR`*-69mvc~A2 z@)^NqO~p%7!SF>-u;qH>m=K2)(ka%vL7QOArHHd1)S(K~7DMO$H=iA@D@MLKT>WnN z&7k7_a%^%m(`^8y!__rhrcUd`oOSu%qVCa=?!sM*kiQ%xaE)vmc)rMqk0kIvMQ66cCP1>-5?_h5TirQ2D1M}b1;ks;dkYF6i-{=^X< z?_zqo|AKwmlJ9CWBZr`MpAcQD%}#2?Lx=t3HM{4|;bwbgsq5j!?>G1={(_wyPw?|6g|>3}4C--$EaLaqk4 z-=E%`cbBFL{)RF&!jcF zR)3+;H1Pz!XB7T*dK}5^wRrBUdYm#HRT1uG{x!LQpaNlr(qpSEeR2G$T8 zBW$t*qz5Dz>sL)SmqFIzT}GJAccRS|51w6cNN~+og~QYJAawj};ykv!@~{f+sO-YR zrE#rfK;To+Lf2U$(M{%y;LA^Kw3t5)vC=2_C$+hzcYgX+mgLHrEZIq27pQ<4s8WJ+ zjNRBxTMIA~Ss6Gd(Dh$e6sh@${;)pM7jtQbd*P)n8zdW=hB-Jew~K|?Kw3krj|bCo zlPs%VrJA$$RT|$4R6!e|#7iE8yH78XzP#^O;&@3q&(%yJabaH!m%ziyRS(V1I4qb0 z{wb{72;yv1hrwi1*aS%AL!i?0xmj%1oz^y6p3Fo&^f8XgUR9eV`hH=F??j}>nZNw4 z=#gosW`6H&oD#tcyyvT~da>{{i8`r8nlBo?`2j1_KuyL%1;9tD)8b>`ldqk`;MK;= z|A-8cvR~>gi2-u$S!CLA=iXA?Y_hx>;Fk(o1kmF)FQ%y65xGVmBoQbrC>*a}^!7I< zB7&iEN(WuoMZZ5R&5rT;FbUkIkdiQlp0$Waw=~#xeiwfP{mU3J`TK&p2|xMZdvo%y zlTjCgoxk$aYz*Y&^&ZtCW9XrYGQq2@QZGo0HJ)*pCpC-a{sHSv4tc^R=g!IbDUizS*MPjeB%&*w=RZ6&{fbJspM7iSv;<%bk*sP*-mochAJo49`11#gId z$zQLuqRXgtTMFXhBaOSxhllHImctM+_rmh?S}zUQ?9peJuG$6#T6s&Pdd(nl z9%3ZRY4z(WgQAuHC6iofBRcx3*9Y9awBf4=gnN1Y{-u(7`QL^HU)j{R696zCXqS$| zvxh8@XTeI|+>Fvyb)WIQSqaDv%2p9jp0c%MM(TW2A{4^@%Mr}z3uQJCZw6V}-}dA# zktK|$R(Z_-5{G%yQV8IH+zP!sN9W(0A}xo+q3TJxlt-sXi;T*5nvu~^RPZk?EZ_p4 zEA0c%2J7^C_ZsXA73SvNQr?7)PScjfhpGwNGiqd*I;&oJAu@517Ur6<-3psui&{LX z6l`N7!96xX0xZb_BUUT18_Q9n?#Q+UV(EPKG+u@#;vh5=Ns)v1IRWQL;sO|lT zxJ&ly2T%L3*$SeuCHR;sn=_Pw+`_(Xz5YY3tP*S?PstTiu}zeipW0uYonkMGl*uzi zK{M7iLK*^@KYBNkE-Ju>W?m7-*hKmAyNcksFyc_UwbA@>wkuMJzd)*qDWPbORz>di z<~(OjYv$JRdxM)a!7n=l)a~8*oI+L^&THGThQ|}W{v~ZyN0JiH7l8_Ll#TF9*rf*f6Yq7s?Hs1W!cpBy# z8%M506_VIQaw)+P%8cO7IwrwrrVi*KK~9X7n&Bpodx50@pfVf88m~Q2&QqjwkyrRD z%OI~drU_bVQlZ622WKdnK(}YzdF0EsPB0 zc|@X%v`nk{TCddn6p1{z7-w2 zjfr}LzHM>?9&4mp%zvHV+&JWP98z;$>Y~9cIk0=UC0;{gF5KcUB>nI-DS}CkLP(ZS zTb_yHjKb#_KUyKy$9IP^$XaZwPA=BzQLo3QQ7wr`_~T3ecMPnT+-!^)PanUIuqnU$ z?)0{*Wq*BlD^%F2d(pOlQ{W{TR{j3uRJ?z9?z=TZq>@kL{fT7xU6$C|c_tF@B)9;a zRt+NZE>^dSjK)SyqYk5XR{U^ue^+h3X=@=gd!(h^$1L%1=#w6btf}Q(I~1r6vmzBvHar^;R&PC67dUA+Pj&lh zDe^e_~hyu4C1Q0 z8m95!tkD2U&BNFS`gcm{+}$HM{*xq=s6pU~!*|i6w$|2BX>ldy!#VS+iepIA-1Fe; z(=?i_J2q$%4TTOpgUYS)eje_U!LEiGBC8`Td+t{5{&&okN=SE5Vh&+QlT8~t5$jlU zdT=VdJPnay0H8HP!fSLmu0o(;h)kpMfBuF36sY0Tiwby_?v*%a8G* zK}3lQj-;HSr;_`R3i~!SW)xF0*CrBa66nLro?c>;x{BcB<1nUeN!d3bnf?r1eBmGr zlj}@hpX7B(MXptYFso$s-O zTt(>Cn&bK8{xR8ac~*J-VL!YrK2Q9a<21nhZ7heod*(4>tB~l$SxuDDmv5ZmcG~mc zH7l4Fn#Kf@#v)dR9b9>`vxjHY5TiF5eAUk#P5ZunC??G(7G6F0^KsFS6Sda2{-+u| zMz%2FEFc>TLowTl#w#gQa@H?Ahh5d4rMQAk&r%^ows9%$T|VD{?#F_RKdtHCg)Ucj ziS;YjMyP$BCFNavmoRWB{J~FE4HB__r{}IsO60L@w)-Nlhs;%`3f624*#D(*x@+7wT7c z0?8B-k8xbNA$NJuc@|xI9(YTjIN$uKMBOTYd1HHr^D6^|J5rNjT@?Kqccz1x2zxMb zkb^#C5H&wswkQnLrT^mgHH+$JgO2MUlA1xIk@5n3r11}Ub56qOV$x9YB}Ut*gr5Jhy*@zT_FQ8#giIXKyWva&IUxp+F5!>k-!OcAA& z>FZ}$5Jzn$rU8|~A%#tK08ER?Zi-1jOYk<45KI7*f%A5ofoW?rVS_W1{XIiH6g_Bz eaQSRSc3_Vf&*e<&buwZIK;ezDOu3YC;Qs(0!sI^y diff --git a/static/favicons/safari-pinned-tab.svg b/static/favicons/safari-pinned-tab.svg deleted file mode 100644 index 18e7a162a..000000000 --- a/static/favicons/safari-pinned-tab.svg +++ /dev/null @@ -1,325 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - - - - - diff --git a/static/favicons/site.webmanifest b/static/favicons/site.webmanifest deleted file mode 100644 index b20abb7cb..000000000 --- a/static/favicons/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} From 21a85f61f6e0735bf073c722797fb85ef732271c Mon Sep 17 00:00:00 2001 From: Luigi Morel Date: Thu, 4 Jul 2024 08:02:18 +0300 Subject: [PATCH 2/2] fix: re-add gin CNAME and LICENSE --- CNAME | 1 + LICENSE | 221 +++++--------------------------------------------------- 2 files changed, 21 insertions(+), 201 deletions(-) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..8005f2314 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +gin-gonic.com \ No newline at end of file diff --git a/LICENSE b/LICENSE index 261eeb9e9..69756b706 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,20 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +MIT License + +Copyright (c) 2018 Gin-Gonic + +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.