UNPKG

3.25 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = flowAndNodeDevProdEntry;
7
8var _path = _interopRequireDefault(require("path"));
9
10var _utils = require("../build/utils");
11
12var _utils2 = require("../utils");
13
14var _package = require("../package");
15
16var _errors = require("../errors");
17
18var fs = _interopRequireWildcard(require("fs-extra"));
19
20function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24function flowAndNodeDevProdEntry(pkg) {
25 return {
26 name: "flow-and-prod-dev-entry",
27
28 async resolveId(source, importer) {
29 let resolved = await this.resolve(source, importer, {
30 skipSelf: true
31 });
32
33 if (resolved.id.startsWith("\0") || resolved.id.startsWith(pkg.directory)) {
34 return resolved;
35 }
36
37 throw new _errors.FatalError(`all relative imports in a package should only import modules inside of their package directory but "${_path.default.relative(pkg.directory, importer)}" is importing "${source}"`, pkg.name);
38 },
39
40 // eslint-disable-next-line no-unused-vars
41 async generateBundle(opts, bundle, something) {
42 for (const n in bundle) {
43 const file = bundle[n]; // $FlowFixMe
44
45 let facadeModuleId = file.facadeModuleId;
46
47 if (file.isAsset || !file.isEntry || facadeModuleId == null) {
48 continue;
49 }
50
51 let mainFieldPath = file.fileName.replace(/\.prod\.js$/, ".js");
52
53 let relativeToSource = _path.default.relative(_path.default.dirname(_path.default.join(opts.dir, file.fileName)), facadeModuleId);
54
55 let isEntrySourceTypeScript = /\.tsx?$/.test(facadeModuleId);
56
57 if (!isEntrySourceTypeScript) {
58 let flowMode = false;
59 let source = await fs.readFile(facadeModuleId, "utf8");
60
61 if (source.includes("@flow")) {
62 flowMode = file.exports.includes("default") ? "all" : "named";
63 }
64
65 if (flowMode !== false) {
66 let flowFileSource = (0, _utils2.flowTemplate)(flowMode === "all", relativeToSource);
67 let flowFileName = mainFieldPath + ".flow";
68 bundle[flowFileName] = {
69 fileName: flowFileName,
70 isAsset: true,
71 source: flowFileSource
72 };
73 }
74 }
75
76 let mainEntrySource = `'use strict';
77
78if (process.env.NODE_ENV === "production") {
79 module.exports = require("./${_path.default.basename((0, _utils.getProdPath)(mainFieldPath))}");
80} else {
81 module.exports = require("./${_path.default.basename((0, _utils.getDevPath)(mainFieldPath))}");
82}\n`;
83 bundle[mainFieldPath] = {
84 fileName: mainFieldPath,
85 isAsset: true,
86 source: mainEntrySource
87 };
88 }
89 }
90
91 };
92}
\No newline at end of file