Skip to content

Commit cdb9989

Browse files
authored
remove dependency on vercel api in tests (#755)
* remove dependency on vercel api in tests * oops. add back ppr * add comment about connection()
1 parent 1868c99 commit cdb9989

File tree

14 files changed

+328
-98
lines changed

14 files changed

+328
-98
lines changed

examples/next-partial-prerendering/components/pricing.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { connection } from 'next/server';
12
import type { Product } from '#/types/product';
23
import { Ping } from '#/components/ping';
34
import { ProductEstimatedArrival } from '#/components/product-estimated-arrival';
@@ -10,8 +11,12 @@ import { Suspense } from 'react';
1011
import { AddToCart } from '#/components/add-to-cart';
1112
import { delayShippingEstimate, withDelay } from '#/lib/delay';
1213
import { cookies } from 'next/headers';
14+
import { getProduct } from '#/lib/products';
1315

1416
async function AddToCartFromCookies() {
17+
// Tell Next.js to render dynamically at runtime instead of build-time
18+
await connection();
19+
1520
// Get the cart count from the users cookies and pass it to the client
1621
// AddToCart component
1722
const cartCount = Number(cookies().get('_cart_count')?.value || '0');
@@ -38,14 +43,7 @@ function LoadingDots() {
3843

3944
async function UserSpecificDetails({ productId }: { productId: string }) {
4045
const data = await withDelay(
41-
fetch(
42-
`https://app-router-api.vercel.app/api/products?id=${productId}&filter=price,usedPrice,leadTime,stock`,
43-
{
44-
// We intentionally disable Next.js Cache to better demo
45-
// streaming
46-
cache: 'no-store',
47-
},
48-
),
46+
getProduct({ id: productId }),
4947
delayShippingEstimate,
5048
);
5149

examples/next-partial-prerendering/components/recommended-products.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
1+
import { connection } from 'next/server';
12
import { Product } from '#/types/product';
23
import { ProductCard } from '#/components/product-card';
34
import { delayRecommendedProducts, withDelay } from '#/lib/delay';
5+
import { getProducts } from '#/lib/products';
46

57
export async function RecommendedProducts() {
8+
// Tell Next.js to render dynamically at runtime instead of build-time
9+
await connection();
10+
611
let products: Product[] = await withDelay(
7-
fetch(
8-
// We intentionally delay the response to simulate a slow data
9-
// request that would benefit from streaming
10-
`https://app-router-api.vercel.app/api/products?filter=1`,
11-
{
12-
// We intentionally disable Next.js Cache to better demo
13-
// streaming
14-
cache: 'no-store',
15-
},
16-
).then((res) => res.json()),
12+
getProducts({ exclude: ['1'] }).then((res) => res.json()),
1713
delayRecommendedProducts,
1814
);
1915

examples/next-partial-prerendering/components/reviews.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
1+
import { connection } from 'next/server';
12
import type { Review } from '#/types/review';
23
import { ProductReviewCard } from '#/components/product-review-card';
34
import { delayReviews, withDelay } from '#/lib/delay';
5+
import { getReviews } from '#/lib/reviews';
46

57
export async function Reviews() {
8+
// Tell Next.js to render dynamically at runtime instead of build-time
9+
await connection();
10+
611
let reviews: Review[] = await withDelay(
7-
fetch(
8-
// We intentionally delay the response to simulate a slow data
9-
// request that would benefit from streaming
10-
`https://app-router-api.vercel.app/api/reviews`,
11-
{
12-
// We intentionally disable Next.js Cache to better demo
13-
// streaming
14-
cache: 'no-store',
15-
},
16-
).then((res) => res.json()),
12+
getReviews().then((res) => res.json()),
1713
delayReviews,
1814
);
1915

examples/next-partial-prerendering/components/single-product.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
import { connection } from 'next/server';
12
import { Pricing } from '#/components/pricing';
23
import type { Product } from '#/types/product';
34
import { ProductRating } from '#/components/product-rating';
45
import Image from 'next/image';
6+
import { getProduct } from '#/lib/products';
57

68
export async function SingleProduct() {
7-
const product: Product = await fetch(
8-
`https://app-router-api.vercel.app/api/products?id=1`,
9-
).then((res) => res.json());
9+
// Tell Next.js to render dynamically at runtime instead of build-time
10+
await connection();
11+
12+
const product: Product = await getProduct({ id: '1' }).then((res) =>
13+
res.json(),
14+
);
1015

1116
return (
1217
<div className="grid grid-cols-4 gap-6">
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const products = [
2+
{
3+
id: '1',
4+
stock: 2,
5+
rating: 5,
6+
name: 'Donec sit elit',
7+
description:
8+
'Morbi eu ullamcorper urna, a condimentum massa. In fermentum ante non turpis cursus fringilla. Praesent neque eros, gravida vel ante sed, vehicula elementum orci. Sed eu ipsum eget enim mattis mollis.',
9+
price: {
10+
amount: 4200,
11+
currency: { code: 'USD', base: 10, exponent: 2 },
12+
scale: 2,
13+
},
14+
isBestSeller: false,
15+
leadTime: 2,
16+
discount: { percent: 90, expires: 2 },
17+
image: 'eniko-kis-KsLPTsYaqIQ-unsplash.jpg',
18+
imageBlur:
19+
'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAqgAwAEAAAAAQAAAAoAAAAA/8AAEQgACgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAAf/aAAwDAQACEQMRAD8A+3/HPx10jQPE0+k6ZrPh6TTtKsbi41R7nVUiu7WeMkQxi2H3lk2su4sCrjBHFd54c+InhvxJ4e0vxFa3aRw6pawXSKxG5VnQOAfcA81474z8G+ENU1OeXU9Dsbt/N8zdNbRSHfn72WU/N79a9U03TtPj061jjtYkRIkAARQAAowAMV2Sa7GsIH//2Q==',
20+
},
21+
{
22+
id: '2',
23+
stock: 5,
24+
rating: 4,
25+
name: 'Fusce commodo porta posuere',
26+
description:
27+
'Morbi eu ullamcorper urna, a condimentum massa. In fermentum ante non turpis cursus fringilla. Praesent neque eros, gravida vel ante sed, vehicula elementum orci. Sed eu ipsum eget enim mattis mollis.',
28+
price: {
29+
amount: 4600,
30+
currency: { code: 'USD', base: 10, exponent: 2 },
31+
scale: 2,
32+
},
33+
isBestSeller: false,
34+
leadTime: 1,
35+
image: 'patrick-OIFgeLnjwrM-unsplash.jpg',
36+
imageBlur:
37+
'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAqgAwAEAAAAAQAAAAoAAAAA/8AAEQgACgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAAf/aAAwDAQACEQMRAD8AwNV+KvwHs7vSNLi8faJoy2VtcQatFLaSz3X2shBGyuUKjy23kgKwY4HStq5j0O4uZZ9Lfz7KR2aCQArviJyjYIyMrg4NXY7Cxddz20bE9SUU/wBKfsQcBQAPav6Gyrh+vQq1pyxMpKTuk+mr0Wr7/gf568TeI2DxlDDUqWXwpumrNpr3tIq7tFa6X67n/9k=',
38+
},
39+
{
40+
id: '3',
41+
stock: 3,
42+
rating: 3,
43+
name: 'Praesent tincidunt lectus',
44+
description:
45+
'Morbi eu ullamcorper urna, a condimentum massa. In fermentum ante non turpis cursus fringilla. Praesent neque eros, gravida vel ante sed, vehicula elementum orci. Sed eu ipsum eget enim mattis mollis.',
46+
price: {
47+
amount: 29200,
48+
currency: { code: 'USD', base: 10, exponent: 2 },
49+
scale: 2,
50+
},
51+
discount: { percent: 70, expires: 7 },
52+
isBestSeller: true,
53+
leadTime: 2,
54+
image: 'yoann-siloine-_T4w3JDm6ug-unsplash.jpg',
55+
imageBlur:
56+
'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAqgAwAEAAAAAQAAAAoAAAAA/8AAEQgACgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAAf/aAAwDAQACEQMRAD8A+6vG/wC1t4J+GniLxP4L1Wynub7RrqWOQBJ1DvLbG9AVxC6ECHPO4DdhM7yBX2XpP2iTSrOROFaGMgegKivPPEGnafLrEckttE7yOu4siktgdzjmvTE4RQOAAKDSx//Z',
57+
},
58+
{
59+
id: '4',
60+
stock: 2,
61+
rating: 5,
62+
name: 'Morbi at viverra turpis',
63+
description:
64+
'Morbi eu ullamcorper urna, a condimentum massa. In fermentum ante non turpis cursus fringilla. Praesent neque eros, gravida vel ante sed, vehicula elementum orci. Sed eu ipsum eget enim mattis mollis.',
65+
price: {
66+
amount: 21200,
67+
currency: { code: 'USD', base: 10, exponent: 2 },
68+
scale: 2,
69+
},
70+
isBestSeller: false,
71+
leadTime: 2,
72+
image: 'alexander-andrews-brAkTCdnhW8-unsplash.jpg',
73+
imageBlur:
74+
'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAqgAwAEAAAAAQAAAAoAAAAA/8AAEQgACgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAAf/aAAwDAQACEQMRAD8Ay59W0U20sUGmapJf2hZZVR7TyWVbd5hKgd1k2yOohVeu4jHGTXBwa9PcQR3BhaAyqG8uQ/Om4Z2tjjI6HHGa2dVtrad3aeJJCOhZQf51TjACKAMAAV0u99z8bni6E4RUaVmt3fc//9k=',
75+
},
76+
{
77+
id: '5',
78+
stock: 1,
79+
rating: 4,
80+
name: 'Maecenas interdum',
81+
description:
82+
'Morbi eu ullamcorper urna, a condimentum massa. In fermentum ante non turpis cursus fringilla. Praesent neque eros, gravida vel ante sed, vehicula elementum orci. Sed eu ipsum eget enim mattis mollis.',
83+
price: {
84+
amount: 28700,
85+
currency: { code: 'USD', base: 10, exponent: 2 },
86+
scale: 2,
87+
},
88+
isBestSeller: false,
89+
leadTime: 4,
90+
image: 'guillaume-coupy-6HuoHgK7FN8-unsplash.jpg',
91+
imageBlur:
92+
'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAAqgAwAEAAAAAQAAAAoAAAAA/8AAEQgACgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/dAAQAAf/aAAwDAQACEQMRAD8A9P8Aj/qni3w58aNel0PV9UENm3lraDUfLtpJJLeOMKlqwXYELGRX3/M3zD3/AE5tPDB+yQ7pFc7FySeTx1NeX+PfhF8J/FPjI+IfE3grRNX1UPC4u7zTba4uN0f3D5skbPlf4TnjtXvcdrbLGoEKAADjaKpQa3Z1Od9j/9k=',
93+
},
94+
];
95+
96+
export const getProduct = (opts: { id: string }) =>
97+
Promise.resolve(
98+
new Response(JSON.stringify(products.find((p) => p.id === opts.id))),
99+
);
100+
101+
export const getProducts = (opts: { exclude: string[] }) =>
102+
Promise.resolve(
103+
new Response(
104+
JSON.stringify(products.filter((p) => !opts.exclude.includes(p.id))),
105+
),
106+
);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const reviews = [
2+
{
3+
id: '1',
4+
name: 'Nullam Duis',
5+
rating: 4,
6+
text: 'Phasellus efficitur, nisi ut varius ultricies, tortor arcu ullamcorper nisi, eu auctor enim est ut enim. Sed fringilla, nulla ut tincidunt hendrerit, risus tortor laoreet tortor, non mattis arcu elit vel ante.',
7+
},
8+
{
9+
id: '2',
10+
name: 'Donec Nulla Velit',
11+
rating: 1,
12+
text: 'Nullam fermentum nisl non mattis fringilla!!!!',
13+
},
14+
{
15+
id: '3',
16+
name: 'J Tempus',
17+
rating: 3,
18+
text: 'Pellentesque faucibus quam eu vehicula pulvinar. Integer cursus fringilla metus.',
19+
},
20+
];
21+
22+
export const getReviews = () =>
23+
Promise.resolve(new Response(JSON.stringify(reviews)));

examples/next-partial-prerendering/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"date-fns": "3.6.0",
1616
"dinero.js": "2.0.0-alpha.8",
1717
"geist": "1.3.1",
18-
"next": "15.0.0-canary.67",
18+
"next": "15.0.0-canary.174",
1919
"react": "19.0.0-rc-8b08e99e-20240713",
2020
"react-dom": "19.0.0-rc-8b08e99e-20240713"
2121
},

examples/playground14/app/isr/[id]/dynamic/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getPost } from "../../../../lib/posts";
2+
13
// Imported from https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration
24
interface Post {
35
id: string;
@@ -20,7 +22,7 @@ export async function generateStaticParams() {
2022

2123
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
2224
const id = (await params).id;
23-
const post: Post = await fetch(`https://api.vercel.app/blog/${id}`).then((res) => res.json());
25+
const post: Post = await getPost({ id }).then((res) => res.json());
2426
return (
2527
<main>
2628
<h1>{post.title}</h1>

examples/playground14/app/isr/[id]/no-dynamic/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getPost } from "../../../../lib/posts";
2+
13
// Imported from https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration
24
interface Post {
35
id: string;
@@ -19,7 +21,7 @@ export async function generateStaticParams() {
1921

2022
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
2123
const id = (await params).id;
22-
const post: Post = await fetch(`https://api.vercel.app/blog/${id}`).then((res) => res.json());
24+
const post: Post = await getPost({ id }).then((res) => res.json());
2325
return (
2426
<main>
2527
<h1>{post.title}</h1>

examples/playground14/lib/posts.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const posts = [
2+
{
3+
id: 1,
4+
title: "Lorem Ipsum - What Is It and How to Use It?",
5+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
6+
author: "John Doe",
7+
date: "2023-08-01",
8+
category: "Technology",
9+
},
10+
{
11+
id: 2,
12+
title: "The Benefits of Regular Exercise",
13+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
14+
author: "Jane Smith",
15+
date: "2023-07-25",
16+
category: "Health & Fitness",
17+
},
18+
{
19+
id: 3,
20+
title: "Mastering the Art of Cooking",
21+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
22+
author: "Michael Johnson",
23+
date: "2023-07-18",
24+
category: "Food & Cooking",
25+
},
26+
{
27+
id: 4,
28+
title: "Traveling on a Budget - Tips and Tricks",
29+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
30+
author: "Emily Brown",
31+
date: "2023-07-10",
32+
category: "Travel",
33+
},
34+
{
35+
id: 5,
36+
title: "The Rise of Artificial Intelligence in Modern Society",
37+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
38+
author: "David Lee",
39+
date: "2023-06-29",
40+
category: "Technology",
41+
},
42+
{
43+
id: 6,
44+
title: "10 Must-Read Books for Summer",
45+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...",
46+
author: "Sarah Johnson",
47+
date: "2023-06-21",
48+
category: "Books",
49+
},
50+
];
51+
52+
export const getPost = (opts: { id: string }) =>
53+
Promise.resolve(new Response(JSON.stringify(posts.find((p) => p.id === Number(opts.id)))));

examples/playground15/app/isr/[id]/dynamic/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getPost } from "../../../../lib/posts";
2+
13
// Imported from https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration
24
interface Post {
35
id: string;
@@ -20,7 +22,7 @@ export async function generateStaticParams() {
2022

2123
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
2224
const id = (await params).id;
23-
const post: Post = await fetch(`https://api.vercel.app/blog/${id}`).then((res) => res.json());
25+
const post: Post = await getPost({ id }).then((res) => res.json());
2426
return (
2527
<main>
2628
<h1>{post.title}</h1>

examples/playground15/app/isr/[id]/no-dynamic/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getPost } from "../../../../lib/posts";
2+
13
// Imported from https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration
24
interface Post {
35
id: string;
@@ -19,7 +21,7 @@ export async function generateStaticParams() {
1921

2022
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
2123
const id = (await params).id;
22-
const post: Post = await fetch(`https://api.vercel.app/blog/${id}`).then((res) => res.json());
24+
const post: Post = await getPost({ id }).then((res) => res.json());
2325
return (
2426
<main>
2527
<h1>{post.title}</h1>

0 commit comments

Comments
 (0)