diff --git a/.drone.yml b/.drone.yml
index e035f57af9..95d4032413 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -39,6 +39,16 @@ steps:
- make lint-frontend
depends_on: [deps-frontend]
+ - name: security-check
+ image: golang:1.19
+ pull: always
+ commands:
+ - make security-check
+ depends_on: [deps-backend]
+ volumes:
+ - name: deps
+ path: /go
+
- name: lint-backend
image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env
pull: always
diff --git a/.eslintrc.yaml b/.eslintrc.yaml
index 4cc4060c58..a0d5655bbf 100644
--- a/.eslintrc.yaml
+++ b/.eslintrc.yaml
@@ -46,7 +46,7 @@ rules:
accessor-pairs: [2]
array-bracket-newline: [0]
array-bracket-spacing: [2, never]
- array-callback-return: [0]
+ array-callback-return: [2, {checkForEach: true}]
array-element-newline: [0]
arrow-body-style: [0]
arrow-parens: [2, always]
diff --git a/.golangci.yml b/.golangci.yml
index 982ab06f0b..0e796a2016 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -40,7 +40,7 @@ linters-settings:
stylecheck:
checks: ["all", "-ST1005", "-ST1003"]
nakedret:
- max-func-lines: 0
+ max-func-lines: 0
gocritic:
disabled-checks:
- ifElseChain
@@ -86,6 +86,8 @@ linters-settings:
- github.com/unknwon/com: "use gitea's util and replacements"
issues:
+ max-issues-per-linter: 0
+ max-same-issues: 0
exclude-rules:
# Exclude some linters from running on tests files.
- path: _test\.go
diff --git a/Makefile b/Makefile
index 3662e836aa..e258ac748f 100644
--- a/Makefile
+++ b/Makefile
@@ -35,6 +35,7 @@ MISSPELL_PACKAGE ?= github.com/client9/misspell/cmd/misspell@v0.3.4
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.30.0
XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1.3.0
+GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@latest
DOCKER_IMAGE ?= gitea/gitea
DOCKER_TAG ?= latest
@@ -728,6 +729,10 @@ generate-go: $(TAGS_PREREQ)
@echo "Running go generate..."
@CC= GOOS= GOARCH= $(GO) generate -tags '$(TAGS)' $(GO_PACKAGES)
+.PHONY: security-check
+security-check:
+ govulncheck -v ./...
+
$(EXECUTABLE): $(GO_SOURCES) $(TAGS_PREREQ)
CGO_CFLAGS="$(CGO_CFLAGS)" $(GO) build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
@@ -813,6 +818,7 @@ deps-backend:
$(GO) install $(SWAGGER_PACKAGE)
$(GO) install $(XGO_PACKAGE)
$(GO) install $(GO_LICENSES_PACKAGE)
+ $(GO) install $(GOVULNCHECK_PACKAGE)
node_modules: package-lock.json
npm install --no-save
diff --git a/assets/go-licenses.json b/assets/go-licenses.json
index 535b3dea32..8d129557de 100644
--- a/assets/go-licenses.json
+++ b/assets/go-licenses.json
@@ -884,6 +884,11 @@
"path": "gopkg.in/yaml.v2/LICENSE",
"licenseText": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"{}\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright {yyyy} {name of copyright owner}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n"
},
+ {
+ "name": "gopkg.in/yaml.v3",
+ "path": "gopkg.in/yaml.v3/LICENSE",
+ "licenseText": "\nThis project is covered by two different licenses: MIT and Apache.\n\n#### MIT License ####\n\nThe following files were ported to Go from C files of libyaml, and thus\nare still covered by their original MIT license, with the additional\ncopyright staring in 2011 when the project was ported over:\n\n apic.go emitterc.go parserc.go readerc.go scannerc.go\n writerc.go yamlh.go yamlprivateh.go\n\nCopyright (c) 2006-2010 Kirill Simonov\nCopyright (c) 2006-2011 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n### Apache License ###\n\nAll the remaining project files are covered by the Apache license:\n\nCopyright (c) 2011-2019 Canonical Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
+ },
{
"name": "mvdan.cc/xurls/v2",
"path": "mvdan.cc/xurls/v2/LICENSE",
diff --git a/build/generate-go-licenses.go b/build/generate-go-licenses.go
index fedfdc315e..87c773ed8b 100644
--- a/build/generate-go-licenses.go
+++ b/build/generate-go-licenses.go
@@ -64,8 +64,8 @@ func main() {
}
entries = append(entries, LicenseEntry{
- Name: name,
- Path: path,
+ Name: name,
+ Path: path,
LicenseText: string(licenseText),
})
}
diff --git a/cmd/serv.go b/cmd/serv.go
index b00c3962f4..06561f348a 100644
--- a/cmd/serv.go
+++ b/cmd/serv.go
@@ -43,7 +43,7 @@ const (
var CmdServ = cli.Command{
Name: "serv",
Usage: "This command should only be called by SSH shell",
- Description: `Serv provide access auth for repositories`,
+ Description: "Serv provides access auth for repositories",
Action: runServ,
Flags: []cli.Flag{
cli.BoolFlag{
diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini
index 1561a53da0..0e0822d4c5 100644
--- a/custom/conf/app.example.ini
+++ b/custom/conf/app.example.ini
@@ -1262,6 +1262,9 @@ ROUTER = console
;; List of file extensions that should be rendered/edited as Markdown
;; Separate the extensions with a comma. To render files without any extension as markdown, just put a comma
;FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd
+;;
+;; Enables math inline and block detection
+;ENABLE_MATH = true
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2150,7 +2153,7 @@ ROUTER = console
;[api]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Enables Swagger. True or false; default is true.
+;; Enables the API documentation endpoints (/api/swagger, /api/v1/swagger, …). True or false.
;ENABLE_SWAGGER = true
;; Max number of items in a page
;MAX_RESPONSE_ITEMS = 50
@@ -2158,7 +2161,7 @@ ROUTER = console
;DEFAULT_PAGING_NUM = 30
;; Default and maximum number of items per page for git trees api
;DEFAULT_GIT_TREES_PER_PAGE = 1000
-;; Default size of a blob returned by the blobs API (default is 10MiB)
+;; Default max size of a blob returned by the blobs API (default is 10MiB)
;DEFAULT_MAX_BLOB_SIZE = 10485760
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md
index 05cedeb63d..ef64c57246 100644
--- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md
+++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md
@@ -236,6 +236,7 @@ The following configuration set `Content-Type: application/vnd.android.package-a
- `CUSTOM_URL_SCHEMES`: Use a comma separated list (ftp,git,svn) to indicate additional
URL hyperlinks to be rendered in Markdown. URLs beginning in http and https are
always displayed
+- `ENABLE_MATH`: **true**: Enables detection of `\(...\)`, `\[...\]`, `$...$` and `$$...$$` blocks as math blocks.
## Server (`server`)
@@ -851,7 +852,7 @@ Default templates for project boards:
- `SCHEDULE` accept formats
- Full crontab specs, e.g. `* * * * * ?`
- Descriptors, e.g. `@midnight`, `@every 1h30m` ...
- - See more: [cron decument](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14)
+ - See more: [cron documentation](https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14)
### Basic cron tasks - enabled by default
@@ -1014,11 +1015,11 @@ Default templates for project boards:
## API (`api`)
-- `ENABLE_SWAGGER`: **true**: Enables /api/swagger, /api/v1/swagger etc. endpoints. True or false; default is true.
+- `ENABLE_SWAGGER`: **true**: Enables the API documentation endpoints (`/api/swagger`, `/api/v1/swagger`, …). True or false.
- `MAX_RESPONSE_ITEMS`: **50**: Max number of items in a page.
- `DEFAULT_PAGING_NUM`: **30**: Default paging number of API.
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: Default and maximum number of items per page for Git trees API.
-- `DEFAULT_MAX_BLOB_SIZE`: **10485760**: Default max size of a blob that can be return by the blobs API.
+- `DEFAULT_MAX_BLOB_SIZE`: **10485760** (10MiB): Default max size of a blob that can be returned by the blobs API.
## OAuth2 (`oauth2`)
diff --git a/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md b/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
index 34de3c0324..576007f75b 100644
--- a/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
+++ b/docs/content/doc/advanced/config-cheat-sheet.zh-cn.md
@@ -299,7 +299,7 @@ test01.xls: application/vnd.ms-excel; charset=binary
## API (`api`)
-- `ENABLE_SWAGGER`: **true**: 是否启用swagger路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false; 默认是 true.
+- `ENABLE_SWAGGER`: **true**: 是否启用swagger路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false.
- `MAX_RESPONSE_ITEMS`: **50**: 一个页面最大的项目数。
- `DEFAULT_PAGING_NUM`: **30**: API中默认分页条数。
- `DEFAULT_GIT_TREES_PER_PAGE`: **1000**: GIT TREES API每页的默认最大项数.
diff --git a/docs/content/doc/advanced/customizing-gitea.en-us.md b/docs/content/doc/advanced/customizing-gitea.en-us.md
index 038ce16a8d..18fc1b3e73 100644
--- a/docs/content/doc/advanced/customizing-gitea.en-us.md
+++ b/docs/content/doc/advanced/customizing-gitea.en-us.md
@@ -121,7 +121,7 @@ Apart from `extra_links.tmpl` and `extra_tabs.tmpl`, there are other useful temp
- `body_inner_pre.tmpl`, before the top navigation bar, but already inside the main container `
`.
- `body_inner_post.tmpl`, before the end of the main container.
- `body_outer_post.tmpl`, before the bottom `
` element.
-- `footer.tmpl`, right before the end of the `` tag, a good place for additional Javascript.
+- `footer.tmpl`, right before the end of the `` tag, a good place for additional JavaScript.
#### Example: PlantUML
@@ -129,7 +129,7 @@ You can add [PlantUML](https://plantuml.com/) support to Gitea's markdown by usi
The data is encoded and sent to the PlantUML server which generates the picture. There is an online
demo server at http://www.plantuml.com/plantuml, but if you (or your users) have sensitive data you
can set up your own [PlantUML server](https://plantuml.com/server) instead. To set up PlantUML rendering,
-copy javascript files from https://gitea.com/davidsvantesson/plantuml-code-highlight and put them in your
+copy JavaScript files from https://gitea.com/davidsvantesson/plantuml-code-highlight and put them in your
`$GITEA_CUSTOM/public` folder. Then add the following to `custom/footer.tmpl`:
```html
@@ -137,9 +137,9 @@ copy javascript files from https://gitea.com/davidsvantesson/plantuml-code-highl
$(async () => {
if (!$('.language-plantuml').length) return;
await Promise.all([
- $.getScript('https://your-server.com/deflate.js'),
- $.getScript('https://your-server.com/encode.js'),
- $.getScript('https://your-server.com/plantuml_codeblock_parse.js'),
+ $.getScript('https://your-gitea-server.com/assets/deflate.js'),
+ $.getScript('https://your-gitea-server.com/assets/encode.js'),
+ $.getScript('https://your-gitea-server.com/assets/plantuml_codeblock_parse.js'),
]);
// Replace call with address to your plantuml server
parsePlantumlCodeBlocks("https://www.plantuml.com/plantuml");
diff --git a/docs/content/doc/advanced/external-renderers.en-us.md b/docs/content/doc/advanced/external-renderers.en-us.md
index 4e5e72554d..f40c23dd84 100644
--- a/docs/content/doc/advanced/external-renderers.en-us.md
+++ b/docs/content/doc/advanced/external-renderers.en-us.md
@@ -74,12 +74,13 @@ RENDER_COMMAND = "timeout 30s pandoc +RTS -M512M -RTS -f rst"
IS_INPUT_FILE = false
```
-If your external markup relies on additional classes and attributes on the generated HTML elements, you might need to enable custom sanitizer policies. Gitea uses the [`bluemonday`](https://godoc.org/github.com/microcosm-cc/bluemonday) package as our HTML sanitizier. The example below will support [KaTeX](https://katex.org/) output from [`pandoc`](https://pandoc.org/).
+If your external markup relies on additional classes and attributes on the generated HTML elements, you might need to enable custom sanitizer policies. Gitea uses the [`bluemonday`](https://godoc.org/github.com/microcosm-cc/bluemonday) package as our HTML sanitizer. The example below could be used to support server-side [KaTeX](https://katex.org/) rendering output from [`pandoc`](https://pandoc.org/).
```ini
[markup.sanitizer.TeX]
; Pandoc renders TeX segments as s with the "math" class, optionally
; with "inline" or "display" classes depending on context.
+; - note this is different from the built-in math support in our markdown parser which uses
ELEMENT = span
ALLOW_ATTR = class
REGEXP = ^\s*((math(\s+|$)|inline(\s+|$)|display(\s+|$)))+
diff --git a/docs/content/doc/features/comparison.en-us.md b/docs/content/doc/features/comparison.en-us.md
index 3c2a3f9162..89d92b2565 100644
--- a/docs/content/doc/features/comparison.en-us.md
+++ b/docs/content/doc/features/comparison.en-us.md
@@ -53,6 +53,8 @@ _Symbols used in table:_
| WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
| Built-in CI/CD | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
| Subgroups: groups within groups | [✘](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
+| Mermaid diagrams in Markdown | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| Math syntax in Markdown | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
## Code management
diff --git a/docs/content/doc/features/comparison.zh-cn.md b/docs/content/doc/features/comparison.zh-cn.md
index f0eac22a26..aaf8eb4abc 100644
--- a/docs/content/doc/features/comparison.zh-cn.md
+++ b/docs/content/doc/features/comparison.zh-cn.md
@@ -31,101 +31,101 @@ _表格中的符号含义:_
#### 主要特性
-| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
-|-----------------------|-------|------|-----------|-----------|-----------|-----------|--------------|
-| 开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
-| 低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
-| 支持多种数据库 | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
-| 支持多种操作系统 | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
-| 升级简便 | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
-| 支持 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 支持 Orgmode | ✓ | ✘ | ✓ | ✘ | ✘ | ✘ | ? |
-| 支持 CSV | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
-| 支持第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
-| Git 驱动的静态 pages | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| Git 驱动的集成化 wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 部署令牌 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 仓库写权限令牌 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
-| 内置容器 Registry | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 外部 Git 镜像 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
-| WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
-| 内置 CI/CD | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 子组织:组织内的组织 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
+| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
+| --------------------- | -------------------------------------------------- | ---- | --------- | --------- | --------- | -------------- | ------------ |
+| 开源免费 | ✓ | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ |
+| 低资源开销 (RAM/CPU) | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ |
+| 支持多种数据库 | ✓ | ✓ | ✘ | ⁄ | ⁄ | ✓ | ✓ |
+| 支持多种操作系统 | ✓ | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ |
+| 升级简便 | ✓ | ✓ | ✘ | ✓ | ✓ | ✘ | ✓ |
+| 支持 Markdown | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 支持 Orgmode | ✓ | ✘ | ✓ | ✘ | ✘ | ✘ | ? |
+| 支持 CSV | ✓ | ✘ | ✓ | ✘ | ✘ | ✓ | ? |
+| 支持第三方渲染工具 | ✓ | ✘ | ✘ | ✘ | ✘ | ✓ | ? |
+| Git 驱动的静态 pages | [✘](https://github.com/go-gitea/gitea/issues/302) | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| Git 驱动的集成化 wiki | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
+| 部署令牌 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 仓库写权限令牌 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 内置容器 Registry | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 外部 Git 镜像 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
+| WebAuthn (2FA) | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ? |
+| 内置 CI/CD | ✘ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 子组织:组织内的组织 | [✘](https://github.com/go-gitea/gitea/issues/1872) | ✘ | ✘ | ✓ | ✓ | ✘ | ✓ |
#### 代码管理
-| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
-|------------------------------------------|-------|------|-----------|-----------|-----------|-----------|--------------|
-| 仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
-| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ⁄ | ✓ |
-| 组织里程碑 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 细粒度用户角色 (例如 Code, Issues, Wiki) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 提交人的身份验证 | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
-| GPG 签名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| SSH 签名的提交 | ✓ | ✘ | ✘ | ✘ | ✘ | ? | ? |
-| 拒绝未用通过验证的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✓ |
-| 仓库活跃度页面 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 分支管理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 建立新分支 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 在线代码编辑 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 提交的统计图表 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 模板仓库 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✘ |
+| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
+| ---------------------------------------- | ------------------------------------------------ | ---- | --------- | --------- | --------- | --------- | ------------ |
+| 仓库主题描述 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 仓库内代码搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 全局代码搜索 | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
+| Git LFS 2.0 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 组织里程碑 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 细粒度用户角色 (例如 Code, Issues, Wiki) | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 提交人的身份验证 | ⁄ | ✘ | ? | ✓ | ✓ | ✓ | ✘ |
+| GPG 签名的提交 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| SSH 签名的提交 | ✓ | ✘ | ✘ | ✘ | ✘ | ? | ? |
+| 拒绝未用通过验证的提交 | [✓](https://github.com/go-gitea/gitea/pull/9708) | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 仓库活跃度页面 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 分支管理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 建立新分支 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 在线代码编辑 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 提交的统计图表 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 模板仓库 | [✓](https://github.com/go-gitea/gitea/pull/8768) | ✘ | ✓ | ✘ | ✓ | ✓ | ✘ |
-#### Issue 管理
+#### 工单管理
-| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
-|----------------------|-------|------|-----------|-----------|-----------|-----------|--------------|
-| 跟踪 Issue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| Issue 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 标签 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 跟踪时间 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| Issue 可有多个负责人 | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
-| 关联的 issues | ✘ | ✘ | ⁄ | ✘ | ✓ | ✘ | ✘ |
-| 私密 issues | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 评论反馈 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 锁定讨论 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| Issue 批量处理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| Issue 看板 | ✓ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 从 issues 创建分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| Issue 搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 全局 Issue 搜索 | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| Issue 依赖 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
-| 通过 Email 创建工单 | [✘](https://github.com/go-gitea/gitea/issues/6226) | [✘](https://github.com/gogs/gogs/issues/2602) | ✘ | ✘ | ✓ | ✓ | ✘ |
-| Service Desk | [✘](https://github.com/go-gitea/gitea/issues/6219) | ✘ | ✘ | ✘ | ✓ | ✘ | ✘ |
+| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
+| ------------------- | -------------------------------------------------- | --------------------------------------------- | --------- | ----------------------------------------------------------------------- | --------- | -------------- | ------------ |
+| 工单跟踪 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ (cloud only) | ✘ |
+| 工单模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 标签 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 时间跟踪 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 支持多个负责人 | ✓ | ✘ | ✓ | ✘ | ✓ | ✘ | ✘ |
+| 关联的工单 | ✘ | ✘ | ⁄ | [✓](https://docs.gitlab.com/ce/user/project/issues/related_issues.html) | ✓ | ✘ | ✘ |
+| 私密工单 | [✘](https://github.com/go-gitea/gitea/issues/3217) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 评论反馈 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 锁定讨论 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 工单批处理 | ✓ | ✘ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 工单看板 | [✓](https://github.com/go-gitea/gitea/pull/8346) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 从工单创建分支 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 工单搜索 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 工单全局搜索 | [✘](https://github.com/go-gitea/gitea/issues/2434) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 工单依赖关系 | ✓ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
+| 通过 Email 创建工单 | [✘](https://github.com/go-gitea/gitea/issues/6226) | [✘](https://github.com/gogs/gogs/issues/2602) | ✘ | ✘ | ✓ | ✓ | ✘ |
+| 服务台 | [✘](https://github.com/go-gitea/gitea/issues/6219) | ✘ | ✘ | [✓](https://gitlab.com/groups/gitlab-org/-/epics/3103) | ✓ | ✘ | ✘ |
#### Pull/Merge requests
-| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
-|--------------------------------------|-------|------|-----------|-----------|-----------|-----------|--------------|
-| Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| Squash merging | ✓ | ✘ | ✓ | ✘ | ✓ | ✓ | ✓ |
-| Rebase merging | ✓ | ✓ | ✓ | ✘ | ⁄ | ✘ | ✓ |
-| 评论 Pull/Merge request 中的某行代码 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 指定 Pull/Merge request 的审核人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
-| 解决 Merge 冲突 | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 限制某些用户的 push 和 merge 权限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
-| 回退某些 commits 或 merge request | ✘ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| Pull/Merge requests 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 查看 Cherry-picking 的更改 | ✘ | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
-| 下载 Patch | ✓ | ✘ | ✓ | ✓ | ✓ | / | ✘ |
+| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
+| ------------------------------------ | -------------------------------------------------- | ---- | --------- | --------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------ | ------------ |
+| Pull/Merge requests | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| Squash merging | ✓ | ✘ | ✓ | [✓](https://docs.gitlab.com/ce/user/project/merge_requests/squash_and_merge.html) | ✓ | ✓ | ✓ |
+| Rebase merging | ✓ | ✓ | ✓ | ✘ | ⁄ | ✘ | ✓ |
+| 评论 Pull/Merge request 中的某行代码 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 指定 Pull/Merge request 的审核人 | ✓ | ✘ | ⁄ | ✓ | ✓ | ✓ | ✓ |
+| 解决 Merge 冲突 | [✘](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 限制某些用户的 push 和 merge 权限 | ✓ | ✘ | ✓ | ⁄ | ✓ | ✓ | ✓ |
+| 回退某些 commits 或 merge request | [✓](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| Pull/Merge requests 模板 | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 查看 Cherry-picking 的更改 | [✓](https://github.com/go-gitea/gitea/issues/5158) | ✘ | ✘ | ✓ | ✓ | ✘ | ✘ |
+| 下载 Patch | ✓ | ✘ | ✓ | ✓ | ✓ | [/](https://jira.atlassian.com/plugins/servlet/mobile#issue/BCLOUD-8323) | ✘ |
#### 第三方集成
-| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
-|----------------------------|-------|------|-----------|-----------|-----------|-----------|--------------|
-| 支持 Webhook | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 自定义 Git 钩子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 集成 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| 支持多个 LDAP / AD 服务 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
-| LDAP 用户同步 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
-| SAML 2.0 service provider | [✘](https://github.com/go-gitea/gitea/issues/5512) | [✘](https://github.com/gogs/gogs/issues/1221) | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 支持 OpenId 连接 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
-| 集成 OAuth 2.0(外部授权) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
-| 作为 OAuth 2.0 provider | [✓](https://github.com/go-gitea/gitea/pull/5378) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 二次验证 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 集成 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
-| 集成 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
-| 集成 Microsoft Teams | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
-| 显示外部 CI/CD 的状态 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 特性 | Gitea | Gogs | GitHub EE | GitLab CE | GitLab EE | BitBucket | RhodeCode CE |
+| -------------------------- | -------------------------------------------------- | --------------------------------------------- | --------- | --------- | --------- | --------- | ------------ |
+| 支持 Webhook | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 自定义 Git 钩子 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 集成 AD / LDAP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| 支持多个 LDAP / AD 服务 | ✓ | ✓ | ✘ | ✘ | ✓ | ✓ | ✓ |
+| LDAP 用户同步 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
+| SAML 2.0 service provider | [✘](https://github.com/go-gitea/gitea/issues/5512) | [✘](https://github.com/gogs/gogs/issues/1221) | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 支持 OpenId 连接 | ✓ | ✘ | ✓ | ✓ | ✓ | ? | ✘ |
+| 集成 OAuth 2.0(外部授权) | ✓ | ✘ | ⁄ | ✓ | ✓ | ? | ✓ |
+| 作为 OAuth 2.0 provider | [✓](https://github.com/go-gitea/gitea/pull/5378) | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 二次验证 (2FA) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 集成 Mattermost/Slack | ✓ | ✓ | ⁄ | ✓ | ✓ | ⁄ | ✓ |
+| 集成 Discord | ✓ | ✓ | ✓ | ✓ | ✓ | ✘ | ✘ |
+| 集成 Microsoft Teams | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✘ |
+| 显示外部 CI/CD 的状态 | ✓ | ✘ | ✓ | ✓ | ✓ | ✓ | ✓ |
diff --git a/docs/content/doc/help/faq.en-us.md b/docs/content/doc/help/faq.en-us.md
index 970a6866a6..a59abe8335 100644
--- a/docs/content/doc/help/faq.en-us.md
+++ b/docs/content/doc/help/faq.en-us.md
@@ -126,13 +126,13 @@ A "login prohibited" user is a user that is not allowed to log in to Gitea anymo
## What is Swagger?
-[Swagger](https://swagger.io/) is what Gitea uses for its API.
+[Swagger](https://swagger.io/) is what Gitea uses for its API documentation.
-All Gitea instances have the built-in API, though it can be disabled by setting `ENABLE_SWAGGER` to `false` in the `api` section of your `app.ini`
+All Gitea instances have the built-in API and there is no way to disable it completely.
+You can, however, disable showing its documentation by setting `ENABLE_SWAGGER` to `false` in the `api` section of your `app.ini`.
+For more information, refer to Gitea's [API docs]({{< relref "doc/developers/api-usage.en-us.md" >}}).
-For more information, refer to Gitea's [API docs]({{< relref "doc/developers/api-usage.en-us.md" >}})
-
-[Swagger Example](https://try.gitea.io/api/swagger)
+You can see the latest API (for example) on .
## Adjusting your server for public/private use
@@ -214,13 +214,13 @@ Our translations are currently crowd-sourced on our [Crowdin project](https://cr
Whether you want to change a translation or add a new one, it will need to be there as all translations are overwritten in our CI via the Crowdin integration.
-## Hooks aren't running
+## Push Hook / Webhook aren't running
-If Gitea is not running hooks, a common cause is incorrect setup of SSH keys.
+If you can push but can't see push activities on the home dashboard, or the push doesn't trigger webhook, there are a few possibilities:
-See [SSH Issues](#ssh-issues) for more information.
-
-You can also try logging into the administration panel and running the `Resynchronize pre-receive, update and post-receive hooks of all repositories.` option.
+1. The git hooks are out of sync: run "Resynchronize pre-receive, update and post-receive hooks of all repositories" on the site admin panel
+2. The git repositories (and hooks) are stored on some filesystems (ex: mounted by NAS) which don't support script execution, make sure the filesystem supports `chmod a+x any-script`
+3. If you are using docker, make sure Docker Server (not the client) >= 20.10.6
## SSH issues
diff --git a/docs/content/doc/packages/npm.en-us.md b/docs/content/doc/packages/npm.en-us.md
index 122f306ee5..decb3f743c 100644
--- a/docs/content/doc/packages/npm.en-us.md
+++ b/docs/content/doc/packages/npm.en-us.md
@@ -127,6 +127,10 @@ npm dist-tag add test_package@1.0.2 release
The tag name must not be a valid version. All tag names which are parsable as a version are rejected.
+## Search packages
+
+The registry supports [searching](https://docs.npmjs.com/cli/v7/commands/npm-search/) but does not support special search qualifiers like `author:gitea`.
+
## Supported commands
```
@@ -136,4 +140,5 @@ npm publish
npm unpublish
npm dist-tag
npm view
+npm search
```
diff --git a/docs/content/page/index.en-us.md b/docs/content/page/index.en-us.md
index 8e2e36223a..c3ee996f0b 100644
--- a/docs/content/page/index.en-us.md
+++ b/docs/content/page/index.en-us.md
@@ -131,7 +131,8 @@ You can try it out using [the online demo](https://try.gitea.io/).
- Environment variables
- Command line options
- Multi-language support ([21 languages](https://github.com/go-gitea/gitea/tree/main/options/locale))
-- [Mermaid](https://mermaidjs.github.io/) Diagram support
+- [Mermaid](https://mermaidjs.github.io/) diagrams in Markdown
+- Math syntax in Markdown
- Mail service
- Notifications
- Registration confirmation
diff --git a/go.mod b/go.mod
index 0e93ea443f..cfee14e833 100644
--- a/go.mod
+++ b/go.mod
@@ -15,7 +15,7 @@ require (
github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121
github.com/NYTimes/gziphandler v1.1.1
github.com/PuerkitoBio/goquery v1.8.0
- github.com/alecthomas/chroma v0.10.0
+ github.com/alecthomas/chroma/v2 v2.3.0
github.com/blevesearch/bleve/v2 v2.3.2
github.com/buildkite/terminal-to-html/v3 v3.7.0
github.com/caddyserver/certmagic v0.17.0
@@ -68,7 +68,7 @@ require (
github.com/mattn/go-isatty v0.0.16
github.com/mattn/go-sqlite3 v1.14.13
github.com/mholt/archiver/v3 v3.5.1
- github.com/microcosm-cc/bluemonday v1.0.19
+ github.com/microcosm-cc/bluemonday v1.0.20
github.com/minio/minio-go/v7 v7.0.35
github.com/msteinert/pam v1.0.0
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
@@ -89,13 +89,13 @@ require (
github.com/urfave/cli v1.22.9
github.com/xanzy/go-gitlab v0.73.1
github.com/yohcop/openid-go v1.0.0
- github.com/yuin/goldmark v1.4.13
- github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594
+ github.com/yuin/goldmark v1.4.15
+ github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87
github.com/yuin/goldmark-meta v1.1.0
go.jolheiser.com/hcaptcha v0.0.4
go.jolheiser.com/pwn v0.0.3
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90
- golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b
+ golang.org/x/net v0.0.0-20220927171203-f486391704dc
golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261
golang.org/x/text v0.3.7
@@ -103,6 +103,7 @@ require (
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/ini.v1 v1.67.0
gopkg.in/yaml.v2 v2.4.0
+ gopkg.in/yaml.v3 v3.0.1
mvdan.cc/xurls/v2 v2.4.0
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251
xorm.io/builder v0.3.11
@@ -290,7 +291,6 @@ require (
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
sigs.k8s.io/yaml v1.2.0 // indirect
)
diff --git a/go.sum b/go.sum
index 78b1df2c2a..2cdcdb4c73 100644
--- a/go.sum
+++ b/go.sum
@@ -158,9 +158,12 @@ github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
-github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
-github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
+github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs=
+github.com/alecthomas/chroma/v2 v2.3.0 h1:83xfxrnjv8eK+Cf8qZDzNo3PPF9IbTWHs7z28GY6D0U=
+github.com/alecthomas/chroma/v2 v2.3.0/go.mod h1:mZxeWZlxP2Dy+/8cBob2PYd8O2DwNAzave5AY7A2eQw=
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
+github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
+github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -1066,8 +1069,8 @@ github.com/mholt/acmez v1.0.4 h1:N3cE4Pek+dSolbsofIkAYz6H1d3pE+2G0os7QHslf80=
github.com/mholt/acmez v1.0.4/go.mod h1:qFGLZ4u+ehWINeJZjzPlsnjJBCPAADWTcIqE/7DAYQY=
github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo=
github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
-github.com/microcosm-cc/bluemonday v1.0.19 h1:OI7hoF5FY4pFz2VA//RN8TfM0YJ2dJcl4P4APrCWy6c=
-github.com/microcosm-cc/bluemonday v1.0.19/go.mod h1:QNzV2UbLK2/53oIIwTOyLUSABMkjZ4tqiyC1g/DyqxE=
+github.com/microcosm-cc/bluemonday v1.0.20 h1:flpzsq4KU3QIYAYGV/szUat7H+GPOXR0B2JU5A1Wp8Y=
+github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
@@ -1467,11 +1470,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
-github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 h1:yHfZyN55+5dp1wG7wDKv8HQ044moxkyGq12KFFMFDxg=
-github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594/go.mod h1:U9ihbh+1ZN7fR5Se3daSPoz1CGF9IYtSvWwVQtnzGHU=
+github.com/yuin/goldmark v1.4.15 h1:CFa84T0goNn/UIXYS+dmjjVxMyTAvpOmzld40N/nfK0=
+github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87 h1:Py16JEzkSdKAtEFJjiaYLYBOWGXc1r/xHj/Q/5lA37k=
+github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I=
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
@@ -1708,8 +1710,9 @@ golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b h1:ZmngSVLe/wycRns9MKikG9OWIEjGcGAkacif7oYQaUY=
golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/net v0.0.0-20220927171203-f486391704dc h1:FxpXZdoBqT8RjqTy6i1E8nXHhW21wK7ptQ/EPIGxzPQ=
+golang.org/x/net v0.0.0-20220927171203-f486391704dc/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
diff --git a/models/activities/action.go b/models/activities/action.go
index 31ecdedd5b..3c8acb5ba8 100644
--- a/models/activities/action.go
+++ b/models/activities/action.go
@@ -218,6 +218,11 @@ func (a *Action) GetRepoLink() string {
return path.Join(setting.AppSubURL, "/", url.PathEscape(a.GetRepoUserName()), url.PathEscape(a.GetRepoName()))
}
+// GetRepoAbsoluteLink returns the absolute link to action repository.
+func (a *Action) GetRepoAbsoluteLink() string {
+ return setting.AppURL + url.PathEscape(a.GetRepoUserName()) + "/" + url.PathEscape(a.GetRepoName())
+}
+
// GetCommentLink returns link to action comment.
func (a *Action) GetCommentLink() string {
return a.getCommentLink(db.DefaultContext)
diff --git a/models/activities/action_test.go b/models/activities/action_test.go
index 83fd9ee38d..ac2a3043a6 100644
--- a/models/activities/action_test.go
+++ b/models/activities/action_test.go
@@ -10,6 +10,7 @@ import (
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/db"
+ issue_model "code.gitea.io/gitea/models/issues"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
@@ -20,7 +21,7 @@ import (
func TestAction_GetRepoPath(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{})
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
action := &activities_model.Action{RepoID: repo.ID}
assert.Equal(t, path.Join(owner.Name, repo.Name), action.GetRepoPath())
@@ -28,12 +29,15 @@ func TestAction_GetRepoPath(t *testing.T) {
func TestAction_GetRepoLink(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
- repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{})
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
- action := &activities_model.Action{RepoID: repo.ID}
+ comment := unittest.AssertExistsAndLoadBean(t, &issue_model.Comment{ID: 2})
+ action := &activities_model.Action{RepoID: repo.ID, CommentID: comment.ID}
setting.AppSubURL = "/suburl"
expected := path.Join(setting.AppSubURL, owner.Name, repo.Name)
assert.Equal(t, expected, action.GetRepoLink())
+ assert.Equal(t, repo.HTMLURL(), action.GetRepoAbsoluteLink())
+ assert.Equal(t, comment.HTMLURL(), action.GetCommentLink())
}
func TestGetFeeds(t *testing.T) {
diff --git a/models/auth/oauth2.go b/models/auth/oauth2.go
index ad1d80e25a..73c250d4af 100644
--- a/models/auth/oauth2.go
+++ b/models/auth/oauth2.go
@@ -10,6 +10,7 @@ import (
"encoding/base32"
"encoding/base64"
"fmt"
+ "net"
"net/url"
"strings"
@@ -56,6 +57,18 @@ func (app *OAuth2Application) PrimaryRedirectURI() string {
// ContainsRedirectURI checks if redirectURI is allowed for app
func (app *OAuth2Application) ContainsRedirectURI(redirectURI string) bool {
+ uri, err := url.Parse(redirectURI)
+ // ignore port for http loopback uris following https://datatracker.ietf.org/doc/html/rfc8252#section-7.3
+ if err == nil && uri.Scheme == "http" && uri.Port() != "" {
+ ip := net.ParseIP(uri.Hostname())
+ if ip != nil && ip.IsLoopback() {
+ // strip port
+ uri.Host = uri.Hostname()
+ if util.IsStringInSlice(uri.String(), app.RedirectURIs, true) {
+ return true
+ }
+ }
+ }
return util.IsStringInSlice(redirectURI, app.RedirectURIs, true)
}
diff --git a/models/auth/oauth2_test.go b/models/auth/oauth2_test.go
index 3b2ba8c8f1..3815cb3b2c 100644
--- a/models/auth/oauth2_test.go
+++ b/models/auth/oauth2_test.go
@@ -43,6 +43,26 @@ func TestOAuth2Application_ContainsRedirectURI(t *testing.T) {
assert.False(t, app.ContainsRedirectURI("d"))
}
+func TestOAuth2Application_ContainsRedirectURI_WithPort(t *testing.T) {
+ app := &auth_model.OAuth2Application{
+ RedirectURIs: []string{"http://127.0.0.1/", "http://::1/", "http://192.168.0.1/", "http://intranet/", "https://127.0.0.1/"},
+ }
+
+ // http loopback uris should ignore port
+ // https://datatracker.ietf.org/doc/html/rfc8252#section-7.3
+ assert.True(t, app.ContainsRedirectURI("http://127.0.0.1:3456/"))
+ assert.True(t, app.ContainsRedirectURI("http://127.0.0.1/"))
+ assert.True(t, app.ContainsRedirectURI("http://[::1]:3456/"))
+
+ // not http
+ assert.False(t, app.ContainsRedirectURI("https://127.0.0.1:3456/"))
+ // not loopback
+ assert.False(t, app.ContainsRedirectURI("http://192.168.0.1:9954/"))
+ assert.False(t, app.ContainsRedirectURI("http://intranet:3456/"))
+ // unparseable
+ assert.False(t, app.ContainsRedirectURI(":"))
+}
+
func TestOAuth2Application_ValidateClientSecret(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
app := unittest.AssertExistsAndLoadBean(t, &auth_model.OAuth2Application{ID: 1})
diff --git a/models/fixtures/access.yml b/models/fixtures/access.yml
index 4027e5fe92..446502843e 100644
--- a/models/fixtures/access.yml
+++ b/models/fixtures/access.yml
@@ -124,3 +124,15 @@
repo_id: 24
mode: 1
+-
+ id: 22
+ user_id: 31
+ repo_id: 27
+ mode: 4
+
+-
+ id: 23
+ user_id: 31
+ repo_id: 28
+ mode: 4
+
diff --git a/models/fixtures/follow.yml b/models/fixtures/follow.yml
index 480fa065c7..b8d35828bf 100644
--- a/models/fixtures/follow.yml
+++ b/models/fixtures/follow.yml
@@ -12,3 +12,8 @@
id: 3
user_id: 2
follow_id: 8
+
+-
+ id: 4
+ user_id: 31
+ follow_id: 33
diff --git a/models/fixtures/org_user.yml b/models/fixtures/org_user.yml
index e06d94cfcd..d6bbdaa9da 100644
--- a/models/fixtures/org_user.yml
+++ b/models/fixtures/org_user.yml
@@ -69,3 +69,9 @@
uid: 2
org_id: 17
is_public: true
+
+-
+ id: 13
+ uid: 31
+ org_id: 19
+ is_public: true
diff --git a/models/fixtures/pull_request.yml b/models/fixtures/pull_request.yml
index d45baa711c..165437f032 100644
--- a/models/fixtures/pull_request.yml
+++ b/models/fixtures/pull_request.yml
@@ -60,8 +60,8 @@
head_repo_id: 1
base_repo_id: 1
head_branch: pr-to-update
- base_branch: branch1
- merge_base: 1234567890abcdef
+ base_branch: branch2
+ merge_base: 985f0301dba5e7b34be866819cd15ad3d8f508ee
has_merged: false
-
diff --git a/models/fixtures/team.yml b/models/fixtures/team.yml
index f6dfd1e9d0..880f49dc90 100644
--- a/models/fixtures/team.yml
+++ b/models/fixtures/team.yml
@@ -55,7 +55,7 @@
name: Owners
authorize: 4 # owner
num_repos: 2
- num_members: 1
+ num_members: 2
can_create_org_repo: true
-
diff --git a/models/fixtures/team_user.yml b/models/fixtures/team_user.yml
index 8f21164df4..845741effd 100644
--- a/models/fixtures/team_user.yml
+++ b/models/fixtures/team_user.yml
@@ -87,3 +87,9 @@
org_id: 17
team_id: 9
uid: 29
+
+-
+ id: 16
+ org_id: 19
+ team_id: 6
+ uid: 31
diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml
index 87405bfd26..790156189a 100644
--- a/models/fixtures/user.yml
+++ b/models/fixtures/user.yml
@@ -345,7 +345,7 @@
avatar_email: user19@example.com
num_repos: 2
is_active: true
- num_members: 1
+ num_members: 2
num_teams: 1
-
@@ -572,6 +572,8 @@
avatar: avatar31
avatar_email: user31@example.com
num_repos: 0
+ num_followers: 0
+ num_following: 1
is_active: true
-
@@ -590,3 +592,23 @@
avatar_email: user30@example.com
num_repos: 0
is_active: true
+
+-
+ id: 33
+ lower_name: user33
+ name: user33
+ login_name: user33
+ full_name: User 33 (Limited Visibility)
+ email: user33@example.com
+ passwd_hash_algo: argon2
+ passwd: a3d5fcd92bae586c2e3dbe72daea7a0d27833a8d0227aa1704f4bbd775c1f3b03535b76dd93b0d4d8d22a519dca47df1547b # password
+ type: 0 # individual
+ salt: ZogKvWdyEx
+ is_admin: false
+ visibility: 1
+ avatar: avatar33
+ avatar_email: user33@example.com
+ num_repos: 0
+ num_followers: 1
+ num_following: 0
+ is_active: true
diff --git a/models/issues/issue.go b/models/issues/issue.go
index 5bdb60f7c0..49bc229c6b 100644
--- a/models/issues/issue.go
+++ b/models/issues/issue.go
@@ -1186,6 +1186,7 @@ type IssuesOptions struct { //nolint
PosterID int64
MentionedID int64
ReviewRequestedID int64
+ SubscriberID int64
MilestoneIDs []int64
ProjectID int64
ProjectBoardID int64
@@ -1299,6 +1300,10 @@ func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) {
applyReviewRequestedCondition(sess, opts.ReviewRequestedID)
}
+ if opts.SubscriberID > 0 {
+ applySubscribedCondition(sess, opts.SubscriberID)
+ }
+
if len(opts.MilestoneIDs) > 0 {
sess.In("issue.milestone_id", opts.MilestoneIDs)
}
@@ -1463,6 +1468,36 @@ func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64)
reviewRequestedID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest, reviewRequestedID)
}
+func applySubscribedCondition(sess *xorm.Session, subscriberID int64) *xorm.Session {
+ return sess.And(
+ builder.
+ NotIn("issue.id",
+ builder.Select("issue_id").
+ From("issue_watch").
+ Where(builder.Eq{"is_watching": false, "user_id": subscriberID}),
+ ),
+ ).And(
+ builder.Or(
+ builder.In("issue.id", builder.
+ Select("issue_id").
+ From("issue_watch").
+ Where(builder.Eq{"is_watching": true, "user_id": subscriberID}),
+ ),
+ builder.In("issue.id", builder.
+ Select("issue_id").
+ From("comment").
+ Where(builder.Eq{"poster_id": subscriberID}),
+ ),
+ builder.Eq{"issue.poster_id": subscriberID},
+ builder.In("issue.repo_id", builder.
+ Select("id").
+ From("watch").
+ Where(builder.Eq{"user_id": subscriberID, "mode": true}),
+ ),
+ ),
+ )
+}
+
// CountIssuesByRepo map from repoID to number of issues matching the options
func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) {
e := db.GetEngine(db.DefaultContext)
diff --git a/models/issues/reaction.go b/models/issues/reaction.go
index 87d6ff4310..e7295c8af8 100644
--- a/models/issues/reaction.go
+++ b/models/issues/reaction.go
@@ -181,6 +181,10 @@ func createReaction(ctx context.Context, opts *ReactionOptions) (*Reaction, erro
Reaction: opts.Type,
UserID: opts.DoerID,
}
+ if findOpts.CommentID == 0 {
+ // explicit search of Issue Reactions where CommentID = 0
+ findOpts.CommentID = -1
+ }
existingR, _, err := FindReactions(ctx, findOpts)
if err != nil {
@@ -256,16 +260,23 @@ func DeleteReaction(ctx context.Context, opts *ReactionOptions) error {
CommentID: opts.CommentID,
}
- _, err := db.GetEngine(ctx).Where("original_author_id = 0").Delete(reaction)
+ sess := db.GetEngine(ctx).Where("original_author_id = 0")
+ if opts.CommentID == -1 {
+ reaction.CommentID = 0
+ sess.MustCols("comment_id")
+ }
+
+ _, err := sess.Delete(reaction)
return err
}
// DeleteIssueReaction deletes a reaction on issue.
func DeleteIssueReaction(doerID, issueID int64, content string) error {
return DeleteReaction(db.DefaultContext, &ReactionOptions{
- Type: content,
- DoerID: doerID,
- IssueID: issueID,
+ Type: content,
+ DoerID: doerID,
+ IssueID: issueID,
+ CommentID: -1,
})
}
diff --git a/models/organization/team.go b/models/organization/team.go
index 2d5ee17272..bd80b1a8c7 100644
--- a/models/organization/team.go
+++ b/models/organization/team.go
@@ -129,29 +129,11 @@ func SearchTeam(opts *SearchTeamOptions) ([]*Team, int64, error) {
if opts.UserID > 0 {
sess = sess.Join("INNER", "team_user", "team_user.team_id = team.id")
}
-
- count, err := sess.
- Where(cond).
- Count(new(Team))
- if err != nil {
- return nil, 0, err
- }
-
- if opts.UserID > 0 {
- sess = sess.Join("INNER", "team_user", "team_user.team_id = team.id")
- }
-
- if opts.PageSize == -1 {
- opts.PageSize = int(count)
- } else {
- sess = sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
- }
+ sess = db.SetSessionPagination(sess, opts)
teams := make([]*Team, 0, opts.PageSize)
- if err = sess.
- Where(cond).
- OrderBy("lower_name").
- Find(&teams); err != nil {
+ count, err := sess.Where(cond).OrderBy("lower_name").FindAndCount(&teams)
+ if err != nil {
return nil, 0, err
}
diff --git a/models/user/user.go b/models/user/user.go
index f1df335eb6..a3c10c2492 100644
--- a/models/user/user.go
+++ b/models/user/user.go
@@ -893,14 +893,19 @@ func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...s
if err != nil {
return err
}
- if !has {
- // 1. Update old primary email
- if _, err = e.Where("uid=? AND is_primary=?", u.ID, true).Cols("is_primary").Update(&EmailAddress{
- IsPrimary: false,
- }); err != nil {
- return err
+ if has && emailAddress.UID != u.ID {
+ return ErrEmailAlreadyUsed{
+ Email: u.Email,
}
+ }
+ // 1. Update old primary email
+ if _, err = e.Where("uid=? AND is_primary=?", u.ID, true).Cols("is_primary").Update(&EmailAddress{
+ IsPrimary: false,
+ }); err != nil {
+ return err
+ }
+ if !has {
emailAddress.Email = u.Email
emailAddress.UID = u.ID
emailAddress.IsActivated = true
@@ -1267,7 +1272,7 @@ func isUserVisibleToViewerCond(viewer *User) builder.Cond {
// IsUserVisibleToViewer check if viewer is able to see user profile
func IsUserVisibleToViewer(ctx context.Context, u, viewer *User) bool {
- if viewer != nil && viewer.IsAdmin {
+ if viewer != nil && (viewer.IsAdmin || viewer.ID == u.ID) {
return true
}
@@ -1306,7 +1311,7 @@ func IsUserVisibleToViewer(ctx context.Context, u, viewer *User) bool {
return false
}
- if count < 0 {
+ if count == 0 {
// No common organization
return false
}
diff --git a/models/user/user_test.go b/models/user/user_test.go
index 940382cdaf..678d6c186c 100644
--- a/models/user/user_test.go
+++ b/models/user/user_test.go
@@ -302,10 +302,26 @@ func TestUpdateUser(t *testing.T) {
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
assert.True(t, user.KeepActivityPrivate)
+ newEmail := "new_" + user.Email
+ user.Email = newEmail
+ assert.NoError(t, user_model.UpdateUser(db.DefaultContext, user, true))
+ user = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
+ assert.Equal(t, newEmail, user.Email)
+
user.Email = "no mail@mail.org"
assert.Error(t, user_model.UpdateUser(db.DefaultContext, user, true))
}
+func TestUpdateUserEmailAlreadyUsed(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
+ user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
+
+ user2.Email = user3.Email
+ err := user_model.UpdateUser(db.DefaultContext, user2, true)
+ assert.True(t, user_model.IsErrEmailAlreadyUsed(err))
+}
+
func TestNewUserRedirect(t *testing.T) {
// redirect to a completely new name
assert.NoError(t, unittest.PrepareTestDatabase())
@@ -400,3 +416,56 @@ func TestUnfollowUser(t *testing.T) {
unittest.CheckConsistencyFor(t, &user_model.User{})
}
+
+func TestIsUserVisibleToViewer(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+
+ user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) // admin, public
+ user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}) // normal, public
+ user20 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 20}) // public, same team as user31
+ user29 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 29}) // public, is restricted
+ user31 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 31}) // private, same team as user20
+ user33 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 33}) // limited, follows 31
+
+ test := func(u, viewer *user_model.User, expected bool) {
+ name := func(u *user_model.User) string {
+ if u == nil {
+ return ""
+ }
+ return u.Name
+ }
+ assert.Equal(t, expected, user_model.IsUserVisibleToViewer(db.DefaultContext, u, viewer), "user %v should be visible to viewer %v: %v", name(u), name(viewer), expected)
+ }
+
+ // admin viewer
+ test(user1, user1, true)
+ test(user20, user1, true)
+ test(user31, user1, true)
+ test(user33, user1, true)
+
+ // non admin viewer
+ test(user4, user4, true)
+ test(user20, user4, true)
+ test(user31, user4, false)
+ test(user33, user4, true)
+ test(user4, nil, true)
+
+ // public user
+ test(user4, user20, true)
+ test(user4, user31, true)
+ test(user4, user33, true)
+
+ // limited user
+ test(user33, user33, true)
+ test(user33, user4, true)
+ test(user33, user29, false)
+ test(user33, nil, false)
+
+ // private user
+ test(user31, user31, true)
+ test(user31, user4, false)
+ test(user31, user20, true)
+ test(user31, user29, false)
+ test(user31, user33, true)
+ test(user31, nil, false)
+}
diff --git a/modules/context/package.go b/modules/context/package.go
index ad06f4d636..d12bdc4913 100644
--- a/modules/context/package.go
+++ b/modules/context/package.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/models/perm"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/templates"
)
@@ -54,47 +55,11 @@ func packageAssignment(ctx *Context, errCb func(int, string, interface{})) {
Owner: ctx.ContextUser,
}
- if ctx.Package.Owner.IsOrganization() {
- org := organization.OrgFromUser(ctx.Package.Owner)
-
- // 1. Get user max authorize level for the org (may be none, if user is not member of the org)
- if ctx.Doer != nil {
- var err error
- ctx.Package.AccessMode, err = org.GetOrgUserMaxAuthorizeLevel(ctx.Doer.ID)
- if err != nil {
- errCb(http.StatusInternalServerError, "GetOrgUserMaxAuthorizeLevel", err)
- return
- }
- // If access mode is less than write check every team for more permissions
- if ctx.Package.AccessMode < perm.AccessModeWrite {
- teams, err := organization.GetUserOrgTeams(ctx, org.ID, ctx.Doer.ID)
- if err != nil {
- errCb(http.StatusInternalServerError, "GetUserOrgTeams", err)
- return
- }
- for _, t := range teams {
- perm := t.UnitAccessModeCtx(ctx, unit.TypePackages)
- if ctx.Package.AccessMode < perm {
- ctx.Package.AccessMode = perm
- }
- }
- }
- }
- // 2. If authorize level is none, check if org is visible to user
- if ctx.Package.AccessMode == perm.AccessModeNone && organization.HasOrgOrUserVisible(ctx, ctx.Package.Owner, ctx.Doer) {
- ctx.Package.AccessMode = perm.AccessModeRead
- }
- } else {
- if ctx.Doer != nil && !ctx.Doer.IsGhost() {
- // 1. Check if user is package owner
- if ctx.Doer.ID == ctx.Package.Owner.ID {
- ctx.Package.AccessMode = perm.AccessModeOwner
- } else if ctx.Package.Owner.Visibility == structs.VisibleTypePublic || ctx.Package.Owner.Visibility == structs.VisibleTypeLimited { // 2. Check if package owner is public or limited
- ctx.Package.AccessMode = perm.AccessModeRead
- }
- } else if ctx.Package.Owner.Visibility == structs.VisibleTypePublic { // 3. Check if package owner is public
- ctx.Package.AccessMode = perm.AccessModeRead
- }
+ var err error
+ ctx.Package.AccessMode, err = determineAccessMode(ctx)
+ if err != nil {
+ errCb(http.StatusInternalServerError, "determineAccessMode", err)
+ return
}
packageType := ctx.Params("type")
@@ -119,6 +84,57 @@ func packageAssignment(ctx *Context, errCb func(int, string, interface{})) {
}
}
+func determineAccessMode(ctx *Context) (perm.AccessMode, error) {
+ accessMode := perm.AccessModeNone
+
+ if setting.Service.RequireSignInView && ctx.Doer == nil {
+ return accessMode, nil
+ }
+
+ if ctx.Package.Owner.IsOrganization() {
+ org := organization.OrgFromUser(ctx.Package.Owner)
+
+ // 1. Get user max authorize level for the org (may be none, if user is not member of the org)
+ if ctx.Doer != nil {
+ var err error
+ accessMode, err = org.GetOrgUserMaxAuthorizeLevel(ctx.Doer.ID)
+ if err != nil {
+ return accessMode, err
+ }
+ // If access mode is less than write check every team for more permissions
+ if accessMode < perm.AccessModeWrite {
+ teams, err := organization.GetUserOrgTeams(ctx, org.ID, ctx.Doer.ID)
+ if err != nil {
+ return accessMode, err
+ }
+ for _, t := range teams {
+ perm := t.UnitAccessModeCtx(ctx, unit.TypePackages)
+ if accessMode < perm {
+ accessMode = perm
+ }
+ }
+ }
+ }
+ // 2. If authorize level is none, check if org is visible to user
+ if accessMode == perm.AccessModeNone && organization.HasOrgOrUserVisible(ctx, ctx.Package.Owner, ctx.Doer) {
+ accessMode = perm.AccessModeRead
+ }
+ } else {
+ if ctx.Doer != nil && !ctx.Doer.IsGhost() {
+ // 1. Check if user is package owner
+ if ctx.Doer.ID == ctx.Package.Owner.ID {
+ accessMode = perm.AccessModeOwner
+ } else if ctx.Package.Owner.Visibility == structs.VisibleTypePublic || ctx.Package.Owner.Visibility == structs.VisibleTypeLimited { // 2. Check if package owner is public or limited
+ accessMode = perm.AccessModeRead
+ }
+ } else if ctx.Package.Owner.Visibility == structs.VisibleTypePublic { // 3. Check if package owner is public
+ accessMode = perm.AccessModeRead
+ }
+ }
+
+ return accessMode, nil
+}
+
// PackageContexter initializes a package context for a request.
func PackageContexter(ctx gocontext.Context) func(next http.Handler) http.Handler {
_, rnd := templates.HTMLRenderer(ctx)
diff --git a/modules/convert/convert.go b/modules/convert/convert.go
index c62b4303ed..af759cb938 100644
--- a/modules/convert/convert.go
+++ b/modules/convert/convert.go
@@ -27,6 +27,7 @@ import (
"code.gitea.io/gitea/modules/log"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
+ "code.gitea.io/gitea/services/gitdiff"
webhook_service "code.gitea.io/gitea/services/webhook"
)
@@ -295,6 +296,7 @@ func ToOrganization(org *organization.Organization) *api.Organization {
return &api.Organization{
ID: org.ID,
AvatarURL: org.AsUser().AvatarLink(),
+ Name: org.Name,
UserName: org.Name,
FullName: org.FullName,
Description: org.Description,
@@ -414,3 +416,36 @@ func ToLFSLock(l *git_model.LFSLock) *api.LFSLock {
},
}
}
+
+// ToChangedFile convert a gitdiff.DiffFile to api.ChangedFile
+func ToChangedFile(f *gitdiff.DiffFile, repo *repo_model.Repository, commit string) *api.ChangedFile {
+ status := "changed"
+ if f.IsDeleted {
+ status = "deleted"
+ } else if f.IsCreated {
+ status = "added"
+ } else if f.IsRenamed && f.Type == gitdiff.DiffFileCopy {
+ status = "copied"
+ } else if f.IsRenamed && f.Type == gitdiff.DiffFileRename {
+ status = "renamed"
+ } else if f.Addition == 0 && f.Deletion == 0 {
+ status = "unchanged"
+ }
+
+ file := &api.ChangedFile{
+ Filename: f.GetDiffFileName(),
+ Status: status,
+ Additions: f.Addition,
+ Deletions: f.Deletion,
+ Changes: f.Addition + f.Deletion,
+ HTMLURL: fmt.Sprint(repo.HTMLURL(), "/src/commit/", commit, "/", util.PathEscapeSegments(f.GetDiffFileName())),
+ ContentsURL: fmt.Sprint(repo.APIURL(), "/contents/", util.PathEscapeSegments(f.GetDiffFileName()), "?ref=", commit),
+ RawURL: fmt.Sprint(repo.HTMLURL(), "/raw/commit/", commit, "/", util.PathEscapeSegments(f.GetDiffFileName())),
+ }
+
+ if status == "rename" {
+ file.PreviousFilename = f.OldName
+ }
+
+ return file
+}
diff --git a/modules/git/parse_nogogit.go b/modules/git/parse_nogogit.go
index 6dc4900992..c8f0f994fc 100644
--- a/modules/git/parse_nogogit.go
+++ b/modules/git/parse_nogogit.go
@@ -44,7 +44,7 @@ func parseTreeEntries(data []byte, ptree *Tree) ([]*TreeEntry, error) {
case "160000":
entry.entryMode = EntryModeCommit
pos += 14 // skip over "160000 object "
- case "040000":
+ case "040000", "040755": // git uses 040000 for tree object, but some users may get 040755 for unknown reasons
entry.entryMode = EntryModeTree
pos += 12 // skip over "040000 tree "
default:
@@ -119,7 +119,7 @@ loop:
entry.entryMode = EntryModeSymlink
case "160000":
entry.entryMode = EntryModeCommit
- case "40000":
+ case "40000", "40755": // git uses 40000 for tree object, but some users may get 40755 for unknown reasons
entry.entryMode = EntryModeTree
default:
log.Debug("Unknown mode: %v", string(mode))
diff --git a/modules/git/repo_branch_nogogit.go b/modules/git/repo_branch_nogogit.go
index 2983a35ca5..91112d0190 100644
--- a/modules/git/repo_branch_nogogit.go
+++ b/modules/git/repo_branch_nogogit.go
@@ -63,34 +63,32 @@ func (repo *Repository) IsBranchExist(name string) bool {
// GetBranchNames returns branches from the repository, skipping skip initial branches and
// returning at most limit branches, or all branches if limit is 0.
func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error) {
- return callShowRef(repo.Ctx, repo.Path, BranchPrefix, "--heads", skip, limit)
+ return callShowRef(repo.Ctx, repo.Path, BranchPrefix, []string{BranchPrefix, "--sort=-committerdate"}, skip, limit)
}
// WalkReferences walks all the references from the repository
func WalkReferences(ctx context.Context, repoPath string, walkfn func(sha1, refname string) error) (int, error) {
- return walkShowRef(ctx, repoPath, "", 0, 0, walkfn)
+ return walkShowRef(ctx, repoPath, nil, 0, 0, walkfn)
}
// WalkReferences walks all the references from the repository
// refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.
func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error) {
- var arg string
+ var args []string
switch refType {
case ObjectTag:
- arg = "--tags"
+ args = []string{TagPrefix, "--sort=-taggerdate"}
case ObjectBranch:
- arg = "--heads"
- default:
- arg = ""
+ args = []string{BranchPrefix, "--sort=-committerdate"}
}
- return walkShowRef(repo.Ctx, repo.Path, arg, skip, limit, walkfn)
+ return walkShowRef(repo.Ctx, repo.Path, args, skip, limit, walkfn)
}
// callShowRef return refs, if limit = 0 it will not limit
-func callShowRef(ctx context.Context, repoPath, prefix, arg string, skip, limit int) (branchNames []string, countAll int, err error) {
- countAll, err = walkShowRef(ctx, repoPath, arg, skip, limit, func(_, branchName string) error {
- branchName = strings.TrimPrefix(branchName, prefix)
+func callShowRef(ctx context.Context, repoPath, trimPrefix string, extraArgs []string, skip, limit int) (branchNames []string, countAll int, err error) {
+ countAll, err = walkShowRef(ctx, repoPath, extraArgs, skip, limit, func(_, branchName string) error {
+ branchName = strings.TrimPrefix(branchName, trimPrefix)
branchNames = append(branchNames, branchName)
return nil
@@ -98,7 +96,7 @@ func callShowRef(ctx context.Context, repoPath, prefix, arg string, skip, limit
return branchNames, countAll, err
}
-func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error) {
+func walkShowRef(ctx context.Context, repoPath string, extraArgs []string, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error) {
stdoutReader, stdoutWriter := io.Pipe()
defer func() {
_ = stdoutReader.Close()
@@ -107,10 +105,8 @@ func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, wal
go func() {
stderrBuilder := &strings.Builder{}
- args := []string{"show-ref"}
- if arg != "" {
- args = append(args, arg)
- }
+ args := []string{"for-each-ref", "--format=%(objectname) %(refname)"}
+ args = append(args, extraArgs...)
err := NewCommand(ctx, args...).Run(&RunOpts{
Dir: repoPath,
Stdout: stdoutWriter,
@@ -194,7 +190,7 @@ func walkShowRef(ctx context.Context, repoPath, arg string, skip, limit int, wal
// GetRefsBySha returns all references filtered with prefix that belong to a sha commit hash
func (repo *Repository) GetRefsBySha(sha, prefix string) ([]string, error) {
var revList []string
- _, err := walkShowRef(repo.Ctx, repo.Path, "", 0, 0, func(walkSha, refname string) error {
+ _, err := walkShowRef(repo.Ctx, repo.Path, nil, 0, 0, func(walkSha, refname string) error {
if walkSha == sha && strings.HasPrefix(refname, prefix) {
revList = append(revList, refname)
}
diff --git a/modules/git/repo_branch_test.go b/modules/git/repo_branch_test.go
index 56f7387097..58a738e28b 100644
--- a/modules/git/repo_branch_test.go
+++ b/modules/git/repo_branch_test.go
@@ -22,14 +22,14 @@ func TestRepository_GetBranches(t *testing.T) {
assert.NoError(t, err)
assert.Len(t, branches, 2)
assert.EqualValues(t, 3, countAll)
- assert.ElementsMatch(t, []string{"branch1", "branch2"}, branches)
+ assert.ElementsMatch(t, []string{"master", "branch2"}, branches)
branches, countAll, err = bareRepo1.GetBranchNames(0, 0)
assert.NoError(t, err)
assert.Len(t, branches, 3)
assert.EqualValues(t, 3, countAll)
- assert.ElementsMatch(t, []string{"branch1", "branch2", "master"}, branches)
+ assert.ElementsMatch(t, []string{"master", "branch2", "branch1"}, branches)
branches, countAll, err = bareRepo1.GetBranchNames(5, 1)
diff --git a/modules/git/repo_tag_nogogit.go b/modules/git/repo_tag_nogogit.go
index 9a574666f8..72c1c979dc 100644
--- a/modules/git/repo_tag_nogogit.go
+++ b/modules/git/repo_tag_nogogit.go
@@ -26,7 +26,7 @@ func (repo *Repository) IsTagExist(name string) bool {
// GetTags returns all tags of the repository.
// returning at most limit tags, or all if limit is 0.
func (repo *Repository) GetTags(skip, limit int) (tags []string, err error) {
- tags, _, err = callShowRef(repo.Ctx, repo.Path, TagPrefix, "--tags", skip, limit)
+ tags, _, err = callShowRef(repo.Ctx, repo.Path, TagPrefix, []string{TagPrefix, "--sort=-taggerdate"}, skip, limit)
return tags, err
}
diff --git a/modules/highlight/highlight.go b/modules/highlight/highlight.go
index af3376e8d7..65ed74b019 100644
--- a/modules/highlight/highlight.go
+++ b/modules/highlight/highlight.go
@@ -19,10 +19,10 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
- "github.com/alecthomas/chroma"
- "github.com/alecthomas/chroma/formatters/html"
- "github.com/alecthomas/chroma/lexers"
- "github.com/alecthomas/chroma/styles"
+ "github.com/alecthomas/chroma/v2"
+ "github.com/alecthomas/chroma/v2/formatters/html"
+ "github.com/alecthomas/chroma/v2/lexers"
+ "github.com/alecthomas/chroma/v2/styles"
lru "github.com/hashicorp/golang-lru"
)
@@ -147,9 +147,6 @@ func File(fileName, language string, code []byte) ([]string, error) {
html.PreventSurroundingPre(true),
)
- htmlBuf := bytes.Buffer{}
- htmlWriter := bufio.NewWriter(&htmlBuf)
-
var lexer chroma.Lexer
// provided language overrides everything
@@ -180,23 +177,21 @@ func File(fileName, language string, code []byte) ([]string, error) {
return nil, fmt.Errorf("can't tokenize code: %w", err)
}
- err = formatter.Format(htmlWriter, styles.GitHub, iterator)
- if err != nil {
- return nil, fmt.Errorf("can't format code: %w", err)
+ tokensLines := chroma.SplitTokensIntoLines(iterator.Tokens())
+ htmlBuf := &bytes.Buffer{}
+
+ lines := make([]string, 0, len(tokensLines))
+ for _, tokens := range tokensLines {
+ iterator = chroma.Literator(tokens...)
+ err = formatter.Format(htmlBuf, styles.GitHub, iterator)
+ if err != nil {
+ return nil, fmt.Errorf("can't format code: %w", err)
+ }
+ lines = append(lines, htmlBuf.String())
+ htmlBuf.Reset()
}
- _ = htmlWriter.Flush()
-
- // at the moment, Chroma generates stable output `...\n ` for each line
- htmlStr := htmlBuf.String()
- lines := strings.Split(htmlStr, ``)
- m := make([]string, 0, len(lines))
- for i := 1; i < len(lines); i++ {
- line := lines[i]
- line = strings.TrimSuffix(line, " ")
- m = append(m, line)
- }
- return m, nil
+ return lines, nil
}
// PlainText returns non-highlighted HTML for code
diff --git a/modules/markup/markdown/convertyaml.go b/modules/markup/markdown/convertyaml.go
new file mode 100644
index 0000000000..3f5ebec908
--- /dev/null
+++ b/modules/markup/markdown/convertyaml.go
@@ -0,0 +1,84 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package markdown
+
+import (
+ "github.com/yuin/goldmark/ast"
+ east "github.com/yuin/goldmark/extension/ast"
+ "gopkg.in/yaml.v3"
+)
+
+func nodeToTable(meta *yaml.Node) ast.Node {
+ for {
+ if meta == nil {
+ return nil
+ }
+ switch meta.Kind {
+ case yaml.DocumentNode:
+ meta = meta.Content[0]
+ continue
+ default:
+ }
+ break
+ }
+ switch meta.Kind {
+ case yaml.MappingNode:
+ return mappingNodeToTable(meta)
+ case yaml.SequenceNode:
+ return sequenceNodeToTable(meta)
+ default:
+ return ast.NewString([]byte(meta.Value))
+ }
+}
+
+func mappingNodeToTable(meta *yaml.Node) ast.Node {
+ table := east.NewTable()
+ alignments := []east.Alignment{}
+ for i := 0; i < len(meta.Content); i += 2 {
+ alignments = append(alignments, east.AlignNone)
+ }
+
+ headerRow := east.NewTableRow(alignments)
+ valueRow := east.NewTableRow(alignments)
+ for i := 0; i < len(meta.Content); i += 2 {
+ cell := east.NewTableCell()
+
+ cell.AppendChild(cell, nodeToTable(meta.Content[i]))
+ headerRow.AppendChild(headerRow, cell)
+
+ if i+1 < len(meta.Content) {
+ cell = east.NewTableCell()
+ cell.AppendChild(cell, nodeToTable(meta.Content[i+1]))
+ valueRow.AppendChild(valueRow, cell)
+ }
+ }
+
+ table.AppendChild(table, east.NewTableHeader(headerRow))
+ table.AppendChild(table, valueRow)
+ return table
+}
+
+func sequenceNodeToTable(meta *yaml.Node) ast.Node {
+ table := east.NewTable()
+ alignments := []east.Alignment{east.AlignNone}
+ for _, item := range meta.Content {
+ row := east.NewTableRow(alignments)
+ cell := east.NewTableCell()
+ cell.AppendChild(cell, nodeToTable(item))
+ row.AppendChild(row, cell)
+ table.AppendChild(table, row)
+ }
+ return table
+}
+
+func nodeToDetails(meta *yaml.Node, icon string) ast.Node {
+ details := NewDetails()
+ summary := NewSummary()
+ summary.AppendChild(summary, NewIcon(icon))
+ details.AppendChild(details, summary)
+ details.AppendChild(details, nodeToTable(meta))
+
+ return details
+}
diff --git a/modules/markup/markdown/goldmark.go b/modules/markup/markdown/goldmark.go
index 1750128dec..24f1ab7a01 100644
--- a/modules/markup/markdown/goldmark.go
+++ b/modules/markup/markdown/goldmark.go
@@ -15,7 +15,6 @@ import (
"code.gitea.io/gitea/modules/setting"
giteautil "code.gitea.io/gitea/modules/util"
- meta "github.com/yuin/goldmark-meta"
"github.com/yuin/goldmark/ast"
east "github.com/yuin/goldmark/extension/ast"
"github.com/yuin/goldmark/parser"
@@ -32,20 +31,12 @@ type ASTTransformer struct{}
// Transform transforms the given AST tree.
func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc parser.Context) {
- metaData := meta.GetItems(pc)
firstChild := node.FirstChild()
createTOC := false
ctx := pc.Get(renderContextKey).(*markup.RenderContext)
- rc := &RenderConfig{
- Meta: "table",
- Icon: "table",
- Lang: "",
- }
-
- if metaData != nil {
- rc.ToRenderConfig(metaData)
-
- metaNode := rc.toMetaNode(metaData)
+ rc := pc.Get(renderConfigKey).(*RenderConfig)
+ if rc.yamlNode != nil {
+ metaNode := rc.toMetaNode()
if metaNode != nil {
node.InsertBefore(node, firstChild, metaNode)
}
diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go
index 4ce85dfc31..fa289986cc 100644
--- a/modules/markup/markdown/markdown.go
+++ b/modules/markup/markdown/markdown.go
@@ -14,12 +14,13 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/common"
+ "code.gitea.io/gitea/modules/markup/markdown/math"
"code.gitea.io/gitea/modules/setting"
giteautil "code.gitea.io/gitea/modules/util"
- chromahtml "github.com/alecthomas/chroma/formatters/html"
+ chromahtml "github.com/alecthomas/chroma/v2/formatters/html"
"github.com/yuin/goldmark"
- highlighting "github.com/yuin/goldmark-highlighting"
+ highlighting "github.com/yuin/goldmark-highlighting/v2"
meta "github.com/yuin/goldmark-meta"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
@@ -38,6 +39,7 @@ var (
isWikiKey = parser.NewContextKey()
renderMetasKey = parser.NewContextKey()
renderContextKey = parser.NewContextKey()
+ renderConfigKey = parser.NewContextKey()
)
type limitWriter struct {
@@ -98,7 +100,7 @@ func actualRender(ctx *markup.RenderContext, input io.Reader, output io.Writer)
languageStr := string(language)
preClasses := []string{"code-block"}
- if languageStr == "mermaid" {
+ if languageStr == "mermaid" || languageStr == "math" {
preClasses = append(preClasses, "is-loading")
}
@@ -120,6 +122,9 @@ func actualRender(ctx *markup.RenderContext, input io.Reader, output io.Writer)
}
}),
),
+ math.NewExtension(
+ math.Enabled(setting.Markdown.EnableMath),
+ ),
meta.Meta,
),
goldmark.WithParserOptions(
@@ -167,7 +172,18 @@ func actualRender(ctx *markup.RenderContext, input io.Reader, output io.Writer)
log.Error("Unable to ReadAll: %v", err)
return err
}
- if err := converter.Convert(giteautil.NormalizeEOL(buf), lw, parser.WithContext(pc)); err != nil {
+ buf = giteautil.NormalizeEOL(buf)
+
+ rc := &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }
+ buf, _ = ExtractMetadataBytes(buf, rc)
+
+ pc.Set(renderConfigKey, rc)
+
+ if err := converter.Convert(buf, lw, parser.WithContext(pc)); err != nil {
log.Error("Unable to render: %v", err)
return err
}
diff --git a/modules/markup/markdown/math/block_node.go b/modules/markup/markdown/math/block_node.go
new file mode 100644
index 0000000000..bd8449babf
--- /dev/null
+++ b/modules/markup/markdown/math/block_node.go
@@ -0,0 +1,42 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import "github.com/yuin/goldmark/ast"
+
+// Block represents a display math block e.g. $$...$$ or \[...\]
+type Block struct {
+ ast.BaseBlock
+ Dollars bool
+ Indent int
+ Closed bool
+}
+
+// KindBlock is the node kind for math blocks
+var KindBlock = ast.NewNodeKind("MathBlock")
+
+// NewBlock creates a new math Block
+func NewBlock(dollars bool, indent int) *Block {
+ return &Block{
+ Dollars: dollars,
+ Indent: indent,
+ }
+}
+
+// Dump dumps the block to a string
+func (n *Block) Dump(source []byte, level int) {
+ m := map[string]string{}
+ ast.DumpHelper(n, source, level, m, nil)
+}
+
+// Kind returns KindBlock for math Blocks
+func (n *Block) Kind() ast.NodeKind {
+ return KindBlock
+}
+
+// IsRaw returns true as this block should not be processed further
+func (n *Block) IsRaw() bool {
+ return true
+}
diff --git a/modules/markup/markdown/math/block_parser.go b/modules/markup/markdown/math/block_parser.go
new file mode 100644
index 0000000000..f865122886
--- /dev/null
+++ b/modules/markup/markdown/math/block_parser.go
@@ -0,0 +1,123 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ "bytes"
+
+ "github.com/yuin/goldmark/ast"
+ "github.com/yuin/goldmark/parser"
+ "github.com/yuin/goldmark/text"
+ "github.com/yuin/goldmark/util"
+)
+
+type blockParser struct {
+ parseDollars bool
+}
+
+// NewBlockParser creates a new math BlockParser
+func NewBlockParser(parseDollarBlocks bool) parser.BlockParser {
+ return &blockParser{
+ parseDollars: parseDollarBlocks,
+ }
+}
+
+// Open parses the current line and returns a result of parsing.
+func (b *blockParser) Open(parent ast.Node, reader text.Reader, pc parser.Context) (ast.Node, parser.State) {
+ line, segment := reader.PeekLine()
+ pos := pc.BlockOffset()
+ if pos == -1 || len(line[pos:]) < 2 {
+ return nil, parser.NoChildren
+ }
+
+ dollars := false
+ if b.parseDollars && line[pos] == '$' && line[pos+1] == '$' {
+ dollars = true
+ } else if line[pos] != '\\' || line[pos+1] != '[' {
+ return nil, parser.NoChildren
+ }
+
+ node := NewBlock(dollars, pos)
+
+ // Now we need to check if the ending block is on the segment...
+ endBytes := []byte{'\\', ']'}
+ if dollars {
+ endBytes = []byte{'$', '$'}
+ }
+ idx := bytes.Index(line[pos+2:], endBytes)
+ if idx >= 0 {
+ segment.Stop = segment.Start + idx + 2
+ reader.Advance(segment.Len() - 1)
+ segment.Start += 2
+ node.Lines().Append(segment)
+ node.Closed = true
+ return node, parser.Close | parser.NoChildren
+ }
+
+ reader.Advance(segment.Len() - 1)
+ segment.Start += 2
+ node.Lines().Append(segment)
+ return node, parser.NoChildren
+}
+
+// Continue parses the current line and returns a result of parsing.
+func (b *blockParser) Continue(node ast.Node, reader text.Reader, pc parser.Context) parser.State {
+ block := node.(*Block)
+ if block.Closed {
+ return parser.Close
+ }
+
+ line, segment := reader.PeekLine()
+ w, pos := util.IndentWidth(line, 0)
+ if w < 4 {
+ if block.Dollars {
+ i := pos
+ for ; i < len(line) && line[i] == '$'; i++ {
+ }
+ length := i - pos
+ if length >= 2 && util.IsBlank(line[i:]) {
+ reader.Advance(segment.Stop - segment.Start - segment.Padding)
+ block.Closed = true
+ return parser.Close
+ }
+ } else if len(line[pos:]) > 1 && line[pos] == '\\' && line[pos+1] == ']' && util.IsBlank(line[pos+2:]) {
+ reader.Advance(segment.Stop - segment.Start - segment.Padding)
+ block.Closed = true
+ return parser.Close
+ }
+ }
+
+ pos, padding := util.IndentPosition(line, 0, block.Indent)
+ seg := text.NewSegmentPadding(segment.Start+pos, segment.Stop, padding)
+ node.Lines().Append(seg)
+ reader.AdvanceAndSetPadding(segment.Stop-segment.Start-pos-1, padding)
+ return parser.Continue | parser.NoChildren
+}
+
+// Close will be called when the parser returns Close.
+func (b *blockParser) Close(node ast.Node, reader text.Reader, pc parser.Context) {
+ // noop
+}
+
+// CanInterruptParagraph returns true if the parser can interrupt paragraphs,
+// otherwise false.
+func (b *blockParser) CanInterruptParagraph() bool {
+ return true
+}
+
+// CanAcceptIndentedLine returns true if the parser can open new node when
+// the given line is being indented more than 3 spaces.
+func (b *blockParser) CanAcceptIndentedLine() bool {
+ return false
+}
+
+// Trigger returns a list of characters that triggers Parse method of
+// this parser.
+// If Trigger returns a nil, Open will be called with any lines.
+//
+// We leave this as nil as our parse method is quick enough
+func (b *blockParser) Trigger() []byte {
+ return nil
+}
diff --git a/modules/markup/markdown/math/block_renderer.go b/modules/markup/markdown/math/block_renderer.go
new file mode 100644
index 0000000000..d502065259
--- /dev/null
+++ b/modules/markup/markdown/math/block_renderer.go
@@ -0,0 +1,43 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ gast "github.com/yuin/goldmark/ast"
+ "github.com/yuin/goldmark/renderer"
+ "github.com/yuin/goldmark/util"
+)
+
+// BlockRenderer represents a renderer for math Blocks
+type BlockRenderer struct{}
+
+// NewBlockRenderer creates a new renderer for math Blocks
+func NewBlockRenderer() renderer.NodeRenderer {
+ return &BlockRenderer{}
+}
+
+// RegisterFuncs registers the renderer for math Blocks
+func (r *BlockRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
+ reg.Register(KindBlock, r.renderBlock)
+}
+
+func (r *BlockRenderer) writeLines(w util.BufWriter, source []byte, n gast.Node) {
+ l := n.Lines().Len()
+ for i := 0; i < l; i++ {
+ line := n.Lines().At(i)
+ _, _ = w.Write(util.EscapeHTML(line.Value(source)))
+ }
+}
+
+func (r *BlockRenderer) renderBlock(w util.BufWriter, source []byte, node gast.Node, entering bool) (gast.WalkStatus, error) {
+ n := node.(*Block)
+ if entering {
+ _, _ = w.WriteString(``)
+ r.writeLines(w, source, n)
+ } else {
+ _, _ = w.WriteString(`
` + "\n")
+ }
+ return gast.WalkContinue, nil
+}
diff --git a/modules/markup/markdown/math/inline_node.go b/modules/markup/markdown/math/inline_node.go
new file mode 100644
index 0000000000..245ff8dab0
--- /dev/null
+++ b/modules/markup/markdown/math/inline_node.go
@@ -0,0 +1,49 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ "github.com/yuin/goldmark/ast"
+ "github.com/yuin/goldmark/util"
+)
+
+// Inline represents inline math e.g. $...$ or \(...\)
+type Inline struct {
+ ast.BaseInline
+}
+
+// Inline implements Inline.Inline.
+func (n *Inline) Inline() {}
+
+// IsBlank returns if this inline node is empty
+func (n *Inline) IsBlank(source []byte) bool {
+ for c := n.FirstChild(); c != nil; c = c.NextSibling() {
+ text := c.(*ast.Text).Segment
+ if !util.IsBlank(text.Value(source)) {
+ return false
+ }
+ }
+ return true
+}
+
+// Dump renders this inline math as debug
+func (n *Inline) Dump(source []byte, level int) {
+ ast.DumpHelper(n, source, level, nil, nil)
+}
+
+// KindInline is the kind for math inline
+var KindInline = ast.NewNodeKind("MathInline")
+
+// Kind returns KindInline
+func (n *Inline) Kind() ast.NodeKind {
+ return KindInline
+}
+
+// NewInline creates a new ast math inline node
+func NewInline() *Inline {
+ return &Inline{
+ BaseInline: ast.BaseInline{},
+ }
+}
diff --git a/modules/markup/markdown/math/inline_parser.go b/modules/markup/markdown/math/inline_parser.go
new file mode 100644
index 0000000000..0339674b6c
--- /dev/null
+++ b/modules/markup/markdown/math/inline_parser.go
@@ -0,0 +1,99 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ "bytes"
+
+ "github.com/yuin/goldmark/ast"
+ "github.com/yuin/goldmark/parser"
+ "github.com/yuin/goldmark/text"
+)
+
+type inlineParser struct {
+ start []byte
+ end []byte
+}
+
+var defaultInlineDollarParser = &inlineParser{
+ start: []byte{'$'},
+ end: []byte{'$'},
+}
+
+// NewInlineDollarParser returns a new inline parser
+func NewInlineDollarParser() parser.InlineParser {
+ return defaultInlineDollarParser
+}
+
+var defaultInlineBracketParser = &inlineParser{
+ start: []byte{'\\', '('},
+ end: []byte{'\\', ')'},
+}
+
+// NewInlineDollarParser returns a new inline parser
+func NewInlineBracketParser() parser.InlineParser {
+ return defaultInlineBracketParser
+}
+
+// Trigger triggers this parser on $
+func (parser *inlineParser) Trigger() []byte {
+ return parser.start[0:1]
+}
+
+func isAlphanumeric(b byte) bool {
+ // Github only cares about 0-9A-Za-z
+ return (b >= '0' && b <= '9') || (b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z')
+}
+
+// Parse parses the current line and returns a result of parsing.
+func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node {
+ line, _ := block.PeekLine()
+ opener := bytes.Index(line, parser.start)
+ if opener < 0 {
+ return nil
+ }
+ if opener != 0 && isAlphanumeric(line[opener-1]) {
+ return nil
+ }
+
+ opener += len(parser.start)
+ ender := bytes.Index(line[opener:], parser.end)
+ if ender < 0 {
+ return nil
+ }
+ if len(line) > opener+ender+len(parser.end) && isAlphanumeric(line[opener+ender+len(parser.end)]) {
+ return nil
+ }
+
+ block.Advance(opener)
+ _, pos := block.Position()
+ node := NewInline()
+ segment := pos.WithStop(pos.Start + ender)
+ node.AppendChild(node, ast.NewRawTextSegment(segment))
+ block.Advance(ender + len(parser.end))
+
+ trimBlock(node, block)
+ return node
+}
+
+func trimBlock(node *Inline, block text.Reader) {
+ if node.IsBlank(block.Source()) {
+ return
+ }
+
+ // trim first space and last space
+ first := node.FirstChild().(*ast.Text)
+ if !(!first.Segment.IsEmpty() && block.Source()[first.Segment.Start] == ' ') {
+ return
+ }
+
+ last := node.LastChild().(*ast.Text)
+ if !(!last.Segment.IsEmpty() && block.Source()[last.Segment.Stop-1] == ' ') {
+ return
+ }
+
+ first.Segment = first.Segment.WithStart(first.Segment.Start + 1)
+ last.Segment = last.Segment.WithStop(last.Segment.Stop - 1)
+}
diff --git a/modules/markup/markdown/math/inline_renderer.go b/modules/markup/markdown/math/inline_renderer.go
new file mode 100644
index 0000000000..e4c0f3761d
--- /dev/null
+++ b/modules/markup/markdown/math/inline_renderer.go
@@ -0,0 +1,47 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ "bytes"
+
+ "github.com/yuin/goldmark/ast"
+ "github.com/yuin/goldmark/renderer"
+ "github.com/yuin/goldmark/util"
+)
+
+// InlineRenderer is an inline renderer
+type InlineRenderer struct{}
+
+// NewInlineRenderer returns a new renderer for inline math
+func NewInlineRenderer() renderer.NodeRenderer {
+ return &InlineRenderer{}
+}
+
+func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) {
+ if entering {
+ _, _ = w.WriteString(``)
+ for c := n.FirstChild(); c != nil; c = c.NextSibling() {
+ segment := c.(*ast.Text).Segment
+ value := util.EscapeHTML(segment.Value(source))
+ if bytes.HasSuffix(value, []byte("\n")) {
+ _, _ = w.Write(value[:len(value)-1])
+ if c != n.LastChild() {
+ _, _ = w.Write([]byte(" "))
+ }
+ } else {
+ _, _ = w.Write(value)
+ }
+ }
+ return ast.WalkSkipChildren, nil
+ }
+ _, _ = w.WriteString(`
`)
+ return ast.WalkContinue, nil
+}
+
+// RegisterFuncs registers the renderer for inline math nodes
+func (r *InlineRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
+ reg.Register(KindInline, r.renderInline)
+}
diff --git a/modules/markup/markdown/math/math.go b/modules/markup/markdown/math/math.go
new file mode 100644
index 0000000000..7854ac84db
--- /dev/null
+++ b/modules/markup/markdown/math/math.go
@@ -0,0 +1,108 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package math
+
+import (
+ "github.com/yuin/goldmark"
+ "github.com/yuin/goldmark/parser"
+ "github.com/yuin/goldmark/renderer"
+ "github.com/yuin/goldmark/util"
+)
+
+// Extension is a math extension
+type Extension struct {
+ enabled bool
+ parseDollarInline bool
+ parseDollarBlock bool
+}
+
+// Option is the interface Options should implement
+type Option interface {
+ SetOption(e *Extension)
+}
+
+type extensionFunc func(e *Extension)
+
+func (fn extensionFunc) SetOption(e *Extension) {
+ fn(e)
+}
+
+// Enabled enables or disables this extension
+func Enabled(enable ...bool) Option {
+ value := true
+ if len(enable) > 0 {
+ value = enable[0]
+ }
+ return extensionFunc(func(e *Extension) {
+ e.enabled = value
+ })
+}
+
+// WithInlineDollarParser enables or disables the parsing of $...$
+func WithInlineDollarParser(enable ...bool) Option {
+ value := true
+ if len(enable) > 0 {
+ value = enable[0]
+ }
+ return extensionFunc(func(e *Extension) {
+ e.parseDollarInline = value
+ })
+}
+
+// WithBlockDollarParser enables or disables the parsing of $$...$$
+func WithBlockDollarParser(enable ...bool) Option {
+ value := true
+ if len(enable) > 0 {
+ value = enable[0]
+ }
+ return extensionFunc(func(e *Extension) {
+ e.parseDollarBlock = value
+ })
+}
+
+// Math represents a math extension with default rendered delimiters
+var Math = &Extension{
+ enabled: true,
+ parseDollarBlock: true,
+ parseDollarInline: true,
+}
+
+// NewExtension creates a new math extension with the provided options
+func NewExtension(opts ...Option) *Extension {
+ r := &Extension{
+ enabled: true,
+ parseDollarBlock: true,
+ parseDollarInline: true,
+ }
+
+ for _, o := range opts {
+ o.SetOption(r)
+ }
+ return r
+}
+
+// Extend extends goldmark with our parsers and renderers
+func (e *Extension) Extend(m goldmark.Markdown) {
+ if !e.enabled {
+ return
+ }
+
+ m.Parser().AddOptions(parser.WithBlockParsers(
+ util.Prioritized(NewBlockParser(e.parseDollarBlock), 701),
+ ))
+
+ inlines := []util.PrioritizedValue{
+ util.Prioritized(NewInlineBracketParser(), 501),
+ }
+ if e.parseDollarInline {
+ inlines = append(inlines, util.Prioritized(NewInlineDollarParser(), 501))
+ }
+ m.Parser().AddOptions(parser.WithInlineParsers(inlines...))
+
+ m.Renderer().AddOptions(renderer.WithNodeRenderers(
+ util.Prioritized(NewBlockRenderer(), 501),
+ util.Prioritized(NewInlineRenderer(), 502),
+ ))
+}
diff --git a/modules/markup/markdown/meta.go b/modules/markup/markdown/meta.go
index faf92ae2c6..b08121e868 100644
--- a/modules/markup/markdown/meta.go
+++ b/modules/markup/markdown/meta.go
@@ -5,47 +5,102 @@
package markdown
import (
+ "bytes"
"errors"
- "strings"
+ "unicode"
+ "unicode/utf8"
- "gopkg.in/yaml.v2"
+ "code.gitea.io/gitea/modules/log"
+
+ "gopkg.in/yaml.v3"
)
-func isYAMLSeparator(line string) bool {
- line = strings.TrimSpace(line)
- for i := 0; i < len(line); i++ {
- if line[i] != '-' {
+func isYAMLSeparator(line []byte) bool {
+ idx := 0
+ for ; idx < len(line); idx++ {
+ if line[idx] >= utf8.RuneSelf {
+ r, sz := utf8.DecodeRune(line[idx:])
+ if !unicode.IsSpace(r) {
+ return false
+ }
+ idx += sz
+ continue
+ }
+ if line[idx] != ' ' {
+ break
+ }
+ }
+ dashCount := 0
+ for ; idx < len(line); idx++ {
+ if line[idx] != '-' {
+ break
+ }
+ dashCount++
+ }
+ if dashCount < 3 {
+ return false
+ }
+ for ; idx < len(line); idx++ {
+ if line[idx] >= utf8.RuneSelf {
+ r, sz := utf8.DecodeRune(line[idx:])
+ if !unicode.IsSpace(r) {
+ return false
+ }
+ idx += sz
+ continue
+ }
+ if line[idx] != ' ' {
return false
}
}
- return len(line) > 2
+ return true
}
// ExtractMetadata consumes a markdown file, parses YAML frontmatter,
// and returns the frontmatter metadata separated from the markdown content
func ExtractMetadata(contents string, out interface{}) (string, error) {
- var front, body []string
- lines := strings.Split(contents, "\n")
- for idx, line := range lines {
- if idx == 0 {
- // First line has to be a separator
- if !isYAMLSeparator(line) {
- return "", errors.New("frontmatter must start with a separator line")
- }
- continue
+ body, err := ExtractMetadataBytes([]byte(contents), out)
+ return string(body), err
+}
+
+// ExtractMetadata consumes a markdown file, parses YAML frontmatter,
+// and returns the frontmatter metadata separated from the markdown content
+func ExtractMetadataBytes(contents []byte, out interface{}) ([]byte, error) {
+ var front, body []byte
+
+ start, end := 0, len(contents)
+ idx := bytes.IndexByte(contents[start:], '\n')
+ if idx >= 0 {
+ end = start + idx
+ }
+ line := contents[start:end]
+
+ if !isYAMLSeparator(line) {
+ return contents, errors.New("frontmatter must start with a separator line")
+ }
+ frontMatterStart := end + 1
+ for start = frontMatterStart; start < len(contents); start = end + 1 {
+ end = len(contents)
+ idx := bytes.IndexByte(contents[start:], '\n')
+ if idx >= 0 {
+ end = start + idx
}
+ line := contents[start:end]
if isYAMLSeparator(line) {
- front, body = lines[1:idx], lines[idx+1:]
+ front = contents[frontMatterStart:start]
+ body = contents[end+1:]
break
}
}
if len(front) == 0 {
- return "", errors.New("could not determine metadata")
+ return contents, errors.New("could not determine metadata")
}
- if err := yaml.Unmarshal([]byte(strings.Join(front, "\n")), out); err != nil {
- return "", err
+ log.Info("%s", string(front))
+
+ if err := yaml.Unmarshal(front, out); err != nil {
+ return contents, err
}
- return strings.Join(body, "\n"), nil
+ return body, nil
}
diff --git a/modules/markup/markdown/meta_test.go b/modules/markup/markdown/meta_test.go
index 939646f8fd..9332b35b42 100644
--- a/modules/markup/markdown/meta_test.go
+++ b/modules/markup/markdown/meta_test.go
@@ -56,6 +56,38 @@ func TestExtractMetadata(t *testing.T) {
})
}
+func TestExtractMetadataBytes(t *testing.T) {
+ t.Run("ValidFrontAndBody", func(t *testing.T) {
+ var meta structs.IssueTemplate
+ body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s\n%s", sepTest, frontTest, sepTest, bodyTest)), &meta)
+ assert.NoError(t, err)
+ assert.Equal(t, bodyTest, body)
+ assert.Equal(t, metaTest, meta)
+ assert.True(t, validateMetadata(meta))
+ })
+
+ t.Run("NoFirstSeparator", func(t *testing.T) {
+ var meta structs.IssueTemplate
+ _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", frontTest, sepTest, bodyTest)), &meta)
+ assert.Error(t, err)
+ })
+
+ t.Run("NoLastSeparator", func(t *testing.T) {
+ var meta structs.IssueTemplate
+ _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, bodyTest)), &meta)
+ assert.Error(t, err)
+ })
+
+ t.Run("NoBody", func(t *testing.T) {
+ var meta structs.IssueTemplate
+ body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, sepTest)), &meta)
+ assert.NoError(t, err)
+ assert.Equal(t, "", body)
+ assert.Equal(t, metaTest, meta)
+ assert.True(t, validateMetadata(meta))
+ })
+}
+
var (
sepTest = "-----"
frontTest = `name: Test
diff --git a/modules/markup/markdown/renderconfig.go b/modules/markup/markdown/renderconfig.go
index bef67e9e59..003579115f 100644
--- a/modules/markup/markdown/renderconfig.go
+++ b/modules/markup/markdown/renderconfig.go
@@ -5,159 +5,115 @@
package markdown
import (
- "fmt"
"strings"
+ "code.gitea.io/gitea/modules/log"
+
"github.com/yuin/goldmark/ast"
- east "github.com/yuin/goldmark/extension/ast"
- "gopkg.in/yaml.v2"
+ "gopkg.in/yaml.v3"
)
// RenderConfig represents rendering configuration for this file
type RenderConfig struct {
- Meta string
- Icon string
- TOC bool
- Lang string
+ Meta string
+ Icon string
+ TOC bool
+ Lang string
+ yamlNode *yaml.Node
}
-// ToRenderConfig converts a yaml.MapSlice to a RenderConfig
-func (rc *RenderConfig) ToRenderConfig(meta yaml.MapSlice) {
- if meta == nil {
- return
+// UnmarshalYAML implement yaml.v3 UnmarshalYAML
+func (rc *RenderConfig) UnmarshalYAML(value *yaml.Node) error {
+ if rc == nil {
+ rc = &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }
}
- found := false
- var giteaMetaControl yaml.MapItem
- for _, item := range meta {
- strKey, ok := item.Key.(string)
- if !ok {
- continue
- }
- strKey = strings.TrimSpace(strings.ToLower(strKey))
- switch strKey {
- case "gitea":
- giteaMetaControl = item
- found = true
- case "include_toc":
- val, ok := item.Value.(bool)
- if !ok {
- continue
- }
- rc.TOC = val
- case "lang":
- val, ok := item.Value.(string)
- if !ok {
- continue
- }
- val = strings.TrimSpace(val)
- if len(val) == 0 {
- continue
- }
- rc.Lang = val
- }
+ rc.yamlNode = value
+
+ type basicRenderConfig struct {
+ Gitea *yaml.Node `yaml:"gitea"`
+ TOC bool `yaml:"include_toc"`
+ Lang string `yaml:"lang"`
}
- if found {
- switch v := giteaMetaControl.Value.(type) {
- case string:
- switch v {
- case "none":
- rc.Meta = "none"
- case "table":
- rc.Meta = "table"
- default: // "details"
- rc.Meta = "details"
- }
- case yaml.MapSlice:
- for _, item := range v {
- strKey, ok := item.Key.(string)
- if !ok {
- continue
- }
- strKey = strings.TrimSpace(strings.ToLower(strKey))
- switch strKey {
- case "meta":
- val, ok := item.Value.(string)
- if !ok {
- continue
- }
- switch strings.TrimSpace(strings.ToLower(val)) {
- case "none":
- rc.Meta = "none"
- case "table":
- rc.Meta = "table"
- default: // "details"
- rc.Meta = "details"
- }
- case "details_icon":
- val, ok := item.Value.(string)
- if !ok {
- continue
- }
- rc.Icon = strings.TrimSpace(strings.ToLower(val))
- case "include_toc":
- val, ok := item.Value.(bool)
- if !ok {
- continue
- }
- rc.TOC = val
- case "lang":
- val, ok := item.Value.(string)
- if !ok {
- continue
- }
- val = strings.TrimSpace(val)
- if len(val) == 0 {
- continue
- }
- rc.Lang = val
- }
- }
- }
+ var basic basicRenderConfig
+
+ err := value.Decode(&basic)
+ if err != nil {
+ return err
}
+
+ if basic.Lang != "" {
+ rc.Lang = basic.Lang
+ }
+
+ rc.TOC = basic.TOC
+ if basic.Gitea == nil {
+ return nil
+ }
+
+ var control *string
+ if err := basic.Gitea.Decode(&control); err == nil && control != nil {
+ log.Info("control %v", control)
+ switch strings.TrimSpace(strings.ToLower(*control)) {
+ case "none":
+ rc.Meta = "none"
+ case "table":
+ rc.Meta = "table"
+ default: // "details"
+ rc.Meta = "details"
+ }
+ return nil
+ }
+
+ type giteaControl struct {
+ Meta string `yaml:"meta"`
+ Icon string `yaml:"details_icon"`
+ TOC *yaml.Node `yaml:"include_toc"`
+ Lang string `yaml:"lang"`
+ }
+
+ var controlStruct *giteaControl
+ if err := basic.Gitea.Decode(controlStruct); err != nil || controlStruct == nil {
+ return err
+ }
+
+ switch strings.TrimSpace(strings.ToLower(controlStruct.Meta)) {
+ case "none":
+ rc.Meta = "none"
+ case "table":
+ rc.Meta = "table"
+ default: // "details"
+ rc.Meta = "details"
+ }
+
+ rc.Icon = strings.TrimSpace(strings.ToLower(controlStruct.Icon))
+
+ if controlStruct.Lang != "" {
+ rc.Lang = controlStruct.Lang
+ }
+
+ var toc bool
+ if err := controlStruct.TOC.Decode(&toc); err == nil {
+ rc.TOC = toc
+ }
+
+ return nil
}
-func (rc *RenderConfig) toMetaNode(meta yaml.MapSlice) ast.Node {
+func (rc *RenderConfig) toMetaNode() ast.Node {
+ if rc.yamlNode == nil {
+ return nil
+ }
switch rc.Meta {
case "table":
- return metaToTable(meta)
+ return nodeToTable(rc.yamlNode)
case "details":
- return metaToDetails(meta, rc.Icon)
+ return nodeToDetails(rc.yamlNode, rc.Icon)
default:
return nil
}
}
-
-func metaToTable(meta yaml.MapSlice) ast.Node {
- table := east.NewTable()
- alignments := []east.Alignment{}
- for range meta {
- alignments = append(alignments, east.AlignNone)
- }
- row := east.NewTableRow(alignments)
- for _, item := range meta {
- cell := east.NewTableCell()
- cell.AppendChild(cell, ast.NewString([]byte(fmt.Sprintf("%v", item.Key))))
- row.AppendChild(row, cell)
- }
- table.AppendChild(table, east.NewTableHeader(row))
-
- row = east.NewTableRow(alignments)
- for _, item := range meta {
- cell := east.NewTableCell()
- cell.AppendChild(cell, ast.NewString([]byte(fmt.Sprintf("%v", item.Value))))
- row.AppendChild(row, cell)
- }
- table.AppendChild(table, row)
- return table
-}
-
-func metaToDetails(meta yaml.MapSlice, icon string) ast.Node {
- details := NewDetails()
- summary := NewSummary()
- summary.AppendChild(summary, NewIcon(icon))
- details.AppendChild(details, summary)
- details.AppendChild(details, metaToTable(meta))
-
- return details
-}
diff --git a/modules/markup/markdown/renderconfig_test.go b/modules/markup/markdown/renderconfig_test.go
new file mode 100644
index 0000000000..1027035cda
--- /dev/null
+++ b/modules/markup/markdown/renderconfig_test.go
@@ -0,0 +1,162 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package markdown
+
+import (
+ "testing"
+
+ "gopkg.in/yaml.v3"
+)
+
+func TestRenderConfig_UnmarshalYAML(t *testing.T) {
+ tests := []struct {
+ name string
+ expected *RenderConfig
+ args string
+ }{
+ {
+ "empty", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }, "",
+ },
+ {
+ "lang", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "test",
+ }, "lang: test",
+ },
+ {
+ "metatable", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }, "gitea: table",
+ },
+ {
+ "metanone", &RenderConfig{
+ Meta: "none",
+ Icon: "table",
+ Lang: "",
+ }, "gitea: none",
+ },
+ {
+ "metadetails", &RenderConfig{
+ Meta: "details",
+ Icon: "table",
+ Lang: "",
+ }, "gitea: details",
+ },
+ {
+ "metawrong", &RenderConfig{
+ Meta: "details",
+ Icon: "table",
+ Lang: "",
+ }, "gitea: wrong",
+ },
+ {
+ "toc", &RenderConfig{
+ TOC: true,
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }, "include_toc: true",
+ },
+ {
+ "tocfalse", &RenderConfig{
+ TOC: false,
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }, "include_toc: false",
+ },
+ {
+ "toclang", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ TOC: true,
+ Lang: "testlang",
+ }, `
+ include_toc: true
+ lang: testlang
+`,
+ },
+ {
+ "complexlang", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "testlang",
+ }, `
+ gitea:
+ lang: testlang
+`,
+ },
+ {
+ "complexlang2", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "testlang",
+ }, `
+ lang: notright
+ gitea:
+ lang: testlang
+`,
+ },
+ {
+ "complexlang", &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "testlang",
+ }, `
+ gitea:
+ lang: testlang
+`,
+ },
+ {
+ "complex2", &RenderConfig{
+ Lang: "two",
+ Meta: "table",
+ TOC: true,
+ Icon: "smiley",
+ }, `
+ lang: one
+ include_toc: true
+ gitea:
+ details_icon: smiley
+ meta: table
+ include_toc: true
+ lang: two
+`,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := &RenderConfig{
+ Meta: "table",
+ Icon: "table",
+ Lang: "",
+ }
+ if err := yaml.Unmarshal([]byte(tt.args), got); err != nil {
+ t.Errorf("RenderConfig.UnmarshalYAML() error = %v", err)
+ return
+ }
+
+ if got.Meta != tt.expected.Meta {
+ t.Errorf("Meta Expected %s Got %s", tt.expected.Meta, got.Meta)
+ }
+ if got.Icon != tt.expected.Icon {
+ t.Errorf("Icon Expected %s Got %s", tt.expected.Icon, got.Icon)
+ }
+ if got.Lang != tt.expected.Lang {
+ t.Errorf("Lang Expected %s Got %s", tt.expected.Lang, got.Lang)
+ }
+ if got.TOC != tt.expected.TOC {
+ t.Errorf("TOC Expected %t Got %t", tt.expected.TOC, got.TOC)
+ }
+ })
+ }
+}
diff --git a/modules/markup/orgmode/orgmode.go b/modules/markup/orgmode/orgmode.go
index a78531720d..1c02f274ba 100644
--- a/modules/markup/orgmode/orgmode.go
+++ b/modules/markup/orgmode/orgmode.go
@@ -17,8 +17,8 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
- "github.com/alecthomas/chroma"
- "github.com/alecthomas/chroma/lexers"
+ "github.com/alecthomas/chroma/v2"
+ "github.com/alecthomas/chroma/v2/lexers"
"github.com/niklasfasching/go-org/org"
)
diff --git a/modules/markup/orgmode/orgmode_test.go b/modules/markup/orgmode/orgmode_test.go
index 4fc0a20db2..cd12cd8c17 100644
--- a/modules/markup/orgmode/orgmode_test.go
+++ b/modules/markup/orgmode/orgmode_test.go
@@ -79,9 +79,9 @@ func HelloWorld() {
}
#+end_src
`, `
-
// HelloWorld prints "Hello World"
- func HelloWorld () {
- fmt . Println ( "Hello World" )
- }
+
// HelloWorld prints "Hello World"
+ func HelloWorld () {
+ fmt . Println ( "Hello World" )
+}
`)
}
diff --git a/modules/markup/sanitizer.go b/modules/markup/sanitizer.go
index 57e88fdabc..807a8a7892 100644
--- a/modules/markup/sanitizer.go
+++ b/modules/markup/sanitizer.go
@@ -56,7 +56,7 @@ func createDefaultPolicy() *bluemonday.Policy {
policy.AllowAttrs("class").Matching(regexp.MustCompile(`^code-block( is-loading)?$`)).OnElements("pre")
// For Chroma markdown plugin
- policy.AllowAttrs("class").Matching(regexp.MustCompile(`^(chroma )?language-[\w-]+$`)).OnElements("code")
+ policy.AllowAttrs("class").Matching(regexp.MustCompile(`^(chroma )?language-[\w-]+( display)?( is-loading)?$`)).OnElements("code")
// Checkboxes
policy.AllowAttrs("type").Matching(regexp.MustCompile(`^checkbox$`)).OnElements("input")
@@ -83,7 +83,7 @@ func createDefaultPolicy() *bluemonday.Policy {
policy.AllowAttrs("class").Matching(regexp.MustCompile(`emoji`)).OnElements("img")
// Allow icons, emojis, chroma syntax and keyword markup on span
- policy.AllowAttrs("class").Matching(regexp.MustCompile(`^((icon(\s+[\p{L}\p{N}_-]+)+)|(emoji))$|^([a-z][a-z0-9]{0,2})$|^` + keywordClass + `$`)).OnElements("span")
+ policy.AllowAttrs("class").Matching(regexp.MustCompile(`^((icon(\s+[\p{L}\p{N}_-]+)+)|(emoji)|(language-math display)|(language-math inline))$|^([a-z][a-z0-9]{0,2})$|^` + keywordClass + `$`)).OnElements("span")
// Allow 'style' attribute on text elements.
policy.AllowAttrs("style").OnElements("span", "p")
diff --git a/modules/packages/container/metadata.go b/modules/packages/container/metadata.go
index 4222cdb30a..fd38e67859 100644
--- a/modules/packages/container/metadata.go
+++ b/modules/packages/container/metadata.go
@@ -95,7 +95,9 @@ func parseOCIImageConfig(r io.Reader) (*Metadata, error) {
if i := strings.Index(cmd, "#(nop) "); i != -1 {
cmd = strings.TrimSpace(cmd[i+7:])
}
- imageLayers = append(imageLayers, cmd)
+ if cmd != "" {
+ imageLayers = append(imageLayers, cmd)
+ }
}
metadata := &Metadata{
diff --git a/modules/packages/npm/creator.go b/modules/packages/npm/creator.go
index 88ce55ecdb..2ed4d26248 100644
--- a/modules/packages/npm/creator.go
+++ b/modules/packages/npm/creator.go
@@ -96,6 +96,34 @@ type PackageDistribution struct {
NpmSignature string `json:"npm-signature,omitempty"`
}
+type PackageSearch struct {
+ Objects []*PackageSearchObject `json:"objects"`
+ Total int64 `json:"total"`
+}
+
+type PackageSearchObject struct {
+ Package *PackageSearchPackage `json:"package"`
+}
+
+type PackageSearchPackage struct {
+ Scope string `json:"scope"`
+ Name string `json:"name"`
+ Version string `json:"version"`
+ Date time.Time `json:"date"`
+ Description string `json:"description"`
+ Author User `json:"author"`
+ Publisher User `json:"publisher"`
+ Maintainers []User `json:"maintainers"`
+ Keywords []string `json:"keywords,omitempty"`
+ Links *PackageSearchPackageLinks `json:"links"`
+}
+
+type PackageSearchPackageLinks struct {
+ Registry string `json:"npm"`
+ Homepage string `json:"homepage,omitempty"`
+ Repository string `json:"repository,omitempty"`
+}
+
// User https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#package
type User struct {
Username string `json:"username,omitempty"`
diff --git a/modules/repository/create.go b/modules/repository/create.go
index 7a25323def..966a6a2f21 100644
--- a/modules/repository/create.go
+++ b/modules/repository/create.go
@@ -10,7 +10,6 @@ import (
"os"
"path"
"strings"
- "unicode/utf8"
"code.gitea.io/gitea/models"
activities_model "code.gitea.io/gitea/models/activities"
@@ -337,13 +336,6 @@ func CheckDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error
func UpdateRepository(ctx context.Context, repo *repo_model.Repository, visibilityChanged bool) (err error) {
repo.LowerName = strings.ToLower(repo.Name)
- if utf8.RuneCountInString(repo.Description) > 255 {
- repo.Description = string([]rune(repo.Description)[:255])
- }
- if utf8.RuneCountInString(repo.Website) > 255 {
- repo.Website = string([]rune(repo.Website)[:255])
- }
-
e := db.GetEngine(ctx)
if _, err = e.ID(repo.ID).AllCols().Update(repo); err != nil {
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index 09e510ffa0..1ac13cb5fe 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -344,10 +344,12 @@ var (
EnableHardLineBreakInDocuments bool
CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"`
FileExtensions []string
+ EnableMath bool
}{
EnableHardLineBreakInComments: true,
EnableHardLineBreakInDocuments: false,
FileExtensions: strings.Split(".md,.markdown,.mdown,.mkd", ","),
+ EnableMath: true,
}
// Admin settings
diff --git a/modules/storage/local.go b/modules/storage/local.go
index 701b0b1a9f..5d5b06b648 100644
--- a/modules/storage/local.go
+++ b/modules/storage/local.go
@@ -102,6 +102,10 @@ func (l *LocalStorage) Save(path string, r io.Reader, size int64) (int64, error)
if err := util.Rename(tmp.Name(), p); err != nil {
return 0, err
}
+ // Golang's tmp file (os.CreateTemp) always have 0o600 mode, so we need to change the file to follow the umask (as what Create/MkDir does)
+ if err := util.ApplyUmask(p, os.ModePerm); err != nil {
+ return 0, err
+ }
tmpRemoved = true
diff --git a/modules/structs/org.go b/modules/structs/org.go
index d8bd59e1ec..1e98c59ba4 100644
--- a/modules/structs/org.go
+++ b/modules/structs/org.go
@@ -7,7 +7,7 @@ package structs
// Organization represents an organization
type Organization struct {
ID int64 `json:"id"`
- UserName string `json:"username"`
+ Name string `json:"name"`
FullName string `json:"full_name"`
AvatarURL string `json:"avatar_url"`
Description string `json:"description"`
@@ -15,6 +15,8 @@ type Organization struct {
Location string `json:"location"`
Visibility string `json:"visibility"`
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
+ // deprecated
+ UserName string `json:"username"`
}
// OrganizationPermissions list different users permissions on an organization
diff --git a/modules/structs/pull.go b/modules/structs/pull.go
index b63b3edfd3..f627241b26 100644
--- a/modules/structs/pull.go
+++ b/modules/structs/pull.go
@@ -95,3 +95,16 @@ type EditPullRequestOption struct {
RemoveDeadline *bool `json:"unset_due_date"`
AllowMaintainerEdit *bool `json:"allow_maintainer_edit"`
}
+
+// ChangedFile store information about files affected by the pull request
+type ChangedFile struct {
+ Filename string `json:"filename"`
+ PreviousFilename string `json:"previous_filename,omitempty"`
+ Status string `json:"status"`
+ Additions int `json:"additions"`
+ Deletions int `json:"deletions"`
+ Changes int `json:"changes"`
+ HTMLURL string `json:"html_url,omitempty"`
+ ContentsURL string `json:"contents_url,omitempty"`
+ RawURL string `json:"raw_url,omitempty"`
+}
diff --git a/modules/structs/repo.go b/modules/structs/repo.go
index 6a5736898d..27e7f4618c 100644
--- a/modules/structs/repo.go
+++ b/modules/structs/repo.go
@@ -111,7 +111,7 @@ type CreateRepoOption struct {
// unique: true
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"`
// Description of the repository to create
- Description string `json:"description" binding:"MaxSize(255)"`
+ Description string `json:"description" binding:"MaxSize(2048)"`
// Whether the repository is private
Private bool `json:"private"`
// Label-Set to use
@@ -140,9 +140,9 @@ type EditRepoOption struct {
// unique: true
Name *string `json:"name,omitempty" binding:"OmitEmpty;AlphaDashDot;MaxSize(100);"`
// a short description of the repository.
- Description *string `json:"description,omitempty" binding:"MaxSize(255)"`
+ Description *string `json:"description,omitempty" binding:"MaxSize(2048)"`
// a URL with more information about the repository.
- Website *string `json:"website,omitempty" binding:"MaxSize(255)"`
+ Website *string `json:"website,omitempty" binding:"MaxSize(1024)"`
// either `true` to make the repository private or `false` to make it public.
// Note: you will get a 422 error if the organization restricts changing repository visibility to organization
// owners and a non-owner tries to change the value of private.
@@ -151,13 +151,13 @@ type EditRepoOption struct {
Template *bool `json:"template,omitempty"`
// either `true` to enable issues for this repository or `false` to disable them.
HasIssues *bool `json:"has_issues,omitempty"`
- // set this structure to configure internal issue tracker (requires has_issues)
+ // set this structure to configure internal issue tracker
InternalTracker *InternalTracker `json:"internal_tracker,omitempty"`
- // set this structure to use external issue tracker (requires has_issues)
+ // set this structure to use external issue tracker
ExternalTracker *ExternalTracker `json:"external_tracker,omitempty"`
// either `true` to enable the wiki for this repository or `false` to disable it.
HasWiki *bool `json:"has_wiki,omitempty"`
- // set this structure to use external wiki instead of internal (requires has_wiki)
+ // set this structure to use external wiki instead of internal
ExternalWiki *ExternalWiki `json:"external_wiki,omitempty"`
// sets the default branch for this repository.
DefaultBranch *string `json:"default_branch,omitempty"`
@@ -165,25 +165,25 @@ type EditRepoOption struct {
HasPullRequests *bool `json:"has_pull_requests,omitempty"`
// either `true` to enable project unit, or `false` to disable them.
HasProjects *bool `json:"has_projects,omitempty"`
- // either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace. `has_pull_requests` must be `true`.
+ // either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace.
IgnoreWhitespaceConflicts *bool `json:"ignore_whitespace_conflicts,omitempty"`
- // either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits. `has_pull_requests` must be `true`.
+ // either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.
AllowMerge *bool `json:"allow_merge_commits,omitempty"`
- // either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging. `has_pull_requests` must be `true`.
+ // either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.
AllowRebase *bool `json:"allow_rebase,omitempty"`
- // either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits. `has_pull_requests` must be `true`.
+ // either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits.
AllowRebaseMerge *bool `json:"allow_rebase_explicit,omitempty"`
- // either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.
+ // either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.
AllowSquash *bool `json:"allow_squash_merge,omitempty"`
- // either `true` to allow mark pr as merged manually, or `false` to prevent it. `has_pull_requests` must be `true`.
+ // either `true` to allow mark pr as merged manually, or `false` to prevent it.
AllowManualMerge *bool `json:"allow_manual_merge,omitempty"`
- // either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
+ // either `true` to enable AutodetectManualMerge, or `false` to prevent it. Note: In some special cases, misjudgments can occur.
AutodetectManualMerge *bool `json:"autodetect_manual_merge,omitempty"`
- // either `true` to allow updating pull request branch by rebase, or `false` to prevent it. `has_pull_requests` must be `true`.
+ // either `true` to allow updating pull request branch by rebase, or `false` to prevent it.
AllowRebaseUpdate *bool `json:"allow_rebase_update,omitempty"`
// set to `true` to delete pr branch after merge by default
DefaultDeleteBranchAfterMerge *bool `json:"default_delete_branch_after_merge,omitempty"`
- // set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", or "squash". `has_pull_requests` must be `true`.
+ // set to a merge style to be used by this repository: "merge", "rebase", "rebase-merge", or "squash".
DefaultMergeStyle *string `json:"default_merge_style,omitempty"`
// set to `true` to archive this repository.
Archived *bool `json:"archived,omitempty"`
@@ -208,7 +208,7 @@ type GenerateRepoOption struct {
// Default branch of the new repository
DefaultBranch string `json:"default_branch"`
// Description of the repository to create
- Description string `json:"description" binding:"MaxSize(255)"`
+ Description string `json:"description" binding:"MaxSize(2048)"`
// Whether the repository is private
Private bool `json:"private"`
// include git content of default branch in template repo
@@ -316,7 +316,7 @@ type MigrateRepoOptions struct {
LFS bool `json:"lfs"`
LFSEndpoint string `json:"lfs_endpoint"`
Private bool `json:"private"`
- Description string `json:"description" binding:"MaxSize(255)"`
+ Description string `json:"description" binding:"MaxSize(2048)"`
Wiki bool `json:"wiki"`
Milestones bool `json:"milestones"`
Labels bool `json:"labels"`
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index 48b62403a0..a8e4075248 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -376,18 +376,18 @@ func NewFuncMap() []template.FuncMap {
// the table is NOT sorted with this header
return ""
},
- "RenderLabels": func(labels []*issues_model.Label) template.HTML {
- html := ``
+ "RenderLabels": func(labels []*issues_model.Label, repoLink string) template.HTML {
+ htmlCode := ``
for _, label := range labels {
// Protect against nil value in labels - shouldn't happen but would cause a panic if so
if label == nil {
continue
}
- html += fmt.Sprintf("%s
",
- label.ForegroundColor(), label.Color, RenderEmoji(label.Name))
+ htmlCode += fmt.Sprintf("%s ",
+ repoLink, label.ID, label.ForegroundColor(), label.Color, html.EscapeString(label.Description), RenderEmoji(label.Name))
}
- html += " "
- return template.HTML(html)
+ htmlCode += " "
+ return template.HTML(htmlCode)
},
"MermaidMaxSourceCharacters": func() int {
return setting.MermaidMaxSourceCharacters
@@ -631,7 +631,7 @@ func SVG(icon string, others ...interface{}) template.HTML {
// Avatar renders user avatars. args: user, size (int), class (string)
func Avatar(item interface{}, others ...interface{}) template.HTML {
- size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar image vm", others...)
+ size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar vm", others...)
switch t := item.(type) {
case *user_model.User:
@@ -662,7 +662,7 @@ func AvatarByAction(action *activities_model.Action, others ...interface{}) temp
// RepoAvatar renders repo avatars. args: repo, size(int), class (string)
func RepoAvatar(repo *repo_model.Repository, others ...interface{}) template.HTML {
- size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar image", others...)
+ size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar", others...)
src := repo.RelAvatarLink()
if src != "" {
@@ -673,7 +673,7 @@ func RepoAvatar(repo *repo_model.Repository, others ...interface{}) template.HTM
// AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string)
func AvatarByEmail(email, name string, others ...interface{}) template.HTML {
- size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar image", others...)
+ size, class := parseOthers(avatars.DefaultAvatarPixelSize, "ui avatar", others...)
src := avatars.GenerateEmailAvatarFastLink(email, size*setting.Avatar.RenderedSizeFactor)
if src != "" {
diff --git a/modules/translation/i18n/i18n.go b/modules/translation/i18n/i18n.go
index 23b4e23c76..d8ed43a1cd 100644
--- a/modules/translation/i18n/i18n.go
+++ b/modules/translation/i18n/i18n.go
@@ -34,7 +34,7 @@ type LocaleStore interface {
// HasLang returns whether a given language is present in the store
HasLang(langName string) bool
// AddLocaleByIni adds a new language to the store
- AddLocaleByIni(langName, langDesc string, source interface{}) error
+ AddLocaleByIni(langName, langDesc string, source, moreSource []byte) error
}
// ResetDefaultLocales resets the current default locales
diff --git a/modules/translation/i18n/i18n_test.go b/modules/translation/i18n/i18n_test.go
index 7940e59c94..0f4605c1bb 100644
--- a/modules/translation/i18n/i18n_test.go
+++ b/modules/translation/i18n/i18n_test.go
@@ -10,7 +10,7 @@ import (
"github.com/stretchr/testify/assert"
)
-func Test_Tr(t *testing.T) {
+func TestLocaleStore(t *testing.T) {
testData1 := []byte(`
.dot.name = Dot Name
fmt = %[1]s %[2]s
@@ -28,8 +28,8 @@ sub = Changed Sub String
`)
ls := NewLocaleStore()
- assert.NoError(t, ls.AddLocaleByIni("lang1", "Lang1", testData1))
- assert.NoError(t, ls.AddLocaleByIni("lang2", "Lang2", testData2))
+ assert.NoError(t, ls.AddLocaleByIni("lang1", "Lang1", testData1, nil))
+ assert.NoError(t, ls.AddLocaleByIni("lang2", "Lang2", testData2, nil))
ls.SetDefaultLang("lang1")
result := ls.Tr("lang1", "fmt", "a", "b")
@@ -58,3 +58,21 @@ sub = Changed Sub String
assert.False(t, found)
assert.NoError(t, ls.Close())
}
+
+func TestLocaleStoreMoreSource(t *testing.T) {
+ testData1 := []byte(`
+a=11
+b=12
+`)
+
+ testData2 := []byte(`
+b=21
+c=22
+`)
+
+ ls := NewLocaleStore()
+ assert.NoError(t, ls.AddLocaleByIni("lang1", "Lang1", testData1, testData2))
+ assert.Equal(t, "11", ls.Tr("lang1", "a"))
+ assert.Equal(t, "21", ls.Tr("lang1", "b"))
+ assert.Equal(t, "22", ls.Tr("lang1", "c"))
+}
diff --git a/modules/translation/i18n/localestore.go b/modules/translation/i18n/localestore.go
index e3b88ad96e..853519e224 100644
--- a/modules/translation/i18n/localestore.go
+++ b/modules/translation/i18n/localestore.go
@@ -37,9 +37,7 @@ func NewLocaleStore() LocaleStore {
}
// AddLocaleByIni adds locale by ini into the store
-// if source is a string, then the file is loaded
-// if source is a []byte, then the content is used
-func (store *localeStore) AddLocaleByIni(langName, langDesc string, source interface{}) error {
+func (store *localeStore) AddLocaleByIni(langName, langDesc string, source, moreSource []byte) error {
if _, ok := store.localeMap[langName]; ok {
return ErrLocaleAlreadyExist
}
@@ -53,7 +51,7 @@ func (store *localeStore) AddLocaleByIni(langName, langDesc string, source inter
iniFile, err := ini.LoadSources(ini.LoadOptions{
IgnoreInlineComment: true,
UnescapeValueCommentSymbols: true,
- }, source)
+ }, source, moreSource)
if err != nil {
return fmt.Errorf("unable to load ini: %w", err)
}
diff --git a/modules/translation/translation.go b/modules/translation/translation.go
index e40a9357fa..fc311aa61b 100644
--- a/modules/translation/translation.go
+++ b/modules/translation/translation.go
@@ -60,9 +60,9 @@ func InitLocales(ctx context.Context) {
log.Fatal("Failed to list locale files: %v", err)
}
- localFiles := make(map[string]interface{}, len(localeNames))
+ localeData := make(map[string][]byte, len(localeNames))
for _, name := range localeNames {
- localFiles[name], err = options.Locale(name)
+ localeData[name], err = options.Locale(name)
if err != nil {
log.Fatal("Failed to load %s locale file. %v", name, err)
}
@@ -75,9 +75,17 @@ func InitLocales(ctx context.Context) {
matcher = language.NewMatcher(supportedTags)
for i := range setting.Names {
- key := "locale_" + setting.Langs[i] + ".ini"
+ var localeDataBase []byte
+ if i == 0 && setting.Langs[0] != "en-US" {
+ // Only en-US has complete translations. When use other language as default, the en-US should still be used as fallback.
+ localeDataBase = localeData["locale_en-US.ini"]
+ if localeDataBase == nil {
+ log.Fatal("Failed to load locale_en-US.ini file.")
+ }
+ }
- if err = i18n.DefaultLocales.AddLocaleByIni(setting.Langs[i], setting.Names[i], localFiles[key]); err != nil {
+ key := "locale_" + setting.Langs[i] + ".ini"
+ if err = i18n.DefaultLocales.AddLocaleByIni(setting.Langs[i], setting.Names[i], localeDataBase, localeData[key]); err != nil {
log.Error("Failed to set messages to %s: %v", setting.Langs[i], err)
}
}
diff --git a/modules/util/file_unix.go b/modules/util/file_unix.go
new file mode 100644
index 0000000000..ec9d4ec167
--- /dev/null
+++ b/modules/util/file_unix.go
@@ -0,0 +1,28 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build !windows
+
+package util
+
+import (
+ "os"
+
+ "golang.org/x/sys/unix"
+)
+
+var defaultUmask int
+
+func init() {
+ // at the moment, the umask could only be gotten by calling unix.Umask(newUmask)
+ // use 0o077 as temp new umask to reduce the risks if this umask is used anywhere else before the correct umask is recovered
+ tempUmask := 0o077
+ defaultUmask = unix.Umask(tempUmask)
+ unix.Umask(defaultUmask)
+}
+
+func ApplyUmask(f string, newMode os.FileMode) error {
+ mod := newMode & ^os.FileMode(defaultUmask)
+ return os.Chmod(f, mod)
+}
diff --git a/modules/util/file_unix_test.go b/modules/util/file_unix_test.go
new file mode 100644
index 0000000000..41311aa13f
--- /dev/null
+++ b/modules/util/file_unix_test.go
@@ -0,0 +1,36 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build !windows
+
+package util
+
+import (
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestApplyUmask(t *testing.T) {
+ f, err := os.CreateTemp(t.TempDir(), "test-filemode-")
+ assert.NoError(t, err)
+
+ err = os.Chmod(f.Name(), 0o777)
+ assert.NoError(t, err)
+ st, err := os.Stat(f.Name())
+ assert.NoError(t, err)
+ assert.EqualValues(t, 0o777, st.Mode().Perm()&0o777)
+
+ oldDefaultUmask := defaultUmask
+ defaultUmask = 0o037
+ defer func() {
+ defaultUmask = oldDefaultUmask
+ }()
+ err = ApplyUmask(f.Name(), os.ModePerm)
+ assert.NoError(t, err)
+ st, err = os.Stat(f.Name())
+ assert.NoError(t, err)
+ assert.EqualValues(t, 0o740, st.Mode().Perm()&0o777)
+}
diff --git a/modules/util/file_windows.go b/modules/util/file_windows.go
new file mode 100644
index 0000000000..6ad3e88ba5
--- /dev/null
+++ b/modules/util/file_windows.go
@@ -0,0 +1,16 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+//go:build windows
+
+package util
+
+import (
+ "os"
+)
+
+func ApplyUmask(f string, newMode os.FileMode) error {
+ // do nothing for Windows, because Windows doesn't use umask
+ return nil
+}
diff --git a/options/license/checkmk b/options/license/checkmk
new file mode 100644
index 0000000000..46c6b74278
--- /dev/null
+++ b/options/license/checkmk
@@ -0,0 +1,9 @@
+# Copyright (c) 2006, 2010 Micah Cowan
+#
+# Redistribution of this program in any form, with or without
+# modifications, is permitted, provided that the above copyright is
+# retained in distributions of this program in source form.
+#
+# (This is a free, non-copyleft license compatible with pretty much any
+# other free or proprietary license, including the GPL. It's essentially
+# a scaled-down version of the "modified" BSD license.)
diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini
index 7eab7b5498..80f0b12661 100644
--- a/options/locale/locale_cs-CZ.ini
+++ b/options/locale/locale_cs-CZ.ini
@@ -2,6 +2,7 @@ home=Domů
dashboard=Přehled
explore=Procházet
help=Nápověda
+logo=Logo
sign_in=Přihlásit se
sign_in_with=Přihlásit se pomocí
sign_out=Odhlásit se
@@ -145,6 +146,8 @@ sqlite_helper=Cesta k souboru SQLite3 databáze. Pokud spouštíte Gitea jako
reinstall_error=Pokoušíte se nainstalovat do existující databáze Gitea
reinstall_confirm_message=Přeinstalování s existující databází Gitea může způsobit více problémů. Ve většině případů byste měli použít existující „app.ini“ pro spuštění Gitea. Pokud víte, co děláte, potvrďte následující:
reinstall_confirm_check_1=Data šifrovaná pomocí SECRET_KEY v souboru api.ini mohou být ztracena: uživatelé nemusí být schopni se přihlásit s 2FA/OTP a zrcadla nemusí fungovat správně. Zaškrtnutím tohoto políčka potvrdíte, že aktuální soubor app.ini obsahuje správný SECRET_KEY.
+reinstall_confirm_check_2=Může být nutné znovu synchronizovat repozitáře a nastavení. Zaškrtnutím tohoto políčka potvrzujete, že budete háčky pro repozitáře a soubor authorized_keys znovu synchronizovat ručně. Potvrzujete, že zajistíte správnost nastavení repozitáře a zrcadla.
+reinstall_confirm_check_3=Potvrzujete, že jste si naprosto jisti, že tato Gitea je spuštěna se správným umístěním souboru app.ini a že jste si jisti, že musíte provést novou instalaci. Potvrzujete, že berete na vědomí výše uvedená rizika.
err_empty_db_path=Cesta k SQLite3 databázi nemůže být prázdná.
no_admin_and_disable_registration=Nemůžete vypnout registraci účtů bez vytvoření účtu správce.
err_empty_admin_password=Heslo administrátora nemůže být prázdné.
@@ -175,6 +178,8 @@ log_root_path_helper=Soubory protokolu budou zapsány do tohoto adresáře.
optional_title=Dodatečná nastavení
email_title=Nastavení e-mailu
+smtp_addr=Server SMTP
+smtp_port=Port SMTP
smtp_from=Odeslat e-mail jako
smtp_from_helper=E-mailová adresa, kterou bude Gitea používat. Zadejte běžnou e-mailovou adresu, nebo použijte formát "Jméno".
mailer_user=Uživatelské jméno SMTP
@@ -209,8 +214,11 @@ install_btn_confirm=Nainstalovat Gitea
test_git_failed=Chyba při testu příkazu 'git': %v
sqlite3_not_available=Tato verze Gitea nepodporuje SQLite3. Stáhněte si oficiální binární verzi od %s (nikoli verzi „gobuild“).
invalid_db_setting=Nastavení databáze je neplatné: %v
+invalid_db_table=Databázová tabulka „%s“ je neplatná: %v
invalid_repo_path=Kořenový adresář repozitářů není správný: %v
+invalid_app_data_path=Cesta k datům aplikace je neplatná: %v
run_user_not_match="Run as" uživatelské jméno není aktuální uživatelské jméno: %s -> %s
+internal_token_failed=Nepodařilo se vytvořit interní token: %v
secret_key_failed=Nepodařilo se vytvořit tajný klíč: %v
save_config_failed=Uložení konfigurace se nezdařilo: %v
invalid_admin_setting=Nastavení účtu správce není správné: %v
@@ -240,6 +248,7 @@ view_home=Zobrazit %s
search_repos=Nalézt repozitář…
filter=Ostatní filtry
filter_by_team_repositories=Filtrovat podle repozitářů týmu
+feed_of=Kanál z „%s“
show_archived=Archivováno
show_both_archived_unarchived=Zobrazeny jak archivované tak nearchivované
@@ -268,6 +277,8 @@ org_no_results=Nebyly nalezeny žádné odpovídající organizace.
code_no_results=Nebyl nalezen žádný zdrojový kód odpovídající hledanému výrazu.
code_search_results=Výsledky hledání pro „%s“
code_last_indexed_at=Naposledy indexováno %s
+relevant_repositories_tooltip=Repozitáře, které jsou rozštěpení nebo nemají žádné téma, ikonu a žádný popis jsou skryty.
+relevant_repositories=Zobrazují se pouze relevantní repositáře, zobrazit nefiltrované výsledky .
[auth]
@@ -315,7 +326,9 @@ oauth_signup_submit=Dokončit účet
oauth_signin_tab=Propojit s existujícím účtem
oauth_signin_title=Přihlaste se pro ověření propojeného účtu
oauth_signin_submit=Propojit účet
+oauth.signin.error=Došlo k chybě při zpracování žádosti o autorizaci. Pokud tato chyba přetrvává, obraťte se na správce webu.
oauth.signin.error.access_denied=Žádost o autorizaci byla zamítnuta.
+oauth.signin.error.temporarily_unavailable=Autorizace se nezdařila, protože ověřovací server je dočasně nedostupný. Opakujte akci později.
openid_connect_submit=Připojit
openid_connect_title=Připojení k existujícímu účtu
openid_connect_desc=Zvolené OpenID URI není známé. Přidružte nový účet zde.
@@ -366,7 +379,7 @@ issue_assigned.pull=@%[1]s vás přiřadil/a k požadavku na natažení %[2]v re
issue_assigned.issue=@%[1]s vás přiřadil/a k úkolu %[2]v repozitáři %[3]s.
issue.x_mentioned_you=@%s vás zmínil/a:
-issue.action.force_push=%[1]s vynutil/a nahrání %[2]s z %[3]do %[4].
+issue.action.force_push=%[1]s vynutil/a nahrání %[2]s z %[3]s do %[4]s.
issue.action.push_1=@%[1]s nahrál/a %[3]d commit do %[2]s
issue.action.push_n=@%[1]s nahrál/a %[3]d commity do %[2]s
issue.action.close=@%[1]s uzavřel/a #%[2]d.
@@ -432,6 +445,7 @@ size_error=` musí být minimálně velikosti %s.`
min_size_error=` musí obsahovat nejméně %s znaků.`
max_size_error=` musí obsahovat maximálně %s znaků.`
email_error=` není správná e-mailová adresa.`
+url_error=`„%s“ není platná adresa URL.`
include_error=` musí obsahovat řetězec „%s“.`
glob_pattern_error=`zástupný vzor je neplatný: %s.`
regex_pattern_error=` regex vzor je neplatný: %s.`
@@ -443,6 +457,7 @@ lang_select_error=Vyberte jazyk ze seznamu.
username_been_taken=Uživatelské jméno je již obsazeno.
username_change_not_local_user=Uživatelé, kteří jsou ověřováni jinak než lokálně, si nemohou změnit uživatelské jméno.
repo_name_been_taken=Název repozitáře je již použit.
+repository_force_private=Vynucené soukromí je povoleno: soukromé repozitáře nelze zveřejnit.
repository_files_already_exist=Soubory pro tento repozitář již existují. Obraťte se na správce systému.
repository_files_already_exist.adopt=Soubory pro tento repozitář již existují a mohou být pouze přijaty.
repository_files_already_exist.delete=Soubory pro tento repozitář již existují. Musíte je odstranit.
@@ -478,7 +493,9 @@ auth_failed=Ověření selhalo: %v
still_own_repo=Váš účet vlastní jeden nebo více repozitářů; smažte je nebo převeďte.
still_has_org=Váš účet je člen jedné nebo více organizací; nejdříve je opusťte.
+still_own_packages=Váš účet vlastní jeden nebo více balíčků. Nejprve je musíte odstranit.
org_still_own_repo=Organizace stále vlastní jeden nebo více repozitářů; smažte je nebo převeďte.
+org_still_own_packages=Organizace stále vlastní jeden nebo více balíčků; nejprve je smažte.
target_branch_not_exist=Cílová větev neexistuje.
@@ -541,6 +558,7 @@ continue=Pokračovat
cancel=Zrušit
language=Jazyk
ui=Motiv vzhledu
+hidden_comment_types=Skryté typy komentářů
comment_type_group_reference=Reference
comment_type_group_label=Štítek
comment_type_group_milestone=Milník
@@ -551,9 +569,11 @@ comment_type_group_time_tracking=Sledování času
comment_type_group_deadline=Uzávěrka
comment_type_group_dependency=Závislost
comment_type_group_lock=Stav zámku
+comment_type_group_review_request=Žádost o posouzení
comment_type_group_pull_request_push=Přidané commity
comment_type_group_project=Projekt
comment_type_group_issue_ref=Referenční číslo úkolu
+saved_successfully=Vaše nastavení bylo úspěšně uloženo.
privacy=Soukromí
keep_activity_private=Skrýt aktivitu z profilové stránky
keep_activity_private_popup=Učinit aktivitu viditelnou pouze pro vás a administrátory
@@ -639,10 +659,18 @@ gpg_token_required=Musíte zadat podpis pro níže uvedený token
gpg_token=Token
gpg_token_help=Podpis můžete vygenerovat pomocí:
gpg_token_code=echo "%s" | gpg -a --default-key %s --detach-sig
+gpg_token_signature=Zakódovaný podpis GPG
key_signature_gpg_placeholder=Začíná s „-----BEGIN PGP SIGNATURE-----“
+verify_gpg_key_success=GPG klíč „%s“ byl ověřen.
ssh_key_verified=Ověřený klíč
+ssh_key_verified_long=Klíč byl ověřen pomocí tokenu a může být použit k ověření commitů shodujících se s libovolnou vaší aktivovanou e-mailovou adresou pro tohoto uživatele.
ssh_key_verify=Ověřit
+ssh_invalid_token_signature=Zadaný SSH klíč, podpis nebo token se neshodují nebo je token zastaralý.
+ssh_token_required=Musíte zadat podpis pro níže uvedený token
ssh_token=Token
+ssh_token_help=Podpis můžete vygenerovat pomocí:
+ssh_token_signature=Zakódovaný podpis SSH
+key_signature_ssh_placeholder=Začíná s „-----BEGIN SSH SIGNATURE-----“
verify_ssh_key_success=SSH klíč „%s“ byl ověřen.
subkeys=Podklíče
key_id=ID klíče
@@ -670,7 +698,7 @@ no_activity=Žádná aktuální aktivita
can_read_info=Čtení
can_write_info=Zápis
key_state_desc=Tento klíč byl použit během posledních 7 dní
-token_state_desc=Tato poukázka byla použita během posledních 7 dní
+token_state_desc=Tento token byl použit během posledních 7 dní
principal_state_desc=Tento SSH Principal certifikát byl použit během posledních 7 dní
show_openid=Zobrazit na profilu
hide_openid=Odstranit z profilu
@@ -681,23 +709,26 @@ social_desc=Tyto účty sociálních síti jsou propojeny s vaším Gitea účte
unbind=Odpojit
unbind_success=Účet sociální sítě byl odpojen od vašeho Gitea účtu.
-manage_access_token=Spravovat přístupové poukázky
-generate_new_token=Vygenerovat novou poukázku
-tokens_desc=Tyto poukázky umožňují přístup k vašemu účtu pomocí Gitea API.
-new_token_desc=Aplikace používající poukázku mají plný přístup k vašemu účtu.
-token_name=Název poukázky
-generate_token=Vygenerovat poukázku
-generate_token_success=Váše nová poukázka byla vytvořena. Zkopírujte ji nyní protože se již znovu nezobrazí.
+manage_access_token=Spravovat přístupové tokeny
+generate_new_token=Vygenerovat nový token
+tokens_desc=Tyto tokeny umožňují přístup k vašemu účtu pomocí Gitea API.
+new_token_desc=Aplikace používající token mají plný přístup k vašemu účtu.
+token_name=Název tokenu
+generate_token=Vygenerovat token
+generate_token_success=Váš nový token byl vytvořen. Zkopírujte jej nyní protože se již znovu nezobrazí.
generate_token_name_duplicate=%s byl již použit jako název aplikace. Použijte prosím nový.
delete_token=Smazat
-access_token_deletion=Odstranit přístupovou poukázku
-delete_token_success=Poukázka byla odstraněna. Aplikace, které ji používají již nemají přístup k vašemu účtu.
+access_token_deletion=Odstranit přístupový token
+access_token_deletion_cancel_action=Zrušit
+access_token_deletion_confirm_action=Smazat
+access_token_deletion_desc=Smazání tokenu zruší přístup k vašemu účtu pro aplikace, které jej používají. Tuto akci nelze vrátit. Pokračovat?
+delete_token_success=Token byl odstraněn. Aplikace, které jej používají již nemají přístup k vašemu účtu.
manage_oauth2_applications=Spravovat OAuth2 aplikace
edit_oauth2_application=Upravit OAuth2 aplikaci
oauth2_applications_desc=OAuth2 aplikace umožní aplikacím třetích stran bezpečně ověřit uživatele v této instanci Gitea.
remove_oauth2_application=Odstranit OAuth2 aplikaci
-remove_oauth2_application_desc=Odstraněním OAuth2 aplikace odeberete přístup všem podepsaným přístupovým poukázkám. Pokračovat?
+remove_oauth2_application_desc=Odstraněním OAuth2 aplikace odeberete přístup všem podepsaným přístupovým tokenům. Pokračovat?
remove_oauth2_application_success=Aplikace byla odstraněna.
create_oauth2_application=Vytvořit novou OAuth2 aplikaci
create_oauth2_application_button=Vytvořit aplikaci
@@ -729,12 +760,12 @@ twofa_desc=Dvoufaktorový způsob ověřování zvýší zabezpečení vašeho
twofa_is_enrolled=Váš účet aktuálně používá dvoufaktorové ověřování.
twofa_not_enrolled=Váš účet aktuálně nepoužívá dvoufaktorové ověřování.
twofa_disable=Zakázat dvoufaktorové ověřování
-twofa_scratch_token_regenerate=Obnovit pomocnou poukázku
-twofa_scratch_token_regenerated=Vaše pomocná poukázka je nyní %s. Uložte ji na bezpečném místě.
+twofa_scratch_token_regenerate=Obnovit pomocný token
+twofa_scratch_token_regenerated=Váš pomocný token je nyní %s. Uložte jej na bezpečném místě.
twofa_enroll=Povolit dvoufaktorové ověřování
twofa_disable_note=Dvoufaktorové ověřování můžete zakázat, když bude potřeba.
twofa_disable_desc=Zakážete-li dvoufaktorové ověřování, bude váš účet méně zabezpečený. Pokračovat?
-regenerate_scratch_token_desc=Jestli jste někam založili vaši pomocnou poukázku nebo jste ji již použili k přihlášení, můžete ji resetovat zde.
+regenerate_scratch_token_desc=Jestli jste někam založili váš pomocný token nebo jste jej již použili k přihlášení, můžete jej resetovat zde.
twofa_disabled=Dvoufaktorové ověřování bylo zakázáno.
scan_this_image=Naskenujte tento obrázek s vaší ověřovací aplikací:
or_enter_secret=Nebo zadejte tajný kód: %s
@@ -743,13 +774,16 @@ passcode_invalid=Přístupový kód není platný. Zkuste to znovu.
twofa_enrolled=Ve vašem účtu bylo povoleno dvoufaktorové ověřování. Uložte si pomocný token (%s) na bezpečném místě, protože bude zobrazen pouze jednou!
twofa_failed_get_secret=Nepodařilo se získat tajemství.
+webauthn_desc=Bezpečnostní klíče jsou hardwarová zařízení obsahující kryptografické klíče. Mohou být použity pro dvoufaktorové ověřování. Bezpečnostní klíče musí podporovat WebAuthn Authenticator standard.
webauthn_register_key=Přidat bezpečnostní klíč
webauthn_nickname=Přezdívka
webauthn_delete_key=Odstranit bezpečnostní klíč
+webauthn_delete_key_desc=Pokud odstraníte bezpečnostní klíč, již se s ním nebudete moci přihlásit. Pokračovat?
manage_account_links=Správa propojených účtů
manage_account_links_desc=Tyto externí účty jsou propojeny s vaším Gitea účtem.
account_links_not_available=K vašemu Gitea účtu nejsou aktuálně připojené žádné externí účty.
+link_account=Propojit účet
remove_account_link=Odstranit propojený účet
remove_account_link_desc=Odstraněním propojeného účtu zrušíte jeho přístup k vašemu Gitea účtu. Pokračovat?
remove_account_link_success=Propojený účet byl odstraněn.
@@ -768,6 +802,7 @@ email_notifications.enable=Povolit e-mailová oznámení
email_notifications.onmention=E-mail pouze při zmínce
email_notifications.disable=Zakázat e-mailová oznámení
email_notifications.submit=Nastavit předvolby e-mailu
+email_notifications.andyourown=A Vaše vlastní upozornění
visibility=Viditelnost uživatele
visibility.public=Veřejný
@@ -796,6 +831,7 @@ visibility_fork_helper=(Změna tohoto ovlivní všechny rozštěpení repozitá
clone_helper=Potřebujete pomoci s klonováním? Navštivte nápovědu .
fork_repo=Rozštěpení repozitáře
fork_from=Rozštěpit z
+already_forked=Již jsi rozštěpil %s
fork_to_different_account=Rozštěpit na jiný účet
fork_visibility_helper=Viditelnost rozštěpeného repozitáře nemůže být změněna.
use_template=Použít tuto šablonu
@@ -829,7 +865,9 @@ default_branch=Výchozí větev
default_branch_helper=Výchozí větev je základní větev pro požadavky na natažení a commity kódu.
mirror_prune=Vyčistit
mirror_prune_desc=Odstranit zastaralé reference na vzdálené sledování
+mirror_interval=Interval zrcadlení (platné časové jednotky jsou „h“, „m“ a „s“). 0 zakáže periodickou synchronizaci. (Minimální interval: %s)
mirror_interval_invalid=Interval zrcadlení není platný.
+mirror_sync_on_commit=Synchronizovat při nahrávání revizí
mirror_address=Klonovat z URL
mirror_address_desc=Zadejte požadované přístupové údaje do sekce Ověření.
mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny komponenty musíte správně nahradit escape sekvencí.
@@ -858,6 +896,7 @@ delete_preexisting_label=Smazat
delete_preexisting=Odstranit již existující soubory
delete_preexisting_content=Odstranit soubory v %s
delete_preexisting_success=Smazány nepřijaté soubory v %s
+blame_prior=Zobrazit blame před touto změnou
transfer.accept=Přijmout převod
transfer.accept_desc=Převést do „%s“
@@ -877,6 +916,7 @@ desc.archived=Archivováno
template.items=Položky šablony
template.git_content=Obsah gitu (výchozí větev)
template.git_hooks=Háčky Gitu
+template.git_hooks_tooltip=Momentálně nemůžete po přidání upravovat nebo odebrat háčky gitu. Vyberte pouze v případě, že důvěřujete šabloně repozitáře.
template.webhooks=Webové háčky
template.topics=Témata
template.avatar=Avatar
@@ -896,6 +936,7 @@ form.name_pattern_not_allowed=Vzor „%s“ není povolený v názvu repozitář
need_auth=Ověření
migrate_options=Možnosti migrace
migrate_service=Migrační služba
+migrate_options_mirror_helper=Tento repozitář bude zrcadlem
migrate_options_lfs=Migrovat LFS soubory
migrate_options_lfs_endpoint.label=Koncový bod LFS
migrate_options_lfs_endpoint.description=Migrace se pokusí použít váš vzdálený Git pro určení LFS serveru . Můžete také zadat vlastní koncový bod, pokud jsou data LFS repozitáře uložena někde jinde.
@@ -912,8 +953,10 @@ migrate_items_releases=Vydání
migrate_repo=Migrovat repozitář
migrate.clone_address=Migrovat / klonovat z URL
migrate.clone_address_desc=HTTP(S) nebo URL pro klonování existujícího repozitáře
+migrate.github_token_desc=Můžete sem vložit jeden nebo více tokenů oddělených čárkou, abyste urychlili migraci kvůli omezení rychlosti rozhraní GitHub API. VAROVÁNÍ: Zneužití této funkce může vést k porušení zásad poskytovatele služeb a zablokování účtu.
migrate.clone_local_path=nebo místní cesta serveru
migrate.permission_denied=Není dovoleno importovat místní repozitáře.
+migrate.permission_denied_blocked=Nelze importovat z nepovolených hostitelů, prosím požádejte správce, aby zkontroloval nastavení ALLOWED_DOMAINS/ALLOW_LOCALETWORKS/BLOCKED_DOMAINS.
migrate.invalid_local_path=Místní cesta je neplatná, buď neexistuje nebo není adresářem.
migrate.invalid_lfs_endpoint=Koncový bod LFS není platný.
migrate.failed=Přenesení selhalo: %v
@@ -961,6 +1004,7 @@ clone_this_repo=Naklonovat tento repozitář
create_new_repo_command=Vytvořit nový repozitář na příkazové řádce
push_exist_repo=Nahrání existujícího repozitáře z příkazové řádky
empty_message=Tento repozitář nemá žádný obsah.
+broken_message=Data gitu, která jsou základem tohoto repozitáře, nelze číst. Kontaktujte správce této instance nebo smažte tento repositář.
code=Zdrojový kód
code.desc=Přístup ke zdrojovým kódům, souborům, commitům a větvím.
@@ -974,6 +1018,7 @@ tags=Značky
issues=Úkoly
pulls=Požadavky na natažení
project_board=Projekty
+packages=Balíčky
labels=Štítky
org_labels_desc=Štítky na úrovni organizace, které mohou být použity se všemi repozitáři v rámci této organizace
org_labels_desc_manage=spravovat
@@ -993,8 +1038,18 @@ file_view_rendered=Zobrazit vykreslené
file_view_raw=Zobrazit v surovém stavu
file_permalink=Trvalý odkaz
file_too_large=Soubor je příliš velký pro zobrazení.
+invisible_runes_header=`Tento soubor obsahuje neviditelné znaky Unicode!`
+invisible_runes_description=`Tento soubor obsahuje neviditelné znaky Unicode, které mohou být zpracovány jinak než níže uvedeným způsobem. Pokud je váš případ úmyslný a legitimní, můžete toto varování bezpečně ignorovat. Použijte tlačítko Escape sekvence k odhalení skrytých znaků.`
+ambiguous_runes_header=`Tento soubor obsahuje nejednoznačné znaky Unicode!`
+ambiguous_runes_description=`Tento soubor obsahuje nejednoznačné znaky Unicode, které mohou být zaměněny s ostatními v aktuálním prostředí. Pokud je váš případ úmyslný a legitimní, můžete toto varování bezpečně ignorovat. Použijte tlačítko Escape sekvence pro zvýraznění těchto znaků.`
+invisible_runes_line=`Tento řádek má neviditelné znaky Unicode`
+ambiguous_runes_line=`Tento řádek má nejednoznačné znaky Unicode`
+ambiguous_character=`%[1]c [U+%04[1]X] je zaměnitelný s %[2]c [U+%04[2]X]`
+escape_control_characters=Escape sekvence
+unescape_control_characters=Bez escape sekvencí
file_copy_permalink=Kopírovat trvalý odkaz
+view_git_blame=Zobrazit Git Blame
video_not_supported_in_browser=Váš prohlížeč nepodporuje značku pro HTML5 video.
audio_not_supported_in_browser=Váš prohlížeč nepodporuje značku pro HTML5 audio.
stored_lfs=Uloženo pomocí Git LFS
@@ -1010,6 +1065,7 @@ normal_view=Normální zobrazení
line=řádek
lines=řádky
+editor.add_file=Přidat soubor
editor.new_file=Nový soubor
editor.upload_file=Nahrát soubor
editor.edit_file=Upravit soubor
@@ -1033,6 +1089,10 @@ editor.add_tmpl=Přidán „“
editor.add=Přidat „%s“
editor.update=Aktualizovat „%s“
editor.delete=Smazat „%s“
+editor.patch=Použít záplatu
+editor.patching=Záplatování:
+editor.fail_to_apply_patch=Nelze použít záplatu „%s“
+editor.new_patch=Nová záplata
editor.commit_message_desc=Přidat volitelný rozšířený popis…
editor.signoff_desc=Přidat Signed-off-by podpis přispěvatele na konec zprávy o commitu.
editor.commit_directly_to_this_branch=Odevzdat přímo do větve %s .
@@ -1057,6 +1117,8 @@ editor.commit_empty_file_text=Soubor, který se chystáte odevzdat, je prázdný
editor.no_changes_to_show=Žádné změny k zobrazení.
editor.fail_to_update_file=Nepodařilo se aktualizovat/vytvořit soubor „%s“.
editor.fail_to_update_file_summary=Chybové hlášení:
+editor.push_rejected_no_message=Změna byla serverem zamítnuta bez zprávy. Prosím, zkontrolujte háčky Gitu.
+editor.push_rejected=Změna byla serverem zamítnuta. Prosím, zkontrolujte háčky Gitu.
editor.push_rejected_summary=Úplná zpráva o odmítnutí:
editor.add_subdir=Přidat adresář…
editor.unable_to_upload_files=Nepodařilo se nahrát soubor „%s“. Chyba: %v
@@ -1066,6 +1128,8 @@ editor.cannot_commit_to_protected_branch=Nelze vytvořit commit v chráněné v
editor.no_commit_to_branch=Nelze odevzdat přímo do větve, protože:
editor.user_no_push_to_branch=Uživatel nemůže nahrávat do větve
editor.require_signed_commit=Větev vyžaduje podepsaný commit
+editor.cherry_pick=Cherry-pick %s na:
+editor.revert=Vrátit %s na:
commits.desc=Procházet historii změn zdrojového kódu.
commits.commits=Commity
@@ -1092,7 +1156,9 @@ commit.revert-header=Vrátit: %s
commit.revert-content=Vyberte větev pro návrat na:
commit.cherry-pick=Cherry-pick
commit.cherry-pick-header=Cherry-pick: %s
+commit.cherry-pick-content=Vyberte větev pro Cherry-pick na:
+ext_issues=Přístup k externím úkolům
ext_issues.desc=Odkaz na externí systém úkolů.
projects=Projekty
@@ -1165,6 +1231,8 @@ issues.new.add_reviewer_title=Požádat o posouzení
issues.choose.get_started=Začínáme
issues.choose.blank=Výchozí
issues.choose.blank_about=Vytvořit úkol z výchozí šablony.
+issues.choose.ignore_invalid_templates=Neplatné šablony byly ignorovány
+issues.choose.invalid_templates=%v nalezených neplatných šablon
issues.no_ref=Není určena žádná větev/značka
issues.create=Vytvořit úkol
issues.new_label=Nový štítek
@@ -1194,6 +1262,7 @@ issues.add_assignee_at=`byl přiřazen %s %s`
issues.remove_assignee_at=`byl odstraněn z přiřazení %s %s`
issues.remove_self_assignment=`odstranil/a jejich přiřazení %s`
issues.change_title_at=`změnil/a název z %s na %s %s`
+issues.change_ref_at=`změnil/a referenci z %s na %s %s`
issues.remove_ref_at=`odstranil/a referenci %s %s`
issues.add_ref_at=`přidal/a referenci %s %s`
issues.delete_branch_at=`odstranil/a větev %s %s`
@@ -1204,6 +1273,8 @@ issues.filter_milestone=Milník
issues.filter_milestone_no_select=Všechny milníky
issues.filter_assignee=Zpracovatel
issues.filter_assginee_no_select=Všichni zpracovatelé
+issues.filter_poster=Autor
+issues.filter_poster_no_select=Všichni autoři
issues.filter_type=Typ
issues.filter_type.all_issues=Všechny úkoly
issues.filter_type.assigned_to_you=Přiřazené vám
@@ -1223,6 +1294,7 @@ issues.filter_sort.moststars=Nejvíce hvězdiček
issues.filter_sort.feweststars=Nejméně hvězdiček
issues.filter_sort.mostforks=Nejvíce rozštěpení
issues.filter_sort.fewestforks=Nejméně rozštěpení
+issues.keyword_search_unavailable=V současné době vyhledávání podle klíčového slova není dostupné. Obraťte se na správce webu.
issues.action_open=Otevřít
issues.action_close=Zavřít
issues.action_label=Štítek
@@ -1231,12 +1303,16 @@ issues.action_milestone_no_select=Žádný milník
issues.action_assignee=Zpracovatel
issues.action_assignee_no_select=Bez zpracovatele
issues.opened_by=otevřeno %[1]s uživatelem %[3]s
+pulls.merged_by=od %[3]s byl sloučen %[1]s
+pulls.merged_by_fake=od %[2]s byl sloučen %[1]s
+issues.closed_by=od %[3]s byl uzavřen %[1]s
issues.opened_by_fake=otevřeno %[1]s uživatelem %[2]s
issues.closed_by_fake=od %[2]s byl uzavřen %[1]s
issues.previous=Předchozí
issues.next=Další
issues.open_title=otevřený
issues.closed_title=zavřený
+issues.draft_title=Koncept
issues.num_comments=%d komentářů
issues.commented_at=`okomentoval %s `
issues.delete_comment_confirm=Jste si jist, že chcete smazat tento komentář?
@@ -1353,6 +1429,7 @@ issues.due_date_form_remove=Odstranit
issues.due_date_not_writer=Potřebujete práva na zápis do repozitáře pro úpravy termínu dokončení úkolu.
issues.due_date_not_set=Žádný termín dokončení.
issues.due_date_added=přidal/a termín dokončení %s %s
+issues.due_date_modified=upravil/a termín termínu z %[2]s na %[1]s %[3]s
issues.due_date_remove=odstranil/a termín dokončení %s %s
issues.due_date_overdue=Zpožděné
issues.due_date_invalid=Termín dokončení není platný nebo je mimo rozsah. Použijte prosím formát „rrrr-mm-dd“.
@@ -1397,6 +1474,7 @@ issues.review.add_review_request=vyžádal posouzení od %s %s
issues.review.remove_review_request=odstranil žádost o posouzení na %s %s
issues.review.remove_review_request_self=odmítl posoudit %s
issues.review.pending=Čekající
+issues.review.pending.tooltip=Tento komentář není momentálně viditelný pro ostatní uživatele. Chcete-li odeslat Vaše čekající komentáře, vyberte „%s“ → „%s/%s/%s“ v horní části stránky.
issues.review.review=Posouzení
issues.review.reviewers=Posuzovatelé
issues.review.outdated=Zastaralé
@@ -1415,8 +1493,9 @@ issues.content_history.created=vytvořeno
issues.content_history.delete_from_history=Smazat z historie
issues.content_history.delete_from_history_confirm=Smazat z historie?
issues.content_history.options=Možnosti
+issues.reference_link=Reference: %s
-compare.compare_base=základ
+compare.compare_base=základní
compare.compare_head=porovnat
pulls.desc=Povolit požadavky na natažení a posuzování kódu.
@@ -1427,13 +1506,18 @@ pulls.allow_edits_from_maintainers=Povolit úpravy od správců
pulls.allow_edits_from_maintainers_desc=Uživatelé s přístupem k zápisu do základní větve mohou také nahrávat do této větve
pulls.allow_edits_from_maintainers_err=Aktualizace se nezdařila
pulls.compare_changes_desc=Vyberte větev pro sloučení a větev pro natažení.
+pulls.has_viewed_file=Zobrazeno
+pulls.has_changed_since_last_review=Změněno od vašeho posledního posouzení
+pulls.viewed_files_label=%[1]d / %[2]d souborů zobrazeno
pulls.compare_base=sloučit do
pulls.compare_compare=natáhnout z
pulls.switch_comparison_type=Přepnout typ porovnání
+pulls.switch_head_and_base=Prohodit hlavní a základní větev
pulls.filter_branch=Filtrovat větev
pulls.no_results=Nebyly nalezeny žádné výsledky.
pulls.nothing_to_compare=Tyto větve jsou stejné. Není potřeba vytvářet požadavek na natažení.
pulls.nothing_to_compare_and_allow_empty_pr=Tyto větve jsou stejné. Tento požadavek na natažení bude prázdný.
+pulls.has_pull_request=`Požadavek na natažení mezi těmito větvemi již existuje: %[2]s#%[3]d `
pulls.create=Vytvořit požadavek na natažení
pulls.title_desc=chce sloučit %[1]d commity z větve %[2]s
do %[3]s
pulls.merged_title_desc=sloučil %[1]d commity z větve %[2]s
do větve %[3]s
před %[4]s
@@ -1457,6 +1541,8 @@ pulls.remove_prefix=Odstranit prefix %s
pulls.data_broken=Tento požadavek na natažení je rozbitý kvůli chybějícím informacím o rozštěpení.
pulls.files_conflicted=Tento požadavek na natažení obsahuje změny, které kolidují s cílovou větví.
pulls.is_checking=Právě probíhá kontrola konfliktů při sloučení. Zkuste to za chvíli.
+pulls.is_ancestor=Tato větev je již součástí cílové větve. Není co sloučit.
+pulls.is_empty=Změny na této větvi jsou již na cílové větvi. Toto bude prázdný commit.
pulls.required_status_check_failed=Některé požadované kontroly nebyly úspěšné.
pulls.required_status_check_missing=Některé požadované kontroly chybí.
pulls.required_status_check_administrator=Jako administrátor stále můžete sloučit tento požadavek na natažení.
@@ -1485,6 +1571,7 @@ pulls.no_merge_wip=Požadavek na natažení nemůže být sloučen protože je o
pulls.no_merge_not_ready=Tento požadavek na natažení není připraven na sloučení, zkontrolujte stav posouzení a kontrolu stavu.
pulls.no_merge_access=Nemáte oprávnění sloučit tento požadavek na natažení.
pulls.merge_pull_request=Vytvořit slučovací commit
+pulls.rebase_merge_pull_request=Rebase pak fast-forward
pulls.rebase_merge_commit_pull_request=Rebase a poté vytvořit slučovací commit
pulls.squash_merge_pull_request=Vytvořit squash commit
pulls.merge_manually=Sloučeno ručně
@@ -1497,9 +1584,12 @@ pulls.merge_conflict_summary=Chybové hlášení
pulls.rebase_conflict=Sloučení selhalo: Došlo ke konfliktu při rebase commitu: %[1]s. Tip: Zkuste jinou strategii
pulls.rebase_conflict_summary=Chybové hlášení
; %[2]s %[3]s
-pulls.unrelated_histories=Sloučení selhalo: Základní revize nesdílí společnou historii. Tip: Zkuste jinou strategii
+pulls.unrelated_histories=Sloučení selhalo: Hlavní a základní revize nesdílí společnou historii. Tip: Zkuste jinou strategii
pulls.merge_out_of_date=Sloučení selhalo: Základ byl aktualizován při generování sloučení. Tip: Zkuste to znovu.
+pulls.head_out_of_date=Sloučení selhalo: Hlavní revize byla aktualizován při generování sloučení. Tip: Zkuste to znovu.
+pulls.push_rejected=Sloučení selhalo: Nahrání bylo zamítnuto. Zkontrolujte háčky Gitu pro tento repozitář.
pulls.push_rejected_summary=Úplná zpráva o odmítnutí
+pulls.push_rejected_no_message=Sloučení se nezdařilo: Nahrání bylo odmítnuto, ale nebyla nalezena žádná vzdálená zpráva. Zkontrolujte háčky gitu pro tento repozitář
pulls.open_unmerged_pull_exists=`Nemůžete provést operaci znovuotevření protože je tu čekající požadavek na natažení (#%d) s identickými vlastnostmi.`
pulls.status_checking=Některé kontroly jsou nedořešeny
pulls.status_checks_success=Všechny kontroly byly úspěšné
@@ -1519,9 +1609,20 @@ pulls.merge_instruction_hint=`Můžete také zobrazit
+search.code_no_results=Nebyl nalezen žádný zdrojový kód odpovídající hledanému výrazu.
+search.code_search_unavailable=V současné době není vyhledávání kódu dostupné. Obraťte se na správce webu.
settings=Nastavení
settings.desc=Nastavení je místo, kde můžete měnit nastavení repozitáře
@@ -1678,6 +1782,7 @@ settings.hooks=Webové háčky
settings.githooks=Háčky Gitu
settings.basic_settings=Základní nastavení
settings.mirror_settings=Nastavení zrcadla
+settings.mirror_settings.docs=Nastavte váš projekt pro automatické nahrávání a/nebo stahování změn z/do jiného repozitáře. Větve, značky a commity budou synchronizovány automaticky. Jak mohu zrcadlit repozitáře?
settings.mirror_settings.mirrored_repository=Zrcadlený repozitář
settings.mirror_settings.direction=Směr
settings.mirror_settings.direction.pull=Natáhnout
@@ -1709,6 +1814,9 @@ settings.tracker_url_format_error=Formát URL externího systému úkolu není p
settings.tracker_issue_style=Formát čísel externího systému úkolů
settings.tracker_issue_style.numeric=Číselný
settings.tracker_issue_style.alphanumeric=Alfanumerický
+settings.tracker_issue_style.regexp=Regulární výraz
+settings.tracker_issue_style.regexp_pattern=Vzor regulárního výrazu
+settings.tracker_issue_style.regexp_pattern_desc=První zachycená skupina bude použita místo {index}
.
settings.tracker_url_format_desc=Použijte zástupné symboly {user}
, {repo}
a {index}
pro uživatelské jméno, jméno repozitáře a číslo úkolu.
settings.enable_timetracker=Povolit sledování času
settings.allow_only_contributors_to_track_time=Povolit sledování času pouze přispěvatelům
@@ -1720,6 +1828,9 @@ settings.pulls.allow_rebase_merge_commit=Povolit rebase s vyžádaným slučovac
settings.pulls.allow_squash_commits=Povolit squash pro slučovací commity
settings.pulls.allow_manual_merge=Povolit označování požadavků na natažení jako ručně sloučené
settings.pulls.enable_autodetect_manual_merge=Povolit autodetekci ručních sloučení (Poznámka: V některých zvláštních případech může dojít k nesprávnému rozhodnutí)
+settings.pulls.allow_rebase_update=Povolit aktualizaci větve požadavku na natažení pomocí rebase
+settings.pulls.default_delete_branch_after_merge=Ve výchozím nastavení mazat větev požadavku na natažení po jeho sloučení
+settings.packages_desc=Povolit registr balíčků repozitáře
settings.projects_desc=Povolit projekty v repozitáři
settings.admin_settings=Nastavení správce
settings.admin_enable_health_check=Povolit kontrolu stavu repozitáře (git fsck)
@@ -1753,6 +1864,7 @@ settings.transfer_form_title=Zadejte jméno repozitáře pro potvrzení:
settings.transfer_in_progress=V současné době probíhá převod. Zrušte jej, pokud chcete převést tento repozitář jinému uživateli.
settings.transfer_notices_1=- Ztratíte přístup k repozitáři, pokud jej převedete na uživatele.
settings.transfer_notices_2=- Zůstane vám přístup k repozitáři, pokud jej převedete na organizaci kterou (spolu)vlastníte.
+settings.transfer_notices_3=- Pokud je repozitář soukromý a je předán jednotlivému uživateli, tato akce se ujistí, že uživatel má alespoň oprávnění ke čtení (a v případě potřeby změní oprávnění).
settings.transfer_owner=Nový vlastník
settings.transfer_perform=Provést převod
settings.transfer_started=Tento repozitář byl označen pro převod a čeká na potvrzení od „%s“
@@ -1786,6 +1898,7 @@ settings.confirm_delete=Smazat repozitář
settings.add_collaborator=Přidat spolupracovníka
settings.add_collaborator_success=Spolupracovník byl přidán.
settings.add_collaborator_inactive_user=Nelze přidat neaktivního uživatele jako spolupracovníka.
+settings.add_collaborator_owner=Vlastníka nelze přidat jako spolupracovníka.
settings.add_collaborator_duplicate=Spolupracovník je již přidán k tomuto repozitáři.
settings.delete_collaborator=Odstranit
settings.collaborator_deletion=Odstranit spolupracovníka
@@ -1817,6 +1930,8 @@ settings.webhook.headers=Hlavičky
settings.webhook.payload=Obsah
settings.webhook.body=Tělo zprávy
settings.webhook.replay.description=Zopakovat tento webový háček.
+settings.webhook.delivery.success=Událost byla přidána do fronty doručení. Může to trvat několik sekund, než se zobrazí v historii doručení.
+settings.githooks_desc=Jelikož háčky Gitu jsou spravovány Gitem samotným, můžete upravit soubory háčků k provádění uživatelských operací.
settings.githook_edit_desc=Je-li háček neaktivní, bude zobrazen vzorový obsah. Nebude-li zadán žádný obsah, háček bude vypnut.
settings.githook_name=Název háčku
settings.githook_content=Obsah háčku
@@ -1842,6 +1957,8 @@ settings.event_delete=Smazat
settings.event_delete_desc=Větev nebo značka smazána.
settings.event_fork=Rozštěpit
settings.event_fork_desc=Repozitář rozštěpen.
+settings.event_wiki=Wiki
+settings.event_wiki_desc=Wiki stránka vytvořena, přejmenována nebo smazána.
settings.event_release=Vydání
settings.event_release_desc=Vydání v tomto repozitáři bylo publikováno, aktualizováno nebo smazáno.
settings.event_push=Nahrát
@@ -1877,6 +1994,7 @@ settings.event_pull_request_sync_desc=Požadavek na natažení synchronizován.
settings.event_package=Balíček
settings.event_package_desc=Balíček vytvořen nebo odstraněn v repozitáři.
settings.branch_filter=Filtr větví
+settings.branch_filter_desc=Povolené větve pro události nahrání, vytvoření větve a smazání větve jsou určeny pomocí zástupného vzoru. Pokud je prázdný nebo *
, všechny události jsou ohlášeny. Podívejte se na dokumentaci syntaxe na github.com/gobwas/glob . Příklady: master
, {master,release*}
.
settings.active=Aktivní
settings.active_helper=Informace o spuštěných událostech budou odeslány na URL webového háčku.
settings.add_hook_success=Webový háček byl přidán.
@@ -1885,9 +2003,10 @@ settings.update_hook_success=Webový háček byl aktualizován.
settings.delete_webhook=Odstranit webový háček
settings.recent_deliveries=Nedávné dodávky
settings.hook_type=Typ háčku
-settings.slack_token=Poukázka
+settings.slack_token=Token
settings.slack_domain=Doména
settings.slack_channel=Kanál
+settings.add_web_hook_desc=Integrovat %s do vašeho repozitáře.
settings.web_hook_name_gitea=Gitea
settings.web_hook_name_gogs=Gogs
settings.web_hook_name_slack=Slack
@@ -1957,6 +2076,7 @@ settings.require_signed_commits_desc=Odmítnout nahrání do této větve pokud
settings.protect_protected_file_patterns=Chráněné vzory souborů (oddělené středníkem „\;“):
settings.protect_protected_file_patterns_desc=Chráněné soubory, které nemají povoleno být měněny přímo, i když uživatel má právo přidávat, upravovat nebo mazat soubory v této větvi. Více vzorů lze oddělit pomocí středníku („\;“). Podívejte se na github.com/gobwas/glob dokumentaci pro syntaxi vzoru. Příklady: .drone.yml
, /docs/**/*.txt
.
settings.protect_unprotected_file_patterns=Nechráněné vzory souborů (oddělené středníkem „\;“):
+settings.protect_unprotected_file_patterns_desc=Nechráněné soubory, které je možné měnit přímo, pokud má uživatel právo zápisu, čímž se obejde omezení push. Více vzorů lze oddělit pomocí středníku ('\;'). Podívejte se na github.com/gobwas/glob dokumentaci pro syntaxi vzoru. Příklady: .drone.yml
, /docs/**/*.txt
.
settings.add_protected_branch=Zapnout ochranu
settings.delete_protected_branch=Vypnout ochranu
settings.update_protect_branch_success=Ochrana větví pro větev „%s“ byla aktualizována.
@@ -1984,7 +2104,8 @@ settings.tags.protection.allowed.teams=Povolené týmy
settings.tags.protection.allowed.noone=Nikdo
settings.tags.protection.create=Chránit značku
settings.tags.protection.none=Neexistují žádné chráněné značky.
-settings.bot_token=Poukázka pro robota
+settings.tags.protection.pattern.description=Můžete použít jediné jméno nebo vzor glob nebo regulární výraz, který bude odpovídat více značek. Přečtěte si více v průvodci chráněnými značkami .
+settings.bot_token=Token pro robota
settings.chat_id=ID chatu
settings.matrix.homeserver_url=URL adresa Homeserveru
settings.matrix.room_id=ID místnosti
@@ -2043,7 +2164,7 @@ diff.git-notes=Poznámky
diff.data_not_available=Rozdílový obsah není dostupný
diff.options_button=Možnosti rozdílového porovnání
diff.show_diff_stats=Zobrazit statistiky
-diff.download_patch=Stáhněte soubor opravy
+diff.download_patch=Stáhněte soubor záplaty
diff.download_diff=Stáhněte rozdílový soubor
diff.show_split_view=Rozdělené zobrazení
diff.show_unified_view=Jednotný pohled
@@ -2066,7 +2187,9 @@ diff.file_suppressed=Rozdílový obsah nebyl zobrazen, protože je příliš vel
diff.file_suppressed_line_too_long=Rozdílový obsah nebyl zobrazen, protože některé řádky jsou příliš dlouhá
diff.too_many_files=Některé soubory nejsou zobrazny, neboť je v této revizi změněno mnoho souborů
diff.show_more=Zobrazit více
+diff.load=Načíst rozdílové porovnání
diff.generated=vygenerováno
+diff.vendored=vendorováno
diff.comment.placeholder=Zanechat komentář
diff.comment.markdown_info=Je podporována úprava vzhledu pomocí markdown.
diff.comment.add_single_comment=Přidat jeden komentář
@@ -2172,6 +2295,8 @@ topic.done=Hotovo
topic.count_prompt=Nelze vybrat více než 25 témat
topic.format_prompt=Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
+find_file.go_to_file=Přejít na soubor
+find_file.no_matching=Nebyl nalezen žádný odpovídající soubor
error.csv.too_large=Tento soubor nelze vykreslit, protože je příliš velký.
error.csv.unexpected=Tento soubor nelze vykreslit, protože obsahuje neočekávaný znak na řádku %d ve sloupci %d.
@@ -2253,7 +2378,9 @@ teams.leave.detail=Opustit %s?
teams.can_create_org_repo=Vytvořit repozitáře
teams.can_create_org_repo_helper=Členové mohou vytvářet nové repozitáře v organizaci. Tvůrce získá přístup správce do nového repozitáře.
teams.none_access=Bez přístupu
+teams.none_access_helper=Členové nemohou prohlížet ani dělat žádnou jinou akci pro tuto jednotku.
teams.general_access=Obecný přístup
+teams.general_access_helper=O oprávnění členů bude rozhodnuto níže uvedenou tabulkou oprávnění.
teams.read_access=Čtení
teams.read_access_helper=Členové mohou zobrazit a klonovat repozitáře týmu.
teams.write_access=Zápis
@@ -2307,9 +2434,11 @@ first_page=První
last_page=Poslední
total=Celkem: %d
+dashboard.new_version_hint=Gitea %s je nyní k dispozici, používáte %s. Pro více informací si přečtěte blog .
dashboard.statistic=Souhrn
dashboard.operations=Operace údržby
dashboard.system_status=Status systému
+dashboard.statistic_info=Databáze Gitea obsahuje %d uživatelů, %d organizací, %d veřejných klíčů, %d repozitářů, %d hlídání, %d oblíbení, ~%d akcí, %d přístupů, %d úkolů, %d komentářů, %d účtů sociálních sítí, %d sledování, %d zrcadel, %d vydání, %d zdrojů ověřování, %d webových háčků, %d milníků, %d štítků, %d háčků, %d týmů, %d úkolů změn, %d příloh.
dashboard.operation_name=Název operace
dashboard.operation_switch=Přepnout
dashboard.operation_run=Spustit
@@ -2381,6 +2510,7 @@ dashboard.gc_times=Časy GC
dashboard.delete_old_actions=Odstranit všechny staré akce z databáze
dashboard.delete_old_actions.started=Začalo odstraňování všech starých akcí z databáze.
dashboard.update_checker=Kontrola aktualizací
+dashboard.delete_old_system_notices=Odstranit všechna stará systémová upozornění z databáze
users.user_manage_panel=Správa uživatelských účtů
users.new_account=Vytvořit uživatelský účet
@@ -2415,8 +2545,12 @@ users.allow_import_local=Může importovat lokální repozitáře
users.allow_create_organization=Může vytvářet organizace
users.update_profile=Aktualizovat uživatelský účet
users.delete_account=Smazat uživatelský účet
+users.cannot_delete_self=Nemůžete smazat sami sebe
users.still_own_repo=Tento uživatel stále vlastní jeden nebo více repozitářů. Tyto repozitáře nejprve smažte nebo je převeďte.
users.still_has_org=Uživatel je člen organizace. Nejprve odstraňte uživatele ze všech organizací.
+users.purge=Vymazat uživatele
+users.purge_help=Vynuceně smazat uživatele a všechny repositáře, organizace a balíčky vlastněné uživatelem. Všechny komentáře budou také smazány.
+users.still_own_packages=Tento uživatel stále vlastní jeden nebo více balíčků. Nejprve odstraňte tyto balíčky.
users.deletion_success=Uživatelský účet byl smazán.
users.reset_2fa=Resetovat 2FA
users.list_status_filter.menu_text=Filtr
@@ -2507,6 +2641,7 @@ auths.attribute_name=Atribut křestního jména
auths.attribute_surname=Atribut příjmení
auths.attribute_mail=Atribut e-mailové adresy
auths.attribute_ssh_public_key=Atribut veřejného SSH klíče
+auths.attribute_avatar=Atributy avataru
auths.attributes_in_bind=Získat atributy v kontextu Bind DN
auths.allow_deactivate_all=Povolit prázdný výsledek hledání pro deaktivaci všech uživatelů
auths.use_paged_search=Použijte vyhledávání ve stránce
@@ -2515,6 +2650,7 @@ auths.filter=Uživatelský filtr
auths.admin_filter=Správcovský filtr
auths.restricted_filter=Filtr omezení
auths.restricted_filter_helper=Ponechte prázdné, pokud nechcete nastavit žádné uživatele jako omezené. Použijte hvězdičku („*“) pro nastavení všech uživatelů, kteří neodpovídají filtru administrátora, jako omezené.
+auths.verify_group_membership=Ověřit členství ve skupině v LDAP (ponechte prázdný filtr pro přeskočení)
auths.group_search_base=Základní DN pro hledání skupin
auths.group_attribute_list_users=Skupinový atribut obsahující seznam uživatelů
auths.user_attribute_in_group=Atribut uživatele ve skupině
@@ -2529,7 +2665,9 @@ auths.allowed_domains=Povolené domény
auths.allowed_domains_helper=Nechte prázdné k povolení všech domén. Oddělte více domén pomocí čárky („,“).
auths.skip_tls_verify=Přeskočit ověření TLS
auths.force_smtps=Vynutit SMTPS
+auths.force_smtps_helper=SMTPS se vždy používá na portu 465. Nastavením této hodnoty vynutíte použití SMTPS na jiných portech. (V opačném případě se na ostatních portech použije STARTTLS, pokud je podporován hostiteslkým serverem.)
auths.helo_hostname=HELO Hostname
+auths.helo_hostname_helper=Název hostitele odeslaný s HELO. Chcete-li odeslat aktuální název hostitele, ponechte prázdné.
auths.disable_helo=Zakázat HELO
auths.pam_service_name=Název služby PAM
auths.pam_email_domain=PAM e-mailová doména (volitelné)
@@ -2539,11 +2677,21 @@ auths.oauth2_clientID=Klientské ID (klíč)
auths.oauth2_clientSecret=Tajný klíč klienta
auths.openIdConnectAutoDiscoveryURL=OpenID URL pro automatické objevování
auths.oauth2_use_custom_url=Použijte vlastní URL místo výchozích
-auths.oauth2_tokenURL=URL poukázky
+auths.oauth2_tokenURL=URL tokenu
auths.oauth2_authURL=Autorizační URL
auths.oauth2_profileURL=URL profilu
auths.oauth2_emailURL=URL e-mailu
auths.skip_local_two_fa=Přeskočit lokální 2FA
+auths.skip_local_two_fa_helper=Ponechání nenastavené hodnoty znamená, že místní uživatelé s nastavenou funkcí 2FA budou muset při přihlašování stále projít funkcí 2FA
+auths.oauth2_tenant=Nájemník
+auths.oauth2_scopes=Další rozsahy
+auths.oauth2_required_claim_name=Požadovaný název tvrzení
+auths.oauth2_required_claim_name_helper=Nastavte toto jméno pro omezení přihlášení z tohoto zdroje pro uživatele s tvrzením s tímto jménem
+auths.oauth2_required_claim_value=Požadovaná hodnota tvrzení
+auths.oauth2_required_claim_value_helper=Nastavte tuto hodnotu pro omezení přihlášení z tohoto zdroje pro uživatele s tvrzením s tímto jménem a hodnotou
+auths.oauth2_group_claim_name=Název tvrzení poskytující názvy skupin pro tento zdroj. (nepovinné)
+auths.oauth2_admin_group=Hodnota tvrzení pro skupinu uživatelů administrátorů. (Volitelné - vyžaduje název tvrzení výše)
+auths.oauth2_restricted_group=Hodnota tvrzení pro skupinu omezených uživatelů. (Volitelné - vyžaduje název tvrzení výše)
auths.enable_auto_register=Povolit zaregistrování se
auths.sspi_auto_create_users=Automaticky vytvářet uživatele
auths.sspi_auto_create_users_helper=Povolit SSPI autentizační metodě automaticky vytvářet nové účty pro uživatele, kteří se poprvé přihlásili
@@ -2658,13 +2806,19 @@ config.queue_length=Délka fronty
config.deliver_timeout=Časový limit doručení
config.skip_tls_verify=Přeskočit verifikaci TLS
+config.mailer_config=Nastavení odesílání e-mailů
config.mailer_enabled=Zapnutý
+config.mailer_enable_helo=Povolit HELO
config.mailer_name=Název
+config.mailer_protocol=Protokol
+config.mailer_smtp_addr=Adresa SMTP
+config.mailer_smtp_port=Port SMTP
config.mailer_user=Uživatel
config.mailer_use_sendmail=Použít Sendmail
config.mailer_sendmail_path=Cesta k Sendmail
config.mailer_sendmail_args=Dodatečné argumenty pro Sendmail
config.mailer_sendmail_timeout=Časový limit Sandmail
+config.mailer_use_dummy=Fiktivní
config.test_email_placeholder=E-mail (např.: test@example.com)
config.send_test_mail=Odeslat zkušební e-mail
config.test_mail_failed=Odeslání testovacího e-mailu na „%s“ selhalo: %v
@@ -2724,6 +2878,8 @@ monitor.next=Příští čas spuštění
monitor.previous=Předešlý čas spuštění
monitor.execute_times=Vykonání
monitor.process=Spuštěné procesy
+monitor.stacktrace=Výpisy zásobníku
+monitor.goroutines=%d Go-rutiny
monitor.desc=Popis
monitor.start=Čas zahájení
monitor.execute_time=Doba provádění
@@ -2731,6 +2887,7 @@ monitor.last_execution_result=Výsledek
monitor.process.cancel=Zrušit proces
monitor.process.cancel_desc=Zrušení procesu může způsobit ztrátu dat
monitor.process.cancel_notices=Zrušit: %s ?
+monitor.process.children=Potomek
monitor.queues=Fronty
monitor.queue=Fronta: %s
monitor.queue.name=Název
@@ -2738,6 +2895,7 @@ monitor.queue.type=Typ
monitor.queue.exemplar=Typ vzoru
monitor.queue.numberworkers=Počet workerů
monitor.queue.maxnumberworkers=Maximální počet workerů
+monitor.queue.numberinqueue=Číslo ve frontě
monitor.queue.review=Konfigurace posouzení
monitor.queue.review_add=Posoudit/přidat workery
monitor.queue.configuration=Výchozí konfigurace
@@ -2745,6 +2903,7 @@ monitor.queue.nopool.title=Žádný fond workerů
monitor.queue.nopool.desc=Tato fronta obaluje jiné fronty ale sama o sobě nemá fond workerů.
monitor.queue.wrapped.desc=Zabalená fronta zabalí pomalou startující frontu ukládáním požadavků do vyrovnávací paměti. Nemá vlastní fond workerů.
monitor.queue.persistable-channel.desc=Trvalý kanál obaluje dvě fronty, frontu kanálu, která má vlastní fond workerů a vyrovnávací frontu pro přetrvávající požadavky z předchozích vypnutí. Nemá sám o sobě svůj fond workerů.
+monitor.queue.flush=Vyprázdnit worker
monitor.queue.pool.timeout=Časový limit
monitor.queue.pool.addworkers.title=Přidat workery
monitor.queue.pool.addworkers.submit=Přidat workery
@@ -2819,18 +2978,23 @@ comment_issue=`okomentoval/a problém %[3]s#%[2]s `
comment_pull=`okomentoval/a požadavek na natažení %[3]s#%[2]s `
merge_pull_request=`sloučil/a požadavek na natažení %[3]s#%[2]s `
transfer_repo=předal/a repozitář %s
uživateli/organizaci %s
-delete_tag=smazána značka %[2]s z %[3]s
+push_tag=nahrál/a značku %[3]s do %[4]s
+delete_tag=smazal/a značku %[2]s z %[3]s
delete_branch=smazal/a větev %[2]s z %[3]s
compare_branch=Porovnat
compare_commits=Porovnat %d revizí
compare_commits_general=Porovnat revize
mirror_sync_push=synchronizoval/a commity do %[3]s v %[4]s ze zrcadla
+mirror_sync_create=synchronizoval/a novou referenci %[3]s do %[4]s ze zrcadla
mirror_sync_delete=synchronizoval/a a smazal/a referenci %[2]s
v %[3]s ze zrcadla
approve_pull_request=`schválil/a %[3]s#%[2]s `
+reject_pull_request=`navrhl/a změny pro %[3]s#%[2]s `
publish_release=`vydal/a "%[4]s" v %[3]s `
review_dismissed=`zamítl/a posouzení z %[4]s pro %[3]s#%[2]s `
review_dismissed_reason=Důvod:
create_branch=vytvořil/a větev %[3]s v %[4]s
+starred_repo=si oblíbil/a %[2]s
+watched_repo=začal/a sledovat %[2]s
[tool]
ago=před %s
@@ -2891,9 +3055,15 @@ error.unit_not_allowed=Nejste oprávněni přistupovat k této části repozitá
title=Balíčky
desc=Správa balíčků repozitáře.
empty=Zatím nejsou žádné balíčky.
+empty.documentation=Další informace o registru balíčků naleznete v dokumentaci .
+empty.repo=Nahráli jste balíček, ale nezobrazil se zde? Přejděte na nastavení balíčku a propojte jej s tímto repozitářem.
filter.type=Typ
filter.type.all=Vše
filter.no_result=Váš filtr nepřinesl žádné výsledky.
+filter.container.tagged=Označeno
+filter.container.untagged=Neoznačeno
+published_by=Zveřejněno %[1]s od %[3]s
+published_by_in=Zveřejněno %[1]s od %[3]s v %[5]s
installation=Instalace
about=O tomto balíčku
requirements=Požadavky
@@ -2903,25 +3073,38 @@ details=Podrobnosti
details.author=Autor
details.project_site=Stránka projektu
details.license=Licence
+assets=Prostředky
versions=Verze
+versions.on=
versions.view_all=Zobrazit všechny
dependency.id=ID
dependency.version=Verze
+composer.registry=Nastavit tento registr v souboru ~/.composer/config.json
:
+composer.install=Pro instalaci balíčku pomocí Compposer spusťte následující příkaz:
+composer.documentation=Další informace o registru Composer naleznete v dokumentaci .
composer.dependencies=Závislosti
composer.dependencies.development=Vývojové závislosti
conan.details.repository=Repozitář
conan.registry=Nastavte tento registr z příkazového řádku:
+conan.install=Pro instalaci balíčku pomocí Conan spusťte následující příkaz:
+conan.documentation=Další informace o registru Conan naleznete v dokumentaci .
container.details.type=Typ obrazu
container.details.platform=Platforma
container.details.repository_site=Stránka repositáře
container.details.documentation_site=Stránka dokumentace
container.pull=Stáhněte obraz z příkazové řádky:
+container.digest=Výběr:
+container.documentation=Další informace o registru Container naleznete v dokumentaci .
+container.multi_arch=OS/architektura
container.layers=Vrstvy obrazů
container.labels=Štítky
container.labels.key=Klíč
container.labels.value=Hodnota
generic.download=Stáhnout balíček z příkazové řádky:
+generic.documentation=Další informace o obecném registru naleznete v dokumentaci .
helm.registry=Nastavte tento registr z příkazového řádku:
+helm.install=Pro instalaci balíčku spusťte následující příkaz:
+helm.documentation=Další informace o Helm registru naleznete v dokumentaci .
maven.registry=Nastavte tento registr ve vašem projektu pom.xml
souboru:
maven.install=Pro použití balíčku uveďte následující v bloku dependencies
v souboru pom.xml
:
maven.install2=Spustit pomocí příkazové řádky:
@@ -2937,8 +3120,13 @@ npm.install2=nebo ho přidejte do souboru package.json:
npm.documentation=Další informace o npm registru naleznete v dokumentaci .
npm.dependencies=Závislosti
npm.dependencies.development=Vývojové závislosti
+npm.dependencies.peer=Vzájemné závislosti
npm.dependencies.optional=Volitelné závislosti
npm.details.tag=Značka
+pub.install=Chcete-li nainstalovat balíček pomocí Dart, spusťte následující příkaz:
+pub.documentation=Další informace o registru Pub naleznete v dokumentaci .
+pub.details.repository_site=Stránka repositáře
+pub.details.documentation_site=Stránka dokumentace
pypi.requires=Vyžaduje Python
pypi.install=Pro instalaci balíčku pomocí pip spusťte následující příkaz:
pypi.documentation=Další informace o registru PyPI naleznete v dokumentaci .
@@ -2949,6 +3137,8 @@ rubygems.dependencies.development=Vývojové závislosti
rubygems.required.ruby=Vyžaduje verzi Ruby
rubygems.required.rubygems=Vyžaduje verzi RubyGem
rubygems.documentation=Další informace o registru RubyGems naleznete v dokumentaci .
+vagrant.install=Pro přidání Vagrant box spusťte následující příkaz:
+vagrant.documentation=Další informace o registru Vagrant naleznete v dokumentaci .
settings.link=Propojit tento balíček s repozitářem
settings.link.description=Pokud propojíte balíček s repozitářem, je tento balíček uveden v seznamu balíčků repozitáře.
settings.link.select=Vybrat repozitář
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 780b26e73f..ba10291c4c 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1899,6 +1899,7 @@ settings.confirm_delete = Delete Repository
settings.add_collaborator = Add Collaborator
settings.add_collaborator_success = The collaborator has been added.
settings.add_collaborator_inactive_user = Can not add an inactive user as a collaborator.
+settings.add_collaborator_owner = Can not add an owner as a collaborator.
settings.add_collaborator_duplicate = The collaborator is already added to this repository.
settings.delete_collaborator = Remove
settings.collaborator_deletion = Remove Collaborator
@@ -3034,6 +3035,9 @@ pin = Pin notification
mark_as_read = Mark as read
mark_as_unread = Mark as unread
mark_all_as_read = Mark all as read
+subscriptions = Subscriptions
+watching = Watching
+no_subscriptions = No subscriptions
[gpg]
default_key=Signed with default key
@@ -3093,6 +3097,7 @@ container.details.platform = Platform
container.details.repository_site = Repository Site
container.details.documentation_site = Documentation Site
container.pull = Pull the image from the command line:
+container.digest = Digest:
container.documentation = For more information on the Container registry, see the documentation .
container.multi_arch = OS / Arch
container.layers = Image Layers
diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini
index ade323eca9..6611d24e84 100644
--- a/options/locale/locale_ja-JP.ini
+++ b/options/locale/locale_ja-JP.ini
@@ -1231,6 +1231,8 @@ issues.new.add_reviewer_title=レビュー依頼
issues.choose.get_started=始める
issues.choose.blank=デフォルト
issues.choose.blank_about=デフォルトのテンプレートからイシューを作成。
+issues.choose.ignore_invalid_templates=無効なテンプレートが無視されました
+issues.choose.invalid_templates=無効なテンプレートが%v 件見つかりました
issues.no_ref=ブランチ/タグ指定なし
issues.create=イシューを作成
issues.new_label=新しいラベル
@@ -1896,6 +1898,7 @@ settings.confirm_delete=リポジトリを削除
settings.add_collaborator=共同作業者を追加
settings.add_collaborator_success=共同作業者を追加しました。
settings.add_collaborator_inactive_user=アクティベートされていないユーザーを共同作業者として追加することはできません。
+settings.add_collaborator_owner=共同作業者としてオーナーを追加することはできません。
settings.add_collaborator_duplicate=共同作業者として既にこのリポジトリに追加されています。
settings.delete_collaborator=削除
settings.collaborator_deletion=共同作業者の削除
@@ -1954,6 +1957,8 @@ settings.event_delete=削除
settings.event_delete_desc=ブランチやタグが削除されたとき。
settings.event_fork=フォーク
settings.event_fork_desc=リポジトリがフォークされたとき。
+settings.event_wiki=Wiki
+settings.event_wiki_desc=Wikiページが作成・名前変更・編集・削除されたとき。
settings.event_release=リリース
settings.event_release_desc=リポジトリでリリースが作成・更新・削除されたとき。
settings.event_push=プッシュ
@@ -3029,6 +3034,9 @@ pin=通知をピン留め
mark_as_read=既読にする
mark_as_unread=未読にする
mark_all_as_read=すべて既読にする
+subscriptions=購読
+watching=ウォッチ中
+no_subscriptions=購読しているものはありません
[gpg]
default_key=デフォルト鍵で署名
@@ -3088,6 +3096,7 @@ container.details.platform=プラットフォーム
container.details.repository_site=リポジトリサイト
container.details.documentation_site=ドキュメントサイト
container.pull=コマンドラインでイメージを取得します:
+container.digest=ダイジェスト:
container.documentation=Container レジストリの詳細については、 ドキュメント を参照してください。
container.multi_arch=OS / アーキテクチャ
container.layers=イメージレイヤー
diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini
index d291e7f1b6..6d6885e17f 100644
--- a/options/locale/locale_pt-BR.ini
+++ b/options/locale/locale_pt-BR.ini
@@ -277,6 +277,7 @@ org_no_results=Nenhuma organização correspondente foi encontrada.
code_no_results=Nenhum código-fonte correspondente ao seu termo de pesquisa foi encontrado.
code_search_results=Resultados da pesquisa por: '%s'
code_last_indexed_at=Última indexação %s
+relevant_repositories_tooltip=Repositórios que são forks ou que não possuem tópico, nem ícone e nem descrição estão ocultos.
relevant_repositories=Apenas repositórios relevantes estão sendo mostrados, mostrar resultados não filtrados .
@@ -1038,6 +1039,12 @@ file_view_raw=Ver original
file_permalink=Link permanente
file_too_large=O arquivo é muito grande para ser mostrado.
invisible_runes_header=`Este arquivo contém caracteres Unicode invisíveis!`
+invisible_runes_description=`Este arquivo contém caracteres Unicode invisíveis que podem ser processados de forma diferente do que aparece abaixo. Se seu caso de uso for intencional e legítimo, você pode ignorar com segurança esse aviso. Use o botão Escapar para revelar caracteres ocultos.`
+ambiguous_runes_header=`Esse arquivo contém caracteres Unicode ambíguos!`
+ambiguous_runes_description=`Este arquivo contém caracteres ambíguos Unicode que podem ser confundidos com outros no seu idioma atual. Se o seu caso de uso for intencional e legítimo, você pode ignorar com segurança este aviso. Use o botão Escapar para destacar esses caracteres.`
+invisible_runes_line=`Esta linha tem caracteres unicode invisíveis`
+ambiguous_runes_line=`Esta linha tem caracteres unicode ambíguos`
+ambiguous_character=`%[1]c [U+%04[1]X] é confundível com o %[2]c [U+%04[2]X]`
escape_control_characters=Escapar
unescape_control_characters=Desescapar
@@ -1225,6 +1232,7 @@ issues.choose.get_started=Primeiros passos
issues.choose.blank=Padrão
issues.choose.blank_about=Criar uma issue a partir do modelo padrão.
issues.choose.ignore_invalid_templates=Modelos inválidos foram ignorados
+issues.choose.invalid_templates=%v modelo(s) inválido(s) encontrado(s)
issues.no_ref=Nenhum branch/tag especificado
issues.create=Criar issue
issues.new_label=Nova etiqueta
@@ -1533,6 +1541,7 @@ pulls.remove_prefix=Remover o prefixo %s
pulls.data_broken=Este pull request está quebrado devido a falta de informação do fork.
pulls.files_conflicted=Este pull request tem alterações conflitantes com o branch de destino.
pulls.is_checking=Verificação de conflitos do merge está em andamento. Tente novamente em alguns momentos.
+pulls.is_ancestor=Este branch já está incluído no branch de destino. Não há nada para mesclar.
pulls.is_empty=As alterações neste branch já estão na branch de destino. Este será um commit vazio.
pulls.required_status_check_failed=Algumas verificações necessárias não foram bem sucedidas.
pulls.required_status_check_missing=Estão faltando algumas verificações necessárias.
@@ -1603,11 +1612,13 @@ pulls.merge_instruction_step2_desc=Faça merge das alterações e atualize no Gi
pulls.auto_merge_button_when_succeed=(Quando a verificação for bem-sucedida)
pulls.auto_merge_when_succeed=Mesclar automaticamente quando todas as verificações forem bem sucedidas
pulls.auto_merge_newly_scheduled=O merge do pull request foi agendado para quando todas as verificações forem bem-sucedidas.
+pulls.auto_merge_has_pending_schedule=%[1]s agendou este pull request para merge automático quando todas as verificações tiverem sucesso %[2]s.
pulls.auto_merge_cancel_schedule=Cancelar merge automático
pulls.auto_merge_not_scheduled=Este pull request não está programado para ser automaticamente mesclado.
pulls.auto_merge_canceled_schedule=O merge automático foi cancelado para este pull request.
+pulls.auto_merge_newly_scheduled_comment=`agendou este pull request para merge automático quando todas as verificações tiverem sucesso %[1]s`
pulls.auto_merge_canceled_schedule_comment=`cancelou o merge automático deste pull request quando todos as verificações tiverem sucesso %[1]s`
pulls.delete.title=Excluir este pull request?
@@ -1805,6 +1816,7 @@ settings.tracker_issue_style.numeric=Numérico
settings.tracker_issue_style.alphanumeric=Alfanumérico
settings.tracker_issue_style.regexp=Expressão Regular
settings.tracker_issue_style.regexp_pattern=Padrão de expressão regular
+settings.tracker_issue_style.regexp_pattern_desc=O primeiro grupo capturado será usado no lugar de {index}
.
settings.tracker_url_format_desc=Use os espaços reservados {user}
, {repo}
e {index}
para o nome de usuário, nome do repositório e o índice de problemas.
settings.enable_timetracker=Habilitar Cronômetro
settings.allow_only_contributors_to_track_time=Permitir que apenas os colaboradores acompanhem o contador de tempo
@@ -1886,6 +1898,7 @@ settings.confirm_delete=Excluir repositório
settings.add_collaborator=Adicionar colaborador
settings.add_collaborator_success=O colaborador foi adicionado.
settings.add_collaborator_inactive_user=Não é possível adicionar um usuário inativo como colaborador.
+settings.add_collaborator_owner=Não é possível adicionar um proprietário como um colaborador.
settings.add_collaborator_duplicate=O colaborador já está adicionado a este repositório.
settings.delete_collaborator=Remover
settings.collaborator_deletion=Remover colaborador
@@ -1944,6 +1957,8 @@ settings.event_delete=Excluir
settings.event_delete_desc=Branch ou tag deletado.
settings.event_fork=Fork
settings.event_fork_desc=Feito fork do repositório.
+settings.event_wiki=Wiki
+settings.event_wiki_desc=Página da wiki criada, renomeada, editada ou excluída.
settings.event_release=Versão
settings.event_release_desc=Versão publicada, atualizada ou excluída em um repositório.
settings.event_push=Push
@@ -2423,6 +2438,7 @@ dashboard.new_version_hint=Gitea %s está disponível, você está executando %s
dashboard.statistic=Resumo
dashboard.operations=Operações de manutenção
dashboard.system_status=Status do sistema
+dashboard.statistic_info=O banco de dados do Gitea contém %d usuários, %d organizações, %d chaves públicas, %d repositórios, %d observadores, %d favoritos, ~%d ações, %d acessos, %d issues, %d comentários, %d contas sociais, %d seguidores, %d espelhos, %d versões, %d fontes de autenticação, %d webhooks, %d marcos, %d etiquetas, %d tarefas hook, %d equipes, %d tarefas de atualização, %d anexos.
dashboard.operation_name=Nome da operação
dashboard.operation_switch=Trocar
dashboard.operation_run=Executar
@@ -2631,6 +2647,8 @@ auths.use_paged_search=Use a pesquisa paginada
auths.search_page_size=Tamanho da página
auths.filter=Filtro de usuário
auths.admin_filter=Filtro de administrador
+auths.restricted_filter=Filtro de restrição
+auths.restricted_filter_helper=Deixe em branco para não definir nenhum usuário como restrito. Use um asterisco ('*') para definir todos os usuários que não correspondem ao Filtro de administrador como restritos.
auths.group_attribute_list_users=Atributo do Grupo que Contém a Lista de Usuários
auths.enable_ldap_groups=Habilitar grupos do LDAP
auths.ms_ad_sa=Atributos de pesquisa do MS AD
@@ -2871,6 +2889,7 @@ monitor.queue.nopool.title=Nenhum conjunto de executores
monitor.queue.nopool.desc=Essa fila agrupa outras filas e não possui um conjunto de executores.
monitor.queue.wrapped.desc=Uma fila agrupada envolve uma fila inicial lenta, armazenando as solicitações da fila em um canal. Ela não possui um conjunto de executores em si.
monitor.queue.persistable-channel.desc=Um canal persistente envolve duas filas, uma fila de canais que tem seu próprio conjunto de executores e uma fila de nível para solicitações persistentes de encerramentos anteriores. Ela não tem um conjunto de executores em si.
+monitor.queue.flush=Liberar executor
monitor.queue.pool.timeout=Tempo de espera
monitor.queue.pool.addworkers.title=Adicionar executores
monitor.queue.pool.addworkers.submit=Adicionar executores
@@ -3023,6 +3042,7 @@ title=Pacotes
desc=Gerenciar pacotes do repositório.
empty=Não há pacotes ainda.
empty.documentation=Para obter mais informações sobre o registro de pacote, consulte a documentação .
+empty.repo=Você enviou um pacote, mas ele não está aqui? Vá para configurações do pacote e vincule-o a este repositório.
filter.type=Tipo
filter.type.all=Todos
filter.no_result=Seu filtro não produziu resultados.
@@ -3059,6 +3079,7 @@ container.details.platform=Plataforma
container.details.repository_site=Site do Repositório
container.details.documentation_site=Site da Documentação
container.pull=Puxe a imagem pela linha de comando:
+container.digest=Digest:
container.documentation=Para obter mais informações sobre o registro de Container, consulte a documentação .
container.multi_arch=S.O. / Arquitetura
container.layers=Camadas da Imagem
@@ -3088,6 +3109,8 @@ npm.dependencies.development=Dependências de Desenvolvimento
npm.dependencies.peer=Dependências Peer
npm.dependencies.optional=Dependências Opcionais
npm.details.tag=Tag
+pub.install=Para instalar o pacote usando Dart, execute o seguinte comando:
+pub.documentation=Para obter mais informações sobre o registro Pub, consulte a documentação .
pub.details.repository_site=Site do Repositório
pub.details.documentation_site=Site da Documentação
pypi.requires=Requer Python
@@ -3100,6 +3123,8 @@ rubygems.dependencies.development=Dependências de Desenvolvimento
rubygems.required.ruby=Requer o Ruby versão
rubygems.required.rubygems=Requer o RubyGem versão
rubygems.documentation=Para obter mais informações sobre o registro do RubyGems, consulte a documentação .
+vagrant.install=Para adicionar uma Vagrant box, execute o seguinte comando:
+vagrant.documentation=Para obter mais informações sobre o registro do Vagrant, consulte a documentação .
settings.link=Vincular este pacote a um repositório
settings.link.description=Se você vincular um pacote a um repositório, o pacote será listado na lista de pacotes do repositório.
settings.link.select=Selecionar Repositório
diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini
index d0b72fb3ac..133f7d8962 100644
--- a/options/locale/locale_pt-PT.ini
+++ b/options/locale/locale_pt-PT.ini
@@ -1898,6 +1898,7 @@ settings.confirm_delete=Eliminar repositório
settings.add_collaborator=Adicionar colaborador
settings.add_collaborator_success=O colaborador foi adicionado.
settings.add_collaborator_inactive_user=Não é possível adicionar um utilizador desabilitado como colaborador.
+settings.add_collaborator_owner=Não é possível adicionar um proprietário como um colaborador.
settings.add_collaborator_duplicate=O colaborador já tinha sido adicionado a este repositório.
settings.delete_collaborator=Remover
settings.collaborator_deletion=Remover colaborador
@@ -3033,6 +3034,9 @@ pin=Fixar notificação
mark_as_read=Marcar como lida
mark_as_unread=Marcar como não lida
mark_all_as_read=Marcar todas como lidas
+subscriptions=Subscrições
+watching=Vigiando
+no_subscriptions=Sem subscrições
[gpg]
default_key=Assinado com a chave padrão
@@ -3092,6 +3096,7 @@ container.details.platform=Plataforma
container.details.repository_site=Página web do repositório
container.details.documentation_site=Página web da documentação
container.pull=Puxar a imagem usando a linha de comandos:
+container.digest=Resumo:
container.documentation=Para obter mais informações sobre o registo do Container, consulte a documentação .
container.multi_arch=S.O. / Arquit.
container.layers=Camadas de imagem
diff --git a/options/locale/locale_sk-SK.ini b/options/locale/locale_sk-SK.ini
new file mode 100644
index 0000000000..9c4475ac5c
--- /dev/null
+++ b/options/locale/locale_sk-SK.ini
@@ -0,0 +1,1319 @@
+home=Domov
+dashboard=Nástenka
+explore=Preskúmať
+help=Pomoc
+logo=Logo
+sign_in=Prihlásiť sa
+sign_in_with=Prihlásiť sa pomocou
+sign_out=Odhlásiť sa
+sign_up=Registrácia
+link_account=Prepojiť účet
+register=Registrácia
+version=Verzia
+powered_by=Poháňané %s
+page=Stránka
+template=Šablóna
+language=Jazyk
+notifications=Upozornenia
+active_stopwatch=Sledovanie času aktivity
+create_new=Vytvoriť…
+user_profile_and_more=Profil a nastavenia…
+signed_in_as=Prihlásený ako
+enable_javascript=Táto stránka pracuje lepšie s JavaScript-om.
+toc=Obsah
+licenses=Licencie
+return_to_gitea=Naspäť do Gitea
+
+username=Používateľské meno
+email=E-mailová adresa
+password=Heslo
+access_token=Prístupový token
+re_type=Znova zadajte heslo
+captcha=CAPTCHA
+twofa=Dvojfaktorová autentifikácia
+twofa_scratch=Dvojfaktorový dočasný kód
+passcode=Prístupový kód
+
+webauthn_insert_key=Zadajte bezpečnostný kľúč
+webauthn_sign_in=Stlačte tlačidlo na vašom bezpečnostnom kľúči. Ak váš kľúč nemá tlačidlo, vyberte a zasunte ho znova.
+webauthn_press_button=Stlačte, prosím, tlačidlo na vašom bezpečnostnom kľúči…
+webauthn_use_twofa=Použite kód dvojfaktorového overenia z vášho telefónu
+webauthn_error=Nie je možné prečítať váš bezpečnostný kód.
+webauthn_unsupported_browser=Váš prehliadač aktuálne nepodporuje WebAuthn.
+webauthn_error_unknown=Vyskytla sa neznáma chyba. Skúste to znova.
+webauthn_error_insecure=WebAuthn podporuje iba bezpečné spojenia. Na testovanie cez HTTP môžete použiť "localhost" alebo "127.0.0.1"
+webauthn_error_unable_to_process=Server nemohol spracovať vašu požiadavku.
+webauthn_error_duplicated=Bezpečnostný kľúč nie je pre túto požiadavku povolený. Uistite sa, že kľúč ešte nie je zaregistrovaný.
+webauthn_error_empty=Musíte nastaviť meno pre tento kľúč.
+webauthn_error_timeout=Vypršal čas na čítanie vašeho kľúča. Znova načítajte túto stránku a skúste to opäť.
+webauthn_reload=Znovu načítať
+
+repository=Repozitár
+organization=Organizácia
+mirror=Zrkadlo
+new_repo=Nový repozitár
+new_migrate=Nová migrácia
+new_mirror=Nové zrkadlo
+new_fork=Nový fork repozitára
+new_org=Nová organizácia
+new_project=Nový projekt
+new_project_board=Nová nástenka projektu
+manage_org=Spravovať organizácie
+admin_panel=Administrácia
+account_settings=Nastavenia účtu
+settings=Nastavenia
+your_profile=Profil
+your_starred=Obľúbené
+your_settings=Nastavenia
+
+all=Všetko
+sources=Zdrojové kódy
+mirrors=Zrkadlá
+collaborative=Spolupráca
+forks=Forky
+
+activities=Aktivity
+pull_requests=Pull requesty
+issues=Úkoly
+milestones=Míľniky
+
+ok=OK
+cancel=Zrušiť
+save=Uložiť
+add=Pridať
+add_all=Pridať všetko
+remove=Odstrániť
+remove_all=Odstrániť všetko
+edit=Upraviť
+
+copy=Kopírovať
+copy_url=Kopírovať URL
+copy_branch=Kopírovať meno vetvy
+copy_success=Skopírované!
+copy_error=Kopírovanie zlyhalo
+
+write=Zapísať
+preview=Náhľad
+loading=Načítava sa…
+
+step1=Krok 1:
+step2=Krok 2:
+
+error=Chyba
+error404=Stránka, na ktorú sa pokúšate dostať, buď neexistuje , alebo nemáte oprávnenie na jej zobrazenie.
+
+never=Nikdy
+
+rss_feed=RSS kanál
+
+[error]
+occurred=Vyskytla sa chyba
+report_message=Ak ste si istí, že toto je chyba v Gitea, prehľadajte problémy na GitHub alebo otvorte nový issue podľa potreby.
+missing_csrf=Nesprávna žiadosť: neprítomný CSFR token
+invalid_csrf=Nesprávna žiadosť: nesprávny CSFR token
+not_found=Nebolo možné nájsť cieľ.
+network_error=Chyba siete
+
+[startpage]
+app_desc=Jednoducho prístupný vlastný Git
+install=Jednoduchá inštalácia
+install_desc=Jednoducho spusťte binárku pre vašu platformu, dodávanú ako Docker , alebo ju získajte ako balík .
+platform=Multiplatformový
+platform_desc=Gitea beží všade kde je možné preložiť Go : Windows, macOS, Linux, ARM, a podobne. Vyberte si!
+lightweight=Ľahká
+lightweight_desc=Gitea má minimálne požiadavky a môže bežať na Raspberry Pi. Šetrite energiou vášho stroja!
+license=Otvorený zdrojový kód
+license_desc=Získajte code.gitea.io/gitea ! Pridajte sa k nám a prispejte , aby bol tento projekt ešte lepší. Nehanbite sa byť prispievateľom!
+
+[install]
+install=Inštalácia
+title=Východzia konfigurácia
+docker_helper=Ak spúšťate Gitea v Docker kontajneri, prečítajte si dokumentáciu pred zmenou akýchkoľvek nastavení.
+require_db_desc=Gitea vyžaduje MySQL, PostgreSQL, MSSQL, SQLite3 alebo TiDB (MySQL protokol).
+db_title=Nastavenie databázy
+db_type=Typ databázy
+host=Host
+user=Používateľské meno
+password=Heslo
+db_name=Názov databázy
+db_helper=Poznámka pre používateľov MySQL: používajte, prosím, formát uloženia dát InnoDB a pokiaľ používate „utf8mb4“, verzia InnoDB musí byť väčšia než 5.6.
+db_schema=Schéma
+db_schema_helper=Nechajte prázdne pre predvolené nastavenie ("public").
+ssl_mode=SSL
+charset=Znaková sada
+path=Cesta
+sqlite_helper=Cesta k súboru databázy SQLite3. Ak spúšťate Gitea ako službu, zadajte absolútnu cestu.
+reinstall_error=Pokúšate sa inštalovať do existujúcej databázy Gitea
+reinstall_confirm_message=Opätovná inštalácia s existujúcou databázou Gitea môže spôsobiť viacero problémov. Vo väčšine prípadov by ste na spustenie Gitea mali použiť svoj existujúci súbor „app.ini“. Ak viete, čo robíte, potvrďte nasledujúce:
+reinstall_confirm_check_1=Údaje zašifrované pomocou SECRET_KEY v app.ini sa môžu stratiť: používatelia sa možno nebudú môcť prihlásiť s 2FA/OTP a zrkadlá možno nebudú fungovať správne. Začiarknutím tohto políčka potvrdzujete, že aktuálny súbor app.ini obsahuje správny kľúč SECRET_KEY.
+reinstall_confirm_check_2=Repozitáre a nastavenia možno bude potrebné znova synchronizovať. Začiarknutím tohto políčka potvrdzujete, že hooky pre repozitáre a súbor autorizovaných kľúčov znova zosynchronizujete manuálne. Potvrdzujete, že zabezpečíte, aby boli nastavenia úložiska a zrkadla správne.
+reinstall_confirm_check_3=Potvrdzujete, že ste si úplne istí, že táto Gitea beží so správnym umiestnením app.ini a že ste si istí, že ju musíte znova nainštalovať. Potvrdzujete, že beriete na vedomie vyššie uvedené riziká.
+err_empty_db_path=Cesta k databáze SQLite3 nesmie byť prázdna.
+no_admin_and_disable_registration=Nemôžete zakázať registráciu bez vytvorenia administrátorského účtu.
+err_empty_admin_password=Heslo administrátora nemôže byť prázdne.
+err_empty_admin_email=E-mail administrátora nemôže byť prázdny.
+err_admin_name_is_reserved=Používateľské meno administrátora je neplatné, používateľské meno je rezervované
+err_admin_name_pattern_not_allowed=Používateľské meno administrátora je neplatné, používateľské meno zodpovedá vyhradenému vzoru
+err_admin_name_is_invalid=Používateľské meno administrátora je neplatné
+
+general_title=Všeobecné nastavenia
+app_name=Názov webu
+app_name_helper=Sem môžete zadať meno vašej spoločnosti.
+repo_path=Koreňový adresár repozitárov
+repo_path_helper=Vzdialené úložiská Git sa uložia do tohto adresára.
+lfs_path=Koreňový adresár Git LFS
+lfs_path_helper=Súbory sledované systémom Git LFS budú uložené v tomto adresári. Ak chcete deaktivovať, ponechajte prázdne.
+run_user=Spustiť ako používateľ
+run_user_helper=Zadajte používateľské meno pod ktorým beží Gitea v operačnom systéme. Pozor: tento používateľ musí mať prístup ku koreňovému adresáru repozitára.
+domain=Doména serveru
+domain_helper=Adresa domény alebo hostiteľa serveru.
+ssh_port=Port SSH servera
+ssh_port_helper=Číslo portu na ktorom načúva SSH server. Keď ponecháte prázdne, SSH server zakážete.
+http_port=HTTP port pre Gitea
+http_port_helper=Číslo portu na ktorom počúva webový server Gitea.
+app_url=Základná URL Gitea
+app_url_helper=Základná adresa pre klonované HTTP(S) URL adresy a e-mailové upozornenia.
+log_root_path=Adresár logov
+log_root_path_helper=Do tohoto adresára budú uložené súbory protokolu.
+
+optional_title=Voliteľné nastavenia
+email_title=Nastavenia e-mailu
+smtp_addr=SMTP Host
+smtp_port=SMTP Port
+smtp_from=Odoslať e-mail ako
+smtp_from_helper=E-mailová adresa ktorú použije Gitea. Zadajte bežnú e-mailovú adresu alebo použite formát "Meno" .
+mailer_user=Používateľské meno SMTP
+mailer_password=SMTP heslo
+register_confirm=Registrácia vyžaduje potvrdenie e-mailu
+mail_notify=Povoliť e-mailové upozornenia
+server_service_title=Nastavenia servera a ostatných služieb
+offline_mode=Povoliť miestny režim
+offline_mode_popup=Zakázať siete doručovania obsahu tretích strán a poskytovať celý obsah lokálne.
+disable_gravatar=Zakázať Gravatar
+disable_gravatar_popup=Zakázať Gravatar a cudzie zdroje avatarov. Ak používateľ nenahrá avatara, použije sa predvolený.
+federated_avatar_lookup=Povoliť avatary z verejných zdrojov
+federated_avatar_lookup_popup=Povoliť Libavatar na vyhľadávanie avatarov z verejných zdrojov.
+disable_registration=Zakázať registráciu
+disable_registration_popup=Zakázať registráciu. Nové používateľské účty budú môcť vytvárať iba správci.
+allow_only_external_registration_popup=Povoliť registráciu iba skrze externé služby
+openid_signin=Povoliť prihlásenie pomocou OpenID
+openid_signin_popup=Povoliť používateľovi prihlásenie pomocou OpenID.
+openid_signup=Povoliť registráciu pomocou OpenID
+openid_signup_popup=Povoliť používateľskú registráciu založenú na OpenID.
+enable_captcha=Povoliť CAPTCHA pri registrácii
+enable_captcha_popup=Vyžadovať CAPTCHA validáciu pri registrácii používateľa.
+require_sign_in_view=Vyžadovať prihlásenie na prezeranie stránok
+require_sign_in_view_popup=Povoliť prístup k stránkam iba pre prihlásených používateľov. Návštevníci uvidia iba prihlasovaciu a registračnú stránku.
+admin_setting_desc=Vytvorenie správcovského účtu je nepovinné. Prvý zaregistrovaný používateľ sa stane automaticky správcom.
+admin_title=Nastavenia administrátorského účtu
+admin_name=Používateľské meno administrátora
+admin_password=Heslo
+confirm_password=Potvrdiť heslo
+admin_email=E-mailová adresa
+install_btn_confirm=Nainštalovať Gitea
+test_git_failed=Nie je možné otestovať príkaz 'git': %v
+sqlite3_not_available=Táto verzia Gitea nepodporuje SQLite3. Stiahnite si, prosím, oficiálnu verziu z %s (nie verziu "gobuild").
+invalid_db_setting=Nastavenia databázy sú neplatné: %v
+invalid_db_table=Databázová tabuľka '%s' je neplatná: %v
+invalid_repo_path=Koreňová cesta repozitára je neplatná: %v
+invalid_app_data_path=Cesta k údajom aplikácie je neplatná: %v
+run_user_not_match=Používateľské meno pre 'spustiť ako' nie je aktuálne používateľské meno: %s -> %s
+internal_token_failed=Nepodarilo sa vygenerovať interný token: %v
+secret_key_failed=Nepodarilo sa vygenerovať tajný kľúč: %v
+save_config_failed=Nepodarilo sa uložiť konfiguráciu: %v
+invalid_admin_setting=Nastavenie administrátorského účtu je neplatné: %v
+install_success=Vitajte! Ďakujeme že ste si vybrali Gitea. Veľa zábavy a opatrujte sa!
+invalid_log_root_path=Cesta k logom je neplatná: %v
+default_keep_email_private=Skrývanie e-mail adries ako predvolené
+default_keep_email_private_popup=Predvolene skryť e-mailové adresy nových používateľských účtov.
+default_allow_create_organization=Predvolene povoliť vytváranie organizácií
+default_allow_create_organization_popup=V predvolenom nastavení povoľte novým používateľským účtom vytvárať organizácie.
+default_enable_timetracking=Predvolene povoliť sledovanie času
+default_enable_timetracking_popup=Predvolene povoliť sledovanie času pre nové repozitáre.
+no_reply_address=Skrytá e-mailová doména
+no_reply_address_helper=Doménové meno pre používateľov so skrytou e-mailovou adresou. Napríklad, používateľ s menom 'joe' bude zalogovaný v Git-e ako 'joe@noreply.example.org' ak je skrytá e-mailová doména nastavená na 'noreply.example.org'.
+password_algorithm=Hašovací algoritmus hesla
+password_algorithm_helper=Nastavte algoritmus hašovania hesla. Algoritmy majú rozličné požiadavky a silu. Algoritmus `argon2` má síce dobré charakteristiky ale používa veľa pamäte a nemusí byť vhodný pre malé systémy.
+
+[home]
+uname_holder=Používateľské meno alebo emailová adresa
+password_holder=Heslo
+switch_dashboard_context=Prepnúť kontext nástenky
+my_repos=Repozitáre
+show_more_repos=Zobraziť ďalšie repozitáre…
+collaborative_repos=Kolaboratívne repozitáre
+my_orgs=Moje organizácie
+my_mirrors=Moje zrkadlá
+view_home=Zobraziť %s
+search_repos=Nájsť repozitár…
+filter=Ostatné filtre
+filter_by_team_repositories=Filtrovať podľa tímových repozitárov
+feed_of=Informačný kanál „%s“
+
+show_archived=Archivované
+show_both_archived_unarchived=Zobrazujú sa archivované aj nearchivované
+show_only_archived=Zobrazuje sa iba archivované
+show_only_unarchived=Zobrazuje sa iba nearchivované
+
+show_private=Súkromné
+show_both_private_public=Zobrazuje sa verejné aj súkromné
+show_only_private=Zobrazuje sa iba súkromné
+show_only_public=Zobrazuje sa iba verejné
+
+issues.in_your_repos=Vo vašich repozitároch
+
+[explore]
+repos=Repozitáre
+users=Používatelia
+organizations=Organizácie
+search=Hľadať
+code=Zdrojový kód
+search.fuzzy=Fuzzy
+search.match=Zhoda
+code_search_unavailable=Vyhľadávanie kódu momentálne nie je dostupné. Kontaktujte, prosím, správcu.
+repo_no_results=Nenašli sa zodpovedajúce repozitáre.
+user_no_results=Nenašli sa zodpovedajúci používatelia.
+org_no_results=Nenašli sa zodpovedajúce organizácie.
+code_no_results=Nenašiel sa žiaden zdrojový kód zodpovedajúci hľadanému výrazu.
+code_search_results=Výsledky vyhľadávania pre '%s'
+code_last_indexed_at=Naposledy indexované %s
+relevant_repositories_tooltip=Repozitáre, ktoré sú forkami alebo ktoré nemajú tému, žiadnu ikonu ani popis, sú skryté.
+relevant_repositories=Zobrazujú sa iba relevantné repozitáre, zobraziť nefiltrované výsledky .
+
+
+[auth]
+create_new_account=Zaregistrovať účet
+register_helper_msg=Máte už účet? Prihláste sa teraz!
+social_register_helper_msg=Máte už účet? Prepojte ho teraz!
+disable_register_prompt=Registrácia je zakázaná. Obráťte sa, prosím, na administrátora stránky.
+disable_register_mail=E-mailové potvrdzovanie registrácie je zakázané.
+manual_activation_only=Na dokončenie aktivácie kontaktujte správcu webu.
+remember_me=Zapamätať si toto zariadenie
+forgot_password_title=Zabudnuté heslo
+forgot_password=Zabudli ste heslo?
+sign_up_now=Potrebujete účet? Zaregistrujte sa teraz.
+sign_up_successful=Účet bol úspešne vytvorený.
+confirmation_mail_sent_prompt=Na adresu %s bol odoslaný nový potvrdzovací e-mail. Skontrolujte si, prosím, vašu doručenú poštu počas najbližších %s pre dokončenie procesu registrácie.
+must_change_password=Aktualizácia vášho hesla
+allow_password_change=Vyžiadať od používateľa zmenu hesla (doporučuje sa)
+reset_password_mail_sent_prompt=Na adresu %s bol odoslaný potvrdzovací e-mail. Skontrolujte si, prosím, vašu doručenú poštu počas najbližších %s pre dokončenie procesu obnovenia účtu.
+active_your_account=Aktivovať účet
+account_activated=Účet bol aktivovaný
+prohibit_login=Prihlásenie zakázané
+prohibit_login_desc=Váš účet má zakázané prihlásenie, kontaktuje, prosím, správcu servera.
+resent_limit_prompt=Pred malou chvíľou ste už požiadali o aktivačný email. Počkajte, prosím, 3 minúty a potom skúste znova.
+has_unconfirmed_mail=Ahoj %s, tvoja e-mailová adresa (%s ) je neoverená. Ak si ešte nedostal potvrdzovací e-mail, alebo je potrebné odoslať nový, klikni, prosím, na tlačidlo nižšie.
+resend_mail=Kliknite sem pre opätovné odoslanie aktivačného e-mailu
+email_not_associate=Táto e-mailová adresa nie je priradená k žiadnemu účtu.
+send_reset_mail=Odoslať e-mail pre obnovenie účtu
+reset_password=Obnovenie účtu
+invalid_code=Váš potvrdzovací kód je chybný alebo vypršala jeho platnosť.
+reset_password_helper=Obnoviť účet
+reset_password_wrong_user=Ste prihlásený ako %s, ale odkaz pre obnovenie účtu je pre %s
+password_too_short=Heslo nemôže obsahovať menej ako %d znakov.
+non_local_account=Externe overovaní používatelia nemôžu aktualizovať svoje heslo prostredníctvom webového rozhrania Gitea.
+verify=Overiť
+scratch_code=Pomocný kód
+use_scratch_code=Použiť pomocný kód
+twofa_scratch_used=Použili ste pomocný kód. Boli ste presmerovaní na stránku nastavenia dvojfaktorového overovania, takže môžete odstrániť registráciu vašeho zariadenia alebo vygenerovať nový pomocný kód.
+twofa_passcode_incorrect=Váš prístupový kód je nesprávny. Ak ste vaše zariadenie umiestnili nesprávne, použite pomocný kód na prihlásenie.
+twofa_scratch_token_incorrect=Váš pomocný kód je nesprávny.
+login_userpass=Prihlásiť sa
+login_openid=OpenID
+oauth_signup_tab=Zaregistrovať nový účet
+oauth_signup_title=Dokončiť nový účet
+oauth_signup_submit=Dokončiť účet
+oauth_signin_tab=Prepojiť s existujúcim účtom
+oauth_signin_title=Prihláste sa na overenie prepojeného účtu
+oauth_signin_submit=Prepojiť účet
+oauth.signin.error=Vyskytla sa chyba počas spracovania vašej autorizačnej žiadosti. Ak chyba pretrváva, kontaktujte, prosím, správcu.
+oauth.signin.error.access_denied=Žiadosť o autorizáciu bola zamietnutá.
+oauth.signin.error.temporarily_unavailable=Autorizácia zlyhala, pretože overovací server je dočasne nedostupný. Skúste to prosím neskôr.
+openid_connect_submit=Pripojiť
+openid_connect_title=Pripojiť k existujúcemu účtu
+openid_connect_desc=Zvolené OpenID URI je neznáme. Združte s novým účtom tu.
+openid_register_title=Vytvoriť nový účet
+openid_register_desc=Zvolené OpenID URI je neznáme. Združte s novým účtom tu.
+openid_signin_desc=Zadajte vaše OpenID URI. Napríklad: https://anne.me, bob.openid.org.cn alebo gnusocial.net/carry.
+disable_forgot_password_mail=Obnovenie účtu je zakázané pretože nie je nastavený e-mail. Kontaktujte, prosím, správcu webu.
+disable_forgot_password_mail_admin=Obnovenie účtu je možné iba po nastavení e-mailu. Pre povolenie obnovy účtu nastavte, prosím, e-mail.
+email_domain_blacklisted=Nemôžete sa zaregistrovať s vašou e-mailovou adresou.
+authorize_application=Autorizovať aplikáciu
+authorize_redirect_notice=Ak autorizujete túto aplikáciu, budete presmerovaní na %s.
+authorize_application_created_by=Túto aplikáciu vytvoril %s.
+authorize_application_description=Ak udelíte prístup, bude možné pristupovať a zapisovať do všetkých vašich informácií o účte, vrátane súkromných repozitárov a organizácií.
+authorize_title=Autorizovať „%s“ pre prístup k vášmu účtu?
+authorization_failed=Autorizácia zlyhala
+authorization_failed_desc=Autorizácia zlyhala pretože sme zistili neplatnú žiadosť. Kontaktujte, prosím, správcu aplikácie ktorou ste sa pokúšali autorizovať.
+sspi_auth_failed=SSPI overenie zlyhalo
+password_pwned=Zvolené heslo je na zozname ukradnutých hesiel ktoré boli v minulosti odhalené pri narušení verejných dát. Skúste znovu s iným heslom.
+password_pwned_err=Nie je možné dokončiť žiadosť na HaveIBeenPwned
+
+[mail]
+view_it_on=Zobraziť na %s
+link_not_working_do_paste=Nefunguje? Skúste ho skopírovať a vložiť do svojho prehliadača.
+hi_user_x=Ahoj %s ,
+
+activate_account=Aktivujte si svoj účet, prosím
+activate_account.title=%s, aktivujte si svoj účet, prosím
+activate_account.text_1=Ahoj %[1]s , ďakujeme za registráciu na %[2]s!
+activate_account.text_2=Pre aktiváciu vašeho účtu kliknite, prosím, na nasledovný odkaz do %s :
+
+activate_email=Overte svoju e-mailovú adresu
+activate_email.title=%s, overte prosím, svoju e-mailovú adresu
+activate_email.text=Pre overenie vašej e-mailovej adresy kliknite, prosím, na nasledovný odkaz do %s :
+
+register_notify=Vitajte v Gitea
+register_notify.title=%[1]s, vitajte v %[2]s
+register_notify.text_1=toto je e-mail potvrdzujúci vašu registráciu pre %s!
+register_notify.text_2=Teraz sa môžete prihlásiť s používateľským menom: %s.
+register_notify.text_3=Ak bol tento účet vytvorený pre vás, nastavte prosím najskôr svoje heslo .
+
+reset_password=Obnoviť váš účet
+reset_password.title=%s, požiadali ste o obnovenie vášho účtu
+reset_password.text=Pre obnovenie vašeho účtu kliknite, prosím, na nasledovný odkaz do %s :
+
+register_success=Registrácia prebehla úspešne
+
+issue_assigned.pull=@%[1]s vám pridelil pull request %[2] v repozitári %[3]s.
+issue_assigned.issue=@%[1]s vám pridelil úkol %[2]s v repozitári %[3]s.
+
+issue.x_mentioned_you=@%s vás zmienil:
+issue.action.force_push=%[1]s vynútil nahranie %[2]s z %[3]s do %[4]s.
+issue.action.push_1=@%[1]s nahral %[3]d commit do %[2]s
+issue.action.push_n=@%[1]s nahral %[3]d commity do %[2]s
+issue.action.close=@%[1]s uzavrel #%[2]d.
+issue.action.reopen=@%[1]s znovu otvoril #%[2]d.
+issue.action.merge=@%[1]s zlúčil #%[2]d do %[3]s.
+issue.action.approve=@%[1]s schválil tento pull request.
+issue.action.reject=@%[1]s požadoval zmeny v tomto pull requeste.
+issue.action.review=@%[1]s okomentoval tento pull request.
+issue.action.review_dismissed=@%[1]s zamietol poslednú recenziu od %[2]s pre tento pull request.
+issue.action.ready_for_review=@%[1]s označil tento pull request ako pripravený na revíziu.
+issue.action.new=@%[1] vytvoril/a #%[2]d.
+issue.in_tree_path=V %s:
+
+release.new.subject=%s v %s vydané
+release.new.text=@%[1]s vydal/a %[2]s v %[3]s
+release.title=Názov: %s
+release.note=Poznámka:
+release.downloads=Sťahovania:
+release.download.zip=Zdrojový kód (ZIP)
+release.download.targz=Zdrojový kód (TAR.GZ)
+
+repo.transfer.subject_to=%s by chcel preniesť "%s" do %s
+repo.transfer.subject_to_you=%s by chcel preniesť "%s" k vám
+repo.transfer.to_you=vy
+repo.transfer.body=Ak to chcete prijať alebo odmietnuť, navštívte %s alebo to jednoducho ignorujte.
+
+repo.collaborator.added.subject=%s vás pridal do %s
+repo.collaborator.added.text=Boli ste pridaný ako spolupracovník repozitára:
+
+[modal]
+yes=Áno
+no=Nie
+modify=Aktualizovať
+
+[form]
+UserName=Používateľské meno
+RepoName=Názov repozitára
+Email=E-mailová adresa
+Password=Heslo
+Retype=Znova zadajte heslo
+SSHTitle=Názov SSH kľúča
+HttpsUrl=HTTPS URL
+PayloadUrl=URL nákladu
+TeamName=Názov tímu
+AuthName=Názov autorizácie
+AdminEmail=E-mail administrátora
+
+NewBranchName=Názov novej vetvy
+CommitSummary=Zhrnutie commitu
+CommitMessage=Správa ku commitu
+CommitChoice=Výber commitu
+TreeName=Cesta k súboru
+Content=Obsah
+
+SSPISeparatorReplacement=Oddeľovač
+SSPIDefaultLanguage=Predvolený jazyk
+
+require_error=` nemôže byť prázdne.`
+alpha_dash_error=` by mal obsahovať iba alfanumerické znaky, pomlčku ('-') a podčiarkovník ('_').`
+alpha_dash_dot_error=` by mal obsahovať iba alfanumerické znaky, pomlčku ('-'), podčiarkovník ('_') a bodku ('.').`
+git_ref_name_error=` musí byť správny názov odkazu Git.`
+size_error=` musí byť dĺžky %s.`
+min_size_error=` musí obsahovať minimálne %s znakov.`
+max_size_error=` musí obsahovať maximálne %s znakov.`
+email_error=` nie je platná e-mailová adresa.`
+url_error=`'%s' nieje platná URL.`
+include_error=` musí obsahovať podreťazec '%s'.`
+glob_pattern_error=` glob vzor je neplatný: %s.`
+regex_pattern_error=` regex vzor je neplatný: %s.`
+unknown_error=Neznáma chyba:
+captcha_incorrect=Overovací kód CAPTCHA je nesprávny.
+password_not_match=Heslá sa nezhodujú.
+lang_select_error=Zvoľte jazyk zo zoznamu.
+
+username_been_taken=Používateľské meno je už obsadené.
+username_change_not_local_user=Používatelia overovaní inak ako lokálne si nemôžu zmeniť svoje používateľské meno.
+repo_name_been_taken=Meno repozitára sa už používa.
+repository_force_private=Je aktivované "Iba súkromne": súkromné repozitáre nesmú byť zverejnené.
+repository_files_already_exist=Súbory pre tento repozitár už existujú. Kontaktujte správcu systému.
+repository_files_already_exist.adopt=Súbory pre tento repozitár už existujú dajú sa iba prijať.
+repository_files_already_exist.delete=Súbory pre tento repozitár už existujú. Musíte ich zmazať.
+repository_files_already_exist.adopt_or_delete=Súbory pre tento repozitár už existujú. Buď ich prijmite, alebo zmažte.
+visit_rate_limit=Dosiahnutý limit rýchlosti dotazov pri vzdialenom prístupe.
+2fa_auth_required=Vzdialený prístup vyžaduje dvojfaktorové overovanie.
+org_name_been_taken=Názov organizácie sa už používa.
+team_name_been_taken=Názov tímu sa už používa.
+team_no_units_error=Povoliť prístup aspoň do jednej sekcie repozitára.
+email_been_used=E-mailová adresa sa už používa.
+email_invalid=Táto e-mailová adresa je neplatná.
+openid_been_used=Adresa OpenID '%s' sa už používa.
+username_password_incorrect=Používateľské meno alebo heslo je nesprávne.
+password_complexity=Heslo nesplňuje požiadavky na zložitosť:
+password_lowercase_one=Aspoň jedno malé písmeno
+password_uppercase_one=Aspoň jedno veľké písmeno
+password_digit_one=Aspoň jedna číslica
+password_special_one=Aspoň jeden špeciálny znak (interpunkcia, zátvorky, úvodzovky, atď.)
+enterred_invalid_repo_name=Zadaný názov repozitára je nesprávny.
+enterred_invalid_org_name=Zadaný názov organizácie je nesprávny.
+enterred_invalid_owner_name=Nové meno vlastníka nie je platné.
+enterred_invalid_password=Zadané heslo je nesprávne.
+user_not_exist=Tento používateľ neexistuje.
+team_not_exist=Tento tím neexistuje.
+last_org_owner=Nemôžete odstrániť posledného používateľa z tímu 'vlastníkov'. Musí existovať aspoň jeden vlastník pre organizáciu.
+cannot_add_org_to_team=Organizácia nemôže byť pridaná ako člen tímu.
+
+invalid_ssh_key=Nie je možné overiť váš SSH kľúč: %s
+invalid_gpg_key=Nie je možné overiť váš GPG kľúč: %s
+invalid_ssh_principal=Neplatná identita: %s
+unable_verify_ssh_key=Nie je možné overiť SSH kľúč; znovu skontrolujte chyby.
+auth_failed=Overenie zlyhalo: %v
+
+still_own_repo=Váš účet je vlastníkom jedného alebo viacerých repozitárov; najskôr ich zmažte alebo preveďte.
+still_has_org=Váš účet je členom jednej alebo viacerých organizácií; najskôr ich opustite.
+still_own_packages=Váš účet je vlastníkom jedného alebo viacerých repozitárov; najskôr ich zmažte alebo preveďte.
+org_still_own_repo=Váš účet je stále vlastníkom jedného alebo viacerých repozitárov; najskôr ich zmažte alebo preveďte.
+org_still_own_packages=Váš organizácia je vlastníkom jedného alebo viacerých repozitárov; najskôr ich zmažte alebo preveďte.
+
+target_branch_not_exist=Cieľová vetva neexistuje.
+
+[user]
+change_avatar=Zmeniť svoj avatar…
+join_on=Pripojil sa dňa
+repositories=Repozitáre
+activity=Verejná aktivita
+followers=Sledujúci
+starred=Obľúbené repozitáre
+watched=Sledované repozitáre
+projects=Projekty
+following=Sledovaní
+follow=Sledovať
+unfollow=Zrušiť sledovanie
+heatmap.loading=Načítanie teplotnej mapy…
+user_bio=Životopis
+disabled_public_activity=Tento používateľ zákázal verejnú viditeľnosť aktivity.
+
+form.name_reserved=Toto používateľské meno '%s' je vyhradené.
+form.name_pattern_not_allowed=Tento vzor '%s' nie je povolený v mene používateľa.
+form.name_chars_not_allowed=Používateľské meno '%s' obsahuje neplatné znaky.
+
+[settings]
+profile=Profil
+account=Účet
+appearance=Vzhľad
+password=Heslo
+security=Zabezpečenie
+avatar=Avatar
+ssh_gpg_keys=SSH / GPG kľúče
+social=Sociálne účty
+applications=Aplikácie
+orgs=Spravovať organizácie
+repos=Repozitáre
+delete=Zmazať účet
+twofa=Dvojfaktorové overenie
+account_link=Prepojené účty
+organization=Organizácie
+uid=Uid
+webauthn=Bezpečnostné kľúče
+
+public_profile=Verejný profil
+biography_placeholder=Povedzte nám niečo o sebe
+profile_desc=Vaša e-mailová adresa bude použitá pre oznámenia a iné operácie.
+password_username_disabled=Externí používatelia nemôžu meniť svoje používateľské meno. Kontaktujte, prosím, svojho administrátora kvôli detailom.
+full_name=Celé meno
+website=Webová stránka
+location=Miesto
+update_theme=Aktualizovať tému
+update_profile=Aktualizovať profil
+update_language=Aktualizovať jazyk
+update_language_not_found=Jazyk '%s' nie je dostupný.
+update_language_success=Jazyk bol aktualizovaný.
+update_profile_success=Váš profil sa aktualizoval.
+change_username=Vaše používateľské meno bolo zmenené.
+change_username_prompt=Poznámka: zmeny používateľského mena zmenia tiež URL účtu.
+change_username_redirect_prompt=Staré používateľské meno bude presmerované až pokiaľ nebude znovu obsadené.
+continue=Pokračovať
+cancel=Zrušiť
+language=Jazyk
+ui=Motív
+hidden_comment_types=Skryté typy komentárov
+comment_type_group_reference=Referencia
+comment_type_group_label=Štítok
+comment_type_group_milestone=Míľnik
+comment_type_group_assignee=Príjemca
+comment_type_group_title=Názov
+comment_type_group_branch=Vetva
+comment_type_group_time_tracking=Sledovanie času
+comment_type_group_deadline=Uzávierka
+comment_type_group_dependency=Závislosť
+comment_type_group_lock=Stav zámku
+comment_type_group_review_request=Žiadosť o revíziu
+comment_type_group_pull_request_push=Pridané commity
+comment_type_group_project=Projekt
+comment_type_group_issue_ref=Referenčné číslo úkolu
+saved_successfully=Nastavenia úspešne uložené.
+privacy=Súkromie
+keep_activity_private=Skryť aktivitu z profilovej stránky
+keep_activity_private_popup=Nastaviť aktivitu viditeľnú iba pre vás a administrátorov
+
+lookup_avatar_by_mail=Vyhľadať avatar pomocou e-mailovej adresy
+federated_avatar_lookup=Vyhľadanie avatarov z verejných zdrojov
+enable_custom_avatar=Použiť užívateľský avatar
+choose_new_avatar=Vybrať nový avatar
+update_avatar=Aktualizovať avatar
+delete_current_avatar=Odstrániť aktuálny avatar
+uploaded_avatar_not_a_image=Nahraný súbor nieje obrázok.
+uploaded_avatar_is_too_big=Nahraný súbor prekročil maximálnu veľkosť.
+update_avatar_success=Váš avatar sa aktualizoval.
+update_user_avatar_success=Užívateľov avatar bol aktualizovaný.
+
+change_password=Aktualizovať heslo
+old_password=Aktuálne heslo
+new_password=Nové heslo
+retype_new_password=Znova zadajte nové heslo
+password_incorrect=Aktuálne heslo nie je správne.
+change_password_success=Vaše heslo bolo aktualizované. Od teraz sa prihlasujte novým heslom.
+password_change_disabled=Externe overovaní používatelia nemôžu aktualizovať svoje heslo prostredníctvom webového rozhrania Gitea.
+
+emails=E-mailové adresy
+manage_emails=Správa e-mailových adries
+manage_themes=Nastavenie predvolenej témy
+manage_openid=Správa OpenID adries
+email_desc=Vaša primárna e-mailová adresa bude použitá pre oznámenia a iné operácie.
+theme_desc=Toto bude vaša predvolená téma vzhľadu naprieč stránkou.
+primary=Primárny
+activated=Aktivovaný
+requires_activation=Vyžaduje aktiváciu
+primary_email=Nastaviť ako primárny
+activate_email=Poslať aktiváciu
+activations_pending=Čakajúca aktivácia
+delete_email=Odstrániť
+email_deletion=Vymazať e-mailovú adresu
+email_deletion_desc=E-mailová adresa a pridružené informácie budú z vášho účtu odstránené. Commity Gitu s touto e-mailovou adresou zostanú nezmenené. Pokračovať?
+email_deletion_success=E-mailová adresa bola odstránená.
+theme_update_success=Vaša téma bola aktualizovaná.
+theme_update_error=Vybraná téma vzhľadu neexistuje.
+openid_deletion=Odstrániť OpenID adresu
+openid_deletion_desc=Pokiaľ odstránite OpenID adresu, nebudete ju môcť použiť k prihláseniu. Pokračovať?
+openid_deletion_success=OpenID adresa bola odstránená.
+add_new_email=Pridať novú e-mailovú adresu
+add_new_openid=Pridať nové OpenID URI
+add_email=Pridať e-mailovú adresu
+add_openid=Pridať OpenID URI
+add_email_confirmation_sent=Na adresu %s bol odoslaný potvrdzovací e-mail. Skontrolujte si, prosím, vašu doručenú poštu počas najbližších %s pre potvrdenie vašej e-mailovej adresy.
+add_email_success=Bola pridaná nová e-mailová adresa.
+email_preference_set_success=Boli pridané preferencie pre e-mailovú adresu.
+add_openid_success=Bola pridaná nová adresa OpenID.
+keep_email_private=Skryť e-mailovú adresu
+keep_email_private_popup=Vaša e-mailová adresa bola skrytá pred ostatnými používateľmi.
+openid_desc=OpenID dovoľuje delegovať overovanie na externého poskytovateľa.
+
+manage_ssh_keys=Spravovať SSH kľúče
+manage_ssh_principals=Spravovať SSH certifikačné identity
+manage_gpg_keys=Správa GPG kľúčov
+add_key=Pridať kľúč
+ssh_desc=Tieto verejné SSH kľúče sú prepojené s vašim účtom. Zodpovedajúce súkromné kľúče umožnia plný prístup k vašim repozitárom.
+principal_desc=Tieto SSH certifikačné identity sú prepojené s vašim účtom a umožňujú plný prístup k vašim repozitárom.
+gpg_desc=Tieto verejné GPG kľúče sú prepojené s vašim účtom. Uchovajte vaše súkromné kľúče v bezpečí, pretože umožňujú overenie commitov.
+ssh_helper=Potrebujete pomoc? Pozrite sa do príručky GitHub-u ako vytvoriť svoje SSH kľúče alebo ako riešiť bežné problémy s ktorými sa môžete stretnúť pri používaní SSH.
+gpg_helper=Potrebujete pomoc? Pozrite sa do príručky GitHub-u o GPG .
+add_new_key=Pridať SSH kľúč
+add_new_gpg_key=Pridať GPG kľúč
+key_content_ssh_placeholder=Začína sa s 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com' alebo 'sk-ssh-ed25519@openssh.com'
+key_content_gpg_placeholder=Začína sa s '-----BEGIN PGP PUBLIC KEY BLOCK-----'
+add_new_principal=Pridať identitu
+ssh_key_been_used=Tento SSH kľúč bol na server už pridaný.
+ssh_key_name_used=SSH kľúč s rovnakým menom už vo vašom účte existuje.
+ssh_principal_been_used=Táto identita bola na server už pridaná.
+gpg_key_id_used=Verejný GPG kľúč s rovnakým ID už existuje.
+gpg_no_key_email_found=Tento GPG kľúč sa nezhoduje zo žiadnou aktivovanou e-mailovou adresou prepojenou s vašim účtom. Stále ho môžete pridať, ak podpíšete poskytnutý token.
+gpg_key_matched_identities=Zhodujúce sa identity:
+gpg_key_matched_identities_long=Vložené identity v tomto kľúči zodpovedajú nasledujúcim aktivovaným e-mailovým adresám tohoto používateľa. Commity zodpovedajúce týmto e-mailovým adresám je možné overiť pomocou tohoto kľúča.
+gpg_key_verified=Overený kľúč
+gpg_key_verified_long=Kľúč bol overený pomocou tokenu a môže byť použitý k overeniu commitov zhodujúcich sa s ľubovoľnou vašou aktivovalo e-mailovou adresou pre tohoto užívateľa naviac k akejkoľvek odpovedajúcej identite tohoto kľúča.
+gpg_key_verify=Overiť
+gpg_invalid_token_signature=Zadaný GPG kľúč, podpis a token sa nezhodujú alebo je token zastaralý.
+gpg_token_required=Musíte zadať podpis pre nižšie uvedený token
+gpg_token=Token
+gpg_token_help=Podpis môžete vygenerovať pomocou:
+gpg_token_code=echo "%s" | gpg -a --default-key %s --detach-sig
+gpg_token_signature=Zakódovaný (ASCII) podpis GPG
+key_signature_gpg_placeholder=Začína s '-----BEGIN PGP SIGNATURE-----'
+verify_gpg_key_success=GPG kľúč '%s' bol overený.
+ssh_key_verified=Overený kľúč
+ssh_key_verified_long=Kľúč bol overený tokenom a možno ho použiť na overenie commitov zhodujúcich sa so všetkými aktivovanými e-mailovými adresami tohto používateľa.
+ssh_key_verify=Overiť
+ssh_invalid_token_signature=Zadaný SSH kľúč, podpis alebo token sa nezhodujú alebo je token zastaralý.
+ssh_token_required=Musíte zadať podpis pre nižšie uvedený token
+ssh_token=Token
+ssh_token_help=Podpis môžete vygenerovať pomocou:
+ssh_token_signature=Zakódovaný (ASCII) podpis SSH
+key_signature_ssh_placeholder=Začína s '-----BEGIN SSH SIGNATURE-----'
+verify_ssh_key_success=SSH kľúč '%s' bol overený.
+subkeys=Podkľúče
+key_id=ID kľúča
+key_name=Názov kľúča
+key_content=Obsah
+principal_content=Obsah
+add_key_success=SSH kľúč „%s“ bol pridaný.
+add_gpg_key_success=GPG kľúč „%s“ bol pridaný.
+add_principal_success=Bol pridaný SSH certifikát identity '%s'.
+delete_key=Odstrániť
+ssh_key_deletion=Odstrániť SSH kľúč
+gpg_key_deletion=Odstrániť GPG kľúč
+ssh_principal_deletion=Vymazať SSH certifikačnú identitu
+ssh_key_deletion_desc=Odstránenie SSH kľúča zruší jeho prístup k vašemu účtu. Pokračovať?
+gpg_key_deletion_desc=Odstránením GPG kľúča zneplatníte overenie commitov, ktoré sú ním podpísané. Pokračovať?
+ssh_principal_deletion_desc=Odstránenie SSH certifikátu identity zruší jeho prístup k vašemu účtu. Pokračovať?
+ssh_key_deletion_success=SSH kľúč bol odstránený.
+gpg_key_deletion_success=GPG kľúč bol odstránený.
+ssh_principal_deletion_success=Identita bola odstránená.
+add_on=Pridané
+valid_until=Platný do
+valid_forever=Platný navždy
+last_used=Naposledy použité
+no_activity=Žiadna nedávna aktivita
+can_read_info=Čítanie
+can_write_info=Zápis
+key_state_desc=Tento kľúč bol použitý behom posledných 7 dní
+token_state_desc=Tento token bol použitý behom posledných 7 dní
+principal_state_desc=Táto identita bola použitá behom posledných 7 dní
+show_openid=Zobraziť v profile
+hide_openid=Odstrániť z profilu
+ssh_disabled=SSH zakázané
+ssh_externally_managed=Tento kľúč SSH je pre tohto používateľa spravovaný externe
+manage_social=Spravovať súvisiace sociálne účty
+social_desc=Tieto sociálne účty sú prepojené s vaším účtom Gitea. Uistite sa, že ich všetky poznáte, pretože sa dajú použiť na prihlásenie do vášho účtu Gitea.
+unbind=Odpojiť
+unbind_success=Sociálny účet bol odpojený od vášho účtu Gitea.
+
+manage_access_token=Správa prístupových tokenov
+generate_new_token=Vygenerovať nový token
+tokens_desc=Tieto tokeny poskytujú prístup k vášmu účtu pomocou rozhrania Gitea API.
+new_token_desc=Aplikácie používajúce token majú úplný prístup k vášmu účtu.
+token_name=Názov tokenu
+generate_token=Vygenerovať token
+generate_token_success=Váš nový token bol vygenerovaný. Skopírujte ho teraz, pretože sa už nebude zobrazovať.
+generate_token_name_duplicate=%s už bol použitý ako názov aplikácie. Použite nový.
+delete_token=Vymazať
+access_token_deletion=Odstrániť prístupový token
+access_token_deletion_cancel_action=Zrušiť
+access_token_deletion_confirm_action=Vymazať
+access_token_deletion_desc=Odstránením tokenu zrušíte prístup k vášmu účtu pre aplikácie, ktoré ho používajú. To nie je možné vrátiť späť. Ďalej?
+delete_token_success=Token bol odstránený. Aplikácie, ktoré ho používajú, už nemajú prístup k vášmu účtu.
+
+manage_oauth2_applications=Správa OAuth2 aplikácií
+edit_oauth2_application=Upraviť aplikáciu OAuth2
+oauth2_applications_desc=OAuth2 aplikácie umožňujú aplikáciám tretej strany bezpečne autentifikovať používateľov v tejto inštancii Gitea.
+remove_oauth2_application=Odstrániť aplikáciu OAuth2
+remove_oauth2_application_desc=Odstránenie aplikácie OAuth2 zruší prístup všetkým podpísaným prístupovým tokenom. Ďalej?
+remove_oauth2_application_success=Aplikácia bola odstránená.
+create_oauth2_application=Vytvoriť novú aplikáciu OAuth2
+create_oauth2_application_button=Vytvoriť aplikáciu
+create_oauth2_application_success=Úspešne ste vytvorili novú aplikáciu OAuth2.
+update_oauth2_application_success=Úspešne ste aktualizovali aplikáciu OAuth2.
+oauth2_application_name=Názov aplikácie
+oauth2_select_type=Ktorý typ aplikácie sa hodí?
+oauth2_redirect_uri=Presmerovanie URI
+save_application=Uložiť
+oauth2_client_id=ID klienta
+oauth2_client_secret=Tajný klientsky kľúč
+oauth2_regenerate_secret=Obnoviť tajný kľúč
+oauth2_regenerate_secret_hint=Stratili ste svoj tajný kľúč?
+oauth2_client_secret_hint=Ak znova navštívite túto stránku, tajný kľúč nebude viditeľný. Prosím, uložte si svoj kľúč.
+oauth2_application_edit=Upraviť
+oauth2_application_create_description=Aplikácie OAuth2 poskytujú aplikáciám tretích strán prístup k používateľským účtom v tejto inštancii.
+oauth2_application_remove_description=Odstránenie aplikácie OAuth2 zabráni v prístupe autorizovaným používateľom v tejto inštancii. Ďalej?
+
+authorized_oauth2_applications=Autorizované aplikácie OAuth2
+authorized_oauth2_applications_description=Týmto aplikáciám tretích strán ste udelili prístup k vášmu osobnému účtu Gitea. Zrušte prístup pre aplikácie, ktoré už nie sú potrebné.
+revoke_key=Odvolať
+revoke_oauth2_grant=Odstrániť prístup
+revoke_oauth2_grant_description=Zrušenie prístupu tejto aplikáciu tretej strany zabráni tejto aplikácii v prístupe k vašim údajom. Ste si istý?
+revoke_oauth2_grant_success=Úspešne ste zrušili prístup.
+
+twofa_desc=Dvojstupňové overenie pridá ďalšiu vrstvu bezpečnosti k vášmu účtu.
+twofa_is_enrolled=Váš účet je momentálne používa dvojfaktorovú autentifikáciu.
+twofa_not_enrolled=Váš účet momentálne nepoužíva dvojfaktorovú autentifikáciu.
+twofa_disable=Vypnúť dvojfaktorovú autentifikáciu
+twofa_scratch_token_regenerate=Obnoviť token
+twofa_scratch_token_regenerated=Váš token je teraz %s. Uložte ho na bezpečnom mieste.
+twofa_enroll=Povoliť dvojfaktorové overovanie
+twofa_disable_note=V prípade potreby môžete zakázať dvojfaktorové overenie.
+twofa_disable_desc=Vypnutím dvojfaktorovej autentifikácie bude váš účet menej bezpečný. Ďalej?
+regenerate_scratch_token_desc=Ak ste svoj token nesprávne umiestnili alebo ste ho už použili na prihlásenie, môžete ho resetovať tu.
+twofa_disabled=Dvojfaktorové overovanie bolo vypnuté.
+scan_this_image=Naskenujte tento obrázok pomocou overovacej aplikácie:
+or_enter_secret=Alebo zadajte tajný kód: %s
+then_enter_passcode=A zadajte prístupový kód zobrazený v aplikácii:
+passcode_invalid=Prístupový kód je nesprávny. Skúste to znova.
+twofa_enrolled=Váš účet bol zaregistrovaný do dvojfaktorovej autentifikácie. Uložte si token (%s) na bezpečnom mieste, pretože sa zobrazuje iba raz!
+twofa_failed_get_secret=Nepodarilo sa získať tajomstvo.
+
+webauthn_register_key=Pridať bezpečnostný kľúč
+webauthn_nickname=Prezývka
+webauthn_delete_key=Odstrániť bezpečnostný kľúč
+webauthn_delete_key_desc=Ak odstránite bezpečnostný kľúč, už sa s ním nebudete môcť prihlásiť. Ďalej?
+
+manage_account_links=Spravovať prepojené kontá
+manage_account_links_desc=Tieto externé účty sú prepojené s vaším účtom Gitea.
+link_account=Pripojiť účet
+
+orgs_none=Nieste členom žiadnej organizácie.
+repos_none=Nevlastníte žiadne repozitáre
+
+delete_account=Odstrániť môj účet
+confirm_delete_account=Potvrdiť odstránenie
+delete_account_title=Odstrániť používateľský účet
+delete_account_desc=Naozaj chcete natrvalo odstrániť tento účet?
+
+email_notifications.enable=Povoliť e-mailové upozornenia
+email_notifications.onmention=E-mail iba pri zmienke
+email_notifications.disable=Vypnúť e-mailové upozornenia
+email_notifications.submit=Nastaviť predvoľby e-mailu
+
+visibility=Viditeľnosť používateľa
+visibility.public=Verejný
+visibility.public_tooltip=Viditeľné pre všetkých užívateľov
+visibility.limited=Obmedzený
+visibility.private=Súkromný
+
+[repo]
+new_repo_helper=Repozitár obsahuje všetky súbory projektu vrátane histórie revízií. Máte ho už inde? Migrovať repozitár.
+owner=Vlastník
+owner_helper=Niektoré organizácie sa nemusia zobraziť v rozbaľovacej ponuke z dôvodu maximálneho limitu počtu repozitárov.
+repo_name=Názov repozitára
+repo_name_helper=Dobrý názov repozitára sa zvyčajne skladá z krátkych, jedinečných a ľahko zapamätateľných kľúčových slov.
+repo_size=Veľkosť repozitára
+template=Šablóna
+template_select=Vyberte šablónu.
+template_helper=Z repozitára vytvoriť šablónu
+template_description=Šablóny repozitárov umožňujú používateľom vytvárať nové repozitáre s rovnakou štruktúrou, súbormi a voliteľnými nastaveniami.
+visibility=Viditeľnosť
+visibility_description=Vidieť ho bude iba vlastník alebo členovia organizácie, ak majú práva.
+visibility_helper=Nastaviť repozitár ako súkromný
+visibility_helper_forced=Váš správca vynucuje že nové repozitáre musia byť súkromné.
+visibility_fork_helper=(Zmena ovplyvní všetky forky.)
+fork_repo=Forknúť repozitár
+fork_from=Forknúť z
+already_forked=Už ste forkli %s
+fork_to_different_account=Fork na iný účet
+fork_visibility_helper=Viditeľnosť forknutého repozitára nemožno zmeniť.
+download_zip=Stiahnuť ZIP
+download_tar=Stiahnuť TAR.GZ
+download_bundle=Stiahnuť BUNDLE
+generate_repo=Generovať repozitár
+generate_from=Generovať z
+repo_desc=Popis
+repo_lang=Jazyk
+repo_gitignore_helper=Vyberte .gitignore šablóny.
+repo_gitignore_helper_desc=Zo zoznamu šablón pre bežné jazyky vyberte, ktoré súbory sa nemajú sledovať. Typické artefakty generované nástrojmi na vytváranie jednotlivých jazykov sú štandardne zahrnuté v .gitignore.
+issue_labels=Štítky úkolov
+issue_labels_helper=Vyberte skupinu štítkov úkolov.
+license=Licencia
+license_helper=Vybrať súbor s licenciou.
+license_helper_desc=Licencia určuje, čo ostatní môžu a nemôžu robiť s vaším kódom. Nie ste si istí, ktorý z nich je vhodný pre váš projekt? Pozrite si výber licencie.
+readme=README
+readme_helper=Vyberte šablónu súboru README.
+readme_helper_desc=Toto je miesto, kde môžete napísať úplný popis vášho projektu.
+auto_init=Inicializovať repozitár (pridá súbory .gitignore, License a README)
+trust_model_helper=Vyberte model dôveryhodnosti na overenie podpisu. Možnosti sú:
+trust_model_helper_collaborator=Spolupracovník: Dôverovať podpisom spolupracovníkov
+trust_model_helper_committer=Prispievateľ: Dôverovať podpisom, ktoré zodpovedajú prispievateľovi
+trust_model_helper_collaborator_committer=Spolupracovník+Prispievateľ: Dôverovať podpisom spolupracovníkov, ktorí zodpovedajú prispievateľovi
+trust_model_helper_default=Predvolené: Pre túto inštaláciu použiť predvolený model dôvery
+create_repo=Vytvoriť repozitár
+default_branch=Východzia vetva
+default_branch_helper=Predvolená vetva je základná vetva pre pull requesty a commity.
+mirror_prune=Vyčistiť
+mirror_interval=Interval zrkadlenia (platné sú 'h', 'm', 's'). 0 na vypnutie periodickej synchronizácie. (Minimálny interval: %s)
+mirror_interval_invalid=Interval zrkadlenia nie je platný.
+mirror_sync_on_commit=Synchronizovať, keď sú odovzdané commity
+mirror_address=Klonovať z URL
+mirror_lfs_endpoint=Koncový bod LFS
+mirror_lfs_endpoint_desc=Synchronizácia sa pokúsi použiť klonovaciu adresu URL na určenie servera LFS . Môžete tiež zadať vlastný koncový bod, ak sú dáta repozitára LFS uložené niekde inde.
+mirror_last_synced=Posledná synchronizácia
+mirror_password_placeholder=(Nezmenené)
+mirror_password_blank_placeholder=(Nenastavené)
+mirror_password_help=Zmenou používateľského mena vymažete uložené heslo.
+watchers=Sledujúci
+stargazers=Hviezdičky
+forks=Forky
+pick_reaction=Vyberte si reakciu
+reactions_more=a %d ďalších
+unit_disabled=Správca stránky zakázal túto sekciu repozitára.
+language_other=Iný
+adopt_search=Ak chcete vyhľadať neprijaté úložiská, zadajte používateľské meno... (pre vyhľadanie všetkých nechajte prázdne)
+adopt_preexisting_label=Prijať súbory
+adopt_preexisting=Prijať už existujúce súbory
+adopt_preexisting_content=Vytvoriť repozitár z %s
+adopt_preexisting_success=Prijaté súbory a vytvorený repozitár z %s
+delete_preexisting_label=Vymazať
+delete_preexisting=Vymazať už existujúce súbory
+delete_preexisting_content=Vymazať súbory v %s
+delete_preexisting_success=Vymazané neprijaté súbory v %s
+
+transfer.accept=Prijať prevod
+transfer.accept_desc=Previesť do "%s"
+transfer.reject=Odmietnuť prevod
+transfer.reject_desc=Zrušiť prevod do "%s"
+transfer.no_permission_to_accept=Nemáte povolenie na prijatie
+
+desc.private=Súkromný
+desc.public=Verejný
+desc.private_template=Súkromná šablóna
+desc.public_template=Šablóna
+desc.internal=Interný
+desc.internal_template=Interná šablóna
+desc.archived=Archivovaný
+
+template.items=Položky šablóny
+template.git_hooks=Git hooky
+template.webhooks=Webhooky
+template.issue_labels=Štítky úkolov
+template.invalid=Vyberte šablónu repozitára
+
+archive.issue.nocomment=Tento repozitár je archivovaný. Nemôžete komentovať úkoly.
+
+form.reach_limit_of_creation_1=Už ste dosiahli svoj limit pre %d repozitár.
+form.reach_limit_of_creation_n=Už ste dosiahli svoj limit pre %d repozitáre.
+form.name_reserved=Repozitár s názvom '%s' je rezervovaný.
+form.name_pattern_not_allowed=Vzor '%s' nie je povolený v mene repozitára.
+
+migrate_options_mirror_helper=Tento repozitár bude zrkadlom
+migrate_options_lfs_endpoint.description=Migrácia sa pokúsi použiť váš vzdialený Git na určenie servera LFS . Môžete tiež zadať vlastný koncový bod, ak sú dáta repozitára LFS uložené niekde inde.
+migrate_items_issues=Úkoly
+migrate_items_pullrequests=Pull requesty
+migrate_repo=Migrovať repozitár
+migrate.clone_address_desc=HTTP(S) alebo Git 'clone' URL pre klonovanie existujúceho repozitára
+migrate.github_token_desc=Sem môžete vložiť jeden alebo viac tokenov oddelených čiarkami, aby sa migrácia zrýchlila z dôvodu limitu rýchlosti rozhrania GitHub API. UPOZORNENIE: Zneužitie tejto funkcie môže porušiť zásady poskytovateľa služieb a viesť k zablokovaniu účtu.
+migrate.permission_denied=Nemáte povolené importovať miestne repozitáre.
+migrate.migrate_items_options=Na migráciu ďalších položiek je potrebný prístupový token
+migrate.migrating_failed.error=Chyba: %s
+migrate.migrating_failed_no_addr=Migrácia zlyhala.
+migrate.git.description=Migrujte repozitár iba z akejkoľvek služby Git.
+migrate.migrating_issues=Migrovanie úkolov
+
+forked_from=forknuté z
+fork_from_self=Repozitár, ktorý vlastníte, nemôžete forknúť.
+fork_guest_user=Prihláste sa, aby ste forkli repozitár.
+watch_guest_user=Pre sledovanie tohoto repozitára sa prihláste.
+unwatch=Už nesledovať
+watch=Sledovať
+unstar=Zrušiť hviezdičku
+star=Hviezdička
+fork=Forknúť
+download_archive=Stiahnuť repozitár
+
+no_desc=Bez popisu
+quick_guide=Rýchly sprievodca
+clone_this_repo=Klonovať tento repozitár
+create_new_repo_command=Vytvoriť nový repozitár v príkazovom riadku
+push_exist_repo=Odoslanie existujúceho repozitára z príkazového riadku
+empty_message=Tento repozitár ešte nemá obsah.
+broken_message=Údaje Git, ktoré sú základom tohto úložiska, sa nedajú prečítať. Kontaktujte správcu tejto inštancie alebo odstráňte toto úložisko.
+
+code=Zdrojový kód
+code.desc=Prístup k zdrojovému kódu, súborom, commitom a vetvám.
+branch=Vetva
+tree=Strom
+clear_ref=`Vymazať aktuálnu referenciu`.
+filter_branch_and_tag=Filter vetvy alebo tagu
+find_tag=Hľadať tag
+branches=Vetvy
+tags=Tagy
+issues=Úkoly
+pulls=Pull requesty
+project_board=Projekty
+
+commits=Commitov
+commit=Commit
+
+escape_control_characters=Ošetriť
+file_copy_permalink=Kopírovať trvalý odkaz
+view_git_blame=Zobraziť Git Blame
+video_not_supported_in_browser=Váš prehliadač nepodporuje HTML5 tag 'video'.
+audio_not_supported_in_browser=Váš prehliadač nepodporuje HTML5 tag 'audio'.
+stored_lfs=Uložené pomocou Git LFS
+symbolic_link=Symbolický odkaz
+commit_graph=Graf commitov
+
+editor.preview_changes=Náhľad zmien
+editor.edit_this_file=Upraviť súbor
+editor.fork_before_edit=Musíte forknúť tento repozitár pre vytvorenie alebo navrhnutie zmeny tohoto súboru.
+editor.delete_this_file=Vymazať súbor
+editor.or=alebo
+editor.cancel_lower=Zrušiť
+editor.commit_signed_changes=Odoslať podpísané zmeny
+editor.commit_changes=Odoslať zmeny
+editor.add=Pridať '%s'
+editor.update=Aktualizovať '%s'
+editor.delete=Vymazať '%s'
+editor.patch=Použiť patch
+editor.commit_directly_to_this_branch=Odoslať zmeny revízie priamo do vetvy %s .
+editor.cancel=Zrušiť
+editor.commit_empty_file_header=Odoslať prázdny súbor
+editor.commit_empty_file_text=Súbor, ktorý sa chystáte odoslať, je prázdny. Pokračovať?
+editor.cannot_commit_to_protected_branch=Nedá sa vytvoriť commit v chránenej vetve '%s'.
+editor.no_commit_to_branch=Nedá sa odoslať priamo do vetvy, pretože:
+editor.require_signed_commit=Vetva vyžaduje podpísaný commit
+
+commits.commits=Commity
+commits.no_commits=Žiadne spoločné commity. '%s' a '%s' majú úplne odlišnú históriu.
+commits.search=Hľadanie commitov…
+commits.search.tooltip=Môžete predradiť kľúčové slová ako „author:“, „committer:“, „after:“ nebo „before:“, napr. „pripojil author:Alice before:2019-04-01“.
+commits.find=Hľadať
+commits.search_all=Všetky vetvy
+commits.author=Autor
+commits.message=Správa
+commits.date=Dátum
+commits.older=Staršie
+commits.newer=Novšie
+commits.signed_by=Podpísané
+commits.signed_by_untrusted_user=Podpísané nedôveryhodným užívateľom
+commits.signed_by_untrusted_user_unmatched=Podpísané nedôveryhodným užívateľom, ktorý sa nezhoduje s prispievateľom
+commits.gpg_key_id=ID GPG kľúča
+commits.ssh_key_fingerprint=odtlačok SSH kľúča
+
+commit.actions=Akcie
+commit.revert=Vrátiť
+commit.revert-header=Vrátiť: %s
+commit.revert-content=Vyberte vetvu pre návrat na:
+commit.cherry-pick=Cherry-pick
+commit.cherry-pick-header=Cherry-pick: %s
+commit.cherry-pick-content=Vyberte vetvu pre cherry-pick na:
+
+ext_issues=Prístup k externým úkolom
+ext_issues.desc=Odkaz na externé sledovanie úkolov.
+
+projects=Projekty
+projects.title=Názov
+projects.new=Nový projekt
+projects.deletion=Vymazať projekt
+projects.edit=Upraviť projekty
+projects.modify=Aktualizovať projekt
+projects.type.none=Žiadny
+projects.board.new_submit=Poslať
+projects.open=Otvoriť
+projects.close=Zavrieť
+projects.board.assigned_to=Priradené k
+
+issues.filter_reviewers=Filtrovať revidentov
+issues.new=Nový úkol
+issues.new.no_reviewers=Žiadni revidenti
+issues.new.add_reviewer_title=Požiadať o revíziu
+issues.choose.blank_about=Vytvoriť úkol z predvolenej šablóny.
+issues.create=Vytvoriť úkol
+issues.filter_type.all_issues=Všetky úkoly
+issues.filter_type.review_requested=Požiadané o revíziu
+issues.filter_sort.mostforks=Najviac forkov
+issues.filter_sort.fewestforks=Najmenej forkov
+issues.context.reference_issue=Odkázať v novom úkole
+issues.closed_at=`uzavrel/a tento úkol %[2]s `
+issues.reopened_at=`znovuotvoril/a tento úkol %[2]s `
+issues.commit_ref_at=`odkázal na tento úkol z commitu %[2]s `
+issues.ref_issue_from=`odkazoval/a na tento úkol %[4]s %[2]s `
+issues.ref_closing_from=`odkazoval/a na pull request %[4]s, ktorý uzavrie tento úkol %[2]s `
+issues.ref_reopening_from=`odkazoval/a na pull request %[4]s, ktorý znovu otvorí tento úkol %[2]s `
+issues.ref_closed_from=`uzavrel/a tento úkol %[4]s %[2]s `
+issues.ref_reopened_from=`znovu otvoril/a tento úkol %[4]s %[2]s `
+issues.owner=Vlastník
+issues.re_request_review=Znovu požiadať o revíziu
+issues.is_stale=Od tejto kontroly došlo k zmenám v tomto pull requeste
+issues.remove_request_review=Odstrániť žiadosť o revíziu
+issues.remove_request_review_block=Nie je možné odstrániť žiadosť o revíziu
+issues.dismiss_review=Zamietnuť revíziu
+issues.dismiss_review_warning=Naozaj chcete zrušiť túto revíziu?
+issues.cancel=Zrušiť
+issues.label_open_issues=%d otvorených úkolov
+issues.label_deletion_desc=Odstránenie štítka ho odstráni zo všetkých úkolov. Ďalej?
+issues.lock.unknown_reason=Nie je možné uzamknúť úkol bez dôvodu.
+issues.lock_duplicate=Úkol nie je možné uzamknúť dvakrát.
+issues.unlock_error=Nie je možné odomknúť úkol, ktorý nie je uzamknutý.
+issues.lock.notice_1=- Ostatní používatelia nemôžu komentovať tento úkol.
+issues.lock.notice_3=- Tento úkol môžete v budúcnosti kedykoľvek znova odomknúť.
+issues.unlock.notice_1=- Všetci budú môcť znovu komentovať tento úkol.
+issues.unlock.notice_2=- Tento úkol môžete v budúcnosti kedykoľvek znova zamknúť.
+issues.lock.title=Uzamknúť konverzáciu o tomto úkole.
+issues.unlock.title=Odomknúť konverzáciu o tomto úkole.
+issues.comment_on_locked=Nemôžete komentovať zamknutý úkol.
+issues.delete.title=Vymazať tento úkol?
+issues.delete.text=Naozaj chcete odstrániť tento úkol? (Týmto natrvalo odstránite všetok obsah. Ak ho chcete ponechať archivovaný, zvážte radšej jeho zatvorenie.)
+issues.tracker_auto_close=Po vyriešení tohto úkolu sa časovač automaticky zastaví
+issues.tracking_already_started=`Už ste spustili sledovanie času v inom úkole !`
+issues.cancel_tracking=Zahodiť
+issues.add_time_cancel=Zrušiť
+issues.push_commit_1=pridal/a %d commit %s
+issues.push_commits_n=pridal/a %d commity %s
+issues.due_date_not_writer=Potrebujete práva na zápis do repozitára pre úpravy termínu dokončenia úkolu.
+issues.dependency.cancel=Zrušiť
+issues.dependency.pr_closing_blockedby=Zatvorenie tohto pull requestu je blokované nasledujúcimi úkolmi
+issues.dependency.issue_closing_blockedby=Zatvorenie tohto úkolu je blokované nasledujúcimi úkolmi
+issues.dependency.issue_close_blocks=Tento úkol blokuje uzavretie nasledujúcich úkolov
+issues.dependency.pr_close_blocks=Tento pull request blokuje uzavretie nasledujúcich úkolov
+issues.dependency.issue_close_blocked=Pred zatvorením tohto úkolu musíte zatvoriť všetky úkoly, ktoré blokujú tento úkol.
+issues.review.comment=revidoval %s
+issues.review.dismissed=zamietol revíziu od %s %s
+issues.review.wait=bol požiadaný o revidovanie %s
+issues.review.add_review_request=požiadal o revidovanie od %s %s
+issues.review.remove_review_request=odstránil žiadosť o revidovanie na %s %s
+issues.review.remove_review_request_self=odmietol revidovať %s
+issues.review.review=Revízia
+issues.review.reviewers=Revidenti
+
+
+pulls.desc=Povoliť pull requesty a revízie kódu.
+pulls.tab_commits=Commity
+pulls.data_broken=Tento pull request je nefunkčný z dôvodu chýbajúcich informácií o forku.
+pulls.blocked_by_rejection=Tento pull request obsahuje zmeny požadované oficiálnym recenzentom.
+pulls.blocked_by_official_review_requests=Tento pull request obsahuje oficiálne žiadosti o revíziu.
+pulls.waiting_count_1=%d čakajúca revízia
+pulls.waiting_count_n=%d čakajúcich revízií
+pulls.wrong_commit_id=ID commitu musí byť ID commitu v cieľovej vetve
+
+pulls.no_merge_not_ready=Tento pull request nie je pripravený na merge, skontrolujte stav revízie a kontroly stavu.
+pulls.rebase_merge_commit_pull_request=Rebase a potom vytvoriť zlučovací commit
+pulls.merge_commit_id=ID zlučovacieho commitu
+
+; %[2]s %[3]s
+
+
+
+
+
+milestones.cancel=Zrušiť
+
+
+
+
+activity.git_stats_commit_1=%d commit
+activity.git_stats_commit_n=%d commity
+
+
+settings.collaboration.owner=Vlastník
+settings.hooks=Webhooky
+settings.githooks=Git hooky
+settings.mirror_settings.mirrored_repository=Zrkadlený repozitár
+settings.pulls.allow_merge_commits=Povoliť Commit Merging
+settings.pulls.allow_rebase_merge_commit=Povoliť Rebase s explicitnými potvrdeniami commitov (--no-ff)
+
+
+settings.pulls.allow_squash_commits=Povoliť Squash pre merge commity
+settings.admin_enable_close_issues_via_commit_in_any_branch=Zavrieť úkol pomocou commitu v inej ako východzej vetve
+settings.new_owner_has_same_repo=Nový vlastník už repozitár s rovnakým názvom má. Vyberte, prosím, iné meno.
+settings.convert_fork=Konvertovať na bežný repozitár
+settings.convert_fork_desc=Tento fork môžete previesť na bežný repozitár. To nie je možné vrátiť späť.
+settings.convert_fork_notices_1=Táto operácia skonvertuje fork na bežný repozitár a nedá sa vrátiť späť.
+settings.convert_fork_confirm=Konvertovať repozitár
+settings.convert_fork_succeed=Fork bol prevedený na bežný repozitár.
+settings.transfer=Previesť vlastníctvo
+settings.transfer_notices_1=- Ak prenesiete repozitár na užívateľa, stratíte k nemu prístup.
+settings.transfer_notices_2=- Prístup k repozitáru si ponecháte, ak ho prevediete na organizáciu, ktorú (spolu)vlastníte.
+settings.transfer_owner=Nový vlastník
+settings.transfer_started=Tento repozitár bol označený na prenos a čaká na potvrdenie od "%s"
+settings.transfer_succeed=Repozitár bol prenesený.
+settings.trust_model.collaborator.desc=Platné podpisy spolupracovníkov tohto úložiska budú označené ako "dôveryhodné" - (bez ohľadu na to, či sa zhodujú s prispievateľom alebo nie). V opačnom prípade budú platné podpisy označené ako „nedôveryhodné“, ak sa podpis zhoduje s prispievateľom, a „nezhodujúce sa“, ak nie.
+settings.trust_model.committer=Prispievateľ
+settings.trust_model.committer.long=Prispievateľ: Dôverovať podpisom, ktoré sa zhodujú s prispievateľmi (toto sa zhoduje s GitHubom a prinúti Gitea podpísané príkazy, aby mali Gitea ako prispievateľa)
+settings.trust_model.collaboratorcommitter=Spolupracovník+Prispievateľ
+settings.trust_model.collaboratorcommitter.long=Spolupracovník+Prispievateľ: Dôverujte podpisom spolupracovníkov, ktorí zodpovedajú prispievateľovi
+settings.trust_model.collaboratorcommitter.desc=Platné podpisy spolupracovníkov tohto repozitára budú označené ako „dôveryhodné“, ak sa zhodujú s prispievateľom. V opačnom prípade budú platné podpisy označené ako „nedôveryhodné“, ak sa podpis zhoduje s prispievateľom, a v opačnom prípade budú „nezhodujúce sa“. To prinúti Giteu, aby bola označená ako autor na podpísaných odovzdaniach so skutočným autorom označeným ako Co-Authored-By: and Co-Committed-By: na konci commitu. Predvolený kľúč Gitea sa musí zhodovať s používateľom v databáze.
+settings.wiki_delete_desc=Odstránenie údajov wiki je trvalé a nemožno ho vrátiť späť.
+settings.wiki_delete_notices_1=- Natrvalo odstráni a zakáže wiki pre %s.
+settings.wiki_deletion_success=Údaje wiki boli vymazané.
+settings.delete=Odstrániť tento repozitár
+settings.delete_desc=Odstránenie repozitára je trvalé a nemožno ho vrátiť späť.
+settings.delete_notices_2=- Táto operácia natrvalo odstráni repozitár %s vrátane kódu, úkolov, komentárov, wiki a nastavení spolupracovníkov.
+settings.delete_notices_fork_1=- Forky tohto repozitára sa po vymazaní stanú nezávislými.
+settings.deletion_success=Repozitár bol vymazaný.
+settings.update_settings_success=Nastavenia repozitára boli aktualizované.
+settings.confirm_delete=Vymazať repozitár
+settings.add_collaborator_duplicate=Spolupracovník je už pridaný k tomuto repozitáru.
+settings.collaborator_deletion_desc=Odstránenie spolupracovníka zruší jeho prístup k tomuto repozitáru. Ďalej?
+settings.change_team_access_not_allowed=Zmena prístupu tímu k repozitáru bola obmedzená na vlastníka organizácie
+settings.team_not_in_organization=Tím nie je v rovnakej organizácii ako repozitár
+settings.add_team_duplicate=Tím už má repozitár
+settings.add_team_success=Tím má teraz prístup k repozitáru.
+settings.change_team_permission_tip=Oprávnenia tímu sa nastavujú na stránke s nastaveniami tímu a nedajú sa zmeniť pre jednotlivé repozitáre
+settings.delete_team_tip=Tento tím má prístup ku všetkým repozitárom a nemožno ho odstrániť
+settings.add_webhook=Pridať webhook
+settings.add_webhook.invalid_channel_name=Názov kanála webhooku nemôže byť prázdny a nemôže obsahovať iba znak #.
+settings.hooks_desc=Webhooky automaticky odosielajú požiadavky HTTP POST na server, keď sa spustia určité udalosti Gitea. Prečítajte si viac v sprievodcovi webhookmi .
+settings.webhook_deletion=Odstrániť webhook
+settings.webhook_deletion_desc=Odstránením webhooku sa vymažú jeho nastavenia a história doručovania. Ďalej?
+settings.webhook_deletion_success=Webhook bol odstránený.
+settings.webhook.test_delivery_desc=Otestujte tento webhook pomocou testovacej udalosti.
+settings.webhook.replay.description=Zopakujte tento webhook.
+settings.add_webhook_desc=Gitea odošle požiadavky POST
so špecifikovaným typom obsahu na cieľovú adresu URL. Prečítajte si viac v sprievodcovi webhookmi .
+settings.event_header_repository=Udalosti repozitára
+settings.event_fork=Fork
+settings.event_fork_desc=Repozitár forknutý
+settings.event_repository=Repozitár
+settings.event_repository_desc=Repozitár vytvorený alebo odstránený.
+settings.event_pull_request_review=Pull request bol revidovaný
+settings.event_pull_request_review_desc=Pull request schválený, odmietnutý alebo má revízne poznámky.
+settings.active_helper=Informácie o spustených udalostiach budú odoslané na túto URL webhooku.
+settings.add_hook_success=Webhook bol pridaný.
+settings.update_webhook=Aktualizácia Webhooku
+settings.update_hook_success=Webhook bol aktualizovaný.
+settings.delete_webhook=Odstrániť webhook
+settings.slack_token=Token
+settings.web_hook_name_gitea=Gitea
+settings.packagist_api_token=API token
+settings.protect_required_approvals_desc=Umožniť merge iba žiadostiam o natiahnutie s dostatočným počtom pozitívnych revízií.
+settings.require_signed_commits=Vyžadovať podpísané commity
+settings.block_rejected_reviews=Zablokovať zlúčenie pri zamietavých revíziách
+settings.block_rejected_reviews_desc=Zlúčenie nebude možné v prípade že oficiálni revidenti požadujú zmeny, aj keď je k dispozícii dostatok schválení.
+settings.block_on_official_review_requests=Blokovať zlúčenie pri oficiálnych žiadostiach o revíziu
+settings.block_on_official_review_requests_desc=Zlúčenie nebude možné v prípade že existujú oficiálne žiadosti o revíziu, aj keď je k dispozícii dostatok schválení.
+settings.bot_token=Token robota
+settings.matrix.access_token=Prístupový token
+settings.lfs_findcommits=Hľadať commity
+settings.lfs_lfs_file_no_commits=Pre tento súbor LFS sa nenašli žiadne commity
+
+diff.commit=commit
+diff.comment.start_review=Začať revíziu
+diff.review=Revízia
+diff.review.header=Odoslať revíziu
+diff.review.placeholder=Revízna poznámka
+diff.committed_by=odovzdal
+
+release.ahead.commits=%d commitov
+release.cancel=Zrušiť
+
+branch.delete_branch_has_new_commits=Vetva '%s' nemôže byť vymazaná, pretože po zlúčení boli pridané nové commity.
+
+
+
+
+
+
+[org]
+lower_repositories=repozitáre
+
+
+settings.visibility.private=Súkromná (viditeľné iba pre členov organizácie)
+settings.visibility.private_shortname=Súkromný
+
+settings.hooks_desc=Pridajte webhooky, ktoré sa spustia nad všetkými repozitármi v rámci tejto organizácie.
+
+
+members.private=Skrytý
+members.private_helper=zviditeľniť
+members.owner=Vlastník
+
+teams.owners_permission_desc=Vlastníci majú úplný prístup ku všetkým repozitárom a majú prístup správcu tejto organizácie.
+teams.repositories=Repozitáre týmu
+teams.specific_repositories=Konkrétne repozitáre
+teams.specific_repositories_helper=Členovia budú mať prístup iba k úložiskám, ktoré sú vyslovene pridané do tímu. Výber tejto možnosti neodstráni automaticky repozitáre, ktoré už boli pridané pomocou položky Všetky repozitáre .
+teams.all_repositories=Všetky repozitáre
+teams.all_repositories_helper=Tím má prístup ku všetkým repozitárom. Výberom tejto možnosti pridáte do tímu všetky existujúce repozitáre.
+teams.all_repositories_read_permission_desc=Tomuto tímu je pridelený prístup na čítanie ku všetkým repozitárom : členovia môžu prezerať a klonovať repozitáre.
+teams.all_repositories_write_permission_desc=Tomuto tímu je pridelený prístup na Zápis do všetkých repozitárov : členovia môžu prezerať a nahrávať do repozitárov.
+teams.all_repositories_admin_permission_desc=Tomuto tímu je pridelený Admin prístup ku všetkým repozitárom : členovia môžu prezerať, nahrávať do repozitárov a pridávať do nich spolupracovníkov.
+
+[admin]
+repositories=Repozitáre
+hooks=Webhooky
+
+dashboard.statistic_info=Databáza Gitea obsahuje %d používateľov, %d organizácií, %d verejných kľúčov, %d repozitárov, %d sledovaní, %d hviezd, %d akcií, %d prístupov, %d issues, %d komentárov, %d sociálnych účtov, %d nasledovaní, %d mirrorov, %d vydaní, %d zdrojov prihlásení, %d webhookov, %d míľnikov, %d štítkov, %d hook úloh, %d tímov, %d aktualizačných úloh, %d príloh.
+dashboard.delete_generated_repository_avatars=Odstrániť vygenerované avatary repozitárov
+
+
+
+
+repos.owner=Vlastník
+repos.private=Súkromný
+repos.forks=Forky
+
+packages.owner=Vlastník
+packages.repository=Repozitár
+
+defaulthooks=Defaultné webhooky
+defaulthooks.desc=Webhooky automaticky odosielajú požiadavky HTTP POST na server, keď sa spustia určité udalosti Gitea. Tu definované webhooky sú predvolené a skopírujú sa do všetkých nových repozitárov. Prečítajte si viac v sprievodcovi webhookmi .
+defaulthooks.add_webhook=Pridať defaultný webhook
+defaulthooks.update_webhook=Aktualizovať defaultný webhook
+
+systemhooks=Systémové webhooky
+systemhooks.desc=Webhooky automaticky odosielajú požiadavky HTTP POST na server, keď sa spustia určité udalosti Gitea. Tu definované webhooky budú pôsobiť na všetky repozitáre v systéme, takže zvážte akékoľvek dôsledky na výkon, ktoré to môže mať. Prečítajte si viac v sprievodcovi webhookmi .
+systemhooks.add_webhook=Pridať systémový webhook
+systemhooks.update_webhook=Aktualizovať defaultný webhook
+
+auths.enabled=Povolené
+auths.oauth2_tokenURL=Token URL
+auths.sspi_default_language=Predvolený jazyk používateľa
+auths.sspi_default_language_helper=Predvolený jazyk pre používateľov automaticky vytvorený metódou SSPI auth. Ak uprednostňujete automatické zisťovanie jazyka, nechajte pole prázdne.
+
+config.app_ver=Verzia Gitea
+config.app_url=Základná URL Gitea
+
+config.ssh_enabled=Povolené
+
+config.lfs_enabled=Povolené
+
+
+config.default_keep_email_private=Skrývanie e-mail adries ako predvolené
+
+config.webhook_config=Nastavenie webhooku
+
+config.mailer_enabled=Povolené
+config.mailer_enable_helo=Povolené HELO
+
+config.oauth_enabled=Povolené
+
+
+
+
+
+
+monitor.process.cancel=Zrušiť proces
+monitor.queue.review=Konfigurácia revidovania
+monitor.queue.review_add=Revidovať/Pridať revidentov
+
+
+
+
+[action]
+compare_commits=Porovnať %d commitov
+compare_commits_general=Porovnať commity
+review_dismissed=`odmietnutá revízia od %[4]s pre %[3]s#%[2]s `
+
+[tool]
+
+[dropzone]
+
+[notification]
+
+[gpg]
+error.no_committer_account=Žiadny účet nie je prepojený s e-mailovou adresou prispievateľa
+error.not_signed_commit=Nie je podpísaný commit
+
+[units]
+
+[packages]
+conan.details.repository=Repozitár
+container.details.repository_site=Stránka repozitára
+pub.details.repository_site=Stránka repozitára
+
diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini
index c19899529a..dfaefb7d62 100644
--- a/options/locale/locale_tr-TR.ini
+++ b/options/locale/locale_tr-TR.ini
@@ -3092,6 +3092,7 @@ container.details.platform=Platform
container.details.repository_site=Depo Sitesi
container.details.documentation_site=Belge Sitesi
container.pull=Görüntüyü komut satırını kullanarak çekin:
+container.digest=Özet:
container.documentation=Taşıyıcı kütüğü hakkında daha fazla bilgi için, belgeye bakabilirsiniz.
container.multi_arch=İşletim Sistemi / Mimari
container.layers=Görüntü Katmanları
diff --git a/package-lock.json b/package-lock.json
index ef534bf879..9e613422d0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,17 +9,18 @@
"dependencies": {
"@claviska/jquery-minicolors": "2.3.6",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-2",
- "@primer/octicons": "17.4.1",
+ "@primer/octicons": "17.5.0",
"add-asset-webpack-plugin": "2.0.1",
"css-loader": "6.7.1",
"dropzone": "6.0.0-beta.2",
"easymde": "2.17.0",
- "esbuild-loader": "2.19.0",
+ "esbuild-loader": "2.20.0",
"escape-goat": "4.0.0",
- "fast-glob": "3.2.11",
+ "fast-glob": "3.2.12",
"font-awesome": "4.7.0",
- "jquery": "3.6.0",
+ "jquery": "3.6.1",
"jquery.are-you-sure": "1.9.0",
+ "katex": "0.16.2",
"less": "4.1.3",
"less-loader": "11.0.0",
"license-checker-webpack-plugin": "0.2.1",
@@ -46,23 +47,23 @@
"wrap-ansi": "8.0.1"
},
"devDependencies": {
- "@playwright/test": "1.25.1",
+ "@playwright/test": "1.25.2",
"@stoplight/spectral-cli": "6.5.1",
- "eslint": "8.22.0",
+ "eslint": "8.23.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-jquery": "1.5.1",
"eslint-plugin-sonarjs": "0.15.0",
"eslint-plugin-unicorn": "43.0.2",
"eslint-plugin-vue": "9.4.0",
- "jest": "28.1.3",
- "jest-environment-jsdom": "28.1.3",
- "jest-extended": "3.0.2",
+ "jest": "29.0.3",
+ "jest-environment-jsdom": "29.0.3",
+ "jest-extended": "3.1.0",
"markdownlint-cli": "0.32.2",
"postcss-less": "6.0.0",
"stylelint": "14.11.0",
"stylelint-config-standard": "28.0.0",
"svgo": "2.8.0",
- "updates": "13.1.4"
+ "updates": "13.1.5"
},
"engines": {
"node": ">= 14.0.0"
@@ -100,30 +101,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
- "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
+ "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz",
- "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
+ "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-module-transforms": "^7.18.9",
- "@babel/helpers": "^7.18.9",
- "@babel/parser": "^7.18.13",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helpers": "^7.19.0",
+ "@babel/parser": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -148,12 +149,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
+ "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.13",
+ "@babel/types": "^7.19.0",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
@@ -176,12 +177,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
- "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
+ "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.18.8",
+ "@babel/compat-data": "^7.19.0",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.20.2",
"semver": "^6.3.0"
@@ -212,13 +213,13 @@
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
@@ -249,9 +250,9 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
+ "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
@@ -259,18 +260,18 @@
"@babel/helper-simple-access": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+ "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -328,14 +329,14 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
- "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
+ "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
@@ -427,9 +428,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
+ "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -498,6 +499,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -601,9 +617,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
- "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
+ "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
@@ -626,19 +642,19 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
+ "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
+ "@babel/generator": "^7.19.0",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/parser": "^7.19.0",
+ "@babel/types": "^7.19.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -656,9 +672,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
+ "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.18.10",
@@ -714,9 +730,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
- "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz",
+ "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==",
"cpu": [
"loong64"
],
@@ -729,14 +745,14 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
- "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz",
+ "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.3.2",
+ "espree": "^9.4.0",
"globals": "^13.15.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -746,6 +762,9 @@
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/@eslint/eslintrc/node_modules/ajv": {
@@ -794,6 +813,19 @@
"url": "https://github.com/sponsors/nzakas"
}
},
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
@@ -909,60 +941,59 @@
}
},
"node_modules/@jest/console": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
- "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.0.3.tgz",
+ "integrity": "sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz",
- "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.0.3.tgz",
+ "integrity": "sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/reporters": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/reporters": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^28.1.3",
- "jest-config": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-resolve-dependencies": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
- "jest-watcher": "^28.1.3",
+ "jest-changed-files": "^29.0.0",
+ "jest-config": "^29.0.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-resolve-dependencies": "^29.0.3",
+ "jest-runner": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
+ "jest-watcher": "^29.0.3",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
- "rimraf": "^3.0.0",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -974,88 +1005,89 @@
}
},
"node_modules/@jest/environment": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz",
- "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz",
+ "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
- "jest-mock": "^28.1.3"
+ "jest-mock": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.0.3.tgz",
+ "integrity": "sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ==",
"dev": true,
"dependencies": {
- "expect": "^28.1.3",
- "jest-snapshot": "^28.1.3"
+ "expect": "^29.0.3",
+ "jest-snapshot": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
- "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.0.3.tgz",
+ "integrity": "sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q==",
"dev": true,
"dependencies": {
- "jest-get-type": "^28.0.2"
+ "jest-get-type": "^29.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz",
- "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz",
+ "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-message-util": "^29.0.3",
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz",
- "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.0.3.tgz",
+ "integrity": "sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w==",
"dev": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/types": "^28.1.3"
+ "@jest/environment": "^29.0.3",
+ "@jest/expect": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "jest-mock": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz",
- "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.0.3.tgz",
+ "integrity": "sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/console": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@jridgewell/trace-mapping": "^0.3.15",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -1067,9 +1099,9 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-worker": "^29.0.3",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -1077,7 +1109,7 @@
"v8-to-istanbul": "^9.0.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -1089,94 +1121,94 @@
}
},
"node_modules/@jest/schemas": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
- "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz",
+ "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==",
"dev": true,
"dependencies": {
"@sinclair/typebox": "^0.24.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/source-map": {
- "version": "28.1.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz",
- "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz",
+ "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==",
"dev": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jridgewell/trace-mapping": "^0.3.15",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-result": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz",
- "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.0.3.tgz",
+ "integrity": "sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg==",
"dev": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz",
- "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz",
+ "integrity": "sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^28.1.3",
+ "@jest/test-result": "^29.0.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz",
- "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.0.3.tgz",
+ "integrity": "sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/types": "^29.0.3",
+ "@jridgewell/trace-mapping": "^0.3.15",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-util": "^29.0.3",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
"write-file-atomic": "^4.0.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/types": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
- "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.0.3.tgz",
+ "integrity": "sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^28.1.3",
+ "@jest/schemas": "^29.0.0",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -1184,7 +1216,7 @@
"chalk": "^4.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
@@ -1358,13 +1390,13 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.25.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz",
- "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==",
+ "version": "1.25.2",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.2.tgz",
+ "integrity": "sha512-6qPznIR4Fw02OMbqXUPMG6bFFg1hDVNEdihKy0t9K0dmRbus1DyP5Q5XFQhGwEHQkLG5hrSfBuu9CW/foqhQHQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
- "playwright-core": "1.25.1"
+ "playwright-core": "1.25.2"
},
"bin": {
"playwright": "cli.js"
@@ -1383,9 +1415,9 @@
}
},
"node_modules/@primer/octicons": {
- "version": "17.4.1",
- "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.4.1.tgz",
- "integrity": "sha512-DPlnpsARphzx9+kQexKsfLafOa+3FL3MKxaIPxz/isXiiZWgOuNTV8awHZ2Mm1M45mPqsBerucrFE8z2zVCbrg==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.5.0.tgz",
+ "integrity": "sha512-Bx/IfCMXZSq0YBPspoRoALVou5LiAdSg4yNtwEoYDZ137aq238Glnb6SBE5BtRSyzegTv7wFp/uYUPXMXT2MRg==",
"dependencies": {
"object-assign": "^4.1.1"
}
@@ -1435,9 +1467,9 @@
"dev": true
},
"node_modules/@sinclair/typebox": {
- "version": "0.24.28",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
- "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==",
+ "version": "0.24.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.40.tgz",
+ "integrity": "sha512-Xint60L8rF0+nRy+6fCjW9jQMmu7fTpbwTBrXZiK6eq/RHDJS7LvWX/0oXC8O7fCePmrY/XdfaTv2HiUDeCq4g==",
"dev": true
},
"node_modules/@sinonjs/commons": {
@@ -1544,9 +1576,9 @@
}
},
"node_modules/@stoplight/ordered-object-literal": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz",
- "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz",
+ "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==",
"dev": true,
"engines": {
"node": ">=8"
@@ -1627,9 +1659,9 @@
}
},
"node_modules/@stoplight/spectral-core": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz",
- "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz",
+ "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==",
"dev": true,
"dependencies": {
"@stoplight/better-ajv-errors": "1.0.3",
@@ -1647,7 +1679,7 @@
"ajv-formats": "~2.1.0",
"blueimp-md5": "2.18.0",
"es-aggregate-error": "^1.0.7",
- "jsonpath-plus": "6.0.1",
+ "jsonpath-plus": "7.1.0",
"lodash": "~4.17.21",
"lodash.topath": "^4.5.2",
"minimatch": "3.1.2",
@@ -1819,25 +1851,25 @@
}
},
"node_modules/@stoplight/spectral-ruleset-bundler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.1.tgz",
- "integrity": "sha512-TWjLFYBor1s/0v3xXwdVzzyUVu7ez2vYVNN4RMbJG7HIZgYW8MMVx4AVg5Eo1ZgLTkj/aeaoAOjIP7t+u6IBUg==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.2.tgz",
+ "integrity": "sha512-sy7mHVBwmo5/8dUlnWiel2UND1Mnu3x+okBAgLmkGcIpXz74rMmVY3h5vT6rjxw65WZ3/c3mtm1dRQuSe+q5fw==",
"dev": true,
"dependencies": {
- "@rollup/plugin-commonjs": "~22.0.0",
+ "@rollup/plugin-commonjs": "~22.0.2",
"@stoplight/path": "1.3.2",
"@stoplight/spectral-core": ">=1",
"@stoplight/spectral-formats": ">=1",
"@stoplight/spectral-functions": ">=1",
"@stoplight/spectral-parsers": ">=1",
"@stoplight/spectral-ref-resolver": ">=1",
- "@stoplight/spectral-ruleset-migrator": "^1.5.2",
+ "@stoplight/spectral-ruleset-migrator": "^1.7.4",
"@stoplight/spectral-rulesets": ">=1",
"@stoplight/spectral-runtime": "^1.1.0",
- "@stoplight/types": "^12.3.0",
+ "@stoplight/types": "^13.6.0",
"@types/node": "*",
"pony-cause": "1.1.1",
- "rollup": "~2.75.5",
+ "rollup": "~2.79.0",
"tslib": "^2.3.1",
"validate-npm-package-name": "3.0.0"
},
@@ -1866,34 +1898,32 @@
"rollup": "^2.68.0"
}
},
- "node_modules/@stoplight/spectral-ruleset-bundler/node_modules/rollup": {
- "version": "2.75.7",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
- "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "node_modules/@stoplight/spectral-ruleset-bundler/node_modules/@stoplight/types": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz",
+ "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==",
"dev": true,
- "bin": {
- "rollup": "dist/bin/rollup"
+ "dependencies": {
+ "@types/json-schema": "^7.0.4",
+ "utility-types": "^3.10.0"
},
"engines": {
- "node": ">=10.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "node": "^12.20 || >=14.13"
}
},
"node_modules/@stoplight/spectral-ruleset-migrator": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz",
- "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz",
+ "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==",
"dev": true,
"dependencies": {
- "@stoplight/json": "~3.17.0",
- "@stoplight/ordered-object-literal": "1.0.2",
+ "@stoplight/json": "~3.20.1",
+ "@stoplight/ordered-object-literal": "~1.0.4",
"@stoplight/path": "1.3.2",
"@stoplight/spectral-functions": "^1.0.0",
"@stoplight/spectral-runtime": "^1.1.0",
- "@stoplight/types": "^12.3.0",
- "@stoplight/yaml": "4.2.2",
+ "@stoplight/types": "^13.6.0",
+ "@stoplight/yaml": "~4.2.3",
"@types/node": "*",
"ajv": "^8.6.0",
"ast-types": "0.14.2",
@@ -1906,28 +1936,34 @@
"node": ">=12"
}
},
- "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/ordered-object-literal": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz",
- "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz",
- "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==",
+ "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/json": {
+ "version": "3.20.1",
+ "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz",
+ "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==",
"dev": true,
"dependencies": {
- "@stoplight/ordered-object-literal": "^1.0.1",
- "@stoplight/types": "^12.0.0",
- "@stoplight/yaml-ast-parser": "0.0.48",
- "tslib": "^2.2.0"
+ "@stoplight/ordered-object-literal": "^1.0.3",
+ "@stoplight/path": "^1.3.2",
+ "@stoplight/types": "^13.6.0",
+ "jsonc-parser": "~2.2.1",
+ "lodash": "^4.17.21",
+ "safe-stable-stringify": "^1.1"
},
"engines": {
- "node": ">=10.8"
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/types": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz",
+ "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.4",
+ "utility-types": "^3.10.0"
+ },
+ "engines": {
+ "node": "^12.20 || >=14.13"
}
},
"node_modules/@stoplight/spectral-rulesets": {
@@ -2089,9 +2125,9 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz",
- "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==",
+ "version": "7.18.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
+ "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.3.0"
@@ -2171,14 +2207,14 @@
}
},
"node_modules/@types/jsdom": {
- "version": "16.2.15",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz",
- "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==",
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
+ "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
"dev": true,
"dependencies": {
"@types/node": "*",
- "@types/parse5": "^6.0.3",
- "@types/tough-cookie": "*"
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
}
},
"node_modules/@types/json-schema": {
@@ -2193,9 +2229,9 @@
"dev": true
},
"node_modules/@types/marked": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.6.tgz",
- "integrity": "sha512-ITAVUzsnVbhy5afxhs4PPPbrv2hKVEDH5BhhaQNQlVG0UNu+9A18XSdYr53nBdHZ0ADEQLl+ciOjXbs7eHdiQQ=="
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz",
+ "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw=="
},
"node_modules/@types/minimist": {
"version": "1.2.2",
@@ -2204,9 +2240,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.7.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz",
- "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw=="
+ "version": "18.7.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz",
+ "integrity": "sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg=="
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.1",
@@ -2220,12 +2256,6 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "node_modules/@types/parse5": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
- "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
- "dev": true
- },
"node_modules/@types/prettier": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
@@ -2259,9 +2289,9 @@
"dev": true
},
"node_modules/@types/yargs": {
- "version": "17.0.11",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz",
- "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==",
+ "version": "17.0.12",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
+ "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -2845,21 +2875,21 @@
"dev": true
},
"node_modules/babel-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz",
- "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.0.3.tgz",
+ "integrity": "sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==",
"dev": true,
"dependencies": {
- "@jest/transform": "^28.1.3",
+ "@jest/transform": "^29.0.3",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^28.1.3",
+ "babel-preset-jest": "^29.0.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.8.0"
@@ -2882,9 +2912,9 @@
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz",
- "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==",
+ "version": "29.0.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz",
+ "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==",
"dev": true,
"dependencies": {
"@babel/template": "^7.3.3",
@@ -2893,7 +2923,7 @@
"@types/babel__traverse": "^7.0.6"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/babel-preset-current-node-syntax": {
@@ -2920,16 +2950,16 @@
}
},
"node_modules/babel-preset-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz",
- "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==",
+ "version": "29.0.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz",
+ "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^28.1.3",
+ "babel-plugin-jest-hoist": "^29.0.2",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
@@ -3108,9 +3138,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001382",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001382.tgz",
- "integrity": "sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg==",
+ "version": "1.0.30001393",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz",
+ "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==",
"funding": [
{
"type": "opencollective",
@@ -3156,9 +3186,9 @@
}
},
"node_modules/ci-info": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
+ "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==",
"dev": true
},
"node_modules/cjs-module-lexer": {
@@ -4228,19 +4258,6 @@
"node": ">=12"
}
},
- "node_modules/data-urls/node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -4500,12 +4517,12 @@
}
},
"node_modules/diff-sequences": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
- "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz",
+ "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==",
"dev": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/dir-glob": {
@@ -4640,9 +4657,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.228",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.228.tgz",
- "integrity": "sha512-XfDHCvou7CsDMlFwb0WZ1tWmW48e7Sn7VBRyPfZsZZila9esRsJl1trO+OqDNV97GggFSt0ISbWslKXfQkG//g=="
+ "version": "1.4.247",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz",
+ "integrity": "sha512-FLs6R4FQE+1JHM0hh3sfdxnYjKvJpHZyhQDjc2qFq/xFvmmRt/TATNToZhrcGUFzpF2XjeiuozrA8lI0PZmYYw=="
},
"node_modules/emittery": {
"version": "0.10.2",
@@ -4732,16 +4749,16 @@
}
},
"node_modules/es-abstract": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
- "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
+ "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.1",
+ "get-intrinsic": "^1.1.2",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
@@ -4753,9 +4770,9 @@
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
+ "object-inspect": "^1.12.2",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
+ "object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
@@ -4821,9 +4838,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
- "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz",
+ "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==",
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -4832,33 +4849,33 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/linux-loong64": "0.14.54",
- "esbuild-android-64": "0.14.54",
- "esbuild-android-arm64": "0.14.54",
- "esbuild-darwin-64": "0.14.54",
- "esbuild-darwin-arm64": "0.14.54",
- "esbuild-freebsd-64": "0.14.54",
- "esbuild-freebsd-arm64": "0.14.54",
- "esbuild-linux-32": "0.14.54",
- "esbuild-linux-64": "0.14.54",
- "esbuild-linux-arm": "0.14.54",
- "esbuild-linux-arm64": "0.14.54",
- "esbuild-linux-mips64le": "0.14.54",
- "esbuild-linux-ppc64le": "0.14.54",
- "esbuild-linux-riscv64": "0.14.54",
- "esbuild-linux-s390x": "0.14.54",
- "esbuild-netbsd-64": "0.14.54",
- "esbuild-openbsd-64": "0.14.54",
- "esbuild-sunos-64": "0.14.54",
- "esbuild-windows-32": "0.14.54",
- "esbuild-windows-64": "0.14.54",
- "esbuild-windows-arm64": "0.14.54"
+ "@esbuild/linux-loong64": "0.15.7",
+ "esbuild-android-64": "0.15.7",
+ "esbuild-android-arm64": "0.15.7",
+ "esbuild-darwin-64": "0.15.7",
+ "esbuild-darwin-arm64": "0.15.7",
+ "esbuild-freebsd-64": "0.15.7",
+ "esbuild-freebsd-arm64": "0.15.7",
+ "esbuild-linux-32": "0.15.7",
+ "esbuild-linux-64": "0.15.7",
+ "esbuild-linux-arm": "0.15.7",
+ "esbuild-linux-arm64": "0.15.7",
+ "esbuild-linux-mips64le": "0.15.7",
+ "esbuild-linux-ppc64le": "0.15.7",
+ "esbuild-linux-riscv64": "0.15.7",
+ "esbuild-linux-s390x": "0.15.7",
+ "esbuild-netbsd-64": "0.15.7",
+ "esbuild-openbsd-64": "0.15.7",
+ "esbuild-sunos-64": "0.15.7",
+ "esbuild-windows-32": "0.15.7",
+ "esbuild-windows-64": "0.15.7",
+ "esbuild-windows-arm64": "0.15.7"
}
},
"node_modules/esbuild-android-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
- "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz",
+ "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==",
"cpu": [
"x64"
],
@@ -4871,9 +4888,9 @@
}
},
"node_modules/esbuild-android-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
- "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz",
+ "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==",
"cpu": [
"arm64"
],
@@ -4886,9 +4903,9 @@
}
},
"node_modules/esbuild-darwin-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
- "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz",
+ "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==",
"cpu": [
"x64"
],
@@ -4901,9 +4918,9 @@
}
},
"node_modules/esbuild-darwin-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
- "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz",
+ "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==",
"cpu": [
"arm64"
],
@@ -4916,9 +4933,9 @@
}
},
"node_modules/esbuild-freebsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
- "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz",
+ "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==",
"cpu": [
"x64"
],
@@ -4931,9 +4948,9 @@
}
},
"node_modules/esbuild-freebsd-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
- "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz",
+ "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==",
"cpu": [
"arm64"
],
@@ -4946,9 +4963,9 @@
}
},
"node_modules/esbuild-linux-32": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
- "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz",
+ "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==",
"cpu": [
"ia32"
],
@@ -4961,9 +4978,9 @@
}
},
"node_modules/esbuild-linux-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
- "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz",
+ "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==",
"cpu": [
"x64"
],
@@ -4976,9 +4993,9 @@
}
},
"node_modules/esbuild-linux-arm": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
- "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz",
+ "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==",
"cpu": [
"arm"
],
@@ -4991,9 +5008,9 @@
}
},
"node_modules/esbuild-linux-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
- "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz",
+ "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==",
"cpu": [
"arm64"
],
@@ -5006,9 +5023,9 @@
}
},
"node_modules/esbuild-linux-mips64le": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
- "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz",
+ "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==",
"cpu": [
"mips64el"
],
@@ -5021,9 +5038,9 @@
}
},
"node_modules/esbuild-linux-ppc64le": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
- "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz",
+ "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==",
"cpu": [
"ppc64"
],
@@ -5036,9 +5053,9 @@
}
},
"node_modules/esbuild-linux-riscv64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
- "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz",
+ "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==",
"cpu": [
"riscv64"
],
@@ -5051,9 +5068,9 @@
}
},
"node_modules/esbuild-linux-s390x": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
- "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz",
+ "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==",
"cpu": [
"s390x"
],
@@ -5066,11 +5083,11 @@
}
},
"node_modules/esbuild-loader": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.19.0.tgz",
- "integrity": "sha512-urGNVE6Tl2rqx92ElKi/LiExXjGvcH6HfDBFzJ9Ppwqh4n6Jmx8x7RKAyMzSM78b6CAaJLhDncG5sPrL0ROh5Q==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.20.0.tgz",
+ "integrity": "sha512-dr+j8O4w5RvqZ7I4PPB4EIyVTd679EBQnMm+JBB7av+vu05Zpje2IpK5N3ld1VWa+WxrInIbNFAg093+E1aRsA==",
"dependencies": {
- "esbuild": "^0.14.39",
+ "esbuild": "^0.15.6",
"joycon": "^3.0.1",
"json5": "^2.2.0",
"loader-utils": "^2.0.0",
@@ -5085,9 +5102,9 @@
}
},
"node_modules/esbuild-netbsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
- "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz",
+ "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==",
"cpu": [
"x64"
],
@@ -5100,9 +5117,9 @@
}
},
"node_modules/esbuild-openbsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
- "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz",
+ "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==",
"cpu": [
"x64"
],
@@ -5115,9 +5132,9 @@
}
},
"node_modules/esbuild-sunos-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
- "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz",
+ "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==",
"cpu": [
"x64"
],
@@ -5130,9 +5147,9 @@
}
},
"node_modules/esbuild-windows-32": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
- "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz",
+ "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==",
"cpu": [
"ia32"
],
@@ -5145,9 +5162,9 @@
}
},
"node_modules/esbuild-windows-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
- "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz",
+ "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==",
"cpu": [
"x64"
],
@@ -5160,9 +5177,9 @@
}
},
"node_modules/esbuild-windows-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
- "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz",
+ "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==",
"cpu": [
"arm64"
],
@@ -5279,14 +5296,15 @@
}
},
"node_modules/eslint": {
- "version": "8.22.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
- "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
+ "version": "8.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz",
+ "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==",
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.3.0",
+ "@eslint/eslintrc": "^1.3.1",
"@humanwhocodes/config-array": "^0.10.4",
"@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@humanwhocodes/module-importer": "^1.0.1",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -5296,7 +5314,7 @@
"eslint-scope": "^7.1.1",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.3",
+ "espree": "^9.4.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -5321,8 +5339,7 @@
"regexpp": "^3.2.0",
"strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
+ "text-table": "^0.2.0"
},
"bin": {
"eslint": "bin/eslint.js"
@@ -5578,9 +5595,9 @@
"dev": true
},
"node_modules/espree": {
- "version": "9.3.3",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
- "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+ "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
"dev": true,
"dependencies": {
"acorn": "^8.8.0",
@@ -5703,19 +5720,19 @@
}
},
"node_modules/expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.0.3.tgz",
+ "integrity": "sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q==",
"dev": true,
"dependencies": {
- "@jest/expect-utils": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3"
+ "@jest/expect-utils": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/fast-deep-equal": {
@@ -5724,9 +5741,9 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -6243,9 +6260,9 @@
}
},
"node_modules/gsap": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.11.0.tgz",
- "integrity": "sha512-TV5aFGqXht+0o/CelnhCikSe3QGeG+q1XA/fyFFsMzesILHgWgFWIz0NuXIgcMaL5h7MG2l+j0BTupS5YyYkrw=="
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.11.1.tgz",
+ "integrity": "sha512-UKuJ0UPhntFHMwT6URFQ4cTQv88xc7Kd9Dhxt7qX9IPhC+d+/a5wKW5E5Vn33hZ53nBI1JfApcEbzKgXkcuPZw=="
},
"node_modules/hard-rejection": {
"version": "2.1.0",
@@ -6970,21 +6987,21 @@
}
},
"node_modules/jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
- "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.0.3.tgz",
+ "integrity": "sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ==",
"dev": true,
"dependencies": {
- "@jest/core": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.0.3",
+ "@jest/types": "^29.0.3",
"import-local": "^3.0.2",
- "jest-cli": "^28.1.3"
+ "jest-cli": "^29.0.3"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -6996,64 +7013,64 @@
}
},
"node_modules/jest-changed-files": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz",
- "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz",
+ "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==",
"dev": true,
"dependencies": {
"execa": "^5.0.0",
"p-limit": "^3.1.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz",
- "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.0.3.tgz",
+ "integrity": "sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/expect": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-each": "^29.0.3",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
"p-limit": "^3.1.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-cli": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz",
- "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.0.3.tgz",
+ "integrity": "sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ==",
"dev": true,
"dependencies": {
- "@jest/core": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-config": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
},
@@ -7061,7 +7078,7 @@
"jest": "bin/jest.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -7073,36 +7090,36 @@
}
},
"node_modules/jest-config": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz",
- "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.0.3.tgz",
+ "integrity": "sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^28.1.3",
- "@jest/types": "^28.1.3",
- "babel-jest": "^28.1.3",
+ "@jest/test-sequencer": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "babel-jest": "^29.0.3",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^28.1.3",
- "jest-environment-node": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-circus": "^29.0.3",
+ "jest-environment-node": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-runner": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@types/node": "*",
@@ -7118,92 +7135,92 @@
}
},
"node_modules/jest-diff": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
- "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.0.3.tgz",
+ "integrity": "sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^28.1.1",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "diff-sequences": "^29.0.0",
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-docblock": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz",
- "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz",
+ "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==",
"dev": true,
"dependencies": {
"detect-newline": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz",
- "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.0.3.tgz",
+ "integrity": "sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
- "jest-util": "^28.1.3",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.0.0",
+ "jest-util": "^29.0.3",
+ "pretty-format": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-jsdom": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz",
- "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.0.3.tgz",
+ "integrity": "sha512-KIGvpm12c71hoYTjL4wC2c8K6KfhOHJqJtaHc1IApu5rG047YWZoEP13BlbucWfzGISBrmli8KFqdhdQEa8Wnw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@types/jsdom": "^16.2.4",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@types/jsdom": "^20.0.0",
"@types/node": "*",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3",
- "jsdom": "^19.0.0"
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jsdom": "^20.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-node": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz",
- "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.0.3.tgz",
+ "integrity": "sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-extended": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.0.2.tgz",
- "integrity": "sha512-LnVZvwWLRV9AL8J7f4frKu0KHuTrbIFK15IqrvSwbFCYxalkuC5l7HfcofsksePrvlEJ2WAcfYNnu1+bEGvInA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.1.0.tgz",
+ "integrity": "sha512-BbuAVUb2dchgwm7euayVt/7hYlkKaknQItKyzie7Li8fmXCglgf21XJeRIdOITZ/cMOTTj5Oh5IjQOxQOe/hfQ==",
"dev": true,
"dependencies": {
- "jest-diff": "^28.0.0",
- "jest-get-type": "^28.0.0"
+ "jest-diff": "^29.0.0",
+ "jest-get-type": "^29.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -7213,98 +7230,98 @@
}
},
"node_modules/jest-get-type": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
- "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz",
+ "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==",
"dev": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.0.3.tgz",
+ "integrity": "sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-util": "^29.0.3",
+ "jest-worker": "^29.0.3",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/jest-leak-detector": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz",
- "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz",
+ "integrity": "sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ==",
"dev": true,
"dependencies": {
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
- "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz",
+ "integrity": "sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-diff": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
- "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.0.3.tgz",
+ "integrity": "sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-mock": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz",
- "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz",
+ "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-pnp-resolver": {
@@ -7325,153 +7342,154 @@
}
},
"node_modules/jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz",
+ "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==",
"dev": true,
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.0.3.tgz",
+ "integrity": "sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"resolve": "^1.20.0",
"resolve.exports": "^1.1.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz",
- "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz",
+ "integrity": "sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw==",
"dev": true,
"dependencies": {
- "jest-regex-util": "^28.0.2",
- "jest-snapshot": "^28.1.3"
+ "jest-regex-util": "^29.0.0",
+ "jest-snapshot": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz",
- "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.0.3.tgz",
+ "integrity": "sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw==",
"dev": true,
"dependencies": {
- "@jest/console": "^28.1.3",
- "@jest/environment": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.10.2",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^28.1.1",
- "jest-environment-node": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-leak-detector": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-resolve": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-watcher": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-docblock": "^29.0.0",
+ "jest-environment-node": "^29.0.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-leak-detector": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-resolve": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-watcher": "^29.0.3",
+ "jest-worker": "^29.0.3",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz",
- "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.0.3.tgz",
+ "integrity": "sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/globals": "^28.1.3",
- "@jest/source-map": "^28.1.2",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/globals": "^29.0.3",
+ "@jest/source-map": "^29.0.0",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-mock": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz",
- "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.0.3.tgz",
+ "integrity": "sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/expect-utils": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^28.1.3",
+ "expect": "^29.0.3",
"graceful-fs": "^4.2.9",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-haste-map": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-diff": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-haste-map": "^29.0.3",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
"natural-compare": "^1.4.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"semver": "^7.3.5"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.0.3.tgz",
+ "integrity": "sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -7479,24 +7497,24 @@
"picomatch": "^2.2.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.0.3.tgz",
+ "integrity": "sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw==",
"dev": true,
"dependencies": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.0.0",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.0.3"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate/node_modules/camelcase": {
@@ -7512,28 +7530,28 @@
}
},
"node_modules/jest-watcher": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
- "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.0.3.tgz",
+ "integrity": "sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.10.2",
- "jest-util": "^28.1.3",
+ "jest-util": "^29.0.3",
"string-length": "^4.0.1"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz",
+ "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -7541,7 +7559,7 @@
"supports-color": "^8.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
@@ -7568,9 +7586,9 @@
}
},
"node_modules/jquery": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
- "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
+ "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw=="
},
"node_modules/jquery.are-you-sure": {
"version": "1.9.0",
@@ -7602,28 +7620,28 @@
}
},
"node_modules/jsdom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
+ "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
"dev": true,
"dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.5.0",
+ "abab": "^2.0.6",
+ "acorn": "^8.7.1",
"acorn-globals": "^6.0.0",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
- "data-urls": "^3.0.1",
+ "data-urls": "^3.0.2",
"decimal.js": "^10.3.1",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0",
"html-encoding-sniffer": "^3.0.0",
"http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.1",
"is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
+ "parse5": "^7.0.0",
+ "saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
@@ -7631,12 +7649,12 @@
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0",
"whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0",
- "ws": "^8.2.3",
+ "whatwg-url": "^11.0.0",
+ "ws": "^8.8.0",
"xml-name-validator": "^4.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"peerDependencies": {
"canvas": "^2.5.0"
@@ -7711,12 +7729,12 @@
}
},
"node_modules/jsonpath-plus": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz",
- "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz",
+ "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==",
"dev": true,
"engines": {
- "node": ">=10.0.0"
+ "node": ">=12.0.0"
}
},
"node_modules/jsonpointer": {
@@ -7733,6 +7751,29 @@
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz",
"integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ=="
},
+ "node_modules/katex": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.2.tgz",
+ "integrity": "sha512-70DJdQAyh9EMsthw3AaQlDyFf54X7nWEUIa5W+rq8XOpEk//w5Th7/8SqFqpvi/KZ2t6MHUj4f9wLmztBmAYQA==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "dependencies": {
+ "commander": "^8.0.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/katex/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/khroma": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
@@ -8185,9 +8226,9 @@
}
},
"node_modules/marked": {
- "version": "4.0.19",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.19.tgz",
- "integrity": "sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
+ "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==",
"bin": {
"marked": "bin/marked.js"
},
@@ -8550,6 +8591,16 @@
"lodash.topath": "^4.5.2"
}
},
+ "node_modules/nimma/node_modules/jsonpath-plus": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz",
+ "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
@@ -8658,9 +8709,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
- "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
"dev": true
},
"node_modules/object-assign": {
@@ -8909,10 +8960,28 @@
}
},
"node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz",
+ "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==",
+ "dev": true,
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5/node_modules/entities": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
},
"node_modules/path-exists": {
"version": "4.0.0",
@@ -9046,9 +9115,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.25.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz",
- "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==",
+ "version": "1.25.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.2.tgz",
+ "integrity": "sha512-0yTbUE9lIddkEpLHL3u8PoCL+pWiZtj5A/j3U7YoNjcmKKDGBnCrgHJMzwd2J5vy6l28q4ki3JIuz7McLHhl1A==",
"dev": true,
"bin": {
"playwright": "cli.js"
@@ -9245,18 +9314,17 @@
}
},
"node_modules/pretty-format": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
- "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz",
+ "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^28.1.3",
- "ansi-regex": "^5.0.1",
+ "@jest/schemas": "^29.0.0",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/pretty-format/node_modules/ansi-styles": {
@@ -9748,11 +9816,10 @@
"integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
},
"node_modules/rollup": {
- "version": "2.78.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
- "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz",
+ "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==",
"dev": true,
- "peer": true,
"bin": {
"rollup": "dist/bin/rollup"
},
@@ -9837,15 +9904,15 @@
"optional": true
},
"node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"dev": true,
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=v12.22.7"
}
},
"node_modules/schema-utils": {
@@ -10417,9 +10484,9 @@
}
},
"node_modules/stylis": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz",
- "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ=="
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.2.tgz",
+ "integrity": "sha512-Nn2CCrG2ZaFziDxaZPN43CXqn+j7tcdjPFCkRBkFue8QYXC2HdEwnw5TCBo4yQZ2WxKYeSi0fdoOrtEqgDrXbA=="
},
"node_modules/superstruct": {
"version": "0.10.13",
@@ -10439,9 +10506,9 @@
}
},
"node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0",
@@ -10567,9 +10634,9 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz",
- "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==",
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+ "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.14",
"jest-worker": "^27.4.5",
@@ -10749,9 +10816,9 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.1.tgz",
- "integrity": "sha512-Ns3k8QxkEzIfLZbRwLOrMPDqRa1BEAl4BzNNAOYY4BhBmEkf+HvP467F4NrD9loK3NcYflWOpUH3LJg0ehq/rQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+ "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
@@ -10919,9 +10986,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
- "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
+ "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
"funding": [
{
"type": "opencollective",
@@ -10944,9 +11011,9 @@
}
},
"node_modules/updates": {
- "version": "13.1.4",
- "resolved": "https://registry.npmjs.org/updates/-/updates-13.1.4.tgz",
- "integrity": "sha512-s8FKpHpREDoIbd1JDcEvsdf+wenhcQjrZK8v7OTIW69kozPttm6rW84Mm/LFouiDVYgaubY3us7sZlRUiGVx4Q==",
+ "version": "13.1.5",
+ "resolved": "https://registry.npmjs.org/updates/-/updates-13.1.5.tgz",
+ "integrity": "sha512-7WPn2P8WskugozCdhMI+D1m9OmJnzZqRUuDYM2G8O55TuyvfqOT2vdR2+InkpXUyK6ZNmbLopvw++h9YQElbmg==",
"dev": true,
"bin": {
"updates": "bin/updates.js"
@@ -11044,9 +11111,9 @@
}
},
"node_modules/vm2": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz",
- "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==",
+ "version": "3.9.11",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz",
+ "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==",
"dev": true,
"dependencies": {
"acorn": "^8.7.0",
@@ -11091,9 +11158,9 @@
}
},
"node_modules/vue-eslint-parser": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz",
- "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz",
+ "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==",
"dev": true,
"dependencies": {
"debug": "^4.3.4",
@@ -11500,9 +11567,9 @@
}
},
"node_modules/whatwg-url": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dev": true,
"dependencies": {
"tr46": "^3.0.0",
@@ -11675,9 +11742,9 @@
}
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
- "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz",
+ "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==",
"engines": {
"node": ">=12"
},
@@ -11883,27 +11950,27 @@
}
},
"@babel/compat-data": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
- "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
+ "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
"dev": true
},
"@babel/core": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz",
- "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
+ "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-module-transforms": "^7.18.9",
- "@babel/helpers": "^7.18.9",
- "@babel/parser": "^7.18.13",
+ "@babel/generator": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helpers": "^7.19.0",
+ "@babel/parser": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -11920,12 +11987,12 @@
}
},
"@babel/generator": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
+ "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.13",
+ "@babel/types": "^7.19.0",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
@@ -11944,12 +12011,12 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
- "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
+ "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.18.8",
+ "@babel/compat-data": "^7.19.0",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.20.2",
"semver": "^6.3.0"
@@ -11970,13 +12037,13 @@
"dev": true
},
"@babel/helper-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
"dev": true,
"requires": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/types": "^7.19.0"
}
},
"@babel/helper-hoist-variables": {
@@ -11998,9 +12065,9 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
+ "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
@@ -12008,15 +12075,15 @@
"@babel/helper-simple-access": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+ "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
"dev": true
},
"@babel/helper-simple-access": {
@@ -12056,14 +12123,14 @@
"dev": true
},
"@babel/helpers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
- "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
+ "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
"dev": true,
"requires": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.9",
- "@babel/types": "^7.18.9"
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.19.0",
+ "@babel/types": "^7.19.0"
}
},
"@babel/highlight": {
@@ -12136,9 +12203,9 @@
}
},
"@babel/parser": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
+ "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -12186,6 +12253,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
"@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -12259,9 +12335,9 @@
}
},
"@babel/runtime": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
- "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
+ "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -12278,19 +12354,19 @@
}
},
"@babel/traverse": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
+ "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.13",
+ "@babel/generator": "^7.19.0",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.13",
- "@babel/types": "^7.18.13",
+ "@babel/parser": "^7.19.0",
+ "@babel/types": "^7.19.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -12304,9 +12380,9 @@
}
},
"@babel/types": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
+ "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.18.10",
@@ -12344,20 +12420,20 @@
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="
},
"@esbuild/linux-loong64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
- "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz",
+ "integrity": "sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==",
"optional": true
},
"@eslint/eslintrc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
- "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz",
+ "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.3.2",
+ "espree": "^9.4.0",
"globals": "^13.15.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -12403,6 +12479,12 @@
"integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
"dev": true
},
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
"@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
@@ -12493,124 +12575,124 @@
"dev": true
},
"@jest/console": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
- "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.0.3.tgz",
+ "integrity": "sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz",
- "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.0.3.tgz",
+ "integrity": "sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ==",
"dev": true,
"requires": {
- "@jest/console": "^28.1.3",
- "@jest/reporters": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/reporters": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^28.1.3",
- "jest-config": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-resolve-dependencies": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
- "jest-watcher": "^28.1.3",
+ "jest-changed-files": "^29.0.0",
+ "jest-config": "^29.0.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-resolve-dependencies": "^29.0.3",
+ "jest-runner": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
+ "jest-watcher": "^29.0.3",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
- "rimraf": "^3.0.0",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"@jest/environment": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz",
- "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.0.3.tgz",
+ "integrity": "sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
- "jest-mock": "^28.1.3"
+ "jest-mock": "^29.0.3"
}
},
"@jest/expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.0.3.tgz",
+ "integrity": "sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ==",
"dev": true,
"requires": {
- "expect": "^28.1.3",
- "jest-snapshot": "^28.1.3"
+ "expect": "^29.0.3",
+ "jest-snapshot": "^29.0.3"
}
},
"@jest/expect-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
- "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.0.3.tgz",
+ "integrity": "sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q==",
"dev": true,
"requires": {
- "jest-get-type": "^28.0.2"
+ "jest-get-type": "^29.0.0"
}
},
"@jest/fake-timers": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz",
- "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.0.3.tgz",
+ "integrity": "sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-message-util": "^29.0.3",
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3"
}
},
"@jest/globals": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz",
- "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.0.3.tgz",
+ "integrity": "sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w==",
"dev": true,
"requires": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/types": "^28.1.3"
+ "@jest/environment": "^29.0.3",
+ "@jest/expect": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "jest-mock": "^29.0.3"
}
},
"@jest/reporters": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz",
- "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.0.3.tgz",
+ "integrity": "sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/console": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@jridgewell/trace-mapping": "^0.3.15",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -12622,9 +12704,9 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-worker": "^29.0.3",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -12633,66 +12715,66 @@
}
},
"@jest/schemas": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
- "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz",
+ "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==",
"dev": true,
"requires": {
"@sinclair/typebox": "^0.24.1"
}
},
"@jest/source-map": {
- "version": "28.1.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz",
- "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz",
+ "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==",
"dev": true,
"requires": {
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jridgewell/trace-mapping": "^0.3.15",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
}
},
"@jest/test-result": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz",
- "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.0.3.tgz",
+ "integrity": "sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg==",
"dev": true,
"requires": {
- "@jest/console": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz",
- "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz",
+ "integrity": "sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ==",
"dev": true,
"requires": {
- "@jest/test-result": "^28.1.3",
+ "@jest/test-result": "^29.0.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
"slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz",
- "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.0.3.tgz",
+ "integrity": "sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/types": "^28.1.3",
- "@jridgewell/trace-mapping": "^0.3.13",
+ "@jest/types": "^29.0.3",
+ "@jridgewell/trace-mapping": "^0.3.15",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-util": "^29.0.3",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -12700,12 +12782,12 @@
}
},
"@jest/types": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
- "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.0.3.tgz",
+ "integrity": "sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A==",
"dev": true,
"requires": {
- "@jest/schemas": "^28.1.3",
+ "@jest/schemas": "^29.0.0",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -12819,13 +12901,13 @@
}
},
"@playwright/test": {
- "version": "1.25.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz",
- "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==",
+ "version": "1.25.2",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.2.tgz",
+ "integrity": "sha512-6qPznIR4Fw02OMbqXUPMG6bFFg1hDVNEdihKy0t9K0dmRbus1DyP5Q5XFQhGwEHQkLG5hrSfBuu9CW/foqhQHQ==",
"dev": true,
"requires": {
"@types/node": "*",
- "playwright-core": "1.25.1"
+ "playwright-core": "1.25.2"
}
},
"@popperjs/core": {
@@ -12834,9 +12916,9 @@
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
},
"@primer/octicons": {
- "version": "17.4.1",
- "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.4.1.tgz",
- "integrity": "sha512-DPlnpsARphzx9+kQexKsfLafOa+3FL3MKxaIPxz/isXiiZWgOuNTV8awHZ2Mm1M45mPqsBerucrFE8z2zVCbrg==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.5.0.tgz",
+ "integrity": "sha512-Bx/IfCMXZSq0YBPspoRoALVou5LiAdSg4yNtwEoYDZ137aq238Glnb6SBE5BtRSyzegTv7wFp/uYUPXMXT2MRg==",
"requires": {
"object-assign": "^4.1.1"
}
@@ -12876,9 +12958,9 @@
}
},
"@sinclair/typebox": {
- "version": "0.24.28",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz",
- "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==",
+ "version": "0.24.40",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.40.tgz",
+ "integrity": "sha512-Xint60L8rF0+nRy+6fCjW9jQMmu7fTpbwTBrXZiK6eq/RHDJS7LvWX/0oXC8O7fCePmrY/XdfaTv2HiUDeCq4g==",
"dev": true
},
"@sinonjs/commons": {
@@ -12969,9 +13051,9 @@
}
},
"@stoplight/ordered-object-literal": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz",
- "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz",
+ "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==",
"dev": true
},
"@stoplight/path": {
@@ -13036,9 +13118,9 @@
}
},
"@stoplight/spectral-core": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz",
- "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz",
+ "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==",
"dev": true,
"requires": {
"@stoplight/better-ajv-errors": "1.0.3",
@@ -13056,7 +13138,7 @@
"ajv-formats": "~2.1.0",
"blueimp-md5": "2.18.0",
"es-aggregate-error": "^1.0.7",
- "jsonpath-plus": "6.0.1",
+ "jsonpath-plus": "7.1.0",
"lodash": "~4.17.21",
"lodash.topath": "^4.5.2",
"minimatch": "3.1.2",
@@ -13201,25 +13283,25 @@
}
},
"@stoplight/spectral-ruleset-bundler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.1.tgz",
- "integrity": "sha512-TWjLFYBor1s/0v3xXwdVzzyUVu7ez2vYVNN4RMbJG7HIZgYW8MMVx4AVg5Eo1ZgLTkj/aeaoAOjIP7t+u6IBUg==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.2.tgz",
+ "integrity": "sha512-sy7mHVBwmo5/8dUlnWiel2UND1Mnu3x+okBAgLmkGcIpXz74rMmVY3h5vT6rjxw65WZ3/c3mtm1dRQuSe+q5fw==",
"dev": true,
"requires": {
- "@rollup/plugin-commonjs": "~22.0.0",
+ "@rollup/plugin-commonjs": "~22.0.2",
"@stoplight/path": "1.3.2",
"@stoplight/spectral-core": ">=1",
"@stoplight/spectral-formats": ">=1",
"@stoplight/spectral-functions": ">=1",
"@stoplight/spectral-parsers": ">=1",
"@stoplight/spectral-ref-resolver": ">=1",
- "@stoplight/spectral-ruleset-migrator": "^1.5.2",
+ "@stoplight/spectral-ruleset-migrator": "^1.7.4",
"@stoplight/spectral-rulesets": ">=1",
"@stoplight/spectral-runtime": "^1.1.0",
- "@stoplight/types": "^12.3.0",
+ "@stoplight/types": "^13.6.0",
"@types/node": "*",
"pony-cause": "1.1.1",
- "rollup": "~2.75.5",
+ "rollup": "~2.79.0",
"tslib": "^2.3.1",
"validate-npm-package-name": "3.0.0"
},
@@ -13239,30 +13321,31 @@
"resolve": "^1.17.0"
}
},
- "rollup": {
- "version": "2.75.7",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
- "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "@stoplight/types": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz",
+ "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==",
"dev": true,
"requires": {
- "fsevents": "~2.3.2"
+ "@types/json-schema": "^7.0.4",
+ "utility-types": "^3.10.0"
}
}
}
},
"@stoplight/spectral-ruleset-migrator": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz",
- "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz",
+ "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==",
"dev": true,
"requires": {
- "@stoplight/json": "~3.17.0",
- "@stoplight/ordered-object-literal": "1.0.2",
+ "@stoplight/json": "~3.20.1",
+ "@stoplight/ordered-object-literal": "~1.0.4",
"@stoplight/path": "1.3.2",
"@stoplight/spectral-functions": "^1.0.0",
"@stoplight/spectral-runtime": "^1.1.0",
- "@stoplight/types": "^12.3.0",
- "@stoplight/yaml": "4.2.2",
+ "@stoplight/types": "^13.6.0",
+ "@stoplight/yaml": "~4.2.3",
"@types/node": "*",
"ajv": "^8.6.0",
"ast-types": "0.14.2",
@@ -13272,22 +13355,28 @@
"validate-npm-package-name": "3.0.0"
},
"dependencies": {
- "@stoplight/ordered-object-literal": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz",
- "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==",
- "dev": true
- },
- "@stoplight/yaml": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz",
- "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==",
+ "@stoplight/json": {
+ "version": "3.20.1",
+ "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz",
+ "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==",
"dev": true,
"requires": {
- "@stoplight/ordered-object-literal": "^1.0.1",
- "@stoplight/types": "^12.0.0",
- "@stoplight/yaml-ast-parser": "0.0.48",
- "tslib": "^2.2.0"
+ "@stoplight/ordered-object-literal": "^1.0.3",
+ "@stoplight/path": "^1.3.2",
+ "@stoplight/types": "^13.6.0",
+ "jsonc-parser": "~2.2.1",
+ "lodash": "^4.17.21",
+ "safe-stable-stringify": "^1.1"
+ }
+ },
+ "@stoplight/types": {
+ "version": "13.6.0",
+ "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz",
+ "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.4",
+ "utility-types": "^3.10.0"
}
}
}
@@ -13431,9 +13520,9 @@
}
},
"@types/babel__traverse": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz",
- "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==",
+ "version": "7.18.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
+ "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
@@ -13513,14 +13602,14 @@
}
},
"@types/jsdom": {
- "version": "16.2.15",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz",
- "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==",
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.0.tgz",
+ "integrity": "sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==",
"dev": true,
"requires": {
"@types/node": "*",
- "@types/parse5": "^6.0.3",
- "@types/tough-cookie": "*"
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
}
},
"@types/json-schema": {
@@ -13535,9 +13624,9 @@
"dev": true
},
"@types/marked": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.6.tgz",
- "integrity": "sha512-ITAVUzsnVbhy5afxhs4PPPbrv2hKVEDH5BhhaQNQlVG0UNu+9A18XSdYr53nBdHZ0ADEQLl+ciOjXbs7eHdiQQ=="
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz",
+ "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw=="
},
"@types/minimist": {
"version": "1.2.2",
@@ -13546,9 +13635,9 @@
"dev": true
},
"@types/node": {
- "version": "18.7.13",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz",
- "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw=="
+ "version": "18.7.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.16.tgz",
+ "integrity": "sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg=="
},
"@types/normalize-package-data": {
"version": "2.4.1",
@@ -13562,12 +13651,6 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "@types/parse5": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
- "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
- "dev": true
- },
"@types/prettier": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz",
@@ -13601,9 +13684,9 @@
"dev": true
},
"@types/yargs": {
- "version": "17.0.11",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz",
- "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==",
+ "version": "17.0.12",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz",
+ "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -14060,15 +14143,15 @@
"dev": true
},
"babel-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz",
- "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.0.3.tgz",
+ "integrity": "sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==",
"dev": true,
"requires": {
- "@jest/transform": "^28.1.3",
+ "@jest/transform": "^29.0.3",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^28.1.3",
+ "babel-preset-jest": "^29.0.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -14088,9 +14171,9 @@
}
},
"babel-plugin-jest-hoist": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz",
- "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==",
+ "version": "29.0.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz",
+ "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -14120,12 +14203,12 @@
}
},
"babel-preset-jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz",
- "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==",
+ "version": "29.0.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz",
+ "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^28.1.3",
+ "babel-plugin-jest-hoist": "^29.0.2",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
@@ -14256,9 +14339,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001382",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001382.tgz",
- "integrity": "sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg=="
+ "version": "1.0.30001393",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz",
+ "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA=="
},
"chalk": {
"version": "4.1.2",
@@ -14282,9 +14365,9 @@
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
},
"ci-info": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
+ "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==",
"dev": true
},
"cjs-module-lexer": {
@@ -15154,18 +15237,6 @@
"abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^11.0.0"
- },
- "dependencies": {
- "whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "requires": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- }
- }
}
},
"de-indent": {
@@ -15360,9 +15431,9 @@
"dev": true
},
"diff-sequences": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
- "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz",
+ "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==",
"dev": true
},
"dir-glob": {
@@ -15469,9 +15540,9 @@
}
},
"electron-to-chromium": {
- "version": "1.4.228",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.228.tgz",
- "integrity": "sha512-XfDHCvou7CsDMlFwb0WZ1tWmW48e7Sn7VBRyPfZsZZila9esRsJl1trO+OqDNV97GggFSt0ISbWslKXfQkG//g=="
+ "version": "1.4.247",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz",
+ "integrity": "sha512-FLs6R4FQE+1JHM0hh3sfdxnYjKvJpHZyhQDjc2qFq/xFvmmRt/TATNToZhrcGUFzpF2XjeiuozrA8lI0PZmYYw=="
},
"emittery": {
"version": "0.10.2",
@@ -15534,16 +15605,16 @@
}
},
"es-abstract": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
- "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz",
+ "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.1",
+ "get-intrinsic": "^1.1.2",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
@@ -15555,9 +15626,9 @@
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
+ "object-inspect": "^1.12.2",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
+ "object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
@@ -15605,123 +15676,123 @@
}
},
"esbuild": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
- "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.7.tgz",
+ "integrity": "sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==",
"requires": {
- "@esbuild/linux-loong64": "0.14.54",
- "esbuild-android-64": "0.14.54",
- "esbuild-android-arm64": "0.14.54",
- "esbuild-darwin-64": "0.14.54",
- "esbuild-darwin-arm64": "0.14.54",
- "esbuild-freebsd-64": "0.14.54",
- "esbuild-freebsd-arm64": "0.14.54",
- "esbuild-linux-32": "0.14.54",
- "esbuild-linux-64": "0.14.54",
- "esbuild-linux-arm": "0.14.54",
- "esbuild-linux-arm64": "0.14.54",
- "esbuild-linux-mips64le": "0.14.54",
- "esbuild-linux-ppc64le": "0.14.54",
- "esbuild-linux-riscv64": "0.14.54",
- "esbuild-linux-s390x": "0.14.54",
- "esbuild-netbsd-64": "0.14.54",
- "esbuild-openbsd-64": "0.14.54",
- "esbuild-sunos-64": "0.14.54",
- "esbuild-windows-32": "0.14.54",
- "esbuild-windows-64": "0.14.54",
- "esbuild-windows-arm64": "0.14.54"
+ "@esbuild/linux-loong64": "0.15.7",
+ "esbuild-android-64": "0.15.7",
+ "esbuild-android-arm64": "0.15.7",
+ "esbuild-darwin-64": "0.15.7",
+ "esbuild-darwin-arm64": "0.15.7",
+ "esbuild-freebsd-64": "0.15.7",
+ "esbuild-freebsd-arm64": "0.15.7",
+ "esbuild-linux-32": "0.15.7",
+ "esbuild-linux-64": "0.15.7",
+ "esbuild-linux-arm": "0.15.7",
+ "esbuild-linux-arm64": "0.15.7",
+ "esbuild-linux-mips64le": "0.15.7",
+ "esbuild-linux-ppc64le": "0.15.7",
+ "esbuild-linux-riscv64": "0.15.7",
+ "esbuild-linux-s390x": "0.15.7",
+ "esbuild-netbsd-64": "0.15.7",
+ "esbuild-openbsd-64": "0.15.7",
+ "esbuild-sunos-64": "0.15.7",
+ "esbuild-windows-32": "0.15.7",
+ "esbuild-windows-64": "0.15.7",
+ "esbuild-windows-arm64": "0.15.7"
}
},
"esbuild-android-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
- "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.7.tgz",
+ "integrity": "sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==",
"optional": true
},
"esbuild-android-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
- "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.7.tgz",
+ "integrity": "sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==",
"optional": true
},
"esbuild-darwin-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
- "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.7.tgz",
+ "integrity": "sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==",
"optional": true
},
"esbuild-darwin-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
- "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.7.tgz",
+ "integrity": "sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==",
"optional": true
},
"esbuild-freebsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
- "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.7.tgz",
+ "integrity": "sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==",
"optional": true
},
"esbuild-freebsd-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
- "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.7.tgz",
+ "integrity": "sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==",
"optional": true
},
"esbuild-linux-32": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
- "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.7.tgz",
+ "integrity": "sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==",
"optional": true
},
"esbuild-linux-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
- "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.7.tgz",
+ "integrity": "sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==",
"optional": true
},
"esbuild-linux-arm": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
- "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.7.tgz",
+ "integrity": "sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==",
"optional": true
},
"esbuild-linux-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
- "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.7.tgz",
+ "integrity": "sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==",
"optional": true
},
"esbuild-linux-mips64le": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
- "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.7.tgz",
+ "integrity": "sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==",
"optional": true
},
"esbuild-linux-ppc64le": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
- "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.7.tgz",
+ "integrity": "sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==",
"optional": true
},
"esbuild-linux-riscv64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
- "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.7.tgz",
+ "integrity": "sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==",
"optional": true
},
"esbuild-linux-s390x": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
- "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.7.tgz",
+ "integrity": "sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==",
"optional": true
},
"esbuild-loader": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.19.0.tgz",
- "integrity": "sha512-urGNVE6Tl2rqx92ElKi/LiExXjGvcH6HfDBFzJ9Ppwqh4n6Jmx8x7RKAyMzSM78b6CAaJLhDncG5sPrL0ROh5Q==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.20.0.tgz",
+ "integrity": "sha512-dr+j8O4w5RvqZ7I4PPB4EIyVTd679EBQnMm+JBB7av+vu05Zpje2IpK5N3ld1VWa+WxrInIbNFAg093+E1aRsA==",
"requires": {
- "esbuild": "^0.14.39",
+ "esbuild": "^0.15.6",
"joycon": "^3.0.1",
"json5": "^2.2.0",
"loader-utils": "^2.0.0",
@@ -15730,39 +15801,39 @@
}
},
"esbuild-netbsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
- "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.7.tgz",
+ "integrity": "sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==",
"optional": true
},
"esbuild-openbsd-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
- "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.7.tgz",
+ "integrity": "sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==",
"optional": true
},
"esbuild-sunos-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
- "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.7.tgz",
+ "integrity": "sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==",
"optional": true
},
"esbuild-windows-32": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
- "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.7.tgz",
+ "integrity": "sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==",
"optional": true
},
"esbuild-windows-64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
- "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.7.tgz",
+ "integrity": "sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==",
"optional": true
},
"esbuild-windows-arm64": {
- "version": "0.14.54",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
- "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
+ "version": "0.15.7",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.7.tgz",
+ "integrity": "sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==",
"optional": true
},
"escalade": {
@@ -15836,14 +15907,15 @@
}
},
"eslint": {
- "version": "8.22.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
- "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
+ "version": "8.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz",
+ "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.3.0",
+ "@eslint/eslintrc": "^1.3.1",
"@humanwhocodes/config-array": "^0.10.4",
"@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@humanwhocodes/module-importer": "^1.0.1",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -15853,7 +15925,7 @@
"eslint-scope": "^7.1.1",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.3",
+ "espree": "^9.4.0",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -15878,8 +15950,7 @@
"regexpp": "^3.2.0",
"strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
+ "text-table": "^0.2.0"
},
"dependencies": {
"ajv": {
@@ -16075,9 +16146,9 @@
"dev": true
},
"espree": {
- "version": "9.3.3",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
- "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+ "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
"dev": true,
"requires": {
"acorn": "^8.8.0",
@@ -16160,16 +16231,16 @@
"dev": true
},
"expect": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
- "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.0.3.tgz",
+ "integrity": "sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q==",
"dev": true,
"requires": {
- "@jest/expect-utils": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3"
+ "@jest/expect-utils": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3"
}
},
"fast-deep-equal": {
@@ -16178,9 +16249,9 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -16578,9 +16649,9 @@
}
},
"gsap": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.11.0.tgz",
- "integrity": "sha512-TV5aFGqXht+0o/CelnhCikSe3QGeG+q1XA/fyFFsMzesILHgWgFWIz0NuXIgcMaL5h7MG2l+j0BTupS5YyYkrw=="
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.11.1.tgz",
+ "integrity": "sha512-UKuJ0UPhntFHMwT6URFQ4cTQv88xc7Kd9Dhxt7qX9IPhC+d+/a5wKW5E5Vn33hZ53nBI1JfApcEbzKgXkcuPZw=="
},
"hard-rejection": {
"version": "2.1.0",
@@ -17085,21 +17156,21 @@
}
},
"jest": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
- "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.0.3.tgz",
+ "integrity": "sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ==",
"dev": true,
"requires": {
- "@jest/core": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.0.3",
+ "@jest/types": "^29.0.3",
"import-local": "^3.0.2",
- "jest-cli": "^28.1.3"
+ "jest-cli": "^29.0.3"
}
},
"jest-changed-files": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz",
- "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz",
+ "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==",
"dev": true,
"requires": {
"execa": "^5.0.0",
@@ -17107,228 +17178,228 @@
}
},
"jest-circus": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz",
- "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.0.3.tgz",
+ "integrity": "sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg==",
"dev": true,
"requires": {
- "@jest/environment": "^28.1.3",
- "@jest/expect": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/expect": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-each": "^29.0.3",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
"p-limit": "^3.1.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-cli": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz",
- "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.0.3.tgz",
+ "integrity": "sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ==",
"dev": true,
"requires": {
- "@jest/core": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/core": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-config": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
}
},
"jest-config": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz",
- "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.0.3.tgz",
+ "integrity": "sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^28.1.3",
- "@jest/types": "^28.1.3",
- "babel-jest": "^28.1.3",
+ "@jest/test-sequencer": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "babel-jest": "^29.0.3",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^28.1.3",
- "jest-environment-node": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-runner": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-circus": "^29.0.3",
+ "jest-environment-node": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-runner": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
}
},
"jest-diff": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
- "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.0.3.tgz",
+ "integrity": "sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "diff-sequences": "^28.1.1",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "diff-sequences": "^29.0.0",
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
}
},
"jest-docblock": {
- "version": "28.1.1",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz",
- "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz",
+ "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz",
- "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.0.3.tgz",
+ "integrity": "sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
- "jest-util": "^28.1.3",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.0.0",
+ "jest-util": "^29.0.3",
+ "pretty-format": "^29.0.3"
}
},
"jest-environment-jsdom": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz",
- "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.0.3.tgz",
+ "integrity": "sha512-KIGvpm12c71hoYTjL4wC2c8K6KfhOHJqJtaHc1IApu5rG047YWZoEP13BlbucWfzGISBrmli8KFqdhdQEa8Wnw==",
"dev": true,
"requires": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
- "@types/jsdom": "^16.2.4",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@types/jsdom": "^20.0.0",
"@types/node": "*",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3",
- "jsdom": "^19.0.0"
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jsdom": "^20.0.0"
}
},
"jest-environment-node": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz",
- "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.0.3.tgz",
+ "integrity": "sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg==",
"dev": true,
"requires": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
- "jest-mock": "^28.1.3",
- "jest-util": "^28.1.3"
+ "jest-mock": "^29.0.3",
+ "jest-util": "^29.0.3"
}
},
"jest-extended": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.0.2.tgz",
- "integrity": "sha512-LnVZvwWLRV9AL8J7f4frKu0KHuTrbIFK15IqrvSwbFCYxalkuC5l7HfcofsksePrvlEJ2WAcfYNnu1+bEGvInA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.1.0.tgz",
+ "integrity": "sha512-BbuAVUb2dchgwm7euayVt/7hYlkKaknQItKyzie7Li8fmXCglgf21XJeRIdOITZ/cMOTTj5Oh5IjQOxQOe/hfQ==",
"dev": true,
"requires": {
- "jest-diff": "^28.0.0",
- "jest-get-type": "^28.0.0"
+ "jest-diff": "^29.0.0",
+ "jest-get-type": "^29.0.0"
}
},
"jest-get-type": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
- "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz",
+ "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==",
"dev": true
},
"jest-haste-map": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
- "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.0.3.tgz",
+ "integrity": "sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.3.2",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^28.0.2",
- "jest-util": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-util": "^29.0.3",
+ "jest-worker": "^29.0.3",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
}
},
"jest-leak-detector": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz",
- "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz",
+ "integrity": "sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ==",
"dev": true,
"requires": {
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
}
},
"jest-matcher-utils": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
- "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz",
+ "integrity": "sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "pretty-format": "^28.1.3"
+ "jest-diff": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "pretty-format": "^29.0.3"
}
},
"jest-message-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
- "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.0.3.tgz",
+ "integrity": "sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-mock": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz",
- "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.0.3.tgz",
+ "integrity": "sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*"
}
},
@@ -17340,135 +17411,136 @@
"requires": {}
},
"jest-regex-util": {
- "version": "28.0.2",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
- "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz",
+ "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==",
"dev": true
},
"jest-resolve": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
- "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.0.3.tgz",
+ "integrity": "sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^28.1.3",
- "jest-validate": "^28.1.3",
+ "jest-util": "^29.0.3",
+ "jest-validate": "^29.0.3",
"resolve": "^1.20.0",
"resolve.exports": "^1.1.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz",
- "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz",
+ "integrity": "sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw==",
"dev": true,
"requires": {
- "jest-regex-util": "^28.0.2",
- "jest-snapshot": "^28.1.3"
+ "jest-regex-util": "^29.0.0",
+ "jest-snapshot": "^29.0.3"
}
},
"jest-runner": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz",
- "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.0.3.tgz",
+ "integrity": "sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw==",
"dev": true,
"requires": {
- "@jest/console": "^28.1.3",
- "@jest/environment": "^28.1.3",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/console": "^29.0.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.10.2",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^28.1.1",
- "jest-environment-node": "^28.1.3",
- "jest-haste-map": "^28.1.3",
- "jest-leak-detector": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-resolve": "^28.1.3",
- "jest-runtime": "^28.1.3",
- "jest-util": "^28.1.3",
- "jest-watcher": "^28.1.3",
- "jest-worker": "^28.1.3",
+ "jest-docblock": "^29.0.0",
+ "jest-environment-node": "^29.0.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-leak-detector": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-resolve": "^29.0.3",
+ "jest-runtime": "^29.0.3",
+ "jest-util": "^29.0.3",
+ "jest-watcher": "^29.0.3",
+ "jest-worker": "^29.0.3",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
}
},
"jest-runtime": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz",
- "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.0.3.tgz",
+ "integrity": "sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ==",
"dev": true,
"requires": {
- "@jest/environment": "^28.1.3",
- "@jest/fake-timers": "^28.1.3",
- "@jest/globals": "^28.1.3",
- "@jest/source-map": "^28.1.2",
- "@jest/test-result": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/environment": "^29.0.3",
+ "@jest/fake-timers": "^29.0.3",
+ "@jest/globals": "^29.0.3",
+ "@jest/source-map": "^29.0.0",
+ "@jest/test-result": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
+ "@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-mock": "^28.1.3",
- "jest-regex-util": "^28.0.2",
- "jest-resolve": "^28.1.3",
- "jest-snapshot": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-haste-map": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-mock": "^29.0.3",
+ "jest-regex-util": "^29.0.0",
+ "jest-resolve": "^29.0.3",
+ "jest-snapshot": "^29.0.3",
+ "jest-util": "^29.0.3",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
}
},
"jest-snapshot": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz",
- "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.0.3.tgz",
+ "integrity": "sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^28.1.3",
- "@jest/transform": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/expect-utils": "^29.0.3",
+ "@jest/transform": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^28.1.3",
+ "expect": "^29.0.3",
"graceful-fs": "^4.2.9",
- "jest-diff": "^28.1.3",
- "jest-get-type": "^28.0.2",
- "jest-haste-map": "^28.1.3",
- "jest-matcher-utils": "^28.1.3",
- "jest-message-util": "^28.1.3",
- "jest-util": "^28.1.3",
+ "jest-diff": "^29.0.3",
+ "jest-get-type": "^29.0.0",
+ "jest-haste-map": "^29.0.3",
+ "jest-matcher-utils": "^29.0.3",
+ "jest-message-util": "^29.0.3",
+ "jest-util": "^29.0.3",
"natural-compare": "^1.4.0",
- "pretty-format": "^28.1.3",
+ "pretty-format": "^29.0.3",
"semver": "^7.3.5"
}
},
"jest-util": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
- "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.0.3.tgz",
+ "integrity": "sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -17477,17 +17549,17 @@
}
},
"jest-validate": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
- "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.0.3.tgz",
+ "integrity": "sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw==",
"dev": true,
"requires": {
- "@jest/types": "^28.1.3",
+ "@jest/types": "^29.0.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^28.0.2",
+ "jest-get-type": "^29.0.0",
"leven": "^3.1.0",
- "pretty-format": "^28.1.3"
+ "pretty-format": "^29.0.3"
},
"dependencies": {
"camelcase": {
@@ -17499,25 +17571,25 @@
}
},
"jest-watcher": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
- "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.0.3.tgz",
+ "integrity": "sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw==",
"dev": true,
"requires": {
- "@jest/test-result": "^28.1.3",
- "@jest/types": "^28.1.3",
+ "@jest/test-result": "^29.0.3",
+ "@jest/types": "^29.0.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.10.2",
- "jest-util": "^28.1.3",
+ "jest-util": "^29.0.3",
"string-length": "^4.0.1"
}
},
"jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.0.3.tgz",
+ "integrity": "sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -17542,9 +17614,9 @@
"integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="
},
"jquery": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
- "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
+ "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw=="
},
"jquery.are-you-sure": {
"version": "1.9.0",
@@ -17570,28 +17642,28 @@
}
},
"jsdom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz",
+ "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==",
"dev": true,
"requires": {
- "abab": "^2.0.5",
- "acorn": "^8.5.0",
+ "abab": "^2.0.6",
+ "acorn": "^8.7.1",
"acorn-globals": "^6.0.0",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
- "data-urls": "^3.0.1",
+ "data-urls": "^3.0.2",
"decimal.js": "^10.3.1",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0",
"html-encoding-sniffer": "^3.0.0",
"http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.1",
"is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
+ "parse5": "^7.0.0",
+ "saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
@@ -17599,8 +17671,8 @@
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0",
"whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0",
- "ws": "^8.2.3",
+ "whatwg-url": "^11.0.0",
+ "ws": "^8.8.0",
"xml-name-validator": "^4.0.0"
}
},
@@ -17653,9 +17725,9 @@
}
},
"jsonpath-plus": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz",
- "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz",
+ "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==",
"dev": true
},
"jsonpointer": {
@@ -17669,6 +17741,21 @@
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz",
"integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ=="
},
+ "katex": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.2.tgz",
+ "integrity": "sha512-70DJdQAyh9EMsthw3AaQlDyFf54X7nWEUIa5W+rq8XOpEk//w5Th7/8SqFqpvi/KZ2t6MHUj4f9wLmztBmAYQA==",
+ "requires": {
+ "commander": "^8.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
+ }
+ }
+ },
"khroma": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
@@ -18029,9 +18116,9 @@
"dev": true
},
"marked": {
- "version": "4.0.19",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.19.tgz",
- "integrity": "sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ=="
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
+ "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA=="
},
"mathml-tag-names": {
"version": "2.1.3",
@@ -18301,6 +18388,15 @@
"jsep": "^1.2.0",
"jsonpath-plus": "^6.0.1",
"lodash.topath": "^4.5.2"
+ },
+ "dependencies": {
+ "jsonpath-plus": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz",
+ "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==",
+ "dev": true,
+ "optional": true
+ }
}
},
"node-fetch": {
@@ -18392,9 +18488,9 @@
}
},
"nwsapi": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
- "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+ "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
"dev": true
},
"object-assign": {
@@ -18570,10 +18666,21 @@
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
},
"parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz",
+ "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==",
+ "dev": true,
+ "requires": {
+ "entities": "^4.4.0"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
+ "dev": true
+ }
+ }
},
"path-exists": {
"version": "4.0.0",
@@ -18667,9 +18774,9 @@
}
},
"playwright-core": {
- "version": "1.25.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz",
- "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==",
+ "version": "1.25.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.2.tgz",
+ "integrity": "sha512-0yTbUE9lIddkEpLHL3u8PoCL+pWiZtj5A/j3U7YoNjcmKKDGBnCrgHJMzwd2J5vy6l28q4ki3JIuz7McLHhl1A==",
"dev": true
},
"pluralize": {
@@ -18784,13 +18891,12 @@
"optional": true
},
"pretty-format": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
- "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
+ "version": "29.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.0.3.tgz",
+ "integrity": "sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==",
"dev": true,
"requires": {
- "@jest/schemas": "^28.1.3",
- "ansi-regex": "^5.0.1",
+ "@jest/schemas": "^29.0.0",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
@@ -19158,11 +19264,10 @@
"integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
},
"rollup": {
- "version": "2.78.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
- "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz",
+ "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==",
"dev": true,
- "peer": true,
"requires": {
"fsevents": "~2.3.2"
}
@@ -19224,9 +19329,9 @@
"optional": true
},
"saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"dev": true,
"requires": {
"xmlchars": "^2.2.0"
@@ -19694,9 +19799,9 @@
}
},
"stylis": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz",
- "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ=="
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.2.tgz",
+ "integrity": "sha512-Nn2CCrG2ZaFziDxaZPN43CXqn+j7tcdjPFCkRBkFue8QYXC2HdEwnw5TCBo4yQZ2WxKYeSi0fdoOrtEqgDrXbA=="
},
"superstruct": {
"version": "0.10.13",
@@ -19713,9 +19818,9 @@
}
},
"supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"requires": {
"has-flag": "^4.0.0",
@@ -19823,9 +19928,9 @@
}
},
"terser-webpack-plugin": {
- "version": "5.3.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz",
- "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==",
+ "version": "5.3.6",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+ "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
"requires": {
"@jridgewell/trace-mapping": "^0.3.14",
"jest-worker": "^27.4.5",
@@ -19938,9 +20043,9 @@
"dev": true
},
"tough-cookie": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.1.tgz",
- "integrity": "sha512-Ns3k8QxkEzIfLZbRwLOrMPDqRa1BEAl4BzNNAOYY4BhBmEkf+HvP467F4NrD9loK3NcYflWOpUH3LJg0ehq/rQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+ "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
"dev": true,
"requires": {
"psl": "^1.1.33",
@@ -20073,18 +20178,18 @@
"dev": true
},
"update-browserslist-db": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
- "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
+ "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
}
},
"updates": {
- "version": "13.1.4",
- "resolved": "https://registry.npmjs.org/updates/-/updates-13.1.4.tgz",
- "integrity": "sha512-s8FKpHpREDoIbd1JDcEvsdf+wenhcQjrZK8v7OTIW69kozPttm6rW84Mm/LFouiDVYgaubY3us7sZlRUiGVx4Q==",
+ "version": "13.1.5",
+ "resolved": "https://registry.npmjs.org/updates/-/updates-13.1.5.tgz",
+ "integrity": "sha512-7WPn2P8WskugozCdhMI+D1m9OmJnzZqRUuDYM2G8O55TuyvfqOT2vdR2+InkpXUyK6ZNmbLopvw++h9YQElbmg==",
"dev": true
},
"uri-js": {
@@ -20170,9 +20275,9 @@
}
},
"vm2": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz",
- "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==",
+ "version": "3.9.11",
+ "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz",
+ "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==",
"dev": true,
"requires": {
"acorn": "^8.7.0",
@@ -20210,9 +20315,9 @@
}
},
"vue-eslint-parser": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz",
- "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz",
+ "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==",
"dev": true,
"requires": {
"debug": "^4.3.4",
@@ -20503,9 +20608,9 @@
"dev": true
},
"whatwg-url": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dev": true,
"requires": {
"tr46": "^3.0.0",
@@ -20630,9 +20735,9 @@
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
},
"ansi-styles": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
- "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ=="
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz",
+ "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg=="
},
"emoji-regex": {
"version": "9.2.2",
diff --git a/package.json b/package.json
index 5a937ced95..37571c01c2 100644
--- a/package.json
+++ b/package.json
@@ -9,17 +9,18 @@
"dependencies": {
"@claviska/jquery-minicolors": "2.3.6",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-2",
- "@primer/octicons": "17.4.1",
+ "@primer/octicons": "17.5.0",
"add-asset-webpack-plugin": "2.0.1",
"css-loader": "6.7.1",
"dropzone": "6.0.0-beta.2",
"easymde": "2.17.0",
- "esbuild-loader": "2.19.0",
+ "esbuild-loader": "2.20.0",
"escape-goat": "4.0.0",
- "fast-glob": "3.2.11",
+ "fast-glob": "3.2.12",
"font-awesome": "4.7.0",
- "jquery": "3.6.0",
+ "jquery": "3.6.1",
"jquery.are-you-sure": "1.9.0",
+ "katex": "0.16.2",
"less": "4.1.3",
"less-loader": "11.0.0",
"license-checker-webpack-plugin": "0.2.1",
@@ -46,23 +47,23 @@
"wrap-ansi": "8.0.1"
},
"devDependencies": {
- "@playwright/test": "1.25.1",
+ "@playwright/test": "1.25.2",
"@stoplight/spectral-cli": "6.5.1",
- "eslint": "8.22.0",
+ "eslint": "8.23.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-jquery": "1.5.1",
"eslint-plugin-sonarjs": "0.15.0",
"eslint-plugin-unicorn": "43.0.2",
"eslint-plugin-vue": "9.4.0",
- "jest": "28.1.3",
- "jest-environment-jsdom": "28.1.3",
- "jest-extended": "3.0.2",
+ "jest": "29.0.3",
+ "jest-environment-jsdom": "29.0.3",
+ "jest-extended": "3.1.0",
"markdownlint-cli": "0.32.2",
"postcss-less": "6.0.0",
"stylelint": "14.11.0",
"stylelint-config-standard": "28.0.0",
"svgo": "2.8.0",
- "updates": "13.1.4"
+ "updates": "13.1.5"
},
"browserslist": [
"defaults",
diff --git a/public/img/svg/octicon-accessibility-inset.svg b/public/img/svg/octicon-accessibility-inset.svg
new file mode 100644
index 0000000000..ec303f9cb2
--- /dev/null
+++ b/public/img/svg/octicon-accessibility-inset.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/svg/octicon-shield-slash.svg b/public/img/svg/octicon-shield-slash.svg
new file mode 100644
index 0000000000..ba4db6776b
--- /dev/null
+++ b/public/img/svg/octicon-shield-slash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/routers/api/packages/api.go b/routers/api/packages/api.go
index 93f9afca7b..3354fe12d4 100644
--- a/routers/api/packages/api.go
+++ b/routers/api/packages/api.go
@@ -69,7 +69,7 @@ func Routes(ctx gocontext.Context) *web.Route {
r.Get("/p2/{vendorname}/{projectname}.json", composer.PackageMetadata)
r.Get("/files/{package}/{version}/{filename}", composer.DownloadPackageFile)
r.Put("", reqPackageAccess(perm.AccessModeWrite), composer.UploadPackage)
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/conan", func() {
r.Group("/v1", func() {
r.Get("/ping", conan.Ping)
@@ -157,7 +157,7 @@ func Routes(ctx gocontext.Context) *web.Route {
}, conan.ExtractPathParameters)
})
})
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/generic", func() {
r.Group("/{packagename}/{packageversion}", func() {
r.Delete("", reqPackageAccess(perm.AccessModeWrite), generic.DeletePackage)
@@ -169,33 +169,35 @@ func Routes(ctx gocontext.Context) *web.Route {
}, reqPackageAccess(perm.AccessModeWrite))
})
})
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/helm", func() {
r.Get("/index.yaml", helm.Index)
r.Get("/{filename}", helm.DownloadPackageFile)
r.Post("/api/charts", reqPackageAccess(perm.AccessModeWrite), helm.UploadPackage)
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/maven", func() {
r.Put("/*", reqPackageAccess(perm.AccessModeWrite), maven.UploadPackageFile)
r.Get("/*", maven.DownloadPackageFile)
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/nuget", func() {
- r.Get("/index.json", nuget.ServiceIndex)
- r.Get("/query", nuget.SearchService)
- r.Group("/registration/{id}", func() {
- r.Get("/index.json", nuget.RegistrationIndex)
- r.Get("/{version}", nuget.RegistrationLeaf)
- })
- r.Group("/package/{id}", func() {
- r.Get("/index.json", nuget.EnumeratePackageVersions)
- r.Get("/{version}/{filename}", nuget.DownloadPackageFile)
- })
+ r.Get("/index.json", nuget.ServiceIndex) // Needs to be unauthenticated for the NuGet client.
r.Group("", func() {
- r.Put("/", nuget.UploadPackage)
- r.Put("/symbolpackage", nuget.UploadSymbolPackage)
- r.Delete("/{id}/{version}", nuget.DeletePackage)
- }, reqPackageAccess(perm.AccessModeWrite))
- r.Get("/symbols/{filename}/{guid:[0-9a-f]{32}}FFFFFFFF/{filename2}", nuget.DownloadSymbolFile)
+ r.Get("/query", nuget.SearchService)
+ r.Group("/registration/{id}", func() {
+ r.Get("/index.json", nuget.RegistrationIndex)
+ r.Get("/{version}", nuget.RegistrationLeaf)
+ })
+ r.Group("/package/{id}", func() {
+ r.Get("/index.json", nuget.EnumeratePackageVersions)
+ r.Get("/{version}/{filename}", nuget.DownloadPackageFile)
+ })
+ r.Group("", func() {
+ r.Put("/", nuget.UploadPackage)
+ r.Put("/symbolpackage", nuget.UploadSymbolPackage)
+ r.Delete("/{id}/{version}", nuget.DeletePackage)
+ }, reqPackageAccess(perm.AccessModeWrite))
+ r.Get("/symbols/{filename}/{guid:[0-9a-f]{32}}FFFFFFFF/{filename2}", nuget.DownloadSymbolFile)
+ }, reqPackageAccess(perm.AccessModeRead))
})
r.Group("/npm", func() {
r.Group("/@{scope}/{id}", func() {
@@ -236,7 +238,10 @@ func Routes(ctx gocontext.Context) *web.Route {
r.Delete("", npm.DeletePackageTag)
}, reqPackageAccess(perm.AccessModeWrite))
})
- })
+ r.Group("/-/v1/search", func() {
+ r.Get("", npm.PackageSearch)
+ })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/pub", func() {
r.Group("/api/packages", func() {
r.Group("/versions/new", func() {
@@ -250,12 +255,12 @@ func Routes(ctx gocontext.Context) *web.Route {
r.Get("/{version}", pub.PackageVersionMetadata)
})
})
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/pypi", func() {
r.Post("/", reqPackageAccess(perm.AccessModeWrite), pypi.UploadPackageFile)
r.Get("/files/{id}/{version}/{filename}", pypi.DownloadPackageFile)
r.Get("/simple/{id}", pypi.PackageMetadata)
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/rubygems", func() {
r.Get("/specs.4.8.gz", rubygems.EnumeratePackages)
r.Get("/latest_specs.4.8.gz", rubygems.EnumeratePackagesLatest)
@@ -266,7 +271,7 @@ func Routes(ctx gocontext.Context) *web.Route {
r.Post("/", rubygems.UploadPackageFile)
r.Delete("/yank", rubygems.DeletePackage)
}, reqPackageAccess(perm.AccessModeWrite))
- })
+ }, reqPackageAccess(perm.AccessModeRead))
r.Group("/vagrant", func() {
r.Group("/authenticate", func() {
r.Get("", vagrant.CheckAuthenticate)
@@ -279,8 +284,8 @@ func Routes(ctx gocontext.Context) *web.Route {
r.Put("", reqPackageAccess(perm.AccessModeWrite), vagrant.UploadPackageFile)
})
})
- })
- }, context_service.UserAssignmentWeb(), context.PackageAssignment(), reqPackageAccess(perm.AccessModeRead))
+ }, reqPackageAccess(perm.AccessModeRead))
+ }, context_service.UserAssignmentWeb(), context.PackageAssignment())
return r
}
diff --git a/routers/api/packages/npm/api.go b/routers/api/packages/npm/api.go
index 763c595152..d1027763a8 100644
--- a/routers/api/packages/npm/api.go
+++ b/routers/api/packages/npm/api.go
@@ -74,3 +74,38 @@ func createPackageMetadataVersion(registryURL string, pd *packages_model.Package
},
}
}
+
+func createPackageSearchResponse(pds []*packages_model.PackageDescriptor, total int64) *npm_module.PackageSearch {
+ objects := make([]*npm_module.PackageSearchObject, 0, len(pds))
+ for _, pd := range pds {
+ metadata := pd.Metadata.(*npm_module.Metadata)
+
+ scope := metadata.Scope
+ if scope == "" {
+ scope = "unscoped"
+ }
+
+ objects = append(objects, &npm_module.PackageSearchObject{
+ Package: &npm_module.PackageSearchPackage{
+ Scope: scope,
+ Name: metadata.Name,
+ Version: pd.Version.Version,
+ Date: pd.Version.CreatedUnix.AsLocalTime(),
+ Description: metadata.Description,
+ Author: npm_module.User{Name: metadata.Author},
+ Publisher: npm_module.User{Name: pd.Owner.Name},
+ Maintainers: []npm_module.User{}, // npm cli needs this field
+ Keywords: metadata.Keywords,
+ Links: &npm_module.PackageSearchPackageLinks{
+ Registry: pd.FullWebLink(),
+ Homepage: metadata.ProjectURL,
+ },
+ },
+ })
+ }
+
+ return &npm_module.PackageSearch{
+ Objects: objects,
+ Total: total,
+ }
+}
diff --git a/routers/api/packages/npm/npm.go b/routers/api/packages/npm/npm.go
index 66b999d47e..2989ce6e7f 100644
--- a/routers/api/packages/npm/npm.go
+++ b/routers/api/packages/npm/npm.go
@@ -350,3 +350,35 @@ func setPackageTag(tag string, pv *packages_model.PackageVersion, deleteOnly boo
return committer.Commit()
}
+
+func PackageSearch(ctx *context.Context) {
+ pvs, total, err := packages_model.SearchLatestVersions(ctx, &packages_model.PackageSearchOptions{
+ OwnerID: ctx.Package.Owner.ID,
+ Type: packages_model.TypeNpm,
+ Name: packages_model.SearchValue{
+ ExactMatch: false,
+ Value: ctx.FormTrim("text"),
+ },
+ Paginator: db.NewAbsoluteListOptions(
+ ctx.FormInt("from"),
+ ctx.FormInt("size"),
+ ),
+ })
+ if err != nil {
+ apiError(ctx, http.StatusInternalServerError, err)
+ return
+ }
+
+ pds, err := packages_model.GetPackageDescriptors(ctx, pvs)
+ if err != nil {
+ apiError(ctx, http.StatusInternalServerError, err)
+ return
+ }
+
+ resp := createPackageSearchResponse(
+ pds,
+ total,
+ )
+
+ ctx.JSON(http.StatusOK, resp)
+}
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 54cba53b23..9083de0b72 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -1025,6 +1025,7 @@ func Routes(ctx gocontext.Context) *web.Route {
m.Get(".{diffType:diff|patch}", repo.DownloadPullDiffOrPatch)
m.Post("/update", reqToken(""), repo.UpdatePullRequest)
m.Get("/commits", repo.GetPullRequestCommits)
+ m.Get("/files", repo.GetPullRequestFiles)
m.Combo("/merge").Get(repo.IsPullRequestMerged).
Post(reqToken(""), mustNotBeArchived, bind(forms.MergePullRequestForm{}), repo.MergePullRequest).
Delete(reqToken(""), mustNotBeArchived, repo.CancelScheduledAutoMerge)
diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go
index c891d0e122..f3e7834a49 100644
--- a/routers/api/v1/org/team.go
+++ b/routers/api/v1/org/team.go
@@ -759,13 +759,17 @@ func SearchTeam(ctx *context.APIContext) {
listOptions := utils.GetListOptions(ctx)
opts := &organization.SearchTeamOptions{
- UserID: ctx.Doer.ID,
Keyword: ctx.FormTrim("q"),
OrgID: ctx.Org.Organization.ID,
IncludeDesc: ctx.FormString("include_desc") == "" || ctx.FormBool("include_desc"),
ListOptions: listOptions,
}
+ // Only admin is allowd to search for all teams
+ if !ctx.Doer.IsAdmin {
+ opts.UserID = ctx.Doer.ID
+ }
+
teams, maxResults, err := organization.SearchTeam(opts)
if err != nil {
log.Error("SearchTeam failed: %v", err)
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index dda05203df..2cf30e7c47 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -26,6 +26,7 @@ import (
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
+ "code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/web"
@@ -33,6 +34,7 @@ import (
asymkey_service "code.gitea.io/gitea/services/asymkey"
"code.gitea.io/gitea/services/automerge"
"code.gitea.io/gitea/services/forms"
+ "code.gitea.io/gitea/services/gitdiff"
issue_service "code.gitea.io/gitea/services/issue"
pull_service "code.gitea.io/gitea/services/pull"
repo_service "code.gitea.io/gitea/services/repository"
@@ -1323,3 +1325,137 @@ func GetPullRequestCommits(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, &apiCommits)
}
+
+// GetPullRequestFiles gets all changed files associated with a given PR
+func GetPullRequestFiles(ctx *context.APIContext) {
+ // swagger:operation GET /repos/{owner}/{repo}/pulls/{index}/files repository repoGetPullRequestFiles
+ // ---
+ // summary: Get changed files for a pull request
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: owner
+ // in: path
+ // description: owner of the repo
+ // type: string
+ // required: true
+ // - name: repo
+ // in: path
+ // description: name of the repo
+ // type: string
+ // required: true
+ // - name: index
+ // in: path
+ // description: index of the pull request to get
+ // type: integer
+ // format: int64
+ // required: true
+ // - name: skip-to
+ // in: query
+ // description: skip to given file
+ // type: string
+ // - name: whitespace
+ // in: query
+ // description: whitespace behavior
+ // type: string
+ // enum: [ignore-all, ignore-change, ignore-eol, show-all]
+ // - name: page
+ // in: query
+ // description: page number of results to return (1-based)
+ // type: integer
+ // - name: limit
+ // in: query
+ // description: page size of results
+ // type: integer
+ // responses:
+ // "200":
+ // "$ref": "#/responses/ChangedFileList"
+ // "404":
+ // "$ref": "#/responses/notFound"
+
+ pr, err := issues_model.GetPullRequestByIndex(ctx, ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
+ if err != nil {
+ if issues_model.IsErrPullRequestNotExist(err) {
+ ctx.NotFound()
+ } else {
+ ctx.Error(http.StatusInternalServerError, "GetPullRequestByIndex", err)
+ }
+ return
+ }
+
+ if err := pr.LoadBaseRepo(); err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+
+ if err := pr.LoadHeadRepo(); err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+
+ baseGitRepo := ctx.Repo.GitRepo
+
+ var prInfo *git.CompareInfo
+ if pr.HasMerged {
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitRefName(), true, false)
+ } else {
+ prInfo, err = baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitRefName(), true, false)
+ }
+ if err != nil {
+ ctx.ServerError("GetCompareInfo", err)
+ return
+ }
+
+ headCommitID, err := baseGitRepo.GetRefCommitID(pr.GetGitRefName())
+ if err != nil {
+ ctx.ServerError("GetRefCommitID", err)
+ return
+ }
+
+ startCommitID := prInfo.MergeBase
+ endCommitID := headCommitID
+
+ maxLines, maxFiles := setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles
+
+ diff, err := gitdiff.GetDiff(baseGitRepo,
+ &gitdiff.DiffOptions{
+ BeforeCommitID: startCommitID,
+ AfterCommitID: endCommitID,
+ SkipTo: ctx.FormString("skip-to"),
+ MaxLines: maxLines,
+ MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
+ MaxFiles: maxFiles,
+ WhitespaceBehavior: gitdiff.GetWhitespaceFlag(ctx.FormString("whitespace")),
+ })
+ if err != nil {
+ ctx.ServerError("GetDiff", err)
+ return
+ }
+
+ listOptions := utils.GetListOptions(ctx)
+
+ totalNumberOfFiles := diff.NumFiles
+ totalNumberOfPages := int(math.Ceil(float64(totalNumberOfFiles) / float64(listOptions.PageSize)))
+
+ start, end := listOptions.GetStartEnd()
+
+ if end > totalNumberOfFiles {
+ end = totalNumberOfFiles
+ }
+
+ apiFiles := make([]*api.ChangedFile, 0, end-start)
+ for i := start; i < end; i++ {
+ apiFiles = append(apiFiles, convert.ToChangedFile(diff.Files[i], pr.HeadRepo, endCommitID))
+ }
+
+ ctx.SetLinkHeader(totalNumberOfFiles, listOptions.PageSize)
+ ctx.SetTotalCountHeader(int64(totalNumberOfFiles))
+
+ ctx.RespHeader().Set("X-Page", strconv.Itoa(listOptions.Page))
+ ctx.RespHeader().Set("X-PerPage", strconv.Itoa(listOptions.PageSize))
+ ctx.RespHeader().Set("X-PageCount", strconv.Itoa(totalNumberOfPages))
+ ctx.RespHeader().Set("X-HasMore", strconv.FormatBool(listOptions.Page < totalNumberOfPages))
+ ctx.AppendAccessControlExposeHeaders("X-Page", "X-PerPage", "X-PageCount", "X-HasMore")
+
+ ctx.JSON(http.StatusOK, &apiFiles)
+}
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 6f40bb3e42..319c4c781a 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -732,8 +732,13 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
var units []repo_model.RepoUnit
var deleteUnitTypes []unit_model.Type
+ currHasIssues := repo.UnitEnabledCtx(ctx, unit_model.TypeIssues)
+ newHasIssues := currHasIssues
if opts.HasIssues != nil {
- if *opts.HasIssues && opts.ExternalTracker != nil && !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
+ newHasIssues = *opts.HasIssues
+ }
+ if currHasIssues || newHasIssues {
+ if newHasIssues && opts.ExternalTracker != nil && !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
// Check that values are valid
if !validation.IsValidExternalURL(opts.ExternalTracker.ExternalTrackerURL) {
err := fmt.Errorf("External tracker URL not valid")
@@ -756,7 +761,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
},
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeIssues)
- } else if *opts.HasIssues && opts.ExternalTracker == nil && !unit_model.TypeIssues.UnitGlobalDisabled() {
+ } else if newHasIssues && opts.ExternalTracker == nil && !unit_model.TypeIssues.UnitGlobalDisabled() {
// Default to built-in tracker
var config *repo_model.IssuesConfig
@@ -783,7 +788,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Config: config,
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker)
- } else if !*opts.HasIssues {
+ } else if !newHasIssues {
if !unit_model.TypeExternalTracker.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker)
}
@@ -793,8 +798,13 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
}
}
+ currHasWiki := repo.UnitEnabledCtx(ctx, unit_model.TypeWiki)
+ newHasWiki := currHasWiki
if opts.HasWiki != nil {
- if *opts.HasWiki && opts.ExternalWiki != nil && !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
+ newHasWiki = *opts.HasWiki
+ }
+ if currHasWiki || newHasWiki {
+ if newHasWiki && opts.ExternalWiki != nil && !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
// Check that values are valid
if !validation.IsValidExternalURL(opts.ExternalWiki.ExternalWikiURL) {
err := fmt.Errorf("External wiki URL not valid")
@@ -810,7 +820,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
},
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeWiki)
- } else if *opts.HasWiki && opts.ExternalWiki == nil && !unit_model.TypeWiki.UnitGlobalDisabled() {
+ } else if newHasWiki && opts.ExternalWiki == nil && !unit_model.TypeWiki.UnitGlobalDisabled() {
config := &repo_model.UnitConfig{}
units = append(units, repo_model.RepoUnit{
RepoID: repo.ID,
@@ -818,7 +828,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Config: config,
})
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalWiki)
- } else if !*opts.HasWiki {
+ } else if !newHasWiki {
if !unit_model.TypeExternalWiki.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalWiki)
}
@@ -828,8 +838,13 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
}
}
+ currHasPullRequests := repo.UnitEnabledCtx(ctx, unit_model.TypePullRequests)
+ newHasPullRequests := currHasPullRequests
if opts.HasPullRequests != nil {
- if *opts.HasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
+ newHasPullRequests = *opts.HasPullRequests
+ }
+ if currHasPullRequests || newHasPullRequests {
+ if newHasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
// We do allow setting individual PR settings through the API, so
// we get the config settings and then set them
// if those settings were provided in the opts.
@@ -889,7 +904,7 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
Type: unit_model.TypePullRequests,
Config: config,
})
- } else if !*opts.HasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
+ } else if !newHasPullRequests && !unit_model.TypePullRequests.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePullRequests)
}
}
diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go
index 3522e24276..642b1b7b91 100644
--- a/routers/api/v1/swagger/repo.go
+++ b/routers/api/v1/swagger/repo.go
@@ -254,6 +254,28 @@ type swaggerCommitList struct {
Body []api.Commit `json:"body"`
}
+// ChangedFileList
+// swagger:response ChangedFileList
+type swaggerChangedFileList struct {
+ // The current page
+ Page int `json:"X-Page"`
+
+ // Commits per page
+ PerPage int `json:"X-PerPage"`
+
+ // Total commit count
+ Total int `json:"X-Total"`
+
+ // Total number of pages
+ PageCount int `json:"X-PageCount"`
+
+ // True if there is another page
+ HasMore bool `json:"X-HasMore"`
+
+ // in: body
+ Body []api.ChangedFile `json:"body"`
+}
+
// Note
// swagger:response Note
type swaggerNote struct {
diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go
index b400fdac8c..d145150535 100644
--- a/routers/web/auth/oauth.go
+++ b/routers/web/auth/oauth.go
@@ -645,7 +645,7 @@ func handleRefreshToken(ctx *context.Context, form forms.AccessTokenForm, server
if err != nil {
handleAccessTokenError(ctx, AccessTokenError{
ErrorCode: AccessTokenErrorCodeUnauthorizedClient,
- ErrorDescription: "client is not authorized",
+ ErrorDescription: "unable to parse refresh token",
})
return
}
@@ -688,14 +688,14 @@ func handleAuthorizationCode(ctx *context.Context, form forms.AccessTokenForm, s
if !app.ValidateClientSecret([]byte(form.ClientSecret)) {
handleAccessTokenError(ctx, AccessTokenError{
ErrorCode: AccessTokenErrorCodeUnauthorizedClient,
- ErrorDescription: "client is not authorized",
+ ErrorDescription: "invalid client secret",
})
return
}
if form.RedirectURI != "" && !app.ContainsRedirectURI(form.RedirectURI) {
handleAccessTokenError(ctx, AccessTokenError{
ErrorCode: AccessTokenErrorCodeUnauthorizedClient,
- ErrorDescription: "client is not authorized",
+ ErrorDescription: "unexpected redirect URI",
})
return
}
@@ -711,7 +711,7 @@ func handleAuthorizationCode(ctx *context.Context, form forms.AccessTokenForm, s
if !authorizationCode.ValidateCodeChallenge(form.CodeVerifier) {
handleAccessTokenError(ctx, AccessTokenError{
ErrorCode: AccessTokenErrorCodeUnauthorizedClient,
- ErrorDescription: "client is not authorized",
+ ErrorDescription: "failed PKCE code challenge",
})
return
}
diff --git a/routers/web/feed/convert.go b/routers/web/feed/convert.go
index e16c54b8d8..645d9370d5 100644
--- a/routers/web/feed/convert.go
+++ b/routers/web/feed/convert.go
@@ -24,27 +24,27 @@ import (
)
func toBranchLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/src/branch/" + util.PathEscapeSegments(act.GetBranch())
+ return act.GetRepoAbsoluteLink() + "/src/branch/" + util.PathEscapeSegments(act.GetBranch())
}
func toTagLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/src/tag/" + util.PathEscapeSegments(act.GetTag())
+ return act.GetRepoAbsoluteLink() + "/src/tag/" + util.PathEscapeSegments(act.GetTag())
}
func toIssueLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/issues/" + url.PathEscape(act.GetIssueInfos()[0])
+ return act.GetRepoAbsoluteLink() + "/issues/" + url.PathEscape(act.GetIssueInfos()[0])
}
func toPullLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/pulls/" + url.PathEscape(act.GetIssueInfos()[0])
+ return act.GetRepoAbsoluteLink() + "/pulls/" + url.PathEscape(act.GetIssueInfos()[0])
}
func toSrcLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/src/" + util.PathEscapeSegments(act.GetBranch())
+ return act.GetRepoAbsoluteLink() + "/src/" + util.PathEscapeSegments(act.GetBranch())
}
func toReleaseLink(act *activities_model.Action) string {
- return act.GetRepoLink() + "/releases/tag/" + util.PathEscapeSegments(act.GetBranch())
+ return act.GetRepoAbsoluteLink() + "/releases/tag/" + util.PathEscapeSegments(act.GetBranch())
}
// renderMarkdown creates a minimal markdown render context from an action.
@@ -79,17 +79,17 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
title = act.ActUser.DisplayName() + " "
switch act.OpType {
case activities_model.ActionCreateRepo:
- title += ctx.TrHTMLEscapeArgs("action.create_repo", act.GetRepoLink(), act.ShortRepoPath())
- link.Href = act.GetRepoLink()
+ title += ctx.TrHTMLEscapeArgs("action.create_repo", act.GetRepoAbsoluteLink(), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
case activities_model.ActionRenameRepo:
- title += ctx.TrHTMLEscapeArgs("action.rename_repo", act.GetContent(), act.GetRepoLink(), act.ShortRepoPath())
- link.Href = act.GetRepoLink()
+ title += ctx.TrHTMLEscapeArgs("action.rename_repo", act.GetContent(), act.GetRepoAbsoluteLink(), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
case activities_model.ActionCommitRepo:
link.Href = toBranchLink(act)
if len(act.Content) != 0 {
- title += ctx.TrHTMLEscapeArgs("action.commit_repo", act.GetRepoLink(), link.Href, act.GetBranch(), act.ShortRepoPath())
+ title += ctx.TrHTMLEscapeArgs("action.commit_repo", act.GetRepoAbsoluteLink(), link.Href, act.GetBranch(), act.ShortRepoPath())
} else {
- title += ctx.TrHTMLEscapeArgs("action.create_branch", act.GetRepoLink(), link.Href, act.GetBranch(), act.ShortRepoPath())
+ title += ctx.TrHTMLEscapeArgs("action.create_branch", act.GetRepoAbsoluteLink(), link.Href, act.GetBranch(), act.ShortRepoPath())
}
case activities_model.ActionCreateIssue:
link.Href = toIssueLink(act)
@@ -98,11 +98,11 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
link.Href = toPullLink(act)
title += ctx.TrHTMLEscapeArgs("action.create_pull_request", link.Href, act.GetIssueInfos()[0], act.ShortRepoPath())
case activities_model.ActionTransferRepo:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.transfer_repo", act.GetContent(), act.GetRepoLink(), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.transfer_repo", act.GetContent(), act.GetRepoAbsoluteLink(), act.ShortRepoPath())
case activities_model.ActionPushTag:
link.Href = toTagLink(act)
- title += ctx.TrHTMLEscapeArgs("action.push_tag", act.GetRepoLink(), link.Href, act.GetTag(), act.ShortRepoPath())
+ title += ctx.TrHTMLEscapeArgs("action.push_tag", act.GetRepoAbsoluteLink(), link.Href, act.GetTag(), act.ShortRepoPath())
case activities_model.ActionCommentIssue:
issueLink := toIssueLink(act)
if link.Href == "#" {
@@ -140,26 +140,26 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
}
title += ctx.TrHTMLEscapeArgs("action.reopen_pull_request", pullLink, act.GetIssueInfos()[0], act.ShortRepoPath())
case activities_model.ActionDeleteTag:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.delete_tag", act.GetRepoLink(), act.GetTag(), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.delete_tag", act.GetRepoAbsoluteLink(), act.GetTag(), act.ShortRepoPath())
case activities_model.ActionDeleteBranch:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.delete_branch", act.GetRepoLink(), html.EscapeString(act.GetBranch()), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.delete_branch", act.GetRepoAbsoluteLink(), html.EscapeString(act.GetBranch()), act.ShortRepoPath())
case activities_model.ActionMirrorSyncPush:
srcLink := toSrcLink(act)
if link.Href == "#" {
link.Href = srcLink
}
- title += ctx.TrHTMLEscapeArgs("action.mirror_sync_push", act.GetRepoLink(), srcLink, act.GetBranch(), act.ShortRepoPath())
+ title += ctx.TrHTMLEscapeArgs("action.mirror_sync_push", act.GetRepoAbsoluteLink(), srcLink, act.GetBranch(), act.ShortRepoPath())
case activities_model.ActionMirrorSyncCreate:
srcLink := toSrcLink(act)
if link.Href == "#" {
link.Href = srcLink
}
- title += ctx.TrHTMLEscapeArgs("action.mirror_sync_create", act.GetRepoLink(), srcLink, act.GetBranch(), act.ShortRepoPath())
+ title += ctx.TrHTMLEscapeArgs("action.mirror_sync_create", act.GetRepoAbsoluteLink(), srcLink, act.GetBranch(), act.ShortRepoPath())
case activities_model.ActionMirrorSyncDelete:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.mirror_sync_delete", act.GetRepoLink(), act.GetBranch(), act.ShortRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.mirror_sync_delete", act.GetRepoAbsoluteLink(), act.GetBranch(), act.ShortRepoPath())
case activities_model.ActionApprovePullRequest:
pullLink := toPullLink(act)
title += ctx.TrHTMLEscapeArgs("action.approve_pull_request", pullLink, act.GetIssueInfos()[0], act.ShortRepoPath())
@@ -174,16 +174,16 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
if link.Href == "#" {
link.Href = releaseLink
}
- title += ctx.TrHTMLEscapeArgs("action.publish_release", act.GetRepoLink(), releaseLink, act.ShortRepoPath(), act.Content)
+ title += ctx.TrHTMLEscapeArgs("action.publish_release", act.GetRepoAbsoluteLink(), releaseLink, act.ShortRepoPath(), act.Content)
case activities_model.ActionPullReviewDismissed:
pullLink := toPullLink(act)
title += ctx.TrHTMLEscapeArgs("action.review_dismissed", pullLink, act.GetIssueInfos()[0], act.ShortRepoPath(), act.GetIssueInfos()[1])
case activities_model.ActionStarRepo:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.starred_repo", act.GetRepoLink(), act.GetRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.starred_repo", act.GetRepoAbsoluteLink(), act.GetRepoPath())
case activities_model.ActionWatchRepo:
- link.Href = act.GetRepoLink()
- title += ctx.TrHTMLEscapeArgs("action.watched_repo", act.GetRepoLink(), act.GetRepoPath())
+ link.Href = act.GetRepoAbsoluteLink()
+ title += ctx.TrHTMLEscapeArgs("action.watched_repo", act.GetRepoAbsoluteLink(), act.GetRepoPath())
default:
return nil, fmt.Errorf("unknown action type: %v", act.OpType)
}
@@ -193,14 +193,14 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
switch act.OpType {
case activities_model.ActionCommitRepo, activities_model.ActionMirrorSyncPush:
push := templates.ActionContent2Commits(act)
- repoLink := act.GetRepoLink()
+ repoLink := act.GetRepoAbsoluteLink()
for _, commit := range push.Commits {
if len(desc) != 0 {
desc += "\n\n"
}
desc += fmt.Sprintf("%s \n%s",
- html.EscapeString(fmt.Sprintf("%s/commit/%s", act.GetRepoLink(), commit.Sha1)),
+ html.EscapeString(fmt.Sprintf("%s/commit/%s", act.GetRepoAbsoluteLink(), commit.Sha1)),
commit.Sha1,
templates.RenderCommitMessage(ctx, commit.Message, repoLink, nil),
)
@@ -209,7 +209,7 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
if push.Len > 1 {
link = &feeds.Link{Href: fmt.Sprintf("%s/%s", setting.AppSubURL, push.CompareURL)}
} else if push.Len == 1 {
- link = &feeds.Link{Href: fmt.Sprintf("%s/commit/%s", act.GetRepoLink(), push.Commits[0].Sha1)}
+ link = &feeds.Link{Href: fmt.Sprintf("%s/commit/%s", act.GetRepoAbsoluteLink(), push.Commits[0].Sha1)}
}
case activities_model.ActionCreateIssue, activities_model.ActionCreatePullRequest:
diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go
index d14ba6cbe9..d1f1255db4 100644
--- a/routers/web/repo/branch.go
+++ b/routers/web/repo/branch.go
@@ -427,5 +427,5 @@ func CreateBranch(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("repo.branch.create_success", form.NewBranchName))
- ctx.Redirect(ctx.Repo.RepoLink + "/src/branch/" + util.PathEscapeSegments(form.NewBranchName))
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/branch/" + util.PathEscapeSegments(form.NewBranchName) + "/" + util.PathEscapeSegments(form.CurrentPath))
}
diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go
index e35af31724..e7e68d3c5e 100644
--- a/routers/web/repo/compare.go
+++ b/routers/web/repo/compare.go
@@ -112,17 +112,17 @@ func setCsvCompareContext(ctx *context.Context) {
Error string
}
- ctx.Data["CreateCsvDiff"] = func(diffFile *gitdiff.DiffFile, baseCommit, headCommit *git.Commit) CsvDiffResult {
- if diffFile == nil || baseCommit == nil || headCommit == nil {
+ ctx.Data["CreateCsvDiff"] = func(diffFile *gitdiff.DiffFile, baseBlob, headBlob *git.Blob) CsvDiffResult {
+ if diffFile == nil {
return CsvDiffResult{nil, ""}
}
errTooLarge := errors.New(ctx.Locale.Tr("repo.error.csv.too_large"))
- csvReaderFromCommit := func(ctx *markup.RenderContext, c *git.Commit) (*csv.Reader, io.Closer, error) {
- blob, err := c.GetBlobByPath(diffFile.Name)
- if err != nil {
- return nil, nil, err
+ csvReaderFromCommit := func(ctx *markup.RenderContext, blob *git.Blob) (*csv.Reader, io.Closer, error) {
+ if blob == nil {
+ // It's ok for blob to be nil (file added or deleted)
+ return nil, nil, nil
}
if setting.UI.CSV.MaxFileSize != 0 && setting.UI.CSV.MaxFileSize < blob.Size() {
@@ -138,28 +138,28 @@ func setCsvCompareContext(ctx *context.Context) {
return csvReader, reader, err
}
- baseReader, baseBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.OldName}, baseCommit)
+ baseReader, baseBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.OldName}, baseBlob)
if baseBlobCloser != nil {
defer baseBlobCloser.Close()
}
- if err == errTooLarge {
- return CsvDiffResult{nil, err.Error()}
- }
if err != nil {
- log.Error("CreateCsvDiff error whilst creating baseReader from file %s in commit %s in %s: %v", diffFile.Name, baseCommit.ID.String(), ctx.Repo.Repository.Name, err)
- return CsvDiffResult{nil, "unable to load file from base commit"}
+ if err == errTooLarge {
+ return CsvDiffResult{nil, err.Error()}
+ }
+ log.Error("error whilst creating csv.Reader from file %s in base commit %s in %s: %v", diffFile.Name, baseBlob.ID.String(), ctx.Repo.Repository.Name, err)
+ return CsvDiffResult{nil, "unable to load file"}
}
- headReader, headBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.Name}, headCommit)
+ headReader, headBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.Name}, headBlob)
if headBlobCloser != nil {
defer headBlobCloser.Close()
}
- if err == errTooLarge {
- return CsvDiffResult{nil, err.Error()}
- }
if err != nil {
- log.Error("CreateCsvDiff error whilst creating headReader from file %s in commit %s in %s: %v", diffFile.Name, headCommit.ID.String(), ctx.Repo.Repository.Name, err)
- return CsvDiffResult{nil, "unable to load file from head commit"}
+ if err == errTooLarge {
+ return CsvDiffResult{nil, err.Error()}
+ }
+ log.Error("error whilst creating csv.Reader from file %s in head commit %s in %s: %v", diffFile.Name, headBlob.ID.String(), ctx.Repo.Repository.Name, err)
+ return CsvDiffResult{nil, "unable to load file"}
}
sections, err := gitdiff.CreateCsvDiff(diffFile, baseReader, headReader)
diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go
index 267940c8d2..e7abec0d3e 100644
--- a/routers/web/repo/setting.go
+++ b/routers/web/repo/setting.go
@@ -917,6 +917,19 @@ func CollaborationPost(ctx *context.Context) {
return
}
+ // find the owner team of the organization the repo belongs too and
+ // check if the user we're trying to add is an owner.
+ if ctx.Repo.Repository.Owner.IsOrganization() {
+ if isOwner, err := organization.IsOrganizationOwner(ctx, ctx.Repo.Repository.Owner.ID, u.ID); err != nil {
+ ctx.ServerError("IsOrganizationOwner", err)
+ return
+ } else if isOwner {
+ ctx.Flash.Error(ctx.Tr("repo.settings.add_collaborator_owner"))
+ ctx.Redirect(setting.AppSubURL + ctx.Req.URL.EscapedPath())
+ return
+ }
+ }
+
if err = repo_module.AddCollaborator(ctx.Repo.Repository, u); err != nil {
ctx.ServerError("AddCollaborator", err)
return
diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go
index cdfb4b9906..768a30ec21 100644
--- a/routers/web/repo/view.go
+++ b/routers/web/repo/view.go
@@ -374,6 +374,11 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
ctx.Data["FileName"] = blob.Name()
ctx.Data["RawFileLink"] = rawLink + "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
+ if ctx.Repo.TreePath == ".editorconfig" {
+ _, editorconfigErr := ctx.Repo.GetEditorconfig(ctx.Repo.Commit)
+ ctx.Data["FileError"] = editorconfigErr
+ }
+
buf := make([]byte, 1024)
n, _ := util.ReadAtMost(dataRc, buf)
buf = buf[:n]
diff --git a/routers/web/user/notification.go b/routers/web/user/notification.go
index 5e8142cec7..b4753a603e 100644
--- a/routers/web/user/notification.go
+++ b/routers/web/user/notification.go
@@ -13,16 +13,23 @@ import (
"strings"
activities_model "code.gitea.io/gitea/models/activities"
+ "code.gitea.io/gitea/models/db"
+ issues_model "code.gitea.io/gitea/models/issues"
+ repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
+ "code.gitea.io/gitea/modules/util"
+ issue_service "code.gitea.io/gitea/services/issue"
+ pull_service "code.gitea.io/gitea/services/pull"
)
const (
- tplNotification base.TplName = "user/notification/notification"
- tplNotificationDiv base.TplName = "user/notification/notification_div"
+ tplNotification base.TplName = "user/notification/notification"
+ tplNotificationDiv base.TplName = "user/notification/notification_div"
+ tplNotificationSubscriptions base.TplName = "user/notification/notification_subscriptions"
)
// GetNotificationCount is the middleware that sets the notification count in the context
@@ -197,6 +204,208 @@ func NotificationPurgePost(c *context.Context) {
c.Redirect(setting.AppSubURL+"/notifications", http.StatusSeeOther)
}
+// NotificationSubscriptions returns the list of subscribed issues
+func NotificationSubscriptions(c *context.Context) {
+ page := c.FormInt("page")
+ if page < 1 {
+ page = 1
+ }
+
+ sortType := c.FormString("sort")
+ c.Data["SortType"] = sortType
+
+ state := c.FormString("state")
+ if !util.IsStringInSlice(state, []string{"all", "open", "closed"}, true) {
+ state = "all"
+ }
+ c.Data["State"] = state
+ var showClosed util.OptionalBool
+ switch state {
+ case "all":
+ showClosed = util.OptionalBoolNone
+ case "closed":
+ showClosed = util.OptionalBoolTrue
+ case "open":
+ showClosed = util.OptionalBoolFalse
+ }
+
+ var issueTypeBool util.OptionalBool
+ issueType := c.FormString("issueType")
+ switch issueType {
+ case "issues":
+ issueTypeBool = util.OptionalBoolFalse
+ case "pulls":
+ issueTypeBool = util.OptionalBoolTrue
+ default:
+ issueTypeBool = util.OptionalBoolNone
+ }
+ c.Data["IssueType"] = issueType
+
+ var labelIDs []int64
+ selectedLabels := c.FormString("labels")
+ c.Data["Labels"] = selectedLabels
+ if len(selectedLabels) > 0 && selectedLabels != "0" {
+ var err error
+ labelIDs, err = base.StringsToInt64s(strings.Split(selectedLabels, ","))
+ if err != nil {
+ c.ServerError("StringsToInt64s", err)
+ return
+ }
+ }
+
+ count, err := issues_model.CountIssues(&issues_model.IssuesOptions{
+ SubscriberID: c.Doer.ID,
+ IsClosed: showClosed,
+ IsPull: issueTypeBool,
+ LabelIDs: labelIDs,
+ })
+ if err != nil {
+ c.ServerError("CountIssues", err)
+ return
+ }
+ issues, err := issues_model.Issues(&issues_model.IssuesOptions{
+ ListOptions: db.ListOptions{
+ PageSize: setting.UI.IssuePagingNum,
+ Page: page,
+ },
+ SubscriberID: c.Doer.ID,
+ SortType: sortType,
+ IsClosed: showClosed,
+ IsPull: issueTypeBool,
+ LabelIDs: labelIDs,
+ })
+ if err != nil {
+ c.ServerError("Issues", err)
+ return
+ }
+
+ commitStatuses, lastStatus, err := pull_service.GetIssuesAllCommitStatus(c, issues)
+ if err != nil {
+ c.ServerError("GetIssuesAllCommitStatus", err)
+ return
+ }
+ c.Data["CommitLastStatus"] = lastStatus
+ c.Data["CommitStatuses"] = commitStatuses
+ c.Data["Issues"] = issues
+
+ c.Data["IssueRefEndNames"], c.Data["IssueRefURLs"] = issue_service.GetRefEndNamesAndURLs(issues, "")
+
+ commitStatus, err := pull_service.GetIssuesLastCommitStatus(c, issues)
+ if err != nil {
+ c.ServerError("GetIssuesLastCommitStatus", err)
+ return
+ }
+ c.Data["CommitStatus"] = commitStatus
+
+ issueList := issues_model.IssueList(issues)
+ approvalCounts, err := issueList.GetApprovalCounts(c)
+ if err != nil {
+ c.ServerError("ApprovalCounts", err)
+ return
+ }
+ c.Data["ApprovalCounts"] = func(issueID int64, typ string) int64 {
+ counts, ok := approvalCounts[issueID]
+ if !ok || len(counts) == 0 {
+ return 0
+ }
+ reviewTyp := issues_model.ReviewTypeApprove
+ if typ == "reject" {
+ reviewTyp = issues_model.ReviewTypeReject
+ } else if typ == "waiting" {
+ reviewTyp = issues_model.ReviewTypeRequest
+ }
+ for _, count := range counts {
+ if count.Type == reviewTyp {
+ return count.Count
+ }
+ }
+ return 0
+ }
+
+ c.Data["Status"] = 1
+ c.Data["Title"] = c.Tr("notification.subscriptions")
+
+ // redirect to last page if request page is more than total pages
+ pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5)
+ if pager.Paginater.Current() < page {
+ c.Redirect(fmt.Sprintf("/notifications/subscriptions?page=%d", pager.Paginater.Current()))
+ return
+ }
+ pager.AddParam(c, "sort", "SortType")
+ pager.AddParam(c, "state", "State")
+ c.Data["Page"] = pager
+
+ c.HTML(http.StatusOK, tplNotificationSubscriptions)
+}
+
+// NotificationWatching returns the list of watching repos
+func NotificationWatching(c *context.Context) {
+ page := c.FormInt("page")
+ if page < 1 {
+ page = 1
+ }
+
+ var orderBy db.SearchOrderBy
+ c.Data["SortType"] = c.FormString("sort")
+ switch c.FormString("sort") {
+ case "newest":
+ orderBy = db.SearchOrderByNewest
+ case "oldest":
+ orderBy = db.SearchOrderByOldest
+ case "recentupdate":
+ orderBy = db.SearchOrderByRecentUpdated
+ case "leastupdate":
+ orderBy = db.SearchOrderByLeastUpdated
+ case "reversealphabetically":
+ orderBy = db.SearchOrderByAlphabeticallyReverse
+ case "alphabetically":
+ orderBy = db.SearchOrderByAlphabetically
+ case "moststars":
+ orderBy = db.SearchOrderByStarsReverse
+ case "feweststars":
+ orderBy = db.SearchOrderByStars
+ case "mostforks":
+ orderBy = db.SearchOrderByForksReverse
+ case "fewestforks":
+ orderBy = db.SearchOrderByForks
+ default:
+ c.Data["SortType"] = "recentupdate"
+ orderBy = db.SearchOrderByRecentUpdated
+ }
+
+ repos, count, err := repo_model.SearchRepository(&repo_model.SearchRepoOptions{
+ ListOptions: db.ListOptions{
+ PageSize: setting.UI.User.RepoPagingNum,
+ Page: page,
+ },
+ Actor: c.Doer,
+ Keyword: c.FormTrim("q"),
+ OrderBy: orderBy,
+ Private: c.IsSigned,
+ WatchedByID: c.Doer.ID,
+ Collaborate: util.OptionalBoolFalse,
+ TopicOnly: c.FormBool("topic"),
+ IncludeDescription: setting.UI.SearchRepoDescription,
+ })
+ if err != nil {
+ c.ServerError("ErrSearchRepository", err)
+ return
+ }
+ total := int(count)
+ c.Data["Total"] = total
+ c.Data["Repos"] = repos
+
+ // redirect to last page if request page is more than total pages
+ pager := context.NewPagination(total, setting.UI.User.RepoPagingNum, page, 5)
+ pager.SetDefaultParams(c)
+ c.Data["Page"] = pager
+
+ c.Data["Status"] = 2
+ c.Data["Title"] = c.Tr("notification.watching")
+
+ c.HTML(http.StatusOK, tplNotificationSubscriptions)
+}
+
// NewAvailable returns the notification counts
func NewAvailable(ctx *context.Context) {
ctx.JSON(http.StatusOK, structs.NotificationCount{New: activities_model.CountUnread(ctx, ctx.Doer.ID)})
diff --git a/routers/web/web.go b/routers/web/web.go
index 1852ecc2e2..acce071891 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -1269,6 +1269,8 @@ func RegisterRoutes(m *web.Route) {
m.Group("/notifications", func() {
m.Get("", user.Notifications)
+ m.Get("/subscriptions", user.NotificationSubscriptions)
+ m.Get("/watching", user.NotificationWatching)
m.Post("/status", user.NotificationStatusPost)
m.Post("/purge", user.NotificationPurgePost)
m.Get("/new", user.NewAvailable)
diff --git a/services/auth/reverseproxy.go b/services/auth/reverseproxy.go
index d9d1b63e8f..8dec1c8ea7 100644
--- a/services/auth/reverseproxy.go
+++ b/services/auth/reverseproxy.go
@@ -37,11 +37,7 @@ type ReverseProxy struct{}
// getUserName extracts the username from the "setting.ReverseProxyAuthUser" header
func (r *ReverseProxy) getUserName(req *http.Request) string {
- webAuthUser := strings.TrimSpace(req.Header.Get(setting.ReverseProxyAuthUser))
- if len(webAuthUser) == 0 {
- return ""
- }
- return webAuthUser
+ return strings.TrimSpace(req.Header.Get(setting.ReverseProxyAuthUser))
}
// Name represents the name of auth method
@@ -49,14 +45,14 @@ func (r *ReverseProxy) Name() string {
return ReverseProxyMethodName
}
-// Verify extracts the username from the "setting.ReverseProxyAuthUser" header
+// getUserFromAuthUser extracts the username from the "setting.ReverseProxyAuthUser" header
// of the request and returns the corresponding user object for that name.
// Verification of header data is not performed as it should have already been done by
-// the revese proxy.
+// the reverse proxy.
// If a username is available in the "setting.ReverseProxyAuthUser" header an existing
// user object is returned (populated with username or email found in header).
// Returns nil if header is empty.
-func (r *ReverseProxy) Verify(req *http.Request, w http.ResponseWriter, store DataStore, sess SessionStore) *user_model.User {
+func (r *ReverseProxy) getUserFromAuthUser(req *http.Request) *user_model.User {
username := r.getUserName(req)
if len(username) == 0 {
return nil
@@ -71,6 +67,54 @@ func (r *ReverseProxy) Verify(req *http.Request, w http.ResponseWriter, store Da
}
user = r.newUser(req)
}
+ return user
+}
+
+// getEmail extracts the email from the "setting.ReverseProxyAuthEmail" header
+func (r *ReverseProxy) getEmail(req *http.Request) string {
+ return strings.TrimSpace(req.Header.Get(setting.ReverseProxyAuthEmail))
+}
+
+// getUserFromAuthEmail extracts the username from the "setting.ReverseProxyAuthEmail" header
+// of the request and returns the corresponding user object for that email.
+// Verification of header data is not performed as it should have already been done by
+// the reverse proxy.
+// If an email is available in the "setting.ReverseProxyAuthEmail" header an existing
+// user object is returned (populated with the email found in header).
+// Returns nil if header is empty or if "setting.EnableReverseProxyEmail" is disabled.
+func (r *ReverseProxy) getUserFromAuthEmail(req *http.Request) *user_model.User {
+ if !setting.Service.EnableReverseProxyEmail {
+ return nil
+ }
+ email := r.getEmail(req)
+ if len(email) == 0 {
+ return nil
+ }
+ log.Trace("ReverseProxy Authorization: Found email: %s", email)
+
+ user, err := user_model.GetUserByEmail(email)
+ if err != nil {
+ // Do not allow auto-registration, we don't have a username here
+ if !user_model.IsErrUserNotExist(err) {
+ log.Error("GetUserByEmail: %v", err)
+ }
+ return nil
+ }
+ return user
+}
+
+// Verify attempts to load a user object based on headers sent by the reverse proxy.
+// First it will attempt to load it based on the username (see docs for getUserFromAuthUser),
+// and failing that it will attempt to load it based on the email (see docs for getUserFromAuthEmail).
+// Returns nil if the headers are empty or the user is not found.
+func (r *ReverseProxy) Verify(req *http.Request, w http.ResponseWriter, store DataStore, sess SessionStore) *user_model.User {
+ user := r.getUserFromAuthUser(req)
+ if user == nil {
+ user = r.getUserFromAuthEmail(req)
+ if user == nil {
+ return nil
+ }
+ }
// Make sure requests to API paths, attachment downloads, git and LFS do not create a new session
if !middleware.IsAPIPath(req) && !isAttachmentDownload(req) && !isGitRawReleaseOrLFSPath(req) {
diff --git a/services/forms/repo_branch_form.go b/services/forms/repo_branch_form.go
index f9262aaede..011926092f 100644
--- a/services/forms/repo_branch_form.go
+++ b/services/forms/repo_branch_form.go
@@ -16,6 +16,7 @@ import (
// NewBranchForm form for creating a new branch
type NewBranchForm struct {
NewBranchName string `binding:"Required;MaxSize(100);GitRefName"`
+ CurrentPath string
CreateTag bool
}
diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go
index 4eb20d297f..c1e9cb3197 100644
--- a/services/forms/repo_form.go
+++ b/services/forms/repo_form.go
@@ -34,7 +34,7 @@ type CreateRepoForm struct {
UID int64 `binding:"Required"`
RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"`
Private bool
- Description string `binding:"MaxSize(255)"`
+ Description string `binding:"MaxSize(2048)"`
DefaultBranch string `binding:"GitRefName;MaxSize(100)"`
AutoInit bool
Gitignores string
@@ -76,7 +76,7 @@ type MigrateRepoForm struct {
LFS bool `json:"lfs"`
LFSEndpoint string `json:"lfs_endpoint"`
Private bool `json:"private"`
- Description string `json:"description" binding:"MaxSize(255)"`
+ Description string `json:"description" binding:"MaxSize(2048)"`
Wiki bool `json:"wiki"`
Milestones bool `json:"milestones"`
Labels bool `json:"labels"`
@@ -116,8 +116,8 @@ func ParseRemoteAddr(remoteAddr, authUsername, authPassword string) (string, err
// RepoSettingForm form for changing repository settings
type RepoSettingForm struct {
RepoName string `binding:"Required;AlphaDashDot;MaxSize(100)"`
- Description string `binding:"MaxSize(255)"`
- Website string `binding:"ValidUrl;MaxSize(255)"`
+ Description string `binding:"MaxSize(2048)"`
+ Website string `binding:"ValidUrl;MaxSize(1024)"`
Interval string
MirrorAddress string
MirrorUsername string
diff --git a/services/gitdiff/highlightdiff_test.go b/services/gitdiff/highlightdiff_test.go
index 1cd78bc942..205f9a0773 100644
--- a/services/gitdiff/highlightdiff_test.go
+++ b/services/gitdiff/highlightdiff_test.go
@@ -21,11 +21,11 @@ func TestDiffWithHighlight(t *testing.T) {
" run(db)\n",
)
- expected := ` run ( ' < > ' ) ` + "\n"
+ expected := ` run ( ' < > ' ) `
output := diffToHTML(nil, diffs, DiffLineDel)
assert.Equal(t, expected, output)
- expected = ` run ( db ) ` + "\n"
+ expected = ` run ( db ) `
output = diffToHTML(nil, diffs, DiffLineAdd)
assert.Equal(t, expected, output)
@@ -57,7 +57,7 @@ func TestDiffWithHighlightPlaceholder(t *testing.T) {
assert.Equal(t, "", hcd.placeholderTokenMap[0x00100000])
assert.Equal(t, "", hcd.placeholderTokenMap[0x0010FFFD])
- expected := fmt.Sprintf(`a = ' %s ' `, "\U00100000")
+ expected := fmt.Sprintf(`a = ' %s '`, "\U00100000")
output := diffToHTML(hcd.lineWrapperTags, diffs, DiffLineDel)
assert.Equal(t, expected, output)
diff --git a/templates/admin/queue.tmpl b/templates/admin/queue.tmpl
index 95fd3a5e05..cd50798f80 100644
--- a/templates/admin/queue.tmpl
+++ b/templates/admin/queue.tmpl
@@ -157,7 +157,7 @@
{{range .Queue.Workers}}
- {{.Workers}}{{if .IsFlusher}}{{svg "octicon-sync"}} {{end}}
+ {{.Workers}}{{if .IsFlusher}}{{svg "octicon-sync"}} {{end}}
{{DateFmtLong .Start}}
{{if .HasTimeout}}{{DateFmtLong .Timeout}}{{else}}-{{end}}
diff --git a/templates/admin/user/edit.tmpl b/templates/admin/user/edit.tmpl
index 7aeaa2537c..9e0f1d89fd 100644
--- a/templates/admin/user/edit.tmpl
+++ b/templates/admin/user/edit.tmpl
@@ -151,7 +151,7 @@
{{.locale.Tr "admin.users.update_profile"}}
-
{{.locale.Tr "admin.users.delete_account"}}
+
{{.locale.Tr "admin.users.delete_account"}}
@@ -206,7 +206,6 @@
{{template "base/footer" .}}
diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl
index 459beb5515..12837ebefe 100644
--- a/templates/base/head_navbar.tmpl
+++ b/templates/base/head_navbar.tmpl
@@ -5,7 +5,7 @@
{{end}}