{"version":3,"file":"react-stable-hmr-split-route-components.cjs","names":[],"sources":["../../../../../src/core/code-splitter/plugins/react-stable-hmr-split-route-components.ts"],"sourcesContent":["import * as template from '@babel/template'\nimport * as t from '@babel/types'\nimport { createHmrHotExpressionAst } from '../../hmr-hot-expression'\nimport { getUniqueProgramIdentifier } from '../../utils'\nimport type { ReferenceRouteCompilerPlugin } from '../plugins'\n\nfunction capitalizeIdentifier(str: string) {\n  return str[0]!.toUpperCase() + str.slice(1)\n}\n\nfunction createHotDataKey(exportName: string) {\n  return `tsr-split-component:${exportName}`\n}\n\nconst buildStableSplitComponentStatements = template.statements(\n  `\n    const %%stableComponentIdent%% = (() => {\n      const hot = %%hotExpression%%\n      const hotData = hot ? (hot.data ??= {}) : undefined\n      return hotData?.[%%hotDataKey%%] ?? %%lazyRouteComponentIdent%%(%%localImporterIdent%%, %%exporterIdent%%)\n    })()\n    if (%%hotExpression%%) {\n      ((%%hotExpression%%).data ??= {})[%%hotDataKey%%] = %%stableComponentIdent%%\n    }\n  `,\n  {\n    syntacticPlaceholders: true,\n  },\n)\n\nexport function createReactStableHmrSplitRouteComponentsPlugin(opts?: {\n  hotExpression?: string\n}): ReferenceRouteCompilerPlugin {\n  return {\n    name: 'react-stable-hmr-split-route-components',\n    onSplitRouteProperty(ctx) {\n      if (ctx.splitNodeMeta.splitStrategy !== 'lazyRouteComponent') {\n        return\n      }\n\n      const stableComponentIdent = getUniqueProgramIdentifier(\n        ctx.programPath,\n        `TSRSplit${capitalizeIdentifier(ctx.splitNodeMeta.exporterIdent)}`,\n      )\n\n      const hotDataKey = createHotDataKey(ctx.splitNodeMeta.exporterIdent)\n\n      ctx.insertionPath.insertBefore(\n        buildStableSplitComponentStatements({\n          stableComponentIdent,\n          hotDataKey: t.stringLiteral(hotDataKey),\n          hotExpression: createHmrHotExpressionAst(\n            opts?.hotExpression ?? ctx.opts.hmrHotExpression,\n          ),\n          lazyRouteComponentIdent: t.identifier(ctx.lazyRouteComponentIdent),\n          localImporterIdent: t.identifier(\n            ctx.splitNodeMeta.localImporterIdent,\n          ),\n          exporterIdent: t.stringLiteral(ctx.splitNodeMeta.exporterIdent),\n        }),\n      )\n\n      return t.identifier(stableComponentIdent.name)\n    },\n  }\n}\n"],"mappings":";;;;;;;;AAMA,SAAS,qBAAqB,KAAa;AACzC,QAAO,IAAI,GAAI,aAAa,GAAG,IAAI,MAAM,EAAE;;AAG7C,SAAS,iBAAiB,YAAoB;AAC5C,QAAO,uBAAuB;;AAGhC,IAAM,sCAAsC,gBAAS,WACnD;;;;;;;;;KAUA,EACE,uBAAuB,MACxB,CACF;AAED,SAAgB,+CAA+C,MAE9B;AAC/B,QAAO;EACL,MAAM;EACN,qBAAqB,KAAK;AACxB,OAAI,IAAI,cAAc,kBAAkB,qBACtC;GAGF,MAAM,uBAAuB,cAAA,2BAC3B,IAAI,aACJ,WAAW,qBAAqB,IAAI,cAAc,cAAc,GACjE;GAED,MAAM,aAAa,iBAAiB,IAAI,cAAc,cAAc;AAEpE,OAAI,cAAc,aAChB,oCAAoC;IAClC;IACA,YAAY,aAAE,cAAc,WAAW;IACvC,eAAe,2BAAA,0BACb,MAAM,iBAAiB,IAAI,KAAK,iBACjC;IACD,yBAAyB,aAAE,WAAW,IAAI,wBAAwB;IAClE,oBAAoB,aAAE,WACpB,IAAI,cAAc,mBACnB;IACD,eAAe,aAAE,cAAc,IAAI,cAAc,cAAc;IAChE,CAAC,CACH;AAED,UAAO,aAAE,WAAW,qBAAqB,KAAK;;EAEjD"}