UNPKG

2.17 kBJavaScriptView Raw
1"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _tokenizer = require('../parser/tokenizer');
2
3var _Transformer = require('./Transformer'); var _Transformer2 = _interopRequireDefault(_Transformer);
4
5 class ReactHotLoaderTransformer extends _Transformer2.default {
6 __init() {this.extractedDefaultExportName = null}
7
8 constructor( tokens, filePath) {
9 super();this.tokens = tokens;this.filePath = filePath;ReactHotLoaderTransformer.prototype.__init.call(this);;
10 }
11
12 setExtractedDefaultExportName(extractedDefaultExportName) {
13 this.extractedDefaultExportName = extractedDefaultExportName;
14 }
15
16 getPrefixCode() {
17 return `
18 (function () {
19 var enterModule = require('react-hot-loader').enterModule;
20 enterModule && enterModule(module);
21 })();`
22 .replace(/\s+/g, " ")
23 .trim();
24 }
25
26 getSuffixCode() {
27 const topLevelNames = new Set();
28 for (const token of this.tokens.tokens) {
29 if (
30 !token.isType &&
31 _tokenizer.isTopLevelDeclaration.call(void 0, token) &&
32 token.identifierRole !== _tokenizer.IdentifierRole.ImportDeclaration
33 ) {
34 topLevelNames.add(this.tokens.identifierNameForToken(token));
35 }
36 }
37 const namesToRegister = Array.from(topLevelNames).map((name) => ({
38 variableName: name,
39 uniqueLocalName: name,
40 }));
41 if (this.extractedDefaultExportName) {
42 namesToRegister.push({
43 variableName: this.extractedDefaultExportName,
44 uniqueLocalName: "default",
45 });
46 }
47 return `
48;(function () {
49 var reactHotLoader = require('react-hot-loader').default;
50 var leaveModule = require('react-hot-loader').leaveModule;
51 if (!reactHotLoader) {
52 return;
53 }
54${namesToRegister
55 .map(
56 ({variableName, uniqueLocalName}) =>
57 ` reactHotLoader.register(${variableName}, "${uniqueLocalName}", ${JSON.stringify(
58 this.filePath || "",
59 )});`,
60 )
61 .join("\n")}
62 leaveModule(module);
63})();`;
64 }
65
66 process() {
67 return false;
68 }
69} exports.default = ReactHotLoaderTransformer;