@mantajs/host-nitro 0.2.0-beta.5 → 0.2.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.d.ts +1 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +101 -1
- package/dist/build.js.map +1 -1
- package/package.json +1 -1
package/dist/build.d.ts
CHANGED
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAyEpF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CA8F/G;AAED,wBAAgB,mCAAmC,IAAI,MAAM,CA0F5D"}
|
package/dist/build.js
CHANGED
|
@@ -33,7 +33,16 @@ export async function buildForProduction(options) {
|
|
|
33
33
|
mkdirSync(targetDir, { recursive: true });
|
|
34
34
|
if (!existsSync(routesDir))
|
|
35
35
|
mkdirSync(routesDir, { recursive: true });
|
|
36
|
-
|
|
36
|
+
const spaManifestPath = resolve(targetDir, 'spa-manifest.ts');
|
|
37
|
+
if (!existsSync(spaManifestPath)) {
|
|
38
|
+
writeFileSync(spaManifestPath, `// Auto-generated by @mantajs/host-nitro — do not edit\nexport const spaFallbacks = [] as const\n`);
|
|
39
|
+
}
|
|
40
|
+
if (preset === 'node') {
|
|
41
|
+
writeFileSync(resolve(routesDir, '[...].ts'), generateNodeProductionCatchAllRoute());
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
copyFileSync(resolve(templatesDir, 'routes', '[...].ts'), resolve(routesDir, '[...].ts'));
|
|
45
|
+
}
|
|
37
46
|
// Copy manta.config.ts
|
|
38
47
|
const configSrc = resolve(cwd, 'manta.config.ts');
|
|
39
48
|
if (existsSync(configSrc)) {
|
|
@@ -162,4 +171,95 @@ export async function getMantaAdapter() { const { adapter } = await bootPromise(
|
|
|
162
171
|
export async function getMantaApp() { const { app } = await bootPromise(); return app }
|
|
163
172
|
`;
|
|
164
173
|
}
|
|
174
|
+
export function generateNodeProductionCatchAllRoute() {
|
|
175
|
+
return `// @ts-nocheck — Auto-generated by @mantajs/host-nitro
|
|
176
|
+
// Node production catch-all: Manta API first, then local SPA fallbacks.
|
|
177
|
+
|
|
178
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
179
|
+
import { join } from 'node:path'
|
|
180
|
+
import { defineEventHandler, getRequestHeaders, getRequestURL, readRawBody } from '@mantajs/adapter-h3'
|
|
181
|
+
import { getMantaAdapter } from '../manta-bootstrap.js'
|
|
182
|
+
import { spaFallbacks } from '../spa-manifest.js'
|
|
183
|
+
|
|
184
|
+
export default defineEventHandler(async (event) => {
|
|
185
|
+
const adapter = await getMantaAdapter()
|
|
186
|
+
|
|
187
|
+
const url = getRequestURL(event)
|
|
188
|
+
const method = event.method ?? 'GET'
|
|
189
|
+
const headers = getRequestHeaders(event)
|
|
190
|
+
|
|
191
|
+
let body
|
|
192
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
193
|
+
body = (await readRawBody(event, false)) ?? undefined
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const request = new Request(url.toString(), {
|
|
197
|
+
method,
|
|
198
|
+
headers,
|
|
199
|
+
body: body || undefined,
|
|
200
|
+
})
|
|
201
|
+
const response = await adapter.handleRequest(request)
|
|
202
|
+
if (response.status !== 404 || method !== 'GET') return response
|
|
203
|
+
|
|
204
|
+
const fallback = resolveSpaFallback(url.pathname)
|
|
205
|
+
if (!fallback) return response
|
|
206
|
+
|
|
207
|
+
const indexHtml = readSpaIndex(fallback.indexPath)
|
|
208
|
+
if (!indexHtml) return response
|
|
209
|
+
|
|
210
|
+
if (fallback.redirectTo) {
|
|
211
|
+
return new Response(null, {
|
|
212
|
+
status: 307,
|
|
213
|
+
headers: { location: fallback.redirectTo },
|
|
214
|
+
})
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return new Response(indexHtml, {
|
|
218
|
+
status: 200,
|
|
219
|
+
headers: { 'content-type': 'text/html; charset=utf-8' },
|
|
220
|
+
})
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
function resolveSpaFallback(pathname) {
|
|
224
|
+
if (pathname.startsWith('/api/')) return null
|
|
225
|
+
if (hasFileExtension(pathname)) return null
|
|
226
|
+
if (!Array.isArray(spaFallbacks) || spaFallbacks.length === 0) return null
|
|
227
|
+
|
|
228
|
+
if (spaFallbacks.length === 1) {
|
|
229
|
+
const spa = spaFallbacks[0]
|
|
230
|
+
if (pathname === '/' && spa.mountPath !== '/') {
|
|
231
|
+
return { ...spa, redirectTo: spa.mountPath }
|
|
232
|
+
}
|
|
233
|
+
for (const authPath of ['/login', '/reset-password', '/accept-invite']) {
|
|
234
|
+
if (pathname === authPath && spa.mountPath !== '/') {
|
|
235
|
+
return { ...spa, redirectTo: spa.mountPath + authPath }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
for (const spa of spaFallbacks) {
|
|
241
|
+
if (spa.mountPath === '/') return { ...spa }
|
|
242
|
+
if (pathname === spa.mountPath || pathname.startsWith(spa.mountPath + '/')) return { ...spa }
|
|
243
|
+
}
|
|
244
|
+
return null
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function hasFileExtension(pathname) {
|
|
248
|
+
const lastSegment = pathname.split('/').pop() || ''
|
|
249
|
+
return lastSegment.includes('.') && lastSegment.split('.').pop().length >= 2
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function readSpaIndex(indexPath) {
|
|
253
|
+
const relativeIndex = indexPath.startsWith('/') ? indexPath.slice(1) : indexPath
|
|
254
|
+
const candidates = [
|
|
255
|
+
join(process.cwd(), 'public', relativeIndex),
|
|
256
|
+
join(process.cwd(), '.output', 'public', relativeIndex),
|
|
257
|
+
]
|
|
258
|
+
for (const candidate of candidates) {
|
|
259
|
+
if (existsSync(candidate)) return readFileSync(candidate, 'utf-8')
|
|
260
|
+
}
|
|
261
|
+
return null
|
|
262
|
+
}
|
|
263
|
+
`;
|
|
264
|
+
}
|
|
165
265
|
//# sourceMappingURL=build.js.map
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qEAAqE;AAkBrE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IAC5D,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAA;IACtD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;IACtD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAC3D,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;IACtF,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACrD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAElD,gFAAgF;IAChF,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAE9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAErE,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|