├── .gitattributes ├── .gitignore ├── src ├── AsyncData.resi └── AsyncData.res ├── package.json ├── example ├── Example.html └── AsyncData__Example.res ├── rescript.json ├── HISTORY.md ├── .github └── workflows │ └── nodejs.yml ├── MIT-LICENSE ├── README.md ├── test └── AsyncData__test.res └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | *.res linguist-language=ReScript 2 | *.resi linguist-language=ReScript 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.obj 3 | *.out 4 | *.compile 5 | *.native 6 | *.byte 7 | *.cmo 8 | *.annot 9 | *.cmi 10 | *.cmx 11 | *.cmt 12 | *.cmti 13 | *.cma 14 | *.a 15 | *.cmxa 16 | *.obj 17 | *~ 18 | *.annot 19 | *.cmj 20 | *.bak 21 | lib/ 22 | *.mlast 23 | *.mliast 24 | .vscode 25 | .merlin 26 | .bsb.lock 27 | /node_modules/ 28 | *.bs.js 29 | *.mjs -------------------------------------------------------------------------------- /src/AsyncData.resi: -------------------------------------------------------------------------------- 1 | type t<'a> = 2 | | NotAsked 3 | | Loading 4 | | Done('a) 5 | 6 | let getExn: t<'a> => 'a 7 | 8 | let mapWithDefault: (t<'a>, 'b, 'a => 'b) => 'b 9 | 10 | let map: (t<'a>, 'a => 'b) => t<'b> 11 | 12 | let flatMap: (t<'a>, 'a => t<'b>) => t<'b> 13 | 14 | let getWithDefault: (t<'a>, 'a) => 'a 15 | 16 | let isLoading: t<'a> => bool 17 | let isDone: t<'a> => bool 18 | let isNotAsked: t<'a> => bool 19 | 20 | let eq: (t<'a>, t<'b>, ('a, 'b) => bool) => bool 21 | 22 | let cmp: (t<'a>, t<'b>, ('a, 'b) => int) => int 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rescript-asyncdata", 3 | "version": "5.0.0", 4 | "scripts": { 5 | "clean": "rescript clean", 6 | "build": "rescript build", 7 | "watch": "rescript watch", 8 | "test": "retest --with-dom test/*.mjs" 9 | }, 10 | "keywords": [ 11 | "BuckleScript" 12 | ], 13 | "author": "Matthias Le Brun ", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "@rescript/react": "^0.14.0", 17 | "react": "^19.2.3", 18 | "react-dom": "^19.2.3", 19 | "rescript": "^12.0.1", 20 | "rescript-test": "^8.0.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example/Example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | AsyncData example 4 | 18 |
19 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /rescript.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rescript-asyncdata", 3 | "jsx": { "version": 4 }, 4 | "sources": [ 5 | { 6 | "dir": "src", 7 | "subdirs": true 8 | }, 9 | { 10 | "dir": "example", 11 | "subdirs": true, 12 | "type": "dev" 13 | }, 14 | { 15 | "dir": "test", 16 | "subdirs": true, 17 | "type": "dev" 18 | } 19 | ], 20 | "package-specs": { 21 | "module": "es6", 22 | "in-source": true 23 | }, 24 | "dependencies": ["@rescript/react"], 25 | "dev-dependencies": ["rescript-test"], 26 | "suffix": ".mjs", 27 | "warnings": { 28 | "error": "+101" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /HISTORY.md: -------------------------------------------------------------------------------- 1 | # 5.0.0 2 | 3 | Changes: 4 | 5 | - Upgrade to ReScript 12 (8908909) 6 | 7 | # 4.0.0 8 | 9 | Changes: 10 | 11 | - Don't expose React hooks (b8737eb) 12 | 13 | # 3.0.0 14 | 15 | Changes: 16 | 17 | - Move to ReScript React (f0c885f) 18 | 19 | # 2.0.0 20 | 21 | Changes: 22 | 23 | - Remove paginated hook for now (347bfc9) 24 | 25 | # 1.1.1 26 | 27 | Features: 28 | 29 | - Make `useCallback` depend on `merge` (a21fce7) 30 | 31 | # 1.1.0 32 | 33 | Features: 34 | 35 | - Add React helpers (8b122b3) 36 | 37 | # 1.0.1 38 | 39 | Fixes: 40 | 41 | - Fixed production dependencies (9710eb0) 42 | 43 | # 1.0.0 44 | 45 | Initial release 46 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [main] 9 | pull_request: 10 | branches: [main] 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: [22.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v2 22 | - name: Use Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v1 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | - run: yarn 27 | - run: yarn build 28 | - run: yarn test 29 | -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016-2018 Various Authors 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /src/AsyncData.res: -------------------------------------------------------------------------------- 1 | type t<'a> = 2 | | NotAsked 3 | | Loading 4 | | Done('a) 5 | 6 | let getExn = x => 7 | switch x { 8 | | Done(x) => x 9 | | NotAsked | Loading => throw(Not_found) 10 | } 11 | 12 | let mapWithDefault = (x, default, f) => 13 | switch x { 14 | | Done(x) => f(x) 15 | | Loading | NotAsked => default 16 | } 17 | 18 | let map = (x, f) => 19 | switch x { 20 | | Done(x) => Done(f(x)) 21 | | Loading => Loading 22 | | NotAsked => NotAsked 23 | } 24 | 25 | let flatMap = (x, f) => 26 | switch x { 27 | | Done(x) => f(x) 28 | | Loading => Loading 29 | | NotAsked => NotAsked 30 | } 31 | 32 | let getWithDefault = (x, default) => 33 | switch x { 34 | | Done(x) => x 35 | | Loading | NotAsked => default 36 | } 37 | 38 | let isLoading = x => 39 | switch x { 40 | | Loading => true 41 | | Done(_) | NotAsked => false 42 | } 43 | 44 | let isDone = x => 45 | switch x { 46 | | Done(_) => true 47 | | NotAsked | Loading => false 48 | } 49 | 50 | let isNotAsked = x => 51 | switch x { 52 | | NotAsked => true 53 | | Loading | Done(_) => false 54 | } 55 | 56 | let eq = (a, b, f) => 57 | switch (a, b) { 58 | | (Done(a), Done(b)) => f(a, b) 59 | | (NotAsked, Done(_)) 60 | | (NotAsked, Loading) 61 | | (Loading, NotAsked) 62 | | (Loading, Done(_)) 63 | | (Done(_), NotAsked) 64 | | (Done(_), Loading) => false 65 | | (Loading, Loading) 66 | | (NotAsked, NotAsked) => true 67 | } 68 | 69 | let cmp = (a, b, f) => 70 | switch (a, b) { 71 | | (Done(a), Done(b)) => f(a, b) 72 | | (NotAsked, Done(_)) => -1 73 | | (NotAsked, Loading) => -1 74 | | (Loading, NotAsked) => 1 75 | | (Loading, Done(_)) => -1 76 | | (Done(_), NotAsked) => 1 77 | | (Done(_), Loading) => 1 78 | | (Loading, Loading) 79 | | (NotAsked, NotAsked) => 0 80 | } 81 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AsyncData 2 | 3 | > A ReScript variant type to represent async data 4 | 5 | ## Installation 6 | 7 | Run the following in your console: 8 | 9 | ```console 10 | $ yarn add rescript-asyncdata 11 | ``` 12 | 13 | Then add `rescript-asyncdata` to your `bsconfig.json`'s `bs-dependencies`: 14 | 15 | ```diff 16 | { 17 | "bs-dependencies": [ 18 | + "rescript-asyncdata" 19 | ] 20 | } 21 | ``` 22 | 23 | ## Basics 24 | 25 | **AsyncData** provides a variant type that helps you represent the state of an async request. The type consists of three tags: 26 | 27 | - `NotAsked`: the request hasn't started yet 28 | - `Loading`: the request has been initialised and we're waiting for a response 29 | - `Done('a)`: the request has finished with `'a` 30 | 31 | ## Representing success & failure states 32 | 33 | ReScript provides a `result<'ok, 'error>` type to represent an operation success. 34 | 35 | You can combine `AsyncData.t` and `result` to represent a possible request failure state: 36 | 37 | ```reason 38 | type userFromServer = AsyncData.t> 39 | ``` 40 | 41 | > Note that you can use your own error type in place of `exn` 42 | 43 | Then, you can pattern match: 44 | 45 | ```reason 46 | switch userFromServer { 47 | | NotAsked => React.null 48 | | Loading => 49 | | Done(Error(error)) => 50 | | Done(Ok(user)) => 51 | } 52 | ``` 53 | 54 | ## Representing reload 55 | 56 | You can combine multiple `AsyncData.t` to represent more complex loading styles: 57 | 58 | ```reason 59 | type reloadableUserFromServer = { 60 | userFromServer: userFromServer, 61 | userFromServerReload: userFromServer, 62 | } 63 | 64 | let initialState = { 65 | userFromServer: NotAsked, 66 | userFromServerReload: NotAsked 67 | } 68 | 69 | let firstLoad = { 70 | userFromServer: Loading, 71 | userFromServerReload: NotAsked 72 | } 73 | 74 | let firstLoadDone = { 75 | userFromServer: Done(Ok(user)), 76 | userFromServerReload: NotAsked 77 | } 78 | 79 | let reload = { 80 | userFromServer: Done(Ok(user)), 81 | userFromServerReload: Loading 82 | } 83 | 84 | // If you just want to replace the previous state 85 | let reloadDone = { 86 | userFromServer: Done(Ok(newUser)), 87 | userFromServerReload: NotAsked 88 | } 89 | 90 | // If you want to compare/show a diff 91 | let reloadDone = { 92 | userFromServer: Done(Ok(user)), 93 | userFromServerReload: Done(Ok(newUser)) 94 | } 95 | ``` 96 | 97 | ## Utility functions 98 | 99 | This package contains a few utility functions to manipulate `AsyncData.t`: 100 | 101 | - `getExn`: Extract the `Done('a)` payload or throw 102 | - `getWithDefault`: Extract the `Done('a)` payload or return a default value 103 | - `mapWithDefault`: Extract and map the `Done('a)` payload or return a default value 104 | - `map`: Map the `Done('a)` payload 105 | - `flatMap`: Map the `Done('a)` payload with a callback that returns a `AsyncData.t` 106 | - `isLoading` 107 | - `isNotAsked` 108 | - `isDone` 109 | - `cmp`: For sorting 110 | - `eq`: For comparison 111 | 112 | ## Aknowledgments 113 | 114 | This is heavily inspired by Elm's [krisajenkins/remotedata](https://github.com/krisajenkins/remotedata) 115 | -------------------------------------------------------------------------------- /test/AsyncData__test.res: -------------------------------------------------------------------------------- 1 | open Test 2 | open AsyncData 3 | 4 | let intEqual = (~message=?, a: int, b: int) => assertion(~message?, (a, b) => a == b, a, b) 5 | let boolEqual = (~message=?, a: bool, b: bool) => assertion(~message?, (a, b) => a == b, a, b) 6 | let asyncDataEqual = (~message=?, a: AsyncData.t<'a>, b: AsyncData.t<'a>) => 7 | assertion(~message?, (a, b) => AsyncData.eq(a, b, (a, b) => a == b), a, b) 8 | let asyncDataArrayEqual = (~message=?, a: array>, b: array>) => 9 | assertion( 10 | ~message?, 11 | (a, b) => Belt.Array.eq(a, b, (a, b) => AsyncData.eq(a, b, (a, b) => a == b)), 12 | a, 13 | b, 14 | ) 15 | 16 | test("AsyncData getExn", () => { 17 | throws(() => getExn(NotAsked)) 18 | throws(() => getExn(Loading)) 19 | doesNotThrow(() => { 20 | let _ = getExn(Done(1)) 21 | }) 22 | }) 23 | 24 | test("AsyncData mapWithDefault", () => { 25 | intEqual(NotAsked->mapWithDefault(0, value => value + 1), 0) 26 | intEqual(Loading->mapWithDefault(0, value => value + 1), 0) 27 | intEqual(Done(1)->mapWithDefault(0, value => value + 1), 2) 28 | }) 29 | 30 | test("AsyncData map", () => { 31 | asyncDataEqual(NotAsked->map(value => value + 1), NotAsked) 32 | asyncDataEqual(Loading->map(value => value + 1), Loading) 33 | asyncDataEqual(Done(1)->map(value => value + 1), Done(2)) 34 | }) 35 | 36 | test("AsyncData flatMap", () => { 37 | asyncDataEqual(NotAsked->flatMap(value => Done(value + 1)), NotAsked) 38 | asyncDataEqual(Loading->flatMap(value => Done(value + 1)), Loading) 39 | asyncDataEqual(Done(1)->flatMap(value => Done(value + 1)), Done(2)) 40 | asyncDataEqual(Done(1)->flatMap(_ => Loading), Loading) 41 | asyncDataEqual(Done(1)->flatMap(_ => NotAsked), NotAsked) 42 | }) 43 | 44 | test("AsyncData getWithDefault", () => { 45 | intEqual(NotAsked->getWithDefault(1), 1) 46 | intEqual(Loading->getWithDefault(1), 1) 47 | intEqual(Done(2)->getWithDefault(1), 2) 48 | }) 49 | 50 | test("AsyncData isLoading", () => { 51 | boolEqual(NotAsked->isLoading, false) 52 | boolEqual(Loading->isLoading, true) 53 | boolEqual(Done(2)->isLoading, false) 54 | }) 55 | 56 | test("AsyncData isDone", () => { 57 | boolEqual(NotAsked->isDone, false) 58 | boolEqual(Loading->isDone, false) 59 | boolEqual(Done(2)->isDone, true) 60 | }) 61 | 62 | test("AsyncData isNotAsked", () => { 63 | boolEqual(NotAsked->isNotAsked, true) 64 | boolEqual(Loading->isNotAsked, false) 65 | boolEqual(Done(2)->isNotAsked, false) 66 | }) 67 | 68 | test("AsyncData eq", () => { 69 | boolEqual(eq(NotAsked, NotAsked, (a, b) => a === b), true) 70 | boolEqual(eq(Loading, Loading, (a, b) => a === b), true) 71 | boolEqual(eq(NotAsked, Loading, (a, b) => a === b), false) 72 | boolEqual(eq(Loading, NotAsked, (a, b) => a === b), false) 73 | boolEqual(eq(NotAsked, Done(1), (a, b) => a === b), false) 74 | boolEqual(eq(Loading, Done(1), (a, b) => a === b), false) 75 | boolEqual(eq(Done(1), NotAsked, (a, b) => a === b), false) 76 | boolEqual(eq(Done(1), Loading, (a, b) => a === b), false) 77 | boolEqual(eq(Done(1), Done(1), (a, b) => a === b), true) 78 | boolEqual(eq(Done(1), Done(2), (a, b) => a === b), false) 79 | boolEqual(eq(Done(2), Done(1), (a, b) => a === b), false) 80 | }) 81 | 82 | test("AsyncData cmp", () => { 83 | open Belt 84 | asyncDataArrayEqual( 85 | [Done(2), NotAsked, Loading, Loading, Done(1), NotAsked]->SortArray.stableSortBy((a, b) => 86 | cmp(a, b, (a, b) => b > a ? -1 : 1) 87 | ), 88 | [NotAsked, NotAsked, Loading, Loading, Done(1), Done(2)], 89 | ) 90 | }) 91 | -------------------------------------------------------------------------------- /example/AsyncData__Example.res: -------------------------------------------------------------------------------- 1 | // The following module is just a mock for an API 2 | module User = { 3 | type t = { 4 | id: string, 5 | username: string, 6 | fetchedAt: float, 7 | } 8 | type error 9 | let get = (id: string, cb: result => unit) => { 10 | Console.log(`get(${id}): init`) 11 | 12 | let timeoutId = setTimeout(() => { 13 | Console.log(`get(${id}): receive`) 14 | let payload = {id, username: `User${id}`, fetchedAt: Date.now()} 15 | cb(Ok(payload)) 16 | }, 1_000) 17 | 18 | Some( 19 | () => { 20 | Console.log(`get(${id}): cancel`) 21 | clearTimeout(timeoutId) 22 | }, 23 | ) 24 | } 25 | 26 | let getPage = (page: int, cb: result, error> => unit) => { 27 | Console.log(`getPage(${page->Int.toString}): init`) 28 | let timeoutId = setTimeout(() => { 29 | Console.log(`getPage(${page->Int.toString}): receive`) 30 | let payload = Belt.Array.range(0, 9)->Array.map(index => { 31 | let id = ((page - 1) * 10 + index)->Int.toString 32 | { 33 | id, 34 | username: `User${id}`, 35 | fetchedAt: Date.now(), 36 | } 37 | }) 38 | cb(Ok(payload)) 39 | }, 1_000) 40 | Some( 41 | () => { 42 | Console.log(`getPage(${page->Int.toString}): cancel`) 43 | clearTimeout(timeoutId) 44 | }, 45 | ) 46 | } 47 | } 48 | 49 | module Async = { 50 | @react.component 51 | let make = (~id) => { 52 | let (user, setUser) = React.useState(() => AsyncData.NotAsked) 53 | 54 | React.useEffect1(() => { 55 | setUser(_ => Loading) 56 | 57 | let cancel = User.get(id, user => { 58 | setUser(_ => Done(user)) 59 | }) 60 | 61 | Some( 62 | () => { 63 | setUser(_ => NotAsked) 64 | switch cancel { 65 | | Some(cancel) => cancel() 66 | | None => () 67 | } 68 | }, 69 | ) 70 | }, [id]) 71 | 72 | Console.log(user) 73 | 74 |
75 | {switch user { 76 | | NotAsked => React.null 77 | | Loading => "Loading ..."->React.string 78 | | Done(Error(_)) => "Error"->React.string 79 | | Done(Ok(user)) => user.username->React.string 80 | }} 81 |
82 | } 83 | } 84 | 85 | type reload<'a> = {current: AsyncData.t<'a>, next: AsyncData.t<'a>} 86 | 87 | module AsyncWithReload = { 88 | @react.component 89 | let make = (~id) => { 90 | let (reloadableUser, setUser) = React.useState(() => {current: NotAsked, next: NotAsked}) 91 | let (reloadCount, setReloadCount) = React.useState(() => 0) 92 | 93 | let setUser = React.useCallback0((next: AsyncData.t>) => { 94 | setUser(state => { 95 | current: switch (state.current, next) { 96 | | (Done(_), Done(next)) => Done(next) 97 | | (NotAsked | Loading, next) => next 98 | | _ => state.current 99 | }, 100 | next, 101 | }) 102 | }) 103 | 104 | React.useEffect2(() => { 105 | if mod(reloadCount, 2) == 0 { 106 | let userRollback = reloadableUser.next 107 | setUser(Loading) 108 | 109 | let cancel = User.get(id, user => { 110 | setUser(Done(user)) 111 | }) 112 | 113 | Some( 114 | () => { 115 | setUser(userRollback) 116 | switch cancel { 117 | | Some(cancel) => cancel() 118 | | None => () 119 | } 120 | }, 121 | ) 122 | } else { 123 | None 124 | } 125 | }, (id, reloadCount)) 126 | 127 |
128 | {switch reloadableUser.current { 129 | | NotAsked => React.null 130 | | Loading => "Loading ..."->React.string 131 | | Done(Error(_)) => "Error"->React.string 132 | | Done(Ok(user)) => 133 | <> 134 | {user.username->React.string} 135 | {user.fetchedAt->React.float} 136 | {reloadableUser.next->AsyncData.isLoading ? "Reloading ..."->React.string : React.null} 137 | 138 | 139 | }} 140 |
141 | } 142 | } 143 | 144 | module App = { 145 | @react.component 146 | let make = () => { 147 |
148 | 149 |
150 | 151 |
152 | } 153 | } 154 | 155 | switch ReactDOM.querySelector("#root") { 156 | | Some(root) => ReactDOM.Client.createRoot(root)->ReactDOM.Client.Root.render() 157 | | None => () 158 | } 159 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@asamuzakjp/css-color@^3.2.0": 6 | version "3.2.0" 7 | resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" 8 | integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== 9 | dependencies: 10 | "@csstools/css-calc" "^2.1.3" 11 | "@csstools/css-color-parser" "^3.0.9" 12 | "@csstools/css-parser-algorithms" "^3.0.4" 13 | "@csstools/css-tokenizer" "^3.0.3" 14 | lru-cache "^10.4.3" 15 | 16 | "@asamuzakjp/dom-selector@^2.0.1": 17 | version "2.0.2" 18 | resolved "https://registry.yarnpkg.com/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz#160f601d9a465bbdf641410afdc527f37325506e" 19 | integrity sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ== 20 | dependencies: 21 | bidi-js "^1.0.3" 22 | css-tree "^2.3.1" 23 | is-potential-custom-element-name "^1.0.1" 24 | 25 | "@csstools/color-helpers@^5.1.0": 26 | version "5.1.0" 27 | resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" 28 | integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== 29 | 30 | "@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": 31 | version "2.1.4" 32 | resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" 33 | integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== 34 | 35 | "@csstools/css-color-parser@^3.0.9": 36 | version "3.1.0" 37 | resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" 38 | integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== 39 | dependencies: 40 | "@csstools/color-helpers" "^5.1.0" 41 | "@csstools/css-calc" "^2.1.4" 42 | 43 | "@csstools/css-parser-algorithms@^3.0.4": 44 | version "3.0.5" 45 | resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" 46 | integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== 47 | 48 | "@csstools/css-tokenizer@^3.0.3": 49 | version "3.0.4" 50 | resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" 51 | integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== 52 | 53 | "@isaacs/cliui@^8.0.2": 54 | version "8.0.2" 55 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 56 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 57 | dependencies: 58 | string-width "^5.1.2" 59 | string-width-cjs "npm:string-width@^4.2.0" 60 | strip-ansi "^7.0.1" 61 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 62 | wrap-ansi "^8.1.0" 63 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 64 | 65 | "@pkgjs/parseargs@^0.11.0": 66 | version "0.11.0" 67 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 68 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 69 | 70 | "@rescript/darwin-arm64@12.0.1": 71 | version "12.0.1" 72 | resolved "https://registry.yarnpkg.com/@rescript/darwin-arm64/-/darwin-arm64-12.0.1.tgz#f7d591d4f07dbeddbe88ddbd71339ce2f50c833e" 73 | integrity sha512-JJddiKKfOSc9X+2rt6IrbEUlOBaIfgjkWzCN986czZ5YV4lh3jysPVk6EQHaip2ibPkwf/nLv6Pin4t+XmdqLQ== 74 | 75 | "@rescript/darwin-x64@12.0.1": 76 | version "12.0.1" 77 | resolved "https://registry.yarnpkg.com/@rescript/darwin-x64/-/darwin-x64-12.0.1.tgz#d766e2c209588d5fbe7b4e60dcc420a2a794a747" 78 | integrity sha512-tZSeHr9MQ90oKULDIn9ugvP08eLCflH2uO02iF7z1i8RshPrfD36qFiPOn4WxzcSJuqynffNLEgeWYrnPiZ0JQ== 79 | 80 | "@rescript/linux-arm64@12.0.1": 81 | version "12.0.1" 82 | resolved "https://registry.yarnpkg.com/@rescript/linux-arm64/-/linux-arm64-12.0.1.tgz#14584e119a380dac8d6e51cc1ba2bac583be2ead" 83 | integrity sha512-V/xnkFgEvSRMlyT1XCptnWWXgySFR9aKdja74VeDyEGLc6MGmi8zopxUUFcwCQXxV/zPAFkIxjz8xMY0SBCAmQ== 84 | 85 | "@rescript/linux-x64@12.0.1": 86 | version "12.0.1" 87 | resolved "https://registry.yarnpkg.com/@rescript/linux-x64/-/linux-x64-12.0.1.tgz#7e1165b7ce45440cb1acfda91d9acf928744600c" 88 | integrity sha512-WpVBjAvLsKATOJTckI6PDf4IFnHHxwsSVtklC+XAXbwqHLP1gqDDuVcykOOIWexxepod+QvBvEZGjzNPJ5L8gA== 89 | 90 | "@rescript/react@^0.14.0": 91 | version "0.14.0" 92 | resolved "https://registry.yarnpkg.com/@rescript/react/-/react-0.14.0.tgz#f5733c2db6b103913a99f0f7c1a1db9d8e85509b" 93 | integrity sha512-ncOHWK7ujQmff+QMYKRmtwETvJVolzkwRpDa0MFenEXdUz9ZYywNbq+xH9F9RDQeSwC3/4s9JeUQVyTu4fMpHw== 94 | 95 | "@rescript/runtime@12.0.1": 96 | version "12.0.1" 97 | resolved "https://registry.yarnpkg.com/@rescript/runtime/-/runtime-12.0.1.tgz#46a32769820645344b784e67ce5db0cc033d52dc" 98 | integrity sha512-pMoWvllPFK0cl87vMYBVvll+DaAdPAsRuLIIJa+Q8LMhcS7cqpaZVflU3LbH+U/kv3vWaUYIfLBObwGnXw/CDg== 99 | 100 | "@rescript/win32-x64@12.0.1": 101 | version "12.0.1" 102 | resolved "https://registry.yarnpkg.com/@rescript/win32-x64/-/win32-x64-12.0.1.tgz#7ec1e5b08128acd84d691f4288511f3f0d0ec4bc" 103 | integrity sha512-Hv6nwb6A94qtj6b4PcIsmoWhLIcLt6wLuHpD9YNxj4/d9FkrHM/yj9ZKhKan/9rfg4wkHl1cZE898AZe/nWq9g== 104 | 105 | agent-base@^7.1.0, agent-base@^7.1.2: 106 | version "7.1.4" 107 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" 108 | integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== 109 | 110 | ansi-regex@^5.0.1: 111 | version "5.0.1" 112 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 113 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 114 | 115 | ansi-regex@^6.0.1: 116 | version "6.2.2" 117 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" 118 | integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== 119 | 120 | ansi-styles@^4.0.0: 121 | version "4.3.0" 122 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 123 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 124 | dependencies: 125 | color-convert "^2.0.1" 126 | 127 | ansi-styles@^6.1.0: 128 | version "6.2.3" 129 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" 130 | integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== 131 | 132 | asynckit@^0.4.0: 133 | version "0.4.0" 134 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 135 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 136 | 137 | balanced-match@^1.0.0: 138 | version "1.0.2" 139 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 140 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 141 | 142 | bidi-js@^1.0.3: 143 | version "1.0.3" 144 | resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" 145 | integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== 146 | dependencies: 147 | require-from-string "^2.0.2" 148 | 149 | brace-expansion@^2.0.1: 150 | version "2.0.2" 151 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" 152 | integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== 153 | dependencies: 154 | balanced-match "^1.0.0" 155 | 156 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: 157 | version "1.0.2" 158 | resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" 159 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== 160 | dependencies: 161 | es-errors "^1.3.0" 162 | function-bind "^1.1.2" 163 | 164 | color-convert@^2.0.1: 165 | version "2.0.1" 166 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 167 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 168 | dependencies: 169 | color-name "~1.1.4" 170 | 171 | color-name@~1.1.4: 172 | version "1.1.4" 173 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 174 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 175 | 176 | combined-stream@^1.0.8: 177 | version "1.0.8" 178 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 179 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 180 | dependencies: 181 | delayed-stream "~1.0.0" 182 | 183 | cross-spawn@^7.0.6: 184 | version "7.0.6" 185 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 186 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 187 | dependencies: 188 | path-key "^3.1.0" 189 | shebang-command "^2.0.0" 190 | which "^2.0.1" 191 | 192 | css-tree@^2.3.1: 193 | version "2.3.1" 194 | resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" 195 | integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== 196 | dependencies: 197 | mdn-data "2.0.30" 198 | source-map-js "^1.0.1" 199 | 200 | cssstyle@^4.0.1: 201 | version "4.6.0" 202 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" 203 | integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== 204 | dependencies: 205 | "@asamuzakjp/css-color" "^3.2.0" 206 | rrweb-cssom "^0.8.0" 207 | 208 | data-urls@^5.0.0: 209 | version "5.0.0" 210 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" 211 | integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== 212 | dependencies: 213 | whatwg-mimetype "^4.0.0" 214 | whatwg-url "^14.0.0" 215 | 216 | debug@4, debug@^4.3.4: 217 | version "4.4.3" 218 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" 219 | integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== 220 | dependencies: 221 | ms "^2.1.3" 222 | 223 | decimal.js@^10.4.3: 224 | version "10.6.0" 225 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" 226 | integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== 227 | 228 | delayed-stream@~1.0.0: 229 | version "1.0.0" 230 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 231 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 232 | 233 | dunder-proto@^1.0.1: 234 | version "1.0.1" 235 | resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" 236 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== 237 | dependencies: 238 | call-bind-apply-helpers "^1.0.1" 239 | es-errors "^1.3.0" 240 | gopd "^1.2.0" 241 | 242 | eastasianwidth@^0.2.0: 243 | version "0.2.0" 244 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 245 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 246 | 247 | emoji-regex@^8.0.0: 248 | version "8.0.0" 249 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 250 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 251 | 252 | emoji-regex@^9.2.2: 253 | version "9.2.2" 254 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 255 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 256 | 257 | entities@^6.0.0: 258 | version "6.0.1" 259 | resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" 260 | integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== 261 | 262 | es-define-property@^1.0.1: 263 | version "1.0.1" 264 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" 265 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== 266 | 267 | es-errors@^1.3.0: 268 | version "1.3.0" 269 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 270 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 271 | 272 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: 273 | version "1.1.1" 274 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" 275 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== 276 | dependencies: 277 | es-errors "^1.3.0" 278 | 279 | es-set-tostringtag@^2.1.0: 280 | version "2.1.0" 281 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" 282 | integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== 283 | dependencies: 284 | es-errors "^1.3.0" 285 | get-intrinsic "^1.2.6" 286 | has-tostringtag "^1.0.2" 287 | hasown "^2.0.2" 288 | 289 | foreground-child@^3.1.0: 290 | version "3.3.1" 291 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" 292 | integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== 293 | dependencies: 294 | cross-spawn "^7.0.6" 295 | signal-exit "^4.0.1" 296 | 297 | form-data@^4.0.0: 298 | version "4.0.5" 299 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" 300 | integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== 301 | dependencies: 302 | asynckit "^0.4.0" 303 | combined-stream "^1.0.8" 304 | es-set-tostringtag "^2.1.0" 305 | hasown "^2.0.2" 306 | mime-types "^2.1.12" 307 | 308 | function-bind@^1.1.2: 309 | version "1.1.2" 310 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 311 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 312 | 313 | get-intrinsic@^1.2.6: 314 | version "1.3.0" 315 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" 316 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 317 | dependencies: 318 | call-bind-apply-helpers "^1.0.2" 319 | es-define-property "^1.0.1" 320 | es-errors "^1.3.0" 321 | es-object-atoms "^1.1.1" 322 | function-bind "^1.1.2" 323 | get-proto "^1.0.1" 324 | gopd "^1.2.0" 325 | has-symbols "^1.1.0" 326 | hasown "^2.0.2" 327 | math-intrinsics "^1.1.0" 328 | 329 | get-proto@^1.0.1: 330 | version "1.0.1" 331 | resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" 332 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== 333 | dependencies: 334 | dunder-proto "^1.0.1" 335 | es-object-atoms "^1.0.0" 336 | 337 | glob@^10.3.12: 338 | version "10.5.0" 339 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" 340 | integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== 341 | dependencies: 342 | foreground-child "^3.1.0" 343 | jackspeak "^3.1.2" 344 | minimatch "^9.0.4" 345 | minipass "^7.1.2" 346 | package-json-from-dist "^1.0.0" 347 | path-scurry "^1.11.1" 348 | 349 | gopd@^1.2.0: 350 | version "1.2.0" 351 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" 352 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== 353 | 354 | has-symbols@^1.0.3, has-symbols@^1.1.0: 355 | version "1.1.0" 356 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" 357 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== 358 | 359 | has-tostringtag@^1.0.2: 360 | version "1.0.2" 361 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" 362 | integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== 363 | dependencies: 364 | has-symbols "^1.0.3" 365 | 366 | hasown@^2.0.2: 367 | version "2.0.2" 368 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 369 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 370 | dependencies: 371 | function-bind "^1.1.2" 372 | 373 | html-encoding-sniffer@^4.0.0: 374 | version "4.0.0" 375 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" 376 | integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== 377 | dependencies: 378 | whatwg-encoding "^3.1.1" 379 | 380 | http-proxy-agent@^7.0.0: 381 | version "7.0.2" 382 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" 383 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== 384 | dependencies: 385 | agent-base "^7.1.0" 386 | debug "^4.3.4" 387 | 388 | https-proxy-agent@^7.0.2: 389 | version "7.0.6" 390 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" 391 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== 392 | dependencies: 393 | agent-base "^7.1.2" 394 | debug "4" 395 | 396 | iconv-lite@0.6.3: 397 | version "0.6.3" 398 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 399 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 400 | dependencies: 401 | safer-buffer ">= 2.1.2 < 3.0.0" 402 | 403 | is-fullwidth-code-point@^3.0.0: 404 | version "3.0.0" 405 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 406 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 407 | 408 | is-potential-custom-element-name@^1.0.1: 409 | version "1.0.1" 410 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" 411 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== 412 | 413 | isexe@^2.0.0: 414 | version "2.0.0" 415 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 416 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 417 | 418 | jackspeak@^3.1.2: 419 | version "3.4.3" 420 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" 421 | integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== 422 | dependencies: 423 | "@isaacs/cliui" "^8.0.2" 424 | optionalDependencies: 425 | "@pkgjs/parseargs" "^0.11.0" 426 | 427 | jsdom@^23.1.0: 428 | version "23.2.0" 429 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-23.2.0.tgz#08083220146d41c467efa1c6969f02b525ba6c1d" 430 | integrity sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA== 431 | dependencies: 432 | "@asamuzakjp/dom-selector" "^2.0.1" 433 | cssstyle "^4.0.1" 434 | data-urls "^5.0.0" 435 | decimal.js "^10.4.3" 436 | form-data "^4.0.0" 437 | html-encoding-sniffer "^4.0.0" 438 | http-proxy-agent "^7.0.0" 439 | https-proxy-agent "^7.0.2" 440 | is-potential-custom-element-name "^1.0.1" 441 | parse5 "^7.1.2" 442 | rrweb-cssom "^0.6.0" 443 | saxes "^6.0.0" 444 | symbol-tree "^3.2.4" 445 | tough-cookie "^4.1.3" 446 | w3c-xmlserializer "^5.0.0" 447 | webidl-conversions "^7.0.0" 448 | whatwg-encoding "^3.1.1" 449 | whatwg-mimetype "^4.0.0" 450 | whatwg-url "^14.0.0" 451 | ws "^8.16.0" 452 | xml-name-validator "^5.0.0" 453 | 454 | lru-cache@^10.2.0, lru-cache@^10.4.3: 455 | version "10.4.3" 456 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" 457 | integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== 458 | 459 | math-intrinsics@^1.1.0: 460 | version "1.1.0" 461 | resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" 462 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== 463 | 464 | mdn-data@2.0.30: 465 | version "2.0.30" 466 | resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" 467 | integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== 468 | 469 | mime-db@1.44.0: 470 | version "1.44.0" 471 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 472 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 473 | 474 | mime-types@^2.1.12: 475 | version "2.1.27" 476 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 477 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 478 | dependencies: 479 | mime-db "1.44.0" 480 | 481 | minimatch@^9.0.4: 482 | version "9.0.5" 483 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 484 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 485 | dependencies: 486 | brace-expansion "^2.0.1" 487 | 488 | "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: 489 | version "7.1.2" 490 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" 491 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 492 | 493 | ms@^2.1.3: 494 | version "2.1.3" 495 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 496 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 497 | 498 | package-json-from-dist@^1.0.0: 499 | version "1.0.1" 500 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" 501 | integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== 502 | 503 | parse5@^7.1.2: 504 | version "7.3.0" 505 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" 506 | integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== 507 | dependencies: 508 | entities "^6.0.0" 509 | 510 | path-key@^3.1.0: 511 | version "3.1.1" 512 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 513 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 514 | 515 | path-scurry@^1.11.1: 516 | version "1.11.1" 517 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" 518 | integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== 519 | dependencies: 520 | lru-cache "^10.2.0" 521 | minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 522 | 523 | psl@^1.1.33: 524 | version "1.15.0" 525 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" 526 | integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== 527 | dependencies: 528 | punycode "^2.3.1" 529 | 530 | punycode@^2.1.1: 531 | version "2.1.1" 532 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 533 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 534 | 535 | punycode@^2.3.1: 536 | version "2.3.1" 537 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 538 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 539 | 540 | querystringify@^2.1.1: 541 | version "2.2.0" 542 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" 543 | integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== 544 | 545 | react-dom@^19.2.3: 546 | version "19.2.3" 547 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.3.tgz#f0b61d7e5c4a86773889fcc1853af3ed5f215b17" 548 | integrity sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg== 549 | dependencies: 550 | scheduler "^0.27.0" 551 | 552 | react@^19.2.3: 553 | version "19.2.3" 554 | resolved "https://registry.yarnpkg.com/react/-/react-19.2.3.tgz#d83e5e8e7a258cf6b4fe28640515f99b87cd19b8" 555 | integrity sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA== 556 | 557 | require-from-string@^2.0.2: 558 | version "2.0.2" 559 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 560 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 561 | 562 | requires-port@^1.0.0: 563 | version "1.0.0" 564 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 565 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 566 | 567 | rescript-test@^8.0.0: 568 | version "8.0.0" 569 | resolved "https://registry.yarnpkg.com/rescript-test/-/rescript-test-8.0.0.tgz#45e87b5e436830faf007f6d33704abb7d6dfd949" 570 | integrity sha512-b9RIpl7/YOCP1jl79j6LwRH8mj/5VAnkHaSLwJacMfzQGJL9nawiA53JrOyLNI6alYLrZBMNSWyHrt3QXF5jgw== 571 | dependencies: 572 | glob "^10.3.12" 573 | jsdom "^23.1.0" 574 | 575 | rescript@^12.0.1: 576 | version "12.0.1" 577 | resolved "https://registry.yarnpkg.com/rescript/-/rescript-12.0.1.tgz#c22c036df5c991213d8d3069697b63e69593fba6" 578 | integrity sha512-59JyEUyLj+IPd9VutAXpBXRGqaeaHCMtvACJNAy/oI1hjpjklQ2UJE07oLhxoWB4SDZrCxzowNUpE46UAgjOXg== 579 | dependencies: 580 | "@rescript/runtime" "12.0.1" 581 | optionalDependencies: 582 | "@rescript/darwin-arm64" "12.0.1" 583 | "@rescript/darwin-x64" "12.0.1" 584 | "@rescript/linux-arm64" "12.0.1" 585 | "@rescript/linux-x64" "12.0.1" 586 | "@rescript/win32-x64" "12.0.1" 587 | 588 | rrweb-cssom@^0.6.0: 589 | version "0.6.0" 590 | resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" 591 | integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== 592 | 593 | rrweb-cssom@^0.8.0: 594 | version "0.8.0" 595 | resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" 596 | integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== 597 | 598 | "safer-buffer@>= 2.1.2 < 3.0.0": 599 | version "2.1.2" 600 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 601 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 602 | 603 | saxes@^6.0.0: 604 | version "6.0.0" 605 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" 606 | integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== 607 | dependencies: 608 | xmlchars "^2.2.0" 609 | 610 | scheduler@^0.27.0: 611 | version "0.27.0" 612 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd" 613 | integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== 614 | 615 | shebang-command@^2.0.0: 616 | version "2.0.0" 617 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 618 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 619 | dependencies: 620 | shebang-regex "^3.0.0" 621 | 622 | shebang-regex@^3.0.0: 623 | version "3.0.0" 624 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 625 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 626 | 627 | signal-exit@^4.0.1: 628 | version "4.1.0" 629 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" 630 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 631 | 632 | source-map-js@^1.0.1: 633 | version "1.2.1" 634 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" 635 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 636 | 637 | "string-width-cjs@npm:string-width@^4.2.0": 638 | version "4.2.3" 639 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 640 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 641 | dependencies: 642 | emoji-regex "^8.0.0" 643 | is-fullwidth-code-point "^3.0.0" 644 | strip-ansi "^6.0.1" 645 | 646 | string-width@^4.1.0: 647 | version "4.2.3" 648 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 649 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 650 | dependencies: 651 | emoji-regex "^8.0.0" 652 | is-fullwidth-code-point "^3.0.0" 653 | strip-ansi "^6.0.1" 654 | 655 | string-width@^5.0.1, string-width@^5.1.2: 656 | version "5.1.2" 657 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 658 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 659 | dependencies: 660 | eastasianwidth "^0.2.0" 661 | emoji-regex "^9.2.2" 662 | strip-ansi "^7.0.1" 663 | 664 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 665 | version "6.0.1" 666 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 667 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 668 | dependencies: 669 | ansi-regex "^5.0.1" 670 | 671 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 672 | version "6.0.1" 673 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 674 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 675 | dependencies: 676 | ansi-regex "^5.0.1" 677 | 678 | strip-ansi@^7.0.1: 679 | version "7.1.2" 680 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" 681 | integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== 682 | dependencies: 683 | ansi-regex "^6.0.1" 684 | 685 | symbol-tree@^3.2.4: 686 | version "3.2.4" 687 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 688 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 689 | 690 | tough-cookie@^4.1.3: 691 | version "4.1.4" 692 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" 693 | integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== 694 | dependencies: 695 | psl "^1.1.33" 696 | punycode "^2.1.1" 697 | universalify "^0.2.0" 698 | url-parse "^1.5.3" 699 | 700 | tr46@^5.1.0: 701 | version "5.1.1" 702 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" 703 | integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== 704 | dependencies: 705 | punycode "^2.3.1" 706 | 707 | universalify@^0.2.0: 708 | version "0.2.0" 709 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" 710 | integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== 711 | 712 | url-parse@^1.5.3: 713 | version "1.5.10" 714 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" 715 | integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== 716 | dependencies: 717 | querystringify "^2.1.1" 718 | requires-port "^1.0.0" 719 | 720 | w3c-xmlserializer@^5.0.0: 721 | version "5.0.0" 722 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" 723 | integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== 724 | dependencies: 725 | xml-name-validator "^5.0.0" 726 | 727 | webidl-conversions@^7.0.0: 728 | version "7.0.0" 729 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 730 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 731 | 732 | whatwg-encoding@^3.1.1: 733 | version "3.1.1" 734 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" 735 | integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== 736 | dependencies: 737 | iconv-lite "0.6.3" 738 | 739 | whatwg-mimetype@^4.0.0: 740 | version "4.0.0" 741 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" 742 | integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== 743 | 744 | whatwg-url@^14.0.0: 745 | version "14.2.0" 746 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" 747 | integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== 748 | dependencies: 749 | tr46 "^5.1.0" 750 | webidl-conversions "^7.0.0" 751 | 752 | which@^2.0.1: 753 | version "2.0.2" 754 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 755 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 756 | dependencies: 757 | isexe "^2.0.0" 758 | 759 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 760 | version "7.0.0" 761 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 762 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 763 | dependencies: 764 | ansi-styles "^4.0.0" 765 | string-width "^4.1.0" 766 | strip-ansi "^6.0.0" 767 | 768 | wrap-ansi@^8.1.0: 769 | version "8.1.0" 770 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 771 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 772 | dependencies: 773 | ansi-styles "^6.1.0" 774 | string-width "^5.0.1" 775 | strip-ansi "^7.0.1" 776 | 777 | ws@^8.16.0: 778 | version "8.18.3" 779 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" 780 | integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== 781 | 782 | xml-name-validator@^5.0.0: 783 | version "5.0.0" 784 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" 785 | integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== 786 | 787 | xmlchars@^2.2.0: 788 | version "2.2.0" 789 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" 790 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 791 | --------------------------------------------------------------------------------