Skip to content

Commit e0bfe0d

Browse files
committed
docs(landing): fix code snippet formatting in pre-rendered blocks
Snippets inside white-space:pre boxes rendered broken after Prettier re-wrapped the HTML source. Rewrite all 7 code blocks as properly formatted code, guard them with prettier-ignore, and fix a double-escaped regex (/\\.\\./ -> /\.\./) in the security snippet.
1 parent 96effc1 commit e0bfe0d

1 file changed

Lines changed: 122 additions & 136 deletions

File tree

docs/index.html

Lines changed: 122 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -659,27 +659,23 @@ <h4>API Gateway for Microservices</h4>
659659
load balancing, JWT auth, and per-route rate limiting — all from
660660
a single config file.
661661
</p>
662-
<div class="use-code">
663-
<span class="kw">const</span> gateway =
664-
<span class="kw">new</span> <span class="fn">BunGateway</span>({
665-
server: { port: <span class="num">8080</span> }, cluster: {
666-
enabled: <span class="kw">true</span>, workers:
667-
<span class="num">4</span> }, auth: { secret: process.env.<span
668-
class="fn"
669-
>JWT_SECRET</span
670-
>
671-
}, cors: { origin: [<span class="str">'https://myapp.com'</span
672-
>] }, }) gateway.<span class="fn">addRoute</span>({ pattern:
673-
<span class="str">'/users/*'</span>, target:
674-
<span class="str">'http://user-svc:3001'</span>, rateLimit: {
675-
max: <span class="num">100</span>, windowMs:
676-
<span class="num">60000</span> }, }) gateway.<span class="fn"
677-
>addRoute</span
678-
>({ pattern: <span class="str">'/payments/*'</span>, target:
679-
<span class="str">'http://pay-svc:3002'</span>, circuitBreaker:
680-
{ enabled: <span class="kw">true</span>, failureThreshold:
681-
<span class="num">3</span> }, })
682-
</div>
662+
<!-- prettier-ignore -->
663+
<div class="use-code"><span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
664+
server: { port: <span class="num">8080</span> },
665+
cluster: { enabled: <span class="kw">true</span>, workers: <span class="num">4</span> },
666+
auth: { secret: process.env.<span class="fn">JWT_SECRET</span> },
667+
cors: { origin: [<span class="str">'https://myapp.com'</span>] },
668+
})
669+
gateway.<span class="fn">addRoute</span>({
670+
pattern: <span class="str">'/users/*'</span>,
671+
target: <span class="str">'http://user-svc:3001'</span>,
672+
rateLimit: { max: <span class="num">100</span>, windowMs: <span class="num">60000</span> },
673+
})
674+
gateway.<span class="fn">addRoute</span>({
675+
pattern: <span class="str">'/payments/*'</span>,
676+
target: <span class="str">'http://pay-svc:3002'</span>,
677+
circuitBreaker: { enabled: <span class="kw">true</span>, failureThreshold: <span class="num">3</span> },
678+
})</div>
683679
</div>
684680
</div>
685681
<div class="use-slide">
@@ -694,21 +690,20 @@ <h4>Intelligent Load Balancer with Health Checks</h4>
694690
Automatic health checks detect unhealthy targets and reroute
695691
traffic without dropping requests.
696692
</p>
697-
<div class="use-code">
698-
gateway.<span class="fn">addRoute</span>({ pattern:
699-
<span class="str">'/api/*'</span>, loadBalancer: { strategy:
700-
<span class="str">'least-connections'</span>, targets: [ { url:
701-
<span class="str">'http://api1:3000'</span>, weight:
702-
<span class="num">3</span> }, { url:
703-
<span class="str">'http://api2:3000'</span>, weight:
704-
<span class="num">2</span> }, { url:
705-
<span class="str">'http://api3:3000'</span>, weight:
706-
<span class="num">1</span> }, ], healthCheck: { enabled:
707-
<span class="kw">true</span>, interval:
708-
<span class="num">15000</span>, path:
709-
<span class="str">'/health'</span> }, stickySession: { enabled:
710-
<span class="kw">true</span> }, }, })
711-
</div>
693+
<!-- prettier-ignore -->
694+
<div class="use-code">gateway.<span class="fn">addRoute</span>({
695+
pattern: <span class="str">'/api/*'</span>,
696+
loadBalancer: {
697+
strategy: <span class="str">'least-connections'</span>,
698+
targets: [
699+
{ url: <span class="str">'http://api1:3000'</span>, weight: <span class="num">3</span> },
700+
{ url: <span class="str">'http://api2:3000'</span>, weight: <span class="num">2</span> },
701+
{ url: <span class="str">'http://api3:3000'</span>, weight: <span class="num">1</span> },
702+
],
703+
healthCheck: { enabled: <span class="kw">true</span>, interval: <span class="num">15000</span>, path: <span class="str">'/health'</span> },
704+
stickySession: { enabled: <span class="kw">true</span> },
705+
},
706+
})</div>
712707
</div>
713708
</div>
714709
<div class="use-slide">
@@ -723,17 +718,20 @@ <h4>TLS Termination with Auto HTTP→HTTPS Redirect</h4>
723718
loading, strong cipher suites, and seamless HTTP-to-HTTPS
724719
redirection. Zero config beyond pointing at your cert files.
725720
</p>
726-
<div class="use-code">
727-
<span class="kw">const</span> gateway =
728-
<span class="kw">new</span> <span class="fn">BunGateway</span>({
729-
server: { port: <span class="num">443</span> }, security: { tls:
730-
{ enabled: <span class="kw">true</span>, cert:
731-
<span class="str">'./cert.pem'</span>, key:
732-
<span class="str">'./key.pem'</span>, minVersion:
733-
<span class="str">'TLSv1.3'</span>, redirectHTTP:
734-
<span class="kw">true</span>, redirectPort:
735-
<span class="num">80</span>, }, }, })
736-
</div>
721+
<!-- prettier-ignore -->
722+
<div class="use-code"><span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
723+
server: { port: <span class="num">443</span> },
724+
security: {
725+
tls: {
726+
enabled: <span class="kw">true</span>,
727+
cert: <span class="str">'./cert.pem'</span>,
728+
key: <span class="str">'./key.pem'</span>,
729+
minVersion: <span class="str">'TLSv1.3'</span>,
730+
redirectHTTP: <span class="kw">true</span>,
731+
redirectPort: <span class="num">80</span>,
732+
},
733+
},
734+
})</div>
737735
</div>
738736
</div>
739737
<div class="use-slide">
@@ -748,23 +746,19 @@ <h4>Multi-Process Cluster with Zero-Downtime Restarts</h4>
748746
replacements before stopping old workers — zero dropped
749747
connections during deployments.
750748
</p>
751-
<div class="use-code">
752-
<span class="kw">const</span> gateway =
753-
<span class="kw">new</span> <span class="fn">BunGateway</span>({
754-
server: { port: <span class="num">3000</span> }, cluster: {
755-
enabled: <span class="kw">true</span>, workers:
756-
<span class="num">8</span>, restartWorkers:
757-
<span class="kw">true</span>, shutdownTimeout:
758-
<span class="num">30000</span>, maxRestarts:
759-
<span class="num">10</span>, }, })
760-
<span class="cmt"
761-
>// Scale at runtime: kill -s SIGUSR2 &lt;pid&gt; → rolling
762-
restart</span
763-
>
764-
<span class="cmt"
765-
>// Increase workers: gateway.cluster.scaleTo(12)</span
766-
>
767-
</div>
749+
<!-- prettier-ignore -->
750+
<div class="use-code"><span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
751+
server: { port: <span class="num">3000</span> },
752+
cluster: {
753+
enabled: <span class="kw">true</span>,
754+
workers: <span class="num">8</span>,
755+
restartWorkers: <span class="kw">true</span>,
756+
shutdownTimeout: <span class="num">30000</span>,
757+
maxRestarts: <span class="num">10</span>,
758+
},
759+
})
760+
<span class="cmt">// Scale at runtime: kill -s SIGUSR2 &lt;pid&gt; → rolling restart</span>
761+
<span class="cmt">// Increase workers: gateway.cluster.scaleTo(12)</span></div>
768762
</div>
769763
</div>
770764
<div class="use-slide">
@@ -779,23 +773,20 @@ <h4>Secure Edge Proxy with Defense-in-Depth</h4>
779773
JWT verification, and security headers — before reaching your
780774
backend. OWASP Top 10 covered by default.
781775
</p>
782-
<div class="use-code">
783-
<span class="kw">const</span> gateway =
784-
<span class="kw">new</span> <span class="fn">BunGateway</span>({
785-
security: { tls: { enabled: <span class="kw">true</span>, cert:
786-
<span class="str">'./cert.pem'</span>, key:
787-
<span class="str">'./key.pem'</span> }, jwtKeyRotation: {
788-
secrets: [{ key: process.env.<span class="fn">JWT_NEW</span>,
789-
kid: <span class="str">'2025-05'</span>, primary:
790-
<span class="kw">true</span> }], jwksUri:
791-
<span class="str"
792-
>'https://auth.example.com/.well-known/jwks.json'</span
793-
>, }, inputValidation: { blockedPatterns: [<span class="str"
794-
>/\.\./</span
795-
>, <span class="str">/%00/</span>,
796-
<span class="str">/&lt;script&gt;/i</span>], }, securityHeaders:
797-
{ enabled: <span class="kw">true</span> }, }, })
798-
</div>
776+
<!-- prettier-ignore -->
777+
<div class="use-code"><span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
778+
security: {
779+
tls: { enabled: <span class="kw">true</span>, cert: <span class="str">'./cert.pem'</span>, key: <span class="str">'./key.pem'</span> },
780+
jwtKeyRotation: {
781+
secrets: [{ key: process.env.<span class="fn">JWT_NEW</span>, kid: <span class="str">'2025-05'</span>, primary: <span class="kw">true</span> }],
782+
jwksUri: <span class="str">'https://auth.example.com/.well-known/jwks.json'</span>,
783+
},
784+
inputValidation: {
785+
blockedPatterns: [<span class="str">/\.\./</span>, <span class="str">/%00/</span>, <span class="str">/&lt;script&gt;/i</span>],
786+
},
787+
securityHeaders: { enabled: <span class="kw">true</span> },
788+
},
789+
})</div>
799790
</div>
800791
</div>
801792
</div>
@@ -1159,6 +1150,7 @@ <h2 class="section-title">Production-ready in seconds</h2>
11591150
</div>
11601151

