├── .changeset ├── README.md ├── config.json ├── cuddly-monkeys-marry.md ├── six-fishes-design.md ├── six-peas-smile.md ├── spotty-eggs-sneeze.md └── strong-balloons-tan.md ├── .github └── workflows │ └── main.yml ├── .gitignore ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── binary │ ├── huh.dll │ ├── huh.h │ └── huh.so ├── fields.ts ├── index.ts ├── linker.ts ├── lip.wasm ├── lipgloss.ts └── wasm_exec.js └── tsconfig.json /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "restricted", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.changeset/cuddly-monkeys-marry.md: -------------------------------------------------------------------------------- 1 | --- 2 | "charsm": minor 3 | --- 4 | 5 | added huh forms 6 | -------------------------------------------------------------------------------- /.changeset/six-fishes-design.md: -------------------------------------------------------------------------------- 1 | --- 2 | "charsm": minor 3 | --- 4 | 5 | first publish 6 | -------------------------------------------------------------------------------- /.changeset/six-peas-smile.md: -------------------------------------------------------------------------------- 1 | --- 2 | "charsm": minor 3 | --- 4 | 5 | added glamour markdown renderer under lipgloss(remove in the future to be standalone) 6 | -------------------------------------------------------------------------------- /.changeset/spotty-eggs-sneeze.md: -------------------------------------------------------------------------------- 1 | --- 2 | "charsm": patch 3 | --- 4 | 5 | return markdown don't print internally in wasm 6 | -------------------------------------------------------------------------------- /.changeset/strong-balloons-tan.md: -------------------------------------------------------------------------------- 1 | --- 2 | "charsm": minor 3 | --- 4 | 5 | added adaptive colors and a simple list 6 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: pnpm/action-setup@v2 14 | with: 15 | version: 9 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: '20.15.0' 19 | cache: "pnpm" 20 | - run: pnpm install --frozen-lockfile 21 | - run: pnpm run lint && pnpm run build 22 | 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | example 4 | copywasm.bat 5 | d.md 6 | 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | # Charsm 7 | 8 | Charsm is a port of the gorgeous [Lipgloss](https://github.com/charmbracelet/lipgloss) library from Charm CLI, part of their impressive suite of CLI tools. Definitely check out Charm’s collection of [tools](https://charm.sh/); they’re fantastic. 9 | 10 | I’m a huge fan of CLI tools and have been building a lot of them lately. Naturally, I want my CLIs to look amazing, which is exactly what Charm CLI tools achieve. Not wanting to Go without that same polish in JavaScript, I created Charsm! For details on how I ported Lipgloss using WebAssembly, see the **porting lipgloss with wasm** section below. 11 | 12 | If you’re looking to build beautiful TUIs, this library is for you! 13 | 14 | ![temp placeholder](https://raw.githubusercontent.com/SfundoMhlungu/Assets-for-Software-Design-Documents/refs/heads/main/377967919-99c5c015-551b-4897-8cd1-bcaafa0aad5a.png) 15 | 16 | 17 | 18 | 19 | - [Charsm](#charsm) 20 | * [Installation](#installation) 21 | * [Getting Started](#getting-started) 22 | + [Initialization](#initialization) 23 | + [Creating Styles](#creating-styles) 24 | + [Style Options](#style-options) 25 | + [Padding and Margins](#padding-and-margins) 26 | + [Simple Example](#simple-example) 27 | * [Layout](#layout) 28 | * [Creating Tables](#creating-tables) 29 | * [Render Markdown](#render-markdown) 30 | * [Porting Lipgloss with WASM](#porting-lipgloss-with-wasm) 31 | * [Plan](#plan) 32 | * [Contribution](#contribution) 33 | * [Notes on Building an Executable](#notes-on-building-an-executable) 34 | * [Documentation: Bundling the Node Application with `charsm` WASM File](#documentation-bundling-the-node-application-with-charsm-wasm-file) 35 | + [Step 1: Accessing the WASM File in `charsm`](#step-1-accessing-the-wasm-file-in-charsm) 36 | + [Step 2: Bundling with `pkg`](#step-2-bundling-with-pkg) 37 | + [Step 3: Bundling with `nexe`](#step-3-bundling-with-nexe) 38 | + [Step 4: Bundling with `electron-builder` (For Electron Apps)](#step-4-bundling-with-electron-builder-for-electron-apps) 39 | + [Conclusion](#conclusion) 40 | 41 | 42 | 43 | 44 | 45 | ## Installation 46 | 47 | Install from npm with your favorite package manager: 48 | 49 | ```bash 50 | pnpm add charsm 51 | ``` 52 | ## Update v0.2.0 53 | 54 | added huh [forms](https://github.com/SfundoMhlungu/huh-shared-lib) 55 | 56 | Tested on Node.js v20.15.0 and v18.20.4 both linux and windows 57 | 58 | original charmcli huh [repo](https://github.com/charmbracelet/huh) 59 | 60 | ## Getting Started 61 | 62 | ### Initialization 63 | 64 | ```js 65 | import {initLip, Lipgloss} from "charsm" 66 | 67 | (async function() { 68 | const isInit = await initLip(); // returns false if WASM fails to load, otherwise true 69 | 70 | if (!isInit) return; // handle failure case 71 | })(); 72 | ``` 73 | 74 | Once WASM is loaded, you can create a `Lipgloss` instance: 75 | 76 | ```js 77 | (async function() { 78 | const lip = new Lipgloss(); 79 | })(); 80 | ``` 81 | 82 | ### Creating Styles 83 | 84 | At its core, Charsm lets you define styles similar to CSS, which can then be applied to text. 85 | 86 | ```js 87 | (async function() { 88 | // Define a style 89 | lip.createStyle({ 90 | id: "primary", 91 | canvasColor: { color: "#7D56F4" }, 92 | border: { type: "rounded", background: "#0056b3", sides: [true] }, 93 | padding: [6, 8, 6, 8], 94 | margin: [0, 0, 8, 0], 95 | bold: true, 96 | width: 10, 97 | height: 12, 98 | }); 99 | 100 | // Apply the style 101 | const result = lip.apply({ value: "🔥🦾🍕" }); 102 | console.log(result); // Output styled result 103 | 104 | // Apply a specific style by ID 105 | const custom = lip.apply({ value: "🔥🦾🍕", id: "primary" }); 106 | console.log(custom); 107 | })(); 108 | ``` 109 | 110 | ### Style Options 111 | 112 | Here’s an overview of the options available for creating styles: 113 | 114 | ```js 115 | type LipglossPos = "bottom" | "top" | "left" | "right" | "center"; 116 | type BorderType = "rounded" | "block" | "thick" | "double"; 117 | 118 | interface Style { 119 | id: string; 120 | canvasColor?: { color?: string, background?: string }; 121 | border?: { type: BorderType, foreground?: string, background?: string, sides: Array }; 122 | padding?: Array; 123 | margin: Array; 124 | bold?: boolean; 125 | alignV?: LipglossPos; 126 | alignH?: LipglossPos; // buggy don't work 127 | width?: number; 128 | height?: number; 129 | maxWidth?: number; 130 | maxHeight?: number; 131 | } 132 | ``` 133 | alignV works! 134 | 135 | > **Note:** For horizontal alignment(alignH), use padding and margins. 136 | 137 | ### Padding and Margins 138 | 139 | - One value applies to all sides: `[1]` 140 | - Two values apply to vertical and horizontal sides: `[1, 2]` 141 | - Four values apply to top, right, bottom, and left: `[1, 2, 3, 4]` 142 | 143 | ### Simple Example 144 | 145 | ```js 146 | lip.createStyle({ 147 | id: "primary", 148 | canvasColor: { color: "#7D56F4" }, 149 | border: { type: "rounded", background: "#0056b3", sides: [true] }, 150 | padding: [6, 8, 6, 8], 151 | margin: [0, 2, 8, 2], 152 | bold: true, 153 | align: 'center', 154 | width: 10, 155 | height: 12, 156 | });; 157 | 158 | lip.createStyle({ 159 | id: "secondary", 160 | canvasColor: {color: "#7D56F4" }, 161 | border: { type: "rounded", background: "#0056b3", sides: [true, false] }, 162 | padding: [6, 8, 6, 8], 163 | margin: [0, 0, 8, 1], 164 | bold: true, 165 | // alignH: "right", 166 | 167 | alignV: "bottom", 168 | width: 10, 169 | height: 12, 170 | 171 | }); 172 | 173 | 174 | const a = lip.apply({ value: "Charsmmm", id: "secondary" }); 175 | const b = lip.apply({ value: "🔥🦾🍕", id: "primary" }); 176 | const c = lip.apply({ value: 'Charsmmm', id: "secondary" }); 177 | ``` 178 | 179 | ## colors - for both color, background and border 180 | 181 | 1. completeAdaptiveColor 182 | 183 | ```js 184 | lip.createStyle({ 185 | id: "primary", 186 | canvasColor: {color: "#7D56F4", background:{completeAdaptiveColor: { Light:{TrueColor: "#d7ffae", ANSI256: "193", ANSI: "11"}, Dark: {TrueColor: "#d75fee", ANSI256: "163", ANSI: "5"}}}}, 187 | 188 | 189 | }); 190 | 191 | ``` 192 | 193 | 2. Adaptive Color 194 | 195 | 196 | ```js 197 | const highlight = { Light: "#874BFD", Dark: "#7D56F4" } 198 | canvasColor: { color:{ adaptiveColor: highlight } , background: "#FAFAFA" }, 199 | 200 | ``` 201 | 202 | 3. completColor 203 | 204 | ```js 205 | canvasColor: {color: {completeColor: {TrueColor: "#d7ffae", ANSI256: "193", ANSI: "11"}}} 206 | 207 | ``` 208 | 209 | ## Layout 210 | 211 | Charsm currently supports horizontal and vertical layouts. 212 | 213 | ```js 214 | const res = lip.join({ direction: "horizontal", elements: [a, b, c], position: "left" }); 215 | console.log(res); 216 | ``` 217 | 218 | > For details on `lipgloss.JoinVertical` and `lipgloss.JoinHorizontal`, refer to Charm’s lipgloss repo. 219 | 220 | ## Creating Tables 221 | 222 | Charsm can create tables easily. Here’s an example: 223 | 224 | ```js 225 | const rows = [ 226 | ["Chinese", "您好", "你好"], 227 | ["Japanese", "こんにちは", "やあ"], 228 | ["Arabic", "أهلين", "أهلا"], 229 | ["Russian", "Здравствуйте", "Привет"], 230 | ["Spanish", "Hola", "¿Qué tal?"] 231 | ]; 232 | 233 | const tableData = { headers: ["LANGUAGE", "FORMAL", "INFORMAL"], rows: rows }; 234 | 235 | const t = lip.newTable({ 236 | data: tableData, 237 | table: { border: "rounded", color: "99", width: 100 }, 238 | header: { color: "212", bold: true }, 239 | rows: { even: { color: "246" } } 240 | }); 241 | 242 | console.log(t); 243 | ``` 244 | 245 | ## Render Markdown 246 | 247 | use's [glamour](github.com/charmbracelet/glamour) from charm CLI underneath 248 | 249 | ```js 250 | 251 | 252 | const content = ` 253 | # Today’s Menu 254 | 255 | ## Appetizers 256 | 257 | | Name | Price | Notes | 258 | | --- | --- | --- | 259 | | Tsukemono | $2 | Just an appetizer | 260 | | Tomato Soup | $4 | Made with San Marzano tomatoes | 261 | | Okonomiyaki | $4 | Takes a few minutes to make | 262 | | Curry | $3 | We can add squash if you’d like | 263 | 264 | ## Seasonal Dishes 265 | 266 | | Name | Price | Notes | 267 | | --- | --- | --- | 268 | | Steamed bitter melon | $2 | Not so bitter | 269 | | Takoyaki | $3 | Fun to eat | 270 | | Winter squash | $3 | Today it's pumpkin | 271 | 272 | ## Desserts 273 | 274 | | Name | Price | Notes | 275 | | --- | --- | --- | 276 | | Dorayaki | $4 | Looks good on rabbits | 277 | | Banana Split | $5 | A classic | 278 | | Cream Puff | $3 | Pretty creamy! | 279 | 280 | All our dishes are made in-house by Karen, our chef. Most of our ingredients 281 | are from our garden or the fish market down the street. 282 | 283 | Some famous people that have eaten here lately: 284 | 285 | * [x] René Redzepi 286 | * [x] David Chang 287 | * [ ] Jiro Ono (maybe some day) 288 | 289 | Bon appétit! 290 | ` 291 | 292 | // technically not part of lip(lipgloss) 293 | console.log(lip.RenderMD(content, "tokyo-night")) 294 | 295 | 296 | ``` 297 | 298 | ## Porting Lipgloss with WASM 299 | 300 | The implementation here is a straightforward 1-to-1 port! In other words, for example `createStyle` is built up from a bunch of lipgloss functions with conditional checks. It’s verbose, kind of repetitive, and maybe even a bit annoying. 301 | 302 | The reason for this verbosity is to avoid using `reflect` for dynamic calls to lipgloss functions, `reflect` in Go is a form of metaprogramming that's super expensive. 303 | 304 | Here's an example of `Join`: 305 | 306 | ```go 307 | func (l *lipWrapper) Join(this js.Value, args []js.Value) interface{} { 308 | direction := args[0].Get("direction").String() 309 | 310 | var elements []string 311 | e := args[0].Get("elements") 312 | for i := 0; i < e.Length(); i++ { 313 | elements = append(elements, e.Index(i).String()) 314 | } 315 | 316 | if CheckTruthy(args, "pc") { 317 | if direction == "vertical" { 318 | return lipgloss.JoinVertical(lipgloss.Position(args[0].Get("pc").Int()), elements...) 319 | } else { 320 | return lipgloss.JoinHorizontal(lipgloss.Position(args[0].Get("pc").Int()), elements...) 321 | } 322 | } 323 | 324 | if CheckTruthy(args, "position") { 325 | pos := args[0].Get("position").String() 326 | var apos lipgloss.Position 327 | 328 | if pos == "bottom" { 329 | apos = lipgloss.Bottom 330 | } else if pos == "top" { 331 | apos = lipgloss.Top 332 | } else if pos == "right" { 333 | apos = lipgloss.Right 334 | } else { 335 | apos = lipgloss.Left 336 | } 337 | 338 | if direction == "vertical" { 339 | return lipgloss.JoinVertical(apos, elements...) 340 | } else { 341 | return lipgloss.JoinHorizontal(apos, elements...) 342 | } 343 | } 344 | 345 | return "" 346 | } 347 | ``` 348 | 349 | That's why some features like adaptive colors aren’t implemented just yet—those will come later! 350 | 351 | 352 | ## Plan 353 | 354 | Next up, I’m planning to port Bubble Tea for interactive components! 355 | 356 | ## Contribution 357 | 358 | This project came up while I was building a CLI tool in JavaScript to monitor websites. I wanted it to look nice, and since I’ve been using lipgloss a lot in Go, I figured I'd port it. 359 | 360 | Meaning, yes, the Go code is all over the place! Here’s a look at `main` for context: 361 | 362 | ```go 363 | func main() { 364 | 365 | lip := &lipWrapper{} 366 | lip.styles = make(map[string]string) 367 | lip.styles2o = make(map[string]lipgloss.Style) 368 | 369 | // Export the `add` function to JavaScript 370 | // js.Global().Set("add", js.FuncOf(add)) 371 | // js.Global().Set("greet", js.FuncOf(greet)) 372 | // js.Global().Set("multiply", js.FuncOf(multiply)) 373 | // js.Global().Set("processUser", js.FuncOf(processUser)) 374 | // js.Global().Set("asyncAdd", js.FuncOf(asyncAdd)) 375 | // js.Global().Set("lipprint", js.FuncOf(printWithGloss)) 376 | // js.Global().Set("lipgloss", js.Func(lipgloss.NewStyle)) 377 | js.Global().Set("createStyle", js.FuncOf(lip.createStyle)) 378 | js.Global().Set("apply", js.FuncOf(lip.apply)) 379 | // js.Global().Set("canvasColor", js.FuncOf(lip.canvasColor)) 380 | // js.Global().Set("padding", js.FuncOf(lip.canvasColor)) 381 | // js.Global().Set("render", js.FuncOf(lip.render)) 382 | // js.Global().Set("margin", js.FuncOf(lip.margin)) 383 | // js.Global().Set("place", js.FuncOf(lip.place)) 384 | // js.Global().Set("size", js.FuncOf(lip.size)) 385 | // js.Global().Set("JoinHorizontal", js.FuncOf(lip.JoinHorizontal)) 386 | // js.Global().Set("JoinVertical", js.FuncOf(lip.JoinVertical)) 387 | // js.Global().Set("border", js.FuncOf(lip.border)) 388 | // js.Global().Set("width", js.FuncOf(lip.width)) 389 | // js.Global().Set("height", js.FuncOf(lip.height)) 390 | js.Global().Set("newTable", js.FuncOf(lip.newTable)) 391 | // js.Global().Set("tableStyle", js.FuncOf(lip.tableStyle)) 392 | js.Global().Set("join", js.FuncOf(lip.Join)) 393 | 394 | // Example user input 395 | // input := "lipgloss.NewStyle().Foreground(lipgloss.Color(fg)).Background(lipgloss.Color(bg))" 396 | 397 | // // Assuming user provides these values 398 | // fg := "#FF0000" // red 399 | // bg := "#00FF00" // green 400 | 401 | // // style := buildStyleFromInput(input, fg, bg) 402 | 403 | // // Print styled text to see the result 404 | // styledText := style.Render("Hello, Styled World!") 405 | // fmt.Println(styledText) 406 | // // Keep the program running (WebAssembly runs until manually stopped) 407 | select {} // loop 408 | } 409 | ``` 410 | yeah really bad and that's just main. 411 | 412 | I’ve got files everywhere, so I’ll need to clean it up once I find the time then I'll post the Golang code. 413 | 414 | ## Notes on Building an Executable 415 | 416 | To turn your Node application into an executable, make sure your build tool copies and bundles the WASM file in `charsm`’s `dist` folder. 417 | 418 | Since it’s read with `fs` (not imported), your bundler needs to know about this file: 419 | 420 | ```javascript 421 | const wasmPath = path.resolve(dir, './lip.wasm'); 422 | const wasmfile = fs.readFileSync(wasmPath); 423 | ``` 424 | 425 | **Disclaimer ⚠️:** This following instructions are generated by GPT, so I haven’t fully tested the bundling process yet, but I do use `pkg` to create an exe. 426 | 427 | ## Documentation: Bundling the Node Application with `charsm` WASM File 428 | 429 | This guide covers how to bundle a Node.js application that uses the `charsm` library and its `lip.wasm` file into a standalone executable. We'll review setup for common tools like `pkg`, `nexe`, and `electron-builder`. 430 | 431 | ### Step 1: Accessing the WASM File in `charsm` 432 | 433 | To bundle, you’ll need a dynamic reference to `lip.wasm` since its path will change in the executable. 434 | 435 | 1. **Development Path:** Typically, `node_modules/charsm/dist/lip.wasm`. 436 | 2. **Bundled Path:** Dynamically reference the WASM file at runtime. 437 | 438 | 439 | ### Step 2: Bundling with `pkg` 440 | 441 | To include `lip.wasm`: 442 | 443 | 1. **Update `package.json`:** 444 | 445 | ```json 446 | { 447 | "pkg": { 448 | "assets": [ 449 | "node_modules/charsm/dist/lip.wasm" 450 | ] 451 | } 452 | } 453 | ``` 454 | 455 | 2. **Bundle the Application:** 456 | 457 | ```bash 458 | pkg . --assets node_modules/charsm/dist/lip.wasm 459 | ``` 460 | 461 | ### Step 3: Bundling with `nexe` 462 | 463 | 1. **Run `nexe` with Resource Flag:** 464 | 465 | ```bash 466 | nexe -i index.js -o myApp.exe --resource node_modules/charsm/dist/lip.wasm 467 | ``` 468 | 469 | 2. **Update Code for `process.cwd()`:** 470 | 471 | ```javascript 472 | const wasmPath = path.join(process.cwd(), 'node_modules/charsm/dist/lip.wasm'); 473 | ``` 474 | 475 | ### Step 4: Bundling with `electron-builder` (For Electron Apps) 476 | 477 | 1. **Modify `electron-builder` Configuration:** 478 | 479 | ```json 480 | { 481 | "files": [ 482 | "dist/**/*", 483 | "node_modules/charsm/dist/lip.wasm" 484 | ] 485 | } 486 | ``` 487 | 488 | 2. **Reference with `__dirname`:** 489 | 490 | ```javascript 491 | const wasmPath = path.join(__dirname, 'node_modules/charsm/dist/lip.wasm'); 492 | ``` 493 | 494 | ### Conclusion 495 | 496 | Each bundling tool has a different configuration to include the `lip.wasm` file. Following these steps will ensure `charsm`’s WASM file is properly included in your executable. 497 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "charsm", 3 | "version": "0.2.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "module": "dist/index.mjs", 7 | "types": "dist/index.d.ts", 8 | "scripts": { 9 | "build": "tsup src/index.ts --format cjs,esm --dts && node -e \"require('fs').copyFileSync('src/lip.wasm', 'dist/lip.wasm')\" && node -e \"require('fs').cpSync('src/binary', 'dist/binary', { recursive: true })\"", 10 | "lint": "tsc" 11 | }, 12 | "keywords": [ 13 | "Tui", 14 | "Terminal UI'S", 15 | "CLI", 16 | "Charm CLI" 17 | ], 18 | "author": "Sifundo Mhlungu ", 19 | "license": "ISC", 20 | "files": [ 21 | "dist" 22 | ], 23 | "publishConfig": { 24 | "registry": "https://registry.npmjs.org/" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "https://github.com/SfundoMhlungu/charsm.git" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/SfundoMhlungu/charsm/issues" 32 | }, 33 | "homepage": "https://github.com/SfundoMhlungu/charsm#README", 34 | "devDependencies": { 35 | "@changesets/cli": "^2.27.9", 36 | "@types/ffi-napi": "^4.0.10", 37 | "@types/node": "^22.8.4", 38 | "tsup": "^8.3.5", 39 | "typescript": "^5.6.3" 40 | }, 41 | "dependencies": { 42 | "@makeomatic/ffi-napi": "^4.2.0", 43 | "@makeomatic/ref-napi": "^3.0.6", 44 | "ffi-rs": "^1.2.2", 45 | "ref-struct-di": "^1.1.1" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@makeomatic/ffi-napi': 12 | specifier: ^4.2.0 13 | version: 4.2.0 14 | '@makeomatic/ref-napi': 15 | specifier: ^3.0.6 16 | version: 3.0.6 17 | ffi-rs: 18 | specifier: ^1.2.2 19 | version: 1.2.2 20 | ref-struct-di: 21 | specifier: ^1.1.1 22 | version: 1.1.1 23 | devDependencies: 24 | '@changesets/cli': 25 | specifier: ^2.27.9 26 | version: 2.27.9 27 | '@types/ffi-napi': 28 | specifier: ^4.0.10 29 | version: 4.0.10 30 | '@types/node': 31 | specifier: ^22.8.4 32 | version: 22.8.4 33 | tsup: 34 | specifier: ^8.3.5 35 | version: 8.3.5(typescript@5.6.3) 36 | typescript: 37 | specifier: ^5.6.3 38 | version: 5.6.3 39 | 40 | packages: 41 | 42 | '@babel/runtime@7.26.0': 43 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 44 | engines: {node: '>=6.9.0'} 45 | 46 | '@changesets/apply-release-plan@7.0.5': 47 | resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} 48 | 49 | '@changesets/assemble-release-plan@6.0.4': 50 | resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} 51 | 52 | '@changesets/changelog-git@0.2.0': 53 | resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} 54 | 55 | '@changesets/cli@2.27.9': 56 | resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} 57 | hasBin: true 58 | 59 | '@changesets/config@3.0.3': 60 | resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} 61 | 62 | '@changesets/errors@0.2.0': 63 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 64 | 65 | '@changesets/get-dependents-graph@2.1.2': 66 | resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} 67 | 68 | '@changesets/get-release-plan@4.0.4': 69 | resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} 70 | 71 | '@changesets/get-version-range-type@0.4.0': 72 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 73 | 74 | '@changesets/git@3.0.1': 75 | resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} 76 | 77 | '@changesets/logger@0.1.1': 78 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 79 | 80 | '@changesets/parse@0.4.0': 81 | resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} 82 | 83 | '@changesets/pre@2.0.1': 84 | resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} 85 | 86 | '@changesets/read@0.6.1': 87 | resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} 88 | 89 | '@changesets/should-skip-package@0.1.1': 90 | resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} 91 | 92 | '@changesets/types@4.1.0': 93 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 94 | 95 | '@changesets/types@6.0.0': 96 | resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} 97 | 98 | '@changesets/write@0.3.2': 99 | resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} 100 | 101 | '@esbuild/aix-ppc64@0.24.0': 102 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 103 | engines: {node: '>=18'} 104 | cpu: [ppc64] 105 | os: [aix] 106 | 107 | '@esbuild/android-arm64@0.24.0': 108 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 109 | engines: {node: '>=18'} 110 | cpu: [arm64] 111 | os: [android] 112 | 113 | '@esbuild/android-arm@0.24.0': 114 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 115 | engines: {node: '>=18'} 116 | cpu: [arm] 117 | os: [android] 118 | 119 | '@esbuild/android-x64@0.24.0': 120 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 121 | engines: {node: '>=18'} 122 | cpu: [x64] 123 | os: [android] 124 | 125 | '@esbuild/darwin-arm64@0.24.0': 126 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 127 | engines: {node: '>=18'} 128 | cpu: [arm64] 129 | os: [darwin] 130 | 131 | '@esbuild/darwin-x64@0.24.0': 132 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 133 | engines: {node: '>=18'} 134 | cpu: [x64] 135 | os: [darwin] 136 | 137 | '@esbuild/freebsd-arm64@0.24.0': 138 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 139 | engines: {node: '>=18'} 140 | cpu: [arm64] 141 | os: [freebsd] 142 | 143 | '@esbuild/freebsd-x64@0.24.0': 144 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 145 | engines: {node: '>=18'} 146 | cpu: [x64] 147 | os: [freebsd] 148 | 149 | '@esbuild/linux-arm64@0.24.0': 150 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 151 | engines: {node: '>=18'} 152 | cpu: [arm64] 153 | os: [linux] 154 | 155 | '@esbuild/linux-arm@0.24.0': 156 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 157 | engines: {node: '>=18'} 158 | cpu: [arm] 159 | os: [linux] 160 | 161 | '@esbuild/linux-ia32@0.24.0': 162 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 163 | engines: {node: '>=18'} 164 | cpu: [ia32] 165 | os: [linux] 166 | 167 | '@esbuild/linux-loong64@0.24.0': 168 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 169 | engines: {node: '>=18'} 170 | cpu: [loong64] 171 | os: [linux] 172 | 173 | '@esbuild/linux-mips64el@0.24.0': 174 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 175 | engines: {node: '>=18'} 176 | cpu: [mips64el] 177 | os: [linux] 178 | 179 | '@esbuild/linux-ppc64@0.24.0': 180 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 181 | engines: {node: '>=18'} 182 | cpu: [ppc64] 183 | os: [linux] 184 | 185 | '@esbuild/linux-riscv64@0.24.0': 186 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 187 | engines: {node: '>=18'} 188 | cpu: [riscv64] 189 | os: [linux] 190 | 191 | '@esbuild/linux-s390x@0.24.0': 192 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 193 | engines: {node: '>=18'} 194 | cpu: [s390x] 195 | os: [linux] 196 | 197 | '@esbuild/linux-x64@0.24.0': 198 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 199 | engines: {node: '>=18'} 200 | cpu: [x64] 201 | os: [linux] 202 | 203 | '@esbuild/netbsd-x64@0.24.0': 204 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 205 | engines: {node: '>=18'} 206 | cpu: [x64] 207 | os: [netbsd] 208 | 209 | '@esbuild/openbsd-arm64@0.24.0': 210 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 211 | engines: {node: '>=18'} 212 | cpu: [arm64] 213 | os: [openbsd] 214 | 215 | '@esbuild/openbsd-x64@0.24.0': 216 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 217 | engines: {node: '>=18'} 218 | cpu: [x64] 219 | os: [openbsd] 220 | 221 | '@esbuild/sunos-x64@0.24.0': 222 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 223 | engines: {node: '>=18'} 224 | cpu: [x64] 225 | os: [sunos] 226 | 227 | '@esbuild/win32-arm64@0.24.0': 228 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 229 | engines: {node: '>=18'} 230 | cpu: [arm64] 231 | os: [win32] 232 | 233 | '@esbuild/win32-ia32@0.24.0': 234 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 235 | engines: {node: '>=18'} 236 | cpu: [ia32] 237 | os: [win32] 238 | 239 | '@esbuild/win32-x64@0.24.0': 240 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 241 | engines: {node: '>=18'} 242 | cpu: [x64] 243 | os: [win32] 244 | 245 | '@isaacs/cliui@8.0.2': 246 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 247 | engines: {node: '>=12'} 248 | 249 | '@jridgewell/gen-mapping@0.3.5': 250 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 251 | engines: {node: '>=6.0.0'} 252 | 253 | '@jridgewell/resolve-uri@3.1.2': 254 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 255 | engines: {node: '>=6.0.0'} 256 | 257 | '@jridgewell/set-array@1.2.1': 258 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 259 | engines: {node: '>=6.0.0'} 260 | 261 | '@jridgewell/sourcemap-codec@1.5.0': 262 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 263 | 264 | '@jridgewell/trace-mapping@0.3.25': 265 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 266 | 267 | '@makeomatic/ffi-napi@4.2.0': 268 | resolution: {integrity: sha512-f+kHcFZe65C6++JgdKgBFnlvESpLgfU0a4PsfnbaqQQTTcBPgRclT21ylRoVCktQr4ifXXTt6NLkn+mhq/CZ9A==} 269 | engines: {node: '>=18'} 270 | 271 | '@makeomatic/ref-napi@3.0.6': 272 | resolution: {integrity: sha512-PNAcp1M1kQPL6xYu16KCVM9oAAqGDRB4nEWgxTvYrxXpYiiit2ClomQI9umnJ7gMpG8vnaSFhFA+6XzPnWxSNQ==} 273 | engines: {node: '>= 10.0'} 274 | 275 | '@manypkg/find-root@1.1.0': 276 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 277 | 278 | '@manypkg/get-packages@1.1.3': 279 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 280 | 281 | '@nodelib/fs.scandir@2.1.5': 282 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 283 | engines: {node: '>= 8'} 284 | 285 | '@nodelib/fs.stat@2.0.5': 286 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 287 | engines: {node: '>= 8'} 288 | 289 | '@nodelib/fs.walk@1.2.8': 290 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 291 | engines: {node: '>= 8'} 292 | 293 | '@pkgjs/parseargs@0.11.0': 294 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 295 | engines: {node: '>=14'} 296 | 297 | '@rollup/rollup-android-arm-eabi@4.24.3': 298 | resolution: {integrity: sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==} 299 | cpu: [arm] 300 | os: [android] 301 | 302 | '@rollup/rollup-android-arm64@4.24.3': 303 | resolution: {integrity: sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==} 304 | cpu: [arm64] 305 | os: [android] 306 | 307 | '@rollup/rollup-darwin-arm64@4.24.3': 308 | resolution: {integrity: sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==} 309 | cpu: [arm64] 310 | os: [darwin] 311 | 312 | '@rollup/rollup-darwin-x64@4.24.3': 313 | resolution: {integrity: sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==} 314 | cpu: [x64] 315 | os: [darwin] 316 | 317 | '@rollup/rollup-freebsd-arm64@4.24.3': 318 | resolution: {integrity: sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==} 319 | cpu: [arm64] 320 | os: [freebsd] 321 | 322 | '@rollup/rollup-freebsd-x64@4.24.3': 323 | resolution: {integrity: sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==} 324 | cpu: [x64] 325 | os: [freebsd] 326 | 327 | '@rollup/rollup-linux-arm-gnueabihf@4.24.3': 328 | resolution: {integrity: sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==} 329 | cpu: [arm] 330 | os: [linux] 331 | 332 | '@rollup/rollup-linux-arm-musleabihf@4.24.3': 333 | resolution: {integrity: sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==} 334 | cpu: [arm] 335 | os: [linux] 336 | 337 | '@rollup/rollup-linux-arm64-gnu@4.24.3': 338 | resolution: {integrity: sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==} 339 | cpu: [arm64] 340 | os: [linux] 341 | 342 | '@rollup/rollup-linux-arm64-musl@4.24.3': 343 | resolution: {integrity: sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==} 344 | cpu: [arm64] 345 | os: [linux] 346 | 347 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.3': 348 | resolution: {integrity: sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==} 349 | cpu: [ppc64] 350 | os: [linux] 351 | 352 | '@rollup/rollup-linux-riscv64-gnu@4.24.3': 353 | resolution: {integrity: sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==} 354 | cpu: [riscv64] 355 | os: [linux] 356 | 357 | '@rollup/rollup-linux-s390x-gnu@4.24.3': 358 | resolution: {integrity: sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==} 359 | cpu: [s390x] 360 | os: [linux] 361 | 362 | '@rollup/rollup-linux-x64-gnu@4.24.3': 363 | resolution: {integrity: sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==} 364 | cpu: [x64] 365 | os: [linux] 366 | 367 | '@rollup/rollup-linux-x64-musl@4.24.3': 368 | resolution: {integrity: sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==} 369 | cpu: [x64] 370 | os: [linux] 371 | 372 | '@rollup/rollup-win32-arm64-msvc@4.24.3': 373 | resolution: {integrity: sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==} 374 | cpu: [arm64] 375 | os: [win32] 376 | 377 | '@rollup/rollup-win32-ia32-msvc@4.24.3': 378 | resolution: {integrity: sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==} 379 | cpu: [ia32] 380 | os: [win32] 381 | 382 | '@rollup/rollup-win32-x64-msvc@4.24.3': 383 | resolution: {integrity: sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==} 384 | cpu: [x64] 385 | os: [win32] 386 | 387 | '@types/estree@1.0.6': 388 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 389 | 390 | '@types/ffi-napi@4.0.10': 391 | resolution: {integrity: sha512-Q6TimLDxdg+Obp4W9tgzIhSA25THD6AmR8eM+ZB7bbU96xnkpd7PRXwG4az2rKpreuF90IPr/LlQtetmIfQL2g==} 392 | 393 | '@types/node@12.20.55': 394 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 395 | 396 | '@types/node@22.8.4': 397 | resolution: {integrity: sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==} 398 | 399 | '@types/ref-napi@3.0.12': 400 | resolution: {integrity: sha512-UZPKghRaLlWx2lPAphpdtYe62TbGBaPeqUM6gF1vI6FPRIu/Tff/WMAzpJRFU3jJIiD8HiXpVt2RjcFHtA6YRg==} 401 | 402 | '@types/ref-struct-di@1.1.12': 403 | resolution: {integrity: sha512-R2RNkGIROGoJTbXYTXrsXybnsQD4iAy26ih/G6HCeCB9luWFQKkr537XGz0uGJ1kH8y8RMkdbQmD/wBulrOPHw==} 404 | 405 | '@yuuang/ffi-rs-darwin-arm64@1.2.2': 406 | resolution: {integrity: sha512-nJRjpy+hn7sISkPpzpeLpFOARUwBQgNN7wcTiuOCZZEEz0SVsMGrMws4vRGWcCOAMKQFIjOmguiWQmoZeXoByw==} 407 | engines: {node: '>= 12'} 408 | cpu: [arm64] 409 | os: [darwin] 410 | 411 | '@yuuang/ffi-rs-darwin-x64@1.2.2': 412 | resolution: {integrity: sha512-RbYfaW5OqDEWzDH2w6yWHJhN+Q0dv4gkasEnQE5NJqiAmrU9Bo8UkBn3wWBqFmcbNJeDrUVGUHUpO6K+gFtzow==} 413 | engines: {node: '>= 12'} 414 | cpu: [x64] 415 | os: [darwin] 416 | 417 | '@yuuang/ffi-rs-linux-arm-gnueabihf@1.2.2': 418 | resolution: {integrity: sha512-4ihnhfA+hfMSSxbMW8UvTlmVTi6Sw1D2Le50yG88EVkavWIxaCIIunwmoF25Ar+TOP94tiO+yETfnwvsuAVTLw==} 419 | engines: {node: '>= 12'} 420 | cpu: [arm] 421 | os: [linux] 422 | 423 | '@yuuang/ffi-rs-linux-arm64-gnu@1.2.2': 424 | resolution: {integrity: sha512-TW0GC6RlmkCNECoxaWhR6IROeju9m6j29/r1WvsUSzt2Wse6nJOcxKMC1GasC+/5PHypwmFlDeJMEzyo8eew1g==} 425 | engines: {node: '>= 12'} 426 | cpu: [arm64] 427 | os: [linux] 428 | 429 | '@yuuang/ffi-rs-linux-arm64-musl@1.2.2': 430 | resolution: {integrity: sha512-e7/9+x/818PkVuCe14M60CH/764GNTjeIZn2zq97659BhCY+6/vaCr/yJ8oKUEQX/g3iXmCnvRaZKDhFJeewfw==} 431 | engines: {node: '>= 12'} 432 | cpu: [arm64] 433 | os: [linux] 434 | 435 | '@yuuang/ffi-rs-linux-x64-gnu@1.2.2': 436 | resolution: {integrity: sha512-5GYIxY0lyocYEfqOxaaqaIb6EEyGhTZhL4MkXu+0SXuN/dYlr7Ylq396eD8SXOVxeoQQ6BWXSLcBclBgHeSoJA==} 437 | engines: {node: '>= 12'} 438 | cpu: [x64] 439 | os: [linux] 440 | 441 | '@yuuang/ffi-rs-linux-x64-musl@1.2.2': 442 | resolution: {integrity: sha512-qbnpgyYmlZNvge33uKhJpxVJp6osQOM9ePgdSiANtgcG8cqA1Bnhlvcce+ra3Icgjl08WK9VCh++H741+Gy95A==} 443 | engines: {node: '>= 12'} 444 | cpu: [x64] 445 | os: [linux] 446 | 447 | '@yuuang/ffi-rs-win32-arm64-msvc@1.2.2': 448 | resolution: {integrity: sha512-wTkogCynmWj2U7dcOZf12dSOF2tB4EC9e9MJetCmEG5WUhHNc+UYHu3ZG9A06BeMM4Oz9sCZWvZv77XtH5WlUw==} 449 | engines: {node: '>= 12'} 450 | cpu: [arm64] 451 | os: [win32] 452 | 453 | '@yuuang/ffi-rs-win32-ia32-msvc@1.2.2': 454 | resolution: {integrity: sha512-YQ/7mzrVblKYcenijD1PwISXhJBymN06X7/akkTXBA4spHYV8Xotewb3W/SjOJgA7Aoh87+0u4auNGbSGriUyg==} 455 | engines: {node: '>= 12'} 456 | cpu: [x64, ia32] 457 | os: [win32] 458 | 459 | '@yuuang/ffi-rs-win32-x64-msvc@1.2.2': 460 | resolution: {integrity: sha512-9mnZBbWKwUhCbYVTUFkGbXCB9rnjwumGCmaPadMZTaSEgyz0ncHO9CeiV3sLm+TcN5aeSVHkw3/1Yc9MuwwnRA==} 461 | engines: {node: '>= 12'} 462 | cpu: [x64] 463 | os: [win32] 464 | 465 | ansi-colors@4.1.3: 466 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 467 | engines: {node: '>=6'} 468 | 469 | ansi-regex@5.0.1: 470 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 471 | engines: {node: '>=8'} 472 | 473 | ansi-regex@6.1.0: 474 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 475 | engines: {node: '>=12'} 476 | 477 | ansi-styles@4.3.0: 478 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 479 | engines: {node: '>=8'} 480 | 481 | ansi-styles@6.2.1: 482 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 483 | engines: {node: '>=12'} 484 | 485 | any-promise@1.3.0: 486 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 487 | 488 | argparse@1.0.10: 489 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 490 | 491 | array-union@2.1.0: 492 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 493 | engines: {node: '>=8'} 494 | 495 | balanced-match@1.0.2: 496 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 497 | 498 | better-path-resolve@1.0.0: 499 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 500 | engines: {node: '>=4'} 501 | 502 | brace-expansion@2.0.1: 503 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 504 | 505 | braces@3.0.3: 506 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 507 | engines: {node: '>=8'} 508 | 509 | bundle-require@5.0.0: 510 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} 511 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 512 | peerDependencies: 513 | esbuild: '>=0.18' 514 | 515 | cac@6.7.14: 516 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 517 | engines: {node: '>=8'} 518 | 519 | chardet@0.7.0: 520 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 521 | 522 | chokidar@4.0.1: 523 | resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} 524 | engines: {node: '>= 14.16.0'} 525 | 526 | ci-info@3.9.0: 527 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 528 | engines: {node: '>=8'} 529 | 530 | color-convert@2.0.1: 531 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 532 | engines: {node: '>=7.0.0'} 533 | 534 | color-name@1.1.4: 535 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 536 | 537 | commander@4.1.1: 538 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 539 | engines: {node: '>= 6'} 540 | 541 | consola@3.2.3: 542 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} 543 | engines: {node: ^14.18.0 || >=16.10.0} 544 | 545 | cross-spawn@5.1.0: 546 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 547 | 548 | cross-spawn@7.0.3: 549 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 550 | engines: {node: '>= 8'} 551 | 552 | debug@3.2.7: 553 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 554 | peerDependencies: 555 | supports-color: '*' 556 | peerDependenciesMeta: 557 | supports-color: 558 | optional: true 559 | 560 | debug@4.3.7: 561 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 562 | engines: {node: '>=6.0'} 563 | peerDependencies: 564 | supports-color: '*' 565 | peerDependenciesMeta: 566 | supports-color: 567 | optional: true 568 | 569 | detect-indent@6.1.0: 570 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 571 | engines: {node: '>=8'} 572 | 573 | dir-glob@3.0.1: 574 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 575 | engines: {node: '>=8'} 576 | 577 | eastasianwidth@0.2.0: 578 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 579 | 580 | emoji-regex@8.0.0: 581 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 582 | 583 | emoji-regex@9.2.2: 584 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 585 | 586 | enquirer@2.4.1: 587 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 588 | engines: {node: '>=8.6'} 589 | 590 | esbuild@0.24.0: 591 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 592 | engines: {node: '>=18'} 593 | hasBin: true 594 | 595 | esprima@4.0.1: 596 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 597 | engines: {node: '>=4'} 598 | hasBin: true 599 | 600 | extendable-error@0.1.7: 601 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 602 | 603 | external-editor@3.1.0: 604 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 605 | engines: {node: '>=4'} 606 | 607 | fast-glob@3.3.2: 608 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 609 | engines: {node: '>=8.6.0'} 610 | 611 | fastq@1.17.1: 612 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 613 | 614 | fdir@6.4.2: 615 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 616 | peerDependencies: 617 | picomatch: ^3 || ^4 618 | peerDependenciesMeta: 619 | picomatch: 620 | optional: true 621 | 622 | ffi-rs@1.2.2: 623 | resolution: {integrity: sha512-dHcFHbyjDwIj+n5i7yjolHE4DveIU153MYqDpaYt7ObNVwND8W5D/Pac7NApuo1OpT5RLJmWLEdFRNA3p2kpLQ==} 624 | 625 | fill-range@7.1.1: 626 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 627 | engines: {node: '>=8'} 628 | 629 | find-up@4.1.0: 630 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 631 | engines: {node: '>=8'} 632 | 633 | foreground-child@3.3.0: 634 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 635 | engines: {node: '>=14'} 636 | 637 | fs-extra@7.0.1: 638 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 639 | engines: {node: '>=6 <7 || >=8'} 640 | 641 | fs-extra@8.1.0: 642 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 643 | engines: {node: '>=6 <7 || >=8'} 644 | 645 | fsevents@2.3.3: 646 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 647 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 648 | os: [darwin] 649 | 650 | get-symbol-from-current-process-h@1.0.2: 651 | resolution: {integrity: sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==} 652 | 653 | get-uv-event-loop-napi-h@1.0.6: 654 | resolution: {integrity: sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==} 655 | 656 | glob-parent@5.1.2: 657 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 658 | engines: {node: '>= 6'} 659 | 660 | glob@10.4.5: 661 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 662 | hasBin: true 663 | 664 | globby@11.1.0: 665 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 666 | engines: {node: '>=10'} 667 | 668 | graceful-fs@4.2.11: 669 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 670 | 671 | human-id@1.0.2: 672 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} 673 | 674 | iconv-lite@0.4.24: 675 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 676 | engines: {node: '>=0.10.0'} 677 | 678 | ignore@5.3.2: 679 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 680 | engines: {node: '>= 4'} 681 | 682 | is-extglob@2.1.1: 683 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 684 | engines: {node: '>=0.10.0'} 685 | 686 | is-fullwidth-code-point@3.0.0: 687 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 688 | engines: {node: '>=8'} 689 | 690 | is-glob@4.0.3: 691 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 692 | engines: {node: '>=0.10.0'} 693 | 694 | is-number@7.0.0: 695 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 696 | engines: {node: '>=0.12.0'} 697 | 698 | is-subdir@1.2.0: 699 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 700 | engines: {node: '>=4'} 701 | 702 | is-windows@1.0.2: 703 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 704 | engines: {node: '>=0.10.0'} 705 | 706 | isexe@2.0.0: 707 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 708 | 709 | jackspeak@3.4.3: 710 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 711 | 712 | joycon@3.1.1: 713 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 714 | engines: {node: '>=10'} 715 | 716 | js-yaml@3.14.1: 717 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 718 | hasBin: true 719 | 720 | jsonfile@4.0.0: 721 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 722 | 723 | lilconfig@3.1.2: 724 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 725 | engines: {node: '>=14'} 726 | 727 | lines-and-columns@1.2.4: 728 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 729 | 730 | load-tsconfig@0.2.5: 731 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 732 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 733 | 734 | locate-path@5.0.0: 735 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 736 | engines: {node: '>=8'} 737 | 738 | lodash.sortby@4.7.0: 739 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 740 | 741 | lodash.startcase@4.4.0: 742 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 743 | 744 | lru-cache@10.4.3: 745 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 746 | 747 | lru-cache@4.1.5: 748 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 749 | 750 | merge2@1.4.1: 751 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 752 | engines: {node: '>= 8'} 753 | 754 | micromatch@4.0.8: 755 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 756 | engines: {node: '>=8.6'} 757 | 758 | minimatch@9.0.5: 759 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 760 | engines: {node: '>=16 || 14 >=14.17'} 761 | 762 | minipass@7.1.2: 763 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 764 | engines: {node: '>=16 || 14 >=14.17'} 765 | 766 | mri@1.2.0: 767 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 768 | engines: {node: '>=4'} 769 | 770 | ms@2.1.3: 771 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 772 | 773 | mz@2.7.0: 774 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 775 | 776 | node-addon-api@7.1.1: 777 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 778 | 779 | node-addon-api@8.3.0: 780 | resolution: {integrity: sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==} 781 | engines: {node: ^18 || ^20 || >= 21} 782 | 783 | node-gyp-build@4.8.4: 784 | resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} 785 | hasBin: true 786 | 787 | object-assign@4.1.1: 788 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 789 | engines: {node: '>=0.10.0'} 790 | 791 | os-tmpdir@1.0.2: 792 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 793 | engines: {node: '>=0.10.0'} 794 | 795 | outdent@0.5.0: 796 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 797 | 798 | p-filter@2.1.0: 799 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 800 | engines: {node: '>=8'} 801 | 802 | p-limit@2.3.0: 803 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 804 | engines: {node: '>=6'} 805 | 806 | p-locate@4.1.0: 807 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 808 | engines: {node: '>=8'} 809 | 810 | p-map@2.1.0: 811 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 812 | engines: {node: '>=6'} 813 | 814 | p-try@2.2.0: 815 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 816 | engines: {node: '>=6'} 817 | 818 | package-json-from-dist@1.0.1: 819 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 820 | 821 | package-manager-detector@0.2.2: 822 | resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} 823 | 824 | path-exists@4.0.0: 825 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 826 | engines: {node: '>=8'} 827 | 828 | path-key@3.1.1: 829 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 830 | engines: {node: '>=8'} 831 | 832 | path-scurry@1.11.1: 833 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 834 | engines: {node: '>=16 || 14 >=14.18'} 835 | 836 | path-type@4.0.0: 837 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 838 | engines: {node: '>=8'} 839 | 840 | picocolors@1.1.1: 841 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 842 | 843 | picomatch@2.3.1: 844 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 845 | engines: {node: '>=8.6'} 846 | 847 | picomatch@4.0.2: 848 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 849 | engines: {node: '>=12'} 850 | 851 | pify@4.0.1: 852 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 853 | engines: {node: '>=6'} 854 | 855 | pirates@4.0.6: 856 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 857 | engines: {node: '>= 6'} 858 | 859 | postcss-load-config@6.0.1: 860 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 861 | engines: {node: '>= 18'} 862 | peerDependencies: 863 | jiti: '>=1.21.0' 864 | postcss: '>=8.0.9' 865 | tsx: ^4.8.1 866 | yaml: ^2.4.2 867 | peerDependenciesMeta: 868 | jiti: 869 | optional: true 870 | postcss: 871 | optional: true 872 | tsx: 873 | optional: true 874 | yaml: 875 | optional: true 876 | 877 | prettier@2.8.8: 878 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 879 | engines: {node: '>=10.13.0'} 880 | hasBin: true 881 | 882 | pseudomap@1.0.2: 883 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 884 | 885 | punycode@2.3.1: 886 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 887 | engines: {node: '>=6'} 888 | 889 | queue-microtask@1.2.3: 890 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 891 | 892 | read-yaml-file@1.1.0: 893 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 894 | engines: {node: '>=6'} 895 | 896 | readdirp@4.0.2: 897 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 898 | engines: {node: '>= 14.16.0'} 899 | 900 | ref-struct-di@1.1.1: 901 | resolution: {integrity: sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==} 902 | 903 | regenerator-runtime@0.14.1: 904 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 905 | 906 | resolve-from@5.0.0: 907 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 908 | engines: {node: '>=8'} 909 | 910 | reusify@1.0.4: 911 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 912 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 913 | 914 | rollup@4.24.3: 915 | resolution: {integrity: sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==} 916 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 917 | hasBin: true 918 | 919 | run-parallel@1.2.0: 920 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 921 | 922 | safer-buffer@2.1.2: 923 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 924 | 925 | semver@7.6.3: 926 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 927 | engines: {node: '>=10'} 928 | hasBin: true 929 | 930 | shebang-command@1.2.0: 931 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 932 | engines: {node: '>=0.10.0'} 933 | 934 | shebang-command@2.0.0: 935 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 936 | engines: {node: '>=8'} 937 | 938 | shebang-regex@1.0.0: 939 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 940 | engines: {node: '>=0.10.0'} 941 | 942 | shebang-regex@3.0.0: 943 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 944 | engines: {node: '>=8'} 945 | 946 | signal-exit@3.0.7: 947 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 948 | 949 | signal-exit@4.1.0: 950 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 951 | engines: {node: '>=14'} 952 | 953 | slash@3.0.0: 954 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 955 | engines: {node: '>=8'} 956 | 957 | source-map@0.8.0-beta.0: 958 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 959 | engines: {node: '>= 8'} 960 | 961 | spawndamnit@2.0.0: 962 | resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} 963 | 964 | sprintf-js@1.0.3: 965 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 966 | 967 | string-width@4.2.3: 968 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 969 | engines: {node: '>=8'} 970 | 971 | string-width@5.1.2: 972 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 973 | engines: {node: '>=12'} 974 | 975 | strip-ansi@6.0.1: 976 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 977 | engines: {node: '>=8'} 978 | 979 | strip-ansi@7.1.0: 980 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 981 | engines: {node: '>=12'} 982 | 983 | strip-bom@3.0.0: 984 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 985 | engines: {node: '>=4'} 986 | 987 | sucrase@3.35.0: 988 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 989 | engines: {node: '>=16 || 14 >=14.17'} 990 | hasBin: true 991 | 992 | term-size@2.2.1: 993 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 994 | engines: {node: '>=8'} 995 | 996 | thenify-all@1.6.0: 997 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 998 | engines: {node: '>=0.8'} 999 | 1000 | thenify@3.3.1: 1001 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1002 | 1003 | tinyexec@0.3.1: 1004 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 1005 | 1006 | tinyglobby@0.2.10: 1007 | resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} 1008 | engines: {node: '>=12.0.0'} 1009 | 1010 | tmp@0.0.33: 1011 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1012 | engines: {node: '>=0.6.0'} 1013 | 1014 | to-regex-range@5.0.1: 1015 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1016 | engines: {node: '>=8.0'} 1017 | 1018 | tr46@1.0.1: 1019 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1020 | 1021 | tree-kill@1.2.2: 1022 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1023 | hasBin: true 1024 | 1025 | ts-interface-checker@0.1.13: 1026 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1027 | 1028 | tsup@8.3.5: 1029 | resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} 1030 | engines: {node: '>=18'} 1031 | hasBin: true 1032 | peerDependencies: 1033 | '@microsoft/api-extractor': ^7.36.0 1034 | '@swc/core': ^1 1035 | postcss: ^8.4.12 1036 | typescript: '>=4.5.0' 1037 | peerDependenciesMeta: 1038 | '@microsoft/api-extractor': 1039 | optional: true 1040 | '@swc/core': 1041 | optional: true 1042 | postcss: 1043 | optional: true 1044 | typescript: 1045 | optional: true 1046 | 1047 | typescript@5.6.3: 1048 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1049 | engines: {node: '>=14.17'} 1050 | hasBin: true 1051 | 1052 | undici-types@6.19.8: 1053 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1054 | 1055 | universalify@0.1.2: 1056 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1057 | engines: {node: '>= 4.0.0'} 1058 | 1059 | webidl-conversions@4.0.2: 1060 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1061 | 1062 | whatwg-url@7.1.0: 1063 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1064 | 1065 | which@1.3.1: 1066 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1067 | hasBin: true 1068 | 1069 | which@2.0.2: 1070 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1071 | engines: {node: '>= 8'} 1072 | hasBin: true 1073 | 1074 | wrap-ansi@7.0.0: 1075 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1076 | engines: {node: '>=10'} 1077 | 1078 | wrap-ansi@8.1.0: 1079 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1080 | engines: {node: '>=12'} 1081 | 1082 | yallist@2.1.2: 1083 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 1084 | 1085 | snapshots: 1086 | 1087 | '@babel/runtime@7.26.0': 1088 | dependencies: 1089 | regenerator-runtime: 0.14.1 1090 | 1091 | '@changesets/apply-release-plan@7.0.5': 1092 | dependencies: 1093 | '@changesets/config': 3.0.3 1094 | '@changesets/get-version-range-type': 0.4.0 1095 | '@changesets/git': 3.0.1 1096 | '@changesets/should-skip-package': 0.1.1 1097 | '@changesets/types': 6.0.0 1098 | '@manypkg/get-packages': 1.1.3 1099 | detect-indent: 6.1.0 1100 | fs-extra: 7.0.1 1101 | lodash.startcase: 4.4.0 1102 | outdent: 0.5.0 1103 | prettier: 2.8.8 1104 | resolve-from: 5.0.0 1105 | semver: 7.6.3 1106 | 1107 | '@changesets/assemble-release-plan@6.0.4': 1108 | dependencies: 1109 | '@changesets/errors': 0.2.0 1110 | '@changesets/get-dependents-graph': 2.1.2 1111 | '@changesets/should-skip-package': 0.1.1 1112 | '@changesets/types': 6.0.0 1113 | '@manypkg/get-packages': 1.1.3 1114 | semver: 7.6.3 1115 | 1116 | '@changesets/changelog-git@0.2.0': 1117 | dependencies: 1118 | '@changesets/types': 6.0.0 1119 | 1120 | '@changesets/cli@2.27.9': 1121 | dependencies: 1122 | '@changesets/apply-release-plan': 7.0.5 1123 | '@changesets/assemble-release-plan': 6.0.4 1124 | '@changesets/changelog-git': 0.2.0 1125 | '@changesets/config': 3.0.3 1126 | '@changesets/errors': 0.2.0 1127 | '@changesets/get-dependents-graph': 2.1.2 1128 | '@changesets/get-release-plan': 4.0.4 1129 | '@changesets/git': 3.0.1 1130 | '@changesets/logger': 0.1.1 1131 | '@changesets/pre': 2.0.1 1132 | '@changesets/read': 0.6.1 1133 | '@changesets/should-skip-package': 0.1.1 1134 | '@changesets/types': 6.0.0 1135 | '@changesets/write': 0.3.2 1136 | '@manypkg/get-packages': 1.1.3 1137 | ansi-colors: 4.1.3 1138 | ci-info: 3.9.0 1139 | enquirer: 2.4.1 1140 | external-editor: 3.1.0 1141 | fs-extra: 7.0.1 1142 | mri: 1.2.0 1143 | p-limit: 2.3.0 1144 | package-manager-detector: 0.2.2 1145 | picocolors: 1.1.1 1146 | resolve-from: 5.0.0 1147 | semver: 7.6.3 1148 | spawndamnit: 2.0.0 1149 | term-size: 2.2.1 1150 | 1151 | '@changesets/config@3.0.3': 1152 | dependencies: 1153 | '@changesets/errors': 0.2.0 1154 | '@changesets/get-dependents-graph': 2.1.2 1155 | '@changesets/logger': 0.1.1 1156 | '@changesets/types': 6.0.0 1157 | '@manypkg/get-packages': 1.1.3 1158 | fs-extra: 7.0.1 1159 | micromatch: 4.0.8 1160 | 1161 | '@changesets/errors@0.2.0': 1162 | dependencies: 1163 | extendable-error: 0.1.7 1164 | 1165 | '@changesets/get-dependents-graph@2.1.2': 1166 | dependencies: 1167 | '@changesets/types': 6.0.0 1168 | '@manypkg/get-packages': 1.1.3 1169 | picocolors: 1.1.1 1170 | semver: 7.6.3 1171 | 1172 | '@changesets/get-release-plan@4.0.4': 1173 | dependencies: 1174 | '@changesets/assemble-release-plan': 6.0.4 1175 | '@changesets/config': 3.0.3 1176 | '@changesets/pre': 2.0.1 1177 | '@changesets/read': 0.6.1 1178 | '@changesets/types': 6.0.0 1179 | '@manypkg/get-packages': 1.1.3 1180 | 1181 | '@changesets/get-version-range-type@0.4.0': {} 1182 | 1183 | '@changesets/git@3.0.1': 1184 | dependencies: 1185 | '@changesets/errors': 0.2.0 1186 | '@manypkg/get-packages': 1.1.3 1187 | is-subdir: 1.2.0 1188 | micromatch: 4.0.8 1189 | spawndamnit: 2.0.0 1190 | 1191 | '@changesets/logger@0.1.1': 1192 | dependencies: 1193 | picocolors: 1.1.1 1194 | 1195 | '@changesets/parse@0.4.0': 1196 | dependencies: 1197 | '@changesets/types': 6.0.0 1198 | js-yaml: 3.14.1 1199 | 1200 | '@changesets/pre@2.0.1': 1201 | dependencies: 1202 | '@changesets/errors': 0.2.0 1203 | '@changesets/types': 6.0.0 1204 | '@manypkg/get-packages': 1.1.3 1205 | fs-extra: 7.0.1 1206 | 1207 | '@changesets/read@0.6.1': 1208 | dependencies: 1209 | '@changesets/git': 3.0.1 1210 | '@changesets/logger': 0.1.1 1211 | '@changesets/parse': 0.4.0 1212 | '@changesets/types': 6.0.0 1213 | fs-extra: 7.0.1 1214 | p-filter: 2.1.0 1215 | picocolors: 1.1.1 1216 | 1217 | '@changesets/should-skip-package@0.1.1': 1218 | dependencies: 1219 | '@changesets/types': 6.0.0 1220 | '@manypkg/get-packages': 1.1.3 1221 | 1222 | '@changesets/types@4.1.0': {} 1223 | 1224 | '@changesets/types@6.0.0': {} 1225 | 1226 | '@changesets/write@0.3.2': 1227 | dependencies: 1228 | '@changesets/types': 6.0.0 1229 | fs-extra: 7.0.1 1230 | human-id: 1.0.2 1231 | prettier: 2.8.8 1232 | 1233 | '@esbuild/aix-ppc64@0.24.0': 1234 | optional: true 1235 | 1236 | '@esbuild/android-arm64@0.24.0': 1237 | optional: true 1238 | 1239 | '@esbuild/android-arm@0.24.0': 1240 | optional: true 1241 | 1242 | '@esbuild/android-x64@0.24.0': 1243 | optional: true 1244 | 1245 | '@esbuild/darwin-arm64@0.24.0': 1246 | optional: true 1247 | 1248 | '@esbuild/darwin-x64@0.24.0': 1249 | optional: true 1250 | 1251 | '@esbuild/freebsd-arm64@0.24.0': 1252 | optional: true 1253 | 1254 | '@esbuild/freebsd-x64@0.24.0': 1255 | optional: true 1256 | 1257 | '@esbuild/linux-arm64@0.24.0': 1258 | optional: true 1259 | 1260 | '@esbuild/linux-arm@0.24.0': 1261 | optional: true 1262 | 1263 | '@esbuild/linux-ia32@0.24.0': 1264 | optional: true 1265 | 1266 | '@esbuild/linux-loong64@0.24.0': 1267 | optional: true 1268 | 1269 | '@esbuild/linux-mips64el@0.24.0': 1270 | optional: true 1271 | 1272 | '@esbuild/linux-ppc64@0.24.0': 1273 | optional: true 1274 | 1275 | '@esbuild/linux-riscv64@0.24.0': 1276 | optional: true 1277 | 1278 | '@esbuild/linux-s390x@0.24.0': 1279 | optional: true 1280 | 1281 | '@esbuild/linux-x64@0.24.0': 1282 | optional: true 1283 | 1284 | '@esbuild/netbsd-x64@0.24.0': 1285 | optional: true 1286 | 1287 | '@esbuild/openbsd-arm64@0.24.0': 1288 | optional: true 1289 | 1290 | '@esbuild/openbsd-x64@0.24.0': 1291 | optional: true 1292 | 1293 | '@esbuild/sunos-x64@0.24.0': 1294 | optional: true 1295 | 1296 | '@esbuild/win32-arm64@0.24.0': 1297 | optional: true 1298 | 1299 | '@esbuild/win32-ia32@0.24.0': 1300 | optional: true 1301 | 1302 | '@esbuild/win32-x64@0.24.0': 1303 | optional: true 1304 | 1305 | '@isaacs/cliui@8.0.2': 1306 | dependencies: 1307 | string-width: 5.1.2 1308 | string-width-cjs: string-width@4.2.3 1309 | strip-ansi: 7.1.0 1310 | strip-ansi-cjs: strip-ansi@6.0.1 1311 | wrap-ansi: 8.1.0 1312 | wrap-ansi-cjs: wrap-ansi@7.0.0 1313 | 1314 | '@jridgewell/gen-mapping@0.3.5': 1315 | dependencies: 1316 | '@jridgewell/set-array': 1.2.1 1317 | '@jridgewell/sourcemap-codec': 1.5.0 1318 | '@jridgewell/trace-mapping': 0.3.25 1319 | 1320 | '@jridgewell/resolve-uri@3.1.2': {} 1321 | 1322 | '@jridgewell/set-array@1.2.1': {} 1323 | 1324 | '@jridgewell/sourcemap-codec@1.5.0': {} 1325 | 1326 | '@jridgewell/trace-mapping@0.3.25': 1327 | dependencies: 1328 | '@jridgewell/resolve-uri': 3.1.2 1329 | '@jridgewell/sourcemap-codec': 1.5.0 1330 | 1331 | '@makeomatic/ffi-napi@4.2.0': 1332 | dependencies: 1333 | '@makeomatic/ref-napi': 3.0.6 1334 | debug: 4.3.7 1335 | get-uv-event-loop-napi-h: 1.0.6 1336 | node-addon-api: 8.3.0 1337 | node-gyp-build: 4.8.4 1338 | ref-struct-di: 1.1.1 1339 | transitivePeerDependencies: 1340 | - supports-color 1341 | 1342 | '@makeomatic/ref-napi@3.0.6': 1343 | dependencies: 1344 | debug: 4.3.7 1345 | get-symbol-from-current-process-h: 1.0.2 1346 | node-addon-api: 7.1.1 1347 | node-gyp-build: 4.8.4 1348 | transitivePeerDependencies: 1349 | - supports-color 1350 | 1351 | '@manypkg/find-root@1.1.0': 1352 | dependencies: 1353 | '@babel/runtime': 7.26.0 1354 | '@types/node': 12.20.55 1355 | find-up: 4.1.0 1356 | fs-extra: 8.1.0 1357 | 1358 | '@manypkg/get-packages@1.1.3': 1359 | dependencies: 1360 | '@babel/runtime': 7.26.0 1361 | '@changesets/types': 4.1.0 1362 | '@manypkg/find-root': 1.1.0 1363 | fs-extra: 8.1.0 1364 | globby: 11.1.0 1365 | read-yaml-file: 1.1.0 1366 | 1367 | '@nodelib/fs.scandir@2.1.5': 1368 | dependencies: 1369 | '@nodelib/fs.stat': 2.0.5 1370 | run-parallel: 1.2.0 1371 | 1372 | '@nodelib/fs.stat@2.0.5': {} 1373 | 1374 | '@nodelib/fs.walk@1.2.8': 1375 | dependencies: 1376 | '@nodelib/fs.scandir': 2.1.5 1377 | fastq: 1.17.1 1378 | 1379 | '@pkgjs/parseargs@0.11.0': 1380 | optional: true 1381 | 1382 | '@rollup/rollup-android-arm-eabi@4.24.3': 1383 | optional: true 1384 | 1385 | '@rollup/rollup-android-arm64@4.24.3': 1386 | optional: true 1387 | 1388 | '@rollup/rollup-darwin-arm64@4.24.3': 1389 | optional: true 1390 | 1391 | '@rollup/rollup-darwin-x64@4.24.3': 1392 | optional: true 1393 | 1394 | '@rollup/rollup-freebsd-arm64@4.24.3': 1395 | optional: true 1396 | 1397 | '@rollup/rollup-freebsd-x64@4.24.3': 1398 | optional: true 1399 | 1400 | '@rollup/rollup-linux-arm-gnueabihf@4.24.3': 1401 | optional: true 1402 | 1403 | '@rollup/rollup-linux-arm-musleabihf@4.24.3': 1404 | optional: true 1405 | 1406 | '@rollup/rollup-linux-arm64-gnu@4.24.3': 1407 | optional: true 1408 | 1409 | '@rollup/rollup-linux-arm64-musl@4.24.3': 1410 | optional: true 1411 | 1412 | '@rollup/rollup-linux-powerpc64le-gnu@4.24.3': 1413 | optional: true 1414 | 1415 | '@rollup/rollup-linux-riscv64-gnu@4.24.3': 1416 | optional: true 1417 | 1418 | '@rollup/rollup-linux-s390x-gnu@4.24.3': 1419 | optional: true 1420 | 1421 | '@rollup/rollup-linux-x64-gnu@4.24.3': 1422 | optional: true 1423 | 1424 | '@rollup/rollup-linux-x64-musl@4.24.3': 1425 | optional: true 1426 | 1427 | '@rollup/rollup-win32-arm64-msvc@4.24.3': 1428 | optional: true 1429 | 1430 | '@rollup/rollup-win32-ia32-msvc@4.24.3': 1431 | optional: true 1432 | 1433 | '@rollup/rollup-win32-x64-msvc@4.24.3': 1434 | optional: true 1435 | 1436 | '@types/estree@1.0.6': {} 1437 | 1438 | '@types/ffi-napi@4.0.10': 1439 | dependencies: 1440 | '@types/node': 22.8.4 1441 | '@types/ref-napi': 3.0.12 1442 | '@types/ref-struct-di': 1.1.12 1443 | 1444 | '@types/node@12.20.55': {} 1445 | 1446 | '@types/node@22.8.4': 1447 | dependencies: 1448 | undici-types: 6.19.8 1449 | 1450 | '@types/ref-napi@3.0.12': 1451 | dependencies: 1452 | '@types/node': 22.8.4 1453 | 1454 | '@types/ref-struct-di@1.1.12': 1455 | dependencies: 1456 | '@types/ref-napi': 3.0.12 1457 | 1458 | '@yuuang/ffi-rs-darwin-arm64@1.2.2': 1459 | optional: true 1460 | 1461 | '@yuuang/ffi-rs-darwin-x64@1.2.2': 1462 | optional: true 1463 | 1464 | '@yuuang/ffi-rs-linux-arm-gnueabihf@1.2.2': 1465 | optional: true 1466 | 1467 | '@yuuang/ffi-rs-linux-arm64-gnu@1.2.2': 1468 | optional: true 1469 | 1470 | '@yuuang/ffi-rs-linux-arm64-musl@1.2.2': 1471 | optional: true 1472 | 1473 | '@yuuang/ffi-rs-linux-x64-gnu@1.2.2': 1474 | optional: true 1475 | 1476 | '@yuuang/ffi-rs-linux-x64-musl@1.2.2': 1477 | optional: true 1478 | 1479 | '@yuuang/ffi-rs-win32-arm64-msvc@1.2.2': 1480 | optional: true 1481 | 1482 | '@yuuang/ffi-rs-win32-ia32-msvc@1.2.2': 1483 | optional: true 1484 | 1485 | '@yuuang/ffi-rs-win32-x64-msvc@1.2.2': 1486 | optional: true 1487 | 1488 | ansi-colors@4.1.3: {} 1489 | 1490 | ansi-regex@5.0.1: {} 1491 | 1492 | ansi-regex@6.1.0: {} 1493 | 1494 | ansi-styles@4.3.0: 1495 | dependencies: 1496 | color-convert: 2.0.1 1497 | 1498 | ansi-styles@6.2.1: {} 1499 | 1500 | any-promise@1.3.0: {} 1501 | 1502 | argparse@1.0.10: 1503 | dependencies: 1504 | sprintf-js: 1.0.3 1505 | 1506 | array-union@2.1.0: {} 1507 | 1508 | balanced-match@1.0.2: {} 1509 | 1510 | better-path-resolve@1.0.0: 1511 | dependencies: 1512 | is-windows: 1.0.2 1513 | 1514 | brace-expansion@2.0.1: 1515 | dependencies: 1516 | balanced-match: 1.0.2 1517 | 1518 | braces@3.0.3: 1519 | dependencies: 1520 | fill-range: 7.1.1 1521 | 1522 | bundle-require@5.0.0(esbuild@0.24.0): 1523 | dependencies: 1524 | esbuild: 0.24.0 1525 | load-tsconfig: 0.2.5 1526 | 1527 | cac@6.7.14: {} 1528 | 1529 | chardet@0.7.0: {} 1530 | 1531 | chokidar@4.0.1: 1532 | dependencies: 1533 | readdirp: 4.0.2 1534 | 1535 | ci-info@3.9.0: {} 1536 | 1537 | color-convert@2.0.1: 1538 | dependencies: 1539 | color-name: 1.1.4 1540 | 1541 | color-name@1.1.4: {} 1542 | 1543 | commander@4.1.1: {} 1544 | 1545 | consola@3.2.3: {} 1546 | 1547 | cross-spawn@5.1.0: 1548 | dependencies: 1549 | lru-cache: 4.1.5 1550 | shebang-command: 1.2.0 1551 | which: 1.3.1 1552 | 1553 | cross-spawn@7.0.3: 1554 | dependencies: 1555 | path-key: 3.1.1 1556 | shebang-command: 2.0.0 1557 | which: 2.0.2 1558 | 1559 | debug@3.2.7: 1560 | dependencies: 1561 | ms: 2.1.3 1562 | 1563 | debug@4.3.7: 1564 | dependencies: 1565 | ms: 2.1.3 1566 | 1567 | detect-indent@6.1.0: {} 1568 | 1569 | dir-glob@3.0.1: 1570 | dependencies: 1571 | path-type: 4.0.0 1572 | 1573 | eastasianwidth@0.2.0: {} 1574 | 1575 | emoji-regex@8.0.0: {} 1576 | 1577 | emoji-regex@9.2.2: {} 1578 | 1579 | enquirer@2.4.1: 1580 | dependencies: 1581 | ansi-colors: 4.1.3 1582 | strip-ansi: 6.0.1 1583 | 1584 | esbuild@0.24.0: 1585 | optionalDependencies: 1586 | '@esbuild/aix-ppc64': 0.24.0 1587 | '@esbuild/android-arm': 0.24.0 1588 | '@esbuild/android-arm64': 0.24.0 1589 | '@esbuild/android-x64': 0.24.0 1590 | '@esbuild/darwin-arm64': 0.24.0 1591 | '@esbuild/darwin-x64': 0.24.0 1592 | '@esbuild/freebsd-arm64': 0.24.0 1593 | '@esbuild/freebsd-x64': 0.24.0 1594 | '@esbuild/linux-arm': 0.24.0 1595 | '@esbuild/linux-arm64': 0.24.0 1596 | '@esbuild/linux-ia32': 0.24.0 1597 | '@esbuild/linux-loong64': 0.24.0 1598 | '@esbuild/linux-mips64el': 0.24.0 1599 | '@esbuild/linux-ppc64': 0.24.0 1600 | '@esbuild/linux-riscv64': 0.24.0 1601 | '@esbuild/linux-s390x': 0.24.0 1602 | '@esbuild/linux-x64': 0.24.0 1603 | '@esbuild/netbsd-x64': 0.24.0 1604 | '@esbuild/openbsd-arm64': 0.24.0 1605 | '@esbuild/openbsd-x64': 0.24.0 1606 | '@esbuild/sunos-x64': 0.24.0 1607 | '@esbuild/win32-arm64': 0.24.0 1608 | '@esbuild/win32-ia32': 0.24.0 1609 | '@esbuild/win32-x64': 0.24.0 1610 | 1611 | esprima@4.0.1: {} 1612 | 1613 | extendable-error@0.1.7: {} 1614 | 1615 | external-editor@3.1.0: 1616 | dependencies: 1617 | chardet: 0.7.0 1618 | iconv-lite: 0.4.24 1619 | tmp: 0.0.33 1620 | 1621 | fast-glob@3.3.2: 1622 | dependencies: 1623 | '@nodelib/fs.stat': 2.0.5 1624 | '@nodelib/fs.walk': 1.2.8 1625 | glob-parent: 5.1.2 1626 | merge2: 1.4.1 1627 | micromatch: 4.0.8 1628 | 1629 | fastq@1.17.1: 1630 | dependencies: 1631 | reusify: 1.0.4 1632 | 1633 | fdir@6.4.2(picomatch@4.0.2): 1634 | optionalDependencies: 1635 | picomatch: 4.0.2 1636 | 1637 | ffi-rs@1.2.2: 1638 | optionalDependencies: 1639 | '@yuuang/ffi-rs-darwin-arm64': 1.2.2 1640 | '@yuuang/ffi-rs-darwin-x64': 1.2.2 1641 | '@yuuang/ffi-rs-linux-arm-gnueabihf': 1.2.2 1642 | '@yuuang/ffi-rs-linux-arm64-gnu': 1.2.2 1643 | '@yuuang/ffi-rs-linux-arm64-musl': 1.2.2 1644 | '@yuuang/ffi-rs-linux-x64-gnu': 1.2.2 1645 | '@yuuang/ffi-rs-linux-x64-musl': 1.2.2 1646 | '@yuuang/ffi-rs-win32-arm64-msvc': 1.2.2 1647 | '@yuuang/ffi-rs-win32-ia32-msvc': 1.2.2 1648 | '@yuuang/ffi-rs-win32-x64-msvc': 1.2.2 1649 | 1650 | fill-range@7.1.1: 1651 | dependencies: 1652 | to-regex-range: 5.0.1 1653 | 1654 | find-up@4.1.0: 1655 | dependencies: 1656 | locate-path: 5.0.0 1657 | path-exists: 4.0.0 1658 | 1659 | foreground-child@3.3.0: 1660 | dependencies: 1661 | cross-spawn: 7.0.3 1662 | signal-exit: 4.1.0 1663 | 1664 | fs-extra@7.0.1: 1665 | dependencies: 1666 | graceful-fs: 4.2.11 1667 | jsonfile: 4.0.0 1668 | universalify: 0.1.2 1669 | 1670 | fs-extra@8.1.0: 1671 | dependencies: 1672 | graceful-fs: 4.2.11 1673 | jsonfile: 4.0.0 1674 | universalify: 0.1.2 1675 | 1676 | fsevents@2.3.3: 1677 | optional: true 1678 | 1679 | get-symbol-from-current-process-h@1.0.2: {} 1680 | 1681 | get-uv-event-loop-napi-h@1.0.6: 1682 | dependencies: 1683 | get-symbol-from-current-process-h: 1.0.2 1684 | 1685 | glob-parent@5.1.2: 1686 | dependencies: 1687 | is-glob: 4.0.3 1688 | 1689 | glob@10.4.5: 1690 | dependencies: 1691 | foreground-child: 3.3.0 1692 | jackspeak: 3.4.3 1693 | minimatch: 9.0.5 1694 | minipass: 7.1.2 1695 | package-json-from-dist: 1.0.1 1696 | path-scurry: 1.11.1 1697 | 1698 | globby@11.1.0: 1699 | dependencies: 1700 | array-union: 2.1.0 1701 | dir-glob: 3.0.1 1702 | fast-glob: 3.3.2 1703 | ignore: 5.3.2 1704 | merge2: 1.4.1 1705 | slash: 3.0.0 1706 | 1707 | graceful-fs@4.2.11: {} 1708 | 1709 | human-id@1.0.2: {} 1710 | 1711 | iconv-lite@0.4.24: 1712 | dependencies: 1713 | safer-buffer: 2.1.2 1714 | 1715 | ignore@5.3.2: {} 1716 | 1717 | is-extglob@2.1.1: {} 1718 | 1719 | is-fullwidth-code-point@3.0.0: {} 1720 | 1721 | is-glob@4.0.3: 1722 | dependencies: 1723 | is-extglob: 2.1.1 1724 | 1725 | is-number@7.0.0: {} 1726 | 1727 | is-subdir@1.2.0: 1728 | dependencies: 1729 | better-path-resolve: 1.0.0 1730 | 1731 | is-windows@1.0.2: {} 1732 | 1733 | isexe@2.0.0: {} 1734 | 1735 | jackspeak@3.4.3: 1736 | dependencies: 1737 | '@isaacs/cliui': 8.0.2 1738 | optionalDependencies: 1739 | '@pkgjs/parseargs': 0.11.0 1740 | 1741 | joycon@3.1.1: {} 1742 | 1743 | js-yaml@3.14.1: 1744 | dependencies: 1745 | argparse: 1.0.10 1746 | esprima: 4.0.1 1747 | 1748 | jsonfile@4.0.0: 1749 | optionalDependencies: 1750 | graceful-fs: 4.2.11 1751 | 1752 | lilconfig@3.1.2: {} 1753 | 1754 | lines-and-columns@1.2.4: {} 1755 | 1756 | load-tsconfig@0.2.5: {} 1757 | 1758 | locate-path@5.0.0: 1759 | dependencies: 1760 | p-locate: 4.1.0 1761 | 1762 | lodash.sortby@4.7.0: {} 1763 | 1764 | lodash.startcase@4.4.0: {} 1765 | 1766 | lru-cache@10.4.3: {} 1767 | 1768 | lru-cache@4.1.5: 1769 | dependencies: 1770 | pseudomap: 1.0.2 1771 | yallist: 2.1.2 1772 | 1773 | merge2@1.4.1: {} 1774 | 1775 | micromatch@4.0.8: 1776 | dependencies: 1777 | braces: 3.0.3 1778 | picomatch: 2.3.1 1779 | 1780 | minimatch@9.0.5: 1781 | dependencies: 1782 | brace-expansion: 2.0.1 1783 | 1784 | minipass@7.1.2: {} 1785 | 1786 | mri@1.2.0: {} 1787 | 1788 | ms@2.1.3: {} 1789 | 1790 | mz@2.7.0: 1791 | dependencies: 1792 | any-promise: 1.3.0 1793 | object-assign: 4.1.1 1794 | thenify-all: 1.6.0 1795 | 1796 | node-addon-api@7.1.1: {} 1797 | 1798 | node-addon-api@8.3.0: {} 1799 | 1800 | node-gyp-build@4.8.4: {} 1801 | 1802 | object-assign@4.1.1: {} 1803 | 1804 | os-tmpdir@1.0.2: {} 1805 | 1806 | outdent@0.5.0: {} 1807 | 1808 | p-filter@2.1.0: 1809 | dependencies: 1810 | p-map: 2.1.0 1811 | 1812 | p-limit@2.3.0: 1813 | dependencies: 1814 | p-try: 2.2.0 1815 | 1816 | p-locate@4.1.0: 1817 | dependencies: 1818 | p-limit: 2.3.0 1819 | 1820 | p-map@2.1.0: {} 1821 | 1822 | p-try@2.2.0: {} 1823 | 1824 | package-json-from-dist@1.0.1: {} 1825 | 1826 | package-manager-detector@0.2.2: {} 1827 | 1828 | path-exists@4.0.0: {} 1829 | 1830 | path-key@3.1.1: {} 1831 | 1832 | path-scurry@1.11.1: 1833 | dependencies: 1834 | lru-cache: 10.4.3 1835 | minipass: 7.1.2 1836 | 1837 | path-type@4.0.0: {} 1838 | 1839 | picocolors@1.1.1: {} 1840 | 1841 | picomatch@2.3.1: {} 1842 | 1843 | picomatch@4.0.2: {} 1844 | 1845 | pify@4.0.1: {} 1846 | 1847 | pirates@4.0.6: {} 1848 | 1849 | postcss-load-config@6.0.1: 1850 | dependencies: 1851 | lilconfig: 3.1.2 1852 | 1853 | prettier@2.8.8: {} 1854 | 1855 | pseudomap@1.0.2: {} 1856 | 1857 | punycode@2.3.1: {} 1858 | 1859 | queue-microtask@1.2.3: {} 1860 | 1861 | read-yaml-file@1.1.0: 1862 | dependencies: 1863 | graceful-fs: 4.2.11 1864 | js-yaml: 3.14.1 1865 | pify: 4.0.1 1866 | strip-bom: 3.0.0 1867 | 1868 | readdirp@4.0.2: {} 1869 | 1870 | ref-struct-di@1.1.1: 1871 | dependencies: 1872 | debug: 3.2.7 1873 | transitivePeerDependencies: 1874 | - supports-color 1875 | 1876 | regenerator-runtime@0.14.1: {} 1877 | 1878 | resolve-from@5.0.0: {} 1879 | 1880 | reusify@1.0.4: {} 1881 | 1882 | rollup@4.24.3: 1883 | dependencies: 1884 | '@types/estree': 1.0.6 1885 | optionalDependencies: 1886 | '@rollup/rollup-android-arm-eabi': 4.24.3 1887 | '@rollup/rollup-android-arm64': 4.24.3 1888 | '@rollup/rollup-darwin-arm64': 4.24.3 1889 | '@rollup/rollup-darwin-x64': 4.24.3 1890 | '@rollup/rollup-freebsd-arm64': 4.24.3 1891 | '@rollup/rollup-freebsd-x64': 4.24.3 1892 | '@rollup/rollup-linux-arm-gnueabihf': 4.24.3 1893 | '@rollup/rollup-linux-arm-musleabihf': 4.24.3 1894 | '@rollup/rollup-linux-arm64-gnu': 4.24.3 1895 | '@rollup/rollup-linux-arm64-musl': 4.24.3 1896 | '@rollup/rollup-linux-powerpc64le-gnu': 4.24.3 1897 | '@rollup/rollup-linux-riscv64-gnu': 4.24.3 1898 | '@rollup/rollup-linux-s390x-gnu': 4.24.3 1899 | '@rollup/rollup-linux-x64-gnu': 4.24.3 1900 | '@rollup/rollup-linux-x64-musl': 4.24.3 1901 | '@rollup/rollup-win32-arm64-msvc': 4.24.3 1902 | '@rollup/rollup-win32-ia32-msvc': 4.24.3 1903 | '@rollup/rollup-win32-x64-msvc': 4.24.3 1904 | fsevents: 2.3.3 1905 | 1906 | run-parallel@1.2.0: 1907 | dependencies: 1908 | queue-microtask: 1.2.3 1909 | 1910 | safer-buffer@2.1.2: {} 1911 | 1912 | semver@7.6.3: {} 1913 | 1914 | shebang-command@1.2.0: 1915 | dependencies: 1916 | shebang-regex: 1.0.0 1917 | 1918 | shebang-command@2.0.0: 1919 | dependencies: 1920 | shebang-regex: 3.0.0 1921 | 1922 | shebang-regex@1.0.0: {} 1923 | 1924 | shebang-regex@3.0.0: {} 1925 | 1926 | signal-exit@3.0.7: {} 1927 | 1928 | signal-exit@4.1.0: {} 1929 | 1930 | slash@3.0.0: {} 1931 | 1932 | source-map@0.8.0-beta.0: 1933 | dependencies: 1934 | whatwg-url: 7.1.0 1935 | 1936 | spawndamnit@2.0.0: 1937 | dependencies: 1938 | cross-spawn: 5.1.0 1939 | signal-exit: 3.0.7 1940 | 1941 | sprintf-js@1.0.3: {} 1942 | 1943 | string-width@4.2.3: 1944 | dependencies: 1945 | emoji-regex: 8.0.0 1946 | is-fullwidth-code-point: 3.0.0 1947 | strip-ansi: 6.0.1 1948 | 1949 | string-width@5.1.2: 1950 | dependencies: 1951 | eastasianwidth: 0.2.0 1952 | emoji-regex: 9.2.2 1953 | strip-ansi: 7.1.0 1954 | 1955 | strip-ansi@6.0.1: 1956 | dependencies: 1957 | ansi-regex: 5.0.1 1958 | 1959 | strip-ansi@7.1.0: 1960 | dependencies: 1961 | ansi-regex: 6.1.0 1962 | 1963 | strip-bom@3.0.0: {} 1964 | 1965 | sucrase@3.35.0: 1966 | dependencies: 1967 | '@jridgewell/gen-mapping': 0.3.5 1968 | commander: 4.1.1 1969 | glob: 10.4.5 1970 | lines-and-columns: 1.2.4 1971 | mz: 2.7.0 1972 | pirates: 4.0.6 1973 | ts-interface-checker: 0.1.13 1974 | 1975 | term-size@2.2.1: {} 1976 | 1977 | thenify-all@1.6.0: 1978 | dependencies: 1979 | thenify: 3.3.1 1980 | 1981 | thenify@3.3.1: 1982 | dependencies: 1983 | any-promise: 1.3.0 1984 | 1985 | tinyexec@0.3.1: {} 1986 | 1987 | tinyglobby@0.2.10: 1988 | dependencies: 1989 | fdir: 6.4.2(picomatch@4.0.2) 1990 | picomatch: 4.0.2 1991 | 1992 | tmp@0.0.33: 1993 | dependencies: 1994 | os-tmpdir: 1.0.2 1995 | 1996 | to-regex-range@5.0.1: 1997 | dependencies: 1998 | is-number: 7.0.0 1999 | 2000 | tr46@1.0.1: 2001 | dependencies: 2002 | punycode: 2.3.1 2003 | 2004 | tree-kill@1.2.2: {} 2005 | 2006 | ts-interface-checker@0.1.13: {} 2007 | 2008 | tsup@8.3.5(typescript@5.6.3): 2009 | dependencies: 2010 | bundle-require: 5.0.0(esbuild@0.24.0) 2011 | cac: 6.7.14 2012 | chokidar: 4.0.1 2013 | consola: 3.2.3 2014 | debug: 4.3.7 2015 | esbuild: 0.24.0 2016 | joycon: 3.1.1 2017 | picocolors: 1.1.1 2018 | postcss-load-config: 6.0.1 2019 | resolve-from: 5.0.0 2020 | rollup: 4.24.3 2021 | source-map: 0.8.0-beta.0 2022 | sucrase: 3.35.0 2023 | tinyexec: 0.3.1 2024 | tinyglobby: 0.2.10 2025 | tree-kill: 1.2.2 2026 | optionalDependencies: 2027 | typescript: 5.6.3 2028 | transitivePeerDependencies: 2029 | - jiti 2030 | - supports-color 2031 | - tsx 2032 | - yaml 2033 | 2034 | typescript@5.6.3: {} 2035 | 2036 | undici-types@6.19.8: {} 2037 | 2038 | universalify@0.1.2: {} 2039 | 2040 | webidl-conversions@4.0.2: {} 2041 | 2042 | whatwg-url@7.1.0: 2043 | dependencies: 2044 | lodash.sortby: 4.7.0 2045 | tr46: 1.0.1 2046 | webidl-conversions: 4.0.2 2047 | 2048 | which@1.3.1: 2049 | dependencies: 2050 | isexe: 2.0.0 2051 | 2052 | which@2.0.2: 2053 | dependencies: 2054 | isexe: 2.0.0 2055 | 2056 | wrap-ansi@7.0.0: 2057 | dependencies: 2058 | ansi-styles: 4.3.0 2059 | string-width: 4.2.3 2060 | strip-ansi: 6.0.1 2061 | 2062 | wrap-ansi@8.1.0: 2063 | dependencies: 2064 | ansi-styles: 6.2.1 2065 | string-width: 5.1.2 2066 | strip-ansi: 7.1.0 2067 | 2068 | yallist@2.1.2: {} 2069 | -------------------------------------------------------------------------------- /src/binary/huh.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sklyt/charsm/c82d368ccac38a6d6f2e7c78cede170a4c205b84/src/binary/huh.dll -------------------------------------------------------------------------------- /src/binary/huh.h: -------------------------------------------------------------------------------- 1 | /* Code generated by cmd/cgo; DO NOT EDIT. */ 2 | 3 | /* package github.com/sk/huh */ 4 | 5 | 6 | #line 1 "cgo-builtin-export-prolog" 7 | 8 | #include 9 | 10 | #ifndef GO_CGO_EXPORT_PROLOGUE_H 11 | #define GO_CGO_EXPORT_PROLOGUE_H 12 | 13 | #ifndef GO_CGO_GOSTRING_TYPEDEF 14 | typedef struct { const char *p; ptrdiff_t n; } _GoString_; 15 | #endif 16 | 17 | #endif 18 | 19 | /* Start of preamble from import "C" comments. */ 20 | 21 | 22 | #line 3 "main.go" 23 | 24 | #include 25 | 26 | #line 1 "cgo-generated-wrapper" 27 | 28 | 29 | /* End of preamble from import "C" comments. */ 30 | 31 | 32 | /* Start of boilerplate cgo prologue. */ 33 | #line 1 "cgo-gcc-export-header-prolog" 34 | 35 | #ifndef GO_CGO_PROLOGUE_H 36 | #define GO_CGO_PROLOGUE_H 37 | 38 | typedef signed char GoInt8; 39 | typedef unsigned char GoUint8; 40 | typedef short GoInt16; 41 | typedef unsigned short GoUint16; 42 | typedef int GoInt32; 43 | typedef unsigned int GoUint32; 44 | typedef long long GoInt64; 45 | typedef unsigned long long GoUint64; 46 | typedef GoInt64 GoInt; 47 | typedef GoUint64 GoUint; 48 | typedef size_t GoUintptr; 49 | typedef float GoFloat32; 50 | typedef double GoFloat64; 51 | #ifdef _MSC_VER 52 | #include 53 | typedef _Fcomplex GoComplex64; 54 | typedef _Dcomplex GoComplex128; 55 | #else 56 | typedef float _Complex GoComplex64; 57 | typedef double _Complex GoComplex128; 58 | #endif 59 | 60 | /* 61 | static assertion to make sure the file is being used on architecture 62 | at least with matching size of GoInt. 63 | */ 64 | typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1]; 65 | 66 | #ifndef GO_CGO_GOSTRING_TYPEDEF 67 | typedef _GoString_ GoString; 68 | #endif 69 | typedef void *GoMap; 70 | typedef void *GoChan; 71 | typedef struct { void *t; void *v; } GoInterface; 72 | typedef struct { void *data; GoInt len; GoInt cap; } GoSlice; 73 | 74 | #endif 75 | 76 | /* End of boilerplate cgo prologue. */ 77 | 78 | #ifdef __cplusplus 79 | extern "C" { 80 | #endif 81 | 82 | extern __declspec(dllexport) void SetTheme(char* t); 83 | extern __declspec(dllexport) char* CreateInput(int t); 84 | extern __declspec(dllexport) int SetInputOptions(char* id, char* title, char* desc, char* placeholder, char* validators); 85 | extern __declspec(dllexport) char* RunInput(char* id); 86 | extern __declspec(dllexport) char* Confirm(char* title, char* affirmative, char* negative); 87 | extern __declspec(dllexport) char* Select(char* title, char* opts); 88 | extern __declspec(dllexport) int MultiSelect(char* id, char* title, char* opts); 89 | extern __declspec(dllexport) char* CreateGroup(char* ids); 90 | extern __declspec(dllexport) void CreateForm(char* groudids); 91 | extern __declspec(dllexport) char* GetValue(char* id); 92 | extern __declspec(dllexport) char* Run(char* id); 93 | extern __declspec(dllexport) void Spinner(int seconds, char* title); 94 | extern __declspec(dllexport) char* Note(char* title, char* desc, char* label, int next); 95 | extern __declspec(dllexport) int FreeStruct(char* id); 96 | 97 | #ifdef __cplusplus 98 | } 99 | #endif 100 | -------------------------------------------------------------------------------- /src/binary/huh.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sklyt/charsm/c82d368ccac38a6d6f2e7c78cede170a4c205b84/src/binary/huh.so -------------------------------------------------------------------------------- /src/fields.ts: -------------------------------------------------------------------------------- 1 | // huh.NewInput(). 2 | // Value(&order.Name). 3 | // Title("What's your name?"). 4 | // Placeholder("Margaret Thatcher"). 5 | // Validate(func(s string) error { 6 | // if s == "Frank" { 7 | // return errors.New("no franks, sorry") 8 | // } 9 | // return nil 10 | // }). 11 | // Description("For when your order is ready."), 12 | //TODO: validators 13 | 14 | import huh, { CreateInput, FreeStruct, SetInputOptions } from "./linker"; 15 | // "required" | "email" | "no_numbers" | "alpha_only" | "no_special_chars" 16 | type inputprops = { 17 | Description: string 18 | Title: string 19 | Placeholder: string 20 | validators: string 21 | 22 | } 23 | 24 | type ReturnProps = { 25 | readonly value: string 26 | id: string 27 | run: () => string 28 | } 29 | export class NewInput { 30 | id: string; 31 | props: inputprops; 32 | type_: number 33 | /** 34 | * 35 | * @param p 36 | * @param type_ 0 for normal inline input 1 for multiline 37 | */ 38 | constructor(p: inputprops, type_: number) { 39 | this.id = "" 40 | this.props = p 41 | this.type_ = type_ 42 | 43 | } 44 | /** 45 | * load the struct into c memory 46 | */ 47 | load() { 48 | let e = CreateInput(this.type_) 49 | // console.log("create", e) 50 | if (!e) { 51 | throw new Error("Error creating struct in Go") 52 | } 53 | this.id = e 54 | return SetInputOptions(this.id, this.props) 55 | } 56 | 57 | run() { 58 | return huh.RunInput(this.id) 59 | } 60 | get value(){ 61 | return huh.GetValue(this.id) 62 | } 63 | } 64 | 65 | export const Confirm = (title: string, affirmative: string, negative: string): ReturnProps => { 66 | 67 | const i = huh.Confirm(title, affirmative, negative) 68 | return { 69 | id: i, 70 | run: function () { 71 | return huh.Run(this.id) 72 | }, 73 | get value() { 74 | return huh.GetValue(this.id) 75 | } 76 | } 77 | } 78 | export const SetTheme = huh.SetTheme 79 | 80 | export const Select = (title: string, options: string[]): ReturnProps => { 81 | 82 | 83 | const i = huh.Select(title, options.join(",")) 84 | return { 85 | id: i, 86 | run: function () { 87 | return huh.Run(this.id) 88 | }, 89 | get value() { 90 | return huh.GetValue(this.id) 91 | } 92 | 93 | } 94 | 95 | } 96 | 97 | 98 | export const multiSelect = (title: string, options: string[], limit: number = 0): { id: string, run: () => string[], readonly value: string } => { 99 | // will use limit soon 100 | const i = `id_${Date.now()}` 101 | huh.MultiSelect(i, title, options.join(",")) 102 | return { 103 | id: i, 104 | run: function () { 105 | return huh.Run(this.id).split(",") 106 | }, 107 | get value() { 108 | return huh.GetValue(this.id) 109 | } 110 | 111 | } 112 | // const res = huh.RunMultiSelect(title, options.join(",")) 113 | // return res.split(",") 114 | } 115 | 116 | export const Note = (title: string, desc: string, nextlabel: string, next: boolean): { id: string, run: () => string, readonly value: string } => { 117 | 118 | const i = huh.Note(title, desc, nextlabel, next ? 1 : 0) 119 | return { 120 | id: i, 121 | run: function(){ 122 | return huh.Run(this.id) 123 | }, 124 | get value(){ 125 | return "" 126 | 127 | } 128 | } 129 | } 130 | 131 | 132 | export const CreateGroup = huh.CreateGroup 133 | export const CreateForm = huh.CreateForm 134 | export const GetValue = huh.GetValue 135 | // export const Note = huh.Note 136 | export const Spinner = huh.Spinner -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./lipgloss" 2 | export * as huh from "./fields" 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/linker.ts: -------------------------------------------------------------------------------- 1 | //@ts-ignore 2 | import {Library} from "@makeomatic/ffi-napi" 3 | //@ts-ignore 4 | import * as ref from "@makeomatic/ref-napi" 5 | import { platform } from "os" 6 | import path from 'path'; 7 | 8 | import { fileURLToPath } from 'url'; 9 | 10 | let dir:string; 11 | 12 | 13 | if(__dirname){ 14 | dir = __dirname 15 | }else{ 16 | dir = path.dirname(fileURLToPath(import.meta.url)) 17 | } 18 | 19 | // console.dir(Library) 20 | // console.log(dir) 21 | //@ts-ignore 22 | // import * as refStruct from "ref-struct-di" 23 | // const StructType = refStruct(ref) 24 | // var time_t = ref.types.long 25 | // var suseconds_t = ref.types.long 26 | 27 | // // define the "timeval" struct type 28 | // var timeval = StructType({ 29 | // tv_sec: time_t, 30 | // tv_usec: suseconds_t 31 | // }) 32 | 33 | // var tv = new timeval({tv_sec: 0, tv_usec: 0}) 34 | // console.log(tv.ref()) 35 | 36 | // var MyStruct = StructType() 37 | // MyStruct.defineProperty('width', ref.types.int) 38 | // MyStruct.defineProperty('height', ref.types.int) 39 | 40 | // var i = new MyStruct({ width: 5, height: 10 }) 41 | // console.log(i, i.ref()) 42 | 43 | // console.dir(ref.types) 44 | // Function.toString 45 | // console.dir(ref.coerceType.toString()) 46 | // console.dir( ref.writeObject.toString()) 47 | // console.dir( ref.alloc.toString()) 48 | // console.dir(ref.types) 49 | // don't care about object shape, any: 50 | var myobj = ref.types.void // we don't know what the layout of "myobj" looks like 51 | var myobjPtr = ref.refType(myobj); 52 | 53 | // const Inputstruct = { 54 | // id: ref.types.CString, 55 | // placeholder: ref.types.CString, 56 | // description: ref.types.int, 57 | // }; 58 | 59 | // Create the structure type using ref-struct 60 | const Input = ref.types.void 61 | const InputPtr = ref.refType(Input); 62 | 63 | // switch C.GoString(t) { 64 | // case "dracula": 65 | // theme = huh.ThemeDracula() 66 | // case "Charm": 67 | // theme = huh.ThemeCharm() 68 | // case "Catppuccin": 69 | // theme = huh.ThemeCatppuccin() 70 | // case "Base16": 71 | // theme = huh.ThemeBase16() 72 | // default: 73 | // theme = huh.ThemeBase() 74 | // } 75 | 76 | type HuhT ={ 77 | CreateInput(t :number):string 78 | SetInputOptions(ptr:string, title: string, desc: string, placeholder: string, validators: string):number 79 | FreeStruct(ptr:string): number 80 | RunInput(ptr:string): string 81 | Confirm(title:string, affirmative: string, negative: string): string 82 | Select(title:string, opts:string): string 83 | MultiSelect(ptr:string, title:string, opts:string): string 84 | SetTheme(theme:"dracula" | "Charm" | "Catppuccin" | "Base16" | "default"): void 85 | Run(prt:string):string 86 | CreateGroup(ptrs:string):string 87 | CreateForm(ptrs:string):void 88 | GetValue(ptr:string):string 89 | Spinner(seconds: number, title: string): void 90 | Note(title: string, description: string, nextlabel?:string, next?:number):string 91 | 92 | } 93 | 94 | const p = platform() 95 | 96 | let dynamicLib; 97 | if (p === 'win32') { 98 | dynamicLib = './binary/huh.dll'; 99 | } else if (p === 'linux') { 100 | dynamicLib = './binary/huh.so'; 101 | } else { 102 | throw new Error(`Unsupported platform: ${p}. This application only supports Windows and Linux.`); 103 | } 104 | const dllfile = path.resolve(dir, dynamicLib); 105 | 106 | 107 | const huh:HuhT = Library(dllfile, { 108 | "CreateInput": ["string", ["int"]], 109 | "SetInputOptions": ["int", ["string", "string", "string", "string", "string"]], 110 | "FreeStruct": ['int', ["string"]], 111 | "RunInput": ["string", ["string"]], 112 | "Confirm": ["string", ["string", "string", "string"]], 113 | "Select": ["string", ["string", "string"]], 114 | "MultiSelect": ["int", ["string", "string", "string"]], 115 | "SetTheme": ["void", ["string"]], 116 | "Run": ["string", ["string"]], 117 | "CreateGroup": ["string", ["string"]], 118 | "CreateForm": ["void", ["string"]], 119 | "GetValue": ["string", ["string"]], 120 | "Spinner": ["void", ["int", "string"]], 121 | "Note": ["string", ["string", "string", "string", "int"]], 122 | }) 123 | 124 | type inputprops = { 125 | Title: string 126 | Placeholder: string 127 | Description: string 128 | validators: string 129 | } 130 | 131 | export function CreateInput(t: number){ 132 | // const i = ref.refType(opts); 133 | // console.log(i) 134 | // var MyStruct = StructType() 135 | // MyStruct.defineProperty('Description', ref.types.CString) 136 | // MyStruct.defineProperty('Title', ref.types.CString) 137 | // MyStruct.defineProperty('Placeholder', ref.types.CString) 138 | 139 | 140 | // var i = new MyStruct(opts) 141 | // console.log(i) 142 | // console.log("\n") 143 | // console.log(i.ref()) 144 | // var db = ref.alloc("Object") 145 | // ref.writeObject(db, 0, opts) 146 | // console.log(db) 147 | const Ptr = huh.CreateInput(t); 148 | // console.log(Ptr) 149 | return Ptr 150 | } 151 | 152 | export function SetInputOptions(ptr:any, opts:inputprops){ 153 | return huh.SetInputOptions(ptr, opts.Title, opts.Description, opts.Placeholder, opts.validators) 154 | } 155 | 156 | 157 | export const FreeStruct = (prt:any) => { 158 | // console.log("bro wtf") 159 | const m = huh.FreeStruct(prt) 160 | // console.log(m, "m") 161 | return m 162 | } 163 | 164 | export default huh -------------------------------------------------------------------------------- /src/lip.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sklyt/charsm/c82d368ccac38a6d6f2e7c78cede170a4c205b84/src/lip.wasm -------------------------------------------------------------------------------- /src/lipgloss.ts: -------------------------------------------------------------------------------- 1 | 2 | import fs from "fs" 3 | 4 | interface ImportObject { 5 | _gotest: { 6 | add: () => void; 7 | }; 8 | gojs: { 9 | 'runtime.wasmExit': () => void; 10 | 'runtime.wasmWrite': () => void; 11 | 'runtime.resetMemoryDataView': () => void; 12 | 'runtime.nanotime1': () => number; 13 | 'runtime.walltime': () => number; 14 | 'runtime.scheduleTimeoutEvent': () => void; 15 | 'runtime.clearTimeoutEvent': () => void; 16 | 'runtime.getRandomData': () => Uint8Array; 17 | 'syscall/js.finalizeRef': () => void; 18 | 'syscall/js.stringVal': (val: any) => void; 19 | 'syscall/js.valueGet': (val: any) => any; 20 | 'syscall/js.valueSet': (key: any, value: any) => void; 21 | 'syscall/js.valueDelete': (key: any) => void; 22 | 'syscall/js.valueIndex': (index: number) => any; 23 | 'syscall/js.valueSetIndex': (index: number, value: any) => void; 24 | 'syscall/js.valueCall': (val: any, args: any[]) => any; 25 | 'syscall/js.valueInvoke': (val: any, args: any[]) => any; 26 | 'syscall/js.valueNew': (args: any[]) => any; 27 | 'syscall/js.valueLength': (val: any) => number; 28 | 'syscall/js.valuePrepareString': (val: any) => void; 29 | 'syscall/js.valueLoadString': (val: any) => string; 30 | 'syscall/js.valueInstanceOf': (val: any, constructor: any) => boolean; 31 | 'syscall/js.copyBytesToGo': (goSlice: any, jsBytes: Uint8Array) => void; 32 | 'syscall/js.copyBytesToJS': (goSlice: any, jsBytes: Uint8Array) => void; 33 | debug: () => void; 34 | }; 35 | } 36 | 37 | interface gowasm { 38 | argv: string[]; 39 | env: Record; 40 | run: (instance: WebAssembly.Instance) => void; 41 | exit: () => void; 42 | _resolveExitPromise: () => Promise; 43 | _exitPromise: Promise; 44 | _pendingEvent: any; 45 | _scheduledTimeouts: Map; 46 | _nextCallbackTimeoutID: number; 47 | importObject: ImportObject; 48 | } 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | // export async function initLip(){ 58 | // // load the wasm 59 | // const wasmExec = await import('./wasm_exec.js'); 60 | 61 | // wasmExec.default(); 62 | 63 | // const go: gowasm = new (globalThis as any).Go() 64 | // const wasmfile = fs.readFileSync("./src/lip.wasm") 65 | // console.log(wasmfile) 66 | // const res = await WebAssembly.instantiate(wasmfile, go.importObject as unknown as WebAssembly.Imports) 67 | 68 | // if(res){ 69 | // go.run(res.instance) 70 | // const a = 'newStyle' in globalThis 71 | // if(!a){ 72 | // throw new Error("Failed to init wasm") 73 | // } 74 | 75 | 76 | // return true 77 | // } 78 | 79 | 80 | // return false 81 | // } 82 | 83 | 84 | 85 | import path from 'path'; 86 | 87 | import { fileURLToPath } from 'url'; 88 | // const __dirname:string = typeof __dirname !== 'undefined' 89 | // ? __dirname 90 | // : path.dirname(fileURLToPath(import.meta.url)); 91 | 92 | 93 | let dir:string; 94 | 95 | 96 | if(__dirname){ 97 | dir = __dirname 98 | }else{ 99 | dir = path.dirname(fileURLToPath(import.meta.url)) 100 | } 101 | 102 | export async function initLip() { 103 | // Import wasm_exec.js and initialize Go environment 104 | const wasmExec = await import('./wasm_exec'); 105 | wasmExec.default(); 106 | 107 | 108 | 109 | if (!(globalThis as any).Go) { 110 | throw new Error("Failed to initialize Go from wasm_exec.js"); 111 | } 112 | // Create a new Go instance 113 | const go =new (globalThis as any).Go(); 114 | 115 | // Ensure path to the wasm file is correct 116 | const wasmPath = path.resolve(dir, './lip.wasm'); 117 | const wasmfile = fs.readFileSync(wasmPath); 118 | 119 | // Instantiate the WebAssembly module 120 | const res = await WebAssembly.instantiate(wasmfile, go.importObject); 121 | 122 | if (res) { 123 | // Run the Go WASM instance 124 | go.run(res.instance); 125 | 126 | // Check if the WASM module initialized correctly 127 | if (!('createStyle' in globalThis)) { 128 | throw new Error("Failed to init wasm"); 129 | } 130 | 131 | // console.log("WASM loaded successfully"); 132 | return true; 133 | } 134 | 135 | return false; 136 | } 137 | 138 | 139 | 140 | 141 | type adaptiveColor = {Light: string, Dark: string} 142 | type completeAdaptiveColor= { Light:{TrueColor: string, ANSI256: string, ANSI: string}, Dark: {TrueColor: string, ANSI256: string, ANSI: string}} 143 | type completeColor = {TrueColor: string, ANSI256: string, ANSI: string} 144 | 145 | interface style { 146 | id: string 147 | canvasColor?: {color?: string | {adaptiveColor: adaptiveColor} | {completeAdaptiveColor:completeAdaptiveColor} | {completeColor: completeColor}, background?: string| {adaptiveColor: adaptiveColor} | {completeAdaptiveColor:completeAdaptiveColor} | {completeColor: completeColor}} 148 | border?: {type: borderType, foreground?: string, background?: string, sides:Array} 149 | padding?: Array 150 | margin: Array 151 | bold?: boolean 152 | alignV?: lipglosspos 153 | alignH?: lipglosspos 154 | width?: number 155 | height?: number, 156 | maxWidth?: number, 157 | maxHeight?: number 158 | 159 | } 160 | 161 | 162 | interface tableData { 163 | headers: Array 164 | rows: Array> 165 | 166 | } 167 | 168 | interface table{ 169 | data: tableData, 170 | table: {border: borderType, color: string, width?:number, height?:number}, 171 | header?: {color: string, bold: boolean}, 172 | rows?: {even: {color: string}, odd?: {color: string}} 173 | } 174 | 175 | // lip.createStyle({ 176 | // id: "primaryButton", 177 | // canvasColor: {color: "#007BFF", isBackground: true}, 178 | // border: { type: "rounded", foreground: "#0056b3", background: "", sides: [true, false] }, 179 | // padding: [8, 12, 8, 12], 180 | // margin: [0, 0, 10, 0], 181 | // bold: true, 182 | // align: "center", 183 | // width: 100, 184 | // height: 100 185 | // }); 186 | 187 | 188 | // render() 189 | type lipglosspos = "bottom" | "top" | "left" | "right" | "center" 190 | type borderType = "rounded" | "block" | "thick" | "double" 191 | type direction = "vertical" | "horizontal" 192 | 193 | type markdownStyles = "dark" | "light" | "dracula" | "notty" | "tokyo-night" | "ascii" 194 | 195 | type listStyle = "alphabet" | 'arabic' | 'asterisk' | 'custom' 196 | 197 | interface simpleList { 198 | data: Array 199 | selected?: Array 200 | listStyle: listStyle, 201 | customEnum?: string 202 | styles: {numeratorColor: string, itemColor: string, marginRight: number} 203 | } 204 | export class Lipgloss { 205 | 206 | 207 | createStyle(style: style){ 208 | if ("createStyle" in globalThis){ 209 | (globalThis as any).createStyle(style) 210 | } 211 | } 212 | /** 213 | * 214 | * @param config value to render and an optional id for a specific style, if no id is provided the recently created style is applied 215 | * @returns 216 | */ 217 | apply(config: {value: string, id?: string}): string{ 218 | if ("apply" in globalThis){ 219 | return (globalThis as any).apply(config) 220 | } 221 | 222 | return "" 223 | } 224 | 225 | 226 | // lip.join({ 227 | // direction: "vertical", 228 | // position: "bottom", 229 | // elements: ['', ''], 230 | // pc 231 | // }) 232 | join(config: {direction: direction, position:lipglosspos , elements: Array, pc?: number} = {direction: "horizontal", position: "left", elements: ['']}) :string{ 233 | 234 | if("join" in globalThis){ 235 | return (globalThis as any).join(config) 236 | } 237 | 238 | return "" 239 | 240 | } 241 | 242 | newTable(config: table): string { 243 | if("newTable" in globalThis){ 244 | config.data = JSON.stringify(config.data) as any as tableData 245 | return (globalThis as any).newTable(config) 246 | } 247 | return "" 248 | } 249 | 250 | 251 | RenderMD(content: string = "", style: markdownStyles = "dark"): string { 252 | if("RenderMD" in globalThis){ 253 | return (globalThis as any).RenderMD(content, style) 254 | } 255 | 256 | return "" 257 | 258 | } 259 | // console.log(List({data: JSON.stringify(["A", "B", 'C']), selected: JSON.stringify([]), styles: {numeratorColor: "99",itemColor: "212", marginRight: 4 }}) 260 | 261 | List(config: simpleList = {data: [], selected: [], listStyle: "asterisk", customEnum: "→", styles: {numeratorColor: "99", itemColor: "212", marginRight: 1}}):string{ 262 | 263 | if("List" in globalThis){ 264 | return (globalThis as any).List({data: JSON.stringify(config.data),selected: JSON.stringify(config.selected), styles: config.styles, listStyle: config.listStyle, customEnum: config.customEnum}) 265 | } 266 | return "" 267 | } 268 | 269 | // console.log(NdList({data: JSON.stringify(ndO), selected: JSON.stringify(["C", "D"]), listStyle: "custom", customEnum: "→", styles: {numeratorColor: "99",itemColor: "212", marginRight: 4 }, innerStyles: {numeratorColor: "99",itemColor: "212", marginRight: 4, listStyle: "", customEnum: "→", selected: JSON.stringify(["Baking Flour","Eggs" ])}})) 270 | 271 | // NDList(config): string{ 272 | // return "" 273 | // } 274 | } 275 | 276 | 277 | 278 | 279 | 280 | 281 | -------------------------------------------------------------------------------- /src/wasm_exec.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 The Go Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style 3 | // license that can be found in the LICENSE file. 4 | 5 | "use strict"; 6 | 7 | const run = (() => { 8 | const enosys = () => { 9 | const err = new Error("not implemented"); 10 | err.code = "ENOSYS"; 11 | return err; 12 | }; 13 | 14 | if (!globalThis.fs) { 15 | let outputBuf = ""; 16 | globalThis.fs = { 17 | constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused 18 | writeSync(fd, buf) { 19 | outputBuf += decoder.decode(buf); 20 | const nl = outputBuf.lastIndexOf("\n"); 21 | if (nl != -1) { 22 | console.log(outputBuf.substring(0, nl)); 23 | outputBuf = outputBuf.substring(nl + 1); 24 | } 25 | return buf.length; 26 | }, 27 | write(fd, buf, offset, length, position, callback) { 28 | if (offset !== 0 || length !== buf.length || position !== null) { 29 | callback(enosys()); 30 | return; 31 | } 32 | const n = this.writeSync(fd, buf); 33 | callback(null, n); 34 | }, 35 | chmod(path, mode, callback) { callback(enosys()); }, 36 | chown(path, uid, gid, callback) { callback(enosys()); }, 37 | close(fd, callback) { callback(enosys()); }, 38 | fchmod(fd, mode, callback) { callback(enosys()); }, 39 | fchown(fd, uid, gid, callback) { callback(enosys()); }, 40 | fstat(fd, callback) { callback(enosys()); }, 41 | fsync(fd, callback) { callback(null); }, 42 | ftruncate(fd, length, callback) { callback(enosys()); }, 43 | lchown(path, uid, gid, callback) { callback(enosys()); }, 44 | link(path, link, callback) { callback(enosys()); }, 45 | lstat(path, callback) { callback(enosys()); }, 46 | mkdir(path, perm, callback) { callback(enosys()); }, 47 | open(path, flags, mode, callback) { callback(enosys()); }, 48 | read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, 49 | readdir(path, callback) { callback(enosys()); }, 50 | readlink(path, callback) { callback(enosys()); }, 51 | rename(from, to, callback) { callback(enosys()); }, 52 | rmdir(path, callback) { callback(enosys()); }, 53 | stat(path, callback) { callback(enosys()); }, 54 | symlink(path, link, callback) { callback(enosys()); }, 55 | truncate(path, length, callback) { callback(enosys()); }, 56 | unlink(path, callback) { callback(enosys()); }, 57 | utimes(path, atime, mtime, callback) { callback(enosys()); }, 58 | }; 59 | } 60 | 61 | if (!globalThis.process) { 62 | globalThis.process = { 63 | getuid() { return -1; }, 64 | getgid() { return -1; }, 65 | geteuid() { return -1; }, 66 | getegid() { return -1; }, 67 | getgroups() { throw enosys(); }, 68 | pid: -1, 69 | ppid: -1, 70 | umask() { throw enosys(); }, 71 | cwd() { throw enosys(); }, 72 | chdir() { throw enosys(); }, 73 | } 74 | } 75 | 76 | if (!globalThis.crypto) { 77 | throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)"); 78 | } 79 | 80 | if (!globalThis.performance) { 81 | throw new Error("globalThis.performance is not available, polyfill required (performance.now only)"); 82 | } 83 | 84 | if (!globalThis.TextEncoder) { 85 | throw new Error("globalThis.TextEncoder is not available, polyfill required"); 86 | } 87 | 88 | if (!globalThis.TextDecoder) { 89 | throw new Error("globalThis.TextDecoder is not available, polyfill required"); 90 | } 91 | 92 | const encoder = new TextEncoder("utf-8"); 93 | const decoder = new TextDecoder("utf-8"); 94 | 95 | globalThis.Go = class { 96 | constructor() { 97 | this.argv = ["js"]; 98 | this.env = {}; 99 | this.exit = (code) => { 100 | if (code !== 0) { 101 | console.warn("exit code:", code); 102 | } 103 | }; 104 | this._exitPromise = new Promise((resolve) => { 105 | this._resolveExitPromise = resolve; 106 | }); 107 | this._pendingEvent = null; 108 | this._scheduledTimeouts = new Map(); 109 | this._nextCallbackTimeoutID = 1; 110 | 111 | const setInt64 = (addr, v) => { 112 | this.mem.setUint32(addr + 0, v, true); 113 | this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true); 114 | } 115 | 116 | const setInt32 = (addr, v) => { 117 | this.mem.setUint32(addr + 0, v, true); 118 | } 119 | 120 | const getInt64 = (addr) => { 121 | const low = this.mem.getUint32(addr + 0, true); 122 | const high = this.mem.getInt32(addr + 4, true); 123 | return low + high * 4294967296; 124 | } 125 | 126 | const loadValue = (addr) => { 127 | const f = this.mem.getFloat64(addr, true); 128 | if (f === 0) { 129 | return undefined; 130 | } 131 | if (!isNaN(f)) { 132 | return f; 133 | } 134 | 135 | const id = this.mem.getUint32(addr, true); 136 | return this._values[id]; 137 | } 138 | 139 | const storeValue = (addr, v) => { 140 | const nanHead = 0x7FF80000; 141 | 142 | if (typeof v === "number" && v !== 0) { 143 | if (isNaN(v)) { 144 | this.mem.setUint32(addr + 4, nanHead, true); 145 | this.mem.setUint32(addr, 0, true); 146 | return; 147 | } 148 | this.mem.setFloat64(addr, v, true); 149 | return; 150 | } 151 | 152 | if (v === undefined) { 153 | this.mem.setFloat64(addr, 0, true); 154 | return; 155 | } 156 | 157 | let id = this._ids.get(v); 158 | if (id === undefined) { 159 | id = this._idPool.pop(); 160 | if (id === undefined) { 161 | id = this._values.length; 162 | } 163 | this._values[id] = v; 164 | this._goRefCounts[id] = 0; 165 | this._ids.set(v, id); 166 | } 167 | this._goRefCounts[id]++; 168 | let typeFlag = 0; 169 | switch (typeof v) { 170 | case "object": 171 | if (v !== null) { 172 | typeFlag = 1; 173 | } 174 | break; 175 | case "string": 176 | typeFlag = 2; 177 | break; 178 | case "symbol": 179 | typeFlag = 3; 180 | break; 181 | case "function": 182 | typeFlag = 4; 183 | break; 184 | } 185 | this.mem.setUint32(addr + 4, nanHead | typeFlag, true); 186 | this.mem.setUint32(addr, id, true); 187 | } 188 | 189 | const loadSlice = (addr) => { 190 | const array = getInt64(addr + 0); 191 | const len = getInt64(addr + 8); 192 | return new Uint8Array(this._inst.exports.mem.buffer, array, len); 193 | } 194 | 195 | const loadSliceOfValues = (addr) => { 196 | const array = getInt64(addr + 0); 197 | const len = getInt64(addr + 8); 198 | const a = new Array(len); 199 | for (let i = 0; i < len; i++) { 200 | a[i] = loadValue(array + i * 8); 201 | } 202 | return a; 203 | } 204 | 205 | const loadString = (addr) => { 206 | const saddr = getInt64(addr + 0); 207 | const len = getInt64(addr + 8); 208 | return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len)); 209 | } 210 | 211 | const timeOrigin = Date.now() - performance.now(); 212 | this.importObject = { 213 | _gotest: { 214 | add: (a, b) => a + b, 215 | }, 216 | gojs: { 217 | // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters) 218 | // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported 219 | // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function). 220 | // This changes the SP, thus we have to update the SP used by the imported function. 221 | 222 | // func wasmExit(code int32) 223 | "runtime.wasmExit": (sp) => { 224 | sp >>>= 0; 225 | const code = this.mem.getInt32(sp + 8, true); 226 | this.exited = true; 227 | delete this._inst; 228 | delete this._values; 229 | delete this._goRefCounts; 230 | delete this._ids; 231 | delete this._idPool; 232 | this.exit(code); 233 | }, 234 | 235 | // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32) 236 | "runtime.wasmWrite": (sp) => { 237 | sp >>>= 0; 238 | const fd = getInt64(sp + 8); 239 | const p = getInt64(sp + 16); 240 | const n = this.mem.getInt32(sp + 24, true); 241 | fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n)); 242 | }, 243 | 244 | // func resetMemoryDataView() 245 | "runtime.resetMemoryDataView": (sp) => { 246 | sp >>>= 0; 247 | this.mem = new DataView(this._inst.exports.mem.buffer); 248 | }, 249 | 250 | // func nanotime1() int64 251 | "runtime.nanotime1": (sp) => { 252 | sp >>>= 0; 253 | setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000); 254 | }, 255 | 256 | // func walltime() (sec int64, nsec int32) 257 | "runtime.walltime": (sp) => { 258 | sp >>>= 0; 259 | const msec = (new Date).getTime(); 260 | setInt64(sp + 8, msec / 1000); 261 | this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true); 262 | }, 263 | 264 | // func scheduleTimeoutEvent(delay int64) int32 265 | "runtime.scheduleTimeoutEvent": (sp) => { 266 | sp >>>= 0; 267 | const id = this._nextCallbackTimeoutID; 268 | this._nextCallbackTimeoutID++; 269 | this._scheduledTimeouts.set(id, setTimeout( 270 | () => { 271 | this._resume(); 272 | while (this._scheduledTimeouts.has(id)) { 273 | // for some reason Go failed to register the timeout event, log and try again 274 | // (temporary workaround for https://github.com/golang/go/issues/28975) 275 | console.warn("scheduleTimeoutEvent: missed timeout event"); 276 | this._resume(); 277 | } 278 | }, 279 | getInt64(sp + 8), 280 | )); 281 | this.mem.setInt32(sp + 16, id, true); 282 | }, 283 | 284 | // func clearTimeoutEvent(id int32) 285 | "runtime.clearTimeoutEvent": (sp) => { 286 | sp >>>= 0; 287 | const id = this.mem.getInt32(sp + 8, true); 288 | clearTimeout(this._scheduledTimeouts.get(id)); 289 | this._scheduledTimeouts.delete(id); 290 | }, 291 | 292 | // func getRandomData(r []byte) 293 | "runtime.getRandomData": (sp) => { 294 | sp >>>= 0; 295 | crypto.getRandomValues(loadSlice(sp + 8)); 296 | }, 297 | 298 | // func finalizeRef(v ref) 299 | "syscall/js.finalizeRef": (sp) => { 300 | sp >>>= 0; 301 | const id = this.mem.getUint32(sp + 8, true); 302 | this._goRefCounts[id]--; 303 | if (this._goRefCounts[id] === 0) { 304 | const v = this._values[id]; 305 | this._values[id] = null; 306 | this._ids.delete(v); 307 | this._idPool.push(id); 308 | } 309 | }, 310 | 311 | // func stringVal(value string) ref 312 | "syscall/js.stringVal": (sp) => { 313 | sp >>>= 0; 314 | storeValue(sp + 24, loadString(sp + 8)); 315 | }, 316 | 317 | // func valueGet(v ref, p string) ref 318 | "syscall/js.valueGet": (sp) => { 319 | sp >>>= 0; 320 | const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16)); 321 | sp = this._inst.exports.getsp() >>> 0; // see comment above 322 | storeValue(sp + 32, result); 323 | }, 324 | 325 | // func valueSet(v ref, p string, x ref) 326 | "syscall/js.valueSet": (sp) => { 327 | sp >>>= 0; 328 | Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32)); 329 | }, 330 | 331 | // func valueDelete(v ref, p string) 332 | "syscall/js.valueDelete": (sp) => { 333 | sp >>>= 0; 334 | Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16)); 335 | }, 336 | 337 | // func valueIndex(v ref, i int) ref 338 | "syscall/js.valueIndex": (sp) => { 339 | sp >>>= 0; 340 | storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16))); 341 | }, 342 | 343 | // valueSetIndex(v ref, i int, x ref) 344 | "syscall/js.valueSetIndex": (sp) => { 345 | sp >>>= 0; 346 | Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24)); 347 | }, 348 | 349 | // func valueCall(v ref, m string, args []ref) (ref, bool) 350 | "syscall/js.valueCall": (sp) => { 351 | sp >>>= 0; 352 | try { 353 | const v = loadValue(sp + 8); 354 | const m = Reflect.get(v, loadString(sp + 16)); 355 | const args = loadSliceOfValues(sp + 32); 356 | const result = Reflect.apply(m, v, args); 357 | sp = this._inst.exports.getsp() >>> 0; // see comment above 358 | storeValue(sp + 56, result); 359 | this.mem.setUint8(sp + 64, 1); 360 | } catch (err) { 361 | sp = this._inst.exports.getsp() >>> 0; // see comment above 362 | storeValue(sp + 56, err); 363 | this.mem.setUint8(sp + 64, 0); 364 | } 365 | }, 366 | 367 | // func valueInvoke(v ref, args []ref) (ref, bool) 368 | "syscall/js.valueInvoke": (sp) => { 369 | sp >>>= 0; 370 | try { 371 | const v = loadValue(sp + 8); 372 | const args = loadSliceOfValues(sp + 16); 373 | const result = Reflect.apply(v, undefined, args); 374 | sp = this._inst.exports.getsp() >>> 0; // see comment above 375 | storeValue(sp + 40, result); 376 | this.mem.setUint8(sp + 48, 1); 377 | } catch (err) { 378 | sp = this._inst.exports.getsp() >>> 0; // see comment above 379 | storeValue(sp + 40, err); 380 | this.mem.setUint8(sp + 48, 0); 381 | } 382 | }, 383 | 384 | // func valueNew(v ref, args []ref) (ref, bool) 385 | "syscall/js.valueNew": (sp) => { 386 | sp >>>= 0; 387 | try { 388 | const v = loadValue(sp + 8); 389 | const args = loadSliceOfValues(sp + 16); 390 | const result = Reflect.construct(v, args); 391 | sp = this._inst.exports.getsp() >>> 0; // see comment above 392 | storeValue(sp + 40, result); 393 | this.mem.setUint8(sp + 48, 1); 394 | } catch (err) { 395 | sp = this._inst.exports.getsp() >>> 0; // see comment above 396 | storeValue(sp + 40, err); 397 | this.mem.setUint8(sp + 48, 0); 398 | } 399 | }, 400 | 401 | // func valueLength(v ref) int 402 | "syscall/js.valueLength": (sp) => { 403 | sp >>>= 0; 404 | setInt64(sp + 16, parseInt(loadValue(sp + 8).length)); 405 | }, 406 | 407 | // valuePrepareString(v ref) (ref, int) 408 | "syscall/js.valuePrepareString": (sp) => { 409 | sp >>>= 0; 410 | const str = encoder.encode(String(loadValue(sp + 8))); 411 | storeValue(sp + 16, str); 412 | setInt64(sp + 24, str.length); 413 | }, 414 | 415 | // valueLoadString(v ref, b []byte) 416 | "syscall/js.valueLoadString": (sp) => { 417 | sp >>>= 0; 418 | const str = loadValue(sp + 8); 419 | loadSlice(sp + 16).set(str); 420 | }, 421 | 422 | // func valueInstanceOf(v ref, t ref) bool 423 | "syscall/js.valueInstanceOf": (sp) => { 424 | sp >>>= 0; 425 | this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0); 426 | }, 427 | 428 | // func copyBytesToGo(dst []byte, src ref) (int, bool) 429 | "syscall/js.copyBytesToGo": (sp) => { 430 | sp >>>= 0; 431 | const dst = loadSlice(sp + 8); 432 | const src = loadValue(sp + 32); 433 | if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) { 434 | this.mem.setUint8(sp + 48, 0); 435 | return; 436 | } 437 | const toCopy = src.subarray(0, dst.length); 438 | dst.set(toCopy); 439 | setInt64(sp + 40, toCopy.length); 440 | this.mem.setUint8(sp + 48, 1); 441 | }, 442 | 443 | // func copyBytesToJS(dst ref, src []byte) (int, bool) 444 | "syscall/js.copyBytesToJS": (sp) => { 445 | sp >>>= 0; 446 | const dst = loadValue(sp + 8); 447 | const src = loadSlice(sp + 16); 448 | if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) { 449 | this.mem.setUint8(sp + 48, 0); 450 | return; 451 | } 452 | const toCopy = src.subarray(0, dst.length); 453 | dst.set(toCopy); 454 | setInt64(sp + 40, toCopy.length); 455 | this.mem.setUint8(sp + 48, 1); 456 | }, 457 | 458 | "debug": (value) => { 459 | console.log(value); 460 | }, 461 | } 462 | }; 463 | } 464 | 465 | async run(instance) { 466 | if (!(instance instanceof WebAssembly.Instance)) { 467 | throw new Error("Go.run: WebAssembly.Instance expected"); 468 | } 469 | this._inst = instance; 470 | this.mem = new DataView(this._inst.exports.mem.buffer); 471 | this._values = [ // JS values that Go currently has references to, indexed by reference id 472 | NaN, 473 | 0, 474 | null, 475 | true, 476 | false, 477 | globalThis, 478 | this, 479 | ]; 480 | this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id 481 | this._ids = new Map([ // mapping from JS values to reference ids 482 | [0, 1], 483 | [null, 2], 484 | [true, 3], 485 | [false, 4], 486 | [globalThis, 5], 487 | [this, 6], 488 | ]); 489 | this._idPool = []; // unused ids that have been garbage collected 490 | this.exited = false; // whether the Go program has exited 491 | 492 | // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory. 493 | let offset = 4096; 494 | 495 | const strPtr = (str) => { 496 | const ptr = offset; 497 | const bytes = encoder.encode(str + "\0"); 498 | new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes); 499 | offset += bytes.length; 500 | if (offset % 8 !== 0) { 501 | offset += 8 - (offset % 8); 502 | } 503 | return ptr; 504 | }; 505 | 506 | const argc = this.argv.length; 507 | 508 | const argvPtrs = []; 509 | this.argv.forEach((arg) => { 510 | argvPtrs.push(strPtr(arg)); 511 | }); 512 | argvPtrs.push(0); 513 | 514 | const keys = Object.keys(this.env).sort(); 515 | keys.forEach((key) => { 516 | argvPtrs.push(strPtr(`${key}=${this.env[key]}`)); 517 | }); 518 | argvPtrs.push(0); 519 | 520 | const argv = offset; 521 | argvPtrs.forEach((ptr) => { 522 | this.mem.setUint32(offset, ptr, true); 523 | this.mem.setUint32(offset + 4, 0, true); 524 | offset += 8; 525 | }); 526 | 527 | // The linker guarantees global data starts from at least wasmMinDataAddr. 528 | // Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr. 529 | const wasmMinDataAddr = 4096 + 8192; 530 | if (offset >= wasmMinDataAddr) { 531 | throw new Error("total length of command line and environment variables exceeds limit"); 532 | } 533 | 534 | this._inst.exports.run(argc, argv); 535 | if (this.exited) { 536 | this._resolveExitPromise(); 537 | } 538 | await this._exitPromise; 539 | } 540 | 541 | _resume() { 542 | if (this.exited) { 543 | throw new Error("Go program has already exited"); 544 | } 545 | this._inst.exports.resume(); 546 | if (this.exited) { 547 | this._resolveExitPromise(); 548 | } 549 | } 550 | 551 | _makeFuncWrapper(id) { 552 | const go = this; 553 | return function () { 554 | const event = { id: id, this: this, args: arguments }; 555 | go._pendingEvent = event; 556 | go._resume(); 557 | return event.result; 558 | }; 559 | } 560 | } 561 | }) 562 | 563 | 564 | module.exports = run 565 | 566 | 567 | 568 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ESNext", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ 43 | // "resolveJsonModule": true, /* Enable importing .json files. */ 44 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 45 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 46 | 47 | /* JavaScript Support */ 48 | "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 49 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 50 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 51 | 52 | /* Emit */ 53 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 54 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 55 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 56 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 57 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 58 | "noEmit": true, /* Disable emitting files from a compilation. */ 59 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 60 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 61 | // "removeComments": true, /* Disable emitting comments. */ 62 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | 75 | /* Interop Constraints */ 76 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 77 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 78 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ 92 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 93 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 94 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 95 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 96 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 97 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 98 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 99 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 100 | "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 101 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 102 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 103 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 104 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 105 | 106 | /* Completeness */ 107 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 108 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 109 | }, 110 | 111 | "include": ["src/**/*"] 112 | 113 | } 114 | --------------------------------------------------------------------------------