UNPKG

vite-plugin-react18-pages

Version:

<p> <a href="https://www.npmjs.com/package/vite-plugin-react-pages" target="_blank" rel="noopener"><img src="https://img.shields.io/npm/v/vite-plugin-react-pages.svg" alt="npm package" /></a> </p>

73 lines 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProxyModulesManager = void 0; const _1 = require("."); /** * built upon VirtualModulesManager. * map each sourceFile into a proxyModule, which is a virtule module. * when the sourceFile is updated, it will emit update event for the proxyModule. */ class ProxyModulesManager { constructor(proxyModulePrefix) { this.proxyModulePrefix = proxyModulePrefix; this.vmm = new _1.VirtualModulesManager(); this.register = {}; if (!proxyModulePrefix) throw new Error(`invalid proxyModulePrefix: ${proxyModulePrefix}`); } /** * register a source file to watch, * map its data into a proxy module, * return the proxyModuleId * * to create multiple proxy modules for one sourceFilePath, * you can pass in keys to differentiate between them. */ registerProxyModule(sourceFilePath, getProxyModuleData, key) { const proxyModuleId = this.getProxyModuleId(sourceFilePath, key); if (this.register[proxyModuleId]) return proxyModuleId; this.vmm.addFSWatcher('', [sourceFilePath], async (file, api) => { const proxyModuleData = await getProxyModuleData(file); api.addModuleData(proxyModuleId, proxyModuleData); }); this.register[proxyModuleId] = true; return proxyModuleId; } /** * get proxy module data by proxyModuleId */ async getProxyModuleData(proxyModuleId) { return new Promise((res, rej) => { this.vmm.getModule(proxyModuleId, (moduleData) => { if (!Array.isArray(moduleData) || moduleData.length === 0) return rej(new Error(`assertion fail: proxy module is empty: ${proxyModuleId}`)); if (moduleData.length !== 1) return rej(new Error(`assertion fail: proxy module has multiple data: ${proxyModuleId}`)); res(moduleData[0]); }); }); } /** * emit event when a proxyModule has been updated */ onProxyModuleUpdate(cb) { this.vmm.addModuleListener((proxyModuleId) => { cb(proxyModuleId); }); } close() { this.vmm.close(); } getProxyModuleId(sourceFilePath, key) { let prefix = this.proxyModulePrefix; if (key) prefix += `--${key}--`; return prefix + sourceFilePath; } isProxyModuleId(id) { return id.startsWith(this.proxyModulePrefix) && this.register[id]; } } exports.ProxyModulesManager = ProxyModulesManager; //# sourceMappingURL=ProxyModulesManager.js.map