11611152
<div class="install-box" style="margin-top: 24px">
1153+
<!-- prettier-ignore -->
11621154
<div
11631155
class="prompt"
11641156
style="
@@ -1168,36 +1160,30 @@ <h2 class="section-title">Production-ready in seconds</h2>
11681160
white-space: pre;
11691161
line-height: 1.7;
11701162
"
1171-
>
1172-
<span class="cmt"
1173-
>// gateway.ts — production-ready in one file</span
1174-
>
1175-
<span class="kw">import</span> { BunGateway }
1176-
<span class="kw">from</span> <span class="str">'bungate'</span>
1163+
><span class="cmt">// gateway.ts — production-ready in one file</span>
1164+
<span class="kw">import</span> { BunGateway } <span class="kw">from</span> <span class="str">'bungate'</span>
11771165

1178-
<span class="kw">const</span> gateway = <span class="kw">new</span>
1179-
<span class="fn">BunGateway</span>({ server: { port:
1180-
<span class="num">3000</span> }, cluster: { enabled:
1181-
<span class="kw">true</span>, workers: <span class="num">4</span> },
1182-
auth: { secret: process.env.<span class="fn">JWT_SECRET</span> },
1183-
metrics: { enabled: <span class="kw">true</span> }, }) gateway.<span
1184-
class="fn"
1185-
>addRoute</span
1186-
>({ pattern: <span class="str">'/api/*'</span>, loadBalancer: {
1187-
strategy: <span class="str">'least-connections'</span>, targets: [ {
1188-
url: <span class="str">'http://api1.example.com'</span> }, { url:
1189-
<span class="str">'http://api2.example.com'</span> }, ],
1190-
healthCheck: { enabled: <span class="kw">true</span>, interval:
1191-
<span class="num">15000</span>, path:
1192-
<span class="str">'/health'</span> }, }, circuitBreaker: { enabled:
1193-
<span class="kw">true</span>, failureThreshold:
1194-
<span class="num">5</span> }, })
1166+
<span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
1167+
server: { port: <span class="num">3000</span> },
1168+
cluster: { enabled: <span class="kw">true</span>, workers: <span class="num">4</span> },
1169+
auth: { secret: process.env.<span class="fn">JWT_SECRET</span> },
1170+
metrics: { enabled: <span class="kw">true</span> },
1171+
})
1172+
gateway.<span class="fn">addRoute</span>({
1173+
pattern: <span class="str">'/api/*'</span>,
1174+
loadBalancer: {
1175+
strategy: <span class="str">'least-connections'</span>,
1176+
targets: [
1177+
{ url: <span class="str">'http://api1.example.com'</span> },
1178+
{ url: <span class="str">'http://api2.example.com'</span> },
1179+
],
1180+
healthCheck: { enabled: <span class="kw">true</span>, interval: <span class="num">15000</span>, path: <span class="str">'/health'</span> },
1181+
},
1182+
circuitBreaker: { enabled: <span class="kw">true</span>, failureThreshold: <span class="num">5</span> },
1183+
})
11951184

