├── .editorconfig ├── .eslintrc ├── .github └── workflows │ ├── check-dist.yml │ ├── integration-tests.yml │ └── release.yml ├── .gitignore ├── .idea ├── .gitignore ├── GitLink.xml ├── bots.iml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jsLinters │ └── eslint.xml ├── modules.xml ├── prettier.xml └── vcs.xml ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── action.yml ├── dist ├── index.js ├── index.js.map └── package.json ├── esbuild.js ├── package-lock.json ├── package.json ├── renovate.json ├── src └── index.ts ├── tests ├── simple-no-cache.xml ├── simple-template.xml └── simple.xml ├── tsconfig.json └── types └── index.d.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | charset = utf-8 9 | indent_style = space 10 | indent_size = 2 11 | 12 | [*.cs] 13 | indent_size = 4 -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "standard", 5 | "prettier", 6 | "eslint:recommended", 7 | "plugin:@typescript-eslint/recommended", 8 | ], 9 | "parser": "@typescript-eslint/parser", 10 | "plugins": [ 11 | "@typescript-eslint" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.github/workflows/check-dist.yml: -------------------------------------------------------------------------------- 1 | # `dist/index.js` is a special file in Actions. 2 | # When you reference an action with `uses:` in a workflow, 3 | # `index.js` is the code that will run. 4 | # For our project, we generate this file through a build process from other source files. 5 | # We need to make sure the checked-in `index.js` actually matches what we expect it to be. 6 | name: Check dist/ 7 | 8 | on: 9 | push: 10 | branches: 11 | - main 12 | paths-ignore: 13 | - '**.md' 14 | pull_request: 15 | paths-ignore: 16 | - '**.md' 17 | workflow_dispatch: 18 | 19 | jobs: 20 | check-dist: 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 25 | 26 | - name: Set Node.js 20.x 27 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 28 | with: 29 | node-version: 20.x 30 | 31 | - name: Install dependencies 32 | run: npm ci 33 | 34 | - name: Rebuild the dist/ directory 35 | run: | 36 | npm run build 37 | 38 | - name: Compare the expected and actual dist/ directories 39 | run: | 40 | if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then 41 | echo "Detected uncommitted changes after build. See status below:" 42 | git diff 43 | exit 1 44 | fi 45 | id: diff 46 | 47 | # If index.js was different than expected, upload the expected version as an artifact 48 | - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 49 | if: ${{ failure() && steps.diff.conclusion == 'failure' }} 50 | with: 51 | name: dist 52 | path: dist/ 53 | -------------------------------------------------------------------------------- /.github/workflows/integration-tests.yml: -------------------------------------------------------------------------------- 1 | name: Integration tests 2 | on: 3 | push: 4 | jobs: 5 | simple: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - name: Generate cache key 9 | uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 10 | id: generate-key 11 | with: 12 | script: | 13 | core.setOutput('cache-key', new Date().valueOf()) 14 | - name: Retrieve cache 15 | uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 16 | with: 17 | path: ${{ github.workspace }}/blueskyfeedbot 18 | key: feed-cache-${{ steps.generate-key.outputs.cache-key }} 19 | restore-keys: feed-cache- 20 | - name: Checkout repo 21 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 22 | - name: Run action 23 | uses: './' 24 | with: 25 | # This is the RSS feed you want to publish 26 | rss-feed: 'https://githubraw.com/joschi/blueskyfeedbot/main/tests/simple.xml' 27 | dry-run: false 28 | # This is the Bluesky username 29 | username: ${{ secrets.BLUESKY_USERNAME }} 30 | # This is the app password you created earlier 31 | password: ${{ secrets.BLUESKY_PASSWORD }} 32 | # This is a path to the cache file, using the above cache path 33 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 34 | 35 | simple-without-cache: 36 | runs-on: ubuntu-latest 37 | steps: 38 | - name: Checkout repo 39 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 40 | - name: Run action 41 | uses: './' 42 | with: 43 | # This is the RSS feed you want to publish 44 | rss-feed: 'https://githubraw.com/joschi/blueskyfeedbot/main/tests/simple-no-cache.xml' 45 | dry-run: false 46 | # This is the Bluesky username 47 | username: ${{ secrets.BLUESKY_USERNAME }} 48 | # This is the app password you created earlier 49 | password: ${{ secrets.BLUESKY_PASSWORD }} 50 | # This is a path to the cache file, using the above cache path 51 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 52 | 53 | simple-dry-run: 54 | runs-on: ubuntu-latest 55 | steps: 56 | - name: Checkout repo 57 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 58 | - name: Run action 59 | uses: './' 60 | with: 61 | # This is the RSS feed you want to publish 62 | rss-feed: 'https://githubraw.com/joschi/blueskyfeedbot/main/tests/simple.xml' 63 | dry-run: true 64 | # This is the Bluesky username 65 | username: ${{ secrets.BLUESKY_USERNAME }} 66 | # This is the app password you created earlier 67 | password: ${{ secrets.BLUESKY_PASSWORD }} 68 | # This is a path to the cache file, using the above cache path 69 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 70 | 71 | simple-disable-facets: 72 | runs-on: ubuntu-latest 73 | steps: 74 | - name: Checkout repo 75 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 76 | - name: Run action 77 | uses: './' 78 | with: 79 | # This is the RSS feed you want to publish 80 | rss-feed: 'https://githubraw.com/joschi/blueskyfeedbot/main/tests/simple.xml' 81 | # Disable auto-detection of rich text facets 82 | disable-facets: true 83 | # This is the Bluesky username 84 | username: ${{ secrets.BLUESKY_USERNAME }} 85 | # This is the app password you created earlier 86 | password: ${{ secrets.BLUESKY_PASSWORD }} 87 | # This is a path to the cache file, using the above cache path 88 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 89 | 90 | simple-template: 91 | runs-on: ubuntu-latest 92 | steps: 93 | - name: Checkout repo 94 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 95 | - name: Run action 96 | uses: './' 97 | with: 98 | # This is the RSS feed you want to publish 99 | rss-feed: 'https://githubraw.com/joschi/blueskyfeedbot/main/tests/simple-template.xml' 100 | # Template of status posted to Bluesky (Handlebars) 101 | template: | 102 | {{feedData.title}}: {{item.title}} 103 | 104 | {{item.link}} 105 | # This is the Bluesky username 106 | username: ${{ secrets.BLUESKY_USERNAME }} 107 | # This is the app password you created earlier 108 | password: ${{ secrets.BLUESKY_PASSWORD }} 109 | # This is a path to the cache file, using the above cache path 110 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 111 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | release: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | contents: write 11 | pull-requests: read 12 | steps: 13 | - name: Checkout repo 14 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 15 | with: 16 | fetch-depth: 0 17 | 18 | - name: Setup Node 19 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 20 | with: 21 | node-version: 20 22 | 23 | - name: Check package version 24 | id: check 25 | uses: 'EndBug/version-check@36ff30f37c7deabe56a30caa043d127be658c425' # v2 26 | with: 27 | token: ${{ secrets.GITHUB_TOKEN }} 28 | diff-search: true 29 | 30 | - name: Create release 31 | uses: 'ncipollo/release-action@440c8c1cb0ed28b9f43e4d1d670870f059653174' # v1 32 | if: ${{ steps.check.outputs.changed == 'true' }} 33 | env: 34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 35 | with: 36 | tag: v${{ steps.check.outputs.version}} 37 | name: v${{ steps.check.outputs.version}} 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/macos,linux,windows,webstorm,yarn,diff,snyk,node,tower 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos,linux,windows,webstorm,yarn,diff,snyk,node,tower 3 | 4 | ### Diff ### 5 | *.patch 6 | *.diff 7 | 8 | ### Linux ### 9 | *~ 10 | 11 | # temporary files which can be created if a process still has a handle open of a deleted file 12 | .fuse_hidden* 13 | 14 | # KDE directory preferences 15 | .directory 16 | 17 | # Linux trash folder which might appear on any partition or disk 18 | .Trash-* 19 | 20 | # .nfs files are created when an open file is removed but is still being accessed 21 | .nfs* 22 | 23 | ### macOS ### 24 | # General 25 | .DS_Store 26 | .AppleDouble 27 | .LSOverride 28 | 29 | # Icon must end with two \r 30 | Icon 31 | 32 | 33 | # Thumbnails 34 | ._* 35 | 36 | # Files that might appear in the root of a volume 37 | .DocumentRevisions-V100 38 | .fseventsd 39 | .Spotlight-V100 40 | .TemporaryItems 41 | .Trashes 42 | .VolumeIcon.icns 43 | .com.apple.timemachine.donotpresent 44 | 45 | # Directories potentially created on remote AFP share 46 | .AppleDB 47 | .AppleDesktop 48 | Network Trash Folder 49 | Temporary Items 50 | .apdisk 51 | 52 | ### macOS Patch ### 53 | # iCloud generated files 54 | *.icloud 55 | 56 | ### Node ### 57 | # Logs 58 | logs 59 | *.log 60 | npm-debug.log* 61 | yarn-debug.log* 62 | yarn-error.log* 63 | lerna-debug.log* 64 | .pnpm-debug.log* 65 | 66 | # Diagnostic reports (https://nodejs.org/api/report.html) 67 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 68 | 69 | # Runtime data 70 | pids 71 | *.pid 72 | *.seed 73 | *.pid.lock 74 | 75 | # Directory for instrumented libs generated by jscoverage/JSCover 76 | lib-cov 77 | 78 | # Coverage directory used by tools like istanbul 79 | coverage 80 | *.lcov 81 | 82 | # nyc test coverage 83 | .nyc_output 84 | 85 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 86 | .grunt 87 | 88 | # Bower dependency directory (https://bower.io/) 89 | bower_components 90 | 91 | # node-waf configuration 92 | .lock-wscript 93 | 94 | # Compiled binary addons (https://nodejs.org/api/addons.html) 95 | build/Release 96 | 97 | # Dependency directories 98 | node_modules/ 99 | jspm_packages/ 100 | 101 | # Snowpack dependency directory (https://snowpack.dev/) 102 | web_modules/ 103 | 104 | # TypeScript cache 105 | *.tsbuildinfo 106 | 107 | # Optional npm cache directory 108 | .npm 109 | 110 | # Optional eslint cache 111 | .eslintcache 112 | 113 | # Optional stylelint cache 114 | .stylelintcache 115 | 116 | # Microbundle cache 117 | .rpt2_cache/ 118 | .rts2_cache_cjs/ 119 | .rts2_cache_es/ 120 | .rts2_cache_umd/ 121 | 122 | # Optional REPL history 123 | .node_repl_history 124 | 125 | # Output of 'npm pack' 126 | *.tgz 127 | 128 | # Yarn Integrity file 129 | .yarn-integrity 130 | 131 | # dotenv environment variable files 132 | .env 133 | .env.development.local 134 | .env.test.local 135 | .env.production.local 136 | .env.local 137 | 138 | # parcel-bundler cache (https://parceljs.org/) 139 | .cache 140 | .parcel-cache 141 | 142 | # Next.js build output 143 | .next 144 | out 145 | 146 | # Nuxt.js build / generate output 147 | .nuxt 148 | 149 | # Gatsby files 150 | .cache/ 151 | # Comment in the public line in if your project uses Gatsby and not Next.js 152 | # https://nextjs.org/blog/next-9-1#public-directory-support 153 | # public 154 | 155 | # vuepress build output 156 | .vuepress/dist 157 | 158 | # vuepress v2.x temp and cache directory 159 | .temp 160 | 161 | # Docusaurus cache and generated files 162 | .docusaurus 163 | 164 | # Serverless directories 165 | .serverless/ 166 | 167 | # FuseBox cache 168 | .fusebox/ 169 | 170 | # DynamoDB Local files 171 | .dynamodb/ 172 | 173 | # TernJS port file 174 | .tern-port 175 | 176 | # Stores VSCode versions used for testing VSCode extensions 177 | .vscode-test 178 | 179 | # yarn v2 180 | .yarn/cache 181 | .yarn/unplugged 182 | .yarn/build-state.yml 183 | .yarn/install-state.gz 184 | .pnp.* 185 | 186 | ### Node Patch ### 187 | # Serverless Webpack directories 188 | .webpack/ 189 | 190 | # Optional stylelint cache 191 | 192 | # SvelteKit build / generate output 193 | .svelte-kit 194 | 195 | ### Snyk ### 196 | # DeepCode 197 | .dccache 198 | 199 | ### Tower ### 200 | # Tower.app - http://www.git-tower.com/ 201 | Icon.png 202 | 203 | ### WebStorm ### 204 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 205 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 206 | 207 | # User-specific stuff 208 | .idea/**/workspace.xml 209 | .idea/**/tasks.xml 210 | .idea/**/usage.statistics.xml 211 | .idea/**/dictionaries 212 | .idea/**/shelf 213 | 214 | # AWS User-specific 215 | .idea/**/aws.xml 216 | 217 | # Generated files 218 | .idea/**/contentModel.xml 219 | 220 | # Sensitive or high-churn files 221 | .idea/**/dataSources/ 222 | .idea/**/dataSources.ids 223 | .idea/**/dataSources.local.xml 224 | .idea/**/sqlDataSources.xml 225 | .idea/**/dynamic.xml 226 | .idea/**/uiDesigner.xml 227 | .idea/**/dbnavigator.xml 228 | 229 | # Gradle 230 | .idea/**/gradle.xml 231 | .idea/**/libraries 232 | 233 | # Gradle and Maven with auto-import 234 | # When using Gradle or Maven with auto-import, you should exclude module files, 235 | # since they will be recreated, and may cause churn. Uncomment if using 236 | # auto-import. 237 | # .idea/artifacts 238 | # .idea/compiler.xml 239 | # .idea/jarRepositories.xml 240 | # .idea/modules.xml 241 | # .idea/*.iml 242 | # .idea/modules 243 | # *.iml 244 | # *.ipr 245 | 246 | # CMake 247 | cmake-build-*/ 248 | 249 | # Mongo Explorer plugin 250 | .idea/**/mongoSettings.xml 251 | 252 | # File-based project format 253 | *.iws 254 | 255 | # IntelliJ 256 | out/ 257 | 258 | # mpeltonen/sbt-idea plugin 259 | .idea_modules/ 260 | 261 | # JIRA plugin 262 | atlassian-ide-plugin.xml 263 | 264 | # Cursive Clojure plugin 265 | .idea/replstate.xml 266 | 267 | # SonarLint plugin 268 | .idea/sonarlint/ 269 | 270 | # Crashlytics plugin (for Android Studio and IntelliJ) 271 | com_crashlytics_export_strings.xml 272 | crashlytics.properties 273 | crashlytics-build.properties 274 | fabric.properties 275 | 276 | # Editor-based Rest Client 277 | .idea/httpRequests 278 | 279 | # Android studio 3.1+ serialized cache file 280 | .idea/caches/build_file_checksums.ser 281 | 282 | ### WebStorm Patch ### 283 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 284 | 285 | # *.iml 286 | # modules.xml 287 | # .idea/misc.xml 288 | # *.ipr 289 | 290 | # Sonarlint plugin 291 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 292 | .idea/**/sonarlint/ 293 | 294 | # SonarQube Plugin 295 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 296 | .idea/**/sonarIssues.xml 297 | 298 | # Markdown Navigator plugin 299 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 300 | .idea/**/markdown-navigator.xml 301 | .idea/**/markdown-navigator-enh.xml 302 | .idea/**/markdown-navigator/ 303 | 304 | # Cache file creation bug 305 | # See https://youtrack.jetbrains.com/issue/JBR-2257 306 | .idea/$CACHE_FILE$ 307 | 308 | # CodeStream plugin 309 | # https://plugins.jetbrains.com/plugin/12206-codestream 310 | .idea/codestream.xml 311 | 312 | # Azure Toolkit for IntelliJ plugin 313 | # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij 314 | .idea/**/azureSettings.xml 315 | 316 | ### Windows ### 317 | # Windows thumbnail cache files 318 | Thumbs.db 319 | Thumbs.db:encryptable 320 | ehthumbs.db 321 | ehthumbs_vista.db 322 | 323 | # Dump file 324 | *.stackdump 325 | 326 | # Folder config file 327 | [Dd]esktop.ini 328 | 329 | # Recycle Bin used on file shares 330 | $RECYCLE.BIN/ 331 | 332 | # Windows Installer files 333 | *.cab 334 | *.msi 335 | *.msix 336 | *.msm 337 | *.msp 338 | 339 | # Windows shortcuts 340 | *.lnk 341 | 342 | ### yarn ### 343 | # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored 344 | 345 | .yarn/* 346 | !.yarn/releases 347 | !.yarn/patches 348 | !.yarn/plugins 349 | !.yarn/sdks 350 | !.yarn/versions 351 | 352 | # if you are NOT using Zero-installs, then: 353 | # comment the following lines 354 | !.yarn/cache 355 | 356 | # and uncomment the following lines 357 | # .pnp.* 358 | 359 | # End of https://www.toptal.com/developers/gitignore/api/macos,linux,windows,webstorm,yarn,diff,snyk,node,tower 360 | 361 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/GitLink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/bots.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 17 | 18 | 26 | 27 | 30 | 31 | 38 | 39 | 46 | 47 | 54 | 55 | 60 | 61 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/jsLinters/eslint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/prettier.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": true, 7 | "trailingComma": "none", 8 | "bracketSpacing": true, 9 | "arrowParens": "avoid", 10 | "requirePragma": false, 11 | "insertPragma": false, 12 | "proseWrap": "preserve" 13 | } 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bluesky Feed Bot 2 | 3 | Bluesky Feed Bot is a GitHub Action for posting RSS feeds to Bluesky via GitHub Actions workflows. 4 | 5 | ## Usage 6 | 7 | 1. Go to https://bsky.app/settings/app-passwords and add a new app password. 8 | 9 | - Name it whatever you want. 10 | - Save it and grab the app password. 11 | For security reasons, you won't be able to view this again. 12 | If you lose this app password, you'll need to generate a new one. 13 | 14 | 2. Create a new GitHub repository. 15 | 3. Go to your repository settings at `https://github.com/${YOUR_REPO}/settings/secrets/actions/new`, and add a new 16 | secret with the value of the access token. 17 | 4. Add a file named `.github/workflows/blueskyfeedbot.yml` with the following content: 18 | 19 | ```yaml 20 | name: FeedBot 21 | on: 22 | schedule: 23 | # This will run every five minutes. Alter it using https://crontab.guru/. 24 | - cron: '*/5 * * * *' 25 | workflow_dispatch: # This allows manually running the workflow from the GitHub actions page 26 | concurrency: 27 | group: feedbot 28 | jobs: 29 | rss-to-bluesky: 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Generate cache key 33 | uses: actions/github-script@v6 34 | id: generate-key 35 | with: 36 | script: | 37 | core.setOutput('cache-key', new Date().valueOf()) 38 | - name: Retrieve cache 39 | uses: actions/cache@v3 40 | with: 41 | path: ${{ github.workspace }}/blueskyfeedbot 42 | key: feed-cache-${{ steps.generate-key.outputs.cache-key }} 43 | restore-keys: feed-cache- 44 | - name: GitHub 45 | uses: 'joschi/blueskyfeedbot@v1' 46 | with: 47 | # This is the RSS feed you want to publish 48 | rss-feed: https://www.githubstatus.com/history.rss 49 | # Template of status posted to Bluesky (Handlebars) 50 | template: | 51 | {{item.title}} 52 | 53 | {{item.link}} 54 | # This is your service URL (optional) 55 | service-url: https://bsky.social 56 | # This is the Bluesky username (example: username.bsky.social) 57 | username: ${{ secrets.BLUESKY_USERNAME }} 58 | # This is the app password you created earlier 59 | password: ${{ secrets.BLUESKY_PASSWORD }} 60 | # This is a path to the cache file, using the above cache path 61 | cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json 62 | # The maximum number of posts created on the first run 63 | initial-post-limit: 10 64 | ``` 65 | 66 | 5. Commit and publish your changes. 67 | 68 | ## Status template 69 | 70 | The status template (`status-template`) is using [Handlebars](https://handlebarsjs.com/) as template engine. 71 | 72 | The action is passing in an instance of `FeedData` (field `feedData`) and the current `FeedEntry` (field `item`) into the template: 73 | 74 | ```typescript 75 | export interface FeedEntry { 76 | link?: string; 77 | title?: string; 78 | description?: string; 79 | published?: Date; 80 | } 81 | 82 | export interface FeedData { 83 | link?: string; 84 | title?: string; 85 | description?: string; 86 | generator?: string; 87 | language?: string; 88 | published?: Date; 89 | entries?: Array; 90 | } 91 | ``` 92 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Feed to Bluesky' 2 | author: 'joschi' 3 | description: 'Push ATOM/RSS feed updates to Bluesky via GitHub Actions' 4 | branding: 5 | icon: 'rss' 6 | color: 'orange' 7 | inputs: 8 | rss-feed: 9 | description: 'RSS feed URL' 10 | required: true 11 | template: 12 | description: 'Template of status posted to Bluesky (Handlebars)' 13 | required: true 14 | default: '{{item.title}} {{item.link}}' 15 | service-url: 16 | description: 'Bluesky service URL (optional)' 17 | required: true 18 | default: 'https://bsky.social' 19 | username: 20 | description: 'Bluesky username (example: username.bsky.social)' 21 | required: true 22 | password: 23 | description: 'Bluesky app password' 24 | required: true 25 | cache-file: 26 | description: 'Cache file' 27 | required: true 28 | cache-limit: 29 | description: 'Cache limit' 30 | default: '100' 31 | initial-post-limit: 32 | description: 'The maximum number of posts created on the first run, if no cache file exists (default: unlimited)' 33 | post-limit: 34 | description: 'The maximum number of posts created per run (default: unlimited)' 35 | dry-run: 36 | description: 'Only fetch RSS feed and update cache but skip posting to Bluesky' 37 | default: 'false' 38 | disable-facets: 39 | description: 'Disable automatic detection of rich text facets' 40 | default: 'false' 41 | runs: 42 | using: 'node20' 43 | main: 'dist/index.js' 44 | -------------------------------------------------------------------------------- /dist/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@joschi/blueskyfeedbot", 3 | "version": "0.0.4", 4 | "description": "A bot to syndicate RSS to Bluesky via GitHub Actions", 5 | "author": "Jochen Schalanda ", 6 | "license": "MIT", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/joschi/blueskyfeedbot.git" 10 | }, 11 | "keywords": [ 12 | "bluesky", 13 | "bsky", 14 | "atproto", 15 | "bot", 16 | "rss" 17 | ], 18 | "bugs": { 19 | "url": "https://github.com/joschi/blueskyfeedbot/issues" 20 | }, 21 | "homepage": "https://github.com/joschi/blueskyfeedbot#readme", 22 | "type": "module", 23 | "main": "dist/index.js", 24 | "scripts": { 25 | "build": "node esbuild.js" 26 | }, 27 | "devDependencies": { 28 | "@types/feedparser": "^2.2.5", 29 | "@types/node": "^20.0.0", 30 | "@typescript-eslint/eslint-plugin": "^8.0.0", 31 | "@typescript-eslint/parser": "^8.0.0", 32 | "esbuild": "^0.25.0", 33 | "esbuild-plugin-clean": "^1.0.1", 34 | "esbuild-plugin-copy-file": "^0.0.2", 35 | "esbuild-plugin-fileloc": "^0.0.6", 36 | "eslint": "^8.30.0", 37 | "eslint-config-prettier": "^10.0.0", 38 | "eslint-config-standard": "^17.0.0", 39 | "prettier": "^3.0.0", 40 | "typescript": "^5.0.0" 41 | }, 42 | "dependencies": { 43 | "@actions/core": "^1.10.0", 44 | "@atproto/api": "^0.14.0", 45 | "@extractus/feed-extractor": "^7.0.0", 46 | "handlebars": "^4.7.7", 47 | "mkdirp": "^3.0.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | import fileloc from 'esbuild-plugin-fileloc'; 2 | import { clean } from 'esbuild-plugin-clean'; 3 | import copyFilePlugin from 'esbuild-plugin-copy-file'; 4 | import esbuild from 'esbuild'; 5 | 6 | const banner = ` 7 | import {createRequire} from 'module'; 8 | const require = createRequire(import.meta.url); 9 | `; 10 | 11 | esbuild 12 | .build({ 13 | entryPoints: ['./src/index.ts'], 14 | platform: 'node', 15 | target: 'node20', 16 | bundle: true, 17 | plugins: [ 18 | clean({ 19 | patterns: ['./dist/*'] 20 | }), 21 | fileloc.filelocPlugin(), 22 | copyFilePlugin({ 23 | after: { 24 | './dist/package.json': './package.json' 25 | } 26 | }) 27 | ], 28 | loader: { 29 | '.ts': 'ts', 30 | '.js': 'js', 31 | '.cjs': 'js' 32 | }, 33 | outdir: 'dist', 34 | external: ['package.json'], 35 | minify: true, 36 | sourcemap: true, 37 | format: 'esm', 38 | banner: { 39 | js: banner 40 | } 41 | }) 42 | .catch(error => { 43 | console.error(error.message); 44 | process.exit(1); 45 | }); 46 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@joschi/blueskyfeedbot", 3 | "version": "0.0.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@joschi/blueskyfeedbot", 9 | "version": "0.0.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@actions/core": "^1.10.0", 13 | "@atproto/api": "^0.14.0", 14 | "@extractus/feed-extractor": "^7.0.0", 15 | "handlebars": "^4.7.7", 16 | "mkdirp": "^3.0.0" 17 | }, 18 | "devDependencies": { 19 | "@types/feedparser": "^2.2.5", 20 | "@types/node": "^20.0.0", 21 | "@typescript-eslint/eslint-plugin": "^8.0.0", 22 | "@typescript-eslint/parser": "^8.0.0", 23 | "esbuild": "^0.25.0", 24 | "esbuild-plugin-clean": "^1.0.1", 25 | "esbuild-plugin-copy-file": "^0.0.2", 26 | "esbuild-plugin-fileloc": "^0.0.6", 27 | "eslint": "^8.30.0", 28 | "eslint-config-prettier": "^10.0.0", 29 | "eslint-config-standard": "^17.0.0", 30 | "prettier": "^3.0.0", 31 | "typescript": "^5.0.0" 32 | } 33 | }, 34 | "node_modules/@aashutoshrathi/word-wrap": { 35 | "version": "1.2.6", 36 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 37 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 38 | "dev": true, 39 | "engines": { 40 | "node": ">=0.10.0" 41 | } 42 | }, 43 | "node_modules/@actions/core": { 44 | "version": "1.11.1", 45 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", 46 | "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", 47 | "license": "MIT", 48 | "dependencies": { 49 | "@actions/exec": "^1.1.1", 50 | "@actions/http-client": "^2.0.1" 51 | } 52 | }, 53 | "node_modules/@actions/exec": { 54 | "version": "1.1.1", 55 | "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", 56 | "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", 57 | "license": "MIT", 58 | "dependencies": { 59 | "@actions/io": "^1.0.1" 60 | } 61 | }, 62 | "node_modules/@actions/http-client": { 63 | "version": "2.0.1", 64 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", 65 | "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", 66 | "dependencies": { 67 | "tunnel": "^0.0.6" 68 | } 69 | }, 70 | "node_modules/@actions/io": { 71 | "version": "1.1.3", 72 | "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", 73 | "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", 74 | "license": "MIT" 75 | }, 76 | "node_modules/@atproto/api": { 77 | "version": "0.14.1", 78 | "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.14.1.tgz", 79 | "integrity": "sha512-e7QB39RgbMY6VxoLLVtQUzzgJeFBLNx1WulkVWFqduUDrxHdD8GDDOPZWmVZrwXcqhU57tfrEwzxPFRcsJJHuQ==", 80 | "license": "MIT", 81 | "dependencies": { 82 | "@atproto/common-web": "^0.4.0", 83 | "@atproto/lexicon": "^0.4.7", 84 | "@atproto/syntax": "^0.3.3", 85 | "@atproto/xrpc": "^0.6.9", 86 | "await-lock": "^2.2.2", 87 | "multiformats": "^9.9.0", 88 | "tlds": "^1.234.0", 89 | "zod": "^3.23.8" 90 | } 91 | }, 92 | "node_modules/@atproto/common-web": { 93 | "version": "0.4.0", 94 | "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.0.tgz", 95 | "integrity": "sha512-ZYL0P9myHybNgwh/hBY0HaBzqiLR1B5/ie5bJpLQAg0whRzNA28t8/nU2vh99tbsWcAF0LOD29M8++LyENJLNQ==", 96 | "license": "MIT", 97 | "dependencies": { 98 | "graphemer": "^1.4.0", 99 | "multiformats": "^9.9.0", 100 | "uint8arrays": "3.0.0", 101 | "zod": "^3.23.8" 102 | } 103 | }, 104 | "node_modules/@atproto/lexicon": { 105 | "version": "0.4.7", 106 | "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.7.tgz", 107 | "integrity": "sha512-/x6h3tAiDNzSi4eXtC8ke65B7UzsagtlGRHmUD95698x5lBRpDnpizj0fZWTZVYed5qnOmz/ZEue+v3wDmO61g==", 108 | "license": "MIT", 109 | "dependencies": { 110 | "@atproto/common-web": "^0.4.0", 111 | "@atproto/syntax": "^0.3.3", 112 | "iso-datestring-validator": "^2.2.2", 113 | "multiformats": "^9.9.0", 114 | "zod": "^3.23.8" 115 | } 116 | }, 117 | "node_modules/@atproto/syntax": { 118 | "version": "0.3.3", 119 | "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.3.tgz", 120 | "integrity": "sha512-F1LZweesNYdBbZBXVa72N/cSvchG8Q1tG4/209ZXbIuM3FwQtkgn+zgmmV4P4ORmhOeXPBNXvMBpcqiwx/gEQQ==", 121 | "license": "MIT" 122 | }, 123 | "node_modules/@atproto/xrpc": { 124 | "version": "0.6.9", 125 | "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.9.tgz", 126 | "integrity": "sha512-vQGA7++DYMNaHx3C7vEjT+2X6hYYLG7JNbBnDLWu0km1/1KYXgRkAz4h+FfYqg1mvzvIorHU7DAs5wevkJDDlw==", 127 | "license": "MIT", 128 | "dependencies": { 129 | "@atproto/lexicon": "^0.4.7", 130 | "zod": "^3.23.8" 131 | } 132 | }, 133 | "node_modules/@esbuild/aix-ppc64": { 134 | "version": "0.25.0", 135 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", 136 | "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", 137 | "cpu": [ 138 | "ppc64" 139 | ], 140 | "dev": true, 141 | "license": "MIT", 142 | "optional": true, 143 | "os": [ 144 | "aix" 145 | ], 146 | "engines": { 147 | "node": ">=18" 148 | } 149 | }, 150 | "node_modules/@esbuild/android-arm": { 151 | "version": "0.25.0", 152 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", 153 | "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", 154 | "cpu": [ 155 | "arm" 156 | ], 157 | "dev": true, 158 | "license": "MIT", 159 | "optional": true, 160 | "os": [ 161 | "android" 162 | ], 163 | "engines": { 164 | "node": ">=18" 165 | } 166 | }, 167 | "node_modules/@esbuild/android-arm64": { 168 | "version": "0.25.0", 169 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", 170 | "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", 171 | "cpu": [ 172 | "arm64" 173 | ], 174 | "dev": true, 175 | "license": "MIT", 176 | "optional": true, 177 | "os": [ 178 | "android" 179 | ], 180 | "engines": { 181 | "node": ">=18" 182 | } 183 | }, 184 | "node_modules/@esbuild/android-x64": { 185 | "version": "0.25.0", 186 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", 187 | "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", 188 | "cpu": [ 189 | "x64" 190 | ], 191 | "dev": true, 192 | "license": "MIT", 193 | "optional": true, 194 | "os": [ 195 | "android" 196 | ], 197 | "engines": { 198 | "node": ">=18" 199 | } 200 | }, 201 | "node_modules/@esbuild/darwin-arm64": { 202 | "version": "0.25.0", 203 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", 204 | "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", 205 | "cpu": [ 206 | "arm64" 207 | ], 208 | "dev": true, 209 | "license": "MIT", 210 | "optional": true, 211 | "os": [ 212 | "darwin" 213 | ], 214 | "engines": { 215 | "node": ">=18" 216 | } 217 | }, 218 | "node_modules/@esbuild/darwin-x64": { 219 | "version": "0.25.0", 220 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", 221 | "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", 222 | "cpu": [ 223 | "x64" 224 | ], 225 | "dev": true, 226 | "license": "MIT", 227 | "optional": true, 228 | "os": [ 229 | "darwin" 230 | ], 231 | "engines": { 232 | "node": ">=18" 233 | } 234 | }, 235 | "node_modules/@esbuild/freebsd-arm64": { 236 | "version": "0.25.0", 237 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", 238 | "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", 239 | "cpu": [ 240 | "arm64" 241 | ], 242 | "dev": true, 243 | "license": "MIT", 244 | "optional": true, 245 | "os": [ 246 | "freebsd" 247 | ], 248 | "engines": { 249 | "node": ">=18" 250 | } 251 | }, 252 | "node_modules/@esbuild/freebsd-x64": { 253 | "version": "0.25.0", 254 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", 255 | "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", 256 | "cpu": [ 257 | "x64" 258 | ], 259 | "dev": true, 260 | "license": "MIT", 261 | "optional": true, 262 | "os": [ 263 | "freebsd" 264 | ], 265 | "engines": { 266 | "node": ">=18" 267 | } 268 | }, 269 | "node_modules/@esbuild/linux-arm": { 270 | "version": "0.25.0", 271 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", 272 | "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", 273 | "cpu": [ 274 | "arm" 275 | ], 276 | "dev": true, 277 | "license": "MIT", 278 | "optional": true, 279 | "os": [ 280 | "linux" 281 | ], 282 | "engines": { 283 | "node": ">=18" 284 | } 285 | }, 286 | "node_modules/@esbuild/linux-arm64": { 287 | "version": "0.25.0", 288 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", 289 | "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", 290 | "cpu": [ 291 | "arm64" 292 | ], 293 | "dev": true, 294 | "license": "MIT", 295 | "optional": true, 296 | "os": [ 297 | "linux" 298 | ], 299 | "engines": { 300 | "node": ">=18" 301 | } 302 | }, 303 | "node_modules/@esbuild/linux-ia32": { 304 | "version": "0.25.0", 305 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", 306 | "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", 307 | "cpu": [ 308 | "ia32" 309 | ], 310 | "dev": true, 311 | "license": "MIT", 312 | "optional": true, 313 | "os": [ 314 | "linux" 315 | ], 316 | "engines": { 317 | "node": ">=18" 318 | } 319 | }, 320 | "node_modules/@esbuild/linux-loong64": { 321 | "version": "0.25.0", 322 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", 323 | "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", 324 | "cpu": [ 325 | "loong64" 326 | ], 327 | "dev": true, 328 | "license": "MIT", 329 | "optional": true, 330 | "os": [ 331 | "linux" 332 | ], 333 | "engines": { 334 | "node": ">=18" 335 | } 336 | }, 337 | "node_modules/@esbuild/linux-mips64el": { 338 | "version": "0.25.0", 339 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", 340 | "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", 341 | "cpu": [ 342 | "mips64el" 343 | ], 344 | "dev": true, 345 | "license": "MIT", 346 | "optional": true, 347 | "os": [ 348 | "linux" 349 | ], 350 | "engines": { 351 | "node": ">=18" 352 | } 353 | }, 354 | "node_modules/@esbuild/linux-ppc64": { 355 | "version": "0.25.0", 356 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", 357 | "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", 358 | "cpu": [ 359 | "ppc64" 360 | ], 361 | "dev": true, 362 | "license": "MIT", 363 | "optional": true, 364 | "os": [ 365 | "linux" 366 | ], 367 | "engines": { 368 | "node": ">=18" 369 | } 370 | }, 371 | "node_modules/@esbuild/linux-riscv64": { 372 | "version": "0.25.0", 373 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", 374 | "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", 375 | "cpu": [ 376 | "riscv64" 377 | ], 378 | "dev": true, 379 | "license": "MIT", 380 | "optional": true, 381 | "os": [ 382 | "linux" 383 | ], 384 | "engines": { 385 | "node": ">=18" 386 | } 387 | }, 388 | "node_modules/@esbuild/linux-s390x": { 389 | "version": "0.25.0", 390 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", 391 | "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", 392 | "cpu": [ 393 | "s390x" 394 | ], 395 | "dev": true, 396 | "license": "MIT", 397 | "optional": true, 398 | "os": [ 399 | "linux" 400 | ], 401 | "engines": { 402 | "node": ">=18" 403 | } 404 | }, 405 | "node_modules/@esbuild/linux-x64": { 406 | "version": "0.25.0", 407 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", 408 | "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", 409 | "cpu": [ 410 | "x64" 411 | ], 412 | "dev": true, 413 | "license": "MIT", 414 | "optional": true, 415 | "os": [ 416 | "linux" 417 | ], 418 | "engines": { 419 | "node": ">=18" 420 | } 421 | }, 422 | "node_modules/@esbuild/netbsd-arm64": { 423 | "version": "0.25.0", 424 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", 425 | "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", 426 | "cpu": [ 427 | "arm64" 428 | ], 429 | "dev": true, 430 | "license": "MIT", 431 | "optional": true, 432 | "os": [ 433 | "netbsd" 434 | ], 435 | "engines": { 436 | "node": ">=18" 437 | } 438 | }, 439 | "node_modules/@esbuild/netbsd-x64": { 440 | "version": "0.25.0", 441 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", 442 | "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", 443 | "cpu": [ 444 | "x64" 445 | ], 446 | "dev": true, 447 | "license": "MIT", 448 | "optional": true, 449 | "os": [ 450 | "netbsd" 451 | ], 452 | "engines": { 453 | "node": ">=18" 454 | } 455 | }, 456 | "node_modules/@esbuild/openbsd-arm64": { 457 | "version": "0.25.0", 458 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", 459 | "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", 460 | "cpu": [ 461 | "arm64" 462 | ], 463 | "dev": true, 464 | "license": "MIT", 465 | "optional": true, 466 | "os": [ 467 | "openbsd" 468 | ], 469 | "engines": { 470 | "node": ">=18" 471 | } 472 | }, 473 | "node_modules/@esbuild/openbsd-x64": { 474 | "version": "0.25.0", 475 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", 476 | "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", 477 | "cpu": [ 478 | "x64" 479 | ], 480 | "dev": true, 481 | "license": "MIT", 482 | "optional": true, 483 | "os": [ 484 | "openbsd" 485 | ], 486 | "engines": { 487 | "node": ">=18" 488 | } 489 | }, 490 | "node_modules/@esbuild/sunos-x64": { 491 | "version": "0.25.0", 492 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", 493 | "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", 494 | "cpu": [ 495 | "x64" 496 | ], 497 | "dev": true, 498 | "license": "MIT", 499 | "optional": true, 500 | "os": [ 501 | "sunos" 502 | ], 503 | "engines": { 504 | "node": ">=18" 505 | } 506 | }, 507 | "node_modules/@esbuild/win32-arm64": { 508 | "version": "0.25.0", 509 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", 510 | "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", 511 | "cpu": [ 512 | "arm64" 513 | ], 514 | "dev": true, 515 | "license": "MIT", 516 | "optional": true, 517 | "os": [ 518 | "win32" 519 | ], 520 | "engines": { 521 | "node": ">=18" 522 | } 523 | }, 524 | "node_modules/@esbuild/win32-ia32": { 525 | "version": "0.25.0", 526 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", 527 | "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", 528 | "cpu": [ 529 | "ia32" 530 | ], 531 | "dev": true, 532 | "license": "MIT", 533 | "optional": true, 534 | "os": [ 535 | "win32" 536 | ], 537 | "engines": { 538 | "node": ">=18" 539 | } 540 | }, 541 | "node_modules/@esbuild/win32-x64": { 542 | "version": "0.25.0", 543 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", 544 | "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", 545 | "cpu": [ 546 | "x64" 547 | ], 548 | "dev": true, 549 | "license": "MIT", 550 | "optional": true, 551 | "os": [ 552 | "win32" 553 | ], 554 | "engines": { 555 | "node": ">=18" 556 | } 557 | }, 558 | "node_modules/@eslint-community/eslint-utils": { 559 | "version": "4.7.0", 560 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", 561 | "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", 562 | "dev": true, 563 | "license": "MIT", 564 | "dependencies": { 565 | "eslint-visitor-keys": "^3.4.3" 566 | }, 567 | "engines": { 568 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 569 | }, 570 | "funding": { 571 | "url": "https://opencollective.com/eslint" 572 | }, 573 | "peerDependencies": { 574 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 575 | } 576 | }, 577 | "node_modules/@eslint-community/regexpp": { 578 | "version": "4.10.0", 579 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 580 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 581 | "dev": true, 582 | "engines": { 583 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 584 | } 585 | }, 586 | "node_modules/@eslint/eslintrc": { 587 | "version": "2.1.4", 588 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 589 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 590 | "dev": true, 591 | "dependencies": { 592 | "ajv": "^6.12.4", 593 | "debug": "^4.3.2", 594 | "espree": "^9.6.0", 595 | "globals": "^13.19.0", 596 | "ignore": "^5.2.0", 597 | "import-fresh": "^3.2.1", 598 | "js-yaml": "^4.1.0", 599 | "minimatch": "^3.1.2", 600 | "strip-json-comments": "^3.1.1" 601 | }, 602 | "engines": { 603 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 604 | }, 605 | "funding": { 606 | "url": "https://opencollective.com/eslint" 607 | } 608 | }, 609 | "node_modules/@eslint/js": { 610 | "version": "8.57.1", 611 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", 612 | "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", 613 | "dev": true, 614 | "license": "MIT", 615 | "engines": { 616 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 617 | } 618 | }, 619 | "node_modules/@extractus/feed-extractor": { 620 | "version": "7.1.4", 621 | "resolved": "https://registry.npmjs.org/@extractus/feed-extractor/-/feed-extractor-7.1.4.tgz", 622 | "integrity": "sha512-DyB0WXKAX2TAa8Wsv/6GUbMWveUOF1WI2qQTJIhs49P0VKQ7PUoUB08RNZo/8Emc/9ZLvtRGGe4LkpgxjzdqYg==", 623 | "license": "MIT", 624 | "dependencies": { 625 | "bellajs": "^11.2.0", 626 | "cross-fetch": "^4.1.0", 627 | "fast-xml-parser": "^4.5.1", 628 | "html-entities": "^2.5.2" 629 | }, 630 | "engines": { 631 | "node": ">= 18" 632 | } 633 | }, 634 | "node_modules/@humanwhocodes/config-array": { 635 | "version": "0.13.0", 636 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", 637 | "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", 638 | "deprecated": "Use @eslint/config-array instead", 639 | "dev": true, 640 | "license": "Apache-2.0", 641 | "dependencies": { 642 | "@humanwhocodes/object-schema": "^2.0.3", 643 | "debug": "^4.3.1", 644 | "minimatch": "^3.0.5" 645 | }, 646 | "engines": { 647 | "node": ">=10.10.0" 648 | } 649 | }, 650 | "node_modules/@humanwhocodes/module-importer": { 651 | "version": "1.0.1", 652 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 653 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 654 | "dev": true, 655 | "engines": { 656 | "node": ">=12.22" 657 | }, 658 | "funding": { 659 | "type": "github", 660 | "url": "https://github.com/sponsors/nzakas" 661 | } 662 | }, 663 | "node_modules/@humanwhocodes/object-schema": { 664 | "version": "2.0.3", 665 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", 666 | "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 667 | "deprecated": "Use @eslint/object-schema instead", 668 | "dev": true, 669 | "license": "BSD-3-Clause" 670 | }, 671 | "node_modules/@nodelib/fs.scandir": { 672 | "version": "2.1.5", 673 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 674 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 675 | "dev": true, 676 | "dependencies": { 677 | "@nodelib/fs.stat": "2.0.5", 678 | "run-parallel": "^1.1.9" 679 | }, 680 | "engines": { 681 | "node": ">= 8" 682 | } 683 | }, 684 | "node_modules/@nodelib/fs.stat": { 685 | "version": "2.0.5", 686 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 687 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 688 | "dev": true, 689 | "engines": { 690 | "node": ">= 8" 691 | } 692 | }, 693 | "node_modules/@nodelib/fs.walk": { 694 | "version": "1.2.8", 695 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 696 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 697 | "dev": true, 698 | "dependencies": { 699 | "@nodelib/fs.scandir": "2.1.5", 700 | "fastq": "^1.6.0" 701 | }, 702 | "engines": { 703 | "node": ">= 8" 704 | } 705 | }, 706 | "node_modules/@types/feedparser": { 707 | "version": "2.2.8", 708 | "resolved": "https://registry.npmjs.org/@types/feedparser/-/feedparser-2.2.8.tgz", 709 | "integrity": "sha512-hIxDfr1VSgxZazxZZEGzbgDEQHtxWtMjLh7xAzuld/IA8xmneak9I16R0mA7Tnb10/McjE177H9daAyYBwTQOw==", 710 | "dev": true, 711 | "dependencies": { 712 | "@types/node": "*", 713 | "@types/sax": "*" 714 | } 715 | }, 716 | "node_modules/@types/json5": { 717 | "version": "0.0.29", 718 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 719 | "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 720 | "dev": true, 721 | "peer": true 722 | }, 723 | "node_modules/@types/node": { 724 | "version": "20.17.57", 725 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.57.tgz", 726 | "integrity": "sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==", 727 | "dev": true, 728 | "license": "MIT", 729 | "dependencies": { 730 | "undici-types": "~6.19.2" 731 | } 732 | }, 733 | "node_modules/@types/sax": { 734 | "version": "1.2.4", 735 | "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", 736 | "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", 737 | "dev": true, 738 | "dependencies": { 739 | "@types/node": "*" 740 | } 741 | }, 742 | "node_modules/@typescript-eslint/eslint-plugin": { 743 | "version": "8.33.0", 744 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", 745 | "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", 746 | "dev": true, 747 | "license": "MIT", 748 | "dependencies": { 749 | "@eslint-community/regexpp": "^4.10.0", 750 | "@typescript-eslint/scope-manager": "8.33.0", 751 | "@typescript-eslint/type-utils": "8.33.0", 752 | "@typescript-eslint/utils": "8.33.0", 753 | "@typescript-eslint/visitor-keys": "8.33.0", 754 | "graphemer": "^1.4.0", 755 | "ignore": "^7.0.0", 756 | "natural-compare": "^1.4.0", 757 | "ts-api-utils": "^2.1.0" 758 | }, 759 | "engines": { 760 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 761 | }, 762 | "funding": { 763 | "type": "opencollective", 764 | "url": "https://opencollective.com/typescript-eslint" 765 | }, 766 | "peerDependencies": { 767 | "@typescript-eslint/parser": "^8.33.0", 768 | "eslint": "^8.57.0 || ^9.0.0", 769 | "typescript": ">=4.8.4 <5.9.0" 770 | } 771 | }, 772 | "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 773 | "version": "7.0.4", 774 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", 775 | "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", 776 | "dev": true, 777 | "license": "MIT", 778 | "engines": { 779 | "node": ">= 4" 780 | } 781 | }, 782 | "node_modules/@typescript-eslint/parser": { 783 | "version": "8.33.0", 784 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", 785 | "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", 786 | "dev": true, 787 | "license": "MIT", 788 | "dependencies": { 789 | "@typescript-eslint/scope-manager": "8.33.0", 790 | "@typescript-eslint/types": "8.33.0", 791 | "@typescript-eslint/typescript-estree": "8.33.0", 792 | "@typescript-eslint/visitor-keys": "8.33.0", 793 | "debug": "^4.3.4" 794 | }, 795 | "engines": { 796 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 797 | }, 798 | "funding": { 799 | "type": "opencollective", 800 | "url": "https://opencollective.com/typescript-eslint" 801 | }, 802 | "peerDependencies": { 803 | "eslint": "^8.57.0 || ^9.0.0", 804 | "typescript": ">=4.8.4 <5.9.0" 805 | } 806 | }, 807 | "node_modules/@typescript-eslint/project-service": { 808 | "version": "8.33.0", 809 | "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", 810 | "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", 811 | "dev": true, 812 | "license": "MIT", 813 | "dependencies": { 814 | "@typescript-eslint/tsconfig-utils": "^8.33.0", 815 | "@typescript-eslint/types": "^8.33.0", 816 | "debug": "^4.3.4" 817 | }, 818 | "engines": { 819 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 820 | }, 821 | "funding": { 822 | "type": "opencollective", 823 | "url": "https://opencollective.com/typescript-eslint" 824 | } 825 | }, 826 | "node_modules/@typescript-eslint/scope-manager": { 827 | "version": "8.33.0", 828 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", 829 | "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", 830 | "dev": true, 831 | "license": "MIT", 832 | "dependencies": { 833 | "@typescript-eslint/types": "8.33.0", 834 | "@typescript-eslint/visitor-keys": "8.33.0" 835 | }, 836 | "engines": { 837 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 838 | }, 839 | "funding": { 840 | "type": "opencollective", 841 | "url": "https://opencollective.com/typescript-eslint" 842 | } 843 | }, 844 | "node_modules/@typescript-eslint/tsconfig-utils": { 845 | "version": "8.33.0", 846 | "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", 847 | "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", 848 | "dev": true, 849 | "license": "MIT", 850 | "engines": { 851 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 852 | }, 853 | "funding": { 854 | "type": "opencollective", 855 | "url": "https://opencollective.com/typescript-eslint" 856 | }, 857 | "peerDependencies": { 858 | "typescript": ">=4.8.4 <5.9.0" 859 | } 860 | }, 861 | "node_modules/@typescript-eslint/type-utils": { 862 | "version": "8.33.0", 863 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", 864 | "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", 865 | "dev": true, 866 | "license": "MIT", 867 | "dependencies": { 868 | "@typescript-eslint/typescript-estree": "8.33.0", 869 | "@typescript-eslint/utils": "8.33.0", 870 | "debug": "^4.3.4", 871 | "ts-api-utils": "^2.1.0" 872 | }, 873 | "engines": { 874 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 875 | }, 876 | "funding": { 877 | "type": "opencollective", 878 | "url": "https://opencollective.com/typescript-eslint" 879 | }, 880 | "peerDependencies": { 881 | "eslint": "^8.57.0 || ^9.0.0", 882 | "typescript": ">=4.8.4 <5.9.0" 883 | } 884 | }, 885 | "node_modules/@typescript-eslint/types": { 886 | "version": "8.33.0", 887 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", 888 | "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", 889 | "dev": true, 890 | "license": "MIT", 891 | "engines": { 892 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 893 | }, 894 | "funding": { 895 | "type": "opencollective", 896 | "url": "https://opencollective.com/typescript-eslint" 897 | } 898 | }, 899 | "node_modules/@typescript-eslint/typescript-estree": { 900 | "version": "8.33.0", 901 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", 902 | "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", 903 | "dev": true, 904 | "license": "MIT", 905 | "dependencies": { 906 | "@typescript-eslint/project-service": "8.33.0", 907 | "@typescript-eslint/tsconfig-utils": "8.33.0", 908 | "@typescript-eslint/types": "8.33.0", 909 | "@typescript-eslint/visitor-keys": "8.33.0", 910 | "debug": "^4.3.4", 911 | "fast-glob": "^3.3.2", 912 | "is-glob": "^4.0.3", 913 | "minimatch": "^9.0.4", 914 | "semver": "^7.6.0", 915 | "ts-api-utils": "^2.1.0" 916 | }, 917 | "engines": { 918 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 919 | }, 920 | "funding": { 921 | "type": "opencollective", 922 | "url": "https://opencollective.com/typescript-eslint" 923 | }, 924 | "peerDependencies": { 925 | "typescript": ">=4.8.4 <5.9.0" 926 | } 927 | }, 928 | "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 929 | "version": "2.0.1", 930 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 931 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 932 | "dev": true, 933 | "license": "MIT", 934 | "dependencies": { 935 | "balanced-match": "^1.0.0" 936 | } 937 | }, 938 | "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 939 | "version": "9.0.5", 940 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 941 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 942 | "dev": true, 943 | "license": "ISC", 944 | "dependencies": { 945 | "brace-expansion": "^2.0.1" 946 | }, 947 | "engines": { 948 | "node": ">=16 || 14 >=14.17" 949 | }, 950 | "funding": { 951 | "url": "https://github.com/sponsors/isaacs" 952 | } 953 | }, 954 | "node_modules/@typescript-eslint/utils": { 955 | "version": "8.33.0", 956 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", 957 | "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", 958 | "dev": true, 959 | "license": "MIT", 960 | "dependencies": { 961 | "@eslint-community/eslint-utils": "^4.7.0", 962 | "@typescript-eslint/scope-manager": "8.33.0", 963 | "@typescript-eslint/types": "8.33.0", 964 | "@typescript-eslint/typescript-estree": "8.33.0" 965 | }, 966 | "engines": { 967 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 968 | }, 969 | "funding": { 970 | "type": "opencollective", 971 | "url": "https://opencollective.com/typescript-eslint" 972 | }, 973 | "peerDependencies": { 974 | "eslint": "^8.57.0 || ^9.0.0", 975 | "typescript": ">=4.8.4 <5.9.0" 976 | } 977 | }, 978 | "node_modules/@typescript-eslint/visitor-keys": { 979 | "version": "8.33.0", 980 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", 981 | "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", 982 | "dev": true, 983 | "license": "MIT", 984 | "dependencies": { 985 | "@typescript-eslint/types": "8.33.0", 986 | "eslint-visitor-keys": "^4.2.0" 987 | }, 988 | "engines": { 989 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 990 | }, 991 | "funding": { 992 | "type": "opencollective", 993 | "url": "https://opencollective.com/typescript-eslint" 994 | } 995 | }, 996 | "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 997 | "version": "4.2.0", 998 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 999 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1000 | "dev": true, 1001 | "license": "Apache-2.0", 1002 | "engines": { 1003 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1004 | }, 1005 | "funding": { 1006 | "url": "https://opencollective.com/eslint" 1007 | } 1008 | }, 1009 | "node_modules/@ungap/structured-clone": { 1010 | "version": "1.2.0", 1011 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 1012 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 1013 | "dev": true 1014 | }, 1015 | "node_modules/acorn": { 1016 | "version": "8.10.0", 1017 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 1018 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 1019 | "dev": true, 1020 | "bin": { 1021 | "acorn": "bin/acorn" 1022 | }, 1023 | "engines": { 1024 | "node": ">=0.4.0" 1025 | } 1026 | }, 1027 | "node_modules/acorn-jsx": { 1028 | "version": "5.3.2", 1029 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1030 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1031 | "dev": true, 1032 | "peerDependencies": { 1033 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1034 | } 1035 | }, 1036 | "node_modules/aggregate-error": { 1037 | "version": "3.1.0", 1038 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 1039 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 1040 | "dev": true, 1041 | "dependencies": { 1042 | "clean-stack": "^2.0.0", 1043 | "indent-string": "^4.0.0" 1044 | }, 1045 | "engines": { 1046 | "node": ">=8" 1047 | } 1048 | }, 1049 | "node_modules/ajv": { 1050 | "version": "6.12.6", 1051 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1052 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1053 | "dev": true, 1054 | "dependencies": { 1055 | "fast-deep-equal": "^3.1.1", 1056 | "fast-json-stable-stringify": "^2.0.0", 1057 | "json-schema-traverse": "^0.4.1", 1058 | "uri-js": "^4.2.2" 1059 | }, 1060 | "funding": { 1061 | "type": "github", 1062 | "url": "https://github.com/sponsors/epoberezkin" 1063 | } 1064 | }, 1065 | "node_modules/ansi-regex": { 1066 | "version": "5.0.1", 1067 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1068 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1069 | "dev": true, 1070 | "engines": { 1071 | "node": ">=8" 1072 | } 1073 | }, 1074 | "node_modules/ansi-styles": { 1075 | "version": "4.3.0", 1076 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1077 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1078 | "dev": true, 1079 | "dependencies": { 1080 | "color-convert": "^2.0.1" 1081 | }, 1082 | "engines": { 1083 | "node": ">=8" 1084 | }, 1085 | "funding": { 1086 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1087 | } 1088 | }, 1089 | "node_modules/argparse": { 1090 | "version": "2.0.1", 1091 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1092 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1093 | "dev": true 1094 | }, 1095 | "node_modules/array-includes": { 1096 | "version": "3.1.6", 1097 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", 1098 | "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", 1099 | "dev": true, 1100 | "peer": true, 1101 | "dependencies": { 1102 | "call-bind": "^1.0.2", 1103 | "define-properties": "^1.1.4", 1104 | "es-abstract": "^1.20.4", 1105 | "get-intrinsic": "^1.1.3", 1106 | "is-string": "^1.0.7" 1107 | }, 1108 | "engines": { 1109 | "node": ">= 0.4" 1110 | }, 1111 | "funding": { 1112 | "url": "https://github.com/sponsors/ljharb" 1113 | } 1114 | }, 1115 | "node_modules/array-union": { 1116 | "version": "2.1.0", 1117 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1118 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1119 | "dev": true, 1120 | "engines": { 1121 | "node": ">=8" 1122 | } 1123 | }, 1124 | "node_modules/array.prototype.flat": { 1125 | "version": "1.3.1", 1126 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", 1127 | "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", 1128 | "dev": true, 1129 | "peer": true, 1130 | "dependencies": { 1131 | "call-bind": "^1.0.2", 1132 | "define-properties": "^1.1.4", 1133 | "es-abstract": "^1.20.4", 1134 | "es-shim-unscopables": "^1.0.0" 1135 | }, 1136 | "engines": { 1137 | "node": ">= 0.4" 1138 | }, 1139 | "funding": { 1140 | "url": "https://github.com/sponsors/ljharb" 1141 | } 1142 | }, 1143 | "node_modules/at-least-node": { 1144 | "version": "1.0.0", 1145 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 1146 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 1147 | "dev": true, 1148 | "engines": { 1149 | "node": ">= 4.0.0" 1150 | } 1151 | }, 1152 | "node_modules/await-lock": { 1153 | "version": "2.2.2", 1154 | "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz", 1155 | "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==", 1156 | "license": "MIT" 1157 | }, 1158 | "node_modules/balanced-match": { 1159 | "version": "1.0.2", 1160 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1161 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1162 | "dev": true 1163 | }, 1164 | "node_modules/bellajs": { 1165 | "version": "11.2.0", 1166 | "resolved": "https://registry.npmjs.org/bellajs/-/bellajs-11.2.0.tgz", 1167 | "integrity": "sha512-Wjss+Bc674ZABPr+SCKWTqA4V1pyYFhzDTjNBJy4jdmgOv0oGIGXeKBRJyINwP5tIy+iIZD9SfgZpztduzQ5QA==", 1168 | "license": "MIT", 1169 | "engines": { 1170 | "node": ">= 18.4" 1171 | } 1172 | }, 1173 | "node_modules/brace-expansion": { 1174 | "version": "1.1.11", 1175 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1176 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1177 | "dev": true, 1178 | "dependencies": { 1179 | "balanced-match": "^1.0.0", 1180 | "concat-map": "0.0.1" 1181 | } 1182 | }, 1183 | "node_modules/braces": { 1184 | "version": "3.0.3", 1185 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1186 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1187 | "dev": true, 1188 | "license": "MIT", 1189 | "dependencies": { 1190 | "fill-range": "^7.1.1" 1191 | }, 1192 | "engines": { 1193 | "node": ">=8" 1194 | } 1195 | }, 1196 | "node_modules/builtins": { 1197 | "version": "5.0.1", 1198 | "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", 1199 | "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", 1200 | "dev": true, 1201 | "peer": true, 1202 | "dependencies": { 1203 | "semver": "^7.0.0" 1204 | } 1205 | }, 1206 | "node_modules/call-bind": { 1207 | "version": "1.0.2", 1208 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1209 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1210 | "dev": true, 1211 | "peer": true, 1212 | "dependencies": { 1213 | "function-bind": "^1.1.1", 1214 | "get-intrinsic": "^1.0.2" 1215 | }, 1216 | "funding": { 1217 | "url": "https://github.com/sponsors/ljharb" 1218 | } 1219 | }, 1220 | "node_modules/callsites": { 1221 | "version": "3.1.0", 1222 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1223 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1224 | "dev": true, 1225 | "engines": { 1226 | "node": ">=6" 1227 | } 1228 | }, 1229 | "node_modules/chalk": { 1230 | "version": "4.1.2", 1231 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1232 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1233 | "dev": true, 1234 | "dependencies": { 1235 | "ansi-styles": "^4.1.0", 1236 | "supports-color": "^7.1.0" 1237 | }, 1238 | "engines": { 1239 | "node": ">=10" 1240 | }, 1241 | "funding": { 1242 | "url": "https://github.com/chalk/chalk?sponsor=1" 1243 | } 1244 | }, 1245 | "node_modules/clean-stack": { 1246 | "version": "2.2.0", 1247 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 1248 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 1249 | "dev": true, 1250 | "engines": { 1251 | "node": ">=6" 1252 | } 1253 | }, 1254 | "node_modules/color-convert": { 1255 | "version": "2.0.1", 1256 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1257 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1258 | "dev": true, 1259 | "dependencies": { 1260 | "color-name": "~1.1.4" 1261 | }, 1262 | "engines": { 1263 | "node": ">=7.0.0" 1264 | } 1265 | }, 1266 | "node_modules/color-name": { 1267 | "version": "1.1.4", 1268 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1269 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1270 | "dev": true 1271 | }, 1272 | "node_modules/concat-map": { 1273 | "version": "0.0.1", 1274 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1275 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1276 | "dev": true 1277 | }, 1278 | "node_modules/cross-fetch": { 1279 | "version": "4.1.0", 1280 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", 1281 | "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", 1282 | "license": "MIT", 1283 | "dependencies": { 1284 | "node-fetch": "^2.7.0" 1285 | } 1286 | }, 1287 | "node_modules/cross-spawn": { 1288 | "version": "7.0.6", 1289 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1290 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1291 | "dev": true, 1292 | "license": "MIT", 1293 | "dependencies": { 1294 | "path-key": "^3.1.0", 1295 | "shebang-command": "^2.0.0", 1296 | "which": "^2.0.1" 1297 | }, 1298 | "engines": { 1299 | "node": ">= 8" 1300 | } 1301 | }, 1302 | "node_modules/debug": { 1303 | "version": "4.3.4", 1304 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1305 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1306 | "dev": true, 1307 | "dependencies": { 1308 | "ms": "2.1.2" 1309 | }, 1310 | "engines": { 1311 | "node": ">=6.0" 1312 | }, 1313 | "peerDependenciesMeta": { 1314 | "supports-color": { 1315 | "optional": true 1316 | } 1317 | } 1318 | }, 1319 | "node_modules/deep-is": { 1320 | "version": "0.1.4", 1321 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1322 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1323 | "dev": true 1324 | }, 1325 | "node_modules/define-properties": { 1326 | "version": "1.1.4", 1327 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 1328 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 1329 | "dev": true, 1330 | "peer": true, 1331 | "dependencies": { 1332 | "has-property-descriptors": "^1.0.0", 1333 | "object-keys": "^1.1.1" 1334 | }, 1335 | "engines": { 1336 | "node": ">= 0.4" 1337 | }, 1338 | "funding": { 1339 | "url": "https://github.com/sponsors/ljharb" 1340 | } 1341 | }, 1342 | "node_modules/del": { 1343 | "version": "6.1.1", 1344 | "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", 1345 | "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", 1346 | "dev": true, 1347 | "dependencies": { 1348 | "globby": "^11.0.1", 1349 | "graceful-fs": "^4.2.4", 1350 | "is-glob": "^4.0.1", 1351 | "is-path-cwd": "^2.2.0", 1352 | "is-path-inside": "^3.0.2", 1353 | "p-map": "^4.0.0", 1354 | "rimraf": "^3.0.2", 1355 | "slash": "^3.0.0" 1356 | }, 1357 | "engines": { 1358 | "node": ">=10" 1359 | }, 1360 | "funding": { 1361 | "url": "https://github.com/sponsors/sindresorhus" 1362 | } 1363 | }, 1364 | "node_modules/dir-glob": { 1365 | "version": "3.0.1", 1366 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1367 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1368 | "dev": true, 1369 | "dependencies": { 1370 | "path-type": "^4.0.0" 1371 | }, 1372 | "engines": { 1373 | "node": ">=8" 1374 | } 1375 | }, 1376 | "node_modules/doctrine": { 1377 | "version": "3.0.0", 1378 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1379 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1380 | "dev": true, 1381 | "dependencies": { 1382 | "esutils": "^2.0.2" 1383 | }, 1384 | "engines": { 1385 | "node": ">=6.0.0" 1386 | } 1387 | }, 1388 | "node_modules/es-abstract": { 1389 | "version": "1.20.4", 1390 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", 1391 | "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", 1392 | "dev": true, 1393 | "peer": true, 1394 | "dependencies": { 1395 | "call-bind": "^1.0.2", 1396 | "es-to-primitive": "^1.2.1", 1397 | "function-bind": "^1.1.1", 1398 | "function.prototype.name": "^1.1.5", 1399 | "get-intrinsic": "^1.1.3", 1400 | "get-symbol-description": "^1.0.0", 1401 | "has": "^1.0.3", 1402 | "has-property-descriptors": "^1.0.0", 1403 | "has-symbols": "^1.0.3", 1404 | "internal-slot": "^1.0.3", 1405 | "is-callable": "^1.2.7", 1406 | "is-negative-zero": "^2.0.2", 1407 | "is-regex": "^1.1.4", 1408 | "is-shared-array-buffer": "^1.0.2", 1409 | "is-string": "^1.0.7", 1410 | "is-weakref": "^1.0.2", 1411 | "object-inspect": "^1.12.2", 1412 | "object-keys": "^1.1.1", 1413 | "object.assign": "^4.1.4", 1414 | "regexp.prototype.flags": "^1.4.3", 1415 | "safe-regex-test": "^1.0.0", 1416 | "string.prototype.trimend": "^1.0.5", 1417 | "string.prototype.trimstart": "^1.0.5", 1418 | "unbox-primitive": "^1.0.2" 1419 | }, 1420 | "engines": { 1421 | "node": ">= 0.4" 1422 | }, 1423 | "funding": { 1424 | "url": "https://github.com/sponsors/ljharb" 1425 | } 1426 | }, 1427 | "node_modules/es-shim-unscopables": { 1428 | "version": "1.0.0", 1429 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", 1430 | "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", 1431 | "dev": true, 1432 | "peer": true, 1433 | "dependencies": { 1434 | "has": "^1.0.3" 1435 | } 1436 | }, 1437 | "node_modules/es-to-primitive": { 1438 | "version": "1.2.1", 1439 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1440 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1441 | "dev": true, 1442 | "peer": true, 1443 | "dependencies": { 1444 | "is-callable": "^1.1.4", 1445 | "is-date-object": "^1.0.1", 1446 | "is-symbol": "^1.0.2" 1447 | }, 1448 | "engines": { 1449 | "node": ">= 0.4" 1450 | }, 1451 | "funding": { 1452 | "url": "https://github.com/sponsors/ljharb" 1453 | } 1454 | }, 1455 | "node_modules/esbuild": { 1456 | "version": "0.25.0", 1457 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", 1458 | "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", 1459 | "dev": true, 1460 | "hasInstallScript": true, 1461 | "license": "MIT", 1462 | "bin": { 1463 | "esbuild": "bin/esbuild" 1464 | }, 1465 | "engines": { 1466 | "node": ">=18" 1467 | }, 1468 | "optionalDependencies": { 1469 | "@esbuild/aix-ppc64": "0.25.0", 1470 | "@esbuild/android-arm": "0.25.0", 1471 | "@esbuild/android-arm64": "0.25.0", 1472 | "@esbuild/android-x64": "0.25.0", 1473 | "@esbuild/darwin-arm64": "0.25.0", 1474 | "@esbuild/darwin-x64": "0.25.0", 1475 | "@esbuild/freebsd-arm64": "0.25.0", 1476 | "@esbuild/freebsd-x64": "0.25.0", 1477 | "@esbuild/linux-arm": "0.25.0", 1478 | "@esbuild/linux-arm64": "0.25.0", 1479 | "@esbuild/linux-ia32": "0.25.0", 1480 | "@esbuild/linux-loong64": "0.25.0", 1481 | "@esbuild/linux-mips64el": "0.25.0", 1482 | "@esbuild/linux-ppc64": "0.25.0", 1483 | "@esbuild/linux-riscv64": "0.25.0", 1484 | "@esbuild/linux-s390x": "0.25.0", 1485 | "@esbuild/linux-x64": "0.25.0", 1486 | "@esbuild/netbsd-arm64": "0.25.0", 1487 | "@esbuild/netbsd-x64": "0.25.0", 1488 | "@esbuild/openbsd-arm64": "0.25.0", 1489 | "@esbuild/openbsd-x64": "0.25.0", 1490 | "@esbuild/sunos-x64": "0.25.0", 1491 | "@esbuild/win32-arm64": "0.25.0", 1492 | "@esbuild/win32-ia32": "0.25.0", 1493 | "@esbuild/win32-x64": "0.25.0" 1494 | } 1495 | }, 1496 | "node_modules/esbuild-plugin-clean": { 1497 | "version": "1.0.1", 1498 | "resolved": "https://registry.npmjs.org/esbuild-plugin-clean/-/esbuild-plugin-clean-1.0.1.tgz", 1499 | "integrity": "sha512-ul606g0wX6oeobBgi3EqpZtCBCwNwCDivvnshsNS5pUsRylKoxUnDqK0ZIyPinlMbP6s8Opc9y2zOeY1Plhe8Q==", 1500 | "dev": true, 1501 | "dependencies": { 1502 | "chalk": "^4.1.2", 1503 | "del": "^6.0.0" 1504 | }, 1505 | "peerDependencies": { 1506 | "esbuild": ">= 0.14.0" 1507 | } 1508 | }, 1509 | "node_modules/esbuild-plugin-copy-file": { 1510 | "version": "0.0.2", 1511 | "resolved": "https://registry.npmjs.org/esbuild-plugin-copy-file/-/esbuild-plugin-copy-file-0.0.2.tgz", 1512 | "integrity": "sha512-pr9CTC68YKClMAusuEy3YlB8EbQIdKWsyCVrEEbskCxKvJ7ZfhFEMesteoJl4daBtcY92gfFt0MsZOwfzZKVmw==", 1513 | "dev": true 1514 | }, 1515 | "node_modules/esbuild-plugin-fileloc": { 1516 | "version": "0.0.6", 1517 | "resolved": "https://registry.npmjs.org/esbuild-plugin-fileloc/-/esbuild-plugin-fileloc-0.0.6.tgz", 1518 | "integrity": "sha512-NfuXDBRDC9qeZ6bSr+FlBqOwtbe4uwkxYnrgyF5aA6LmMwUD1u0B8g8blq2kGB2xIf3x7lgUNq6K8pjlO8is/g==", 1519 | "dev": true, 1520 | "dependencies": { 1521 | "fs-extra": "^9.1.0" 1522 | } 1523 | }, 1524 | "node_modules/escape-string-regexp": { 1525 | "version": "4.0.0", 1526 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1527 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1528 | "dev": true, 1529 | "engines": { 1530 | "node": ">=10" 1531 | }, 1532 | "funding": { 1533 | "url": "https://github.com/sponsors/sindresorhus" 1534 | } 1535 | }, 1536 | "node_modules/eslint": { 1537 | "version": "8.57.1", 1538 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", 1539 | "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", 1540 | "dev": true, 1541 | "license": "MIT", 1542 | "dependencies": { 1543 | "@eslint-community/eslint-utils": "^4.2.0", 1544 | "@eslint-community/regexpp": "^4.6.1", 1545 | "@eslint/eslintrc": "^2.1.4", 1546 | "@eslint/js": "8.57.1", 1547 | "@humanwhocodes/config-array": "^0.13.0", 1548 | "@humanwhocodes/module-importer": "^1.0.1", 1549 | "@nodelib/fs.walk": "^1.2.8", 1550 | "@ungap/structured-clone": "^1.2.0", 1551 | "ajv": "^6.12.4", 1552 | "chalk": "^4.0.0", 1553 | "cross-spawn": "^7.0.2", 1554 | "debug": "^4.3.2", 1555 | "doctrine": "^3.0.0", 1556 | "escape-string-regexp": "^4.0.0", 1557 | "eslint-scope": "^7.2.2", 1558 | "eslint-visitor-keys": "^3.4.3", 1559 | "espree": "^9.6.1", 1560 | "esquery": "^1.4.2", 1561 | "esutils": "^2.0.2", 1562 | "fast-deep-equal": "^3.1.3", 1563 | "file-entry-cache": "^6.0.1", 1564 | "find-up": "^5.0.0", 1565 | "glob-parent": "^6.0.2", 1566 | "globals": "^13.19.0", 1567 | "graphemer": "^1.4.0", 1568 | "ignore": "^5.2.0", 1569 | "imurmurhash": "^0.1.4", 1570 | "is-glob": "^4.0.0", 1571 | "is-path-inside": "^3.0.3", 1572 | "js-yaml": "^4.1.0", 1573 | "json-stable-stringify-without-jsonify": "^1.0.1", 1574 | "levn": "^0.4.1", 1575 | "lodash.merge": "^4.6.2", 1576 | "minimatch": "^3.1.2", 1577 | "natural-compare": "^1.4.0", 1578 | "optionator": "^0.9.3", 1579 | "strip-ansi": "^6.0.1", 1580 | "text-table": "^0.2.0" 1581 | }, 1582 | "bin": { 1583 | "eslint": "bin/eslint.js" 1584 | }, 1585 | "engines": { 1586 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1587 | }, 1588 | "funding": { 1589 | "url": "https://opencollective.com/eslint" 1590 | } 1591 | }, 1592 | "node_modules/eslint-config-prettier": { 1593 | "version": "10.1.5", 1594 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", 1595 | "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", 1596 | "dev": true, 1597 | "license": "MIT", 1598 | "bin": { 1599 | "eslint-config-prettier": "bin/cli.js" 1600 | }, 1601 | "funding": { 1602 | "url": "https://opencollective.com/eslint-config-prettier" 1603 | }, 1604 | "peerDependencies": { 1605 | "eslint": ">=7.0.0" 1606 | } 1607 | }, 1608 | "node_modules/eslint-config-standard": { 1609 | "version": "17.1.0", 1610 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", 1611 | "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", 1612 | "dev": true, 1613 | "funding": [ 1614 | { 1615 | "type": "github", 1616 | "url": "https://github.com/sponsors/feross" 1617 | }, 1618 | { 1619 | "type": "patreon", 1620 | "url": "https://www.patreon.com/feross" 1621 | }, 1622 | { 1623 | "type": "consulting", 1624 | "url": "https://feross.org/support" 1625 | } 1626 | ], 1627 | "engines": { 1628 | "node": ">=12.0.0" 1629 | }, 1630 | "peerDependencies": { 1631 | "eslint": "^8.0.1", 1632 | "eslint-plugin-import": "^2.25.2", 1633 | "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", 1634 | "eslint-plugin-promise": "^6.0.0" 1635 | } 1636 | }, 1637 | "node_modules/eslint-import-resolver-node": { 1638 | "version": "0.3.6", 1639 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", 1640 | "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", 1641 | "dev": true, 1642 | "peer": true, 1643 | "dependencies": { 1644 | "debug": "^3.2.7", 1645 | "resolve": "^1.20.0" 1646 | } 1647 | }, 1648 | "node_modules/eslint-import-resolver-node/node_modules/debug": { 1649 | "version": "3.2.7", 1650 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1651 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1652 | "dev": true, 1653 | "peer": true, 1654 | "dependencies": { 1655 | "ms": "^2.1.1" 1656 | } 1657 | }, 1658 | "node_modules/eslint-module-utils": { 1659 | "version": "2.7.4", 1660 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", 1661 | "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", 1662 | "dev": true, 1663 | "peer": true, 1664 | "dependencies": { 1665 | "debug": "^3.2.7" 1666 | }, 1667 | "engines": { 1668 | "node": ">=4" 1669 | }, 1670 | "peerDependenciesMeta": { 1671 | "eslint": { 1672 | "optional": true 1673 | } 1674 | } 1675 | }, 1676 | "node_modules/eslint-module-utils/node_modules/debug": { 1677 | "version": "3.2.7", 1678 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1679 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1680 | "dev": true, 1681 | "peer": true, 1682 | "dependencies": { 1683 | "ms": "^2.1.1" 1684 | } 1685 | }, 1686 | "node_modules/eslint-plugin-es": { 1687 | "version": "4.1.0", 1688 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", 1689 | "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", 1690 | "dev": true, 1691 | "peer": true, 1692 | "dependencies": { 1693 | "eslint-utils": "^2.0.0", 1694 | "regexpp": "^3.0.0" 1695 | }, 1696 | "engines": { 1697 | "node": ">=8.10.0" 1698 | }, 1699 | "funding": { 1700 | "url": "https://github.com/sponsors/mysticatea" 1701 | }, 1702 | "peerDependencies": { 1703 | "eslint": ">=4.19.1" 1704 | } 1705 | }, 1706 | "node_modules/eslint-plugin-es/node_modules/eslint-utils": { 1707 | "version": "2.1.0", 1708 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 1709 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 1710 | "dev": true, 1711 | "peer": true, 1712 | "dependencies": { 1713 | "eslint-visitor-keys": "^1.1.0" 1714 | }, 1715 | "engines": { 1716 | "node": ">=6" 1717 | }, 1718 | "funding": { 1719 | "url": "https://github.com/sponsors/mysticatea" 1720 | } 1721 | }, 1722 | "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { 1723 | "version": "1.3.0", 1724 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 1725 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 1726 | "dev": true, 1727 | "peer": true, 1728 | "engines": { 1729 | "node": ">=4" 1730 | } 1731 | }, 1732 | "node_modules/eslint-plugin-import": { 1733 | "version": "2.26.0", 1734 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", 1735 | "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", 1736 | "dev": true, 1737 | "peer": true, 1738 | "dependencies": { 1739 | "array-includes": "^3.1.4", 1740 | "array.prototype.flat": "^1.2.5", 1741 | "debug": "^2.6.9", 1742 | "doctrine": "^2.1.0", 1743 | "eslint-import-resolver-node": "^0.3.6", 1744 | "eslint-module-utils": "^2.7.3", 1745 | "has": "^1.0.3", 1746 | "is-core-module": "^2.8.1", 1747 | "is-glob": "^4.0.3", 1748 | "minimatch": "^3.1.2", 1749 | "object.values": "^1.1.5", 1750 | "resolve": "^1.22.0", 1751 | "tsconfig-paths": "^3.14.1" 1752 | }, 1753 | "engines": { 1754 | "node": ">=4" 1755 | }, 1756 | "peerDependencies": { 1757 | "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" 1758 | } 1759 | }, 1760 | "node_modules/eslint-plugin-import/node_modules/debug": { 1761 | "version": "2.6.9", 1762 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1763 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1764 | "dev": true, 1765 | "peer": true, 1766 | "dependencies": { 1767 | "ms": "2.0.0" 1768 | } 1769 | }, 1770 | "node_modules/eslint-plugin-import/node_modules/doctrine": { 1771 | "version": "2.1.0", 1772 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 1773 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 1774 | "dev": true, 1775 | "peer": true, 1776 | "dependencies": { 1777 | "esutils": "^2.0.2" 1778 | }, 1779 | "engines": { 1780 | "node": ">=0.10.0" 1781 | } 1782 | }, 1783 | "node_modules/eslint-plugin-import/node_modules/ms": { 1784 | "version": "2.0.0", 1785 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1786 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 1787 | "dev": true, 1788 | "peer": true 1789 | }, 1790 | "node_modules/eslint-plugin-n": { 1791 | "version": "15.5.1", 1792 | "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz", 1793 | "integrity": "sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw==", 1794 | "dev": true, 1795 | "peer": true, 1796 | "dependencies": { 1797 | "builtins": "^5.0.1", 1798 | "eslint-plugin-es": "^4.1.0", 1799 | "eslint-utils": "^3.0.0", 1800 | "ignore": "^5.1.1", 1801 | "is-core-module": "^2.11.0", 1802 | "minimatch": "^3.1.2", 1803 | "resolve": "^1.22.1", 1804 | "semver": "^7.3.8" 1805 | }, 1806 | "engines": { 1807 | "node": ">=12.22.0" 1808 | }, 1809 | "funding": { 1810 | "url": "https://github.com/sponsors/mysticatea" 1811 | }, 1812 | "peerDependencies": { 1813 | "eslint": ">=7.0.0" 1814 | } 1815 | }, 1816 | "node_modules/eslint-plugin-promise": { 1817 | "version": "6.1.1", 1818 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", 1819 | "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", 1820 | "dev": true, 1821 | "peer": true, 1822 | "engines": { 1823 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1824 | }, 1825 | "peerDependencies": { 1826 | "eslint": "^7.0.0 || ^8.0.0" 1827 | } 1828 | }, 1829 | "node_modules/eslint-scope": { 1830 | "version": "7.2.2", 1831 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1832 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1833 | "dev": true, 1834 | "dependencies": { 1835 | "esrecurse": "^4.3.0", 1836 | "estraverse": "^5.2.0" 1837 | }, 1838 | "engines": { 1839 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1840 | }, 1841 | "funding": { 1842 | "url": "https://opencollective.com/eslint" 1843 | } 1844 | }, 1845 | "node_modules/eslint-utils": { 1846 | "version": "3.0.0", 1847 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1848 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1849 | "dev": true, 1850 | "peer": true, 1851 | "dependencies": { 1852 | "eslint-visitor-keys": "^2.0.0" 1853 | }, 1854 | "engines": { 1855 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1856 | }, 1857 | "funding": { 1858 | "url": "https://github.com/sponsors/mysticatea" 1859 | }, 1860 | "peerDependencies": { 1861 | "eslint": ">=5" 1862 | } 1863 | }, 1864 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1865 | "version": "2.1.0", 1866 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1867 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1868 | "dev": true, 1869 | "peer": true, 1870 | "engines": { 1871 | "node": ">=10" 1872 | } 1873 | }, 1874 | "node_modules/eslint-visitor-keys": { 1875 | "version": "3.4.3", 1876 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1877 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1878 | "dev": true, 1879 | "engines": { 1880 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1881 | }, 1882 | "funding": { 1883 | "url": "https://opencollective.com/eslint" 1884 | } 1885 | }, 1886 | "node_modules/espree": { 1887 | "version": "9.6.1", 1888 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1889 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1890 | "dev": true, 1891 | "dependencies": { 1892 | "acorn": "^8.9.0", 1893 | "acorn-jsx": "^5.3.2", 1894 | "eslint-visitor-keys": "^3.4.1" 1895 | }, 1896 | "engines": { 1897 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1898 | }, 1899 | "funding": { 1900 | "url": "https://opencollective.com/eslint" 1901 | } 1902 | }, 1903 | "node_modules/esquery": { 1904 | "version": "1.5.0", 1905 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1906 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1907 | "dev": true, 1908 | "dependencies": { 1909 | "estraverse": "^5.1.0" 1910 | }, 1911 | "engines": { 1912 | "node": ">=0.10" 1913 | } 1914 | }, 1915 | "node_modules/esrecurse": { 1916 | "version": "4.3.0", 1917 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1918 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1919 | "dev": true, 1920 | "dependencies": { 1921 | "estraverse": "^5.2.0" 1922 | }, 1923 | "engines": { 1924 | "node": ">=4.0" 1925 | } 1926 | }, 1927 | "node_modules/estraverse": { 1928 | "version": "5.3.0", 1929 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1930 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1931 | "dev": true, 1932 | "engines": { 1933 | "node": ">=4.0" 1934 | } 1935 | }, 1936 | "node_modules/esutils": { 1937 | "version": "2.0.3", 1938 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1939 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1940 | "dev": true, 1941 | "engines": { 1942 | "node": ">=0.10.0" 1943 | } 1944 | }, 1945 | "node_modules/fast-deep-equal": { 1946 | "version": "3.1.3", 1947 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1948 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1949 | "dev": true 1950 | }, 1951 | "node_modules/fast-glob": { 1952 | "version": "3.3.2", 1953 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 1954 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 1955 | "dev": true, 1956 | "license": "MIT", 1957 | "dependencies": { 1958 | "@nodelib/fs.stat": "^2.0.2", 1959 | "@nodelib/fs.walk": "^1.2.3", 1960 | "glob-parent": "^5.1.2", 1961 | "merge2": "^1.3.0", 1962 | "micromatch": "^4.0.4" 1963 | }, 1964 | "engines": { 1965 | "node": ">=8.6.0" 1966 | } 1967 | }, 1968 | "node_modules/fast-glob/node_modules/glob-parent": { 1969 | "version": "5.1.2", 1970 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1971 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1972 | "dev": true, 1973 | "dependencies": { 1974 | "is-glob": "^4.0.1" 1975 | }, 1976 | "engines": { 1977 | "node": ">= 6" 1978 | } 1979 | }, 1980 | "node_modules/fast-json-stable-stringify": { 1981 | "version": "2.1.0", 1982 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1983 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1984 | "dev": true 1985 | }, 1986 | "node_modules/fast-levenshtein": { 1987 | "version": "2.0.6", 1988 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1989 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1990 | "dev": true 1991 | }, 1992 | "node_modules/fast-xml-parser": { 1993 | "version": "4.5.1", 1994 | "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz", 1995 | "integrity": "sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==", 1996 | "funding": [ 1997 | { 1998 | "type": "github", 1999 | "url": "https://github.com/sponsors/NaturalIntelligence" 2000 | }, 2001 | { 2002 | "type": "paypal", 2003 | "url": "https://paypal.me/naturalintelligence" 2004 | } 2005 | ], 2006 | "license": "MIT", 2007 | "dependencies": { 2008 | "strnum": "^1.0.5" 2009 | }, 2010 | "bin": { 2011 | "fxparser": "src/cli/cli.js" 2012 | } 2013 | }, 2014 | "node_modules/fastq": { 2015 | "version": "1.13.0", 2016 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 2017 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 2018 | "dev": true, 2019 | "dependencies": { 2020 | "reusify": "^1.0.4" 2021 | } 2022 | }, 2023 | "node_modules/file-entry-cache": { 2024 | "version": "6.0.1", 2025 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2026 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2027 | "dev": true, 2028 | "dependencies": { 2029 | "flat-cache": "^3.0.4" 2030 | }, 2031 | "engines": { 2032 | "node": "^10.12.0 || >=12.0.0" 2033 | } 2034 | }, 2035 | "node_modules/fill-range": { 2036 | "version": "7.1.1", 2037 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2038 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2039 | "dev": true, 2040 | "license": "MIT", 2041 | "dependencies": { 2042 | "to-regex-range": "^5.0.1" 2043 | }, 2044 | "engines": { 2045 | "node": ">=8" 2046 | } 2047 | }, 2048 | "node_modules/find-up": { 2049 | "version": "5.0.0", 2050 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2051 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2052 | "dev": true, 2053 | "dependencies": { 2054 | "locate-path": "^6.0.0", 2055 | "path-exists": "^4.0.0" 2056 | }, 2057 | "engines": { 2058 | "node": ">=10" 2059 | }, 2060 | "funding": { 2061 | "url": "https://github.com/sponsors/sindresorhus" 2062 | } 2063 | }, 2064 | "node_modules/flat-cache": { 2065 | "version": "3.0.4", 2066 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 2067 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 2068 | "dev": true, 2069 | "dependencies": { 2070 | "flatted": "^3.1.0", 2071 | "rimraf": "^3.0.2" 2072 | }, 2073 | "engines": { 2074 | "node": "^10.12.0 || >=12.0.0" 2075 | } 2076 | }, 2077 | "node_modules/flatted": { 2078 | "version": "3.2.7", 2079 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", 2080 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", 2081 | "dev": true 2082 | }, 2083 | "node_modules/fs-extra": { 2084 | "version": "9.1.0", 2085 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 2086 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 2087 | "dev": true, 2088 | "dependencies": { 2089 | "at-least-node": "^1.0.0", 2090 | "graceful-fs": "^4.2.0", 2091 | "jsonfile": "^6.0.1", 2092 | "universalify": "^2.0.0" 2093 | }, 2094 | "engines": { 2095 | "node": ">=10" 2096 | } 2097 | }, 2098 | "node_modules/fs.realpath": { 2099 | "version": "1.0.0", 2100 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2101 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2102 | "dev": true 2103 | }, 2104 | "node_modules/function-bind": { 2105 | "version": "1.1.1", 2106 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2107 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2108 | "dev": true, 2109 | "peer": true 2110 | }, 2111 | "node_modules/function.prototype.name": { 2112 | "version": "1.1.5", 2113 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 2114 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 2115 | "dev": true, 2116 | "peer": true, 2117 | "dependencies": { 2118 | "call-bind": "^1.0.2", 2119 | "define-properties": "^1.1.3", 2120 | "es-abstract": "^1.19.0", 2121 | "functions-have-names": "^1.2.2" 2122 | }, 2123 | "engines": { 2124 | "node": ">= 0.4" 2125 | }, 2126 | "funding": { 2127 | "url": "https://github.com/sponsors/ljharb" 2128 | } 2129 | }, 2130 | "node_modules/functions-have-names": { 2131 | "version": "1.2.3", 2132 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 2133 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 2134 | "dev": true, 2135 | "peer": true, 2136 | "funding": { 2137 | "url": "https://github.com/sponsors/ljharb" 2138 | } 2139 | }, 2140 | "node_modules/get-intrinsic": { 2141 | "version": "1.1.3", 2142 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 2143 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 2144 | "dev": true, 2145 | "peer": true, 2146 | "dependencies": { 2147 | "function-bind": "^1.1.1", 2148 | "has": "^1.0.3", 2149 | "has-symbols": "^1.0.3" 2150 | }, 2151 | "funding": { 2152 | "url": "https://github.com/sponsors/ljharb" 2153 | } 2154 | }, 2155 | "node_modules/get-symbol-description": { 2156 | "version": "1.0.0", 2157 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 2158 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 2159 | "dev": true, 2160 | "peer": true, 2161 | "dependencies": { 2162 | "call-bind": "^1.0.2", 2163 | "get-intrinsic": "^1.1.1" 2164 | }, 2165 | "engines": { 2166 | "node": ">= 0.4" 2167 | }, 2168 | "funding": { 2169 | "url": "https://github.com/sponsors/ljharb" 2170 | } 2171 | }, 2172 | "node_modules/glob": { 2173 | "version": "7.2.3", 2174 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2175 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2176 | "dev": true, 2177 | "dependencies": { 2178 | "fs.realpath": "^1.0.0", 2179 | "inflight": "^1.0.4", 2180 | "inherits": "2", 2181 | "minimatch": "^3.1.1", 2182 | "once": "^1.3.0", 2183 | "path-is-absolute": "^1.0.0" 2184 | }, 2185 | "engines": { 2186 | "node": "*" 2187 | }, 2188 | "funding": { 2189 | "url": "https://github.com/sponsors/isaacs" 2190 | } 2191 | }, 2192 | "node_modules/glob-parent": { 2193 | "version": "6.0.2", 2194 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2195 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2196 | "dev": true, 2197 | "dependencies": { 2198 | "is-glob": "^4.0.3" 2199 | }, 2200 | "engines": { 2201 | "node": ">=10.13.0" 2202 | } 2203 | }, 2204 | "node_modules/globals": { 2205 | "version": "13.19.0", 2206 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", 2207 | "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", 2208 | "dev": true, 2209 | "dependencies": { 2210 | "type-fest": "^0.20.2" 2211 | }, 2212 | "engines": { 2213 | "node": ">=8" 2214 | }, 2215 | "funding": { 2216 | "url": "https://github.com/sponsors/sindresorhus" 2217 | } 2218 | }, 2219 | "node_modules/globby": { 2220 | "version": "11.1.0", 2221 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2222 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2223 | "dev": true, 2224 | "dependencies": { 2225 | "array-union": "^2.1.0", 2226 | "dir-glob": "^3.0.1", 2227 | "fast-glob": "^3.2.9", 2228 | "ignore": "^5.2.0", 2229 | "merge2": "^1.4.1", 2230 | "slash": "^3.0.0" 2231 | }, 2232 | "engines": { 2233 | "node": ">=10" 2234 | }, 2235 | "funding": { 2236 | "url": "https://github.com/sponsors/sindresorhus" 2237 | } 2238 | }, 2239 | "node_modules/graceful-fs": { 2240 | "version": "4.2.10", 2241 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 2242 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 2243 | "dev": true 2244 | }, 2245 | "node_modules/graphemer": { 2246 | "version": "1.4.0", 2247 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2248 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" 2249 | }, 2250 | "node_modules/handlebars": { 2251 | "version": "4.7.8", 2252 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", 2253 | "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", 2254 | "dependencies": { 2255 | "minimist": "^1.2.5", 2256 | "neo-async": "^2.6.2", 2257 | "source-map": "^0.6.1", 2258 | "wordwrap": "^1.0.0" 2259 | }, 2260 | "bin": { 2261 | "handlebars": "bin/handlebars" 2262 | }, 2263 | "engines": { 2264 | "node": ">=0.4.7" 2265 | }, 2266 | "optionalDependencies": { 2267 | "uglify-js": "^3.1.4" 2268 | } 2269 | }, 2270 | "node_modules/has": { 2271 | "version": "1.0.3", 2272 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2273 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2274 | "dev": true, 2275 | "peer": true, 2276 | "dependencies": { 2277 | "function-bind": "^1.1.1" 2278 | }, 2279 | "engines": { 2280 | "node": ">= 0.4.0" 2281 | } 2282 | }, 2283 | "node_modules/has-bigints": { 2284 | "version": "1.0.2", 2285 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 2286 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 2287 | "dev": true, 2288 | "peer": true, 2289 | "funding": { 2290 | "url": "https://github.com/sponsors/ljharb" 2291 | } 2292 | }, 2293 | "node_modules/has-flag": { 2294 | "version": "4.0.0", 2295 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2296 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2297 | "dev": true, 2298 | "engines": { 2299 | "node": ">=8" 2300 | } 2301 | }, 2302 | "node_modules/has-property-descriptors": { 2303 | "version": "1.0.0", 2304 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 2305 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 2306 | "dev": true, 2307 | "peer": true, 2308 | "dependencies": { 2309 | "get-intrinsic": "^1.1.1" 2310 | }, 2311 | "funding": { 2312 | "url": "https://github.com/sponsors/ljharb" 2313 | } 2314 | }, 2315 | "node_modules/has-symbols": { 2316 | "version": "1.0.3", 2317 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2318 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2319 | "dev": true, 2320 | "peer": true, 2321 | "engines": { 2322 | "node": ">= 0.4" 2323 | }, 2324 | "funding": { 2325 | "url": "https://github.com/sponsors/ljharb" 2326 | } 2327 | }, 2328 | "node_modules/has-tostringtag": { 2329 | "version": "1.0.0", 2330 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 2331 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 2332 | "dev": true, 2333 | "peer": true, 2334 | "dependencies": { 2335 | "has-symbols": "^1.0.2" 2336 | }, 2337 | "engines": { 2338 | "node": ">= 0.4" 2339 | }, 2340 | "funding": { 2341 | "url": "https://github.com/sponsors/ljharb" 2342 | } 2343 | }, 2344 | "node_modules/html-entities": { 2345 | "version": "2.5.2", 2346 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", 2347 | "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", 2348 | "funding": [ 2349 | { 2350 | "type": "github", 2351 | "url": "https://github.com/sponsors/mdevils" 2352 | }, 2353 | { 2354 | "type": "patreon", 2355 | "url": "https://patreon.com/mdevils" 2356 | } 2357 | ] 2358 | }, 2359 | "node_modules/ignore": { 2360 | "version": "5.3.1", 2361 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 2362 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 2363 | "dev": true, 2364 | "engines": { 2365 | "node": ">= 4" 2366 | } 2367 | }, 2368 | "node_modules/import-fresh": { 2369 | "version": "3.3.0", 2370 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2371 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2372 | "dev": true, 2373 | "dependencies": { 2374 | "parent-module": "^1.0.0", 2375 | "resolve-from": "^4.0.0" 2376 | }, 2377 | "engines": { 2378 | "node": ">=6" 2379 | }, 2380 | "funding": { 2381 | "url": "https://github.com/sponsors/sindresorhus" 2382 | } 2383 | }, 2384 | "node_modules/imurmurhash": { 2385 | "version": "0.1.4", 2386 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2387 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2388 | "dev": true, 2389 | "engines": { 2390 | "node": ">=0.8.19" 2391 | } 2392 | }, 2393 | "node_modules/indent-string": { 2394 | "version": "4.0.0", 2395 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 2396 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 2397 | "dev": true, 2398 | "engines": { 2399 | "node": ">=8" 2400 | } 2401 | }, 2402 | "node_modules/inflight": { 2403 | "version": "1.0.6", 2404 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2405 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2406 | "dev": true, 2407 | "dependencies": { 2408 | "once": "^1.3.0", 2409 | "wrappy": "1" 2410 | } 2411 | }, 2412 | "node_modules/inherits": { 2413 | "version": "2.0.4", 2414 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2415 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2416 | "dev": true 2417 | }, 2418 | "node_modules/internal-slot": { 2419 | "version": "1.0.3", 2420 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 2421 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 2422 | "dev": true, 2423 | "peer": true, 2424 | "dependencies": { 2425 | "get-intrinsic": "^1.1.0", 2426 | "has": "^1.0.3", 2427 | "side-channel": "^1.0.4" 2428 | }, 2429 | "engines": { 2430 | "node": ">= 0.4" 2431 | } 2432 | }, 2433 | "node_modules/is-bigint": { 2434 | "version": "1.0.4", 2435 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 2436 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 2437 | "dev": true, 2438 | "peer": true, 2439 | "dependencies": { 2440 | "has-bigints": "^1.0.1" 2441 | }, 2442 | "funding": { 2443 | "url": "https://github.com/sponsors/ljharb" 2444 | } 2445 | }, 2446 | "node_modules/is-boolean-object": { 2447 | "version": "1.1.2", 2448 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 2449 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 2450 | "dev": true, 2451 | "peer": true, 2452 | "dependencies": { 2453 | "call-bind": "^1.0.2", 2454 | "has-tostringtag": "^1.0.0" 2455 | }, 2456 | "engines": { 2457 | "node": ">= 0.4" 2458 | }, 2459 | "funding": { 2460 | "url": "https://github.com/sponsors/ljharb" 2461 | } 2462 | }, 2463 | "node_modules/is-callable": { 2464 | "version": "1.2.7", 2465 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 2466 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 2467 | "dev": true, 2468 | "peer": true, 2469 | "engines": { 2470 | "node": ">= 0.4" 2471 | }, 2472 | "funding": { 2473 | "url": "https://github.com/sponsors/ljharb" 2474 | } 2475 | }, 2476 | "node_modules/is-core-module": { 2477 | "version": "2.11.0", 2478 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2479 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2480 | "dev": true, 2481 | "peer": true, 2482 | "dependencies": { 2483 | "has": "^1.0.3" 2484 | }, 2485 | "funding": { 2486 | "url": "https://github.com/sponsors/ljharb" 2487 | } 2488 | }, 2489 | "node_modules/is-date-object": { 2490 | "version": "1.0.5", 2491 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 2492 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 2493 | "dev": true, 2494 | "peer": true, 2495 | "dependencies": { 2496 | "has-tostringtag": "^1.0.0" 2497 | }, 2498 | "engines": { 2499 | "node": ">= 0.4" 2500 | }, 2501 | "funding": { 2502 | "url": "https://github.com/sponsors/ljharb" 2503 | } 2504 | }, 2505 | "node_modules/is-extglob": { 2506 | "version": "2.1.1", 2507 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2508 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2509 | "dev": true, 2510 | "engines": { 2511 | "node": ">=0.10.0" 2512 | } 2513 | }, 2514 | "node_modules/is-glob": { 2515 | "version": "4.0.3", 2516 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2517 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2518 | "dev": true, 2519 | "dependencies": { 2520 | "is-extglob": "^2.1.1" 2521 | }, 2522 | "engines": { 2523 | "node": ">=0.10.0" 2524 | } 2525 | }, 2526 | "node_modules/is-negative-zero": { 2527 | "version": "2.0.2", 2528 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 2529 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 2530 | "dev": true, 2531 | "peer": true, 2532 | "engines": { 2533 | "node": ">= 0.4" 2534 | }, 2535 | "funding": { 2536 | "url": "https://github.com/sponsors/ljharb" 2537 | } 2538 | }, 2539 | "node_modules/is-number": { 2540 | "version": "7.0.0", 2541 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2542 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2543 | "dev": true, 2544 | "license": "MIT", 2545 | "engines": { 2546 | "node": ">=0.12.0" 2547 | } 2548 | }, 2549 | "node_modules/is-number-object": { 2550 | "version": "1.0.7", 2551 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 2552 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 2553 | "dev": true, 2554 | "peer": true, 2555 | "dependencies": { 2556 | "has-tostringtag": "^1.0.0" 2557 | }, 2558 | "engines": { 2559 | "node": ">= 0.4" 2560 | }, 2561 | "funding": { 2562 | "url": "https://github.com/sponsors/ljharb" 2563 | } 2564 | }, 2565 | "node_modules/is-path-cwd": { 2566 | "version": "2.2.0", 2567 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 2568 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", 2569 | "dev": true, 2570 | "engines": { 2571 | "node": ">=6" 2572 | } 2573 | }, 2574 | "node_modules/is-path-inside": { 2575 | "version": "3.0.3", 2576 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2577 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2578 | "dev": true, 2579 | "engines": { 2580 | "node": ">=8" 2581 | } 2582 | }, 2583 | "node_modules/is-regex": { 2584 | "version": "1.1.4", 2585 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 2586 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 2587 | "dev": true, 2588 | "peer": true, 2589 | "dependencies": { 2590 | "call-bind": "^1.0.2", 2591 | "has-tostringtag": "^1.0.0" 2592 | }, 2593 | "engines": { 2594 | "node": ">= 0.4" 2595 | }, 2596 | "funding": { 2597 | "url": "https://github.com/sponsors/ljharb" 2598 | } 2599 | }, 2600 | "node_modules/is-shared-array-buffer": { 2601 | "version": "1.0.2", 2602 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 2603 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 2604 | "dev": true, 2605 | "peer": true, 2606 | "dependencies": { 2607 | "call-bind": "^1.0.2" 2608 | }, 2609 | "funding": { 2610 | "url": "https://github.com/sponsors/ljharb" 2611 | } 2612 | }, 2613 | "node_modules/is-string": { 2614 | "version": "1.0.7", 2615 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 2616 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 2617 | "dev": true, 2618 | "peer": true, 2619 | "dependencies": { 2620 | "has-tostringtag": "^1.0.0" 2621 | }, 2622 | "engines": { 2623 | "node": ">= 0.4" 2624 | }, 2625 | "funding": { 2626 | "url": "https://github.com/sponsors/ljharb" 2627 | } 2628 | }, 2629 | "node_modules/is-symbol": { 2630 | "version": "1.0.4", 2631 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 2632 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 2633 | "dev": true, 2634 | "peer": true, 2635 | "dependencies": { 2636 | "has-symbols": "^1.0.2" 2637 | }, 2638 | "engines": { 2639 | "node": ">= 0.4" 2640 | }, 2641 | "funding": { 2642 | "url": "https://github.com/sponsors/ljharb" 2643 | } 2644 | }, 2645 | "node_modules/is-weakref": { 2646 | "version": "1.0.2", 2647 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 2648 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 2649 | "dev": true, 2650 | "peer": true, 2651 | "dependencies": { 2652 | "call-bind": "^1.0.2" 2653 | }, 2654 | "funding": { 2655 | "url": "https://github.com/sponsors/ljharb" 2656 | } 2657 | }, 2658 | "node_modules/isexe": { 2659 | "version": "2.0.0", 2660 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2661 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2662 | "dev": true 2663 | }, 2664 | "node_modules/iso-datestring-validator": { 2665 | "version": "2.2.2", 2666 | "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 2667 | "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 2668 | "license": "MIT" 2669 | }, 2670 | "node_modules/js-yaml": { 2671 | "version": "4.1.0", 2672 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2673 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2674 | "dev": true, 2675 | "dependencies": { 2676 | "argparse": "^2.0.1" 2677 | }, 2678 | "bin": { 2679 | "js-yaml": "bin/js-yaml.js" 2680 | } 2681 | }, 2682 | "node_modules/json-schema-traverse": { 2683 | "version": "0.4.1", 2684 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2685 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2686 | "dev": true 2687 | }, 2688 | "node_modules/json-stable-stringify-without-jsonify": { 2689 | "version": "1.0.1", 2690 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2691 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2692 | "dev": true 2693 | }, 2694 | "node_modules/json5": { 2695 | "version": "1.0.2", 2696 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 2697 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 2698 | "dev": true, 2699 | "peer": true, 2700 | "dependencies": { 2701 | "minimist": "^1.2.0" 2702 | }, 2703 | "bin": { 2704 | "json5": "lib/cli.js" 2705 | } 2706 | }, 2707 | "node_modules/jsonfile": { 2708 | "version": "6.1.0", 2709 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2710 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2711 | "dev": true, 2712 | "dependencies": { 2713 | "universalify": "^2.0.0" 2714 | }, 2715 | "optionalDependencies": { 2716 | "graceful-fs": "^4.1.6" 2717 | } 2718 | }, 2719 | "node_modules/levn": { 2720 | "version": "0.4.1", 2721 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2722 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2723 | "dev": true, 2724 | "dependencies": { 2725 | "prelude-ls": "^1.2.1", 2726 | "type-check": "~0.4.0" 2727 | }, 2728 | "engines": { 2729 | "node": ">= 0.8.0" 2730 | } 2731 | }, 2732 | "node_modules/locate-path": { 2733 | "version": "6.0.0", 2734 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2735 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2736 | "dev": true, 2737 | "dependencies": { 2738 | "p-locate": "^5.0.0" 2739 | }, 2740 | "engines": { 2741 | "node": ">=10" 2742 | }, 2743 | "funding": { 2744 | "url": "https://github.com/sponsors/sindresorhus" 2745 | } 2746 | }, 2747 | "node_modules/lodash.merge": { 2748 | "version": "4.6.2", 2749 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2750 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2751 | "dev": true 2752 | }, 2753 | "node_modules/lru-cache": { 2754 | "version": "6.0.0", 2755 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2756 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2757 | "dev": true, 2758 | "dependencies": { 2759 | "yallist": "^4.0.0" 2760 | }, 2761 | "engines": { 2762 | "node": ">=10" 2763 | } 2764 | }, 2765 | "node_modules/merge2": { 2766 | "version": "1.4.1", 2767 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2768 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2769 | "dev": true, 2770 | "engines": { 2771 | "node": ">= 8" 2772 | } 2773 | }, 2774 | "node_modules/micromatch": { 2775 | "version": "4.0.8", 2776 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2777 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2778 | "dev": true, 2779 | "license": "MIT", 2780 | "dependencies": { 2781 | "braces": "^3.0.3", 2782 | "picomatch": "^2.3.1" 2783 | }, 2784 | "engines": { 2785 | "node": ">=8.6" 2786 | } 2787 | }, 2788 | "node_modules/minimatch": { 2789 | "version": "3.1.2", 2790 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2791 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2792 | "dev": true, 2793 | "dependencies": { 2794 | "brace-expansion": "^1.1.7" 2795 | }, 2796 | "engines": { 2797 | "node": "*" 2798 | } 2799 | }, 2800 | "node_modules/minimist": { 2801 | "version": "1.2.7", 2802 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 2803 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 2804 | "funding": { 2805 | "url": "https://github.com/sponsors/ljharb" 2806 | } 2807 | }, 2808 | "node_modules/mkdirp": { 2809 | "version": "3.0.1", 2810 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", 2811 | "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", 2812 | "bin": { 2813 | "mkdirp": "dist/cjs/src/bin.js" 2814 | }, 2815 | "engines": { 2816 | "node": ">=10" 2817 | }, 2818 | "funding": { 2819 | "url": "https://github.com/sponsors/isaacs" 2820 | } 2821 | }, 2822 | "node_modules/ms": { 2823 | "version": "2.1.2", 2824 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2825 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2826 | "dev": true 2827 | }, 2828 | "node_modules/multiformats": { 2829 | "version": "9.9.0", 2830 | "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 2831 | "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 2832 | "license": "(Apache-2.0 AND MIT)" 2833 | }, 2834 | "node_modules/natural-compare": { 2835 | "version": "1.4.0", 2836 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2837 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2838 | "dev": true 2839 | }, 2840 | "node_modules/neo-async": { 2841 | "version": "2.6.2", 2842 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 2843 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" 2844 | }, 2845 | "node_modules/node-fetch": { 2846 | "version": "2.7.0", 2847 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2848 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2849 | "dependencies": { 2850 | "whatwg-url": "^5.0.0" 2851 | }, 2852 | "engines": { 2853 | "node": "4.x || >=6.0.0" 2854 | }, 2855 | "peerDependencies": { 2856 | "encoding": "^0.1.0" 2857 | }, 2858 | "peerDependenciesMeta": { 2859 | "encoding": { 2860 | "optional": true 2861 | } 2862 | } 2863 | }, 2864 | "node_modules/object-inspect": { 2865 | "version": "1.12.2", 2866 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 2867 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 2868 | "dev": true, 2869 | "peer": true, 2870 | "funding": { 2871 | "url": "https://github.com/sponsors/ljharb" 2872 | } 2873 | }, 2874 | "node_modules/object-keys": { 2875 | "version": "1.1.1", 2876 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2877 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2878 | "dev": true, 2879 | "peer": true, 2880 | "engines": { 2881 | "node": ">= 0.4" 2882 | } 2883 | }, 2884 | "node_modules/object.assign": { 2885 | "version": "4.1.4", 2886 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 2887 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 2888 | "dev": true, 2889 | "peer": true, 2890 | "dependencies": { 2891 | "call-bind": "^1.0.2", 2892 | "define-properties": "^1.1.4", 2893 | "has-symbols": "^1.0.3", 2894 | "object-keys": "^1.1.1" 2895 | }, 2896 | "engines": { 2897 | "node": ">= 0.4" 2898 | }, 2899 | "funding": { 2900 | "url": "https://github.com/sponsors/ljharb" 2901 | } 2902 | }, 2903 | "node_modules/object.values": { 2904 | "version": "1.1.6", 2905 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", 2906 | "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", 2907 | "dev": true, 2908 | "peer": true, 2909 | "dependencies": { 2910 | "call-bind": "^1.0.2", 2911 | "define-properties": "^1.1.4", 2912 | "es-abstract": "^1.20.4" 2913 | }, 2914 | "engines": { 2915 | "node": ">= 0.4" 2916 | }, 2917 | "funding": { 2918 | "url": "https://github.com/sponsors/ljharb" 2919 | } 2920 | }, 2921 | "node_modules/once": { 2922 | "version": "1.4.0", 2923 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2924 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2925 | "dev": true, 2926 | "dependencies": { 2927 | "wrappy": "1" 2928 | } 2929 | }, 2930 | "node_modules/optionator": { 2931 | "version": "0.9.3", 2932 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2933 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2934 | "dev": true, 2935 | "dependencies": { 2936 | "@aashutoshrathi/word-wrap": "^1.2.3", 2937 | "deep-is": "^0.1.3", 2938 | "fast-levenshtein": "^2.0.6", 2939 | "levn": "^0.4.1", 2940 | "prelude-ls": "^1.2.1", 2941 | "type-check": "^0.4.0" 2942 | }, 2943 | "engines": { 2944 | "node": ">= 0.8.0" 2945 | } 2946 | }, 2947 | "node_modules/p-limit": { 2948 | "version": "3.1.0", 2949 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2950 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2951 | "dev": true, 2952 | "dependencies": { 2953 | "yocto-queue": "^0.1.0" 2954 | }, 2955 | "engines": { 2956 | "node": ">=10" 2957 | }, 2958 | "funding": { 2959 | "url": "https://github.com/sponsors/sindresorhus" 2960 | } 2961 | }, 2962 | "node_modules/p-locate": { 2963 | "version": "5.0.0", 2964 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2965 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2966 | "dev": true, 2967 | "dependencies": { 2968 | "p-limit": "^3.0.2" 2969 | }, 2970 | "engines": { 2971 | "node": ">=10" 2972 | }, 2973 | "funding": { 2974 | "url": "https://github.com/sponsors/sindresorhus" 2975 | } 2976 | }, 2977 | "node_modules/p-map": { 2978 | "version": "4.0.0", 2979 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 2980 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 2981 | "dev": true, 2982 | "dependencies": { 2983 | "aggregate-error": "^3.0.0" 2984 | }, 2985 | "engines": { 2986 | "node": ">=10" 2987 | }, 2988 | "funding": { 2989 | "url": "https://github.com/sponsors/sindresorhus" 2990 | } 2991 | }, 2992 | "node_modules/parent-module": { 2993 | "version": "1.0.1", 2994 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2995 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2996 | "dev": true, 2997 | "dependencies": { 2998 | "callsites": "^3.0.0" 2999 | }, 3000 | "engines": { 3001 | "node": ">=6" 3002 | } 3003 | }, 3004 | "node_modules/path-exists": { 3005 | "version": "4.0.0", 3006 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3007 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3008 | "dev": true, 3009 | "engines": { 3010 | "node": ">=8" 3011 | } 3012 | }, 3013 | "node_modules/path-is-absolute": { 3014 | "version": "1.0.1", 3015 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3016 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3017 | "dev": true, 3018 | "engines": { 3019 | "node": ">=0.10.0" 3020 | } 3021 | }, 3022 | "node_modules/path-key": { 3023 | "version": "3.1.1", 3024 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3025 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3026 | "dev": true, 3027 | "engines": { 3028 | "node": ">=8" 3029 | } 3030 | }, 3031 | "node_modules/path-parse": { 3032 | "version": "1.0.7", 3033 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3034 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3035 | "dev": true, 3036 | "peer": true 3037 | }, 3038 | "node_modules/path-type": { 3039 | "version": "4.0.0", 3040 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3041 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3042 | "dev": true, 3043 | "engines": { 3044 | "node": ">=8" 3045 | } 3046 | }, 3047 | "node_modules/picomatch": { 3048 | "version": "2.3.1", 3049 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3050 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3051 | "dev": true, 3052 | "engines": { 3053 | "node": ">=8.6" 3054 | }, 3055 | "funding": { 3056 | "url": "https://github.com/sponsors/jonschlinkert" 3057 | } 3058 | }, 3059 | "node_modules/prelude-ls": { 3060 | "version": "1.2.1", 3061 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3062 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3063 | "dev": true, 3064 | "engines": { 3065 | "node": ">= 0.8.0" 3066 | } 3067 | }, 3068 | "node_modules/prettier": { 3069 | "version": "3.5.3", 3070 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 3071 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 3072 | "dev": true, 3073 | "license": "MIT", 3074 | "bin": { 3075 | "prettier": "bin/prettier.cjs" 3076 | }, 3077 | "engines": { 3078 | "node": ">=14" 3079 | }, 3080 | "funding": { 3081 | "url": "https://github.com/prettier/prettier?sponsor=1" 3082 | } 3083 | }, 3084 | "node_modules/punycode": { 3085 | "version": "2.1.1", 3086 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 3087 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 3088 | "dev": true, 3089 | "engines": { 3090 | "node": ">=6" 3091 | } 3092 | }, 3093 | "node_modules/queue-microtask": { 3094 | "version": "1.2.3", 3095 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3096 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3097 | "dev": true, 3098 | "funding": [ 3099 | { 3100 | "type": "github", 3101 | "url": "https://github.com/sponsors/feross" 3102 | }, 3103 | { 3104 | "type": "patreon", 3105 | "url": "https://www.patreon.com/feross" 3106 | }, 3107 | { 3108 | "type": "consulting", 3109 | "url": "https://feross.org/support" 3110 | } 3111 | ] 3112 | }, 3113 | "node_modules/regexp.prototype.flags": { 3114 | "version": "1.4.3", 3115 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", 3116 | "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", 3117 | "dev": true, 3118 | "peer": true, 3119 | "dependencies": { 3120 | "call-bind": "^1.0.2", 3121 | "define-properties": "^1.1.3", 3122 | "functions-have-names": "^1.2.2" 3123 | }, 3124 | "engines": { 3125 | "node": ">= 0.4" 3126 | }, 3127 | "funding": { 3128 | "url": "https://github.com/sponsors/ljharb" 3129 | } 3130 | }, 3131 | "node_modules/regexpp": { 3132 | "version": "3.2.0", 3133 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 3134 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 3135 | "dev": true, 3136 | "peer": true, 3137 | "engines": { 3138 | "node": ">=8" 3139 | }, 3140 | "funding": { 3141 | "url": "https://github.com/sponsors/mysticatea" 3142 | } 3143 | }, 3144 | "node_modules/resolve": { 3145 | "version": "1.22.1", 3146 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 3147 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 3148 | "dev": true, 3149 | "peer": true, 3150 | "dependencies": { 3151 | "is-core-module": "^2.9.0", 3152 | "path-parse": "^1.0.7", 3153 | "supports-preserve-symlinks-flag": "^1.0.0" 3154 | }, 3155 | "bin": { 3156 | "resolve": "bin/resolve" 3157 | }, 3158 | "funding": { 3159 | "url": "https://github.com/sponsors/ljharb" 3160 | } 3161 | }, 3162 | "node_modules/resolve-from": { 3163 | "version": "4.0.0", 3164 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3165 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3166 | "dev": true, 3167 | "engines": { 3168 | "node": ">=4" 3169 | } 3170 | }, 3171 | "node_modules/reusify": { 3172 | "version": "1.0.4", 3173 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3174 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3175 | "dev": true, 3176 | "engines": { 3177 | "iojs": ">=1.0.0", 3178 | "node": ">=0.10.0" 3179 | } 3180 | }, 3181 | "node_modules/rimraf": { 3182 | "version": "3.0.2", 3183 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3184 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3185 | "dev": true, 3186 | "dependencies": { 3187 | "glob": "^7.1.3" 3188 | }, 3189 | "bin": { 3190 | "rimraf": "bin.js" 3191 | }, 3192 | "funding": { 3193 | "url": "https://github.com/sponsors/isaacs" 3194 | } 3195 | }, 3196 | "node_modules/run-parallel": { 3197 | "version": "1.2.0", 3198 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3199 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3200 | "dev": true, 3201 | "funding": [ 3202 | { 3203 | "type": "github", 3204 | "url": "https://github.com/sponsors/feross" 3205 | }, 3206 | { 3207 | "type": "patreon", 3208 | "url": "https://www.patreon.com/feross" 3209 | }, 3210 | { 3211 | "type": "consulting", 3212 | "url": "https://feross.org/support" 3213 | } 3214 | ], 3215 | "dependencies": { 3216 | "queue-microtask": "^1.2.2" 3217 | } 3218 | }, 3219 | "node_modules/safe-regex-test": { 3220 | "version": "1.0.0", 3221 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 3222 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 3223 | "dev": true, 3224 | "peer": true, 3225 | "dependencies": { 3226 | "call-bind": "^1.0.2", 3227 | "get-intrinsic": "^1.1.3", 3228 | "is-regex": "^1.1.4" 3229 | }, 3230 | "funding": { 3231 | "url": "https://github.com/sponsors/ljharb" 3232 | } 3233 | }, 3234 | "node_modules/semver": { 3235 | "version": "7.6.0", 3236 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 3237 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 3238 | "dev": true, 3239 | "dependencies": { 3240 | "lru-cache": "^6.0.0" 3241 | }, 3242 | "bin": { 3243 | "semver": "bin/semver.js" 3244 | }, 3245 | "engines": { 3246 | "node": ">=10" 3247 | } 3248 | }, 3249 | "node_modules/shebang-command": { 3250 | "version": "2.0.0", 3251 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3252 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3253 | "dev": true, 3254 | "dependencies": { 3255 | "shebang-regex": "^3.0.0" 3256 | }, 3257 | "engines": { 3258 | "node": ">=8" 3259 | } 3260 | }, 3261 | "node_modules/shebang-regex": { 3262 | "version": "3.0.0", 3263 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3264 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3265 | "dev": true, 3266 | "engines": { 3267 | "node": ">=8" 3268 | } 3269 | }, 3270 | "node_modules/side-channel": { 3271 | "version": "1.0.4", 3272 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3273 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3274 | "dev": true, 3275 | "peer": true, 3276 | "dependencies": { 3277 | "call-bind": "^1.0.0", 3278 | "get-intrinsic": "^1.0.2", 3279 | "object-inspect": "^1.9.0" 3280 | }, 3281 | "funding": { 3282 | "url": "https://github.com/sponsors/ljharb" 3283 | } 3284 | }, 3285 | "node_modules/slash": { 3286 | "version": "3.0.0", 3287 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3288 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3289 | "dev": true, 3290 | "engines": { 3291 | "node": ">=8" 3292 | } 3293 | }, 3294 | "node_modules/source-map": { 3295 | "version": "0.6.1", 3296 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3297 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3298 | "engines": { 3299 | "node": ">=0.10.0" 3300 | } 3301 | }, 3302 | "node_modules/string.prototype.trimend": { 3303 | "version": "1.0.6", 3304 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", 3305 | "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", 3306 | "dev": true, 3307 | "peer": true, 3308 | "dependencies": { 3309 | "call-bind": "^1.0.2", 3310 | "define-properties": "^1.1.4", 3311 | "es-abstract": "^1.20.4" 3312 | }, 3313 | "funding": { 3314 | "url": "https://github.com/sponsors/ljharb" 3315 | } 3316 | }, 3317 | "node_modules/string.prototype.trimstart": { 3318 | "version": "1.0.6", 3319 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", 3320 | "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", 3321 | "dev": true, 3322 | "peer": true, 3323 | "dependencies": { 3324 | "call-bind": "^1.0.2", 3325 | "define-properties": "^1.1.4", 3326 | "es-abstract": "^1.20.4" 3327 | }, 3328 | "funding": { 3329 | "url": "https://github.com/sponsors/ljharb" 3330 | } 3331 | }, 3332 | "node_modules/strip-ansi": { 3333 | "version": "6.0.1", 3334 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3335 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3336 | "dev": true, 3337 | "dependencies": { 3338 | "ansi-regex": "^5.0.1" 3339 | }, 3340 | "engines": { 3341 | "node": ">=8" 3342 | } 3343 | }, 3344 | "node_modules/strip-bom": { 3345 | "version": "3.0.0", 3346 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 3347 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 3348 | "dev": true, 3349 | "peer": true, 3350 | "engines": { 3351 | "node": ">=4" 3352 | } 3353 | }, 3354 | "node_modules/strip-json-comments": { 3355 | "version": "3.1.1", 3356 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3357 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3358 | "dev": true, 3359 | "engines": { 3360 | "node": ">=8" 3361 | }, 3362 | "funding": { 3363 | "url": "https://github.com/sponsors/sindresorhus" 3364 | } 3365 | }, 3366 | "node_modules/strnum": { 3367 | "version": "1.0.5", 3368 | "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", 3369 | "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" 3370 | }, 3371 | "node_modules/supports-color": { 3372 | "version": "7.2.0", 3373 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3374 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3375 | "dev": true, 3376 | "dependencies": { 3377 | "has-flag": "^4.0.0" 3378 | }, 3379 | "engines": { 3380 | "node": ">=8" 3381 | } 3382 | }, 3383 | "node_modules/supports-preserve-symlinks-flag": { 3384 | "version": "1.0.0", 3385 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3386 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3387 | "dev": true, 3388 | "peer": true, 3389 | "engines": { 3390 | "node": ">= 0.4" 3391 | }, 3392 | "funding": { 3393 | "url": "https://github.com/sponsors/ljharb" 3394 | } 3395 | }, 3396 | "node_modules/text-table": { 3397 | "version": "0.2.0", 3398 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3399 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3400 | "dev": true 3401 | }, 3402 | "node_modules/tlds": { 3403 | "version": "1.255.0", 3404 | "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.255.0.tgz", 3405 | "integrity": "sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==", 3406 | "license": "MIT", 3407 | "bin": { 3408 | "tlds": "bin.js" 3409 | } 3410 | }, 3411 | "node_modules/to-regex-range": { 3412 | "version": "5.0.1", 3413 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3414 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3415 | "dev": true, 3416 | "license": "MIT", 3417 | "dependencies": { 3418 | "is-number": "^7.0.0" 3419 | }, 3420 | "engines": { 3421 | "node": ">=8.0" 3422 | } 3423 | }, 3424 | "node_modules/tr46": { 3425 | "version": "0.0.3", 3426 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 3427 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 3428 | }, 3429 | "node_modules/ts-api-utils": { 3430 | "version": "2.1.0", 3431 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 3432 | "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 3433 | "dev": true, 3434 | "license": "MIT", 3435 | "engines": { 3436 | "node": ">=18.12" 3437 | }, 3438 | "peerDependencies": { 3439 | "typescript": ">=4.8.4" 3440 | } 3441 | }, 3442 | "node_modules/tsconfig-paths": { 3443 | "version": "3.14.1", 3444 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", 3445 | "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", 3446 | "dev": true, 3447 | "peer": true, 3448 | "dependencies": { 3449 | "@types/json5": "^0.0.29", 3450 | "json5": "^1.0.1", 3451 | "minimist": "^1.2.6", 3452 | "strip-bom": "^3.0.0" 3453 | } 3454 | }, 3455 | "node_modules/tunnel": { 3456 | "version": "0.0.6", 3457 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 3458 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 3459 | "engines": { 3460 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 3461 | } 3462 | }, 3463 | "node_modules/type-check": { 3464 | "version": "0.4.0", 3465 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3466 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3467 | "dev": true, 3468 | "dependencies": { 3469 | "prelude-ls": "^1.2.1" 3470 | }, 3471 | "engines": { 3472 | "node": ">= 0.8.0" 3473 | } 3474 | }, 3475 | "node_modules/type-fest": { 3476 | "version": "0.20.2", 3477 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3478 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3479 | "dev": true, 3480 | "engines": { 3481 | "node": ">=10" 3482 | }, 3483 | "funding": { 3484 | "url": "https://github.com/sponsors/sindresorhus" 3485 | } 3486 | }, 3487 | "node_modules/typescript": { 3488 | "version": "5.8.3", 3489 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 3490 | "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 3491 | "dev": true, 3492 | "license": "Apache-2.0", 3493 | "bin": { 3494 | "tsc": "bin/tsc", 3495 | "tsserver": "bin/tsserver" 3496 | }, 3497 | "engines": { 3498 | "node": ">=14.17" 3499 | } 3500 | }, 3501 | "node_modules/uglify-js": { 3502 | "version": "3.17.4", 3503 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", 3504 | "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", 3505 | "optional": true, 3506 | "bin": { 3507 | "uglifyjs": "bin/uglifyjs" 3508 | }, 3509 | "engines": { 3510 | "node": ">=0.8.0" 3511 | } 3512 | }, 3513 | "node_modules/uint8arrays": { 3514 | "version": "3.0.0", 3515 | "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 3516 | "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 3517 | "license": "MIT", 3518 | "dependencies": { 3519 | "multiformats": "^9.4.2" 3520 | } 3521 | }, 3522 | "node_modules/unbox-primitive": { 3523 | "version": "1.0.2", 3524 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 3525 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 3526 | "dev": true, 3527 | "peer": true, 3528 | "dependencies": { 3529 | "call-bind": "^1.0.2", 3530 | "has-bigints": "^1.0.2", 3531 | "has-symbols": "^1.0.3", 3532 | "which-boxed-primitive": "^1.0.2" 3533 | }, 3534 | "funding": { 3535 | "url": "https://github.com/sponsors/ljharb" 3536 | } 3537 | }, 3538 | "node_modules/undici-types": { 3539 | "version": "6.19.8", 3540 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 3541 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 3542 | "dev": true, 3543 | "license": "MIT" 3544 | }, 3545 | "node_modules/universalify": { 3546 | "version": "2.0.0", 3547 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 3548 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 3549 | "dev": true, 3550 | "engines": { 3551 | "node": ">= 10.0.0" 3552 | } 3553 | }, 3554 | "node_modules/uri-js": { 3555 | "version": "4.4.1", 3556 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3557 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3558 | "dev": true, 3559 | "dependencies": { 3560 | "punycode": "^2.1.0" 3561 | } 3562 | }, 3563 | "node_modules/webidl-conversions": { 3564 | "version": "3.0.1", 3565 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3566 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 3567 | }, 3568 | "node_modules/whatwg-url": { 3569 | "version": "5.0.0", 3570 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3571 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3572 | "dependencies": { 3573 | "tr46": "~0.0.3", 3574 | "webidl-conversions": "^3.0.0" 3575 | } 3576 | }, 3577 | "node_modules/which": { 3578 | "version": "2.0.2", 3579 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3580 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3581 | "dev": true, 3582 | "dependencies": { 3583 | "isexe": "^2.0.0" 3584 | }, 3585 | "bin": { 3586 | "node-which": "bin/node-which" 3587 | }, 3588 | "engines": { 3589 | "node": ">= 8" 3590 | } 3591 | }, 3592 | "node_modules/which-boxed-primitive": { 3593 | "version": "1.0.2", 3594 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 3595 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 3596 | "dev": true, 3597 | "peer": true, 3598 | "dependencies": { 3599 | "is-bigint": "^1.0.1", 3600 | "is-boolean-object": "^1.1.0", 3601 | "is-number-object": "^1.0.4", 3602 | "is-string": "^1.0.5", 3603 | "is-symbol": "^1.0.3" 3604 | }, 3605 | "funding": { 3606 | "url": "https://github.com/sponsors/ljharb" 3607 | } 3608 | }, 3609 | "node_modules/wordwrap": { 3610 | "version": "1.0.0", 3611 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3612 | "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" 3613 | }, 3614 | "node_modules/wrappy": { 3615 | "version": "1.0.2", 3616 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3617 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3618 | "dev": true 3619 | }, 3620 | "node_modules/yallist": { 3621 | "version": "4.0.0", 3622 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3623 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3624 | "dev": true 3625 | }, 3626 | "node_modules/yocto-queue": { 3627 | "version": "0.1.0", 3628 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3629 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3630 | "dev": true, 3631 | "engines": { 3632 | "node": ">=10" 3633 | }, 3634 | "funding": { 3635 | "url": "https://github.com/sponsors/sindresorhus" 3636 | } 3637 | }, 3638 | "node_modules/zod": { 3639 | "version": "3.24.1", 3640 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", 3641 | "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", 3642 | "license": "MIT", 3643 | "funding": { 3644 | "url": "https://github.com/sponsors/colinhacks" 3645 | } 3646 | } 3647 | } 3648 | } 3649 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@joschi/blueskyfeedbot", 3 | "version": "0.0.4", 4 | "description": "A bot to syndicate RSS to Bluesky via GitHub Actions", 5 | "author": "Jochen Schalanda ", 6 | "license": "MIT", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/joschi/blueskyfeedbot.git" 10 | }, 11 | "keywords": [ 12 | "bluesky", 13 | "bsky", 14 | "atproto", 15 | "bot", 16 | "rss" 17 | ], 18 | "bugs": { 19 | "url": "https://github.com/joschi/blueskyfeedbot/issues" 20 | }, 21 | "homepage": "https://github.com/joschi/blueskyfeedbot#readme", 22 | "type": "module", 23 | "main": "dist/index.js", 24 | "scripts": { 25 | "build": "node esbuild.js" 26 | }, 27 | "devDependencies": { 28 | "@types/feedparser": "^2.2.5", 29 | "@types/node": "^20.0.0", 30 | "@typescript-eslint/eslint-plugin": "^8.0.0", 31 | "@typescript-eslint/parser": "^8.0.0", 32 | "esbuild": "^0.25.0", 33 | "esbuild-plugin-clean": "^1.0.1", 34 | "esbuild-plugin-copy-file": "^0.0.2", 35 | "esbuild-plugin-fileloc": "^0.0.6", 36 | "eslint": "^8.30.0", 37 | "eslint-config-prettier": "^10.0.0", 38 | "eslint-config-standard": "^17.0.0", 39 | "prettier": "^3.0.0", 40 | "typescript": "^5.0.0" 41 | }, 42 | "dependencies": { 43 | "@actions/core": "^1.10.0", 44 | "@atproto/api": "^0.14.0", 45 | "@extractus/feed-extractor": "^7.0.0", 46 | "handlebars": "^4.7.7", 47 | "mkdirp": "^3.0.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended", 5 | ":dependencyDashboard", 6 | "helpers:pinGitHubActionDigests", 7 | ":prConcurrentLimitNone" 8 | ], 9 | "npm": { 10 | "minimumReleaseAge": "3 days" 11 | }, 12 | "schedule": ["before 2am"] 13 | } 14 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { readFile, writeFile } from 'fs/promises'; 2 | import { existsSync } from 'node:fs'; 3 | import * as core from '@actions/core'; 4 | import { mkdirp } from 'mkdirp'; 5 | import { type FeedEntry, FeedData, extract } from '@extractus/feed-extractor'; 6 | import crypto from 'crypto'; 7 | import Handlebars from 'handlebars'; 8 | import { AtpAgent, RichText } from '@atproto/api'; 9 | import { AppBskyFeedPost } from '@atproto/api/src/client'; 10 | 11 | function sha256(data: string): string { 12 | return crypto.createHash('sha256').update(data, 'utf-8').digest('hex'); 13 | } 14 | 15 | async function writeCache(cacheFile: string, cacheLimit: number, cache: string[]): Promise { 16 | try { 17 | // limit the cache 18 | if (cache.length > cacheLimit) { 19 | core.notice(`Cache limit reached. Removing ${cache.length - cacheLimit} items.`); 20 | cache = cache.slice(cache.length - cacheLimit); 21 | } 22 | 23 | // make sure the cache directory exists 24 | await mkdirp(cacheFile.substring(0, cacheFile.lastIndexOf('/'))); 25 | 26 | // write the cache 27 | await writeFile(cacheFile, JSON.stringify(cache)); 28 | } catch (e) { 29 | core.setFailed(`Failed to write cache file: ${(e).message}`); 30 | } 31 | } 32 | 33 | async function postItems( 34 | serviceUrl: string, 35 | username: string, 36 | password: string, 37 | feedData: FeedData | undefined, 38 | entries: FeedEntry[], 39 | statusTemplate: HandlebarsTemplateDelegate, 40 | dryRun: boolean, 41 | disableFacets: boolean, 42 | cache: string[], 43 | limit: number) { 44 | if (dryRun) { 45 | // Add new items to cache 46 | for (const item of entries) { 47 | try { 48 | const hash = sha256(item.link); 49 | core.debug(`Adding ${item.title} with hash ${hash} to cache`); 50 | 51 | // add the item to the cache 52 | cache.push(hash); 53 | } catch (e) { 54 | core.setFailed(`Failed to add item to cache: ${(e).message}`); 55 | } 56 | } 57 | 58 | return; 59 | } 60 | 61 | // authenticate with Bluesky 62 | const agent = new AtpAgent({ 63 | service: serviceUrl 64 | }); 65 | 66 | try { 67 | await agent.login({ 68 | identifier: username, 69 | password 70 | }); 71 | } catch (e) { 72 | core.setFailed(`Failed to authenticate with Bluesky: ${(e).message}`); 73 | return; 74 | } 75 | 76 | // post the new items 77 | let postedItems: number = 0; 78 | for (const item of entries) { 79 | try { 80 | const hash = sha256(item.link); 81 | core.debug(`Posting '${item.title}' with hash ${hash}`); 82 | 83 | if (postedItems >= limit) { 84 | core.debug(`Skipping '${item.title}' with hash ${hash} due to post limit ${limit}`); 85 | } else { 86 | // post the item 87 | const lang = feedData?.language; 88 | let rt = new RichText({ 89 | text: statusTemplate({ feedData, item }) 90 | }); 91 | if (rt.graphemeLength >= 300) { 92 | rt = new RichText({ 93 | text: rt.unicodeText.slice(0, 300) 94 | }); 95 | } 96 | 97 | if (!disableFacets) { 98 | await rt.detectFacets(agent); 99 | } 100 | core.debug(`RichText:\n\n${JSON.stringify(rt, null, 2)}`); 101 | 102 | const record: AppBskyFeedPost.Record = { 103 | $type: 'app.bsky.feed.post', 104 | text: rt.text, 105 | facets: rt.facets, 106 | createdAt: new Date().toISOString(), 107 | ...(lang && { langs: [lang] }) 108 | }; 109 | core.debug(`Record:\n\n${JSON.stringify(record, null, 2)}`); 110 | 111 | const res = await agent.post(record); 112 | core.debug(`Response:\n\n${JSON.stringify(res, null, 2)}`); 113 | 114 | postedItems++; 115 | } 116 | 117 | // add the item to the cache 118 | cache.push(hash); 119 | } catch (e) { 120 | core.setFailed(`Failed to post item: ${(e).message}`); 121 | } 122 | } 123 | } 124 | 125 | async function filterCachedItems(rss: FeedEntry[], cache: string[]): Promise { 126 | if (cache.length) { 127 | rss = rss 128 | ?.filter(item => { 129 | const hash = sha256(item.link); 130 | return !cache.includes(hash); 131 | }) 132 | ?.sort((a, b) => a.published?.localeCompare(b.published || '') || NaN); 133 | } 134 | core.debug(JSON.stringify(`Post-filter feed items:\n\n${JSON.stringify(rss, null, 2)}`)); 135 | return rss; 136 | } 137 | 138 | async function getRss(rssFeed: string): Promise { 139 | let rss: FeedData; 140 | try { 141 | rss = (await extract(rssFeed)); 142 | core.debug(JSON.stringify(`Pre-filter feed items:\n\n${JSON.stringify(rss.entries, null, 2)}`)); 143 | return rss; 144 | } catch (e) { 145 | core.setFailed(`Failed to parse RSS feed: ${(e).message}`); 146 | } 147 | } 148 | 149 | async function getCache(cacheFile: string): Promise { 150 | let cache: string[] = []; 151 | try { 152 | cache = JSON.parse(await readFile(cacheFile, 'utf-8')); 153 | core.debug(`Cache: ${JSON.stringify(cache)}`); 154 | return cache; 155 | } catch (e) { // eslint-disable-line @typescript-eslint/no-unused-vars 156 | core.notice(`Cache file not found. Creating new cache file at ${cacheFile}.`); 157 | return cache; 158 | } 159 | } 160 | 161 | export async function main(): Promise { 162 | // get variables from environment 163 | const rssFeed = core.getInput('rss-feed', { required: true }); 164 | core.debug(`rssFeed: ${rssFeed}`); 165 | const template: string = core.getInput('template', { required: true }); 166 | core.debug(`template: ${template}`); 167 | const serviceUrl = core.getInput('service-url', { required: true }); 168 | core.debug(`serviceUrl: ${serviceUrl}`); 169 | const username = core.getInput('username', { required: true }); 170 | core.debug(`username: ${username}`); 171 | const password = core.getInput('password', { required: true }); 172 | core.debug(`password: ${password}`); 173 | const cacheFile = core.getInput('cache-file', { required: true }); 174 | core.debug(`cacheFile: ${cacheFile}`); 175 | const cacheLimit = parseInt(core.getInput('cache-limit'), 10); 176 | core.debug(`cacheLimit: ${cacheLimit}`); 177 | const initialPostLimit = parseInt(core.getInput('initial-post-limit'), 10); 178 | core.debug(`initialPostLimit: ${initialPostLimit}`); 179 | const postLimit = parseInt(core.getInput('post-limit'), 10); 180 | core.debug(`postLimit: ${postLimit}`); 181 | const dryRun: boolean = core.getBooleanInput('dry-run'); 182 | core.debug(`dryRun: ${dryRun}`); 183 | const disableFacets = core.getBooleanInput('disable-facets'); 184 | core.debug(`disableFacets: ${disableFacets}`); 185 | 186 | if (initialPostLimit > cacheLimit) { 187 | core.warning('initial-post-limit is greater than cache-limit, this might lead to unexpected results'); 188 | } 189 | if (postLimit > cacheLimit) { 190 | core.warning('post-limit is greater than cache-limit, this might lead to unexpected results'); 191 | } 192 | 193 | // get the rss feed 194 | const feedData: FeedData | undefined = await getRss(rssFeed); 195 | const entries: FeedEntry[] = feedData?.entries ?? []; 196 | 197 | let limit: number = postLimit; 198 | let cache: string[] = []; 199 | 200 | // get the cache 201 | if (!existsSync(cacheFile)) { 202 | limit = initialPostLimit; 203 | } else { 204 | cache = await getCache(cacheFile); 205 | } 206 | 207 | // filter out the cached items 208 | const filteredEntries: FeedEntry[] = await filterCachedItems(entries, cache); 209 | 210 | // post the new items 211 | const statusTemplate = Handlebars.compile(template); 212 | await postItems( 213 | serviceUrl, 214 | username, 215 | password, 216 | feedData, 217 | filteredEntries, 218 | statusTemplate, 219 | dryRun, 220 | disableFacets, 221 | cache, 222 | limit); 223 | 224 | // write the cache 225 | await writeCache(cacheFile, cacheLimit, cache); 226 | } 227 | 228 | (async () => await main())(); 229 | -------------------------------------------------------------------------------- /tests/simple-no-cache.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 5 | Channel Title 6 | Channel description. 7 | joe.user@example.com (Managing Editor) 8 | Tue, 27 Dec 2022 07:17:21 +0000 9 | Tue, 27 Dec 2022 07:17:21 +0000 10 | http://blogs.law.harvard.edu/tech/rss 11 | 12 | https://avatars.githubusercontent.com/u/43951 13 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 14 | Image Title 15 | Image description. 16 | 17 | 18 | https://github.com/joschi/blueskyfeedbot/pull/1?test=no-cache 19 | 44aefc891f5b1f96ae7393f3d1613254eae9c23b 20 | Item 1 Title 21 | Item 1 Description 22 | Thu, 15 Dec 2022 19:02:13 +0000 23 | item1:category 24 | author.item1@example.com (Author Item 1) 25 | 26 | 27 | https://github.com/joschi/blueskyfeedbot/pull/2?test=no-cache 28 | 55a26da9618a994e56c845306bd38641f58220af 29 | Item 2 Title 30 | Item 2 Description 31 | Tue, 27 Dec 2022 19:02:13 +0000 32 | item2:category 33 | author.item2@example.com (Author Item 2) 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /tests/simple-template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 5 | Channel Title 6 | Channel description. 7 | joe.user@example.com (Managing Editor) 8 | Tue, 27 Dec 2022 07:17:21 +0000 9 | Tue, 27 Dec 2022 07:17:21 +0000 10 | http://blogs.law.harvard.edu/tech/rss 11 | 12 | https://avatars.githubusercontent.com/u/43951 13 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 14 | Image Title 15 | Image description. 16 | 17 | 18 | https://github.com/joschi/blueskyfeedbot/pull/1?test=template 19 | 44aefc891f5b1f96ae7393f3d1613254eae9c23b 20 | Item 1 Title 21 | Item 1 Description 22 | Thu, 15 Dec 2022 19:02:13 +0000 23 | item1:category 24 | author.item1@example.com (Author Item 1) 25 | 26 | 27 | https://github.com/joschi/blueskyfeedbot/pull/2?test=template 28 | 55a26da9618a994e56c845306bd38641f58220af 29 | Item 2 Title 30 | Item 2 Description 31 | Tue, 27 Dec 2022 19:02:13 +0000 32 | item2:category 33 | author.item2@example.com (Author Item 2) 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /tests/simple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 5 | Channel Title 6 | Channel description. 7 | joe.user@example.com (Managing Editor) 8 | Tue, 27 Dec 2022 07:17:21 +0000 9 | Tue, 27 Dec 2022 07:17:21 +0000 10 | http://blogs.law.harvard.edu/tech/rss 11 | 12 | https://avatars.githubusercontent.com/u/43951 13 | https://raw.githubusercontent.com/joschi/blueskyfeedbot/main/tests/simple.rss 14 | Image Title 15 | Image description. 16 | 17 | 18 | https://github.com/joschi/blueskyfeedbot/pull/1 19 | 44aefc891f5b1f96ae7393f3d1613254eae9c23b 20 | Item 1 Title 21 | Item 1 Description 22 | Thu, 15 Dec 2022 19:02:13 +0000 23 | item1:category 24 | author.item1@example.com (Author Item 1) 25 | 26 | 27 | https://github.com/joschi/blueskyfeedbot/pull/2 28 | 55a26da9618a994e56c845306bd38641f58220af 29 | Item 2 Title 30 | Item 2 Description 31 | Tue, 27 Dec 2022 19:02:13 +0000 32 | item2:category 33 | author.item2@example.com (Author Item 2) 34 | 35 | 36 | https://github.com/joschi/blueskyfeedbot/pull/2 37 | 55a26da9618a994e56c845306bd38641f58220af 38 | Lorem ipsum loooooong 39 | Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet… 40 | Tue, 27 Dec 2022 19:02:13 +0000 41 | item2:category 42 | author.item2@example.com (Author Item 2) 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2020", 15 | /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 16 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 17 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 18 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 19 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 20 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 21 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 22 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 23 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 24 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 25 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 26 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 27 | 28 | /* Modules */ 29 | "module": "commonjs", 30 | /* Specify what module code is generated. */ 31 | "rootDir": ".", 32 | /* Specify the root folder within your source files. */ 33 | "moduleResolution": "node", 34 | /* Specify how TypeScript looks up a file from a given module specifier. */ 35 | "baseUrl": ".", 36 | /* Specify the base directory to resolve non-relative module names. */ 37 | "paths": { 38 | "@/*": [ 39 | "src/*" 40 | ] 41 | }, 42 | /* Specify a set of entries that re-map imports to additional lookup locations. */ 43 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 44 | "typeRoots": [ 45 | "./node_modules/@types", 46 | "./types" 47 | ], 48 | /* Specify multiple folders that act like './node_modules/@types'. */ 49 | // "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */ 50 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 51 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 52 | "resolveJsonModule": true, 53 | /* Enable importing .json files. */ 54 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 55 | 56 | /* JavaScript Support */ 57 | "allowJs": true, 58 | /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 59 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 60 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 61 | 62 | /* Emit */ 63 | "declaration": true, 64 | /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 65 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 66 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 67 | "sourceMap": true, 68 | /* Create source map files for emitted JavaScript files. */ 69 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 70 | "outDir": "./dist", 71 | /* Specify an output folder for all emitted files. */ 72 | // "removeComments": true, /* Disable emitting comments. */ 73 | // "noEmit": true, /* Disable emitting files from a compilation. */ 74 | "importHelpers": true, 75 | /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 76 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 77 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 78 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 79 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 80 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 81 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 82 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 83 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 84 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 85 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 86 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 87 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 88 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 89 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 90 | 91 | /* Interop Constraints */ 92 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 93 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 94 | "esModuleInterop": true, 95 | /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 96 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 97 | "forceConsistentCasingInFileNames": true, 98 | /* Ensure that casing is correct in imports. */ 99 | 100 | /* Type Checking */ 101 | "strict": true 102 | /* Enable all strict type-checking options. */ 103 | // "noImplicitAny": false, 104 | /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 105 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 106 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 107 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 108 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 109 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 110 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 111 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 112 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 113 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 114 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 115 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 116 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 117 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 118 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 119 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 120 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 121 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 122 | 123 | /* Completeness */ 124 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 125 | // "skipLibCheck": true 126 | /* Skip type checking all .d.ts files. */ 127 | }, 128 | "include": [ 129 | "./types/**/*.d.ts", 130 | "./src/**/*.ts" 131 | ], 132 | "exclude": [ 133 | "./node_modules", 134 | "./dist" 135 | ] 136 | } 137 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | export interface Item { 2 | title: string | undefined; 3 | link: string; 4 | } 5 | 6 | export interface Feed { 7 | title: string; 8 | items: Item[]; 9 | } 10 | --------------------------------------------------------------------------------