{"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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"}