1196-
<span class="kw">await</span> gateway.<span class="fn">listen</span
1197-
>() console.<span class="fn">log</span>(<span class="str"
1198-
>'🚀 Bungate cluster running on :3000'</span
1199-
>)
1200-
</div>
1185+
<span class="kw">await</span> gateway.<span class="fn">listen</span>()
1186+
console.<span class="fn">log</span>(<span class="str">'🚀 Bungate cluster running on :3000'</span>)</div>
12011187
</div>
12021188
</div>
12031189
</section>
@@ -1226,6 +1212,7 @@ <h2 class="section-title">Battle-tested security defaults</h2>
12261212
</div>
12271213

12281214
<div class="install-box" style="margin-top: 32px">
1215+
<!-- prettier-ignore -->
12291216
<div
12301217
class="prompt"
12311218
style="
@@ -1235,33 +1222,32 @@ <h2 class="section-title">Battle-tested security defaults</h2>
12351222
white-space: pre;
12361223
line-height: 1.7;
12371224
"
1238-
>
1239-
<span class="cmt"
1240-
>// TLS 1.3 + JWT key rotation — zero-downtime</span
1241-
>
1242-
<span class="kw">const</span> gateway = <span class="kw">new</span>
1243-
<span class="fn">BunGateway</span>({ security: { tls: { enabled:
1244-
<span class="kw">true</span>, cert:
1245-
<span class="str">'./cert.pem'</span>, key:
1246-
<span class="str">'./key.pem'</span>, minVersion:
1247-
<span class="str">'TLSv1.3'</span>, cipherSuites: [<span class="str"
1248-
>'TLS_AES_256_GCM_SHA384'</span
1249-
>, <span class="str">'TLS_CHACHA20_POLY1305_SHA256'</span>],
1250-
redirectHTTP: <span class="kw">true</span>, }, jwtKeyRotation: {
1251-
secrets: [ { key: process.env.<span class="fn">JWT_NEW</span>, kid:
1252-
<span class="str">'2025-05'</span>, primary:
1253-
<span class="kw">true</span> }, { key: process.env.<span class="fn"
1254-
>JWT_OLD</span
1255-
>, kid: <span class="str">'2025-04'</span>, deprecated:
1256-
<span class="kw">true</span> }, ], jwksUri:
1257-
<span class="str"
1258-
>'https://auth.example.com/.well-known/jwks.json'</span
1259-
>, jwksRefreshInterval: <span class="num">3600000</span>, },
1260-
inputValidation: { maxPathLength: <span class="num">2048</span>,
1261-
maxHeaderSize: <span class="num">16384</span>, blockedPatterns:
1262-
[<span class="str">/\\.\\./</span>, <span class="str">/%00/</span>,
1263-
<span class="str">/&lt;script&gt;/i</span>], }, }, })
1264-
</div>
1225+
><span class="cmt">// TLS 1.3 + JWT key rotation — zero-downtime</span>
1226+
<span class="kw">const</span> gateway = <span class="kw">new</span> <span class="fn">BunGateway</span>({
1227+
security: {
1228+
tls: {
1229+
enabled: <span class="kw">true</span>,
1230+
cert: <span class="str">'./cert.pem'</span>,
1231+
key: <span class="str">'./key.pem'</span>,
1232+
minVersion: <span class="str">'TLSv1.3'</span>,
1233+
cipherSuites: [<span class="str">'TLS_AES_256_GCM_SHA384'</span>, <span class="str">'TLS_CHACHA20_POLY1305_SHA256'</span>],
1234+
redirectHTTP: <span class="kw">true</span>,
1235+
},
1236+
jwtKeyRotation: {
1237+
secrets: [
1238+
{ key: process.env.<span class="fn">JWT_NEW</span>, kid: <span class="str">'2025-05'</span>, primary: <span class="kw">true</span> },
1239+
{ key: process.env.<span class="fn">JWT_OLD</span>, kid: <span class="str">'2025-04'</span>, deprecated: <span class="kw">true</span> },
1240+
],
1241+
jwksUri: <span class="str">'https://auth.example.com/.well-known/jwks.json'</span>,
1242+
jwksRefreshInterval: <span class="num">3600000</span>,
1243+
},
1244+
inputValidation: {
1245+
maxPathLength: <span class="num">2048</span>,
1246+
maxHeaderSize: <span class="num">16384</span>,
1247+
blockedPatterns: [<span class="str">/\.\./</span>, <span class="str">/%00/</span>, <span class="str">/&lt;script&gt;/i</span>],
1248+
},
1249+
},
1250+
})</div>
12651251
</div>
12661252
</div>
12671253
</section>

0 commit comments

Comments
 (0)