123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import {IdentifierRole, isTopLevelDeclaration} from "../parser/tokenizer";
- import Transformer from "./Transformer";
- export default class ReactHotLoaderTransformer extends Transformer {
- __init() {this.extractedDefaultExportName = null}
- constructor( tokens, filePath) {
- super();this.tokens = tokens;this.filePath = filePath;ReactHotLoaderTransformer.prototype.__init.call(this);;
- }
- setExtractedDefaultExportName(extractedDefaultExportName) {
- this.extractedDefaultExportName = extractedDefaultExportName;
- }
- getPrefixCode() {
- return `
- (function () {
- var enterModule = require('react-hot-loader').enterModule;
- enterModule && enterModule(module);
- })();`
- .replace(/\s+/g, " ")
- .trim();
- }
- getSuffixCode() {
- const topLevelNames = new Set();
- for (const token of this.tokens.tokens) {
- if (
- !token.isType &&
- isTopLevelDeclaration(token) &&
- token.identifierRole !== IdentifierRole.ImportDeclaration
- ) {
- topLevelNames.add(this.tokens.identifierNameForToken(token));
- }
- }
- const namesToRegister = Array.from(topLevelNames).map((name) => ({
- variableName: name,
- uniqueLocalName: name,
- }));
- if (this.extractedDefaultExportName) {
- namesToRegister.push({
- variableName: this.extractedDefaultExportName,
- uniqueLocalName: "default",
- });
- }
- return `
- ;(function () {
- var reactHotLoader = require('react-hot-loader').default;
- var leaveModule = require('react-hot-loader').leaveModule;
- if (!reactHotLoader) {
- return;
- }
- ${namesToRegister
- .map(
- ({variableName, uniqueLocalName}) =>
- ` reactHotLoader.register(${variableName}, "${uniqueLocalName}", ${JSON.stringify(
- this.filePath || "",
- )});`,
- )
- .join("\n")}
- leaveModule(module);
- })();`;
- }
- process() {
- return false;
- }
- }
|