{"version":3,"file":"warmRoutesPlugin.js","names":[],"sources":["esm/vite/plugins/warmRoutesPlugin.js"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\nconst WARM_DEPS_FILE = \"one-warm-deps.json\";\nconst TRACKING_WINDOW = 5 * 60 * 1e3;\nfunction autoWarmPlugin(persistPath) {\n  let cacheFile;\n  let cachedDeps = [];\n  let excludeSet;\n  return {\n    name: \"one:auto-warm\",\n    apply: \"serve\",\n    config() {\n      const volatileCache = join(process.cwd(), \"node_modules\", \".vite\", WARM_DEPS_FILE);\n      cacheFile = typeof persistPath === \"string\" ? join(process.cwd(), persistPath) : volatileCache;\n      try {\n        if (existsSync(cacheFile)) {\n          const cached = JSON.parse(readFileSync(cacheFile, \"utf-8\"));\n          if (Array.isArray(cached.deps) && cached.deps.length > 0) {\n            cachedDeps = cached.deps;\n            console.info(`[one] loading ${cached.deps.length} cached warm deps`);\n            return {\n              optimizeDeps: {\n                include: cached.deps\n              }\n            };\n          }\n        }\n      } catch {\n      }\n    },\n    async configResolved(config) {\n      excludeSet = new Set(config.optimizeDeps.exclude || []);\n      if (cachedDeps.length > 0) {\n        const resolve = config.createResolver();\n        const staleDeps = /* @__PURE__ */ new Set();\n        await Promise.all(\n          cachedDeps.map(async (dep) => {\n            if (excludeSet.has(dep)) {\n              staleDeps.add(dep);\n              return;\n            }\n            try {\n              if (!await resolve(dep)) staleDeps.add(dep);\n            } catch {\n              staleDeps.add(dep);\n            }\n          })\n        );\n        if (staleDeps.size > 0) {\n          cachedDeps = cachedDeps.filter((dep) => !staleDeps.has(dep));\n          console.info(`[one] pruned ${staleDeps.size} stale deps from warm cache`);\n          if (config.optimizeDeps.include) {\n            config.optimizeDeps.include = config.optimizeDeps.include.filter(\n              (dep) => !staleDeps.has(dep)\n            );\n          }\n          try {\n            const nextRaw = JSON.stringify({ deps: [...cachedDeps].sort() }, null, 2);\n            if (!existsSync(cacheFile) || readFileSync(cacheFile, \"utf-8\") !== nextRaw) {\n              const dir = dirname(cacheFile);\n              if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n              writeFileSync(cacheFile, nextRaw);\n            }\n          } catch {\n          }\n        }\n      }\n    },\n    configureServer(server) {\n      let lastDepsCount = 0;\n      let timer;\n      const userInclude = new Set(\n        (server.config.optimizeDeps.include || []).filter((d) => !cachedDeps.includes(d))\n      );\n      function snapshotDeps() {\n        try {\n          const optimizer = server.environments?.client?.depsOptimizer ?? server._depsOptimizer;\n          if (!optimizer?.metadata) return;\n          const optimized = optimizer.metadata.optimized;\n          const discovered = optimizer.metadata.discovered;\n          const currentDeps = [\n            ...Object.keys(optimized || {}),\n            ...Object.keys(discovered || {})\n          ];\n          if (currentDeps.length === 0 || currentDeps.length === lastDepsCount) return;\n          lastDepsCount = currentDeps.length;\n          const depsToCache = currentDeps.filter(\n            (d) => !userInclude.has(d) && !excludeSet.has(d)\n          );\n          const allDeps = new Set(depsToCache);\n          let existingRaw;\n          if (existsSync(cacheFile)) {\n            try {\n              existingRaw = readFileSync(cacheFile, \"utf-8\");\n              const existing = JSON.parse(existingRaw);\n              if (Array.isArray(existing.deps)) {\n                for (const d of existing.deps) {\n                  if (!excludeSet.has(d)) allDeps.add(d);\n                }\n              }\n            } catch {\n              return;\n            }\n          }\n          const sorted = [...allDeps].sort();\n          const nextRaw = JSON.stringify({ deps: sorted }, null, 2);\n          if (existingRaw === nextRaw) return;\n          const dir = dirname(cacheFile);\n          if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n          writeFileSync(cacheFile, nextRaw);\n          console.info(`[one] cached ${sorted.length} deps for next startup`);\n        } catch {\n        }\n      }\n      server.httpServer?.once(\"listening\", () => {\n        timer = setInterval(snapshotDeps, 5e3);\n        setTimeout(() => {\n          clearInterval(timer);\n          snapshotDeps();\n        }, TRACKING_WINDOW);\n      });\n      const origClose = server.close.bind(server);\n      server.close = async () => {\n        clearInterval(timer);\n        snapshotDeps();\n        return origClose();\n      };\n    }\n  };\n}\nconst warmRoutesPlugin = autoWarmPlugin;\nexport {\n  autoWarmPlugin,\n  warmRoutesPlugin\n};\n//# sourceMappingURL=warmRoutesPlugin.js.map\n"],"mappings":"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"}