"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.clientPlugin = exports.clientPublicPath = exports.clientFilePath = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const chalk_1 = __importDefault(require("chalk"));
const config_1 = require("../config");
exports.clientFilePath = path_1.default.resolve(__dirname, '../../client/client.js');
exports.clientPublicPath = `/vite/client`;
const legacyPublicPath = '/vite/hmr';
exports.clientPlugin = ({ app, config }) => {
    const clientCode = fs_1.default
        .readFileSync(exports.clientFilePath, 'utf-8')
        .replace(`__MODE__`, JSON.stringify(config.mode || 'development'))
        .replace(`__DEFINES__`, JSON.stringify({
        ...config_1.defaultDefines,
        ...config.define
    }));
    app.use(async (ctx, next) => {
        if (ctx.path === exports.clientPublicPath) {
            let socketPort = ctx.port;
            // infer on client by default
            let socketProtocol = null;
            let socketHostname = null;
            if (config.hmr && typeof config.hmr === 'object') {
                // hmr option has highest priory
                socketProtocol = config.hmr.protocol || null;
                socketHostname = config.hmr.hostname || null;
                socketPort = config.hmr.port || ctx.port;
                if (config.hmr.path) {
                    socketPort = `${socketPort}/${config.hmr.path}`;
                }
            }
            ctx.type = 'js';
            ctx.status = 200;
            ctx.body = clientCode
                .replace(`__HMR_PROTOCOL__`, JSON.stringify(socketProtocol))
                .replace(`__HMR_HOSTNAME__`, JSON.stringify(socketHostname))
                .replace(`__HMR_PORT__`, JSON.stringify(socketPort));
        }
        else {
            if (ctx.path === legacyPublicPath) {
                console.error(chalk_1.default.red(`[vite] client import path has changed from "/vite/hmr" to "/vite/client". ` +
                    `please update your code accordingly.`));
            }
            return next();
        }
    });
};
//# sourceMappingURL=serverPluginClient.js.map