diff --git a/docs/guide/presets.md b/docs/guide/presets.md index 1a048194e0..bab8a29a79 100644 --- a/docs/guide/presets.md +++ b/docs/guide/presets.md @@ -17,6 +17,7 @@ Built-in presets: - `node-cli` - `render-com` - `service-worker` +- `stormkit` - `vercel` ([deployment guide](https://v3.nuxtjs.org/guide/deployment/vercel)) You can build nitro project against a specific preset using `NITRO_PRESET=name npx nitropack build` diff --git a/package.json b/package.json index c4ab54c0cc..43b47238a3 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "serve-placeholder": "^2.0.1", "serve-static": "^1.15.0", "source-map-support": "^0.5.21", - "std-env": "^3.0.1", + "std-env": "^3.1.0", "table": "^6.8.0", "ufo": "^0.8.3", "unenv": "^0.4.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2089bb04e..8dec850f5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: serve-static: ^1.15.0 source-map-support: ^0.5.21 standard-version: ^9.3.2 - std-env: ^3.0.1 + std-env: ^3.1.0 table: ^6.8.0 ufo: ^0.8.3 unbuild: ^0.7.4 @@ -158,7 +158,7 @@ importers: serve-placeholder: 2.0.1 serve-static: 1.15.0 source-map-support: 0.5.21 - std-env: 3.0.1 + std-env: 3.1.0 table: 6.8.0 ufo: 0.8.3 unenv: 0.4.6 @@ -5687,8 +5687,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /std-env/3.0.1: - resolution: {integrity: sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==} + /std-env/3.1.0: + resolution: {integrity: sha512-UuqVLejQtP5JmguTsZpi3wE/+n62T+FAY7LyPMUMfcwzaLziMI5WXo0eeeGxblnh71oXQfIA5I2u9a4/XtoUWw==} dev: false /streamsearch/0.1.2: diff --git a/src/presets/index.ts b/src/presets/index.ts index 6ca21616fa..03cc4d096d 100644 --- a/src/presets/index.ts +++ b/src/presets/index.ts @@ -14,4 +14,5 @@ export * from './node-server' export * from './node' export * from './render-com' export * from './service-worker' +export * from './stormkit' export * from './vercel' diff --git a/src/presets/stormkit.ts b/src/presets/stormkit.ts new file mode 100644 index 0000000000..3c31741f12 --- /dev/null +++ b/src/presets/stormkit.ts @@ -0,0 +1,9 @@ +import { defineNitroPreset } from '../preset' + +export const stormkit = defineNitroPreset({ + entry: '#nitro/entries/stormkit', + externals: true, + output: { + dir: '{{ rootDir }}/.stormkit' + } +}) diff --git a/src/runtime/entries/stormkit.ts b/src/runtime/entries/stormkit.ts new file mode 100644 index 0000000000..c1c2bb29bd --- /dev/null +++ b/src/runtime/entries/stormkit.ts @@ -0,0 +1,29 @@ +import type { ALBHandler } from 'aws-lambda' +import '#nitro/virtual/polyfill' +import { withQuery } from 'ufo' +import { nitroApp } from '../app' + +export const handler: ALBHandler = async function handler (event, context) { + const url = withQuery(event.path, event.queryStringParameters || {}) + const method = event.httpMethod || 'get' + + const r = await nitroApp.localCall({ + event, + url, + context, + headers: event.headers, + method, + query: event.queryStringParameters, + body: event.body + }) + + return { + statusCode: r.status, + headers: normalizeOutgoingHeaders(r.headers), + body: r.body.toString() + } +} + +function normalizeOutgoingHeaders (headers: Record) { + return Object.fromEntries(Object.entries(headers).map(([k, v]) => [k, Array.isArray(v) ? v.join(',') : v!])) +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 5dcaf3d614..0d1c07d78b 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -68,6 +68,7 @@ export function replaceAll (input: string, from: string, to: string) { const autodetectableProviders = { azure_static: 'azure', netlify: 'netlify', + stormkit: 'stormkit', vercel: 'vercel' }