Files
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30

271 lines
5.6 KiB
TypeScript

import type { cookies } from 'next/headers'
type ReadonlyRequestCookies = Awaited<ReturnType<typeof cookies>>
export function AllComponents({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
return (
<>
<ForOf cookies={cookies} expression={expression} />
<Spread cookies={cookies} expression={expression} />
<Size cookies={cookies} expression={expression} />
<GetAndGetAll cookies={cookies} expression={expression} />
<Has cookies={cookies} expression={expression} />
<Set cookies={cookies} expression={expression} />
<Delete cookies={cookies} expression={expression} />
<Clear cookies={cookies} expression={expression} />
<ToString cookies={cookies} expression={expression} />
</>
)
}
function ForOf({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
let output = []
for (let [cookieName, cookie] of cookies) {
if (cookieName.startsWith('x-sentinel')) {
output.push(
<div key={cookieName} id={'for-of-' + cookieName}>
<pre>{print(cookie)}</pre>
</div>
)
}
}
return (
<section>
<h2>for...of cookies()</h2>
{output.length ? output : <div>no cookies found</div>}
</section>
)
}
function Spread({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
let output = [...cookies]
.filter(([cookieName]) => cookieName.startsWith('x-sentinel'))
.map((v) => {
return (
<div key={v[0]} id={'spread-' + v[0]}>
<pre>{print(v[1])}</pre>
</div>
)
})
return (
<section>
<h2>...cookies()</h2>
{output.length ? output : <div>no cookies found</div>}
</section>
)
}
function Size({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
return (
<section>
<h2>cookies().size</h2>
<div id={'size-cookies'}>{cookies.size}</div>
</section>
)
}
function GetAndGetAll({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
return (
<section>
<h2>cookies().get('...')</h2>
<div id={'get-x-sentinel'}>
<pre>{print(cookies.get('x-sentinel'))}</pre>
</div>
<h2>{"cookies().get({ name: '...' })"}</h2>
<div id={'get-x-sentinel-path'}>
<pre>
{print(cookies.get({ name: 'x-sentinel-path', value: undefined }))}
</pre>
</div>
<h2>cookies().getAll('...')</h2>
<div id={'get-x-sentinel-rand'}>
<pre>{print(cookies.getAll('x-sentinel-rand'))}</pre>
</div>
</section>
)
}
function Has({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
return (
<section>
<h2>cookies().has('...')</h2>
<ul>
<li>
<label>x-sentinel</label>
<span id={'has-x-sentinel'}>: {'' + cookies.has('x-sentinel')}</span>
</li>
<li>
<label>x-sentinel-foobar</label>
<span id={'has-x-sentinel-foobar'}>
: {'' + cookies.has('x-sentinel-foobar')}
</span>
</li>
</ul>
</section>
)
}
function Set({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
let result = 'no error'
try {
cookies.set('x-sentinel', 'goodbye')
} catch (e) {
result = e.message
}
return (
<section>
<h2>cookies().set('...')</h2>
<ul>
<li>
<label>cookies().set('x-sentinel', 'goodbye')</label>
<span id={'set-result-x-sentinel'}>: {result}</span>
</li>
<li>
<label>x-sentinel value</label>
<span id={'set-value-x-sentinel'}>
: {cookies.get('x-sentinel').value}
</span>
</li>
</ul>
</section>
)
}
function Delete({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
let result = 'no error'
try {
cookies.delete('x-sentinel')
} catch (e) {
result = e.message
}
return (
<section>
<h2>cookies().delete('...')</h2>
<ul>
<li>
<label>cookies().delete('x-sentinel')</label>
<span id={'delete-result-x-sentinel'}>: {result}</span>
</li>
<li>
<label>x-sentinel value</label>
<span id={'delete-value-x-sentinel'}>
: {cookies.get('x-sentinel').value}
</span>
</li>
</ul>
</section>
)
}
function Clear({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
let result = 'no error'
try {
;(cookies as any).clear()
} catch (e) {
result = e.message
}
return (
<section>
<h2>cookies().clear()</h2>
<ul>
<li>
<label>cookies().clear()</label>
<span id={'clear-result'}>: {result}</span>
</li>
<li>
<label>x-sentinel value</label>
<span id={'clear-value-x-sentinel'}>
: {cookies.get('x-sentinel').value}
</span>
</li>
</ul>
</section>
)
}
function ToString({
cookies,
expression,
}: {
cookies: ReadonlyRequestCookies
expression: string
}) {
// filter out real cookies, no point in leaking and not stable for testing
let result = cookies
.toString()
.split('; ')
.filter((p) => p.startsWith('x-sentinel'))
.join('; ')
return (
<section>
<h2>cookies().toString()</h2>
<ul>
<li>
<label>cookies().toString()</label>
<pre id="toString">{result}</pre>
</li>
</ul>
</section>
)
}
function print(model: any) {
return JSON.stringify(model, null, 2)
}