@tanstack/router-plugin
Version:
Modern and scalable routing for React applications
47 lines (46 loc) • 2.41 kB
JavaScript
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
const require_hmr_hot_expression = require("../../hmr-hot-expression.cjs");
const require_utils = require("../../utils.cjs");
let _babel_template = require("@babel/template");
_babel_template = require_runtime.__toESM(_babel_template);
let _babel_types = require("@babel/types");
_babel_types = require_runtime.__toESM(_babel_types);
//#region src/core/code-splitter/plugins/react-stable-hmr-split-route-components.ts
function capitalizeIdentifier(str) {
return str[0].toUpperCase() + str.slice(1);
}
function createHotDataKey(exportName) {
return `tsr-split-component:${exportName}`;
}
var buildStableSplitComponentStatements = _babel_template.statements(`
const %%stableComponentIdent%% = (() => {
const hot = %%hotExpression%%
const hotData = hot ? (hot.data ??= {}) : undefined
return hotData?.[%%hotDataKey%%] ?? %%lazyRouteComponentIdent%%(%%localImporterIdent%%, %%exporterIdent%%)
})()
if (%%hotExpression%%) {
((%%hotExpression%%).data ??= {})[%%hotDataKey%%] = %%stableComponentIdent%%
}
`, { syntacticPlaceholders: true });
function createReactStableHmrSplitRouteComponentsPlugin(opts) {
return {
name: "react-stable-hmr-split-route-components",
onSplitRouteProperty(ctx) {
if (ctx.splitNodeMeta.splitStrategy !== "lazyRouteComponent") return;
const stableComponentIdent = require_utils.getUniqueProgramIdentifier(ctx.programPath, `TSRSplit${capitalizeIdentifier(ctx.splitNodeMeta.exporterIdent)}`);
const hotDataKey = createHotDataKey(ctx.splitNodeMeta.exporterIdent);
ctx.insertionPath.insertBefore(buildStableSplitComponentStatements({
stableComponentIdent,
hotDataKey: _babel_types.stringLiteral(hotDataKey),
hotExpression: require_hmr_hot_expression.createHmrHotExpressionAst(opts?.hotExpression ?? ctx.opts.hmrHotExpression),
lazyRouteComponentIdent: _babel_types.identifier(ctx.lazyRouteComponentIdent),
localImporterIdent: _babel_types.identifier(ctx.splitNodeMeta.localImporterIdent),
exporterIdent: _babel_types.stringLiteral(ctx.splitNodeMeta.exporterIdent)
}));
return _babel_types.identifier(stableComponentIdent.name);
}
};
}
//#endregion
exports.createReactStableHmrSplitRouteComponentsPlugin = createReactStableHmrSplitRouteComponentsPlugin;
//# sourceMappingURL=react-stable-hmr-split-route-components.cjs.map