From 5791a73e75b630db3cade3e606c45eb8d8a641cb Mon Sep 17 00:00:00 2001 From: silverwind Date: Sun, 7 Jul 2024 17:32:30 +0200 Subject: Convert frontend code to typescript (#31559) None of the frontend js/ts files was touched besides these two commands (edit: no longer true, I touched one file in https://github.com/go-gitea/gitea/pull/31559/commits/61105d0618e285d97e95044bfb64415f364a4526 because of a deprecation that was not showing before the rename). `tsc` currently reports 778 errors, so I have disabled it in CI as planned. Everything appears to work fine. --- .eslintrc.yaml | 10 +- Makefile | 6 +- package-lock.json | 157 +++++ package.json | 10 + tsconfig.json | 5 + types.d.ts | 4 + vitest.config.ts | 4 +- web_src/js/bootstrap.js | 96 --- web_src/js/bootstrap.test.js | 12 - web_src/js/bootstrap.test.ts | 12 + web_src/js/bootstrap.ts | 96 +++ web_src/js/components/ActionRunStatus.vue | 4 +- web_src/js/components/ActivityHeatmap.vue | 2 +- web_src/js/components/ContextPopup.vue | 6 +- web_src/js/components/DashboardRepoList.vue | 6 +- web_src/js/components/DiffCommitSelector.vue | 6 +- web_src/js/components/DiffFileList.vue | 6 +- web_src/js/components/DiffFileTree.vue | 10 +- web_src/js/components/DiffFileTreeItem.vue | 6 +- web_src/js/components/PullRequestMergeForm.vue | 6 +- web_src/js/components/RepoActionView.vue | 12 +- web_src/js/components/RepoActivityTopAuthors.vue | 2 +- web_src/js/components/RepoBranchTagSelector.vue | 10 +- web_src/js/components/RepoCodeFrequency.vue | 12 +- web_src/js/components/RepoContributors.vue | 12 +- web_src/js/components/RepoRecentCommits.vue | 12 +- .../js/components/ScopedAccessTokenSelector.vue | 4 +- web_src/js/features/admin/common.js | 260 -------- web_src/js/features/admin/common.ts | 260 ++++++++ web_src/js/features/admin/config.js | 24 - web_src/js/features/admin/config.ts | 24 + web_src/js/features/admin/emails.js | 14 - web_src/js/features/admin/emails.ts | 14 + web_src/js/features/admin/selfcheck.js | 31 - web_src/js/features/admin/selfcheck.ts | 31 + web_src/js/features/admin/users.js | 39 -- web_src/js/features/admin/users.ts | 39 ++ web_src/js/features/autofocus-end.js | 6 - web_src/js/features/autofocus-end.ts | 6 + web_src/js/features/captcha.js | 51 -- web_src/js/features/captcha.ts | 51 ++ web_src/js/features/citation.js | 76 --- web_src/js/features/citation.ts | 76 +++ web_src/js/features/clipboard.js | 32 - web_src/js/features/clipboard.ts | 32 + web_src/js/features/code-frequency.js | 21 - web_src/js/features/code-frequency.ts | 21 + web_src/js/features/codeeditor.js | 192 ------ web_src/js/features/codeeditor.ts | 192 ++++++ web_src/js/features/colorpicker.js | 66 -- web_src/js/features/colorpicker.ts | 66 ++ web_src/js/features/common-button.js | 159 ----- web_src/js/features/common-button.ts | 159 +++++ web_src/js/features/common-fetch-action.js | 128 ---- web_src/js/features/common-fetch-action.ts | 128 ++++ web_src/js/features/common-form.js | 30 - web_src/js/features/common-form.ts | 30 + web_src/js/features/common-issue-list.js | 68 -- web_src/js/features/common-issue-list.test.js | 16 - web_src/js/features/common-issue-list.test.ts | 16 + web_src/js/features/common-issue-list.ts | 68 ++ web_src/js/features/common-organization.js | 16 - web_src/js/features/common-organization.ts | 16 + web_src/js/features/common-page.js | 93 --- web_src/js/features/common-page.ts | 93 +++ web_src/js/features/comp/ComboMarkdownEditor.js | 332 ---------- web_src/js/features/comp/ComboMarkdownEditor.ts | 332 ++++++++++ web_src/js/features/comp/ConfirmModal.js | 31 - web_src/js/features/comp/ConfirmModal.ts | 31 + web_src/js/features/comp/EasyMDEToolbarActions.js | 152 ----- web_src/js/features/comp/EasyMDEToolbarActions.ts | 152 +++++ web_src/js/features/comp/EditorMarkdown.js | 105 --- web_src/js/features/comp/EditorMarkdown.ts | 105 +++ web_src/js/features/comp/EditorUpload.js | 183 ----- web_src/js/features/comp/EditorUpload.test.js | 14 - web_src/js/features/comp/EditorUpload.test.ts | 14 + web_src/js/features/comp/EditorUpload.ts | 183 +++++ web_src/js/features/comp/LabelEdit.js | 96 --- web_src/js/features/comp/LabelEdit.ts | 96 +++ web_src/js/features/comp/QuickSubmit.js | 19 - web_src/js/features/comp/QuickSubmit.ts | 19 + web_src/js/features/comp/ReactionSelector.js | 36 - web_src/js/features/comp/ReactionSelector.ts | 36 + web_src/js/features/comp/SearchUserBox.js | 51 -- web_src/js/features/comp/SearchUserBox.ts | 51 ++ web_src/js/features/comp/TextExpander.js | 61 -- web_src/js/features/comp/TextExpander.ts | 61 ++ web_src/js/features/comp/WebHookEditor.js | 44 -- web_src/js/features/comp/WebHookEditor.ts | 44 ++ web_src/js/features/contextpopup.js | 45 -- web_src/js/features/contextpopup.ts | 45 ++ web_src/js/features/contributors.js | 29 - web_src/js/features/contributors.ts | 29 + web_src/js/features/copycontent.js | 56 -- web_src/js/features/copycontent.ts | 56 ++ web_src/js/features/dropzone.js | 158 ----- web_src/js/features/dropzone.ts | 158 +++++ web_src/js/features/emoji.js | 38 -- web_src/js/features/emoji.ts | 38 ++ web_src/js/features/eventsource.sharedworker.js | 141 ---- web_src/js/features/eventsource.sharedworker.ts | 141 ++++ web_src/js/features/file-fold.js | 19 - web_src/js/features/file-fold.ts | 19 + web_src/js/features/heatmap.js | 42 -- web_src/js/features/heatmap.ts | 42 ++ web_src/js/features/imagediff.js | 284 -------- web_src/js/features/imagediff.ts | 284 ++++++++ web_src/js/features/install.js | 120 ---- web_src/js/features/install.ts | 120 ++++ web_src/js/features/notification.js | 193 ------ web_src/js/features/notification.ts | 193 ++++++ web_src/js/features/org-team.js | 39 -- web_src/js/features/org-team.ts | 39 ++ web_src/js/features/pull-view-file.js | 96 --- web_src/js/features/pull-view-file.ts | 96 +++ web_src/js/features/recent-commits.js | 21 - web_src/js/features/recent-commits.ts | 21 + web_src/js/features/repo-branch.js | 42 -- web_src/js/features/repo-branch.ts | 42 ++ web_src/js/features/repo-code.js | 195 ------ web_src/js/features/repo-code.test.js | 17 - web_src/js/features/repo-code.test.ts | 17 + web_src/js/features/repo-code.ts | 195 ++++++ web_src/js/features/repo-commit.js | 27 - web_src/js/features/repo-commit.ts | 27 + web_src/js/features/repo-common.js | 83 --- web_src/js/features/repo-common.ts | 83 +++ web_src/js/features/repo-diff-commit.js | 53 -- web_src/js/features/repo-diff-commit.ts | 53 ++ web_src/js/features/repo-diff-commitselect.js | 10 - web_src/js/features/repo-diff-commitselect.ts | 10 + web_src/js/features/repo-diff-filetree.js | 17 - web_src/js/features/repo-diff-filetree.ts | 17 + web_src/js/features/repo-diff.js | 225 ------- web_src/js/features/repo-diff.ts | 225 +++++++ web_src/js/features/repo-editor.js | 167 ----- web_src/js/features/repo-editor.ts | 167 +++++ web_src/js/features/repo-findfile.js | 117 ---- web_src/js/features/repo-findfile.test.js | 34 - web_src/js/features/repo-findfile.test.ts | 34 + web_src/js/features/repo-findfile.ts | 117 ++++ web_src/js/features/repo-graph.js | 155 ----- web_src/js/features/repo-graph.ts | 155 +++++ web_src/js/features/repo-home.js | 147 ----- web_src/js/features/repo-home.ts | 147 +++++ web_src/js/features/repo-issue-content.js | 154 ----- web_src/js/features/repo-issue-content.ts | 154 +++++ web_src/js/features/repo-issue-edit.js | 127 ---- web_src/js/features/repo-issue-edit.ts | 127 ++++ web_src/js/features/repo-issue-list.js | 245 ------- web_src/js/features/repo-issue-list.ts | 245 +++++++ web_src/js/features/repo-issue-pr-form.js | 10 - web_src/js/features/repo-issue-pr-form.ts | 10 + web_src/js/features/repo-issue-pr-status.js | 10 - web_src/js/features/repo-issue-pr-status.ts | 10 + web_src/js/features/repo-issue.js | 733 --------------------- web_src/js/features/repo-issue.ts | 733 +++++++++++++++++++++ web_src/js/features/repo-legacy.js | 415 ------------ web_src/js/features/repo-legacy.ts | 415 ++++++++++++ web_src/js/features/repo-migrate.js | 63 -- web_src/js/features/repo-migrate.ts | 63 ++ web_src/js/features/repo-migration.js | 69 -- web_src/js/features/repo-migration.ts | 69 ++ web_src/js/features/repo-projects.js | 188 ------ web_src/js/features/repo-projects.ts | 188 ++++++ web_src/js/features/repo-release.js | 58 -- web_src/js/features/repo-release.ts | 58 ++ web_src/js/features/repo-search.js | 22 - web_src/js/features/repo-search.ts | 22 + web_src/js/features/repo-settings.js | 119 ---- web_src/js/features/repo-settings.ts | 119 ++++ web_src/js/features/repo-template.js | 51 -- web_src/js/features/repo-template.ts | 51 ++ web_src/js/features/repo-unicode-escape.js | 27 - web_src/js/features/repo-unicode-escape.ts | 27 + web_src/js/features/repo-wiki.js | 89 --- web_src/js/features/repo-wiki.ts | 89 +++ web_src/js/features/sshkey-helper.js | 10 - web_src/js/features/sshkey-helper.ts | 10 + web_src/js/features/stopwatch.js | 166 ----- web_src/js/features/stopwatch.ts | 166 +++++ web_src/js/features/tablesort.js | 22 - web_src/js/features/tablesort.ts | 22 + web_src/js/features/tribute.js | 57 -- web_src/js/features/tribute.ts | 57 ++ web_src/js/features/user-auth-webauthn.js | 257 -------- web_src/js/features/user-auth-webauthn.ts | 257 ++++++++ web_src/js/features/user-auth.js | 22 - web_src/js/features/user-auth.ts | 22 + web_src/js/features/user-settings.js | 19 - web_src/js/features/user-settings.ts | 19 + web_src/js/globals.js | 5 - web_src/js/globals.ts | 5 + web_src/js/htmx.js | 20 - web_src/js/htmx.ts | 20 + web_src/js/index.js | 229 ------- web_src/js/index.ts | 229 +++++++ web_src/js/markup/anchors.js | 67 -- web_src/js/markup/anchors.ts | 67 ++ web_src/js/markup/asciicast.js | 17 - web_src/js/markup/asciicast.ts | 17 + web_src/js/markup/codecopy.js | 21 - web_src/js/markup/codecopy.ts | 21 + web_src/js/markup/common.js | 8 - web_src/js/markup/common.ts | 8 + web_src/js/markup/content.js | 18 - web_src/js/markup/content.ts | 18 + web_src/js/markup/math.js | 47 -- web_src/js/markup/math.ts | 47 ++ web_src/js/markup/mermaid.js | 74 --- web_src/js/markup/mermaid.ts | 74 +++ web_src/js/markup/tasklist.js | 90 --- web_src/js/markup/tasklist.ts | 90 +++ web_src/js/modules/dirauto.js | 40 -- web_src/js/modules/dirauto.ts | 40 ++ web_src/js/modules/fetch.js | 41 -- web_src/js/modules/fetch.test.js | 10 - web_src/js/modules/fetch.test.ts | 10 + web_src/js/modules/fetch.ts | 41 ++ web_src/js/modules/fomantic.js | 36 - web_src/js/modules/fomantic.ts | 36 + web_src/js/modules/fomantic/api.js | 40 -- web_src/js/modules/fomantic/api.ts | 40 ++ web_src/js/modules/fomantic/base.js | 18 - web_src/js/modules/fomantic/base.ts | 18 + web_src/js/modules/fomantic/checkbox.js | 13 - web_src/js/modules/fomantic/checkbox.ts | 13 + web_src/js/modules/fomantic/dimmer.js | 32 - web_src/js/modules/fomantic/dimmer.ts | 32 + web_src/js/modules/fomantic/dropdown.js | 272 -------- web_src/js/modules/fomantic/dropdown.ts | 272 ++++++++ web_src/js/modules/fomantic/form.js | 13 - web_src/js/modules/fomantic/form.ts | 13 + web_src/js/modules/fomantic/modal.js | 28 - web_src/js/modules/fomantic/modal.ts | 28 + web_src/js/modules/fomantic/transition.js | 54 -- web_src/js/modules/fomantic/transition.ts | 54 ++ web_src/js/modules/sortable.js | 19 - web_src/js/modules/sortable.ts | 19 + web_src/js/modules/stores.js | 10 - web_src/js/modules/stores.ts | 10 + web_src/js/modules/tippy.js | 197 ------ web_src/js/modules/tippy.ts | 197 ++++++ web_src/js/modules/toast.js | 72 -- web_src/js/modules/toast.test.js | 16 - web_src/js/modules/toast.test.ts | 16 + web_src/js/modules/toast.ts | 72 ++ web_src/js/modules/worker.js | 9 - web_src/js/modules/worker.ts | 9 + web_src/js/render/ansi.js | 45 -- web_src/js/render/ansi.test.js | 20 - web_src/js/render/ansi.test.ts | 20 + web_src/js/render/ansi.ts | 45 ++ web_src/js/render/pdf.js | 19 - web_src/js/render/pdf.ts | 19 + web_src/js/standalone/devtest.js | 14 - web_src/js/standalone/devtest.ts | 14 + web_src/js/standalone/swagger.js | 32 - web_src/js/standalone/swagger.ts | 32 + web_src/js/svg.js | 226 ------- web_src/js/svg.test.js | 27 - web_src/js/svg.test.ts | 27 + web_src/js/svg.ts | 226 +++++++ web_src/js/utils.js | 154 ----- web_src/js/utils.test.js | 130 ---- web_src/js/utils.test.ts | 130 ++++ web_src/js/utils.ts | 154 +++++ web_src/js/utils/color.js | 33 - web_src/js/utils/color.test.js | 22 - web_src/js/utils/color.test.ts | 22 + web_src/js/utils/color.ts | 33 + web_src/js/utils/dom.js | 319 --------- web_src/js/utils/dom.test.js | 16 - web_src/js/utils/dom.test.ts | 16 + web_src/js/utils/dom.ts | 319 +++++++++ web_src/js/utils/image.js | 48 -- web_src/js/utils/image.test.js | 30 - web_src/js/utils/image.test.ts | 30 + web_src/js/utils/image.ts | 48 ++ web_src/js/utils/match.js | 43 -- web_src/js/utils/match.test.js | 50 -- web_src/js/utils/match.test.ts | 50 ++ web_src/js/utils/match.ts | 43 ++ web_src/js/utils/time.js | 72 -- web_src/js/utils/time.test.js | 15 - web_src/js/utils/time.test.ts | 15 + web_src/js/utils/time.ts | 72 ++ web_src/js/utils/url.js | 15 - web_src/js/utils/url.test.js | 13 - web_src/js/utils/url.test.ts | 13 + web_src/js/utils/url.ts | 15 + web_src/js/vendor/jquery.are-you-sure.js | 196 ------ web_src/js/vendor/jquery.are-you-sure.ts | 196 ++++++ web_src/js/vitest.setup.js | 17 - web_src/js/vitest.setup.ts | 17 + web_src/js/webcomponents/absolute-date.js | 40 -- web_src/js/webcomponents/absolute-date.test.js | 15 - web_src/js/webcomponents/absolute-date.test.ts | 15 + web_src/js/webcomponents/absolute-date.ts | 40 ++ web_src/js/webcomponents/index.js | 5 - web_src/js/webcomponents/index.ts | 5 + web_src/js/webcomponents/origin-url.js | 22 - web_src/js/webcomponents/origin-url.test.js | 17 - web_src/js/webcomponents/origin-url.test.ts | 17 + web_src/js/webcomponents/origin-url.ts | 22 + web_src/js/webcomponents/overflow-menu.js | 217 ------ web_src/js/webcomponents/overflow-menu.ts | 217 ++++++ web_src/js/webcomponents/polyfills.js | 17 - web_src/js/webcomponents/polyfills.ts | 17 + webpack.config.js | 16 +- 310 files changed, 11714 insertions(+), 11538 deletions(-) create mode 100644 types.d.ts delete mode 100644 web_src/js/bootstrap.js delete mode 100644 web_src/js/bootstrap.test.js create mode 100644 web_src/js/bootstrap.test.ts create mode 100644 web_src/js/bootstrap.ts delete mode 100644 web_src/js/features/admin/common.js create mode 100644 web_src/js/features/admin/common.ts delete mode 100644 web_src/js/features/admin/config.js create mode 100644 web_src/js/features/admin/config.ts delete mode 100644 web_src/js/features/admin/emails.js create mode 100644 web_src/js/features/admin/emails.ts delete mode 100644 web_src/js/features/admin/selfcheck.js create mode 100644 web_src/js/features/admin/selfcheck.ts delete mode 100644 web_src/js/features/admin/users.js create mode 100644 web_src/js/features/admin/users.ts delete mode 100644 web_src/js/features/autofocus-end.js create mode 100644 web_src/js/features/autofocus-end.ts delete mode 100644 web_src/js/features/captcha.js create mode 100644 web_src/js/features/captcha.ts delete mode 100644 web_src/js/features/citation.js create mode 100644 web_src/js/features/citation.ts delete mode 100644 web_src/js/features/clipboard.js create mode 100644 web_src/js/features/clipboard.ts delete mode 100644 web_src/js/features/code-frequency.js create mode 100644 web_src/js/features/code-frequency.ts delete mode 100644 web_src/js/features/codeeditor.js create mode 100644 web_src/js/features/codeeditor.ts delete mode 100644 web_src/js/features/colorpicker.js create mode 100644 web_src/js/features/colorpicker.ts delete mode 100644 web_src/js/features/common-button.js create mode 100644 web_src/js/features/common-button.ts delete mode 100644 web_src/js/features/common-fetch-action.js create mode 100644 web_src/js/features/common-fetch-action.ts delete mode 100644 web_src/js/features/common-form.js create mode 100644 web_src/js/features/common-form.ts delete mode 100644 web_src/js/features/common-issue-list.js delete mode 100644 web_src/js/features/common-issue-list.test.js create mode 100644 web_src/js/features/common-issue-list.test.ts create mode 100644 web_src/js/features/common-issue-list.ts delete mode 100644 web_src/js/features/common-organization.js create mode 100644 web_src/js/features/common-organization.ts delete mode 100644 web_src/js/features/common-page.js create mode 100644 web_src/js/features/common-page.ts delete mode 100644 web_src/js/features/comp/ComboMarkdownEditor.js create mode 100644 web_src/js/features/comp/ComboMarkdownEditor.ts delete mode 100644 web_src/js/features/comp/ConfirmModal.js create mode 100644 web_src/js/features/comp/ConfirmModal.ts delete mode 100644 web_src/js/features/comp/EasyMDEToolbarActions.js create mode 100644 web_src/js/features/comp/EasyMDEToolbarActions.ts delete mode 100644 web_src/js/features/comp/EditorMarkdown.js create mode 100644 web_src/js/features/comp/EditorMarkdown.ts delete mode 100644 web_src/js/features/comp/EditorUpload.js delete mode 100644 web_src/js/features/comp/EditorUpload.test.js create mode 100644 web_src/js/features/comp/EditorUpload.test.ts create mode 100644 web_src/js/features/comp/EditorUpload.ts delete mode 100644 web_src/js/features/comp/LabelEdit.js create mode 100644 web_src/js/features/comp/LabelEdit.ts delete mode 100644 web_src/js/features/comp/QuickSubmit.js create mode 100644 web_src/js/features/comp/QuickSubmit.ts delete mode 100644 web_src/js/features/comp/ReactionSelector.js create mode 100644 web_src/js/features/comp/ReactionSelector.ts delete mode 100644 web_src/js/features/comp/SearchUserBox.js create mode 100644 web_src/js/features/comp/SearchUserBox.ts delete mode 100644 web_src/js/features/comp/TextExpander.js create mode 100644 web_src/js/features/comp/TextExpander.ts delete mode 100644 web_src/js/features/comp/WebHookEditor.js create mode 100644 web_src/js/features/comp/WebHookEditor.ts delete mode 100644 web_src/js/features/contextpopup.js create mode 100644 web_src/js/features/contextpopup.ts delete mode 100644 web_src/js/features/contributors.js create mode 100644 web_src/js/features/contributors.ts delete mode 100644 web_src/js/features/copycontent.js create mode 100644 web_src/js/features/copycontent.ts delete mode 100644 web_src/js/features/dropzone.js create mode 100644 web_src/js/features/dropzone.ts delete mode 100644 web_src/js/features/emoji.js create mode 100644 web_src/js/features/emoji.ts delete mode 100644 web_src/js/features/eventsource.sharedworker.js create mode 100644 web_src/js/features/eventsource.sharedworker.ts delete mode 100644 web_src/js/features/file-fold.js create mode 100644 web_src/js/features/file-fold.ts delete mode 100644 web_src/js/features/heatmap.js create mode 100644 web_src/js/features/heatmap.ts delete mode 100644 web_src/js/features/imagediff.js create mode 100644 web_src/js/features/imagediff.ts delete mode 100644 web_src/js/features/install.js create mode 100644 web_src/js/features/install.ts delete mode 100644 web_src/js/features/notification.js create mode 100644 web_src/js/features/notification.ts delete mode 100644 web_src/js/features/org-team.js create mode 100644 web_src/js/features/org-team.ts delete mode 100644 web_src/js/features/pull-view-file.js create mode 100644 web_src/js/features/pull-view-file.ts delete mode 100644 web_src/js/features/recent-commits.js create mode 100644 web_src/js/features/recent-commits.ts delete mode 100644 web_src/js/features/repo-branch.js create mode 100644 web_src/js/features/repo-branch.ts delete mode 100644 web_src/js/features/repo-code.js delete mode 100644 web_src/js/features/repo-code.test.js create mode 100644 web_src/js/features/repo-code.test.ts create mode 100644 web_src/js/features/repo-code.ts delete mode 100644 web_src/js/features/repo-commit.js create mode 100644 web_src/js/features/repo-commit.ts delete mode 100644 web_src/js/features/repo-common.js create mode 100644 web_src/js/features/repo-common.ts delete mode 100644 web_src/js/features/repo-diff-commit.js create mode 100644 web_src/js/features/repo-diff-commit.ts delete mode 100644 web_src/js/features/repo-diff-commitselect.js create mode 100644 web_src/js/features/repo-diff-commitselect.ts delete mode 100644 web_src/js/features/repo-diff-filetree.js create mode 100644 web_src/js/features/repo-diff-filetree.ts delete mode 100644 web_src/js/features/repo-diff.js create mode 100644 web_src/js/features/repo-diff.ts delete mode 100644 web_src/js/features/repo-editor.js create mode 100644 web_src/js/features/repo-editor.ts delete mode 100644 web_src/js/features/repo-findfile.js delete mode 100644 web_src/js/features/repo-findfile.test.js create mode 100644 web_src/js/features/repo-findfile.test.ts create mode 100644 web_src/js/features/repo-findfile.ts delete mode 100644 web_src/js/features/repo-graph.js create mode 100644 web_src/js/features/repo-graph.ts delete mode 100644 web_src/js/features/repo-home.js create mode 100644 web_src/js/features/repo-home.ts delete mode 100644 web_src/js/features/repo-issue-content.js create mode 100644 web_src/js/features/repo-issue-content.ts delete mode 100644 web_src/js/features/repo-issue-edit.js create mode 100644 web_src/js/features/repo-issue-edit.ts delete mode 100644 web_src/js/features/repo-issue-list.js create mode 100644 web_src/js/features/repo-issue-list.ts delete mode 100644 web_src/js/features/repo-issue-pr-form.js create mode 100644 web_src/js/features/repo-issue-pr-form.ts delete mode 100644 web_src/js/features/repo-issue-pr-status.js create mode 100644 web_src/js/features/repo-issue-pr-status.ts delete mode 100644 web_src/js/features/repo-issue.js create mode 100644 web_src/js/features/repo-issue.ts delete mode 100644 web_src/js/features/repo-legacy.js create mode 100644 web_src/js/features/repo-legacy.ts delete mode 100644 web_src/js/features/repo-migrate.js create mode 100644 web_src/js/features/repo-migrate.ts delete mode 100644 web_src/js/features/repo-migration.js create mode 100644 web_src/js/features/repo-migration.ts delete mode 100644 web_src/js/features/repo-projects.js create mode 100644 web_src/js/features/repo-projects.ts delete mode 100644 web_src/js/features/repo-release.js create mode 100644 web_src/js/features/repo-release.ts delete mode 100644 web_src/js/features/repo-search.js create mode 100644 web_src/js/features/repo-search.ts delete mode 100644 web_src/js/features/repo-settings.js create mode 100644 web_src/js/features/repo-settings.ts delete mode 100644 web_src/js/features/repo-template.js create mode 100644 web_src/js/features/repo-template.ts delete mode 100644 web_src/js/features/repo-unicode-escape.js create mode 100644 web_src/js/features/repo-unicode-escape.ts delete mode 100644 web_src/js/features/repo-wiki.js create mode 100644 web_src/js/features/repo-wiki.ts delete mode 100644 web_src/js/features/sshkey-helper.js create mode 100644 web_src/js/features/sshkey-helper.ts delete mode 100644 web_src/js/features/stopwatch.js create mode 100644 web_src/js/features/stopwatch.ts delete mode 100644 web_src/js/features/tablesort.js create mode 100644 web_src/js/features/tablesort.ts delete mode 100644 web_src/js/features/tribute.js create mode 100644 web_src/js/features/tribute.ts delete mode 100644 web_src/js/features/user-auth-webauthn.js create mode 100644 web_src/js/features/user-auth-webauthn.ts delete mode 100644 web_src/js/features/user-auth.js create mode 100644 web_src/js/features/user-auth.ts delete mode 100644 web_src/js/features/user-settings.js create mode 100644 web_src/js/features/user-settings.ts delete mode 100644 web_src/js/globals.js create mode 100644 web_src/js/globals.ts delete mode 100644 web_src/js/htmx.js create mode 100644 web_src/js/htmx.ts delete mode 100644 web_src/js/index.js create mode 100644 web_src/js/index.ts delete mode 100644 web_src/js/markup/anchors.js create mode 100644 web_src/js/markup/anchors.ts delete mode 100644 web_src/js/markup/asciicast.js create mode 100644 web_src/js/markup/asciicast.ts delete mode 100644 web_src/js/markup/codecopy.js create mode 100644 web_src/js/markup/codecopy.ts delete mode 100644 web_src/js/markup/common.js create mode 100644 web_src/js/markup/common.ts delete mode 100644 web_src/js/markup/content.js create mode 100644 web_src/js/markup/content.ts delete mode 100644 web_src/js/markup/math.js create mode 100644 web_src/js/markup/math.ts delete mode 100644 web_src/js/markup/mermaid.js create mode 100644 web_src/js/markup/mermaid.ts delete mode 100644 web_src/js/markup/tasklist.js create mode 100644 web_src/js/markup/tasklist.ts delete mode 100644 web_src/js/modules/dirauto.js create mode 100644 web_src/js/modules/dirauto.ts delete mode 100644 web_src/js/modules/fetch.js delete mode 100644 web_src/js/modules/fetch.test.js create mode 100644 web_src/js/modules/fetch.test.ts create mode 100644 web_src/js/modules/fetch.ts delete mode 100644 web_src/js/modules/fomantic.js create mode 100644 web_src/js/modules/fomantic.ts delete mode 100644 web_src/js/modules/fomantic/api.js create mode 100644 web_src/js/modules/fomantic/api.ts delete mode 100644 web_src/js/modules/fomantic/base.js create mode 100644 web_src/js/modules/fomantic/base.ts delete mode 100644 web_src/js/modules/fomantic/checkbox.js create mode 100644 web_src/js/modules/fomantic/checkbox.ts delete mode 100644 web_src/js/modules/fomantic/dimmer.js create mode 100644 web_src/js/modules/fomantic/dimmer.ts delete mode 100644 web_src/js/modules/fomantic/dropdown.js create mode 100644 web_src/js/modules/fomantic/dropdown.ts delete mode 100644 web_src/js/modules/fomantic/form.js create mode 100644 web_src/js/modules/fomantic/form.ts delete mode 100644 web_src/js/modules/fomantic/modal.js create mode 100644 web_src/js/modules/fomantic/modal.ts delete mode 100644 web_src/js/modules/fomantic/transition.js create mode 100644 web_src/js/modules/fomantic/transition.ts delete mode 100644 web_src/js/modules/sortable.js create mode 100644 web_src/js/modules/sortable.ts delete mode 100644 web_src/js/modules/stores.js create mode 100644 web_src/js/modules/stores.ts delete mode 100644 web_src/js/modules/tippy.js create mode 100644 web_src/js/modules/tippy.ts delete mode 100644 web_src/js/modules/toast.js delete mode 100644 web_src/js/modules/toast.test.js create mode 100644 web_src/js/modules/toast.test.ts create mode 100644 web_src/js/modules/toast.ts delete mode 100644 web_src/js/modules/worker.js create mode 100644 web_src/js/modules/worker.ts delete mode 100644 web_src/js/render/ansi.js delete mode 100644 web_src/js/render/ansi.test.js create mode 100644 web_src/js/render/ansi.test.ts create mode 100644 web_src/js/render/ansi.ts delete mode 100644 web_src/js/render/pdf.js create mode 100644 web_src/js/render/pdf.ts delete mode 100644 web_src/js/standalone/devtest.js create mode 100644 web_src/js/standalone/devtest.ts delete mode 100644 web_src/js/standalone/swagger.js create mode 100644 web_src/js/standalone/swagger.ts delete mode 100644 web_src/js/svg.js delete mode 100644 web_src/js/svg.test.js create mode 100644 web_src/js/svg.test.ts create mode 100644 web_src/js/svg.ts delete mode 100644 web_src/js/utils.js delete mode 100644 web_src/js/utils.test.js create mode 100644 web_src/js/utils.test.ts create mode 100644 web_src/js/utils.ts delete mode 100644 web_src/js/utils/color.js delete mode 100644 web_src/js/utils/color.test.js create mode 100644 web_src/js/utils/color.test.ts create mode 100644 web_src/js/utils/color.ts delete mode 100644 web_src/js/utils/dom.js delete mode 100644 web_src/js/utils/dom.test.js create mode 100644 web_src/js/utils/dom.test.ts create mode 100644 web_src/js/utils/dom.ts delete mode 100644 web_src/js/utils/image.js delete mode 100644 web_src/js/utils/image.test.js create mode 100644 web_src/js/utils/image.test.ts create mode 100644 web_src/js/utils/image.ts delete mode 100644 web_src/js/utils/match.js delete mode 100644 web_src/js/utils/match.test.js create mode 100644 web_src/js/utils/match.test.ts create mode 100644 web_src/js/utils/match.ts delete mode 100644 web_src/js/utils/time.js delete mode 100644 web_src/js/utils/time.test.js create mode 100644 web_src/js/utils/time.test.ts create mode 100644 web_src/js/utils/time.ts delete mode 100644 web_src/js/utils/url.js delete mode 100644 web_src/js/utils/url.test.js create mode 100644 web_src/js/utils/url.test.ts create mode 100644 web_src/js/utils/url.ts delete mode 100644 web_src/js/vendor/jquery.are-you-sure.js create mode 100644 web_src/js/vendor/jquery.are-you-sure.ts delete mode 100644 web_src/js/vitest.setup.js create mode 100644 web_src/js/vitest.setup.ts delete mode 100644 web_src/js/webcomponents/absolute-date.js delete mode 100644 web_src/js/webcomponents/absolute-date.test.js create mode 100644 web_src/js/webcomponents/absolute-date.test.ts create mode 100644 web_src/js/webcomponents/absolute-date.ts delete mode 100644 web_src/js/webcomponents/index.js create mode 100644 web_src/js/webcomponents/index.ts delete mode 100644 web_src/js/webcomponents/origin-url.js delete mode 100644 web_src/js/webcomponents/origin-url.test.js create mode 100644 web_src/js/webcomponents/origin-url.test.ts create mode 100644 web_src/js/webcomponents/origin-url.ts delete mode 100644 web_src/js/webcomponents/overflow-menu.js create mode 100644 web_src/js/webcomponents/overflow-menu.ts delete mode 100644 web_src/js/webcomponents/polyfills.js create mode 100644 web_src/js/webcomponents/polyfills.ts diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 293d435b11..59eff85dc3 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -58,10 +58,10 @@ overrides: worker: true rules: no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, status, statusbar, stop, toolbar, top] - - files: ["*.config.*"] + - files: ["*.config.*", "**/*.d.ts"] rules: i/no-unused-modules: [0] - - files: ["**/*.test.*", "web_src/js/test/setup.js"] + - files: ["**/*.test.*", "web_src/js/test/setup.ts"] env: vitest-globals/env: true rules: @@ -114,7 +114,7 @@ overrides: vitest/valid-describe-callback: [2] vitest/valid-expect: [2] vitest/valid-title: [2] - - files: ["web_src/js/modules/fetch.js", "web_src/js/standalone/**/*"] + - files: ["web_src/js/modules/fetch.ts", "web_src/js/standalone/**/*"] rules: no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression] - files: ["**/*.vue"] @@ -467,7 +467,7 @@ rules: no-dupe-else-if: [2] no-dupe-keys: [2] no-duplicate-case: [2] - no-duplicate-imports: [2] + no-duplicate-imports: [0] no-else-return: [2] no-empty-character-class: [2] no-empty-function: [0] @@ -619,7 +619,7 @@ rules: no-restricted-exports: [0] no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, location, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, self, status, statusbar, stop, toolbar, top, __dirname, __filename] no-restricted-imports: [0] - no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.js instead"}] + no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.ts instead"}] no-return-assign: [0] no-script-url: [2] no-self-assign: [2, {props: true}] diff --git a/Makefile b/Makefile index d329a4ac3b..1432467bcc 100644 --- a/Makefile +++ b/Makefile @@ -144,7 +144,7 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMAN GO_DIRS := build cmd models modules routers services tests WEB_DIRS := web_src/js web_src/css -ESLINT_FILES := web_src/js tools *.js tests/e2e +ESLINT_FILES := web_src/js tools *.js *.ts tests/e2e STYLELINT_FILES := web_src/css web_src/js/components/*.vue SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.js *.md *.yml *.yaml *.toml)) EDITORCONFIG_FILES := templates .github/workflows options/locale/locale_en-US.ini @@ -376,12 +376,12 @@ lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig .PHONY: lint-js lint-js: node_modules npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) - npx tsc +# npx tsc .PHONY: lint-js-fix lint-js-fix: node_modules npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) --fix - npx tsc +# npx tsc .PHONY: lint-css lint-css: node_modules diff --git a/package-lock.json b/package-lock.json index 502489e726..3b84ebaa88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,16 @@ "@stoplight/spectral-cli": "6.11.1", "@stylistic/eslint-plugin-js": "2.2.1", "@stylistic/stylelint-plugin": "2.1.2", + "@types/dropzone": "5.7.8", + "@types/jquery": "3.5.30", + "@types/katex": "0.16.7", + "@types/license-checker-webpack-plugin": "0.2.4", + "@types/pdfobject": "2.2.5", + "@types/sortablejs": "1.15.8", + "@types/swagger-ui-dist": "3.30.5", + "@types/throttle-debounce": "5.0.2", + "@types/tinycolor2": "1.4.6", + "@types/toastify-js": "1.12.3", "@typescript-eslint/eslint-plugin": "7.14.1", "@typescript-eslint/parser": "7.14.1", "@vitejs/plugin-vue": "5.0.5", @@ -2271,6 +2281,16 @@ "@types/ms": "*" } }, + "node_modules/@types/dropzone": { + "version": "5.7.8", + "resolved": "https://registry.npmjs.org/@types/dropzone/-/dropzone-5.7.8.tgz", + "integrity": "sha512-+L0/KRMuB8cIiCe5AfF448nGMpY+gHiSakqsqT3plEIfgqSV+gcVs1AkngM9zZG8hi6lgMxy4iYEuGXXmqjYvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@types/es-aggregate-error": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.6.tgz", @@ -2303,6 +2323,16 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "node_modules/@types/jquery": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2314,6 +2344,23 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/license-checker-webpack-plugin": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/license-checker-webpack-plugin/-/license-checker-webpack-plugin-0.2.4.tgz", + "integrity": "sha512-QTWqHJ5T9lgm3vPwWSZnBwAB+15zl4QBfGoNDcjnthHQEP8VTV87fYfp1HVeCtrDip73xWMtasQeA4QHQ0nFLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webpack": "^4" + } + }, "node_modules/@types/marked": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", @@ -2346,12 +2393,54 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, + "node_modules/@types/pdfobject": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@types/pdfobject/-/pdfobject-2.2.5.tgz", + "integrity": "sha512-7gD5tqc/RUDq0PyoLemL0vEHxBYi+zY0WVaFAx/Y0jBsXFgot1vB9No1GhDZGwRGJMCIZbgAb74QG9MTyTNU/g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/sarif": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", "dev": true }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/swagger-ui-dist": { + "version": "3.30.5", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-dist/-/swagger-ui-dist-3.30.5.tgz", + "integrity": "sha512-SrXhD9L8qeIxJzN+o1kmf3wXeVf/+Km3jIdRM1+Yq3I5b/dlF5TcGr5WCVM7I/cBYpgf43/gCPIucQ13AhICiw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/tern": { "version": "0.23.9", "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", @@ -2360,6 +2449,37 @@ "@types/estree": "*" } }, + "node_modules/@types/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/toastify-js": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.3.tgz", + "integrity": "sha512-9RjLlbAHMSaae/KZNHGv19VG4gcLIm3YjvacCXBtfMfYn26h76YP5oxXI8k26q4iKXCB9LNfv18lsoS0JnFPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", @@ -2371,6 +2491,43 @@ "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==", "dev": true }, + "node_modules/@types/webpack": { + "version": "4.41.38", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz", + "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.14.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", diff --git a/package.json b/package.json index e44415ee32..4ad52d368e 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,16 @@ "@stoplight/spectral-cli": "6.11.1", "@stylistic/eslint-plugin-js": "2.2.1", "@stylistic/stylelint-plugin": "2.1.2", + "@types/dropzone": "5.7.8", + "@types/jquery": "3.5.30", + "@types/katex": "0.16.7", + "@types/license-checker-webpack-plugin": "0.2.4", + "@types/pdfobject": "2.2.5", + "@types/sortablejs": "1.15.8", + "@types/swagger-ui-dist": "3.30.5", + "@types/throttle-debounce": "5.0.2", + "@types/tinycolor2": "1.4.6", + "@types/toastify-js": "1.12.3", "@typescript-eslint/eslint-plugin": "7.14.1", "@typescript-eslint/parser": "7.14.1", "@vitejs/plugin-vue": "5.0.5", diff --git a/tsconfig.json b/tsconfig.json index 7ddbada765..5640c8e741 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,5 +26,10 @@ "noUnusedParameters": true, "noPropertyAccessFromIndexSignature": false, "exactOptionalPropertyTypes": false, + "sourceMap": true, + "types": [ + "vitest/globals", + "./types.d.ts", + ], } } diff --git a/types.d.ts b/types.d.ts new file mode 100644 index 0000000000..9348424371 --- /dev/null +++ b/types.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const value: string; + export default value; +} diff --git a/vitest.config.ts b/vitest.config.ts index ea0fafeee8..da61450764 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,8 +4,8 @@ import {stringPlugin} from 'vite-string-plugin'; export default defineConfig({ test: { - include: ['web_src/**/*.test.js'], - setupFiles: ['web_src/js/vitest.setup.js'], + include: ['web_src/**/*.test.ts'], + setupFiles: ['web_src/js/vitest.setup.ts'], environment: 'happy-dom', testTimeout: 20000, open: false, diff --git a/web_src/js/bootstrap.js b/web_src/js/bootstrap.js deleted file mode 100644 index 26627dfded..0000000000 --- a/web_src/js/bootstrap.js +++ /dev/null @@ -1,96 +0,0 @@ -// DO NOT IMPORT window.config HERE! -// to make sure the error handler always works, we should never import `window.config`, because -// some user's custom template breaks it. - -// This sets up the URL prefix used in webpack's chunk loading. -// This file must be imported before any lazy-loading is being attempted. -__webpack_public_path__ = `${window.config?.assetUrlPrefix ?? '/assets'}/`; - -function shouldIgnoreError(err) { - const ignorePatterns = [ - '/assets/js/monaco.', // https://github.com/go-gitea/gitea/issues/30861 , https://github.com/microsoft/monaco-editor/issues/4496 - ]; - for (const pattern of ignorePatterns) { - if (err.stack?.includes(pattern)) return true; - } - return false; -} - -export function showGlobalErrorMessage(msg, msgType = 'error') { - const msgContainer = document.querySelector('.page-content') ?? document.body; - const msgCompact = msg.replace(/\W/g, '').trim(); // compact the message to a data attribute to avoid too many duplicated messages - let msgDiv = msgContainer.querySelector(`.js-global-error[data-global-error-msg-compact="${msgCompact}"]`); - if (!msgDiv) { - const el = document.createElement('div'); - el.innerHTML = `
`; - msgDiv = el.childNodes[0]; - } - // merge duplicated messages into "the message (count)" format - const msgCount = Number(msgDiv.getAttribute(`data-global-error-msg-count`)) + 1; - msgDiv.setAttribute(`data-global-error-msg-compact`, msgCompact); - msgDiv.setAttribute(`data-global-error-msg-count`, msgCount.toString()); - msgDiv.querySelector('.ui.message').textContent = msg + (msgCount > 1 ? ` (${msgCount})` : ''); - msgContainer.prepend(msgDiv); -} - -/** - * @param {ErrorEvent|PromiseRejectionEvent} event - Event - * @param {string} event.message - Only present on ErrorEvent - * @param {string} event.error - Only present on ErrorEvent - * @param {string} event.type - Only present on ErrorEvent - * @param {string} event.filename - Only present on ErrorEvent - * @param {number} event.lineno - Only present on ErrorEvent - * @param {number} event.colno - Only present on ErrorEvent - * @param {string} event.reason - Only present on PromiseRejectionEvent - * @param {number} event.promise - Only present on PromiseRejectionEvent - */ -function processWindowErrorEvent({error, reason, message, type, filename, lineno, colno}) { - const err = error ?? reason; - const assetBaseUrl = String(new URL(__webpack_public_path__, window.location.origin)); - const {runModeIsProd} = window.config ?? {}; - - // `error` and `reason` are not guaranteed to be errors. If the value is falsy, it is likely a - // non-critical event from the browser. We log them but don't show them to users. Examples: - // - https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#observation_errors - // - https://github.com/mozilla-mobile/firefox-ios/issues/10817 - // - https://github.com/go-gitea/gitea/issues/20240 - if (!err) { - if (message) console.error(new Error(message)); - if (runModeIsProd) return; - } - - if (err instanceof Error) { - // If the error stack trace does not include the base URL of our script assets, it likely came - // from a browser extension or inline script. Do not show such errors in production. - if (!err.stack?.includes(assetBaseUrl) && runModeIsProd) return; - // Ignore some known errors that are unable to fix - if (shouldIgnoreError(err)) return; - } - - let msg = err?.message ?? message; - if (lineno) msg += ` (${filename} @ ${lineno}:${colno})`; - const dot = msg.endsWith('.') ? '' : '.'; - const renderedType = type === 'unhandledrejection' ? 'promise rejection' : type; - showGlobalErrorMessage(`JavaScript ${renderedType}: ${msg}${dot} Open browser console to see more details.`); -} - -function initGlobalErrorHandler() { - if (window._globalHandlerErrors?._inited) { - showGlobalErrorMessage(`The global error handler has been initialized, do not initialize it again`); - return; - } - if (!window.config) { - showGlobalErrorMessage(`Gitea JavaScript code couldn't run correctly, please check your custom templates`); - } - // we added an event handler for window error at the very beginning of