UNPKG

@strapi/strapi

Version:

An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite

1 lines 6.9 kB
{"version":3,"file":"watch.mjs","sources":["../../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n const viteMiddlewares: Core.MiddlewareHandler = (koaCtx, next) => {\n return new Promise((resolve, reject) => {\n const prefix = ctx.basePath.replace(ctx.adminPath, '').replace(/\\/+$/, '');\n\n const originalPath = koaCtx.path;\n if (!koaCtx.path.startsWith(prefix)) {\n koaCtx.path = `${prefix}${koaCtx.path}`;\n }\n\n // Set cache-control headers to prevent caching issues during development restarts\n koaCtx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');\n koaCtx.set('Pragma', 'no-cache');\n koaCtx.set('Expires', '0');\n koaCtx.set('Surrogate-Control', 'no-store');\n\n vite.middlewares(koaCtx.req, koaCtx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n if (!koaCtx.res.headersSent) {\n koaCtx.path = originalPath;\n }\n\n resolve(next());\n }\n });\n });\n };\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n try {\n let template = await fs.readFile(\n path.relative(ctx.cwd, '.strapi/client/index.html'),\n 'utf-8'\n );\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n } catch (error) {\n ctx.logger.error('Failed to serve admin panel in development mode:', error);\n // Don't fallback to other handlers in development mode to prevent MIME type conflicts\n koaCtx.status = 500;\n koaCtx.body = 'Admin panel temporarily unavailable during server restart';\n }\n };\n\n const adminRoute = `${ctx.adminPath}/:path*`;\n\n // Remove any existing admin routes to prevent conflicts during restart\n const existingRoutes = ctx.strapi.server.router.stack.filter(\n (layer) => layer.path === adminRoute\n );\n existingRoutes.forEach((route) => {\n const index = ctx.strapi.server.router.stack.indexOf(route);\n if (index > -1) {\n ctx.strapi.server.router.stack.splice(index, 1);\n }\n });\n\n ctx.strapi.server.router.get(adminRoute, serveAdmin);\n ctx.strapi.server.router.use(adminRoute, viteMiddlewares);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["watch","ctx","finalConfig","mergeConfigWithUserConfig","resolveDevelopmentConfig","logger","debug","createServer","vite","viteMiddlewares","koaCtx","next","Promise","resolve","reject","prefix","basePath","replace","adminPath","originalPath","path","startsWith","set","middlewares","req","res","err","headersSent","serveAdmin","method","body","status","url","originalUrl","template","fs","readFile","relative","cwd","transformIndexHtml","type","error","adminRoute","existingRoutes","strapi","server","router","stack","filter","layer","forEach","route","index","indexOf","splice","get","use","close"],"mappings":"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"}