diff --git a/README.md b/README.md index f394d5f367..5f02b6a91c 100644 --- a/README.md +++ b/README.md @@ -90,42 +90,98 @@ bun upgrade --canary - [What is Bun?](https://bun.sh/docs/index) - [Installation](https://bun.sh/docs/installation) - [Quickstart](https://bun.sh/docs/quickstart) -- CLI - - [`bun run`](https://bun.sh/docs/cli/run) - - [`bun install`](https://bun.sh/docs/cli/install) - - [`bun test`](https://bun.sh/docs/cli/test) + - [TypeScript](https://bun.sh/docs/typescript) + +- Templating - [`bun init`](https://bun.sh/docs/cli/init) - [`bun create`](https://bun.sh/docs/cli/bun-create) - - [`bunx`](https://bun.sh/docs/cli/bunx) + - Runtime - - [Runtime](https://bun.sh/docs/runtime/index) + - [`bun run`](https://bun.sh/docs/cli/run) + - [File types](https://bun.sh/docs/runtime/loaders) + - [TypeScript](https://bun.sh/docs/runtime/typescript) + - [JSX](https://bun.sh/docs/runtime/jsx) + - [Environment variables](https://bun.sh/docs/runtime/env) + - [Bun APIs](https://bun.sh/docs/runtime/bun-apis) + - [Web APIs](https://bun.sh/docs/runtime/web-apis) + - [Node.js compatibility](https://bun.sh/docs/runtime/nodejs-apis) + - [Single-file executable](https://bun.sh/docs/bundler/executables) + - [Plugins](https://bun.sh/docs/runtime/plugins) + - [Watch mode](https://bun.sh/docs/runtime/hot) - [Module resolution](https://bun.sh/docs/runtime/modules) - - [Hot & live reloading](https://bun.sh/docs/runtime/hot) + - [Auto-install](https://bun.sh/docs/runtime/autoimport) + - [bunfig.toml](https://bun.sh/docs/runtime/bunfig) + - [Debugger](https://bun.sh/docs/runtime/debugger) + - [Framework API](https://bun.sh/docs/runtime/framework) + +- Package manager + - [`bun install`](https://bun.sh/docs/cli/install) + - [`bun add`](https://bun.sh/docs/cli/add) + - [`bun remove`](https://bun.sh/docs/cli/remove) + - [`bun update`](https://bun.sh/docs/cli/update) + - [`bun link`](https://bun.sh/docs/cli/link) + - [`bun pm`](https://bun.sh/docs/cli/pm) + - [Global cache](https://bun.sh/docs/install/cache) + - [Workspaces](https://bun.sh/docs/install/workspaces) + - [Lifecycle scripts](https://bun.sh/docs/install/lifecycle) + - [Filter](https://bun.sh/docs/cli/filter) + - [Lockfile](https://bun.sh/docs/install/lockfile) + - [Scopes and registries](https://bun.sh/docs/install/registries) + - [Overrides and resolutions](https://bun.sh/docs/install/overrides) + +- Bundler + - [`Bun.build`](https://bun.sh/docs/bundler) + - [Loaders](https://bun.sh/docs/bundler/loaders) - [Plugins](https://bun.sh/docs/bundler/plugins) -- Ecosystem - - [Node.js](https://bun.sh/docs/ecosystem/nodejs) - - [TypeScript](https://bun.sh/docs/ecosystem/typescript) - - [React](https://bun.sh/docs/ecosystem/react) - - [Elysia](https://bun.sh/docs/ecosystem/elysia) - - [Hono](https://bun.sh/docs/ecosystem/hono) - - [Express](https://bun.sh/docs/ecosystem/express) - - [awesome-bun](https://github.com/apvarun/awesome-bun) + - [Macros](https://bun.sh/docs/bundler/macros) + - [vs esbuild](https://bun.sh/docs/bundler/vs-esbuild) + +- Test runner + - [`bun test`](https://bun.sh/docs/cli/test) + - [Writing tests](https://bun.sh/docs/test/writing) + - [Watch mode](https://bun.sh/docs/test/hot) + - [Lifecycle hooks](https://bun.sh/docs/test/lifecycle) + - [Mocks](https://bun.sh/docs/test/mocks) + - [Snapshots](https://bun.sh/docs/test/snapshots) + - [Dates and times](https://bun.sh/docs/test/time) + - [DOM testing](https://bun.sh/docs/test/dom) + - [Code coverage](https://bun.sh/docs/test/coverage) + +- Package runner + - [`bunx`](https://bun.sh/docs/cli/bunx) + - API - - [HTTP](https://bun.sh/docs/api/http) + - [HTTP server](https://bun.sh/docs/api/http) - [WebSockets](https://bun.sh/docs/api/websockets) - - [TCP Sockets](https://bun.sh/docs/api/tcp) + - [Workers](https://bun.sh/docs/api/workers) + - [Binary data](https://bun.sh/docs/api/binary-data) + - [Streams](https://bun.sh/docs/api/streams) - [File I/O](https://bun.sh/docs/api/file-io) + - [import.meta](https://bun.sh/docs/api/import-meta) - [SQLite](https://bun.sh/docs/api/sqlite) - [FileSystemRouter](https://bun.sh/docs/api/file-system-router) + - [TCP sockets](https://bun.sh/docs/api/tcp) + - [UDP sockets](https://bun.sh/docs/api/udp) - [Globals](https://bun.sh/docs/api/globals) - - [Spawn](https://bun.sh/docs/api/spawn) + - [$ Shell](https://bun.sh/docs/runtime/shell) + - [Child processes](https://bun.sh/docs/api/spawn) - [Transpiler](https://bun.sh/docs/api/transpiler) + - [Hashing](https://bun.sh/docs/api/hashing) - [Console](https://bun.sh/docs/api/console) - [FFI](https://bun.sh/docs/api/ffi) - [HTMLRewriter](https://bun.sh/docs/api/html-rewriter) - [Testing](https://bun.sh/docs/api/test) - [Utils](https://bun.sh/docs/api/utils) - [Node-API](https://bun.sh/docs/api/node-api) + - [Glob](https://bun.sh/docs/api/glob) + - [Semver](https://bun.sh/docs/api/semver) + +- Project + - [Roadmap](https://bun.sh/docs/project/roadmap) + - [Benchmarking](https://bun.sh/docs/project/benchmarking) + - [Contributing](https://bun.sh/docs/project/contributing) + - [Building Windows](https://bun.sh/docs/project/building-windows) + - [License](https://bun.sh/docs/project/licensing) ## Contributing diff --git a/scripts/nav2readme.ts b/scripts/nav2readme.ts new file mode 100644 index 0000000000..6d19d42865 --- /dev/null +++ b/scripts/nav2readme.ts @@ -0,0 +1,40 @@ +// Regenerate the Table of Contents in the README by reading through nav.ts +// +// To run this: +// +// bun ./scripts/nav2readme.ts +// +// +import nav from "../docs/nav"; + +function getMarkdown() { + let md = ""; + + for (const item of nav.items) { + if (item.type === "divider") { + md += "\n" + `- ${item.title}` + "\n"; + } else { + md += ` - [${item.title}](https://bun.sh/docs/${item.slug})` + "\n"; + } + } + + return md; +} + +const text = await Bun.file(Bun.fileURLToPath(import.meta.resolve("../README.md"))).text(); +const startI = text.indexOf("## Quick links\n"); +if (startI === -1) { + throw new Error("Could not find ## Quick links in README"); +} +const start = startI + "## Quick links\n".length; + +const contributing = text.indexOf("## Contributing\n", start); + +if (contributing === -1) { + throw new Error("Could not find ## Contributing in README"); +} + +const combined = + [text.slice(0, start), getMarkdown(), text.slice(contributing)].map(text => text.trim()).join("\n\n") + "\n"; + +await Bun.write(Bun.fileURLToPath(import.meta.resolve("../README.md")), combined);