Merge branch 'main' into lunny/refactor_review_request

This commit is contained in:
Lunny Xiao
2025-09-09 13:10:35 -07:00
119 changed files with 3731 additions and 4036 deletions
-1
View File
@@ -831,7 +831,6 @@ module.exports = {
'sonarjs/no-inverted-boolean-check': [2],
'sonarjs/no-nested-switch': [0],
'sonarjs/no-nested-template-literals': [0],
'sonarjs/no-one-iteration-loop': [2],
'sonarjs/no-redundant-boolean': [2],
'sonarjs/no-redundant-jump': [2],
'sonarjs/no-same-line-conditional': [2],
+1 -1
View File
@@ -74,11 +74,11 @@ cpu.out
/tests/*.ini
/tests/**/*.git/**/*.sample
/node_modules
/tools/node_modules
/.venv
/yarn.lock
/yarn-error.log
/npm-debug.log*
/.pnpm-store
/public/assets/js
/public/assets/css
/public/assets/fonts
+1
View File
@@ -63,3 +63,4 @@ hiifong <i@hiif.ong> (@hiifong)
metiftikci <metiftikci@hotmail.com> (@metiftikci)
Christopher Homberger <christopher.homberger@web.de> (@ChristopherHX)
Tobias Balle-Petersen <tobiasbp@gmail.com> (@tobiasbp)
TheFox <thefox0x7@gmail.com> (@TheFox0x7)
+38 -34
View File
@@ -27,11 +27,11 @@ XGO_VERSION := go-1.25.x
AIR_PACKAGE ?= github.com/air-verse/air@v1
EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@v3
GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.8.0
GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.9.1
GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.4.0
GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.15
MISSPELL_PACKAGE ?= github.com/golangci/misspell/cmd/misspell@v0.7.0
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.32.3
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@717e3cb29becaaf00e56953556c6d80f8a01b286
XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1
GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1
@@ -96,6 +96,15 @@ STORED_VERSION_FILE := VERSION
GITHUB_REF_TYPE ?= branch
GITHUB_REF_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
# Enable typescript support in Node.js before 22.18
# TODO: Remove this once we can raise the minimum Node.js version to 22.18 (alpine >= 3.23)
NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell node -v 2>/dev/null | cut -c2- | tr '.' ' '))
ifeq ($(shell test "$(NODE_VERSION)" -lt "022018000"; echo $$?),0)
NODE_VARS := NODE_OPTIONS="--experimental-strip-types"
else
NODE_VARS :=
endif
ifneq ($(GITHUB_REF_TYPE),branch)
VERSION ?= $(subst v,,$(GITHUB_REF_NAME))
GITEA_VERSION ?= $(VERSION)
@@ -127,7 +136,7 @@ GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list code.gitea.io/gitea/models/m
MIGRATE_TEST_PACKAGES ?= $(shell $(GO) list code.gitea.io/gitea/models/migrations/...)
WEBPACK_SOURCES := $(shell find web_src/js web_src/css -type f)
WEBPACK_CONFIGS := webpack.config.js tailwind.config.js
WEBPACK_CONFIGS := webpack.config.ts tailwind.config.ts
WEBPACK_DEST := public/assets/js/index.js public/assets/css/index.css
WEBPACK_DEST_ENTRIES := public/assets/js public/assets/css public/assets/fonts
@@ -153,9 +162,9 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(DIST)
GO_DIRS := build cmd models modules routers services tests
WEB_DIRS := web_src/js web_src/css
ESLINT_FILES := web_src/js tools *.js *.ts *.cjs tests/e2e
ESLINT_FILES := web_src/js tools *.ts *.cjs tests/e2e
STYLELINT_FILES := web_src/css web_src/js/components/*.vue
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.js *.md *.yml *.yaml *.toml)) $(filter-out tools/misspellings.csv, $(wildcard tools/*))
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.md *.yml *.yaml *.toml)) $(filter-out tools/misspellings.csv, $(wildcard tools/*))
EDITORCONFIG_FILES := templates .github/workflows options/locale/locale_en-US.ini
GO_SOURCES := $(wildcard *.go)
@@ -217,7 +226,6 @@ git-check:
node-check:
$(eval MIN_NODE_VERSION_STR := $(shell grep -Eo '"node":.*[0-9.]+"' package.json | sed -n 's/.*[^0-9.]\([0-9.]*\)"/\1/p'))
$(eval MIN_NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell echo '$(MIN_NODE_VERSION_STR)' | tr '.' ' ')))
$(eval NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell node -v | cut -c2- | tr '.' ' ');))
$(eval PNPM_MISSING := $(shell hash pnpm > /dev/null 2>&1 || echo 1))
@if [ "$(NODE_VERSION)" -lt "$(MIN_NODE_VERSION)" ]; then \
echo "Gitea requires Node.js $(MIN_NODE_VERSION_STR) or greater to build. You can get it at https://nodejs.org/en/download/"; \
@@ -230,7 +238,7 @@ node-check:
.PHONY: clean-all
clean-all: clean ## delete backend, frontend and integration files
rm -rf $(WEBPACK_DEST_ENTRIES) node_modules tools/node_modules
rm -rf $(WEBPACK_DEST_ENTRIES) node_modules
.PHONY: clean
clean: ## delete backend and integration files
@@ -338,29 +346,29 @@ lint-backend-fix: lint-go-fix lint-go-gitea-vet lint-editorconfig ## lint backen
.PHONY: lint-js
lint-js: node_modules ## lint js files
pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES)
pnpm exec vue-tsc
$(NODE_VARS) pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES)
$(NODE_VARS) pnpm exec vue-tsc
.PHONY: lint-js-fix
lint-js-fix: node_modules ## lint js files and fix issues
pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) --fix
pnpm exec vue-tsc
$(NODE_VARS) pnpm exec eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) --fix
$(NODE_VARS) pnpm exec vue-tsc
.PHONY: lint-css
lint-css: node_modules ## lint css files
pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES)
$(NODE_VARS) pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES)
.PHONY: lint-css-fix
lint-css-fix: node_modules ## lint css files and fix issues
pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES) --fix
$(NODE_VARS) pnpm exec stylelint --color --max-warnings=0 $(STYLELINT_FILES) --fix
.PHONY: lint-swagger
lint-swagger: node_modules ## lint swagger files
pnpm exec spectral lint -q -F hint $(SWAGGER_SPEC)
$(NODE_VARS) pnpm exec spectral lint -q -F hint $(SWAGGER_SPEC)
.PHONY: lint-md
lint-md: node_modules ## lint markdown files
pnpm exec markdownlint *.md
$(NODE_VARS) pnpm exec markdownlint *.md
.PHONY: lint-spell
lint-spell: ## lint spelling
@@ -407,7 +415,7 @@ lint-actions: ## lint action workflow files
.PHONY: lint-templates
lint-templates: .venv node_modules ## lint template files
@node tools/lint-templates-svg.js
@node tools/lint-templates-svg.ts
@uv run --frozen djlint $(shell find templates -type f -iname '*.tmpl')
.PHONY: lint-yaml
@@ -421,7 +429,7 @@ watch: ## watch everything and continuously rebuild
.PHONY: watch-frontend
watch-frontend: node-check node_modules ## watch frontend files and continuously rebuild
@rm -rf $(WEBPACK_DEST_ENTRIES)
NODE_ENV=development pnpm exec webpack --watch --progress
NODE_ENV=development $(NODE_VARS) pnpm exec webpack --watch --progress --disable-interpret
.PHONY: watch-backend
watch-backend: go-check ## watch backend files and continuously rebuild
@@ -437,7 +445,7 @@ test-backend: ## test backend files
.PHONY: test-frontend
test-frontend: node_modules ## test frontend files
pnpm exec vitest
$(NODE_VARS) pnpm exec vitest
.PHONY: test-check
test-check:
@@ -580,7 +588,7 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test
.PHONY: playwright
playwright: deps-frontend
pnpm exec playwright install $(PLAYWRIGHT_FLAGS)
$(NODE_VARS) pnpm exec playwright install $(PLAYWRIGHT_FLAGS)
.PHONY: test-e2e%
test-e2e%: TEST_TYPE ?= e2e
@@ -844,13 +852,9 @@ deps-tools: ## install tool dependencies
wait
node_modules: pnpm-lock.yaml
pnpm install --frozen-lockfile
$(NODE_VARS) pnpm install --frozen-lockfile
@touch node_modules
tools/node_modules: tools/package.json
cd tools && pnpm install
@touch tools/node_modules
.venv: uv.lock
uv sync
@touch .venv
@@ -860,16 +864,16 @@ update: update-js update-py ## update js and py dependencies
.PHONY: update-js
update-js: node-check | node_modules ## update js dependencies
pnpm exec updates -u -f package.json
$(NODE_VARS) pnpm exec updates -u -f package.json
rm -rf node_modules pnpm-lock.yaml
pnpm install
pnpm exec nolyfill install
pnpm install
$(NODE_VARS) pnpm install
$(NODE_VARS) pnpm exec nolyfill install
$(NODE_VARS) pnpm install
@touch node_modules
.PHONY: update-py
update-py: node-check | node_modules ## update py dependencies
pnpm exec updates -u -f pyproject.toml
$(NODE_VARS) pnpm exec updates -u -f pyproject.toml
rm -rf .venv uv.lock
uv sync
@touch .venv
@@ -881,13 +885,13 @@ $(WEBPACK_DEST): $(WEBPACK_SOURCES) $(WEBPACK_CONFIGS) pnpm-lock.yaml
@$(MAKE) -s node-check node_modules
@rm -rf $(WEBPACK_DEST_ENTRIES)
@echo "Running webpack..."
@BROWSERSLIST_IGNORE_OLD_DATA=true pnpm exec webpack
@BROWSERSLIST_IGNORE_OLD_DATA=true $(NODE_VARS) pnpm exec webpack --disable-interpret
@touch $(WEBPACK_DEST)
.PHONY: svg
svg: node-check | node_modules ## build svg files
rm -rf $(SVG_DEST_DIR)
node tools/generate-svg.js
node tools/generate-svg.ts
.PHONY: svg-check
svg-check: svg
@@ -901,7 +905,7 @@ svg-check: svg
.PHONY: lockfile-check
lockfile-check:
pnpm install --frozen-lockfile
$(NODE_VARS) pnpm install --frozen-lockfile
@diff=$$(git diff --color=always pnpm-lock.yaml); \
if [ -n "$$diff" ]; then \
echo "pnpm-lock.yaml is inconsistent with package.json"; \
@@ -925,8 +929,8 @@ generate-gitignore: ## update gitignore files
$(GO) run build/generate-gitignores.go
.PHONY: generate-images
generate-images: | node_modules tools/node_modules ## generate images (requires cairo development packages)
cd tools && node generate-images.js $(TAGS)
generate-images: | node_modules ## generate images
cd tools && node generate-images.ts $(TAGS)
.PHONY: generate-manpage
generate-manpage: ## generate manpage
+1 -1
View File
@@ -181,7 +181,7 @@ func parseArgs() (mainOptions map[string]string, subCmd string, subArgs []string
break
}
}
return
return mainOptions, subCmd, subArgs
}
func showUsage() {
+6 -1
View File
@@ -1,6 +1,6 @@
module code.gitea.io/gitea
go 1.24.6
go 1.25.1
// rfc5280 said: "The serial number is an integer assigned by the CA to each certificate."
// But some CAs use negative serial number, just relax the check. related:
@@ -287,6 +287,11 @@ require (
gopkg.in/yaml.v2 v2.4.0 // indirect
)
ignore (
./.venv
./node_modules
)
replace github.com/jaytaylor/html2text => github.com/Necoro/html2text v0.0.0-20250804200300-7bf1ce1c7347
replace github.com/hashicorp/go-version => github.com/6543/go-version v1.3.1
+2 -4
View File
@@ -105,15 +105,13 @@ func testLocker(t *testing.T, locker Locker) {
require.NoError(t, err)
wg := &sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
wg.Go(func() {
started := time.Now()
release, err := locker.Lock(t.Context(), "test") // should be blocked for seconds
defer release()
assert.Greater(t, time.Since(started), time.Second)
assert.NoError(t, err)
}()
})
time.Sleep(2 * time.Second)
release()
+2 -4
View File
@@ -62,11 +62,9 @@ func TestConnLogger(t *testing.T) {
}
expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.Filename, event.Line, event.Caller, strings.ToUpper(event.Level.String())[0], event.MsgSimpleText)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
wg.Go(func() {
listenReadAndClose(t, l, expected)
}()
})
logger.SendLogEvent(&event)
wg.Wait()
+8 -1
View File
@@ -82,6 +82,7 @@ type ProgrammingLanguage struct {
// https://schema.org/Person
type Person struct {
Type string `json:"@type,omitempty"`
Name string `json:"name,omitempty"` // inherited from https://schema.org/Thing
GivenName string `json:"givenName,omitempty"`
MiddleName string `json:"middleName,omitempty"`
FamilyName string `json:"familyName,omitempty"`
@@ -184,11 +185,17 @@ func ParsePackage(sr io.ReaderAt, size int64, mr io.Reader) (*Package, error) {
p.Metadata.Description = ssc.Description
p.Metadata.Keywords = ssc.Keywords
p.Metadata.License = ssc.License
p.Metadata.Author = Person{
author := Person{
Name: ssc.Author.Name,
GivenName: ssc.Author.GivenName,
MiddleName: ssc.Author.MiddleName,
FamilyName: ssc.Author.FamilyName,
}
// If Name is not provided, generate it from individual name components
if author.Name == "" {
author.Name = author.String()
}
p.Metadata.Author = author
p.Metadata.RepositoryURL = ssc.CodeRepository
if !validation.IsValidURL(p.Metadata.RepositoryURL) {
+79
View File
@@ -97,10 +97,49 @@ func TestParsePackage(t *testing.T) {
assert.Equal(t, packageDescription, p.Metadata.Description)
assert.ElementsMatch(t, []string{"swift", "package"}, p.Metadata.Keywords)
assert.Equal(t, packageLicense, p.Metadata.License)
assert.Equal(t, packageAuthor, p.Metadata.Author.Name)
assert.Equal(t, packageAuthor, p.Metadata.Author.GivenName)
assert.Equal(t, packageRepositoryURL, p.Metadata.RepositoryURL)
assert.ElementsMatch(t, []string{packageRepositoryURL}, p.RepositoryURLs)
})
t.Run("WithExplicitNameField", func(t *testing.T) {
data := createArchive(map[string][]byte{
"Package.swift": []byte("// swift-tools-version:5.7\n//\n// Package.swift"),
})
authorName := "John Doe"
p, err := ParsePackage(
data,
data.Size(),
strings.NewReader(`{"name":"`+packageName+`","version":"`+packageVersion+`","description":"`+packageDescription+`","author":{"name":"`+authorName+`","givenName":"John","familyName":"Doe"}}`),
)
assert.NotNil(t, p)
assert.NoError(t, err)
assert.Equal(t, authorName, p.Metadata.Author.Name)
assert.Equal(t, "John", p.Metadata.Author.GivenName)
assert.Equal(t, "Doe", p.Metadata.Author.FamilyName)
})
t.Run("NameFieldGeneration", func(t *testing.T) {
data := createArchive(map[string][]byte{
"Package.swift": []byte("// swift-tools-version:5.7\n//\n// Package.swift"),
})
// Test with only individual name components - Name should be auto-generated
p, err := ParsePackage(
data,
data.Size(),
strings.NewReader(`{"author":{"givenName":"John","middleName":"Q","familyName":"Doe"}}`),
)
assert.NotNil(t, p)
assert.NoError(t, err)
assert.Equal(t, "John Q Doe", p.Metadata.Author.Name)
assert.Equal(t, "John", p.Metadata.Author.GivenName)
assert.Equal(t, "Q", p.Metadata.Author.MiddleName)
assert.Equal(t, "Doe", p.Metadata.Author.FamilyName)
})
}
func TestTrimmedVersionString(t *testing.T) {
@@ -142,3 +181,43 @@ func TestTrimmedVersionString(t *testing.T) {
assert.Equal(t, c.Expected, TrimmedVersionString(c.Version))
}
}
func TestPersonNameString(t *testing.T) {
cases := []struct {
Name string
Person Person
Expected string
}{
{
Name: "GivenNameOnly",
Person: Person{GivenName: "John"},
Expected: "John",
},
{
Name: "GivenAndFamily",
Person: Person{GivenName: "John", FamilyName: "Doe"},
Expected: "John Doe",
},
{
Name: "FullName",
Person: Person{GivenName: "John", MiddleName: "Q", FamilyName: "Doe"},
Expected: "John Q Doe",
},
{
Name: "MiddleAndFamily",
Person: Person{MiddleName: "Q", FamilyName: "Doe"},
Expected: "Q Doe",
},
{
Name: "Empty",
Person: Person{},
Expected: "",
},
}
for _, c := range cases {
t.Run(c.Name, func(t *testing.T) {
assert.Equal(t, c.Expected, c.Person.String())
})
}
}
+2 -6
View File
@@ -153,11 +153,7 @@ func resetIdleTicker(t *time.Ticker, dur time.Duration) {
// doStartNewWorker starts a new worker for the queue, the worker reads from worker's channel and handles the items.
func (q *WorkerPoolQueue[T]) doStartNewWorker(wp *workerGroup[T]) {
wp.wg.Add(1)
go func() {
defer wp.wg.Done()
wp.wg.Go(func() {
log.Debug("Queue %q starts new worker", q.GetName())
defer log.Debug("Queue %q stops idle worker", q.GetName())
@@ -192,7 +188,7 @@ func (q *WorkerPoolQueue[T]) doStartNewWorker(wp *workerGroup[T]) {
q.workerNumMu.Unlock()
}
}
}()
})
}
// doFlush flushes the queue: it tries to read all items from the queue and handles them.
+24 -12
View File
@@ -6,20 +6,32 @@ package structs
import "time"
type Activity struct {
ID int64 `json:"id"`
// The unique identifier of the activity
ID int64 `json:"id"`
// The ID of the user who receives/sees this activity
UserID int64 `json:"user_id"` // Receiver user
// the type of action
//
// enum: create_repo,rename_repo,star_repo,watch_repo,commit_repo,create_issue,create_pull_request,transfer_repo,push_tag,comment_issue,merge_pull_request,close_issue,reopen_issue,close_pull_request,reopen_pull_request,delete_tag,delete_branch,mirror_sync_push,mirror_sync_create,mirror_sync_delete,approve_pull_request,reject_pull_request,comment_pull,publish_release,pull_review_dismissed,pull_request_ready_for_review,auto_merge_pull_request
OpType string `json:"op_type"`
ActUserID int64 `json:"act_user_id"`
ActUser *User `json:"act_user"`
RepoID int64 `json:"repo_id"`
Repo *Repository `json:"repo"`
CommentID int64 `json:"comment_id"`
Comment *Comment `json:"comment"`
RefName string `json:"ref_name"`
IsPrivate bool `json:"is_private"`
Content string `json:"content"`
Created time.Time `json:"created"`
OpType string `json:"op_type"`
// The ID of the user who performed the action
ActUserID int64 `json:"act_user_id"`
// The user who performed the action
ActUser *User `json:"act_user"`
// The ID of the repository associated with the activity
RepoID int64 `json:"repo_id"`
// The repository associated with the activity
Repo *Repository `json:"repo"`
// The ID of the comment associated with the activity (if applicable)
CommentID int64 `json:"comment_id"`
// The comment associated with the activity (if applicable)
Comment *Comment `json:"comment"`
// The name of the git reference (branch/tag) associated with the activity
RefName string `json:"ref_name"`
// Whether this activity is from a private repository
IsPrivate bool `json:"is_private"`
// Additional content or details about the activity
Content string `json:"content"`
// The date and time when the activity occurred
Created time.Time `json:"created"`
}
+1
View File
@@ -5,5 +5,6 @@ package structs
// ActivityPub type
type ActivityPub struct {
// Context defines the JSON-LD context for ActivityPub
Context string `json:"@context"`
}
+46 -22
View File
@@ -8,6 +8,7 @@ import "time"
// CreateUserOption create user options
type CreateUserOption struct {
// The authentication source ID to associate with the user
SourceID int64 `json:"source_id"`
// identifier of the user, provided by the external authenticator (if configured)
// default: empty
@@ -15,15 +16,21 @@ type CreateUserOption struct {
// username of the user
// required: true
Username string `json:"username" binding:"Required;Username;MaxSize(40)"`
// The full display name of the user
FullName string `json:"full_name" binding:"MaxSize(100)"`
// required: true
// swagger:strfmt email
Email string `json:"email" binding:"Required;Email;MaxSize(254)"`
Password string `json:"password" binding:"MaxSize(255)"`
MustChangePassword *bool `json:"must_change_password"`
SendNotify bool `json:"send_notify"`
Restricted *bool `json:"restricted"`
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
Email string `json:"email" binding:"Required;Email;MaxSize(254)"`
// The plain text password for the user
Password string `json:"password" binding:"MaxSize(255)"`
// Whether the user must change password on first login
MustChangePassword *bool `json:"must_change_password"`
// Whether to send welcome notification email to the user
SendNotify bool `json:"send_notify"`
// Whether the user has restricted access privileges
Restricted *bool `json:"restricted"`
// User visibility level: public, limited, or private
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
// For explicitly setting the user creation timestamp. Useful when users are
// migrated from other systems. When omitted, the user's creation timestamp
@@ -34,26 +41,43 @@ type CreateUserOption struct {
// EditUserOption edit user options
type EditUserOption struct {
// required: true
// The authentication source ID to associate with the user
SourceID int64 `json:"source_id"`
// identifier of the user, provided by the external authenticator (if configured)
// default: empty
// required: true
LoginName string `json:"login_name" binding:"Required"`
// swagger:strfmt email
Email *string `json:"email" binding:"MaxSize(254)"`
FullName *string `json:"full_name" binding:"MaxSize(100)"`
Password string `json:"password" binding:"MaxSize(255)"`
MustChangePassword *bool `json:"must_change_password"`
Website *string `json:"website" binding:"OmitEmpty;ValidUrl;MaxSize(255)"`
Location *string `json:"location" binding:"MaxSize(50)"`
Description *string `json:"description" binding:"MaxSize(255)"`
Active *bool `json:"active"`
Admin *bool `json:"admin"`
AllowGitHook *bool `json:"allow_git_hook"`
AllowImportLocal *bool `json:"allow_import_local"`
MaxRepoCreation *int `json:"max_repo_creation"`
ProhibitLogin *bool `json:"prohibit_login"`
AllowCreateOrganization *bool `json:"allow_create_organization"`
Restricted *bool `json:"restricted"`
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
// The email address of the user
Email *string `json:"email" binding:"MaxSize(254)"`
// The full display name of the user
FullName *string `json:"full_name" binding:"MaxSize(100)"`
// The plain text password for the user
Password string `json:"password" binding:"MaxSize(255)"`
// Whether the user must change password on next login
MustChangePassword *bool `json:"must_change_password"`
// The user's personal website URL
Website *string `json:"website" binding:"OmitEmpty;ValidUrl;MaxSize(255)"`
// The user's location or address
Location *string `json:"location" binding:"MaxSize(50)"`
// The user's personal description or bio
Description *string `json:"description" binding:"MaxSize(255)"`
// Whether the user account is active
Active *bool `json:"active"`
// Whether the user has administrator privileges
Admin *bool `json:"admin"`
// Whether the user can use Git hooks
AllowGitHook *bool `json:"allow_git_hook"`
// Whether the user can import local repositories
AllowImportLocal *bool `json:"allow_import_local"`
// Maximum number of repositories the user can create
MaxRepoCreation *int `json:"max_repo_creation"`
// Whether the user is prohibited from logging in
ProhibitLogin *bool `json:"prohibit_login"`
// Whether the user can create organizations
AllowCreateOrganization *bool `json:"allow_create_organization"`
// Whether the user has restricted access privileges
Restricted *bool `json:"restricted"`
// User visibility level: public, limited, or private
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
}
+15 -7
View File
@@ -10,18 +10,26 @@ import (
// Attachment a generic attachment
// swagger:model
type Attachment struct {
ID int64 `json:"id"`
Name string `json:"name"`
Size int64 `json:"size"`
DownloadCount int64 `json:"download_count"`
// ID is the unique identifier for the attachment
ID int64 `json:"id"`
// Name is the filename of the attachment
Name string `json:"name"`
// Size is the file size in bytes
Size int64 `json:"size"`
// DownloadCount is the number of times the attachment has been downloaded
DownloadCount int64 `json:"download_count"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
UUID string `json:"uuid"`
DownloadURL string `json:"browser_download_url"`
// Created is the time when the attachment was uploaded
Created time.Time `json:"created_at"`
// UUID is the unique identifier for the attachment file
UUID string `json:"uuid"`
// DownloadURL is the URL to download the attachment
DownloadURL string `json:"browser_download_url"`
}
// EditAttachmentOptions options for editing attachments
// swagger:model
type EditAttachmentOptions struct {
// Name is the new filename for the attachment
Name string `json:"name"`
}
+10 -5
View File
@@ -7,9 +7,14 @@ import "time"
// Cron represents a Cron task
type Cron struct {
Name string `json:"name"`
Schedule string `json:"schedule"`
Next time.Time `json:"next"`
Prev time.Time `json:"prev"`
ExecTimes int64 `json:"exec_times"`
// The name of the cron task
Name string `json:"name"`
// The cron schedule expression (e.g., "0 0 * * *")
Schedule string `json:"schedule"`
// The next scheduled execution time
Next time.Time `json:"next"`
// The previous execution time
Prev time.Time `json:"prev"`
// The total number of times this cron task has been executed
ExecTimes int64 `json:"exec_times"`
}
+13 -6
View File
@@ -5,12 +5,19 @@ package structs
// GitBlobResponse represents a git blob
type GitBlobResponse struct {
Content *string `json:"content"`
// The content of the git blob (may be base64 encoded)
Content *string `json:"content"`
// The encoding used for the content (e.g., "base64")
Encoding *string `json:"encoding"`
URL string `json:"url"`
SHA string `json:"sha"`
Size int64 `json:"size"`
// The URL to access this git blob
URL string `json:"url"`
// The SHA hash of the git blob
SHA string `json:"sha"`
// The size of the git blob in bytes
Size int64 `json:"size"`
LfsOid *string `json:"lfs_oid,omitempty"`
LfsSize *int64 `json:"lfs_size,omitempty"`
// The LFS object ID if this blob is stored in LFS
LfsOid *string `json:"lfs_oid,omitempty"`
// The size of the LFS object if this blob is stored in LFS
LfsSize *int64 `json:"lfs_size,omitempty"`
}
+7 -3
View File
@@ -5,9 +5,12 @@ package structs
// GitHook represents a Git repository hook
type GitHook struct {
Name string `json:"name"`
IsActive bool `json:"is_active"`
Content string `json:"content,omitempty"`
// Name is the name of the Git hook
Name string `json:"name"`
// IsActive indicates if the hook is active
IsActive bool `json:"is_active"`
// Content contains the script content of the hook
Content string `json:"content,omitempty"`
}
// GitHookList represents a list of Git hooks
@@ -15,5 +18,6 @@ type GitHookList []*GitHook
// EditGitHookOption options when modifying one Git hook
type EditGitHookOption struct {
// Content is the new script content for the hook
Content string `json:"content"`
}
+260 -125
View File
@@ -17,17 +17,27 @@ var ErrInvalidReceiveHook = errors.New("Invalid JSON payload received over webho
// Hook a hook is a web hook when one repository changed
type Hook struct {
ID int64 `json:"id"`
Type string `json:"type"`
BranchFilter string `json:"branch_filter"`
URL string `json:"-"`
Config map[string]string `json:"config"`
Events []string `json:"events"`
AuthorizationHeader string `json:"authorization_header"`
Active bool `json:"active"`
// The unique identifier of the webhook
ID int64 `json:"id"`
// The type of the webhook (e.g., gitea, slack, discord)
Type string `json:"type"`
// Branch filter pattern to determine which branches trigger the webhook
BranchFilter string `json:"branch_filter"`
// The URL of the webhook endpoint (hidden in JSON)
URL string `json:"-"`
// Configuration settings for the webhook
Config map[string]string `json:"config"`
// List of events that trigger this webhook
Events []string `json:"events"`
// Authorization header to include in webhook requests
AuthorizationHeader string `json:"authorization_header"`
// Whether the webhook is active and will be triggered
Active bool `json:"active"`
// swagger:strfmt date-time
// The date and time when the webhook was last updated
Updated time.Time `json:"updated_at"`
// swagger:strfmt date-time
// The date and time when the webhook was created
Created time.Time `json:"created_at"`
}
@@ -42,23 +52,34 @@ type CreateHookOptionConfig map[string]string
type CreateHookOption struct {
// required: true
// enum: dingtalk,discord,gitea,gogs,msteams,slack,telegram,feishu,wechatwork,packagist
// The type of the webhook to create
Type string `json:"type" binding:"Required"`
// required: true
Config CreateHookOptionConfig `json:"config" binding:"Required"`
Events []string `json:"events"`
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
AuthorizationHeader string `json:"authorization_header"`
// Configuration settings for the webhook
Config CreateHookOptionConfig `json:"config" binding:"Required"`
// List of events that will trigger this webhook
Events []string `json:"events"`
// Branch filter pattern to determine which branches trigger the webhook
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
// Authorization header to include in webhook requests
AuthorizationHeader string `json:"authorization_header"`
// default: false
// Whether the webhook should be active upon creation
Active bool `json:"active"`
}
// EditHookOption options when modify one hook
type EditHookOption struct {
Config map[string]string `json:"config"`
Events []string `json:"events"`
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
AuthorizationHeader string `json:"authorization_header"`
Active *bool `json:"active"`
// Configuration settings for the webhook
Config map[string]string `json:"config"`
// List of events that trigger this webhook
Events []string `json:"events"`
// Branch filter pattern to determine which branches trigger the webhook
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
// Authorization header to include in webhook requests
AuthorizationHeader string `json:"authorization_header"`
// Whether the webhook is active and will be triggered
Active *bool `json:"active"`
}
// Payloader payload is some part of one hook
@@ -82,26 +103,40 @@ type PayloadUser struct {
// PayloadCommit represents a commit
type PayloadCommit struct {
// sha1 hash of the commit
ID string `json:"id"`
Message string `json:"message"`
URL string `json:"url"`
Author *PayloadUser `json:"author"`
Committer *PayloadUser `json:"committer"`
ID string `json:"id"`
// The commit message
Message string `json:"message"`
// The URL to view this commit
URL string `json:"url"`
// The author of the commit
Author *PayloadUser `json:"author"`
// The committer of the commit
Committer *PayloadUser `json:"committer"`
// GPG verification information for the commit
Verification *PayloadCommitVerification `json:"verification"`
// swagger:strfmt date-time
// The timestamp when the commit was made
Timestamp time.Time `json:"timestamp"`
Added []string `json:"added"`
Removed []string `json:"removed"`
Modified []string `json:"modified"`
// List of files added in this commit
Added []string `json:"added"`
// List of files removed in this commit
Removed []string `json:"removed"`
// List of files modified in this commit
Modified []string `json:"modified"`
}
// PayloadCommitVerification represents the GPG verification of a commit
type PayloadCommitVerification struct {
Verified bool `json:"verified"`
Reason string `json:"reason"`
Signature string `json:"signature"`
Signer *PayloadUser `json:"signer"`
Payload string `json:"payload"`
// Whether the commit signature is verified
Verified bool `json:"verified"`
// The reason for the verification status
Reason string `json:"reason"`
// The GPG signature of the commit
Signature string `json:"signature"`
// The user who signed the commit
Signer *PayloadUser `json:"signer"`
// The signed payload content
Payload string `json:"payload"`
}
var (
@@ -119,11 +154,16 @@ var (
// CreatePayload represents a payload information of create event.
type CreatePayload struct {
Sha string `json:"sha"`
Ref string `json:"ref"`
RefType string `json:"ref_type"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
// The SHA hash of the created reference
Sha string `json:"sha"`
// The full name of the created reference
Ref string `json:"ref"`
// The type of reference created (branch or tag)
RefType string `json:"ref_type"`
// The repository where the reference was created
Repo *Repository `json:"repository"`
// The user who created the reference
Sender *User `json:"sender"`
}
// JSONPayload return payload information
@@ -161,11 +201,16 @@ const (
// DeletePayload represents delete payload
type DeletePayload struct {
Ref string `json:"ref"`
RefType string `json:"ref_type"`
PusherType PusherType `json:"pusher_type"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
// The name of the deleted reference
Ref string `json:"ref"`
// The type of reference deleted (branch or tag)
RefType string `json:"ref_type"`
// The type of entity that performed the deletion
PusherType PusherType `json:"pusher_type"`
// The repository where the reference was deleted
Repo *Repository `json:"repository"`
// The user who deleted the reference
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -175,9 +220,12 @@ func (p *DeletePayload) JSONPayload() ([]byte, error) {
// ForkPayload represents fork payload
type ForkPayload struct {
// The forked repository (the new fork)
Forkee *Repository `json:"forkee"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
// The original repository that was forked
Repo *Repository `json:"repository"`
// The user who created the fork
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -197,14 +245,22 @@ const (
// IssueCommentPayload represents a payload information of issue comment event.
type IssueCommentPayload struct {
Action HookIssueCommentAction `json:"action"`
Issue *Issue `json:"issue"`
PullRequest *PullRequest `json:"pull_request,omitempty"`
Comment *Comment `json:"comment"`
Changes *ChangesPayload `json:"changes,omitempty"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
IsPull bool `json:"is_pull"`
// The action performed on the comment (created, edited, deleted)
Action HookIssueCommentAction `json:"action"`
// The issue that the comment belongs to
Issue *Issue `json:"issue"`
// The pull request if the comment is on a pull request
PullRequest *PullRequest `json:"pull_request,omitempty"`
// The comment that was acted upon
Comment *Comment `json:"comment"`
// Changes made to the comment (for edit actions)
Changes *ChangesPayload `json:"changes,omitempty"`
// The repository containing the issue/pull request
Repository *Repository `json:"repository"`
// The user who performed the action
Sender *User `json:"sender"`
// Whether this comment is on a pull request
IsPull bool `json:"is_pull"`
}
// JSONPayload implements Payload
@@ -224,10 +280,14 @@ const (
// ReleasePayload represents a payload information of release event.
type ReleasePayload struct {
Action HookReleaseAction `json:"action"`
Release *Release `json:"release"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
// The action performed on the release (published, updated, deleted)
Action HookReleaseAction `json:"action"`
// The release that was acted upon
Release *Release `json:"release"`
// The repository containing the release
Repository *Repository `json:"repository"`
// The user who performed the action
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -237,16 +297,26 @@ func (p *ReleasePayload) JSONPayload() ([]byte, error) {
// PushPayload represents a payload information of push event.
type PushPayload struct {
Ref string `json:"ref"`
Before string `json:"before"`
After string `json:"after"`
CompareURL string `json:"compare_url"`
Commits []*PayloadCommit `json:"commits"`
TotalCommits int `json:"total_commits"`
HeadCommit *PayloadCommit `json:"head_commit"`
Repo *Repository `json:"repository"`
Pusher *User `json:"pusher"`
Sender *User `json:"sender"`
// The full name of the pushed reference
Ref string `json:"ref"`
// The SHA of the most recent commit before the push
Before string `json:"before"`
// The SHA of the most recent commit after the push
After string `json:"after"`
// URL to compare the changes in this push
CompareURL string `json:"compare_url"`
// List of commits included in the push
Commits []*PayloadCommit `json:"commits"`
// Total number of commits in the push
TotalCommits int `json:"total_commits"`
// The most recent commit in the push
HeadCommit *PayloadCommit `json:"head_commit"`
// The repository that was pushed to
Repo *Repository `json:"repository"`
// The user who performed the push
Pusher *User `json:"pusher"`
// The user who triggered the webhook
Sender *User `json:"sender"`
}
// JSONPayload FIXME
@@ -313,13 +383,20 @@ const (
// IssuePayload represents the payload information that is sent along with an issue event.
type IssuePayload struct {
Action HookIssueAction `json:"action"`
Index int64 `json:"number"`
Changes *ChangesPayload `json:"changes,omitempty"`
Issue *Issue `json:"issue"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
CommitID string `json:"commit_id"`
// The action performed on the issue
Action HookIssueAction `json:"action"`
// The index number of the issue
Index int64 `json:"number"`
// Changes made to the issue (for edit actions)
Changes *ChangesPayload `json:"changes,omitempty"`
// The issue that was acted upon
Issue *Issue `json:"issue"`
// The repository containing the issue
Repository *Repository `json:"repository"`
// The user who performed the action
Sender *User `json:"sender"`
// The commit ID related to the issue action
CommitID string `json:"commit_id"`
}
// JSONPayload encodes the IssuePayload to JSON, with an indentation of two spaces.
@@ -329,27 +406,40 @@ func (p *IssuePayload) JSONPayload() ([]byte, error) {
// ChangesFromPayload FIXME
type ChangesFromPayload struct {
// The previous value before the change
From string `json:"from"`
}
// ChangesPayload represents the payload information of issue change
type ChangesPayload struct {
// Changes made to the title
Title *ChangesFromPayload `json:"title,omitempty"`
Body *ChangesFromPayload `json:"body,omitempty"`
Ref *ChangesFromPayload `json:"ref,omitempty"`
// Changes made to the body/description
Body *ChangesFromPayload `json:"body,omitempty"`
// Changes made to the reference
Ref *ChangesFromPayload `json:"ref,omitempty"`
}
// PullRequestPayload represents a payload information of pull request event.
type PullRequestPayload struct {
Action HookIssueAction `json:"action"`
Index int64 `json:"number"`
Changes *ChangesPayload `json:"changes,omitempty"`
PullRequest *PullRequest `json:"pull_request"`
RequestedReviewer *User `json:"requested_reviewer"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
CommitID string `json:"commit_id"`
Review *ReviewPayload `json:"review"`
// The action performed on the pull request
Action HookIssueAction `json:"action"`
// The index number of the pull request
Index int64 `json:"number"`
// Changes made to the pull request (for edit actions)
Changes *ChangesPayload `json:"changes,omitempty"`
// The pull request that was acted upon
PullRequest *PullRequest `json:"pull_request"`
// The reviewer that was requested (for review request actions)
RequestedReviewer *User `json:"requested_reviewer"`
// The repository containing the pull request
Repository *Repository `json:"repository"`
// The user who performed the action
Sender *User `json:"sender"`
// The commit ID related to the pull request action
CommitID string `json:"commit_id"`
// The review information (for review actions)
Review *ReviewPayload `json:"review"`
}
// JSONPayload FIXME
@@ -359,7 +449,9 @@ func (p *PullRequestPayload) JSONPayload() ([]byte, error) {
// ReviewPayload FIXME
type ReviewPayload struct {
Type string `json:"type"`
// The type of review (approved, rejected, comment)
Type string `json:"type"`
// The content/body of the review
Content string `json:"content"`
}
@@ -377,11 +469,16 @@ const (
// WikiPayload payload for repository webhooks
type WikiPayload struct {
Action HookWikiAction `json:"action"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
Page string `json:"page"`
Comment string `json:"comment"`
// The action performed on the wiki page
Action HookWikiAction `json:"action"`
// The repository containing the wiki
Repository *Repository `json:"repository"`
// The user who performed the action
Sender *User `json:"sender"`
// The name of the wiki page
Page string `json:"page"`
// The comment/commit message for the wiki change
Comment string `json:"comment"`
}
// JSONPayload JSON representation of the payload
@@ -401,10 +498,14 @@ const (
// RepositoryPayload payload for repository webhooks
type RepositoryPayload struct {
Action HookRepoAction `json:"action"`
Repository *Repository `json:"repository"`
Organization *User `json:"organization"`
Sender *User `json:"sender"`
// The action performed on the repository
Action HookRepoAction `json:"action"`
// The repository that was acted upon
Repository *Repository `json:"repository"`
// The organization that owns the repository (if applicable)
Organization *User `json:"organization"`
// The user who performed the action
Sender *User `json:"sender"`
}
// JSONPayload JSON representation of the payload
@@ -424,11 +525,16 @@ const (
// PackagePayload represents a package payload
type PackagePayload struct {
Action HookPackageAction `json:"action"`
Repository *Repository `json:"repository"`
Package *Package `json:"package"`
Organization *Organization `json:"organization"`
Sender *User `json:"sender"`
// The action performed on the package
Action HookPackageAction `json:"action"`
// The repository associated with the package
Repository *Repository `json:"repository"`
// The package that was acted upon
Package *Package `json:"package"`
// The organization that owns the package (if applicable)
Organization *Organization `json:"organization"`
// The user who performed the action
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -438,11 +544,16 @@ func (p *PackagePayload) JSONPayload() ([]byte, error) {
// WorkflowDispatchPayload represents a workflow dispatch payload
type WorkflowDispatchPayload struct {
Workflow string `json:"workflow"`
Ref string `json:"ref"`
Inputs map[string]any `json:"inputs"`
Repository *Repository `json:"repository"`
Sender *User `json:"sender"`
// The name or path of the workflow file
Workflow string `json:"workflow"`
// The git reference (branch, tag, or commit SHA) to run the workflow on
Ref string `json:"ref"`
// Input parameters for the workflow dispatch event
Inputs map[string]any `json:"inputs"`
// The repository containing the workflow
Repository *Repository `json:"repository"`
// The user who triggered the workflow dispatch
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -453,18 +564,29 @@ func (p *WorkflowDispatchPayload) JSONPayload() ([]byte, error) {
// CommitStatusPayload represents a payload information of commit status event.
type CommitStatusPayload struct {
// TODO: add Branches per https://docs.github.com/en/webhooks/webhook-events-and-payloads#status
Commit *PayloadCommit `json:"commit"`
Context string `json:"context"`
// The commit that the status is associated with
Commit *PayloadCommit `json:"commit"`
// The context/identifier for this status check
Context string `json:"context"`
// swagger:strfmt date-time
CreatedAt time.Time `json:"created_at"`
Description string `json:"description"`
ID int64 `json:"id"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
SHA string `json:"sha"`
State string `json:"state"`
TargetURL string `json:"target_url"`
// The date and time when the status was created
CreatedAt time.Time `json:"created_at"`
// A short description of the status
Description string `json:"description"`
// The unique identifier of the status
ID int64 `json:"id"`
// The repository containing the commit
Repo *Repository `json:"repository"`
// The user who created the status
Sender *User `json:"sender"`
// The SHA hash of the commit
SHA string `json:"sha"`
// The state of the status (pending, success, error, failure)
State string `json:"state"`
// The target URL to associate with this status
TargetURL string `json:"target_url"`
// swagger:strfmt date-time
// The date and time when the status was last updated
UpdatedAt *time.Time `json:"updated_at"`
}
@@ -475,13 +597,20 @@ func (p *CommitStatusPayload) JSONPayload() ([]byte, error) {
// WorkflowRunPayload represents a payload information of workflow run event.
type WorkflowRunPayload struct {
Action string `json:"action"`
Workflow *ActionWorkflow `json:"workflow"`
WorkflowRun *ActionWorkflowRun `json:"workflow_run"`
PullRequest *PullRequest `json:"pull_request,omitempty"`
Organization *Organization `json:"organization,omitempty"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
// The action performed on the workflow run
Action string `json:"action"`
// The workflow definition
Workflow *ActionWorkflow `json:"workflow"`
// The workflow run that was acted upon
WorkflowRun *ActionWorkflowRun `json:"workflow_run"`
// The pull request associated with the workflow run (if applicable)
PullRequest *PullRequest `json:"pull_request,omitempty"`
// The organization that owns the repository (if applicable)
Organization *Organization `json:"organization,omitempty"`
// The repository containing the workflow
Repo *Repository `json:"repository"`
// The user who triggered the workflow run
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
@@ -491,12 +620,18 @@ func (p *WorkflowRunPayload) JSONPayload() ([]byte, error) {
// WorkflowJobPayload represents a payload information of workflow job event.
type WorkflowJobPayload struct {
Action string `json:"action"`
WorkflowJob *ActionWorkflowJob `json:"workflow_job"`
PullRequest *PullRequest `json:"pull_request,omitempty"`
Organization *Organization `json:"organization,omitempty"`
Repo *Repository `json:"repository"`
Sender *User `json:"sender"`
// The action performed on the workflow job
Action string `json:"action"`
// The workflow job that was acted upon
WorkflowJob *ActionWorkflowJob `json:"workflow_job"`
// The pull request associated with the workflow job (if applicable)
PullRequest *PullRequest `json:"pull_request,omitempty"`
// The organization that owns the repository (if applicable)
Organization *Organization `json:"organization,omitempty"`
// The repository containing the workflow
Repo *Repository `json:"repository"`
// The user who triggered the workflow job
Sender *User `json:"sender"`
}
// JSONPayload implements Payload
+32 -14
View File
@@ -9,15 +9,24 @@ import (
// Comment represents a comment on a commit or issue
type Comment struct {
ID int64 `json:"id"`
HTMLURL string `json:"html_url"`
PRURL string `json:"pull_request_url"`
IssueURL string `json:"issue_url"`
Poster *User `json:"user"`
OriginalAuthor string `json:"original_author"`
OriginalAuthorID int64 `json:"original_author_id"`
Body string `json:"body"`
Attachments []*Attachment `json:"assets"`
// ID is the unique identifier for the comment
ID int64 `json:"id"`
// HTMLURL is the web URL for viewing the comment
HTMLURL string `json:"html_url"`
// PRURL is the API URL for the pull request (if applicable)
PRURL string `json:"pull_request_url"`
// IssueURL is the API URL for the issue
IssueURL string `json:"issue_url"`
// Poster is the user who posted the comment
Poster *User `json:"user"`
// OriginalAuthor is the original author name (for imported comments)
OriginalAuthor string `json:"original_author"`
// OriginalAuthorID is the original author ID (for imported comments)
OriginalAuthorID int64 `json:"original_author_id"`
// Body contains the comment text content
Body string `json:"body"`
// Attachments contains files attached to the comment
Attachments []*Attachment `json:"assets"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
@@ -27,25 +36,34 @@ type Comment struct {
// CreateIssueCommentOption options for creating a comment on an issue
type CreateIssueCommentOption struct {
// required:true
// Body is the comment text content
Body string `json:"body" binding:"Required"`
}
// EditIssueCommentOption options for editing a comment
type EditIssueCommentOption struct {
// required: true
// Body is the updated comment text content
Body string `json:"body" binding:"Required"`
}
// TimelineComment represents a timeline comment (comment of any type) on a commit or issue
type TimelineComment struct {
ID int64 `json:"id"`
// ID is the unique identifier for the timeline comment
ID int64 `json:"id"`
// Type indicates the type of timeline event
Type string `json:"type"`
HTMLURL string `json:"html_url"`
PRURL string `json:"pull_request_url"`
// HTMLURL is the web URL for viewing the comment
HTMLURL string `json:"html_url"`
// PRURL is the API URL for the pull request (if applicable)
PRURL string `json:"pull_request_url"`
// IssueURL is the API URL for the issue
IssueURL string `json:"issue_url"`
Poster *User `json:"user"`
Body string `json:"body"`
// Poster is the user who created the timeline event
Poster *User `json:"user"`
// Body contains the timeline event content
Body string `json:"body"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
+16 -6
View File
@@ -7,27 +7,33 @@ package structs
// Label a label to an issue or a pr
// swagger:model
type Label struct {
ID int64 `json:"id"`
// ID is the unique identifier for the label
ID int64 `json:"id"`
// Name is the display name of the label
Name string `json:"name"`
// example: false
Exclusive bool `json:"exclusive"`
// example: false
IsArchived bool `json:"is_archived"`
// example: 00aabb
Color string `json:"color"`
Color string `json:"color"`
// Description provides additional context about the label's purpose
Description string `json:"description"`
URL string `json:"url"`
// URL is the API endpoint for accessing this label
URL string `json:"url"`
}
// CreateLabelOption options for creating a label
type CreateLabelOption struct {
// required:true
// Name is the display name for the new label
Name string `json:"name" binding:"Required"`
// example: false
Exclusive bool `json:"exclusive"`
// required:true
// example: #00aabb
Color string `json:"color" binding:"Required"`
Color string `json:"color" binding:"Required"`
// Description provides additional context about the label's purpose
Description string `json:"description"`
// example: false
IsArchived bool `json:"is_archived"`
@@ -35,11 +41,13 @@ type CreateLabelOption struct {
// EditLabelOption options for editing a label
type EditLabelOption struct {
// Name is the new display name for the label
Name *string `json:"name"`
// example: false
Exclusive *bool `json:"exclusive"`
// example: #00aabb
Color *string `json:"color"`
Color *string `json:"color"`
// Description provides additional context about the label's purpose
Description *string `json:"description"`
// example: false
IsArchived *bool `json:"is_archived"`
@@ -54,10 +62,12 @@ type IssueLabelsOption struct {
// LabelTemplate info of a Label template
type LabelTemplate struct {
// Name is the display name of the label template
Name string `json:"name"`
// example: false
Exclusive bool `json:"exclusive"`
// example: 00aabb
Color string `json:"color"`
Color string `json:"color"`
// Description provides additional context about the label template's purpose
Description string `json:"description"`
}
+25 -11
View File
@@ -9,12 +9,18 @@ import (
// Milestone milestone is a collection of issues on one repository
type Milestone struct {
ID int64 `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
State StateType `json:"state"`
OpenIssues int `json:"open_issues"`
ClosedIssues int `json:"closed_issues"`
// ID is the unique identifier for the milestone
ID int64 `json:"id"`
// Title is the title of the milestone
Title string `json:"title"`
// Description provides details about the milestone
Description string `json:"description"`
// State indicates if the milestone is open or closed
State StateType `json:"state"`
// OpenIssues is the number of open issues in this milestone
OpenIssues int `json:"open_issues"`
// ClosedIssues is the number of closed issues in this milestone
ClosedIssues int `json:"closed_issues"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
@@ -27,18 +33,26 @@ type Milestone struct {
// CreateMilestoneOption options for creating a milestone
type CreateMilestoneOption struct {
Title string `json:"title"`
// Title is the title of the new milestone
Title string `json:"title"`
// Description provides details about the milestone
Description string `json:"description"`
// swagger:strfmt date-time
// Deadline is the due date for the milestone
Deadline *time.Time `json:"due_on"`
// enum: open,closed
// State indicates the initial state of the milestone
State string `json:"state"`
}
// EditMilestoneOption options for editing a milestone
type EditMilestoneOption struct {
Title string `json:"title"`
Description *string `json:"description"`
State *string `json:"state"`
Deadline *time.Time `json:"due_on"`
// Title is the updated title of the milestone
Title string `json:"title"`
// Description provides updated details about the milestone
Description *string `json:"description"`
// State indicates the updated state of the milestone
State *string `json:"state"`
// Deadline is the updated due date for the milestone
Deadline *time.Time `json:"due_on"`
}
+5 -1
View File
@@ -9,13 +9,17 @@ import (
// EditReactionOption contain the reaction type
type EditReactionOption struct {
// The reaction content (e.g., emoji or reaction type)
Reaction string `json:"content"`
}
// Reaction contain one reaction
type Reaction struct {
User *User `json:"user"`
// The user who created the reaction
User *User `json:"user"`
// The reaction content (e.g., emoji or reaction type)
Reaction string `json:"content"`
// swagger:strfmt date-time
// The date and time when the reaction was created
Created time.Time `json:"created_at"`
}
+14 -7
View File
@@ -10,13 +10,20 @@ import (
// StopWatch represent a running stopwatch
type StopWatch struct {
// swagger:strfmt date-time
Created time.Time `json:"created"`
Seconds int64 `json:"seconds"`
Duration string `json:"duration"`
IssueIndex int64 `json:"issue_index"`
IssueTitle string `json:"issue_title"`
RepoOwnerName string `json:"repo_owner_name"`
RepoName string `json:"repo_name"`
// Created is the time when the stopwatch was started
Created time.Time `json:"created"`
// Seconds is the total elapsed time in seconds
Seconds int64 `json:"seconds"`
// Duration is a human-readable duration string
Duration string `json:"duration"`
// IssueIndex is the index number of the associated issue
IssueIndex int64 `json:"issue_index"`
// IssueTitle is the title of the associated issue
IssueTitle string `json:"issue_title"`
// RepoOwnerName is the name of the repository owner
RepoOwnerName string `json:"repo_owner_name"`
// RepoName is the name of the repository
RepoName string `json:"repo_name"`
}
// StopWatches represent a list of stopwatches
+4 -2
View File
@@ -20,6 +20,7 @@ type AddTimeOption struct {
// TrackedTime worked time for an issue / pr
type TrackedTime struct {
// ID is the unique identifier for the tracked time entry
ID int64 `json:"id"`
// swagger:strfmt date-time
Created time.Time `json:"created"`
@@ -30,8 +31,9 @@ type TrackedTime struct {
// username of the user
UserName string `json:"user_name"`
// deprecated (only for backwards compatibility)
IssueID int64 `json:"issue_id"`
Issue *Issue `json:"issue"`
IssueID int64 `json:"issue_id"`
// Issue contains the associated issue information
Issue *Issue `json:"issue"`
}
// TrackedTimeList represents a list of tracked times
+28 -11
View File
@@ -10,55 +10,72 @@ import (
// LFSLock represent a lock
// for use with the locks API.
type LFSLock struct {
ID string `json:"id"`
Path string `json:"path"`
LockedAt time.Time `json:"locked_at"`
Owner *LFSLockOwner `json:"owner"`
// The unique identifier of the lock
ID string `json:"id"`
// The file path that is locked
Path string `json:"path"`
// The timestamp when the lock was created
LockedAt time.Time `json:"locked_at"`
// The owner of the lock
Owner *LFSLockOwner `json:"owner"`
}
// LFSLockOwner represent a lock owner
// for use with the locks API.
type LFSLockOwner struct {
// The name of the lock owner
Name string `json:"name"`
}
// LFSLockRequest contains the path of the lock to create
// https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#create-lock
type LFSLockRequest struct {
// The file path to lock
Path string `json:"path"`
}
// LFSLockResponse represent a lock created
// https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#create-lock
type LFSLockResponse struct {
// The created lock
Lock *LFSLock `json:"lock"`
}
// LFSLockList represent a list of lock requested
// https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#list-locks
type LFSLockList struct {
// The list of locks
Locks []*LFSLock `json:"locks"`
Next string `json:"next_cursor,omitempty"`
// The cursor for pagination to the next set of results
Next string `json:"next_cursor,omitempty"`
}
// LFSLockListVerify represent a list of lock verification requested
// https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#list-locks-for-verification
type LFSLockListVerify struct {
Ours []*LFSLock `json:"ours"`
// Locks owned by the requesting user
Ours []*LFSLock `json:"ours"`
// Locks owned by other users
Theirs []*LFSLock `json:"theirs"`
Next string `json:"next_cursor,omitempty"`
// The cursor for pagination to the next set of results
Next string `json:"next_cursor,omitempty"`
}
// LFSLockError contains information on the error that occurs
type LFSLockError struct {
Message string `json:"message"`
Lock *LFSLock `json:"lock,omitempty"`
Documentation string `json:"documentation_url,omitempty"`
RequestID string `json:"request_id,omitempty"`
// The error message
Message string `json:"message"`
// The lock related to the error, if any
Lock *LFSLock `json:"lock,omitempty"`
// URL to documentation about the error
Documentation string `json:"documentation_url,omitempty"`
// The request ID for debugging purposes
RequestID string `json:"request_id,omitempty"`
}
// LFSLockDeleteRequest contains params of a delete request
// https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md#delete-lock
type LFSLockDeleteRequest struct {
// Whether to force delete the lock even if not owned by the requester
Force bool `json:"force"`
}
+19 -8
View File
@@ -7,24 +7,35 @@ import "time"
// CreatePushMirrorOption represents need information to create a push mirror of a repository.
type CreatePushMirrorOption struct {
RemoteAddress string `json:"remote_address"`
// The remote repository URL to push to
RemoteAddress string `json:"remote_address"`
// The username for authentication with the remote repository
RemoteUsername string `json:"remote_username"`
// The password for authentication with the remote repository
RemotePassword string `json:"remote_password"`
Interval string `json:"interval"`
SyncOnCommit bool `json:"sync_on_commit"`
// The sync interval for automatic updates
Interval string `json:"interval"`
// Whether to sync on every commit
SyncOnCommit bool `json:"sync_on_commit"`
}
// PushMirror represents information of a push mirror
// swagger:model
type PushMirror struct {
RepoName string `json:"repo_name"`
RemoteName string `json:"remote_name"`
// The name of the source repository
RepoName string `json:"repo_name"`
// The name of the remote in the git configuration
RemoteName string `json:"remote_name"`
// The remote repository URL being mirrored to
RemoteAddress string `json:"remote_address"`
// swagger:strfmt date-time
CreatedUnix time.Time `json:"created"`
// swagger:strfmt date-time
LastUpdateUnix *time.Time `json:"last_update"`
LastError string `json:"last_error"`
Interval string `json:"interval"`
SyncOnCommit bool `json:"sync_on_commit"`
// The last error message encountered during sync
LastError string `json:"last_error"`
// The sync interval for automatic updates
Interval string `json:"interval"`
// Whether to sync on every commit
SyncOnCommit bool `json:"sync_on_commit"`
}
+27 -10
View File
@@ -5,13 +5,17 @@ package structs
// SearchResults results of a successful search
type SearchResults struct {
OK bool `json:"ok"`
// OK indicates if the search was successful
OK bool `json:"ok"`
// Data contains the repository search results
Data []*Repository `json:"data"`
}
// SearchError error of a failed search
type SearchError struct {
OK bool `json:"ok"`
// OK indicates the search status (always false for errors)
OK bool `json:"ok"`
// Error contains the error message
Error string `json:"error"`
}
@@ -73,33 +77,46 @@ type MarkdownRender string
// ServerVersion wraps the version of the server
type ServerVersion struct {
// Version is the server version string
Version string `json:"version"`
}
// GitignoreTemplateInfo name and text of a gitignore template
type GitignoreTemplateInfo struct {
Name string `json:"name"`
// Name is the name of the gitignore template
Name string `json:"name"`
// Source contains the content of the gitignore template
Source string `json:"source"`
}
// LicensesListEntry is used for the API
type LicensesTemplateListEntry struct {
Key string `json:"key"`
// Key is the unique identifier for the license template
Key string `json:"key"`
// Name is the display name of the license
Name string `json:"name"`
URL string `json:"url"`
// URL is the reference URL for the license
URL string `json:"url"`
}
// LicensesInfo contains information about a License
type LicenseTemplateInfo struct {
Key string `json:"key"`
Name string `json:"name"`
URL string `json:"url"`
// Key is the unique identifier for the license template
Key string `json:"key"`
// Name is the display name of the license
Name string `json:"name"`
// URL is the reference URL for the license
URL string `json:"url"`
// Implementation contains license implementation details
Implementation string `json:"implementation"`
Body string `json:"body"`
// Body contains the full text of the license
Body string `json:"body"`
}
// APIError is an api error with a message
type APIError struct {
// Message contains the error description
Message string `json:"message"`
URL string `json:"url"`
// URL contains the documentation URL for this error
URL string `json:"url"`
}
+35 -16
View File
@@ -5,39 +5,58 @@ package structs
// NodeInfo contains standardized way of exposing metadata about a server running one of the distributed social networks
type NodeInfo struct {
Version string `json:"version"`
Software NodeInfoSoftware `json:"software"`
Protocols []string `json:"protocols"`
Services NodeInfoServices `json:"services"`
OpenRegistrations bool `json:"openRegistrations"`
Usage NodeInfoUsage `json:"usage"`
Metadata struct{} `json:"metadata"`
// Version specifies the schema version
Version string `json:"version"`
// Software contains information about the server software
Software NodeInfoSoftware `json:"software"`
// Protocols lists the protocols supported by this server
Protocols []string `json:"protocols"`
// Services contains third party services this server can connect to
Services NodeInfoServices `json:"services"`
// OpenRegistrations indicates if new user registrations are accepted
OpenRegistrations bool `json:"openRegistrations"`
// Usage contains server usage statistics
Usage NodeInfoUsage `json:"usage"`
// Metadata contains free form key value pairs for software specific values
Metadata struct{} `json:"metadata"`
}
// NodeInfoSoftware contains Metadata about server software in use
type NodeInfoSoftware struct {
Name string `json:"name"`
Version string `json:"version"`
// Name is the canonical name of this server software
Name string `json:"name"`
// Version is the version of this server software
Version string `json:"version"`
// Repository is the URL to the source code repository
Repository string `json:"repository"`
Homepage string `json:"homepage"`
// Homepage is the URL to the homepage of this server software
Homepage string `json:"homepage"`
}
// NodeInfoServices contains the third party sites this server can connect to via their application API
type NodeInfoServices struct {
Inbound []string `json:"inbound"`
// Inbound lists services that can deliver content to this server
Inbound []string `json:"inbound"`
// Outbound lists services this server can deliver content to
Outbound []string `json:"outbound"`
}
// NodeInfoUsage contains usage statistics for this server
type NodeInfoUsage struct {
Users NodeInfoUsageUsers `json:"users"`
LocalPosts int `json:"localPosts,omitempty"`
LocalComments int `json:"localComments,omitempty"`
// Users contains user statistics
Users NodeInfoUsageUsers `json:"users"`
// LocalPosts is the total amount of posts made by users local to this server
LocalPosts int `json:"localPosts,omitempty"`
// LocalComments is the total amount of comments made by users local to this server
LocalComments int `json:"localComments,omitempty"`
}
// NodeInfoUsageUsers contains statistics about the users of this server
type NodeInfoUsageUsers struct {
Total int `json:"total,omitempty"`
// Total is the total amount of users on this server
Total int `json:"total,omitempty"`
// ActiveHalfyear is the amount of users that signed in at least once in the last 180 days
ActiveHalfyear int `json:"activeHalfyear,omitempty"`
ActiveMonth int `json:"activeMonth,omitempty"`
// ActiveMonth is the amount of users that signed in at least once in the last 30 days
ActiveMonth int `json:"activeMonth,omitempty"`
}
+29 -14
View File
@@ -9,28 +9,43 @@ import (
// NotificationThread expose Notification on API
type NotificationThread struct {
ID int64 `json:"id"`
Repository *Repository `json:"repository"`
Subject *NotificationSubject `json:"subject"`
Unread bool `json:"unread"`
Pinned bool `json:"pinned"`
UpdatedAt time.Time `json:"updated_at"`
URL string `json:"url"`
// ID is the unique identifier for the notification thread
ID int64 `json:"id"`
// Repository is the repository associated with the notification
Repository *Repository `json:"repository"`
// Subject contains details about the notification subject
Subject *NotificationSubject `json:"subject"`
// Unread indicates if the notification has been read
Unread bool `json:"unread"`
// Pinned indicates if the notification is pinned
Pinned bool `json:"pinned"`
// UpdatedAt is the time when the notification was last updated
UpdatedAt time.Time `json:"updated_at"`
// URL is the API URL for this notification thread
URL string `json:"url"`
}
// NotificationSubject contains the notification subject (Issue/Pull/Commit)
type NotificationSubject struct {
Title string `json:"title"`
URL string `json:"url"`
LatestCommentURL string `json:"latest_comment_url"`
HTMLURL string `json:"html_url"`
LatestCommentHTMLURL string `json:"latest_comment_html_url"`
Type NotifySubjectType `json:"type" binding:"In(Issue,Pull,Commit,Repository)"`
State StateType `json:"state"`
// Title is the title of the notification subject
Title string `json:"title"`
// URL is the API URL for the notification subject
URL string `json:"url"`
// LatestCommentURL is the API URL for the latest comment
LatestCommentURL string `json:"latest_comment_url"`
// HTMLURL is the web URL for the notification subject
HTMLURL string `json:"html_url"`
// LatestCommentHTMLURL is the web URL for the latest comment
LatestCommentHTMLURL string `json:"latest_comment_html_url"`
// Type indicates the type of the notification subject
Type NotifySubjectType `json:"type" binding:"In(Issue,Pull,Commit,Repository)"`
// State indicates the current state of the notification subject
State StateType `json:"state"`
}
// NotificationCount number of unread notifications
type NotificationCount struct {
// New is the number of unread notifications
New int64 `json:"new"`
}
+54 -27
View File
@@ -5,16 +5,26 @@ package structs
// Organization represents an organization
type Organization struct {
ID int64 `json:"id"`
Name string `json:"name"`
FullName string `json:"full_name"`
Email string `json:"email"`
AvatarURL string `json:"avatar_url"`
Description string `json:"description"`
Website string `json:"website"`
Location string `json:"location"`
Visibility string `json:"visibility"`
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
// The unique identifier of the organization
ID int64 `json:"id"`
// The name of the organization
Name string `json:"name"`
// The full display name of the organization
FullName string `json:"full_name"`
// The email address of the organization
Email string `json:"email"`
// The URL of the organization's avatar
AvatarURL string `json:"avatar_url"`
// The description of the organization
Description string `json:"description"`
// The website URL of the organization
Website string `json:"website"`
// The location of the organization
Location string `json:"location"`
// The visibility level of the organization (public, limited, private)
Visibility string `json:"visibility"`
// Whether repository administrators can change team access
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
// username of the organization
// deprecated
UserName string `json:"username"`
@@ -22,10 +32,15 @@ type Organization struct {
// OrganizationPermissions list different users permissions on an organization
type OrganizationPermissions struct {
IsOwner bool `json:"is_owner"`
IsAdmin bool `json:"is_admin"`
CanWrite bool `json:"can_write"`
CanRead bool `json:"can_read"`
// Whether the user is an owner of the organization
IsOwner bool `json:"is_owner"`
// Whether the user is an admin of the organization
IsAdmin bool `json:"is_admin"`
// Whether the user can write to the organization
CanWrite bool `json:"can_write"`
// Whether the user can read the organization
CanRead bool `json:"can_read"`
// Whether the user can create repositories in the organization
CanCreateRepository bool `json:"can_create_repository"`
}
@@ -33,31 +48,43 @@ type OrganizationPermissions struct {
type CreateOrgOption struct {
// username of the organization
// required: true
UserName string `json:"username" binding:"Required;Username;MaxSize(40)"`
FullName string `json:"full_name" binding:"MaxSize(100)"`
Email string `json:"email" binding:"MaxSize(255)"`
UserName string `json:"username" binding:"Required;Username;MaxSize(40)"`
// The full display name of the organization
FullName string `json:"full_name" binding:"MaxSize(100)"`
// The email address of the organization
Email string `json:"email" binding:"MaxSize(255)"`
// The description of the organization
Description string `json:"description" binding:"MaxSize(255)"`
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
Location string `json:"location" binding:"MaxSize(50)"`
// The website URL of the organization
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
// The location of the organization
Location string `json:"location" binding:"MaxSize(50)"`
// possible values are `public` (default), `limited` or `private`
// enum: public,limited,private
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
// Whether repository administrators can change team access
RepoAdminChangeTeamAccess bool `json:"repo_admin_change_team_access"`
}
// TODO: make EditOrgOption fields optional after https://gitea.com/go-chi/binding/pulls/5 got merged
// EditOrgOption options for editing an organization
type EditOrgOption struct {
FullName string `json:"full_name" binding:"MaxSize(100)"`
Email string `json:"email" binding:"MaxSize(255)"`
// The full display name of the organization
FullName string `json:"full_name" binding:"MaxSize(100)"`
// The email address of the organization
Email string `json:"email" binding:"MaxSize(255)"`
// The description of the organization
Description string `json:"description" binding:"MaxSize(255)"`
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
Location string `json:"location" binding:"MaxSize(50)"`
// The website URL of the organization
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
// The location of the organization
Location string `json:"location" binding:"MaxSize(50)"`
// possible values are `public`, `limited` or `private`
// enum: public,limited,private
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
RepoAdminChangeTeamAccess *bool `json:"repo_admin_change_team_access"`
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
// Whether repository administrators can change team access
RepoAdminChangeTeamAccess *bool `json:"repo_admin_change_team_access"`
}
// RenameOrgOption options when renaming an organization
+1
View File
@@ -5,5 +5,6 @@ package structs
// AddOrgMembershipOption add user to organization options
type AddOrgMembershipOption struct {
// Role is the role to assign to the organization member
Role string `json:"role" binding:"Required"`
}
+29 -17
View File
@@ -6,49 +6,61 @@ package structs
// Team represents a team in an organization
type Team struct {
ID int64 `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Organization *Organization `json:"organization"`
IncludesAllRepositories bool `json:"includes_all_repositories"`
// The unique identifier of the team
ID int64 `json:"id"`
// The name of the team
Name string `json:"name"`
// The description of the team
Description string `json:"description"`
// The organization that the team belongs to
Organization *Organization `json:"organization"`
// Whether the team has access to all repositories in the organization
IncludesAllRepositories bool `json:"includes_all_repositories"`
// enum: none,read,write,admin,owner
Permission string `json:"permission"`
// example: ["repo.code","repo.issues","repo.ext_issues","repo.wiki","repo.pulls","repo.releases","repo.projects","repo.ext_wiki"]
// Deprecated: This variable should be replaced by UnitsMap and will be dropped in later versions.
Units []string `json:"units"`
// example: {"repo.code":"read","repo.issues":"write","repo.ext_issues":"none","repo.wiki":"admin","repo.pulls":"owner","repo.releases":"none","repo.projects":"none","repo.ext_wiki":"none"}
UnitsMap map[string]string `json:"units_map"`
CanCreateOrgRepo bool `json:"can_create_org_repo"`
UnitsMap map[string]string `json:"units_map"`
// Whether the team can create repositories in the organization
CanCreateOrgRepo bool `json:"can_create_org_repo"`
}
// CreateTeamOption options for creating a team
type CreateTeamOption struct {
// required: true
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(255)"`
Description string `json:"description" binding:"MaxSize(255)"`
IncludesAllRepositories bool `json:"includes_all_repositories"`
Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(255)"`
// The description of the team
Description string `json:"description" binding:"MaxSize(255)"`
// Whether the team has access to all repositories in the organization
IncludesAllRepositories bool `json:"includes_all_repositories"`
// enum: read,write,admin
Permission string `json:"permission"`
// example: ["repo.actions","repo.code","repo.issues","repo.ext_issues","repo.wiki","repo.ext_wiki","repo.pulls","repo.releases","repo.projects","repo.ext_wiki"]
// Deprecated: This variable should be replaced by UnitsMap and will be dropped in later versions.
Units []string `json:"units"`
// example: {"repo.actions","repo.packages","repo.code":"read","repo.issues":"write","repo.ext_issues":"none","repo.wiki":"admin","repo.pulls":"owner","repo.releases":"none","repo.projects":"none","repo.ext_wiki":"none"}
UnitsMap map[string]string `json:"units_map"`
CanCreateOrgRepo bool `json:"can_create_org_repo"`
UnitsMap map[string]string `json:"units_map"`
// Whether the team can create repositories in the organization
CanCreateOrgRepo bool `json:"can_create_org_repo"`
}
// EditTeamOption options for editing a team
type EditTeamOption struct {
// required: true
Name string `json:"name" binding:"AlphaDashDot;MaxSize(255)"`
Description *string `json:"description" binding:"MaxSize(255)"`
IncludesAllRepositories *bool `json:"includes_all_repositories"`
Name string `json:"name" binding:"AlphaDashDot;MaxSize(255)"`
// The description of the team
Description *string `json:"description" binding:"MaxSize(255)"`
// Whether the team has access to all repositories in the organization
IncludesAllRepositories *bool `json:"includes_all_repositories"`
// enum: read,write,admin
Permission string `json:"permission"`
// example: ["repo.code","repo.issues","repo.ext_issues","repo.wiki","repo.pulls","repo.releases","repo.projects","repo.ext_wiki"]
// Deprecated: This variable should be replaced by UnitsMap and will be dropped in later versions.
Units []string `json:"units"`
// example: {"repo.code":"read","repo.issues":"write","repo.ext_issues":"none","repo.wiki":"admin","repo.pulls":"owner","repo.releases":"none","repo.projects":"none","repo.ext_wiki":"none"}
UnitsMap map[string]string `json:"units_map"`
CanCreateOrgRepo *bool `json:"can_create_org_repo"`
UnitsMap map[string]string `json:"units_map"`
// Whether the team can create repositories in the organization
CanCreateOrgRepo *bool `json:"can_create_org_repo"`
}
+28 -12
View File
@@ -9,25 +9,41 @@ import (
// Package represents a package
type Package struct {
ID int64 `json:"id"`
Owner *User `json:"owner"`
// The unique identifier of the package
ID int64 `json:"id"`
// The owner of the package
Owner *User `json:"owner"`
// The repository that contains this package
Repository *Repository `json:"repository"`
Creator *User `json:"creator"`
Type string `json:"type"`
Name string `json:"name"`
Version string `json:"version"`
HTMLURL string `json:"html_url"`
// The user who created this package
Creator *User `json:"creator"`
// The type of the package (e.g., npm, maven, docker)
Type string `json:"type"`
// The name of the package
Name string `json:"name"`
// The version of the package
Version string `json:"version"`
// The HTML URL to view the package
HTMLURL string `json:"html_url"`
// swagger:strfmt date-time
// The date and time when the package was created
CreatedAt time.Time `json:"created_at"`
}
// PackageFile represents a package file
type PackageFile struct {
ID int64 `json:"id"`
Size int64 `json:"size"`
Name string `json:"name"`
HashMD5 string `json:"md5"`
HashSHA1 string `json:"sha1"`
// The unique identifier of the package file
ID int64 `json:"id"`
// The size of the package file in bytes
Size int64 `json:"size"`
// The name of the package file
Name string `json:"name"`
// The MD5 hash of the package file
HashMD5 string `json:"md5"`
// The SHA1 hash of the package file
HashSHA1 string `json:"sha1"`
// The SHA256 hash of the package file
HashSHA256 string `json:"sha256"`
// The SHA512 hash of the package file
HashSHA512 string `json:"sha512"`
}
+128 -60
View File
@@ -9,45 +9,75 @@ import (
// PullRequest represents a pull request
type PullRequest struct {
ID int64 `json:"id"`
URL string `json:"url"`
Index int64 `json:"number"`
Poster *User `json:"user"`
Title string `json:"title"`
Body string `json:"body"`
Labels []*Label `json:"labels"`
Milestone *Milestone `json:"milestone"`
Assignee *User `json:"assignee"`
Assignees []*User `json:"assignees"`
RequestedReviewers []*User `json:"requested_reviewers"`
RequestedReviewersTeams []*Team `json:"requested_reviewers_teams"`
State StateType `json:"state"`
Draft bool `json:"draft"`
IsLocked bool `json:"is_locked"`
Comments int `json:"comments"`
// The unique identifier of the pull request
ID int64 `json:"id"`
// The API URL of the pull request
URL string `json:"url"`
// The pull request number
Index int64 `json:"number"`
// The user who created the pull request
Poster *User `json:"user"`
// The title of the pull request
Title string `json:"title"`
// The description body of the pull request
Body string `json:"body"`
// The labels attached to the pull request
Labels []*Label `json:"labels"`
// The milestone associated with the pull request
Milestone *Milestone `json:"milestone"`
// The primary assignee of the pull request
Assignee *User `json:"assignee"`
// The list of users assigned to the pull request
Assignees []*User `json:"assignees"`
// The users requested to review the pull request
RequestedReviewers []*User `json:"requested_reviewers"`
// The teams requested to review the pull request
RequestedReviewersTeams []*Team `json:"requested_reviewers_teams"`
// The current state of the pull request
State StateType `json:"state"`
// Whether the pull request is a draft
Draft bool `json:"draft"`
// Whether the pull request conversation is locked
IsLocked bool `json:"is_locked"`
// The number of comments on the pull request
Comments int `json:"comments"`
// number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)
ReviewComments int `json:"review_comments,omitempty"`
Additions *int `json:"additions,omitempty"`
Deletions *int `json:"deletions,omitempty"`
// The number of lines added in the pull request
Additions *int `json:"additions,omitempty"`
// The number of lines deleted in the pull request
Deletions *int `json:"deletions,omitempty"`
// The number of files changed in the pull request
ChangedFiles *int `json:"changed_files,omitempty"`
HTMLURL string `json:"html_url"`
DiffURL string `json:"diff_url"`
// The HTML URL to view the pull request
HTMLURL string `json:"html_url"`
// The URL to download the diff patch
DiffURL string `json:"diff_url"`
// The URL to download the patch file
PatchURL string `json:"patch_url"`
// Whether the pull request can be merged
Mergeable bool `json:"mergeable"`
// Whether the pull request has been merged
HasMerged bool `json:"merged"`
// swagger:strfmt date-time
Merged *time.Time `json:"merged_at"`
MergedCommitID *string `json:"merge_commit_sha"`
MergedBy *User `json:"merged_by"`
AllowMaintainerEdit bool `json:"allow_maintainer_edit"`
Merged *time.Time `json:"merged_at"`
// The SHA of the merge commit
MergedCommitID *string `json:"merge_commit_sha"`
// The user who merged the pull request
MergedBy *User `json:"merged_by"`
// Whether maintainers can edit the pull request
AllowMaintainerEdit bool `json:"allow_maintainer_edit"`
Base *PRBranchInfo `json:"base"`
Head *PRBranchInfo `json:"head"`
MergeBase string `json:"merge_base"`
// Information about the base branch
Base *PRBranchInfo `json:"base"`
// Information about the head branch
Head *PRBranchInfo `json:"head"`
// The merge base commit SHA
MergeBase string `json:"merge_base"`
// swagger:strfmt date-time
Deadline *time.Time `json:"due_date"`
@@ -59,65 +89,103 @@ type PullRequest struct {
// swagger:strfmt date-time
Closed *time.Time `json:"closed_at"`
// The pin order for the pull request
PinOrder int `json:"pin_order"`
}
// PRBranchInfo information about a branch
type PRBranchInfo struct {
Name string `json:"label"`
Ref string `json:"ref"`
Sha string `json:"sha"`
RepoID int64 `json:"repo_id"`
// The display name of the branch
Name string `json:"label"`
// The git reference of the branch
Ref string `json:"ref"`
// The commit SHA of the branch head
Sha string `json:"sha"`
// The unique identifier of the repository
RepoID int64 `json:"repo_id"`
// The repository information
Repository *Repository `json:"repo"`
}
// ListPullRequestsOptions options for listing pull requests
type ListPullRequestsOptions struct {
Page int `json:"page"`
// The page number for pagination
Page int `json:"page"`
// The state filter for pull requests
State string `json:"state"`
}
// CreatePullRequestOption options when creating a pull request
type CreatePullRequestOption struct {
Head string `json:"head" binding:"Required"`
Base string `json:"base" binding:"Required"`
Title string `json:"title" binding:"Required"`
Body string `json:"body"`
Assignee string `json:"assignee"`
// The head branch for the pull request, it could be a branch name on the base repository or
// a form like `<username>:<branch>` which refers to the user's fork repository's branch.
Head string `json:"head" binding:"Required"`
// The base branch for the pull request
Base string `json:"base" binding:"Required"`
// The title of the pull request
Title string `json:"title" binding:"Required"`
// The description body of the pull request
Body string `json:"body"`
// The primary assignee username
Assignee string `json:"assignee"`
// The list of assignee usernames
Assignees []string `json:"assignees"`
Milestone int64 `json:"milestone"`
Labels []int64 `json:"labels"`
// The milestone ID to assign to the pull request
Milestone int64 `json:"milestone"`
// The list of label IDs to assign to the pull request
Labels []int64 `json:"labels"`
// swagger:strfmt date-time
Deadline *time.Time `json:"due_date"`
Reviewers []string `json:"reviewers"`
TeamReviewers []string `json:"team_reviewers"`
Deadline *time.Time `json:"due_date"`
// The list of reviewer usernames
Reviewers []string `json:"reviewers"`
// The list of team reviewer names
TeamReviewers []string `json:"team_reviewers"`
}
// EditPullRequestOption options when modify pull request
type EditPullRequestOption struct {
Title string `json:"title"`
Body *string `json:"body"`
Base string `json:"base"`
Assignee string `json:"assignee"`
// The new title for the pull request
Title string `json:"title"`
// The new description body for the pull request
Body *string `json:"body"`
// The new base branch for the pull request
Base string `json:"base"`
// The new primary assignee username
Assignee string `json:"assignee"`
// The new list of assignee usernames
Assignees []string `json:"assignees"`
Milestone int64 `json:"milestone"`
Labels []int64 `json:"labels"`
State *string `json:"state"`
// The new milestone ID for the pull request
Milestone int64 `json:"milestone"`
// The new list of label IDs for the pull request
Labels []int64 `json:"labels"`
// The new state for the pull request
State *string `json:"state"`
// swagger:strfmt date-time
Deadline *time.Time `json:"due_date"`
RemoveDeadline *bool `json:"unset_due_date"`
AllowMaintainerEdit *bool `json:"allow_maintainer_edit"`
Deadline *time.Time `json:"due_date"`
// Whether to remove the current deadline
RemoveDeadline *bool `json:"unset_due_date"`
// Whether to allow maintainer edits
AllowMaintainerEdit *bool `json:"allow_maintainer_edit"`
}
// ChangedFile store information about files affected by the pull request
type ChangedFile struct {
Filename string `json:"filename"`
// The name of the changed file
Filename string `json:"filename"`
// The previous filename if the file was renamed
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"`
// The status of the file change (added, modified, deleted, etc.)
Status string `json:"status"`
// The number of lines added to the file
Additions int `json:"additions"`
// The number of lines deleted from the file
Deletions int `json:"deletions"`
// The total number of changes to the file
Changes int `json:"changes"`
// The HTML URL to view the file changes
HTMLURL string `json:"html_url,omitempty"`
// The API URL to get the file contents
ContentsURL string `json:"contents_url,omitempty"`
// The raw URL to download the file
RawURL string `json:"raw_url,omitempty"`
}
+3 -1
View File
@@ -42,7 +42,9 @@ type PullReview struct {
// swagger:strfmt date-time
Updated time.Time `json:"updated_at"`
HTMLURL string `json:"html_url"`
// HTMLURL is the web URL for viewing the review
HTMLURL string `json:"html_url"`
// HTMLPullURL is the web URL for the pull request
HTMLPullURL string `json:"pull_request_url"`
}
+53 -27
View File
@@ -9,44 +9,70 @@ import (
// Release represents a repository release
type Release struct {
ID int64 `json:"id"`
TagName string `json:"tag_name"`
Target string `json:"target_commitish"`
Title string `json:"name"`
Note string `json:"body"`
URL string `json:"url"`
HTMLURL string `json:"html_url"`
TarURL string `json:"tarball_url"`
ZipURL string `json:"zipball_url"`
UploadURL string `json:"upload_url"`
IsDraft bool `json:"draft"`
IsPrerelease bool `json:"prerelease"`
// The unique identifier of the release
ID int64 `json:"id"`
// The name of the git tag associated with the release
TagName string `json:"tag_name"`
// The target commitish for the release
Target string `json:"target_commitish"`
// The display title of the release
Title string `json:"name"`
// The release notes or description
Note string `json:"body"`
// The API URL of the release
URL string `json:"url"`
// The HTML URL to view the release
HTMLURL string `json:"html_url"`
// The URL to download the tarball archive
TarURL string `json:"tarball_url"`
// The URL to download the zip archive
ZipURL string `json:"zipball_url"`
// The URL template for uploading release assets
UploadURL string `json:"upload_url"`
// Whether the release is a draft
IsDraft bool `json:"draft"`
// Whether the release is a prerelease
IsPrerelease bool `json:"prerelease"`
// swagger:strfmt date-time
CreatedAt time.Time `json:"created_at"`
// swagger:strfmt date-time
PublishedAt time.Time `json:"published_at"`
Publisher *User `json:"author"`
PublishedAt time.Time `json:"published_at"`
// The user who published the release
Publisher *User `json:"author"`
// The files attached to the release
Attachments []*Attachment `json:"assets"`
}
// CreateReleaseOption options when creating a release
type CreateReleaseOption struct {
// required: true
TagName string `json:"tag_name" binding:"Required"`
TagMessage string `json:"tag_message"`
Target string `json:"target_commitish"`
Title string `json:"name"`
Note string `json:"body"`
IsDraft bool `json:"draft"`
IsPrerelease bool `json:"prerelease"`
TagName string `json:"tag_name" binding:"Required"`
// The message for the git tag
TagMessage string `json:"tag_message"`
// The target commitish for the release
Target string `json:"target_commitish"`
// The display title of the release
Title string `json:"name"`
// The release notes or description
Note string `json:"body"`
// Whether to create the release as a draft
IsDraft bool `json:"draft"`
// Whether to mark the release as a prerelease
IsPrerelease bool `json:"prerelease"`
}
// EditReleaseOption options when editing a release
type EditReleaseOption struct {
TagName string `json:"tag_name"`
Target string `json:"target_commitish"`
Title string `json:"name"`
Note string `json:"body"`
IsDraft *bool `json:"draft"`
IsPrerelease *bool `json:"prerelease"`
// The new name of the git tag
TagName string `json:"tag_name"`
// The new target commitish for the release
Target string `json:"target_commitish"`
// The new display title of the release
Title string `json:"name"`
// The new release notes or description
Note string `json:"body"`
// Whether to change the draft status
IsDraft *bool `json:"draft"`
// Whether to change the prerelease status
IsPrerelease *bool `json:"prerelease"`
}
+36 -17
View File
@@ -9,16 +9,26 @@ import (
// ActionTask represents a ActionTask
type ActionTask struct {
ID int64 `json:"id"`
Name string `json:"name"`
HeadBranch string `json:"head_branch"`
HeadSHA string `json:"head_sha"`
RunNumber int64 `json:"run_number"`
Event string `json:"event"`
// ID is the unique identifier for the action task
ID int64 `json:"id"`
// Name is the name of the workflow
Name string `json:"name"`
// HeadBranch is the branch that triggered the workflow
HeadBranch string `json:"head_branch"`
// HeadSHA is the commit SHA that triggered the workflow
HeadSHA string `json:"head_sha"`
// RunNumber is the sequential number of the workflow run
RunNumber int64 `json:"run_number"`
// Event is the type of event that triggered the workflow
Event string `json:"event"`
// DisplayTitle is the display title for the workflow run
DisplayTitle string `json:"display_title"`
Status string `json:"status"`
WorkflowID string `json:"workflow_id"`
URL string `json:"url"`
// Status indicates the current status of the workflow run
Status string `json:"status"`
// WorkflowID is the identifier of the workflow
WorkflowID string `json:"workflow_id"`
// URL is the API URL for this workflow run
URL string `json:"url"`
// swagger:strfmt date-time
CreatedAt time.Time `json:"created_at"`
// swagger:strfmt date-time
@@ -29,8 +39,10 @@ type ActionTask struct {
// ActionTaskResponse returns a ActionTask
type ActionTaskResponse struct {
Entries []*ActionTask `json:"workflow_runs"`
TotalCount int64 `json:"total_count"`
// Entries contains the list of workflow runs
Entries []*ActionTask `json:"workflow_runs"`
// TotalCount is the total number of workflow runs
TotalCount int64 `json:"total_count"`
}
// CreateActionWorkflowDispatch represents the payload for triggering a workflow dispatch event
@@ -45,17 +57,24 @@ type CreateActionWorkflowDispatch struct {
// ActionWorkflow represents a ActionWorkflow
type ActionWorkflow struct {
ID string `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
// ID is the unique identifier for the workflow
ID string `json:"id"`
// Name is the name of the workflow
Name string `json:"name"`
// Path is the file path of the workflow
Path string `json:"path"`
// State indicates if the workflow is active or disabled
State string `json:"state"`
// swagger:strfmt date-time
CreatedAt time.Time `json:"created_at"`
// swagger:strfmt date-time
UpdatedAt time.Time `json:"updated_at"`
URL string `json:"url"`
HTMLURL string `json:"html_url"`
BadgeURL string `json:"badge_url"`
// URL is the API URL for this workflow
URL string `json:"url"`
// HTMLURL is the web URL for viewing the workflow
HTMLURL string `json:"html_url"`
// BadgeURL is the URL for the workflow badge
BadgeURL string `json:"badge_url"`
// swagger:strfmt date-time
DeletedAt time.Time `json:"deleted_at"`
}
+22 -11
View File
@@ -9,22 +9,33 @@ import (
// Branch represents a repository branch
type Branch struct {
Name string `json:"name"`
Commit *PayloadCommit `json:"commit"`
Protected bool `json:"protected"`
RequiredApprovals int64 `json:"required_approvals"`
EnableStatusCheck bool `json:"enable_status_check"`
StatusCheckContexts []string `json:"status_check_contexts"`
UserCanPush bool `json:"user_can_push"`
UserCanMerge bool `json:"user_can_merge"`
EffectiveBranchProtectionName string `json:"effective_branch_protection_name"`
// Name is the branch name
Name string `json:"name"`
// Commit contains the latest commit information for this branch
Commit *PayloadCommit `json:"commit"`
// Protected indicates if the branch is protected
Protected bool `json:"protected"`
// RequiredApprovals is the number of required approvals for pull requests
RequiredApprovals int64 `json:"required_approvals"`
// EnableStatusCheck indicates if status checks are enabled
EnableStatusCheck bool `json:"enable_status_check"`
// StatusCheckContexts contains the list of required status check contexts
StatusCheckContexts []string `json:"status_check_contexts"`
// UserCanPush indicates if the current user can push to this branch
UserCanPush bool `json:"user_can_push"`
// UserCanMerge indicates if the current user can merge to this branch
UserCanMerge bool `json:"user_can_merge"`
// EffectiveBranchProtectionName is the name of the effective branch protection rule
EffectiveBranchProtectionName string `json:"effective_branch_protection_name"`
}
// BranchProtection represents a branch protection for a repository
type BranchProtection struct {
// Deprecated: true
BranchName string `json:"branch_name"`
RuleName string `json:"rule_name"`
BranchName string `json:"branch_name"`
// RuleName is the name of the branch protection rule
RuleName string `json:"rule_name"`
// Priority is the priority of this branch protection rule
Priority int64 `json:"priority"`
EnablePush bool `json:"enable_push"`
EnablePushWhitelist bool `json:"enable_push_whitelist"`
+6 -2
View File
@@ -6,12 +6,16 @@ package structs
// AddCollaboratorOption options when adding a user as a collaborator of a repository
type AddCollaboratorOption struct {
// enum: read,write,admin
// Permission level to grant the collaborator
Permission *string `json:"permission"`
}
// RepoCollaboratorPermission to get repository permission for a collaborator
type RepoCollaboratorPermission struct {
// Permission level of the collaborator
Permission string `json:"permission"`
RoleName string `json:"role_name"`
User *User `json:"user"`
// RoleName is the name of the permission role
RoleName string `json:"role_name"`
// User information of the collaborator
User *User `json:"user"`
}
+40 -14
View File
@@ -10,64 +10,90 @@ import (
// Identity for a person's identity like an author or committer
type Identity struct {
// Name is the person's name
Name string `json:"name" binding:"MaxSize(100)"`
// swagger:strfmt email
// Email is the person's email address
Email string `json:"email" binding:"MaxSize(254)"`
}
// CommitMeta contains meta information of a commit in terms of API.
type CommitMeta struct {
// URL is the API URL for the commit
URL string `json:"url"`
// SHA is the commit SHA hash
SHA string `json:"sha"`
// swagger:strfmt date-time
// Created is the time when the commit was created
Created time.Time `json:"created"`
}
// CommitUser contains information of a user in the context of a commit.
type CommitUser struct {
Identity
// Date is the commit date in string format
Date string `json:"date"`
}
// RepoCommit contains information of a commit in the context of a repository.
type RepoCommit struct {
URL string `json:"url"`
Author *CommitUser `json:"author"`
Committer *CommitUser `json:"committer"`
Message string `json:"message"`
Tree *CommitMeta `json:"tree"`
// URL is the API URL for the commit
URL string `json:"url"`
// Author contains the commit author information
Author *CommitUser `json:"author"`
// Committer contains the commit committer information
Committer *CommitUser `json:"committer"`
// Message is the commit message
Message string `json:"message"`
// Tree contains the tree information for the commit
Tree *CommitMeta `json:"tree"`
// Verification contains commit signature verification information
Verification *PayloadCommitVerification `json:"verification"`
}
// CommitStats is statistics for a RepoCommit
type CommitStats struct {
Total int `json:"total"`
// Total is the total number of lines changed
Total int `json:"total"`
// Additions is the number of lines added
Additions int `json:"additions"`
// Deletions is the number of lines deleted
Deletions int `json:"deletions"`
}
// Commit contains information generated from a Git commit.
type Commit struct {
*CommitMeta
HTMLURL string `json:"html_url"`
RepoCommit *RepoCommit `json:"commit"`
Author *User `json:"author"`
Committer *User `json:"committer"`
Parents []*CommitMeta `json:"parents"`
Files []*CommitAffectedFiles `json:"files"`
Stats *CommitStats `json:"stats"`
// HTMLURL is the web URL for viewing the commit
HTMLURL string `json:"html_url"`
// RepoCommit contains the commit information
RepoCommit *RepoCommit `json:"commit"`
// Author is the GitHub/Gitea user who authored the commit
Author *User `json:"author"`
// Committer is the GitHub/Gitea user who committed the commit
Committer *User `json:"committer"`
// Parents contains the parent commit information
Parents []*CommitMeta `json:"parents"`
// Files contains information about files affected by the commit
Files []*CommitAffectedFiles `json:"files"`
// Stats contains statistics about the commit changes
Stats *CommitStats `json:"stats"`
}
// CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE
type CommitDateOptions struct {
// swagger:strfmt date-time
// Author is the author date for the commit
Author time.Time `json:"author"`
// swagger:strfmt date-time
// Committer is the committer date for the commit
Committer time.Time `json:"committer"`
}
// CommitAffectedFiles store information about files affected by the commit
type CommitAffectedFiles struct {
// Filename is the path of the affected file
Filename string `json:"filename"`
Status string `json:"status"`
// Status indicates how the file was affected (added, modified, deleted)
Status string `json:"status"`
}
+62 -28
View File
@@ -104,83 +104,117 @@ type ApplyDiffPatchFileOptions struct {
// FileLinksResponse contains the links for a repo's file
type FileLinksResponse struct {
Self *string `json:"self"`
GitURL *string `json:"git"`
// Self is the API URL for this file
Self *string `json:"self"`
// GitURL is the Git API URL for this file
GitURL *string `json:"git"`
// HTMLURL is the web URL for this file
HTMLURL *string `json:"html"`
}
type ContentsExtResponse struct {
FileContents *ContentsResponse `json:"file_contents,omitempty"`
DirContents []*ContentsResponse `json:"dir_contents,omitempty"`
// FileContents contains file information when the path represents a file
FileContents *ContentsResponse `json:"file_contents,omitempty"`
// DirContents contains directory listing when the path represents a directory
DirContents []*ContentsResponse `json:"dir_contents,omitempty"`
}
// ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content
type ContentsResponse struct {
// Name is the file or directory name
Name string `json:"name"`
// Path is the full path to the file or directory
Path string `json:"path"`
SHA string `json:"sha"`
// SHA is the Git blob or tree SHA
SHA string `json:"sha"`
// LastCommitSHA is the SHA of the last commit that affected this file
LastCommitSHA *string `json:"last_commit_sha,omitempty"`
// swagger:strfmt date-time
LastCommitterDate *time.Time `json:"last_committer_date,omitempty"`
// swagger:strfmt date-time
LastAuthorDate *time.Time `json:"last_author_date,omitempty"`
LastCommitMessage *string `json:"last_commit_message,omitempty"`
LastAuthorDate *time.Time `json:"last_author_date,omitempty"`
// LastCommitMessage is the message of the last commit that affected this file
LastCommitMessage *string `json:"last_commit_message,omitempty"`
// `type` will be `file`, `dir`, `symlink`, or `submodule`
Type string `json:"type"`
Size int64 `json:"size"`
// Size is the file size in bytes
Size int64 `json:"size"`
// `encoding` is populated when `type` is `file`, otherwise null
Encoding *string `json:"encoding"`
// `content` is populated when `type` is `file`, otherwise null
Content *string `json:"content"`
// `target` is populated when `type` is `symlink`, otherwise null
Target *string `json:"target"`
URL *string `json:"url"`
HTMLURL *string `json:"html_url"`
GitURL *string `json:"git_url"`
Target *string `json:"target"`
// URL is the API URL for this file or directory
URL *string `json:"url"`
// HTMLURL is the web URL for this file or directory
HTMLURL *string `json:"html_url"`
// GitURL is the Git API URL for this blob or tree
GitURL *string `json:"git_url"`
// DownloadURL is the direct download URL for this file
DownloadURL *string `json:"download_url"`
// `submodule_git_url` is populated when `type` is `submodule`, otherwise null
SubmoduleGitURL *string `json:"submodule_git_url"`
Links *FileLinksResponse `json:"_links"`
SubmoduleGitURL *string `json:"submodule_git_url"`
// Links contains related URLs for this file or directory
Links *FileLinksResponse `json:"_links"`
LfsOid *string `json:"lfs_oid,omitempty"`
LfsSize *int64 `json:"lfs_size,omitempty"`
// LfsOid is the Git LFS object ID if this file is stored in LFS
LfsOid *string `json:"lfs_oid,omitempty"`
// LfsSize is the file size if this file is stored in LFS
LfsSize *int64 `json:"lfs_size,omitempty"`
}
// FileCommitResponse contains information generated from a Git commit for a repo's file.
type FileCommitResponse struct {
CommitMeta
HTMLURL string `json:"html_url"`
Author *CommitUser `json:"author"`
Committer *CommitUser `json:"committer"`
Parents []*CommitMeta `json:"parents"`
Message string `json:"message"`
Tree *CommitMeta `json:"tree"`
// HTMLURL is the web URL for viewing this commit
HTMLURL string `json:"html_url"`
// Author is the commit author information
Author *CommitUser `json:"author"`
// Committer is the commit committer information
Committer *CommitUser `json:"committer"`
// Parents contains parent commit metadata
Parents []*CommitMeta `json:"parents"`
// Message is the commit message
Message string `json:"message"`
// Tree contains the tree metadata for this commit
Tree *CommitMeta `json:"tree"`
}
// FileResponse contains information about a repo's file
type FileResponse struct {
Content *ContentsResponse `json:"content"`
Commit *FileCommitResponse `json:"commit"`
// Content contains the file content and metadata
Content *ContentsResponse `json:"content"`
// Commit contains the commit information for this file operation
Commit *FileCommitResponse `json:"commit"`
// Verification contains the commit signature verification information
Verification *PayloadCommitVerification `json:"verification"`
}
// FilesResponse contains information about multiple files from a repo
type FilesResponse struct {
Files []*ContentsResponse `json:"files"`
Commit *FileCommitResponse `json:"commit"`
// Files contains the list of file contents and metadata
Files []*ContentsResponse `json:"files"`
// Commit contains the commit information for this file operation
Commit *FileCommitResponse `json:"commit"`
// Verification contains the commit signature verification information
Verification *PayloadCommitVerification `json:"verification"`
}
// FileDeleteResponse contains information about a repo's file that was deleted
type FileDeleteResponse struct {
Content any `json:"content"` // to be set to nil
Commit *FileCommitResponse `json:"commit"`
// Content is always null for delete operations
Content any `json:"content"` // to be set to nil
// Commit contains the commit information for this delete operation
Commit *FileCommitResponse `json:"commit"`
// Verification contains the commit signature verification information
Verification *PayloadCommitVerification `json:"verification"`
}
// GetFilesOptions options for retrieving metadate and content of multiple files
type GetFilesOptions struct {
// Files is the list of file paths to retrieve
Files []string `json:"files" binding:"Required"`
}
+16 -7
View File
@@ -9,15 +9,24 @@ import (
// DeployKey a deploy key
type DeployKey struct {
ID int64 `json:"id"`
KeyID int64 `json:"key_id"`
Key string `json:"key"`
URL string `json:"url"`
Title string `json:"title"`
// ID is the unique identifier for the deploy key
ID int64 `json:"id"`
// KeyID is the associated public key ID
KeyID int64 `json:"key_id"`
// Key contains the actual SSH key content
Key string `json:"key"`
// URL is the API URL for this deploy key
URL string `json:"url"`
// Title is the human-readable name for the key
Title string `json:"title"`
// Fingerprint is the key's fingerprint
Fingerprint string `json:"fingerprint"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
ReadOnly bool `json:"read_only"`
// Created is the time when the deploy key was added
Created time.Time `json:"created_at"`
// ReadOnly indicates if the key has read-only access
ReadOnly bool `json:"read_only"`
// Repository is the repository this deploy key belongs to
Repository *Repository `json:"repository,omitempty"`
}
+4 -2
View File
@@ -5,6 +5,8 @@ package structs
// Note contains information related to a git note
type Note struct {
Message string `json:"message"`
Commit *Commit `json:"commit"`
// The content message of the git note
Message string `json:"message"`
// The commit that this note is attached to
Commit *Commit `json:"commit"`
}
+10 -4
View File
@@ -5,14 +5,20 @@ package structs
// Reference represents a Git reference.
type Reference struct {
Ref string `json:"ref"`
URL string `json:"url"`
// The name of the Git reference (e.g., refs/heads/main)
Ref string `json:"ref"`
// The URL to access this Git reference
URL string `json:"url"`
// The Git object that this reference points to
Object *GitObject `json:"object"`
}
// GitObject represents a Git object.
type GitObject struct {
// The type of the Git object (e.g., commit, tag, tree, blob)
Type string `json:"type"`
SHA string `json:"sha"`
URL string `json:"url"`
// The SHA hash of the Git object
SHA string `json:"sha"`
// The URL to access this Git object
URL string `json:"url"`
}
+53 -22
View File
@@ -7,62 +7,93 @@ import "time"
// Tag represents a repository tag
type Tag struct {
Name string `json:"name"`
Message string `json:"message"`
ID string `json:"id"`
Commit *CommitMeta `json:"commit"`
ZipballURL string `json:"zipball_url,omitempty"`
TarballURL string `json:"tarball_url,omitempty"`
// The name of the tag
Name string `json:"name"`
// The message associated with the tag
Message string `json:"message"`
// The ID (SHA) of the tag
ID string `json:"id"`
// The commit information associated with this tag
Commit *CommitMeta `json:"commit"`
// The URL to download the zipball archive
ZipballURL string `json:"zipball_url,omitempty"`
// The URL to download the tarball archive
TarballURL string `json:"tarball_url,omitempty"`
}
// AnnotatedTag represents an annotated tag
type AnnotatedTag struct {
Tag string `json:"tag"`
SHA string `json:"sha"`
URL string `json:"url"`
Message string `json:"message"`
Tagger *CommitUser `json:"tagger"`
Object *AnnotatedTagObject `json:"object"`
// The name of the annotated tag
Tag string `json:"tag"`
// The SHA hash of the annotated tag
SHA string `json:"sha"`
// The URL to access the annotated tag
URL string `json:"url"`
// The message associated with the annotated tag
Message string `json:"message"`
// The user who created the annotated tag
Tagger *CommitUser `json:"tagger"`
// The object that the annotated tag points to
Object *AnnotatedTagObject `json:"object"`
// The verification information for the annotated tag
Verification *PayloadCommitVerification `json:"verification"`
}
// AnnotatedTagObject contains meta information of the tag object
type AnnotatedTagObject struct {
// The type of the tagged object (e.g., commit, tree)
Type string `json:"type"`
URL string `json:"url"`
SHA string `json:"sha"`
// The URL to access the tagged object
URL string `json:"url"`
// The SHA hash of the tagged object
SHA string `json:"sha"`
}
// CreateTagOption options when creating a tag
type CreateTagOption struct {
// required: true
// The name of the tag to create
TagName string `json:"tag_name" binding:"Required"`
// The message to associate with the tag
Message string `json:"message"`
Target string `json:"target"`
// The target commit SHA or branch name for the tag
Target string `json:"target"`
}
// TagProtection represents a tag protection
type TagProtection struct {
ID int64 `json:"id"`
NamePattern string `json:"name_pattern"`
// The unique identifier of the tag protection
ID int64 `json:"id"`
// The pattern to match tag names for protection
NamePattern string `json:"name_pattern"`
// List of usernames allowed to create/delete protected tags
WhitelistUsernames []string `json:"whitelist_usernames"`
WhitelistTeams []string `json:"whitelist_teams"`
// List of team names allowed to create/delete protected tags
WhitelistTeams []string `json:"whitelist_teams"`
// swagger:strfmt date-time
// The date and time when the tag protection was created
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
// The date and time when the tag protection was last updated
Updated time.Time `json:"updated_at"`
}
// CreateTagProtectionOption options for creating a tag protection
type CreateTagProtectionOption struct {
NamePattern string `json:"name_pattern"`
// The pattern to match tag names for protection
NamePattern string `json:"name_pattern"`
// List of usernames allowed to create/delete protected tags
WhitelistUsernames []string `json:"whitelist_usernames"`
WhitelistTeams []string `json:"whitelist_teams"`
// List of team names allowed to create/delete protected tags
WhitelistTeams []string `json:"whitelist_teams"`
}
// EditTagProtectionOption options for editing a tag protection
type EditTagProtectionOption struct {
NamePattern *string `json:"name_pattern"`
// The pattern to match tag names for protection
NamePattern *string `json:"name_pattern"`
// List of usernames allowed to create/delete protected tags
WhitelistUsernames []string `json:"whitelist_usernames"`
WhitelistTeams []string `json:"whitelist_teams"`
// List of team names allowed to create/delete protected tags
WhitelistTeams []string `json:"whitelist_teams"`
}
+11 -5
View File
@@ -9,15 +9,21 @@ import (
// TopicResponse for returning topics
type TopicResponse struct {
ID int64 `json:"id"`
Name string `json:"topic_name"`
RepoCount int `json:"repo_count"`
Created time.Time `json:"created"`
Updated time.Time `json:"updated"`
// The unique identifier of the topic
ID int64 `json:"id"`
// The name of the topic
Name string `json:"topic_name"`
// The number of repositories using this topic
RepoCount int `json:"repo_count"`
// The date and time when the topic was created
Created time.Time `json:"created"`
// The date and time when the topic was last updated
Updated time.Time `json:"updated"`
}
// TopicName a list of repo topic names
type TopicName struct {
// List of topic names
TopicNames []string `json:"topics"`
}
+21 -9
View File
@@ -5,20 +5,32 @@ package structs
// GitEntry represents a git tree
type GitEntry struct {
// Path is the file or directory path
Path string `json:"path"`
// Mode is the file mode (permissions)
Mode string `json:"mode"`
// Type indicates if this is a file, directory, or symlink
Type string `json:"type"`
Size int64 `json:"size"`
SHA string `json:"sha"`
URL string `json:"url"`
// Size is the file size in bytes
Size int64 `json:"size"`
// SHA is the Git object SHA
SHA string `json:"sha"`
// URL is the API URL for this tree entry
URL string `json:"url"`
}
// GitTreeResponse returns a git tree
type GitTreeResponse struct {
SHA string `json:"sha"`
URL string `json:"url"`
Entries []GitEntry `json:"tree"`
Truncated bool `json:"truncated"`
Page int `json:"page"`
TotalCount int `json:"total_count"`
// SHA is the tree object SHA
SHA string `json:"sha"`
// URL is the API URL for this tree
URL string `json:"url"`
// Entries contains the tree entries (files and directories)
Entries []GitEntry `json:"tree"`
// Truncated indicates if the response was truncated due to size
Truncated bool `json:"truncated"`
// Page is the current page number for pagination
Page int `json:"page"`
// TotalCount is the total number of entries in the tree
TotalCount int `json:"total_count"`
}
+12 -6
View File
@@ -9,10 +9,16 @@ import (
// WatchInfo represents an API watch status of one repository
type WatchInfo struct {
Subscribed bool `json:"subscribed"`
Ignored bool `json:"ignored"`
Reason any `json:"reason"`
CreatedAt time.Time `json:"created_at"`
URL string `json:"url"`
RepositoryURL string `json:"repository_url"`
// Whether the repository is being watched for notifications
Subscribed bool `json:"subscribed"`
// Whether notifications for the repository are ignored
Ignored bool `json:"ignored"`
// The reason for the current watch status
Reason any `json:"reason"`
// The timestamp when the watch status was created
CreatedAt time.Time `json:"created_at"`
// The URL for managing the watch status
URL string `json:"url"`
// The URL of the repository being watched
RepositoryURL string `json:"repository_url"`
}
+23 -10
View File
@@ -5,10 +5,14 @@ package structs
// WikiCommit page commit/revision
type WikiCommit struct {
ID string `json:"sha"`
Author *CommitUser `json:"author"`
// The commit SHA hash
ID string `json:"sha"`
// The author of the commit
Author *CommitUser `json:"author"`
// The committer of the commit
Committer *CommitUser `json:"commiter"`
Message string `json:"message"`
// The commit message
Message string `json:"message"`
}
// WikiPage a wiki page
@@ -16,16 +20,23 @@ type WikiPage struct {
*WikiPageMetaData
// Page content, base64 encoded
ContentBase64 string `json:"content_base64"`
CommitCount int64 `json:"commit_count"`
Sidebar string `json:"sidebar"`
Footer string `json:"footer"`
// The number of commits that modified this page
CommitCount int64 `json:"commit_count"`
// The sidebar content for the wiki page
Sidebar string `json:"sidebar"`
// The footer content for the wiki page
Footer string `json:"footer"`
}
// WikiPageMetaData wiki page meta information
type WikiPageMetaData struct {
Title string `json:"title"`
HTMLURL string `json:"html_url"`
SubURL string `json:"sub_url"`
// The title of the wiki page
Title string `json:"title"`
// The HTML URL to view the wiki page
HTMLURL string `json:"html_url"`
// The sub URL path for the wiki page
SubURL string `json:"sub_url"`
// The last commit that modified this wiki page
LastCommit *WikiCommit `json:"last_commit"`
}
@@ -41,6 +52,8 @@ type CreateWikiPageOptions struct {
// WikiCommitList commit/revision list
type WikiCommitList struct {
// The list of wiki commits
WikiCommits []*WikiCommit `json:"commits"`
Count int64 `json:"count"`
// The total count of commits
Count int64 `json:"count"`
}
+32 -14
View File
@@ -5,34 +5,52 @@ package structs
// GeneralRepoSettings contains global repository settings exposed by API
type GeneralRepoSettings struct {
MirrorsDisabled bool `json:"mirrors_disabled"`
HTTPGitDisabled bool `json:"http_git_disabled"`
MigrationsDisabled bool `json:"migrations_disabled"`
StarsDisabled bool `json:"stars_disabled"`
// MirrorsDisabled indicates if repository mirroring is disabled
MirrorsDisabled bool `json:"mirrors_disabled"`
// HTTPGitDisabled indicates if HTTP Git operations are disabled
HTTPGitDisabled bool `json:"http_git_disabled"`
// MigrationsDisabled indicates if repository migrations are disabled
MigrationsDisabled bool `json:"migrations_disabled"`
// StarsDisabled indicates if repository starring is disabled
StarsDisabled bool `json:"stars_disabled"`
// TimeTrackingDisabled indicates if time tracking is disabled
TimeTrackingDisabled bool `json:"time_tracking_disabled"`
LFSDisabled bool `json:"lfs_disabled"`
// LFSDisabled indicates if Git LFS support is disabled
LFSDisabled bool `json:"lfs_disabled"`
}
// GeneralUISettings contains global ui settings exposed by API
type GeneralUISettings struct {
DefaultTheme string `json:"default_theme"`
// DefaultTheme is the default UI theme
DefaultTheme string `json:"default_theme"`
// AllowedReactions contains the list of allowed emoji reactions
AllowedReactions []string `json:"allowed_reactions"`
CustomEmojis []string `json:"custom_emojis"`
// CustomEmojis contains the list of custom emojis
CustomEmojis []string `json:"custom_emojis"`
}
// GeneralAPISettings contains global api settings exposed by it
type GeneralAPISettings struct {
MaxResponseItems int `json:"max_response_items"`
DefaultPagingNum int `json:"default_paging_num"`
DefaultGitTreesPerPage int `json:"default_git_trees_per_page"`
DefaultMaxBlobSize int64 `json:"default_max_blob_size"`
// MaxResponseItems is the maximum number of items returned in API responses
MaxResponseItems int `json:"max_response_items"`
// DefaultPagingNum is the default number of items per page
DefaultPagingNum int `json:"default_paging_num"`
// DefaultGitTreesPerPage is the default number of Git tree items per page
DefaultGitTreesPerPage int `json:"default_git_trees_per_page"`
// DefaultMaxBlobSize is the default maximum blob size for API responses
DefaultMaxBlobSize int64 `json:"default_max_blob_size"`
// DefaultMaxResponseSize is the default maximum response size
DefaultMaxResponseSize int64 `json:"default_max_response_size"`
}
// GeneralAttachmentSettings contains global Attachment settings exposed by API
type GeneralAttachmentSettings struct {
Enabled bool `json:"enabled"`
// Enabled indicates if file attachments are enabled
Enabled bool `json:"enabled"`
// AllowedTypes contains the allowed file types for attachments
AllowedTypes string `json:"allowed_types"`
MaxSize int64 `json:"max_size"`
MaxFiles int `json:"max_files"`
// MaxSize is the maximum size for individual attachments
MaxSize int64 `json:"max_size"`
// MaxFiles is the maximum number of files per attachment
MaxFiles int `json:"max_files"`
}
+36 -18
View File
@@ -11,13 +11,20 @@ import (
// CommitStatus holds a single status of a single Commit
type CommitStatus struct {
ID int64 `json:"id"`
State commitstatus.CommitStatusState `json:"status"`
TargetURL string `json:"target_url"`
Description string `json:"description"`
URL string `json:"url"`
Context string `json:"context"`
Creator *User `json:"creator"`
// ID is the unique identifier for the commit status
ID int64 `json:"id"`
// State represents the status state (pending, success, error, failure)
State commitstatus.CommitStatusState `json:"status"`
// TargetURL is the URL to link to for more details
TargetURL string `json:"target_url"`
// Description provides a brief description of the status
Description string `json:"description"`
// URL is the API URL for this status
URL string `json:"url"`
// Context is the unique context identifier for the status
Context string `json:"context"`
// Creator is the user who created the status
Creator *User `json:"creator"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
@@ -26,19 +33,30 @@ type CommitStatus struct {
// CombinedStatus holds the combined state of several statuses for a single commit
type CombinedStatus struct {
State commitstatus.CommitStatusState `json:"state"`
SHA string `json:"sha"`
TotalCount int `json:"total_count"`
Statuses []*CommitStatus `json:"statuses"`
Repository *Repository `json:"repository"`
CommitURL string `json:"commit_url"`
URL string `json:"url"`
// State is the overall combined status state
State commitstatus.CommitStatusState `json:"state"`
// SHA is the commit SHA this status applies to
SHA string `json:"sha"`
// TotalCount is the total number of statuses
TotalCount int `json:"total_count"`
// Statuses contains all individual commit statuses
Statuses []*CommitStatus `json:"statuses"`
// Repository is the repository this status belongs to
Repository *Repository `json:"repository"`
// CommitURL is the API URL for the commit
CommitURL string `json:"commit_url"`
// URL is the API URL for this combined status
URL string `json:"url"`
}
// CreateStatusOption holds the information needed to create a new CommitStatus for a Commit
type CreateStatusOption struct {
State commitstatus.CommitStatusState `json:"state"`
TargetURL string `json:"target_url"`
Description string `json:"description"`
Context string `json:"context"`
// State represents the status state to set (pending, success, error, failure)
State commitstatus.CommitStatusState `json:"state"`
// TargetURL is the URL to link to for more details
TargetURL string `json:"target_url"`
// Description provides a brief description of the status
Description string `json:"description"`
// Context is the unique context identifier for the status
Context string `json:"context"`
}
+38 -19
View File
@@ -11,13 +11,20 @@ import (
// AccessToken represents an API access token.
// swagger:response AccessToken
type AccessToken struct {
ID int64 `json:"id"`
Name string `json:"name"`
Token string `json:"sha1"`
TokenLastEight string `json:"token_last_eight"`
Scopes []string `json:"scopes"`
Created time.Time `json:"created_at"`
Updated time.Time `json:"last_used_at"`
// The unique identifier of the access token
ID int64 `json:"id"`
// The name of the access token
Name string `json:"name"`
// The SHA1 hash of the access token
Token string `json:"sha1"`
// The last eight characters of the token
TokenLastEight string `json:"token_last_eight"`
// The scopes granted to this access token
Scopes []string `json:"scopes"`
// The timestamp when the token was created
Created time.Time `json:"created_at"`
// The timestamp when the token was last used
Updated time.Time `json:"last_used_at"`
}
// AccessTokenList represents a list of API access token.
@@ -35,23 +42,35 @@ type CreateAccessTokenOption struct {
// CreateOAuth2ApplicationOptions holds options to create an oauth2 application
type CreateOAuth2ApplicationOptions struct {
Name string `json:"name" binding:"Required"`
ConfidentialClient bool `json:"confidential_client"`
SkipSecondaryAuthorization bool `json:"skip_secondary_authorization"`
RedirectURIs []string `json:"redirect_uris" binding:"Required"`
// The name of the OAuth2 application
Name string `json:"name" binding:"Required"`
// Whether the client is confidential
ConfidentialClient bool `json:"confidential_client"`
// Whether to skip secondary authorization
SkipSecondaryAuthorization bool `json:"skip_secondary_authorization"`
// The list of allowed redirect URIs
RedirectURIs []string `json:"redirect_uris" binding:"Required"`
}
// OAuth2Application represents an OAuth2 application.
// swagger:response OAuth2Application
type OAuth2Application struct {
ID int64 `json:"id"`
Name string `json:"name"`
ClientID string `json:"client_id"`
ClientSecret string `json:"client_secret"`
ConfidentialClient bool `json:"confidential_client"`
SkipSecondaryAuthorization bool `json:"skip_secondary_authorization"`
RedirectURIs []string `json:"redirect_uris"`
Created time.Time `json:"created"`
// The unique identifier of the OAuth2 application
ID int64 `json:"id"`
// The name of the OAuth2 application
Name string `json:"name"`
// The client ID of the OAuth2 application
ClientID string `json:"client_id"`
// The client secret of the OAuth2 application
ClientSecret string `json:"client_secret"`
// Whether the client is confidential
ConfidentialClient bool `json:"confidential_client"`
// Whether to skip secondary authorization
SkipSecondaryAuthorization bool `json:"skip_secondary_authorization"`
// The list of allowed redirect URIs
RedirectURIs []string `json:"redirect_uris"`
// The timestamp when the application was created
Created time.Time `json:"created"`
}
// OAuth2ApplicationList represents a list of OAuth2 applications.
+8 -4
View File
@@ -7,10 +7,14 @@ package structs
// Email an email address belonging to a user
type Email struct {
// swagger:strfmt email
Email string `json:"email"`
Verified bool `json:"verified"`
Primary bool `json:"primary"`
UserID int64 `json:"user_id"`
// The email address
Email string `json:"email"`
// Whether the email address has been verified
Verified bool `json:"verified"`
// Whether this is the primary email address
Primary bool `json:"primary"`
// The unique identifier of the user who owns this email
UserID int64 `json:"user_id"`
// username of the user
UserName string `json:"username"`
}
+33 -15
View File
@@ -9,28 +9,43 @@ import (
// GPGKey a user GPG key to sign commit and tag in repository
type GPGKey struct {
ID int64 `json:"id"`
PrimaryKeyID string `json:"primary_key_id"`
KeyID string `json:"key_id"`
PublicKey string `json:"public_key"`
Emails []*GPGKeyEmail `json:"emails"`
SubsKey []*GPGKey `json:"subkeys"`
CanSign bool `json:"can_sign"`
CanEncryptComms bool `json:"can_encrypt_comms"`
CanEncryptStorage bool `json:"can_encrypt_storage"`
CanCertify bool `json:"can_certify"`
Verified bool `json:"verified"`
// The unique identifier of the GPG key
ID int64 `json:"id"`
// The primary key ID of the GPG key
PrimaryKeyID string `json:"primary_key_id"`
// The key ID of the GPG key
KeyID string `json:"key_id"`
// The public key content in armored format
PublicKey string `json:"public_key"`
// List of email addresses associated with this GPG key
Emails []*GPGKeyEmail `json:"emails"`
// List of subkeys of this GPG key
SubsKey []*GPGKey `json:"subkeys"`
// Whether the key can be used for signing
CanSign bool `json:"can_sign"`
// Whether the key can be used for encrypting communications
CanEncryptComms bool `json:"can_encrypt_comms"`
// Whether the key can be used for encrypting storage
CanEncryptStorage bool `json:"can_encrypt_storage"`
// Whether the key can be used for certification
CanCertify bool `json:"can_certify"`
// Whether the GPG key has been verified
Verified bool `json:"verified"`
// swagger:strfmt date-time
// The date and time when the GPG key was created
Created time.Time `json:"created_at"`
// swagger:strfmt date-time
// The date and time when the GPG key expires
Expires time.Time `json:"expires_at"`
}
// GPGKeyEmail an email attached to a GPGKey
// swagger:model GPGKeyEmail
type GPGKeyEmail struct {
Email string `json:"email"`
Verified bool `json:"verified"`
// The email address associated with the GPG key
Email string `json:"email"`
// Whether the email address has been verified
Verified bool `json:"verified"`
}
// CreateGPGKeyOption options create user GPG key
@@ -40,7 +55,8 @@ type CreateGPGKeyOption struct {
// required: true
// unique: true
ArmoredKey string `json:"armored_public_key" binding:"Required"`
Signature string `json:"armored_signature,omitempty"`
// An optional armored signature for the GPG key
Signature string `json:"armored_signature,omitempty"`
}
// VerifyGPGKeyOption options verifies user GPG key
@@ -48,6 +64,8 @@ type VerifyGPGKeyOption struct {
// An Signature for a GPG key token
//
// required: true
KeyID string `json:"key_id" binding:"Required"`
// The key ID of the GPG key to verify
KeyID string `json:"key_id" binding:"Required"`
// The armored signature to verify the GPG key
Signature string `json:"armored_signature" binding:"Required"`
}
+19 -9
View File
@@ -9,15 +9,25 @@ import (
// PublicKey publickey is a user key to push code to repository
type PublicKey struct {
ID int64 `json:"id"`
Key string `json:"key"`
URL string `json:"url,omitempty"`
Title string `json:"title,omitempty"`
// ID is the unique identifier for the public key
ID int64 `json:"id"`
// Key contains the actual SSH public key content
Key string `json:"key"`
// URL is the API URL for this key
URL string `json:"url,omitempty"`
// Title is the human-readable name for the key
Title string `json:"title,omitempty"`
// Fingerprint is the key's fingerprint
Fingerprint string `json:"fingerprint,omitempty"`
// swagger:strfmt date-time
Created time.Time `json:"created_at"`
Updated time.Time `json:"last_used_at"`
Owner *User `json:"user,omitempty"`
ReadOnly bool `json:"read_only,omitempty"`
KeyType string `json:"key_type,omitempty"`
// Created is the time when the key was added
Created time.Time `json:"created_at"`
// Updated is the time when the key was last used
Updated time.Time `json:"last_used_at"`
// Owner is the user who owns this key
Owner *User `json:"user,omitempty"`
// ReadOnly indicates if the key has read-only access
ReadOnly bool `json:"read_only,omitempty"`
// KeyType indicates the type of the SSH key
KeyType string `json:"key_type,omitempty"`
}
+500 -11
View File
@@ -72,6 +72,14 @@
".distribution": "folder-dist",
"_distribution": "folder-dist",
"__distribution__": "folder-dist",
"built": "folder-dist",
".built": "folder-dist",
"_built": "folder-dist",
"__built__": "folder-dist",
"compiled": "folder-dist",
".compiled": "folder-dist",
"_compiled": "folder-dist",
"__compiled__": "folder-dist",
"css": "folder-css",
".css": "folder-css",
"_css": "folder-css",
@@ -120,6 +128,30 @@
".console": "folder-console",
"_console": "folder-console",
"__console__": "folder-console",
"xbox": "folder-console",
".xbox": "folder-console",
"_xbox": "folder-console",
"__xbox__": "folder-console",
"ps4": "folder-console",
".ps4": "folder-console",
"_ps4": "folder-console",
"__ps4__": "folder-console",
"ps5": "folder-console",
".ps5": "folder-console",
"_ps5": "folder-console",
"__ps5__": "folder-console",
"switch": "folder-console",
".switch": "folder-console",
"_switch": "folder-console",
"__switch__": "folder-console",
"game": "folder-console",
".game": "folder-console",
"_game": "folder-console",
"__game__": "folder-console",
"games": "folder-console",
".games": "folder-console",
"_games": "folder-console",
"__games__": "folder-console",
"images": "folder-images",
".images": "folder-images",
"_images": "folder-images",
@@ -216,6 +248,14 @@
".photographs": "folder-images",
"_photographs": "folder-images",
"__photographs__": "folder-images",
"texture": "folder-images",
".texture": "folder-images",
"_texture": "folder-images",
"__texture__": "folder-images",
"textures": "folder-images",
".textures": "folder-images",
"_textures": "folder-images",
"__textures__": "folder-images",
"script": "folder-scripts",
".script": "folder-scripts",
"_script": "folder-scripts",
@@ -252,6 +292,14 @@
".javascripts": "folder-javascript",
"_javascripts": "folder-javascript",
"__javascripts__": "folder-javascript",
"cjs": "folder-javascript",
".cjs": "folder-javascript",
"_cjs": "folder-javascript",
"__cjs__": "folder-javascript",
"mjs": "folder-javascript",
".mjs": "folder-javascript",
"_mjs": "folder-javascript",
"__mjs__": "folder-javascript",
"json": "folder-json",
".json": "folder-json",
"_json": "folder-json",
@@ -260,6 +308,14 @@
".jsons": "folder-json",
"_jsons": "folder-json",
"__jsons__": "folder-json",
"jsonc": "folder-json",
".jsonc": "folder-json",
"_jsonc": "folder-json",
"__jsonc__": "folder-json",
"jsonl": "folder-json",
".jsonl": "folder-json",
"_jsonl": "folder-json",
"__jsonl__": "folder-json",
"font": "folder-font",
".font": "folder-font",
"_font": "folder-font",
@@ -268,6 +324,14 @@
".fonts": "folder-font",
"_fonts": "folder-font",
"__fonts__": "folder-font",
"typeface": "folder-font",
".typeface": "folder-font",
"_typeface": "folder-font",
"__typeface__": "folder-font",
"typefaces": "folder-font",
".typefaces": "folder-font",
"_typefaces": "folder-font",
"__typefaces__": "folder-font",
"bower_components": "folder-bower",
".bower_components": "folder-bower",
"_bower_components": "folder-bower",
@@ -296,6 +360,10 @@
".specs": "folder-test",
"_specs": "folder-test",
"__specs__": "folder-test",
"testfiles": "folder-test",
".testfiles": "folder-test",
"_testfiles": "folder-test",
"__testfiles__": "folder-test",
"directive": "folder-directive",
".directive": "folder-directive",
"_directive": "folder-directive",
@@ -548,6 +616,14 @@
".preferences": "folder-config",
"_preferences": "folder-config",
"__preferences__": "folder-config",
"props": "folder-config",
".props": "folder-config",
"_props": "folder-config",
"__props__": "folder-config",
"properties": "folder-config",
".properties": "folder-config",
"_properties": "folder-config",
"__properties__": "folder-config",
"i18n": "folder-i18n",
".i18n": "folder-i18n",
"_i18n": "folder-i18n",
@@ -708,6 +784,14 @@
".colors": "folder-theme",
"_colors": "folder-theme",
"__colors__": "folder-theme",
"colour": "folder-theme",
".colour": "folder-theme",
"_colour": "folder-theme",
"__colour__": "folder-theme",
"colours": "folder-theme",
".colours": "folder-theme",
"_colours": "folder-theme",
"__colours__": "folder-theme",
"design": "folder-theme",
".design": "folder-theme",
"_design": "folder-theme",
@@ -1108,6 +1192,14 @@
".types": "folder-typescript",
"_types": "folder-typescript",
"__types__": "folder-typescript",
"cts": "folder-typescript",
".cts": "folder-typescript",
"_cts": "folder-typescript",
"__cts__": "folder-typescript",
"mts": "folder-typescript",
".mts": "folder-typescript",
"_mts": "folder-typescript",
"__mts__": "folder-typescript",
"graphql": "folder-graphql",
".graphql": "folder-graphql",
"_graphql": "folder-graphql",
@@ -1244,6 +1336,10 @@
".gulpfile.babel.js": "folder-gulp",
"_gulpfile.babel.js": "folder-gulp",
"__gulpfile.babel.js__": "folder-gulp",
"gulpfiles": "folder-gulp",
".gulpfiles": "folder-gulp",
"_gulpfiles": "folder-gulp",
"__gulpfiles__": "folder-gulp",
"python": "folder-python",
".python": "folder-python",
"_python": "folder-python",
@@ -1996,6 +2092,10 @@
".meta": "folder-meta",
"_meta": "folder-meta",
"__meta__": "folder-meta",
"metadata": "folder-meta",
".metadata": "folder-meta",
"_metadata": "folder-meta",
"__metadata__": "folder-meta",
"changesets": "folder-changesets",
".changesets": "folder-changesets",
"_changesets": "folder-changesets",
@@ -2116,6 +2216,38 @@
".unix": "folder-linux",
"_unix": "folder-linux",
"__unix__": "folder-linux",
"wsl": "folder-linux",
".wsl": "folder-linux",
"_wsl": "folder-linux",
"__wsl__": "folder-linux",
"ubuntu": "folder-linux",
".ubuntu": "folder-linux",
"_ubuntu": "folder-linux",
"__ubuntu__": "folder-linux",
"deb": "folder-linux",
".deb": "folder-linux",
"_deb": "folder-linux",
"__deb__": "folder-linux",
"debian": "folder-linux",
".debian": "folder-linux",
"_debian": "folder-linux",
"__debian__": "folder-linux",
"deepin": "folder-linux",
".deepin": "folder-linux",
"_deepin": "folder-linux",
"__deepin__": "folder-linux",
"centos": "folder-linux",
".centos": "folder-linux",
"_centos": "folder-linux",
"__centos__": "folder-linux",
"popos": "folder-linux",
".popos": "folder-linux",
"_popos": "folder-linux",
"__popos__": "folder-linux",
"mint": "folder-linux",
".mint": "folder-linux",
"_mint": "folder-linux",
"__mint__": "folder-linux",
"windows": "folder-windows",
".windows": "folder-windows",
"_windows": "folder-windows",
@@ -2128,6 +2260,38 @@
".win32": "folder-windows",
"_win32": "folder-windows",
"__win32__": "folder-windows",
"windows11": "folder-windows",
".windows11": "folder-windows",
"_windows11": "folder-windows",
"__windows11__": "folder-windows",
"windows10": "folder-windows",
".windows10": "folder-windows",
"_windows10": "folder-windows",
"__windows10__": "folder-windows",
"windowsxp": "folder-windows",
".windowsxp": "folder-windows",
"_windowsxp": "folder-windows",
"__windowsxp__": "folder-windows",
"windowsnt": "folder-windows",
".windowsnt": "folder-windows",
"_windowsnt": "folder-windows",
"__windowsnt__": "folder-windows",
"win11": "folder-windows",
".win11": "folder-windows",
"_win11": "folder-windows",
"__win11__": "folder-windows",
"win10": "folder-windows",
".win10": "folder-windows",
"_win10": "folder-windows",
"__win10__": "folder-windows",
"winxp": "folder-windows",
".winxp": "folder-windows",
"_winxp": "folder-windows",
"__winxp__": "folder-windows",
"winnt": "folder-windows",
".winnt": "folder-windows",
"_winnt": "folder-windows",
"__winnt__": "folder-windows",
"macos": "folder-macos",
".macos": "folder-macos",
"_macos": "folder-macos",
@@ -2460,6 +2624,14 @@
".pipelines": "folder-pipe",
"_pipelines": "folder-pipe",
"__pipelines__": "folder-pipe",
"interceptor": "folder-interceptor",
".interceptor": "folder-interceptor",
"_interceptor": "folder-interceptor",
"__interceptor__": "folder-interceptor",
"interceptors": "folder-interceptor",
".interceptors": "folder-interceptor",
"_interceptors": "folder-interceptor",
"__interceptors__": "folder-interceptor",
"svg": "folder-svg",
".svg": "folder-svg",
"_svg": "folder-svg",
@@ -2720,6 +2892,14 @@
".projects": "folder-project",
"_projects": "folder-project",
"__projects__": "folder-project",
"prompt": "folder-prompts",
".prompt": "folder-prompts",
"_prompt": "folder-prompts",
"__prompt__": "folder-prompts",
"prompts": "folder-prompts",
".prompts": "folder-prompts",
"_prompts": "folder-prompts",
"__prompts__": "folder-prompts",
"interface": "folder-interface",
".interface": "folder-interface",
"_interface": "folder-interface",
@@ -3159,6 +3339,34 @@
".blender-models": "folder-blender",
"_blender-models": "folder-blender",
"__blender-models__": "folder-blender",
"atoms": "folder-atom",
".atoms": "folder-atom",
"_atoms": "folder-atom",
"__atoms__": "folder-atom",
"atom": "folder-atom",
".atom": "folder-atom",
"_atom": "folder-atom",
"__atom__": "folder-atom",
"molecules": "folder-molecule",
".molecules": "folder-molecule",
"_molecules": "folder-molecule",
"__molecules__": "folder-molecule",
"molecule": "folder-molecule",
".molecule": "folder-molecule",
"_molecule": "folder-molecule",
"__molecule__": "folder-molecule",
"organisms": "folder-organism",
".organisms": "folder-organism",
"_organisms": "folder-organism",
"__organisms__": "folder-organism",
"organism": "folder-organism",
".organism": "folder-organism",
"_organism": "folder-organism",
"__organism__": "folder-organism",
".claude": "folder-claude",
"..claude": "folder-claude",
"_.claude": "folder-claude",
"__.claude__": "folder-claude",
"meta-inf": "folder-config",
".meta-inf": "folder-config",
"_meta-inf": "folder-config",
@@ -3261,6 +3469,14 @@
".distribution": "folder-dist-open",
"_distribution": "folder-dist-open",
"__distribution__": "folder-dist-open",
"built": "folder-dist-open",
".built": "folder-dist-open",
"_built": "folder-dist-open",
"__built__": "folder-dist-open",
"compiled": "folder-dist-open",
".compiled": "folder-dist-open",
"_compiled": "folder-dist-open",
"__compiled__": "folder-dist-open",
"css": "folder-css-open",
".css": "folder-css-open",
"_css": "folder-css-open",
@@ -3309,6 +3525,30 @@
".console": "folder-console-open",
"_console": "folder-console-open",
"__console__": "folder-console-open",
"xbox": "folder-console-open",
".xbox": "folder-console-open",
"_xbox": "folder-console-open",
"__xbox__": "folder-console-open",
"ps4": "folder-console-open",
".ps4": "folder-console-open",
"_ps4": "folder-console-open",
"__ps4__": "folder-console-open",
"ps5": "folder-console-open",
".ps5": "folder-console-open",
"_ps5": "folder-console-open",
"__ps5__": "folder-console-open",
"switch": "folder-console-open",
".switch": "folder-console-open",
"_switch": "folder-console-open",
"__switch__": "folder-console-open",
"game": "folder-console-open",
".game": "folder-console-open",
"_game": "folder-console-open",
"__game__": "folder-console-open",
"games": "folder-console-open",
".games": "folder-console-open",
"_games": "folder-console-open",
"__games__": "folder-console-open",
"images": "folder-images-open",
".images": "folder-images-open",
"_images": "folder-images-open",
@@ -3405,6 +3645,14 @@
".photographs": "folder-images-open",
"_photographs": "folder-images-open",
"__photographs__": "folder-images-open",
"texture": "folder-images-open",
".texture": "folder-images-open",
"_texture": "folder-images-open",
"__texture__": "folder-images-open",
"textures": "folder-images-open",
".textures": "folder-images-open",
"_textures": "folder-images-open",
"__textures__": "folder-images-open",
"script": "folder-scripts-open",
".script": "folder-scripts-open",
"_script": "folder-scripts-open",
@@ -3441,6 +3689,14 @@
".javascripts": "folder-javascript-open",
"_javascripts": "folder-javascript-open",
"__javascripts__": "folder-javascript-open",
"cjs": "folder-javascript-open",
".cjs": "folder-javascript-open",
"_cjs": "folder-javascript-open",
"__cjs__": "folder-javascript-open",
"mjs": "folder-javascript-open",
".mjs": "folder-javascript-open",
"_mjs": "folder-javascript-open",
"__mjs__": "folder-javascript-open",
"json": "folder-json-open",
".json": "folder-json-open",
"_json": "folder-json-open",
@@ -3449,6 +3705,14 @@
".jsons": "folder-json-open",
"_jsons": "folder-json-open",
"__jsons__": "folder-json-open",
"jsonc": "folder-json-open",
".jsonc": "folder-json-open",
"_jsonc": "folder-json-open",
"__jsonc__": "folder-json-open",
"jsonl": "folder-json-open",
".jsonl": "folder-json-open",
"_jsonl": "folder-json-open",
"__jsonl__": "folder-json-open",
"font": "folder-font-open",
".font": "folder-font-open",
"_font": "folder-font-open",
@@ -3457,6 +3721,14 @@
".fonts": "folder-font-open",
"_fonts": "folder-font-open",
"__fonts__": "folder-font-open",
"typeface": "folder-font-open",
".typeface": "folder-font-open",
"_typeface": "folder-font-open",
"__typeface__": "folder-font-open",
"typefaces": "folder-font-open",
".typefaces": "folder-font-open",
"_typefaces": "folder-font-open",
"__typefaces__": "folder-font-open",
"bower_components": "folder-bower-open",
".bower_components": "folder-bower-open",
"_bower_components": "folder-bower-open",
@@ -3485,6 +3757,10 @@
".specs": "folder-test-open",
"_specs": "folder-test-open",
"__specs__": "folder-test-open",
"testfiles": "folder-test-open",
".testfiles": "folder-test-open",
"_testfiles": "folder-test-open",
"__testfiles__": "folder-test-open",
"directive": "folder-directive-open",
".directive": "folder-directive-open",
"_directive": "folder-directive-open",
@@ -3737,6 +4013,14 @@
".preferences": "folder-config-open",
"_preferences": "folder-config-open",
"__preferences__": "folder-config-open",
"props": "folder-config-open",
".props": "folder-config-open",
"_props": "folder-config-open",
"__props__": "folder-config-open",
"properties": "folder-config-open",
".properties": "folder-config-open",
"_properties": "folder-config-open",
"__properties__": "folder-config-open",
"i18n": "folder-i18n-open",
".i18n": "folder-i18n-open",
"_i18n": "folder-i18n-open",
@@ -3897,6 +4181,14 @@
".colors": "folder-theme-open",
"_colors": "folder-theme-open",
"__colors__": "folder-theme-open",
"colour": "folder-theme-open",
".colour": "folder-theme-open",
"_colour": "folder-theme-open",
"__colour__": "folder-theme-open",
"colours": "folder-theme-open",
".colours": "folder-theme-open",
"_colours": "folder-theme-open",
"__colours__": "folder-theme-open",
"design": "folder-theme-open",
".design": "folder-theme-open",
"_design": "folder-theme-open",
@@ -4297,6 +4589,14 @@
".types": "folder-typescript-open",
"_types": "folder-typescript-open",
"__types__": "folder-typescript-open",
"cts": "folder-typescript-open",
".cts": "folder-typescript-open",
"_cts": "folder-typescript-open",
"__cts__": "folder-typescript-open",
"mts": "folder-typescript-open",
".mts": "folder-typescript-open",
"_mts": "folder-typescript-open",
"__mts__": "folder-typescript-open",
"graphql": "folder-graphql-open",
".graphql": "folder-graphql-open",
"_graphql": "folder-graphql-open",
@@ -4433,6 +4733,10 @@
".gulpfile.babel.js": "folder-gulp-open",
"_gulpfile.babel.js": "folder-gulp-open",
"__gulpfile.babel.js__": "folder-gulp-open",
"gulpfiles": "folder-gulp-open",
".gulpfiles": "folder-gulp-open",
"_gulpfiles": "folder-gulp-open",
"__gulpfiles__": "folder-gulp-open",
"python": "folder-python-open",
".python": "folder-python-open",
"_python": "folder-python-open",
@@ -5185,6 +5489,10 @@
".meta": "folder-meta-open",
"_meta": "folder-meta-open",
"__meta__": "folder-meta-open",
"metadata": "folder-meta-open",
".metadata": "folder-meta-open",
"_metadata": "folder-meta-open",
"__metadata__": "folder-meta-open",
"changesets": "folder-changesets-open",
".changesets": "folder-changesets-open",
"_changesets": "folder-changesets-open",
@@ -5305,6 +5613,38 @@
".unix": "folder-linux-open",
"_unix": "folder-linux-open",
"__unix__": "folder-linux-open",
"wsl": "folder-linux-open",
".wsl": "folder-linux-open",
"_wsl": "folder-linux-open",
"__wsl__": "folder-linux-open",
"ubuntu": "folder-linux-open",
".ubuntu": "folder-linux-open",
"_ubuntu": "folder-linux-open",
"__ubuntu__": "folder-linux-open",
"deb": "folder-linux-open",
".deb": "folder-linux-open",
"_deb": "folder-linux-open",
"__deb__": "folder-linux-open",
"debian": "folder-linux-open",
".debian": "folder-linux-open",
"_debian": "folder-linux-open",
"__debian__": "folder-linux-open",
"deepin": "folder-linux-open",
".deepin": "folder-linux-open",
"_deepin": "folder-linux-open",
"__deepin__": "folder-linux-open",
"centos": "folder-linux-open",
".centos": "folder-linux-open",
"_centos": "folder-linux-open",
"__centos__": "folder-linux-open",
"popos": "folder-linux-open",
".popos": "folder-linux-open",
"_popos": "folder-linux-open",
"__popos__": "folder-linux-open",
"mint": "folder-linux-open",
".mint": "folder-linux-open",
"_mint": "folder-linux-open",
"__mint__": "folder-linux-open",
"windows": "folder-windows-open",
".windows": "folder-windows-open",
"_windows": "folder-windows-open",
@@ -5317,6 +5657,38 @@
".win32": "folder-windows-open",
"_win32": "folder-windows-open",
"__win32__": "folder-windows-open",
"windows11": "folder-windows-open",
".windows11": "folder-windows-open",
"_windows11": "folder-windows-open",
"__windows11__": "folder-windows-open",
"windows10": "folder-windows-open",
".windows10": "folder-windows-open",
"_windows10": "folder-windows-open",
"__windows10__": "folder-windows-open",
"windowsxp": "folder-windows-open",
".windowsxp": "folder-windows-open",
"_windowsxp": "folder-windows-open",
"__windowsxp__": "folder-windows-open",
"windowsnt": "folder-windows-open",
".windowsnt": "folder-windows-open",
"_windowsnt": "folder-windows-open",
"__windowsnt__": "folder-windows-open",
"win11": "folder-windows-open",
".win11": "folder-windows-open",
"_win11": "folder-windows-open",
"__win11__": "folder-windows-open",
"win10": "folder-windows-open",
".win10": "folder-windows-open",
"_win10": "folder-windows-open",
"__win10__": "folder-windows-open",
"winxp": "folder-windows-open",
".winxp": "folder-windows-open",
"_winxp": "folder-windows-open",
"__winxp__": "folder-windows-open",
"winnt": "folder-windows-open",
".winnt": "folder-windows-open",
"_winnt": "folder-windows-open",
"__winnt__": "folder-windows-open",
"macos": "folder-macos-open",
".macos": "folder-macos-open",
"_macos": "folder-macos-open",
@@ -5649,6 +6021,14 @@
".pipelines": "folder-pipe-open",
"_pipelines": "folder-pipe-open",
"__pipelines__": "folder-pipe-open",
"interceptor": "folder-interceptor-open",
".interceptor": "folder-interceptor-open",
"_interceptor": "folder-interceptor-open",
"__interceptor__": "folder-interceptor-open",
"interceptors": "folder-interceptor-open",
".interceptors": "folder-interceptor-open",
"_interceptors": "folder-interceptor-open",
"__interceptors__": "folder-interceptor-open",
"svg": "folder-svg-open",
".svg": "folder-svg-open",
"_svg": "folder-svg-open",
@@ -5909,6 +6289,14 @@
".projects": "folder-project-open",
"_projects": "folder-project-open",
"__projects__": "folder-project-open",
"prompt": "folder-prompts-open",
".prompt": "folder-prompts-open",
"_prompt": "folder-prompts-open",
"__prompt__": "folder-prompts-open",
"prompts": "folder-prompts-open",
".prompts": "folder-prompts-open",
"_prompts": "folder-prompts-open",
"__prompts__": "folder-prompts-open",
"interface": "folder-interface-open",
".interface": "folder-interface-open",
"_interface": "folder-interface-open",
@@ -6347,7 +6735,35 @@
"blender-models": "folder-blender-open",
".blender-models": "folder-blender-open",
"_blender-models": "folder-blender-open",
"__blender-models__": "folder-blender-open"
"__blender-models__": "folder-blender-open",
"atoms": "folder-atom-open",
".atoms": "folder-atom-open",
"_atoms": "folder-atom-open",
"__atoms__": "folder-atom-open",
"atom": "folder-atom-open",
".atom": "folder-atom-open",
"_atom": "folder-atom-open",
"__atom__": "folder-atom-open",
"molecules": "folder-molecule-open",
".molecules": "folder-molecule-open",
"_molecules": "folder-molecule-open",
"__molecules__": "folder-molecule-open",
"molecule": "folder-molecule-open",
".molecule": "folder-molecule-open",
"_molecule": "folder-molecule-open",
"__molecule__": "folder-molecule-open",
"organisms": "folder-organism-open",
".organisms": "folder-organism-open",
"_organisms": "folder-organism-open",
"__organisms__": "folder-organism-open",
"organism": "folder-organism-open",
".organism": "folder-organism-open",
"_organism": "folder-organism-open",
"__organism__": "folder-organism-open",
".claude": "folder-claude-open",
"..claude": "folder-claude-open",
"_.claude": "folder-claude-open",
"__.claude__": "folder-claude-open"
},
"rootFolderNames": {},
"rootFolderNamesExpanded": {},
@@ -6379,6 +6795,8 @@
"j2": "jinja",
"jinja-html": "jinja",
"proto": "proto",
"prompt.md": "prompt",
"prompts.md": "prompt",
"sublime-project": "sublime",
"sublime-workspace": "sublime",
"slx": "simulink",
@@ -6564,6 +6982,7 @@
"vcxitems.filters": "visualstudio",
"vcxproj": "visualstudio",
"vcxproj.filters": "visualstudio",
"vcl": "varnish",
"pdb": "database",
"sql": "database",
"pks": "database",
@@ -6582,6 +7001,26 @@
"dblite3": "database",
"debugsymbols": "database",
"odb": "database",
"accde": "database",
"adp": "database",
"bak": "database",
"bdb": "database",
"dbf": "database",
"fdb": "database",
"feather": "database",
"gdb": "database",
"ibd": "database",
"mdf": "database",
"mde": "database",
"myd": "database",
"myi": "database",
"ndf": "database",
"orc": "database",
"parquet": "database",
"sdf": "database",
"ldf": "database",
"frm": "database",
"kdbx": "database",
"kql": "kusto",
"cs": "csharp",
"csx": "csharp",
@@ -6692,6 +7131,7 @@
"ps1xml": "powershell",
"psc1": "powershell",
"pssc": "powershell",
"excalidraw": "excalidraw",
"excalidraw.json": "excalidraw",
"excalidraw.svg": "excalidraw",
"excalidraw.png": "excalidraw",
@@ -6752,13 +7192,13 @@
"containerfile": "docker",
"compose.yaml": "docker",
"compose.yml": "docker",
"sty": "sty",
"ctx": "context",
"dtx": "dtx",
"ins": "doctex-installer",
"bbx": "bbx",
"cbx": "cbx",
"lbx": "lbx",
"tex": "tex",
"sty": "sty",
"ltx": "ltx",
"dtx": "dtx",
"pptx": "powerpoint",
"ppt": "powerpoint",
"pptm": "powerpoint",
@@ -7450,6 +7890,12 @@
"blend": "blender",
"blend1": "blender",
"blend2": "blender",
"css.ts": "vanilla-extract",
"css.js": "vanilla-extract",
"css.cjs": "vanilla-extract",
"css.mjs": "vanilla-extract",
"css.tsx": "vanilla-extract",
"css.jsx": "vanilla-extract",
"yaml-tmlanguage": "yaml",
"tmlanguage": "xml",
"cljx": "clojure",
@@ -7517,7 +7963,8 @@
"babelrc": "jsonc",
"jmd": "juliamarkdown",
"cls": "tex",
"ctx": "latex",
"tex": "latex",
"ltx": "latex",
"mak": "makefile",
"mkd": "markdown",
"mdwn": "markdown",
@@ -7657,17 +8104,25 @@
".jsbeautifyrc": "json",
".esformatter": "json",
"cdp.pid": "json",
".lintstagedrc": "json",
".whitesource": "json",
"playwright.config.js": "playwright",
"playwright.config.cjs": "playwright",
"playwright.config.mjs": "playwright",
"playwright.config.ts": "playwright",
"playwright.config.cts": "playwright",
"playwright.config.mts": "playwright",
"playwright.config.base.js": "playwright",
"playwright.config.base.cjs": "playwright",
"playwright.config.base.mjs": "playwright",
"playwright.config.base.ts": "playwright",
"playwright.config.base.cts": "playwright",
"playwright.config.base.mts": "playwright",
"playwright-ct.config.js": "playwright",
"playwright-ct.config.cjs": "playwright",
"playwright-ct.config.mjs": "playwright",
"playwright-ct.config.ts": "playwright",
"playwright-ct.config.cts": "playwright",
"playwright-ct.config.mts": "playwright",
".htaccess": "xml",
".release-it.json": "rocket",
".release-it.ts": "rocket",
@@ -7713,6 +8168,7 @@
"astro.config.ts": "astro-config",
"astro.config.cts": "astro-config",
"astro.config.mts": "astro-config",
".vsconfig": "visualstudio",
"go.mod": "go-mod",
"go.sum": "go-mod",
"go.work": "go-mod",
@@ -7741,12 +8197,14 @@
"pre-commit": "console",
"pre-push": "console",
"post-merge": "console",
"excalidraw": "excalidraw",
"excalidraw.json": "excalidraw",
"excalidraw.svg": "excalidraw",
"excalidraw.png": "excalidraw",
"gradle.properties": "gradle",
"gradlew": "gradle",
"gradle-wrapper.properties": "gradle",
"gradlew.bat": "gradle",
"copying": "certificate",
"copying.md": "certificate",
"copying.rst": "certificate",
@@ -7790,6 +8248,8 @@
".rubocop-todo.yml": "rubocop",
".rubocop_todo.yml": "rubocop",
".rspec": "rspec",
".swift-format": "swift",
".swift-version": "swift",
"dockerfile": "docker",
"dockerfile.prod": "docker",
"dockerfile.production": "docker",
@@ -7927,6 +8387,7 @@
"graphql.config.mts": "graphql",
"graphql.config.cts": "graphql",
".graphqlconfig": "graphql",
"XamlStyler.json": "xaml",
".git": "git",
".gitignore": "git",
".gitmessage": "git",
@@ -8302,6 +8763,7 @@
"gulpfile.cts": "gulp",
"gulpfile.mts": "gulp",
"gulpfile.babel.js": "gulp",
"gulpfile.cjs": "gulp",
"package.json": "nodejs",
"package-lock.json": "nodejs",
".nvmrc": "nodejs",
@@ -9059,6 +9521,7 @@
"sentry.edge.config.mts": "sentry",
"sentry.edge.config.cts": "sentry",
".sentryclirc": "sentry",
".env.sentry-build-plugin": "sentry",
"contentlayer.config.js": "contentlayer",
"contentlayer.config.mjs": "contentlayer",
"contentlayer.config.cjs": "contentlayer",
@@ -9302,6 +9765,7 @@
"unocss.config.ts": "unocss",
"unocss.config.mts": "unocss",
".mincloudrc": "ifanr-cloud",
".qa-mincloudrc": "ifanr-cloud",
"concourse.yml": "concourse",
".syncpackrc": "syncpack",
".syncpackrc.json": "syncpack",
@@ -9368,8 +9832,14 @@
"esbuild.config.mts": "esbuild",
"esbuild.config.cts": "esbuild",
"drizzle.config.ts": "drizzle",
"drizzle.config.dev.ts": "drizzle",
"drizzle.config.prod.ts": "drizzle",
"drizzle.config.js": "drizzle",
"drizzle.config.dev.js": "drizzle",
"drizzle.config.prod.js": "drizzle",
"drizzle.config.json": "drizzle",
"drizzle.config.dev.json": "drizzle",
"drizzle.config.prod.json": "drizzle",
".puppeteerrc": "puppeteer",
".puppeteerrc.json": "puppeteer",
".puppeteerrc.jsonc": "puppeteer",
@@ -9422,7 +9892,8 @@
".k8s.yml": "kubernetes",
".k8s.yaml": "kubernetes",
"phpstan.neon": "phpstan",
"phpneon.neon.dist": "phpstan",
"phpstan.neon.dist": "phpstan",
"phpstan.dist.neon": "phpstan",
"screwdriver.yaml": "screwdriver",
"screwdriver.yml": "screwdriver",
"snapcraft.yaml": "snapcraft",
@@ -9494,9 +9965,19 @@
"zeabur.yaml": "zeabur",
"zeabur.yml": "zeabur",
"zeabur.toml": "zeabur",
".github/copilot-instructions.md": "copilot",
"copilot-instructions.md": "copilot",
".pre-commit-config.yaml": "pre-commit",
".pre-commit-hooks.yaml": "pre-commit",
".lintstagedrc": "lintstaged",
".lintstagedrc.json": "lintstaged",
".lintstagedrc.yaml": "lintstaged",
".lintstagedrc.yml": "lintstaged",
".lintstagedrc.mjs": "lintstaged",
".lintstagedrc.cjs": "lintstaged",
"lint-staged.config.mjs": "lintstaged",
"lint-staged.config.cjs": "lintstaged",
"lint-staged.config.js": "lintstaged",
".lintstagedrc.js": "lintstaged",
"histoire.config.js": "histoire",
"histoire.config.mjs": "histoire",
"histoire.config.cjs": "histoire",
@@ -9547,6 +10028,11 @@
".hadolint.yml": "hadolint",
"hadolint.yaml": "hadolint",
"hadolint.yml": "hadolint",
"tsdoc.json": "tsdoc",
".oxlintrc.json": "oxlint",
"CLAUDE.md": "claude",
"CLAUDE.local.md": "claude",
"xamlstyler.json": "xaml",
".rhistory": "r",
"cmakepresets.json": "cmake",
"cname": "http",
@@ -9557,6 +10043,8 @@
"pklproject.deps.json": "pkl",
".github/funding.yml": "github-sponsors",
"snakefile": "snakemake",
"claude.md": "claude",
"claude.local.md": "claude",
"language-configuration.json": "jsonc",
"icon-theme.json": "jsonc",
"color-theme.json": "jsonc",
@@ -9754,7 +10242,8 @@
"hosts": "hosts",
"beancount": "beancount",
"ahk2": "ahk2",
"gnuplot": "gnuplot"
"gnuplot": "gnuplot",
"helm": "helm"
},
"light": {
"fileExtensions": {
@@ -9947,7 +10436,7 @@
"zeabur.yaml": "zeabur_light",
"zeabur.yml": "zeabur_light",
"zeabur.toml": "zeabur_light",
".github/copilot-instructions.md": "copilot_light",
"copilot-instructions.md": "copilot_light",
"hosts": "hosts_light"
},
"languageIds": {
+19 -1
View File
@@ -95,6 +95,7 @@
"circleci_light": "<svg viewBox='0 0 32 32'><circle cx='16' cy='16' r='4' fill='#424242'/><path fill='#424242' d='M17.73 2.104a14 14 0 0 0-14.927 9.234.504.504 0 0 0 .48.662h5.525a.49.49 0 0 0 .416-.235 8 8 0 1 1 0 8.47A.49.49 0 0 0 8.81 20H3.28a.503.503 0 0 0-.479.66 14 14 0 1 0 14.93-18.556Z'/></svg>",
"citation": "<svg viewBox='0 0 1024 1024'><path fill='#1e88e5' d='M256 192c-106.039 0-192 85.961-192 192 .189 103.43 82.273 188.122 185.646 191.545L128 832h128l173.473-365.715C441.746 440.412 447.323 412.44 448 384c0-106.039-85.961-192-192-192m512 0c-106.039 0-192 85.961-192 192 .189 103.43 82.273 188.122 185.646 191.545L640 832h128l173.473-365.715C953.746 440.412 959.323 412.44 960 384c0-106.039-85.961-192-192-192'/></svg>",
"clangd": "<svg viewBox='0 0 16 16'><path fill='#4caf50' d='M10 4H7.5C4.75 4 2 5.379 2 9.5c0 4.12 2.75 5.51 5.53 5.5H10v-3H7.667C7.665 11.973 5 12.289 5 9.478 5 6.672 7.395 7.028 7.52 7H10z'/><path fill='#2979ff' d='M10 1v6H7.52C7.452 7.03 5 6.659 5 9.478 5 12.295 7.618 11.97 7.668 12H13V1h-2.725z'/></svg>",
"claude": "<svg viewBox='0 0 4.233 4.233'><path fill='#ff7043' d='m1 2.73.726-.408.012-.036-.012-.02h-.035l-.122-.007-.415-.011-.36-.015-.35-.019-.087-.018-.082-.109.008-.054.074-.05.106.01.233.016.351.024.255.015.376.04h.06l.009-.025-.02-.015-.017-.015-.363-.246-.392-.26-.206-.15-.111-.075L.58 1.23l-.024-.155.101-.111.136.01.034.009.138.105.293.228.384.282.056.047.022-.016.003-.011-.025-.042-.209-.377-.222-.384-.1-.159-.025-.095a.5.5 0 0 1-.016-.112l.115-.157.063-.02.154.02.064.057.096.217.154.344.24.466.07.139.037.128.014.04h.024V1.66l.02-.263.036-.323L2.25.66l.012-.117.058-.14.115-.076.09.043.074.106-.01.068-.045.285-.086.447-.056.3h.033l.037-.038.152-.2.254-.319.113-.126.13-.14.085-.066h.159l.117.174-.053.18-.164.207-.135.176-.195.262-.121.21.011.016.029-.002.44-.094.237-.043.283-.049.129.06.014.061-.05.124-.304.075-.355.071-.53.126-.006.004.007.01.239.022.102.006h.25l.464.034.122.08.073.099-.012.075-.187.095-.253-.06-.59-.14-.201-.05h-.028v.016l.168.165.309.279.386.359.02.089-.05.07-.052-.008-.34-.255-.13-.115-.297-.25h-.02v.026l.068.1.361.543.02.166-.027.055-.094.032-.102-.018-.212-.297-.218-.334-.175-.299-.022.012-.104 1.118-.048.057-.113.043-.093-.071-.05-.115.05-.228.06-.296.048-.236.044-.292.026-.098-.001-.006-.022.003-.22.303-.336.453-.266.284-.064.026-.11-.057.01-.102.062-.091.368-.468.221-.29.143-.167v-.024h-.009l-.976.634-.174.022-.075-.07.01-.115.035-.037z'/></svg>",
"cline": "<svg viewBox='0 0 16 16'><path fill='#42a5f5' d='M8 1a2 2 0 0 0-2 2H5C3.338 3 2 4.338 2 6v1L1 9l1 2v1c0 1.662 1.338 3 3 3h6c1.662 0 3-1.338 3-3v-1l1-2-1-2V6c0-1.662-1.338-3-3-3h-1a2 2 0 0 0-2-2M6 7c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1V8c0-.554.446-1 1-1m4 0c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1V8c0-.554.446-1 1-1'/></svg>",
"clojure": "<svg viewBox='0 0 256 256'><path fill='#64dd17' d='M123.456 129.975a507 507 0 0 0-3.54 7.846c-4.406 9.981-9.284 22.127-11.066 29.908-.64 2.77-1.037 6.205-1.03 10.013 0 1.506.081 3.09.21 4.702a58.1 58.1 0 0 0 19.98 3.559 58.2 58.2 0 0 0 18.29-2.98c-1.352-1.237-2.642-2.554-3.816-4.038-7.796-9.942-12.146-24.512-19.028-49.01m-28.784-49.39C79.782 91.08 70.039 108.387 70.002 128c.037 19.32 9.487 36.403 24.002 46.94 3.56-14.83 12.485-28.41 25.868-55.63a219 219 0 0 0-2.714-7.083c-3.708-9.3-9.059-20.102-13.834-24.993-2.435-2.555-5.389-4.763-8.652-6.648'/><path fill='#7cb342' d='M178.532 194.535c-7.683-.963-14.023-2.124-19.57-4.081a69.4 69.4 0 0 1-30.958 7.249c-38.491 0-69.693-31.198-69.698-69.7 0-20.891 9.203-39.62 23.764-52.392-3.895-.94-7.956-1.49-12.104-1.482-20.45.193-42.037 11.51-51.025 42.075-.84 4.45-.64 7.813-.64 11.8 0 60.591 49.12 109.715 109.705 109.715 37.104 0 69.882-18.437 89.732-46.633-10.736 2.675-21.06 3.955-29.902 3.982-3.314 0-6.425-.177-9.305-.53'/><path fill='#29b6f6' d='M157.922 173.271c.678.336 2.213.884 4.35 1.49 14.375-10.553 23.717-27.552 23.754-46.764h-.005c-.055-32.03-25.974-57.945-58.011-58.009a58.2 58.2 0 0 0-18.213 2.961c11.779 13.426 17.443 32.613 22.922 53.6l.01.025c.01.017 1.752 5.828 4.743 13.538 2.97 7.7 7.203 17.231 11.818 24.178 3.03 4.655 6.363 8 8.632 8.981'/><path fill='#1e88e5' d='M128.009 18.29c-36.746 0-69.25 18.089-89.16 45.826 10.361-6.49 20.941-8.83 30.174-8.747 12.753.037 22.779 3.991 27.589 6.696a51 51 0 0 1 3.345 2.131 69.4 69.4 0 0 1 28.049-5.894c38.496.004 69.703 31.202 69.709 69.698h-.006c0 19.409-7.938 36.957-20.736 49.594 3.142.352 6.492.571 9.912.554 12.15.006 25.284-2.675 35.13-10.956 6.42-5.408 11.798-13.327 14.78-25.199.584-4.586.92-9.247.92-13.991 0-60.588-49.116-109.715-109.705-109.715'/></svg>",
"cloudfoundry": "<svg viewBox='0 0 24 24'><path fill='#0288d1' d='M14.13 10.1c.6-.5.98-1.19.97-1.96-.01-1.47-1.4-2.66-3.1-2.66S8.91 6.66 8.9 8.13c-.01.77.37 1.47.97 1.96.75.61 1.36 1.84 1.4 3.18.04 1.49-.06 3.22-.12 4.1-.8.11-1.36.38-1.36.69 0 .41.99.89 2.22.89s2.22-.48 2.22-.89c0-.31-.56-.58-1.36-.69-.06-.88-.16-2.6-.12-4.1.04-1.34.65-2.57 1.4-3.18z'/><path fill='#78909c' d='M17.89 18.77a2 2 0 0 1 .37-.11 2.3 2.3 0 0 1 .43-.05l-.02-.12c0-.07-.04-.16-.07-.26l-.05-.13c-.02-.04-.04-.08-.06-.11l-.06-.11a4 4 0 0 1-.44-.1 3 3 0 0 1-.4-.14c-.22-.09-.43-.2-.54-.32a.41.41 0 0 1-.16-.34.3.3 0 0 1 .07-.15.5.5 0 0 1 .16-.12l-.13-.07c-.04-.02-.08-.05-.14-.07-.05-.03-.11-.05-.17-.08-.11-.05-.22-.11-.32-.14l-.15-.06a3 3 0 0 1-.34.02c-.12 0-.25 0-.37-.01-.24-.02-.49-.05-.7-.12a2 2 0 0 1-.28-.1 1.3 1.3 0 0 1-.21-.11c-.11-.08-.19-.16-.19-.25l-.17-.03c-.1-.02-.33-.05-.47-.07 0 .02-.02.05-.02.09l-.04.17c-.07.35.13.7.47.8.83.24 1.46.64 1.64 1.13.37.99-1.18 1.96-3.52 1.96-2.35 0-3.89-.97-3.53-1.96.18-.48.78-.87 1.59-1.11a.72.72 0 0 0 .49-.84l-.05-.24-.31.04c-.14.02-.27.04-.37.06l-.17.03c.01.08-.05.17-.16.25a1.4 1.4 0 0 1-.2.12 2 2 0 0 1-.27.1 3 3 0 0 1-.33.08 3 3 0 0 1-.36.05c-.25.02-.5.02-.73 0l-.04.02c-.02.01-.07.03-.11.05l-.31.15c-.11.05-.21.12-.29.16l-.1.05-.03.02c.16.07.24.17.26.28.04.11-.01.23-.12.35a1.5 1.5 0 0 1-.22.18 2 2 0 0 1-.32.17 3.4 3.4 0 0 1-.83.26.5.5 0 0 0-.05.11l-.09.25-.04.26a.4.4 0 0 0-.01.12c.32 0 .61.06.83.14.25.08.4.21.52.36.09.16.13.33.05.53-.06.19-.22.41-.47.6l.04.03.12.08c.1.07.23.17.38.26l.44.24c.06.03.12.06.16.07l.06.03c.36-.15.75-.23 1.14-.28a3.3 3.3 0 0 1 .57-.01c.19.01.38.02.55.07.18.05.35.09.5.16a3 3 0 0 1 .42.24c.26.17.45.42.54.68l.33.01c.2.01.46.02.73.01l.72-.03.32-.03a1 1 0 0 1 .17-.38 1 1 0 0 1 .14-.16 1.6 1.6 0 0 1 .55-.39 2.3 2.3 0 0 1 .48-.17c.18-.04.35-.07.54-.08q.285-.015.57 0a4 4 0 0 1 1.15.24l.2-.11c.11-.07.28-.15.41-.25s.27-.19.35-.26l.13-.13c-.27-.19-.43-.39-.52-.58a.64.64 0 0 1-.06-.27.4.4 0 0 1 .06-.25c.07-.16.25-.27.45-.37M9.95 13.9s.35-1.32-1.17-3.03l-.05-.05a4.2 4.2 0 0 1-.98-2.7c0-2.32 1.89-4.2 4.2-4.2h.1a4.2 4.2 0 0 1 4.2 4.2 4.2 4.2 0 0 1-.99 2.7c-.01.01-.02.03-.05.05-1.34 1.35-1.17 3.03-1.17 3.03a6.14 6.14 0 0 0 4.13-5.75c.02-3.24-2.6-6-5.83-6.15h-.7c-3.23.16-5.85 2.92-5.83 6.15.01 2.59 1.67 4.9 4.13 5.75z'/></svg>",
@@ -202,6 +203,8 @@
"folder-archive": "<svg viewBox='0 0 1024 1024'><path fill='#ffa726' d='m443.008 241.152-41.216-34.304A64 64 0 0 0 360.832 192H128a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h768a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64H483.968a64 64 0 0 1-40.96-14.848'/><path fill='#ffe0b2' d='M512 320c-35.456 0-64 28.544-64 64v64c0 35.456 28.544 64 64 64v320c0 35.456 28.544 64 64 64h320c35.456 0 64-28.544 64-64V512c35.456 0 64-28.544 64-64v-64c0-35.456-28.544-64-64-64zm0 64h448v64H512zm128 128h192v64H640z'/></svg>",
"folder-astro-open": "<svg viewBox='0 0 32 32'><path fill='#7c4dff' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.367L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#d1c4e9' d='M19.333 27c0-.81.082-1.508 1.3-1.508 0 2.608 1.5 4.508 2.7 4.508 0-3.319 2.667-3.122 2.667-6h-8c0 1.275.158 2.681 1.333 3m5.923-16.385L30 22h-2.333a4 4 0 0 1-3.693-2.462l-1.512-3.63a.5.5 0 0 0-.924 0l-1.512 3.63A4 4 0 0 1 16.333 22H14l4.744-11.385a1 1 0 0 1 .923-.615h4.666a1 1 0 0 1 .923.615'/></svg>",
"folder-astro": "<svg viewBox='0 0 32 32'><path fill='#7c4dff' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#d1c4e9' d='M19.333 27c0-.81.082-1.508 1.3-1.508 0 2.608 1.5 4.508 2.7 4.508 0-3.319 2.667-3.122 2.667-6h-8c0 1.275.158 2.681 1.333 3m5.923-16.385L30 22h-2.333a4 4 0 0 1-3.693-2.462l-1.512-3.63a.5.5 0 0 0-.924 0l-1.512 3.63A4 4 0 0 1 16.333 22H14l4.744-11.385a1 1 0 0 1 .923-.615h4.666a1 1 0 0 1 .923.615'/></svg>",
"folder-atom-open": "<svg viewBox='0 0 32 32'><path fill='#1e88e5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#bbdefb' d='M28.36 10.64a3 3 0 1 1-3 3 2.6 2.6 0 0 1 .14-.84A8.1 8.1 0 0 0 22 12a8 8 0 0 0-8 8l.04.84-1.99.21L12 20a9.996 9.996 0 0 1 14.67-8.84 3 3 0 0 1 1.69-.52m0 2a1 1 0 1 0 1 1 1 1 0 0 0-1-1M15.64 23.36a3.01 3.01 0 0 1 3 3 2.6 2.6 0 0 1-.14.84 8.1 8.1 0 0 0 3.5.8 8 8 0 0 0 8-8l-.04-.84 1.99-.21L32 20a9.996 9.996 0 0 1-14.67 8.84 3 3 0 1 1-1.69-5.48m0 2a1 1 0 1 0 1 1 .997.997 0 0 0-1-1M22 16a4 4 0 1 1-4 4 4 4 0 0 1 4-4'/></svg>",
"folder-atom": "<svg viewBox='0 0 32 32'><path fill='#1e88e5' d='m13.844 7.6-1.288-1.073a2 2 0 0 0-1.28-.463H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2v-14a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#bbdefb' d='M28.36 10.64a3 3 0 1 1-3 3 2.6 2.6 0 0 1 .14-.84A8.1 8.1 0 0 0 22 12a8 8 0 0 0-8 8l.04.84-1.99.21L12 20a9.996 9.996 0 0 1 14.67-8.84 3 3 0 0 1 1.69-.52m0 2a1 1 0 1 0 1 1 1 1 0 0 0-1-1M15.64 23.36a3.01 3.01 0 0 1 3 3 2.6 2.6 0 0 1-.14.84 8.1 8.1 0 0 0 3.5.8 8 8 0 0 0 8-8l-.04-.84 1.99-.21L32 20a9.996 9.996 0 0 1-14.67 8.84 3 3 0 1 1-1.69-5.48m0 2a1 1 0 1 0 1 1 .997.997 0 0 0-1-1M22 16a4 4 0 1 1-4 4 4 4 0 0 1 4-4'/></svg>",
"folder-attachment-open": "<svg viewBox='0 0 1024 1024'><path fill='#9c27b0' d='M128 192a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h704l153.791-358.783A64 64 0 0 0 926.912 384H302.145a64 64 0 0 0-60.737 43.775L128 768V320h768a64 64 0 0 0-64-64H483.969a64 64 0 0 1-40.961-14.848l-41.215-34.304A64 64 0 0 0 360.832 192z'/><path fill='#e1bee7' d='M990.922 446.852c.156 8.69-1.383 17.621-5.131 26.365l-26.271 61.287c.306 3.125.48 6.29.48 9.496 0 53.02-42.98 96-96 96H544c-17.673 0-32-14.327-32-32s14.327-32 32-32h320v-64H544c-53.02 0-96 42.98-96 96s42.98 96 96 96h320c88.366 0 160-71.634 160-160 0-36.586-12.416-70.195-33.078-97.148'/></svg>",
"folder-attachment": "<svg viewBox='0 0 1024 1024'><path fill='#9c27b0' d='m443.008 241.152-41.216-34.304A64 64 0 0 0 360.832 192H128a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h768a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64H483.968a64 64 0 0 1-40.96-14.848'/><path fill='#e1bee7' d='M960 416.219V544c0 53.02-42.98 96-96 96H544c-17.673 0-32-14.327-32-32s14.327-32 32-32h320v-64H544c-53.02 0-96 42.98-96 96s42.98 96 96 96h320c88.366 0 160-71.634 160-160 0-52.295-25.203-98.585-64-127.781'/></svg>",
"folder-audio-open": "<svg viewBox='0 0 32 32'><path fill='#ef5350' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffcdd2' d='M31.5 12h-5a.5.5 0 0 0-.5.5v8.055a3.9 3.9 0 0 0-3.232-.357 3.999 3.999 0 0 0 1.856 7.755A4.1 4.1 0 0 0 28 23.847V16h3.5a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5'/></svg>",
@@ -242,6 +245,8 @@
"folder-circleci": "<svg viewBox='0 0 32 32'><path fill='#546e7a' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#eceff1' d='M22.954 10a9 9 0 0 0-8.555 6.367.5.5 0 0 0 .486.633h3.23a.5.5 0 0 0 .442-.28 5 5 0 1 1-.001 4.557.5.5 0 0 0-.439-.277h-3.232a.5.5 0 0 0-.486.633 8.997 8.997 0 0 0 17.597-2.892A9.103 9.103 0 0 0 22.954 10'/><circle cx='23' cy='19' r='2' fill='#eceff1'/></svg>",
"folder-class-open": "<svg viewBox='0 0 32 32'><path fill='#ef5350' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffcdd2' d='M16 12v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V12a2 2 0 0 0-2-2H18a2 2 0 0 0-2 2m14 14H18v-4h12Zm0-6H18v-4h12Z'/></svg>",
"folder-class": "<svg viewBox='0 0 32 32'><path fill='#ef5350' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffcdd2' d='M16 12v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V12a2 2 0 0 0-2-2H18a2 2 0 0 0-2 2m14 14H18v-4h12Zm0-6H18v-4h12Z'/></svg>",
"folder-claude-open": "<svg viewBox='0 0 4.233 4.233'><path fill='#ff7043' d='M3.832 1.587H1.249a.265.265 0 0 0-.251.181L.529 3.175V1.323h3.175a.265.265 0 0 0-.264-.265H2a.27.27 0 0 1-.169-.061l-.17-.142a.27.27 0 0 0-.17-.061H.53a.265.265 0 0 0-.264.264v2.117a.265.265 0 0 0 .264.265h2.91l.636-1.484a.265.265 0 0 0-.243-.369'/><path fill='#ffccbc' d='m2.103 3.091.517-.29.009-.025-.009-.014h-.025l-.086-.006-.296-.008-.256-.01-.248-.014-.063-.013-.058-.077.006-.039.052-.035.075.007.167.01.25.018.18.01.268.029h.043l.006-.017-.015-.011-.01-.01-.26-.176-.279-.185-.146-.106-.08-.054-.04-.05-.016-.111.071-.08.097.007.025.007.097.075.21.162.272.2.04.034.016-.011.002-.008-.018-.03-.148-.268-.159-.273-.07-.113-.019-.068a.3.3 0 0 1-.011-.08l.082-.111.045-.015.11.015.045.04.068.155.11.244.17.332.05.098.027.092.01.028h.017V2.33l.014-.187.026-.23.025-.295.009-.084.041-.1.082-.053.064.03.052.075-.007.049-.031.203-.061.318-.04.213h.023l.027-.027.107-.143.181-.226.08-.09.093-.099.06-.047h.113l.084.124-.038.127-.116.148-.097.125-.138.187-.087.149.008.012.021-.002.313-.067.169-.03.201-.035.092.042.01.044-.036.088-.216.053-.253.051-.377.09-.004.003.005.006.17.016.072.004h.178l.33.025.087.057.052.07-.008.053-.133.068-.18-.043-.42-.1-.143-.035h-.02v.012l.12.117.22.198.274.256.014.063-.035.05-.037-.006-.242-.181-.093-.082-.211-.178h-.014v.019l.048.071.257.386.014.119-.019.038-.067.023-.073-.013-.15-.21-.155-.238-.125-.213-.016.008-.074.796-.034.04-.08.03-.067-.05-.035-.082.035-.161.043-.211.035-.168.03-.208.02-.07-.002-.004-.015.002-.157.215-.239.323-.189.202-.045.018-.079-.04.008-.073.043-.064.262-.333.158-.206.102-.12-.001-.017h-.006l-.695.451-.124.016-.053-.05.007-.081.025-.027.209-.144Z'/></svg>",
"folder-claude": "<svg viewBox='0 0 4.233 4.233'><path fill='#ff7043' d='m1.831.997-.17-.142a.27.27 0 0 0-.17-.061H.53a.265.265 0 0 0-.264.264v2.117a.265.265 0 0 0 .264.265h3.175a.265.265 0 0 0 .265-.265V1.323a.265.265 0 0 0-.265-.265H2.001a.27.27 0 0 1-.17-.061'/><path fill='#ffccbc' d='m2.103 3.091.517-.29.009-.025-.009-.014h-.025l-.086-.006-.296-.008-.256-.01-.248-.014-.063-.013-.058-.077.006-.039.052-.035.075.007.167.01.25.018.18.01.268.029h.043l.006-.017-.015-.011-.01-.01-.26-.176-.279-.185-.146-.106-.08-.054-.04-.05-.016-.111.071-.08.097.007.025.007.097.075.21.162.272.2.04.034.016-.011.002-.008-.018-.03-.148-.268-.159-.273-.07-.113-.019-.068a.3.3 0 0 1-.011-.08l.082-.111.045-.015.11.015.045.04.068.155.11.244.17.332.05.098.027.092.01.028h.017V2.33l.014-.187.026-.23.025-.295.009-.084.041-.1.082-.053.064.03.052.075-.007.049-.031.203-.061.318-.04.213h.023l.027-.027.107-.143.181-.226.08-.09.093-.099.06-.047h.113l.084.124-.038.127-.116.148-.097.125-.138.187-.087.149.008.012.021-.002.313-.067.169-.03.201-.035.092.042.01.044-.036.088-.216.053-.253.051-.377.09-.004.003.005.006.17.016.072.004h.178l.33.025.087.057.052.07-.008.053-.133.068-.18-.043-.42-.1-.143-.035h-.02v.012l.12.117.22.198.274.256.014.063-.035.05-.037-.006-.242-.181-.093-.082-.211-.178h-.014v.019l.048.071.257.386.014.119-.019.038-.067.023-.073-.013-.15-.21-.155-.238-.125-.213-.016.008-.074.796-.034.04-.08.03-.067-.05-.035-.082.035-.161.043-.211.035-.168.03-.208.02-.07-.002-.004-.015.002-.157.215-.239.323-.189.202-.045.018-.079-.04.008-.073.043-.064.262-.333.158-.206.102-.12-.001-.017h-.006l-.695.451-.124.016-.053-.05.007-.081.025-.027.209-.144Z'/></svg>",
"folder-client-open": "<svg viewBox='0 0 32 32'><path fill='#039be5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#b3e5fc' d='M15 12a1 1 0 0 0-1 1v10.994h-4v4h12v-4h-6V14h14v-2.006Z'/><path fill='#b3e5fc' d='M31 16h-6a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V17a1 1 0 0 0-1-1m-1 8h-4v-6h4Z'/></svg>",
"folder-client": "<svg viewBox='0 0 32 32'><path fill='#039be5' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#b3e5fc' d='M15 12a1 1 0 0 0-1 1v10.994h-4v4h12v-4h-6V14h14v-2.006Z'/><path fill='#b3e5fc' d='M31 16h-6a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V17a1 1 0 0 0-1-1m-1 8h-4v-6h4Z'/></svg>",
"folder-cline-open": "<svg viewBox='0 0 32 32'><path fill='#42a5f5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#bbdefb' d='M23 12a2 2 0 0 0-2 2h-1c-2.216 0-4 1.784-4 4l-2 3 2 3c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4l2-3-2-3c0-2.216-1.784-4-4-4h-1a2 2 0 0 0-2-2m-2 6c.554 0 1 .446 1 1v4c0 .554-.446 1-1 1s-1-.446-1-1v-4c0-.554.446-1 1-1m4 0c.554 0 1 .446 1 1v4c0 .554-.446 1-1 1s-1-.446-1-1v-4c0-.554.446-1 1-1'/></svg>",
@@ -396,6 +401,8 @@
"folder-intellij-open_light": "<svg viewBox='0 0 32 32'><defs data-mit-no-recolor='true'><linearGradient id='a' x1='.445' x2='104.977' y1='3611.926' y2='3548.833' gradientTransform='translate(18.126 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#fdd835'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='b' x1='22.55' x2='117.962' y1='3460.434' y2='3543.963' gradientTransform='translate(18.126 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.57' stop-color='#ff6e40'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='c' x1='28.608' x2='-27.937' y1='3536.154' y2='3500.841' gradientTransform='translate(18.126 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#8e24aa'/><stop offset='.385' stop-color='#ab47bc'/><stop offset='.765' stop-color='#ec407a'/><stop offset='.957' stop-color='#ec407a'/></linearGradient><linearGradient id='d' x1='27.588' x2='-27.616' y1='3456.176' y2='3501.769' gradientTransform='translate(18.126 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.364' stop-color='#ec407a'/><stop offset='1' stop-color='#ec407a'/></linearGradient></defs><path fill='#b0bec5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='url(#a)' d='M30.93 22.519a.68.68 0 0 0 .22-.47.69.69 0 0 0-.647-.72.72.72 0 0 0-.485.161l-12.314 6.745a1.44 1.44 0 0 0-.69.602 1.48 1.48 0 0 0 .506 2.03l.022.013a1.51 1.51 0 0 0 1.573-.03c.03-.029.073-.043.103-.073l11.461-8.053a2 2 0 0 0 .25-.205Z'/><path fill='url(#b)' d='m30.959 21.534-9.376-9.199a1.133 1.133 0 1 0-1.66 1.543 2 2 0 0 0 .176.147l9.904 8.48a.76.76 0 0 0 .441.19.69.69 0 0 0 .72-.646.73.73 0 0 0-.205-.515'/><path fill='url(#c)' d='M21.892 20.711c-.015 0-5.79-4.555-5.907-4.628l-.265-.133a1.644 1.644 0 0 0-1.44 2.94 1.3 1.3 0 0 0 .294.131c.059.03 6.671 2.763 6.671 2.763a.63.63 0 0 0 .647-1.073'/><path fill='url(#d)' d='M20.746 11.968a1.2 1.2 0 0 0-.676.22l-5.849 3.939c-.014.014-.03.014-.03.029h-.014a1.638 1.638 0 0 0 .397 2.865 1.61 1.61 0 0 0 1.528-.205 1.4 1.4 0 0 0 .265-.235l5.084-4.585a1.132 1.132 0 0 0-.705-2.028'/></svg>",
"folder-intellij": "<svg viewBox='0 0 32 32'><defs data-mit-no-recolor='true'><linearGradient id='a' x1='-338.646' x2='-234.114' y1='3272.835' y2='3209.742' gradientTransform='translate(55.497 -331.024)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#fdd835'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='b' x1='-316.541' x2='-221.129' y1='3121.343' y2='3204.873' gradientTransform='translate(55.497 -331.024)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.57' stop-color='#ff6e40'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='c' x1='-310.483' x2='-367.028' y1='3197.064' y2='3161.75' gradientTransform='translate(55.497 -331.024)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#8e24aa'/><stop offset='.385' stop-color='#ab47bc'/><stop offset='.765' stop-color='#ec407a'/><stop offset='.957' stop-color='#ec407a'/></linearGradient><linearGradient id='d' x1='-311.503' x2='-366.707' y1='3117.085' y2='3162.678' gradientTransform='translate(55.497 -331.024)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.364' stop-color='#ec407a'/><stop offset='1' stop-color='#ec407a'/></linearGradient></defs><path fill='#546e7a' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='url(#a)' d='M30.93 22.519a.68.68 0 0 0 .22-.47.69.69 0 0 0-.647-.72.72.72 0 0 0-.485.161l-12.314 6.745a1.44 1.44 0 0 0-.69.602 1.48 1.48 0 0 0 .506 2.03l.022.013a1.51 1.51 0 0 0 1.573-.03c.03-.029.073-.043.103-.073l11.461-8.053a2 2 0 0 0 .25-.205Z'/><path fill='url(#b)' d='m30.959 21.534-9.376-9.199a1.133 1.133 0 1 0-1.66 1.543 2 2 0 0 0 .176.147l9.904 8.48a.76.76 0 0 0 .441.19.69.69 0 0 0 .72-.646.73.73 0 0 0-.205-.515'/><path fill='url(#c)' d='M21.892 20.711c-.015 0-5.79-4.555-5.907-4.628l-.265-.133a1.644 1.644 0 0 0-1.44 2.94 1.3 1.3 0 0 0 .294.131c.059.03 6.671 2.763 6.671 2.763a.63.63 0 0 0 .647-1.073'/><path fill='url(#d)' d='M20.746 11.968a1.2 1.2 0 0 0-.676.22l-5.849 3.939c-.014.014-.03.014-.03.029h-.014a1.638 1.638 0 0 0 .397 2.865 1.61 1.61 0 0 0 1.528-.205 1.4 1.4 0 0 0 .265-.235l5.084-4.585a1.132 1.132 0 0 0-.705-2.028'/></svg>",
"folder-intellij_light": "<svg viewBox='0 0 32 32'><defs data-mit-no-recolor='true'><linearGradient id='a' x1='-338.646' x2='-234.114' y1='3611.926' y2='3548.833' gradientTransform='translate(55.497 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#fdd835'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='b' x1='-316.541' x2='-221.129' y1='3460.434' y2='3543.963' gradientTransform='translate(55.497 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.57' stop-color='#ff6e40'/><stop offset='1' stop-color='#f57c00'/></linearGradient><linearGradient id='c' x1='-310.483' x2='-367.028' y1='3536.154' y2='3500.841' gradientTransform='translate(55.497 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#8e24aa'/><stop offset='.385' stop-color='#ab47bc'/><stop offset='.765' stop-color='#ec407a'/><stop offset='.957' stop-color='#ec407a'/></linearGradient><linearGradient id='d' x1='-311.503' x2='-366.707' y1='3456.176' y2='3501.769' gradientTransform='translate(55.497 -368.395)scale(.11021)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ef5350'/><stop offset='.364' stop-color='#ec407a'/><stop offset='1' stop-color='#ec407a'/></linearGradient></defs><path fill='#b0bec5' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='url(#a)' d='M30.93 22.519a.68.68 0 0 0 .22-.47.69.69 0 0 0-.647-.72.72.72 0 0 0-.485.161l-12.314 6.745a1.44 1.44 0 0 0-.69.602 1.48 1.48 0 0 0 .506 2.03l.022.013a1.51 1.51 0 0 0 1.573-.03c.03-.029.073-.043.103-.073l11.461-8.053a2 2 0 0 0 .25-.205Z'/><path fill='url(#b)' d='m30.959 21.534-9.376-9.199a1.133 1.133 0 1 0-1.66 1.543 2 2 0 0 0 .176.147l9.904 8.48a.76.76 0 0 0 .441.19.69.69 0 0 0 .72-.646.73.73 0 0 0-.205-.515'/><path fill='url(#c)' d='M21.892 20.711c-.015 0-5.79-4.555-5.907-4.628l-.265-.133a1.644 1.644 0 0 0-1.44 2.94 1.3 1.3 0 0 0 .294.131c.059.03 6.671 2.763 6.671 2.763a.63.63 0 0 0 .647-1.073'/><path fill='url(#d)' d='M20.746 11.968a1.2 1.2 0 0 0-.676.22l-5.849 3.939c-.014.014-.03.014-.03.029h-.014a1.638 1.638 0 0 0 .397 2.865 1.61 1.61 0 0 0 1.528-.205 1.4 1.4 0 0 0 .265-.235l5.084-4.585a1.132 1.132 0 0 0-.705-2.028'/></svg>",
"folder-interceptor-open": "<svg viewBox='0 0 32 32'><path fill='#ff9800' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><g fill='#ffe0b2'><rect width='6' height='4' x='12' y='18' rx='2'/><rect width='4' height='16' x='20' y='12' rx='2'/><rect width='6' height='4' x='26' y='18' rx='2'/></g></svg>",
"folder-interceptor": "<svg viewBox='0 0 32 32'><path fill='#ff9800' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><g fill='#ffe0b2'><rect width='6' height='4' x='12' y='18' rx='2'/><rect width='4' height='16' x='20' y='12' rx='2'/><rect width='6' height='4' x='26' y='18' rx='2'/></g></svg>",
"folder-interface-open": "<svg viewBox='0 0 32 32'><path fill='#1976d2' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#bbdefb' d='M16 12v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V12a2 2 0 0 0-2-2H18a2 2 0 0 0-2 2m14 14H18v-4h12Zm0-6H18v-4h12Z'/></svg>",
"folder-interface": "<svg viewBox='0 0 32 32'><path fill='#1976d2' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#bbdefb' d='M16 12v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V12a2 2 0 0 0-2-2H18a2 2 0 0 0-2 2m14 14H18v-4h12Zm0-6H18v-4h12Z'/></svg>",
"folder-ios-open": "<svg viewBox='0 0 32 32'><path fill='#78909c' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#cfd8dc' d='M12 18h2v10h-2zm0-4h2v2h-2zm4 1v12a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V15a1 1 0 0 0-1-1h-6a1 1 0 0 0-1 1m6 11h-4V16h4Zm10-10v-2h-5a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h3v4h-4v2h5a1 1 0 0 0 1-1v-6a1 1 0 0 0-1-1h-3v-4Z'/></svg>",
@@ -466,6 +473,8 @@
"folder-mock": "<svg viewBox='0 0 32 32'><path fill='#8d6e63' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#d7ccc8' d='M16 24.667V28h3.333l9.83-9.83-3.333-3.333Zm15.74-9.074a.885.885 0 0 0 .001-1.252v-.001l-2.08-2.08a.885.885 0 0 0-1.253-.001l-1.627 1.627 3.333 3.333Z'/></svg>",
"folder-mojo-open": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffccbc' d='M30.495 17.1a9 9 0 0 0-.88-.913c-.765-.663-1.638-1.14-2.365-1.84A5.4 5.4 0 0 1 26.253 8a7.5 7.5 0 0 0-2.845 1.462 8.59 8.59 0 0 0-2.743 9.877.8.8 0 0 1 .094.364.62.62 0 0 1-.4.556.72.72 0 0 1-.757-.135 5.42 5.42 0 0 1-.785-5.87 7.8 7.8 0 0 0-2.802 6.469 8 8 0 0 0 .335 1.669 7.2 7.2 0 0 0 .808 1.918 8.02 8.02 0 0 0 5.675 3.566 8.8 8.8 0 0 0 6.934-1.769 6.44 6.44 0 0 0 1.746-7.324l-.145-.285a12 12 0 0 0-.88-1.398m-3.61 6.99a4 4 0 0 1-1.258.662 3.33 3.33 0 0 1-3.318-.913 3.13 3.13 0 0 0 2.415-2.275 6.2 6.2 0 0 0-.32-2.467 4 4 0 0 1 .19-2.282 7 7 0 0 0 .727 1.17c.873 1.112 2.256 1.597 2.554 3.109a1.7 1.7 0 0 1 .073.47 3.34 3.34 0 0 1-1.063 2.525Z'/></svg>",
"folder-mojo": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffccbc' d='M30.495 17.1a9 9 0 0 0-.88-.913c-.765-.663-1.638-1.14-2.365-1.84A5.4 5.4 0 0 1 26.253 8a7.5 7.5 0 0 0-2.845 1.462 8.59 8.59 0 0 0-2.743 9.877.8.8 0 0 1 .094.364.62.62 0 0 1-.4.556.72.72 0 0 1-.757-.135 5.42 5.42 0 0 1-.785-5.87 7.8 7.8 0 0 0-2.802 6.469 8 8 0 0 0 .335 1.669 7.2 7.2 0 0 0 .808 1.918 8.02 8.02 0 0 0 5.675 3.566 8.8 8.8 0 0 0 6.934-1.769 6.44 6.44 0 0 0 1.746-7.324l-.145-.285a12 12 0 0 0-.88-1.398m-3.61 6.99a4 4 0 0 1-1.258.662 3.33 3.33 0 0 1-3.318-.913 3.13 3.13 0 0 0 2.415-2.275 6.2 6.2 0 0 0-.32-2.467 4 4 0 0 1 .19-2.282 7 7 0 0 0 .727 1.17c.873 1.112 2.256 1.597 2.554 3.109a1.7 1.7 0 0 1 .073.47 3.34 3.34 0 0 1-1.063 2.525Z'/></svg>",
"folder-molecule-open": "<svg viewBox='0 0 32 32'><path fill='#ff9800' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffe0b2' d='M18 23a1 1 0 1 1-1-1 1 1 0 0 1 1 1m14 0a5 5 0 1 1-8.86-3.143 4.6 4.6 0 0 1-2.28 0 5.049 5.049 0 1 1-2.72-1.714 5 5 0 1 1 7.72 0A4.96 4.96 0 0 1 32 23m-12 0a3 3 0 1 0-3 3 3 3 0 0 0 3-3m2-5a3 3 0 1 0-3-3 3 3 0 0 0 3 3m8 5a3 3 0 1 0-3 3 3 3 0 0 0 3-3m-3-1a1 1 0 1 0 1 1 1 1 0 0 0-1-1m-5-8a1 1 0 1 0 1 1 1 1 0 0 0-1-1'/></svg>",
"folder-molecule": "<svg viewBox='0 0 32 32'><path fill='#ff9800' d='m13.844 7.6-1.288-1.073a2 2 0 0 0-1.28-.463H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2v-14a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffe0b2' d='M18 23a1 1 0 1 1-1-1 1 1 0 0 1 1 1m14 0a5 5 0 1 1-8.86-3.143 4.6 4.6 0 0 1-2.28 0 5.049 5.049 0 1 1-2.72-1.714 5 5 0 1 1 7.72 0A4.96 4.96 0 0 1 32 23m-12 0a3 3 0 1 0-3 3 3 3 0 0 0 3-3m2-5a3 3 0 1 0-3-3 3 3 0 0 0 3 3m8 5a3 3 0 1 0-3 3 3 3 0 0 0 3-3m-3-1a1 1 0 1 0 1 1 1 1 0 0 0-1-1m-5-8a1 1 0 1 0 1 1 1 1 0 0 0-1-1'/></svg>",
"folder-moon-open": "<svg viewBox='0 0 32 32'><path fill='#7e57c2' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#d1c4e9' d='M32 14a3.995 3.995 0 0 0-7.64-1.64A7.7 7.7 0 0 0 22 12a8 8 0 1 0 8 8 7.7 7.7 0 0 0-.36-2.36A3.99 3.99 0 0 0 32 14m-8 8a4 4 0 0 1 0-8 4 4 0 0 0 4 4 4 4 0 0 1-4 4'/></svg>",
"folder-moon": "<svg viewBox='0 0 32 32'><path fill='#7e57c2' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#d1c4e9' d='M32 14a3.995 3.995 0 0 0-7.64-1.64A7.7 7.7 0 0 0 22 12a8 8 0 1 0 8 8 7.7 7.7 0 0 0-.36-2.36A3.99 3.99 0 0 0 32 14m-8 8a4 4 0 0 1 0-8 4 4 0 0 0 4 4 4 4 0 0 1-4 4'/></svg>",
"folder-netlify-open": "<svg viewBox='0 0 32 32'><path fill='#26a69a' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#a7ffeb' d='M22 16h-4v6h2v-4h1.5a.5.5 0 0 1 .5.5V22h2v-4a2 2 0 0 0-2-2'/><rect width='6' height='2' x='26' y='18' fill='#a7ffeb' rx='.5'/><rect width='2' height='6' x='20' y='8' fill='#a7ffeb' rx='.5'/><rect width='6' height='2' x='10' y='18' fill='#a7ffeb' rx='.5'/><rect width='2' height='6' x='20' y='24' fill='#a7ffeb' rx='.5'/><path fill='#a7ffeb' d='m13 12.172 1.414-1.414 2.828 2.828L15.828 15zM15.828 23l1.414 1.414-2.828 2.828L13 25.828z'/></svg>",
@@ -493,6 +502,8 @@
"folder-obsidian-open": "<svg fill-rule='evenodd' clip-rule='evenodd' image-rendering='optimizeQuality' shape-rendering='geometricPrecision' text-rendering='geometricPrecision' viewBox='0 0 512 512'><path fill='#673ab7' d='M463.47 192H151.06c-13.77 0-26 8.82-30.35 21.89L64 384V160h384c0-17.67-14.33-32-32-32H241.98a32 32 0 0 1-20.48-7.42l-20.6-17.15c-5.75-4.8-13-7.43-20.48-7.43H64c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h352l76.88-179.39c1.7-3.98 2.59-8.28 2.59-12.61 0-17.67-14.33-32-32-32'/><g fill='#d1c4e9'><path d='M336.2 318.24c8.07-1.51 12.6-2.02 21.66-2.02-34.18-89.72 48.95-139.27 18.63-155.11-17-8.88-52.32 37.77-72.93 56.26l-10.67 37.41c19.77 16.2 36.25 39.63 43.31 63.46m75.04 128.91c13.05 3.85 26.66-5.92 28.52-19.42 1.35-9.81 3.51-20.65 8.24-30.94-2.66-7.51-25.72-71.18-104.74-56.39 7.6 31.4-4.15 64.54-22.83 91.02 33.14.31 59.29 6.45 90.81 15.73'/><path d='M478.76 346.86c7.02-12.43-16.61-22.28-28.74-50.78-10.52-24.69 4.93-53.82-8.18-66.23l-40.17-38.02c-14.09 38.27-40.29 56.91-17.12 123.38 37.13 6.98 67.48 27.2 77.55 58.42 0 0 13.67-21.49 16.66-26.77m-221.26 5.78c-8.21 18.67 17.96 36.81 43.46 63.29 29-40.73 24.17-88.95-15.12-127.91z'/></g></svg>",
"folder-obsidian": "<svg fill-rule='evenodd' clip-rule='evenodd' image-rendering='optimizeQuality' shape-rendering='geometricPrecision' text-rendering='geometricPrecision' viewBox='0 0 512 512'><path fill='#673ab7' d='m221.5 120.58-20.6-17.16A32 32 0 0 0 180.42 96H64c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32H241.98a32 32 0 0 1-20.48-7.42'/><g fill='#d1c4e9'><path d='M336.2 318.24c8.07-1.51 12.6-2.02 21.66-2.02-34.18-89.72 48.95-139.27 18.63-155.11-17-8.88-52.32 37.77-72.93 56.26l-10.67 37.41c19.77 16.2 36.25 39.63 43.31 63.46m75.04 128.91c13.05 3.85 26.66-5.92 28.52-19.42 1.35-9.81 3.51-20.65 8.24-30.94-2.66-7.51-25.72-71.18-104.74-56.39 7.6 31.4-4.15 64.54-22.83 91.02 33.14.31 59.29 6.45 90.81 15.73'/><path d='M478.76 346.86c7.02-12.43-16.61-22.28-28.74-50.78-10.52-24.69 4.93-53.82-8.18-66.23l-40.17-38.02c-14.09 38.27-40.29 56.91-17.12 123.38 37.13 6.98 67.48 27.2 77.55 58.42 0 0 13.67-21.49 16.66-26.77m-221.26 5.78c-8.21 18.67 17.96 36.81 43.46 63.29 29-40.73 24.17-88.95-15.12-127.91z'/></g></svg>",
"folder-open": "<svg viewBox='0 0 16 16'><path fill='#90a4ae' d='M14.483 6H4.721a1 1 0 0 0-.949.684L2 12V5h12a1 1 0 0 0-1-1H7.562a1 1 0 0 1-.64-.232l-.644-.536A1 1 0 0 0 5.638 3H2a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h11l2.403-5.606A1 1 0 0 0 14.483 6'/></svg>",
"folder-organism-open": "<svg viewBox='0 0 32 32'><path fill='#009688' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><circle cx='28' cy='24' r='4' fill='#b2dfdb'/><circle cx='20' cy='24' r='4' fill='#b2dfdb'/><circle cx='28' cy='16' r='4' fill='#b2dfdb'/><circle cx='20' cy='16' r='4' fill='#b2dfdb'/></svg>",
"folder-organism": "<svg viewBox='0 0 32 32'><path fill='#009688' d='m13.844 7.6-1.288-1.073a2 2 0 0 0-1.28-.463H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2v-14a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><circle cx='28' cy='24' r='4' fill='#b2dfdb'/><circle cx='20' cy='24' r='4' fill='#b2dfdb'/><circle cx='28' cy='16' r='4' fill='#b2dfdb'/><circle cx='20' cy='16' r='4' fill='#b2dfdb'/></svg>",
"folder-other-open": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffccbc' d='M22 10a10 10 0 1 0 10 10 10 10 0 0 0-10-10m-6 12.125a2 2 0 1 1 2-2 2 2 0 0 1-2 2m6 0a2 2 0 1 1 2-2 2 2 0 0 1-2 2m6 0a2 2 0 1 1 2-2 2 2 0 0 1-2 2'/></svg>",
"folder-other": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffccbc' d='M22 10a10 10 0 1 0 10 10 10 10 0 0 0-10-10m-6 12.125a2 2 0 1 1 2-2 2 2 0 0 1-2 2m6 0a2 2 0 1 1 2-2 2 2 0 0 1-2 2m6 0a2 2 0 1 1 2-2 2 2 0 0 1-2 2'/></svg>",
"folder-packages-open": "<svg viewBox='0 0 32 32'><path fill='#1e88e5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#bbdefb' d='M31.2 12.933 29.6 10.8A2 2 0 0 0 28 10h-8a2 2 0 0 0-1.6.8l-1.6 2.133a4 4 0 0 0-.8 2.4V26a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V15.333a4 4 0 0 0-.8-2.4M20 12h8l1.5 2h-11Zm6 10v4h-4v-4h-4l6-6 6 6Z'/></svg>",
@@ -521,6 +532,8 @@
"folder-private": "<svg viewBox='0 0 32 32'><path fill='#ff5252' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffcdd2' d='M24 14a8 8 0 1 0 8 8 8 8 0 0 0-8-8m6 8a5.96 5.96 0 0 1-1.115 3.471l-8.356-8.356A5.99 5.99 0 0 1 30 22m-12 0a5.96 5.96 0 0 1 1.115-3.471l8.356 8.356A5.99 5.99 0 0 1 18 22'/></svg>",
"folder-project-open": "<svg viewBox='0 0 32 32'><path fill='#1e88e5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#bbdefb' d='M27.354 20.871 32 25.343l-2.74 2.624-4.613-4.471v-.737l1.947-1.888zm.751-2.023-.8-.768-3.953 3.839v1.577L18.706 28 16 25.343l4.612-4.472h1.626l.644-.624-3.17-3.08h-1.071l-2.32-2.271 2.162-2.096 2.311 2.24v1.048l3.21 3.072 2.194-2.128-.791-.808 1.072-1.049h-2.196l-.536-.52L26.48 12l.545.527v2.129l1.081-1.057 2.707 2.625a2.22 2.22 0 0 1 0 3.184l-1.627-1.609Z'/></svg>",
"folder-project": "<svg viewBox='0 0 32 32'><path fill='#1e88e5' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#bbdefb' d='M27.354 20.871 32 25.343l-2.74 2.624-4.613-4.471v-.737l1.947-1.888zm.751-2.023-.8-.768-3.953 3.839v1.577L18.706 28 16 25.343l4.612-4.472h1.626l.644-.624-3.17-3.08h-1.071l-2.32-2.271 2.162-2.096 2.311 2.24v1.048l3.21 3.072 2.194-2.128-.791-.808 1.072-1.049h-2.196l-.536-.52L26.48 12l.545.527v2.129l1.081-1.057 2.707 2.625a2.22 2.22 0 0 1 0 3.184l-1.627-1.609Z'/></svg>",
"folder-prompts-open": "<svg viewBox='0 0 32 32'><path fill='#5c6bc0' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#c5cae9' d='M17.235 12.447a4.21 4.21 0 0 1 3.314 3.313 1.471 1.471 0 0 0 2.904 0 4.21 4.21 0 0 1 3.312-3.313 1.471 1.471 0 0 0 0-2.904 4.21 4.21 0 0 1-3.312-3.313 1.47 1.47 0 0 0-2.903 0l-.001.001a4.21 4.21 0 0 1-3.314 3.312 1.471 1.471 0 0 0 0 2.904m13.942 6.585a2.805 2.805 0 0 1-2.208-2.209.98.98 0 0 0-1.936 0v.001a2.805 2.805 0 0 1-2.21 2.208.98.98 0 0 0 0 1.936 2.805 2.805 0 0 1 2.21 2.209.98.98 0 0 0 1.936 0 2.805 2.805 0 0 1 2.208-2.209.98.98 0 0 0 0-1.936'/><rect width='10' height='2' x='12' y='22' fill='#c5cae9' rx='1'/><rect width='10' height='2' x='12' y='18' fill='#c5cae9' rx='1'/><path fill='#c5cae9' d='M25 24a1 1 0 0 0-1 1 1 1 0 0 1-1 1H11a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h6a1 1 0 0 0 0-2h-6a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 1 1 0 0 0-1-1'/></svg>",
"folder-prompts": "<svg viewBox='0 0 32 32'><path fill='#5c6bc0' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#c5cae9' d='M17.235 12.447a4.21 4.21 0 0 1 3.314 3.313 1.471 1.471 0 0 0 2.904 0 4.21 4.21 0 0 1 3.312-3.313 1.471 1.471 0 0 0 0-2.904 4.21 4.21 0 0 1-3.312-3.313 1.47 1.47 0 0 0-2.903 0l-.001.001a4.21 4.21 0 0 1-3.314 3.312 1.471 1.471 0 0 0 0 2.904m13.942 6.585a2.805 2.805 0 0 1-2.208-2.209.98.98 0 0 0-1.936 0v.001a2.805 2.805 0 0 1-2.21 2.208.98.98 0 0 0 0 1.936 2.805 2.805 0 0 1 2.21 2.209.98.98 0 0 0 1.936 0 2.805 2.805 0 0 1 2.208-2.209.98.98 0 0 0 0-1.936'/><rect width='10' height='2' x='12' y='22' fill='#c5cae9' rx='1'/><rect width='10' height='2' x='12' y='18' fill='#c5cae9' rx='1'/><path fill='#c5cae9' d='M25 24a1 1 0 0 0-1 1 1 1 0 0 1-1 1H11a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h6a1 1 0 0 0 0-2h-6a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 1 1 0 0 0-1-1'/></svg>",
"folder-proto-open": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#ffccbc' d='m22 12-10 6v4l10 6 10-6v-4Zm0 12-6.667-4L22 16l6.667 4Z'/></svg>",
"folder-proto": "<svg viewBox='0 0 32 32'><path fill='#ff7043' d='m13.844 7.536-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464'/><path fill='#ffccbc' d='m22 12-10 6v4l10 6 10-6v-4Zm0 12-6.667-4L22 16l6.667 4Z'/></svg>",
"folder-public-open": "<svg viewBox='0 0 32 32'><path fill='#039be5' d='M28.967 12H9.442a2 2 0 0 0-1.898 1.368L4 24V10h24a2 2 0 0 0-2-2H15.124a2 2 0 0 1-1.28-.464l-1.288-1.072A2 2 0 0 0 11.276 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h22l4.805-11.212A2 2 0 0 0 28.967 12'/><path fill='#b3e5fc' d='M22 10a10 10 0 1 0 10 10 10 10 0 0 0-10-10m6.918 6H25.96a15.8 15.8 0 0 0-1.342-3.54 8.04 8.04 0 0 1 4.3 3.54M22 12a14.1 14.1 0 0 1 1.89 4h-3.78A14.1 14.1 0 0 1 22 12m-2.618.46A15.8 15.8 0 0 0 18.04 16h-2.958a8.04 8.04 0 0 1 4.3-3.54M14.263 22a7.7 7.7 0 0 1 0-4h3.407a15.5 15.5 0 0 0 0 4Zm.82 2h2.957a15.8 15.8 0 0 0 1.342 3.54 8.04 8.04 0 0 1-4.3-3.54ZM22 28a14.1 14.1 0 0 1-1.89-4h3.78A14.1 14.1 0 0 1 22 28m2.31-6h-4.62a13.4 13.4 0 0 1 0-4h4.62a13.4 13.4 0 0 1 0 4m.308 5.54A15.8 15.8 0 0 0 25.96 24h2.958a8.04 8.04 0 0 1-4.3 3.54M29.737 22H26.33a15.5 15.5 0 0 0 0-4h3.407a7.7 7.7 0 0 1 0 4'/></svg>",
@@ -791,6 +804,7 @@
"lib": "<svg fill='none' viewBox='0 0 24 24'><path d='M0 0h24v24H0z'/><path fill='#8bc34a' d='M4 6H2v14c0 1.1.9 2 2 2h14v-2H4zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H8V4h12zM10 9h8v2h-8zm0 3h4v2h-4zm0-6h8v2h-8z'/></svg>",
"lighthouse": "<svg viewBox='0 0 24 24'><path fill='#f4511e' d='M8.852 10.182V8.364h.851V4.727h-.851v-.909L12.258 2l3.407 1.818v.91h-.852v3.636h.852v1.818h-1.073L9.226 13.49l.477-3.31h-.851zm4.258-1.818V4.727h-1.703v3.637zM8 22l.034-.218L15.792 17l.443 3.073L13.11 22zm.894-6.21L15.077 12l.443 3.064-7.154 4.409z'/></svg>",
"lilypond": "<svg viewBox='0 0 32 32'><path fill='#66bb6a' d='M10 8v11.023A4.986 4.986 0 1 0 11.9 24h.1V11.6l16-3.2v8.623A4.986 4.986 0 1 0 29.9 22h.1V4Z'/></svg>",
"lintstaged": "<svg viewBox='0 0 16 16'><path fill='#ff5252' d='M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7m0 2a5 5 0 0 1 5 5 5 5 0 0 1-.842 2.744L5.256 3.842A5 5 0 0 1 8 3M3.842 5.256l6.902 6.902A5 5 0 0 1 8 13a5 5 0 0 1-5-5 5 5 0 0 1 .842-2.744'/></svg>",
"liquid": "<svg viewBox='0 0 24 24'><path fill='#29b6f6' d='M12 21.669a6.927 6.927 0 0 1-6.927-6.927C5.073 10.124 12 2.33 12 2.33s6.927 7.793 6.927 12.41A6.927 6.927 0 0 1 12 21.67z'/></svg>",
"lisp": "<svg viewBox='0 0 32 32'><path fill='#ef5350' d='M16 2a14 14 0 1 0 14 14A14.003 14.003 0 0 0 16 2m8.93 20.43a11 11 0 0 1-7.19 4.43 6.094 6.094 0 0 1-4.79-5.9v-.05a5 5 0 0 1 .04-.66 7.95 7.95 0 0 1 2.3-4.95 5.99 5.99 0 0 0-2.23-9.9 11.004 11.004 0 0 1 11.87 17.03'/></svg>",
"livescript": "<svg viewBox='0 0 32 32'><path fill='#0277bd' d='M4 2h4v28H4z'/><path fill='#0277bd' d='M2 24h28v4H2zm8-20h2v18h-2zm2 16h16v2H12zm2-4h14v2H14zm0-12h2v12h-2zm4 8h10v2H18zm0-8h2v8h-2zm4 4h6v2h-6zm0-4h2v4h-2z'/><path fill='#0277bd' d='M6 24.586 23.271 7.315l1.414 1.414L7.415 26z'/></svg>",
@@ -798,7 +812,6 @@
"log": "<svg fill='none' viewBox='0 0 24 24'><path d='M0 0h24v24H0z'/><path fill='#afb42b' d='M19 5v9h-5v5H5V5zm0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10l6-6V5c0-1.1-.9-2-2-2m-7 11H7v-2h5zm5-4H7V8h10z'/></svg>",
"lolcode": "<svg viewBox='0 0 24 24'><path fill='#ef5350' d='m12 7.687-1.35.091c-.872-1.035-3.318-3.643-5.754-3.643 0 0-1.999 3.004-.04 7.013-.559.842-.904 1.278-.975 2.283l-1.958.294.213.995 1.786-.264.142.72-1.593.954.477.904 1.471-.904c1.167 2.477 4.12 3.735 7.581 3.735 3.46 0 6.414-1.258 7.58-3.735l1.472.904.477-.904-1.593-.953.142-.721 1.786.264.213-.995-1.958-.294c-.071-1.005-.416-1.441-.975-2.283 1.959-4.009-.04-7.013-.04-7.013-2.436 0-4.881 2.608-5.754 3.643zm-3.044 3.044a1.015 1.015 0 0 1 1.014 1.015 1.015 1.015 0 0 1-1.014 1.015 1.015 1.015 0 0 1-1.015-1.015 1.015 1.015 0 0 1 1.015-1.015m6.089 0a1.015 1.015 0 0 1 1.014 1.015 1.015 1.015 0 0 1-1.014 1.015 1.015 1.015 0 0 1-1.015-1.015 1.015 1.015 0 0 1 1.015-1.015m-4.06 3.045h2.03l-.71 1.41c.203.65.77 1.127 1.471 1.127a1.52 1.52 0 0 0 1.522-1.522h.508a2.03 2.03 0 0 1-2.03 2.03c-.761 0-1.42-.416-1.776-1.015a2.07 2.07 0 0 1-1.776 1.015 2.03 2.03 0 0 1-2.03-2.03h.508a1.52 1.52 0 0 0 1.522 1.522c.7 0 1.268-.477 1.471-1.126z'/></svg>",
"lottie": "<svg viewBox='0 0 32 32'><path fill='#00bfa5' d='M2 4v24a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2m20.237 8.11c-2.974.426-3.518 2.058-4.34 4.523-.92 2.764-2.145 6.436-7.635 7.217a1.996 1.996 0 1 1-.499-3.96c2.974-.426 3.518-2.058 4.34-4.523.92-2.764 2.145-6.436 7.635-7.217a1.996 1.996 0 1 1 .499 3.96'/></svg>",
"ltx.clone": "<svg viewBox='0 0 1024 1024'><path fill='#00bfa5' d='M80 192 64 320h32c16-80 16-96 63.242-96H176c8.837 0 16 7.163 16 16v352c0 8.837 0 16-32 16h-32v32h192v-32h-32c-32 0-32-7.163-32-16V240c0-8.837 7.163-16 16-16h16c48 0 48 16 64 96h32l-16-128zm560 0v32c16 0 45.713 0 52.57 16L776 434.666 708.57 592c-6.857 16-52.57 16-68.57 16v32h128v-32s-34.285 0-27.428-16L792 472l51.428 120c3.103 7.24-1.52 16-11.428 16v32h128v-32c-16 0-45.713 0-52.57-16L824 397.334 891.43 240c6.857-16 52.57-16 68.57-16v-32H832v32s34.285 0 27.428 16L808 360l-51.428-120c-3.103-7.24 1.52-16 11.428-16v-32zM320 384v32h32c32 0 32 7.163 32 16v352c0 8.837 0 16-32 16h-32v32h304l16-128h-32c-16 80-16 96-64 96h-64c-32 0-32-7.163-32-16V624h80c8.837 0 16 0 16 32v16h32V544h-32v16c0 32-7.163 32-16 32h-80V432c0-8.837 0-16 32-16h64c48 0 48 16 64 96h32l-16-128z'/></svg>",
"lua": "<svg viewBox='0 0 32 32'><path fill='#42a5f5' d='M30 6a3.86 3.86 0 0 1-1.167 2.833 4.024 4.024 0 0 1-5.666 0A3.86 3.86 0 0 1 22 6a3.86 3.86 0 0 1 1.167-2.833 4.024 4.024 0 0 1 5.666 0A3.86 3.86 0 0 1 30 6m-9.208 5.208A10.6 10.6 0 0 0 13 8a10.6 10.6 0 0 0-7.792 3.208A10.6 10.6 0 0 0 2 19a10.6 10.6 0 0 0 3.208 7.792A10.6 10.6 0 0 0 13 30a10.6 10.6 0 0 0 7.792-3.208A10.6 10.6 0 0 0 24 19a10.6 10.6 0 0 0-3.208-7.792m-1.959 7.625a4.024 4.024 0 0 1-5.666 0 4.024 4.024 0 0 1 0-5.666 4.024 4.024 0 0 1 5.666 0 4.024 4.024 0 0 1 0 5.666'/></svg>",
"luau": "<svg fill='none' viewBox='0 0 24 24'><path fill='#03a9f4' d='M22.495 6.331 6.33 2 2 18.164l16.164 4.33z'/><path fill='#fafafa' d='M19.933 7.81 16.7 6.944l-.866 3.233 3.233.866z'/></svg>",
"lyric": "<svg viewBox='0 0 32 32'><path fill='#50c5ef' d='M26 7.7c0-.1-.1-.2-.2-.3l-5.2-5.2c-.1-.1-.3-.2-.4-.2h-.1q-.15 0 0 0H7.7c-1 .1-1.7.8-1.7 1.8v24.5c0 1 .8 1.7 1.7 1.7h16.6c1 0 1.7-.8 1.7-1.7zq0 .15 0 0M22 12h-4v8c0 2.2-1.8 4-4 4s-4-1.8-4-4 1.8-4 4-4c.7 0 1.4.2 2 .6V8h6z'/></svg>",
@@ -873,6 +886,7 @@
"openapi": "<svg viewBox='0 0 24 24'><path fill='#8bc34a' d='M10.86 4.29h-.36a9 9 0 0 0-1.11.12h-.03l-.24.05-.09.02-.15.03h-.03a9 9 0 0 0-2.12.8l-.13.07-.16.09-.11.06h-.01l-.03.03.09.15 2.63 4.36.15-.09a4 4 0 0 1 .16-.08 3.6 3.6 0 0 1 1.18-.33 4 4 0 0 1 .36-.02V4.3zM5.98 5.75 5.61 6a9 9 0 0 0-.76.63l3.74 3.74.12-.1-.01-.02zm8.47 7.4-.01.17-.01.18a3.57 3.57 0 0 1-.8 1.92l-.11.13c-.04.04-.08.1-.13.13l3.73 3.73.24-.26a9 9 0 0 0 .76-.94l.03-.03.15-.23.03-.06a8.83 8.83 0 0 0 1.37-4.39v-.18l.01-.18h-5.26zM2 13.5v.08l.01.15.02.23V14l.02.19v.02l.03.2c.06.42.15.84.27 1.25l.07.2v.01l.06.19.02.04.05.15.03.07.04.12.04.1.04.09.05.12.04.07.06.14.1.2.01.03.1.17.02.04 4.5-2.71.03-.01a3.6 3.6 0 0 1-.33-1.18zM7.78 15l-4.51 2.7.21.34.01.01.01.02.02.03.24.34h.01v.01l.11.15.02.02.12.14.02.03.11.13.05.06.1.1.05.06.02.02.07.08.03.03.12.13 3.73-3.73a4 4 0 0 1-.13-.13l-.11-.13-.1-.13-.1-.14-.1-.15zm4.93 1.22-.16.08a3.6 3.6 0 0 1-1.7.43 3.6 3.6 0 0 1-1.03-.15l-.16-.05a3 3 0 0 1-.17-.07L7.62 21l-.07.18-.07.15h.02l.01.01.14.05.17.07c.03 0 .05.02.08.03a9 9 0 0 0 1.8.43l.16.02.14.02h.04a9 9 0 0 0 .38.03h.44a9 9 0 0 0 1.47-.11h.02l.15-.04.1-.01.23-.05a9 9 0 0 0 2.15-.8l.14-.08.15-.08.1-.06h.01l.01-.01.04-.02-.1-.15-.09-.16z'/><path fill='#689f38' d='M11.21 4.3v5.27a3.7 3.7 0 0 1 .8.17l3.89-3.88a9 9 0 0 0-.44-.29h-.02l-.14-.1-.09-.04-.08-.05-.14-.07-.02-.02a9 9 0 0 0-.95-.42l-.03-.01-.21-.08A9 9 0 0 0 12 4.36l-.08-.01h-.07l-.14-.02h-.05l-.17-.02h-.06l-.15-.01zM4.6 6.87 4.47 7l-.12.13a9 9 0 0 0-.75.93l-.04.05a6 6 0 0 0-.15.23l-.03.04a8.83 8.83 0 0 0-1.37 4.4v.17l-.01.18h5.26l.01-.18.01-.17a3.57 3.57 0 0 1 .8-1.92c.03-.05.08-.09.12-.13.04-.05.07-.1.12-.14L4.6 6.88zM18.14 8.1l-3.89 3.89c.1.26.15.52.18.8h5.28v-.08l-.02-.14v-.07l-.01-.17v-.04l-.03-.2v-.01l-.03-.21a9 9 0 0 0-.27-1.24v-.01l-.06-.2-.07-.19-.01-.04a6 6 0 0 0-.08-.22l-.05-.12-.08-.2-.05-.11-.1-.21-.02-.04-.08-.17V9.1l-.1-.17v-.01a9 9 0 0 0-.5-.82zm-5.01 7.82-.13.1.01.01 2.72 4.5.37-.25a9 9 0 0 0 .76-.63l-3.72-3.71zm-4.55 0-.01.02-3.72 3.71.16.16c.02 0 .04.02.06.04l.13.1.03.03.15.12.01.02.16.12a9 9 0 0 0 .7.47l.03.02a9 9 0 0 0 .45.25l.02.01a8 8 0 0 0 .4.2l.14-.32 1.87-4.54v-.02a3.6 3.6 0 0 1-.58-.39'/><path fill='#e0e0e0' d='M19.53 2a2.46 2.46 0 0 0-1.74.72 2.47 2.47 0 0 0-.47 2.84l-5.37 5.37a2.47 2.47 0 1 0 1.12 1.12l5.37-5.37a2.47 2.47 0 0 0 2.84-3.96A2.46 2.46 0 0 0 19.53 2'/></svg>",
"openapi_light": "<svg viewBox='0 0 24 24'><path fill='#8bc34a' d='M10.86 4.29h-.36a9 9 0 0 0-1.11.12h-.03l-.24.05-.09.02-.15.03h-.03a9 9 0 0 0-2.12.8l-.13.07-.16.09-.11.06h-.01l-.03.03.09.15 2.63 4.36.15-.09a4 4 0 0 1 .16-.08 3.6 3.6 0 0 1 1.18-.33 4 4 0 0 1 .36-.02V4.3zM5.98 5.75 5.61 6a9 9 0 0 0-.76.63l3.72 3.72.02.02.12-.1-.01-.02zm8.47 7.4-.01.17-.01.18a3.57 3.57 0 0 1-.8 1.92l-.11.13c-.04.04-.08.1-.13.13l3.73 3.73.12-.13.12-.13a9 9 0 0 0 .76-.94l.03-.03.15-.23.03-.06a8.83 8.83 0 0 0 1.37-4.39v-.18l.01-.18h-5.26zM2 13.5v.08l.01.15.02.23V14l.02.19v.02l.03.2c.06.42.15.84.27 1.25l.07.2v.01l.06.19.02.04.05.15.03.07.04.12.04.1.04.09.05.12.04.07.06.14.02.04.08.16.01.03.1.17.02.04 4.5-2.71.03-.01a3.6 3.6 0 0 1-.33-1.18zM7.78 15l-4.51 2.7.21.34.01.01.01.02.02.03.24.34h.01v.01l.11.15.02.02.12.14.02.03.11.13.05.06.1.1.05.06.02.02.07.08.03.03.12.13 3.73-3.73a4 4 0 0 1-.13-.13l-.11-.13-.1-.13-.1-.14-.1-.15zm4.93 1.22-.16.08a3.6 3.6 0 0 1-1.7.43 3.6 3.6 0 0 1-1.03-.15l-.16-.05a3 3 0 0 1-.17-.07L7.62 21l-.07.18-.07.15h.02l.01.01.14.05.17.07c.03 0 .05.02.08.03a9 9 0 0 0 1.8.43l.08.01.08.01.14.02h.04a9 9 0 0 0 .38.03h.44a9 9 0 0 0 1.47-.11h.02l.15-.04.1-.01.23-.05a9 9 0 0 0 2.15-.8l.14-.08.15-.08.1-.06h.01l.01-.01.04-.02-.1-.15-.09-.16z'/><path fill='#689f38' d='M11.21 4.3v5.27a3.7 3.7 0 0 1 .8.17l3.89-3.88a9 9 0 0 0-.44-.29h-.02l-.14-.1-.09-.04-.08-.05-.14-.07-.02-.02a9 9 0 0 0-.95-.42l-.03-.01-.21-.08A9 9 0 0 0 12 4.36l-.08-.01h-.07l-.14-.02h-.05l-.17-.02h-.06l-.15-.01zM4.6 6.87 4.47 7l-.12.13a9 9 0 0 0-.75.93l-.04.05a6 6 0 0 0-.15.23l-.03.04a8.83 8.83 0 0 0-1.37 4.4v.17l-.01.18h5.26l.01-.18.01-.17a3.57 3.57 0 0 1 .8-1.92c.03-.05.08-.09.12-.13.04-.05.07-.1.12-.14L4.6 6.88zM18.14 8.1l-3.89 3.89c.1.26.15.52.18.8h5.28v-.08l-.02-.14v-.07l-.01-.17v-.04l-.03-.2v-.01l-.03-.21a9 9 0 0 0-.27-1.24v-.01l-.06-.2-.07-.19-.01-.04a6 6 0 0 0-.08-.22l-.05-.12-.04-.1-.04-.1-.05-.11-.1-.21-.02-.04-.08-.17V9.1l-.1-.17v-.01a9 9 0 0 0-.5-.82zm-5.01 7.82-.13.1.01.01 2.72 4.5.37-.25a9 9 0 0 0 .76-.63l-3.72-3.71zm-4.55 0-.01.02-3.72 3.71.06.06.1.1c.02 0 .04.02.06.04l.13.1.03.03.15.12.01.02.16.12a9 9 0 0 0 .7.47l.03.02a9 9 0 0 0 .45.25l.02.01a8 8 0 0 0 .4.2l.14-.32 1.87-4.54v-.02a3.6 3.6 0 0 1-.58-.39'/><path fill='#424242' d='M19.53 2a2.46 2.46 0 0 0-1.74.72 2.47 2.47 0 0 0-.47 2.84l-5.37 5.37a2.47 2.47 0 1 0 1.12 1.12l5.37-5.37a2.47 2.47 0 0 0 2.84-3.96A2.46 2.46 0 0 0 19.53 2' data-mit-no-recolor='true'/></svg>",
"otne": "<svg viewBox='0 0 1024 1024'><g fill='#00c853'><path d='M512 254.16A257.84 257.84 0 0 0 254.16 512 257.84 257.84 0 0 0 512 769.841a257.84 257.84 0 0 0 257.841-257.84 257.84 257.84 0 0 0-257.84-257.842zM941.74 512A429.74 429.74 0 0 1 512 941.74 429.74 429.74 0 0 1 82.262 512 429.74 429.74 0 0 1 512 82.262 429.74 429.74 0 0 1 941.74 512'/><path d='M695.945 450.836h-92.08l-.005 122.318h92.084zm-122.854-122.78H450.92v367.89h122.17zm-152.942 122.78h-92.084v122.318h92.08z'/></g></svg>",
"oxlint": "<svg viewBox='0 0 16 16'><path fill='#ff7043' d='M8 1a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 1.75 2.38V7H5v1h2.25v5.5C5.467 13.193 3.897 12.523 3 11l1-1-3-2v2c0 2.266 2.88 5 7 5 2.764.13 7-1.779 7-5V8l-3 2 1 1c-.755 1.631-2.591 2.091-4.25 2.5V8H11V7H8.75V5.88A2.5 2.5 0 0 0 10.5 3.5 2.5 2.5 0 0 0 8 1m0 1.25A1.25 1.25 0 0 1 9.25 3.5 1.25 1.25 0 0 1 8 4.75 1.25 1.25 0 0 1 6.75 3.5 1.25 1.25 0 0 1 8 2.25'/></svg>",
"packship": "<svg viewBox='0 0 16 16'><path fill='#9575cd' d='M2.997 14.967c-.344-.086-.654-.345-.765-.64-.136-.36-.157-.283 1.119-4.186s1.181-3.58 1.01-3.467c-.741.491-1.703.082-1.95-.83-.175-.648.027-1.006.899-1.587 1.274-.85 1.979-1.476 2.603-2.312.492-.659.682-.798 1.194-.873.623-.09 1.204.138 1.418.56.075.147.02.153.417-.053 4.991-2.592 6.93 4.168 2.114 7.369-1.361.904-3.966 1.598-4.84 1.29l-.128-.045-.144.439c-.08.241-.378 1.16-.663 2.042-.622 1.929-.645 1.972-1.152 2.21-.228.106-.854.153-1.132.083m.729-.772c.272-.068.224.052 1.27-3.18 1.267-3.918 1.463-4.385 2.38-5.681 2.03-2.868 4.835-3.397 4.577-.864-.218 2.145-2.177 3.72-5 4.02-.493.052-.577.117-.647.496-.1.542.18.631 1.35.431 3.043-.52 5.106-2.398 5.391-4.906.365-3.207-3.167-3.65-5.56-.698-.289.356-.294.418.059-.698.392-1.241.389-1.266-.198-1.266-.306 0-.397.047-.604.31-.072.09-.243.31-.38.486-.58.745-1.443 1.49-2.632 2.275-.652.43-.708.542-.468.922.157.247.337.32.56.226.238-.099 1.576-1.11 2.002-1.51.124-.118.226-.205.226-.193s-.7 2.17-1.555 4.795a462 462 0 0 0-1.556 4.82c0 .198.407.31.785.215m3.962-6.61c2.008-.431 3.407-1.742 3.486-3.266.031-.597-.03-.691-.436-.666-1.12.068-3.05 2.1-3.756 3.956l-.034.087.218-.022a6 6 0 0 0 .522-.088'/></svg>",
"palette": "<svg viewBox='0 0 16 16'><path fill='#4fc3f7' d='M12.278 8a1.167 1.167 0 0 1-1.167-1.167 1.167 1.167 0 0 1 1.167-1.166 1.167 1.167 0 0 1 1.166 1.166A1.167 1.167 0 0 1 12.278 8M9.944 4.889a1.167 1.167 0 0 1-1.166-1.167 1.167 1.167 0 0 1 1.166-1.166 1.167 1.167 0 0 1 1.167 1.166A1.167 1.167 0 0 1 9.944 4.89m-3.888 0a1.167 1.167 0 0 1-1.167-1.167 1.167 1.167 0 0 1 1.167-1.166 1.167 1.167 0 0 1 1.166 1.166A1.167 1.167 0 0 1 6.056 4.89M3.722 8a1.167 1.167 0 0 1-1.166-1.167 1.167 1.167 0 0 1 1.166-1.166A1.167 1.167 0 0 1 4.89 6.833 1.167 1.167 0 0 1 3.722 8M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 1.167 1.167 0 0 0 1.167-1.167c0-.303-.117-.575-.304-.777a1.2 1.2 0 0 1-.295-.778 1.167 1.167 0 0 1 1.166-1.167h1.377A3.89 3.89 0 0 0 15 7.222C15 3.784 11.866 1 8 1'/></svg>",
"panda": "<svg viewBox='0 0 24 24'><path fill='#ffd740' d='M4.524 20.862c-.258-.317-.958-2.683-1.319-4.451-1.238-6.075.1-10.397 3.824-12.354 1.596-.838 2.918-1.114 5.37-1.118 3.212-.007 5.102.617 6.808 2.244 2.52 2.403 2.735 6.732.459 9.222-1.267 1.387-4.598 2.82-6.551 2.82h-.593l-.408-1.239c-.224-.68-.456-1.502-.516-1.825l-.108-.586.656.088c.777.104 1.89-.27 2.365-.798.998-1.102.824-3.595-.302-4.333-1.063-.697-3.124-.653-4.166.089-1.888 1.345-1.382 6.248 1.172 11.343.248.495.406.944.351.999-.054.055-1.624.1-3.49.1-2.519 0-3.431-.052-3.552-.2z'/></svg>",
@@ -910,6 +924,7 @@
"prisma": "<svg viewBox='0 0 32 32'><path fill='#00bfa5' d='m27.777 22.617-.459-.946L18.43 3.26a2.25 2.25 0 0 0-1.914-1.256A2 2 0 0 0 16.379 2a2.23 2.23 0 0 0-1.891 1.042L4.348 19.056a2.2 2.2 0 0 0 .025 2.417l4.957 7.488A2.34 2.34 0 0 0 11.29 30a2.4 2.4 0 0 0 .655-.092l14.387-4.149a2.32 2.32 0 0 0 1.458-1.234 2.21 2.21 0 0 0-.013-1.908m-3.538.604-11.268 3.25 4.075-19.033 7.568 15.671-.376.098Z'/></svg>",
"processing": "<svg fill='none' viewBox='0 0 32 32'><path stroke='#536dfe' stroke-width='8' d='M10 26c16 0 16-20 0-20'/></svg>",
"prolog": "<svg viewBox='0 0 24 24'><path fill='#ef5350' d='M12 15.385a5.1 5.1 0 0 0 1.862 1.693L12 18.94l-1.862-1.862A5.04 5.04 0 0 0 12 15.385m4.232-4.063a1.693 1.693 0 0 0-1.693 1.693 1.693 1.693 0 0 0 1.693 1.693 1.693 1.693 0 0 0 1.693-1.693c0-.94-.762-1.693-1.693-1.693m-8.464 0a1.693 1.693 0 0 0-1.693 1.693 1.693 1.693 0 0 0 1.693 1.693 1.693 1.693 0 0 0 1.693-1.693c0-.94-.762-1.693-1.693-1.693m8.464-2.116a3.385 3.385 0 0 1 3.385 3.386 3.385 3.385 0 0 1-3.385 3.385 3.385 3.385 0 0 1-3.386-3.385 3.385 3.385 0 0 1 3.386-3.386m-8.464 0a3.385 3.385 0 0 1 3.386 3.386 3.385 3.385 0 0 1-3.386 3.385 3.385 3.385 0 0 1-3.385-3.385 3.385 3.385 0 0 1 3.385-3.386M3.74 2.69c1.49 3.132.415 5.468-.584 7.787a5.1 5.1 0 0 0-.465 2.116 5.08 5.08 0 0 0 5.078 5.078 6 6 0 0 0 .533-.042l2.506 2.505L12 21.31l1.194-1.177 2.505-2.505c.178.025.355.034.533.042a5.08 5.08 0 0 0 5.078-5.078 5.1 5.1 0 0 0-.465-2.116c-.999-2.319-2.074-4.655-.584-7.787-2.235 1.744-5.417 3.123-8.26 3.132-2.845-.008-6.027-1.388-8.261-3.132z'/></svg>",
"prompt": "<svg viewBox='0 0 32 32'><path fill='#7986cb' d='M24.694 3.442a5 5 0 0 0 1.345 2.52 5 5 0 0 0 2.52 1.344A1.775 1.775 0 0 1 30 9.003a1.775 1.775 0 0 1-1.44 1.691 4.91 4.91 0 0 0-3.865 3.866 1.716 1.716 0 0 1-3.388 0 4.91 4.91 0 0 0-3.864-3.866 1.774 1.774 0 0 1-1.44-1.692 1.775 1.775 0 0 1 1.44-1.696 5 5 0 0 0 2.52-1.346 5 5 0 0 0 1.344-2.52 1.715 1.715 0 0 1 3.386 0m3.034 13.177a2.1 2.1 0 0 0 1.657 1.657.736.736 0 0 1 0 1.452 2.1 2.1 0 0 0-1.657 1.657.736.736 0 0 1-1.452 0 2.1 2.1 0 0 0-1.657-1.657.736.736 0 0 1 0-1.452 2.1 2.1 0 0 0 1.657-1.657.735.735 0 0 1 1.451 0m-14-14a2.1 2.1 0 0 0 1.658 1.657.736.736 0 0 1 0 1.452 2.1 2.1 0 0 0-1.657 1.657.736.736 0 0 1-1.452 0 2.1 2.1 0 0 0-1.657-1.657.736.736 0 0 1 0-1.452 2.1 2.1 0 0 0 1.657-1.657.735.735 0 0 1 1.451 0M4 13v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-4a1 1 0 0 0-1-1 1 1 0 0 0-1 1v4a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V13a1 1 0 0 1 1-1h4a1 1 0 0 0 1-1 1 1 0 0 0-1-1H7a3 3 0 0 0-3 3m14 2a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1 1 1 0 0 0 1 1h8a1 1 0 0 0 1-1m0 4a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1 1 1 0 0 0 1 1h8a1 1 0 0 0 1-1m0 4a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1 1 1 0 0 0 1 1h8a1 1 0 0 0 1-1'/></svg>",
"proto": "<svg viewBox='0 0 32 32'><path fill='#00bfa5' d='M16 27 2 19v-5l14 8z'/><path fill='#ffeb3b' d='m30 14-14 8v5l14-8z'/><path fill='#ff5722' d='M16 6 2 14v5l14-8z'/><path fill='#00e676' d='m30 19-14-8V6l14 8z'/><path fill='#03a9f4' d='M16 27 2 19v-5l14 8z'/></svg>",
"protractor": "<svg viewBox='0 0 80 80'><defs><clipPath id='a'><path fill='#424242' d='M-2.983 69.251h69.412V2.143H-2.983z'/></clipPath></defs><g clip-path='url(#a)' transform='matrix(1.1304 0 0 -1.1304 5.714 82.137)'><g stroke-width='.1'><path fill='#e53935' d='M61.216 37.276C61.216 20.217 47.39 6.39 30.33 6.39S-.554 20.218-.554 37.276 13.27 68.161 30.33 68.161c17.059 0 30.885-13.827 30.885-30.885'/><path fill='#d32f2f' d='m46.274 52.172-10.504.096-6.142 6.142-7.21-4.789 1.245-1.243-2.92.026-9.913-16.682H6.94l2.44-2.44-2.458-4.137L29.67 6.398q.33-.007.66-.008c17.042 0 30.858 13.806 30.885 30.841L46.273 52.173'/><path fill='#f5f5f5' d='M15.114 35.02c0 8.404 6.813 15.214 15.217 15.214s15.214-6.81 15.214-15.215zm34.206-.702v1.404h4.401a23.3 23.3 0 0 1-6.353 15.342l-3.289-3.29-.992.995 3.287 3.289a23.3 23.3 0 0 1-15.34 6.352l-.002-4.4h-1.404v4.4a23.3 23.3 0 0 1-15.34-6.352l3.288-3.29-.995-.991-3.288 3.287A23.32 23.32 0 0 1 6.94 35.722h4.4V34.32H6.921v-5.151H53.74v5.15h-4.42'/></g></g></svg>",
"pug": "<svg viewBox='0 0 128 128'><g transform='translate(-.25 -1.71)'><path fill='#ffe0b2' d='M107.4 50.9c-.2-4.4.4-8.3-1.6-11.6-4.8-8.2-16.8-13-40.8-13v.7h-.5.5v-.7c-24 0-36.6 4.8-41.4 13.1-1.9 3.4-1.7 7.2-2 11.6-.2 3.5-1.8 7.2-1.1 11.2.8 5.2 1.1 10.4 1.9 15.2.6 3.9 6 7.2 6.5 10.9 1.4 10.2 12 14.9 36 14.9v.8h-.6.7v-.8c24 0 34.2-4.7 35.5-14.9.5-3.8 5.5-7 6.1-10.9.8-4.8 1.1-10 1.9-15.2.7-4-.9-7.8-1.1-11.3'/><path fill='#ffe0b2' d='M64.6 54.5c4.3.1 7.3 2.8 10.1 5.3 3.3 2.9 8.9 4.9 11.2 7.4s5.3 5 6.4 8.9 1.4 8.9 1.4 10.2.7 1 2.7 0c4.7-2.3 9.9-8.5 9.9-8.5-.6 3.9-5.7 7.4-6.2 11.1C98.9 99.1 89 104 64.5 104h-.1.6'/><path fill='#ffe0b2' d='M80.4 46.7c.9 3.1 4.1 13.6-2.1 10.1 0 0 2.6 1.5 4.2 7.2 1.7 5.7 5.8 6.4 5.8 6.4s6.7 1.3 11.7-3c4.2-3.6 4.9-10 3.1-14.9-1.8-4.8-5-6.3-9.7-7.3-4.7-1.1-14.1-2-13 1.5'/><circle cx='92.3' cy='58.1' r='8.8'/><circle cx='90' cy='54.2' r='2.3' fill='#fafafa'/><path fill='#ffe0b2' d='M78.9 57.7s7.9 5.4 12.2 10.7 4.2 6.3 4.2 6.3l-3.1 1.4s-4.4-8.3-9.8-11.4c-5.5-3.1-6.1-5.7-6.1-5.7zm-14-3.2c-4.3.1-7.5 2.8-10.4 5.3-3.3 2.9-9.1 4.9-11.4 7.4s-5.4 5-6.5 8.9-1.5 8.9-1.5 10.2.2 1.4-2.7 0c-4.7-2.2-9.9-8.5-9.9-8.5.6 3.9 5.7 7.4 6.2 11.1C30.1 99.1 40 104 64.5 104h.5'/><path fill='#4e342e' d='M88.1 71.4C83.3 65.5 75.6 60 64.9 60h-.1c-10.7 0-18.4 5.5-23.2 11.4-5 6.1-4.6 8.5-4.6 14.3 0 21 7.4 15 12.3 17.6 5 2.5 10.2 1.7 15.5 1.7h.1c5.4 0 10.5.7 15.5-1.8 4.9-2.5 12.3 3.7 12.3-17.3.1-5.8.4-8.4-4.6-14.5'/><path fill='#3e2723' d='M64.4 65.2s-.7 9.7-2.1 11.6l2.6-.6z'/><path fill='#3e2723' d='M65.1 65.2s.7 9.7 2.1 11.6l-2.6-.6z'/><path fill='#4e342e' d='M56.7 62.9c-1-2.3 2.6-6 8.3-6.1 5.7 0 9.3 3.7 8.3 6.1S68.7 66 65 66.1c-3.6-.1-7.3-.8-8.3-3.2'/><path d='M65 65.2c0-.4 3.4-.5 5.2-1.7 0 0-3.7 1.2-4.5.7-.8-.4-1-1.6-1-1.6s-.3 1.2-.9 1.6c-.7.4-4.9-.7-4.9-.7s5.6 1.4 5.6 1.7-.1 1.3-.1 2c0 2.5 0 8.7.4 9.2.6.9.4-6.7.4-9.2-.1-.8-.1-1.6-.2-2'/><path fill='#795548' d='M65.2 78.6c1.7 0 4.7 1.2 7.4 3.1-2.6-2.9-5.7-4.9-7.4-4.9-1.8 0-5.6 2.2-8.3 5.4 2.8-2.2 6.4-3.6 8.3-3.6'/><g fill='#3e2723'><path d='M64.5 96.3c-3.8 0-7.5-1.2-10.9-2.1-.7-.2-1.4.3-2.1.1-6.3-2-11.4-5.4-14.5-9.7v1c0 21 7.4 15.1 12.3 17.6 5 2.5 10.2 1.7 15.5 1.7h.1c5.4 0 10.5.7 15.5-1.8 4.9-2.5 12.3 3.6 12.3-17.4 0-.8 0-1.6.1-2.3-2.9 4.7-8.2 8.4-14.8 10.6-.6.2-2-.3-2.6-.2-3.6 1.2-6.8 2.5-10.9 2.5'/><path d='M55 85s-2.5 7.5-.8 10.8l-2.3-1s1.7-7.6 3.1-9.8m19.8 0s2.5 7.5.8 10.8l2.3-1s-1.8-7.6-3.1-9.8'/></g><path fill='#ffe0b2' d='M48.6 46.7c-.9 3.1-4.1 13.6 2.1 10.1 0 0-2.6 1.5-4.2 7.2s-5.8 6.4-5.8 6.4-6.7 1.3-11.7-3c-4.2-3.6-4.9-10-3.1-14.9s5-6.3 9.7-7.3c4.7-1.1 14-2 13 1.5'/><path d='M64.9 76.8c2.7 0 11.1 5.8 11.2 12.9v-.4c0-7.4-6.8-13.3-11.2-13.3s-11.2 6-11.2 13.3v.4c.1-7.1 8.5-12.9 11.2-12.9'/><g fill='#3e2723'><ellipse cx='66.7' cy='61.5' rx='.8' ry='1.5' transform='rotate(-14.465 66.71 61.469)'/><ellipse cx='62.4' cy='61.5' rx='.8' ry='1.5' transform='rotate(17.235 62.372 61.463)'/></g><circle cx='37.2' cy='58.1' r='8.8'/><circle cx='39.5' cy='54.2' r='2.3' fill='#fafafa'/><path fill='#795548' d='M67.5 58.2c0-.1-2.3 1-2.9 1.1-.6-.1-2.9-1.2-2.9-1.1z'/><path fill='#ffe0b2' d='M50 57.7s-7.9 5.4-12.2 10.7-4.2 6.3-4.2 6.3l3.1 1.4s4.4-8.3 9.8-11.4 6.1-5.7 6.1-5.7z'/><path fill='#ffe0b2' d='M32.7 41.7S30 49.1 24 52.2c0 0 9.4-1.1 8.7-10.5m63.1 0s2.7 7.4 8.7 10.5c0 0-9.4-1.1-8.7-10.5M78.7 55.5s-5.9-6.2-13.8-6.4h.2c-8 .2-13.8 6.4-13.8 6.4 6.9-4.8 12.8-4.7 13.8-4.7-.1 0 6.7-.1 13.6 4.7m-6.9-13s-3-4.2-7-4.3h.2c-3 .1-6.9 4.3-6.9 4.3 3.4-3.3 6.9-3.2 6.9-3.2s3.3-.1 6.8 3.2M37.2 73.2s-4.7 2.3-8.1.9H29c-3-1.7-4.5-6.8-4.5-6.8s3 9 12.7 5.9m54.8 0s4.7 2.3 8.1.9c4-1.7 4.6-6.8 4.6-6.8s-3 9-12.7 5.9'/><path fill='#ffe0b2' d='M42.6 41.2c2.6-.5 6.9-.6 10.3.5 4.3 1.5.8 7 1.7 7.3s2.1-3.8 10.1-3.4c8.1.4 9 4 10.1 3.4s-1.1-10 11-7.8c0 0-12.7-3.4-12.1 5.8 0 0-7.3-5.6-17.5-.6.1 0 2.7-8.6-13.6-5.2m44.3 0c.2 0 .3.1.4.1s-.1-.1-.4-.1M39.1 28.9S28.3 42.5 26.7 47.7c-1.6 5.3-2.8 27-4.2 30.1l-5-21.4 9.2-22.3zm50.8 0s10.8 13.6 12.4 18.8c1.6 5.3 2.8 27 4.2 30.1l5-21.4-9.2-22.3z'/><path fill='#4e342e' d='M89.4 28.9s11.6 9.7 15 20.9 2 24.8 4.6 26.5c3.7 2.4 7.9-11.9 9.3-13.4 2.2-2.4 9.5-8.5 10-9.6s-14.8-17.8-21.5-21.1c-8.1-3.8-18.1-4.1-17.4-3.3'/><path fill='#3e2723' d='M99.3 34.9s13.7 17.5 13.5 39.3l5.5-11.2c-.1 0-4.9-14.3-19-28.1'/><path fill='#4e342e' d='M39.1 28.9s-11.6 9.7-15 20.9-2 24.8-4.6 26.5c-3.7 2.4-7.9-11.9-9.3-13.4C8 60.5.7 54.4.2 53.3S15 35.5 21.7 32.2c8.1-3.8 18.1-4.1 17.4-3.3'/><path fill='#3e2723' d='M29.2 34.9S15.5 52.4 15.7 74.2L10.3 63s4.8-14.3 18.9-28.1'/><path fill='#ffe0b2' d='M21.8 74.6s1 5.4 2.6 7.1.5-1.3.5-1.3-1.7-.9-1.4-7.8-1.7 2-1.7 2m85.3 0s-1 5.4-2.6 7.1-.5-1.3-.5-1.3 1.7-.9 1.4-7.8 1.7 2 1.7 2'/><g fill='#3e2723'><circle cx='54.5' cy='70.5' r='.8'/><circle cx='49.9' cy='75.3' r='.8'/><circle cx='48.4' cy='70.5' r='.8'/></g><g fill='#3e2723'><circle cx='74' cy='70.5' r='.8'/><circle cx='78.6' cy='75.3' r='.8'/><circle cx='80.1' cy='70.5' r='.8'/></g></g></svg>",
@@ -1056,6 +1071,7 @@
"tree": "<svg viewBox='0 0 32 32'><path fill='#7cb342' d='M4 4h10v6H4zm16 10h10v6H20zm0 8h10v6H20zm-4-4v-2h-6v-4H8v14h8v-2h-6v-6z'/></svg>",
"trigger": "<svg fill='none' viewBox='0 0 32 32'><path fill='#4caf50' fill-rule='evenodd' d='M11.158 13.51 16 5l12 21.09H4l4.842-8.51 3.425 2.007-1.416 2.49h10.298L16 13.027l-1.417 2.49z' clip-rule='evenodd'/></svg>",
"tsconfig": "<svg viewBox='0 0 32 32'><path fill='#757575' d='M15 2H6a2.006 2.006 0 0 0-2 2v22a2.006 2.006 0 0 0 2 2h6v-4H6v-2h6v-2H6v-2h6v-2H6v-2h6v-2h2V4l8 8h2v-1Z' data-mit-no-recolor='true'/><path fill='#0288d1' d='M12 12v18h18V12Zm8 6h-2v8h-2v-8h-2v-2h6Zm8 0h-4v2h2a2.006 2.006 0 0 1 2 2v2a2.006 2.006 0 0 1-2 2h-4v-2h4v-2h-2a2.006 2.006 0 0 1-2-2v-2a2.006 2.006 0 0 1 2-2h4Z'/></svg>",
"tsdoc": "<svg viewBox='0 0 16 16'><path fill='#43a047' d='M2 2v12h12V2zm7.2 5.48.98 2.21h.03l.97-2.22.95.54-1.51 1.98v.03l2.39-.32v1.08l-2.39-.29v.03l1.52 1.9-1.01.57-.95-2.22h-.03l-1.03 2.24-.9-.57 1.51-1.93v-.03l-2.35.3V9.7l2.33.3v-.03L8.22 8.04l.97-.56h.03z'/></svg>",
"tsil": "<svg viewBox='0 0 16 16'><path fill='#795548' d='M14 13.3a.7.7 0 0 1-.7.7H8V8h6z'/><path fill='#ffe57f' d='M14 8H8V2h5.3a.7.7 0 0 1 .7.7z'/><path fill='#ffab40' d='M8 8H2V2.7a.7.7 0 0 1 .7-.7H8z'/><path fill='#212121' d='M8 14H2.7a.7.7 0 0 1-.7-.7V8h6z'/></svg>",
"tune": "<svg viewBox='0 0 32 32'><path fill='#fbc02d' d='M12 10h10v2H12z'/><path fill='#fbc02d' d='M16 4h2v8h-2zm4 18h10v2H20zm4 2h2v4h-2zm0-20h2v14h-2zM2 18h10v2H2z'/><path fill='#fbc02d' d='M6 18h2v10H6zM6 4h2v10H6zm10 12h2v12h-2z'/></svg>",
"turborepo": "<svg viewBox='0 0 32 32'><defs><linearGradient id='a' x1='27.349' x2='7.613' y1='26.455' y2='6.719' gradientTransform='matrix(1 0 0 -1 0 34)' gradientUnits='userSpaceOnUse'><stop offset='.15' stop-color='#2196f3'/><stop offset='.85' stop-color='#f50057'/></linearGradient></defs><path fill='#cfd8dc' d='M16 8a8 8 0 1 0 8 8 8 8 0 0 0-8-8m0 12a4 4 0 1 1 4-4 4 4 0 0 1-4 4'/><path fill='url(#a)' d='M4.281 23.647A13.9 13.9 0 0 1 2 16h4a9.95 9.95 0 0 0 1.192 4.736ZM14 29.84v-4.042a9.9 9.9 0 0 1-3.892-1.732l-2.854 2.855A13.9 13.9 0 0 0 14 29.84M16 2v4a10 10 0 0 1 2 19.8v4.04A13.992 13.992 0 0 0 16 2'/></svg>",
@@ -1074,6 +1090,8 @@
"uv": "<svg viewBox='0 0 16 16'><path fill='#e040fb' d='M2 2v11c0 .5.5 1 1 1h8c.5 0 1-.5 1-1h1v1h1V2H8v8H7V2z'/></svg>",
"vagrant": "<svg viewBox='0 0 140.625 140.625'><path fill='#1565c0' d='m70.315 132.051 23.269-13.42 36.445-89.24V18.084l-27.142 15.791v9.539L81.16 90.26l-10.846 7.494zM59.449 92.32l10.866-5.365V73.322L54.028 35.326v-10.75l-.112-.064-16.174 9.362v9.539z'/><path fill='#2979ff' d='M86.597 24.463v10.862L70.312 73.32v12.697l-10.862 6.3-21.708-48.904V33.86l16.285-9.38L26.88 8.577l-16.286 9.506v11.644l36.654 89.018 23.064 13.302V98.615l10.847-6.3-.128-.08 21.852-48.824v-9.554l27.148-15.775-16.286-9.507-27.131 15.886z'/></svg>",
"vala": "<svg viewBox='0 0 64 64'><defs><linearGradient id='c' x1='25.058' x2='25.058' y1='47.028' y2='39.999' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#212121' stop-opacity='0'/><stop offset='.5' stop-color='#212121'/><stop offset='1' stop-color='#212121' stop-opacity='0'/></linearGradient><linearGradient id='e' x1='24' x2='24' y1='5' y2='43' gradientTransform='matrix(1.4324 0 0 1.4363 134.03 -5.86)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#fafafa'/><stop offset='.063' stop-color='#fafafa' stop-opacity='.235'/><stop offset='.951' stop-color='#fafafa' stop-opacity='.157'/><stop offset='1' stop-color='#fafafa' stop-opacity='.392'/></linearGradient><linearGradient id='d' x1='31.293' x2='31.293' y1='5.008' y2='59.329' gradientTransform='translate(136.41 -3.39)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#ba68c8'/><stop offset='1' stop-color='#673ab7'/></linearGradient><radialGradient id='a' cx='4.993' cy='43.5' r='2.5' gradientTransform='matrix(2.0038 0 0 1.4 27.988 -17.4)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#212121'/><stop offset='1' stop-color='#212121' stop-opacity='0'/></radialGradient><radialGradient id='b' cx='4.993' cy='43.5' r='2.5' gradientTransform='matrix(2.0038 0 0 1.4 -20.012 -104.4)' gradientUnits='userSpaceOnUse'><stop offset='0' stop-color='#212121'/><stop offset='1' stop-color='#212121' stop-opacity='0'/></radialGradient></defs><g opacity='.6'><path fill='url(#a)' d='M38 40h5v7h-5z' transform='matrix(1.579 0 0 .71429 130.515 24.54)'/><path fill='url(#b)' d='M-10-47h5v7h-5z' transform='matrix(-1.579 0 0 -.71429 130.515 24.54)'/><path fill='url(#c)' d='M10 40h28v7H10z' transform='matrix(1.579 0 0 .71429 130.515 24.54)'/></g><rect width='55' height='55' x='140.91' y='1.11' fill='url(#d)' rx='3' ry='3'/><rect width='53' height='53.142' x='141.91' y='2.039' stroke='url(#e)' stroke-linecap='round' stroke-linejoin='round' opacity='.3' rx='2' ry='2'/><rect width='55' height='55' x='140.91' y='1.11' stroke='#4a148c' stroke-linecap='round' stroke-linejoin='round' opacity='.5' rx='3' ry='3'/><path fill='#9575cd' d='m26.357 57.882-1.111-47.15q-4.854 1.82-7.583 5.694-2.698 3.877-2.698 9.64 0 1.314.136 2.157.167.809.336 1.314.169.472.305.742.167.27.167.472-1.786 0-3.167-.336-1.383-.372-2.327-1.147-.91-.773-1.415-2.055-.473-1.28-.473-3.167 0-2.292.976-4.516 1.011-2.223 2.73-4.213 1.753-1.987 4.08-3.673 2.36-1.685 5.021-2.899 2.695-1.247 5.594-1.92 2.932-.71 5.831-.71.775 0 1.416.034.673.033 1.346.1l.608 42.465L50.654 6.45h4.819L36.298 57.883h-9.943z'/></svg>",
"vanilla-extract": "<svg viewBox='0 0 800 800'><path fill='#4dd0e1' d='M663.25 410.25c-103.784-91.407-412.709-100.723-517.846-2.846-7.23 7.892-26.75 25-23.73 37.634 159.311 140.398 448.145 138.143 554.153 6.481 6.824-20.016-7.894-36.817-12.577-41.269'/><path fill='#795548' d='M404.25 578.5c145.5 0 263.75-47.5 263.75-106s-118-106-263.75-106S140.5 414 140.5 472.5s118 106 263.75 106'/><path fill='#f06292' d='M400.16 49.46c-22.807 0 22.829 13.85-4.16 58.54-16 22.5-45.25 28.25-93.5 55-47.899 26.555-63.277 49.662-66.678 79.836-80.204 13.756-66.269 91.232-61.625 101.361-6.565 4.276-44.961 37.303-5.494 88.268 72.037 62.824 323.526 98.854 444.33 9.785 48.6-35.833 53.566-105.218-15.877-137.072 11.912-72.915-12.186-126.055-76.185-137.48C498.065 87.425 412.84 50.743 400.16 49.46'/><path fill='#4dd0e1' d='M658.288 440.52c-20.143 38.613-58.076 47.576-95.615 62.865-33.166 7.694-51.985 12.91-85.827 17.115-40.597 5.36-87.514 4.63-147.596-1.5-28.037-3.568-60.068-10.65-98.75-21.25-66.246-23.954-81.398-41.57-86.096-58.404-12.75-6.25-27.212-10.904-22.02 11.423 9.481 44.154 16.347 69.231 32.866 130.52 9.515 32.88 17.811 70.063 30.615 101.807 30.273 59.248 171.943 68.905 215 67.75 63.145 1.49 155.976-11.737 201.75-45.25C619.8 686.943 633.988 659.793 638 634.75c17.423-69.635 31.596-124.788 39.27-187.654-9.18-46.002-13.936-21.428-18.982-6.577'/></svg>",
"varnish": "<svg viewBox='0 0 16 16'><g fill='#0288d1' stroke-width='0'><circle cx='2.5' cy='6.5' r='1.5'/><circle cx='11' cy='5' r='4'/><circle cx='6.5' cy='12.5' r='2.5'/></g></svg>",
"vedic": "<svg viewBox='0 0 288 288'><svg viewBox='0 -15 356 400'><path fill='#ff3d00' d='M90.457 353.95c-38.66-13.815-66.73-48.192-77.845-95.332-5.044-21.395-6.47-56.748-2.288-56.748 1.389 0 5.1 9.7 8.245 21.557 6.884 25.945 18.625 50.342 29.967 62.267 18.839 19.808 65.5 27.566 92.385 15.36 20.943-9.509 29.436-32.108 20.329-54.095-7.038-16.99-23.003-22.67-52.742-18.767 0 0-18.225-19.618-24.032-54.457l18.681 1.694c22.5 2.04 39.488-2.933 48.305-14.142 8.286-10.533 8.107-14.607-1.114-25.325-13.304-15.468-37.193-11.55-85.561 14.033l-24.405-40.91 10.231-7.804c25.64-19.557 70.16-29.334 95.497-20.972 23.078 7.617 40.017 37.839 35.492 63.324-3.059 17.23-16.874 41.362-27.548 48.12l-9.205 5.829 12.715 5.733c21.606 9.743 34.797 2.295 50.556-28.547 21.81-42.681 35.954-53.73 68.847-53.777 15.315-.023 20.766 1.584 31.936 9.412 27.88 19.537 43.06 59.994 39.725 105.87-4.223 58.101-31.744 93.343-72.894 93.343-22.583 0-37.14-7.92-48.727-26.514-10.177-16.333-14.764-48.68-8.919-62.908 2.804-6.827 3.31-7.058 3.494-1.597.337 10.04 11.76 26.358 22.246 31.781 25.73 13.306 62.667-3.411 77.28-34.975 11.095-23.964 5.143-70.186-10.087-78.337-3.186-1.706-11.06-3.101-17.497-3.101-13.682 0-24.427 9.837-39.491 36.153-5.209 9.098-13.974 20.854-19.478 26.123-8.944 8.562-12.137 9.581-30.024 9.581h-20.017l6.47 14.372c9.261 20.57 8.823 53.993-.974 74.34-8.657 17.979-28.674 36.18-44.676 40.626-15.578 4.328-40.946 3.768-54.877-1.21m75.377-278.026c-8.855-15.11-14.304-43.318-8.369-43.318 6.973 15.126 21.265 28.621 36.57 38.037 27.486 13.306 55.358 7.936 85.807-16.535 6.704-5.387 12.64-9.195 13.192-8.462 7.436 11.538 20.297 20.967 24.548 34.375 0 5.658-24.353 21.94-43.57 29.13-47.63 13.72-80.046 8.292-108.178-33.227m24.002-34.927 31.01-34.383 34.46 31.9c-11.787 9.709-20.296 24.775-33.762 32.416-10.64-7.844-26.52-17.092-31.708-29.933' class='colorff4500 svgShape'/></svg></svg>",
"velite": "<svg fill='none' viewBox='0 0 16 16'><path fill='#43a047' d='m5.767 7.155.918 2.46L5 13 1 3.014c.444 0 .866.107 1.267.221 1.433.408 2.594 1.594 3.5 3.92'/><path fill='#26a69a' d='M15 3.014c-1.357-.423-2.581.024-3.602.943L6.75 8.285C4.833 10.077 3.69 9.871 3 8l2 5z'/></svg>",
"velocity": "<svg viewBox='0 0 300 300'><path fill='#0288d1' d='M150 61.553A88.446 88.446 0 0 0 61.553 150 88.446 88.446 0 0 0 150 238.446 88.446 88.446 0 0 0 238.446 150 88.446 88.446 0 0 0 150 61.553m.011 25.082a63.353 63.353 0 0 1 63.353 63.353 63.353 63.353 0 0 1-63.353 63.353 63.353 63.353 0 0 1-63.353-63.353 63.353 63.353 0 0 1 63.353-63.353' paint-order='fill markers stroke'/><path fill='#0288d1' d='M45.008 193.096 12.213 225.89l32.795 32.795V238.44h104.99v-25.098H45.008zM74.088 12.21 41.293 45.006h20.246v104.99h25.098V45.007h20.246zm180.901 29.093V61.55h-104.99v25.097h104.99v20.246L287.784 74.1zM213.32 149.998V254.99h-20.245l32.794 32.795 32.795-32.795h-20.246V150z'/></svg>",
+1
View File
@@ -496,6 +496,7 @@ repo.transfer.to_you=vám
repo.collaborator.added.subject=%s vás přidal do %s
repo.collaborator.added.text=Byl jste přidán jako spolupracovník repozitáře:
team_invite.subject=%[1]s vás pozval/a, abyste se připojili k organizaci %[2]s
team_invite.text_1=%[1]s vás pozval/a do týmu %[2]s v organizaci %[3]s.
team_invite.text_2=Pro připojení k týmu klikněte na následující odkaz:
+1
View File
@@ -509,6 +509,7 @@ repo.transfer.to_you=dir
repo.collaborator.added.subject=%s hat dich zu %s hinzugefügt
repo.collaborator.added.text=Du wurdest als Mitarbeiter für folgendes Repository hinzugefügt:
team_invite.subject=%[1]s hat dich eingeladen, der Organisation %[2]s beizutreten
team_invite.text_1=%[1]s hat dich eingeladen, dem Team %[2]s in der Organisation %[3]s beizutreten.
team_invite.text_2=Bitte klicke auf den folgenden Link, um dem Team beizutreten:
+1
View File
@@ -451,6 +451,7 @@ repo.transfer.to_you=εσάς
repo.collaborator.added.subject=%s σας πρόσθεσε στο %s
repo.collaborator.added.text=Έχετε προστεθεί ως συνεργάτης του αποθετηρίου:
team_invite.subject=%[1]s σας προσκάλεσε να συμμετέχετε στον οργανισμό %[2]s
team_invite.text_1=%[1]s σας προσκάλεσε να συμμετέχετε στην ομάδα %[2]s στον οργανισμός %[3]s.
team_invite.text_2=Παρακαλώ κάντε κλικ στον παρακάτω σύνδεσμο για να συμμετάσχετε στην ομάδα:
+1
View File
@@ -448,6 +448,7 @@ repo.transfer.to_you=usted
repo.collaborator.added.subject=%s le añadió en %s
repo.collaborator.added.text=Has sido añadido como colaborador del repositorio:
team_invite.subject=%[1]s le ha invitado a unirse a la organización de %[2]s
team_invite.text_1=%[1]s le ha invitado a unirse al equipo %[2]s en la organización %[3]s.
team_invite.text_2=Por favor, haz clic en el siguiente enlace para unirte al equipo:
+1
View File
@@ -363,6 +363,7 @@ repo.collaborator.added.subject=%s شما را به پروژه %s اضافه ک
repo.collaborator.added.text=شما به عنوان مشارکت‌کننده در این مخزن اضافه شدید:
[modal]
yes=بله
no=خیر
+1
View File
@@ -348,6 +348,7 @@ repo.transfer.to_you=sinä
[modal]
yes=Kyllä
no=Ei
+1
View File
@@ -550,6 +550,7 @@ repo.transfer.body=Pour laccepter ou le rejeter, visitez %s ou ignorez-le.
repo.collaborator.added.subject=%s vous a ajouté à %s
repo.collaborator.added.text=Vous avez été ajouté en tant que collaborateur du dépôt :
team_invite.subject=%[1]s vous a invité à rejoindre lorganisation %[2]s
team_invite.text_1=%[1]s vous a invité à rejoindre l’équipe %[2]s dans lorganisation %[3]s.
team_invite.text_2=Veuillez cliquer sur le lien suivant pour rejoindre l'équipe :
+8
View File
@@ -551,6 +551,14 @@ repo.transfer.body=Chun glacadh leis nó diúltú dó, tabhair cuairt ar %s nó
repo.collaborator.added.subject=Chuir %s le %s tú
repo.collaborator.added.text=Cuireadh tú leis mar chomhoibritheoir stórais:
repo.actions.run.failed=Theip ar an rith
repo.actions.run.succeeded=D'éirigh leis an rith
repo.actions.run.cancelled=Rith curtha ar ceal
repo.actions.jobs.all_succeeded=D’éirigh le gach post
repo.actions.jobs.all_failed=Theip ar gach post
repo.actions.jobs.some_not_successful=Níor éirigh le roinnt post
repo.actions.jobs.all_cancelled=Tá gach post curtha ar ceal
team_invite.subject=Tá cuireadh tugtha agat ag %[1]s chun dul le heagraíocht %[2]s
team_invite.text_1=Tá cuireadh tugtha ag %[1]s duit chun dul le foireann %[2]s in eagraíocht %[3]s.
team_invite.text_2=Cliceáil ar an nasc seo a leanas le do thoil chun dul isteach san fhoireann:
+1
View File
@@ -294,6 +294,7 @@ register_success=Sikeres regisztráció
[modal]
yes=Igen
no=Nem
+1
View File
@@ -302,6 +302,7 @@ register_success=Pendaftaran berhasil
[modal]
yes=Ya
no=Tidak
+1
View File
@@ -326,6 +326,7 @@ repo.collaborator.added.subject=%s bætti þér við í %s
repo.collaborator.added.text=Þér hefur verið bætt við sem aðila hugbúnaðarsafns:
[modal]
yes=
no=Nei
+1
View File
@@ -386,6 +386,7 @@ repo.collaborator.added.subject=%s ti ha aggiunto a %s
repo.collaborator.added.text=Sei stato aggiunto come collaboratore del repository:
[modal]
yes=
no=No
+1
View File
@@ -551,6 +551,7 @@ repo.transfer.body=承認または拒否するには %s を開きます。 も
repo.collaborator.added.subject=%s が %s にあなたを追加しました
repo.collaborator.added.text=あなたは次のリポジトリの共同作業者に追加されました:
team_invite.subject=%[1]s さんが %[2]s への参加にあなたを招待しました
team_invite.text_1=%[1]s さんが、組織 %[3]s 内のチーム %[2]s への参加に、あなたを招待しました。
team_invite.text_2=下のリンクをクリックしてチームに参加してください。
+1
View File
@@ -278,6 +278,7 @@ register_success=등록 완료
[modal]
yes=
no=아니오
+1
View File
@@ -454,6 +454,7 @@ repo.transfer.to_you=Jums
repo.collaborator.added.subject=%s pievienoja Jūs repozitorijam %s
repo.collaborator.added.text=Jūs tikāt pievienots kā līdzstrādnieks repozitorijam:
team_invite.subject=%[1]s uzaicināja Jūs pievienoties organizācijai %[2]s
team_invite.text_1=%[1]s uzaicināja Jūs pievienoties komandai %[2]s organizācijā %[3]s.
team_invite.text_2=Uzspiediet uz šīs saites, lai pievienoties komandai:
+1
View File
@@ -385,6 +385,7 @@ repo.collaborator.added.subject=%s heeft jou toegevoegd aan %s
repo.collaborator.added.text=U bent toegevoegd als een medewerker van de repository:
[modal]
yes=Ja
no=Nee
+1
View File
@@ -372,6 +372,7 @@ repo.collaborator.added.subject=%s dodał Cię do %s
repo.collaborator.added.text=Zostałeś dodany jako współtwórca repozytorium:
[modal]
yes=Tak
no=Nie
+1
View File
@@ -540,6 +540,7 @@ repo.transfer.body=Para o aceitar ou rejeitar visite %s, ou simplesmente o ignor
repo.collaborator.added.subject=%s adicionou você a %s
repo.collaborator.added.text=Você foi adicionado como um colaborador do repositório:
team_invite.subject=%[1]s convidou você para participar da organização %[2]s
team_invite.text_1=%[1]s convidou você para participar da equipe %[2]s na organização %[3]s.
team_invite.text_2=Por favor, clique no seguinte link para se juntar à equipe:
+8
View File
@@ -551,6 +551,14 @@ repo.transfer.body=Para o aceitar ou rejeitar, visite %s ou ignore-o, simplesmen
repo.collaborator.added.subject=%s adicionou você a %s
repo.collaborator.added.text=Foi adicionado(a) como colaborador(a) do repositório:
repo.actions.run.failed=A execução falhou
repo.actions.run.succeeded=A execução foi bem sucedida
repo.actions.run.cancelled=A execução foi cancelada
repo.actions.jobs.all_succeeded=Todos os trabalhos foram bem sucedidos
repo.actions.jobs.all_failed=Todos os trabalhos falharam
repo.actions.jobs.some_not_successful=Alguns trabalhos não foram bem sucedidos
repo.actions.jobs.all_cancelled=Todos os trabalhos foram cancelados
team_invite.subject=%[1]s fez-lhe um convite para se juntar à organização %[2]s
team_invite.text_1=%[1]s fez-lhe um convite para se juntar à equipa %[2]s na organização %[3]s.
team_invite.text_2=Clique na ligação seguinte para se juntar à equipa:
+1
View File
@@ -449,6 +449,7 @@ repo.transfer.to_you=вам
repo.collaborator.added.subject=%s добавил(а) вас в %s
repo.collaborator.added.text=Вы были добавлены в качестве соавтора репозитория:
team_invite.subject=%[1]s приглашает вас присоединиться к организации %[2]s
team_invite.text_1=%[1]s приглашает вас присоединиться к команде %[2]s в организации %[3]s.
team_invite.text_2=Перейдите по ссылке, чтобы присоединиться к команде:
+1
View File
@@ -355,6 +355,7 @@ repo.collaborator.added.subject=%s ඔබව %s ට එකතු කළා
repo.collaborator.added.text=ඔබ ගබඩාවේ සහයෝගිතාකරුවෙකු ලෙස එකතු කර ඇත:
[modal]
yes=ඔව්
no=නැහැ
+1
View File
@@ -436,6 +436,7 @@ repo.transfer.to_you=vy
repo.collaborator.added.subject=%s vás pridal do %s
repo.collaborator.added.text=Boli ste pridaný ako spolupracovník repozitára:
team_invite.subject=%[1]s vás pozval/a, aby ste sa pripojili k organizácii %[2]s
team_invite.text_1=%[1]s vás pozval/a, aby ste sa pripojili k tímu %[2]s v organizácii %[3]s.
team_invite.text_2=Ak sa chcete pripojiť k tímu, kliknite na nasledujúci odkaz:
+1
View File
@@ -303,6 +303,7 @@ register_success=Registreringen lyckades
[modal]
yes=Ja
no=Nej
+1
View File
@@ -533,6 +533,7 @@ repo.transfer.to_you=siz
repo.collaborator.added.subject=%s sizi %s ekledi
repo.collaborator.added.text=Bu depo için katkıcı olarak eklendiniz:
team_invite.subject=%[1]s sizi %[2]s organizasyonuna katılmaya davet etti
team_invite.text_1=%[1]s sizi %[3]s organizasyonundaki %[2]s takımına katılmaya davet etti.
team_invite.text_2=Takıma katılmak lütfen aşağıdaki bağlantıya tıklayın:
+1
View File
@@ -503,6 +503,7 @@ repo.transfer.to_you=вам
repo.collaborator.added.subject=%s додав вас до %s
repo.collaborator.added.text=Вас додали як співавтора до сховища:
team_invite.subject=%[1]s запрошує вас приєднатися до організації %[2]s
team_invite.text_1=%[1]s запрошує вас до команди %[2]s в організації %[3]s.
team_invite.text_2=Перейдіть за посиланням, щоб приєднатися до команди:
+1
View File
@@ -551,6 +551,7 @@ repo.transfer.body=访问 %s 以接受或拒绝转移,亦可忽略此邮件。
repo.collaborator.added.subject=%s 把您添加到 %s
repo.collaborator.added.text=您已被添加为仓库的协作者:
team_invite.subject=%[1]s 邀请您加入组织 %[2]s
team_invite.text_1=%[1]s 邀请您加入组织 %[3]s 中的团队 %[2]s。
team_invite.text_2=请点击下面的链接加入团队:
+1
View File
@@ -158,6 +158,7 @@ register_success=註冊成功
[modal]
yes=確認操作
no=取消操作
+1
View File
@@ -494,6 +494,7 @@ repo.transfer.to_you=您
repo.collaborator.added.subject=%s 把您加入到 %s
repo.collaborator.added.text=您已被新增為儲存庫的協作者:
team_invite.subject=%[1]s 邀請您加入組織 %[2]s
team_invite.text_1=%[1]s 邀請您加入組織 %[3]s 中的 %[2]s 團隊
team_invite.text_2=請點擊下方連結加入團隊:
+44 -50
View File
@@ -2,8 +2,8 @@
"type": "module",
"packageManager": "pnpm@10.0.0",
"engines": {
"node": ">= 20.0.0",
"pnpm": ">=10.0.0"
"node": ">= 22.6.0",
"pnpm": ">= 10.0.0"
},
"dependencies": {
"@citation-js/core": "0.7.18",
@@ -14,7 +14,8 @@
"@github/relative-time-element": "4.4.8",
"@github/text-expander-element": "2.9.2",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
"@primer/octicons": "19.15.5",
"@primer/octicons": "19.17.0",
"@resvg/resvg-wasm": "2.6.2",
"@silverwind/vue3-calendar-heatmap": "2.0.6",
"@techknowlogick/license-checker-webpack-plugin": "0.3.0",
"add-asset-webpack-plugin": "3.0.0",
@@ -26,54 +27,53 @@
"clippie": "4.1.7",
"cropperjs": "1.6.2",
"css-loader": "7.1.2",
"dayjs": "1.11.13",
"dayjs": "1.11.18",
"dropzone": "6.0.0-beta.2",
"easymde": "2.20.0",
"esbuild-loader": "4.3.0",
"fast-glob": "3.3.3",
"htmx.org": "2.0.6",
"idiomorph": "0.7.3",
"jquery": "3.7.1",
"katex": "0.16.22",
"mermaid": "11.10.0",
"mini-css-extract-plugin": "2.9.2",
"mermaid": "11.11.0",
"mini-css-extract-plugin": "2.9.4",
"minimatch": "10.0.3",
"monaco-editor": "0.52.2",
"monaco-editor-webpack-plugin": "7.1.0",
"online-3d-viewer": "0.16.0",
"pdfobject": "2.3.1",
"perfect-debounce": "1.0.0",
"perfect-debounce": "2.0.0",
"postcss": "8.5.6",
"postcss-loader": "8.1.1",
"postcss-loader": "8.2.0",
"postcss-nesting": "13.0.2",
"sortablejs": "1.15.6",
"swagger-ui-dist": "5.27.0",
"swagger-ui-dist": "5.28.1",
"tailwindcss": "3.4.17",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
"tippy.js": "6.3.7",
"toastify-js": "1.12.0",
"tributejs": "5.1.3",
"typescript": "5.8.3",
"typescript": "5.9.2",
"uint8-to-base64": "0.2.1",
"vanilla-colorful": "0.7.2",
"vue": "3.5.18",
"vue": "3.5.21",
"vue-bar-graph": "2.2.0",
"vue-chartjs": "5.3.2",
"vue-loader": "17.4.2",
"webpack": "5.101.0",
"webpack": "5.101.3",
"webpack-cli": "6.0.1",
"wrap-ansi": "9.0.0"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
"@playwright/test": "1.54.1",
"@playwright/test": "1.55.0",
"@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin-js": "3.1.0",
"@stylistic/stylelint-plugin": "4.0.0",
"@types/codemirror": "5.60.16",
"@types/dropzone": "5.7.9",
"@types/jquery": "3.5.32",
"@types/jquery": "3.5.33",
"@types/katex": "0.16.7",
"@types/license-checker-webpack-plugin": "0.2.5",
"@types/pdfobject": "2.2.5",
@@ -82,10 +82,10 @@
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
"@types/toastify-js": "1.12.4",
"@typescript-eslint/eslint-plugin": "8.38.0",
"@typescript-eslint/parser": "8.38.0",
"@typescript-eslint/eslint-plugin": "8.42.0",
"@typescript-eslint/parser": "8.42.0",
"@vitejs/plugin-vue": "6.0.1",
"@vitest/eslint-plugin": "1.3.4",
"@vitest/eslint-plugin": "1.3.9",
"eslint": "8.57.0",
"eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "4.0.0",
@@ -94,56 +94,50 @@
"eslint-plugin-no-jquery": "3.1.1",
"eslint-plugin-no-use-extend-native": "0.5.0",
"eslint-plugin-playwright": "2.2.2",
"eslint-plugin-regexp": "2.9.0",
"eslint-plugin-sonarjs": "3.0.4",
"eslint-plugin-regexp": "2.10.0",
"eslint-plugin-sonarjs": "3.0.5",
"eslint-plugin-unicorn": "56.0.1",
"eslint-plugin-vue": "10.4.0",
"eslint-plugin-vue-scoped-css": "2.11.0",
"eslint-plugin-vue-scoped-css": "2.12.0",
"eslint-plugin-wc": "3.0.1",
"happy-dom": "18.0.1",
"markdownlint-cli": "0.45.0",
"material-icon-theme": "5.24.0",
"material-icon-theme": "5.26.0",
"nolyfill": "1.0.44",
"postcss-html": "1.8.0",
"stylelint": "16.23.1",
"stylelint": "16.24.0",
"stylelint-config-recommended": "17.0.0",
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
"stylelint-declaration-strict-value": "1.10.11",
"stylelint-define-config": "16.22.0",
"stylelint-value-no-unknown-custom-properties": "6.0.1",
"svgo": "4.0.0",
"type-fest": "4.41.0",
"updates": "16.5.2",
"updates": "16.6.4",
"vite-string-plugin": "1.4.6",
"vitest": "3.2.4",
"vue-tsc": "3.0.4"
"vue-tsc": "3.0.6"
},
"browserslist": [
"defaults"
],
"overrides": {
"array-includes": "npm:@nolyfill/array-includes@^1",
"array.prototype.findlastindex": "npm:@nolyfill/array.prototype.findlastindex@^1",
"array.prototype.flat": "npm:@nolyfill/array.prototype.flat@^1",
"array.prototype.flatmap": "npm:@nolyfill/array.prototype.flatmap@^1",
"deep-equal": "npm:@nolyfill/deep-equal@^1",
"es-aggregate-error": "npm:@nolyfill/es-aggregate-error@^1",
"es-iterator-helpers": "npm:@nolyfill/es-iterator-helpers@^1",
"hasown": "npm:@nolyfill/hasown@^1",
"object.assign": "npm:@nolyfill/object.assign@^1",
"object.entries": "npm:@nolyfill/object.entries@^1",
"object.fromentries": "npm:@nolyfill/object.fromentries@^1",
"object.groupby": "npm:@nolyfill/object.groupby@^1",
"object.values": "npm:@nolyfill/object.values@^1",
"safe-regex-test": "npm:@nolyfill/safe-regex-test@^1",
"string.prototype.includes": "npm:@nolyfill/string.prototype.includes@^1",
"is-core-module": "npm:@nolyfill/is-core-module@^1",
"array.prototype.findlast": "npm:@nolyfill/array.prototype.findlast@^1",
"array.prototype.tosorted": "npm:@nolyfill/array.prototype.tosorted@^1",
"string.prototype.matchall": "npm:@nolyfill/string.prototype.matchall@^1",
"string.prototype.repeat": "npm:@nolyfill/string.prototype.repeat@^1",
"safe-buffer": "npm:@nolyfill/safe-buffer@^1",
"safer-buffer": "npm:@nolyfill/safer-buffer@^1",
"string.prototype.trimend": "npm:@nolyfill/string.prototype.trimend@^1"
"pnpm": {
"overrides": {
"array-includes": "npm:@nolyfill/array-includes@^1",
"array.prototype.findlastindex": "npm:@nolyfill/array.prototype.findlastindex@^1",
"array.prototype.flat": "npm:@nolyfill/array.prototype.flat@^1",
"array.prototype.flatmap": "npm:@nolyfill/array.prototype.flatmap@^1",
"es-aggregate-error": "npm:@nolyfill/es-aggregate-error@^1",
"hasown": "npm:@nolyfill/hasown@^1",
"is-core-module": "npm:@nolyfill/is-core-module@^1",
"object.assign": "npm:@nolyfill/object.assign@^1",
"object.fromentries": "npm:@nolyfill/object.fromentries@^1",
"object.groupby": "npm:@nolyfill/object.groupby@^1",
"object.values": "npm:@nolyfill/object.values@^1",
"safe-buffer": "npm:@nolyfill/safe-buffer@^1",
"safe-regex-test": "npm:@nolyfill/safe-regex-test@^1",
"safer-buffer": "npm:@nolyfill/safer-buffer@^1",
"string.prototype.includes": "npm:@nolyfill/string.prototype.includes@^1",
"string.prototype.trimend": "npm:@nolyfill/string.prototype.trimend@^1"
}
}
}
+886 -1845
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 13 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-maximize" width="16" height="16" aria-hidden="true"><path d="M6.137 8.803a.749.749 0 1 1 1.06 1.06L3.811 13.25H6a.75.75 0 0 1 0 1.5H2a.75.75 0 0 1-.75-.75v-4a.75.75 0 0 1 1.5 0v2.19zM14.75 6a.75.75 0 0 1-1.5 0V3.811L9.863 7.197a.749.749 0 1 1-1.06-1.06L12.19 2.75H10a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75z"/></svg>

After

Width:  |  Height:  |  Size: 396 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-mcp" width="16" height="16" aria-hidden="true"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.25.25 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"/><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"/></svg>

After

Width:  |  Height:  |  Size: 657 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-minimize" width="16" height="16" aria-hidden="true"><path d="M6.668 8.583a1 1 0 0 1 .13.012l.017.003q.015.004.031.01c.036.009.073.017.108.032a.7.7 0 0 1 .243.163.7.7 0 0 1 .126.176 1 1 0 0 1 .036.067.8.8 0 0 1 .058.287l-.001 4a.75.75 0 0 1-1.5 0v-2.188L2.53 14.53a.749.749 0 1 1-1.06-1.06l3.387-3.387H2.666a.75.75 0 0 1 0-1.5zM13.47 1.47a.749.749 0 1 1 1.06 1.06l-3.385 3.386h2.188a.75.75 0 0 1 0 1.5l-4 .001a.7.7 0 0 1-.231-.041q-.029-.008-.056-.017a1 1 0 0 1-.067-.036.71.71 0 0 1-.384-.525 1 1 0 0 1-.012-.132v-4a.75.75 0 0 1 1.5 0v2.191z"/></svg>

After

Width:  |  Height:  |  Size: 629 B

+1 -1
View File
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-deleted" width="16" height="16" aria-hidden="true"><path d="M1 2.5A2.5 2.5 0 0 1 3.5 0h8.75a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 3.5 9h4.75a.75.75 0 0 1 0 1.5H3.5a1 1 0 1 0 0 2h4.75a.75.75 0 0 1 0 1.5H3.5A2.5 2.5 0 0 1 1 11.5z"/><path d="M11.28 10.22a.75.75 0 1 0-1.06 1.06L11.94 13l-1.72 1.72a.75.75 0 1 0 1.06 1.06L13 14.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L14.06 13l1.72-1.72a.75.75 0 1 0-1.06-1.06L13 11.94z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-deleted" width="16" height="16" aria-hidden="true"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h3.75a.75.75 0 0 1 0 1.5H4.5a1 1 0 1 0 0 2h3.75a.75.75 0 0 1 0 1.5H4.5A2.5 2.5 0 0 1 2 11.5z"/><path d="M11.28 10.22a.75.75 0 1 0-1.06 1.06L11.94 13l-1.72 1.72a.75.75 0 1 0 1.06 1.06L13 14.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L14.06 13l1.72-1.72a.75.75 0 1 0-1.06-1.06L13 11.94z"/></svg>

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

+1 -1
View File
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-locked" width="16" height="16" aria-hidden="true"><path d="M1 2.5A2.5 2.5 0 0 1 3.5 0h8.75a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 3.5 9h2.75a.75.75 0 0 1 0 1.5H3.5a1 1 0 1 0 0 2h2.75a.75.75 0 0 1 0 1.5H3.5A2.5 2.5 0 0 1 1 11.5z"/><path d="M9 10.168V9a3 3 0 1 1 6 0v1.168c.591.281 1 .884 1 1.582v2.5A1.75 1.75 0 0 1 14.25 16h-4.5A1.75 1.75 0 0 1 8 14.25v-2.5c0-.698.409-1.3 1-1.582M13.5 10V9a1.5 1.5 0 0 0-3 0v1Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-locked" width="16" height="16" aria-hidden="true"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h1.75a.75.75 0 0 1 0 1.5H4.5a1 1 0 1 0 0 2h1.75a.75.75 0 0 1 0 1.5H4.5A2.5 2.5 0 0 1 2 11.5z"/><path d="M9 10.168V9a3 3 0 1 1 6 0v1.168c.591.281 1 .884 1 1.582v2.5A1.75 1.75 0 0 1 14.25 16h-4.5A1.75 1.75 0 0 1 8 14.25v-2.5c0-.698.409-1.3 1-1.582M13.5 10V9a1.5 1.5 0 0 0-3 0v1Z"/></svg>

Before

Width:  |  Height:  |  Size: 549 B

After

Width:  |  Height:  |  Size: 549 B

+1 -1
View File
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-push" width="16" height="16" aria-hidden="true"><path d="M1 2.5A2.5 2.5 0 0 1 3.5 0h8.75a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 3.5 9h3.25a.75.75 0 0 1 0 1.5H3.5a1 1 0 0 0 0 2h5.75a.75.75 0 0 1 0 1.5H3.5A2.5 2.5 0 0 1 1 11.5Zm13.23 7.79zl-1.224-1.224v6.184a.75.75 0 0 1-1.5 0V9.066L10.28 10.29a.75.75 0 0 1-1.06-1.061l2.505-2.504a.75.75 0 0 1 1.06 0L15.29 9.23a.75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg octicon-repo-push" width="16" height="16" aria-hidden="true"><path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0V1.5h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h2.25a.75.75 0 0 1 0 1.5H4.5a1 1 0 0 0 0 2h4.75a.75.75 0 0 1 0 1.5H4.5A2.5 2.5 0 0 1 2 11.5Zm12.23 7.79zl-1.224-1.224v6.184a.75.75 0 0 1-1.5 0V9.066L10.28 10.29a.75.75 0 0 1-1.06-1.061l2.505-2.504a.75.75 0 0 1 1.06 0L15.29 9.23a.75.75 0 0 1-.018 1.042.75.75 0 0 1-1.042.018"/></svg>

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

+1
View File
@@ -227,6 +227,7 @@ func PackageVersionMetadata(ctx *context.Context) {
},
Author: swift_module.Person{
Type: "Person",
Name: metadata.Author.String(),
GivenName: metadata.Author.GivenName,
MiddleName: metadata.Author.MiddleName,
FamilyName: metadata.Author.FamilyName,
+4 -3
View File
@@ -1225,10 +1225,11 @@ func registerWebRoutes(m *web.Router) {
// end "/{username}/{reponame}": view milestone, label, issue, pull, etc
m.Group("/{username}/{reponame}/{type:issues}", func() {
// these handlers also check unit permissions internally
m.Get("", repo.Issues)
m.Get("/{index}", repo.ViewIssue)
}, optSignIn, context.RepoAssignment, context.RequireUnitReader(unit.TypeIssues, unit.TypeExternalTracker))
// end "/{username}/{reponame}": issue/pull list, issue/pull view, external tracker
m.Get("/{index}", repo.ViewIssue) // also do pull-request redirection (".../issues/{PR-number}" -> ".../pulls/{PR-number}")
}, optSignIn, context.RepoAssignment, context.RequireUnitReader(unit.TypeIssues, unit.TypePullRequests, unit.TypeExternalTracker))
// end "/{username}/{reponame}": issue list, issue view (pull-request redirection), external tracker
m.Group("/{username}/{reponame}", func() { // edit issues, pulls, labels, milestones, etc
m.Group("/issues", func() {

Some files were not shown because too many files have changed in this diff Show More