{"version":3,"file":"generateHtaccess.mjs","names":[],"sources":["../../../../../../vite/src/generateHtaccess.ts"],"sourcesContent":["import { MongezViteOptions } from \"./types\";\r\nimport { getFile, putFile } from \"@mongez/fs\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { dirname } from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\nimport { UserConfig } from \"vite\";\r\nimport generatePreRenderContent from \"./prerender\";\r\n\r\n// this is needed because of esm module does not support __dirname\r\nconst _dirname = typeof __dirname !== \"undefined\" ? __dirname : dirname(fileURLToPath(import.meta.url));\r\n\r\nconst DEFAULT_CRAWLERS =\r\n  \"Google-Site-Verification|Googlebot|facebook|crawl|WhatsApp|bot|Slack|Twitter|bot\";\r\n\r\n// Strip newlines/carriage-returns (and other control chars) so a hostile\r\n// `crawlers` value can't inject extra lines/directives into the .htaccess\r\n// file. `crawlers` is otherwise an intentional raw regex fragment, so we\r\n// don't escape regex metacharacters here.\r\nconst sanitizeCrawlers = (crawlers: string) =>\r\n  crawlers.replace(/[\\x00-\\x1f\\x7f]/g, \"\");\r\n\r\nconst preprenderContent = (crawlers?: string) => `# Prerender\r\nRewriteCond %{HTTP_USER_AGENT} .*(${sanitizeCrawlers(crawlers || DEFAULT_CRAWLERS)}).* [NC]\r\nRewriteCond %{REQUEST_URI} !^(/public)\r\nRewriteRule (.*) prerender.php [L,QSA]\r\n`;\r\n\r\nexport async function generateHtaccess(\r\n  config: UserConfig,\r\n  options: MongezViteOptions\r\n) {\r\n  if (!options.htaccess) return;\r\n\r\n  console.log(colors.yellowBright(\"Generating htaccess file...\"));\r\n\r\n  const outDir = config.build?.outDir || \"dist\";\r\n\r\n  // generate htaccess file in the build directory\r\n  let htaccessFile = getFile(_dirname + \"/.htaccess\");\r\n\r\n  if (options.preRender) {\r\n    if (!options.preRender.url) {\r\n      throw new Error(\r\n        \"[@mongez/vite] preRender.url is required when preRender is enabled. \" +\r\n          \"Pass `preRender: { url: \\\"https://your-prerender-service.example.com\\\" }` \" +\r\n          \"or set `preRender: false` to disable prerendering.\"\r\n      );\r\n    }\r\n\r\n    htaccessFile = htaccessFile.replace(\r\n      \"# Prerender\",\r\n      preprenderContent(options.preRender.crawlers)\r\n    );\r\n\r\n    const preRenderContent = generatePreRenderContent({\r\n      delay: options.preRender.delay,\r\n      cache: options.preRender.cache,\r\n      prerenderUrl: options.preRender.url,\r\n    });\r\n\r\n    putFile(outDir + \"/prerender.php\", preRenderContent);\r\n  } else {\r\n    htaccessFile = htaccessFile.replace(\"# Prerender\", \"\");\r\n  }\r\n\r\n  putFile(outDir + \"/.htaccess\", htaccessFile);\r\n\r\n  console.log(\r\n    colors.greenBright(\"Htaccess file has been generated successfully!\")\r\n  );\r\n}\r\n"],"mappings":";;;;;;;AASA,MAAM,WAAW,OAAO,cAAc,cAAc,YAAY,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;AAEtG,MAAM,mBACJ;AAMF,MAAM,oBAAoB,aACxB,SAAS,QAAQ,oBAAoB,EAAE;AAEzC,MAAM,qBAAqB,aAAsB;oCACb,iBAAiB,YAAY,gBAAgB,EAAE;;;;AAKnF,eAAsB,iBACpB,QACA,SACA;CACA,IAAI,CAAC,QAAQ,UAAU;CAEvB,QAAQ,IAAI,OAAO,aAAa,6BAA6B,CAAC;CAE9D,MAAM,SAAS,OAAO,OAAO,UAAU;CAGvC,IAAI,eAAe,QAAQ,WAAW,YAAY;CAElD,IAAI,QAAQ,WAAW;EACrB,IAAI,CAAC,QAAQ,UAAU,KACrB,MAAM,IAAI,MACR,kMAGF;EAGF,eAAe,aAAa,QAC1B,eACA,kBAAkB,QAAQ,UAAU,QAAQ,CAC9C;EAEA,MAAM,mBAAmB,yBAAyB;GAChD,OAAO,QAAQ,UAAU;GACzB,OAAO,QAAQ,UAAU;GACzB,cAAc,QAAQ,UAAU;EAClC,CAAC;EAED,QAAQ,SAAS,kBAAkB,gBAAgB;CACrD,OACE,eAAe,aAAa,QAAQ,eAAe,EAAE;CAGvD,QAAQ,SAAS,cAAc,YAAY;CAE3C,QAAQ,IACN,OAAO,YAAY,gDAAgD,CACrE;AACF"}