"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPublicFileFilter = exports.initStatic = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const debug_1 = __importDefault(require("debug")); const pluginutils_1 = require("@rollup/pluginutils"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const static_1 = require("./middlewares/static"); const debugStatic = (0, debug_1.default)('uni:static'); /** * devServer时提供static等目录的静态资源服务 * @param server * @param param */ const initStatic = (server) => { const filter = createPublicFileFilter(); const serve = (0, static_1.uniStaticMiddleware)({ etag: true, resolve(pathname) { if (!filter(pathname)) { return; } const filename = path_1.default.join(process.env.UNI_INPUT_DIR, pathname); if (fs_1.default.existsSync(filename)) { debugStatic(filename, 'success'); return filename; } else { debugStatic(filename, 'fail'); } }, }); const viteServePublicMiddlewareIndex = server.middlewares.stack.findIndex((middleware) => { return (middleware.handle.name === 'viteServePublicMiddleware'); }); // 替换 vite 自带的 public middleware if (viteServePublicMiddlewareIndex > -1) { server.middlewares.stack.splice(viteServePublicMiddlewareIndex, 1, { route: '', handle: ((req, res, next) => { if ((0, uni_cli_shared_1.isImportRequest)(req.url) || (0, uni_cli_shared_1.isInternalRequest)(req.url)) { return next(); } return serve(req, res, next); }), }); } }; exports.initStatic = initStatic; function createPublicFileFilter(base = '/') { const publicDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, uni_cli_shared_1.PUBLIC_DIR + '/**/*')); const uniModulesDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, 'uni_modules/*/' + uni_cli_shared_1.PUBLIC_DIR + '/**/*')); return (0, pluginutils_1.createFilter)([publicDir, uniModulesDir]); } exports.createPublicFileFilter = createPublicFileFilter;