├── .github └── workflows │ └── release.yml ├── .gitignore ├── README.md ├── assets └── preview-v1.png ├── biome.json ├── docs ├── 1-setup.md ├── 2-basic-usage.md ├── 3-api-reference.md ├── 4-guides.md └── README.md ├── examples ├── index.tsx ├── package.json └── tsconfig.json ├── package.json ├── packages ├── cli │ ├── package.json │ ├── rescript.json │ └── src │ │ ├── Main.res │ │ ├── bindings │ │ ├── BetterTmux.res │ │ ├── BunX.res │ │ └── ReactReconcilier.res │ │ └── core │ │ ├── Bindings.res │ │ ├── Config.res │ │ ├── Debug.res │ │ ├── GlobalOptions.res │ │ ├── Parser.res │ │ ├── Reconcilier.res │ │ ├── Renderer.res │ │ ├── Runner.res │ │ ├── Styles.res │ │ ├── Theme.res │ │ ├── Tmux.res │ │ ├── TmuxJsx.res │ │ └── version.js └── lib │ ├── .release-it.json │ ├── CHANGELOG.md │ ├── package.json │ ├── src │ ├── components.tsx │ ├── global.d.ts │ ├── hooks │ │ ├── index.ts │ │ └── use-theme.ts │ ├── index.ts │ ├── presets │ │ └── index.tsx │ ├── tmux.ts │ ├── types.ts │ └── widgets │ │ ├── index.tsx │ │ ├── types.ts │ │ └── widget.tsx │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── build-cli.sh ├── bump-cli-version.sh ├── install.sh ├── uninstall.sh └── update.sh └── turbo.json /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | run-name: 'Release a [${{ github.event.inputs.versionType }}] version of better-tmux' 3 | 'on': 4 | workflow_dispatch: 5 | inputs: 6 | versionType: 7 | description: Version type 8 | required: true 9 | default: patch 10 | type: choice 11 | options: 12 | - patch 13 | - minor 14 | - major 15 | jobs: 16 | setup: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | - uses: oven-sh/setup-bun@v2 21 | - uses: pnpm/action-setup@v4 22 | name: Install pnpm 23 | with: 24 | version: 9.0.0 25 | run_install: false 26 | - name: Install Node.js 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: 20 30 | cache: 'pnpm' 31 | 32 | - name: Configure CI user 33 | run: | 34 | git config --global user.email "vmarcosp.pereira@gmail.com" 35 | git config --global user.name "vmarcosp" 36 | 37 | - name: Install dependencies 38 | run: pnpm install 39 | 40 | - name: Build Project 41 | run: pnpm turbo build 42 | 43 | - name: Generate CLI executable 44 | run: | 45 | bash ./scripts/bump-cli-version.sh ${{ github.event.inputs.versionType }} 46 | bash ./scripts/build-cli.sh 47 | 48 | - name: Release 49 | run: pnpm release-it --ci --increment=${{ github.event.inputs.versionType }} --config=packages/lib/.release-it.json 50 | env: 51 | GITHUB_TOKEN: ${{secrets.GH_TOKEN }} 52 | - name: Publish npm package 53 | run: | 54 | cd packages/lib 55 | echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_AUTH_TOKEN }}" > ~/.npmrc 56 | npm publish --access=public 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | ./packages/**/lib/ 177 | *.res.js 178 | .turbo/ 179 | /packages/cli/lib/ 180 | .build/ 181 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [!WARNING] 2 | > 💡 This project is experimental and still in progress, but definitely worth trying. If you encounter any issues, please open an issue or DM me on [Twitter](https://x.com/vmaarcosp). Don't hesitate to reach out 👋🏻 3 | 4 |
5 |

BetterTmux

6 |

Unlock the full power of TMUX with TypeScript and JSX ⚡

