Skip to content

Commit

Permalink
feat: avoid adding single routes to vercel config
Browse files Browse the repository at this point in the history
  • Loading branch information
danielroe committed Oct 20, 2022
1 parent dfe239f commit 05bc228
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 19 deletions.
12 changes: 7 additions & 5 deletions src/presets/vercel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ export const vercel = defineNitroPreset({
for (const [key, value] of Object.entries(nitro.options.routeRules).filter(([_, value]) => value.cache && (value.cache.swr || value.cache.static))) {
if (!value.cache) { continue } // for type support
const funcPrefix = resolve(nitro.options.output.serverDir, '..' + generateEndpoint(key))
await fsp.mkdir(dirname(funcPrefix), { recursive: true })
await fsp.symlink('./' + relative(dirname(funcPrefix), nitro.options.output.serverDir), funcPrefix + '.func', 'junction')
await writeFile(funcPrefix + '.prerender-config.json', JSON.stringify({
expiration: value.cache.static ? false : typeof value.cache.swr === 'number' ? value.cache.swr : 60
expiration: value.cache.static ? false : typeof value.cache.swr === 'number' ? value.cache.swr : 60,
allowQuery: key.includes('/**') ? ['url'] : undefined
}))
}
}
Expand Down Expand Up @@ -124,10 +126,10 @@ function generateBuildConfig (nitro: Nitro) {
handle: 'filesystem'
},
...Object.entries(nitro.options.routeRules)
.filter(([_, value]) => value.cache && (value.cache.swr || value.cache.static))
.filter(([key, value]) => value.cache && (value.cache.swr || value.cache.static) && key.includes('/**'))
.map(([key]) => ({
src: key.replace('/**', '/(.*)'),
dest: generateEndpoint(key)
src: key.replace(/^(.*)\/\*\*/, '(<?url>$1/.*)'),
dest: generateEndpoint(key) + '?url=$url'
})),
{
src: '/(.*)',
Expand All @@ -138,5 +140,5 @@ function generateBuildConfig (nitro: Nitro) {
}

function generateEndpoint (url: string) {
return '/__nitro-' + withoutLeadingSlash(url.replace(/[^a-z]/g, '-'))
return url.includes('/**') ? '/__nitro-' + withoutLeadingSlash(url.replace(/\/\*\*.*/, '').replace(/[^a-z]/g, '-')) : url
}
13 changes: 11 additions & 2 deletions src/runtime/entries/vercel.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
import '#internal/nitro/virtual/polyfill'
import { toNodeListener } from 'h3'
import { toNodeListener, NodeListener } from 'h3'
import { parseQuery } from 'ufo'
import { nitroApp } from '../app'

export default toNodeListener(nitroApp.h3App)
const handler = toNodeListener(nitroApp.h3App)

export default <NodeListener> function (req, res) {
const { url } = parseQuery(req.headers['x-now-route-matches'] as string)
if (url) {
req.url = url as string
}
return handler(req, res)
}
4 changes: 2 additions & 2 deletions test/presets/netlify.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ describe('nitro:preset:netlify', async () => {
/rules/nested/* /base 302
/rules/redirect/obj https://nitro.unjs.io/ 301
/rules/redirect /base 302
/rules/swr-ttl /.netlify/builders/server 200
/rules/swr /.netlify/builders/server 200
/rules/swr-ttl/* /.netlify/builders/server 200
/rules/swr/* /.netlify/builders/server 200
/rules/static /.netlify/builders/server 200
/* /.netlify/functions/server 200"
`)
Expand Down
12 changes: 4 additions & 8 deletions test/presets/vercel.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,16 +96,12 @@ describe('nitro:preset:vercel', async () => {
"handle": "filesystem",
},
{
"dest": "/__nitro--rules-static",
"src": "/rules/static",
"dest": "/__nitro--rules-swr?url=$url",
"src": "(<?url>/rules/swr/.*)",
},
{
"dest": "/__nitro--rules-swr",
"src": "/rules/swr",
},
{
"dest": "/__nitro--rules-swr-ttl",
"src": "/rules/swr-ttl",
"dest": "/__nitro--rules-swr-ttl?url=$url",
"src": "(<?url>/rules/swr-ttl/.*)",
},
{
"dest": "/__nitro",
Expand Down
4 changes: 2 additions & 2 deletions test/tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ export async function setupTest (preset) {
'/rules/cors': { cors: true, headers: { 'access-control-allowed-methods': 'GET' } },
'/rules/redirect': { redirect: '/base' },
'/rules/static': { static: true },
'/rules/swr': { swr: true },
'/rules/swr-ttl': { swr: 60 },
'/rules/swr/**': { swr: true },
'/rules/swr-ttl/**': { swr: 60 },
'/rules/redirect/obj': {
redirect: { to: 'https://nitro.unjs.io/', statusCode: 308 }
},
Expand Down

0 comments on commit 05bc228

Please sign in to comment.