UNPKG

next

Version:

The React Framework

86 lines (85 loc) 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { createServerModuleMap: null, selectWorkerForForwarding: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { createServerModuleMap: function() { return createServerModuleMap; }, selectWorkerForForwarding: function() { return selectWorkerForForwarding; } }); const _apppaths = require("../../shared/lib/router/utils/app-paths"); const _pathhasprefix = require("../../shared/lib/router/utils/path-has-prefix"); const _removepathprefix = require("../../shared/lib/router/utils/remove-path-prefix"); const _workasyncstorageexternal = require("./work-async-storage.external"); function createServerModuleMap({ serverActionsManifest }) { return new Proxy({}, { get: (_, id)=>{ const workers = serverActionsManifest[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'][id].workers; const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); let workerEntry; if (workStore) { workerEntry = workers[normalizeWorkerPageName(workStore.page)]; } else { // If there's no work store defined, we can assume that a server // module map is needed during module evaluation, e.g. to create a // server action using a higher-order function. Therefore it should be // safe to return any entry from the manifest that matches the action // ID. They all refer to the same module ID, which must also exist in // the current page bundle. TODO: This is currently not guaranteed in // Turbopack, and needs to be fixed. workerEntry = Object.values(workers).at(0); } if (!workerEntry) { return undefined; } const { moduleId, async } = workerEntry; return { id: moduleId, name: id, chunks: [], async }; } }); } function selectWorkerForForwarding(actionId, pageName, serverActionsManifest) { var _serverActionsManifest__actionId; const workers = (_serverActionsManifest__actionId = serverActionsManifest[process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; const workerName = normalizeWorkerPageName(pageName); // no workers, nothing to forward to if (!workers) return; // if there is a worker for this page, no need to forward it. if (workers[workerName]) { return; } // otherwise, grab the first worker that has a handler for this action id return denormalizeWorkerPageName(Object.keys(workers)[0]); } /** * The flight entry loader keys actions by bundlePath. * bundlePath corresponds with the relative path (including 'app') to the page entrypoint. */ function normalizeWorkerPageName(pageName) { if ((0, _pathhasprefix.pathHasPrefix)(pageName, 'app')) { return pageName; } return 'app' + pageName; } /** * Converts a bundlePath (relative path to the entrypoint) to a routable page name */ function denormalizeWorkerPageName(bundlePath) { return (0, _apppaths.normalizeAppPath)((0, _removepathprefix.removePathPrefix)(bundlePath, 'app')); } //# sourceMappingURL=action-utils.js.map