Separate PPR from static optimization

This commit is contained in:
Sam Becker 2024-05-08 11:36:20 -05:00
parent e79a053b6d
commit aeba8d02c5
13 changed files with 76 additions and 110 deletions

View File

@ -94,7 +94,7 @@ _⚠ READ BEFORE PROCEEDING_
Application behavior can be changed by configuring the following environment variables: Application behavior can be changed by configuring the following environment variables:
- `NEXT_PUBLIC_PRO_MODE = 1` enables higher quality image storage (results in increased storage usage) - `NEXT_PUBLIC_PRO_MODE = 1` enables higher quality image storage (results in increased storage usage)
- `NEXT_PUBLIC_STATICALLY_OPTIMIZE = 1` enables PPR and static optimization, i.e., building pages ahead of time (results in increased storage usage)—⚠️ _Experimental_ - `NEXT_PUBLIC_STATICALLY_OPTIMIZE = 1` enables static optimization, i.e., renders pages and images at build time (results in increased project usage)—⚠️ _Experimental_
- `NEXT_PUBLIC_BLUR_DISABLED = 1` prevents image blur data being stored and displayed (potentially useful for limiting Postgres usage) - `NEXT_PUBLIC_BLUR_DISABLED = 1` prevents image blur data being stored and displayed (potentially useful for limiting Postgres usage)
- `NEXT_PUBLIC_GEO_PRIVACY = 1` disables collection/display of location-based data - `NEXT_PUBLIC_GEO_PRIVACY = 1` disables collection/display of location-based data
- `NEXT_PUBLIC_IGNORE_PRIORITY_ORDER = 1` prevents `priority_order` field affecting photo order - `NEXT_PUBLIC_IGNORE_PRIORITY_ORDER = 1` prevents `priority_order` field affecting photo order

View File

