├── .eslintrc.js ├── .github └── workflows │ └── test-and-build.yml ├── .gitignore ├── Dockerfile ├── History.md ├── LICENSE ├── Makefile ├── README.md ├── assets.go ├── ci ├── build.mjs └── build.sh ├── default_files ├── home.md └── navigation.md ├── docker-entrypoint.sh ├── frontend └── index.html ├── go.mod ├── go.sum ├── main.go ├── package-lock.json ├── package.json ├── src ├── app.vue ├── easymde.css ├── edit.vue ├── main.js ├── markdown.vue └── view.vue ├── storage.go └── storage_test.go /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Hack to automatically load globally installed eslint modules 3 | * on Archlinux systems placed in /usr/lib/node_modules 4 | * 5 | * Source: https://github.com/eslint/eslint/issues/11914#issuecomment-569108633 6 | */ 7 | 8 | const Module = require('module') 9 | 10 | const hacks = [ 11 | '@babel/eslint-parser', 12 | 'eslint-plugin-vue', 13 | ] 14 | 15 | const ModuleFindPath = Module._findPath 16 | Module._findPath = (request, paths, isMain) => { 17 | const r = ModuleFindPath(request, paths, isMain) 18 | if (!r && hacks.includes(request)) { 19 | return require.resolve(`/usr/lib/node_modules/${request}`) 20 | } 21 | return r 22 | } 23 | 24 | /* 25 | * ESLint configuration derived as differences from eslint:recommended 26 | * with changes I found useful to ensure code quality and equal formatting 27 | * https://eslint.org/docs/user-guide/configuring 28 | */ 29 | 30 | module.exports = { 31 | env: { 32 | browser: true, 33 | node: true, 34 | }, 35 | 36 | extends: [ 37 | 'plugin:vue/recommended', 38 | 'eslint:recommended', // https://eslint.org/docs/rules/ 39 | ], 40 | 41 | globals: { 42 | process: true, 43 | }, 44 | 45 | parserOptions: { 46 | ecmaVersion: 2020, 47 | parser: '@babel/eslint-parser', 48 | requireConfigFile: false, 49 | }, 50 | 51 | plugins: [ 52 | // required to lint *.vue files 53 | 'vue', 54 | ], 55 | 56 | reportUnusedDisableDirectives: true, 57 | 58 | root: true, 59 | 60 | rules: { 61 | 'array-bracket-newline': ['error', { multiline: true }], 62 | 'array-bracket-spacing': ['error'], 63 | 'arrow-body-style': ['error', 'as-needed'], 64 | 'arrow-parens': ['error', 'as-needed'], 65 | 'arrow-spacing': ['error', { after: true, before: true }], 66 | 'block-spacing': ['error'], 67 | 'brace-style': ['error', '1tbs'], 68 | 'camelcase': ['error'], 69 | 'comma-dangle': ['error', 'always-multiline'], 70 | 'comma-spacing': ['error'], 71 | 'comma-style': ['error', 'last'], 72 | 'curly': ['error'], 73 | 'default-case-last': ['error'], 74 | 'default-param-last': ['error'], 75 | 'dot-location': ['error', 'property'], 76 | 'dot-notation': ['error'], 77 | 'eol-last': ['error', 'always'], 78 | 'eqeqeq': ['error', 'always', { null: 'ignore' }], 79 | 'func-call-spacing': ['error', 'never'], 80 | 'function-paren-newline': ['error', 'multiline'], 81 | 'generator-star-spacing': ['off'], // allow async-await 82 | 'implicit-arrow-linebreak': ['error'], 83 | 'indent': ['error', 2], 84 | 'key-spacing': ['error', { afterColon: true, beforeColon: false, mode: 'strict' }], 85 | 'keyword-spacing': ['error'], 86 | 'linebreak-style': ['error', 'unix'], 87 | 'lines-between-class-members': ['error'], 88 | 'multiline-comment-style': ['warn'], 89 | 'newline-per-chained-call': ['error'], 90 | 'no-alert': ['error'], 91 | 'no-console': ['off'], 92 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // allow debugger during development 93 | 'no-duplicate-imports': ['error'], 94 | 'no-else-return': ['error'], 95 | 'no-empty-function': ['error'], 96 | 'no-extra-parens': ['error'], 97 | 'no-implicit-coercion': ['error'], 98 | 'no-lonely-if': ['error'], 99 | 'no-multi-spaces': ['error'], 100 | 'no-multiple-empty-lines': ['warn', { max: 2, maxBOF: 0, maxEOF: 0 }], 101 | 'no-promise-executor-return': ['error'], 102 | 'no-return-assign': ['error'], 103 | 'no-script-url': ['error'], 104 | 'no-template-curly-in-string': ['error'], 105 | 'no-trailing-spaces': ['error'], 106 | 'no-unneeded-ternary': ['error'], 107 | 'no-unreachable-loop': ['error'], 108 | 'no-unsafe-optional-chaining': ['error'], 109 | 'no-useless-return': ['error'], 110 | 'no-var': ['error'], 111 | 'no-warning-comments': ['error'], 112 | 'no-whitespace-before-property': ['error'], 113 | 'object-curly-newline': ['error', { consistent: true }], 114 | 'object-curly-spacing': ['error', 'always'], 115 | 'object-shorthand': ['error'], 116 | 'padded-blocks': ['error', 'never'], 117 | 'prefer-arrow-callback': ['error'], 118 | 'prefer-const': ['error'], 119 | 'prefer-object-spread': ['error'], 120 | 'prefer-rest-params': ['error'], 121 | 'prefer-template': ['error'], 122 | 'quote-props': ['error', 'consistent-as-needed', { keywords: false }], 123 | 'quotes': ['error', 'single', { allowTemplateLiterals: true }], 124 | 'require-atomic-updates': ['error'], 125 | 'require-await': ['error'], 126 | 'semi': ['error', 'never'], 127 | 'sort-imports': ['error', { ignoreCase: true, ignoreDeclarationSort: false, ignoreMemberSort: false }], 128 | 'sort-keys': ['error', 'asc', { caseSensitive: true, natural: false }], 129 | 'space-before-blocks': ['error', 'always'], 130 | 'space-before-function-paren': ['error', 'never'], 131 | 'space-in-parens': ['error', 'never'], 132 | 'space-infix-ops': ['error'], 133 | 'space-unary-ops': ['error', { nonwords: false, words: true }], 134 | 'spaced-comment': ['warn', 'always'], 135 | 'switch-colon-spacing': ['error'], 136 | 'template-curly-spacing': ['error', 'never'], 137 | 'unicode-bom': ['error', 'never'], 138 | 'vue/new-line-between-multi-line-property': ['error'], 139 | 'vue/no-empty-component-block': ['error'], 140 | 'vue/no-reserved-component-names': ['error'], 141 | 'vue/no-template-target-blank': ['error'], 142 | 'vue/no-unused-properties': ['error'], 143 | 'vue/no-unused-refs': ['error'], 144 | 'vue/no-useless-mustaches': ['error'], 145 | 'vue/order-in-components': ['off'], // Collides with sort-keys 146 | 'vue/require-name-property': ['error'], 147 | 'vue/v-for-delimiter-style': ['error'], 148 | 'vue/v-on-function-call': ['error'], 149 | 'wrap-iife': ['error'], 150 | 'yoda': ['error'], 151 | }, 152 | } 153 | -------------------------------------------------------------------------------- /.github/workflows/test-and-build.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | name: test-and-build 4 | on: 5 | push: 6 | branches: ['*'] 7 | tags: ['v*'] 8 | 9 | permissions: 10 | contents: write 11 | issues: write 12 | 13 | jobs: 14 | test-and-build: 15 | defaults: 16 | run: 17 | shell: bash 18 | 19 | container: 20 | image: luzifer/archlinux 21 | env: 22 | CGO_ENABLED: 0 23 | GOPATH: /go 24 | 25 | runs-on: ubuntu-latest 26 | 27 | steps: 28 | - name: Enable custom AUR package repo 29 | run: echo -e "[luzifer]\nSigLevel = Never\nServer = https://archrepo.hub.luzifer.io/\$arch" >>/etc/pacman.conf 30 | 31 | - name: Install required packages 32 | run: | 33 | pacman -Syy --noconfirm \ 34 | awk \ 35 | curl \ 36 | diffutils \ 37 | git \ 38 | go \ 39 | golangci-lint-bin \ 40 | make \ 41 | nodejs-lts-hydrogen \ 42 | npm \ 43 | tar \ 44 | trivy \ 45 | unzip \ 46 | which \ 47 | zip 48 | 49 | - uses: actions/checkout@v3 50 | 51 | - name: Marking workdir safe 52 | run: git config --global --add safe.directory /__w/wiki/wiki 53 | 54 | - name: 'Lint and test code' 55 | run: | 56 | go test -cover -v ./... 57 | golangci-lint run ./... 58 | 59 | - name: Build release 60 | run: make publish 61 | env: 62 | FORCE_SKIP_UPLOAD: 'true' 63 | MOD_MODE: readonly 64 | NO_TESTS: 'true' 65 | PACKAGES: '.' 66 | 67 | - name: Extract changelog 68 | run: 'awk "/^#/ && ++c==2{exit}; /^#/f" "History.md" | tail -n +2 >release_changelog.md' 69 | 70 | - name: Release 71 | uses: ncipollo/release-action@v1 72 | if: startsWith(github.ref, 'refs/tags/') 73 | with: 74 | artifacts: '.build/*' 75 | bodyFile: release_changelog.md 76 | draft: false 77 | generateReleaseNotes: false 78 | 79 | ... 80 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | data 2 | frontend/app.css 3 | frontend/app.js 4 | node_modules 5 | wiki 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:alpine as builder 2 | 3 | COPY . /go/src/github.com/Luzifer/wiki 4 | WORKDIR /go/src/github.com/Luzifer/wiki 5 | 6 | RUN set -ex \ 7 | && apk --no-cache add \ 8 | curl \ 9 | git \ 10 | make \ 11 | nodejs \ 12 | npm \ 13 | && make frontend \ 14 | && go build \ 15 | -ldflags "-X main.version=$(git describe --tags --always || echo dev)" \ 16 | -mod=readonly \ 17 | -o /go/bin/wiki 18 | 19 | RUN set -ex \ 20 | && curl -sSfLo /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64" \ 21 | && curl -sSfLo /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.11/gosu-amd64" \ 22 | && chmod +x \ 23 | /usr/local/bin/dumb-init \ 24 | /usr/local/bin/gosu 25 | 26 | 27 | FROM alpine:latest 28 | 29 | ENV DATA_DIR=/data 30 | 31 | LABEL maintainer "Knut Ahlers " 32 | 33 | RUN set -ex \ 34 | && apk --no-cache add \ 35 | bash \ 36 | ca-certificates \ 37 | && adduser -D -h /home/wiki -S -u 1000 wiki 38 | 39 | COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint 40 | COPY --from=builder /go/bin/wiki /usr/local/bin/wiki 41 | COPY --from=builder /usr/local/bin/dumb-init /usr/local/bin/dumb-init 42 | COPY --from=builder /usr/local/bin/gosu /usr/local/bin/gosu 43 | 44 | EXPOSE 3000 45 | VOLUME ["/data"] 46 | 47 | ENTRYPOINT ["/usr/local/bin/docker-entrypoint"] 48 | CMD ["--"] 49 | 50 | # vim: set ft=Dockerfile: 51 | -------------------------------------------------------------------------------- /History.md: -------------------------------------------------------------------------------- 1 | # 0.4.2 / 2024-12-12 2 | 3 | * Update node dependencies 4 | * Update Go dependencies 5 | 6 | # 0.4.1 / 2024-04-19 7 | 8 | * Update dependencies 9 | 10 | # 0.4.0 / 2024-01-30 11 | 12 | * Port frontend to Vue 3 / Bootstrap 5.3 13 | * Use Github Flavoured Markdown 14 | * CI: Replace old build-system 15 | * Update dependencies, modernize code 16 | * Slight improvements in Dockerfile 17 | 18 | # 0.3.1 / 2020-10-20 19 | 20 | * Fix: Update node deps 21 | 22 | # 0.3.0 / 2020-08-04 23 | 24 | * Add support for custom author configuration through auth proxy 25 | 26 | # 0.2.1 / 2020-07-31 27 | 28 | * Fix missing entry for Windows compile 29 | * Generate: Update bundled JS 30 | * npm update & audit fix & dedupe 31 | 32 | # 0.2.0 / 2019-08-15 33 | 34 | * Add top navigation 35 | * Add a pre-filled home page as welcome 36 | * Fix: Replace all internal links, not just one 37 | 38 | # 0.1.0 / 2019-08-07 39 | 40 | * Initial implementation 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2019- Knut Ahlers 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | VERSION := $(shell git describe --tags --always || echo dev) 2 | 3 | default: build 4 | 5 | build: frontend 6 | go build \ 7 | -ldflags "-s -w -X main.version=$(version)" \ 8 | -mod=readonly \ 9 | -trimpath 10 | 11 | frontend: node_modules 12 | node ci/build.mjs 13 | 14 | node_modules: 15 | npm ci 16 | 17 | publish: frontend 18 | bash ./ci/build.sh 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Go Report Card](https://goreportcard.com/badge/github.com/Luzifer/wiki)](https://goreportcard.com/report/github.com/Luzifer/wiki) 2 | ![](https://badges.fyi/github/license/Luzifer/wiki) 3 | ![](https://badges.fyi/github/downloads/Luzifer/wiki) 4 | ![](https://badges.fyi/github/latest-release/Luzifer/wiki) 5 | ![](https://knut.in/project-status/wiki) 6 | 7 | # Luzifer / wiki 8 | 9 | `wiki` is a small file-based Wiki implementation with web-editing capabilities and a Git backed storage for history of pages. 10 | 11 | The goal of this project was to have a small application to be deployed without any dependencies to open a Wiki for note taking or documentation purpose. 12 | 13 | The software itself has no concept of users or authentication and is held as simple as possible. Saved pages are stored as plain Markdown file onto the local disk inside a Git repository which on the one hand can be used to backup the state (just add a remote and set up a cron to push changes) and on the other hand to recover contents if someone deleted contents from a page. 14 | 15 | ## Usage 16 | 17 | ```console 18 | # wiki --help 19 | Usage of wiki: 20 | --author-email-header string Header to use as Author email 21 | --author-name-header string Header to use as Author name 22 | --data-dir string Directory to store data to (default "./data/") 23 | --listen string Port/IP to listen on (default ":3000") 24 | --log-level string Log level (debug, info, warn, error, fatal) (default "info") 25 | --version Prints current version and exits 26 | ``` 27 | 28 | To use this you can 29 | - download pre-build binaries from the [releases](https://github.com/Luzifer/wiki/releases) 30 | - pull the [Docker image](https://hub.docker.com/r/luzifer/wiki) 31 | - or `go get -u github.com/Luzifer/wiki` the project 32 | 33 | Given you've used the binary you can now just execute `./wiki` and go to `http://localhost:3000`. Everything you save will be stored in the `./data` directory. 34 | 35 | ## Setting the author name of the commit 36 | 37 | If you've put the wiki behind an auth-proxy which is able to set headers containing the username / email of the authenticated user (for example nginx with [nginx-sso](https://github.com/Luzifer/nginx-sso)) you can specify the `--author-email-header` and/or `--author-name-header` and provide the header names you've used there. These values will then be used as the author of the commit while the committer will still be the wiki-user. 38 | -------------------------------------------------------------------------------- /assets.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "embed" 4 | 5 | //go:embed frontend/* default_files/* 6 | var assets embed.FS 7 | -------------------------------------------------------------------------------- /ci/build.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from 'esbuild' 2 | import { sassPlugin } from 'esbuild-sass-plugin' 3 | import vuePlugin from 'esbuild-plugin-vue3' 4 | 5 | esbuild.build({ 6 | assetNames: '[name]-[hash]', 7 | bundle: true, 8 | define: { 9 | 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'dev'), 10 | }, 11 | entryPoints: ['src/main.js'], 12 | legalComments: 'none', 13 | loader: { 14 | '.ttf': 'file', 15 | '.woff2': 'file', 16 | }, 17 | minify: true, 18 | outfile: 'frontend/app.js', 19 | plugins: [ 20 | sassPlugin(), 21 | vuePlugin(), 22 | ], 23 | target: [ 24 | 'chrome87', 25 | 'edge87', 26 | 'es2020', 27 | 'firefox84', 28 | 'safari14', 29 | ], 30 | }) 31 | -------------------------------------------------------------------------------- /ci/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | osarch=( 5 | darwin/amd64 6 | darwin/arm64 7 | linux/amd64 8 | linux/arm 9 | linux/arm64 10 | windows/amd64 11 | ) 12 | 13 | function go_package() { 14 | cd "${4}" 15 | 16 | local outname="${3}" 17 | [[ $1 == windows ]] && outname="${3}.exe" 18 | 19 | log "=> Building ${3} for ${1}/${2}..." 20 | CGO_ENABLED=0 GOARCH=$2 GOOS=$1 go build \ 21 | -ldflags "-s -w -X main.version=${version}" \ 22 | -mod=readonly \ 23 | -trimpath \ 24 | -o "${outname}" 25 | 26 | if [[ $1 == linux ]]; then 27 | log "=> Packging ${3} as ${3}_${1}_${2}.tgz..." 28 | tar -czf "${builddir}/${3}_${1}_${2}.tgz" "${outname}" 29 | else 30 | log "=> Packging ${3} as ${3}_${1}_${2}.zip..." 31 | zip "${builddir}/${3}_${1}_${2}.zip" "${outname}" 32 | fi 33 | 34 | rm "${outname}" 35 | } 36 | 37 | function go_package_all() { 38 | for oa in "${osarch[@]}"; do 39 | local os=$(cut -d / -f 1 <<<"${oa}") 40 | local arch=$(cut -d / -f 2 <<<"${oa}") 41 | (go_package "${os}" "${arch}" "${1}" "${2}") 42 | done 43 | } 44 | 45 | function log() { 46 | echo "[$(date +%H:%M:%S)] $@" >&2 47 | } 48 | 49 | root=$(pwd) 50 | builddir="${root}/.build" 51 | version="$(git describe --tags --always || echo dev)" 52 | 53 | log "Building version ${version}..." 54 | 55 | log "Resetting output directory..." 56 | rm -rf "${builddir}" 57 | mkdir -p "${builddir}" 58 | 59 | log "Building Server..." 60 | go_package_all "wiki" "." 61 | 62 | log "Generating SHA256SUMS file..." 63 | (cd "${builddir}" && sha256sum * | tee SHA256SUMS) 64 | -------------------------------------------------------------------------------- /default_files/home.md: -------------------------------------------------------------------------------- 1 | # Home 2 | 3 | Welcome to your new Wiki! 4 | 5 | You've successfully started the software and entered the frontend. Now you can edit everything! Maybe start with this page: It is the start page which will be visited automatically on visiting the Wiki without an direct link to any sub-page. The content you're seeing right now is not stored but only served when there is no stored [[Home]] page. 6 | 7 | When editing you can use [Markdown](https://en.wikipedia.org/wiki/Markdown) to style your contents. If you are familiar with it you should find everything as you are used to with one exception: Inside this Wiki you can link any [[Page]] using double brackets. Those will automatically get rewritten into internal links which have slightly different loading behaviour than external links. But even creating those will work just fine. 8 | 9 | To add links to the top navigation you can just edit the [[Navigation]] page and add them there. (Afterwards you need to reload once to refresh the navigation.) 10 | 11 | In case you experience trouble, have feature requests or feedback just visit the [Issue-Tracker](https://github.com/Luzifer/wiki/issues) on Github or take a look at the [Code](https://github.com/Luzifer/wiki). 12 | -------------------------------------------------------------------------------- /default_files/navigation.md: -------------------------------------------------------------------------------- 1 | ! Just list your page names for the navigation here 2 | ! lines starting with an exclamation mark count as a 3 | ! comment and will not be displayed 4 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/dumb-init /bin/bash 2 | set -euo pipefail 3 | 4 | chown wiki: "${DATA_DIR}" 5 | 6 | exec gosu wiki /usr/local/bin/wiki 7 | -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Wiki 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/Luzifer/wiki 2 | 3 | go 1.22.0 4 | 5 | toolchain go1.23.4 6 | 7 | require ( 8 | github.com/Luzifer/go_helpers/v2 v2.25.0 9 | github.com/Luzifer/rconfig/v2 v2.5.2 10 | github.com/go-git/go-git/v5 v5.12.0 11 | github.com/gorilla/mux v1.8.1 12 | github.com/gosimple/slug v1.14.0 13 | github.com/pkg/errors v0.9.1 14 | github.com/sirupsen/logrus v1.9.3 15 | github.com/stretchr/testify v1.9.0 16 | gopkg.in/yaml.v3 v3.0.1 17 | ) 18 | 19 | require ( 20 | dario.cat/mergo v1.0.1 // indirect 21 | github.com/Microsoft/go-winio v0.6.2 // indirect 22 | github.com/ProtonMail/go-crypto v1.1.3 // indirect 23 | github.com/cloudflare/circl v1.5.0 // indirect 24 | github.com/cyphar/filepath-securejoin v0.3.5 // indirect 25 | github.com/davecgh/go-spew v1.1.1 // indirect 26 | github.com/emirpasic/gods v1.18.1 // indirect 27 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect 28 | github.com/go-git/go-billy/v5 v5.6.0 // indirect 29 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect 30 | github.com/gosimple/unidecode v1.0.1 // indirect 31 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 32 | github.com/kevinburke/ssh_config v1.2.0 // indirect 33 | github.com/pjbgf/sha1cd v0.3.0 // indirect 34 | github.com/pmezard/go-difflib v1.0.0 // indirect 35 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 36 | github.com/skeema/knownhosts v1.3.0 // indirect 37 | github.com/spf13/pflag v1.0.5 // indirect 38 | github.com/xanzy/ssh-agent v0.3.3 // indirect 39 | golang.org/x/crypto v0.31.0 // indirect 40 | golang.org/x/net v0.32.0 // indirect 41 | golang.org/x/sys v0.28.0 // indirect 42 | gopkg.in/validator.v2 v2.0.1 // indirect 43 | gopkg.in/warnings.v0 v0.1.2 // indirect 44 | ) 45 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= 2 | dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= 3 | github.com/Luzifer/go_helpers/v2 v2.25.0 h1:k1J4gd1+BfuokTDoWgcgib9P5mdadjzKEgbtKSVe46k= 4 | github.com/Luzifer/go_helpers/v2 v2.25.0/go.mod h1:KSVUdAJAav5cWGyB5oKGxmC27HrKULVTOxwPS/Kr+pc= 5 | github.com/Luzifer/rconfig/v2 v2.5.2 h1:4Bfp8mTrCCK/xghUmUbh/qtKiLZA6RC0tHTgqkNw1m4= 6 | github.com/Luzifer/rconfig/v2 v2.5.2/go.mod h1:HnqUWg+NQh60/neUqfMDDDo5d1v8UPuhwKR1HqM4VWQ= 7 | github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 8 | github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= 9 | github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 10 | github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= 11 | github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= 12 | github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= 13 | github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= 14 | github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= 15 | github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 16 | github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= 17 | github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= 18 | github.com/cyphar/filepath-securejoin v0.3.5 h1:L81NHjquoQmcPgXcttUS9qTSR/+bXry6pbSINQGpjj4= 19 | github.com/cyphar/filepath-securejoin v0.3.5/go.mod h1:edhVd3c6OXKjUmSrVa/tGJRS9joFTxlslFCAyaxigkE= 20 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 21 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 22 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 23 | github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= 24 | github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= 25 | github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= 26 | github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= 27 | github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= 28 | github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= 29 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= 30 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= 31 | github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= 32 | github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= 33 | github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= 34 | github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= 35 | github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= 36 | github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= 37 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= 38 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= 39 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 40 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 41 | github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= 42 | github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= 43 | github.com/gosimple/slug v1.14.0 h1:RtTL/71mJNDfpUbCOmnf/XFkzKRtD6wL6Uy+3akm4Es= 44 | github.com/gosimple/slug v1.14.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= 45 | github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= 46 | github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= 47 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 48 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= 49 | github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= 50 | github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 51 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 52 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 53 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 54 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 55 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 56 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 57 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 58 | github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= 59 | github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= 60 | github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= 61 | github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= 62 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 63 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 64 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 65 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 66 | github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= 67 | github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= 68 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 69 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 70 | github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 71 | github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= 72 | github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 73 | github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= 74 | github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= 75 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= 76 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 77 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 78 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 79 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 80 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 81 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 82 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 83 | github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= 84 | github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= 85 | golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 86 | golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= 87 | golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 88 | golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= 89 | golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= 90 | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 91 | golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= 92 | golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= 93 | golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 94 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 95 | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 96 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 97 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 98 | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 99 | golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= 100 | golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 101 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 102 | golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= 103 | golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= 104 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 105 | golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= 106 | golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 107 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 108 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 109 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 110 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 111 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 112 | gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY= 113 | gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8= 114 | gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 115 | gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 116 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 117 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 118 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 119 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 120 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 121 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "fmt" 7 | "io" 8 | "mime" 9 | "net/http" 10 | "os" 11 | "path" 12 | "strings" 13 | "time" 14 | 15 | "github.com/gorilla/mux" 16 | "github.com/gosimple/slug" 17 | "github.com/sirupsen/logrus" 18 | 19 | httpHelper "github.com/Luzifer/go_helpers/v2/http" 20 | "github.com/Luzifer/rconfig/v2" 21 | ) 22 | 23 | var ( 24 | cfg = struct { 25 | AuthorNameHeader string `flag:"author-name-header" default:"" description:"Header to use as Author name"` 26 | AuthorEmailHeader string `flag:"author-email-header" default:"" description:"Header to use as Author email"` 27 | DataDir string `flag:"data-dir" default:"./data/" description:"Directory to store data to"` 28 | Listen string `flag:"listen" default:":3000" description:"Port/IP to listen on"` 29 | LogLevel string `flag:"log-level" default:"info" description:"Log level (debug, info, warn, error, fatal)"` 30 | VersionAndExit bool `flag:"version" default:"false" description:"Prints current version and exits"` 31 | }{} 32 | 33 | version = "dev" 34 | ) 35 | 36 | func initApp() error { 37 | rconfig.AutoEnv(true) 38 | if err := rconfig.ParseAndValidate(&cfg); err != nil { 39 | return fmt.Errorf("parsing CLI options: %w", err) 40 | } 41 | 42 | l, err := logrus.ParseLevel(cfg.LogLevel) 43 | if err != nil { 44 | return fmt.Errorf("parsing log-level: %w", err) 45 | } 46 | logrus.SetLevel(l) 47 | 48 | return nil 49 | } 50 | 51 | func main() { 52 | var err error 53 | 54 | if err = initApp(); err != nil { 55 | logrus.WithError(err).Fatal("initializing app") 56 | } 57 | 58 | if cfg.VersionAndExit { 59 | fmt.Printf("wiki %s\n", version) //nolint:forbidigo 60 | os.Exit(0) 61 | } 62 | 63 | r := mux.NewRouter() 64 | 65 | r.HandleFunc("/_content/{page}", handlePageRead).Methods(http.MethodGet) 66 | r.HandleFunc("/_content/{page}", handlePageWrite).Methods(http.MethodPost) 67 | 68 | r.NotFoundHandler = http.HandlerFunc(handleIndexPage) 69 | 70 | var handler http.Handler = r 71 | handler = httpHelper.GzipHandler(handler) 72 | handler = httpHelper.NewHTTPLogHandler(handler) 73 | 74 | server := &http.Server{ 75 | Addr: cfg.Listen, 76 | Handler: handler, 77 | ReadHeaderTimeout: time.Second, 78 | } 79 | 80 | logrus.WithFields(logrus.Fields{ 81 | "addr": cfg.Listen, 82 | "version": version, 83 | }).Info("wiki starting") 84 | 85 | if err = server.ListenAndServe(); err != nil { 86 | logrus.WithError(err).Fatal("listening for HTTP traffic") 87 | } 88 | } 89 | 90 | func handleIndexPage(w http.ResponseWriter, r *http.Request) { 91 | if r.URL.Path != "/app.js" && r.URL.Path != "/app.css" { 92 | r.URL.Path = "/index.html" 93 | } 94 | 95 | var ( 96 | filename = path.Join("frontend", r.URL.Path) 97 | src io.Reader 98 | ) 99 | 100 | if _, err := os.Stat(filename); err == nil { 101 | f, err := os.Open(filename) //#nosec:G304 // Path is sanitized 102 | if err != nil { 103 | logrus.WithError(err).Error("Unable to open base asset") 104 | } 105 | defer func() { 106 | if err := f.Close(); err != nil { 107 | logrus.WithError(err).Error("closing frontend file (leaked fd)") 108 | } 109 | }() 110 | 111 | src = f 112 | } else if asset, err := assets.ReadFile(filename); err == nil { 113 | src = bytes.NewReader(asset) 114 | } else { 115 | logrus.WithField("asset", filename).Error("Asset not found in frontend dir or bundled assets") 116 | http.Error(w, "Not found", http.StatusNotFound) 117 | return 118 | } 119 | 120 | w.Header().Set("Content-Type", mime.TypeByExtension(path.Ext(filename))) 121 | if _, err := io.Copy(w, src); err != nil { 122 | logrus.WithError(err).Debug("copying data to HTTP client") 123 | } 124 | } 125 | 126 | func handlePageRead(w http.ResponseWriter, r *http.Request) { 127 | vars := mux.Vars(r) 128 | 129 | file, err := loadStoredFile(sanitizeFilename(vars["page"])) 130 | switch err { 131 | case nil: 132 | // All okay, render follows 133 | 134 | case errFileNotFound: 135 | initContent, err := assets.ReadFile(path.Join("default_files", sanitizeFilename(vars["page"]))) 136 | if err != nil { 137 | http.Error(w, "Page not yet exists", http.StatusNotFound) 138 | return 139 | } 140 | 141 | // Deliver initial "Home" page 142 | file = &storedFile{Content: string(initContent)} 143 | 144 | default: 145 | http.Error(w, err.Error(), http.StatusInternalServerError) 146 | return 147 | } 148 | 149 | w.Header().Set("Content-Type", "application/json") 150 | w.Header().Set("Cache-Control", "no-cache") 151 | 152 | if err := json.NewEncoder(w).Encode(file); err != nil { 153 | logrus.WithError(err).Error("Unable to marshal file for JSON") 154 | } 155 | } 156 | 157 | func handlePageWrite(w http.ResponseWriter, r *http.Request) { 158 | var ( 159 | vars = mux.Vars(r) 160 | file = &storedFile{} 161 | ) 162 | 163 | if err := json.NewDecoder(r.Body).Decode(file); err != nil { 164 | http.Error(w, err.Error(), http.StatusBadRequest) 165 | return 166 | } 167 | 168 | if cfg.AuthorNameHeader != "" { 169 | file.AuthorName = r.Header.Get(cfg.AuthorNameHeader) 170 | } 171 | 172 | if cfg.AuthorEmailHeader != "" { 173 | file.AuthorEmail = r.Header.Get(cfg.AuthorEmailHeader) 174 | } 175 | 176 | if err := file.Save(sanitizeFilename(vars["page"])); err != nil { 177 | http.Error(w, err.Error(), http.StatusInternalServerError) 178 | return 179 | } 180 | 181 | w.WriteHeader(http.StatusNoContent) 182 | } 183 | 184 | func sanitizeFilename(page string) string { 185 | return strings.Join([]string{slug.Make(page), "md"}, ".") 186 | } 187 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wiki", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "wiki", 8 | "dependencies": { 9 | "bootstrap": "^5.3.2", 10 | "easymde": "^2.18.0", 11 | "showdown": "^2.1.0", 12 | "vue": "^3.4.14", 13 | "vue-router": "^4.2.5" 14 | }, 15 | "devDependencies": { 16 | "@babel/eslint-parser": "^7.23.3", 17 | "esbuild": "^0.19.11", 18 | "esbuild-plugin-vue3": "^0.4.0", 19 | "esbuild-sass-plugin": "^2.16.1", 20 | "eslint": "^8.56.0", 21 | "eslint-plugin-vue": "^9.20.1" 22 | } 23 | }, 24 | "node_modules/@aashutoshrathi/word-wrap": { 25 | "version": "1.2.6", 26 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 27 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 28 | "dev": true, 29 | "engines": { 30 | "node": ">=0.10.0" 31 | } 32 | }, 33 | "node_modules/@ampproject/remapping": { 34 | "version": "2.2.1", 35 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 36 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 37 | "dev": true, 38 | "peer": true, 39 | "dependencies": { 40 | "@jridgewell/gen-mapping": "^0.3.0", 41 | "@jridgewell/trace-mapping": "^0.3.9" 42 | }, 43 | "engines": { 44 | "node": ">=6.0.0" 45 | } 46 | }, 47 | "node_modules/@babel/code-frame": { 48 | "version": "7.23.5", 49 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", 50 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", 51 | "dev": true, 52 | "peer": true, 53 | "dependencies": { 54 | "@babel/highlight": "^7.23.4", 55 | "chalk": "^2.4.2" 56 | }, 57 | "engines": { 58 | "node": ">=6.9.0" 59 | } 60 | }, 61 | "node_modules/@babel/compat-data": { 62 | "version": "7.23.5", 63 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", 64 | "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", 65 | "dev": true, 66 | "peer": true, 67 | "engines": { 68 | "node": ">=6.9.0" 69 | } 70 | }, 71 | "node_modules/@babel/core": { 72 | "version": "7.23.9", 73 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", 74 | "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", 75 | "dev": true, 76 | "peer": true, 77 | "dependencies": { 78 | "@ampproject/remapping": "^2.2.0", 79 | "@babel/code-frame": "^7.23.5", 80 | "@babel/generator": "^7.23.6", 81 | "@babel/helper-compilation-targets": "^7.23.6", 82 | "@babel/helper-module-transforms": "^7.23.3", 83 | "@babel/helpers": "^7.23.9", 84 | "@babel/parser": "^7.23.9", 85 | "@babel/template": "^7.23.9", 86 | "@babel/traverse": "^7.23.9", 87 | "@babel/types": "^7.23.9", 88 | "convert-source-map": "^2.0.0", 89 | "debug": "^4.1.0", 90 | "gensync": "^1.0.0-beta.2", 91 | "json5": "^2.2.3", 92 | "semver": "^6.3.1" 93 | }, 94 | "engines": { 95 | "node": ">=6.9.0" 96 | }, 97 | "funding": { 98 | "type": "opencollective", 99 | "url": "https://opencollective.com/babel" 100 | } 101 | }, 102 | "node_modules/@babel/eslint-parser": { 103 | "version": "7.23.9", 104 | "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.9.tgz", 105 | "integrity": "sha512-xPndlO7qxiJbn0ATvfXQBjCS7qApc9xmKHArgI/FTEFxXas5dnjC/VqM37lfZun9dclRYcn+YQAr6uDFy0bB2g==", 106 | "dev": true, 107 | "dependencies": { 108 | "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", 109 | "eslint-visitor-keys": "^2.1.0", 110 | "semver": "^6.3.1" 111 | }, 112 | "engines": { 113 | "node": "^10.13.0 || ^12.13.0 || >=14.0.0" 114 | }, 115 | "peerDependencies": { 116 | "@babel/core": "^7.11.0", 117 | "eslint": "^7.5.0 || ^8.0.0" 118 | } 119 | }, 120 | "node_modules/@babel/generator": { 121 | "version": "7.23.6", 122 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", 123 | "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", 124 | "dev": true, 125 | "peer": true, 126 | "dependencies": { 127 | "@babel/types": "^7.23.6", 128 | "@jridgewell/gen-mapping": "^0.3.2", 129 | "@jridgewell/trace-mapping": "^0.3.17", 130 | "jsesc": "^2.5.1" 131 | }, 132 | "engines": { 133 | "node": ">=6.9.0" 134 | } 135 | }, 136 | "node_modules/@babel/helper-compilation-targets": { 137 | "version": "7.23.6", 138 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", 139 | "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", 140 | "dev": true, 141 | "peer": true, 142 | "dependencies": { 143 | "@babel/compat-data": "^7.23.5", 144 | "@babel/helper-validator-option": "^7.23.5", 145 | "browserslist": "^4.22.2", 146 | "lru-cache": "^5.1.1", 147 | "semver": "^6.3.1" 148 | }, 149 | "engines": { 150 | "node": ">=6.9.0" 151 | } 152 | }, 153 | "node_modules/@babel/helper-environment-visitor": { 154 | "version": "7.22.20", 155 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 156 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 157 | "dev": true, 158 | "peer": true, 159 | "engines": { 160 | "node": ">=6.9.0" 161 | } 162 | }, 163 | "node_modules/@babel/helper-function-name": { 164 | "version": "7.23.0", 165 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 166 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 167 | "dev": true, 168 | "peer": true, 169 | "dependencies": { 170 | "@babel/template": "^7.22.15", 171 | "@babel/types": "^7.23.0" 172 | }, 173 | "engines": { 174 | "node": ">=6.9.0" 175 | } 176 | }, 177 | "node_modules/@babel/helper-hoist-variables": { 178 | "version": "7.22.5", 179 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 180 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 181 | "dev": true, 182 | "peer": true, 183 | "dependencies": { 184 | "@babel/types": "^7.22.5" 185 | }, 186 | "engines": { 187 | "node": ">=6.9.0" 188 | } 189 | }, 190 | "node_modules/@babel/helper-module-imports": { 191 | "version": "7.22.15", 192 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", 193 | "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", 194 | "dev": true, 195 | "peer": true, 196 | "dependencies": { 197 | "@babel/types": "^7.22.15" 198 | }, 199 | "engines": { 200 | "node": ">=6.9.0" 201 | } 202 | }, 203 | "node_modules/@babel/helper-module-transforms": { 204 | "version": "7.23.3", 205 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", 206 | "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", 207 | "dev": true, 208 | "peer": true, 209 | "dependencies": { 210 | "@babel/helper-environment-visitor": "^7.22.20", 211 | "@babel/helper-module-imports": "^7.22.15", 212 | "@babel/helper-simple-access": "^7.22.5", 213 | "@babel/helper-split-export-declaration": "^7.22.6", 214 | "@babel/helper-validator-identifier": "^7.22.20" 215 | }, 216 | "engines": { 217 | "node": ">=6.9.0" 218 | }, 219 | "peerDependencies": { 220 | "@babel/core": "^7.0.0" 221 | } 222 | }, 223 | "node_modules/@babel/helper-simple-access": { 224 | "version": "7.22.5", 225 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 226 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 227 | "dev": true, 228 | "peer": true, 229 | "dependencies": { 230 | "@babel/types": "^7.22.5" 231 | }, 232 | "engines": { 233 | "node": ">=6.9.0" 234 | } 235 | }, 236 | "node_modules/@babel/helper-split-export-declaration": { 237 | "version": "7.22.6", 238 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 239 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 240 | "dev": true, 241 | "peer": true, 242 | "dependencies": { 243 | "@babel/types": "^7.22.5" 244 | }, 245 | "engines": { 246 | "node": ">=6.9.0" 247 | } 248 | }, 249 | "node_modules/@babel/helper-string-parser": { 250 | "version": "7.23.4", 251 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", 252 | "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", 253 | "dev": true, 254 | "peer": true, 255 | "engines": { 256 | "node": ">=6.9.0" 257 | } 258 | }, 259 | "node_modules/@babel/helper-validator-identifier": { 260 | "version": "7.22.20", 261 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 262 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 263 | "dev": true, 264 | "peer": true, 265 | "engines": { 266 | "node": ">=6.9.0" 267 | } 268 | }, 269 | "node_modules/@babel/helper-validator-option": { 270 | "version": "7.23.5", 271 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", 272 | "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", 273 | "dev": true, 274 | "peer": true, 275 | "engines": { 276 | "node": ">=6.9.0" 277 | } 278 | }, 279 | "node_modules/@babel/helpers": { 280 | "version": "7.23.9", 281 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", 282 | "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", 283 | "dev": true, 284 | "peer": true, 285 | "dependencies": { 286 | "@babel/template": "^7.23.9", 287 | "@babel/traverse": "^7.23.9", 288 | "@babel/types": "^7.23.9" 289 | }, 290 | "engines": { 291 | "node": ">=6.9.0" 292 | } 293 | }, 294 | "node_modules/@babel/highlight": { 295 | "version": "7.23.4", 296 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", 297 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", 298 | "dev": true, 299 | "peer": true, 300 | "dependencies": { 301 | "@babel/helper-validator-identifier": "^7.22.20", 302 | "chalk": "^2.4.2", 303 | "js-tokens": "^4.0.0" 304 | }, 305 | "engines": { 306 | "node": ">=6.9.0" 307 | } 308 | }, 309 | "node_modules/@babel/parser": { 310 | "version": "7.23.9", 311 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", 312 | "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", 313 | "bin": { 314 | "parser": "bin/babel-parser.js" 315 | }, 316 | "engines": { 317 | "node": ">=6.0.0" 318 | } 319 | }, 320 | "node_modules/@babel/template": { 321 | "version": "7.23.9", 322 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", 323 | "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", 324 | "dev": true, 325 | "peer": true, 326 | "dependencies": { 327 | "@babel/code-frame": "^7.23.5", 328 | "@babel/parser": "^7.23.9", 329 | "@babel/types": "^7.23.9" 330 | }, 331 | "engines": { 332 | "node": ">=6.9.0" 333 | } 334 | }, 335 | "node_modules/@babel/traverse": { 336 | "version": "7.23.9", 337 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", 338 | "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", 339 | "dev": true, 340 | "peer": true, 341 | "dependencies": { 342 | "@babel/code-frame": "^7.23.5", 343 | "@babel/generator": "^7.23.6", 344 | "@babel/helper-environment-visitor": "^7.22.20", 345 | "@babel/helper-function-name": "^7.23.0", 346 | "@babel/helper-hoist-variables": "^7.22.5", 347 | "@babel/helper-split-export-declaration": "^7.22.6", 348 | "@babel/parser": "^7.23.9", 349 | "@babel/types": "^7.23.9", 350 | "debug": "^4.3.1", 351 | "globals": "^11.1.0" 352 | }, 353 | "engines": { 354 | "node": ">=6.9.0" 355 | } 356 | }, 357 | "node_modules/@babel/types": { 358 | "version": "7.23.9", 359 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", 360 | "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", 361 | "dev": true, 362 | "peer": true, 363 | "dependencies": { 364 | "@babel/helper-string-parser": "^7.23.4", 365 | "@babel/helper-validator-identifier": "^7.22.20", 366 | "to-fast-properties": "^2.0.0" 367 | }, 368 | "engines": { 369 | "node": ">=6.9.0" 370 | } 371 | }, 372 | "node_modules/@esbuild/aix-ppc64": { 373 | "version": "0.19.12", 374 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 375 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 376 | "cpu": [ 377 | "ppc64" 378 | ], 379 | "dev": true, 380 | "optional": true, 381 | "os": [ 382 | "aix" 383 | ], 384 | "engines": { 385 | "node": ">=12" 386 | } 387 | }, 388 | "node_modules/@esbuild/android-arm": { 389 | "version": "0.19.12", 390 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 391 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 392 | "cpu": [ 393 | "arm" 394 | ], 395 | "dev": true, 396 | "optional": true, 397 | "os": [ 398 | "android" 399 | ], 400 | "engines": { 401 | "node": ">=12" 402 | } 403 | }, 404 | "node_modules/@esbuild/android-arm64": { 405 | "version": "0.19.12", 406 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 407 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 408 | "cpu": [ 409 | "arm64" 410 | ], 411 | "dev": true, 412 | "optional": true, 413 | "os": [ 414 | "android" 415 | ], 416 | "engines": { 417 | "node": ">=12" 418 | } 419 | }, 420 | "node_modules/@esbuild/android-x64": { 421 | "version": "0.19.12", 422 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 423 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 424 | "cpu": [ 425 | "x64" 426 | ], 427 | "dev": true, 428 | "optional": true, 429 | "os": [ 430 | "android" 431 | ], 432 | "engines": { 433 | "node": ">=12" 434 | } 435 | }, 436 | "node_modules/@esbuild/darwin-arm64": { 437 | "version": "0.19.12", 438 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 439 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 440 | "cpu": [ 441 | "arm64" 442 | ], 443 | "dev": true, 444 | "optional": true, 445 | "os": [ 446 | "darwin" 447 | ], 448 | "engines": { 449 | "node": ">=12" 450 | } 451 | }, 452 | "node_modules/@esbuild/darwin-x64": { 453 | "version": "0.19.12", 454 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 455 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 456 | "cpu": [ 457 | "x64" 458 | ], 459 | "dev": true, 460 | "optional": true, 461 | "os": [ 462 | "darwin" 463 | ], 464 | "engines": { 465 | "node": ">=12" 466 | } 467 | }, 468 | "node_modules/@esbuild/freebsd-arm64": { 469 | "version": "0.19.12", 470 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 471 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 472 | "cpu": [ 473 | "arm64" 474 | ], 475 | "dev": true, 476 | "optional": true, 477 | "os": [ 478 | "freebsd" 479 | ], 480 | "engines": { 481 | "node": ">=12" 482 | } 483 | }, 484 | "node_modules/@esbuild/freebsd-x64": { 485 | "version": "0.19.12", 486 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 487 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 488 | "cpu": [ 489 | "x64" 490 | ], 491 | "dev": true, 492 | "optional": true, 493 | "os": [ 494 | "freebsd" 495 | ], 496 | "engines": { 497 | "node": ">=12" 498 | } 499 | }, 500 | "node_modules/@esbuild/linux-arm": { 501 | "version": "0.19.12", 502 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 503 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 504 | "cpu": [ 505 | "arm" 506 | ], 507 | "dev": true, 508 | "optional": true, 509 | "os": [ 510 | "linux" 511 | ], 512 | "engines": { 513 | "node": ">=12" 514 | } 515 | }, 516 | "node_modules/@esbuild/linux-arm64": { 517 | "version": "0.19.12", 518 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 519 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 520 | "cpu": [ 521 | "arm64" 522 | ], 523 | "dev": true, 524 | "optional": true, 525 | "os": [ 526 | "linux" 527 | ], 528 | "engines": { 529 | "node": ">=12" 530 | } 531 | }, 532 | "node_modules/@esbuild/linux-ia32": { 533 | "version": "0.19.12", 534 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 535 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 536 | "cpu": [ 537 | "ia32" 538 | ], 539 | "dev": true, 540 | "optional": true, 541 | "os": [ 542 | "linux" 543 | ], 544 | "engines": { 545 | "node": ">=12" 546 | } 547 | }, 548 | "node_modules/@esbuild/linux-loong64": { 549 | "version": "0.19.12", 550 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 551 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 552 | "cpu": [ 553 | "loong64" 554 | ], 555 | "dev": true, 556 | "optional": true, 557 | "os": [ 558 | "linux" 559 | ], 560 | "engines": { 561 | "node": ">=12" 562 | } 563 | }, 564 | "node_modules/@esbuild/linux-mips64el": { 565 | "version": "0.19.12", 566 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 567 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 568 | "cpu": [ 569 | "mips64el" 570 | ], 571 | "dev": true, 572 | "optional": true, 573 | "os": [ 574 | "linux" 575 | ], 576 | "engines": { 577 | "node": ">=12" 578 | } 579 | }, 580 | "node_modules/@esbuild/linux-ppc64": { 581 | "version": "0.19.12", 582 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 583 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 584 | "cpu": [ 585 | "ppc64" 586 | ], 587 | "dev": true, 588 | "optional": true, 589 | "os": [ 590 | "linux" 591 | ], 592 | "engines": { 593 | "node": ">=12" 594 | } 595 | }, 596 | "node_modules/@esbuild/linux-riscv64": { 597 | "version": "0.19.12", 598 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 599 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 600 | "cpu": [ 601 | "riscv64" 602 | ], 603 | "dev": true, 604 | "optional": true, 605 | "os": [ 606 | "linux" 607 | ], 608 | "engines": { 609 | "node": ">=12" 610 | } 611 | }, 612 | "node_modules/@esbuild/linux-s390x": { 613 | "version": "0.19.12", 614 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 615 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 616 | "cpu": [ 617 | "s390x" 618 | ], 619 | "dev": true, 620 | "optional": true, 621 | "os": [ 622 | "linux" 623 | ], 624 | "engines": { 625 | "node": ">=12" 626 | } 627 | }, 628 | "node_modules/@esbuild/linux-x64": { 629 | "version": "0.19.12", 630 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 631 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 632 | "cpu": [ 633 | "x64" 634 | ], 635 | "dev": true, 636 | "optional": true, 637 | "os": [ 638 | "linux" 639 | ], 640 | "engines": { 641 | "node": ">=12" 642 | } 643 | }, 644 | "node_modules/@esbuild/netbsd-x64": { 645 | "version": "0.19.12", 646 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 647 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 648 | "cpu": [ 649 | "x64" 650 | ], 651 | "dev": true, 652 | "optional": true, 653 | "os": [ 654 | "netbsd" 655 | ], 656 | "engines": { 657 | "node": ">=12" 658 | } 659 | }, 660 | "node_modules/@esbuild/openbsd-x64": { 661 | "version": "0.19.12", 662 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 663 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 664 | "cpu": [ 665 | "x64" 666 | ], 667 | "dev": true, 668 | "optional": true, 669 | "os": [ 670 | "openbsd" 671 | ], 672 | "engines": { 673 | "node": ">=12" 674 | } 675 | }, 676 | "node_modules/@esbuild/sunos-x64": { 677 | "version": "0.19.12", 678 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 679 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 680 | "cpu": [ 681 | "x64" 682 | ], 683 | "dev": true, 684 | "optional": true, 685 | "os": [ 686 | "sunos" 687 | ], 688 | "engines": { 689 | "node": ">=12" 690 | } 691 | }, 692 | "node_modules/@esbuild/win32-arm64": { 693 | "version": "0.19.12", 694 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 695 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 696 | "cpu": [ 697 | "arm64" 698 | ], 699 | "dev": true, 700 | "optional": true, 701 | "os": [ 702 | "win32" 703 | ], 704 | "engines": { 705 | "node": ">=12" 706 | } 707 | }, 708 | "node_modules/@esbuild/win32-ia32": { 709 | "version": "0.19.12", 710 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 711 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 712 | "cpu": [ 713 | "ia32" 714 | ], 715 | "dev": true, 716 | "optional": true, 717 | "os": [ 718 | "win32" 719 | ], 720 | "engines": { 721 | "node": ">=12" 722 | } 723 | }, 724 | "node_modules/@esbuild/win32-x64": { 725 | "version": "0.19.12", 726 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 727 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 728 | "cpu": [ 729 | "x64" 730 | ], 731 | "dev": true, 732 | "optional": true, 733 | "os": [ 734 | "win32" 735 | ], 736 | "engines": { 737 | "node": ">=12" 738 | } 739 | }, 740 | "node_modules/@eslint-community/eslint-utils": { 741 | "version": "4.4.0", 742 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 743 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 744 | "dev": true, 745 | "dependencies": { 746 | "eslint-visitor-keys": "^3.3.0" 747 | }, 748 | "engines": { 749 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 750 | }, 751 | "peerDependencies": { 752 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 753 | } 754 | }, 755 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 756 | "version": "3.4.3", 757 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 758 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 759 | "dev": true, 760 | "engines": { 761 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 762 | }, 763 | "funding": { 764 | "url": "https://opencollective.com/eslint" 765 | } 766 | }, 767 | "node_modules/@eslint-community/regexpp": { 768 | "version": "4.10.0", 769 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 770 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 771 | "dev": true, 772 | "engines": { 773 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 774 | } 775 | }, 776 | "node_modules/@eslint/eslintrc": { 777 | "version": "2.1.4", 778 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 779 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 780 | "dev": true, 781 | "dependencies": { 782 | "ajv": "^6.12.4", 783 | "debug": "^4.3.2", 784 | "espree": "^9.6.0", 785 | "globals": "^13.19.0", 786 | "ignore": "^5.2.0", 787 | "import-fresh": "^3.2.1", 788 | "js-yaml": "^4.1.0", 789 | "minimatch": "^3.1.2", 790 | "strip-json-comments": "^3.1.1" 791 | }, 792 | "engines": { 793 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 794 | }, 795 | "funding": { 796 | "url": "https://opencollective.com/eslint" 797 | } 798 | }, 799 | "node_modules/@eslint/eslintrc/node_modules/globals": { 800 | "version": "13.24.0", 801 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 802 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 803 | "dev": true, 804 | "dependencies": { 805 | "type-fest": "^0.20.2" 806 | }, 807 | "engines": { 808 | "node": ">=8" 809 | }, 810 | "funding": { 811 | "url": "https://github.com/sponsors/sindresorhus" 812 | } 813 | }, 814 | "node_modules/@eslint/js": { 815 | "version": "8.56.0", 816 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", 817 | "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", 818 | "dev": true, 819 | "engines": { 820 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 821 | } 822 | }, 823 | "node_modules/@humanwhocodes/config-array": { 824 | "version": "0.11.14", 825 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 826 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 827 | "dev": true, 828 | "dependencies": { 829 | "@humanwhocodes/object-schema": "^2.0.2", 830 | "debug": "^4.3.1", 831 | "minimatch": "^3.0.5" 832 | }, 833 | "engines": { 834 | "node": ">=10.10.0" 835 | } 836 | }, 837 | "node_modules/@humanwhocodes/module-importer": { 838 | "version": "1.0.1", 839 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 840 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 841 | "dev": true, 842 | "engines": { 843 | "node": ">=12.22" 844 | }, 845 | "funding": { 846 | "type": "github", 847 | "url": "https://github.com/sponsors/nzakas" 848 | } 849 | }, 850 | "node_modules/@humanwhocodes/object-schema": { 851 | "version": "2.0.2", 852 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 853 | "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 854 | "dev": true 855 | }, 856 | "node_modules/@jridgewell/gen-mapping": { 857 | "version": "0.3.3", 858 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 859 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 860 | "dev": true, 861 | "peer": true, 862 | "dependencies": { 863 | "@jridgewell/set-array": "^1.0.1", 864 | "@jridgewell/sourcemap-codec": "^1.4.10", 865 | "@jridgewell/trace-mapping": "^0.3.9" 866 | }, 867 | "engines": { 868 | "node": ">=6.0.0" 869 | } 870 | }, 871 | "node_modules/@jridgewell/resolve-uri": { 872 | "version": "3.1.1", 873 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 874 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 875 | "dev": true, 876 | "peer": true, 877 | "engines": { 878 | "node": ">=6.0.0" 879 | } 880 | }, 881 | "node_modules/@jridgewell/set-array": { 882 | "version": "1.1.2", 883 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 884 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 885 | "dev": true, 886 | "peer": true, 887 | "engines": { 888 | "node": ">=6.0.0" 889 | } 890 | }, 891 | "node_modules/@jridgewell/sourcemap-codec": { 892 | "version": "1.4.15", 893 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 894 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 895 | }, 896 | "node_modules/@jridgewell/trace-mapping": { 897 | "version": "0.3.22", 898 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", 899 | "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", 900 | "dev": true, 901 | "peer": true, 902 | "dependencies": { 903 | "@jridgewell/resolve-uri": "^3.1.0", 904 | "@jridgewell/sourcemap-codec": "^1.4.14" 905 | } 906 | }, 907 | "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { 908 | "version": "5.1.1-v1", 909 | "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", 910 | "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", 911 | "dev": true, 912 | "dependencies": { 913 | "eslint-scope": "5.1.1" 914 | } 915 | }, 916 | "node_modules/@nodelib/fs.scandir": { 917 | "version": "2.1.5", 918 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 919 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 920 | "dev": true, 921 | "dependencies": { 922 | "@nodelib/fs.stat": "2.0.5", 923 | "run-parallel": "^1.1.9" 924 | }, 925 | "engines": { 926 | "node": ">= 8" 927 | } 928 | }, 929 | "node_modules/@nodelib/fs.stat": { 930 | "version": "2.0.5", 931 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 932 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 933 | "dev": true, 934 | "engines": { 935 | "node": ">= 8" 936 | } 937 | }, 938 | "node_modules/@nodelib/fs.walk": { 939 | "version": "1.2.8", 940 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 941 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 942 | "dev": true, 943 | "dependencies": { 944 | "@nodelib/fs.scandir": "2.1.5", 945 | "fastq": "^1.6.0" 946 | }, 947 | "engines": { 948 | "node": ">= 8" 949 | } 950 | }, 951 | "node_modules/@popperjs/core": { 952 | "version": "2.11.8", 953 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", 954 | "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", 955 | "peer": true, 956 | "funding": { 957 | "type": "opencollective", 958 | "url": "https://opencollective.com/popperjs" 959 | } 960 | }, 961 | "node_modules/@types/codemirror": { 962 | "version": "5.60.15", 963 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.15.tgz", 964 | "integrity": "sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==", 965 | "dependencies": { 966 | "@types/tern": "*" 967 | } 968 | }, 969 | "node_modules/@types/estree": { 970 | "version": "1.0.5", 971 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 972 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" 973 | }, 974 | "node_modules/@types/marked": { 975 | "version": "4.3.2", 976 | "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", 977 | "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==" 978 | }, 979 | "node_modules/@types/tern": { 980 | "version": "0.23.9", 981 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", 982 | "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", 983 | "dependencies": { 984 | "@types/estree": "*" 985 | } 986 | }, 987 | "node_modules/@ungap/structured-clone": { 988 | "version": "1.2.0", 989 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 990 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 991 | "dev": true 992 | }, 993 | "node_modules/@vue/compiler-core": { 994 | "version": "3.4.15", 995 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", 996 | "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", 997 | "dependencies": { 998 | "@babel/parser": "^7.23.6", 999 | "@vue/shared": "3.4.15", 1000 | "entities": "^4.5.0", 1001 | "estree-walker": "^2.0.2", 1002 | "source-map-js": "^1.0.2" 1003 | } 1004 | }, 1005 | "node_modules/@vue/compiler-dom": { 1006 | "version": "3.4.15", 1007 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", 1008 | "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", 1009 | "dependencies": { 1010 | "@vue/compiler-core": "3.4.15", 1011 | "@vue/shared": "3.4.15" 1012 | } 1013 | }, 1014 | "node_modules/@vue/compiler-sfc": { 1015 | "version": "3.4.15", 1016 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz", 1017 | "integrity": "sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==", 1018 | "dependencies": { 1019 | "@babel/parser": "^7.23.6", 1020 | "@vue/compiler-core": "3.4.15", 1021 | "@vue/compiler-dom": "3.4.15", 1022 | "@vue/compiler-ssr": "3.4.15", 1023 | "@vue/shared": "3.4.15", 1024 | "estree-walker": "^2.0.2", 1025 | "magic-string": "^0.30.5", 1026 | "postcss": "^8.4.33", 1027 | "source-map-js": "^1.0.2" 1028 | } 1029 | }, 1030 | "node_modules/@vue/compiler-ssr": { 1031 | "version": "3.4.15", 1032 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz", 1033 | "integrity": "sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==", 1034 | "dependencies": { 1035 | "@vue/compiler-dom": "3.4.15", 1036 | "@vue/shared": "3.4.15" 1037 | } 1038 | }, 1039 | "node_modules/@vue/devtools-api": { 1040 | "version": "6.5.1", 1041 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", 1042 | "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" 1043 | }, 1044 | "node_modules/@vue/reactivity": { 1045 | "version": "3.4.15", 1046 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.15.tgz", 1047 | "integrity": "sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==", 1048 | "dependencies": { 1049 | "@vue/shared": "3.4.15" 1050 | } 1051 | }, 1052 | "node_modules/@vue/runtime-core": { 1053 | "version": "3.4.15", 1054 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.15.tgz", 1055 | "integrity": "sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==", 1056 | "dependencies": { 1057 | "@vue/reactivity": "3.4.15", 1058 | "@vue/shared": "3.4.15" 1059 | } 1060 | }, 1061 | "node_modules/@vue/runtime-dom": { 1062 | "version": "3.4.15", 1063 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.15.tgz", 1064 | "integrity": "sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==", 1065 | "dependencies": { 1066 | "@vue/runtime-core": "3.4.15", 1067 | "@vue/shared": "3.4.15", 1068 | "csstype": "^3.1.3" 1069 | } 1070 | }, 1071 | "node_modules/@vue/server-renderer": { 1072 | "version": "3.4.15", 1073 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.15.tgz", 1074 | "integrity": "sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==", 1075 | "dependencies": { 1076 | "@vue/compiler-ssr": "3.4.15", 1077 | "@vue/shared": "3.4.15" 1078 | }, 1079 | "peerDependencies": { 1080 | "vue": "3.4.15" 1081 | } 1082 | }, 1083 | "node_modules/@vue/shared": { 1084 | "version": "3.4.15", 1085 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", 1086 | "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==" 1087 | }, 1088 | "node_modules/acorn": { 1089 | "version": "8.11.3", 1090 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 1091 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 1092 | "dev": true, 1093 | "bin": { 1094 | "acorn": "bin/acorn" 1095 | }, 1096 | "engines": { 1097 | "node": ">=0.4.0" 1098 | } 1099 | }, 1100 | "node_modules/acorn-jsx": { 1101 | "version": "5.3.2", 1102 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1103 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1104 | "dev": true, 1105 | "peerDependencies": { 1106 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1107 | } 1108 | }, 1109 | "node_modules/ajv": { 1110 | "version": "6.12.6", 1111 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1112 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1113 | "dev": true, 1114 | "dependencies": { 1115 | "fast-deep-equal": "^3.1.1", 1116 | "fast-json-stable-stringify": "^2.0.0", 1117 | "json-schema-traverse": "^0.4.1", 1118 | "uri-js": "^4.2.2" 1119 | }, 1120 | "funding": { 1121 | "type": "github", 1122 | "url": "https://github.com/sponsors/epoberezkin" 1123 | } 1124 | }, 1125 | "node_modules/ansi-regex": { 1126 | "version": "5.0.1", 1127 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1128 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1129 | "dev": true, 1130 | "engines": { 1131 | "node": ">=8" 1132 | } 1133 | }, 1134 | "node_modules/ansi-styles": { 1135 | "version": "3.2.1", 1136 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1137 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1138 | "dev": true, 1139 | "peer": true, 1140 | "dependencies": { 1141 | "color-convert": "^1.9.0" 1142 | }, 1143 | "engines": { 1144 | "node": ">=4" 1145 | } 1146 | }, 1147 | "node_modules/anymatch": { 1148 | "version": "3.1.3", 1149 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1150 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1151 | "dev": true, 1152 | "dependencies": { 1153 | "normalize-path": "^3.0.0", 1154 | "picomatch": "^2.0.4" 1155 | }, 1156 | "engines": { 1157 | "node": ">= 8" 1158 | } 1159 | }, 1160 | "node_modules/argparse": { 1161 | "version": "2.0.1", 1162 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1163 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1164 | "dev": true 1165 | }, 1166 | "node_modules/balanced-match": { 1167 | "version": "1.0.2", 1168 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1169 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1170 | "dev": true 1171 | }, 1172 | "node_modules/binary-extensions": { 1173 | "version": "2.2.0", 1174 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1175 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1176 | "dev": true, 1177 | "engines": { 1178 | "node": ">=8" 1179 | } 1180 | }, 1181 | "node_modules/boolbase": { 1182 | "version": "1.0.0", 1183 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1184 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 1185 | "dev": true 1186 | }, 1187 | "node_modules/bootstrap": { 1188 | "version": "5.3.2", 1189 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", 1190 | "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", 1191 | "funding": [ 1192 | { 1193 | "type": "github", 1194 | "url": "https://github.com/sponsors/twbs" 1195 | }, 1196 | { 1197 | "type": "opencollective", 1198 | "url": "https://opencollective.com/bootstrap" 1199 | } 1200 | ], 1201 | "peerDependencies": { 1202 | "@popperjs/core": "^2.11.8" 1203 | } 1204 | }, 1205 | "node_modules/brace-expansion": { 1206 | "version": "1.1.11", 1207 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1208 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1209 | "dev": true, 1210 | "dependencies": { 1211 | "balanced-match": "^1.0.0", 1212 | "concat-map": "0.0.1" 1213 | } 1214 | }, 1215 | "node_modules/braces": { 1216 | "version": "3.0.3", 1217 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1218 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1219 | "dev": true, 1220 | "license": "MIT", 1221 | "dependencies": { 1222 | "fill-range": "^7.1.1" 1223 | }, 1224 | "engines": { 1225 | "node": ">=8" 1226 | } 1227 | }, 1228 | "node_modules/browserslist": { 1229 | "version": "4.22.3", 1230 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", 1231 | "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", 1232 | "dev": true, 1233 | "funding": [ 1234 | { 1235 | "type": "opencollective", 1236 | "url": "https://opencollective.com/browserslist" 1237 | }, 1238 | { 1239 | "type": "tidelift", 1240 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1241 | }, 1242 | { 1243 | "type": "github", 1244 | "url": "https://github.com/sponsors/ai" 1245 | } 1246 | ], 1247 | "peer": true, 1248 | "dependencies": { 1249 | "caniuse-lite": "^1.0.30001580", 1250 | "electron-to-chromium": "^1.4.648", 1251 | "node-releases": "^2.0.14", 1252 | "update-browserslist-db": "^1.0.13" 1253 | }, 1254 | "bin": { 1255 | "browserslist": "cli.js" 1256 | }, 1257 | "engines": { 1258 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1259 | } 1260 | }, 1261 | "node_modules/callsites": { 1262 | "version": "3.1.0", 1263 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1264 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1265 | "dev": true, 1266 | "engines": { 1267 | "node": ">=6" 1268 | } 1269 | }, 1270 | "node_modules/caniuse-lite": { 1271 | "version": "1.0.30001581", 1272 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", 1273 | "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", 1274 | "dev": true, 1275 | "funding": [ 1276 | { 1277 | "type": "opencollective", 1278 | "url": "https://opencollective.com/browserslist" 1279 | }, 1280 | { 1281 | "type": "tidelift", 1282 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1283 | }, 1284 | { 1285 | "type": "github", 1286 | "url": "https://github.com/sponsors/ai" 1287 | } 1288 | ], 1289 | "peer": true 1290 | }, 1291 | "node_modules/chalk": { 1292 | "version": "2.4.2", 1293 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1294 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1295 | "dev": true, 1296 | "peer": true, 1297 | "dependencies": { 1298 | "ansi-styles": "^3.2.1", 1299 | "escape-string-regexp": "^1.0.5", 1300 | "supports-color": "^5.3.0" 1301 | }, 1302 | "engines": { 1303 | "node": ">=4" 1304 | } 1305 | }, 1306 | "node_modules/chokidar": { 1307 | "version": "3.5.3", 1308 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1309 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1310 | "dev": true, 1311 | "funding": [ 1312 | { 1313 | "type": "individual", 1314 | "url": "https://paulmillr.com/funding/" 1315 | } 1316 | ], 1317 | "dependencies": { 1318 | "anymatch": "~3.1.2", 1319 | "braces": "~3.0.2", 1320 | "glob-parent": "~5.1.2", 1321 | "is-binary-path": "~2.1.0", 1322 | "is-glob": "~4.0.1", 1323 | "normalize-path": "~3.0.0", 1324 | "readdirp": "~3.6.0" 1325 | }, 1326 | "engines": { 1327 | "node": ">= 8.10.0" 1328 | }, 1329 | "optionalDependencies": { 1330 | "fsevents": "~2.3.2" 1331 | } 1332 | }, 1333 | "node_modules/chokidar/node_modules/glob-parent": { 1334 | "version": "5.1.2", 1335 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1336 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1337 | "dev": true, 1338 | "dependencies": { 1339 | "is-glob": "^4.0.1" 1340 | }, 1341 | "engines": { 1342 | "node": ">= 6" 1343 | } 1344 | }, 1345 | "node_modules/codemirror": { 1346 | "version": "5.65.16", 1347 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz", 1348 | "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==" 1349 | }, 1350 | "node_modules/codemirror-spell-checker": { 1351 | "version": "1.1.2", 1352 | "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz", 1353 | "integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==", 1354 | "dependencies": { 1355 | "typo-js": "*" 1356 | } 1357 | }, 1358 | "node_modules/color-convert": { 1359 | "version": "1.9.3", 1360 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1361 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1362 | "dev": true, 1363 | "peer": true, 1364 | "dependencies": { 1365 | "color-name": "1.1.3" 1366 | } 1367 | }, 1368 | "node_modules/color-name": { 1369 | "version": "1.1.3", 1370 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1371 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1372 | "dev": true, 1373 | "peer": true 1374 | }, 1375 | "node_modules/commander": { 1376 | "version": "9.5.0", 1377 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 1378 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 1379 | "engines": { 1380 | "node": "^12.20.0 || >=14" 1381 | } 1382 | }, 1383 | "node_modules/concat-map": { 1384 | "version": "0.0.1", 1385 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1386 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1387 | "dev": true 1388 | }, 1389 | "node_modules/convert-source-map": { 1390 | "version": "2.0.0", 1391 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1392 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1393 | "dev": true, 1394 | "peer": true 1395 | }, 1396 | "node_modules/cross-spawn": { 1397 | "version": "7.0.6", 1398 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1399 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1400 | "dev": true, 1401 | "license": "MIT", 1402 | "dependencies": { 1403 | "path-key": "^3.1.0", 1404 | "shebang-command": "^2.0.0", 1405 | "which": "^2.0.1" 1406 | }, 1407 | "engines": { 1408 | "node": ">= 8" 1409 | } 1410 | }, 1411 | "node_modules/cssesc": { 1412 | "version": "3.0.0", 1413 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1414 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1415 | "dev": true, 1416 | "bin": { 1417 | "cssesc": "bin/cssesc" 1418 | }, 1419 | "engines": { 1420 | "node": ">=4" 1421 | } 1422 | }, 1423 | "node_modules/csstype": { 1424 | "version": "3.1.3", 1425 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1426 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 1427 | }, 1428 | "node_modules/debug": { 1429 | "version": "4.3.4", 1430 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1431 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1432 | "dev": true, 1433 | "dependencies": { 1434 | "ms": "2.1.2" 1435 | }, 1436 | "engines": { 1437 | "node": ">=6.0" 1438 | }, 1439 | "peerDependenciesMeta": { 1440 | "supports-color": { 1441 | "optional": true 1442 | } 1443 | } 1444 | }, 1445 | "node_modules/deep-is": { 1446 | "version": "0.1.4", 1447 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1448 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1449 | "dev": true 1450 | }, 1451 | "node_modules/doctrine": { 1452 | "version": "3.0.0", 1453 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1454 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1455 | "dev": true, 1456 | "dependencies": { 1457 | "esutils": "^2.0.2" 1458 | }, 1459 | "engines": { 1460 | "node": ">=6.0.0" 1461 | } 1462 | }, 1463 | "node_modules/easymde": { 1464 | "version": "2.18.0", 1465 | "resolved": "https://registry.npmjs.org/easymde/-/easymde-2.18.0.tgz", 1466 | "integrity": "sha512-IxVVUxNWIoXLeqtBU4BLc+eS/ScYhT1Dcb6yF5Wchoj1iXAV+TIIDWx+NCaZhY7RcSHqDPKllbYq7nwGKILnoA==", 1467 | "dependencies": { 1468 | "@types/codemirror": "^5.60.4", 1469 | "@types/marked": "^4.0.7", 1470 | "codemirror": "^5.63.1", 1471 | "codemirror-spell-checker": "1.1.2", 1472 | "marked": "^4.1.0" 1473 | } 1474 | }, 1475 | "node_modules/electron-to-chromium": { 1476 | "version": "1.4.650", 1477 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz", 1478 | "integrity": "sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==", 1479 | "dev": true, 1480 | "peer": true 1481 | }, 1482 | "node_modules/entities": { 1483 | "version": "4.5.0", 1484 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1485 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1486 | "engines": { 1487 | "node": ">=0.12" 1488 | }, 1489 | "funding": { 1490 | "url": "https://github.com/fb55/entities?sponsor=1" 1491 | } 1492 | }, 1493 | "node_modules/esbuild": { 1494 | "version": "0.19.12", 1495 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 1496 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 1497 | "dev": true, 1498 | "hasInstallScript": true, 1499 | "bin": { 1500 | "esbuild": "bin/esbuild" 1501 | }, 1502 | "engines": { 1503 | "node": ">=12" 1504 | }, 1505 | "optionalDependencies": { 1506 | "@esbuild/aix-ppc64": "0.19.12", 1507 | "@esbuild/android-arm": "0.19.12", 1508 | "@esbuild/android-arm64": "0.19.12", 1509 | "@esbuild/android-x64": "0.19.12", 1510 | "@esbuild/darwin-arm64": "0.19.12", 1511 | "@esbuild/darwin-x64": "0.19.12", 1512 | "@esbuild/freebsd-arm64": "0.19.12", 1513 | "@esbuild/freebsd-x64": "0.19.12", 1514 | "@esbuild/linux-arm": "0.19.12", 1515 | "@esbuild/linux-arm64": "0.19.12", 1516 | "@esbuild/linux-ia32": "0.19.12", 1517 | "@esbuild/linux-loong64": "0.19.12", 1518 | "@esbuild/linux-mips64el": "0.19.12", 1519 | "@esbuild/linux-ppc64": "0.19.12", 1520 | "@esbuild/linux-riscv64": "0.19.12", 1521 | "@esbuild/linux-s390x": "0.19.12", 1522 | "@esbuild/linux-x64": "0.19.12", 1523 | "@esbuild/netbsd-x64": "0.19.12", 1524 | "@esbuild/openbsd-x64": "0.19.12", 1525 | "@esbuild/sunos-x64": "0.19.12", 1526 | "@esbuild/win32-arm64": "0.19.12", 1527 | "@esbuild/win32-ia32": "0.19.12", 1528 | "@esbuild/win32-x64": "0.19.12" 1529 | } 1530 | }, 1531 | "node_modules/esbuild-android-64": { 1532 | "version": "0.14.54", 1533 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", 1534 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", 1535 | "cpu": [ 1536 | "x64" 1537 | ], 1538 | "dev": true, 1539 | "optional": true, 1540 | "os": [ 1541 | "android" 1542 | ], 1543 | "engines": { 1544 | "node": ">=12" 1545 | } 1546 | }, 1547 | "node_modules/esbuild-android-arm64": { 1548 | "version": "0.14.54", 1549 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", 1550 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", 1551 | "cpu": [ 1552 | "arm64" 1553 | ], 1554 | "dev": true, 1555 | "optional": true, 1556 | "os": [ 1557 | "android" 1558 | ], 1559 | "engines": { 1560 | "node": ">=12" 1561 | } 1562 | }, 1563 | "node_modules/esbuild-darwin-64": { 1564 | "version": "0.14.54", 1565 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", 1566 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", 1567 | "cpu": [ 1568 | "x64" 1569 | ], 1570 | "dev": true, 1571 | "optional": true, 1572 | "os": [ 1573 | "darwin" 1574 | ], 1575 | "engines": { 1576 | "node": ">=12" 1577 | } 1578 | }, 1579 | "node_modules/esbuild-darwin-arm64": { 1580 | "version": "0.14.54", 1581 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", 1582 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", 1583 | "cpu": [ 1584 | "arm64" 1585 | ], 1586 | "dev": true, 1587 | "optional": true, 1588 | "os": [ 1589 | "darwin" 1590 | ], 1591 | "engines": { 1592 | "node": ">=12" 1593 | } 1594 | }, 1595 | "node_modules/esbuild-freebsd-64": { 1596 | "version": "0.14.54", 1597 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", 1598 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", 1599 | "cpu": [ 1600 | "x64" 1601 | ], 1602 | "dev": true, 1603 | "optional": true, 1604 | "os": [ 1605 | "freebsd" 1606 | ], 1607 | "engines": { 1608 | "node": ">=12" 1609 | } 1610 | }, 1611 | "node_modules/esbuild-freebsd-arm64": { 1612 | "version": "0.14.54", 1613 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", 1614 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", 1615 | "cpu": [ 1616 | "arm64" 1617 | ], 1618 | "dev": true, 1619 | "optional": true, 1620 | "os": [ 1621 | "freebsd" 1622 | ], 1623 | "engines": { 1624 | "node": ">=12" 1625 | } 1626 | }, 1627 | "node_modules/esbuild-linux-32": { 1628 | "version": "0.14.54", 1629 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", 1630 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", 1631 | "cpu": [ 1632 | "ia32" 1633 | ], 1634 | "dev": true, 1635 | "optional": true, 1636 | "os": [ 1637 | "linux" 1638 | ], 1639 | "engines": { 1640 | "node": ">=12" 1641 | } 1642 | }, 1643 | "node_modules/esbuild-linux-64": { 1644 | "version": "0.14.54", 1645 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", 1646 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", 1647 | "cpu": [ 1648 | "x64" 1649 | ], 1650 | "dev": true, 1651 | "optional": true, 1652 | "os": [ 1653 | "linux" 1654 | ], 1655 | "engines": { 1656 | "node": ">=12" 1657 | } 1658 | }, 1659 | "node_modules/esbuild-linux-arm": { 1660 | "version": "0.14.54", 1661 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", 1662 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", 1663 | "cpu": [ 1664 | "arm" 1665 | ], 1666 | "dev": true, 1667 | "optional": true, 1668 | "os": [ 1669 | "linux" 1670 | ], 1671 | "engines": { 1672 | "node": ">=12" 1673 | } 1674 | }, 1675 | "node_modules/esbuild-linux-arm64": { 1676 | "version": "0.14.54", 1677 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", 1678 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", 1679 | "cpu": [ 1680 | "arm64" 1681 | ], 1682 | "dev": true, 1683 | "optional": true, 1684 | "os": [ 1685 | "linux" 1686 | ], 1687 | "engines": { 1688 | "node": ">=12" 1689 | } 1690 | }, 1691 | "node_modules/esbuild-linux-mips64le": { 1692 | "version": "0.14.54", 1693 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", 1694 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", 1695 | "cpu": [ 1696 | "mips64el" 1697 | ], 1698 | "dev": true, 1699 | "optional": true, 1700 | "os": [ 1701 | "linux" 1702 | ], 1703 | "engines": { 1704 | "node": ">=12" 1705 | } 1706 | }, 1707 | "node_modules/esbuild-linux-ppc64le": { 1708 | "version": "0.14.54", 1709 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", 1710 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", 1711 | "cpu": [ 1712 | "ppc64" 1713 | ], 1714 | "dev": true, 1715 | "optional": true, 1716 | "os": [ 1717 | "linux" 1718 | ], 1719 | "engines": { 1720 | "node": ">=12" 1721 | } 1722 | }, 1723 | "node_modules/esbuild-linux-riscv64": { 1724 | "version": "0.14.54", 1725 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", 1726 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", 1727 | "cpu": [ 1728 | "riscv64" 1729 | ], 1730 | "dev": true, 1731 | "optional": true, 1732 | "os": [ 1733 | "linux" 1734 | ], 1735 | "engines": { 1736 | "node": ">=12" 1737 | } 1738 | }, 1739 | "node_modules/esbuild-linux-s390x": { 1740 | "version": "0.14.54", 1741 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", 1742 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", 1743 | "cpu": [ 1744 | "s390x" 1745 | ], 1746 | "dev": true, 1747 | "optional": true, 1748 | "os": [ 1749 | "linux" 1750 | ], 1751 | "engines": { 1752 | "node": ">=12" 1753 | } 1754 | }, 1755 | "node_modules/esbuild-netbsd-64": { 1756 | "version": "0.14.54", 1757 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", 1758 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", 1759 | "cpu": [ 1760 | "x64" 1761 | ], 1762 | "dev": true, 1763 | "optional": true, 1764 | "os": [ 1765 | "netbsd" 1766 | ], 1767 | "engines": { 1768 | "node": ">=12" 1769 | } 1770 | }, 1771 | "node_modules/esbuild-openbsd-64": { 1772 | "version": "0.14.54", 1773 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", 1774 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", 1775 | "cpu": [ 1776 | "x64" 1777 | ], 1778 | "dev": true, 1779 | "optional": true, 1780 | "os": [ 1781 | "openbsd" 1782 | ], 1783 | "engines": { 1784 | "node": ">=12" 1785 | } 1786 | }, 1787 | "node_modules/esbuild-plugin-vue3": { 1788 | "version": "0.4.2", 1789 | "resolved": "https://registry.npmjs.org/esbuild-plugin-vue3/-/esbuild-plugin-vue3-0.4.2.tgz", 1790 | "integrity": "sha512-edaghOAJY+26uIJVywkT0cyUxWu/oi2+dGe2KePyHAJ9y6hAB4fqNnY5SFpZY9G6knERZo4Nykp/YOcKML06rA==", 1791 | "dev": true, 1792 | "dependencies": { 1793 | "esbuild": "^0.14.8", 1794 | "typescript": "^4.7.4" 1795 | }, 1796 | "peerDependencies": { 1797 | "cheerio": "^1.0.0-rc.10", 1798 | "html-minifier": "^4.0.0", 1799 | "pug": "^3.0.2", 1800 | "sass": "^1.35.2", 1801 | "vue": "^3.4.15" 1802 | }, 1803 | "peerDependenciesMeta": { 1804 | "cheerio": { 1805 | "optional": true 1806 | }, 1807 | "html-minifier": { 1808 | "optional": true 1809 | }, 1810 | "pug": { 1811 | "optional": true 1812 | }, 1813 | "sass": { 1814 | "optional": true 1815 | } 1816 | } 1817 | }, 1818 | "node_modules/esbuild-plugin-vue3/node_modules/@esbuild/linux-loong64": { 1819 | "version": "0.14.54", 1820 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", 1821 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", 1822 | "cpu": [ 1823 | "loong64" 1824 | ], 1825 | "dev": true, 1826 | "optional": true, 1827 | "os": [ 1828 | "linux" 1829 | ], 1830 | "engines": { 1831 | "node": ">=12" 1832 | } 1833 | }, 1834 | "node_modules/esbuild-plugin-vue3/node_modules/esbuild": { 1835 | "version": "0.14.54", 1836 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", 1837 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", 1838 | "dev": true, 1839 | "hasInstallScript": true, 1840 | "bin": { 1841 | "esbuild": "bin/esbuild" 1842 | }, 1843 | "engines": { 1844 | "node": ">=12" 1845 | }, 1846 | "optionalDependencies": { 1847 | "@esbuild/linux-loong64": "0.14.54", 1848 | "esbuild-android-64": "0.14.54", 1849 | "esbuild-android-arm64": "0.14.54", 1850 | "esbuild-darwin-64": "0.14.54", 1851 | "esbuild-darwin-arm64": "0.14.54", 1852 | "esbuild-freebsd-64": "0.14.54", 1853 | "esbuild-freebsd-arm64": "0.14.54", 1854 | "esbuild-linux-32": "0.14.54", 1855 | "esbuild-linux-64": "0.14.54", 1856 | "esbuild-linux-arm": "0.14.54", 1857 | "esbuild-linux-arm64": "0.14.54", 1858 | "esbuild-linux-mips64le": "0.14.54", 1859 | "esbuild-linux-ppc64le": "0.14.54", 1860 | "esbuild-linux-riscv64": "0.14.54", 1861 | "esbuild-linux-s390x": "0.14.54", 1862 | "esbuild-netbsd-64": "0.14.54", 1863 | "esbuild-openbsd-64": "0.14.54", 1864 | "esbuild-sunos-64": "0.14.54", 1865 | "esbuild-windows-32": "0.14.54", 1866 | "esbuild-windows-64": "0.14.54", 1867 | "esbuild-windows-arm64": "0.14.54" 1868 | } 1869 | }, 1870 | "node_modules/esbuild-sass-plugin": { 1871 | "version": "2.16.1", 1872 | "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.16.1.tgz", 1873 | "integrity": "sha512-mBB2aEF0xk7yo+Q9pSUh8xYED/1O2wbAM6IauGkDrqy6pl9SbJNakLeLGXiNpNujWIudu8TJTZCv2L5AQYRXtA==", 1874 | "dev": true, 1875 | "dependencies": { 1876 | "resolve": "^1.22.6", 1877 | "sass": "^1.7.3" 1878 | }, 1879 | "peerDependencies": { 1880 | "esbuild": "^0.19.4" 1881 | } 1882 | }, 1883 | "node_modules/esbuild-sunos-64": { 1884 | "version": "0.14.54", 1885 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", 1886 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", 1887 | "cpu": [ 1888 | "x64" 1889 | ], 1890 | "dev": true, 1891 | "optional": true, 1892 | "os": [ 1893 | "sunos" 1894 | ], 1895 | "engines": { 1896 | "node": ">=12" 1897 | } 1898 | }, 1899 | "node_modules/esbuild-windows-32": { 1900 | "version": "0.14.54", 1901 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", 1902 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", 1903 | "cpu": [ 1904 | "ia32" 1905 | ], 1906 | "dev": true, 1907 | "optional": true, 1908 | "os": [ 1909 | "win32" 1910 | ], 1911 | "engines": { 1912 | "node": ">=12" 1913 | } 1914 | }, 1915 | "node_modules/esbuild-windows-64": { 1916 | "version": "0.14.54", 1917 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", 1918 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", 1919 | "cpu": [ 1920 | "x64" 1921 | ], 1922 | "dev": true, 1923 | "optional": true, 1924 | "os": [ 1925 | "win32" 1926 | ], 1927 | "engines": { 1928 | "node": ">=12" 1929 | } 1930 | }, 1931 | "node_modules/esbuild-windows-arm64": { 1932 | "version": "0.14.54", 1933 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", 1934 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", 1935 | "cpu": [ 1936 | "arm64" 1937 | ], 1938 | "dev": true, 1939 | "optional": true, 1940 | "os": [ 1941 | "win32" 1942 | ], 1943 | "engines": { 1944 | "node": ">=12" 1945 | } 1946 | }, 1947 | "node_modules/escalade": { 1948 | "version": "3.1.1", 1949 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1950 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1951 | "dev": true, 1952 | "peer": true, 1953 | "engines": { 1954 | "node": ">=6" 1955 | } 1956 | }, 1957 | "node_modules/escape-string-regexp": { 1958 | "version": "1.0.5", 1959 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1960 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1961 | "dev": true, 1962 | "peer": true, 1963 | "engines": { 1964 | "node": ">=0.8.0" 1965 | } 1966 | }, 1967 | "node_modules/eslint": { 1968 | "version": "8.56.0", 1969 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", 1970 | "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", 1971 | "dev": true, 1972 | "dependencies": { 1973 | "@eslint-community/eslint-utils": "^4.2.0", 1974 | "@eslint-community/regexpp": "^4.6.1", 1975 | "@eslint/eslintrc": "^2.1.4", 1976 | "@eslint/js": "8.56.0", 1977 | "@humanwhocodes/config-array": "^0.11.13", 1978 | "@humanwhocodes/module-importer": "^1.0.1", 1979 | "@nodelib/fs.walk": "^1.2.8", 1980 | "@ungap/structured-clone": "^1.2.0", 1981 | "ajv": "^6.12.4", 1982 | "chalk": "^4.0.0", 1983 | "cross-spawn": "^7.0.2", 1984 | "debug": "^4.3.2", 1985 | "doctrine": "^3.0.0", 1986 | "escape-string-regexp": "^4.0.0", 1987 | "eslint-scope": "^7.2.2", 1988 | "eslint-visitor-keys": "^3.4.3", 1989 | "espree": "^9.6.1", 1990 | "esquery": "^1.4.2", 1991 | "esutils": "^2.0.2", 1992 | "fast-deep-equal": "^3.1.3", 1993 | "file-entry-cache": "^6.0.1", 1994 | "find-up": "^5.0.0", 1995 | "glob-parent": "^6.0.2", 1996 | "globals": "^13.19.0", 1997 | "graphemer": "^1.4.0", 1998 | "ignore": "^5.2.0", 1999 | "imurmurhash": "^0.1.4", 2000 | "is-glob": "^4.0.0", 2001 | "is-path-inside": "^3.0.3", 2002 | "js-yaml": "^4.1.0", 2003 | "json-stable-stringify-without-jsonify": "^1.0.1", 2004 | "levn": "^0.4.1", 2005 | "lodash.merge": "^4.6.2", 2006 | "minimatch": "^3.1.2", 2007 | "natural-compare": "^1.4.0", 2008 | "optionator": "^0.9.3", 2009 | "strip-ansi": "^6.0.1", 2010 | "text-table": "^0.2.0" 2011 | }, 2012 | "bin": { 2013 | "eslint": "bin/eslint.js" 2014 | }, 2015 | "engines": { 2016 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2017 | }, 2018 | "funding": { 2019 | "url": "https://opencollective.com/eslint" 2020 | } 2021 | }, 2022 | "node_modules/eslint-plugin-vue": { 2023 | "version": "9.21.0", 2024 | "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.21.0.tgz", 2025 | "integrity": "sha512-B3NgZRtbi9kSl7M0x/PqhSMk7ULJUwWxQpTvM8b2Z6gNTORK0YSt5v1vzwY84oMs/2+3BWH5XmTepaQebcJwfA==", 2026 | "dev": true, 2027 | "dependencies": { 2028 | "@eslint-community/eslint-utils": "^4.4.0", 2029 | "natural-compare": "^1.4.0", 2030 | "nth-check": "^2.1.1", 2031 | "postcss-selector-parser": "^6.0.13", 2032 | "semver": "^7.5.4", 2033 | "vue-eslint-parser": "^9.4.2", 2034 | "xml-name-validator": "^4.0.0" 2035 | }, 2036 | "engines": { 2037 | "node": "^14.17.0 || >=16.0.0" 2038 | }, 2039 | "peerDependencies": { 2040 | "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" 2041 | } 2042 | }, 2043 | "node_modules/eslint-plugin-vue/node_modules/lru-cache": { 2044 | "version": "6.0.0", 2045 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2046 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2047 | "dev": true, 2048 | "dependencies": { 2049 | "yallist": "^4.0.0" 2050 | }, 2051 | "engines": { 2052 | "node": ">=10" 2053 | } 2054 | }, 2055 | "node_modules/eslint-plugin-vue/node_modules/semver": { 2056 | "version": "7.5.4", 2057 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2058 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2059 | "dev": true, 2060 | "dependencies": { 2061 | "lru-cache": "^6.0.0" 2062 | }, 2063 | "bin": { 2064 | "semver": "bin/semver.js" 2065 | }, 2066 | "engines": { 2067 | "node": ">=10" 2068 | } 2069 | }, 2070 | "node_modules/eslint-plugin-vue/node_modules/yallist": { 2071 | "version": "4.0.0", 2072 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2073 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2074 | "dev": true 2075 | }, 2076 | "node_modules/eslint-scope": { 2077 | "version": "5.1.1", 2078 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2079 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2080 | "dev": true, 2081 | "dependencies": { 2082 | "esrecurse": "^4.3.0", 2083 | "estraverse": "^4.1.1" 2084 | }, 2085 | "engines": { 2086 | "node": ">=8.0.0" 2087 | } 2088 | }, 2089 | "node_modules/eslint-visitor-keys": { 2090 | "version": "2.1.0", 2091 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 2092 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 2093 | "dev": true, 2094 | "engines": { 2095 | "node": ">=10" 2096 | } 2097 | }, 2098 | "node_modules/eslint/node_modules/ansi-styles": { 2099 | "version": "4.3.0", 2100 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2101 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2102 | "dev": true, 2103 | "dependencies": { 2104 | "color-convert": "^2.0.1" 2105 | }, 2106 | "engines": { 2107 | "node": ">=8" 2108 | }, 2109 | "funding": { 2110 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2111 | } 2112 | }, 2113 | "node_modules/eslint/node_modules/chalk": { 2114 | "version": "4.1.2", 2115 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2116 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2117 | "dev": true, 2118 | "dependencies": { 2119 | "ansi-styles": "^4.1.0", 2120 | "supports-color": "^7.1.0" 2121 | }, 2122 | "engines": { 2123 | "node": ">=10" 2124 | }, 2125 | "funding": { 2126 | "url": "https://github.com/chalk/chalk?sponsor=1" 2127 | } 2128 | }, 2129 | "node_modules/eslint/node_modules/color-convert": { 2130 | "version": "2.0.1", 2131 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2132 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "color-name": "~1.1.4" 2136 | }, 2137 | "engines": { 2138 | "node": ">=7.0.0" 2139 | } 2140 | }, 2141 | "node_modules/eslint/node_modules/color-name": { 2142 | "version": "1.1.4", 2143 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2144 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2145 | "dev": true 2146 | }, 2147 | "node_modules/eslint/node_modules/escape-string-regexp": { 2148 | "version": "4.0.0", 2149 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2150 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2151 | "dev": true, 2152 | "engines": { 2153 | "node": ">=10" 2154 | }, 2155 | "funding": { 2156 | "url": "https://github.com/sponsors/sindresorhus" 2157 | } 2158 | }, 2159 | "node_modules/eslint/node_modules/eslint-scope": { 2160 | "version": "7.2.2", 2161 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 2162 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 2163 | "dev": true, 2164 | "dependencies": { 2165 | "esrecurse": "^4.3.0", 2166 | "estraverse": "^5.2.0" 2167 | }, 2168 | "engines": { 2169 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2170 | }, 2171 | "funding": { 2172 | "url": "https://opencollective.com/eslint" 2173 | } 2174 | }, 2175 | "node_modules/eslint/node_modules/eslint-visitor-keys": { 2176 | "version": "3.4.3", 2177 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 2178 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 2179 | "dev": true, 2180 | "engines": { 2181 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2182 | }, 2183 | "funding": { 2184 | "url": "https://opencollective.com/eslint" 2185 | } 2186 | }, 2187 | "node_modules/eslint/node_modules/estraverse": { 2188 | "version": "5.3.0", 2189 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2190 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2191 | "dev": true, 2192 | "engines": { 2193 | "node": ">=4.0" 2194 | } 2195 | }, 2196 | "node_modules/eslint/node_modules/globals": { 2197 | "version": "13.24.0", 2198 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 2199 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 2200 | "dev": true, 2201 | "dependencies": { 2202 | "type-fest": "^0.20.2" 2203 | }, 2204 | "engines": { 2205 | "node": ">=8" 2206 | }, 2207 | "funding": { 2208 | "url": "https://github.com/sponsors/sindresorhus" 2209 | } 2210 | }, 2211 | "node_modules/eslint/node_modules/has-flag": { 2212 | "version": "4.0.0", 2213 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2214 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2215 | "dev": true, 2216 | "engines": { 2217 | "node": ">=8" 2218 | } 2219 | }, 2220 | "node_modules/eslint/node_modules/supports-color": { 2221 | "version": "7.2.0", 2222 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2223 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2224 | "dev": true, 2225 | "dependencies": { 2226 | "has-flag": "^4.0.0" 2227 | }, 2228 | "engines": { 2229 | "node": ">=8" 2230 | } 2231 | }, 2232 | "node_modules/espree": { 2233 | "version": "9.6.1", 2234 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 2235 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 2236 | "dev": true, 2237 | "dependencies": { 2238 | "acorn": "^8.9.0", 2239 | "acorn-jsx": "^5.3.2", 2240 | "eslint-visitor-keys": "^3.4.1" 2241 | }, 2242 | "engines": { 2243 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2244 | }, 2245 | "funding": { 2246 | "url": "https://opencollective.com/eslint" 2247 | } 2248 | }, 2249 | "node_modules/espree/node_modules/eslint-visitor-keys": { 2250 | "version": "3.4.3", 2251 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 2252 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 2253 | "dev": true, 2254 | "engines": { 2255 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2256 | }, 2257 | "funding": { 2258 | "url": "https://opencollective.com/eslint" 2259 | } 2260 | }, 2261 | "node_modules/esquery": { 2262 | "version": "1.5.0", 2263 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 2264 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 2265 | "dev": true, 2266 | "dependencies": { 2267 | "estraverse": "^5.1.0" 2268 | }, 2269 | "engines": { 2270 | "node": ">=0.10" 2271 | } 2272 | }, 2273 | "node_modules/esquery/node_modules/estraverse": { 2274 | "version": "5.3.0", 2275 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2276 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2277 | "dev": true, 2278 | "engines": { 2279 | "node": ">=4.0" 2280 | } 2281 | }, 2282 | "node_modules/esrecurse": { 2283 | "version": "4.3.0", 2284 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2285 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2286 | "dev": true, 2287 | "dependencies": { 2288 | "estraverse": "^5.2.0" 2289 | }, 2290 | "engines": { 2291 | "node": ">=4.0" 2292 | } 2293 | }, 2294 | "node_modules/esrecurse/node_modules/estraverse": { 2295 | "version": "5.3.0", 2296 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2297 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2298 | "dev": true, 2299 | "engines": { 2300 | "node": ">=4.0" 2301 | } 2302 | }, 2303 | "node_modules/estraverse": { 2304 | "version": "4.3.0", 2305 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2306 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2307 | "dev": true, 2308 | "engines": { 2309 | "node": ">=4.0" 2310 | } 2311 | }, 2312 | "node_modules/estree-walker": { 2313 | "version": "2.0.2", 2314 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 2315 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 2316 | }, 2317 | "node_modules/esutils": { 2318 | "version": "2.0.3", 2319 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2320 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2321 | "dev": true, 2322 | "engines": { 2323 | "node": ">=0.10.0" 2324 | } 2325 | }, 2326 | "node_modules/fast-deep-equal": { 2327 | "version": "3.1.3", 2328 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2329 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2330 | "dev": true 2331 | }, 2332 | "node_modules/fast-json-stable-stringify": { 2333 | "version": "2.1.0", 2334 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2335 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2336 | "dev": true 2337 | }, 2338 | "node_modules/fast-levenshtein": { 2339 | "version": "2.0.6", 2340 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2341 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2342 | "dev": true 2343 | }, 2344 | "node_modules/fastq": { 2345 | "version": "1.17.0", 2346 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", 2347 | "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", 2348 | "dev": true, 2349 | "dependencies": { 2350 | "reusify": "^1.0.4" 2351 | } 2352 | }, 2353 | "node_modules/file-entry-cache": { 2354 | "version": "6.0.1", 2355 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2356 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2357 | "dev": true, 2358 | "dependencies": { 2359 | "flat-cache": "^3.0.4" 2360 | }, 2361 | "engines": { 2362 | "node": "^10.12.0 || >=12.0.0" 2363 | } 2364 | }, 2365 | "node_modules/fill-range": { 2366 | "version": "7.1.1", 2367 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2368 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2369 | "dev": true, 2370 | "license": "MIT", 2371 | "dependencies": { 2372 | "to-regex-range": "^5.0.1" 2373 | }, 2374 | "engines": { 2375 | "node": ">=8" 2376 | } 2377 | }, 2378 | "node_modules/find-up": { 2379 | "version": "5.0.0", 2380 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2381 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2382 | "dev": true, 2383 | "dependencies": { 2384 | "locate-path": "^6.0.0", 2385 | "path-exists": "^4.0.0" 2386 | }, 2387 | "engines": { 2388 | "node": ">=10" 2389 | }, 2390 | "funding": { 2391 | "url": "https://github.com/sponsors/sindresorhus" 2392 | } 2393 | }, 2394 | "node_modules/flat-cache": { 2395 | "version": "3.2.0", 2396 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 2397 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 2398 | "dev": true, 2399 | "dependencies": { 2400 | "flatted": "^3.2.9", 2401 | "keyv": "^4.5.3", 2402 | "rimraf": "^3.0.2" 2403 | }, 2404 | "engines": { 2405 | "node": "^10.12.0 || >=12.0.0" 2406 | } 2407 | }, 2408 | "node_modules/flatted": { 2409 | "version": "3.2.9", 2410 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", 2411 | "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", 2412 | "dev": true 2413 | }, 2414 | "node_modules/fs.realpath": { 2415 | "version": "1.0.0", 2416 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2417 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2418 | "dev": true 2419 | }, 2420 | "node_modules/fsevents": { 2421 | "version": "2.3.3", 2422 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2423 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2424 | "dev": true, 2425 | "hasInstallScript": true, 2426 | "optional": true, 2427 | "os": [ 2428 | "darwin" 2429 | ], 2430 | "engines": { 2431 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2432 | } 2433 | }, 2434 | "node_modules/function-bind": { 2435 | "version": "1.1.2", 2436 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2437 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2438 | "dev": true, 2439 | "funding": { 2440 | "url": "https://github.com/sponsors/ljharb" 2441 | } 2442 | }, 2443 | "node_modules/gensync": { 2444 | "version": "1.0.0-beta.2", 2445 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2446 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2447 | "dev": true, 2448 | "peer": true, 2449 | "engines": { 2450 | "node": ">=6.9.0" 2451 | } 2452 | }, 2453 | "node_modules/glob": { 2454 | "version": "7.2.3", 2455 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2456 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2457 | "dev": true, 2458 | "dependencies": { 2459 | "fs.realpath": "^1.0.0", 2460 | "inflight": "^1.0.4", 2461 | "inherits": "2", 2462 | "minimatch": "^3.1.1", 2463 | "once": "^1.3.0", 2464 | "path-is-absolute": "^1.0.0" 2465 | }, 2466 | "engines": { 2467 | "node": "*" 2468 | }, 2469 | "funding": { 2470 | "url": "https://github.com/sponsors/isaacs" 2471 | } 2472 | }, 2473 | "node_modules/glob-parent": { 2474 | "version": "6.0.2", 2475 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2476 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2477 | "dev": true, 2478 | "dependencies": { 2479 | "is-glob": "^4.0.3" 2480 | }, 2481 | "engines": { 2482 | "node": ">=10.13.0" 2483 | } 2484 | }, 2485 | "node_modules/globals": { 2486 | "version": "11.12.0", 2487 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2488 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2489 | "dev": true, 2490 | "peer": true, 2491 | "engines": { 2492 | "node": ">=4" 2493 | } 2494 | }, 2495 | "node_modules/graphemer": { 2496 | "version": "1.4.0", 2497 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2498 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2499 | "dev": true 2500 | }, 2501 | "node_modules/has-flag": { 2502 | "version": "3.0.0", 2503 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2504 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2505 | "dev": true, 2506 | "peer": true, 2507 | "engines": { 2508 | "node": ">=4" 2509 | } 2510 | }, 2511 | "node_modules/hasown": { 2512 | "version": "2.0.0", 2513 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 2514 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 2515 | "dev": true, 2516 | "dependencies": { 2517 | "function-bind": "^1.1.2" 2518 | }, 2519 | "engines": { 2520 | "node": ">= 0.4" 2521 | } 2522 | }, 2523 | "node_modules/ignore": { 2524 | "version": "5.3.0", 2525 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", 2526 | "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", 2527 | "dev": true, 2528 | "engines": { 2529 | "node": ">= 4" 2530 | } 2531 | }, 2532 | "node_modules/immutable": { 2533 | "version": "4.3.5", 2534 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", 2535 | "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", 2536 | "dev": true 2537 | }, 2538 | "node_modules/import-fresh": { 2539 | "version": "3.3.0", 2540 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2541 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2542 | "dev": true, 2543 | "dependencies": { 2544 | "parent-module": "^1.0.0", 2545 | "resolve-from": "^4.0.0" 2546 | }, 2547 | "engines": { 2548 | "node": ">=6" 2549 | }, 2550 | "funding": { 2551 | "url": "https://github.com/sponsors/sindresorhus" 2552 | } 2553 | }, 2554 | "node_modules/imurmurhash": { 2555 | "version": "0.1.4", 2556 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2557 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2558 | "dev": true, 2559 | "engines": { 2560 | "node": ">=0.8.19" 2561 | } 2562 | }, 2563 | "node_modules/inflight": { 2564 | "version": "1.0.6", 2565 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2566 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2567 | "dev": true, 2568 | "dependencies": { 2569 | "once": "^1.3.0", 2570 | "wrappy": "1" 2571 | } 2572 | }, 2573 | "node_modules/inherits": { 2574 | "version": "2.0.4", 2575 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2576 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2577 | "dev": true 2578 | }, 2579 | "node_modules/is-binary-path": { 2580 | "version": "2.1.0", 2581 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2582 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2583 | "dev": true, 2584 | "dependencies": { 2585 | "binary-extensions": "^2.0.0" 2586 | }, 2587 | "engines": { 2588 | "node": ">=8" 2589 | } 2590 | }, 2591 | "node_modules/is-core-module": { 2592 | "version": "2.13.1", 2593 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 2594 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 2595 | "dev": true, 2596 | "dependencies": { 2597 | "hasown": "^2.0.0" 2598 | }, 2599 | "funding": { 2600 | "url": "https://github.com/sponsors/ljharb" 2601 | } 2602 | }, 2603 | "node_modules/is-extglob": { 2604 | "version": "2.1.1", 2605 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2606 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2607 | "dev": true, 2608 | "engines": { 2609 | "node": ">=0.10.0" 2610 | } 2611 | }, 2612 | "node_modules/is-glob": { 2613 | "version": "4.0.3", 2614 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2615 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2616 | "dev": true, 2617 | "dependencies": { 2618 | "is-extglob": "^2.1.1" 2619 | }, 2620 | "engines": { 2621 | "node": ">=0.10.0" 2622 | } 2623 | }, 2624 | "node_modules/is-number": { 2625 | "version": "7.0.0", 2626 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2627 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2628 | "dev": true, 2629 | "license": "MIT", 2630 | "engines": { 2631 | "node": ">=0.12.0" 2632 | } 2633 | }, 2634 | "node_modules/is-path-inside": { 2635 | "version": "3.0.3", 2636 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2637 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2638 | "dev": true, 2639 | "engines": { 2640 | "node": ">=8" 2641 | } 2642 | }, 2643 | "node_modules/isexe": { 2644 | "version": "2.0.0", 2645 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2646 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2647 | "dev": true 2648 | }, 2649 | "node_modules/js-tokens": { 2650 | "version": "4.0.0", 2651 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2652 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2653 | "dev": true, 2654 | "peer": true 2655 | }, 2656 | "node_modules/js-yaml": { 2657 | "version": "4.1.0", 2658 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2659 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2660 | "dev": true, 2661 | "dependencies": { 2662 | "argparse": "^2.0.1" 2663 | }, 2664 | "bin": { 2665 | "js-yaml": "bin/js-yaml.js" 2666 | } 2667 | }, 2668 | "node_modules/jsesc": { 2669 | "version": "2.5.2", 2670 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2671 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2672 | "dev": true, 2673 | "peer": true, 2674 | "bin": { 2675 | "jsesc": "bin/jsesc" 2676 | }, 2677 | "engines": { 2678 | "node": ">=4" 2679 | } 2680 | }, 2681 | "node_modules/json-buffer": { 2682 | "version": "3.0.1", 2683 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2684 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2685 | "dev": true 2686 | }, 2687 | "node_modules/json-schema-traverse": { 2688 | "version": "0.4.1", 2689 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2690 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2691 | "dev": true 2692 | }, 2693 | "node_modules/json-stable-stringify-without-jsonify": { 2694 | "version": "1.0.1", 2695 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2696 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2697 | "dev": true 2698 | }, 2699 | "node_modules/json5": { 2700 | "version": "2.2.3", 2701 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2702 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2703 | "dev": true, 2704 | "peer": true, 2705 | "bin": { 2706 | "json5": "lib/cli.js" 2707 | }, 2708 | "engines": { 2709 | "node": ">=6" 2710 | } 2711 | }, 2712 | "node_modules/keyv": { 2713 | "version": "4.5.4", 2714 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2715 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2716 | "dev": true, 2717 | "dependencies": { 2718 | "json-buffer": "3.0.1" 2719 | } 2720 | }, 2721 | "node_modules/levn": { 2722 | "version": "0.4.1", 2723 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2724 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2725 | "dev": true, 2726 | "dependencies": { 2727 | "prelude-ls": "^1.2.1", 2728 | "type-check": "~0.4.0" 2729 | }, 2730 | "engines": { 2731 | "node": ">= 0.8.0" 2732 | } 2733 | }, 2734 | "node_modules/locate-path": { 2735 | "version": "6.0.0", 2736 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2737 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2738 | "dev": true, 2739 | "dependencies": { 2740 | "p-locate": "^5.0.0" 2741 | }, 2742 | "engines": { 2743 | "node": ">=10" 2744 | }, 2745 | "funding": { 2746 | "url": "https://github.com/sponsors/sindresorhus" 2747 | } 2748 | }, 2749 | "node_modules/lodash": { 2750 | "version": "4.17.21", 2751 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2752 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2753 | "dev": true 2754 | }, 2755 | "node_modules/lodash.merge": { 2756 | "version": "4.6.2", 2757 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2758 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2759 | "dev": true 2760 | }, 2761 | "node_modules/lru-cache": { 2762 | "version": "5.1.1", 2763 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2764 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2765 | "dev": true, 2766 | "peer": true, 2767 | "dependencies": { 2768 | "yallist": "^3.0.2" 2769 | } 2770 | }, 2771 | "node_modules/magic-string": { 2772 | "version": "0.30.5", 2773 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", 2774 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", 2775 | "dependencies": { 2776 | "@jridgewell/sourcemap-codec": "^1.4.15" 2777 | }, 2778 | "engines": { 2779 | "node": ">=12" 2780 | } 2781 | }, 2782 | "node_modules/marked": { 2783 | "version": "4.3.0", 2784 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", 2785 | "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", 2786 | "bin": { 2787 | "marked": "bin/marked.js" 2788 | }, 2789 | "engines": { 2790 | "node": ">= 12" 2791 | } 2792 | }, 2793 | "node_modules/minimatch": { 2794 | "version": "3.1.2", 2795 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2796 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2797 | "dev": true, 2798 | "dependencies": { 2799 | "brace-expansion": "^1.1.7" 2800 | }, 2801 | "engines": { 2802 | "node": "*" 2803 | } 2804 | }, 2805 | "node_modules/ms": { 2806 | "version": "2.1.2", 2807 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2808 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2809 | "dev": true 2810 | }, 2811 | "node_modules/nanoid": { 2812 | "version": "3.3.8", 2813 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 2814 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 2815 | "funding": [ 2816 | { 2817 | "type": "github", 2818 | "url": "https://github.com/sponsors/ai" 2819 | } 2820 | ], 2821 | "license": "MIT", 2822 | "bin": { 2823 | "nanoid": "bin/nanoid.cjs" 2824 | }, 2825 | "engines": { 2826 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2827 | } 2828 | }, 2829 | "node_modules/natural-compare": { 2830 | "version": "1.4.0", 2831 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2832 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2833 | "dev": true 2834 | }, 2835 | "node_modules/node-releases": { 2836 | "version": "2.0.14", 2837 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 2838 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 2839 | "dev": true, 2840 | "peer": true 2841 | }, 2842 | "node_modules/normalize-path": { 2843 | "version": "3.0.0", 2844 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2845 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2846 | "dev": true, 2847 | "engines": { 2848 | "node": ">=0.10.0" 2849 | } 2850 | }, 2851 | "node_modules/nth-check": { 2852 | "version": "2.1.1", 2853 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 2854 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 2855 | "dev": true, 2856 | "dependencies": { 2857 | "boolbase": "^1.0.0" 2858 | }, 2859 | "funding": { 2860 | "url": "https://github.com/fb55/nth-check?sponsor=1" 2861 | } 2862 | }, 2863 | "node_modules/once": { 2864 | "version": "1.4.0", 2865 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2866 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2867 | "dev": true, 2868 | "dependencies": { 2869 | "wrappy": "1" 2870 | } 2871 | }, 2872 | "node_modules/optionator": { 2873 | "version": "0.9.3", 2874 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2875 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2876 | "dev": true, 2877 | "dependencies": { 2878 | "@aashutoshrathi/word-wrap": "^1.2.3", 2879 | "deep-is": "^0.1.3", 2880 | "fast-levenshtein": "^2.0.6", 2881 | "levn": "^0.4.1", 2882 | "prelude-ls": "^1.2.1", 2883 | "type-check": "^0.4.0" 2884 | }, 2885 | "engines": { 2886 | "node": ">= 0.8.0" 2887 | } 2888 | }, 2889 | "node_modules/p-limit": { 2890 | "version": "3.1.0", 2891 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2892 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2893 | "dev": true, 2894 | "dependencies": { 2895 | "yocto-queue": "^0.1.0" 2896 | }, 2897 | "engines": { 2898 | "node": ">=10" 2899 | }, 2900 | "funding": { 2901 | "url": "https://github.com/sponsors/sindresorhus" 2902 | } 2903 | }, 2904 | "node_modules/p-locate": { 2905 | "version": "5.0.0", 2906 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2907 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2908 | "dev": true, 2909 | "dependencies": { 2910 | "p-limit": "^3.0.2" 2911 | }, 2912 | "engines": { 2913 | "node": ">=10" 2914 | }, 2915 | "funding": { 2916 | "url": "https://github.com/sponsors/sindresorhus" 2917 | } 2918 | }, 2919 | "node_modules/parent-module": { 2920 | "version": "1.0.1", 2921 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2922 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2923 | "dev": true, 2924 | "dependencies": { 2925 | "callsites": "^3.0.0" 2926 | }, 2927 | "engines": { 2928 | "node": ">=6" 2929 | } 2930 | }, 2931 | "node_modules/path-exists": { 2932 | "version": "4.0.0", 2933 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2934 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2935 | "dev": true, 2936 | "engines": { 2937 | "node": ">=8" 2938 | } 2939 | }, 2940 | "node_modules/path-is-absolute": { 2941 | "version": "1.0.1", 2942 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2943 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2944 | "dev": true, 2945 | "engines": { 2946 | "node": ">=0.10.0" 2947 | } 2948 | }, 2949 | "node_modules/path-key": { 2950 | "version": "3.1.1", 2951 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2952 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2953 | "dev": true, 2954 | "engines": { 2955 | "node": ">=8" 2956 | } 2957 | }, 2958 | "node_modules/path-parse": { 2959 | "version": "1.0.7", 2960 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2961 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2962 | "dev": true 2963 | }, 2964 | "node_modules/picocolors": { 2965 | "version": "1.0.0", 2966 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2967 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 2968 | }, 2969 | "node_modules/picomatch": { 2970 | "version": "2.3.1", 2971 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2972 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2973 | "dev": true, 2974 | "engines": { 2975 | "node": ">=8.6" 2976 | }, 2977 | "funding": { 2978 | "url": "https://github.com/sponsors/jonschlinkert" 2979 | } 2980 | }, 2981 | "node_modules/postcss": { 2982 | "version": "8.4.33", 2983 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", 2984 | "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", 2985 | "funding": [ 2986 | { 2987 | "type": "opencollective", 2988 | "url": "https://opencollective.com/postcss/" 2989 | }, 2990 | { 2991 | "type": "tidelift", 2992 | "url": "https://tidelift.com/funding/github/npm/postcss" 2993 | }, 2994 | { 2995 | "type": "github", 2996 | "url": "https://github.com/sponsors/ai" 2997 | } 2998 | ], 2999 | "dependencies": { 3000 | "nanoid": "^3.3.7", 3001 | "picocolors": "^1.0.0", 3002 | "source-map-js": "^1.0.2" 3003 | }, 3004 | "engines": { 3005 | "node": "^10 || ^12 || >=14" 3006 | } 3007 | }, 3008 | "node_modules/postcss-selector-parser": { 3009 | "version": "6.0.15", 3010 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", 3011 | "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", 3012 | "dev": true, 3013 | "dependencies": { 3014 | "cssesc": "^3.0.0", 3015 | "util-deprecate": "^1.0.2" 3016 | }, 3017 | "engines": { 3018 | "node": ">=4" 3019 | } 3020 | }, 3021 | "node_modules/prelude-ls": { 3022 | "version": "1.2.1", 3023 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3024 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3025 | "dev": true, 3026 | "engines": { 3027 | "node": ">= 0.8.0" 3028 | } 3029 | }, 3030 | "node_modules/punycode": { 3031 | "version": "2.3.1", 3032 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3033 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3034 | "dev": true, 3035 | "engines": { 3036 | "node": ">=6" 3037 | } 3038 | }, 3039 | "node_modules/queue-microtask": { 3040 | "version": "1.2.3", 3041 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3042 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3043 | "dev": true, 3044 | "funding": [ 3045 | { 3046 | "type": "github", 3047 | "url": "https://github.com/sponsors/feross" 3048 | }, 3049 | { 3050 | "type": "patreon", 3051 | "url": "https://www.patreon.com/feross" 3052 | }, 3053 | { 3054 | "type": "consulting", 3055 | "url": "https://feross.org/support" 3056 | } 3057 | ] 3058 | }, 3059 | "node_modules/readdirp": { 3060 | "version": "3.6.0", 3061 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3062 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3063 | "dev": true, 3064 | "dependencies": { 3065 | "picomatch": "^2.2.1" 3066 | }, 3067 | "engines": { 3068 | "node": ">=8.10.0" 3069 | } 3070 | }, 3071 | "node_modules/resolve": { 3072 | "version": "1.22.8", 3073 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 3074 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 3075 | "dev": true, 3076 | "dependencies": { 3077 | "is-core-module": "^2.13.0", 3078 | "path-parse": "^1.0.7", 3079 | "supports-preserve-symlinks-flag": "^1.0.0" 3080 | }, 3081 | "bin": { 3082 | "resolve": "bin/resolve" 3083 | }, 3084 | "funding": { 3085 | "url": "https://github.com/sponsors/ljharb" 3086 | } 3087 | }, 3088 | "node_modules/resolve-from": { 3089 | "version": "4.0.0", 3090 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3091 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3092 | "dev": true, 3093 | "engines": { 3094 | "node": ">=4" 3095 | } 3096 | }, 3097 | "node_modules/reusify": { 3098 | "version": "1.0.4", 3099 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3100 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3101 | "dev": true, 3102 | "engines": { 3103 | "iojs": ">=1.0.0", 3104 | "node": ">=0.10.0" 3105 | } 3106 | }, 3107 | "node_modules/rimraf": { 3108 | "version": "3.0.2", 3109 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3110 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3111 | "dev": true, 3112 | "dependencies": { 3113 | "glob": "^7.1.3" 3114 | }, 3115 | "bin": { 3116 | "rimraf": "bin.js" 3117 | }, 3118 | "funding": { 3119 | "url": "https://github.com/sponsors/isaacs" 3120 | } 3121 | }, 3122 | "node_modules/run-parallel": { 3123 | "version": "1.2.0", 3124 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3125 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3126 | "dev": true, 3127 | "funding": [ 3128 | { 3129 | "type": "github", 3130 | "url": "https://github.com/sponsors/feross" 3131 | }, 3132 | { 3133 | "type": "patreon", 3134 | "url": "https://www.patreon.com/feross" 3135 | }, 3136 | { 3137 | "type": "consulting", 3138 | "url": "https://feross.org/support" 3139 | } 3140 | ], 3141 | "dependencies": { 3142 | "queue-microtask": "^1.2.2" 3143 | } 3144 | }, 3145 | "node_modules/sass": { 3146 | "version": "1.70.0", 3147 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", 3148 | "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", 3149 | "dev": true, 3150 | "dependencies": { 3151 | "chokidar": ">=3.0.0 <4.0.0", 3152 | "immutable": "^4.0.0", 3153 | "source-map-js": ">=0.6.2 <2.0.0" 3154 | }, 3155 | "bin": { 3156 | "sass": "sass.js" 3157 | }, 3158 | "engines": { 3159 | "node": ">=14.0.0" 3160 | } 3161 | }, 3162 | "node_modules/semver": { 3163 | "version": "6.3.1", 3164 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3165 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3166 | "dev": true, 3167 | "bin": { 3168 | "semver": "bin/semver.js" 3169 | } 3170 | }, 3171 | "node_modules/shebang-command": { 3172 | "version": "2.0.0", 3173 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3174 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3175 | "dev": true, 3176 | "dependencies": { 3177 | "shebang-regex": "^3.0.0" 3178 | }, 3179 | "engines": { 3180 | "node": ">=8" 3181 | } 3182 | }, 3183 | "node_modules/shebang-regex": { 3184 | "version": "3.0.0", 3185 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3186 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3187 | "dev": true, 3188 | "engines": { 3189 | "node": ">=8" 3190 | } 3191 | }, 3192 | "node_modules/showdown": { 3193 | "version": "2.1.0", 3194 | "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", 3195 | "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", 3196 | "dependencies": { 3197 | "commander": "^9.0.0" 3198 | }, 3199 | "bin": { 3200 | "showdown": "bin/showdown.js" 3201 | }, 3202 | "funding": { 3203 | "type": "individual", 3204 | "url": "https://www.paypal.me/tiviesantos" 3205 | } 3206 | }, 3207 | "node_modules/source-map-js": { 3208 | "version": "1.0.2", 3209 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3210 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3211 | "engines": { 3212 | "node": ">=0.10.0" 3213 | } 3214 | }, 3215 | "node_modules/strip-ansi": { 3216 | "version": "6.0.1", 3217 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3218 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3219 | "dev": true, 3220 | "dependencies": { 3221 | "ansi-regex": "^5.0.1" 3222 | }, 3223 | "engines": { 3224 | "node": ">=8" 3225 | } 3226 | }, 3227 | "node_modules/strip-json-comments": { 3228 | "version": "3.1.1", 3229 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3230 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3231 | "dev": true, 3232 | "engines": { 3233 | "node": ">=8" 3234 | }, 3235 | "funding": { 3236 | "url": "https://github.com/sponsors/sindresorhus" 3237 | } 3238 | }, 3239 | "node_modules/supports-color": { 3240 | "version": "5.5.0", 3241 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3242 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3243 | "dev": true, 3244 | "peer": true, 3245 | "dependencies": { 3246 | "has-flag": "^3.0.0" 3247 | }, 3248 | "engines": { 3249 | "node": ">=4" 3250 | } 3251 | }, 3252 | "node_modules/supports-preserve-symlinks-flag": { 3253 | "version": "1.0.0", 3254 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3255 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3256 | "dev": true, 3257 | "engines": { 3258 | "node": ">= 0.4" 3259 | }, 3260 | "funding": { 3261 | "url": "https://github.com/sponsors/ljharb" 3262 | } 3263 | }, 3264 | "node_modules/text-table": { 3265 | "version": "0.2.0", 3266 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3267 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3268 | "dev": true 3269 | }, 3270 | "node_modules/to-fast-properties": { 3271 | "version": "2.0.0", 3272 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3273 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3274 | "dev": true, 3275 | "peer": true, 3276 | "engines": { 3277 | "node": ">=4" 3278 | } 3279 | }, 3280 | "node_modules/to-regex-range": { 3281 | "version": "5.0.1", 3282 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3283 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3284 | "dev": true, 3285 | "license": "MIT", 3286 | "dependencies": { 3287 | "is-number": "^7.0.0" 3288 | }, 3289 | "engines": { 3290 | "node": ">=8.0" 3291 | } 3292 | }, 3293 | "node_modules/type-check": { 3294 | "version": "0.4.0", 3295 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3296 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3297 | "dev": true, 3298 | "dependencies": { 3299 | "prelude-ls": "^1.2.1" 3300 | }, 3301 | "engines": { 3302 | "node": ">= 0.8.0" 3303 | } 3304 | }, 3305 | "node_modules/type-fest": { 3306 | "version": "0.20.2", 3307 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3308 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3309 | "dev": true, 3310 | "engines": { 3311 | "node": ">=10" 3312 | }, 3313 | "funding": { 3314 | "url": "https://github.com/sponsors/sindresorhus" 3315 | } 3316 | }, 3317 | "node_modules/typescript": { 3318 | "version": "4.9.5", 3319 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 3320 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 3321 | "devOptional": true, 3322 | "bin": { 3323 | "tsc": "bin/tsc", 3324 | "tsserver": "bin/tsserver" 3325 | }, 3326 | "engines": { 3327 | "node": ">=4.2.0" 3328 | } 3329 | }, 3330 | "node_modules/typo-js": { 3331 | "version": "1.2.3", 3332 | "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.2.3.tgz", 3333 | "integrity": "sha512-67Hyl94beZX8gmTap7IDPrG5hy2cHftgsCAcGvE1tzuxGT+kRB+zSBin0wIMwysYw8RUCBCvv9UfQl8TNM75dA==" 3334 | }, 3335 | "node_modules/update-browserslist-db": { 3336 | "version": "1.0.13", 3337 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 3338 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 3339 | "dev": true, 3340 | "funding": [ 3341 | { 3342 | "type": "opencollective", 3343 | "url": "https://opencollective.com/browserslist" 3344 | }, 3345 | { 3346 | "type": "tidelift", 3347 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3348 | }, 3349 | { 3350 | "type": "github", 3351 | "url": "https://github.com/sponsors/ai" 3352 | } 3353 | ], 3354 | "peer": true, 3355 | "dependencies": { 3356 | "escalade": "^3.1.1", 3357 | "picocolors": "^1.0.0" 3358 | }, 3359 | "bin": { 3360 | "update-browserslist-db": "cli.js" 3361 | }, 3362 | "peerDependencies": { 3363 | "browserslist": ">= 4.21.0" 3364 | } 3365 | }, 3366 | "node_modules/uri-js": { 3367 | "version": "4.4.1", 3368 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3369 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3370 | "dev": true, 3371 | "dependencies": { 3372 | "punycode": "^2.1.0" 3373 | } 3374 | }, 3375 | "node_modules/util-deprecate": { 3376 | "version": "1.0.2", 3377 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3378 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3379 | "dev": true 3380 | }, 3381 | "node_modules/vue": { 3382 | "version": "3.4.15", 3383 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.15.tgz", 3384 | "integrity": "sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==", 3385 | "dependencies": { 3386 | "@vue/compiler-dom": "3.4.15", 3387 | "@vue/compiler-sfc": "3.4.15", 3388 | "@vue/runtime-dom": "3.4.15", 3389 | "@vue/server-renderer": "3.4.15", 3390 | "@vue/shared": "3.4.15" 3391 | }, 3392 | "peerDependencies": { 3393 | "typescript": "*" 3394 | }, 3395 | "peerDependenciesMeta": { 3396 | "typescript": { 3397 | "optional": true 3398 | } 3399 | } 3400 | }, 3401 | "node_modules/vue-eslint-parser": { 3402 | "version": "9.4.2", 3403 | "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", 3404 | "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", 3405 | "dev": true, 3406 | "dependencies": { 3407 | "debug": "^4.3.4", 3408 | "eslint-scope": "^7.1.1", 3409 | "eslint-visitor-keys": "^3.3.0", 3410 | "espree": "^9.3.1", 3411 | "esquery": "^1.4.0", 3412 | "lodash": "^4.17.21", 3413 | "semver": "^7.3.6" 3414 | }, 3415 | "engines": { 3416 | "node": "^14.17.0 || >=16.0.0" 3417 | }, 3418 | "funding": { 3419 | "url": "https://github.com/sponsors/mysticatea" 3420 | }, 3421 | "peerDependencies": { 3422 | "eslint": ">=6.0.0" 3423 | } 3424 | }, 3425 | "node_modules/vue-eslint-parser/node_modules/eslint-scope": { 3426 | "version": "7.2.2", 3427 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 3428 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 3429 | "dev": true, 3430 | "dependencies": { 3431 | "esrecurse": "^4.3.0", 3432 | "estraverse": "^5.2.0" 3433 | }, 3434 | "engines": { 3435 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3436 | }, 3437 | "funding": { 3438 | "url": "https://opencollective.com/eslint" 3439 | } 3440 | }, 3441 | "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { 3442 | "version": "3.4.3", 3443 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 3444 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 3445 | "dev": true, 3446 | "engines": { 3447 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3448 | }, 3449 | "funding": { 3450 | "url": "https://opencollective.com/eslint" 3451 | } 3452 | }, 3453 | "node_modules/vue-eslint-parser/node_modules/estraverse": { 3454 | "version": "5.3.0", 3455 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 3456 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 3457 | "dev": true, 3458 | "engines": { 3459 | "node": ">=4.0" 3460 | } 3461 | }, 3462 | "node_modules/vue-eslint-parser/node_modules/lru-cache": { 3463 | "version": "6.0.0", 3464 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3465 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3466 | "dev": true, 3467 | "dependencies": { 3468 | "yallist": "^4.0.0" 3469 | }, 3470 | "engines": { 3471 | "node": ">=10" 3472 | } 3473 | }, 3474 | "node_modules/vue-eslint-parser/node_modules/semver": { 3475 | "version": "7.5.4", 3476 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 3477 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 3478 | "dev": true, 3479 | "dependencies": { 3480 | "lru-cache": "^6.0.0" 3481 | }, 3482 | "bin": { 3483 | "semver": "bin/semver.js" 3484 | }, 3485 | "engines": { 3486 | "node": ">=10" 3487 | } 3488 | }, 3489 | "node_modules/vue-eslint-parser/node_modules/yallist": { 3490 | "version": "4.0.0", 3491 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3492 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3493 | "dev": true 3494 | }, 3495 | "node_modules/vue-router": { 3496 | "version": "4.2.5", 3497 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", 3498 | "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", 3499 | "dependencies": { 3500 | "@vue/devtools-api": "^6.5.0" 3501 | }, 3502 | "funding": { 3503 | "url": "https://github.com/sponsors/posva" 3504 | }, 3505 | "peerDependencies": { 3506 | "vue": "^3.2.0" 3507 | } 3508 | }, 3509 | "node_modules/which": { 3510 | "version": "2.0.2", 3511 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3512 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3513 | "dev": true, 3514 | "dependencies": { 3515 | "isexe": "^2.0.0" 3516 | }, 3517 | "bin": { 3518 | "node-which": "bin/node-which" 3519 | }, 3520 | "engines": { 3521 | "node": ">= 8" 3522 | } 3523 | }, 3524 | "node_modules/wrappy": { 3525 | "version": "1.0.2", 3526 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3527 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3528 | "dev": true 3529 | }, 3530 | "node_modules/xml-name-validator": { 3531 | "version": "4.0.0", 3532 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", 3533 | "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", 3534 | "dev": true, 3535 | "engines": { 3536 | "node": ">=12" 3537 | } 3538 | }, 3539 | "node_modules/yallist": { 3540 | "version": "3.1.1", 3541 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3542 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3543 | "dev": true, 3544 | "peer": true 3545 | }, 3546 | "node_modules/yocto-queue": { 3547 | "version": "0.1.0", 3548 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3549 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3550 | "dev": true, 3551 | "engines": { 3552 | "node": ">=10" 3553 | }, 3554 | "funding": { 3555 | "url": "https://github.com/sponsors/sindresorhus" 3556 | } 3557 | } 3558 | } 3559 | } 3560 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@babel/eslint-parser": "^7.23.3", 4 | "esbuild": "^0.19.11", 5 | "esbuild-plugin-vue3": "^0.4.0", 6 | "esbuild-sass-plugin": "^2.16.1", 7 | "eslint": "^8.56.0", 8 | "eslint-plugin-vue": "^9.20.1" 9 | }, 10 | "name": "wiki", 11 | "private": true, 12 | "dependencies": { 13 | "bootstrap": "^5.3.2", 14 | "easymde": "^2.18.0", 15 | "showdown": "^2.1.0", 16 | "vue": "^3.4.14", 17 | "vue-router": "^4.2.5" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 77 | -------------------------------------------------------------------------------- /src/easymde.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Custom CSS to make EasyMDE play nice with Bootstrap colors 3 | * https://github.com/Ionaru/easy-markdown-editor/issues/131 4 | */ 5 | 6 | .EasyMDEContainer .CodeMirror { 7 | color: var(--bs-body-color); 8 | border-color: var(--bs-border-color); 9 | background-color: var(--bs-body-bg); 10 | } 11 | 12 | .EasyMDEContainer .cm-s-easymde .CodeMirror-cursor { 13 | border-color: var(--bs-body-color); 14 | } 15 | 16 | .CodeMirror-cursor { 17 | border-left: 1px solid var(--bs-body-color); 18 | border-right: none; 19 | width: 0; 20 | } 21 | 22 | .EasyMDEContainer .editor-toolbar>* { 23 | border-color: var(--bs-body-bg); 24 | } 25 | 26 | .editor-toolbar { 27 | border-top: 1px solid var(--bs-border-color); 28 | border-left: 1px solid var(--bs-border-color); 29 | border-right: 1px solid var(--bs-border-color); 30 | } 31 | 32 | .editor-toolbar i.separator { 33 | border-left: 1px solid var(--bs-border-color); 34 | border-right: 1px solid var(--bs-border-color); 35 | } 36 | 37 | .EasyMDEContainer .editor-toolbar>.active, 38 | .editor-toolbar>button:hover, 39 | .editor-preview pre, 40 | .cm-s-easymde .cm-comment { 41 | background-color: var(--bs-body-bg); 42 | } 43 | 44 | .EasyMDEContainer .CodeMirror-fullscreen { 45 | background: var(--bs-body-bg); 46 | } 47 | 48 | .editor-toolbar.fullscreen { 49 | background: var(--bs-body-bg); 50 | } 51 | 52 | .editor-preview { 53 | background: var(--bs-body-bg); 54 | } 55 | 56 | .editor-preview-side { 57 | border-color: var(--bs-border-color); 58 | } 59 | 60 | .CodeMirror-selected { 61 | background: var(--bs-secondary-bg); 62 | } 63 | 64 | .CodeMirror-focused .CodeMirror-selected { 65 | background: var(--bs-secondary-bg); 66 | } 67 | 68 | .CodeMirror-line::selection, 69 | .CodeMirror-line>span::selection, 70 | .CodeMirror-line>span>span::selection { 71 | background: var(--bs-secondary-bg) 72 | } 73 | 74 | .CodeMirror-line::-moz-selection, 75 | .CodeMirror-line>span::-moz-selection, 76 | .CodeMirror-line>span>span::-moz-selection { 77 | background: var(--bs-secondary-bg) 78 | } 79 | 80 | .EasyMDEContainer .CodeMirror-focused .CodeMirror-selected { 81 | background: var(--bs-secondary-bg) 82 | } 83 | -------------------------------------------------------------------------------- /src/edit.vue: -------------------------------------------------------------------------------- 1 |