@depup/bun-types 1.3.11-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +105 -0
- package/README.md +25 -0
- package/bun.d.ts +8712 -0
- package/bun.ns.d.ts +5 -0
- package/bundle.d.ts +74 -0
- package/changes.json +5 -0
- package/deprecated.d.ts +184 -0
- package/devserver.d.ts +187 -0
- package/docs/README.md +28 -0
- package/docs/bundler/bytecode.mdx +447 -0
- package/docs/bundler/css.mdx +1024 -0
- package/docs/bundler/esbuild.mdx +304 -0
- package/docs/bundler/executables.mdx +1318 -0
- package/docs/bundler/fullstack.mdx +1086 -0
- package/docs/bundler/hot-reloading.mdx +229 -0
- package/docs/bundler/html-static.mdx +498 -0
- package/docs/bundler/index.mdx +1840 -0
- package/docs/bundler/loaders.mdx +451 -0
- package/docs/bundler/macros.mdx +328 -0
- package/docs/bundler/minifier.mdx +1286 -0
- package/docs/bundler/plugins.mdx +477 -0
- package/docs/bundler/standalone-html.mdx +314 -0
- package/docs/feedback.mdx +75 -0
- package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
- package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
- package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
- package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
- package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
- package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/blob-to-dataview.mdx +16 -0
- package/docs/guides/binary/blob-to-stream.mdx +16 -0
- package/docs/guides/binary/blob-to-string.mdx +17 -0
- package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
- package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/buffer-to-blob.mdx +16 -0
- package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
- package/docs/guides/binary/buffer-to-string.mdx +27 -0
- package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
- package/docs/guides/binary/dataview-to-string.mdx +17 -0
- package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
- package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
- package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
- package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
- package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
- package/docs/guides/binary/typedarray-to-string.mdx +18 -0
- package/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/docs/guides/deployment/google-cloud-run.mdx +194 -0
- package/docs/guides/deployment/railway.mdx +145 -0
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +97 -0
- package/docs/guides/ecosystem/astro.mdx +82 -0
- package/docs/guides/ecosystem/discordjs.mdx +80 -0
- package/docs/guides/ecosystem/docker.mdx +151 -0
- package/docs/guides/ecosystem/drizzle.mdx +195 -0
- package/docs/guides/ecosystem/elysia.mdx +31 -0
- package/docs/guides/ecosystem/express.mdx +43 -0
- package/docs/guides/ecosystem/gel.mdx +261 -0
- package/docs/guides/ecosystem/hono.mdx +47 -0
- package/docs/guides/ecosystem/mongoose.mdx +92 -0
- package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
- package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
- package/docs/guides/ecosystem/nextjs.mdx +103 -0
- package/docs/guides/ecosystem/nuxt.mdx +96 -0
- package/docs/guides/ecosystem/pm2.mdx +55 -0
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/qwik.mdx +114 -0
- package/docs/guides/ecosystem/react.mdx +52 -0
- package/docs/guides/ecosystem/remix.mdx +97 -0
- package/docs/guides/ecosystem/sentry.mdx +54 -0
- package/docs/guides/ecosystem/solidstart.mdx +62 -0
- package/docs/guides/ecosystem/ssr-react.mdx +49 -0
- package/docs/guides/ecosystem/stric.mdx +54 -0
- package/docs/guides/ecosystem/sveltekit.mdx +138 -0
- package/docs/guides/ecosystem/systemd.mdx +114 -0
- package/docs/guides/ecosystem/tanstack-start.mdx +791 -0
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/vite.mdx +77 -0
- package/docs/guides/html-rewriter/extract-links.mdx +71 -0
- package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
- package/docs/guides/http/cluster.mdx +69 -0
- package/docs/guides/http/fetch-unix.mdx +35 -0
- package/docs/guides/http/fetch.mdx +26 -0
- package/docs/guides/http/file-uploads.mdx +97 -0
- package/docs/guides/http/hot.mdx +28 -0
- package/docs/guides/http/proxy.mdx +50 -0
- package/docs/guides/http/server.mdx +48 -0
- package/docs/guides/http/simple.mdx +20 -0
- package/docs/guides/http/sse.mdx +91 -0
- package/docs/guides/http/stream-file.mdx +50 -0
- package/docs/guides/http/stream-iterator.mdx +49 -0
- package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
- package/docs/guides/http/tls.mdx +32 -0
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/add-dev.mdx +28 -0
- package/docs/guides/install/add-git.mdx +40 -0
- package/docs/guides/install/add-optional.mdx +27 -0
- package/docs/guides/install/add-peer.mdx +45 -0
- package/docs/guides/install/add-tarball.mdx +35 -0
- package/docs/guides/install/add.mdx +44 -0
- package/docs/guides/install/azure-artifacts.mdx +76 -0
- package/docs/guides/install/cicd.mdx +43 -0
- package/docs/guides/install/custom-registry.mdx +32 -0
- package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
- package/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
- package/docs/guides/install/jfrog-artifactory.mdx +28 -0
- package/docs/guides/install/npm-alias.mdx +25 -0
- package/docs/guides/install/registry-scope.mdx +40 -0
- package/docs/guides/install/trusted.mdx +52 -0
- package/docs/guides/install/workspaces.mdx +70 -0
- package/docs/guides/install/yarnlock.mdx +51 -0
- package/docs/guides/process/argv.mdx +66 -0
- package/docs/guides/process/ctrl-c.mdx +18 -0
- package/docs/guides/process/ipc.mdx +69 -0
- package/docs/guides/process/nanoseconds.mdx +15 -0
- package/docs/guides/process/os-signals.mdx +31 -0
- package/docs/guides/process/spawn-stderr.mdx +34 -0
- package/docs/guides/process/spawn-stdout.mdx +28 -0
- package/docs/guides/process/spawn.mdx +43 -0
- package/docs/guides/process/stdin.mdx +62 -0
- package/docs/guides/read-file/arraybuffer.mdx +30 -0
- package/docs/guides/read-file/buffer.mdx +21 -0
- package/docs/guides/read-file/exists.mdx +18 -0
- package/docs/guides/read-file/json.mdx +19 -0
- package/docs/guides/read-file/mime.mdx +22 -0
- package/docs/guides/read-file/stream.mdx +28 -0
- package/docs/guides/read-file/string.mdx +24 -0
- package/docs/guides/read-file/uint8array.mdx +23 -0
- package/docs/guides/read-file/watch.mdx +66 -0
- package/docs/guides/runtime/build-time-constants.mdx +295 -0
- package/docs/guides/runtime/cicd.mdx +45 -0
- package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
- package/docs/guides/runtime/define-constant.mdx +149 -0
- package/docs/guides/runtime/delete-directory.mdx +39 -0
- package/docs/guides/runtime/delete-file.mdx +21 -0
- package/docs/guides/runtime/heap-snapshot.mdx +28 -0
- package/docs/guides/runtime/import-html.mdx +15 -0
- package/docs/guides/runtime/import-json.mdx +46 -0
- package/docs/guides/runtime/import-json5.mdx +74 -0
- package/docs/guides/runtime/import-toml.mdx +32 -0
- package/docs/guides/runtime/import-yaml.mdx +104 -0
- package/docs/guides/runtime/read-env.mdx +37 -0
- package/docs/guides/runtime/set-env.mdx +51 -0
- package/docs/guides/runtime/shell.mdx +42 -0
- package/docs/guides/runtime/timezone.mdx +38 -0
- package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
- package/docs/guides/runtime/typescript.mdx +51 -0
- package/docs/guides/runtime/vscode-debugger.mdx +47 -0
- package/docs/guides/runtime/web-debugger.mdx +103 -0
- package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
- package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
- package/docs/guides/streams/node-readable-to-json.mdx +14 -0
- package/docs/guides/streams/node-readable-to-string.mdx +14 -0
- package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
- package/docs/guides/streams/to-array.mdx +16 -0
- package/docs/guides/streams/to-arraybuffer.mdx +16 -0
- package/docs/guides/streams/to-blob.mdx +16 -0
- package/docs/guides/streams/to-buffer.mdx +17 -0
- package/docs/guides/streams/to-json.mdx +16 -0
- package/docs/guides/streams/to-string.mdx +16 -0
- package/docs/guides/streams/to-typedarray.mdx +24 -0
- package/docs/guides/test/bail.mdx +24 -0
- package/docs/guides/test/concurrent-test-glob.mdx +146 -0
- package/docs/guides/test/coverage-threshold.mdx +67 -0
- package/docs/guides/test/coverage.mdx +49 -0
- package/docs/guides/test/happy-dom.mdx +73 -0
- package/docs/guides/test/migrate-from-jest.mdx +125 -0
- package/docs/guides/test/mock-clock.mdx +50 -0
- package/docs/guides/test/mock-functions.mdx +70 -0
- package/docs/guides/test/rerun-each.mdx +16 -0
- package/docs/guides/test/run-tests.mdx +116 -0
- package/docs/guides/test/skip-tests.mdx +43 -0
- package/docs/guides/test/snapshot.mdx +102 -0
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/svelte-test.mdx +113 -0
- package/docs/guides/test/testing-library.mdx +93 -0
- package/docs/guides/test/timeout.mdx +17 -0
- package/docs/guides/test/todo-tests.mdx +74 -0
- package/docs/guides/test/update-snapshots.mdx +49 -0
- package/docs/guides/test/watch-mode.mdx +24 -0
- package/docs/guides/util/base64.mdx +17 -0
- package/docs/guides/util/deep-equals.mdx +41 -0
- package/docs/guides/util/deflate.mdx +20 -0
- package/docs/guides/util/detect-bun.mdx +28 -0
- package/docs/guides/util/entrypoint.mdx +19 -0
- package/docs/guides/util/escape-html.mdx +24 -0
- package/docs/guides/util/file-url-to-path.mdx +16 -0
- package/docs/guides/util/gzip.mdx +20 -0
- package/docs/guides/util/hash-a-password.mdx +56 -0
- package/docs/guides/util/import-meta-dir.mdx +15 -0
- package/docs/guides/util/import-meta-file.mdx +15 -0
- package/docs/guides/util/import-meta-path.mdx +15 -0
- package/docs/guides/util/javascript-uuid.mdx +25 -0
- package/docs/guides/util/main.mdx +43 -0
- package/docs/guides/util/path-to-file-url.mdx +16 -0
- package/docs/guides/util/sleep.mdx +24 -0
- package/docs/guides/util/upgrade.mdx +93 -0
- package/docs/guides/util/version.mdx +23 -0
- package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
- package/docs/guides/websocket/compression.mdx +33 -0
- package/docs/guides/websocket/context.mdx +79 -0
- package/docs/guides/websocket/pubsub.mdx +43 -0
- package/docs/guides/websocket/simple.mdx +38 -0
- package/docs/guides/write-file/append.mdx +54 -0
- package/docs/guides/write-file/basic.mdx +46 -0
- package/docs/guides/write-file/blob.mdx +30 -0
- package/docs/guides/write-file/cat.mdx +19 -0
- package/docs/guides/write-file/file-cp.mdx +18 -0
- package/docs/guides/write-file/filesink.mdx +54 -0
- package/docs/guides/write-file/response.mdx +19 -0
- package/docs/guides/write-file/stdout.mdx +23 -0
- package/docs/guides/write-file/stream.mdx +19 -0
- package/docs/guides/write-file/unlink.mdx +18 -0
- package/docs/index.mdx +133 -0
- package/docs/installation.mdx +372 -0
- package/docs/pm/bunx.mdx +91 -0
- package/docs/pm/catalogs.mdx +292 -0
- package/docs/pm/cli/add.mdx +179 -0
- package/docs/pm/cli/audit.mdx +60 -0
- package/docs/pm/cli/info.mdx +70 -0
- package/docs/pm/cli/install.mdx +591 -0
- package/docs/pm/cli/link.mdx +61 -0
- package/docs/pm/cli/outdated.mdx +197 -0
- package/docs/pm/cli/patch.mdx +69 -0
- package/docs/pm/cli/pm.mdx +323 -0
- package/docs/pm/cli/publish.mdx +131 -0
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/pm/cli/update.mdx +140 -0
- package/docs/pm/cli/why.mdx +84 -0
- package/docs/pm/filter.mdx +127 -0
- package/docs/pm/global-cache.mdx +72 -0
- package/docs/pm/isolated-installs.mdx +220 -0
- package/docs/pm/lifecycle.mdx +64 -0
- package/docs/pm/lockfile.mdx +64 -0
- package/docs/pm/npmrc.mdx +245 -0
- package/docs/pm/overrides.mdx +83 -0
- package/docs/pm/scopes-registries.mdx +35 -0
- package/docs/pm/security-scanner-api.mdx +95 -0
- package/docs/pm/workspaces.mdx +115 -0
- package/docs/project/benchmarking.mdx +296 -0
- package/docs/project/bindgen.mdx +223 -0
- package/docs/project/building-windows.mdx +143 -0
- package/docs/project/contributing.mdx +366 -0
- package/docs/project/feedback.mdx +20 -0
- package/docs/project/license.mdx +78 -0
- package/docs/project/roadmap.mdx +8 -0
- package/docs/quickstart.mdx +251 -0
- package/docs/runtime/archive.mdx +452 -0
- package/docs/runtime/auto-install.mdx +97 -0
- package/docs/runtime/binary-data.mdx +846 -0
- package/docs/runtime/bun-apis.mdx +60 -0
- package/docs/runtime/bunfig.mdx +765 -0
- package/docs/runtime/c-compiler.mdx +204 -0
- package/docs/runtime/child-process.mdx +659 -0
- package/docs/runtime/color.mdx +267 -0
- package/docs/runtime/console.mdx +67 -0
- package/docs/runtime/cookies.mdx +454 -0
- package/docs/runtime/cron.mdx +358 -0
- package/docs/runtime/csrf.mdx +171 -0
- package/docs/runtime/debugger.mdx +335 -0
- package/docs/runtime/environment-variables.mdx +231 -0
- package/docs/runtime/ffi.mdx +567 -0
- package/docs/runtime/file-io.mdx +306 -0
- package/docs/runtime/file-system-router.mdx +118 -0
- package/docs/runtime/file-types.mdx +482 -0
- package/docs/runtime/glob.mdx +181 -0
- package/docs/runtime/globals.mdx +72 -0
- package/docs/runtime/hashing.mdx +315 -0
- package/docs/runtime/html-rewriter.mdx +333 -0
- package/docs/runtime/http/cookies.mdx +79 -0
- package/docs/runtime/http/error-handling.mdx +40 -0
- package/docs/runtime/http/metrics.mdx +36 -0
- package/docs/runtime/http/routing.mdx +289 -0
- package/docs/runtime/http/server.mdx +672 -0
- package/docs/runtime/http/tls.mdx +101 -0
- package/docs/runtime/http/websockets.mdx +414 -0
- package/docs/runtime/index.mdx +223 -0
- package/docs/runtime/json5.mdx +271 -0
- package/docs/runtime/jsonl.mdx +188 -0
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/markdown.mdx +381 -0
- package/docs/runtime/module-resolution.mdx +374 -0
- package/docs/runtime/networking/dns.mdx +111 -0
- package/docs/runtime/networking/fetch.mdx +484 -0
- package/docs/runtime/networking/tcp.mdx +239 -0
- package/docs/runtime/networking/udp.mdx +180 -0
- package/docs/runtime/node-api.mdx +19 -0
- package/docs/runtime/nodejs-compat.mdx +468 -0
- package/docs/runtime/plugins.mdx +419 -0
- package/docs/runtime/redis.mdx +583 -0
- package/docs/runtime/repl.mdx +176 -0
- package/docs/runtime/s3.mdx +881 -0
- package/docs/runtime/secrets.mdx +340 -0
- package/docs/runtime/semver.mdx +57 -0
- package/docs/runtime/shell.mdx +637 -0
- package/docs/runtime/sql.mdx +1404 -0
- package/docs/runtime/sqlite.mdx +721 -0
- package/docs/runtime/streams.mdx +232 -0
- package/docs/runtime/templating/create.mdx +269 -0
- package/docs/runtime/templating/init.mdx +58 -0
- package/docs/runtime/toml.mdx +238 -0
- package/docs/runtime/transpiler.mdx +288 -0
- package/docs/runtime/typescript.mdx +58 -0
- package/docs/runtime/utils.mdx +1010 -0
- package/docs/runtime/watch-mode.mdx +161 -0
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/runtime/workers.mdx +314 -0
- package/docs/runtime/yaml.mdx +470 -0
- package/docs/snippets/cli/add.mdx +166 -0
- package/docs/snippets/cli/build.mdx +197 -0
- package/docs/snippets/cli/bunx.mdx +49 -0
- package/docs/snippets/cli/feedback.mdx +17 -0
- package/docs/snippets/cli/init.mdx +84 -0
- package/docs/snippets/cli/install.mdx +173 -0
- package/docs/snippets/cli/link.mdx +163 -0
- package/docs/snippets/cli/outdated.mdx +140 -0
- package/docs/snippets/cli/patch.mdx +171 -0
- package/docs/snippets/cli/publish.mdx +198 -0
- package/docs/snippets/cli/remove.mdx +146 -0
- package/docs/snippets/cli/run.mdx +305 -0
- package/docs/snippets/cli/test.mdx +105 -0
- package/docs/snippets/cli/update.mdx +144 -0
- package/docs/test/code-coverage.mdx +409 -0
- package/docs/test/configuration.mdx +574 -0
- package/docs/test/dates-times.mdx +129 -0
- package/docs/test/discovery.mdx +90 -0
- package/docs/test/dom.mdx +226 -0
- package/docs/test/index.mdx +409 -0
- package/docs/test/lifecycle.mdx +366 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/reporters.mdx +126 -0
- package/docs/test/runtime-behavior.mdx +342 -0
- package/docs/test/snapshots.mdx +434 -0
- package/docs/test/writing-tests.mdx +672 -0
- package/docs/typescript.mdx +54 -0
- package/extensions.d.ts +40 -0
- package/fetch.d.ts +79 -0
- package/ffi.d.ts +1154 -0
- package/globals.d.ts +2067 -0
- package/html-rewriter.d.ts +186 -0
- package/index.d.ts +32 -0
- package/jsc.d.ts +233 -0
- package/jsx.d.ts +11 -0
- package/overrides.d.ts +376 -0
- package/package.json +53 -0
- package/redis.d.ts +3352 -0
- package/s3.d.ts +1354 -0
- package/security.d.ts +101 -0
- package/serve.d.ts +1296 -0
- package/shell.d.ts +380 -0
- package/sql.d.ts +887 -0
- package/sqlite.d.ts +1322 -0
- package/test-globals.d.ts +22 -0
- package/test.d.ts +2392 -0
- package/vendor/expect-type/branding.d.ts +283 -0
- package/vendor/expect-type/index.d.ts +1207 -0
- package/vendor/expect-type/messages.d.ts +395 -0
- package/vendor/expect-type/overloads.d.ts +669 -0
- package/vendor/expect-type/utils.d.ts +431 -0
- package/wasm.d.ts +193 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bindgen
|
|
3
|
+
description: Bindgen for Bun
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Note>This document is for maintainers and contributors to Bun, and describes internal implementation details.</Note>
|
|
7
|
+
|
|
8
|
+
The new bindings generator, introduced to the codebase in Dec 2024, scans for
|
|
9
|
+
`*.bind.ts` to find function and class definition, and generates glue code to
|
|
10
|
+
interop between JavaScript and native code.
|
|
11
|
+
|
|
12
|
+
There are currently other code generators and systems that achieve similar
|
|
13
|
+
purposes. The following will all eventually be completely phased out in favor of
|
|
14
|
+
this one:
|
|
15
|
+
|
|
16
|
+
- "Classes generator", converting `*.classes.ts` for custom classes.
|
|
17
|
+
- "JS2Native", allowing ad-hoc calls from `src/js` to native code.
|
|
18
|
+
|
|
19
|
+
## Creating JS Functions in Zig
|
|
20
|
+
|
|
21
|
+
Given a file implementing a simple function, such as `add`
|
|
22
|
+
|
|
23
|
+
```zig src/bun.js/math.zig
|
|
24
|
+
pub fn add(global: *jsc.JSGlobalObject, a: i32, b: i32) !i32 {
|
|
25
|
+
return std.math.add(i32, a, b) catch {
|
|
26
|
+
// Binding functions can return `error.OutOfMemory` and `error.JSError`.
|
|
27
|
+
// Others like `error.Overflow` from `std.math.add` must be converted.
|
|
28
|
+
// Remember to be descriptive.
|
|
29
|
+
return global.throwPretty("Integer overflow while adding", .{});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const gen = bun.gen.math; // "math" being this file's basename
|
|
34
|
+
|
|
35
|
+
const std = @import("std");
|
|
36
|
+
const bun = @import("bun");
|
|
37
|
+
const jsc = bun.jsc;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Then describe the API schema using a `.bind.ts` function. The binding file goes next to the Zig file.
|
|
41
|
+
|
|
42
|
+
```ts src/bun.js/math.bind.ts icon="/icons/typescript.svg"
|
|
43
|
+
import { t, fn } from "bindgen";
|
|
44
|
+
|
|
45
|
+
export const add = fn({
|
|
46
|
+
args: {
|
|
47
|
+
global: t.globalObject,
|
|
48
|
+
a: t.i32,
|
|
49
|
+
b: t.i32.default(1),
|
|
50
|
+
},
|
|
51
|
+
ret: t.i32,
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This function declaration is equivalent to:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
/**
|
|
59
|
+
* Throws if zero arguments are provided.
|
|
60
|
+
* Wraps out of range numbers using modulo.
|
|
61
|
+
*/
|
|
62
|
+
declare function add(a: number, b: number = 1): number;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The code generator will provide `bun.gen.math.jsAdd`, which is the native
|
|
66
|
+
function implementation. To pass to JavaScript, use
|
|
67
|
+
`bun.gen.math.createAddCallback(global)`. JS files in `src/js/` may use
|
|
68
|
+
`$bindgenFn("math.bind.ts", "add")` to get a handle to the implementation.
|
|
69
|
+
|
|
70
|
+
## Strings
|
|
71
|
+
|
|
72
|
+
The type for receiving strings is one of [`t.DOMString`](https://webidl.spec.whatwg.org/#idl-DOMString), [`t.ByteString`](https://webidl.spec.whatwg.org/#idl-ByteString), and [`t.USVString`](https://webidl.spec.whatwg.org/#idl-USVString). These map directly to their WebIDL counterparts, and have slightly different conversion logic. Bindgen will pass BunString to native code in all cases.
|
|
73
|
+
|
|
74
|
+
When in doubt, use DOMString.
|
|
75
|
+
|
|
76
|
+
`t.UTF8String` can be used in place of `t.DOMString`, but will call `bun.String.toUTF8`. The native callback gets `[]const u8` (WTF-8 data) passed to native code, freeing it after the function returns.
|
|
77
|
+
|
|
78
|
+
TLDRs from WebIDL spec:
|
|
79
|
+
|
|
80
|
+
- ByteString can only contain valid latin1 characters. It is not safe to assume bun.String is already in 8-bit format, but it is extremely likely.
|
|
81
|
+
- USVString will not contain invalid surrogate pairs, aka text that can be represented correctly in UTF-8.
|
|
82
|
+
- DOMString is the loosest but also most recommended strategy.
|
|
83
|
+
|
|
84
|
+
## Function Variants
|
|
85
|
+
|
|
86
|
+
A `variants` can specify multiple variants (also known as overloads).
|
|
87
|
+
|
|
88
|
+
```ts src/bun.js/math.bind.ts icon="/icons/typescript.svg"
|
|
89
|
+
import { t, fn } from "bindgen";
|
|
90
|
+
|
|
91
|
+
export const action = fn({
|
|
92
|
+
variants: [
|
|
93
|
+
{
|
|
94
|
+
args: {
|
|
95
|
+
a: t.i32,
|
|
96
|
+
},
|
|
97
|
+
ret: t.i32,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
args: {
|
|
101
|
+
a: t.DOMString,
|
|
102
|
+
},
|
|
103
|
+
ret: t.DOMString,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
In Zig, each variant gets a number, based on the order the schema defines.
|
|
110
|
+
|
|
111
|
+
```zig
|
|
112
|
+
fn action1(a: i32) i32 {
|
|
113
|
+
return a;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
fn action2(a: bun.String) bun.String {
|
|
117
|
+
return a;
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## `t.dictionary`
|
|
122
|
+
|
|
123
|
+
A `dictionary` is a definition for a JavaScript object, typically as a function inputs. For function outputs, it is usually a smarter idea to declare a class type to add functions and destructuring.
|
|
124
|
+
|
|
125
|
+
## Enumerations
|
|
126
|
+
|
|
127
|
+
To use [WebIDL's enumeration](https://webidl.spec.whatwg.org/#idl-enums) type, use either:
|
|
128
|
+
|
|
129
|
+
- `t.stringEnum`: Create and codegen a new enum type.
|
|
130
|
+
- `t.zigEnum`: Derive a bindgen type off of an existing enum in the codebase.
|
|
131
|
+
|
|
132
|
+
An example of `stringEnum` as used in `fmt.zig` / `bun:internal-for-testing`
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
export const Formatter = t.stringEnum("highlight-javascript", "escape-powershell");
|
|
136
|
+
|
|
137
|
+
export const fmtString = fn({
|
|
138
|
+
args: {
|
|
139
|
+
global: t.globalObject,
|
|
140
|
+
code: t.UTF8String,
|
|
141
|
+
formatter: Formatter,
|
|
142
|
+
},
|
|
143
|
+
ret: t.DOMString,
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
WebIDL strongly encourages using kebab case for enumeration values, to be consistent with existing Web APIs.
|
|
148
|
+
|
|
149
|
+
### Deriving enums from Zig code
|
|
150
|
+
|
|
151
|
+
TODO: zigEnum
|
|
152
|
+
|
|
153
|
+
## `t.oneOf`
|
|
154
|
+
|
|
155
|
+
A `oneOf` is a union between two or more types. It is represented by `union(enum)` in Zig.
|
|
156
|
+
|
|
157
|
+
TODO:
|
|
158
|
+
|
|
159
|
+
## Attributes
|
|
160
|
+
|
|
161
|
+
There are set of attributes that can be chained onto `t.*` types. On all types there are:
|
|
162
|
+
|
|
163
|
+
- `.required`, in dictionary parameters only
|
|
164
|
+
- `.optional`, in function arguments only
|
|
165
|
+
- `.default(T)`
|
|
166
|
+
|
|
167
|
+
When a value is optional, it is lowered to a Zig optional.
|
|
168
|
+
|
|
169
|
+
Depending on the type, there are more attributes available. See the type definitions in auto-complete for more details. Note that one of the above three can only be applied, and they must be applied at the end.
|
|
170
|
+
|
|
171
|
+
### Integer Attributes
|
|
172
|
+
|
|
173
|
+
Integer types allow customizing the overflow behavior with `clamp` or `enforceRange`
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
import { t, fn } from "bindgen";
|
|
177
|
+
|
|
178
|
+
export const add = fn({
|
|
179
|
+
args: {
|
|
180
|
+
global: t.globalObject,
|
|
181
|
+
// enforce in i32 range
|
|
182
|
+
a: t.i32.enforceRange(),
|
|
183
|
+
// clamp to u16 range
|
|
184
|
+
b: t.u16,
|
|
185
|
+
// enforce in arbitrary range, with a default if not provided
|
|
186
|
+
c: t.i32.enforceRange(0, 1000).default(5),
|
|
187
|
+
// clamp to arbitrary range, or null
|
|
188
|
+
d: t.u16.clamp(0, 10).optional,
|
|
189
|
+
},
|
|
190
|
+
ret: t.i32,
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Various Node.js validator functions such as `validateInteger`, `validateNumber`, and more are available. Use these when implementing Node.js APIs, so the error messages match 1:1 what Node would do.
|
|
195
|
+
|
|
196
|
+
Unlike `enforceRange`, which is taken from WebIDL, `validate*` functions are much more strict on the input they accept. For example, Node's numerical validator check `typeof value === 'number'`, while WebIDL uses `ToNumber` for lossy conversion.
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { t, fn } from "bindgen";
|
|
200
|
+
|
|
201
|
+
export const add = fn({
|
|
202
|
+
args: {
|
|
203
|
+
global: t.globalObject,
|
|
204
|
+
// throw if not given a number
|
|
205
|
+
a: t.f64.validateNumber(),
|
|
206
|
+
// valid in i32 range
|
|
207
|
+
a: t.i32.validateInt32(),
|
|
208
|
+
// f64 within safe integer range
|
|
209
|
+
b: t.f64.validateInteger(),
|
|
210
|
+
// f64 in given range
|
|
211
|
+
c: t.f64.validateNumber(-10000, 10000),
|
|
212
|
+
},
|
|
213
|
+
ret: t.i32,
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Callbacks
|
|
218
|
+
|
|
219
|
+
TODO
|
|
220
|
+
|
|
221
|
+
## Classes
|
|
222
|
+
|
|
223
|
+
TODO
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Building Windows
|
|
3
|
+
description: Building Bun on Windows
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This document describes the build process for Windows. If you run into problems, please join the [#contributing channel on our Discord](http://bun.com/discord) for help.
|
|
7
|
+
|
|
8
|
+
It is strongly recommended to use [PowerShell 7 (`pwsh.exe`)](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4) instead of the default `powershell.exe`.
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
### Enable Scripts
|
|
13
|
+
|
|
14
|
+
By default, running unverified scripts are blocked.
|
|
15
|
+
|
|
16
|
+
```ps1
|
|
17
|
+
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### System Dependencies
|
|
21
|
+
|
|
22
|
+
Bun v1.1 or later. We use Bun to run it's own code generators.
|
|
23
|
+
|
|
24
|
+
```ps1
|
|
25
|
+
irm bun.sh/install.ps1 | iex
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
[Visual Studio](https://visualstudio.microsoft.com) with the "Desktop Development with C++" workload. While installing, make sure to install Git as well, if Git for Windows is not already installed.
|
|
29
|
+
|
|
30
|
+
Visual Studio can be installed graphically using the wizard or through WinGet:
|
|
31
|
+
|
|
32
|
+
```ps1
|
|
33
|
+
winget install "Visual Studio Community 2022" --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.Component.Git " -s msstore
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
After Visual Studio, you need the following:
|
|
37
|
+
|
|
38
|
+
- LLVM 21.1.8
|
|
39
|
+
- Go
|
|
40
|
+
- Rust
|
|
41
|
+
- NASM
|
|
42
|
+
- Perl
|
|
43
|
+
- Ruby
|
|
44
|
+
- Node.js
|
|
45
|
+
|
|
46
|
+
<Note>The Zig compiler is automatically downloaded, installed, and updated by the building process.</Note>
|
|
47
|
+
|
|
48
|
+
[Scoop](https://scoop.sh) can be used to install these remaining tools easily.
|
|
49
|
+
|
|
50
|
+
```ps1 Scoop (x64)
|
|
51
|
+
irm https://get.scoop.sh | iex
|
|
52
|
+
scoop install nodejs-lts go rust nasm ruby perl ccache
|
|
53
|
+
# scoop seems to be buggy if you install llvm and the rest at the same time
|
|
54
|
+
scoop install llvm@21.1.8
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
For Windows ARM64, download LLVM 21.1.8 directly from GitHub releases (first version with ARM64 Windows builds):
|
|
58
|
+
|
|
59
|
+
```ps1 ARM64
|
|
60
|
+
# Download and install LLVM for ARM64
|
|
61
|
+
Invoke-WebRequest -Uri "https://github.com/llvm/llvm-project/releases/download/llvmorg-21.1.8/LLVM-21.1.8-woa64.exe" -OutFile "$env:TEMP\LLVM-21.1.8-woa64.exe"
|
|
62
|
+
Start-Process -FilePath "$env:TEMP\LLVM-21.1.8-woa64.exe" -ArgumentList "/S" -Wait
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
<Note>
|
|
66
|
+
Please do not use WinGet/other package manager for these, as you will likely install Strawberry Perl instead of a more
|
|
67
|
+
minimal installation of Perl. Strawberry Perl includes many other utilities that get installed into `$Env:PATH` that
|
|
68
|
+
will conflict with MSVC and break the build.
|
|
69
|
+
</Note>
|
|
70
|
+
|
|
71
|
+
If you intend on building WebKit locally (optional, x64 only), you should install these packages:
|
|
72
|
+
|
|
73
|
+
```ps1 Scoop
|
|
74
|
+
scoop install make cygwin python
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
<Note>Cygwin is not required for ARM64 builds as WebKit is provided as a pre-built binary.</Note>
|
|
78
|
+
|
|
79
|
+
From here on out, it is **expected you use a PowerShell Terminal with `.\scripts\vs-shell.ps1` sourced**. This script is available in the Bun repository and can be loaded by executing it:
|
|
80
|
+
|
|
81
|
+
```ps1
|
|
82
|
+
.\scripts\vs-shell.ps1
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
To verify, you can check for an MSVC-only command line such as `mt.exe`
|
|
86
|
+
|
|
87
|
+
```ps1
|
|
88
|
+
Get-Command mt
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
<Note>
|
|
92
|
+
It is not recommended to install `ninja` / `cmake` into your global path, because you may run into a situation where
|
|
93
|
+
you try to build bun without .\scripts\vs-shell.ps1 sourced.
|
|
94
|
+
</Note>
|
|
95
|
+
|
|
96
|
+
## Building
|
|
97
|
+
|
|
98
|
+
```ps1
|
|
99
|
+
bun run build
|
|
100
|
+
|
|
101
|
+
# after the initial `bun run build` you can use the following to build
|
|
102
|
+
ninja -Cbuild/debug
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
If this was successful, you should have a `bun-debug.exe` in the `build/debug` folder.
|
|
106
|
+
|
|
107
|
+
```ps1
|
|
108
|
+
.\build\debug\bun-debug.exe --revision
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
You should add this to `$Env:PATH`. The simplest way to do so is to open the start menu, type "Path", and then navigate the environment variables menu to add `C:\.....\bun\build\debug` to the user environment variable `PATH`. You should then restart your editor (if it does not update still, log out and log back in).
|
|
112
|
+
|
|
113
|
+
## Extra paths
|
|
114
|
+
|
|
115
|
+
- WebKit is extracted to `build/debug/cache/webkit/`
|
|
116
|
+
- Zig is extracted to `build/debug/cache/zig/bin/zig.exe`
|
|
117
|
+
|
|
118
|
+
## Tests
|
|
119
|
+
|
|
120
|
+
You can run the test suite either using `bun test <path>` or by using the wrapper script `bun node:test <path>`. The `bun node:test` command runs every test file in a separate instance of bun.exe, to prevent a crash in the test runner from stopping the entire suite.
|
|
121
|
+
|
|
122
|
+
```ps1
|
|
123
|
+
# Setup
|
|
124
|
+
bun i --cwd packages\bun-internal-test
|
|
125
|
+
|
|
126
|
+
# Run the entire test suite with reporter
|
|
127
|
+
# the package.json script "test" uses "build/debug/bun-debug.exe" by default
|
|
128
|
+
bun run test
|
|
129
|
+
|
|
130
|
+
# Run an individual test file:
|
|
131
|
+
bun-debug test node\fs
|
|
132
|
+
bun-debug test "C:\bun\test\js\bun\resolve\import-meta.test.js"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Troubleshooting
|
|
136
|
+
|
|
137
|
+
### .rc file fails to build
|
|
138
|
+
|
|
139
|
+
`llvm-rc.exe` is odd. don't use it. use `rc.exe`, to do this make sure you are in a visual studio dev terminal, check `rc /?` to ensure it is `Microsoft Resource Compiler`
|
|
140
|
+
|
|
141
|
+
### failed to write output 'bun-debug.exe': permission denied
|
|
142
|
+
|
|
143
|
+
you cannot overwrite `bun-debug.exe` if it is already open. you likely have a running instance, maybe in the vscode debugger?
|