7 |
8 | 9 | 10 | 11 | ## Features 12 | 13 | - ⚙️ Support for TMUX customizations trough TypeScript and React 14 | - 🎨 Theme management + popular themes 15 | - 📦 Pre-built widgets such as ``, ``, ``, etc 16 | - 💡 Ability to create your own widgets using native building blocks `` adn `` 17 | 18 | ## Introduction 19 | BetterTmux is essentially a framework for TMUX that leverages React and TypeScript to enable powerful customizations. It allows you to create your own custom components and configurations for the TMUX status bar. Additionally, it provides a layer of pre-built components that help you unlock the full potential of your TMUX setup. 20 | 21 | ## Why 22 | 23 | TMUX is incredible and boosts productivity, but configuring it can be tough. You can either use a pre-made config like "oh my tmux", which can be challenging to customize, or build your own from scratch, which can be overwhelming depending on your experience. If you try to use a plugin theme like [Nord](https://github.com/nordtheme/tmux) or [Catppuccin](https://github.com/catppuccin/tmux) to match your vim or terminal theme, you'll notice that it doesn't only change the colors but also affects your widgets and layout. 24 | 25 | I've been tweaking my own tmux config for years, and I've ended up with complex configurations like this: 26 | 27 |
28 | 29 | Click to reveal 🔎 30 | 31 | 32 | ```sh 33 | set -g status-left-length 50 34 | set -g status-left "#(hostname) #[bg=$theme_primary,fg=$theme_background] 🚀 #[bg=$theme_background,fg=$theme_foreground] Test " 35 | 36 | set -g status-right-length 50 37 | set -g status-right "#[bg=$theme_primary,fg=$theme_background] %Y-%m-%d #[bg=$theme_background,fg=$theme_foreground] %H:%M:%S " 38 | 39 | set -g window-status-format "#[bg=$theme_background,fg=$theme_foreground] #I: #W " 40 | set -g window-status-current-format "#[bg=$theme_primary,fg=$theme_background] #I: #W " 41 | 42 | set -g status-style "bg=$theme_background,fg=$theme_foreground" 43 | ``` 44 | 45 |
46 | 47 | 48 | 49 | On the other hand, TypeScript (and JavaScript) plus JSX are great ways to handle UIs. So, what if you could configure your TMUX using these technologies? 50 | Here is a very similar example of the code above but using BetterTmux: 51 | ```typescript 52 | import { BetterTmuxConfig, Box, WindowConfig, useTheme } from 'better-tmux' 53 | import { Clock, Hostname } from 'better-tmux/widgets' 54 | 55 | const Window = ({ type, number, name }: WindowConfig) => { 56 | const theme = useTheme() 57 | return ( 58 | 63 | {number}: {name} 64 | 65 | ) 66 | } 67 | 68 | const CustomStatusLeft = () => { 69 | const theme = useTheme() 70 | 71 | return ( 72 | 73 | 74 | 🚀 75 | Test 76 | 77 | 78 | ) 79 | } 80 | 81 | export default { 82 | theme: 'nord', 83 | options: { 84 | prefix: 'C-a', 85 | setTitlesString: "BetterTmux", 86 | }, 87 | status: { 88 | left: , 89 | right: , 90 | position: 'top' 91 | }, 92 | window: (window) => 93 | } satisfies BetterTmuxConfig 94 | ``` 95 | 96 | ## Documentation 📘 97 | 98 | - [Setup](./docs/1-setup.md) 99 | - [Install](./docs/1-setup.md#install) 100 | - [Setting up your config](./docs/1-setup.md#setting-up-your-config) 101 | - [Testing](./docs/1-setup.md#testing) 102 | - [Update](./docs/1-setup.md#update) 103 | - [Uninstall](./docs/1-setup.md#uninstall) 104 | - [Basic Usage](./docs/2-basic-usage.md) 105 | - [Understanding customizations](./docs/2-basic-usage.md#understanding-customizations) 106 | - [Usage of index.tsx](./docs/2-basic-usage.md#usage-of-indextsx) 107 | - [Integrating with tmux.conf](./docs/2-basic-usage.md#integrating-with-your-tmuxconf) 108 | - [BetterTmux packages](./docs/2-basic-usage.md#bettertmux-packages-better-tmux) 109 | - [API Reference](./docs/3-api-reference.md) 110 | - [Configuration](./docs/3-api-reference.md#configuration) 111 | - [Themes](./docs/3-api-reference.md#themes) 112 | - [Components](./docs/3-api-reference.md#components) 113 | - [Example](./docs/3-api-reference.md#example) 114 | - [Hooks](./docs/3-api-reference.md#hooks) 115 | - [Widgets](./docs/3-api-reference.md#widgets) 116 | - [Utilities](./docs/3-api-reference.md#utilities) 117 | 118 | ## FAQ 119 | 120 | **"Is this project a replacement for my `tmux.conf`?"** 121 | 122 | - **Short answer**: Not yet. 123 | - **Long answer**: This is our plans for this project. Currently, we don't support all possible tmux configurations and options, but we plan to support the most common ones. 124 | 125 | **"What happens if I need something that is not supported by BetterTmux?"** 126 | - We recommend using your `tmux.conf` alongside BetterTmux. This allows you to use any native tmux command as an escape hatch. 127 | 128 | 129 | ## License 130 | MIT 131 | -------------------------------------------------------------------------------- /assets/preview-v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bettervim/better-tmux/bb16638d89a77ad303f521ed17347ee6b6f82695/assets/preview-v1.png -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "vcs": { 4 | "enabled": false, 5 | "clientKind": "git", 6 | "useIgnoreFile": false 7 | }, 8 | "files": { 9 | "ignoreUnknown": false, 10 | "ignore": ["**/*.js", "**/*.d.ts"] 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "tab" 15 | }, 16 | "organizeImports": { 17 | "enabled": true 18 | }, 19 | "linter": { 20 | "enabled": true, 21 | "rules": { 22 | "recommended": true 23 | } 24 | }, 25 | "javascript": { 26 | "formatter": { 27 | "quoteStyle": "double" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/1-setup.md: -------------------------------------------------------------------------------- 1 | [← Back](./README.md) / [Next →](./2-basic-usage.md) 2 | 3 | # 1. Setup 4 | 5 | - [Install](1-setup.md#install) 6 | - [Setting up your config](1-setup.md#setting-up-your-config) 7 | - [Testing](1-setup.md#testing) 8 | - [Update](1-setup.md#update) 9 | - [Uninstall](1-setup.md#uninstall) 10 | 11 | 12 | ## Install 13 | 14 | Install `better-tmux` CLI: 15 | ```sh 16 | curl -sSL https://raw.githubusercontent.com/bettervim/better-tmux/main/scripts/install.sh | bash 17 | ``` 18 | 19 | The CLI contain only two commands / arguments: 20 | 21 | - `--version`: Display the version installed 22 | - `--file`: Specifies the file you'll use to customize your tmux 23 | 24 | > 💡 Don't worry about this for now, we'll cover the basic usage later. 25 | 26 | ## Setting up your config 27 | In the folder where you want to store your configuration (we recommend ~/), run the following command: 28 | ```sh 29 | git clone https://github.com/bettervim/better-tmux-template.git ~/better-tmux && rm -rf better-tmux/.git 30 | ``` 31 | Now, install the dependencies using your favorite package manager: 32 | 33 | ```sh 34 | pnpm install 35 | # or bun install 36 | # or yarn install 37 | # or npm install 38 | ``` 39 | 40 | ## Testing 41 | 42 | To test changes in your configuration, you'll need to run the better-tmux CLI, specifying your configuration file. For example: 43 | ```sh 44 | better-tmux --file ~/better-tmux/index.tsx 45 | ``` 46 | 47 | We recommend you to modify your `tmux.conf` to execute the CLI on every reload and point to the `index.tsx` of your config folder: 48 | ```sh 49 | # ~/tmux.conf 50 | run-shell 'better-tmux --file ~/better-tmux/index.tsx' 51 | ``` 52 | 53 | ## Update 54 | To update `better-tmux` CLI, run the following command: 55 | ```sh 56 | curl -sSL https://raw.githubusercontent.com/bettervim/better-tmux/main/scripts/update.sh | bash 57 | ``` 58 | > [!TIP] 59 | > Additionally, you need to update your `better-tmux` package inside of your tmux config using npm / yarn (or pnpm / bun / etc). 60 | 61 | ## Uninstall 62 | To uninstall `better-tmux` CLI, run the following command: 63 | ```sh 64 | curl -sSL https://raw.githubusercontent.com/bettervim/better-tmux/main/scripts/uninstall.sh | bash 65 | ``` 66 | 67 |
68 | 69 | [← Back](./README.md) / [Next →](./2-basic-usage.md) 70 | -------------------------------------------------------------------------------- /docs/2-basic-usage.md: -------------------------------------------------------------------------------- 1 | [← Back](./1-setup.md) / [Next →](./3-api-reference.md) 2 | 3 | # 2. Basic Usage 4 | - [Understanding customizations](2-basic-usage.md#understanding-customizations) 5 | - [Usage of index.tsx](2-basic-usage.md#usage-of-indextsx) 6 | - [Integrating with tmux.conf](2-basic-usage.md#integrating-with-your-tmuxconf) 7 | - [BetterTmux packages](2-basic-usage.md#bettertmux-packages-better-tmux) 8 | 9 | As we did previously, you used a template to set up your config. This template is essentially a JavaScript/TypeScript project with React pre-configured and `better-tmux` installed. 10 | 11 | From this template, the only thing you need to focus on is the `index.tsx`; the rest works like any JavaScript project. 12 | 13 | ## Understanding customizations 14 | After cloning and setting up your config using our template, you'll end up with something like that in your config: 15 | ```typescript 16 | import { BetterTmuxConfig, Box, WindowConfig, useTheme } from 'better-tmux' 17 | import { Clock, Hostname } from 'better-tmux/widgets' 18 | 19 | const Window = ({ type, number, name }: WindowConfig) => { 20 | const theme = useTheme() 21 | return ( 22 | 27 | {number}: {name} 28 | 29 | ) 30 | } 31 | 32 | const CustomStatusLeft = () => { 33 | const theme = useTheme() 34 | 35 | return ( 36 | 37 | 38 | 🚀 39 | Test 40 | 41 | 42 | ) 43 | } 44 | 45 | export default { 46 | theme: 'nord', 47 | options: { 48 | prefix: 'C-a' 49 | }, 50 | status: { 51 | left: , 52 | right: , 53 | position: 'top' 54 | }, 55 | window: (window) => 56 | } satisfies BetterTmuxConfig 57 | ``` 58 | 59 | Let's break this customizastion into multiple parts to understand what we're doing in here 🏃 60 | 61 | ### Customizing windows 62 | As you might know, TMUX allows you to create multiple windows per session. One of the most common customizations is modifying the window appearance, such as setting a layout for the window (e.g., `(number): (name)`) or changing the colors for each state (active, normal, zoomed, etc.). 63 | 64 | With BetterTmux, all you need to customize your windows is to create a component that receives props of type `WindowConfig` and returns the layout and UI you want. After that, you just need to export this component as a field of the object config `window`. Here is an example: 65 | 66 | ```typescript 67 | const Window = ({ type, number, name }: WindowConfig) => { 68 | const theme = useTheme() 69 | return ( 70 | 75 | {number}: {name} 76 | 77 | ) 78 | } 79 | 80 | export default { 81 | // ... other customizations 82 | window: (window) => 83 | } 84 | ``` 85 | 86 | > 💡 You can use the `type` prop to display different colors or layout based on the type of window, for example: `active` windows are blue, and `normal` are red. 87 | 88 | ### Customizing status bar 89 | TMUX has a status bar with two parts, a status-left and a status-right, with additional configurations related to the status bar itself. 90 | 91 | In the above example, we've made some customizations to it, modifying the layout of status-left, status-right, and status-position. 92 | 93 | To customize both status-left and status-right, you can create your own component to display pre-built widgets or create your own from scratch using BetterTmux building blocks. After that, you just need to attach them to the config via the status object: 94 | 95 | ```typescript 96 | const CustomStatusLeft = () => { 97 | const theme = useTheme() 98 | 99 | return ( 100 | 101 | 102 | 🚀 103 | Test 104 | 105 | 106 | ) 107 | } 108 | export default { 109 | status: { 110 | left: , 111 | position: 'top' 112 | }, 113 | } 114 | ``` 115 | Additionally, you can modify other aspects of the status, like `bg` (background color) or even its position. To see more, check out the [API reference of the object config](https://github.com/bettervim/better-tmux/blob/main/docs/3-api-reference.md#configuration). 116 | 117 | ### Themes 118 | As you might have noticed, BetterTmux can handle themes, which is an important part of your configuration. If you've used TMUX for a while, you'll know that changing your TMUX theme often means changing your TMUX layout as well. However, BetterTmux handles theme changes without affecting the UI. 119 | 120 | Whether you're switching your status bar using pre-built widgets or building your own, if you want to change the theme to fit your config (like vim or terminal), all you need to do is change the `theme` field in the configuration. 121 | 122 | To ensure your customizations remain consistent with the current theme, use the `useTheme` hook like we did in the example above: 123 | ```typescript 124 | const CustomStatusLeft = () => { 125 | const theme = useTheme() 126 | 127 | return ( 128 | 129 | 130 | 🚀 131 | Test 132 | 133 | 134 | ) 135 | } 136 | ``` 137 | 138 | ### Setting global options 139 | 140 | A common task when creating a `tmux.conf` is setting global options. This probably makes up 50% of your config, right? BetterTmux offers a way to do that via the `options` object. For example, if you need to set a title for your session, you would use `tmux set -g set-titles-string "title :)"`. With BetterTmux, you can do it like this: 141 | ```typescript 142 | export default { 143 | options: { setTitlesString: "title :)" } 144 | } 145 | ``` 146 | 147 | Check out the `options` [API Reference](https://github.com/bettervim/better-tmux/blob/main/docs/3-api-reference.md#configuration) to see more. 148 | 149 | ## Usage of `index.tsx` 150 | 151 | The main configuration file for BetterTmux is `index.tsx`. This file is where you define your tmux setup using TypeScript and JSX. You'll notice that this file exports an object with your customizations. These configurations are read by the BetterTmux CLI and do the magic for you. To better understand the flow, it's basically like this: 152 | 1. Write your customizations using React. 153 | 2. Run `better-tmux --file /path/to/your-config/index.tsx`. 154 | 3. And tada 🎉 155 | 156 | Notice that the `better-tmux` CLI reads your object and transforms everything into tmux native configs. 157 | 158 | ## Integrating with your `tmux.conf` 159 | 160 | A common and productive approach is to keep your configs together in dotfiles. BetterTmux fits perfectly into this use case if you integrate it with your `tmux.conf` file. Since `tmux.conf` is essentially a file read by tmux, all you need to do is add a line to ensure that every reload of your tmux also executes the `better-tmux` CLI: 161 | 162 | ```sh 163 | # ~/tmux.conf 164 | run-shell 'better-tmux --file /path/to/your-config/index.tsx' 165 | ``` 166 | 167 | ## BetterTmux Packages (`better-tmux`) 168 | 169 | Along with the setup, you'll install the `better-tmux` package. This package exports some useful resources for your config: 170 | 171 | - Building blocks: `` and `` 172 | - Pre-built widgets: ``, ``, ``, etc. 173 | - TMUX global variables through `tmux`, such as `tmux.globals.sessionName` 174 | - Hooks: `useTheme()` 175 | 176 | These resources are used internally by presets and components, but they are available for you to build your own customizations. 177 | 178 | Check out the [API Reference](./api-reference.md) to see more. 179 | 180 | 181 | [← Back](./1-setup.md) / [Next →](./3-api-reference.md) 182 | -------------------------------------------------------------------------------- /docs/3-api-reference.md: -------------------------------------------------------------------------------- 1 | [← Back](./2-basic-usage.md) / [Next →](./4-guides.md) 2 | 3 | # 3. API Reference 4 | - [Configuration](3-api-reference.md#configuration) 5 | - [Themes](3-api-reference.md#themes) 6 | - [Components](3-api-reference.md#components) 7 | - [Example](3-api-reference.md#example) 8 | - [Hooks](3-api-reference.md#hooks) 9 | - [Widgets](3-api-reference.md#widgets) 10 | - [Utilities](3-api-reference.md#utilities) 11 | 12 | ## Configuration 13 | The exported object has the following type signature and options: 14 | ```typescript 15 | export type WindowConfig = { 16 | number: number, 17 | name: string, 18 | type: "active" | "normal" 19 | } 20 | 21 | export type Theme = 22 | | "catppuccin-mocha" 23 | | "catppuccin-latte" 24 | | "catppuccin-macchiato" 25 | | "catppuccin-frappe" 26 | | "nord" 27 | | "dracula" 28 | | "onedark" 29 | | "onelight" 30 | | "onedark-dark" 31 | | "onedark-vivid" 32 | | "tokyonight" 33 | | "tokyonight-moon" 34 | | "tokyonight-day" 35 | | "tokyonight-storm" 36 | | "ayu" 37 | | "ayu-dark" 38 | | "ayu-light" 39 | 40 | export type Status = { 41 | fg?: string, 42 | bg?: string, 43 | left?: JSX.Element, 44 | right?: JSX.Element, 45 | position?: "top" | "bottom" 46 | } 47 | 48 | 49 | type Toggle = "on" | "off" 50 | 51 | export type Options = { 52 | terminalOverrides?: string, 53 | escapeTime?: number, 54 | paneBaseIndex?: number, 55 | statusKeys?: "vi" | "emacs", 56 | modeKeys?: "vi" | "emacs", 57 | setTitles?: Toggle, 58 | setTitlesString?: string, 59 | prefix?: string, 60 | baseIndex?: number, 61 | historyLimit?: number, 62 | defaultTerminal?: string, 63 | mouse?: string, 64 | renumberWindows?: Toggle, 65 | aggressiveResize?: boolean, 66 | } 67 | 68 | type TmuxCommand = 69 | | 'select-pane' 70 | | 'new-window' 71 | | 'new-window' 72 | | 'split-window' 73 | | 'select-pane' 74 | | 'select-window' 75 | | 'kill-pane' 76 | | 'kill-window' 77 | | 'resize-pane' 78 | | 'swap-pane' 79 | | 'rename-window' 80 | | 'list-panes' 81 | | 'list-windows' 82 | | 'list-sessions' 83 | | 'attach-session' 84 | | 'detach-client' 85 | | 'show-messages' 86 | | 'display-message' 87 | | 'copy-mode' 88 | | 'paste-buffer' 89 | 90 | export type Bind = { 91 | key: string, 92 | command: TmuxCommand, 93 | options?: string[] 94 | } 95 | 96 | export type BetterTmuxConfig = { 97 | bindings?: Bind[], 98 | options?: Options, 99 | theme?: Theme, 100 | status?: Status, 101 | window?: (config: WindowConfig) => JSX.Element 102 | } 103 | ``` 104 | 105 | ## Themes 106 | The supported themes are: 107 | - Catppuccin 108 | - Nord 109 | - Dracula 110 | 111 | > 💡 Do you need a theme? Feel free to open a PR; it's pretty simple. Check out this [file](https://github.com/bettervim/better-tmux/blob/main/packages/lib/src/hooks/use-theme.ts). 112 | 113 | ## Components 114 | ### `` and `` 115 | 116 | These are the most primitive building blocks of BetterTmux. They offer you a way to create your own components within the BetterTmux runtime. 117 | They are quite similar in practice; you can use only `` if you want, but I prefer to use `` sometimes to improve semantics and readability. 118 | 119 | ### Example 120 | 121 | ```typescript 122 | import { Box, Text } from 'better-tmux' 123 | 124 | const MyStatusLeft = () => ( 125 | 126 | Testing :) 127 | 128 | ) 129 | ``` 130 | 131 | As you notice, since they're components, they can receive props. Here is a complete list of props: 132 | 133 | ### Props Table 134 | 135 | | Prop | Type | 136 | | -------------- | ------- | 137 | | `bg` | string | 138 | | `fg` | string | 139 | | `padding` | number | 140 | | `paddingLeft` | number | 141 | | `paddingRight` | number | 142 | | `gap` | number | 143 | | `bold` | boolean | 144 | | `italic` | boolean | 145 | 146 | ## Hooks 147 | ### useTheme(...) 148 | This hook allows you to get the theme palette based on what you provided to the config object. All the widgets provided by BetterTmux and other defaults are based on this theme. 149 | ```typescript 150 | import { useTheme } from 'better-tmux' 151 | 152 | const MyWindow = () => { 153 | const theme = useTheme() 154 | return Window 155 | } 156 | ``` 157 | **API Reference** 158 | ```typescript 159 | const useTheme: void => ThemePalette; 160 | 161 | type ThemePalette = { 162 | background: string, 163 | foreground: string, 164 | primary: string, 165 | secondary: string, 166 | } 167 | ``` 168 | ## Widgets 169 | Widgets are essentially components that you can import and render to any part of the TMUX status bar. 170 | 171 | ```typescript 172 | import { SessionName, Clock } from 'better-tmux/widgets' 173 | 174 | const MyStatusLeft = () => 175 | 176 | 177 | 178 | ``` 179 | 180 | ### `` 181 | | Prop | Type | 182 | | -------------- | ------- | 183 | | `icon` | string | 184 | 185 | 186 | ### `` 187 | 188 | | Prop | Type | 189 | | -------------- | ------- | 190 | | `icon` | string | 191 | 192 | ### `` 193 | | Prop | Type | 194 | | -------------- | ------- | 195 | | `icon` | string | 196 | | `format` | string | 197 | 198 | ### `` 199 | ```typescript 200 | import { Clock, tmux } from 'better-tmux/widgets' 201 | 202 | const MyStatus = () => 203 | ``` 204 | | Prop | Type | 205 | | -------------- | ------- | 206 | | `icon` | string | 207 | | `format` | string | 208 | 209 | > 💡 The format props are used to customize the format and ensure you can format based on your locale. 210 | 211 | ## Utilities 212 | Some nice utilities that enables you access TMUX globals or work with TMUX native features. 213 | ### `tmux` 214 | A collection of constants, global variables, etc acessible directly via TypeScript. Example: 215 | ```typescript 216 | import { tmux } from 'better-tmux' 217 | 218 | const MyStatusLeft = () => {tmux.globals.sessionName} 219 | ``` 220 | **API Reference** 221 | ```typescript 222 | const tmux: { 223 | globals: { 224 | hostname: string, 225 | sessionName: string, 226 | hour_24: string, 227 | hour_12: string, 228 | hour_24_single: string, 229 | hour_12_single: string, 230 | minute: string, 231 | second: string, 232 | am_pm_upper: string, 233 | am_pm_lower: string, 234 | year: string, 235 | month: string, 236 | day: string, 237 | abbreviated_month: string, 238 | full_month: string, 239 | abbreviated_day: string, 240 | full_day: string, 241 | week_number: string, 242 | day_of_year: string, 243 | day_of_week_number: string, 244 | } 245 | } 246 | ``` 247 | 248 | [← Back](./2-basic-usage.md) / [Next →](./4-guides.md) 249 | -------------------------------------------------------------------------------- /docs/4-guides.md: -------------------------------------------------------------------------------- 1 | [← Back](./3-api-reference.md) 2 | 3 | # 4. Guides 4 | - [Creating custom bindings](4-guides.md#creating-custom-bindings) 5 | 6 | ## Creating custom bindings 7 | Example: 8 | ```typescript 9 | export default { 10 | bindings: [ 11 | { 12 | key: 'x', 13 | command: 'kill-window' 14 | }, 15 | { 16 | key: 'h', 17 | command: 'select-pane', 18 | options: ['-L'] 19 | } 20 | ] 21 | } 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Documentation 📕 2 | This guide will help you get started with BetterTmux, a tool designed to unlock the full power of TMUX using TypeScript and JSX. 3 | Below you will find links to various sections of the documentation. 4 | 5 | ## Table of contents 🔗 6 | 7 | - [Setup](1-setup.md) 8 | - [Install](1-setup.md#install) 9 | - [Setting up your config](1-setup.md#setting-up-your-config) 10 | - [Testing](1-setup.md#testing) 11 | - [Update](1-setup.md#update) 12 | - [Uninstall](1-setup.md#uninstall) 13 | - [Basic Usage](2-basic-usage.md) 14 | - [Understanding customizations](2-basic-usage.md#understanding-customizations) 15 | - [Usage of index.tsx](2-basic-usage.md#usage-of-indextsx) 16 | - [Integrating with tmux.conf](2-basic-usage.md#integrating-with-your-tmuxconf) 17 | - [BetterTmux packages](2-basic-usage.md#bettertmux-packages-better-tmux) 18 | - [API Reference](3-api-reference.md) 19 | - [Configuration](3-api-reference.md#configuration) 20 | - [Themes](3-api-reference.md#themes) 21 | - [Components](3-api-reference.md#components) 22 | - [Example](3-api-reference.md#example) 23 | - [Hooks](3-api-reference.md#hooks) 24 | - [Widgets](3-api-reference.md#widgets) 25 | - [Utilities](3-api-reference.md#utilities) 26 | - [Guides](4-guides.md) 27 | - [Creating custom bindings](4-guides.md#creating-custom-bindings) 28 | 29 | 30 | ## Overview 🔎 31 | 32 | BetterTmux allows you to configure TMUX using a modern and powerful approach with TypeScript and JSX. 33 | This documentation covers everything from setting up the tool to using its features effectively. 34 | 35 | ## Getting Started ✨ 36 | 37 | To get started, follow the instructions in the [Setup](1-setup.md) section. 38 | 39 | ## Usage 💡 40 | 41 | Learn how to use BetterTmux with examples and detailed explanations in the [Basic Usage](2-basic-usage.md) section. 42 | 43 | ## API 📦 44 | 45 | For detailed information about the functions, objects, and components provided by BetterTmux, refer to the [API Reference](3-api-reference.md) section. 46 | 47 | Happy TMUXing ✨ 🚀 48 | -------------------------------------------------------------------------------- /examples/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Box, 3 | type BetterTmuxConfig, 4 | type WindowConfig, 5 | useTheme, 6 | tmux, 7 | } from "better-tmux"; 8 | import { Calendar, SessionName } from "better-tmux/widgets"; 9 | 10 | const Window = ({ type, number, name }: WindowConfig) => { 11 | const theme = useTheme(); 12 | const styles = 13 | type === "active" 14 | ? { bg: theme.primary, fg: theme.background, bold: true } 15 | : {}; 16 | 17 | return ( 18 | 19 | {number}: {name} 20 | 21 | ); 22 | }; 23 | 24 | const StatusLeft = () => ( 25 | 26 | 27 | 28 | ); 29 | 30 | const StatusRight = () => ( 31 | 32 | 35 | 36 | ); 37 | 38 | export default { 39 | theme: "ayu-light", 40 | bindings: [ 41 | { 42 | key: "x", 43 | command: "kill-window", 44 | }, 45 | ], 46 | options: { 47 | setTitlesString: " ", 48 | prefix: "C-a", 49 | }, 50 | status: { 51 | left: , 52 | right: , 53 | position: "top", 54 | }, 55 | window: (props) => , 56 | } satisfies BetterTmuxConfig; 57 | -------------------------------------------------------------------------------- /examples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-tmux/examples", 3 | "version": "1.0.0", 4 | "private": true, 5 | "type": "module", 6 | "dependencies": { 7 | "@types/react": "^18.3.3", 8 | "better-tmux": "workspace:*", 9 | "ink": "^5.0.1", 10 | "react": "18.3.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "./" 4 | ], 5 | "compilerOptions": { 6 | "target": "ES6", 7 | "module": "ESNext", 8 | "lib": [ 9 | "DOM", 10 | "ES6" 11 | ], 12 | "allowJs": true, 13 | "jsx": "react-jsx", 14 | "strict": true, 15 | "moduleResolution": "nodenext", 16 | "esModuleInterop": true, 17 | "skipLibCheck": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-tmux", 3 | "private": true, 4 | "scripts": { 5 | "build": "turbo build", 6 | "dev": "turbo dev", 7 | "lint": "turbo lint", 8 | "release": "release-it" 9 | }, 10 | "devDependencies": { 11 | "@biomejs/biome": "1.9.4", 12 | "@release-it/bumper": "^6.0.1", 13 | "@release-it/keep-a-changelog": "^5.0.0", 14 | "release-it": "^17.5.0", 15 | "turbo": "latest" 16 | }, 17 | "engines": { 18 | "node": ">=18" 19 | }, 20 | "packageManager": "pnpm@9.0.0", 21 | "version": "0.0.15", 22 | "dependencies": { 23 | "@changesets/cli": "^2.27.7", 24 | "typescript": "^5.5.3" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cli", 3 | "module": "index.js", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "pnpm rescript build -w", 7 | "build": "pnpm rescript build", 8 | "reload": "bun src/Main.res.js --file ../../examples/index.tsx" 9 | }, 10 | "dependencies": { 11 | "better-tmux": "workspace:*", 12 | "@rescript/core": "1.4.0", 13 | "@rescript/react": "0.12.2", 14 | "@types/node": "^20.14.9", 15 | "react": "18.3.1", 16 | "react-reconciler": "0.29.2", 17 | "rescript": "11.1.1", 18 | "rescript-bun": "0.5.0" 19 | }, 20 | "trustedDependencies": [ 21 | "rescript" 22 | ], 23 | "version": "0.0.15" 24 | } 25 | -------------------------------------------------------------------------------- /packages/cli/rescript.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-tmux-cli", 3 | "sources": [ 4 | { 5 | "dir": "src", 6 | "subdirs": true 7 | } 8 | ], 9 | "package-specs": [ 10 | { 11 | "module": "esmodule", 12 | "in-source": true 13 | } 14 | ], 15 | "jsx": { 16 | "module": "TmuxJsx" 17 | }, 18 | "suffix": ".res.js", 19 | "bs-dependencies": [ 20 | "@rescript/core", 21 | "rescript-bun" 22 | ], 23 | "bsc-flags": [ 24 | "-open RescriptCore", 25 | "-open RescriptBun", 26 | "-open RescriptBun.Globals" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /packages/cli/src/Main.res: -------------------------------------------------------------------------------- 1 | Runner.run()->ignore 2 | -------------------------------------------------------------------------------- /packages/cli/src/bindings/BetterTmux.res: -------------------------------------------------------------------------------- 1 | type themePalette = { 2 | background: string, 3 | foreground: string, 4 | primary: string, 5 | secondary: string, 6 | } 7 | 8 | @module("better-tmux") 9 | external fallback: themePalette = "catppuccinMocha" 10 | 11 | @module("better-tmux") 12 | external getTheme: string => option = "getTheme" 13 | -------------------------------------------------------------------------------- /packages/cli/src/bindings/BunX.res: -------------------------------------------------------------------------------- 1 | 2 | type parseArgs<'values> = { 3 | values: 'values 4 | } 5 | 6 | type flag = { 7 | @as("type") type_: string, 8 | } 9 | 10 | type parseArgsParams<'values> = { 11 | args: array, 12 | options: 'values, 13 | strict: bool, 14 | allowPositionals: bool, 15 | } 16 | 17 | @module("util") 18 | external parseArgs: parseArgsParams<'flags> => parseArgs<'values> = "parseArgs" 19 | -------------------------------------------------------------------------------- /packages/cli/src/bindings/ReactReconcilier.res: -------------------------------------------------------------------------------- 1 | module type Reconcilier = { 2 | type root 3 | type componentElement 4 | type props 5 | } 6 | 7 | module Make = (R: Reconcilier) => { 8 | type t 9 | type componentElement = R.componentElement 10 | type root = R.root 11 | type payload 12 | type context 13 | type defaultEventPriority 14 | type props = R.props 15 | type hostContext = {isInsideText: bool} 16 | 17 | type createParams<'props> = { 18 | getRootHostContext: unit => hostContext, 19 | appendChildToContainer: (root, componentElement) => unit, 20 | appendInitialChild: (componentElement, componentElement) => unit, 21 | createInstance: (string, props, root) => componentElement, 22 | createTextInstance: (Jsx.element) => componentElement, 23 | prepareUpdate: (componentElement, string, 'props, 'props) => payload, 24 | commitUpdate: (componentElement, payload) => unit, 25 | commitTextUpdate: (componentElement, string, string) => unit, 26 | appendChild: (componentElement, componentElement) => unit, 27 | getChildHostContext: unit => option, 28 | shouldSetTextContent: unit => option, 29 | prepareForCommit: unit => option, 30 | preparePortalMount: unit => unit, 31 | clearContainer: unit => unit, 32 | resetAfterCommit: unit => unit, 33 | resetTextContent: unit => unit, 34 | hideTextInstance: unit => unit, 35 | unhideTextInstance: unit => unit, 36 | getPublicInstance: unit => option, 37 | hideInstance: array => unit, 38 | unhideInstance: unit => unit, 39 | insertBefore: (componentElement, componentElement, componentElement) => unit, 40 | finalizeInitialChildren: unit => bool, 41 | getCurrentEventPriority: unit => defaultEventPriority, 42 | beforeActiveInstanceBlur: unit => unit, 43 | afterActiveInstanceBlur: unit => unit, 44 | detachDeletedInstance: unit => unit, 45 | getInstanceFromNode: unit => option, 46 | prepareScopeUpdate: unit => unit, 47 | getInstanceFromScope: unit => option, 48 | insertInContainerBefore: unit => unit, 49 | removeChildFromContainer: unit => unit, 50 | removeChild: array => unit, 51 | isPrimaryRenderer: bool, 52 | supportsMutation: bool, 53 | supportsPersistence: bool, 54 | supportsHydration: bool, 55 | scheduleTimeout: (unit => unit, int) => int, 56 | cancelTimeout: int => unit, 57 | noTimeout: int, 58 | } 59 | 60 | @module("react-reconciler") 61 | external create: createParams<{..}> => t = "default" 62 | 63 | type container 64 | 65 | @send 66 | external createContainer: ( 67 | t, 68 | root, 69 | int, 70 | Js.Nullable.t, 71 | bool, 72 | Js.Nullable.t, 73 | string, 74 | unit => Js.Nullable.t, 75 | Js.Nullable.t, 76 | ) => container = "createContainer" 77 | 78 | type app = Jsx.element 79 | 80 | @send 81 | external updateContainer: ( 82 | t, 83 | app, 84 | container, 85 | Js.Nullable.t, 86 | unit => Js.Nullable.t, 87 | ) => unit = "updateContainer" 88 | } 89 | -------------------------------------------------------------------------------- /packages/cli/src/core/Bindings.res: -------------------------------------------------------------------------------- 1 | let execute = (bindings: array) => { 2 | bindings->Array.forEach(bind => { 3 | Tmux.exec(Bind(bind.key, bind.command, bind.options->Option.getOr([]))) 4 | }) 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/src/core/Config.res: -------------------------------------------------------------------------------- 1 | type windowType = [ 2 | | #active 3 | | #normal 4 | ] 5 | 6 | type windowParams = { 7 | @as("type") type_: windowType, 8 | number: string, 9 | name: string, 10 | } 11 | 12 | type window = windowParams => TmuxJsx.element 13 | 14 | type status = { 15 | fg?: string, 16 | bg?: string, 17 | left?: TmuxJsx.element, 18 | right?: TmuxJsx.element, 19 | position?: string, 20 | } 21 | 22 | type options = { 23 | terminalOverrides?: string, 24 | escapeTime?: int, 25 | paneBaseIndex?: int, 26 | statusKeys?: string, 27 | setTitles?: string, 28 | setTitlesString?: string, 29 | modeKeys?: string, 30 | prefix?: string, 31 | baseIndex?: int, 32 | historyLimit?: int, 33 | defaultTerminal?: string, 34 | mouse?: string, 35 | renumberWindows?: string, 36 | aggressiveResize?: string, 37 | } 38 | 39 | type bind = { 40 | key: string, 41 | command: string, 42 | options?: array 43 | } 44 | 45 | type config = { 46 | bindings?: array, 47 | theme?: string, 48 | status?: status, 49 | window?: window, 50 | options?: options, 51 | } 52 | 53 | 54 | type mod = {default: config} 55 | 56 | @val external import_: string => promise = "import" 57 | -------------------------------------------------------------------------------- /packages/cli/src/core/Debug.res: -------------------------------------------------------------------------------- 1 | let log = (content) => { 2 | let debugMode = Bun.Env.get(Bun.env, "BETTER_TMUX_DEBUG") 3 | switch debugMode { 4 | | Some("1") => Console.log2("[🔎 BetterTmux] Executing Command: ", content) 5 | | Some(_) 6 | | None => () 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/src/core/GlobalOptions.res: -------------------------------------------------------------------------------- 1 | let tap = (opt, fn) => opt->Option.map(value => fn(value))->ignore 2 | 3 | let execute = (options: Config.options) => { 4 | options.mouse->tap(v => Tmux.exec(SetGlobal(Mouse(v)))) 5 | options.escapeTime->tap(v => Tmux.exec(SetGlobal(EscapeTime(v)))) 6 | options.paneBaseIndex->tap(v => Tmux.exec(SetGlobal(PaneBaseIndex(v)))) 7 | options.statusKeys->tap(v => Tmux.exec(SetGlobal(StatusKeys(v)))) 8 | options.modeKeys->tap(v => Tmux.exec(SetGlobal(ModeKeys(v)))) 9 | options.setTitles->tap(v => Tmux.exec(SetGlobal(SetTitles(v)))) 10 | options.setTitlesString->tap(v => Tmux.exec(SetGlobal(SetTitlesString(v)))) 11 | options.prefix->tap(v => Tmux.exec(SetGlobal(Prefix(v)))) 12 | options.baseIndex->tap(v => Tmux.exec(SetGlobal(BaseIndex(v)))) 13 | options.historyLimit->tap(v => Tmux.exec(SetGlobal(HistoryLimit(v)))) 14 | options.defaultTerminal->tap(v => Tmux.exec(SetGlobal(DefaultTerminal(v)))) 15 | options.terminalOverrides->tap(v => Tmux.exec(SetOverrideGlobal(TerminalOverrides(v)))) 16 | options.renumberWindows->tap(v => Tmux.exec(SetGlobal(RenumberWindows(v)))) 17 | options.aggressiveResize->tap(v => Tmux.exec(SetGlobal(AggressiveResize(v)))) 18 | } 19 | 20 | -------------------------------------------------------------------------------- /packages/cli/src/core/Parser.res: -------------------------------------------------------------------------------- 1 | let spacing = length => Array.make(~length, " ")->Array.join("") 2 | let getPadding = (props: TmuxJsx.Elements.props) => { 3 | switch props.padding { 4 | | None => { 5 | let paddingLeft = props.paddingLeft->Option.mapOr("", spacing) 6 | let paddingRight = props.paddingRight->Option.mapOr("", spacing) 7 | 8 | (paddingLeft, paddingRight) 9 | } 10 | | Some(value) => (spacing(value), spacing(value)) 11 | } 12 | } 13 | 14 | let rec make = (node: Reconcilier.Tree.t, ~body="") => { 15 | let element = (~props, ~children) => { 16 | let (paddingLeft, paddingRight) = getPadding(props) 17 | let gap = props.gap->Option.mapOr("", spacing) 18 | let styles = props->Styles.inline 19 | let children = children->Array.reduceWithIndex("", (body, child, index) => { 20 | let middle = if index === 0 { 21 | "" 22 | } else { 23 | `${styles}${gap}` 24 | } 25 | 26 | `${body}${middle}${child->make}` 27 | }) 28 | 29 | [styles, paddingLeft, children, paddingRight]->Array.join("") 30 | } 31 | 32 | switch node { 33 | | Element(_, props, children) => element(~props, ~children) 34 | | TextElement(value) => `${body}${value->Obj.magic}` 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /packages/cli/src/core/Reconcilier.res: -------------------------------------------------------------------------------- 1 | module Tree = { 2 | type prop = { 3 | name: string, 4 | value: string, 5 | } 6 | 7 | type rec t = 8 | | Element(string, TmuxJsx.Elements.props, array) 9 | | TextElement(Jsx.element) 10 | } 11 | 12 | type root = { 13 | mount: Tree.t => unit, 14 | } 15 | 16 | module Reconcilier = ReactReconcilier.Make({ 17 | type root = root 18 | type componentElement = Tree.t 19 | type props = TmuxJsx.Elements.props 20 | }) 21 | 22 | let reconcilier = Reconcilier.create({ 23 | getRootHostContext: () => {isInsideText: false}, 24 | appendChildToContainer: (parent, child) => { 25 | parent.mount(child) 26 | }, 27 | appendInitialChild: (parent, child) => { 28 | switch parent { 29 | | Element(_, _, children) => children->Array.push(child) 30 | | _ => () 31 | } 32 | }, 33 | createInstance: (name, props, _) => { 34 | Element(name, props, []) 35 | }, 36 | createTextInstance: text => TextElement(text), 37 | prepareUpdate: (_, __, _, _) => { 38 | Obj.magic() 39 | }, 40 | commitUpdate: (_, _) => { 41 | Console.log("commitUpdate") 42 | }, 43 | commitTextUpdate: (_, _, _) => { 44 | Console.log("commitTextUpdate") 45 | }, 46 | appendChild: (_, _) => { 47 | Console.log("appendChild") 48 | Obj.magic() 49 | }, 50 | getChildHostContext: () => Obj.magic(), 51 | shouldSetTextContent: () => Obj.magic(), 52 | prepareForCommit: () => Obj.magic(), 53 | preparePortalMount: () => Obj.magic(), 54 | clearContainer: () => Obj.magic(), 55 | resetAfterCommit: () => Obj.magic(), 56 | resetTextContent: () => Obj.magic(), 57 | hideTextInstance: () => Obj.magic(), 58 | unhideTextInstance: () => Obj.magic(), 59 | getPublicInstance: () => Obj.magic(), 60 | hideInstance: _ => Obj.magic(), 61 | unhideInstance: () => Obj.magic(), 62 | insertBefore: (_, _, _) => Obj.magic(), 63 | finalizeInitialChildren: () => Obj.magic(), 64 | getCurrentEventPriority: () => Obj.magic(), 65 | beforeActiveInstanceBlur: () => Obj.magic(), 66 | afterActiveInstanceBlur: () => Obj.magic(), 67 | detachDeletedInstance: () => Obj.magic(), 68 | getInstanceFromNode: () => Obj.magic(), 69 | prepareScopeUpdate: () => Obj.magic(), 70 | getInstanceFromScope: () => Obj.magic(), 71 | insertInContainerBefore: () => Obj.magic(), 72 | removeChildFromContainer: () => Obj.magic(), 73 | removeChild: _ => Obj.magic(), 74 | isPrimaryRenderer: true, 75 | supportsMutation: true, 76 | supportsPersistence: false, 77 | supportsHydration: false, 78 | scheduleTimeout: Js.Global.setTimeout->Obj.magic, 79 | cancelTimeout: Js.Global.clearTimeout->Obj.magic, 80 | noTimeout: -1, 81 | }) 82 | 83 | let render = (app, root) => { 84 | let container = 85 | reconcilier->Reconcilier.createContainer( 86 | root, 87 | 0, 88 | Js.Nullable.null, 89 | false, 90 | Js.Nullable.null, 91 | "id", 92 | () => Js.Nullable.null, 93 | null, 94 | ) 95 | reconcilier->Reconcilier.updateContainer(app, container, Js.Nullable.null, () => Js.Nullable.null) 96 | } 97 | 98 | -------------------------------------------------------------------------------- /packages/cli/src/core/Renderer.res: -------------------------------------------------------------------------------- 1 | let createRoot = exec => { 2 | let root: Reconcilier.root = { 3 | mount: tree => { 4 | let body = Parser.make(tree) 5 | exec(body) 6 | }, 7 | } 8 | 9 | root 10 | } 11 | 12 | module StatusRenderer = { 13 | let leftRoot = createRoot(body => Tmux.exec(SetGlobal(StatusLeft(body)))) 14 | let rightRoot = createRoot(body => Tmux.exec(SetGlobal(StatusRight(body)))) 15 | 16 | let render = (~theme: BetterTmux.themePalette, ~status: Config.status) => { 17 | let statusBg = status.bg->Option.getOr(theme.background) 18 | let statusFg = status.fg->Option.getOr(theme.foreground) 19 | 20 | switch status.left { 21 | | Some(tree) => Reconcilier.render(tree, leftRoot) 22 | | None => Tmux.exec(SetGlobal(StatusLeft(""))) 23 | } 24 | 25 | switch status.right { 26 | | Some(tree) => Reconcilier.render(tree, rightRoot) 27 | | None => Tmux.exec(SetGlobal(StatusRight(""))) 28 | } 29 | 30 | switch status.position { 31 | | Some(position) => Tmux.exec(SetGlobal(StatusPosition(position))) 32 | | None => () 33 | } 34 | 35 | 36 | Tmux.exec(SetGlobal(StatusBg(statusBg))) 37 | Tmux.exec(SetGlobal(StatusFg(statusFg))) 38 | } 39 | } 40 | 41 | module WindowRenderer = { 42 | let activeRoot = createRoot(body => Tmux.exec(SetGlobal(WindowStatusCurrentFormat(body)))) 43 | let normalRoot = createRoot(body => Tmux.exec(SetGlobal(WindowStatusFormat(body)))) 44 | 45 | let render = (window: Config.window) => { 46 | Reconcilier.render( 47 | window({ 48 | type_: #active, 49 | name: "#W", 50 | number: "#I", 51 | }), 52 | activeRoot, 53 | ) 54 | 55 | Reconcilier.render( 56 | window({ 57 | type_: #normal, 58 | name: "#W", 59 | number: "#I", 60 | }), 61 | normalRoot, 62 | ) 63 | } 64 | } 65 | 66 | let render = (config: Config.config) => { 67 | let (theme, themeName) = Theme.getCurrent(config.theme) 68 | Theme.setEnv(Bun.env, themeName) 69 | 70 | switch config.window { 71 | | Some(window) => WindowRenderer.render(window) 72 | | None => () 73 | } 74 | 75 | switch config.status { 76 | | Some(status) => StatusRenderer.render(~theme, ~status) 77 | | None => () 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /packages/cli/src/core/Runner.res: -------------------------------------------------------------------------------- 1 | type flags<'value> = {file: 'value, version: 'value} 2 | 3 | @module("./version.js") external version: string = "version" 4 | 5 | let run = async () => { 6 | let options: flags = { 7 | file: {type_: "string"}, 8 | version: {type_: "boolean"}, 9 | } 10 | 11 | let {values}: BunX.parseArgs>> = BunX.parseArgs({ 12 | args: Bun.argv, 13 | options, 14 | strict: true, 15 | allowPositionals: true, 16 | }) 17 | 18 | switch values.file { 19 | | None => () 20 | | Some(file) => { 21 | let path = Path.resolve([file]) 22 | let {default: config} = await Config.import_(path) 23 | 24 | Renderer.render(config) 25 | 26 | switch config.options { 27 | | None => () 28 | | Some(options) => GlobalOptions.execute(options) 29 | } 30 | 31 | switch config.bindings { 32 | | None => () 33 | | Some(bindings) => Bindings.execute(bindings) 34 | } 35 | } 36 | } 37 | 38 | switch values.version { 39 | | None => () 40 | | Some(_) => Console.log(`better-tmux @ ${version} 🚀`) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /packages/cli/src/core/Styles.res: -------------------------------------------------------------------------------- 1 | let toString = (styles: TmuxJsx.Elements.props) => { 2 | let str = (~name, value) => value->Option.mapOr("", v => `${name}=${v}`) 3 | let bool = (~name, value) => value->Option.mapOr("", v => v ? name : "") 4 | 5 | let bg = str(~name="bg", styles.bg) 6 | let fg = str(~name="fg", styles.fg) 7 | let bold = bool(~name="bold", styles.bold) 8 | 9 | [bg, fg, bold] 10 | ->Array.filter(v => v !== "") 11 | ->Array.join(",") 12 | } 13 | 14 | let inline = styles => `#[${toString(styles)}]` 15 | -------------------------------------------------------------------------------- /packages/cli/src/core/Theme.res: -------------------------------------------------------------------------------- 1 | let getCurrent = (theme: option) => { 2 | let theme = theme->Option.getOr("catppuccin-mocha") 3 | 4 | let themePalette = BetterTmux.getTheme(theme)->Option.getOr(BetterTmux.fallback) 5 | (themePalette, theme) 6 | } 7 | 8 | @set 9 | external setEnv: (Bun.Env.t, string) => unit = "BETTER_TMUX_THEME" 10 | -------------------------------------------------------------------------------- /packages/cli/src/core/Tmux.res: -------------------------------------------------------------------------------- 1 | type options = 2 | | StatusFg(string) 3 | | StatusBg(string) 4 | | StatusLeft(string) 5 | | StatusRight(string) 6 | | StatusPosition(string) 7 | | WindowStatusCurrentFormat(string) 8 | | WindowStatusFormat(string) 9 | | TerminalOverrides(string) 10 | | EscapeTime(int) 11 | | PaneBaseIndex(int) 12 | | StatusKeys(string) 13 | | ModeKeys(string) 14 | | SetTitles(string) 15 | | SetTitlesString(string) 16 | | Prefix(string) 17 | | BaseIndex(int) 18 | | HistoryLimit(int) 19 | | DefaultTerminal(string) 20 | | Mouse(string) 21 | | RenumberWindows(string) 22 | | AggressiveResize(string) 23 | 24 | type command = 25 | | SetGlobal(options) 26 | | SetOverrideGlobal(options) 27 | | Bind(string, string, array) 28 | 29 | let parseOptions = options => 30 | switch options { 31 | | StatusFg(value) => `status-fg "${value}"` 32 | | StatusBg(value) => `status-bg "${value}"` 33 | | StatusLeft(value) => `status-left "${value}"` 34 | | StatusRight(value) => `status-right "${value}"` 35 | | StatusPosition(value) => `status-position "${value}"` 36 | | WindowStatusCurrentFormat(value) => `window-status-current-format "${value}"` 37 | | WindowStatusFormat(value) => `window-status-format "${value}"` 38 | | TerminalOverrides(value) => `terminal-overrides "${value}"` 39 | | EscapeTime(value) => `escape-time "${value->Int.toString}"` 40 | | PaneBaseIndex(value) => `pane-base-index "${value->Int.toString}"` 41 | | StatusKeys(value) => `status-keys "${value}"` 42 | | ModeKeys(value) => `mode-keys "${value}"` 43 | | SetTitles(value) => `set-titles ${value}` 44 | | SetTitlesString(value) => `set-titles-string "${value}"` 45 | | Prefix(value) => `prefix "${value}"` 46 | | BaseIndex(value) => `base-index "${value->Int.toString}"` 47 | | HistoryLimit(value) => `history-limit "${value->Int.toString}"` 48 | | DefaultTerminal(value) => `default-terminal "${value}"` 49 | | Mouse(value) => `mouse "${value}"` 50 | | RenumberWindows(value) => `renumber-windows ${value}` 51 | | AggressiveResize(value) => `aggressive-resize ${value}` 52 | } 53 | 54 | let parse = command => 55 | switch command { 56 | | SetGlobal(options) => `tmux set -g ${options->parseOptions}` 57 | | SetOverrideGlobal(options) => `tmux set -ga ${options->parseOptions}` 58 | | Bind(key, command, options) => `tmux bind ${key} ${command} ${options->Array.join(" ")}` 59 | } 60 | 61 | let exec = command => { 62 | let parsedCommand = command->parse 63 | Debug.log(parsedCommand) 64 | parsedCommand->ChildProcess.execSync->ignore 65 | } 66 | -------------------------------------------------------------------------------- /packages/cli/src/core/TmuxJsx.res: -------------------------------------------------------------------------------- 1 | type element = Jsx.element 2 | 3 | type component<'props> = Jsx.component<'props> 4 | type componentLike<'props, 'return> = Jsx.componentLike<'props, 'return> 5 | 6 | type fragmentProps = {children?: element} 7 | 8 | @module("react/jsx-runtime") external jsxFragment: component = "Fragment" 9 | 10 | @module("react/jsx-runtime") 11 | external jsx: (component<'props>, 'props) => element = "jsx" 12 | 13 | @module("react/jsx-runtime") 14 | external jsxs: (component<'props>, 'props) => element = "jsxs" 15 | 16 | @val external null: Jsx.element = "null" 17 | 18 | external float: float => Jsx.element = "%identity" 19 | external int: int => Jsx.element = "%identity" 20 | external string: string => Jsx.element = "%identity" 21 | external array: array => element = "%identity" 22 | 23 | module Elements = { 24 | external someElement: Jsx.element => option = "%identity" 25 | 26 | type props = { 27 | children?: JsxU.element, 28 | bg?: string, 29 | fg?: string, 30 | bold?: bool, 31 | padding?: int, 32 | paddingLeft?: int, 33 | paddingRight?: int, 34 | gap?: int, 35 | 36 | } 37 | 38 | @module("react/jsx-runtime") 39 | external jsx: (string, props) => element = "jsx" 40 | 41 | @module("react/jsx-runtime") 42 | external jsxs: (string, props) => element = "jsxs" 43 | } 44 | -------------------------------------------------------------------------------- /packages/cli/src/core/version.js: -------------------------------------------------------------------------------- 1 | import packageJson from '../../package.json' 2 | 3 | export const version = packageJson.version 4 | -------------------------------------------------------------------------------- /packages/lib/.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/release-it/schema/release-it.json", 3 | "plugins": { 4 | "@release-it/keep-a-changelog": { 5 | "filename": "packages/lib/CHANGELOG.md" 6 | }, 7 | "@release-it/bumper": { 8 | "in": "packages/lib/package.json", 9 | "out": ["packages/lib/package.json"] 10 | } 11 | }, 12 | "github": { 13 | "release": true, 14 | "assets": [".build/*"] 15 | }, 16 | "git": { 17 | "commitMessage": "v${version} [skip-ci]", 18 | "tagAnnotation": "v${version} [skip-ci]", 19 | "tagName": "v${version}" 20 | }, 21 | "npm": { 22 | "publish": false 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/lib/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | ### Breaking change 💥 11 | 12 | - Renamed widget `Date` to `Calendar` to avoid conflicts with the native `Date` constructor 13 | 14 | ## [0.0.15] - 2024-10-20 15 | 16 | ### Fixes 🐛 17 | 18 | - Updated the `--version` command to display the version correctly 19 | 20 | ## [0.0.14] - 2024-10-20 21 | 22 | ### Fixes 🐛 23 | 24 | - Fixed the `better-tmux --version` command 25 | 26 | ## [0.0.13] - 2024-07-15 27 | 28 | ### Fixes 🐛 29 | - Add option to override globals by @fdaciuk in https://github.com/bettervim/better-tmux/pull/15 30 | 31 | ### Features 🚀 32 | - Added support for popular themes (by @vmarcosp in https://github.com/bettervim/better-tmux/pull/14) including: 33 | - Ayu 34 | - Onedark 35 | - Tokyonight 36 | 37 | ## [0.0.12] - 2024-07-13 38 | 39 | ### Added 📦 40 | 41 | - Added verbose logs via `BETTER_TMUX_DEBUG=1` env var 42 | 43 | ## [0.0.11] - 2024-07-13 44 | 45 | ### Fixes 🐛 46 | - Fixed background and foreground color for default window 47 | - Removed unused warning messages 48 | 49 | ## [0.0.10] - 2024-07-13 50 | 51 | ### Features 🚀 52 | - Support for custom bindings by @vmarcosp in https://github.com/bettervim/better-tmux/pull/11 53 | -------------------------------------------------------------------------------- /packages/lib/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "better-tmux", 3 | "version": "0.0.15", 4 | "exports": { 5 | ".": { 6 | "types": "./dist/index.d.ts", 7 | "default": "./dist/index.js" 8 | }, 9 | "./presets": { 10 | "types": "./dist/presets/index.d.ts", 11 | "default": "./dist/presets/index.js" 12 | }, 13 | "./widgets": { 14 | "types": "./dist/widgets/index.d.ts", 15 | "default": "./dist/widgets/index.js" 16 | } 17 | }, 18 | "type": "module", 19 | "scripts": { 20 | "build": "tsc -p tsconfig.json", 21 | "dev": "tsc -p tsconfig.json --watch" 22 | }, 23 | "dependencies": { 24 | "@types/node": "^20.14.9", 25 | "@types/react": "^18.3.3", 26 | "react": "^18.3.1", 27 | "typescript": "^5.6.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /packages/lib/src/components.tsx: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from "react" 2 | 3 | export type ElementProps = { 4 | padding?: number, 5 | paddingLeft?: number, 6 | paddingRight?: number, 7 | gap?: number, 8 | bold?: boolean, 9 | bg?: string, 10 | fg?: string, 11 | children: ReactNode, 12 | } 13 | 14 | export const Box = ({ children, ...props}: ElementProps) => ( 15 | {children} 16 | ) 17 | 18 | export const Text = ({ children, ...props}: ElementProps) => ( 19 | {children} 20 | ) 21 | -------------------------------------------------------------------------------- /packages/lib/src/global.d.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from './types.ts' 2 | import type { ElementProps } from "./components.tsx" 3 | 4 | declare global { 5 | namespace JSX { 6 | // eslint-disable-next-line @typescript-eslint/consistent-type-definitions 7 | interface IntrinsicElements { 8 | 'text': ElementProps, 9 | 'box': ElementProps 10 | } 11 | } 12 | 13 | declare namespace NodeJS { 14 | interface ProcessEnv { 15 | BETTER_TMUX_THEME: Theme 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/lib/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-theme.js' 2 | -------------------------------------------------------------------------------- /packages/lib/src/hooks/use-theme.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from "../types.js" 2 | 3 | type ThemePalette = { 4 | background: string, 5 | foreground: string, 6 | primary: string, 7 | secondary: string, 8 | } 9 | 10 | const nord = { 11 | foreground: "#D8DEE9", 12 | background: "#2E3440", 13 | primary: "#94BECE", 14 | secondary: "#94BECE", 15 | } 16 | 17 | const dracula = { 18 | foreground: "#f8f8f2", 19 | background: "#282a36", 20 | primary: "#bd93f9", 21 | secondary: "#50fa7b", 22 | } 23 | 24 | export const catppuccinMocha = { 25 | foreground: "#cdd6f4", 26 | background: "#282a36", 27 | primary: "#b1baf7", 28 | secondary: "#50fa7b", 29 | } 30 | 31 | const catppuccinMacchiato = { 32 | foreground: "#cad3f5", 33 | background: "#24273a", 34 | primary: "#b7bdf8", 35 | secondary: "#50fa7b", 36 | } 37 | 38 | const catppuccinFrappe = { 39 | foreground: "#cad3f5", 40 | background: "#24273a", 41 | primary: "#babbf1", 42 | secondary: "#50fa7b", 43 | } 44 | 45 | const catppuccinLatte = { 46 | foreground: "#4c4f69", 47 | background: "#dce0e8", 48 | primary: "#7287fd", 49 | secondary: "#50fa7b", 50 | } 51 | 52 | const onedark = { 53 | foreground: "#abb2bf", 54 | background: "#282c34", 55 | primary: "#98c379", 56 | secondary: "#d19a66", 57 | } 58 | 59 | const onedarkDark = { 60 | foreground: "#abb2bf", 61 | background: "#000000", 62 | primary: "#89ca78", 63 | secondary: "#d19a66", 64 | } 65 | 66 | const onelight = { 67 | foreground: "#6a6a6a", 68 | background: "#fafafa", 69 | primary: "#1da912", 70 | secondary: "#ee9025", 71 | } 72 | 73 | const onedarkVivid = { 74 | foreground: "#abb2bf", 75 | background: "#282c34", 76 | primary: "#89ca78", 77 | secondary: "#d19a66", 78 | } 79 | 80 | const tokyonightStorm = { 81 | foreground: "#c0caf5", 82 | background: "#24283b", 83 | primary: "#7aa2f7", 84 | secondary: "#9ece6a", 85 | } 86 | 87 | const tokyonightMoon = { 88 | foreground: "#c8d3f5", 89 | background: "#222436", 90 | primary: "#82aaff", 91 | secondary: "#c3e88d", 92 | } 93 | 94 | const tokyonightDay = { 95 | foreground: "#222436", 96 | background: "#c8d3f5", 97 | primary: "#82aaff", 98 | secondary: "#c3e88d", 99 | } 100 | 101 | const tokyonight = { 102 | ...tokyonightStorm, 103 | background: "#1a1b26", 104 | } 105 | 106 | const ayu = { 107 | foreground: "#cfcebe", 108 | background: "#212733", 109 | primary: "#e59448", 110 | secondary: "#b7cb52", 111 | } 112 | 113 | const ayuDark = { 114 | foreground: "#cfcebe", 115 | background: "#0f141a", 116 | primary: "#ff7734", 117 | secondary: "#b7cb52", 118 | } 119 | 120 | const ayuLight = { 121 | foreground: "#616772", 122 | background: "#fafafa", 123 | primary: "#ff7734", 124 | secondary: "#b7cb52", 125 | } 126 | 127 | export function getTheme(theme?: Theme): ThemePalette { 128 | const selectedTheme = theme || process.env.BETTER_TMUX_THEME || 'catppuccin-mocha' 129 | 130 | switch (selectedTheme) { 131 | case 'catppuccin-mocha': return catppuccinMocha 132 | case 'catppuccin-macchiato': return catppuccinMacchiato 133 | case 'catppuccin-latte': return catppuccinLatte 134 | case 'catppuccin-frappe': return catppuccinFrappe 135 | case 'nord': return nord 136 | case 'dracula': return dracula 137 | case 'onedark': return onedark 138 | case 'onelight': return onelight 139 | case 'onedark-vivid': return onedarkVivid 140 | case 'onedark-dark': return onedarkDark 141 | case 'tokyonight': return tokyonight 142 | case 'tokyonight-storm': return tokyonightStorm 143 | case 'tokyonight-moon': return tokyonightMoon 144 | case 'tokyonight-day': return tokyonightDay 145 | case 'ayu': return ayu 146 | case 'ayu-dark': return ayuDark 147 | case 'ayu-light': return ayuLight 148 | } 149 | } 150 | 151 | export const useTheme = getTheme 152 | -------------------------------------------------------------------------------- /packages/lib/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components.js' 2 | export * from './types.js' 3 | export * from './hooks/index.js' 4 | export * from './tmux.js' 5 | -------------------------------------------------------------------------------- /packages/lib/src/presets/index.tsx: -------------------------------------------------------------------------------- 1 | import { useTheme } from '../hooks/use-theme.js' 2 | import type { BetterTmuxConfig, WindowConfig } from '../types.js' 3 | 4 | const Window = ({ type, number, name }: WindowConfig) => { 5 | const theme = useTheme() 6 | const style = type === "active" ? { bg: theme.primary, fg: theme.foreground } : {} 7 | 8 | return ( 9 | 10 | {number}: {name} 11 | 12 | ) 13 | } 14 | 15 | export const minimal = { 16 | window: (window) => 17 | } satisfies BetterTmuxConfig 18 | -------------------------------------------------------------------------------- /packages/lib/src/tmux.ts: -------------------------------------------------------------------------------- 1 | const globals = { 2 | hostname: "#H", 3 | sessionName: "#S", 4 | 5 | hour_24: '%H', 6 | hour_12: '%I', 7 | hour_24_single: '%k', 8 | hour_12_single: '%l', 9 | minute: '%M', 10 | second: '%S', 11 | am_pm_upper: '%p', 12 | am_pm_lower: '%P', 13 | 14 | year: '%Y', 15 | month: '%m', 16 | day: '%d', 17 | abbreviated_month: '%b', 18 | full_month: '%B', 19 | abbreviated_day: '%a', 20 | full_day: '%A', 21 | week_number: '%V', 22 | day_of_year: '%j', 23 | day_of_week_number: '%u', 24 | } 25 | 26 | export const tmux = { 27 | globals, 28 | } as const 29 | -------------------------------------------------------------------------------- /packages/lib/src/types.ts: -------------------------------------------------------------------------------- 1 | export type WindowConfig = { 2 | number: number, 3 | name: string, 4 | type: "active" | "normal" 5 | } 6 | 7 | export type Theme = 8 | | "catppuccin-mocha" 9 | | "catppuccin-latte" 10 | | "catppuccin-macchiato" 11 | | "catppuccin-frappe" 12 | | "nord" 13 | | "dracula" 14 | | "onedark" 15 | | "onelight" 16 | | "onedark-dark" 17 | | "onedark-vivid" 18 | | "tokyonight" 19 | | "tokyonight-moon" 20 | | "tokyonight-day" 21 | | "tokyonight-storm" 22 | | "ayu" 23 | | "ayu-dark" 24 | | "ayu-light" 25 | 26 | export type Status = { 27 | fg?: string, 28 | bg?: string, 29 | left?: JSX.Element, 30 | right?: JSX.Element, 31 | position?: "top" | "bottom" 32 | } 33 | 34 | 35 | type Toggle = "on" | "off" 36 | 37 | export type Options = { 38 | terminalOverrides?: string, 39 | escapeTime?: number, 40 | paneBaseIndex?: number, 41 | statusKeys?: "vi" | "emacs", 42 | modeKeys?: "vi" | "emacs", 43 | setTitles?: Toggle, 44 | setTitlesString?: string, 45 | prefix?: string, 46 | baseIndex?: number, 47 | historyLimit?: number, 48 | defaultTerminal?: string, 49 | mouse?: string, 50 | renumberWindows?: Toggle, 51 | aggressiveResize?: boolean, 52 | } 53 | 54 | type TmuxCommand = 55 | | 'select-pane' 56 | | 'new-window' 57 | | 'new-window' 58 | | 'split-window' 59 | | 'select-pane' 60 | | 'select-window' 61 | | 'kill-pane' 62 | | 'kill-window' 63 | | 'resize-pane' 64 | | 'swap-pane' 65 | | 'rename-window' 66 | | 'list-panes' 67 | | 'list-windows' 68 | | 'list-sessions' 69 | | 'attach-session' 70 | | 'detach-client' 71 | | 'show-messages' 72 | | 'display-message' 73 | | 'copy-mode' 74 | | 'paste-buffer' 75 | 76 | export type Bind = { 77 | key: string, 78 | command: TmuxCommand, 79 | options?: string[] 80 | } 81 | 82 | export type BetterTmuxConfig = { 83 | bindings?: Bind[], 84 | options?: Options, 85 | theme?: Theme, 86 | status?: Status, 87 | window?: (config: WindowConfig) => JSX.Element 88 | } 89 | -------------------------------------------------------------------------------- /packages/lib/src/widgets/index.tsx: -------------------------------------------------------------------------------- 1 | import { tmux } from "../tmux.js"; 2 | import { Widget, WidgetIcon, WidgetLabel } from "./widget.js"; 3 | export * from "./widget.js"; 4 | 5 | type CommonModuleProps = { 6 | icon?: string; 7 | }; 8 | 9 | type HostnameProps = CommonModuleProps; 10 | 11 | export const Hostname = ({ icon }: HostnameProps) => { 12 | return ( 13 | 14 | {icon ?? ""} 15 | {tmux.globals.hostname} 16 | 17 | ); 18 | }; 19 | 20 | type SessionNameProps = CommonModuleProps; 21 | 22 | export const SessionName = ({ icon }: SessionNameProps) => { 23 | return ( 24 | 25 | {icon ?? ""} 26 | {tmux.globals.sessionName} 27 | 28 | ); 29 | }; 30 | 31 | type ClockProps = CommonModuleProps & { 32 | format?: string; 33 | }; 34 | 35 | export const Clock = ({ format, icon }: ClockProps) => { 36 | const value = format ?? `${tmux.globals.hour_24}:${tmux.globals.minute}`; 37 | 38 | return ( 39 | 40 | {icon ?? ""} 41 | {value} 42 | 43 | ); 44 | }; 45 | 46 | type CalendarProps = CommonModuleProps & { 47 | format?: string; 48 | }; 49 | 50 | export const Calendar = ({ format, icon }: CalendarProps) => { 51 | const value = 52 | format ?? `${tmux.globals.month}-${tmux.globals.day}-${tmux.globals.year}`; 53 | 54 | return ( 55 | 56 | {icon ?? ""} 57 | {value} 58 | 59 | ); 60 | }; 61 | -------------------------------------------------------------------------------- /packages/lib/src/widgets/types.ts: -------------------------------------------------------------------------------- 1 | export type CommonModuleProps = { 2 | icon?: string, 3 | } 4 | 5 | -------------------------------------------------------------------------------- /packages/lib/src/widgets/widget.tsx: -------------------------------------------------------------------------------- 1 | import type { PropsWithChildren } from "react" 2 | import { useTheme } from "../hooks/use-theme.js" 3 | 4 | export const Widget = ({ children }: PropsWithChildren) => { 5 | const theme = useTheme() 6 | 7 | return ( 8 | 9 | {children} 10 | 11 | ) 12 | } 13 | 14 | export const WidgetIcon = ({ children }: PropsWithChildren) => { 15 | const theme = useTheme() 16 | 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | 24 | export const WidgetLabel = ({ children }: PropsWithChildren) => { 25 | const theme = useTheme() 26 | 27 | return ( 28 | 29 | {children} 30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /packages/lib/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "declaration": true, 5 | "declarationDir": "dist", 6 | "module": "nodenext", 7 | "allowJs": true, 8 | "jsx": "react-jsx", 9 | "strict": true, 10 | "moduleResolution": "nodenext", 11 | "esModuleInterop": true, 12 | "skipLibCheck": true 13 | }, 14 | "include": ["./src/**/*"] 15 | } 16 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@changesets/cli': 12 | specifier: ^2.27.7 13 | version: 2.27.7 14 | typescript: 15 | specifier: ^5.5.3 16 | version: 5.5.3 17 | devDependencies: 18 | '@biomejs/biome': 19 | specifier: 1.9.4 20 | version: 1.9.4 21 | '@release-it/bumper': 22 | specifier: ^6.0.1 23 | version: 6.0.1(release-it@17.5.0(typescript@5.5.3)) 24 | '@release-it/keep-a-changelog': 25 | specifier: ^5.0.0 26 | version: 5.0.0(release-it@17.5.0(typescript@5.5.3)) 27 | release-it: 28 | specifier: ^17.5.0 29 | version: 17.5.0(typescript@5.5.3) 30 | turbo: 31 | specifier: latest 32 | version: 2.0.4 33 | 34 | examples: 35 | dependencies: 36 | '@types/react': 37 | specifier: ^18.3.3 38 | version: 18.3.3 39 | better-tmux: 40 | specifier: workspace:* 41 | version: link:../packages/lib 42 | ink: 43 | specifier: ^5.0.1 44 | version: 5.0.1(@types/react@18.3.3)(react@18.3.1) 45 | react: 46 | specifier: 18.3.1 47 | version: 18.3.1 48 | 49 | packages/cli: 50 | dependencies: 51 | '@rescript/core': 52 | specifier: 1.4.0 53 | version: 1.4.0(rescript@11.1.1) 54 | '@rescript/react': 55 | specifier: 0.12.2 56 | version: 0.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 57 | '@types/node': 58 | specifier: ^20.14.9 59 | version: 20.14.9 60 | better-tmux: 61 | specifier: workspace:* 62 | version: link:../lib 63 | react: 64 | specifier: 18.3.1 65 | version: 18.3.1 66 | react-reconciler: 67 | specifier: 0.29.2 68 | version: 0.29.2(react@18.3.1) 69 | rescript: 70 | specifier: 11.1.1 71 | version: 11.1.1 72 | rescript-bun: 73 | specifier: 0.5.0 74 | version: 0.5.0(@rescript/core@1.4.0(rescript@11.1.1))(rescript@11.1.1) 75 | 76 | packages/lib: 77 | dependencies: 78 | '@types/node': 79 | specifier: ^20.14.9 80 | version: 20.14.9 81 | '@types/react': 82 | specifier: ^18.3.3 83 | version: 18.3.3 84 | react: 85 | specifier: ^18.3.1 86 | version: 18.3.1 87 | typescript: 88 | specifier: ^5.6.2 89 | version: 5.6.2 90 | 91 | packages: 92 | 93 | '@alcalzone/ansi-tokenize@0.1.3': 94 | resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} 95 | engines: {node: '>=14.13.1'} 96 | 97 | '@babel/code-frame@7.24.7': 98 | resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 99 | engines: {node: '>=6.9.0'} 100 | 101 | '@babel/helper-validator-identifier@7.24.7': 102 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 103 | engines: {node: '>=6.9.0'} 104 | 105 | '@babel/highlight@7.24.7': 106 | resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 107 | engines: {node: '>=6.9.0'} 108 | 109 | '@babel/runtime@7.24.7': 110 | resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} 111 | engines: {node: '>=6.9.0'} 112 | 113 | '@biomejs/biome@1.9.4': 114 | resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} 115 | engines: {node: '>=14.21.3'} 116 | hasBin: true 117 | 118 | '@biomejs/cli-darwin-arm64@1.9.4': 119 | resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} 120 | engines: {node: '>=14.21.3'} 121 | cpu: [arm64] 122 | os: [darwin] 123 | 124 | '@biomejs/cli-darwin-x64@1.9.4': 125 | resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} 126 | engines: {node: '>=14.21.3'} 127 | cpu: [x64] 128 | os: [darwin] 129 | 130 | '@biomejs/cli-linux-arm64-musl@1.9.4': 131 | resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} 132 | engines: {node: '>=14.21.3'} 133 | cpu: [arm64] 134 | os: [linux] 135 | 136 | '@biomejs/cli-linux-arm64@1.9.4': 137 | resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} 138 | engines: {node: '>=14.21.3'} 139 | cpu: [arm64] 140 | os: [linux] 141 | 142 | '@biomejs/cli-linux-x64-musl@1.9.4': 143 | resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} 144 | engines: {node: '>=14.21.3'} 145 | cpu: [x64] 146 | os: [linux] 147 | 148 | '@biomejs/cli-linux-x64@1.9.4': 149 | resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} 150 | engines: {node: '>=14.21.3'} 151 | cpu: [x64] 152 | os: [linux] 153 | 154 | '@biomejs/cli-win32-arm64@1.9.4': 155 | resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} 156 | engines: {node: '>=14.21.3'} 157 | cpu: [arm64] 158 | os: [win32] 159 | 160 | '@biomejs/cli-win32-x64@1.9.4': 161 | resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} 162 | engines: {node: '>=14.21.3'} 163 | cpu: [x64] 164 | os: [win32] 165 | 166 | '@changesets/apply-release-plan@7.0.4': 167 | resolution: {integrity: sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==} 168 | 169 | '@changesets/assemble-release-plan@6.0.3': 170 | resolution: {integrity: sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==} 171 | 172 | '@changesets/changelog-git@0.2.0': 173 | resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} 174 | 175 | '@changesets/cli@2.27.7': 176 | resolution: {integrity: sha512-6lr8JltiiXPIjDeYg4iM2MeePP6VN/JkmqBsVA5XRiy01hGS3y629LtSDvKcycj/w/5Eur1rEwby/MjcYS+e2A==} 177 | hasBin: true 178 | 179 | '@changesets/config@3.0.2': 180 | resolution: {integrity: sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==} 181 | 182 | '@changesets/errors@0.2.0': 183 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 184 | 185 | '@changesets/get-dependents-graph@2.1.1': 186 | resolution: {integrity: sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==} 187 | 188 | '@changesets/get-release-plan@4.0.3': 189 | resolution: {integrity: sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==} 190 | 191 | '@changesets/get-version-range-type@0.4.0': 192 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 193 | 194 | '@changesets/git@3.0.0': 195 | resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} 196 | 197 | '@changesets/logger@0.1.0': 198 | resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} 199 | 200 | '@changesets/parse@0.4.0': 201 | resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} 202 | 203 | '@changesets/pre@2.0.0': 204 | resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} 205 | 206 | '@changesets/read@0.6.0': 207 | resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} 208 | 209 | '@changesets/should-skip-package@0.1.0': 210 | resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} 211 | 212 | '@changesets/types@4.1.0': 213 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 214 | 215 | '@changesets/types@6.0.0': 216 | resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} 217 | 218 | '@changesets/write@0.3.1': 219 | resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} 220 | 221 | '@iarna/toml@2.2.5': 222 | resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} 223 | 224 | '@inquirer/figures@1.0.3': 225 | resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} 226 | engines: {node: '>=18'} 227 | 228 | '@manypkg/find-root@1.1.0': 229 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 230 | 231 | '@manypkg/get-packages@1.1.3': 232 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 233 | 234 | '@nodelib/fs.scandir@2.1.5': 235 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 236 | engines: {node: '>= 8'} 237 | 238 | '@nodelib/fs.stat@2.0.5': 239 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 240 | engines: {node: '>= 8'} 241 | 242 | '@nodelib/fs.walk@1.2.8': 243 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 244 | engines: {node: '>= 8'} 245 | 246 | '@octokit/auth-token@4.0.0': 247 | resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} 248 | engines: {node: '>= 18'} 249 | 250 | '@octokit/core@5.2.0': 251 | resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} 252 | engines: {node: '>= 18'} 253 | 254 | '@octokit/endpoint@9.0.5': 255 | resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} 256 | engines: {node: '>= 18'} 257 | 258 | '@octokit/graphql@7.1.0': 259 | resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} 260 | engines: {node: '>= 18'} 261 | 262 | '@octokit/openapi-types@22.2.0': 263 | resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} 264 | 265 | '@octokit/plugin-paginate-rest@11.3.1': 266 | resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} 267 | engines: {node: '>= 18'} 268 | peerDependencies: 269 | '@octokit/core': '5' 270 | 271 | '@octokit/plugin-request-log@4.0.1': 272 | resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} 273 | engines: {node: '>= 18'} 274 | peerDependencies: 275 | '@octokit/core': '5' 276 | 277 | '@octokit/plugin-rest-endpoint-methods@13.2.2': 278 | resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} 279 | engines: {node: '>= 18'} 280 | peerDependencies: 281 | '@octokit/core': ^5 282 | 283 | '@octokit/request-error@5.1.0': 284 | resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} 285 | engines: {node: '>= 18'} 286 | 287 | '@octokit/request@8.4.0': 288 | resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} 289 | engines: {node: '>= 18'} 290 | 291 | '@octokit/rest@20.1.1': 292 | resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} 293 | engines: {node: '>= 18'} 294 | 295 | '@octokit/types@13.5.0': 296 | resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} 297 | 298 | '@pnpm/config.env-replace@1.1.0': 299 | resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} 300 | engines: {node: '>=12.22.0'} 301 | 302 | '@pnpm/network.ca-file@1.0.2': 303 | resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} 304 | engines: {node: '>=12.22.0'} 305 | 306 | '@pnpm/npm-conf@2.2.2': 307 | resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} 308 | engines: {node: '>=12'} 309 | 310 | '@release-it/bumper@6.0.1': 311 | resolution: {integrity: sha512-yeQsbGNMzzN0c/5JV1awXP6UHX/kJamXCKR6/daS0YQfj98SZXAcLn3JEq+qfK/Jq/cnATnlz5r6UY0cfBkm1A==} 312 | engines: {node: '>=18'} 313 | peerDependencies: 314 | release-it: ^17.0.0 315 | 316 | '@release-it/keep-a-changelog@5.0.0': 317 | resolution: {integrity: sha512-Y1xqZe50jqK8qKlzEfGLVTjSkn57e/QlQMXHhKRWGgsv8Qy/X0LN1CJphoskZu7p7sAD3RihxhXrjJhRPE4JcA==} 318 | engines: {node: '>=18'} 319 | peerDependencies: 320 | release-it: ^17.0.0 321 | 322 | '@rescript/core@1.4.0': 323 | resolution: {integrity: sha512-2zwlYp/SFvjb9M4PcS+NCTNXeXJ9ZHSn5Q4o+EQq9Yfc1jOgsAWqBhu7RW6n2IceugH0H/6eZjqYT7IZAoLRsw==} 324 | peerDependencies: 325 | rescript: ^11.1.0-rc.7 326 | 327 | '@rescript/react@0.12.2': 328 | resolution: {integrity: sha512-EOF19dLTG4Y9K59JqMjG5yfvIsrMZqfxGC2J/oe9gGgrMiUrzZh3KH9khTcR1Z3Ih0lRViSh0/iYnJz20gGoag==} 329 | peerDependencies: 330 | react: '>=18.0.0' 331 | react-dom: '>=18.0.0' 332 | 333 | '@sindresorhus/is@5.6.0': 334 | resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} 335 | engines: {node: '>=14.16'} 336 | 337 | '@sindresorhus/merge-streams@2.3.0': 338 | resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} 339 | engines: {node: '>=18'} 340 | 341 | '@szmarczak/http-timer@5.0.1': 342 | resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} 343 | engines: {node: '>=14.16'} 344 | 345 | '@tootallnate/quickjs-emscripten@0.23.0': 346 | resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} 347 | 348 | '@types/http-cache-semantics@4.0.4': 349 | resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} 350 | 351 | '@types/node@12.20.55': 352 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 353 | 354 | '@types/node@20.14.9': 355 | resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} 356 | 357 | '@types/prop-types@15.7.12': 358 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 359 | 360 | '@types/react@18.3.3': 361 | resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} 362 | 363 | '@types/semver@7.5.8': 364 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 365 | 366 | agent-base@7.1.1: 367 | resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} 368 | engines: {node: '>= 14'} 369 | 370 | ansi-align@3.0.1: 371 | resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 372 | 373 | ansi-colors@4.1.3: 374 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 375 | engines: {node: '>=6'} 376 | 377 | ansi-escapes@4.3.2: 378 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 379 | engines: {node: '>=8'} 380 | 381 | ansi-escapes@7.0.0: 382 | resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} 383 | engines: {node: '>=18'} 384 | 385 | ansi-regex@5.0.1: 386 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 387 | engines: {node: '>=8'} 388 | 389 | ansi-regex@6.0.1: 390 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 391 | engines: {node: '>=12'} 392 | 393 | ansi-styles@3.2.1: 394 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 395 | engines: {node: '>=4'} 396 | 397 | ansi-styles@4.3.0: 398 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 399 | engines: {node: '>=8'} 400 | 401 | ansi-styles@6.2.1: 402 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 403 | engines: {node: '>=12'} 404 | 405 | argparse@1.0.10: 406 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 407 | 408 | argparse@2.0.1: 409 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 410 | 411 | array-union@2.1.0: 412 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 413 | engines: {node: '>=8'} 414 | 415 | ast-types@0.13.4: 416 | resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} 417 | engines: {node: '>=4'} 418 | 419 | async-retry@1.3.3: 420 | resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} 421 | 422 | auto-bind@5.0.1: 423 | resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} 424 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 425 | 426 | balanced-match@1.0.2: 427 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 428 | 429 | base64-js@1.5.1: 430 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 431 | 432 | basic-ftp@5.0.5: 433 | resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} 434 | engines: {node: '>=10.0.0'} 435 | 436 | before-after-hook@2.2.3: 437 | resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 438 | 439 | better-path-resolve@1.0.0: 440 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 441 | engines: {node: '>=4'} 442 | 443 | bl@4.1.0: 444 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 445 | 446 | boxen@7.1.1: 447 | resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} 448 | engines: {node: '>=14.16'} 449 | 450 | brace-expansion@1.1.11: 451 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 452 | 453 | braces@3.0.3: 454 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 455 | engines: {node: '>=8'} 456 | 457 | buffer@5.7.1: 458 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 459 | 460 | bundle-name@4.1.0: 461 | resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} 462 | engines: {node: '>=18'} 463 | 464 | cacheable-lookup@7.0.0: 465 | resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} 466 | engines: {node: '>=14.16'} 467 | 468 | cacheable-request@10.2.14: 469 | resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} 470 | engines: {node: '>=14.16'} 471 | 472 | callsites@3.1.0: 473 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 474 | engines: {node: '>=6'} 475 | 476 | camelcase@7.0.1: 477 | resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 478 | engines: {node: '>=14.16'} 479 | 480 | chalk@2.4.2: 481 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 482 | engines: {node: '>=4'} 483 | 484 | chalk@4.1.2: 485 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 486 | engines: {node: '>=10'} 487 | 488 | chalk@5.3.0: 489 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 490 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 491 | 492 | chardet@0.7.0: 493 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 494 | 495 | ci-info@3.9.0: 496 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 497 | engines: {node: '>=8'} 498 | 499 | cli-boxes@3.0.0: 500 | resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 501 | engines: {node: '>=10'} 502 | 503 | cli-cursor@3.1.0: 504 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} 505 | engines: {node: '>=8'} 506 | 507 | cli-cursor@4.0.0: 508 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 509 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 510 | 511 | cli-spinners@2.9.2: 512 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 513 | engines: {node: '>=6'} 514 | 515 | cli-truncate@4.0.0: 516 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 517 | engines: {node: '>=18'} 518 | 519 | cli-width@4.1.0: 520 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} 521 | engines: {node: '>= 12'} 522 | 523 | clone@1.0.4: 524 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 525 | engines: {node: '>=0.8'} 526 | 527 | code-excerpt@4.0.0: 528 | resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} 529 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 530 | 531 | color-convert@1.9.3: 532 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 533 | 534 | color-convert@2.0.1: 535 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 536 | engines: {node: '>=7.0.0'} 537 | 538 | color-name@1.1.3: 539 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 540 | 541 | color-name@1.1.4: 542 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 543 | 544 | concat-map@0.0.1: 545 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 546 | 547 | config-chain@1.1.13: 548 | resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 549 | 550 | configstore@6.0.0: 551 | resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} 552 | engines: {node: '>=12'} 553 | 554 | convert-to-spaces@2.0.1: 555 | resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} 556 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 557 | 558 | cosmiconfig@9.0.0: 559 | resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} 560 | engines: {node: '>=14'} 561 | peerDependencies: 562 | typescript: '>=4.9.5' 563 | peerDependenciesMeta: 564 | typescript: 565 | optional: true 566 | 567 | cross-spawn@5.1.0: 568 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 569 | 570 | cross-spawn@7.0.3: 571 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 572 | engines: {node: '>= 8'} 573 | 574 | crypto-random-string@4.0.0: 575 | resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} 576 | engines: {node: '>=12'} 577 | 578 | csstype@3.1.3: 579 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 580 | 581 | data-uri-to-buffer@4.0.1: 582 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 583 | engines: {node: '>= 12'} 584 | 585 | data-uri-to-buffer@6.0.2: 586 | resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} 587 | engines: {node: '>= 14'} 588 | 589 | debug@4.3.5: 590 | resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} 591 | engines: {node: '>=6.0'} 592 | peerDependencies: 593 | supports-color: '*' 594 | peerDependenciesMeta: 595 | supports-color: 596 | optional: true 597 | 598 | decompress-response@6.0.0: 599 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 600 | engines: {node: '>=10'} 601 | 602 | deep-extend@0.6.0: 603 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 604 | engines: {node: '>=4.0.0'} 605 | 606 | default-browser-id@5.0.0: 607 | resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} 608 | engines: {node: '>=18'} 609 | 610 | default-browser@5.2.1: 611 | resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} 612 | engines: {node: '>=18'} 613 | 614 | defaults@1.0.4: 615 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 616 | 617 | defer-to-connect@2.0.1: 618 | resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} 619 | engines: {node: '>=10'} 620 | 621 | define-lazy-prop@3.0.0: 622 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 623 | engines: {node: '>=12'} 624 | 625 | degenerator@5.0.1: 626 | resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} 627 | engines: {node: '>= 14'} 628 | 629 | deprecation@2.3.1: 630 | resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} 631 | 632 | detect-indent@6.1.0: 633 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 634 | engines: {node: '>=8'} 635 | 636 | detect-indent@7.0.1: 637 | resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} 638 | engines: {node: '>=12.20'} 639 | 640 | detect-newline@4.0.1: 641 | resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} 642 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 643 | 644 | dir-glob@3.0.1: 645 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 646 | engines: {node: '>=8'} 647 | 648 | dot-prop@6.0.1: 649 | resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} 650 | engines: {node: '>=10'} 651 | 652 | eastasianwidth@0.2.0: 653 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 654 | 655 | emoji-regex@10.3.0: 656 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 657 | 658 | emoji-regex@8.0.0: 659 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 660 | 661 | emoji-regex@9.2.2: 662 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 663 | 664 | enquirer@2.4.1: 665 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 666 | engines: {node: '>=8.6'} 667 | 668 | env-paths@2.2.1: 669 | resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} 670 | engines: {node: '>=6'} 671 | 672 | environment@1.1.0: 673 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 674 | engines: {node: '>=18'} 675 | 676 | error-ex@1.3.2: 677 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 678 | 679 | escape-goat@4.0.0: 680 | resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} 681 | engines: {node: '>=12'} 682 | 683 | escape-string-regexp@1.0.5: 684 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 685 | engines: {node: '>=0.8.0'} 686 | 687 | escape-string-regexp@2.0.0: 688 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 689 | engines: {node: '>=8'} 690 | 691 | escodegen@2.1.0: 692 | resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} 693 | engines: {node: '>=6.0'} 694 | hasBin: true 695 | 696 | esprima@4.0.1: 697 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 698 | engines: {node: '>=4'} 699 | hasBin: true 700 | 701 | estraverse@5.3.0: 702 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 703 | engines: {node: '>=4.0'} 704 | 705 | esutils@2.0.3: 706 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 707 | engines: {node: '>=0.10.0'} 708 | 709 | execa@5.1.1: 710 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 711 | engines: {node: '>=10'} 712 | 713 | execa@8.0.1: 714 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 715 | engines: {node: '>=16.17'} 716 | 717 | extendable-error@0.1.7: 718 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 719 | 720 | external-editor@3.1.0: 721 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 722 | engines: {node: '>=4'} 723 | 724 | fast-glob@3.3.2: 725 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 726 | engines: {node: '>=8.6.0'} 727 | 728 | fastq@1.17.1: 729 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 730 | 731 | fetch-blob@3.2.0: 732 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 733 | engines: {node: ^12.20 || >= 14.13} 734 | 735 | fill-range@7.1.1: 736 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 737 | engines: {node: '>=8'} 738 | 739 | find-up@4.1.0: 740 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 741 | engines: {node: '>=8'} 742 | 743 | find-up@5.0.0: 744 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 745 | engines: {node: '>=10'} 746 | 747 | find-yarn-workspace-root2@1.2.16: 748 | resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} 749 | 750 | form-data-encoder@2.1.4: 751 | resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} 752 | engines: {node: '>= 14.17'} 753 | 754 | formdata-polyfill@4.0.10: 755 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 756 | engines: {node: '>=12.20.0'} 757 | 758 | fs-extra@11.2.0: 759 | resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} 760 | engines: {node: '>=14.14'} 761 | 762 | fs-extra@7.0.1: 763 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 764 | engines: {node: '>=6 <7 || >=8'} 765 | 766 | fs-extra@8.1.0: 767 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 768 | engines: {node: '>=6 <7 || >=8'} 769 | 770 | fs.realpath@1.0.0: 771 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 772 | 773 | function-bind@1.1.2: 774 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 775 | 776 | get-east-asian-width@1.2.0: 777 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} 778 | engines: {node: '>=18'} 779 | 780 | get-stream@6.0.1: 781 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 782 | engines: {node: '>=10'} 783 | 784 | get-stream@8.0.1: 785 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 786 | engines: {node: '>=16'} 787 | 788 | get-uri@6.0.3: 789 | resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} 790 | engines: {node: '>= 14'} 791 | 792 | git-up@7.0.0: 793 | resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} 794 | 795 | git-url-parse@14.0.0: 796 | resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==} 797 | 798 | glob-parent@5.1.2: 799 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 800 | engines: {node: '>= 6'} 801 | 802 | glob@7.2.3: 803 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 804 | deprecated: Glob versions prior to v9 are no longer supported 805 | 806 | global-dirs@3.0.1: 807 | resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} 808 | engines: {node: '>=10'} 809 | 810 | globby@11.1.0: 811 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 812 | engines: {node: '>=10'} 813 | 814 | globby@14.0.2: 815 | resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} 816 | engines: {node: '>=18'} 817 | 818 | got@12.6.1: 819 | resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} 820 | engines: {node: '>=14.16'} 821 | 822 | got@13.0.0: 823 | resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} 824 | engines: {node: '>=16'} 825 | 826 | graceful-fs@4.2.10: 827 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 828 | 829 | graceful-fs@4.2.11: 830 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 831 | 832 | has-flag@3.0.0: 833 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 834 | engines: {node: '>=4'} 835 | 836 | has-flag@4.0.0: 837 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 838 | engines: {node: '>=8'} 839 | 840 | hasown@2.0.2: 841 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 842 | engines: {node: '>= 0.4'} 843 | 844 | http-cache-semantics@4.1.1: 845 | resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} 846 | 847 | http-proxy-agent@7.0.2: 848 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} 849 | engines: {node: '>= 14'} 850 | 851 | http2-wrapper@2.2.1: 852 | resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} 853 | engines: {node: '>=10.19.0'} 854 | 855 | https-proxy-agent@7.0.5: 856 | resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} 857 | engines: {node: '>= 14'} 858 | 859 | human-id@1.0.2: 860 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 861 | 862 | human-signals@2.1.0: 863 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 864 | engines: {node: '>=10.17.0'} 865 | 866 | human-signals@5.0.0: 867 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 868 | engines: {node: '>=16.17.0'} 869 | 870 | iconv-lite@0.4.24: 871 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 872 | engines: {node: '>=0.10.0'} 873 | 874 | ieee754@1.2.1: 875 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 876 | 877 | ignore@5.3.1: 878 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 879 | engines: {node: '>= 4'} 880 | 881 | import-fresh@3.3.0: 882 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 883 | engines: {node: '>=6'} 884 | 885 | import-lazy@4.0.0: 886 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 887 | engines: {node: '>=8'} 888 | 889 | imurmurhash@0.1.4: 890 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 891 | engines: {node: '>=0.8.19'} 892 | 893 | indent-string@5.0.0: 894 | resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} 895 | engines: {node: '>=12'} 896 | 897 | inflight@1.0.6: 898 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 899 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 900 | 901 | inherits@2.0.4: 902 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 903 | 904 | ini@1.3.8: 905 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 906 | 907 | ini@2.0.0: 908 | resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} 909 | engines: {node: '>=10'} 910 | 911 | ini@4.1.3: 912 | resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} 913 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 914 | 915 | ink@5.0.1: 916 | resolution: {integrity: sha512-ae4AW/t8jlkj/6Ou21H2av0wxTk8vrGzXv+v2v7j4in+bl1M5XRMVbfNghzhBokV++FjF8RBDJvYo+ttR9YVRg==} 917 | engines: {node: '>=18'} 918 | peerDependencies: 919 | '@types/react': '>=18.0.0' 920 | react: '>=18.0.0' 921 | react-devtools-core: ^4.19.1 922 | peerDependenciesMeta: 923 | '@types/react': 924 | optional: true 925 | react-devtools-core: 926 | optional: true 927 | 928 | inquirer@9.3.2: 929 | resolution: {integrity: sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==} 930 | engines: {node: '>=18'} 931 | 932 | interpret@1.4.0: 933 | resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 934 | engines: {node: '>= 0.10'} 935 | 936 | ip-address@9.0.5: 937 | resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} 938 | engines: {node: '>= 12'} 939 | 940 | is-arrayish@0.2.1: 941 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 942 | 943 | is-ci@3.0.1: 944 | resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} 945 | hasBin: true 946 | 947 | is-core-module@2.14.0: 948 | resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} 949 | engines: {node: '>= 0.4'} 950 | 951 | is-docker@3.0.0: 952 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 953 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 954 | hasBin: true 955 | 956 | is-extglob@2.1.1: 957 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 958 | engines: {node: '>=0.10.0'} 959 | 960 | is-fullwidth-code-point@3.0.0: 961 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 962 | engines: {node: '>=8'} 963 | 964 | is-fullwidth-code-point@4.0.0: 965 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 966 | engines: {node: '>=12'} 967 | 968 | is-fullwidth-code-point@5.0.0: 969 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 970 | engines: {node: '>=18'} 971 | 972 | is-glob@4.0.3: 973 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 974 | engines: {node: '>=0.10.0'} 975 | 976 | is-in-ci@0.1.0: 977 | resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} 978 | engines: {node: '>=18'} 979 | hasBin: true 980 | 981 | is-inside-container@1.0.0: 982 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 983 | engines: {node: '>=14.16'} 984 | hasBin: true 985 | 986 | is-installed-globally@0.4.0: 987 | resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} 988 | engines: {node: '>=10'} 989 | 990 | is-interactive@1.0.0: 991 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} 992 | engines: {node: '>=8'} 993 | 994 | is-interactive@2.0.0: 995 | resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} 996 | engines: {node: '>=12'} 997 | 998 | is-npm@6.0.0: 999 | resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} 1000 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1001 | 1002 | is-number@7.0.0: 1003 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1004 | engines: {node: '>=0.12.0'} 1005 | 1006 | is-obj@2.0.0: 1007 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 1008 | engines: {node: '>=8'} 1009 | 1010 | is-path-inside@3.0.3: 1011 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1012 | engines: {node: '>=8'} 1013 | 1014 | is-ssh@1.4.0: 1015 | resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} 1016 | 1017 | is-stream@2.0.1: 1018 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1019 | engines: {node: '>=8'} 1020 | 1021 | is-stream@3.0.0: 1022 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1023 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1024 | 1025 | is-subdir@1.2.0: 1026 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1027 | engines: {node: '>=4'} 1028 | 1029 | is-typedarray@1.0.0: 1030 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1031 | 1032 | is-unicode-supported@0.1.0: 1033 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 1034 | engines: {node: '>=10'} 1035 | 1036 | is-unicode-supported@1.3.0: 1037 | resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} 1038 | engines: {node: '>=12'} 1039 | 1040 | is-unicode-supported@2.0.0: 1041 | resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} 1042 | engines: {node: '>=18'} 1043 | 1044 | is-windows@1.0.2: 1045 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1046 | engines: {node: '>=0.10.0'} 1047 | 1048 | is-wsl@3.1.0: 1049 | resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 1050 | engines: {node: '>=16'} 1051 | 1052 | isexe@2.0.0: 1053 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1054 | 1055 | issue-parser@7.0.1: 1056 | resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} 1057 | engines: {node: ^18.17 || >=20.6.1} 1058 | 1059 | js-tokens@4.0.0: 1060 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1061 | 1062 | js-yaml@3.14.1: 1063 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1064 | hasBin: true 1065 | 1066 | js-yaml@4.1.0: 1067 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1068 | hasBin: true 1069 | 1070 | jsbn@1.1.0: 1071 | resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} 1072 | 1073 | json-buffer@3.0.1: 1074 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1075 | 1076 | json-parse-even-better-errors@2.3.1: 1077 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1078 | 1079 | jsonfile@4.0.0: 1080 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1081 | 1082 | jsonfile@6.1.0: 1083 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1084 | 1085 | keyv@4.5.4: 1086 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1087 | 1088 | latest-version@7.0.0: 1089 | resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} 1090 | engines: {node: '>=14.16'} 1091 | 1092 | lines-and-columns@1.2.4: 1093 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1094 | 1095 | load-yaml-file@0.2.0: 1096 | resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 1097 | engines: {node: '>=6'} 1098 | 1099 | locate-path@5.0.0: 1100 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1101 | engines: {node: '>=8'} 1102 | 1103 | locate-path@6.0.0: 1104 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1105 | engines: {node: '>=10'} 1106 | 1107 | lodash-es@4.17.21: 1108 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1109 | 1110 | lodash.capitalize@4.2.1: 1111 | resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} 1112 | 1113 | lodash.escaperegexp@4.1.2: 1114 | resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} 1115 | 1116 | lodash.isplainobject@4.0.6: 1117 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} 1118 | 1119 | lodash.isstring@4.0.1: 1120 | resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} 1121 | 1122 | lodash.startcase@4.4.0: 1123 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1124 | 1125 | lodash.uniqby@4.7.0: 1126 | resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} 1127 | 1128 | lodash@4.17.21: 1129 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1130 | 1131 | log-symbols@4.1.0: 1132 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 1133 | engines: {node: '>=10'} 1134 | 1135 | log-symbols@6.0.0: 1136 | resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} 1137 | engines: {node: '>=18'} 1138 | 1139 | loose-envify@1.4.0: 1140 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1141 | hasBin: true 1142 | 1143 | lowercase-keys@3.0.0: 1144 | resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} 1145 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1146 | 1147 | lru-cache@4.1.5: 1148 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1149 | 1150 | lru-cache@7.18.3: 1151 | resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} 1152 | engines: {node: '>=12'} 1153 | 1154 | macos-release@3.2.0: 1155 | resolution: {integrity: sha512-fSErXALFNsnowREYZ49XCdOHF8wOPWuFOGQrAhP7x5J/BqQv+B02cNsTykGpDgRVx43EKg++6ANmTaGTtW+hUA==} 1156 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1157 | 1158 | merge-stream@2.0.0: 1159 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1160 | 1161 | merge2@1.4.1: 1162 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1163 | engines: {node: '>= 8'} 1164 | 1165 | micromatch@4.0.7: 1166 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1167 | engines: {node: '>=8.6'} 1168 | 1169 | mime-db@1.52.0: 1170 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1171 | engines: {node: '>= 0.6'} 1172 | 1173 | mime-types@2.1.35: 1174 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1175 | engines: {node: '>= 0.6'} 1176 | 1177 | mimic-fn@2.1.0: 1178 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1179 | engines: {node: '>=6'} 1180 | 1181 | mimic-fn@4.0.0: 1182 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1183 | engines: {node: '>=12'} 1184 | 1185 | mimic-response@3.1.0: 1186 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 1187 | engines: {node: '>=10'} 1188 | 1189 | mimic-response@4.0.0: 1190 | resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} 1191 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1192 | 1193 | minimatch@3.1.2: 1194 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1195 | 1196 | minimist@1.2.8: 1197 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1198 | 1199 | mri@1.2.0: 1200 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1201 | engines: {node: '>=4'} 1202 | 1203 | ms@2.1.2: 1204 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1205 | 1206 | mute-stream@1.0.0: 1207 | resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} 1208 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1209 | 1210 | netmask@2.0.2: 1211 | resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} 1212 | engines: {node: '>= 0.4.0'} 1213 | 1214 | new-github-release-url@2.0.0: 1215 | resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} 1216 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1217 | 1218 | node-domexception@1.0.0: 1219 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1220 | engines: {node: '>=10.5.0'} 1221 | 1222 | node-fetch@3.3.2: 1223 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 1224 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1225 | 1226 | normalize-url@8.0.1: 1227 | resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} 1228 | engines: {node: '>=14.16'} 1229 | 1230 | npm-run-path@4.0.1: 1231 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1232 | engines: {node: '>=8'} 1233 | 1234 | npm-run-path@5.3.0: 1235 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1236 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1237 | 1238 | once@1.4.0: 1239 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1240 | 1241 | onetime@5.1.2: 1242 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1243 | engines: {node: '>=6'} 1244 | 1245 | onetime@6.0.0: 1246 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1247 | engines: {node: '>=12'} 1248 | 1249 | open@10.1.0: 1250 | resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} 1251 | engines: {node: '>=18'} 1252 | 1253 | ora@5.4.1: 1254 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} 1255 | engines: {node: '>=10'} 1256 | 1257 | ora@8.0.1: 1258 | resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} 1259 | engines: {node: '>=18'} 1260 | 1261 | os-name@5.1.0: 1262 | resolution: {integrity: sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==} 1263 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1264 | 1265 | os-tmpdir@1.0.2: 1266 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1267 | engines: {node: '>=0.10.0'} 1268 | 1269 | outdent@0.5.0: 1270 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1271 | 1272 | p-cancelable@3.0.0: 1273 | resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} 1274 | engines: {node: '>=12.20'} 1275 | 1276 | p-filter@2.1.0: 1277 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1278 | engines: {node: '>=8'} 1279 | 1280 | p-limit@2.3.0: 1281 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1282 | engines: {node: '>=6'} 1283 | 1284 | p-limit@3.1.0: 1285 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1286 | engines: {node: '>=10'} 1287 | 1288 | p-locate@4.1.0: 1289 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1290 | engines: {node: '>=8'} 1291 | 1292 | p-locate@5.0.0: 1293 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1294 | engines: {node: '>=10'} 1295 | 1296 | p-map@2.1.0: 1297 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1298 | engines: {node: '>=6'} 1299 | 1300 | p-try@2.2.0: 1301 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1302 | engines: {node: '>=6'} 1303 | 1304 | pac-proxy-agent@7.0.2: 1305 | resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} 1306 | engines: {node: '>= 14'} 1307 | 1308 | pac-resolver@7.0.1: 1309 | resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} 1310 | engines: {node: '>= 14'} 1311 | 1312 | package-json@8.1.1: 1313 | resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} 1314 | engines: {node: '>=14.16'} 1315 | 1316 | parent-module@1.0.1: 1317 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1318 | engines: {node: '>=6'} 1319 | 1320 | parse-json@5.2.0: 1321 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1322 | engines: {node: '>=8'} 1323 | 1324 | parse-path@7.0.0: 1325 | resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} 1326 | 1327 | parse-url@8.1.0: 1328 | resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} 1329 | 1330 | patch-console@2.0.0: 1331 | resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} 1332 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1333 | 1334 | path-exists@4.0.0: 1335 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1336 | engines: {node: '>=8'} 1337 | 1338 | path-is-absolute@1.0.1: 1339 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1340 | engines: {node: '>=0.10.0'} 1341 | 1342 | path-key@3.1.1: 1343 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1344 | engines: {node: '>=8'} 1345 | 1346 | path-key@4.0.0: 1347 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1348 | engines: {node: '>=12'} 1349 | 1350 | path-parse@1.0.7: 1351 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1352 | 1353 | path-type@4.0.0: 1354 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1355 | engines: {node: '>=8'} 1356 | 1357 | path-type@5.0.0: 1358 | resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} 1359 | engines: {node: '>=12'} 1360 | 1361 | picocolors@1.0.1: 1362 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1363 | 1364 | picomatch@2.3.1: 1365 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1366 | engines: {node: '>=8.6'} 1367 | 1368 | pify@4.0.1: 1369 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1370 | engines: {node: '>=6'} 1371 | 1372 | pkg-dir@4.2.0: 1373 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1374 | engines: {node: '>=8'} 1375 | 1376 | preferred-pm@3.1.3: 1377 | resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} 1378 | engines: {node: '>=10'} 1379 | 1380 | prettier@2.8.8: 1381 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1382 | engines: {node: '>=10.13.0'} 1383 | hasBin: true 1384 | 1385 | proto-list@1.2.4: 1386 | resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} 1387 | 1388 | protocols@2.0.1: 1389 | resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} 1390 | 1391 | proxy-agent@6.4.0: 1392 | resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} 1393 | engines: {node: '>= 14'} 1394 | 1395 | proxy-from-env@1.1.0: 1396 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1397 | 1398 | pseudomap@1.0.2: 1399 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 1400 | 1401 | pupa@3.1.0: 1402 | resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} 1403 | engines: {node: '>=12.20'} 1404 | 1405 | queue-microtask@1.2.3: 1406 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1407 | 1408 | quick-lru@5.1.1: 1409 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} 1410 | engines: {node: '>=10'} 1411 | 1412 | rc@1.2.8: 1413 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1414 | hasBin: true 1415 | 1416 | react-dom@18.3.1: 1417 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1418 | peerDependencies: 1419 | react: ^18.3.1 1420 | 1421 | react-reconciler@0.29.2: 1422 | resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} 1423 | engines: {node: '>=0.10.0'} 1424 | peerDependencies: 1425 | react: ^18.3.1 1426 | 1427 | react@18.3.1: 1428 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1429 | engines: {node: '>=0.10.0'} 1430 | 1431 | read-yaml-file@1.1.0: 1432 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1433 | engines: {node: '>=6'} 1434 | 1435 | readable-stream@3.6.2: 1436 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1437 | engines: {node: '>= 6'} 1438 | 1439 | rechoir@0.6.2: 1440 | resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} 1441 | engines: {node: '>= 0.10'} 1442 | 1443 | regenerator-runtime@0.14.1: 1444 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1445 | 1446 | registry-auth-token@5.0.2: 1447 | resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} 1448 | engines: {node: '>=14'} 1449 | 1450 | registry-url@6.0.1: 1451 | resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} 1452 | engines: {node: '>=12'} 1453 | 1454 | release-it@17.5.0: 1455 | resolution: {integrity: sha512-+g6k/7i6AjdCozLkcybvwgYLw/RF6bcYJHf1xDLcg36GeBu8zr/geI9joLk5drubiE/UKdN694vwAeimmJWt8Q==} 1456 | engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} 1457 | hasBin: true 1458 | 1459 | rescript-bun@0.5.0: 1460 | resolution: {integrity: sha512-y7GK+RgQeaC2a8Qam0jZZ+ApTHW32s2bpVOjryeU2pHoNjtNXel7txZyywwEfC5o5rXvF7b12688YW5lO6C5jg==} 1461 | peerDependencies: 1462 | '@rescript/core': '>=1.3.0' 1463 | rescript: '>=11.1.0' 1464 | 1465 | rescript@11.1.1: 1466 | resolution: {integrity: sha512-FMELeoiR1n3LzBdBt+k7U4l0vsz5Xh0HBSHf+0NhyhzZkMRLkEKEDNrcqZc6RIux9bxmxoO+zEa9qFM01VOXAw==} 1467 | engines: {node: '>=10'} 1468 | hasBin: true 1469 | 1470 | resolve-alpn@1.2.1: 1471 | resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} 1472 | 1473 | resolve-from@4.0.0: 1474 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1475 | engines: {node: '>=4'} 1476 | 1477 | resolve-from@5.0.0: 1478 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1479 | engines: {node: '>=8'} 1480 | 1481 | resolve@1.22.8: 1482 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1483 | hasBin: true 1484 | 1485 | responselike@3.0.0: 1486 | resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} 1487 | engines: {node: '>=14.16'} 1488 | 1489 | restore-cursor@3.1.0: 1490 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} 1491 | engines: {node: '>=8'} 1492 | 1493 | restore-cursor@4.0.0: 1494 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1495 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1496 | 1497 | retry@0.13.1: 1498 | resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} 1499 | engines: {node: '>= 4'} 1500 | 1501 | reusify@1.0.4: 1502 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1503 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1504 | 1505 | run-applescript@7.0.0: 1506 | resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} 1507 | engines: {node: '>=18'} 1508 | 1509 | run-async@3.0.0: 1510 | resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} 1511 | engines: {node: '>=0.12.0'} 1512 | 1513 | run-parallel@1.2.0: 1514 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1515 | 1516 | rxjs@7.8.1: 1517 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} 1518 | 1519 | safe-buffer@5.2.1: 1520 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1521 | 1522 | safer-buffer@2.1.2: 1523 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1524 | 1525 | scheduler@0.23.2: 1526 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1527 | 1528 | semver-diff@4.0.0: 1529 | resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} 1530 | engines: {node: '>=12'} 1531 | 1532 | semver@7.6.2: 1533 | resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} 1534 | engines: {node: '>=10'} 1535 | hasBin: true 1536 | 1537 | shebang-command@1.2.0: 1538 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1539 | engines: {node: '>=0.10.0'} 1540 | 1541 | shebang-command@2.0.0: 1542 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1543 | engines: {node: '>=8'} 1544 | 1545 | shebang-regex@1.0.0: 1546 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1547 | engines: {node: '>=0.10.0'} 1548 | 1549 | shebang-regex@3.0.0: 1550 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1551 | engines: {node: '>=8'} 1552 | 1553 | shelljs@0.8.5: 1554 | resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} 1555 | engines: {node: '>=4'} 1556 | hasBin: true 1557 | 1558 | signal-exit@3.0.7: 1559 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1560 | 1561 | signal-exit@4.1.0: 1562 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1563 | engines: {node: '>=14'} 1564 | 1565 | slash@3.0.0: 1566 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1567 | engines: {node: '>=8'} 1568 | 1569 | slash@5.1.0: 1570 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} 1571 | engines: {node: '>=14.16'} 1572 | 1573 | slice-ansi@5.0.0: 1574 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1575 | engines: {node: '>=12'} 1576 | 1577 | slice-ansi@7.1.0: 1578 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1579 | engines: {node: '>=18'} 1580 | 1581 | smart-buffer@4.2.0: 1582 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 1583 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 1584 | 1585 | socks-proxy-agent@8.0.4: 1586 | resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} 1587 | engines: {node: '>= 14'} 1588 | 1589 | socks@2.8.3: 1590 | resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} 1591 | engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} 1592 | 1593 | source-map@0.6.1: 1594 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1595 | engines: {node: '>=0.10.0'} 1596 | 1597 | spawndamnit@2.0.0: 1598 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} 1599 | 1600 | sprintf-js@1.0.3: 1601 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1602 | 1603 | sprintf-js@1.1.3: 1604 | resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} 1605 | 1606 | stack-utils@2.0.6: 1607 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1608 | engines: {node: '>=10'} 1609 | 1610 | stdin-discarder@0.2.2: 1611 | resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} 1612 | engines: {node: '>=18'} 1613 | 1614 | string-template@1.0.0: 1615 | resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==} 1616 | 1617 | string-width@4.2.3: 1618 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1619 | engines: {node: '>=8'} 1620 | 1621 | string-width@5.1.2: 1622 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1623 | engines: {node: '>=12'} 1624 | 1625 | string-width@7.1.0: 1626 | resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} 1627 | engines: {node: '>=18'} 1628 | 1629 | string_decoder@1.3.0: 1630 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1631 | 1632 | strip-ansi@6.0.1: 1633 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1634 | engines: {node: '>=8'} 1635 | 1636 | strip-ansi@7.1.0: 1637 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1638 | engines: {node: '>=12'} 1639 | 1640 | strip-bom@3.0.0: 1641 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1642 | engines: {node: '>=4'} 1643 | 1644 | strip-final-newline@2.0.0: 1645 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1646 | engines: {node: '>=6'} 1647 | 1648 | strip-final-newline@3.0.0: 1649 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1650 | engines: {node: '>=12'} 1651 | 1652 | strip-json-comments@2.0.1: 1653 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 1654 | engines: {node: '>=0.10.0'} 1655 | 1656 | supports-color@5.5.0: 1657 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1658 | engines: {node: '>=4'} 1659 | 1660 | supports-color@7.2.0: 1661 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1662 | engines: {node: '>=8'} 1663 | 1664 | supports-preserve-symlinks-flag@1.0.0: 1665 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1666 | engines: {node: '>= 0.4'} 1667 | 1668 | term-size@2.2.1: 1669 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1670 | engines: {node: '>=8'} 1671 | 1672 | tmp@0.0.33: 1673 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1674 | engines: {node: '>=0.6.0'} 1675 | 1676 | to-regex-range@5.0.1: 1677 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1678 | engines: {node: '>=8.0'} 1679 | 1680 | tslib@2.6.3: 1681 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} 1682 | 1683 | turbo-darwin-64@2.0.4: 1684 | resolution: {integrity: sha512-x9mvmh4wudBstML8Z8IOmokLWglIhSfhQwnh2gBCSqabgVBKYvzl8Y+i+UCNPxheCGTgtsPepTcIaKBIyFIcvw==} 1685 | cpu: [x64] 1686 | os: [darwin] 1687 | 1688 | turbo-darwin-arm64@2.0.4: 1689 | resolution: {integrity: sha512-/B1Ih8zPRGVw5vw4SlclOf3C/woJ/2T6ieH6u54KT4wypoaVyaiyMqBcziIXycdObIYr7jQ+raHO7q3mhay9/A==} 1690 | cpu: [arm64] 1691 | os: [darwin] 1692 | 1693 | turbo-linux-64@2.0.4: 1694 | resolution: {integrity: sha512-6aG670e5zOWu6RczEYcB81nEl8EhiGJEvWhUrnAfNEUIMBEH1pR5SsMmG2ol5/m3PgiRM12r13dSqTxCLcHrVg==} 1695 | cpu: [x64] 1696 | os: [linux] 1697 | 1698 | turbo-linux-arm64@2.0.4: 1699 | resolution: {integrity: sha512-AXfVOjst+mCtPDFT4tCu08Qrfv12Nj7NDd33AjGwV79NYN1Y1rcFY59UQ4nO3ij3rbcvV71Xc+TZJ4csEvRCSg==} 1700 | cpu: [arm64] 1701 | os: [linux] 1702 | 1703 | turbo-windows-64@2.0.4: 1704 | resolution: {integrity: sha512-QOnUR9hKl0T5gq5h1fAhVEqBSjpcBi/BbaO71YGQNgsr6pAnCQdbG8/r3MYXet53efM0KTdOhieWeO3KLNKybA==} 1705 | cpu: [x64] 1706 | os: [win32] 1707 | 1708 | turbo-windows-arm64@2.0.4: 1709 | resolution: {integrity: sha512-3v8WpdZy1AxZw0gha0q3caZmm+0gveBQ40OspD6mxDBIS+oBtO5CkxhIXkFJJW+jDKmDlM7wXDIGfMEq+QyNCQ==} 1710 | cpu: [arm64] 1711 | os: [win32] 1712 | 1713 | turbo@2.0.4: 1714 | resolution: {integrity: sha512-Ilme/2Q5kYw0AeRr+aw3s02+WrEYaY7U8vPnqSZU/jaDG/qd6jHVN6nRWyd/9KXvJGYM69vE6JImoGoyNjLwaw==} 1715 | hasBin: true 1716 | 1717 | type-fest@0.21.3: 1718 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1719 | engines: {node: '>=10'} 1720 | 1721 | type-fest@1.4.0: 1722 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 1723 | engines: {node: '>=10'} 1724 | 1725 | type-fest@2.19.0: 1726 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 1727 | engines: {node: '>=12.20'} 1728 | 1729 | type-fest@4.20.0: 1730 | resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==} 1731 | engines: {node: '>=16'} 1732 | 1733 | typedarray-to-buffer@3.1.5: 1734 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 1735 | 1736 | typescript@5.5.3: 1737 | resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} 1738 | engines: {node: '>=14.17'} 1739 | hasBin: true 1740 | 1741 | typescript@5.6.2: 1742 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} 1743 | engines: {node: '>=14.17'} 1744 | hasBin: true 1745 | 1746 | undici-types@5.26.5: 1747 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1748 | 1749 | unicorn-magic@0.1.0: 1750 | resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} 1751 | engines: {node: '>=18'} 1752 | 1753 | unique-string@3.0.0: 1754 | resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} 1755 | engines: {node: '>=12'} 1756 | 1757 | universal-user-agent@6.0.1: 1758 | resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} 1759 | 1760 | universalify@0.1.2: 1761 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1762 | engines: {node: '>= 4.0.0'} 1763 | 1764 | universalify@2.0.1: 1765 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1766 | engines: {node: '>= 10.0.0'} 1767 | 1768 | update-notifier@7.0.0: 1769 | resolution: {integrity: sha512-Hv25Bh+eAbOLlsjJreVPOs4vd51rrtCrmhyOJtbpAojro34jS4KQaEp4/EvlHJX7jSO42VvEFpkastVyXyIsdQ==} 1770 | engines: {node: '>=18'} 1771 | 1772 | url-join@5.0.0: 1773 | resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} 1774 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1775 | 1776 | util-deprecate@1.0.2: 1777 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1778 | 1779 | wcwidth@1.0.1: 1780 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 1781 | 1782 | web-streams-polyfill@3.3.3: 1783 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} 1784 | engines: {node: '>= 8'} 1785 | 1786 | which-pm@2.0.0: 1787 | resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} 1788 | engines: {node: '>=8.15'} 1789 | 1790 | which@1.3.1: 1791 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1792 | hasBin: true 1793 | 1794 | which@2.0.2: 1795 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1796 | engines: {node: '>= 8'} 1797 | hasBin: true 1798 | 1799 | widest-line@4.0.1: 1800 | resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} 1801 | engines: {node: '>=12'} 1802 | 1803 | widest-line@5.0.0: 1804 | resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} 1805 | engines: {node: '>=18'} 1806 | 1807 | wildcard-match@5.1.3: 1808 | resolution: {integrity: sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==} 1809 | 1810 | windows-release@5.1.1: 1811 | resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} 1812 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1813 | 1814 | wrap-ansi@6.2.0: 1815 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1816 | engines: {node: '>=8'} 1817 | 1818 | wrap-ansi@8.1.0: 1819 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1820 | engines: {node: '>=12'} 1821 | 1822 | wrap-ansi@9.0.0: 1823 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1824 | engines: {node: '>=18'} 1825 | 1826 | wrappy@1.0.2: 1827 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1828 | 1829 | write-file-atomic@3.0.3: 1830 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 1831 | 1832 | ws@8.17.0: 1833 | resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} 1834 | engines: {node: '>=10.0.0'} 1835 | peerDependencies: 1836 | bufferutil: ^4.0.1 1837 | utf-8-validate: '>=5.0.2' 1838 | peerDependenciesMeta: 1839 | bufferutil: 1840 | optional: true 1841 | utf-8-validate: 1842 | optional: true 1843 | 1844 | xdg-basedir@5.1.0: 1845 | resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} 1846 | engines: {node: '>=12'} 1847 | 1848 | yallist@2.1.2: 1849 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 1850 | 1851 | yargs-parser@21.1.1: 1852 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1853 | engines: {node: '>=12'} 1854 | 1855 | yocto-queue@0.1.0: 1856 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1857 | engines: {node: '>=10'} 1858 | 1859 | yoctocolors-cjs@2.1.2: 1860 | resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} 1861 | engines: {node: '>=18'} 1862 | 1863 | yoga-wasm-web@0.3.3: 1864 | resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} 1865 | 1866 | snapshots: 1867 | 1868 | '@alcalzone/ansi-tokenize@0.1.3': 1869 | dependencies: 1870 | ansi-styles: 6.2.1 1871 | is-fullwidth-code-point: 4.0.0 1872 | 1873 | '@babel/code-frame@7.24.7': 1874 | dependencies: 1875 | '@babel/highlight': 7.24.7 1876 | picocolors: 1.0.1 1877 | 1878 | '@babel/helper-validator-identifier@7.24.7': {} 1879 | 1880 | '@babel/highlight@7.24.7': 1881 | dependencies: 1882 | '@babel/helper-validator-identifier': 7.24.7 1883 | chalk: 2.4.2 1884 | js-tokens: 4.0.0 1885 | picocolors: 1.0.1 1886 | 1887 | '@babel/runtime@7.24.7': 1888 | dependencies: 1889 | regenerator-runtime: 0.14.1 1890 | 1891 | '@biomejs/biome@1.9.4': 1892 | optionalDependencies: 1893 | '@biomejs/cli-darwin-arm64': 1.9.4 1894 | '@biomejs/cli-darwin-x64': 1.9.4 1895 | '@biomejs/cli-linux-arm64': 1.9.4 1896 | '@biomejs/cli-linux-arm64-musl': 1.9.4 1897 | '@biomejs/cli-linux-x64': 1.9.4 1898 | '@biomejs/cli-linux-x64-musl': 1.9.4 1899 | '@biomejs/cli-win32-arm64': 1.9.4 1900 | '@biomejs/cli-win32-x64': 1.9.4 1901 | 1902 | '@biomejs/cli-darwin-arm64@1.9.4': 1903 | optional: true 1904 | 1905 | '@biomejs/cli-darwin-x64@1.9.4': 1906 | optional: true 1907 | 1908 | '@biomejs/cli-linux-arm64-musl@1.9.4': 1909 | optional: true 1910 | 1911 | '@biomejs/cli-linux-arm64@1.9.4': 1912 | optional: true 1913 | 1914 | '@biomejs/cli-linux-x64-musl@1.9.4': 1915 | optional: true 1916 | 1917 | '@biomejs/cli-linux-x64@1.9.4': 1918 | optional: true 1919 | 1920 | '@biomejs/cli-win32-arm64@1.9.4': 1921 | optional: true 1922 | 1923 | '@biomejs/cli-win32-x64@1.9.4': 1924 | optional: true 1925 | 1926 | '@changesets/apply-release-plan@7.0.4': 1927 | dependencies: 1928 | '@babel/runtime': 7.24.7 1929 | '@changesets/config': 3.0.2 1930 | '@changesets/get-version-range-type': 0.4.0 1931 | '@changesets/git': 3.0.0 1932 | '@changesets/should-skip-package': 0.1.0 1933 | '@changesets/types': 6.0.0 1934 | '@manypkg/get-packages': 1.1.3 1935 | detect-indent: 6.1.0 1936 | fs-extra: 7.0.1 1937 | lodash.startcase: 4.4.0 1938 | outdent: 0.5.0 1939 | prettier: 2.8.8 1940 | resolve-from: 5.0.0 1941 | semver: 7.6.2 1942 | 1943 | '@changesets/assemble-release-plan@6.0.3': 1944 | dependencies: 1945 | '@babel/runtime': 7.24.7 1946 | '@changesets/errors': 0.2.0 1947 | '@changesets/get-dependents-graph': 2.1.1 1948 | '@changesets/should-skip-package': 0.1.0 1949 | '@changesets/types': 6.0.0 1950 | '@manypkg/get-packages': 1.1.3 1951 | semver: 7.6.2 1952 | 1953 | '@changesets/changelog-git@0.2.0': 1954 | dependencies: 1955 | '@changesets/types': 6.0.0 1956 | 1957 | '@changesets/cli@2.27.7': 1958 | dependencies: 1959 | '@babel/runtime': 7.24.7 1960 | '@changesets/apply-release-plan': 7.0.4 1961 | '@changesets/assemble-release-plan': 6.0.3 1962 | '@changesets/changelog-git': 0.2.0 1963 | '@changesets/config': 3.0.2 1964 | '@changesets/errors': 0.2.0 1965 | '@changesets/get-dependents-graph': 2.1.1 1966 | '@changesets/get-release-plan': 4.0.3 1967 | '@changesets/git': 3.0.0 1968 | '@changesets/logger': 0.1.0 1969 | '@changesets/pre': 2.0.0 1970 | '@changesets/read': 0.6.0 1971 | '@changesets/should-skip-package': 0.1.0 1972 | '@changesets/types': 6.0.0 1973 | '@changesets/write': 0.3.1 1974 | '@manypkg/get-packages': 1.1.3 1975 | '@types/semver': 7.5.8 1976 | ansi-colors: 4.1.3 1977 | chalk: 2.4.2 1978 | ci-info: 3.9.0 1979 | enquirer: 2.4.1 1980 | external-editor: 3.1.0 1981 | fs-extra: 7.0.1 1982 | human-id: 1.0.2 1983 | mri: 1.2.0 1984 | outdent: 0.5.0 1985 | p-limit: 2.3.0 1986 | preferred-pm: 3.1.3 1987 | resolve-from: 5.0.0 1988 | semver: 7.6.2 1989 | spawndamnit: 2.0.0 1990 | term-size: 2.2.1 1991 | 1992 | '@changesets/config@3.0.2': 1993 | dependencies: 1994 | '@changesets/errors': 0.2.0 1995 | '@changesets/get-dependents-graph': 2.1.1 1996 | '@changesets/logger': 0.1.0 1997 | '@changesets/types': 6.0.0 1998 | '@manypkg/get-packages': 1.1.3 1999 | fs-extra: 7.0.1 2000 | micromatch: 4.0.7 2001 | 2002 | '@changesets/errors@0.2.0': 2003 | dependencies: 2004 | extendable-error: 0.1.7 2005 | 2006 | '@changesets/get-dependents-graph@2.1.1': 2007 | dependencies: 2008 | '@changesets/types': 6.0.0 2009 | '@manypkg/get-packages': 1.1.3 2010 | chalk: 2.4.2 2011 | fs-extra: 7.0.1 2012 | semver: 7.6.2 2013 | 2014 | '@changesets/get-release-plan@4.0.3': 2015 | dependencies: 2016 | '@babel/runtime': 7.24.7 2017 | '@changesets/assemble-release-plan': 6.0.3 2018 | '@changesets/config': 3.0.2 2019 | '@changesets/pre': 2.0.0 2020 | '@changesets/read': 0.6.0 2021 | '@changesets/types': 6.0.0 2022 | '@manypkg/get-packages': 1.1.3 2023 | 2024 | '@changesets/get-version-range-type@0.4.0': {} 2025 | 2026 | '@changesets/git@3.0.0': 2027 | dependencies: 2028 | '@babel/runtime': 7.24.7 2029 | '@changesets/errors': 0.2.0 2030 | '@changesets/types': 6.0.0 2031 | '@manypkg/get-packages': 1.1.3 2032 | is-subdir: 1.2.0 2033 | micromatch: 4.0.7 2034 | spawndamnit: 2.0.0 2035 | 2036 | '@changesets/logger@0.1.0': 2037 | dependencies: 2038 | chalk: 2.4.2 2039 | 2040 | '@changesets/parse@0.4.0': 2041 | dependencies: 2042 | '@changesets/types': 6.0.0 2043 | js-yaml: 3.14.1 2044 | 2045 | '@changesets/pre@2.0.0': 2046 | dependencies: 2047 | '@babel/runtime': 7.24.7 2048 | '@changesets/errors': 0.2.0 2049 | '@changesets/types': 6.0.0 2050 | '@manypkg/get-packages': 1.1.3 2051 | fs-extra: 7.0.1 2052 | 2053 | '@changesets/read@0.6.0': 2054 | dependencies: 2055 | '@babel/runtime': 7.24.7 2056 | '@changesets/git': 3.0.0 2057 | '@changesets/logger': 0.1.0 2058 | '@changesets/parse': 0.4.0 2059 | '@changesets/types': 6.0.0 2060 | chalk: 2.4.2 2061 | fs-extra: 7.0.1 2062 | p-filter: 2.1.0 2063 | 2064 | '@changesets/should-skip-package@0.1.0': 2065 | dependencies: 2066 | '@babel/runtime': 7.24.7 2067 | '@changesets/types': 6.0.0 2068 | '@manypkg/get-packages': 1.1.3 2069 | 2070 | '@changesets/types@4.1.0': {} 2071 | 2072 | '@changesets/types@6.0.0': {} 2073 | 2074 | '@changesets/write@0.3.1': 2075 | dependencies: 2076 | '@babel/runtime': 7.24.7 2077 | '@changesets/types': 6.0.0 2078 | fs-extra: 7.0.1 2079 | human-id: 1.0.2 2080 | prettier: 2.8.8 2081 | 2082 | '@iarna/toml@2.2.5': {} 2083 | 2084 | '@inquirer/figures@1.0.3': {} 2085 | 2086 | '@manypkg/find-root@1.1.0': 2087 | dependencies: 2088 | '@babel/runtime': 7.24.7 2089 | '@types/node': 12.20.55 2090 | find-up: 4.1.0 2091 | fs-extra: 8.1.0 2092 | 2093 | '@manypkg/get-packages@1.1.3': 2094 | dependencies: 2095 | '@babel/runtime': 7.24.7 2096 | '@changesets/types': 4.1.0 2097 | '@manypkg/find-root': 1.1.0 2098 | fs-extra: 8.1.0 2099 | globby: 11.1.0 2100 | read-yaml-file: 1.1.0 2101 | 2102 | '@nodelib/fs.scandir@2.1.5': 2103 | dependencies: 2104 | '@nodelib/fs.stat': 2.0.5 2105 | run-parallel: 1.2.0 2106 | 2107 | '@nodelib/fs.stat@2.0.5': {} 2108 | 2109 | '@nodelib/fs.walk@1.2.8': 2110 | dependencies: 2111 | '@nodelib/fs.scandir': 2.1.5 2112 | fastq: 1.17.1 2113 | 2114 | '@octokit/auth-token@4.0.0': {} 2115 | 2116 | '@octokit/core@5.2.0': 2117 | dependencies: 2118 | '@octokit/auth-token': 4.0.0 2119 | '@octokit/graphql': 7.1.0 2120 | '@octokit/request': 8.4.0 2121 | '@octokit/request-error': 5.1.0 2122 | '@octokit/types': 13.5.0 2123 | before-after-hook: 2.2.3 2124 | universal-user-agent: 6.0.1 2125 | 2126 | '@octokit/endpoint@9.0.5': 2127 | dependencies: 2128 | '@octokit/types': 13.5.0 2129 | universal-user-agent: 6.0.1 2130 | 2131 | '@octokit/graphql@7.1.0': 2132 | dependencies: 2133 | '@octokit/request': 8.4.0 2134 | '@octokit/types': 13.5.0 2135 | universal-user-agent: 6.0.1 2136 | 2137 | '@octokit/openapi-types@22.2.0': {} 2138 | 2139 | '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': 2140 | dependencies: 2141 | '@octokit/core': 5.2.0 2142 | '@octokit/types': 13.5.0 2143 | 2144 | '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': 2145 | dependencies: 2146 | '@octokit/core': 5.2.0 2147 | 2148 | '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': 2149 | dependencies: 2150 | '@octokit/core': 5.2.0 2151 | '@octokit/types': 13.5.0 2152 | 2153 | '@octokit/request-error@5.1.0': 2154 | dependencies: 2155 | '@octokit/types': 13.5.0 2156 | deprecation: 2.3.1 2157 | once: 1.4.0 2158 | 2159 | '@octokit/request@8.4.0': 2160 | dependencies: 2161 | '@octokit/endpoint': 9.0.5 2162 | '@octokit/request-error': 5.1.0 2163 | '@octokit/types': 13.5.0 2164 | universal-user-agent: 6.0.1 2165 | 2166 | '@octokit/rest@20.1.1': 2167 | dependencies: 2168 | '@octokit/core': 5.2.0 2169 | '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) 2170 | '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) 2171 | '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) 2172 | 2173 | '@octokit/types@13.5.0': 2174 | dependencies: 2175 | '@octokit/openapi-types': 22.2.0 2176 | 2177 | '@pnpm/config.env-replace@1.1.0': {} 2178 | 2179 | '@pnpm/network.ca-file@1.0.2': 2180 | dependencies: 2181 | graceful-fs: 4.2.10 2182 | 2183 | '@pnpm/npm-conf@2.2.2': 2184 | dependencies: 2185 | '@pnpm/config.env-replace': 1.1.0 2186 | '@pnpm/network.ca-file': 1.0.2 2187 | config-chain: 1.1.13 2188 | 2189 | '@release-it/bumper@6.0.1(release-it@17.5.0(typescript@5.5.3))': 2190 | dependencies: 2191 | '@iarna/toml': 2.2.5 2192 | detect-indent: 7.0.1 2193 | fast-glob: 3.3.2 2194 | ini: 4.1.3 2195 | js-yaml: 4.1.0 2196 | lodash-es: 4.17.21 2197 | release-it: 17.5.0(typescript@5.5.3) 2198 | semver: 7.6.2 2199 | 2200 | '@release-it/keep-a-changelog@5.0.0(release-it@17.5.0(typescript@5.5.3))': 2201 | dependencies: 2202 | detect-newline: 4.0.1 2203 | release-it: 17.5.0(typescript@5.5.3) 2204 | string-template: 1.0.0 2205 | 2206 | '@rescript/core@1.4.0(rescript@11.1.1)': 2207 | dependencies: 2208 | rescript: 11.1.1 2209 | 2210 | '@rescript/react@0.12.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 2211 | dependencies: 2212 | react: 18.3.1 2213 | react-dom: 18.3.1(react@18.3.1) 2214 | 2215 | '@sindresorhus/is@5.6.0': {} 2216 | 2217 | '@sindresorhus/merge-streams@2.3.0': {} 2218 | 2219 | '@szmarczak/http-timer@5.0.1': 2220 | dependencies: 2221 | defer-to-connect: 2.0.1 2222 | 2223 | '@tootallnate/quickjs-emscripten@0.23.0': {} 2224 | 2225 | '@types/http-cache-semantics@4.0.4': {} 2226 | 2227 | '@types/node@12.20.55': {} 2228 | 2229 | '@types/node@20.14.9': 2230 | dependencies: 2231 | undici-types: 5.26.5 2232 | 2233 | '@types/prop-types@15.7.12': {} 2234 | 2235 | '@types/react@18.3.3': 2236 | dependencies: 2237 | '@types/prop-types': 15.7.12 2238 | csstype: 3.1.3 2239 | 2240 | '@types/semver@7.5.8': {} 2241 | 2242 | agent-base@7.1.1: 2243 | dependencies: 2244 | debug: 4.3.5 2245 | transitivePeerDependencies: 2246 | - supports-color 2247 | 2248 | ansi-align@3.0.1: 2249 | dependencies: 2250 | string-width: 4.2.3 2251 | 2252 | ansi-colors@4.1.3: {} 2253 | 2254 | ansi-escapes@4.3.2: 2255 | dependencies: 2256 | type-fest: 0.21.3 2257 | 2258 | ansi-escapes@7.0.0: 2259 | dependencies: 2260 | environment: 1.1.0 2261 | 2262 | ansi-regex@5.0.1: {} 2263 | 2264 | ansi-regex@6.0.1: {} 2265 | 2266 | ansi-styles@3.2.1: 2267 | dependencies: 2268 | color-convert: 1.9.3 2269 | 2270 | ansi-styles@4.3.0: 2271 | dependencies: 2272 | color-convert: 2.0.1 2273 | 2274 | ansi-styles@6.2.1: {} 2275 | 2276 | argparse@1.0.10: 2277 | dependencies: 2278 | sprintf-js: 1.0.3 2279 | 2280 | argparse@2.0.1: {} 2281 | 2282 | array-union@2.1.0: {} 2283 | 2284 | ast-types@0.13.4: 2285 | dependencies: 2286 | tslib: 2.6.3 2287 | 2288 | async-retry@1.3.3: 2289 | dependencies: 2290 | retry: 0.13.1 2291 | 2292 | auto-bind@5.0.1: {} 2293 | 2294 | balanced-match@1.0.2: {} 2295 | 2296 | base64-js@1.5.1: {} 2297 | 2298 | basic-ftp@5.0.5: {} 2299 | 2300 | before-after-hook@2.2.3: {} 2301 | 2302 | better-path-resolve@1.0.0: 2303 | dependencies: 2304 | is-windows: 1.0.2 2305 | 2306 | bl@4.1.0: 2307 | dependencies: 2308 | buffer: 5.7.1 2309 | inherits: 2.0.4 2310 | readable-stream: 3.6.2 2311 | 2312 | boxen@7.1.1: 2313 | dependencies: 2314 | ansi-align: 3.0.1 2315 | camelcase: 7.0.1 2316 | chalk: 5.3.0 2317 | cli-boxes: 3.0.0 2318 | string-width: 5.1.2 2319 | type-fest: 2.19.0 2320 | widest-line: 4.0.1 2321 | wrap-ansi: 8.1.0 2322 | 2323 | brace-expansion@1.1.11: 2324 | dependencies: 2325 | balanced-match: 1.0.2 2326 | concat-map: 0.0.1 2327 | 2328 | braces@3.0.3: 2329 | dependencies: 2330 | fill-range: 7.1.1 2331 | 2332 | buffer@5.7.1: 2333 | dependencies: 2334 | base64-js: 1.5.1 2335 | ieee754: 1.2.1 2336 | 2337 | bundle-name@4.1.0: 2338 | dependencies: 2339 | run-applescript: 7.0.0 2340 | 2341 | cacheable-lookup@7.0.0: {} 2342 | 2343 | cacheable-request@10.2.14: 2344 | dependencies: 2345 | '@types/http-cache-semantics': 4.0.4 2346 | get-stream: 6.0.1 2347 | http-cache-semantics: 4.1.1 2348 | keyv: 4.5.4 2349 | mimic-response: 4.0.0 2350 | normalize-url: 8.0.1 2351 | responselike: 3.0.0 2352 | 2353 | callsites@3.1.0: {} 2354 | 2355 | camelcase@7.0.1: {} 2356 | 2357 | chalk@2.4.2: 2358 | dependencies: 2359 | ansi-styles: 3.2.1 2360 | escape-string-regexp: 1.0.5 2361 | supports-color: 5.5.0 2362 | 2363 | chalk@4.1.2: 2364 | dependencies: 2365 | ansi-styles: 4.3.0 2366 | supports-color: 7.2.0 2367 | 2368 | chalk@5.3.0: {} 2369 | 2370 | chardet@0.7.0: {} 2371 | 2372 | ci-info@3.9.0: {} 2373 | 2374 | cli-boxes@3.0.0: {} 2375 | 2376 | cli-cursor@3.1.0: 2377 | dependencies: 2378 | restore-cursor: 3.1.0 2379 | 2380 | cli-cursor@4.0.0: 2381 | dependencies: 2382 | restore-cursor: 4.0.0 2383 | 2384 | cli-spinners@2.9.2: {} 2385 | 2386 | cli-truncate@4.0.0: 2387 | dependencies: 2388 | slice-ansi: 5.0.0 2389 | string-width: 7.1.0 2390 | 2391 | cli-width@4.1.0: {} 2392 | 2393 | clone@1.0.4: {} 2394 | 2395 | code-excerpt@4.0.0: 2396 | dependencies: 2397 | convert-to-spaces: 2.0.1 2398 | 2399 | color-convert@1.9.3: 2400 | dependencies: 2401 | color-name: 1.1.3 2402 | 2403 | color-convert@2.0.1: 2404 | dependencies: 2405 | color-name: 1.1.4 2406 | 2407 | color-name@1.1.3: {} 2408 | 2409 | color-name@1.1.4: {} 2410 | 2411 | concat-map@0.0.1: {} 2412 | 2413 | config-chain@1.1.13: 2414 | dependencies: 2415 | ini: 1.3.8 2416 | proto-list: 1.2.4 2417 | 2418 | configstore@6.0.0: 2419 | dependencies: 2420 | dot-prop: 6.0.1 2421 | graceful-fs: 4.2.11 2422 | unique-string: 3.0.0 2423 | write-file-atomic: 3.0.3 2424 | xdg-basedir: 5.1.0 2425 | 2426 | convert-to-spaces@2.0.1: {} 2427 | 2428 | cosmiconfig@9.0.0(typescript@5.5.3): 2429 | dependencies: 2430 | env-paths: 2.2.1 2431 | import-fresh: 3.3.0 2432 | js-yaml: 4.1.0 2433 | parse-json: 5.2.0 2434 | optionalDependencies: 2435 | typescript: 5.5.3 2436 | 2437 | cross-spawn@5.1.0: 2438 | dependencies: 2439 | lru-cache: 4.1.5 2440 | shebang-command: 1.2.0 2441 | which: 1.3.1 2442 | 2443 | cross-spawn@7.0.3: 2444 | dependencies: 2445 | path-key: 3.1.1 2446 | shebang-command: 2.0.0 2447 | which: 2.0.2 2448 | 2449 | crypto-random-string@4.0.0: 2450 | dependencies: 2451 | type-fest: 1.4.0 2452 | 2453 | csstype@3.1.3: {} 2454 | 2455 | data-uri-to-buffer@4.0.1: {} 2456 | 2457 | data-uri-to-buffer@6.0.2: {} 2458 | 2459 | debug@4.3.5: 2460 | dependencies: 2461 | ms: 2.1.2 2462 | 2463 | decompress-response@6.0.0: 2464 | dependencies: 2465 | mimic-response: 3.1.0 2466 | 2467 | deep-extend@0.6.0: {} 2468 | 2469 | default-browser-id@5.0.0: {} 2470 | 2471 | default-browser@5.2.1: 2472 | dependencies: 2473 | bundle-name: 4.1.0 2474 | default-browser-id: 5.0.0 2475 | 2476 | defaults@1.0.4: 2477 | dependencies: 2478 | clone: 1.0.4 2479 | 2480 | defer-to-connect@2.0.1: {} 2481 | 2482 | define-lazy-prop@3.0.0: {} 2483 | 2484 | degenerator@5.0.1: 2485 | dependencies: 2486 | ast-types: 0.13.4 2487 | escodegen: 2.1.0 2488 | esprima: 4.0.1 2489 | 2490 | deprecation@2.3.1: {} 2491 | 2492 | detect-indent@6.1.0: {} 2493 | 2494 | detect-indent@7.0.1: {} 2495 | 2496 | detect-newline@4.0.1: {} 2497 | 2498 | dir-glob@3.0.1: 2499 | dependencies: 2500 | path-type: 4.0.0 2501 | 2502 | dot-prop@6.0.1: 2503 | dependencies: 2504 | is-obj: 2.0.0 2505 | 2506 | eastasianwidth@0.2.0: {} 2507 | 2508 | emoji-regex@10.3.0: {} 2509 | 2510 | emoji-regex@8.0.0: {} 2511 | 2512 | emoji-regex@9.2.2: {} 2513 | 2514 | enquirer@2.4.1: 2515 | dependencies: 2516 | ansi-colors: 4.1.3 2517 | strip-ansi: 6.0.1 2518 | 2519 | env-paths@2.2.1: {} 2520 | 2521 | environment@1.1.0: {} 2522 | 2523 | error-ex@1.3.2: 2524 | dependencies: 2525 | is-arrayish: 0.2.1 2526 | 2527 | escape-goat@4.0.0: {} 2528 | 2529 | escape-string-regexp@1.0.5: {} 2530 | 2531 | escape-string-regexp@2.0.0: {} 2532 | 2533 | escodegen@2.1.0: 2534 | dependencies: 2535 | esprima: 4.0.1 2536 | estraverse: 5.3.0 2537 | esutils: 2.0.3 2538 | optionalDependencies: 2539 | source-map: 0.6.1 2540 | 2541 | esprima@4.0.1: {} 2542 | 2543 | estraverse@5.3.0: {} 2544 | 2545 | esutils@2.0.3: {} 2546 | 2547 | execa@5.1.1: 2548 | dependencies: 2549 | cross-spawn: 7.0.3 2550 | get-stream: 6.0.1 2551 | human-signals: 2.1.0 2552 | is-stream: 2.0.1 2553 | merge-stream: 2.0.0 2554 | npm-run-path: 4.0.1 2555 | onetime: 5.1.2 2556 | signal-exit: 3.0.7 2557 | strip-final-newline: 2.0.0 2558 | 2559 | execa@8.0.1: 2560 | dependencies: 2561 | cross-spawn: 7.0.3 2562 | get-stream: 8.0.1 2563 | human-signals: 5.0.0 2564 | is-stream: 3.0.0 2565 | merge-stream: 2.0.0 2566 | npm-run-path: 5.3.0 2567 | onetime: 6.0.0 2568 | signal-exit: 4.1.0 2569 | strip-final-newline: 3.0.0 2570 | 2571 | extendable-error@0.1.7: {} 2572 | 2573 | external-editor@3.1.0: 2574 | dependencies: 2575 | chardet: 0.7.0 2576 | iconv-lite: 0.4.24 2577 | tmp: 0.0.33 2578 | 2579 | fast-glob@3.3.2: 2580 | dependencies: 2581 | '@nodelib/fs.stat': 2.0.5 2582 | '@nodelib/fs.walk': 1.2.8 2583 | glob-parent: 5.1.2 2584 | merge2: 1.4.1 2585 | micromatch: 4.0.7 2586 | 2587 | fastq@1.17.1: 2588 | dependencies: 2589 | reusify: 1.0.4 2590 | 2591 | fetch-blob@3.2.0: 2592 | dependencies: 2593 | node-domexception: 1.0.0 2594 | web-streams-polyfill: 3.3.3 2595 | 2596 | fill-range@7.1.1: 2597 | dependencies: 2598 | to-regex-range: 5.0.1 2599 | 2600 | find-up@4.1.0: 2601 | dependencies: 2602 | locate-path: 5.0.0 2603 | path-exists: 4.0.0 2604 | 2605 | find-up@5.0.0: 2606 | dependencies: 2607 | locate-path: 6.0.0 2608 | path-exists: 4.0.0 2609 | 2610 | find-yarn-workspace-root2@1.2.16: 2611 | dependencies: 2612 | micromatch: 4.0.7 2613 | pkg-dir: 4.2.0 2614 | 2615 | form-data-encoder@2.1.4: {} 2616 | 2617 | formdata-polyfill@4.0.10: 2618 | dependencies: 2619 | fetch-blob: 3.2.0 2620 | 2621 | fs-extra@11.2.0: 2622 | dependencies: 2623 | graceful-fs: 4.2.11 2624 | jsonfile: 6.1.0 2625 | universalify: 2.0.1 2626 | 2627 | fs-extra@7.0.1: 2628 | dependencies: 2629 | graceful-fs: 4.2.11 2630 | jsonfile: 4.0.0 2631 | universalify: 0.1.2 2632 | 2633 | fs-extra@8.1.0: 2634 | dependencies: 2635 | graceful-fs: 4.2.11 2636 | jsonfile: 4.0.0 2637 | universalify: 0.1.2 2638 | 2639 | fs.realpath@1.0.0: {} 2640 | 2641 | function-bind@1.1.2: {} 2642 | 2643 | get-east-asian-width@1.2.0: {} 2644 | 2645 | get-stream@6.0.1: {} 2646 | 2647 | get-stream@8.0.1: {} 2648 | 2649 | get-uri@6.0.3: 2650 | dependencies: 2651 | basic-ftp: 5.0.5 2652 | data-uri-to-buffer: 6.0.2 2653 | debug: 4.3.5 2654 | fs-extra: 11.2.0 2655 | transitivePeerDependencies: 2656 | - supports-color 2657 | 2658 | git-up@7.0.0: 2659 | dependencies: 2660 | is-ssh: 1.4.0 2661 | parse-url: 8.1.0 2662 | 2663 | git-url-parse@14.0.0: 2664 | dependencies: 2665 | git-up: 7.0.0 2666 | 2667 | glob-parent@5.1.2: 2668 | dependencies: 2669 | is-glob: 4.0.3 2670 | 2671 | glob@7.2.3: 2672 | dependencies: 2673 | fs.realpath: 1.0.0 2674 | inflight: 1.0.6 2675 | inherits: 2.0.4 2676 | minimatch: 3.1.2 2677 | once: 1.4.0 2678 | path-is-absolute: 1.0.1 2679 | 2680 | global-dirs@3.0.1: 2681 | dependencies: 2682 | ini: 2.0.0 2683 | 2684 | globby@11.1.0: 2685 | dependencies: 2686 | array-union: 2.1.0 2687 | dir-glob: 3.0.1 2688 | fast-glob: 3.3.2 2689 | ignore: 5.3.1 2690 | merge2: 1.4.1 2691 | slash: 3.0.0 2692 | 2693 | globby@14.0.2: 2694 | dependencies: 2695 | '@sindresorhus/merge-streams': 2.3.0 2696 | fast-glob: 3.3.2 2697 | ignore: 5.3.1 2698 | path-type: 5.0.0 2699 | slash: 5.1.0 2700 | unicorn-magic: 0.1.0 2701 | 2702 | got@12.6.1: 2703 | dependencies: 2704 | '@sindresorhus/is': 5.6.0 2705 | '@szmarczak/http-timer': 5.0.1 2706 | cacheable-lookup: 7.0.0 2707 | cacheable-request: 10.2.14 2708 | decompress-response: 6.0.0 2709 | form-data-encoder: 2.1.4 2710 | get-stream: 6.0.1 2711 | http2-wrapper: 2.2.1 2712 | lowercase-keys: 3.0.0 2713 | p-cancelable: 3.0.0 2714 | responselike: 3.0.0 2715 | 2716 | got@13.0.0: 2717 | dependencies: 2718 | '@sindresorhus/is': 5.6.0 2719 | '@szmarczak/http-timer': 5.0.1 2720 | cacheable-lookup: 7.0.0 2721 | cacheable-request: 10.2.14 2722 | decompress-response: 6.0.0 2723 | form-data-encoder: 2.1.4 2724 | get-stream: 6.0.1 2725 | http2-wrapper: 2.2.1 2726 | lowercase-keys: 3.0.0 2727 | p-cancelable: 3.0.0 2728 | responselike: 3.0.0 2729 | 2730 | graceful-fs@4.2.10: {} 2731 | 2732 | graceful-fs@4.2.11: {} 2733 | 2734 | has-flag@3.0.0: {} 2735 | 2736 | has-flag@4.0.0: {} 2737 | 2738 | hasown@2.0.2: 2739 | dependencies: 2740 | function-bind: 1.1.2 2741 | 2742 | http-cache-semantics@4.1.1: {} 2743 | 2744 | http-proxy-agent@7.0.2: 2745 | dependencies: 2746 | agent-base: 7.1.1 2747 | debug: 4.3.5 2748 | transitivePeerDependencies: 2749 | - supports-color 2750 | 2751 | http2-wrapper@2.2.1: 2752 | dependencies: 2753 | quick-lru: 5.1.1 2754 | resolve-alpn: 1.2.1 2755 | 2756 | https-proxy-agent@7.0.5: 2757 | dependencies: 2758 | agent-base: 7.1.1 2759 | debug: 4.3.5 2760 | transitivePeerDependencies: 2761 | - supports-color 2762 | 2763 | human-id@1.0.2: {} 2764 | 2765 | human-signals@2.1.0: {} 2766 | 2767 | human-signals@5.0.0: {} 2768 | 2769 | iconv-lite@0.4.24: 2770 | dependencies: 2771 | safer-buffer: 2.1.2 2772 | 2773 | ieee754@1.2.1: {} 2774 | 2775 | ignore@5.3.1: {} 2776 | 2777 | import-fresh@3.3.0: 2778 | dependencies: 2779 | parent-module: 1.0.1 2780 | resolve-from: 4.0.0 2781 | 2782 | import-lazy@4.0.0: {} 2783 | 2784 | imurmurhash@0.1.4: {} 2785 | 2786 | indent-string@5.0.0: {} 2787 | 2788 | inflight@1.0.6: 2789 | dependencies: 2790 | once: 1.4.0 2791 | wrappy: 1.0.2 2792 | 2793 | inherits@2.0.4: {} 2794 | 2795 | ini@1.3.8: {} 2796 | 2797 | ini@2.0.0: {} 2798 | 2799 | ini@4.1.3: {} 2800 | 2801 | ink@5.0.1(@types/react@18.3.3)(react@18.3.1): 2802 | dependencies: 2803 | '@alcalzone/ansi-tokenize': 0.1.3 2804 | ansi-escapes: 7.0.0 2805 | ansi-styles: 6.2.1 2806 | auto-bind: 5.0.1 2807 | chalk: 5.3.0 2808 | cli-boxes: 3.0.0 2809 | cli-cursor: 4.0.0 2810 | cli-truncate: 4.0.0 2811 | code-excerpt: 4.0.0 2812 | indent-string: 5.0.0 2813 | is-in-ci: 0.1.0 2814 | lodash: 4.17.21 2815 | patch-console: 2.0.0 2816 | react: 18.3.1 2817 | react-reconciler: 0.29.2(react@18.3.1) 2818 | scheduler: 0.23.2 2819 | signal-exit: 3.0.7 2820 | slice-ansi: 7.1.0 2821 | stack-utils: 2.0.6 2822 | string-width: 7.1.0 2823 | type-fest: 4.20.0 2824 | widest-line: 5.0.0 2825 | wrap-ansi: 9.0.0 2826 | ws: 8.17.0 2827 | yoga-wasm-web: 0.3.3 2828 | optionalDependencies: 2829 | '@types/react': 18.3.3 2830 | transitivePeerDependencies: 2831 | - bufferutil 2832 | - utf-8-validate 2833 | 2834 | inquirer@9.3.2: 2835 | dependencies: 2836 | '@inquirer/figures': 1.0.3 2837 | ansi-escapes: 4.3.2 2838 | cli-width: 4.1.0 2839 | external-editor: 3.1.0 2840 | mute-stream: 1.0.0 2841 | ora: 5.4.1 2842 | run-async: 3.0.0 2843 | rxjs: 7.8.1 2844 | string-width: 4.2.3 2845 | strip-ansi: 6.0.1 2846 | wrap-ansi: 6.2.0 2847 | yoctocolors-cjs: 2.1.2 2848 | 2849 | interpret@1.4.0: {} 2850 | 2851 | ip-address@9.0.5: 2852 | dependencies: 2853 | jsbn: 1.1.0 2854 | sprintf-js: 1.1.3 2855 | 2856 | is-arrayish@0.2.1: {} 2857 | 2858 | is-ci@3.0.1: 2859 | dependencies: 2860 | ci-info: 3.9.0 2861 | 2862 | is-core-module@2.14.0: 2863 | dependencies: 2864 | hasown: 2.0.2 2865 | 2866 | is-docker@3.0.0: {} 2867 | 2868 | is-extglob@2.1.1: {} 2869 | 2870 | is-fullwidth-code-point@3.0.0: {} 2871 | 2872 | is-fullwidth-code-point@4.0.0: {} 2873 | 2874 | is-fullwidth-code-point@5.0.0: 2875 | dependencies: 2876 | get-east-asian-width: 1.2.0 2877 | 2878 | is-glob@4.0.3: 2879 | dependencies: 2880 | is-extglob: 2.1.1 2881 | 2882 | is-in-ci@0.1.0: {} 2883 | 2884 | is-inside-container@1.0.0: 2885 | dependencies: 2886 | is-docker: 3.0.0 2887 | 2888 | is-installed-globally@0.4.0: 2889 | dependencies: 2890 | global-dirs: 3.0.1 2891 | is-path-inside: 3.0.3 2892 | 2893 | is-interactive@1.0.0: {} 2894 | 2895 | is-interactive@2.0.0: {} 2896 | 2897 | is-npm@6.0.0: {} 2898 | 2899 | is-number@7.0.0: {} 2900 | 2901 | is-obj@2.0.0: {} 2902 | 2903 | is-path-inside@3.0.3: {} 2904 | 2905 | is-ssh@1.4.0: 2906 | dependencies: 2907 | protocols: 2.0.1 2908 | 2909 | is-stream@2.0.1: {} 2910 | 2911 | is-stream@3.0.0: {} 2912 | 2913 | is-subdir@1.2.0: 2914 | dependencies: 2915 | better-path-resolve: 1.0.0 2916 | 2917 | is-typedarray@1.0.0: {} 2918 | 2919 | is-unicode-supported@0.1.0: {} 2920 | 2921 | is-unicode-supported@1.3.0: {} 2922 | 2923 | is-unicode-supported@2.0.0: {} 2924 | 2925 | is-windows@1.0.2: {} 2926 | 2927 | is-wsl@3.1.0: 2928 | dependencies: 2929 | is-inside-container: 1.0.0 2930 | 2931 | isexe@2.0.0: {} 2932 | 2933 | issue-parser@7.0.1: 2934 | dependencies: 2935 | lodash.capitalize: 4.2.1 2936 | lodash.escaperegexp: 4.1.2 2937 | lodash.isplainobject: 4.0.6 2938 | lodash.isstring: 4.0.1 2939 | lodash.uniqby: 4.7.0 2940 | 2941 | js-tokens@4.0.0: {} 2942 | 2943 | js-yaml@3.14.1: 2944 | dependencies: 2945 | argparse: 1.0.10 2946 | esprima: 4.0.1 2947 | 2948 | js-yaml@4.1.0: 2949 | dependencies: 2950 | argparse: 2.0.1 2951 | 2952 | jsbn@1.1.0: {} 2953 | 2954 | json-buffer@3.0.1: {} 2955 | 2956 | json-parse-even-better-errors@2.3.1: {} 2957 | 2958 | jsonfile@4.0.0: 2959 | optionalDependencies: 2960 | graceful-fs: 4.2.11 2961 | 2962 | jsonfile@6.1.0: 2963 | dependencies: 2964 | universalify: 2.0.1 2965 | optionalDependencies: 2966 | graceful-fs: 4.2.11 2967 | 2968 | keyv@4.5.4: 2969 | dependencies: 2970 | json-buffer: 3.0.1 2971 | 2972 | latest-version@7.0.0: 2973 | dependencies: 2974 | package-json: 8.1.1 2975 | 2976 | lines-and-columns@1.2.4: {} 2977 | 2978 | load-yaml-file@0.2.0: 2979 | dependencies: 2980 | graceful-fs: 4.2.11 2981 | js-yaml: 3.14.1 2982 | pify: 4.0.1 2983 | strip-bom: 3.0.0 2984 | 2985 | locate-path@5.0.0: 2986 | dependencies: 2987 | p-locate: 4.1.0 2988 | 2989 | locate-path@6.0.0: 2990 | dependencies: 2991 | p-locate: 5.0.0 2992 | 2993 | lodash-es@4.17.21: {} 2994 | 2995 | lodash.capitalize@4.2.1: {} 2996 | 2997 | lodash.escaperegexp@4.1.2: {} 2998 | 2999 | lodash.isplainobject@4.0.6: {} 3000 | 3001 | lodash.isstring@4.0.1: {} 3002 | 3003 | lodash.startcase@4.4.0: {} 3004 | 3005 | lodash.uniqby@4.7.0: {} 3006 | 3007 | lodash@4.17.21: {} 3008 | 3009 | log-symbols@4.1.0: 3010 | dependencies: 3011 | chalk: 4.1.2 3012 | is-unicode-supported: 0.1.0 3013 | 3014 | log-symbols@6.0.0: 3015 | dependencies: 3016 | chalk: 5.3.0 3017 | is-unicode-supported: 1.3.0 3018 | 3019 | loose-envify@1.4.0: 3020 | dependencies: 3021 | js-tokens: 4.0.0 3022 | 3023 | lowercase-keys@3.0.0: {} 3024 | 3025 | lru-cache@4.1.5: 3026 | dependencies: 3027 | pseudomap: 1.0.2 3028 | yallist: 2.1.2 3029 | 3030 | lru-cache@7.18.3: {} 3031 | 3032 | macos-release@3.2.0: {} 3033 | 3034 | merge-stream@2.0.0: {} 3035 | 3036 | merge2@1.4.1: {} 3037 | 3038 | micromatch@4.0.7: 3039 | dependencies: 3040 | braces: 3.0.3 3041 | picomatch: 2.3.1 3042 | 3043 | mime-db@1.52.0: {} 3044 | 3045 | mime-types@2.1.35: 3046 | dependencies: 3047 | mime-db: 1.52.0 3048 | 3049 | mimic-fn@2.1.0: {} 3050 | 3051 | mimic-fn@4.0.0: {} 3052 | 3053 | mimic-response@3.1.0: {} 3054 | 3055 | mimic-response@4.0.0: {} 3056 | 3057 | minimatch@3.1.2: 3058 | dependencies: 3059 | brace-expansion: 1.1.11 3060 | 3061 | minimist@1.2.8: {} 3062 | 3063 | mri@1.2.0: {} 3064 | 3065 | ms@2.1.2: {} 3066 | 3067 | mute-stream@1.0.0: {} 3068 | 3069 | netmask@2.0.2: {} 3070 | 3071 | new-github-release-url@2.0.0: 3072 | dependencies: 3073 | type-fest: 2.19.0 3074 | 3075 | node-domexception@1.0.0: {} 3076 | 3077 | node-fetch@3.3.2: 3078 | dependencies: 3079 | data-uri-to-buffer: 4.0.1 3080 | fetch-blob: 3.2.0 3081 | formdata-polyfill: 4.0.10 3082 | 3083 | normalize-url@8.0.1: {} 3084 | 3085 | npm-run-path@4.0.1: 3086 | dependencies: 3087 | path-key: 3.1.1 3088 | 3089 | npm-run-path@5.3.0: 3090 | dependencies: 3091 | path-key: 4.0.0 3092 | 3093 | once@1.4.0: 3094 | dependencies: 3095 | wrappy: 1.0.2 3096 | 3097 | onetime@5.1.2: 3098 | dependencies: 3099 | mimic-fn: 2.1.0 3100 | 3101 | onetime@6.0.0: 3102 | dependencies: 3103 | mimic-fn: 4.0.0 3104 | 3105 | open@10.1.0: 3106 | dependencies: 3107 | default-browser: 5.2.1 3108 | define-lazy-prop: 3.0.0 3109 | is-inside-container: 1.0.0 3110 | is-wsl: 3.1.0 3111 | 3112 | ora@5.4.1: 3113 | dependencies: 3114 | bl: 4.1.0 3115 | chalk: 4.1.2 3116 | cli-cursor: 3.1.0 3117 | cli-spinners: 2.9.2 3118 | is-interactive: 1.0.0 3119 | is-unicode-supported: 0.1.0 3120 | log-symbols: 4.1.0 3121 | strip-ansi: 6.0.1 3122 | wcwidth: 1.0.1 3123 | 3124 | ora@8.0.1: 3125 | dependencies: 3126 | chalk: 5.3.0 3127 | cli-cursor: 4.0.0 3128 | cli-spinners: 2.9.2 3129 | is-interactive: 2.0.0 3130 | is-unicode-supported: 2.0.0 3131 | log-symbols: 6.0.0 3132 | stdin-discarder: 0.2.2 3133 | string-width: 7.1.0 3134 | strip-ansi: 7.1.0 3135 | 3136 | os-name@5.1.0: 3137 | dependencies: 3138 | macos-release: 3.2.0 3139 | windows-release: 5.1.1 3140 | 3141 | os-tmpdir@1.0.2: {} 3142 | 3143 | outdent@0.5.0: {} 3144 | 3145 | p-cancelable@3.0.0: {} 3146 | 3147 | p-filter@2.1.0: 3148 | dependencies: 3149 | p-map: 2.1.0 3150 | 3151 | p-limit@2.3.0: 3152 | dependencies: 3153 | p-try: 2.2.0 3154 | 3155 | p-limit@3.1.0: 3156 | dependencies: 3157 | yocto-queue: 0.1.0 3158 | 3159 | p-locate@4.1.0: 3160 | dependencies: 3161 | p-limit: 2.3.0 3162 | 3163 | p-locate@5.0.0: 3164 | dependencies: 3165 | p-limit: 3.1.0 3166 | 3167 | p-map@2.1.0: {} 3168 | 3169 | p-try@2.2.0: {} 3170 | 3171 | pac-proxy-agent@7.0.2: 3172 | dependencies: 3173 | '@tootallnate/quickjs-emscripten': 0.23.0 3174 | agent-base: 7.1.1 3175 | debug: 4.3.5 3176 | get-uri: 6.0.3 3177 | http-proxy-agent: 7.0.2 3178 | https-proxy-agent: 7.0.5 3179 | pac-resolver: 7.0.1 3180 | socks-proxy-agent: 8.0.4 3181 | transitivePeerDependencies: 3182 | - supports-color 3183 | 3184 | pac-resolver@7.0.1: 3185 | dependencies: 3186 | degenerator: 5.0.1 3187 | netmask: 2.0.2 3188 | 3189 | package-json@8.1.1: 3190 | dependencies: 3191 | got: 12.6.1 3192 | registry-auth-token: 5.0.2 3193 | registry-url: 6.0.1 3194 | semver: 7.6.2 3195 | 3196 | parent-module@1.0.1: 3197 | dependencies: 3198 | callsites: 3.1.0 3199 | 3200 | parse-json@5.2.0: 3201 | dependencies: 3202 | '@babel/code-frame': 7.24.7 3203 | error-ex: 1.3.2 3204 | json-parse-even-better-errors: 2.3.1 3205 | lines-and-columns: 1.2.4 3206 | 3207 | parse-path@7.0.0: 3208 | dependencies: 3209 | protocols: 2.0.1 3210 | 3211 | parse-url@8.1.0: 3212 | dependencies: 3213 | parse-path: 7.0.0 3214 | 3215 | patch-console@2.0.0: {} 3216 | 3217 | path-exists@4.0.0: {} 3218 | 3219 | path-is-absolute@1.0.1: {} 3220 | 3221 | path-key@3.1.1: {} 3222 | 3223 | path-key@4.0.0: {} 3224 | 3225 | path-parse@1.0.7: {} 3226 | 3227 | path-type@4.0.0: {} 3228 | 3229 | path-type@5.0.0: {} 3230 | 3231 | picocolors@1.0.1: {} 3232 | 3233 | picomatch@2.3.1: {} 3234 | 3235 | pify@4.0.1: {} 3236 | 3237 | pkg-dir@4.2.0: 3238 | dependencies: 3239 | find-up: 4.1.0 3240 | 3241 | preferred-pm@3.1.3: 3242 | dependencies: 3243 | find-up: 5.0.0 3244 | find-yarn-workspace-root2: 1.2.16 3245 | path-exists: 4.0.0 3246 | which-pm: 2.0.0 3247 | 3248 | prettier@2.8.8: {} 3249 | 3250 | proto-list@1.2.4: {} 3251 | 3252 | protocols@2.0.1: {} 3253 | 3254 | proxy-agent@6.4.0: 3255 | dependencies: 3256 | agent-base: 7.1.1 3257 | debug: 4.3.5 3258 | http-proxy-agent: 7.0.2 3259 | https-proxy-agent: 7.0.5 3260 | lru-cache: 7.18.3 3261 | pac-proxy-agent: 7.0.2 3262 | proxy-from-env: 1.1.0 3263 | socks-proxy-agent: 8.0.4 3264 | transitivePeerDependencies: 3265 | - supports-color 3266 | 3267 | proxy-from-env@1.1.0: {} 3268 | 3269 | pseudomap@1.0.2: {} 3270 | 3271 | pupa@3.1.0: 3272 | dependencies: 3273 | escape-goat: 4.0.0 3274 | 3275 | queue-microtask@1.2.3: {} 3276 | 3277 | quick-lru@5.1.1: {} 3278 | 3279 | rc@1.2.8: 3280 | dependencies: 3281 | deep-extend: 0.6.0 3282 | ini: 1.3.8 3283 | minimist: 1.2.8 3284 | strip-json-comments: 2.0.1 3285 | 3286 | react-dom@18.3.1(react@18.3.1): 3287 | dependencies: 3288 | loose-envify: 1.4.0 3289 | react: 18.3.1 3290 | scheduler: 0.23.2 3291 | 3292 | react-reconciler@0.29.2(react@18.3.1): 3293 | dependencies: 3294 | loose-envify: 1.4.0 3295 | react: 18.3.1 3296 | scheduler: 0.23.2 3297 | 3298 | react@18.3.1: 3299 | dependencies: 3300 | loose-envify: 1.4.0 3301 | 3302 | read-yaml-file@1.1.0: 3303 | dependencies: 3304 | graceful-fs: 4.2.11 3305 | js-yaml: 3.14.1 3306 | pify: 4.0.1 3307 | strip-bom: 3.0.0 3308 | 3309 | readable-stream@3.6.2: 3310 | dependencies: 3311 | inherits: 2.0.4 3312 | string_decoder: 1.3.0 3313 | util-deprecate: 1.0.2 3314 | 3315 | rechoir@0.6.2: 3316 | dependencies: 3317 | resolve: 1.22.8 3318 | 3319 | regenerator-runtime@0.14.1: {} 3320 | 3321 | registry-auth-token@5.0.2: 3322 | dependencies: 3323 | '@pnpm/npm-conf': 2.2.2 3324 | 3325 | registry-url@6.0.1: 3326 | dependencies: 3327 | rc: 1.2.8 3328 | 3329 | release-it@17.5.0(typescript@5.5.3): 3330 | dependencies: 3331 | '@iarna/toml': 2.2.5 3332 | '@octokit/rest': 20.1.1 3333 | async-retry: 1.3.3 3334 | chalk: 5.3.0 3335 | cosmiconfig: 9.0.0(typescript@5.5.3) 3336 | execa: 8.0.1 3337 | git-url-parse: 14.0.0 3338 | globby: 14.0.2 3339 | got: 13.0.0 3340 | inquirer: 9.3.2 3341 | is-ci: 3.0.1 3342 | issue-parser: 7.0.1 3343 | lodash: 4.17.21 3344 | mime-types: 2.1.35 3345 | new-github-release-url: 2.0.0 3346 | node-fetch: 3.3.2 3347 | open: 10.1.0 3348 | ora: 8.0.1 3349 | os-name: 5.1.0 3350 | proxy-agent: 6.4.0 3351 | semver: 7.6.2 3352 | shelljs: 0.8.5 3353 | update-notifier: 7.0.0 3354 | url-join: 5.0.0 3355 | wildcard-match: 5.1.3 3356 | yargs-parser: 21.1.1 3357 | transitivePeerDependencies: 3358 | - supports-color 3359 | - typescript 3360 | 3361 | rescript-bun@0.5.0(@rescript/core@1.4.0(rescript@11.1.1))(rescript@11.1.1): 3362 | dependencies: 3363 | '@rescript/core': 1.4.0(rescript@11.1.1) 3364 | rescript: 11.1.1 3365 | 3366 | rescript@11.1.1: {} 3367 | 3368 | resolve-alpn@1.2.1: {} 3369 | 3370 | resolve-from@4.0.0: {} 3371 | 3372 | resolve-from@5.0.0: {} 3373 | 3374 | resolve@1.22.8: 3375 | dependencies: 3376 | is-core-module: 2.14.0 3377 | path-parse: 1.0.7 3378 | supports-preserve-symlinks-flag: 1.0.0 3379 | 3380 | responselike@3.0.0: 3381 | dependencies: 3382 | lowercase-keys: 3.0.0 3383 | 3384 | restore-cursor@3.1.0: 3385 | dependencies: 3386 | onetime: 5.1.2 3387 | signal-exit: 3.0.7 3388 | 3389 | restore-cursor@4.0.0: 3390 | dependencies: 3391 | onetime: 5.1.2 3392 | signal-exit: 3.0.7 3393 | 3394 | retry@0.13.1: {} 3395 | 3396 | reusify@1.0.4: {} 3397 | 3398 | run-applescript@7.0.0: {} 3399 | 3400 | run-async@3.0.0: {} 3401 | 3402 | run-parallel@1.2.0: 3403 | dependencies: 3404 | queue-microtask: 1.2.3 3405 | 3406 | rxjs@7.8.1: 3407 | dependencies: 3408 | tslib: 2.6.3 3409 | 3410 | safe-buffer@5.2.1: {} 3411 | 3412 | safer-buffer@2.1.2: {} 3413 | 3414 | scheduler@0.23.2: 3415 | dependencies: 3416 | loose-envify: 1.4.0 3417 | 3418 | semver-diff@4.0.0: 3419 | dependencies: 3420 | semver: 7.6.2 3421 | 3422 | semver@7.6.2: {} 3423 | 3424 | shebang-command@1.2.0: 3425 | dependencies: 3426 | shebang-regex: 1.0.0 3427 | 3428 | shebang-command@2.0.0: 3429 | dependencies: 3430 | shebang-regex: 3.0.0 3431 | 3432 | shebang-regex@1.0.0: {} 3433 | 3434 | shebang-regex@3.0.0: {} 3435 | 3436 | shelljs@0.8.5: 3437 | dependencies: 3438 | glob: 7.2.3 3439 | interpret: 1.4.0 3440 | rechoir: 0.6.2 3441 | 3442 | signal-exit@3.0.7: {} 3443 | 3444 | signal-exit@4.1.0: {} 3445 | 3446 | slash@3.0.0: {} 3447 | 3448 | slash@5.1.0: {} 3449 | 3450 | slice-ansi@5.0.0: 3451 | dependencies: 3452 | ansi-styles: 6.2.1 3453 | is-fullwidth-code-point: 4.0.0 3454 | 3455 | slice-ansi@7.1.0: 3456 | dependencies: 3457 | ansi-styles: 6.2.1 3458 | is-fullwidth-code-point: 5.0.0 3459 | 3460 | smart-buffer@4.2.0: {} 3461 | 3462 | socks-proxy-agent@8.0.4: 3463 | dependencies: 3464 | agent-base: 7.1.1 3465 | debug: 4.3.5 3466 | socks: 2.8.3 3467 | transitivePeerDependencies: 3468 | - supports-color 3469 | 3470 | socks@2.8.3: 3471 | dependencies: 3472 | ip-address: 9.0.5 3473 | smart-buffer: 4.2.0 3474 | 3475 | source-map@0.6.1: 3476 | optional: true 3477 | 3478 | spawndamnit@2.0.0: 3479 | dependencies: 3480 | cross-spawn: 5.1.0 3481 | signal-exit: 3.0.7 3482 | 3483 | sprintf-js@1.0.3: {} 3484 | 3485 | sprintf-js@1.1.3: {} 3486 | 3487 | stack-utils@2.0.6: 3488 | dependencies: 3489 | escape-string-regexp: 2.0.0 3490 | 3491 | stdin-discarder@0.2.2: {} 3492 | 3493 | string-template@1.0.0: {} 3494 | 3495 | string-width@4.2.3: 3496 | dependencies: 3497 | emoji-regex: 8.0.0 3498 | is-fullwidth-code-point: 3.0.0 3499 | strip-ansi: 6.0.1 3500 | 3501 | string-width@5.1.2: 3502 | dependencies: 3503 | eastasianwidth: 0.2.0 3504 | emoji-regex: 9.2.2 3505 | strip-ansi: 7.1.0 3506 | 3507 | string-width@7.1.0: 3508 | dependencies: 3509 | emoji-regex: 10.3.0 3510 | get-east-asian-width: 1.2.0 3511 | strip-ansi: 7.1.0 3512 | 3513 | string_decoder@1.3.0: 3514 | dependencies: 3515 | safe-buffer: 5.2.1 3516 | 3517 | strip-ansi@6.0.1: 3518 | dependencies: 3519 | ansi-regex: 5.0.1 3520 | 3521 | strip-ansi@7.1.0: 3522 | dependencies: 3523 | ansi-regex: 6.0.1 3524 | 3525 | strip-bom@3.0.0: {} 3526 | 3527 | strip-final-newline@2.0.0: {} 3528 | 3529 | strip-final-newline@3.0.0: {} 3530 | 3531 | strip-json-comments@2.0.1: {} 3532 | 3533 | supports-color@5.5.0: 3534 | dependencies: 3535 | has-flag: 3.0.0 3536 | 3537 | supports-color@7.2.0: 3538 | dependencies: 3539 | has-flag: 4.0.0 3540 | 3541 | supports-preserve-symlinks-flag@1.0.0: {} 3542 | 3543 | term-size@2.2.1: {} 3544 | 3545 | tmp@0.0.33: 3546 | dependencies: 3547 | os-tmpdir: 1.0.2 3548 | 3549 | to-regex-range@5.0.1: 3550 | dependencies: 3551 | is-number: 7.0.0 3552 | 3553 | tslib@2.6.3: {} 3554 | 3555 | turbo-darwin-64@2.0.4: 3556 | optional: true 3557 | 3558 | turbo-darwin-arm64@2.0.4: 3559 | optional: true 3560 | 3561 | turbo-linux-64@2.0.4: 3562 | optional: true 3563 | 3564 | turbo-linux-arm64@2.0.4: 3565 | optional: true 3566 | 3567 | turbo-windows-64@2.0.4: 3568 | optional: true 3569 | 3570 | turbo-windows-arm64@2.0.4: 3571 | optional: true 3572 | 3573 | turbo@2.0.4: 3574 | optionalDependencies: 3575 | turbo-darwin-64: 2.0.4 3576 | turbo-darwin-arm64: 2.0.4 3577 | turbo-linux-64: 2.0.4 3578 | turbo-linux-arm64: 2.0.4 3579 | turbo-windows-64: 2.0.4 3580 | turbo-windows-arm64: 2.0.4 3581 | 3582 | type-fest@0.21.3: {} 3583 | 3584 | type-fest@1.4.0: {} 3585 | 3586 | type-fest@2.19.0: {} 3587 | 3588 | type-fest@4.20.0: {} 3589 | 3590 | typedarray-to-buffer@3.1.5: 3591 | dependencies: 3592 | is-typedarray: 1.0.0 3593 | 3594 | typescript@5.5.3: {} 3595 | 3596 | typescript@5.6.2: {} 3597 | 3598 | undici-types@5.26.5: {} 3599 | 3600 | unicorn-magic@0.1.0: {} 3601 | 3602 | unique-string@3.0.0: 3603 | dependencies: 3604 | crypto-random-string: 4.0.0 3605 | 3606 | universal-user-agent@6.0.1: {} 3607 | 3608 | universalify@0.1.2: {} 3609 | 3610 | universalify@2.0.1: {} 3611 | 3612 | update-notifier@7.0.0: 3613 | dependencies: 3614 | boxen: 7.1.1 3615 | chalk: 5.3.0 3616 | configstore: 6.0.0 3617 | import-lazy: 4.0.0 3618 | is-in-ci: 0.1.0 3619 | is-installed-globally: 0.4.0 3620 | is-npm: 6.0.0 3621 | latest-version: 7.0.0 3622 | pupa: 3.1.0 3623 | semver: 7.6.2 3624 | semver-diff: 4.0.0 3625 | xdg-basedir: 5.1.0 3626 | 3627 | url-join@5.0.0: {} 3628 | 3629 | util-deprecate@1.0.2: {} 3630 | 3631 | wcwidth@1.0.1: 3632 | dependencies: 3633 | defaults: 1.0.4 3634 | 3635 | web-streams-polyfill@3.3.3: {} 3636 | 3637 | which-pm@2.0.0: 3638 | dependencies: 3639 | load-yaml-file: 0.2.0 3640 | path-exists: 4.0.0 3641 | 3642 | which@1.3.1: 3643 | dependencies: 3644 | isexe: 2.0.0 3645 | 3646 | which@2.0.2: 3647 | dependencies: 3648 | isexe: 2.0.0 3649 | 3650 | widest-line@4.0.1: 3651 | dependencies: 3652 | string-width: 5.1.2 3653 | 3654 | widest-line@5.0.0: 3655 | dependencies: 3656 | string-width: 7.1.0 3657 | 3658 | wildcard-match@5.1.3: {} 3659 | 3660 | windows-release@5.1.1: 3661 | dependencies: 3662 | execa: 5.1.1 3663 | 3664 | wrap-ansi@6.2.0: 3665 | dependencies: 3666 | ansi-styles: 4.3.0 3667 | string-width: 4.2.3 3668 | strip-ansi: 6.0.1 3669 | 3670 | wrap-ansi@8.1.0: 3671 | dependencies: 3672 | ansi-styles: 6.2.1 3673 | string-width: 5.1.2 3674 | strip-ansi: 7.1.0 3675 | 3676 | wrap-ansi@9.0.0: 3677 | dependencies: 3678 | ansi-styles: 6.2.1 3679 | string-width: 7.1.0 3680 | strip-ansi: 7.1.0 3681 | 3682 | wrappy@1.0.2: {} 3683 | 3684 | write-file-atomic@3.0.3: 3685 | dependencies: 3686 | imurmurhash: 0.1.4 3687 | is-typedarray: 1.0.0 3688 | signal-exit: 3.0.7 3689 | typedarray-to-buffer: 3.1.5 3690 | 3691 | ws@8.17.0: {} 3692 | 3693 | xdg-basedir@5.1.0: {} 3694 | 3695 | yallist@2.1.2: {} 3696 | 3697 | yargs-parser@21.1.1: {} 3698 | 3699 | yocto-queue@0.1.0: {} 3700 | 3701 | yoctocolors-cjs@2.1.2: {} 3702 | 3703 | yoga-wasm-web@0.3.3: {} 3704 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "packages/**" 3 | - "examples" 4 | -------------------------------------------------------------------------------- /scripts/build-cli.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Define an array of targets 4 | targets=("linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") 5 | 6 | # Navigate to the packages/cli directory 7 | cd packages/cli || { 8 | echo "Failed to navigate to packages/cli directory" 9 | exit 1 10 | } 11 | 12 | # Create the .build directory in the root if it doesn't exist 13 | mkdir -p ../../.build 14 | 15 | # Loop through each target and run the bun build command 16 | for target in "${targets[@]}"; do 17 | # Build the project for the current target 18 | bun build src/Main.res.js --target=bun-$target --compile --outfile ./better-tmux-$target 19 | 20 | # Check if the command was successful 21 | if [ $? -ne 0 ]; then 22 | echo "Failed to build better-tmux for target $target" 23 | exit 1 24 | fi 25 | 26 | echo "Successfully built better-tmux for target $target" 27 | 28 | # Move the binary to the .build directory 29 | mv ./better-tmux-$target ../../.build/ 30 | 31 | # Check if the move was successful 32 | if [ $? -ne 0 ]; then 33 | echo "Failed to move the binary for target $target to .build directory" 34 | exit 1 35 | fi 36 | done 37 | 38 | echo "All binaries have been successfully built and moved to the .build directory" 39 | 40 | cd ../../ 41 | # Remove files with the pattern ..bun-build in the current directory 42 | find . -type f -name ".*.bun-build" -exec rm -f {} + 43 | -------------------------------------------------------------------------------- /scripts/bump-cli-version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$1" ]; then 4 | echo "Error: No version type provided." 5 | echo "Usage: $0 [patch|minor|major|]" 6 | exit 1 7 | fi 8 | 9 | version_type=$1 10 | 11 | cd packages/cli 12 | npm version $version_type --no-git-tag-version 13 | git add . 14 | git commit -m "bumping CLI version [skip-ci]" 15 | 16 | if [ $? -eq 0 ]; then 17 | echo "Version bumped successfully to $(npm pkg get version | tr -d '\"')" 18 | else 19 | echo "Error: Failed to bump the version." 20 | exit 1 21 | fi 22 | 23 | -------------------------------------------------------------------------------- /scripts/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the GitHub repository and destination directory 4 | repository="bettervim/better-tmux" 5 | destination_directory="/usr/local/bin/" 6 | tmp_dir="/tmp/better-tmux-$(uuidgen)" 7 | 8 | # Create a temporary directory 9 | mkdir -p "$tmp_dir" 10 | cd "$tmp_dir" || exit 1 11 | 12 | # Determine the OS and architecture 13 | os=$(uname -s | tr '[:upper:]' '[:lower:]') 14 | arch=$(uname -m) 15 | 16 | # ------- 17 | # This event is sent anonymously and contains no sensitive information. 18 | # It is used solely for analytics and insights purposes. 19 | # ------- 20 | api_key="phc_tep6nTCW6RCBJsqkskTDUmF0bTpgFnRtgrRTdhV4gsn" 21 | event_name="install" 22 | id=$(uuidgen) 23 | curl -X POST https://us.i.posthog.com/capture/ \ 24 | -H "Content-Type: application/json" \ 25 | -d '{ 26 | "api_key": "'$api_key'", 27 | "event": "'$event_name'", 28 | "properties": { 29 | "distinct_id": "'$id'", 30 | "arch": "'$arch'", 31 | "os": "'$os'" 32 | } 33 | }' 34 | clear 35 | 36 | # Set the executable name based on OS and architecture 37 | if [ "$arch" = "x86_64" ]; then 38 | executable_name="better-tmux-linux-x64" 39 | else 40 | executable_name="better-tmux-${os}-${arch}" 41 | fi 42 | download_url="https://github.com/$repository/releases/latest/download/$executable_name" 43 | 44 | # Download the executable from the latest release 45 | wget -O "$executable_name" "$download_url" 46 | 47 | # Check if the download was successful 48 | if [ $? -ne 0 ]; then 49 | echo "Failed to download $download_url" 50 | exit 1 51 | fi 52 | 53 | # Rename the downloaded file to 'better-tmux' 54 | mv "$executable_name" "better-tmux" 55 | 56 | # Move the executable to the destination directory 57 | sudo mv "better-tmux" "$destination_directory" 58 | 59 | # Set appropriate permissions (optional) 60 | sudo chmod +x "$destination_directory/better-tmux" 61 | 62 | # Clean up the temporary directory 63 | rm -rf "$tmp_dir" 64 | 65 | echo "Successfully installed better-tmux CLI." 66 | -------------------------------------------------------------------------------- /scripts/uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the executable name and destination directory 4 | executable_name="better-tmux" 5 | destination_directory="/usr/local/bin" 6 | 7 | # ------- 8 | # This event is sent anonymously and contains no sensitive information. 9 | # It is used solely for analytics and insights purposes. 10 | # ------- 11 | api_key="phc_tep6nTCW6RCBJsqkskTDUmF0bTpgFnRtgrRTdhV4gsn" 12 | event_name="uninstall" 13 | id=$(uuidgen) 14 | curl -X POST https://us.i.posthog.com/capture/ \ 15 | -H "Content-Type: application/json" \ 16 | -d '{ 17 | "api_key": "'$api_key'", 18 | "event": "'$event_name'", 19 | "properties": { 20 | "distinct_id": "'$id'", 21 | "arch": "'$arch'", 22 | "os": "'$os'" 23 | } 24 | }' 25 | 26 | clear 27 | 28 | # Remove the executable 29 | sudo rm "$destination_directory/$executable_name" 30 | 31 | echo "Uninstallation completed." 32 | -------------------------------------------------------------------------------- /scripts/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the GitHub repository and destination directory 4 | repository="bettervim/better-tmux" 5 | destination_directory="/usr/local/bin/" 6 | tmp_dir="/tmp/better-tmux-$(uuidgen)" 7 | 8 | # Create a temporary directory 9 | mkdir -p "$tmp_dir" 10 | cd "$tmp_dir" || exit 1 11 | 12 | # Determine the OS and architecture 13 | os=$(uname -s | tr '[:upper:]' '[:lower:]') 14 | arch=$(uname -m) 15 | 16 | # ------- 17 | # This event is sent anonymously and contains no sensitive information. 18 | # It is used solely for analytics and insights purposes. 19 | # ------- 20 | api_key="phc_tep6nTCW6RCBJsqkskTDUmF0bTpgFnRtgrRTdhV4gsn" 21 | event_name="update" 22 | id=$(uuidgen) 23 | curl -X POST https://us.i.posthog.com/capture/ \ 24 | -H "Content-Type: application/json" \ 25 | -d '{ 26 | "api_key": "'$api_key'", 27 | "event": "'$event_name'", 28 | "properties": { 29 | "distinct_id": "'$id'", 30 | "arch": "'$arch'", 31 | "os": "'$os'" 32 | } 33 | }' 34 | 35 | clear 36 | 37 | # Set the executable name based on OS and architecture 38 | if [ "$arch" = "x86_64" ]; then 39 | executable_name="better-tmux-linux-x64" 40 | else 41 | executable_name="better-tmux-${os}-${arch}" 42 | fi 43 | download_url="https://github.com/$repository/releases/latest/download/$executable_name" 44 | 45 | # Download the executable from the latest release into the temporary directory 46 | wget -O "$executable_name" "$download_url" 47 | 48 | # Check if the download was successful 49 | if [ $? -ne 0 ]; then 50 | echo "Failed to download $download_url" 51 | exit 1 52 | fi 53 | 54 | # Check if the executable already exists and remove the old version if it does 55 | if [ -f "$destination_directory/better-tmux" ]; then 56 | sudo rm "$destination_directory/better-tmux" 57 | fi 58 | 59 | # Rename the downloaded file to 'better-tmux' 60 | mv "$executable_name" "better-tmux" 61 | 62 | # Move the new executable to the destination directory 63 | sudo mv "better-tmux" "$destination_directory" 64 | 65 | # Set appropriate permissions (optional) 66 | sudo chmod +x "$destination_directory/better-tmux" 67 | 68 | # Clean up the temporary directory 69 | rm -rf "$tmp_dir" 70 | 71 | echo "Successfully updated better-tmux CLI." 72 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "tasks": { 4 | "build": { 5 | "dependsOn": ["^build"] 6 | }, 7 | "dev": { 8 | "persistent": true, 9 | "cache": false 10 | } 11 | } 12 | } 13 | --------------------------------------------------------------------------------