├── .eslintrc.cjs ├── .github ├── dependabot.yml └── workflows │ ├── backend-tests.yml │ ├── codeql.yml │ ├── frontend-tests.yml │ ├── npmpublish.yml │ └── test-and-release.yml ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── ep.json ├── index.js ├── locales ├── ar.json ├── bn.json ├── ca.json ├── cs.json ├── cy.json ├── de.json ├── diq.json ├── dsb.json ├── el.json ├── en.json ├── es.json ├── eu.json ├── ff.json ├── fi.json ├── fr.json ├── gl.json ├── he.json ├── hsb.json ├── hu.json ├── ia.json ├── id.json ├── it.json ├── ja.json ├── kaa.json ├── kn.json ├── ko.json ├── krc.json ├── lt.json ├── mk.json ├── my.json ├── nb.json ├── nl.json ├── oc.json ├── pms.json ├── pt-br.json ├── pt.json ├── ro.json ├── roa-tara.json ├── ru.json ├── sc.json ├── scn.json ├── sd.json ├── se.json ├── sk.json ├── skr-arab.json ├── sl.json ├── smn.json ├── sms.json ├── sq.json ├── sv.json ├── sw.json ├── th.json ├── tl.json ├── tr.json ├── uk.json ├── ur.json ├── zh-hans.json └── zh-hant.json ├── package.json ├── pnpm-lock.yaml ├── static ├── css │ └── toc.css └── js │ ├── aceEditEvent.js │ ├── postAceInit.js │ ├── scrollTo.js │ └── toc.js └── templates ├── barButton.ejs ├── toc.ejs └── toc_entry.ejs /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // This is a workaround for https://github.com/eslint/eslint/issues/3458 4 | require('eslint-config-etherpad/patch/modern-module-resolution'); 5 | 6 | module.exports = { 7 | root: true, 8 | extends: 'etherpad/plugin', 9 | ignorePatterns: [ 10 | '/static/js/scrollTo.js', 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | - package-ecosystem: "npm" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | versioning-strategy: "increase" 12 | -------------------------------------------------------------------------------- /.github/workflows/backend-tests.yml: -------------------------------------------------------------------------------- 1 | name: Backend Tests 2 | 3 | # any branch is useful for testing before a PR is submitted 4 | on: 5 | workflow_call: 6 | 7 | jobs: 8 | withplugins: 9 | # run on pushes to any branch 10 | # run on PRs from external forks 11 | if: | 12 | (github.event_name != 'pull_request') 13 | || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id) 14 | name: with Plugins 15 | runs-on: ubuntu-latest 16 | steps: 17 | - 18 | name: Install libreoffice 19 | uses: awalsh128/cache-apt-pkgs-action@v1.4.2 20 | with: 21 | packages: libreoffice libreoffice-pdfimport 22 | version: 1.0 23 | - 24 | name: Install etherpad core 25 | uses: actions/checkout@v3 26 | with: 27 | repository: ether/etherpad-lite 28 | path: etherpad-lite 29 | - uses: pnpm/action-setup@v3 30 | name: Install pnpm 31 | with: 32 | version: 8 33 | run_install: false 34 | - name: Get pnpm store directory 35 | shell: bash 36 | run: | 37 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV 38 | - uses: actions/cache@v4 39 | name: Setup pnpm cache 40 | with: 41 | path: ${{ env.STORE_PATH }} 42 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 43 | restore-keys: | 44 | ${{ runner.os }}-pnpm-store- 45 | - 46 | name: Checkout plugin repository 47 | uses: actions/checkout@v3 48 | with: 49 | path: plugin 50 | - 51 | name: Determine plugin name 52 | id: plugin_name 53 | working-directory: ./plugin 54 | run: | 55 | npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"' 56 | - 57 | name: Link plugin directory 58 | working-directory: ./plugin 59 | run: | 60 | pnpm link --global 61 | - name: Remove tests 62 | working-directory: ./etherpad-lite 63 | run: rm -rf ./src/tests/backend/specs 64 | - 65 | name: Install Etherpad core dependencies 66 | working-directory: ./etherpad-lite 67 | run: bin/installDeps.sh 68 | - name: Link plugin to etherpad-lite 69 | working-directory: ./etherpad-lite 70 | run: | 71 | pnpm link --global $PLUGIN_NAME 72 | pnpm run install-plugins --path ../../plugin 73 | env: 74 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }} 75 | - name: Link ep_etherpad-lite 76 | working-directory: ./etherpad-lite/src 77 | run: | 78 | pnpm link --global 79 | - name: Link etherpad to plugin 80 | working-directory: ./plugin 81 | run: | 82 | pnpm link --global ep_etherpad-lite 83 | - 84 | name: Run the backend tests 85 | working-directory: ./etherpad-lite 86 | run: | 87 | res=$(find .. -path "./node_modules/ep_*/static/tests/backend/specs/**" | wc -l) 88 | if [ $res -eq 0 ]; then 89 | echo "No backend tests found" 90 | else 91 | pnpm run test 92 | fi 93 | -------------------------------------------------------------------------------- /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | schedule: 9 | - cron: "46 6 * * 3" 10 | 11 | jobs: 12 | analyze: 13 | name: Analyze 14 | runs-on: ubuntu-latest 15 | permissions: 16 | actions: read 17 | contents: read 18 | security-events: write 19 | 20 | strategy: 21 | fail-fast: false 22 | matrix: 23 | language: [ javascript ] 24 | 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v4 28 | 29 | - name: Initialize CodeQL 30 | uses: github/codeql-action/init@v3 31 | with: 32 | languages: ${{ matrix.language }} 33 | queries: +security-and-quality 34 | 35 | - name: Autobuild 36 | uses: github/codeql-action/autobuild@v3 37 | 38 | - name: Perform CodeQL Analysis 39 | uses: github/codeql-action/analyze@v3 40 | with: 41 | category: "/language:${{ matrix.language }}" 42 | -------------------------------------------------------------------------------- /.github/workflows/frontend-tests.yml: -------------------------------------------------------------------------------- 1 | # Publicly credit Sauce Labs because they generously support open source 2 | # projects. 3 | name: Frontend Tests 4 | 5 | on: 6 | workflow_call: 7 | 8 | jobs: 9 | test-frontend: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - 14 | name: Check out Etherpad core 15 | uses: actions/checkout@v3 16 | with: 17 | repository: ether/etherpad-lite 18 | - uses: pnpm/action-setup@v3 19 | name: Install pnpm 20 | with: 21 | version: 8 22 | run_install: false 23 | - name: Get pnpm store directory 24 | shell: bash 25 | run: | 26 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV 27 | - uses: actions/cache@v4 28 | name: Setup pnpm cache 29 | with: 30 | path: ${{ env.STORE_PATH }} 31 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 32 | restore-keys: | 33 | ${{ runner.os }}-pnpm-store- 34 | - 35 | name: Check out the plugin 36 | uses: actions/checkout@v3 37 | with: 38 | path: ./node_modules/__tmp 39 | - 40 | name: export GIT_HASH to env 41 | id: environment 42 | run: | 43 | cd ./node_modules/__tmp 44 | echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})" 45 | - 46 | name: Determine plugin name 47 | id: plugin_name 48 | run: | 49 | cd ./node_modules/__tmp 50 | npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"' 51 | - 52 | name: Rename plugin directory 53 | env: 54 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }} 55 | run: | 56 | mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}" 57 | - 58 | name: Install plugin dependencies 59 | env: 60 | PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }} 61 | run: | 62 | cd ./node_modules/"${PLUGIN_NAME}" 63 | pnpm i 64 | # Etherpad core dependencies must be installed after installing the 65 | # plugin's dependencies, otherwise npm will try to hoist common 66 | # dependencies by removing them from src/node_modules and installing them 67 | # in the top-level node_modules. As of v6.14.10, npm's hoist logic appears 68 | # to be buggy, because it sometimes removes dependencies from 69 | # src/node_modules but fails to add them to the top-level node_modules. 70 | # Even if npm correctly hoists the dependencies, the hoisting seems to 71 | # confuse tools such as `npm outdated`, `npm update`, and some ESLint 72 | # rules. 73 | - 74 | name: Install Etherpad core dependencies 75 | run: bin/installDeps.sh 76 | - name: Create settings.json 77 | run: cp ./src/tests/settings.json settings.json 78 | - name: Run the frontend tests 79 | shell: bash 80 | run: | 81 | pnpm run dev & 82 | connected=false 83 | can_connect() { 84 | curl -sSfo /dev/null http://localhost:9001/ || return 1 85 | connected=true 86 | } 87 | now() { date +%s; } 88 | start=$(now) 89 | while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do 90 | sleep 1 91 | done 92 | cd src 93 | pnpm exec playwright install chromium --with-deps 94 | pnpm run test-ui --project=chromium 95 | -------------------------------------------------------------------------------- /.github/workflows/npmpublish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run tests using node and then publish a package to the npm registry when a release is created 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages 3 | 4 | name: Node.js Package 5 | 6 | on: 7 | workflow_call: 8 | 9 | jobs: 10 | publish-npm: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/setup-node@v4 14 | with: 15 | node-version: 20 16 | registry-url: https://registry.npmjs.org/ 17 | - name: Check out Etherpad core 18 | uses: actions/checkout@v3 19 | with: 20 | repository: ether/etherpad-lite 21 | - uses: pnpm/action-setup@v3 22 | name: Install pnpm 23 | with: 24 | version: 8 25 | run_install: false 26 | - name: Get pnpm store directory 27 | shell: bash 28 | run: | 29 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV 30 | - uses: actions/cache@v4 31 | name: Setup pnpm cache 32 | with: 33 | path: ${{ env.STORE_PATH }} 34 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} 35 | restore-keys: | 36 | ${{ runner.os }}-pnpm-store- 37 | - 38 | uses: actions/checkout@v3 39 | with: 40 | fetch-depth: 0 41 | - 42 | name: Bump version (patch) 43 | run: | 44 | LATEST_TAG=$(git describe --tags --abbrev=0) || exit 1 45 | NEW_COMMITS=$(git rev-list --count "${LATEST_TAG}"..) || exit 1 46 | [ "${NEW_COMMITS}" -gt 0 ] || exit 0 47 | git config user.name 'github-actions[bot]' 48 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com' 49 | pnpm i 50 | pnpm version patch 51 | git push --follow-tags 52 | # This is required if the package has a prepare script that uses something 53 | # in dependencies or devDependencies. 54 | - 55 | run: pnpm i 56 | # `npm publish` must come after `git push` otherwise there is a race 57 | # condition: If two PRs are merged back-to-back then master/main will be 58 | # updated with the commits from the second PR before the first PR's 59 | # workflow has a chance to push the commit generated by `npm version 60 | # patch`. This causes the first PR's `git push` step to fail after the 61 | # package has already been published, which in turn will cause all future 62 | # workflow runs to fail because they will all attempt to use the same 63 | # already-used version number. By running `npm publish` after `git push`, 64 | # back-to-back merges will cause the first merge's workflow to fail but 65 | # the second's will succeed. 66 | - 67 | run: pnpm publish 68 | env: 69 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 70 | #- 71 | # name: Add package to etherpad organization 72 | # run: pnpm access grant read-write etherpad:developers 73 | # env: 74 | # NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 75 | -------------------------------------------------------------------------------- /.github/workflows/test-and-release.yml: -------------------------------------------------------------------------------- 1 | name: Node.js Package 2 | on: [push] 3 | 4 | 5 | jobs: 6 | backend: 7 | uses: ./.github/workflows/backend-tests.yml 8 | secrets: inherit 9 | frontend: 10 | uses: ./.github/workflows/frontend-tests.yml 11 | secrets: inherit 12 | release: 13 | if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} 14 | needs: 15 | - backend 16 | - frontend 17 | uses: ./.github/workflows/npmpublish.yml 18 | secrets: inherit 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .ep_initialized 2 | .DS_Store 3 | node_modules/ 4 | node_modules 5 | npm-debug.log 6 | .idea -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - "lts/*" 5 | 6 | cache: false 7 | 8 | services: 9 | - docker 10 | 11 | install: 12 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)" 13 | 14 | #script: 15 | # - "tests/frontend/travis/runner.sh" 16 | 17 | env: 18 | global: 19 | - secure: "WMGxFkOeTTlhWB+ChMucRtIqVmMbwzYdNHuHQjKCcj8HBEPdZLfCuK/kf4rG\nVLcLQiIsyllqzNhBGVHG1nyqWr0/LTm8JRqSCDDVIhpyzp9KpCJQQJG2Uwjk\n6/HIJJh/wbxsEdLNV2crYU/EiVO3A4Bq0YTHUlbhUqG3mSCr5Ec=" 20 | - secure: "gejXUAHYscbR6Bodw35XexpToqWkv2ifeECsbeEmjaLkYzXmUUNWJGknKSu7\nEUsSfQV8w+hxApr1Z+jNqk9aX3K1I4btL3cwk2trnNI8XRAvu1c1Iv60eerI\nkE82Rsd5lwUaMEh+/HoL8ztFCZamVndoNgX7HWp5J/NRZZMmh4g=" 21 | 22 | jobs: 23 | include: 24 | - name: "Lint test package-lock" 25 | install: 26 | - "npm install lockfile-lint" 27 | script: 28 | - npx lockfile-lint --path package-lock.json --validate-https --allowed-hosts npm 29 | - name: "Run the Backend tests" 30 | before_install: 31 | - sudo add-apt-repository -y ppa:libreoffice/ppa 32 | - sudo apt-get update 33 | - sudo apt-get -y install libreoffice 34 | - sudo apt-get -y install libreoffice-pdfimport 35 | install: 36 | - "npm install" 37 | - "mkdir ep_table_of_contents" 38 | - "mv !(ep_table_of_contents) ep_table_of_contents" 39 | - "git clone https://github.com/ether/etherpad-lite.git etherpad" 40 | - "cd etherpad" 41 | - "mkdir -p node_modules" 42 | - "mv ../ep_table_of_contents node_modules" 43 | - "bin/installDeps.sh" 44 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)" 45 | - "cd src && npm install && cd -" 46 | script: 47 | - "tests/frontend/travis/runnerBackend.sh" 48 | - name: "Test the Frontend" 49 | before_script: 50 | - "tests/frontend/travis/sauce_tunnel.sh" 51 | install: 52 | - "npm install" 53 | - "mkdir ep_table_of_contents" 54 | - "mv !(ep_table_of_contents) ep_table_of_contents" 55 | - "git clone https://github.com/ether/etherpad-lite.git etherpad" 56 | - "cd etherpad" 57 | - "mkdir -p node_modules" 58 | - "mv ../ep_table_of_contents node_modules" 59 | - "bin/installDeps.sh" 60 | - "export GIT_HASH=$(git rev-parse --verify --short HEAD)" 61 | script: 62 | - "tests/frontend/travis/runner.sh" 63 | 64 | notifications: 65 | irc: 66 | channels: 67 | - "irc.freenode.org#etherpad-lite-dev" 68 | 69 | ##ETHERPAD_TRAVIS_V=9 70 | ## Travis configuration automatically created using bin/plugins/updateAllPluginsScript.sh 71 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributor Guidelines 2 | (Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch)) 3 | 4 | ## Pull requests 5 | 6 | * the commit series in the PR should be _linear_ (it **should not contain merge commits**). This is necessary because we want to be able to [bisect](https://en.wikipedia.org/wiki/Bisection_(software_engineering)) bugs easily. Rewrite history/perform a rebase if necessary 7 | * PRs should be issued against the **develop** branch: we never pull directly into **master** 8 | * PRs **should not have conflicts** with develop. If there are, please resolve them rebasing and force-pushing 9 | * when preparing your PR, please make sure that you have included the relevant **changes to the documentation** (preferably with usage examples) 10 | * contain meaningful and detailed **commit messages** in the form: 11 | ``` 12 | submodule: description 13 | 14 | longer description of the change you have made, eventually mentioning the 15 | number of the issue that is being fixed, in the form: Fixes #someIssueNumber 16 | ``` 17 | * if the PR is a **bug fix**: 18 | * the first commit in the series must be a test that shows the failure 19 | * subsequent commits will fix the bug and make the test pass 20 | * the final commit message should include the text `Fixes: #xxx` to link it to its bug report 21 | * think about stability: code has to be backwards compatible as much as possible. Always **assume your code will be run with an older version of the DB/config file** 22 | * if you want to remove a feature, **deprecate it instead**: 23 | * write an issue with your deprecation plan 24 | * output a `WARN` in the log informing that the feature is going to be removed 25 | * remove the feature in the next version 26 | * if you want to add a new feature, put it under a **feature flag**: 27 | * once the new feature has reached a minimal level of stability, do a PR for it, so it can be integrated early 28 | * expose a mechanism for enabling/disabling the feature 29 | * the new feature should be **disabled** by default. With the feature disabled, the code path should be exactly the same as before your contribution. This is a __necessary condition__ for early integration 30 | * think of the PR not as something that __you wrote__, but as something that __someone else is going to read__. The commit series in the PR should tell a novice developer the story of your thoughts when developing it 31 | 32 | ## How to write a bug report 33 | 34 | * Please be polite, we all are humans and problems can occur. 35 | * Please add as much information as possible, for example 36 | * client os(s) and version(s) 37 | * browser(s) and version(s), is the problem reproducible on different clients 38 | * special environments like firewalls or antivirus 39 | * host os and version 40 | * npm and nodejs version 41 | * Logfiles if available 42 | * steps to reproduce 43 | * what you expected to happen 44 | * what actually happened 45 | * Please format logfiles and code examples with markdown see github Markdown help below the issue textarea for more information. 46 | 47 | If you send logfiles, please set the loglevel switch DEBUG in your settings.json file: 48 | 49 | ``` 50 | /* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */ 51 | "loglevel": "DEBUG", 52 | ``` 53 | 54 | The logfile location is defined in startup script or the log is directly shown in the commandline after you have started etherpad. 55 | 56 | ## General goals of Etherpad 57 | To make sure everybody is going in the same direction: 58 | * easy to install for admins and easy to use for people 59 | * easy to integrate into other apps, but also usable as standalone 60 | * lightweight and scalable 61 | * extensible, as much functionality should be extendable with plugins so changes don't have to be done in core. 62 | Also, keep it maintainable. We don't wanna end up as the monster Etherpad was! 63 | 64 | ## How to work with git? 65 | * Don't work in your master branch. 66 | * Make a new branch for every feature you're working on. (This ensures that you can work you can do lots of small, independent pull requests instead of one big one with complete different features) 67 | * Don't use the online edit function of github (this only creates ugly and not working commits!) 68 | * Try to make clean commits that are easy readable (including descriptive commit messages!) 69 | * Test before you push. Sounds easy, it isn't! 70 | * Don't check in stuff that gets generated during build or runtime 71 | * Make small pull requests that are easy to review but make sure they do add value by themselves / individually 72 | 73 | ## Coding style 74 | * Do write comments. (You don't have to comment every line, but if you come up with something that's a bit complex/weird, just leave a comment. Bear in mind that you will probably leave the project at some point and that other people will read your code. Undocumented huge amounts of code are worthless!) 75 | * Never ever use tabs 76 | * Indentation: JS/CSS: 2 spaces; HTML: 4 spaces 77 | * Don't overengineer. Don't try to solve any possible problem in one step, but try to solve problems as easy as possible and improve the solution over time! 78 | * Do generalize sooner or later! (if an old solution, quickly hacked together, poses more problems than it solves today, refactor it!) 79 | * Keep it compatible. Do not introduce changes to the public API, db schema or configurations too lightly. Don't make incompatible changes without good reasons! 80 | * If you do make changes, document them! (see below) 81 | * Use protocol independent urls "//" 82 | 83 | ## Branching model / git workflow 84 | see git flow http://nvie.com/posts/a-successful-git-branching-model/ 85 | 86 | ### `master` branch 87 | * the stable 88 | * This is the branch everyone should use for production stuff 89 | 90 | ### `develop`branch 91 | * everything that is READY to go into master at some point in time 92 | * This stuff is tested and ready to go out 93 | 94 | ### release branches 95 | * stuff that should go into master very soon 96 | * only bugfixes go into these (see http://nvie.com/posts/a-successful-git-branching-model/ for why) 97 | * we should not be blocking new features to develop, just because we feel that we should be releasing it to master soon. This is the situation that release branches solve/handle. 98 | 99 | ### hotfix branches 100 | * fixes for bugs in master 101 | 102 | ### feature branches (in your own repos) 103 | * these are the branches where you develop your features in 104 | * If it's ready to go out, it will be merged into develop 105 | 106 | Over the time we pull features from feature branches into the develop branch. Every month we pull from develop into master. Bugs in master get fixed in hotfix branches. These branches will get merged into master AND develop. There should never be commits in master that aren't in develop 107 | 108 | ## Documentation 109 | The docs are in the `doc/` folder in the git repository, so people can easily find the suitable docs for the current git revision. 110 | 111 | Documentation should be kept up-to-date. This means, whenever you add a new API method, add a new hook or change the database model, pack the relevant changes to the docs in the same pull request. 112 | 113 | You can build the docs e.g. produce html, using `make docs`. At some point in the future we will provide an online documentation. The current documentation in the github wiki should always reflect the state of `master` (!), since there are no docs in master, yet. 114 | 115 | ## Testing 116 | Front-end tests are found in the `tests/frontend/` folder in the repository. Run them by pointing your browser to `/tests/frontend`. 117 | 118 | Back-end tests can be run from the `src` directory, via `npm test`. 119 | 120 | ## Things you can help with 121 | Etherpad is much more than software. So if you aren't a developer then worry not, there is still a LOT you can do! A big part of what we do is community engagement. You can help in the following ways 122 | * Triage bugs (applying labels) and confirming their existence 123 | * Testing fixes (simply applying them and seeing if it fixes your issue or not) - Some git experience required 124 | * Notifying large site admins of new releases 125 | * Writing Changelogs for releases 126 | * Creating Windows packages 127 | * Creating releases 128 | * Bumping dependencies periodically and checking they don't break anything 129 | * Write proposals for grants 130 | * Co-Author and Publish CVEs 131 | * Work with SFC to maintain legal side of project 132 | * Maintain TODO page - https://github.com/ether/etherpad-lite/wiki/TODO#IMPORTANT_TODOS 133 | 134 | -------------------------------------------------------------------------------- /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 2013 John McLear 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Publish Status](https://github.com/ether/ep_table_of_contents/workflows/Node.js%20Package/badge.svg) ![Backend Tests Status](https://github.com/ether/ep_table_of_contents/workflows/Backend%20tests/badge.svg) 2 | 3 | # Builds a table of contents into the Etherpad interface 4 | 5 | Enable under settings. 6 | Create headings, watch the TOC populate in real time. 7 | 8 | ## Configuration 9 | 10 | If you want to have the TOC shown by default, add following snippet to your `settings.json`: 11 | 12 | ```json 13 | "ep_toc": { 14 | "disable_by_default": false 15 | }, 16 | ``` 17 | 18 | You can also set this on a per-pad basis by setting the URL parameter `toc` to `true` or `false`. 19 | 20 | If you want to have a button in the toolbar to toggle the TOC, add following snippet to your `settings.json`: 21 | 22 | ```json 23 | "ep_toc": { 24 | "show_button": true 25 | }, 26 | ``` 27 | 28 | ## License 29 | Copyright 2014, John McLear 30 | 31 | Licensed under the Apache License, Version 2.0 (the "License"); 32 | you may not use this file except in compliance with the License. 33 | You may obtain a copy of the License at 34 | 35 | http://www.apache.org/licenses/LICENSE-2.0 36 | 37 | Unless required by applicable law or agreed to in writing, software 38 | distributed under the License is distributed on an "AS IS" BASIS, 39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 40 | See the License for the specific language governing permissions and 41 | limitations under the License. 42 | 43 | -------------------------------------------------------------------------------- /ep.json: -------------------------------------------------------------------------------- 1 | { 2 | "parts": [ 3 | { 4 | "name": "ep_table_of_contents", 5 | "hooks": { 6 | "eejsBlock_scripts" : "ep_table_of_contents/index", 7 | "eejsBlock_styles" : "ep_table_of_contents/index", 8 | "eejsBlock_mySettings" : "ep_table_of_contents/index", 9 | "eejsBlock_editorContainerBox": "ep_table_of_contents/index", 10 | "eejsBlock_dd_view" : "ep_table_of_contents/index", 11 | "eejsBlock_editbarMenuRight" : "ep_table_of_contents/index" 12 | }, 13 | "client_hooks":{ 14 | "aceEditEvent" : "ep_table_of_contents/static/js/aceEditEvent:aceEditEvent", 15 | "handleClientMessage_ACCEPT_COMMIT" : "ep_table_of_contents/static/js/aceEditEvent:aceEditEvent", 16 | "handleClientMessage_NEW_CHANGES" : "ep_table_of_contents/static/js/aceEditEvent:aceEditEvent", 17 | "postAceInit" : "ep_table_of_contents/static/js/postAceInit:postAceInit" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const eejs = require('ep_etherpad-lite/node/eejs'); 4 | const settings = require('ep_etherpad-lite/node/utils/Settings'); 5 | 6 | exports.eejsBlock_styles = (hookName, args, cb) => { 7 | args.content += 8 | ""; 9 | return cb(); 10 | }; 11 | 12 | exports.eejsBlock_dd_view = (hookName, args, cb) => { 13 | args.content += 14 | "
  • Table Of Contents
  • "; 15 | return cb(); 16 | }; 17 | 18 | exports.eejsBlock_editorContainerBox = (hookName, args, cb) => { 19 | args.content += eejs.require('./templates/toc.ejs', {}, module); 20 | return cb(); 21 | }; 22 | 23 | exports.eejsBlock_editbarMenuRight = (hookName, args, cb) => { 24 | if (settings.ep_toc && settings.ep_toc.show_button === true) { 25 | args.content = eejs.require('ep_table_of_contents/templates/barButton.ejs') + args.content; 26 | } 27 | return cb(); 28 | }; 29 | 30 | exports.eejsBlock_scripts = (hookName, args, cb) => { 31 | args.content += 32 | ""; 33 | return cb(); 34 | }; 35 | 36 | exports.eejsBlock_mySettings = (hookName, args, cb) => { 37 | let checkedState = 'unchecked'; 38 | if (settings.ep_toc) { 39 | if (settings.ep_toc.disable_by_default === true) { 40 | checkedState = 'unchecked'; 41 | } else { 42 | checkedState = 'checked'; 43 | } 44 | } 45 | args.content += 46 | eejs.require('./templates/toc_entry.ejs', {checked: checkedState}, module); 47 | return cb(); 48 | }; 49 | -------------------------------------------------------------------------------- /locales/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meno25" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "إظهار جدول المحتويات", 8 | "ep_table_of_contents.toc": "إظهار جدول المحتويات" 9 | } 10 | -------------------------------------------------------------------------------- /locales/bn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "আজিজ", 5 | "আফতাবুজ্জামান" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "সূচিপত্র দেখাও", 9 | "ep_table_of_contents.toc": "বিষয়বস্তুর সারণী দেখান" 10 | } 11 | -------------------------------------------------------------------------------- /locales/ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mguix" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Mostra la taula de continguts", 8 | "ep_table_of_contents.toc": "Mostra la taula de continguts" 9 | } 10 | -------------------------------------------------------------------------------- /locales/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Spotter" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Zobrazit Obsah", 8 | "ep_table_of_contents.toc": "Zobrazit Obsah" 9 | } 10 | -------------------------------------------------------------------------------- /locales/cy.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robin Owain" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Dangos Tabl y Cynnwys", 8 | "ep_table_of_contents.toc": "Dangos Tabl y Cynnwys" 9 | } 10 | -------------------------------------------------------------------------------- /locales/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Gliederung anzeigen", 6 | "ep_table_of_contents.toc": "Gliederung anzeigen" 7 | } 8 | -------------------------------------------------------------------------------- /locales/diq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "1917 Ekim Devrimi" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Tabloyê zerreki bımocne", 8 | "ep_table_of_contents.toc": "Tabloyê zerreki bımocne" 9 | } 10 | -------------------------------------------------------------------------------- /locales/dsb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Michawiki" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Zapis wopśimjeśa pokazaś", 8 | "ep_table_of_contents.toc": "Zapis wopśimjeśa pokazaś" 9 | } 10 | -------------------------------------------------------------------------------- /locales/el.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Norhorn" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc": "Προβολή του Πίνακα Περιεχομένων" 8 | } 9 | -------------------------------------------------------------------------------- /locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "ep_table_of_contents.toc.title" : "Show Table of Contents", 3 | "ep_table_of_contents.toc" : "Show Table of Contents" 4 | } 5 | -------------------------------------------------------------------------------- /locales/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Mostrar índice", 6 | "ep_table_of_contents.toc": "Mostrar índice" 7 | } 8 | -------------------------------------------------------------------------------- /locales/eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Izendegi" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Erakutsi Edukien Taula", 8 | "ep_table_of_contents.toc": "Erakutsi Edukien Taula" 9 | } 10 | -------------------------------------------------------------------------------- /locales/ff.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ibrahima Malal Sarr" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc": "Hollu Haatumeere Loowdi" 8 | } 9 | -------------------------------------------------------------------------------- /locales/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Maantietäjä", 5 | "Yupik" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Näytä sisällysluettelo", 9 | "ep_table_of_contents.toc": "Näytä sisällysluettelo" 10 | } 11 | -------------------------------------------------------------------------------- /locales/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Afficher la table des matières", 6 | "ep_table_of_contents.toc": "Afficher la table des matières" 7 | } 8 | -------------------------------------------------------------------------------- /locales/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ghose" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Amosar a táboa de contidos", 8 | "ep_table_of_contents.toc": "Amosar a táboa de contidos" 9 | } 10 | -------------------------------------------------------------------------------- /locales/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "YaronSh" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "להציג את תוכן העניינים", 8 | "ep_table_of_contents.toc": "להציג את תוכן העניינים" 9 | } 10 | -------------------------------------------------------------------------------- /locales/hsb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Michawiki" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Zapis wobsaha pokazać", 8 | "ep_table_of_contents.toc": "Zapis wobsaha pokazać" 9 | } 10 | -------------------------------------------------------------------------------- /locales/hu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Tartalomjegyzék megjelenítése", 6 | "ep_table_of_contents.toc": "Tartalomjegyzék megjelenítése" 7 | } 8 | -------------------------------------------------------------------------------- /locales/ia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Monstrar le tabula de contento", 8 | "ep_table_of_contents.toc": "Monstrar le tabula de contento" 9 | } 10 | -------------------------------------------------------------------------------- /locales/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Atriwidada" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Tampilkan Daftar Isi", 8 | "ep_table_of_contents.toc": "Tampilkan Daftar Isi" 9 | } 10 | -------------------------------------------------------------------------------- /locales/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Beta16", 5 | "VamosErik88" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Mostra indice", 9 | "ep_table_of_contents.toc": "Mostra indice" 10 | } 11 | -------------------------------------------------------------------------------- /locales/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "MagicAho" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "目次の表示" 8 | } 9 | -------------------------------------------------------------------------------- /locales/kaa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Inabat Allanova" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Kontentler kestesin kórsetiw", 8 | "ep_table_of_contents.toc": "Kontentler kestesin kórsetiw" 9 | } 10 | -------------------------------------------------------------------------------- /locales/kn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ಮಲ್ನಾಡಾಚ್ ಕೊಂಕ್ಣೊ" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc": "ಪರಿವಿಡಿಯನ್ನು ತೋರಿಸಿ" 8 | } 9 | -------------------------------------------------------------------------------- /locales/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ykhwong" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "목차 표시", 8 | "ep_table_of_contents.toc": "목차 표시" 9 | } 10 | -------------------------------------------------------------------------------- /locales/krc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Къарачайлы" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Башларын кёргюз", 8 | "ep_table_of_contents.toc": "Башларын кёргюз" 9 | } 10 | -------------------------------------------------------------------------------- /locales/lt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nokeoo" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Rodyti turinį", 8 | "ep_table_of_contents.toc": "Rodyti turinį" 9 | } 10 | -------------------------------------------------------------------------------- /locales/mk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bjankuloski06" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Прикажи ја Содржината", 8 | "ep_table_of_contents.toc": "Прикажи ја Содржината" 9 | } 10 | -------------------------------------------------------------------------------- /locales/my.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Andibecker" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "မာတိကာကိုပြပါ", 8 | "ep_table_of_contents.toc": "မာတိကာကိုပြပါ" 9 | } 10 | -------------------------------------------------------------------------------- /locales/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jon Harald Søby" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Vis innholdsfortegnelse", 8 | "ep_table_of_contents.toc": "Vis innholdsfortegnelse" 9 | } 10 | -------------------------------------------------------------------------------- /locales/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Toon Inhoudsopgave", 6 | "ep_table_of_contents.toc": "Toon Inhoudsopgave" 7 | } 8 | -------------------------------------------------------------------------------- /locales/oc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Quentí" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Afichar l'ensenhador", 8 | "ep_table_of_contents.toc": "Afichar l'ensenhador" 9 | } 10 | -------------------------------------------------------------------------------- /locales/pms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Borichèt" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Smon-e la tàula dij contnù", 8 | "ep_table_of_contents.toc": "Smon-e la tàula dij contnù" 9 | } 10 | -------------------------------------------------------------------------------- /locales/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eduardo Addad de Oliveira", 5 | "Eduardoaddad" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Mostrar índice", 9 | "ep_table_of_contents.toc": "Mostrar índice" 10 | } 11 | -------------------------------------------------------------------------------- /locales/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [] 4 | }, 5 | "ep_table_of_contents.toc.title": "Mostrar índice", 6 | "ep_table_of_contents.toc": "Mostrar índice" 7 | } 8 | -------------------------------------------------------------------------------- /locales/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alesaru", 5 | "Strainu" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Arată Cuprinsul" 9 | } 10 | -------------------------------------------------------------------------------- /locales/roa-tara.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joetaras" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Fà 'ndrucà 'a Tabelle de le Condenute", 8 | "ep_table_of_contents.toc": "Fà 'ndrucà 'a Tabelle de le Condenute" 9 | } 10 | -------------------------------------------------------------------------------- /locales/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Okras" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Показать оглавление", 8 | "ep_table_of_contents.toc": "Показать содержание" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Adr mm" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Ammustra sa tabella de cuntenutos", 8 | "ep_table_of_contents.toc": "Ammustra sa tabella de cuntenutos" 9 | } 10 | -------------------------------------------------------------------------------- /locales/scn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ajeje Brazorf" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Ammustra l'ìnnici", 8 | "ep_table_of_contents.toc": "Ammustra l'ìnnici" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sd.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mehtab ahmed" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc": "عنوانن جي فھرست ڏيکاريو" 8 | } 9 | -------------------------------------------------------------------------------- /locales/se.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kimberli Mäkäräinen (WMNO)", 5 | "Yupik" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Čájet sisdoallologahallama", 9 | "ep_table_of_contents.toc": "Čájet sisdoallologahallama" 10 | } 11 | -------------------------------------------------------------------------------- /locales/sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Yardom78" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Zobraziť tabuľku s obsahom", 8 | "ep_table_of_contents.toc": "Zobraziť tabuľku s obsahom" 9 | } 10 | -------------------------------------------------------------------------------- /locales/skr-arab.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Saraiki" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "تندیر دی ٹیبل ݙکھاؤ", 8 | "ep_table_of_contents.toc": "تندیر دی ٹیبل ݙکھاؤ" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eleassar" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Pokaži kazalo", 8 | "ep_table_of_contents.toc": "Prikaži kazalo:" 9 | } 10 | -------------------------------------------------------------------------------- /locales/smn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Yupik" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Čääiti siskáldâslisto", 8 | "ep_table_of_contents.toc": "Čääiti siskáldâslisto" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sms.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Yupik" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Čuäʹjet siiskâžlooǥǥtõõzz", 8 | "ep_table_of_contents.toc": "Čuäʹjet siiskâžlooǥǥtõõzz" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Besnik b" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Shfaq Tryezë Lënde", 8 | "ep_table_of_contents.toc": "Shfaq Tryezë Lënde" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bengtsson96" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Visa innehållsförteckning", 8 | "ep_table_of_contents.toc": "Visa innehållsförteckning" 9 | } 10 | -------------------------------------------------------------------------------- /locales/sw.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Andibecker" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Onyesha Jedwali la Yaliyomo", 8 | "ep_table_of_contents.toc": "Onyesha Jedwali la Yaliyomo" 9 | } 10 | -------------------------------------------------------------------------------- /locales/th.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Andibecker", 5 | "Trisorn Triboon" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "แสดงสารบัญของเนื้อหา", 9 | "ep_table_of_contents.toc": "แสดงสารบัญของเนื้อหา" 10 | } 11 | -------------------------------------------------------------------------------- /locales/tl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mrkczr" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "Ipakita ang Talaan ng Nilalaman", 8 | "ep_table_of_contents.toc": "Ipakita ang Talaan ng Nilalaman" 9 | } 10 | -------------------------------------------------------------------------------- /locales/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hedda", 5 | "MuratTheTurkish" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "İçindekiler Tablosunu Göster", 9 | "ep_table_of_contents.toc": "İçindekiler Tablosunu Göster" 10 | } 11 | -------------------------------------------------------------------------------- /locales/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "DDPAT", 5 | "Ice bulldog" 6 | ] 7 | }, 8 | "ep_table_of_contents.toc.title": "Показати зміст", 9 | "ep_table_of_contents.toc": "Показати зміст" 10 | } 11 | -------------------------------------------------------------------------------- /locales/ur.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Obaid Raza" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc": "مشمولات کا جدول دکھائیں" 8 | } 9 | -------------------------------------------------------------------------------- /locales/zh-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "列维劳德" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "显示目录", 8 | "ep_table_of_contents.toc": "显示目录" 9 | } 10 | -------------------------------------------------------------------------------- /locales/zh-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kly" 5 | ] 6 | }, 7 | "ep_table_of_contents.toc.title": "顯示目錄", 8 | "ep_table_of_contents.toc": "顯示目錄" 9 | } 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ep_table_of_contents", 3 | "version": "0.3.89", 4 | "description": "View a table of contents for your pad", 5 | "author": { 6 | "name": "John McLear", 7 | "email": "john@mclear.co.uk", 8 | "url": "http://mclear.co.uk" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/JohnMcLear/ep_table_of_contents.git" 13 | }, 14 | "readmeFilename": "README.md", 15 | "readme": "# Builds a table of contents into the Etherpad interface\n\nEnable under settings\nCreate headings, watch the TOC populate in real time.\n\n", 16 | "bugs": { 17 | "url": "https://github.com/JohnMcLear/ep_table_of_contents/issues" 18 | }, 19 | "dist": { 20 | "shasum": "6d55c2e632bfb0e7bc7f102c56a29e27d0dc99aa" 21 | }, 22 | "_from": "ep_table_of_contents@", 23 | "_resolved": "https://registry.npmjs.org/ep_table_of_contents/-/ep_table_of_contents-0.1.1.tgz", 24 | "funding": { 25 | "type": "individual", 26 | "url": "https://etherpad.org/" 27 | }, 28 | "devDependencies": { 29 | "eslint": "^8.57.0", 30 | "eslint-config-etherpad": "^4.0.4", 31 | "typescript": "^5.4.2" 32 | }, 33 | "scripts": { 34 | "lint": "eslint .", 35 | "lint:fix": "eslint --fix ." 36 | }, 37 | "engines": { 38 | "node": ">=18.0.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | eslint: 9 | specifier: ^8.57.0 10 | version: 8.57.0 11 | eslint-config-etherpad: 12 | specifier: ^4.0.4 13 | version: 4.0.4(eslint@8.57.0)(typescript@5.4.2) 14 | typescript: 15 | specifier: ^5.4.2 16 | version: 5.4.2 17 | 18 | packages: 19 | 20 | /@aashutoshrathi/word-wrap@1.2.6: 21 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 22 | engines: {node: '>=0.10.0'} 23 | dev: true 24 | 25 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 26 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 27 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 28 | peerDependencies: 29 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 30 | dependencies: 31 | eslint: 8.57.0 32 | eslint-visitor-keys: 3.4.3 33 | dev: true 34 | 35 | /@eslint-community/regexpp@4.10.0: 36 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 37 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 38 | dev: true 39 | 40 | /@eslint/eslintrc@2.1.4: 41 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 42 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 43 | dependencies: 44 | ajv: 6.12.6 45 | debug: 4.3.4 46 | espree: 9.6.1 47 | globals: 13.24.0 48 | ignore: 5.3.1 49 | import-fresh: 3.3.0 50 | js-yaml: 4.1.0 51 | minimatch: 3.1.2 52 | strip-json-comments: 3.1.1 53 | transitivePeerDependencies: 54 | - supports-color 55 | dev: true 56 | 57 | /@eslint/js@8.57.0: 58 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 59 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 60 | dev: true 61 | 62 | /@humanwhocodes/config-array@0.11.14: 63 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 64 | engines: {node: '>=10.10.0'} 65 | dependencies: 66 | '@humanwhocodes/object-schema': 2.0.2 67 | debug: 4.3.4 68 | minimatch: 3.1.2 69 | transitivePeerDependencies: 70 | - supports-color 71 | dev: true 72 | 73 | /@humanwhocodes/module-importer@1.0.1: 74 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 75 | engines: {node: '>=12.22'} 76 | dev: true 77 | 78 | /@humanwhocodes/object-schema@2.0.2: 79 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 80 | dev: true 81 | 82 | /@nodelib/fs.scandir@2.1.5: 83 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 84 | engines: {node: '>= 8'} 85 | dependencies: 86 | '@nodelib/fs.stat': 2.0.5 87 | run-parallel: 1.2.0 88 | dev: true 89 | 90 | /@nodelib/fs.stat@2.0.5: 91 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 92 | engines: {node: '>= 8'} 93 | dev: true 94 | 95 | /@nodelib/fs.walk@1.2.8: 96 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 97 | engines: {node: '>= 8'} 98 | dependencies: 99 | '@nodelib/fs.scandir': 2.1.5 100 | fastq: 1.17.1 101 | dev: true 102 | 103 | /@rushstack/eslint-patch@1.7.2: 104 | resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} 105 | dev: true 106 | 107 | /@types/json-schema@7.0.15: 108 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 109 | dev: true 110 | 111 | /@types/json5@0.0.29: 112 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 113 | dev: true 114 | 115 | /@types/semver@7.5.8: 116 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 117 | dev: true 118 | 119 | /@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2): 120 | resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==} 121 | engines: {node: ^16.0.0 || >=18.0.0} 122 | peerDependencies: 123 | '@typescript-eslint/parser': ^7.0.0 124 | eslint: ^8.56.0 125 | typescript: '*' 126 | peerDependenciesMeta: 127 | typescript: 128 | optional: true 129 | dependencies: 130 | '@eslint-community/regexpp': 4.10.0 131 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 132 | '@typescript-eslint/scope-manager': 7.2.0 133 | '@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 134 | '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 135 | '@typescript-eslint/visitor-keys': 7.2.0 136 | debug: 4.3.4 137 | eslint: 8.57.0 138 | graphemer: 1.4.0 139 | ignore: 5.3.1 140 | natural-compare: 1.4.0 141 | semver: 7.6.0 142 | ts-api-utils: 1.3.0(typescript@5.4.2) 143 | typescript: 5.4.2 144 | transitivePeerDependencies: 145 | - supports-color 146 | dev: true 147 | 148 | /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2): 149 | resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} 150 | engines: {node: ^16.0.0 || >=18.0.0} 151 | peerDependencies: 152 | eslint: ^8.56.0 153 | typescript: '*' 154 | peerDependenciesMeta: 155 | typescript: 156 | optional: true 157 | dependencies: 158 | '@typescript-eslint/scope-manager': 7.2.0 159 | '@typescript-eslint/types': 7.2.0 160 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) 161 | '@typescript-eslint/visitor-keys': 7.2.0 162 | debug: 4.3.4 163 | eslint: 8.57.0 164 | typescript: 5.4.2 165 | transitivePeerDependencies: 166 | - supports-color 167 | dev: true 168 | 169 | /@typescript-eslint/scope-manager@7.2.0: 170 | resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} 171 | engines: {node: ^16.0.0 || >=18.0.0} 172 | dependencies: 173 | '@typescript-eslint/types': 7.2.0 174 | '@typescript-eslint/visitor-keys': 7.2.0 175 | dev: true 176 | 177 | /@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.4.2): 178 | resolution: {integrity: sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==} 179 | engines: {node: ^16.0.0 || >=18.0.0} 180 | peerDependencies: 181 | eslint: ^8.56.0 182 | typescript: '*' 183 | peerDependenciesMeta: 184 | typescript: 185 | optional: true 186 | dependencies: 187 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) 188 | '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 189 | debug: 4.3.4 190 | eslint: 8.57.0 191 | ts-api-utils: 1.3.0(typescript@5.4.2) 192 | typescript: 5.4.2 193 | transitivePeerDependencies: 194 | - supports-color 195 | dev: true 196 | 197 | /@typescript-eslint/types@7.2.0: 198 | resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} 199 | engines: {node: ^16.0.0 || >=18.0.0} 200 | dev: true 201 | 202 | /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.2): 203 | resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} 204 | engines: {node: ^16.0.0 || >=18.0.0} 205 | peerDependencies: 206 | typescript: '*' 207 | peerDependenciesMeta: 208 | typescript: 209 | optional: true 210 | dependencies: 211 | '@typescript-eslint/types': 7.2.0 212 | '@typescript-eslint/visitor-keys': 7.2.0 213 | debug: 4.3.4 214 | globby: 11.1.0 215 | is-glob: 4.0.3 216 | minimatch: 9.0.3 217 | semver: 7.6.0 218 | ts-api-utils: 1.3.0(typescript@5.4.2) 219 | typescript: 5.4.2 220 | transitivePeerDependencies: 221 | - supports-color 222 | dev: true 223 | 224 | /@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.4.2): 225 | resolution: {integrity: sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==} 226 | engines: {node: ^16.0.0 || >=18.0.0} 227 | peerDependencies: 228 | eslint: ^8.56.0 229 | dependencies: 230 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 231 | '@types/json-schema': 7.0.15 232 | '@types/semver': 7.5.8 233 | '@typescript-eslint/scope-manager': 7.2.0 234 | '@typescript-eslint/types': 7.2.0 235 | '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) 236 | eslint: 8.57.0 237 | semver: 7.6.0 238 | transitivePeerDependencies: 239 | - supports-color 240 | - typescript 241 | dev: true 242 | 243 | /@typescript-eslint/visitor-keys@7.2.0: 244 | resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} 245 | engines: {node: ^16.0.0 || >=18.0.0} 246 | dependencies: 247 | '@typescript-eslint/types': 7.2.0 248 | eslint-visitor-keys: 3.4.3 249 | dev: true 250 | 251 | /@ungap/structured-clone@1.2.0: 252 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 253 | dev: true 254 | 255 | /acorn-jsx@5.3.2(acorn@8.11.3): 256 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 257 | peerDependencies: 258 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 259 | dependencies: 260 | acorn: 8.11.3 261 | dev: true 262 | 263 | /acorn@8.11.3: 264 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 265 | engines: {node: '>=0.4.0'} 266 | hasBin: true 267 | dev: true 268 | 269 | /ajv@6.12.6: 270 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 271 | dependencies: 272 | fast-deep-equal: 3.1.3 273 | fast-json-stable-stringify: 2.1.0 274 | json-schema-traverse: 0.4.1 275 | uri-js: 4.4.1 276 | dev: true 277 | 278 | /ansi-regex@5.0.1: 279 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 280 | engines: {node: '>=8'} 281 | dev: true 282 | 283 | /ansi-styles@4.3.0: 284 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 285 | engines: {node: '>=8'} 286 | dependencies: 287 | color-convert: 2.0.1 288 | dev: true 289 | 290 | /argparse@2.0.1: 291 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 292 | dev: true 293 | 294 | /array-buffer-byte-length@1.0.1: 295 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 296 | engines: {node: '>= 0.4'} 297 | dependencies: 298 | call-bind: 1.0.7 299 | is-array-buffer: 3.0.4 300 | dev: true 301 | 302 | /array-includes@3.1.7: 303 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} 304 | engines: {node: '>= 0.4'} 305 | dependencies: 306 | call-bind: 1.0.7 307 | define-properties: 1.2.1 308 | es-abstract: 1.22.5 309 | get-intrinsic: 1.2.4 310 | is-string: 1.0.7 311 | dev: true 312 | 313 | /array-union@2.1.0: 314 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 315 | engines: {node: '>=8'} 316 | dev: true 317 | 318 | /array.prototype.filter@1.0.3: 319 | resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} 320 | engines: {node: '>= 0.4'} 321 | dependencies: 322 | call-bind: 1.0.7 323 | define-properties: 1.2.1 324 | es-abstract: 1.22.5 325 | es-array-method-boxes-properly: 1.0.0 326 | is-string: 1.0.7 327 | dev: true 328 | 329 | /array.prototype.findlastindex@1.2.4: 330 | resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} 331 | engines: {node: '>= 0.4'} 332 | dependencies: 333 | call-bind: 1.0.7 334 | define-properties: 1.2.1 335 | es-abstract: 1.22.5 336 | es-errors: 1.3.0 337 | es-shim-unscopables: 1.0.2 338 | dev: true 339 | 340 | /array.prototype.flat@1.3.2: 341 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 342 | engines: {node: '>= 0.4'} 343 | dependencies: 344 | call-bind: 1.0.7 345 | define-properties: 1.2.1 346 | es-abstract: 1.22.5 347 | es-shim-unscopables: 1.0.2 348 | dev: true 349 | 350 | /array.prototype.flatmap@1.3.2: 351 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 352 | engines: {node: '>= 0.4'} 353 | dependencies: 354 | call-bind: 1.0.7 355 | define-properties: 1.2.1 356 | es-abstract: 1.22.5 357 | es-shim-unscopables: 1.0.2 358 | dev: true 359 | 360 | /arraybuffer.prototype.slice@1.0.3: 361 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 362 | engines: {node: '>= 0.4'} 363 | dependencies: 364 | array-buffer-byte-length: 1.0.1 365 | call-bind: 1.0.7 366 | define-properties: 1.2.1 367 | es-abstract: 1.22.5 368 | es-errors: 1.3.0 369 | get-intrinsic: 1.2.4 370 | is-array-buffer: 3.0.4 371 | is-shared-array-buffer: 1.0.3 372 | dev: true 373 | 374 | /available-typed-arrays@1.0.7: 375 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 376 | engines: {node: '>= 0.4'} 377 | dependencies: 378 | possible-typed-array-names: 1.0.0 379 | dev: true 380 | 381 | /balanced-match@1.0.2: 382 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 383 | dev: true 384 | 385 | /brace-expansion@1.1.11: 386 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 387 | dependencies: 388 | balanced-match: 1.0.2 389 | concat-map: 0.0.1 390 | dev: true 391 | 392 | /brace-expansion@2.0.1: 393 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 394 | dependencies: 395 | balanced-match: 1.0.2 396 | dev: true 397 | 398 | /braces@3.0.2: 399 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 400 | engines: {node: '>=8'} 401 | dependencies: 402 | fill-range: 7.0.1 403 | dev: true 404 | 405 | /builtin-modules@3.3.0: 406 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 407 | engines: {node: '>=6'} 408 | dev: true 409 | 410 | /builtins@5.0.1: 411 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 412 | dependencies: 413 | semver: 7.6.0 414 | dev: true 415 | 416 | /call-bind@1.0.7: 417 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 418 | engines: {node: '>= 0.4'} 419 | dependencies: 420 | es-define-property: 1.0.0 421 | es-errors: 1.3.0 422 | function-bind: 1.1.2 423 | get-intrinsic: 1.2.4 424 | set-function-length: 1.2.2 425 | dev: true 426 | 427 | /callsites@3.1.0: 428 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 429 | engines: {node: '>=6'} 430 | dev: true 431 | 432 | /chalk@4.1.2: 433 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 434 | engines: {node: '>=10'} 435 | dependencies: 436 | ansi-styles: 4.3.0 437 | supports-color: 7.2.0 438 | dev: true 439 | 440 | /color-convert@2.0.1: 441 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 442 | engines: {node: '>=7.0.0'} 443 | dependencies: 444 | color-name: 1.1.4 445 | dev: true 446 | 447 | /color-name@1.1.4: 448 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 449 | dev: true 450 | 451 | /concat-map@0.0.1: 452 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 453 | dev: true 454 | 455 | /cross-spawn@7.0.3: 456 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 457 | engines: {node: '>= 8'} 458 | dependencies: 459 | path-key: 3.1.1 460 | shebang-command: 2.0.0 461 | which: 2.0.2 462 | dev: true 463 | 464 | /debug@3.2.7: 465 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 466 | peerDependencies: 467 | supports-color: '*' 468 | peerDependenciesMeta: 469 | supports-color: 470 | optional: true 471 | dependencies: 472 | ms: 2.1.3 473 | dev: true 474 | 475 | /debug@4.3.4: 476 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 477 | engines: {node: '>=6.0'} 478 | peerDependencies: 479 | supports-color: '*' 480 | peerDependenciesMeta: 481 | supports-color: 482 | optional: true 483 | dependencies: 484 | ms: 2.1.2 485 | dev: true 486 | 487 | /deep-is@0.1.4: 488 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 489 | dev: true 490 | 491 | /define-data-property@1.1.4: 492 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 493 | engines: {node: '>= 0.4'} 494 | dependencies: 495 | es-define-property: 1.0.0 496 | es-errors: 1.3.0 497 | gopd: 1.0.1 498 | dev: true 499 | 500 | /define-properties@1.2.1: 501 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 502 | engines: {node: '>= 0.4'} 503 | dependencies: 504 | define-data-property: 1.1.4 505 | has-property-descriptors: 1.0.2 506 | object-keys: 1.1.1 507 | dev: true 508 | 509 | /dir-glob@3.0.1: 510 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 511 | engines: {node: '>=8'} 512 | dependencies: 513 | path-type: 4.0.0 514 | dev: true 515 | 516 | /doctrine@2.1.0: 517 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 518 | engines: {node: '>=0.10.0'} 519 | dependencies: 520 | esutils: 2.0.3 521 | dev: true 522 | 523 | /doctrine@3.0.0: 524 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 525 | engines: {node: '>=6.0.0'} 526 | dependencies: 527 | esutils: 2.0.3 528 | dev: true 529 | 530 | /enhanced-resolve@5.16.0: 531 | resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} 532 | engines: {node: '>=10.13.0'} 533 | dependencies: 534 | graceful-fs: 4.2.11 535 | tapable: 2.2.1 536 | dev: true 537 | 538 | /es-abstract@1.22.5: 539 | resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} 540 | engines: {node: '>= 0.4'} 541 | dependencies: 542 | array-buffer-byte-length: 1.0.1 543 | arraybuffer.prototype.slice: 1.0.3 544 | available-typed-arrays: 1.0.7 545 | call-bind: 1.0.7 546 | es-define-property: 1.0.0 547 | es-errors: 1.3.0 548 | es-set-tostringtag: 2.0.3 549 | es-to-primitive: 1.2.1 550 | function.prototype.name: 1.1.6 551 | get-intrinsic: 1.2.4 552 | get-symbol-description: 1.0.2 553 | globalthis: 1.0.3 554 | gopd: 1.0.1 555 | has-property-descriptors: 1.0.2 556 | has-proto: 1.0.3 557 | has-symbols: 1.0.3 558 | hasown: 2.0.2 559 | internal-slot: 1.0.7 560 | is-array-buffer: 3.0.4 561 | is-callable: 1.2.7 562 | is-negative-zero: 2.0.3 563 | is-regex: 1.1.4 564 | is-shared-array-buffer: 1.0.3 565 | is-string: 1.0.7 566 | is-typed-array: 1.1.13 567 | is-weakref: 1.0.2 568 | object-inspect: 1.13.1 569 | object-keys: 1.1.1 570 | object.assign: 4.1.5 571 | regexp.prototype.flags: 1.5.2 572 | safe-array-concat: 1.1.2 573 | safe-regex-test: 1.0.3 574 | string.prototype.trim: 1.2.8 575 | string.prototype.trimend: 1.0.7 576 | string.prototype.trimstart: 1.0.7 577 | typed-array-buffer: 1.0.2 578 | typed-array-byte-length: 1.0.1 579 | typed-array-byte-offset: 1.0.2 580 | typed-array-length: 1.0.5 581 | unbox-primitive: 1.0.2 582 | which-typed-array: 1.1.15 583 | dev: true 584 | 585 | /es-array-method-boxes-properly@1.0.0: 586 | resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} 587 | dev: true 588 | 589 | /es-define-property@1.0.0: 590 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 591 | engines: {node: '>= 0.4'} 592 | dependencies: 593 | get-intrinsic: 1.2.4 594 | dev: true 595 | 596 | /es-errors@1.3.0: 597 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 598 | engines: {node: '>= 0.4'} 599 | dev: true 600 | 601 | /es-set-tostringtag@2.0.3: 602 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 603 | engines: {node: '>= 0.4'} 604 | dependencies: 605 | get-intrinsic: 1.2.4 606 | has-tostringtag: 1.0.2 607 | hasown: 2.0.2 608 | dev: true 609 | 610 | /es-shim-unscopables@1.0.2: 611 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 612 | dependencies: 613 | hasown: 2.0.2 614 | dev: true 615 | 616 | /es-to-primitive@1.2.1: 617 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 618 | engines: {node: '>= 0.4'} 619 | dependencies: 620 | is-callable: 1.2.7 621 | is-date-object: 1.0.5 622 | is-symbol: 1.0.4 623 | dev: true 624 | 625 | /escape-string-regexp@1.0.5: 626 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 627 | engines: {node: '>=0.8.0'} 628 | dev: true 629 | 630 | /escape-string-regexp@4.0.0: 631 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 632 | engines: {node: '>=10'} 633 | dev: true 634 | 635 | /eslint-compat-utils@0.1.2(eslint@8.57.0): 636 | resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} 637 | engines: {node: '>=12'} 638 | peerDependencies: 639 | eslint: '>=6.0.0' 640 | dependencies: 641 | eslint: 8.57.0 642 | dev: true 643 | 644 | /eslint-config-etherpad@4.0.4(eslint@8.57.0)(typescript@5.4.2): 645 | resolution: {integrity: sha512-y1riT+lmFwd+TZR9LzTlF4ntcTWRUpjqspdJ8kekLY9gcwyBsKTaW/Jj8mO4DyfDR72/3o4t6v7A8d8SqXybUQ==} 646 | engines: {node: '>=12.17.0'} 647 | dependencies: 648 | '@rushstack/eslint-patch': 1.7.2 649 | '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2) 650 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 651 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) 652 | eslint-plugin-cypress: 2.15.1(eslint@8.57.0) 653 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) 654 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 655 | eslint-plugin-mocha: 10.4.1(eslint@8.57.0) 656 | eslint-plugin-n: 16.6.2(eslint@8.57.0) 657 | eslint-plugin-prefer-arrow: 1.2.3(eslint@8.57.0) 658 | eslint-plugin-promise: 6.1.1(eslint@8.57.0) 659 | eslint-plugin-you-dont-need-lodash-underscore: 6.13.0 660 | transitivePeerDependencies: 661 | - eslint 662 | - eslint-import-resolver-node 663 | - eslint-import-resolver-webpack 664 | - supports-color 665 | - typescript 666 | dev: true 667 | 668 | /eslint-import-resolver-node@0.3.9: 669 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 670 | dependencies: 671 | debug: 3.2.7 672 | is-core-module: 2.13.1 673 | resolve: 1.22.8 674 | transitivePeerDependencies: 675 | - supports-color 676 | dev: true 677 | 678 | /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): 679 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 680 | engines: {node: ^14.18.0 || >=16.0.0} 681 | peerDependencies: 682 | eslint: '*' 683 | eslint-plugin-import: '*' 684 | dependencies: 685 | debug: 4.3.4 686 | enhanced-resolve: 5.16.0 687 | eslint: 8.57.0 688 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 689 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 690 | fast-glob: 3.3.2 691 | get-tsconfig: 4.7.3 692 | is-core-module: 2.13.1 693 | is-glob: 4.0.3 694 | transitivePeerDependencies: 695 | - '@typescript-eslint/parser' 696 | - eslint-import-resolver-node 697 | - eslint-import-resolver-webpack 698 | - supports-color 699 | dev: true 700 | 701 | /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 702 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} 703 | engines: {node: '>=4'} 704 | peerDependencies: 705 | '@typescript-eslint/parser': '*' 706 | eslint: '*' 707 | eslint-import-resolver-node: '*' 708 | eslint-import-resolver-typescript: '*' 709 | eslint-import-resolver-webpack: '*' 710 | peerDependenciesMeta: 711 | '@typescript-eslint/parser': 712 | optional: true 713 | eslint: 714 | optional: true 715 | eslint-import-resolver-node: 716 | optional: true 717 | eslint-import-resolver-typescript: 718 | optional: true 719 | eslint-import-resolver-webpack: 720 | optional: true 721 | dependencies: 722 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 723 | debug: 3.2.7 724 | eslint: 8.57.0 725 | eslint-import-resolver-node: 0.3.9 726 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) 727 | transitivePeerDependencies: 728 | - supports-color 729 | dev: true 730 | 731 | /eslint-plugin-cypress@2.15.1(eslint@8.57.0): 732 | resolution: {integrity: sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==} 733 | peerDependencies: 734 | eslint: '>= 3.2.1' 735 | dependencies: 736 | eslint: 8.57.0 737 | globals: 13.24.0 738 | dev: true 739 | 740 | /eslint-plugin-es-x@7.5.0(eslint@8.57.0): 741 | resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} 742 | engines: {node: ^14.18.0 || >=16.0.0} 743 | peerDependencies: 744 | eslint: '>=8' 745 | dependencies: 746 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 747 | '@eslint-community/regexpp': 4.10.0 748 | eslint: 8.57.0 749 | eslint-compat-utils: 0.1.2(eslint@8.57.0) 750 | dev: true 751 | 752 | /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): 753 | resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} 754 | engines: {node: '>=6.5.0'} 755 | peerDependencies: 756 | eslint: '>=4.19.1' 757 | dependencies: 758 | escape-string-regexp: 1.0.5 759 | eslint: 8.57.0 760 | ignore: 5.3.1 761 | dev: true 762 | 763 | /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 764 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 765 | engines: {node: '>=4'} 766 | peerDependencies: 767 | '@typescript-eslint/parser': '*' 768 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 769 | peerDependenciesMeta: 770 | '@typescript-eslint/parser': 771 | optional: true 772 | dependencies: 773 | '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2) 774 | array-includes: 3.1.7 775 | array.prototype.findlastindex: 1.2.4 776 | array.prototype.flat: 1.3.2 777 | array.prototype.flatmap: 1.3.2 778 | debug: 3.2.7 779 | doctrine: 2.1.0 780 | eslint: 8.57.0 781 | eslint-import-resolver-node: 0.3.9 782 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 783 | hasown: 2.0.2 784 | is-core-module: 2.13.1 785 | is-glob: 4.0.3 786 | minimatch: 3.1.2 787 | object.fromentries: 2.0.7 788 | object.groupby: 1.0.2 789 | object.values: 1.1.7 790 | semver: 6.3.1 791 | tsconfig-paths: 3.15.0 792 | transitivePeerDependencies: 793 | - eslint-import-resolver-typescript 794 | - eslint-import-resolver-webpack 795 | - supports-color 796 | dev: true 797 | 798 | /eslint-plugin-mocha@10.4.1(eslint@8.57.0): 799 | resolution: {integrity: sha512-G85ALUgKaLzuEuHhoW3HVRgPTmia6njQC3qCG6CEvA8/Ja9PDZnRZOuzekMki+HaViEQXINuYsmhp5WR5/4MfA==} 800 | engines: {node: '>=14.0.0'} 801 | peerDependencies: 802 | eslint: '>=7.0.0' 803 | dependencies: 804 | eslint: 8.57.0 805 | eslint-utils: 3.0.0(eslint@8.57.0) 806 | globals: 13.24.0 807 | rambda: 7.5.0 808 | dev: true 809 | 810 | /eslint-plugin-n@16.6.2(eslint@8.57.0): 811 | resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} 812 | engines: {node: '>=16.0.0'} 813 | peerDependencies: 814 | eslint: '>=7.0.0' 815 | dependencies: 816 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 817 | builtins: 5.0.1 818 | eslint: 8.57.0 819 | eslint-plugin-es-x: 7.5.0(eslint@8.57.0) 820 | get-tsconfig: 4.7.3 821 | globals: 13.24.0 822 | ignore: 5.3.1 823 | is-builtin-module: 3.2.1 824 | is-core-module: 2.13.1 825 | minimatch: 3.1.2 826 | resolve: 1.22.8 827 | semver: 7.6.0 828 | dev: true 829 | 830 | /eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.0): 831 | resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} 832 | peerDependencies: 833 | eslint: '>=2.0.0' 834 | dependencies: 835 | eslint: 8.57.0 836 | dev: true 837 | 838 | /eslint-plugin-promise@6.1.1(eslint@8.57.0): 839 | resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} 840 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 841 | peerDependencies: 842 | eslint: ^7.0.0 || ^8.0.0 843 | dependencies: 844 | eslint: 8.57.0 845 | dev: true 846 | 847 | /eslint-plugin-you-dont-need-lodash-underscore@6.13.0: 848 | resolution: {integrity: sha512-6FkFLp/R/QlgfJl5NrxkIXMQ36jMVLczkWDZJvMd7/wr/M3K0DS7mtX7plZ3giTDcbDD7VBfNYUfUVaBCZOXKA==} 849 | engines: {node: '>=4.0'} 850 | dependencies: 851 | kebab-case: 1.0.2 852 | dev: true 853 | 854 | /eslint-scope@7.2.2: 855 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 856 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 857 | dependencies: 858 | esrecurse: 4.3.0 859 | estraverse: 5.3.0 860 | dev: true 861 | 862 | /eslint-utils@3.0.0(eslint@8.57.0): 863 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 864 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 865 | peerDependencies: 866 | eslint: '>=5' 867 | dependencies: 868 | eslint: 8.57.0 869 | eslint-visitor-keys: 2.1.0 870 | dev: true 871 | 872 | /eslint-visitor-keys@2.1.0: 873 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 874 | engines: {node: '>=10'} 875 | dev: true 876 | 877 | /eslint-visitor-keys@3.4.3: 878 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 879 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 880 | dev: true 881 | 882 | /eslint@8.57.0: 883 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 884 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 885 | hasBin: true 886 | dependencies: 887 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 888 | '@eslint-community/regexpp': 4.10.0 889 | '@eslint/eslintrc': 2.1.4 890 | '@eslint/js': 8.57.0 891 | '@humanwhocodes/config-array': 0.11.14 892 | '@humanwhocodes/module-importer': 1.0.1 893 | '@nodelib/fs.walk': 1.2.8 894 | '@ungap/structured-clone': 1.2.0 895 | ajv: 6.12.6 896 | chalk: 4.1.2 897 | cross-spawn: 7.0.3 898 | debug: 4.3.4 899 | doctrine: 3.0.0 900 | escape-string-regexp: 4.0.0 901 | eslint-scope: 7.2.2 902 | eslint-visitor-keys: 3.4.3 903 | espree: 9.6.1 904 | esquery: 1.5.0 905 | esutils: 2.0.3 906 | fast-deep-equal: 3.1.3 907 | file-entry-cache: 6.0.1 908 | find-up: 5.0.0 909 | glob-parent: 6.0.2 910 | globals: 13.24.0 911 | graphemer: 1.4.0 912 | ignore: 5.3.1 913 | imurmurhash: 0.1.4 914 | is-glob: 4.0.3 915 | is-path-inside: 3.0.3 916 | js-yaml: 4.1.0 917 | json-stable-stringify-without-jsonify: 1.0.1 918 | levn: 0.4.1 919 | lodash.merge: 4.6.2 920 | minimatch: 3.1.2 921 | natural-compare: 1.4.0 922 | optionator: 0.9.3 923 | strip-ansi: 6.0.1 924 | text-table: 0.2.0 925 | transitivePeerDependencies: 926 | - supports-color 927 | dev: true 928 | 929 | /espree@9.6.1: 930 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 931 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 932 | dependencies: 933 | acorn: 8.11.3 934 | acorn-jsx: 5.3.2(acorn@8.11.3) 935 | eslint-visitor-keys: 3.4.3 936 | dev: true 937 | 938 | /esquery@1.5.0: 939 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 940 | engines: {node: '>=0.10'} 941 | dependencies: 942 | estraverse: 5.3.0 943 | dev: true 944 | 945 | /esrecurse@4.3.0: 946 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 947 | engines: {node: '>=4.0'} 948 | dependencies: 949 | estraverse: 5.3.0 950 | dev: true 951 | 952 | /estraverse@5.3.0: 953 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 954 | engines: {node: '>=4.0'} 955 | dev: true 956 | 957 | /esutils@2.0.3: 958 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 959 | engines: {node: '>=0.10.0'} 960 | dev: true 961 | 962 | /fast-deep-equal@3.1.3: 963 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 964 | dev: true 965 | 966 | /fast-glob@3.3.2: 967 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 968 | engines: {node: '>=8.6.0'} 969 | dependencies: 970 | '@nodelib/fs.stat': 2.0.5 971 | '@nodelib/fs.walk': 1.2.8 972 | glob-parent: 5.1.2 973 | merge2: 1.4.1 974 | micromatch: 4.0.5 975 | dev: true 976 | 977 | /fast-json-stable-stringify@2.1.0: 978 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 979 | dev: true 980 | 981 | /fast-levenshtein@2.0.6: 982 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 983 | dev: true 984 | 985 | /fastq@1.17.1: 986 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 987 | dependencies: 988 | reusify: 1.0.4 989 | dev: true 990 | 991 | /file-entry-cache@6.0.1: 992 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 993 | engines: {node: ^10.12.0 || >=12.0.0} 994 | dependencies: 995 | flat-cache: 3.2.0 996 | dev: true 997 | 998 | /fill-range@7.0.1: 999 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1000 | engines: {node: '>=8'} 1001 | dependencies: 1002 | to-regex-range: 5.0.1 1003 | dev: true 1004 | 1005 | /find-up@5.0.0: 1006 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1007 | engines: {node: '>=10'} 1008 | dependencies: 1009 | locate-path: 6.0.0 1010 | path-exists: 4.0.0 1011 | dev: true 1012 | 1013 | /flat-cache@3.2.0: 1014 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1015 | engines: {node: ^10.12.0 || >=12.0.0} 1016 | dependencies: 1017 | flatted: 3.3.1 1018 | keyv: 4.5.4 1019 | rimraf: 3.0.2 1020 | dev: true 1021 | 1022 | /flatted@3.3.1: 1023 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1024 | dev: true 1025 | 1026 | /for-each@0.3.3: 1027 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1028 | dependencies: 1029 | is-callable: 1.2.7 1030 | dev: true 1031 | 1032 | /fs.realpath@1.0.0: 1033 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1034 | dev: true 1035 | 1036 | /function-bind@1.1.2: 1037 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1038 | dev: true 1039 | 1040 | /function.prototype.name@1.1.6: 1041 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1042 | engines: {node: '>= 0.4'} 1043 | dependencies: 1044 | call-bind: 1.0.7 1045 | define-properties: 1.2.1 1046 | es-abstract: 1.22.5 1047 | functions-have-names: 1.2.3 1048 | dev: true 1049 | 1050 | /functions-have-names@1.2.3: 1051 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1052 | dev: true 1053 | 1054 | /get-intrinsic@1.2.4: 1055 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 1056 | engines: {node: '>= 0.4'} 1057 | dependencies: 1058 | es-errors: 1.3.0 1059 | function-bind: 1.1.2 1060 | has-proto: 1.0.3 1061 | has-symbols: 1.0.3 1062 | hasown: 2.0.2 1063 | dev: true 1064 | 1065 | /get-symbol-description@1.0.2: 1066 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 1067 | engines: {node: '>= 0.4'} 1068 | dependencies: 1069 | call-bind: 1.0.7 1070 | es-errors: 1.3.0 1071 | get-intrinsic: 1.2.4 1072 | dev: true 1073 | 1074 | /get-tsconfig@4.7.3: 1075 | resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} 1076 | dependencies: 1077 | resolve-pkg-maps: 1.0.0 1078 | dev: true 1079 | 1080 | /glob-parent@5.1.2: 1081 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1082 | engines: {node: '>= 6'} 1083 | dependencies: 1084 | is-glob: 4.0.3 1085 | dev: true 1086 | 1087 | /glob-parent@6.0.2: 1088 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1089 | engines: {node: '>=10.13.0'} 1090 | dependencies: 1091 | is-glob: 4.0.3 1092 | dev: true 1093 | 1094 | /glob@7.2.3: 1095 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1096 | dependencies: 1097 | fs.realpath: 1.0.0 1098 | inflight: 1.0.6 1099 | inherits: 2.0.4 1100 | minimatch: 3.1.2 1101 | once: 1.4.0 1102 | path-is-absolute: 1.0.1 1103 | dev: true 1104 | 1105 | /globals@13.24.0: 1106 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1107 | engines: {node: '>=8'} 1108 | dependencies: 1109 | type-fest: 0.20.2 1110 | dev: true 1111 | 1112 | /globalthis@1.0.3: 1113 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1114 | engines: {node: '>= 0.4'} 1115 | dependencies: 1116 | define-properties: 1.2.1 1117 | dev: true 1118 | 1119 | /globby@11.1.0: 1120 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1121 | engines: {node: '>=10'} 1122 | dependencies: 1123 | array-union: 2.1.0 1124 | dir-glob: 3.0.1 1125 | fast-glob: 3.3.2 1126 | ignore: 5.3.1 1127 | merge2: 1.4.1 1128 | slash: 3.0.0 1129 | dev: true 1130 | 1131 | /gopd@1.0.1: 1132 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1133 | dependencies: 1134 | get-intrinsic: 1.2.4 1135 | dev: true 1136 | 1137 | /graceful-fs@4.2.11: 1138 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1139 | dev: true 1140 | 1141 | /graphemer@1.4.0: 1142 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1143 | dev: true 1144 | 1145 | /has-bigints@1.0.2: 1146 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1147 | dev: true 1148 | 1149 | /has-flag@4.0.0: 1150 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1151 | engines: {node: '>=8'} 1152 | dev: true 1153 | 1154 | /has-property-descriptors@1.0.2: 1155 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1156 | dependencies: 1157 | es-define-property: 1.0.0 1158 | dev: true 1159 | 1160 | /has-proto@1.0.3: 1161 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 1162 | engines: {node: '>= 0.4'} 1163 | dev: true 1164 | 1165 | /has-symbols@1.0.3: 1166 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1167 | engines: {node: '>= 0.4'} 1168 | dev: true 1169 | 1170 | /has-tostringtag@1.0.2: 1171 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1172 | engines: {node: '>= 0.4'} 1173 | dependencies: 1174 | has-symbols: 1.0.3 1175 | dev: true 1176 | 1177 | /hasown@2.0.2: 1178 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1179 | engines: {node: '>= 0.4'} 1180 | dependencies: 1181 | function-bind: 1.1.2 1182 | dev: true 1183 | 1184 | /ignore@5.3.1: 1185 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1186 | engines: {node: '>= 4'} 1187 | dev: true 1188 | 1189 | /import-fresh@3.3.0: 1190 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1191 | engines: {node: '>=6'} 1192 | dependencies: 1193 | parent-module: 1.0.1 1194 | resolve-from: 4.0.0 1195 | dev: true 1196 | 1197 | /imurmurhash@0.1.4: 1198 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1199 | engines: {node: '>=0.8.19'} 1200 | dev: true 1201 | 1202 | /inflight@1.0.6: 1203 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1204 | dependencies: 1205 | once: 1.4.0 1206 | wrappy: 1.0.2 1207 | dev: true 1208 | 1209 | /inherits@2.0.4: 1210 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1211 | dev: true 1212 | 1213 | /internal-slot@1.0.7: 1214 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 1215 | engines: {node: '>= 0.4'} 1216 | dependencies: 1217 | es-errors: 1.3.0 1218 | hasown: 2.0.2 1219 | side-channel: 1.0.6 1220 | dev: true 1221 | 1222 | /is-array-buffer@3.0.4: 1223 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 1224 | engines: {node: '>= 0.4'} 1225 | dependencies: 1226 | call-bind: 1.0.7 1227 | get-intrinsic: 1.2.4 1228 | dev: true 1229 | 1230 | /is-bigint@1.0.4: 1231 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1232 | dependencies: 1233 | has-bigints: 1.0.2 1234 | dev: true 1235 | 1236 | /is-boolean-object@1.1.2: 1237 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1238 | engines: {node: '>= 0.4'} 1239 | dependencies: 1240 | call-bind: 1.0.7 1241 | has-tostringtag: 1.0.2 1242 | dev: true 1243 | 1244 | /is-builtin-module@3.2.1: 1245 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1246 | engines: {node: '>=6'} 1247 | dependencies: 1248 | builtin-modules: 3.3.0 1249 | dev: true 1250 | 1251 | /is-callable@1.2.7: 1252 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1253 | engines: {node: '>= 0.4'} 1254 | dev: true 1255 | 1256 | /is-core-module@2.13.1: 1257 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1258 | dependencies: 1259 | hasown: 2.0.2 1260 | dev: true 1261 | 1262 | /is-date-object@1.0.5: 1263 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1264 | engines: {node: '>= 0.4'} 1265 | dependencies: 1266 | has-tostringtag: 1.0.2 1267 | dev: true 1268 | 1269 | /is-extglob@2.1.1: 1270 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1271 | engines: {node: '>=0.10.0'} 1272 | dev: true 1273 | 1274 | /is-glob@4.0.3: 1275 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1276 | engines: {node: '>=0.10.0'} 1277 | dependencies: 1278 | is-extglob: 2.1.1 1279 | dev: true 1280 | 1281 | /is-negative-zero@2.0.3: 1282 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1283 | engines: {node: '>= 0.4'} 1284 | dev: true 1285 | 1286 | /is-number-object@1.0.7: 1287 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1288 | engines: {node: '>= 0.4'} 1289 | dependencies: 1290 | has-tostringtag: 1.0.2 1291 | dev: true 1292 | 1293 | /is-number@7.0.0: 1294 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1295 | engines: {node: '>=0.12.0'} 1296 | dev: true 1297 | 1298 | /is-path-inside@3.0.3: 1299 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1300 | engines: {node: '>=8'} 1301 | dev: true 1302 | 1303 | /is-regex@1.1.4: 1304 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1305 | engines: {node: '>= 0.4'} 1306 | dependencies: 1307 | call-bind: 1.0.7 1308 | has-tostringtag: 1.0.2 1309 | dev: true 1310 | 1311 | /is-shared-array-buffer@1.0.3: 1312 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1313 | engines: {node: '>= 0.4'} 1314 | dependencies: 1315 | call-bind: 1.0.7 1316 | dev: true 1317 | 1318 | /is-string@1.0.7: 1319 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1320 | engines: {node: '>= 0.4'} 1321 | dependencies: 1322 | has-tostringtag: 1.0.2 1323 | dev: true 1324 | 1325 | /is-symbol@1.0.4: 1326 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1327 | engines: {node: '>= 0.4'} 1328 | dependencies: 1329 | has-symbols: 1.0.3 1330 | dev: true 1331 | 1332 | /is-typed-array@1.1.13: 1333 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1334 | engines: {node: '>= 0.4'} 1335 | dependencies: 1336 | which-typed-array: 1.1.15 1337 | dev: true 1338 | 1339 | /is-weakref@1.0.2: 1340 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1341 | dependencies: 1342 | call-bind: 1.0.7 1343 | dev: true 1344 | 1345 | /isarray@2.0.5: 1346 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1347 | dev: true 1348 | 1349 | /isexe@2.0.0: 1350 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1351 | dev: true 1352 | 1353 | /js-yaml@4.1.0: 1354 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1355 | hasBin: true 1356 | dependencies: 1357 | argparse: 2.0.1 1358 | dev: true 1359 | 1360 | /json-buffer@3.0.1: 1361 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1362 | dev: true 1363 | 1364 | /json-schema-traverse@0.4.1: 1365 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1366 | dev: true 1367 | 1368 | /json-stable-stringify-without-jsonify@1.0.1: 1369 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1370 | dev: true 1371 | 1372 | /json5@1.0.2: 1373 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1374 | hasBin: true 1375 | dependencies: 1376 | minimist: 1.2.8 1377 | dev: true 1378 | 1379 | /kebab-case@1.0.2: 1380 | resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} 1381 | dev: true 1382 | 1383 | /keyv@4.5.4: 1384 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1385 | dependencies: 1386 | json-buffer: 3.0.1 1387 | dev: true 1388 | 1389 | /levn@0.4.1: 1390 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1391 | engines: {node: '>= 0.8.0'} 1392 | dependencies: 1393 | prelude-ls: 1.2.1 1394 | type-check: 0.4.0 1395 | dev: true 1396 | 1397 | /locate-path@6.0.0: 1398 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1399 | engines: {node: '>=10'} 1400 | dependencies: 1401 | p-locate: 5.0.0 1402 | dev: true 1403 | 1404 | /lodash.merge@4.6.2: 1405 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1406 | dev: true 1407 | 1408 | /lru-cache@6.0.0: 1409 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1410 | engines: {node: '>=10'} 1411 | dependencies: 1412 | yallist: 4.0.0 1413 | dev: true 1414 | 1415 | /merge2@1.4.1: 1416 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1417 | engines: {node: '>= 8'} 1418 | dev: true 1419 | 1420 | /micromatch@4.0.5: 1421 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1422 | engines: {node: '>=8.6'} 1423 | dependencies: 1424 | braces: 3.0.2 1425 | picomatch: 2.3.1 1426 | dev: true 1427 | 1428 | /minimatch@3.1.2: 1429 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1430 | dependencies: 1431 | brace-expansion: 1.1.11 1432 | dev: true 1433 | 1434 | /minimatch@9.0.3: 1435 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1436 | engines: {node: '>=16 || 14 >=14.17'} 1437 | dependencies: 1438 | brace-expansion: 2.0.1 1439 | dev: true 1440 | 1441 | /minimist@1.2.8: 1442 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1443 | dev: true 1444 | 1445 | /ms@2.1.2: 1446 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1447 | dev: true 1448 | 1449 | /ms@2.1.3: 1450 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1451 | dev: true 1452 | 1453 | /natural-compare@1.4.0: 1454 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1455 | dev: true 1456 | 1457 | /object-inspect@1.13.1: 1458 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1459 | dev: true 1460 | 1461 | /object-keys@1.1.1: 1462 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1463 | engines: {node: '>= 0.4'} 1464 | dev: true 1465 | 1466 | /object.assign@4.1.5: 1467 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1468 | engines: {node: '>= 0.4'} 1469 | dependencies: 1470 | call-bind: 1.0.7 1471 | define-properties: 1.2.1 1472 | has-symbols: 1.0.3 1473 | object-keys: 1.1.1 1474 | dev: true 1475 | 1476 | /object.fromentries@2.0.7: 1477 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} 1478 | engines: {node: '>= 0.4'} 1479 | dependencies: 1480 | call-bind: 1.0.7 1481 | define-properties: 1.2.1 1482 | es-abstract: 1.22.5 1483 | dev: true 1484 | 1485 | /object.groupby@1.0.2: 1486 | resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} 1487 | dependencies: 1488 | array.prototype.filter: 1.0.3 1489 | call-bind: 1.0.7 1490 | define-properties: 1.2.1 1491 | es-abstract: 1.22.5 1492 | es-errors: 1.3.0 1493 | dev: true 1494 | 1495 | /object.values@1.1.7: 1496 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 1497 | engines: {node: '>= 0.4'} 1498 | dependencies: 1499 | call-bind: 1.0.7 1500 | define-properties: 1.2.1 1501 | es-abstract: 1.22.5 1502 | dev: true 1503 | 1504 | /once@1.4.0: 1505 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1506 | dependencies: 1507 | wrappy: 1.0.2 1508 | dev: true 1509 | 1510 | /optionator@0.9.3: 1511 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1512 | engines: {node: '>= 0.8.0'} 1513 | dependencies: 1514 | '@aashutoshrathi/word-wrap': 1.2.6 1515 | deep-is: 0.1.4 1516 | fast-levenshtein: 2.0.6 1517 | levn: 0.4.1 1518 | prelude-ls: 1.2.1 1519 | type-check: 0.4.0 1520 | dev: true 1521 | 1522 | /p-limit@3.1.0: 1523 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1524 | engines: {node: '>=10'} 1525 | dependencies: 1526 | yocto-queue: 0.1.0 1527 | dev: true 1528 | 1529 | /p-locate@5.0.0: 1530 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1531 | engines: {node: '>=10'} 1532 | dependencies: 1533 | p-limit: 3.1.0 1534 | dev: true 1535 | 1536 | /parent-module@1.0.1: 1537 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1538 | engines: {node: '>=6'} 1539 | dependencies: 1540 | callsites: 3.1.0 1541 | dev: true 1542 | 1543 | /path-exists@4.0.0: 1544 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1545 | engines: {node: '>=8'} 1546 | dev: true 1547 | 1548 | /path-is-absolute@1.0.1: 1549 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1550 | engines: {node: '>=0.10.0'} 1551 | dev: true 1552 | 1553 | /path-key@3.1.1: 1554 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1555 | engines: {node: '>=8'} 1556 | dev: true 1557 | 1558 | /path-parse@1.0.7: 1559 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1560 | dev: true 1561 | 1562 | /path-type@4.0.0: 1563 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1564 | engines: {node: '>=8'} 1565 | dev: true 1566 | 1567 | /picomatch@2.3.1: 1568 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1569 | engines: {node: '>=8.6'} 1570 | dev: true 1571 | 1572 | /possible-typed-array-names@1.0.0: 1573 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1574 | engines: {node: '>= 0.4'} 1575 | dev: true 1576 | 1577 | /prelude-ls@1.2.1: 1578 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1579 | engines: {node: '>= 0.8.0'} 1580 | dev: true 1581 | 1582 | /punycode@2.3.1: 1583 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1584 | engines: {node: '>=6'} 1585 | dev: true 1586 | 1587 | /queue-microtask@1.2.3: 1588 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1589 | dev: true 1590 | 1591 | /rambda@7.5.0: 1592 | resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==} 1593 | dev: true 1594 | 1595 | /regexp.prototype.flags@1.5.2: 1596 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 1597 | engines: {node: '>= 0.4'} 1598 | dependencies: 1599 | call-bind: 1.0.7 1600 | define-properties: 1.2.1 1601 | es-errors: 1.3.0 1602 | set-function-name: 2.0.2 1603 | dev: true 1604 | 1605 | /resolve-from@4.0.0: 1606 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1607 | engines: {node: '>=4'} 1608 | dev: true 1609 | 1610 | /resolve-pkg-maps@1.0.0: 1611 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1612 | dev: true 1613 | 1614 | /resolve@1.22.8: 1615 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1616 | hasBin: true 1617 | dependencies: 1618 | is-core-module: 2.13.1 1619 | path-parse: 1.0.7 1620 | supports-preserve-symlinks-flag: 1.0.0 1621 | dev: true 1622 | 1623 | /reusify@1.0.4: 1624 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1625 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1626 | dev: true 1627 | 1628 | /rimraf@3.0.2: 1629 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1630 | hasBin: true 1631 | dependencies: 1632 | glob: 7.2.3 1633 | dev: true 1634 | 1635 | /run-parallel@1.2.0: 1636 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1637 | dependencies: 1638 | queue-microtask: 1.2.3 1639 | dev: true 1640 | 1641 | /safe-array-concat@1.1.2: 1642 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1643 | engines: {node: '>=0.4'} 1644 | dependencies: 1645 | call-bind: 1.0.7 1646 | get-intrinsic: 1.2.4 1647 | has-symbols: 1.0.3 1648 | isarray: 2.0.5 1649 | dev: true 1650 | 1651 | /safe-regex-test@1.0.3: 1652 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1653 | engines: {node: '>= 0.4'} 1654 | dependencies: 1655 | call-bind: 1.0.7 1656 | es-errors: 1.3.0 1657 | is-regex: 1.1.4 1658 | dev: true 1659 | 1660 | /semver@6.3.1: 1661 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1662 | hasBin: true 1663 | dev: true 1664 | 1665 | /semver@7.6.0: 1666 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1667 | engines: {node: '>=10'} 1668 | hasBin: true 1669 | dependencies: 1670 | lru-cache: 6.0.0 1671 | dev: true 1672 | 1673 | /set-function-length@1.2.2: 1674 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1675 | engines: {node: '>= 0.4'} 1676 | dependencies: 1677 | define-data-property: 1.1.4 1678 | es-errors: 1.3.0 1679 | function-bind: 1.1.2 1680 | get-intrinsic: 1.2.4 1681 | gopd: 1.0.1 1682 | has-property-descriptors: 1.0.2 1683 | dev: true 1684 | 1685 | /set-function-name@2.0.2: 1686 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1687 | engines: {node: '>= 0.4'} 1688 | dependencies: 1689 | define-data-property: 1.1.4 1690 | es-errors: 1.3.0 1691 | functions-have-names: 1.2.3 1692 | has-property-descriptors: 1.0.2 1693 | dev: true 1694 | 1695 | /shebang-command@2.0.0: 1696 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1697 | engines: {node: '>=8'} 1698 | dependencies: 1699 | shebang-regex: 3.0.0 1700 | dev: true 1701 | 1702 | /shebang-regex@3.0.0: 1703 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1704 | engines: {node: '>=8'} 1705 | dev: true 1706 | 1707 | /side-channel@1.0.6: 1708 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1709 | engines: {node: '>= 0.4'} 1710 | dependencies: 1711 | call-bind: 1.0.7 1712 | es-errors: 1.3.0 1713 | get-intrinsic: 1.2.4 1714 | object-inspect: 1.13.1 1715 | dev: true 1716 | 1717 | /slash@3.0.0: 1718 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1719 | engines: {node: '>=8'} 1720 | dev: true 1721 | 1722 | /string.prototype.trim@1.2.8: 1723 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 1724 | engines: {node: '>= 0.4'} 1725 | dependencies: 1726 | call-bind: 1.0.7 1727 | define-properties: 1.2.1 1728 | es-abstract: 1.22.5 1729 | dev: true 1730 | 1731 | /string.prototype.trimend@1.0.7: 1732 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 1733 | dependencies: 1734 | call-bind: 1.0.7 1735 | define-properties: 1.2.1 1736 | es-abstract: 1.22.5 1737 | dev: true 1738 | 1739 | /string.prototype.trimstart@1.0.7: 1740 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 1741 | dependencies: 1742 | call-bind: 1.0.7 1743 | define-properties: 1.2.1 1744 | es-abstract: 1.22.5 1745 | dev: true 1746 | 1747 | /strip-ansi@6.0.1: 1748 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1749 | engines: {node: '>=8'} 1750 | dependencies: 1751 | ansi-regex: 5.0.1 1752 | dev: true 1753 | 1754 | /strip-bom@3.0.0: 1755 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1756 | engines: {node: '>=4'} 1757 | dev: true 1758 | 1759 | /strip-json-comments@3.1.1: 1760 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1761 | engines: {node: '>=8'} 1762 | dev: true 1763 | 1764 | /supports-color@7.2.0: 1765 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | has-flag: 4.0.0 1769 | dev: true 1770 | 1771 | /supports-preserve-symlinks-flag@1.0.0: 1772 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1773 | engines: {node: '>= 0.4'} 1774 | dev: true 1775 | 1776 | /tapable@2.2.1: 1777 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1778 | engines: {node: '>=6'} 1779 | dev: true 1780 | 1781 | /text-table@0.2.0: 1782 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1783 | dev: true 1784 | 1785 | /to-regex-range@5.0.1: 1786 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1787 | engines: {node: '>=8.0'} 1788 | dependencies: 1789 | is-number: 7.0.0 1790 | dev: true 1791 | 1792 | /ts-api-utils@1.3.0(typescript@5.4.2): 1793 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1794 | engines: {node: '>=16'} 1795 | peerDependencies: 1796 | typescript: '>=4.2.0' 1797 | dependencies: 1798 | typescript: 5.4.2 1799 | dev: true 1800 | 1801 | /tsconfig-paths@3.15.0: 1802 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1803 | dependencies: 1804 | '@types/json5': 0.0.29 1805 | json5: 1.0.2 1806 | minimist: 1.2.8 1807 | strip-bom: 3.0.0 1808 | dev: true 1809 | 1810 | /type-check@0.4.0: 1811 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1812 | engines: {node: '>= 0.8.0'} 1813 | dependencies: 1814 | prelude-ls: 1.2.1 1815 | dev: true 1816 | 1817 | /type-fest@0.20.2: 1818 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1819 | engines: {node: '>=10'} 1820 | dev: true 1821 | 1822 | /typed-array-buffer@1.0.2: 1823 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1824 | engines: {node: '>= 0.4'} 1825 | dependencies: 1826 | call-bind: 1.0.7 1827 | es-errors: 1.3.0 1828 | is-typed-array: 1.1.13 1829 | dev: true 1830 | 1831 | /typed-array-byte-length@1.0.1: 1832 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1833 | engines: {node: '>= 0.4'} 1834 | dependencies: 1835 | call-bind: 1.0.7 1836 | for-each: 0.3.3 1837 | gopd: 1.0.1 1838 | has-proto: 1.0.3 1839 | is-typed-array: 1.1.13 1840 | dev: true 1841 | 1842 | /typed-array-byte-offset@1.0.2: 1843 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1844 | engines: {node: '>= 0.4'} 1845 | dependencies: 1846 | available-typed-arrays: 1.0.7 1847 | call-bind: 1.0.7 1848 | for-each: 0.3.3 1849 | gopd: 1.0.1 1850 | has-proto: 1.0.3 1851 | is-typed-array: 1.1.13 1852 | dev: true 1853 | 1854 | /typed-array-length@1.0.5: 1855 | resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} 1856 | engines: {node: '>= 0.4'} 1857 | dependencies: 1858 | call-bind: 1.0.7 1859 | for-each: 0.3.3 1860 | gopd: 1.0.1 1861 | has-proto: 1.0.3 1862 | is-typed-array: 1.1.13 1863 | possible-typed-array-names: 1.0.0 1864 | dev: true 1865 | 1866 | /typescript@5.4.2: 1867 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} 1868 | engines: {node: '>=14.17'} 1869 | hasBin: true 1870 | dev: true 1871 | 1872 | /unbox-primitive@1.0.2: 1873 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1874 | dependencies: 1875 | call-bind: 1.0.7 1876 | has-bigints: 1.0.2 1877 | has-symbols: 1.0.3 1878 | which-boxed-primitive: 1.0.2 1879 | dev: true 1880 | 1881 | /uri-js@4.4.1: 1882 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1883 | dependencies: 1884 | punycode: 2.3.1 1885 | dev: true 1886 | 1887 | /which-boxed-primitive@1.0.2: 1888 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1889 | dependencies: 1890 | is-bigint: 1.0.4 1891 | is-boolean-object: 1.1.2 1892 | is-number-object: 1.0.7 1893 | is-string: 1.0.7 1894 | is-symbol: 1.0.4 1895 | dev: true 1896 | 1897 | /which-typed-array@1.1.15: 1898 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1899 | engines: {node: '>= 0.4'} 1900 | dependencies: 1901 | available-typed-arrays: 1.0.7 1902 | call-bind: 1.0.7 1903 | for-each: 0.3.3 1904 | gopd: 1.0.1 1905 | has-tostringtag: 1.0.2 1906 | dev: true 1907 | 1908 | /which@2.0.2: 1909 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1910 | engines: {node: '>= 8'} 1911 | hasBin: true 1912 | dependencies: 1913 | isexe: 2.0.0 1914 | dev: true 1915 | 1916 | /wrappy@1.0.2: 1917 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1918 | dev: true 1919 | 1920 | /yallist@4.0.0: 1921 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1922 | dev: true 1923 | 1924 | /yocto-queue@0.1.0: 1925 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1926 | engines: {node: '>=10'} 1927 | dev: true 1928 | -------------------------------------------------------------------------------- /static/css/toc.css: -------------------------------------------------------------------------------- 1 | #toc{ 2 | display: none; 3 | width: 200px; 4 | padding: 10px; 5 | border-left: 1px solid #ccc; 6 | background-color: #f7f7f7; 7 | overflow-y: auto; 8 | } 9 | #tocItems{ 10 | line-height:200%; 11 | } 12 | .tocItem{ 13 | white-space: nowrap; 14 | text-overflow: ellipsis; 15 | display: block; 16 | overflow: hidden; 17 | cursor:pointer; 18 | } 19 | 20 | .toch1{ 21 | margin-left:0px; 22 | font-size: 1.5rem; 23 | } 24 | .toch2{ 25 | margin-left:10px; 26 | font-size: 1.2rem; 27 | } 28 | .toch3{ 29 | margin-left:20px; 30 | font-size: 1rem; 31 | } 32 | .toch4{ 33 | margin-left:30px; 34 | font-size:1rem; 35 | } 36 | .toch5{ 37 | margin-left:30px; 38 | font-size:1rem; 39 | } 40 | .toch6{ 41 | margin-left:30px; 42 | font-size:1rem; 43 | } 44 | 45 | 46 | /* Add styling to the first item in a list */ 47 | 48 | #tocItems{counter-reset: first} 49 | .toch1 { counter-reset: second third fourth fifth sixth seventh;} 50 | .toch2 { counter-reset: third fourth fifth sixth seventh; } 51 | .toch3 { counter-reset: fourth fifth sixth seventh; } 52 | .toch4 { counter-reset: fifth sixth seventh; } 53 | .toch5 { counter-reset: sixth seventh; } 54 | .toch6 { counter-reset: seventh; } 55 | 56 | 57 | /* The behavior for incrementing and the prefix */ 58 | .toch1:before { 59 | content: counter(first) ". " ; 60 | counter-increment: first; 61 | } 62 | 63 | .toch2:before { 64 | content: counter(first) "." counter(second) ". "; 65 | counter-increment: second; 66 | } 67 | 68 | .toch3:before { 69 | content: counter(first) "." counter(second) "." counter(third) ". "; 70 | counter-increment: third 1; 71 | } 72 | 73 | .toch4:before { 74 | content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) ". "; 75 | counter-increment: fourth 1; 76 | } 77 | 78 | .toch5:before { 79 | content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) ". "; 80 | counter-increment: fifth 1; 81 | } 82 | 83 | .toch6:before { 84 | content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) ". "; 85 | counter-increment: sixth 1; 86 | } 87 | 88 | .activeTOC{ 89 | font-weight: 800; 90 | } 91 | 92 | @media (min-width: 1350px) { 93 | #toc { width: 25% } 94 | body.comments-active #toc { width: 20% } // a bit smaller when the comment sidebar is visible 95 | } 96 | 97 | #ep_table_of_contents-a button { 98 | transform: rotateY(180deg); 99 | } 100 | -------------------------------------------------------------------------------- /static/js/aceEditEvent.js: -------------------------------------------------------------------------------- 1 | /* global tableOfContents */ 2 | 'use strict'; 3 | 4 | exports.aceEditEvent = (hookName, args) => { 5 | // dont do anything on idle work timer, wait for changes.. 6 | if (args.callstack && args.callstack.type === 'idleWorkTimer') return false; 7 | if (args.rep) { 8 | tableOfContents.showPosition(args.rep); 9 | } 10 | 11 | if ($('#toc:visible').length > 0) { 12 | tableOfContents.update(); 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /static/js/postAceInit.js: -------------------------------------------------------------------------------- 1 | /* global tableOfContents */ 2 | 'use strict'; 3 | 4 | exports.postAceInit = () => { 5 | if (!$('#editorcontainerbox').hasClass('flex-layout')) { 6 | $.gritter.add({ 7 | title: 'Error', 8 | text: 9 | 'Ep_table_of_contents: Please upgrade to etherpad 1.8.3 for this plugin to work correctly', 10 | sticky: true, 11 | class_name: 'error', 12 | }); 13 | } 14 | const optionToc = $('#options-toc'); 15 | /* on click */ 16 | optionToc.on('click', () => { 17 | if (optionToc.is(':checked')) { 18 | tableOfContents.enable(); // enables line tocping 19 | } else { 20 | optionToc.attr('checked', false); 21 | tableOfContents.disable(); // disables line tocping 22 | } 23 | }); 24 | if (optionToc.is(':checked')) { 25 | tableOfContents.enable(); 26 | } else { 27 | tableOfContents.disable(); 28 | } 29 | 30 | const urlContainstocTrue = tableOfContents.getParam('toc'); // if the url param is set 31 | if (urlContainstocTrue) { 32 | optionToc.attr('checked', 'checked'); 33 | tableOfContents.enable(); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /static/js/scrollTo.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery.scrollTo 3 | * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler 4 | * Licensed under MIT 5 | * https://github.com/flesler/jquery.scrollTo 6 | * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery 7 | * @author Ariel Flesler 8 | * @version 2.1.2 9 | */ 10 | ;(function(factory) { 11 | 'use strict'; 12 | if (typeof define === 'function' && define.amd) { 13 | // AMD 14 | define(['jquery'], factory); 15 | } else if (typeof module !== 'undefined' && module.exports) { 16 | // CommonJS 17 | module.exports = factory(require('jquery')); 18 | } else { 19 | // Global 20 | factory(jQuery); 21 | } 22 | })(function($) { 23 | 'use strict'; 24 | 25 | var $scrollTo = $.scrollTo = function(target, duration, settings) { 26 | return $(window).scrollTo(target, duration, settings); 27 | }; 28 | 29 | $scrollTo.defaults = { 30 | axis:'xy', 31 | duration: 0, 32 | limit:true 33 | }; 34 | 35 | function isWin(elem) { 36 | return !elem.nodeName || 37 | $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1; 38 | } 39 | 40 | $.fn.scrollTo = function(target, duration, settings) { 41 | if (typeof duration === 'object') { 42 | settings = duration; 43 | duration = 0; 44 | } 45 | if (typeof settings === 'function') { 46 | settings = { onAfter:settings }; 47 | } 48 | if (target === 'max') { 49 | target = 9e9; 50 | } 51 | 52 | settings = $.extend({}, $scrollTo.defaults, settings); 53 | // Speed is still recognized for backwards compatibility 54 | duration = duration || settings.duration; 55 | // Make sure the settings are given right 56 | var queue = settings.queue && settings.axis.length > 1; 57 | if (queue) { 58 | // Let's keep the overall duration 59 | duration /= 2; 60 | } 61 | settings.offset = both(settings.offset); 62 | settings.over = both(settings.over); 63 | 64 | return this.each(function() { 65 | // Null target yields nothing, just like jQuery does 66 | if (target === null) return; 67 | 68 | var win = isWin(this), 69 | elem = win ? this.contentWindow || window : this, 70 | $elem = $(elem), 71 | targ = target, 72 | attr = {}, 73 | toff; 74 | 75 | switch (typeof targ) { 76 | // A number will pass the regex 77 | case 'number': 78 | case 'string': 79 | if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) { 80 | targ = both(targ); 81 | // We are done 82 | break; 83 | } 84 | // Relative/Absolute selector 85 | targ = win ? $(targ) : $(targ, elem); 86 | /* falls through */ 87 | case 'object': 88 | if (targ.length === 0) return; 89 | // DOMElement / jQuery 90 | if (targ.is || targ.style) { 91 | // Get the real position of the target 92 | toff = (targ = $(targ)).offset(); 93 | } 94 | } 95 | 96 | var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset; 97 | 98 | $.each(settings.axis.split(''), function(i, axis) { 99 | var Pos = axis === 'x' ? 'Left' : 'Top', 100 | pos = Pos.toLowerCase(), 101 | key = 'scroll' + Pos, 102 | prev = $elem[key](), 103 | max = $scrollTo.max(elem, axis); 104 | 105 | if (toff) {// jQuery / DOMElement 106 | attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]); 107 | 108 | // If it's a dom element, reduce the margin 109 | if (settings.margin) { 110 | attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0; 111 | attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0; 112 | } 113 | 114 | attr[key] += offset[pos] || 0; 115 | 116 | if (settings.over[pos]) { 117 | // Scroll to a fraction of its width/height 118 | attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos]; 119 | } 120 | } else { 121 | var val = targ[pos]; 122 | // Handle percentage values 123 | attr[key] = val.slice && val.slice(-1) === '%' ? 124 | parseFloat(val) / 100 * max 125 | : val; 126 | } 127 | 128 | // Number or 'number' 129 | if (settings.limit && /^\d+$/.test(attr[key])) { 130 | // Check the limits 131 | attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max); 132 | } 133 | 134 | // Don't waste time animating, if there's no need. 135 | if (!i && settings.axis.length > 1) { 136 | if (prev === attr[key]) { 137 | // No animation needed 138 | attr = {}; 139 | } else if (queue) { 140 | // Intermediate animation 141 | animate(settings.onAfterFirst); 142 | // Don't animate this axis again in the next iteration. 143 | attr = {}; 144 | } 145 | } 146 | }); 147 | 148 | animate(settings.onAfter); 149 | 150 | function animate(callback) { 151 | var opts = $.extend({}, settings, { 152 | // The queue setting conflicts with animate() 153 | // Force it to always be true 154 | queue: true, 155 | duration: duration, 156 | complete: callback && function() { 157 | callback.call(elem, targ, settings); 158 | } 159 | }); 160 | $elem.animate(attr, opts); 161 | } 162 | }); 163 | }; 164 | 165 | // Max scrolling position, works on quirks mode 166 | // It only fails (not too badly) on IE, quirks mode. 167 | $scrollTo.max = function(elem, axis) { 168 | var Dim = axis === 'x' ? 'Width' : 'Height', 169 | scroll = 'scroll'+Dim; 170 | 171 | if (!isWin(elem)) 172 | return elem[scroll] - $(elem)[Dim.toLowerCase()](); 173 | 174 | var size = 'client' + Dim, 175 | doc = elem.ownerDocument || elem.document, 176 | html = doc.documentElement, 177 | body = doc.body; 178 | 179 | return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]); 180 | }; 181 | 182 | function both(val) { 183 | return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val }; 184 | } 185 | 186 | // Add special hooks so that window scroll properties can be animated 187 | $.Tween.propHooks.scrollLeft = 188 | $.Tween.propHooks.scrollTop = { 189 | get: function(t) { 190 | return $(t.elem)[t.prop](); 191 | }, 192 | set: function(t) { 193 | var curr = this.get(t); 194 | // If interrupt is true and user scrolled, stop animating 195 | if (t.options.interrupt && t._last && t._last !== curr) { 196 | return $(t.elem).stop(); 197 | } 198 | var next = Math.round(t.now); 199 | // Don't waste CPU 200 | // Browsers don't render floating point scroll 201 | if (curr !== next) { 202 | $(t.elem)[t.prop](next); 203 | t._last = this.get(t); 204 | } 205 | } 206 | }; 207 | 208 | // AMD requirement 209 | return $scrollTo; 210 | }); 211 | -------------------------------------------------------------------------------- /static/js/toc.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | $('#tocButton').click(() => { 4 | $('#toc').toggle(); 5 | }); 6 | 7 | const tableOfContents = { 8 | 9 | enable() { 10 | $('#toc').show(); 11 | this.update(); 12 | }, 13 | 14 | disable: () => { 15 | $('#toc').hide(); 16 | }, 17 | 18 | // Find Tags 19 | findTags: () => { 20 | const toc = {}; // The main object we will use 21 | const tocL = {}; // A per line record of each TOC item 22 | let count = 0; 23 | let delims = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', '.h1', '.h2', '.h3', '.h4', '.h5', '.h6']; 24 | if (clientVars.plugins.plugins.ep_context) { 25 | if (clientVars.plugins.plugins.ep_context.styles) { 26 | const styles = clientVars.plugins.plugins.ep_context.styles; 27 | $.each(styles, (k, style) => { 28 | const contextStyle = `context${style.toLowerCase()}`; 29 | delims.push(contextStyle); 30 | }); 31 | } 32 | } 33 | delims = delims.join(','); 34 | const hs = 35 | $('iframe[name="ace_outer"]').contents().find('iframe') 36 | .contents().find('#innerdocbody').children('div').children(delims); 37 | $(hs).each(function () { 38 | // Remember lineNumber is -1 what a user sees 39 | const lineNumber = $(this).parent().prevAll().length; 40 | let tag = this.nodeName.toLowerCase(); 41 | const newY = `${this.offsetTop}px`; 42 | let linkText = $(this).text(); // get the text for the link 43 | const focusId = $(this).parent()[0].id; // get the id of the link 44 | 45 | if (tag === 'span') { 46 | tag = $(this).attr('class').replace(/.*(h[1-6]).*/, '$1'); 47 | linkText = linkText.replace(/\s*#*/, ''); 48 | } 49 | 50 | // Create an object of lineNumbers that include the tag 51 | tocL[lineNumber] = tag; 52 | 53 | // Does the previous line already have this delim? 54 | // If so do nothing.. 55 | if (tocL[lineNumber - 1]) { 56 | if (tocL[lineNumber - 1] === tag) return; 57 | } 58 | 59 | toc[count] = { 60 | tag, 61 | y: newY, 62 | text: linkText, 63 | focusId, 64 | lineNumber, 65 | }; 66 | count++; 67 | }); 68 | 69 | clientVars.plugins.plugins.ep_table_of_context = toc; 70 | $('#tocItems').html(''); 71 | $.each(toc, (h, v) => { // for each item we should display 72 | const $link = $('', { 73 | text: v.text, 74 | title: v.text, 75 | href: '#', 76 | class: `tocItem toc${v.tag}`, 77 | click: () => { tableOfContents.scroll(`${v.y}`); return false; }, 78 | }); 79 | $link.data('class', `toc${v.tag}`); 80 | $link.data('offset', `${v.y}`); 81 | $link.appendTo('#tocItems'); 82 | }); 83 | }, 84 | 85 | // get HTML 86 | getPadHTML: (rep) => { 87 | if ($('#options-toc').is(':checked')) { 88 | tableOfContents.findTags(); 89 | } 90 | }, 91 | 92 | // show the current position 93 | showPosition: (rep) => { 94 | // We need to know current line # -- see rep 95 | // And we need to know what section is before this line number 96 | const toc = clientVars.plugins.plugins.ep_table_of_context; 97 | if (!toc) return false; 98 | const repLineNumber = rep.selEnd[0]; // line Number 99 | 100 | // So given a line number of 10 and a toc of [4,8,12] we want to find 8.. 101 | $.each(toc, (k, line) => { 102 | if (repLineNumber >= line.lineNumber) { 103 | // we might be showing this.. 104 | const nextLine = toc[k]; 105 | if (nextLine.lineNumber <= repLineNumber) { 106 | const activeToc = parseInt(k) + 1; 107 | 108 | // Seems expensive, we go through each item and remove class 109 | $('.tocItem').each(function () { 110 | $(this).removeClass('activeTOC'); 111 | }); 112 | 113 | $(`.toch${activeToc}`).addClass('activeTOC'); 114 | } 115 | } 116 | }); 117 | }, 118 | 119 | update: (rep) => { 120 | if (rep) { 121 | tableOfContents.showPosition(rep); 122 | } 123 | tableOfContents.getPadHTML(rep); 124 | }, 125 | 126 | scroll: (newY) => { 127 | const $outerdoc = $('iframe[name="ace_outer"]').contents().find('#outerdocbody'); 128 | const $outerdocHTML = $outerdoc.parent(); 129 | $outerdoc.animate({scrollTop: newY}); 130 | $outerdocHTML.animate({scrollTop: newY}); // needed for FF 131 | }, 132 | 133 | getParam: (sname) => { 134 | const urlParams = new URLSearchParams(window.location.search); 135 | return urlParams.has(sname); 136 | }, 137 | 138 | }; 139 | -------------------------------------------------------------------------------- /templates/barButton.ejs: -------------------------------------------------------------------------------- 1 |
  • 2 | 3 | 4 | 5 |
  • 6 |
  • 7 | 12 | -------------------------------------------------------------------------------- /templates/toc.ejs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | 6 | -------------------------------------------------------------------------------- /templates/toc_entry.ejs: -------------------------------------------------------------------------------- 1 |

    2 | > 3 | 4 |

    5 | --------------------------------------------------------------------------------