@ -35,16 +35,6 @@ const nextConfig = {
.concat(createRemotePattern(HOSTNAME_AWS_S3)), .concat(createRemotePattern(HOSTNAME_AWS_S3)),
minimumCacheTTL: 31536000, minimumCacheTTL: 31536000,
}, },
...process.env.NEXT_PUBLIC_STATICALLY_OPTIMIZE === '1' && {
experimental: { ppr: true },
},
webpack: (config) => {
config.optimization ??= {};
if (process.env.NODE_ENV !== 'production') {
config.optimization.minimize = false;
}
return config;
},
}; };
const withBundleAnalyzer = require('@next/bundle-analyzer')({ const withBundleAnalyzer = require('@next/bundle-analyzer')({

View File

@ -42,7 +42,7 @@
"jest": "^29.7.0", "jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0", "jest-environment-jsdom": "^29.7.0",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"next": "14.3.0-canary.44", "next": "^14.2.3",
"next-auth": "5.0.0-beta.15", "next-auth": "5.0.0-beta.15",
"next-themes": "^0.3.0", "next-themes": "^0.3.0",
"openai": "^4.38.5", "openai": "^4.38.5",

123
pnpm-lock.yaml generated
View File

@ -58,7 +58,7 @@ importers:
version: 1.1.3 version: 1.1.3
'@vercel/analytics': '@vercel/analytics':
specifier: ^1.2.2 specifier: ^1.2.2
version: 1.2.2(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 1.2.2(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@vercel/blob': '@vercel/blob':
specifier: ^0.23.2 specifier: ^0.23.2
version: 0.23.2 version: 0.23.2
@ -67,7 +67,7 @@ importers:
version: 1.0.1 version: 1.0.1
'@vercel/speed-insights': '@vercel/speed-insights':
specifier: ^1.0.10 specifier: ^1.0.10
version: 1.0.10(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5)) version: 1.0.10(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5))
ai: ai:
specifier: ^3.0.34 specifier: ^3.0.34
version: 3.0.34(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5))(zod@3.23.4) version: 3.0.34(react@18.3.1)(solid-js@1.8.17)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5))(zod@3.23.4)
@ -108,11 +108,11 @@ importers:
specifier: ^5.0.7 specifier: ^5.0.7
version: 5.0.7 version: 5.0.7
next: next:
specifier: 14.3.0-canary.44 specifier: ^14.2.3
version: 14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-auth: next-auth:
specifier: 5.0.0-beta.15 specifier: 5.0.0-beta.15
version: 5.0.0-beta.15(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 5.0.0-beta.15(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
next-themes: next-themes:
specifier: ^0.3.0 specifier: ^0.3.0
version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -809,62 +809,62 @@ packages:
'@next/bundle-analyzer@14.2.3': '@next/bundle-analyzer@14.2.3':
resolution: {integrity: sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA==} resolution: {integrity: sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA==}
'@next/env@14.3.0-canary.44': '@next/env@14.2.3':
resolution: {integrity: sha512-n7E0UKB5tAcEEVO9iLuWVdx5nf+39GEHBo4mrRrC9zqXdP9Jxve4nFWFeDTU5EBSzuH3Zy4DmoVNHUOspHLmyQ==} resolution: {integrity: sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==}
'@next/eslint-plugin-next@14.2.3': '@next/eslint-plugin-next@14.2.3':
resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==}
'@next/swc-darwin-arm64@14.3.0-canary.44': '@next/swc-darwin-arm64@14.2.3':
resolution: {integrity: sha512-gooP4KXsw3DDZAlvjEJNyQsSacwPRJJ5f5wkrws1J17L/heUgZHX6G7vHnQgkAejyvfa5BhW2c9rlcPxOHNQqw==} resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@14.3.0-canary.44': '@next/swc-darwin-x64@14.2.3':
resolution: {integrity: sha512-NbtsRFYzs8sU2VCMzqGjb4tdzhkQt1KcMB/ZqnHX5pPw5xtXqPXzBGLM0z3wHr5/vWlL4V22j8E7AGchE2TeXg==} resolution: {integrity: sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@14.3.0-canary.44': '@next/swc-linux-arm64-gnu@14.2.3':
resolution: {integrity: sha512-ctGyGeHy/07TH82ZYuA74Xy0t8Zcq1xrMLTI9RUA8Dh4khf37RI7r9SHzAeqKmPGZJAPRyE6pwXtAlCg/TstjA==} resolution: {integrity: sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@14.3.0-canary.44': '@next/swc-linux-arm64-musl@14.2.3':
resolution: {integrity: sha512-cX/jD3EnhIphZwRBureGSPV4GlQ7ueUKmne+5N2BsO6tHih0cnveyssropX1dTupU7aGti+22kPorPDY7BYNfQ==} resolution: {integrity: sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@14.3.0-canary.44': '@next/swc-linux-x64-gnu@14.2.3':
resolution: {integrity: sha512-2HPcwOxXBQj3WD5ezz78o/SJXXz9D4U5H7Mc4e0cTUMy/GGW4ysg2Ullwus+FVOmm2z8GAcNbEeqh71D/lAtww==} resolution: {integrity: sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@14.3.0-canary.44': '@next/swc-linux-x64-musl@14.2.3':
resolution: {integrity: sha512-UV9HUQenKZkrqbhRsB59X5KrMKaPUnXkbZmwLkjD2IieUgm5CswfXJ2+7JneopviwaR3k8eJMA2KV9uyA/3LpQ==} resolution: {integrity: sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@14.3.0-canary.44': '@next/swc-win32-arm64-msvc@14.2.3':
resolution: {integrity: sha512-Swrl7I7q4sw7iS6O2j5v/c5bLgHP+i4/z79XTzU2LDubMP7gL3eUqLhN1GAOO35q/j49Ysbsr3VUM14JCtGOkg==} resolution: {integrity: sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-ia32-msvc@14.3.0-canary.44': '@next/swc-win32-ia32-msvc@14.2.3':
resolution: {integrity: sha512-3KKbNG6EDMpAY9PP/Bv32ildjljC9vUwRbLrhBLa6l3TkD6n8xtlObNf9DMD0Fsa79VKHZKIkY1EvCn/7xlj5A==} resolution: {integrity: sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@14.3.0-canary.44': '@next/swc-win32-x64-msvc@14.2.3':
resolution: {integrity: sha512-pDD9g/tTI/ihOP4c8wy5E0dRz8QUy2/7uAVyW11MIkroA4A4/cWa58PQNW5ByhvySPTcf9trnlaVPa2mdxBMMA==} resolution: {integrity: sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1364,8 +1364,11 @@ packages:
resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==} resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
'@swc/helpers@0.5.11': '@swc/counter@0.1.3':
resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
'@swc/helpers@0.5.5':
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
'@tailwindcss/container-queries@0.1.1': '@tailwindcss/container-queries@0.1.1':
resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==}
@ -3259,8 +3262,8 @@ packages:
react: ^16.8 || ^17 || ^18 react: ^16.8 || ^17 || ^18
react-dom: ^16.8 || ^17 || ^18 react-dom: ^16.8 || ^17 || ^18
next@14.3.0-canary.44: next@14.2.3:
resolution: {integrity: sha512-iYJmuiARcldXjN27N0Yo8gWyy6vWl+FoUNcEaL2GGh3sA/rc4hcbZD89ZUXoVFsPAI7ze6sKM60Znct9RwCbKQ==} resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==}
engines: {node: '>=18.17.0'} engines: {node: '>=18.17.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -5452,37 +5455,37 @@ snapshots:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
'@next/env@14.3.0-canary.44': {} '@next/env@14.2.3': {}
'@next/eslint-plugin-next@14.2.3': '@next/eslint-plugin-next@14.2.3':
dependencies: dependencies:
glob: 10.3.10 glob: 10.3.10
'@next/swc-darwin-arm64@14.3.0-canary.44': '@next/swc-darwin-arm64@14.2.3':
optional: true optional: true
'@next/swc-darwin-x64@14.3.0-canary.44': '@next/swc-darwin-x64@14.2.3':
optional: true optional: true
'@next/swc-linux-arm64-gnu@14.3.0-canary.44': '@next/swc-linux-arm64-gnu@14.2.3':
optional: true optional: true
'@next/swc-linux-arm64-musl@14.3.0-canary.44': '@next/swc-linux-arm64-musl@14.2.3':
optional: true optional: true
'@next/swc-linux-x64-gnu@14.3.0-canary.44': '@next/swc-linux-x64-gnu@14.2.3':
optional: true optional: true
'@next/swc-linux-x64-musl@14.3.0-canary.44': '@next/swc-linux-x64-musl@14.2.3':
optional: true optional: true
'@next/swc-win32-arm64-msvc@14.3.0-canary.44': '@next/swc-win32-arm64-msvc@14.2.3':
optional: true optional: true
'@next/swc-win32-ia32-msvc@14.3.0-canary.44': '@next/swc-win32-ia32-msvc@14.2.3':
optional: true optional: true
'@next/swc-win32-x64-msvc@14.3.0-canary.44': '@next/swc-win32-x64-msvc@14.2.3':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@ -6111,8 +6114,11 @@ snapshots:
'@smithy/types': 2.12.0 '@smithy/types': 2.12.0
tslib: 2.6.2 tslib: 2.6.2
'@swc/helpers@0.5.11': '@swc/counter@0.1.3': {}
'@swc/helpers@0.5.5':
dependencies: dependencies:
'@swc/counter': 0.1.3
tslib: 2.6.2 tslib: 2.6.2
'@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3)': '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3)':
@ -6404,11 +6410,11 @@ snapshots:
dependencies: dependencies:
crypto-js: 4.2.0 crypto-js: 4.2.0
'@vercel/analytics@1.2.2(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': '@vercel/analytics@1.2.2(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
server-only: 0.0.1 server-only: 0.0.1
optionalDependencies: optionalDependencies:
next: 14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@vercel/blob@0.23.2': '@vercel/blob@0.23.2':
@ -6422,9 +6428,9 @@ snapshots:
dependencies: dependencies:
'@upstash/redis': 1.25.1 '@upstash/redis': 1.25.1
'@vercel/speed-insights@1.0.10(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5))': '@vercel/speed-insights@1.0.10(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.15)(vue@3.4.25(typescript@5.4.5))':
optionalDependencies: optionalDependencies:
next: 14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
svelte: 4.2.15 svelte: 4.2.15
vue: 3.4.25(typescript@5.4.5) vue: 3.4.25(typescript@5.4.5)
@ -8407,10 +8413,10 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next-auth@5.0.0-beta.15(next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): next-auth@5.0.0-beta.15(next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@auth/core': 0.28.0 '@auth/core': 0.28.0
next: 14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
@ -8418,10 +8424,10 @@ snapshots:
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
next@14.3.0-canary.44(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): next@14.2.3(@babel/core@7.24.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@next/env': 14.3.0-canary.44 '@next/env': 14.2.3
'@swc/helpers': 0.5.11 '@swc/helpers': 0.5.5
busboy: 1.6.0 busboy: 1.6.0
caniuse-lite: 1.0.30001612 caniuse-lite: 1.0.30001612
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -8430,16 +8436,15 @@ snapshots:
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.3.1) styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.3.1)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 14.3.0-canary.44 '@next/swc-darwin-arm64': 14.2.3
'@next/swc-darwin-x64': 14.3.0-canary.44 '@next/swc-darwin-x64': 14.2.3
'@next/swc-linux-arm64-gnu': 14.3.0-canary.44 '@next/swc-linux-arm64-gnu': 14.2.3
'@next/swc-linux-arm64-musl': 14.3.0-canary.44 '@next/swc-linux-arm64-musl': 14.2.3
'@next/swc-linux-x64-gnu': 14.3.0-canary.44 '@next/swc-linux-x64-gnu': 14.2.3
'@next/swc-linux-x64-musl': 14.3.0-canary.44 '@next/swc-linux-x64-musl': 14.2.3
'@next/swc-win32-arm64-msvc': 14.3.0-canary.44 '@next/swc-win32-arm64-msvc': 14.2.3
'@next/swc-win32-ia32-msvc': 14.3.0-canary.44 '@next/swc-win32-ia32-msvc': 14.2.3
'@next/swc-win32-x64-msvc': 14.3.0-canary.44 '@next/swc-win32-x64-msvc': 14.2.3
sharp: 0.33.3
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros

View File

@ -1 +0,0 @@
export { default } from '@/components/PageSpinner';

View File

@ -5,8 +5,7 @@ import { getIBMPlexMonoMedium } from '@/site/font';
import { ImageResponse } from 'next/og'; import { ImageResponse } from 'next/og';
import { getImageResponseCacheControlHeaders } from '@/image-response/cache'; import { getImageResponseCacheControlHeaders } from '@/image-response/cache';
import { STATICALLY_OPTIMIZED } from '@/site/config'; import { STATICALLY_OPTIMIZED } from '@/site/config';
import { getPhotoIds } from '@/photo/db'; import { GENERATE_STATIC_PARAMS_LIMIT, getPhotoIds } from '@/photo/db';
import { GENERATE_STATIC_PARAMS_LIMIT } from '@/photo';
export let generateStaticParams: export let generateStaticParams:
(() => Promise<{ photoId: string }[]>) | undefined = undefined; (() => Promise<{ photoId: string }[]>) | undefined = undefined;

View File

@ -1,5 +1,4 @@
import { import {
GENERATE_STATIC_PARAMS_LIMIT,
GRID_THUMBNAILS_TO_SHOW_MAX, GRID_THUMBNAILS_TO_SHOW_MAX,
descriptionForPhoto, descriptionForPhoto,
titleForPhoto, titleForPhoto,
@ -14,7 +13,7 @@ import {
import PhotoDetailPage from '@/photo/PhotoDetailPage'; import PhotoDetailPage from '@/photo/PhotoDetailPage';
import { getPhotosNearIdCachedCached } from '@/photo/cache'; import { getPhotosNearIdCachedCached } from '@/photo/cache';
import { STATICALLY_OPTIMIZED } from '@/site/config'; import { STATICALLY_OPTIMIZED } from '@/site/config';
import { getPhotoIds } from '@/photo/db'; import { GENERATE_STATIC_PARAMS_LIMIT, getPhotoIds } from '@/photo/db';
export let generateStaticParams: export let generateStaticParams:
(() => Promise<{ photoId: string }[]>) | undefined = undefined; (() => Promise<{ photoId: string }[]>) | undefined = undefined;

View File

@ -1,6 +1,4 @@
import { cache } from 'react'; import { cache } from 'react';
import { auth } from '@/auth'; import { auth } from '@/auth';
import { screenForPPR } from '@/utility/ppr';
export const authCachedSafe = cache(() => auth() export const authCachedSafe = cache(() => auth().catch(() => null));
.catch(e => screenForPPR(e, null, 'auth')));

View File

@ -16,7 +16,8 @@ import { parameterize } from '@/utility/string';
import { TagsWithMeta } from '@/tag'; import { TagsWithMeta } from '@/tag';
import { FilmSimulation, FilmSimulations } from '@/simulation'; import { FilmSimulation, FilmSimulations } from '@/simulation';
import { SHOULD_DEBUG_SQL, PRIORITY_ORDER_ENABLED } from '@/site/config'; import { SHOULD_DEBUG_SQL, PRIORITY_ORDER_ENABLED } from '@/site/config';
import { screenForPPR } from '@/utility/ppr';
export const GENERATE_STATIC_PARAMS_LIMIT = 1000;
const PHOTO_DEFAULT_LIMIT = 100; const PHOTO_DEFAULT_LIMIT = 100;
@ -310,7 +311,6 @@ const safelyQueryPhotos = async <T>(
try { try {
result = await callback(); result = await callback();
} catch (e: any) { } catch (e: any) {
screenForPPR(e, undefined, 'neon postgres');
if (MIGRATION_FIELDS_01.some(field => new RegExp( if (MIGRATION_FIELDS_01.some(field => new RegExp(
`column "${field}" of relation "photos" does not exist`, `column "${field}" of relation "photos" does not exist`,
'i', 'i',

View File

@ -14,8 +14,6 @@ import camelcaseKeys from 'camelcase-keys';
import { isBefore } from 'date-fns'; import { isBefore } from 'date-fns';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
export const GENERATE_STATIC_PARAMS_LIMIT = 1000;
// ROOT PAGE // ROOT PAGE
export const INFINITE_SCROLL_INITIAL_HOME = export const INFINITE_SCROLL_INITIAL_HOME =
process.env.NODE_ENV === 'development' ? 2 : 12; process.env.NODE_ENV === 'development' ? 2 : 12;

View File

@ -27,7 +27,6 @@ import {
isUrlFromCloudflareR2, isUrlFromCloudflareR2,
} from './cloudflare-r2'; } from './cloudflare-r2';
import { PATH_API_PRESIGNED_URL } from '@/site/paths'; import { PATH_API_PRESIGNED_URL } from '@/site/paths';
import { screenForPPR } from '@/utility/ppr';
export const generateStorageId = () => generateNanoid(16); export const generateStorageId = () => generateNanoid(16);
@ -193,15 +192,15 @@ const getStorageUrlsForPrefix = async (prefix = '') => {
if (HAS_VERCEL_BLOB_STORAGE) { if (HAS_VERCEL_BLOB_STORAGE) {
urls.push(...await vercelBlobList(prefix) urls.push(...await vercelBlobList(prefix)
.catch(e => screenForPPR(e, [], 'vercel blob'))); .catch(() => []));
} }
if (HAS_AWS_S3_STORAGE) { if (HAS_AWS_S3_STORAGE) {
urls.push(...await awsS3List(prefix) urls.push(...await awsS3List(prefix)
.catch(e => screenForPPR(e, [], 'aws blob'))); .catch(() => []));
} }
if (HAS_CLOUDFLARE_R2_STORAGE) { if (HAS_CLOUDFLARE_R2_STORAGE) {
urls.push(...await cloudflareR2List(prefix) urls.push(...await cloudflareR2List(prefix)
.catch(e => screenForPPR(e, [], 'cloudflare blob'))); .catch(() => []));
} }
return urls return urls

View File

@ -358,8 +358,8 @@ export default function SiteChecklistClient({
optional optional
experimental experimental
> >
Set environment variable to {'"1"'} to enable PPR Set environment variable to {'"1"'} to enable static optimization,
and static optimization, i.e., build pages ahead of time: i.e., rendering pages and images at build time:
{renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE'])} {renderEnvVars(['NEXT_PUBLIC_STATICALLY_OPTIMIZE'])}
</ChecklistRow> </ChecklistRow>
<ChecklistRow <ChecklistRow

View File

@ -1,21 +0,0 @@
export const screenForPPR = <T>(
error: any,
fallback: T,
sourceToLog?: string,
debug?: boolean
): T => {
// PPR errors, if caught, must be re-thrown in order to
// postpone rendering
if (error.sourceError?.message?.includes('ppr-caught-error')) {
if (debug) {
console.log(`${sourceToLog}: throwing error.sourceError`);
}
throw error.sourceError;
} else if (error.message?.includes('ppr-caught-error')) {
if (debug) {
console.log(`${sourceToLog}: throwing error`);
}
throw error;
}
return fallback;
};