UNPKG

vite-plugin-react-server

Version:
66 lines (63 loc) 10.1 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { glob, readFile } from 'node:fs/promises'; import { existsSync, readFileSync } from 'node:fs'; import { resolve, join } from 'node:path'; import { sourceHasTopLevelClientDirective } from 'react-server-loader/directives'; const MODULE_SCRIPT_SRC = /<script\b[^>]*\btype=["']module["'][^>]*\bsrc=["']([^"']+)["']|<script\b[^>]*\bsrc=["']([^"']+)["'][^>]*\btype=["']module["']/gi; function indexHtmlScriptSources(projectRoot) { const path = join(projectRoot, "index.html"); if (!existsSync(path)) return /* @__PURE__ */ new Set(); try { const html = readFileSync(path, "utf-8"); const srcs = /* @__PURE__ */ new Set(); for (const m of html.matchAll(MODULE_SCRIPT_SRC)) { const src = (m[1] ?? m[2]).replace(/^\/+/, ""); if (src) srcs.add(resolve(projectRoot, src)); } return srcs; } catch { return /* @__PURE__ */ new Set(); } } function createDirectiveClientAutoDiscover(modulePattern = "**/*.{tsx,jsx,mts,cts,ts,js,mjs,cjs}") { return async function _directiveClientAutoDiscover({ inputs, userOptions }) { const baseDir = resolve(userOptions.projectRoot, userOptions.moduleBase); const absolutePattern = resolve(baseDir, modulePattern); const indexHtmlEntries = indexHtmlScriptSources(userOptions.projectRoot); let allFiles; try { allFiles = glob(absolutePattern); } catch { return inputs; } for await (const file of allFiles) { if (/\.client\.[cm]?[jt]sx?$/.test(file)) continue; if (file.includes("node_modules")) continue; if (indexHtmlEntries.has(file)) continue; let source; try { source = await readFile(file, "utf-8"); } catch { continue; } if (!sourceHasTopLevelClientDirective(source)) continue; const relativePath = file.replace(baseDir, "").replace(/^\/+/, ""); const [key, value] = userOptions.normalizer( join(userOptions.moduleBase, relativePath) ); if (!inputs[key]) { inputs[key] = value; } } return inputs; }; } export { createDirectiveClientAutoDiscover }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGlyZWN0aXZlQ2xpZW50QXV0b0Rpc2NvdmVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW4vY29uZmlnL2F1dG9EaXNjb3Zlci9jcmVhdGVEaXJlY3RpdmVDbGllbnRBdXRvRGlzY292ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZXNvbHZlZFVzZXJPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHNvdXJjZUhhc1RvcExldmVsQ2xpZW50RGlyZWN0aXZlIH0gZnJvbSBcInJlYWN0LXNlcnZlci1sb2FkZXIvZGlyZWN0aXZlc1wiO1xuXG5jb25zdCBNT0RVTEVfU0NSSVBUX1NSQyA9XG4gIC88c2NyaXB0XFxiW14+XSpcXGJ0eXBlPVtcIiddbW9kdWxlW1wiJ11bXj5dKlxcYnNyYz1bXCInXShbXlwiJ10rKVtcIiddfDxzY3JpcHRcXGJbXj5dKlxcYnNyYz1bXCInXShbXlwiJ10rKVtcIiddW14+XSpcXGJ0eXBlPVtcIiddbW9kdWxlW1wiJ10vZ2k7XG5cbmZ1bmN0aW9uIGluZGV4SHRtbFNjcmlwdFNvdXJjZXMocHJvamVjdFJvb3Q6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgcGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsIFwiaW5kZXguaHRtbFwiKTtcbiAgaWYgKCFleGlzdHNTeW5jKHBhdGgpKSByZXR1cm4gbmV3IFNldCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGh0bWwgPSByZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBzcmNzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBtIG9mIGh0bWwubWF0Y2hBbGwoTU9EVUxFX1NDUklQVF9TUkMpKSB7XG4gICAgICBjb25zdCBzcmMgPSAobVsxXSA/PyBtWzJdKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgICAgaWYgKHNyYykgc3Jjcy5hZGQocmVzb2x2ZShwcm9qZWN0Um9vdCwgc3JjKSk7XG4gICAgfVxuICAgIHJldHVybiBzcmNzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG59XG5cbi8qKlxuICogQXV0by1kaXNjb3ZlcnMgZmlyc3QtcGFydHkgY2xpZW50IG1vZHVsZXMgZGV0ZWN0ZWQgYnkgYSB0b3Atb2YtZmlsZVxuICogYFwidXNlIGNsaWVudFwiYCBESVJFQ1RJVkUgcmF0aGVyIHRoYW4gdGhlIGAuY2xpZW50LmAgZmlsZW5hbWUgY29udmVudGlvbi5cbiAqXG4gKiBXaHkgdGhpcyBleGlzdHM6IGBjcmVhdGVHbG9iQXV0b0Rpc2NvdmVyKFwiKipcXC8qLmNsaWVudC4qXCIpYCBvbmx5IGZpbmRzXG4gKiBmaWxlbmFtZS1jb252ZW50aW9uIGNsaWVudCBtb2R1bGVzLiBBIGRpcmVjdGl2ZS1vbmx5IGNsaWVudCBtb2R1bGVcbiAqIChlLmcuIGBzcmMvY29tcG9uZW50cy9Db3VudGVyLnRzeGAgc3RhcnRpbmcgd2l0aCBgXCJ1c2UgY2xpZW50XCJgKSB3YXMgbmV2ZXJcbiAqIGFkZGVkIGFzIGEgY2xpZW50L1NTUiBidWlsZCBpbnB1dCwgc28gaXQgd2FzIE5PVCBlbWl0dGVkIHRvIGBkaXN0L2NsaWVudGAuXG4gKiBUaGUgc2VydmVyIGJ1aWxkJ3MgYHJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlYCB0aGVuIHBvaW50ZWQgaXRzIGhvc3RlZFxuICogbW9kdWxlSUQgYXQgYSBmaWxlIHRoYXQgZGlkbid0IGV4aXN0LCBhbmQgdGhlIGh0bWwtd29ya2VyJ3MgaW1wb3J0IDQwNCdkIGF0XG4gKiBTU0ctcmVuZGVyIHRpbWUuXG4gKlxuICogQWRkaW5nIHRoZXNlIG1vZHVsZXMgYXMgYnVpbGQgaW5wdXRzIG1ha2VzIFZpdGUgZW1pdCB0aGVtIHRvIGBkaXN0L2NsaWVudGBcbiAqIGF0IHByZXNlcnZlZC1tb2R1bGUgcGF0aHMgdGhhdCBsaW5lIHVwIHdpdGggdGhlIGhhc2hlZC9ob3N0ZWQgbW9kdWxlSURzXG4gKiBnZW5lcmF0ZWQgaW4gYGNyZWF0ZVRyYW5zZm9ybWVyUGx1Z2luYC5cbiAqXG4gKiBEZXRlY3Rpb24gaXMgc3RydWN0dXJhbCAoYHNvdXJjZUhhc1RvcExldmVsQ2xpZW50RGlyZWN0aXZlYCksIG5ldmVyIHRoZVxuICogbmFpdmUgXCJjb250YWlucyB0aGUgd29yZCBjbGllbnRcIiBzdWJzdHJpbmcgdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpcmVjdGl2ZUNsaWVudEF1dG9EaXNjb3ZlcihcbiAgbW9kdWxlUGF0dGVybiA9IFwiKiovKi57dHN4LGpzeCxtdHMsY3RzLHRzLGpzLG1qcyxjanN9XCJcbikge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gX2RpcmVjdGl2ZUNsaWVudEF1dG9EaXNjb3Zlcih7XG4gICAgaW5wdXRzLFxuICAgIHVzZXJPcHRpb25zLFxuICB9OiB7XG4gICAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHVzZXJPcHRpb25zOiBQaWNrPFxuICAgICAgUmVzb2x2ZWRVc2VyT3B0aW9ucyxcbiAgICAgIFwibW9kdWxlQmFzZVwiIHwgXCJwcm9qZWN0Um9vdFwiIHwgXCJub3JtYWxpemVyXCJcbiAgICA+O1xuICB9KSB7XG4gICAgY29uc3QgYmFzZURpciA9IHJlc29sdmUodXNlck9wdGlvbnMucHJvamVjdFJvb3QsIHVzZXJPcHRpb25zLm1vZHVsZUJhc2UpO1xuICAgIGNvbnN0IGFic29sdXRlUGF0dGVybiA9IHJlc29sdmUoYmFzZURpciwgbW9kdWxlUGF0dGVybik7XG4gICAgLy8gRmlsZXMgVml0ZSBhbHJlYWR5IGRpc2NvdmVycyB2aWEgaW5kZXguaHRtbCdzIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICAgIC8vIGVudHJpZXMg4oCUIGFkZGluZyB0aGVtIGFnYWluIGhlcmUgbWFrZXMgVml0ZSBkcm9wIHRoZSBpbmRleC5odG1sXG4gICAgLy8gbWFuaWZlc3QgZW50cnksIHdoaWNoIGRvd25zdHJlYW0gQ1NTLWluamVjdGlvbiBkZXBlbmRzIG9uLlxuICAgIGNvbnN0IGluZGV4SHRtbEVudHJpZXMgPSBpbmRleEh0bWxTY3JpcHRTb3VyY2VzKHVzZXJPcHRpb25zLnByb2plY3RSb290KTtcblxuICAgIGxldCBhbGxGaWxlczogQXN5bmNJdGVyYWJsZTxzdHJpbmc+O1xuICAgIHRyeSB7XG4gICAgICBhbGxGaWxlcyA9IGdsb2IoYWJzb2x1dGVQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGFsbEZpbGVzKSB7XG4gICAgICAvLyBTa2lwIGZpbGVzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgYC5jbGllbnQuYCBmaWxlbmFtZSBjb252ZW50aW9uIOKAlFxuICAgICAgLy8gYGNyZWF0ZUdsb2JBdXRvRGlzY292ZXJgIGRpc2NvdmVycyB0aG9zZSBzZXBhcmF0ZWx5LlxuICAgICAgaWYgKC9cXC5jbGllbnRcXC5bY21dP1tqdF1zeD8kLy50ZXN0KGZpbGUpKSBjb250aW51ZTtcbiAgICAgIC8vIE5ldmVyIHRyZWF0IGRlcGVuZGVuY2llcyBhcyBmaXJzdC1wYXJ0eSBjbGllbnQgaW5wdXRzLlxuICAgICAgaWYgKGZpbGUuaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuICAgICAgLy8gU2tpcCBmaWxlcyBpbmRleC5odG1sIGFscmVhZHkgcmVmZXJlbmNlczsgVml0ZSB3aWxsIGRpc2NvdmVyIHRoZW0uXG4gICAgICBpZiAoaW5kZXhIdG1sRW50cmllcy5oYXMoZmlsZSkpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgc291cmNlOiBzdHJpbmc7XG4gICAgICB0cnkge1xuICAgICAgICBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShmaWxlLCBcInV0Zi04XCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNvdXJjZUhhc1RvcExldmVsQ2xpZW50RGlyZWN0aXZlKHNvdXJjZSkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBmaWxlXG4gICAgICAgIC5yZXBsYWNlKGJhc2VEaXIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gdXNlck9wdGlvbnMubm9ybWFsaXplcihcbiAgICAgICAgam9pbih1c2VyT3B0aW9ucy5tb2R1bGVCYXNlLCByZWxhdGl2ZVBhdGgpXG4gICAgICApO1xuICAgICAgaWYgKCFpbnB1dHNba2V5XSkge1xuICAgICAgICBpbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnB1dHM7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQU1BLE1BQU0saUJBQ0osR0FBQSxpSUFBQTtBQUVGLFNBQVMsdUJBQXVCLFdBQWtDLEVBQUE7QUFDaEUsRUFBTSxNQUFBLElBQUEsR0FBTyxJQUFLLENBQUEsV0FBQSxFQUFhLFlBQVksQ0FBQTtBQUMzQyxFQUFBLElBQUksQ0FBQyxVQUFXLENBQUEsSUFBSSxDQUFHLEVBQUEsMkJBQVcsR0FBSSxFQUFBO0FBQ3RDLEVBQUksSUFBQTtBQUNGLElBQU0sTUFBQSxJQUFBLEdBQU8sWUFBYSxDQUFBLElBQUEsRUFBTSxPQUFPLENBQUE7QUFDdkMsSUFBTSxNQUFBLElBQUEsdUJBQVcsR0FBWSxFQUFBO0FBQzdCLElBQUEsS0FBQSxNQUFXLENBQUssSUFBQSxJQUFBLENBQUssUUFBUyxDQUFBLGlCQUFpQixDQUFHLEVBQUE7QUFDaEQsTUFBTSxNQUFBLEdBQUEsR0FBQSxDQUFPLEVBQUUsQ0FBQyxDQUFBLElBQUssRUFBRSxDQUFDLENBQUEsRUFBRyxPQUFRLENBQUEsTUFBQSxFQUFRLEVBQUUsQ0FBQTtBQUM3QyxNQUFBLElBQUksS0FBVSxJQUFBLENBQUEsR0FBQSxDQUFJLE9BQVEsQ0FBQSxXQUFBLEVBQWEsR0FBRyxDQUFDLENBQUE7QUFBQTtBQUU3QyxJQUFPLE9BQUEsSUFBQTtBQUFBLEdBQ0QsQ0FBQSxNQUFBO0FBQ04sSUFBQSwyQkFBVyxHQUFJLEVBQUE7QUFBQTtBQUVuQjtBQXFCTyxTQUFTLGlDQUFBLENBQ2QsZ0JBQWdCLHNDQUNoQixFQUFBO0FBQ0EsRUFBQSxPQUFPLGVBQWUsNEJBQTZCLENBQUE7QUFBQSxJQUNqRCxNQUFBO0FBQUEsSUFDQTtBQUFBLEdBT0MsRUFBQTtBQUNELElBQUEsTUFBTSxPQUFVLEdBQUEsT0FBQSxDQUFRLFdBQVksQ0FBQSxXQUFBLEVBQWEsWUFBWSxVQUFVLENBQUE7QUFDdkUsSUFBTSxNQUFBLGVBQUEsR0FBa0IsT0FBUSxDQUFBLE9BQUEsRUFBUyxhQUFhLENBQUE7QUFJdEQsSUFBTSxNQUFBLGdCQUFBLEdBQW1CLHNCQUF1QixDQUFBLFdBQUEsQ0FBWSxXQUFXLENBQUE7QUFFdkUsSUFBSSxJQUFBLFFBQUE7QUFDSixJQUFJLElBQUE7QUFDRixNQUFBLFFBQUEsR0FBVyxLQUFLLGVBQWUsQ0FBQTtBQUFBLEtBQ3pCLENBQUEsTUFBQTtBQUNOLE1BQU8sT0FBQSxNQUFBO0FBQUE7QUFHVCxJQUFBLFdBQUEsTUFBaUIsUUFBUSxRQUFVLEVBQUE7QUFHakMsTUFBSSxJQUFBLHlCQUFBLENBQTBCLElBQUssQ0FBQSxJQUFJLENBQUcsRUFBQTtBQUUxQyxNQUFJLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxjQUFjLENBQUcsRUFBQTtBQUVuQyxNQUFJLElBQUEsZ0JBQUEsQ0FBaUIsR0FBSSxDQUFBLElBQUksQ0FBRyxFQUFBO0FBRWhDLE1BQUksSUFBQSxNQUFBO0FBQ0osTUFBSSxJQUFBO0FBQ0YsUUFBUyxNQUFBLEdBQUEsTUFBTSxRQUFTLENBQUEsSUFBQSxFQUFNLE9BQU8sQ0FBQTtBQUFBLE9BQy9CLENBQUEsTUFBQTtBQUNOLFFBQUE7QUFBQTtBQUdGLE1BQUksSUFBQSxDQUFDLGdDQUFpQyxDQUFBLE1BQU0sQ0FBRyxFQUFBO0FBRS9DLE1BQU0sTUFBQSxZQUFBLEdBQWUsS0FDbEIsT0FBUSxDQUFBLE9BQUEsRUFBUyxFQUFFLENBQ25CLENBQUEsT0FBQSxDQUFRLFFBQVEsRUFBRSxDQUFBO0FBQ3JCLE1BQUEsTUFBTSxDQUFDLEdBQUEsRUFBSyxLQUFLLENBQUEsR0FBSSxXQUFZLENBQUEsVUFBQTtBQUFBLFFBQy9CLElBQUEsQ0FBSyxXQUFZLENBQUEsVUFBQSxFQUFZLFlBQVk7QUFBQSxPQUMzQztBQUNBLE1BQUksSUFBQSxDQUFDLE1BQU8sQ0FBQSxHQUFHLENBQUcsRUFBQTtBQUNoQixRQUFBLE1BQUEsQ0FBTyxHQUFHLENBQUksR0FBQSxLQUFBO0FBQUE7QUFDaEI7QUFHRixJQUFPLE9BQUEsTUFBQTtBQUFBLEdBQ1Q7QUFDRjs7OzsifQ==