{"version":3,"file":"watch-fz6DW2ww.mjs","sources":["../../_internal/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Common } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../createBuildContext';\n\ninterface ViteWatcher {\n  close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n  const config = await resolveDevelopmentConfig(ctx);\n  const finalConfig = await mergeConfigWithUserConfig(config, ctx);\n\n  ctx.logger.debug('Vite config', finalConfig);\n\n  const { createServer } = await import('vite');\n\n  const vite = await createServer(config);\n\n  ctx.strapi.server.app.use(async (ctx, next) => {\n    const url = ctx.url;\n\n    // Check if the URL points to a file that Vite can handle\n    const file = await vite.moduleGraph.getModuleByUrl(url);\n\n    if (file || url.startsWith('/@')) {\n      // If Vite can handle the file, pass the request to the Vite middleware\n      return new Promise((resolve, reject) => {\n        vite.middlewares(ctx.req, ctx.res, (err: unknown) => {\n          if (err) reject(err);\n          else resolve(next());\n        });\n      });\n    }\n\n    await next();\n  });\n\n  const serveAdmin: Common.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    let template = await fs.readFile(path.relative(ctx.cwd, '.strapi/client/index.html'), 'utf-8');\n    template = await vite.transformIndexHtml(url, template);\n\n    koaCtx.type = 'html';\n    koaCtx.body = template;\n  };\n\n  ctx.strapi.server.routes([\n    {\n      method: 'GET',\n      path: `${ctx.basePath}:path*`,\n      handler: serveAdmin,\n      config: { auth: false },\n    },\n  ]);\n\n  return {\n    async close() {\n      await vite.close();\n    },\n  };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYM,MAAA,QAAQ,OAAO,QAA4C;AACzD,QAAA,SAAS,MAAM,yBAAyB,GAAG;AACjD,QAAM,cAAc,MAAM,0BAA0B,QAAQ,GAAG;AAE3D,MAAA,OAAO,MAAM,eAAe,WAAW;AAE3C,QAAM,EAAE,aAAA,IAAiB,MAAM,OAAO,MAAM;AAEtC,QAAA,OAAO,MAAM,aAAa,MAAM;AAEtC,MAAI,OAAO,OAAO,IAAI,IAAI,OAAOA,MAAK,SAAS;AAC7C,UAAM,MAAMA,KAAI;AAGhB,UAAM,OAAO,MAAM,KAAK,YAAY,eAAe,GAAG;AAEtD,QAAI,QAAQ,IAAI,WAAW,IAAI,GAAG;AAEhC,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,aAAK,YAAYA,KAAI,KAAKA,KAAI,KAAK,CAAC,QAAiB;AAC/C,cAAA;AAAK,mBAAO,GAAG;AAAA;AACd,oBAAQ,MAAM;AAAA,QAAA,CACpB;AAAA,MAAA,CACF;AAAA,IACH;AAEA,UAAM,KAAK;AAAA,EAAA,CACZ;AAEK,QAAA,aAAuC,OAAO,QAAQ,SAAS;AACnE,UAAM,KAAK;AAEX,QAAI,OAAO,WAAW,UAAU,OAAO,WAAW,OAAO;AACvD;AAAA,IACF;AAEA,QAAI,OAAO,QAAQ,QAAQ,OAAO,WAAW,KAAK;AAChD;AAAA,IACF;AAEA,UAAM,MAAM,OAAO;AAEf,QAAA,WAAW,MAAM,GAAG,SAAS,KAAK,SAAS,IAAI,KAAK,2BAA2B,GAAG,OAAO;AAC7F,eAAW,MAAM,KAAK,mBAAmB,KAAK,QAAQ;AAEtD,WAAO,OAAO;AACd,WAAO,OAAO;AAAA,EAAA;AAGZ,MAAA,OAAO,OAAO,OAAO;AAAA,IACvB;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,GAAG,IAAI,QAAQ;AAAA,MACrB,SAAS;AAAA,MACT,QAAQ,EAAE,MAAM,MAAM;AAAA,IACxB;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,MAAM,QAAQ;AACZ,YAAM,KAAK;IACb;AAAA,EAAA;AAEJ;"}