From b47153fccd5d999b1961117fd460a0c026744ab3 Mon Sep 17 00:00:00 2001 From: Alexander Forbes-Reed Date: Mon, 8 Jun 2026 16:36:13 +0200 Subject: [PATCH] feat: migrate to extension-sdk v2 + general polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beak's realtime-values system jumped to apiVersion 2 — single `resolve` returning a typed `ResolvedValue`, no more `getValue` + parallel `getAssetRef`. This template now declares `apiVersion: 2`, uses `defineExtension` + `defineVariable`, and shows the new contract. What changed: - Imports `@getbeak/extension-sdk` instead of the deprecated `@getbeak/types-variables`. - Single-variable default export replaced with `defineExtension({ variables: [...] })` — one package can contribute multiple variables, and we want the template to show that shape. - `getValue(ctx, payload, depth)` → `resolve(extCtx, ctx, payload)` returning `{ kind: 'text', text }`. `extCtx.parseValueSections` replaces the old `beakApi` global. - Inline JSDoc walks the reader through every relevant piece of the contract — `id`, `resolve`'s ResolvedValue shape, `extCtx`, `ctx`, the sink-coercion model, and the editor block — so this file alone is enough to copy and modify. Polish: - package.json gains a description, keywords, repository, scripts (typecheck, lint, format, check), and a `beak.apiVersion: 2` manifest field. - Major bump to 2.0.0 (template's own version, distinct from the apiVersion). - tsconfig.json strictened: `noUnusedLocals`, `noImplicitAny`, `isolatedModules`, `noEmit`, `moduleResolution: Bundler`. - esbuild: target=es2022, platform=neutral (the isolate isn't Node), format=cjs, no more `--minify` (debugging in the sandbox is easier with readable source). - Biome config matching the Beak monorepo's house style. - README rewritten to walk a new author through (a) the quickstart, (b) the v2 contract in one sentence, (c) the sandbox model. Links the SDK migration guide and the sibling lorem-swiftsum extension. - GitHub Actions CI runs lint + typecheck + build on every push/PR. - .editorconfig + tidier .gitignore. - yarn.lock removed; pnpm is the new default but the build works under yarn / npm too. --- .editorconfig | 13 +++ .github/workflows/ci.yml | 38 +++++++++ .gitignore | 6 ++ README.md | 99 ++++++++++++++++++++--- biome.json | 47 +++++++++++ package.json | 57 +++++++++---- src/index.ts | 99 +++++++++++++++-------- tsconfig.json | 26 ++++-- yarn.lock | 170 --------------------------------------- 9 files changed, 318 insertions(+), 237 deletions(-) create mode 100644 .editorconfig create mode 100644 .github/workflows/ci.yml create mode 100644 biome.json delete mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bff9042 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = tab +indent_size = 1 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{json,yml,yaml,md}] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6b9f0e5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,38 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + - run: pnpm install --frozen-lockfile + + - name: Lint + run: pnpm lint + + - name: Typecheck + run: pnpm typecheck + + - name: Build + run: pnpm build + + - name: Confirm bundle exists + run: test -s dist/index.js diff --git a/.gitignore b/.gitignore index 1eae0cf..5f40d50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ dist/ node_modules/ + +# Lock files — we ship pnpm-lock.yaml but also welcome yarn / npm +# contributors; the build doesn't depend on a specific manager. +.pnp.* +.yarn/ +yarn-error.log diff --git a/README.md b/README.md index d7c171d..d74681b 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,95 @@ -# Beak variable extension +# Beak variable extension template -**Note: The Beak Extensions API is still in an experimental phase, and so are the docs.** +A starting point for a [Beak](https://getbeak.app) realtime-value +variable extension. Fork, rename, replace the example variable with +yours, and ship. -This is a template repo to help you get started building a variable extension for Beak. +The template targets the v2 extension SDK +(`@getbeak/extension-sdk@^0.3.0`) and ships an `apiVersion: 2` +manifest. For older Beak releases on `apiVersion: 1`, fork from the +[`v1` tag](https://github.com/getbeak/extension-variable-template/releases) +instead. ## About Beak -Beak is a cross-platform API crafting tool that makes it easy to build and test API's across platforms and teams. +Beak is a cross-platform API crafting tool for building and testing +APIs across platforms and teams. Extensions plug into its +realtime-value system — anywhere a string can go (URL, headers, body, +form fields, variable-set values), a variable extension can compute it. -## Getting started +## Quickstart -- Clone this repo wherever you want -- Make the whatever changes you want -- Update the name of the extension in the `package.json` -- Add this package as a dependency in the `extensions` folder of your Beak project -- Run `yarn` -- Restart Beak +```sh +git clone https://github.com/getbeak/extension-variable-template.git my-extension +cd my-extension +pnpm install +pnpm build +``` + +The bundle lands at `dist/index.js`. Beak loads that file when it sees +this package in your project's `extensions/` folder. + +### What to change + +1. **Rename in `package.json`** — set `name`, `description`, `author`, etc. +2. **Rewrite `src/index.ts`** — the example variable computes square + roots. Replace it with your own. One package can contribute multiple + variables; add more `defineVariable(...)` entries to the `variables` + array. +3. **Build** — `pnpm build`. +4. **Install into a Beak project** — add this package as a dependency + of your project's `extensions/` folder. Beak picks the change up + live; no restart needed. + +## The v2 contract in one sentence + +Each variable exposes one `resolve(extCtx, ctx, payload)` callback that +returns a `ResolvedValue`: + +```ts +type ResolvedValue = + | { kind: 'text'; text: string; contentType?: string } + | { kind: 'bytes'; bytes: Uint8Array; contentType?: string } + | { kind: 'asset'; ref: AssetRef } + | { kind: 'stream'; stream: ReadableStream; size?: number; contentType?: string }; +``` + +The renderer coerces between any kind and the consumer's expected sink +(`text` / `binary` / `stream`), so most variables can just return text. +The `ctx.sink.kind` parameter is there if you want to optimise — e.g. a +file-reading variable returning `{ kind: 'asset' }` for a binary sink +skips a UTF-8 round-trip. + +See the [extension SDK migration guide](https://github.com/getbeak/beak/blob/master/docs/extension-sdk-v2-migration.md) +for the full surface (sinks, editors, sandbox model). + +## Scripts + +| Script | Purpose | +| ---------------- | -------------------------------------------------------------------- | +| `pnpm build` | Clean, type-check, then bundle `src/index.ts` to `dist/index.js`. | +| `pnpm typecheck` | `tsc --noEmit` against `tsconfig.json`. | +| `pnpm lint` | Biome lint. | +| `pnpm format` | Biome auto-format. | +| `pnpm check` | Biome lint + format + organize imports, applies fixes. | + +## Sandbox model + +Extensions run in an isolated V8 context (or a Web Worker on the web +shell). The only host-provided functionality is what arrives on the +`extCtx` argument — `log` for structured logging, `parseValueSections` +to recurse into Beak's variable system. Extensions have **no** +filesystem, network, `process`, or `require` access. Write pure +functions; Beak provides the IO. + +## Links + +- Beak — https://getbeak.app +- Docs — https://docs.getbeak.app +- [`@getbeak/extension-sdk`](https://www.npmjs.com/package/@getbeak/extension-sdk) +- [Example extension (Lorem Swiftsum)](https://github.com/getbeak/extension-variable-lorem-swiftsum) +- [SDK migration guide](https://github.com/getbeak/beak/blob/master/docs/extension-sdk-v2-migration.md) + +## License + +MIT diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..1ea005f --- /dev/null +++ b/biome.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "includes": ["src/**/*.ts", "*.json"] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "indentWidth": 1, + "lineWidth": 120, + "lineEnding": "lf" + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "jsxQuoteStyle": "single", + "trailingCommas": "all", + "semicolons": "always", + "arrowParentheses": "asNeeded" + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedImports": "error", + "noUnusedVariables": "error" + }, + "style": { + "useImportType": "error", + "useTemplate": "warn" + }, + "suspicious": { + "noConsole": { + "level": "error", + "options": { "allow": ["info", "warn", "error"] } + } + } + } + } +} diff --git a/package.json b/package.json index 29bd111..192569f 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,42 @@ { - "name": "@getbeak/extension-variable-template", - "version": "1.0.0", - "main": "dist/index.js", - "beakExtensionType": "variable", - "author": "Alexander Forbes-Reed ", - "license": "MIT", - "type": "module", - "devDependencies": { - "@getbeak/types": "^2.1.0", - "@getbeak/types-variables": "^2.1.0", - "esbuild": "^0.24.0", - "typescript": "^5.6.3" - }, - "scripts": { - "build": "esbuild src/index.ts --outfile=dist/index.js --bundle --target=node14 --minify --platform=node", - "prebuild": "tsc --noEmit" - } + "name": "@getbeak/extension-variable-template", + "version": "2.0.0", + "description": "Template for a Beak variable extension. Fork and rename to start your own.", + "main": "dist/index.js", + "beakExtensionType": "variable", + "beak": { + "apiVersion": 2 + }, + "private": true, + "author": "Alexander Forbes-Reed ", + "license": "MIT", + "type": "module", + "keywords": [ + "beak", + "beak-extension", + "variable", + "realtime-value", + "template" + ], + "repository": { + "type": "git", + "url": "https://github.com/getbeak/extension-variable-template.git" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "pnpm clean && pnpm typecheck && esbuild src/index.ts --outfile=dist/index.js --bundle --target=es2022 --format=cjs --platform=neutral --main-fields=main", + "clean": "rm -rf dist", + "typecheck": "tsc --noEmit", + "lint": "biome lint .", + "format": "biome format --write .", + "check": "biome check --write ." + }, + "devDependencies": { + "@biomejs/biome": "^2.4.16", + "@getbeak/extension-sdk": "^0.3.0", + "esbuild": "^0.24.0", + "typescript": "^5.6.3" + } } diff --git a/src/index.ts b/src/index.ts index b27abad..61e8cd9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,40 +1,73 @@ -import type { ValueSections } from '@getbeak/types/values'; -import type { EditableVariable } from '@getbeak/types-variables'; +/** + * Beak variable extension template. + * + * Replace the variable below with your own. One extension can contribute + * multiple variables — just add more `defineVariable(...)` entries to the + * `variables` array. + * + * Quick reference: + * + * - `id` is the stable identifier inside this package. Combined with the + * package name to form the fully-qualified type Beak uses internally + * (`external:/`). Renaming it is a breaking change + * for any project referencing the variable. + * + * - `resolve(extCtx, ctx, payload)` is the single hook Beak calls when + * it needs the variable's value. Return one of: + * - `{ kind: 'text', text }` ← string output + * - `{ kind: 'bytes', bytes, contentType? }` ← in-memory binary + * - `{ kind: 'asset', ref }` ← content-addressed file + * - `{ kind: 'stream', stream, size?, contentType? }` ← ReadableStream + * + * The renderer coerces between these and the consumer's sink kind + * (text / binary / stream), so most variables can just return text. + * + * - `extCtx` provides host helpers — `log()` and + * `parseValueSections()` (recurse into Beak's variable system). + * `ctx.variableContext` carries the project tree, variable sets, + * flight history, and the current request id. `ctx.sink.kind` tells + * you what shape the consumer wants if you can optimise for it. + * + * - `editor` is optional. When present, double-clicking the variable + * blob in the editor opens the popover you describe. + */ -interface Payload { +import type { ValueSections } from '@getbeak/extension-sdk'; +import { defineExtension, defineVariable } from '@getbeak/extension-sdk'; + +interface SquareRootPayload { value: ValueSections; } -const extension: EditableVariable = { - name: 'Square root', - description: 'Calculates the square root of a number.', - sensitive: false, - attributes: { - requiresRequestId: false, - }, - - createDefaultPayload: async () => ({ value: [] }), - getValue: async (ctx, payload) => { - // Use the BeakAPI to take the array of value parts, and parse them into a string - const parsed = await beakApi.parseValueSections(ctx, payload.value); - - // Take the parsed string and convert it to an integer - const integer = parseInt(parsed, 10) || 0; - - // Calculate the square root - return Math.sqrt(integer).toString(10); - }, +export default defineExtension({ + variables: [ + defineVariable({ + id: 'squareRoot', + name: 'Square root', + description: 'Calculates the square root of a number.', + keywords: ['math', 'sqrt', 'square', 'root'], - editor: { - createUserInterface: async () => [{ - type: 'value_parts_input', - stateBinding: 'value', - label: 'What do you want to square root?', - }], + createDefaultPayload: () => ({ value: [] }), - load: async (_ctx, payload) => payload, - save: async (_ctx, _existingPayload, state) => state, - }, -}; + resolve: async (extCtx, ctx, payload) => { + // `parseValueSections` recurses into Beak's variable system so + // the inner value can itself contain other variables. + const parsed = await extCtx.parseValueSections(ctx.variableContext, payload.value); + const integer = Number.parseInt(parsed, 10) || 0; + return { kind: 'text', text: Math.sqrt(integer).toString(10) }; + }, -export default extension; + editor: { + createUserInterface: () => [ + { + type: 'value_parts_input', + stateBinding: 'value', + label: 'What do you want to square root?', + }, + ], + load: (_extCtx, _ctx, payload) => payload, + save: (_extCtx, _ctx, _existing, state) => state, + }, + }), + ], +}); diff --git a/tsconfig.json b/tsconfig.json index ba0410b..4ef2bcb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,22 @@ { - "compilerOptions": { - "strict": true, - "strictNullChecks": true, - "target": "ES2022", - "moduleResolution": "node" - } + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "isolatedModules": true, + "noEmit": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 617c2ed..0000000 --- a/yarn.lock +++ /dev/null @@ -1,170 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" - integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== - -"@esbuild/android-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0" - integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== - -"@esbuild/android-arm@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810" - integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== - -"@esbuild/android-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705" - integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== - -"@esbuild/darwin-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd" - integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== - -"@esbuild/darwin-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107" - integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== - -"@esbuild/freebsd-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7" - integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== - -"@esbuild/freebsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93" - integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== - -"@esbuild/linux-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75" - integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== - -"@esbuild/linux-arm@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d" - integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== - -"@esbuild/linux-ia32@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb" - integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== - -"@esbuild/linux-loong64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c" - integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== - -"@esbuild/linux-mips64el@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3" - integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== - -"@esbuild/linux-ppc64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e" - integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== - -"@esbuild/linux-riscv64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25" - integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== - -"@esbuild/linux-s390x@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319" - integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== - -"@esbuild/linux-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef" - integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== - -"@esbuild/netbsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c" - integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== - -"@esbuild/openbsd-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2" - integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== - -"@esbuild/openbsd-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf" - integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== - -"@esbuild/sunos-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4" - integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== - -"@esbuild/win32-arm64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b" - integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== - -"@esbuild/win32-ia32@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103" - integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== - -"@esbuild/win32-x64@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244" - integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== - -"@getbeak/types-variables@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@getbeak/types-variables/-/types-variables-2.1.0.tgz#d64f86958f0d6ce55e590c6286f73ca5f5a995b6" - integrity sha512-6YB+8GRsPUVkGcmzvdU15gnEsyaLfAcEK1Cw7DPTsIrjzY14poDqxZcNxDay7mhAy4jgY0dwLi/WpKMOi3U+OQ== - dependencies: - "@getbeak/types" "2.1.0" - -"@getbeak/types@2.1.0", "@getbeak/types@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@getbeak/types/-/types-2.1.0.tgz#a1f0c8d5d2bafee8fd97a0e7c267c319547b0f3e" - integrity sha512-m9SvslPBJao0lONkQ5DEpecX2ZDkmA82SS8xbcoor+Xpzs6mnd79c+532OTgQIGhPghJgffVCk1nxzvugzJsVA== - -esbuild@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7" - integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== - optionalDependencies: - "@esbuild/aix-ppc64" "0.24.0" - "@esbuild/android-arm" "0.24.0" - "@esbuild/android-arm64" "0.24.0" - "@esbuild/android-x64" "0.24.0" - "@esbuild/darwin-arm64" "0.24.0" - "@esbuild/darwin-x64" "0.24.0" - "@esbuild/freebsd-arm64" "0.24.0" - "@esbuild/freebsd-x64" "0.24.0" - "@esbuild/linux-arm" "0.24.0" - "@esbuild/linux-arm64" "0.24.0" - "@esbuild/linux-ia32" "0.24.0" - "@esbuild/linux-loong64" "0.24.0" - "@esbuild/linux-mips64el" "0.24.0" - "@esbuild/linux-ppc64" "0.24.0" - "@esbuild/linux-riscv64" "0.24.0" - "@esbuild/linux-s390x" "0.24.0" - "@esbuild/linux-x64" "0.24.0" - "@esbuild/netbsd-x64" "0.24.0" - "@esbuild/openbsd-arm64" "0.24.0" - "@esbuild/openbsd-x64" "0.24.0" - "@esbuild/sunos-x64" "0.24.0" - "@esbuild/win32-arm64" "0.24.0" - "@esbuild/win32-ia32" "0.24.0" - "@esbuild/win32-x64" "0.24.0" - -typescript@^5.6.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==