📄 devServer.js
/home/palash/git/local-ai/node_modules/@playwright/experimental-ct-core/lib/devServer.js
Language: js • Lines: 93
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var devServer_exports = {};
__export(devServer_exports, {
  runDevServer: () => runDevServer
});
module.exports = __toCommonJS(devServer_exports);
var import_fs = __toESM(require("fs"));
var import_path = __toESM(require("path"));
var import_fsWatcher = require("playwright/lib/fsWatcher");
var import_utilsBundle = require("playwright-core/lib/utilsBundle");
var import_indexSource = require("./generated/indexSource");
var import_viteUtils = require("./viteUtils");
async function runDevServer(config) {
  const { registerSourceFile, frameworkPluginFactory } = (0, import_viteUtils.frameworkConfig)(config);
  const componentRegistry = /* @__PURE__ */ new Map();
  await (0, import_viteUtils.populateComponentsFromTests)(componentRegistry);
  const configDir = config.configFile ? import_path.default.dirname(config.configFile) : config.rootDir;
  const dirs = await (0, import_viteUtils.resolveDirs)(configDir, config);
  if (!dirs) {
    console.log(import_utilsBundle.colors.red(`Component testing template file playwright/index.html is missing and there is no existing Vite server. Component tests will fail.
`));
    return async () => {
    };
  }
  const registerSource = import_indexSource.source + "\n" + await import_fs.default.promises.readFile(registerSourceFile, "utf-8");
  const viteConfig = await (0, import_viteUtils.createConfig)(dirs, config, frameworkPluginFactory, false);
  viteConfig.plugins.push({
    name: "playwright:component-index",
    async transform(content, id) {
      return (0, import_viteUtils.transformIndexFile)(id, content, dirs.templateDir, registerSource, componentRegistry);
    }
  });
  const { createServer } = await import("vite");
  const devServer = await createServer(viteConfig);
  await devServer.listen();
  const protocol = viteConfig.server.https ? "https:" : "http:";
  console.log(`Dev Server listening on ${protocol}//${viteConfig.server.host || "localhost"}:${viteConfig.server.port}`);
  const projectDirs = /* @__PURE__ */ new Set();
  const projectOutputs = /* @__PURE__ */ new Set();
  for (const p of config.projects) {
    projectDirs.add(p.testDir);
    projectOutputs.add(p.outputDir);
  }
  const globalWatcher = new import_fsWatcher.Watcher(async () => {
    const registry = /* @__PURE__ */ new Map();
    await (0, import_viteUtils.populateComponentsFromTests)(registry);
    if (componentRegistry.size === registry.size && [...componentRegistry.keys()].every((k) => registry.has(k)))
      return;
    console.log("List of components changed");
    componentRegistry.clear();
    for (const [k, v] of registry)
      componentRegistry.set(k, v);
    const id = import_path.default.join(dirs.templateDir, "index");
    const modules = [...devServer.moduleGraph.urlToModuleMap.values()];
    const rootModule = modules.find((m) => m.file?.startsWith(id + ".ts") || m.file?.startsWith(id + ".js"));
    if (rootModule)
      devServer.moduleGraph.onFileChange(rootModule.file);
  });
  await globalWatcher.update([...projectDirs], [...projectOutputs], false);
  return () => Promise.all([devServer.close(), globalWatcher.close()]).then(() => {
  });
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  runDevServer
});