@modern-js/app-tools 2.0.0-beta.2 → 2.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +251 -0
- package/bin/modern.js +10 -1
- package/dist/js/modern/analyze/constants.js +2 -0
- package/dist/js/modern/analyze/generateCode.js +38 -18
- package/dist/js/modern/analyze/getServerRoutes.js +3 -3
- package/dist/js/modern/analyze/nestedRoutes.js +17 -6
- package/dist/js/modern/analyze/templates.js +59 -27
- package/dist/js/modern/analyze/utils.js +30 -4
- package/dist/js/modern/builder/builderPlugins/compatModern.js +6 -1
- package/dist/js/modern/builder/index.js +3 -5
- package/dist/js/modern/builder/loaders/routerLoader.js +20 -0
- package/dist/js/modern/builder/loaders/serverModuleLoader.js +4 -0
- package/dist/js/modern/commands/dev.js +23 -27
- package/dist/js/modern/commands/start.js +0 -1
- package/dist/js/modern/config/default.js +0 -1
- package/dist/js/modern/config/initial/createOutputConfig.js +3 -0
- package/dist/js/modern/utils/createFileWatcher.js +1 -1
- package/dist/js/modern/utils/restart.js +1 -1
- package/dist/js/node/analyze/constants.js +5 -1
- package/dist/js/node/analyze/generateCode.js +36 -16
- package/dist/js/node/analyze/getServerRoutes.js +3 -3
- package/dist/js/node/analyze/nestedRoutes.js +15 -4
- package/dist/js/node/analyze/templates.js +60 -27
- package/dist/js/node/analyze/utils.js +31 -3
- package/dist/js/node/builder/builderPlugins/compatModern.js +6 -1
- package/dist/js/node/builder/index.js +3 -5
- package/dist/js/node/builder/loaders/routerLoader.js +27 -0
- package/dist/js/node/builder/loaders/serverModuleLoader.js +11 -0
- package/dist/js/node/commands/dev.js +23 -27
- package/dist/js/node/commands/start.js +0 -1
- package/dist/js/node/config/default.js +0 -1
- package/dist/js/node/config/initial/createOutputConfig.js +3 -0
- package/dist/js/node/utils/createFileWatcher.js +2 -1
- package/dist/js/node/utils/restart.js +1 -1
- package/dist/js/treeshaking/analyze/constants.js +2 -0
- package/dist/js/treeshaking/analyze/generateCode.js +137 -81
- package/dist/js/treeshaking/analyze/getServerRoutes.js +4 -3
- package/dist/js/treeshaking/analyze/nestedRoutes.js +98 -55
- package/dist/js/treeshaking/analyze/templates.js +175 -101
- package/dist/js/treeshaking/analyze/utils.js +80 -4
- package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +6 -1
- package/dist/js/treeshaking/builder/index.js +3 -5
- package/dist/js/treeshaking/builder/loaders/routerLoader.js +14 -0
- package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +4 -0
- package/dist/js/treeshaking/commands/dev.js +37 -38
- package/dist/js/treeshaking/commands/start.js +0 -1
- package/dist/js/treeshaking/config/default.js +0 -1
- package/dist/js/treeshaking/config/initial/createOutputConfig.js +3 -0
- package/dist/js/treeshaking/utils/createFileWatcher.js +1 -1
- package/dist/js/treeshaking/utils/restart.js +1 -1
- package/dist/types/analyze/constants.d.ts +2 -0
- package/dist/types/analyze/templates.d.ts +8 -7
- package/dist/types/analyze/utils.d.ts +9 -1
- package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
- package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
- package/dist/types/types/config/tools.d.ts +8 -1
- package/dist/types/types/hooks.d.ts +2 -1
- package/dist/types/utils/createFileWatcher.d.ts +2 -1
- package/lib/types.d.ts +1 -1
- package/package.json +25 -22
|
@@ -1,17 +1,44 @@
|
|
|
1
|
-
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
1
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
3
|
-
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
4
2
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
3
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
4
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
5
5
|
import * as path from 'path';
|
|
6
|
-
import { fs, getRouteId } from '@modern-js/utils';
|
|
6
|
+
import { fs, getRouteId, normalizeToPosixPath } from '@modern-js/utils';
|
|
7
7
|
import { JS_EXTENSIONS } from "./constants";
|
|
8
|
-
import { replaceWithAlias } from "./utils";
|
|
8
|
+
import { hasLoader, replaceWithAlias } from "./utils";
|
|
9
9
|
var LAYOUT_FILE = 'layout';
|
|
10
10
|
var PAGE_FILE = 'page';
|
|
11
11
|
var LOADING_FILE = 'loading';
|
|
12
12
|
var ERROR_FILE = 'error';
|
|
13
13
|
var LOADER_FILE = 'loader';
|
|
14
14
|
var conventionNames = [LAYOUT_FILE, PAGE_FILE, LOADING_FILE, ERROR_FILE, LOADER_FILE];
|
|
15
|
+
var getLoaderPath = /*#__PURE__*/function () {
|
|
16
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(filename) {
|
|
17
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
18
|
+
while (1) {
|
|
19
|
+
switch (_context.prev = _context.next) {
|
|
20
|
+
case 0:
|
|
21
|
+
_context.next = 2;
|
|
22
|
+
return hasLoader(filename);
|
|
23
|
+
case 2:
|
|
24
|
+
if (!_context.sent) {
|
|
25
|
+
_context.next = 4;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
return _context.abrupt("return", normalizeToPosixPath(filename));
|
|
29
|
+
case 4:
|
|
30
|
+
return _context.abrupt("return", undefined);
|
|
31
|
+
case 5:
|
|
32
|
+
case "end":
|
|
33
|
+
return _context.stop();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, _callee);
|
|
37
|
+
}));
|
|
38
|
+
return function getLoaderPath(_x) {
|
|
39
|
+
return _ref.apply(this, arguments);
|
|
40
|
+
};
|
|
41
|
+
}();
|
|
15
42
|
var replaceDynamicPath = function replaceDynamicPath(routePath) {
|
|
16
43
|
return routePath.replace(/\[(.*?)\]/g, ':$1');
|
|
17
44
|
};
|
|
@@ -29,30 +56,30 @@ var createRoute = function createRoute(routeInfo, rootDir, filename, entryName)
|
|
|
29
56
|
});
|
|
30
57
|
};
|
|
31
58
|
export var walk = /*#__PURE__*/function () {
|
|
32
|
-
var
|
|
59
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(dirname, rootDir, alias, entryName) {
|
|
33
60
|
var isDirectory, relativeDir, pathSegments, lastSegment, isRoot, isPathlessLayout, isWithoutLayoutPath, routePath, route, items, _iterator, _step, item, itemPath, extname, itemWithoutExt, _isDirectory, childRoute, _route$children, _route$children2, _childRoute, finalRoute;
|
|
34
|
-
return _regeneratorRuntime().wrap(function
|
|
61
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
35
62
|
while (1) {
|
|
36
|
-
switch (
|
|
63
|
+
switch (_context2.prev = _context2.next) {
|
|
37
64
|
case 0:
|
|
38
|
-
|
|
65
|
+
_context2.next = 2;
|
|
39
66
|
return fs.pathExists(dirname);
|
|
40
67
|
case 2:
|
|
41
|
-
if (
|
|
42
|
-
|
|
68
|
+
if (_context2.sent) {
|
|
69
|
+
_context2.next = 4;
|
|
43
70
|
break;
|
|
44
71
|
}
|
|
45
|
-
return
|
|
72
|
+
return _context2.abrupt("return", null);
|
|
46
73
|
case 4:
|
|
47
|
-
|
|
74
|
+
_context2.next = 6;
|
|
48
75
|
return fs.stat(dirname);
|
|
49
76
|
case 6:
|
|
50
|
-
isDirectory =
|
|
77
|
+
isDirectory = _context2.sent.isDirectory();
|
|
51
78
|
if (isDirectory) {
|
|
52
|
-
|
|
79
|
+
_context2.next = 9;
|
|
53
80
|
break;
|
|
54
81
|
}
|
|
55
|
-
return
|
|
82
|
+
return _context2.abrupt("return", null);
|
|
56
83
|
case 9:
|
|
57
84
|
relativeDir = path.relative(rootDir, dirname);
|
|
58
85
|
pathSegments = relativeDir.split(path.sep);
|
|
@@ -67,79 +94,95 @@ export var walk = /*#__PURE__*/function () {
|
|
|
67
94
|
routePath = replaceDynamicPath(routePath);
|
|
68
95
|
route = {
|
|
69
96
|
path: routePath,
|
|
70
|
-
children: []
|
|
97
|
+
children: [],
|
|
98
|
+
isRoot: isRoot
|
|
71
99
|
};
|
|
72
|
-
|
|
100
|
+
_context2.next = 21;
|
|
73
101
|
return fs.readdir(dirname);
|
|
74
102
|
case 21:
|
|
75
|
-
items =
|
|
103
|
+
items = _context2.sent;
|
|
76
104
|
_iterator = _createForOfIteratorHelper(items);
|
|
77
|
-
|
|
105
|
+
_context2.prev = 23;
|
|
78
106
|
_iterator.s();
|
|
79
107
|
case 25:
|
|
80
108
|
if ((_step = _iterator.n()).done) {
|
|
81
|
-
|
|
109
|
+
_context2.next = 55;
|
|
82
110
|
break;
|
|
83
111
|
}
|
|
84
112
|
item = _step.value;
|
|
85
113
|
itemPath = path.join(dirname, item);
|
|
86
114
|
extname = path.extname(item);
|
|
87
115
|
itemWithoutExt = item.slice(0, -extname.length);
|
|
88
|
-
|
|
116
|
+
_context2.next = 32;
|
|
89
117
|
return fs.stat(itemPath);
|
|
90
118
|
case 32:
|
|
91
|
-
_isDirectory =
|
|
119
|
+
_isDirectory = _context2.sent.isDirectory();
|
|
92
120
|
if (!_isDirectory) {
|
|
93
|
-
|
|
121
|
+
_context2.next = 38;
|
|
94
122
|
break;
|
|
95
123
|
}
|
|
96
|
-
|
|
124
|
+
_context2.next = 36;
|
|
97
125
|
return walk(itemPath, rootDir, alias, entryName);
|
|
98
126
|
case 36:
|
|
99
|
-
childRoute =
|
|
127
|
+
childRoute = _context2.sent;
|
|
100
128
|
if (childRoute) {
|
|
101
129
|
(_route$children = route.children) === null || _route$children === void 0 ? void 0 : _route$children.push(childRoute);
|
|
102
130
|
}
|
|
103
131
|
case 38:
|
|
104
132
|
if (!(extname && (!JS_EXTENSIONS.includes(extname) || !conventionNames.includes(itemWithoutExt)))) {
|
|
105
|
-
|
|
133
|
+
_context2.next = 40;
|
|
106
134
|
break;
|
|
107
135
|
}
|
|
108
|
-
return
|
|
136
|
+
return _context2.abrupt("continue", 53);
|
|
109
137
|
case 40:
|
|
110
|
-
if (itemWithoutExt === LAYOUT_FILE) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (itemWithoutExt === PAGE_FILE) {
|
|
114
|
-
_childRoute = createIndexRoute({
|
|
115
|
-
_component: replaceWithAlias(alias.basename, itemPath, alias.name)
|
|
116
|
-
}, rootDir, itemPath, entryName);
|
|
117
|
-
(_route$children2 = route.children) === null || _route$children2 === void 0 ? void 0 : _route$children2.push(_childRoute);
|
|
138
|
+
if (!(itemWithoutExt === LAYOUT_FILE)) {
|
|
139
|
+
_context2.next = 45;
|
|
140
|
+
break;
|
|
118
141
|
}
|
|
119
|
-
|
|
120
|
-
|
|
142
|
+
route._component = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
143
|
+
_context2.next = 44;
|
|
144
|
+
return getLoaderPath(itemPath);
|
|
145
|
+
case 44:
|
|
146
|
+
route.loader = _context2.sent;
|
|
147
|
+
case 45:
|
|
148
|
+
if (!(itemWithoutExt === PAGE_FILE)) {
|
|
149
|
+
_context2.next = 51;
|
|
150
|
+
break;
|
|
121
151
|
}
|
|
152
|
+
_childRoute = createIndexRoute({
|
|
153
|
+
_component: replaceWithAlias(alias.basename, itemPath, alias.name)
|
|
154
|
+
}, rootDir, itemPath, entryName);
|
|
155
|
+
_context2.next = 49;
|
|
156
|
+
return getLoaderPath(itemPath);
|
|
157
|
+
case 49:
|
|
158
|
+
_childRoute.loader = _context2.sent;
|
|
159
|
+
(_route$children2 = route.children) === null || _route$children2 === void 0 ? void 0 : _route$children2.push(_childRoute);
|
|
160
|
+
case 51:
|
|
161
|
+
// if (itemWithoutExt === LOADER_FILE) {
|
|
162
|
+
// route.loader = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
163
|
+
// }
|
|
164
|
+
|
|
122
165
|
if (itemWithoutExt === LOADING_FILE) {
|
|
123
166
|
route.loading = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
124
167
|
}
|
|
125
168
|
if (itemWithoutExt === ERROR_FILE) {
|
|
126
169
|
route.error = replaceWithAlias(alias.basename, itemPath, alias.name);
|
|
127
170
|
}
|
|
128
|
-
case
|
|
129
|
-
|
|
171
|
+
case 53:
|
|
172
|
+
_context2.next = 25;
|
|
130
173
|
break;
|
|
131
|
-
case
|
|
132
|
-
|
|
174
|
+
case 55:
|
|
175
|
+
_context2.next = 60;
|
|
133
176
|
break;
|
|
134
|
-
case
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
_iterator.e(
|
|
138
|
-
case
|
|
139
|
-
|
|
177
|
+
case 57:
|
|
178
|
+
_context2.prev = 57;
|
|
179
|
+
_context2.t0 = _context2["catch"](23);
|
|
180
|
+
_iterator.e(_context2.t0);
|
|
181
|
+
case 60:
|
|
182
|
+
_context2.prev = 60;
|
|
140
183
|
_iterator.f();
|
|
141
|
-
return
|
|
142
|
-
case
|
|
184
|
+
return _context2.finish(60);
|
|
185
|
+
case 63:
|
|
143
186
|
finalRoute = createRoute(route, rootDir, path.join(dirname, "".concat(LAYOUT_FILE, ".ts")), entryName);
|
|
144
187
|
/**
|
|
145
188
|
* when the url is /, the __auth/layout.tsx component should not be rendered
|
|
@@ -151,15 +194,15 @@ export var walk = /*#__PURE__*/function () {
|
|
|
151
194
|
if (isPathlessLayout) {
|
|
152
195
|
delete finalRoute.path;
|
|
153
196
|
}
|
|
154
|
-
return
|
|
155
|
-
case
|
|
197
|
+
return _context2.abrupt("return", finalRoute);
|
|
198
|
+
case 66:
|
|
156
199
|
case "end":
|
|
157
|
-
return
|
|
200
|
+
return _context2.stop();
|
|
158
201
|
}
|
|
159
202
|
}
|
|
160
|
-
},
|
|
203
|
+
}, _callee2, null, [[23, 57, 60, 63]]);
|
|
161
204
|
}));
|
|
162
|
-
return function walk(
|
|
163
|
-
return
|
|
205
|
+
return function walk(_x2, _x3, _x4, _x5) {
|
|
206
|
+
return _ref2.apply(this, arguments);
|
|
164
207
|
};
|
|
165
208
|
}();
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
1
3
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
2
4
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { fs } from '@modern-js/utils';
|
|
7
|
+
import { TEMP_LOADERS_DIR } from "./constants";
|
|
3
8
|
export var index = function index(_ref) {
|
|
4
9
|
var mountId = _ref.mountId,
|
|
5
10
|
imports = _ref.imports,
|
|
@@ -23,10 +28,10 @@ export var html = function html(partials) {
|
|
|
23
28
|
};
|
|
24
29
|
export var routesForServer = function routesForServer(_ref4) {
|
|
25
30
|
var routes = _ref4.routes,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
basename = alias.basename;
|
|
31
|
+
internalDirectory = _ref4.internalDirectory,
|
|
32
|
+
entryName = _ref4.entryName;
|
|
29
33
|
var loaders = [];
|
|
34
|
+
var loaderIndexFile = path.join(internalDirectory, entryName, TEMP_LOADERS_DIR, 'index.js');
|
|
30
35
|
var traverseRouteTree = function traverseRouteTree(route) {
|
|
31
36
|
var children;
|
|
32
37
|
if ('children' in route && route.children) {
|
|
@@ -65,106 +70,175 @@ export var routesForServer = function routesForServer(_ref4) {
|
|
|
65
70
|
_iterator.f();
|
|
66
71
|
}
|
|
67
72
|
routesCode += "\n];";
|
|
68
|
-
var importLoadersCode =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
var importLoadersCode = '';
|
|
74
|
+
if (loaders.length > 0) {
|
|
75
|
+
importLoadersCode = "\n import { ".concat(loaders.map(function (loader, index) {
|
|
76
|
+
return "loader_".concat(index);
|
|
77
|
+
}), " } from \"").concat(loaderIndexFile, "\"");
|
|
78
|
+
}
|
|
72
79
|
return "\n ".concat(importLoadersCode, "\n ").concat(routesCode, "\n ");
|
|
73
80
|
};
|
|
74
|
-
export var fileSystemRoutes = function
|
|
75
|
-
var
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
81
|
+
export var fileSystemRoutes = /*#__PURE__*/function () {
|
|
82
|
+
var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref5) {
|
|
83
|
+
var routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, loadings, errors, loaders, loadersMap, loadersIndexFile, loadersMapFile, importLazyCode, rootLayoutCode, dataLoaderPath, componentLoaderPath, traverseRouteTree, routeComponentsCode, _iterator2, _step2, route, newRoute, component, finalRoute, importLoadingCode, importErrorComponentsCode, importLoadersCode, loaderEntryCode, loaderEntryFile;
|
|
84
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
85
|
+
while (1) {
|
|
86
|
+
switch (_context2.prev = _context2.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
routes = _ref5.routes, ssrMode = _ref5.ssrMode, nestedRoutesEntry = _ref5.nestedRoutesEntry, entryName = _ref5.entryName, internalDirectory = _ref5.internalDirectory;
|
|
89
|
+
loadings = [];
|
|
90
|
+
errors = [];
|
|
91
|
+
loaders = [];
|
|
92
|
+
loadersMap = {};
|
|
93
|
+
loadersIndexFile = path.join('@_modern_js_internal', entryName, TEMP_LOADERS_DIR, 'index.js');
|
|
94
|
+
loadersMapFile = path.join(internalDirectory, entryName, TEMP_LOADERS_DIR, 'map.json');
|
|
95
|
+
importLazyCode = "\n import { lazy } from \"react\";\n import loadable, { lazy as loadableLazy } from \"@modern-js/runtime/loadable\"\n ";
|
|
96
|
+
rootLayoutCode = "";
|
|
97
|
+
dataLoaderPath = '';
|
|
98
|
+
componentLoaderPath = '';
|
|
99
|
+
if (ssrMode) {
|
|
100
|
+
dataLoaderPath = require.resolve("@modern-js/plugin-data-loader/loader");
|
|
101
|
+
if (nestedRoutesEntry) {
|
|
102
|
+
dataLoaderPath = "".concat(dataLoaderPath, "?routesDir=").concat(nestedRoutesEntry, "&mapFile=").concat(loadersMapFile, "!");
|
|
103
|
+
}
|
|
104
|
+
componentLoaderPath = "".concat(path.join(__dirname, '../builder/loaders/routerLoader'), "!");
|
|
105
|
+
}
|
|
106
|
+
traverseRouteTree = function traverseRouteTree(route) {
|
|
107
|
+
var children;
|
|
108
|
+
if ('children' in route && route.children) {
|
|
109
|
+
var _route$children2;
|
|
110
|
+
children = route === null || route === void 0 ? void 0 : (_route$children2 = route.children) === null || _route$children2 === void 0 ? void 0 : _route$children2.map(traverseRouteTree);
|
|
111
|
+
}
|
|
112
|
+
var loading;
|
|
113
|
+
var error;
|
|
114
|
+
var loader;
|
|
115
|
+
var component = '';
|
|
116
|
+
if (route.type === 'nested') {
|
|
117
|
+
if (route.loading) {
|
|
118
|
+
loadings.push(route.loading);
|
|
119
|
+
loading = "loading_".concat(loadings.length - 1);
|
|
120
|
+
}
|
|
121
|
+
if (route.error) {
|
|
122
|
+
errors.push(route.error);
|
|
123
|
+
error = "error_".concat(errors.length - 1);
|
|
124
|
+
}
|
|
125
|
+
if (route.loader) {
|
|
126
|
+
loaders.push(route.loader);
|
|
127
|
+
var loaderId = loaders.length - 1;
|
|
128
|
+
loader = "loader_".concat(loaderId);
|
|
129
|
+
loadersMap[loader] = route.id;
|
|
130
|
+
}
|
|
131
|
+
if (route._component) {
|
|
132
|
+
if (route.isRoot) {
|
|
133
|
+
rootLayoutCode = "import RootLayout from '".concat(route._component, "'");
|
|
134
|
+
component = "RootLayout";
|
|
135
|
+
} else if (ssrMode === 'string') {
|
|
136
|
+
component = "loadable(() => import(/* webpackChunkName: \"".concat(route.id, "\" */ '").concat(componentLoaderPath).concat(route._component, "'))");
|
|
137
|
+
} else {
|
|
138
|
+
// csr and streaming
|
|
139
|
+
component = "lazy(() => import(/* webpackChunkName: \"".concat(route.id, "\" */ '").concat(componentLoaderPath).concat(route._component, "'))");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
} else if (route._component) {
|
|
143
|
+
component = "loadable(() => import('".concat(route._component, "'))");
|
|
144
|
+
}
|
|
145
|
+
var finalRoute = _objectSpread(_objectSpread({}, route), {}, {
|
|
146
|
+
loading: loading,
|
|
147
|
+
loader: loader,
|
|
148
|
+
error: error,
|
|
149
|
+
children: children
|
|
150
|
+
});
|
|
151
|
+
if (route._component) {
|
|
152
|
+
finalRoute.component = component;
|
|
153
|
+
}
|
|
154
|
+
return finalRoute;
|
|
155
|
+
};
|
|
156
|
+
routeComponentsCode = "\n export const routes = [\n ";
|
|
157
|
+
_iterator2 = _createForOfIteratorHelper(routes);
|
|
158
|
+
try {
|
|
159
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
160
|
+
route = _step2.value;
|
|
161
|
+
if ('type' in route) {
|
|
162
|
+
newRoute = traverseRouteTree(route);
|
|
163
|
+
routeComponentsCode += "".concat(JSON.stringify(newRoute, null, 2).replace(/"(loadable.*\))"/g, '$1').replace(/"(loadableLazy.*\))"/g, '$1').replace(/"(lazy.*\))"/g, '$1').replace(/"(loading_[^"])"/g, '$1').replace(/"(loader_[^"])"/g, '$1').replace(/"(RootLayout)"/g, '$1').replace(/"(error_[^"])"/g, '$1').replace(/\\"/g, '"'), ",");
|
|
164
|
+
} else {
|
|
165
|
+
component = "loadable(() => import('".concat(route._component, "'))");
|
|
166
|
+
finalRoute = _objectSpread(_objectSpread({}, route), {}, {
|
|
167
|
+
component: component
|
|
168
|
+
});
|
|
169
|
+
routeComponentsCode += "".concat(JSON.stringify(finalRoute, null, 2).replace(/"(loadable[^"]*)"/g, '$1').replace(/"(lazy[^"]*)"/g, '$1'), ",");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} catch (err) {
|
|
173
|
+
_iterator2.e(err);
|
|
174
|
+
} finally {
|
|
175
|
+
_iterator2.f();
|
|
176
|
+
}
|
|
177
|
+
routeComponentsCode += "\n];";
|
|
178
|
+
importLoadingCode = loadings.map(function (loading, index) {
|
|
179
|
+
return "import loading_".concat(index, " from '").concat(loading, "';\n");
|
|
180
|
+
}).join('');
|
|
181
|
+
importErrorComponentsCode = errors.map(function (error, index) {
|
|
182
|
+
return "import error_".concat(index, " from '").concat(error, "';\n");
|
|
183
|
+
}).join('');
|
|
184
|
+
importLoadersCode = '';
|
|
185
|
+
if (!(loaders.length > 0)) {
|
|
186
|
+
_context2.next = 32;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
importLoadersCode = "\n import { ".concat(loaders.map(function (loader, index) {
|
|
190
|
+
return "loader_".concat(index);
|
|
191
|
+
}), " } from \"").concat(dataLoaderPath).concat(loadersIndexFile, "\"\n ");
|
|
192
|
+
loaderEntryCode = loaders.map(function (loader, index) {
|
|
193
|
+
return "export * from './loader_".concat(index, ".js';");
|
|
194
|
+
}).join('\n');
|
|
195
|
+
loaderEntryFile = path.join(internalDirectory, entryName, TEMP_LOADERS_DIR, 'entry.js');
|
|
196
|
+
_context2.next = 26;
|
|
197
|
+
return fs.ensureFile(loaderEntryFile);
|
|
198
|
+
case 26:
|
|
199
|
+
_context2.next = 28;
|
|
200
|
+
return fs.writeFile(loaderEntryFile, loaderEntryCode);
|
|
201
|
+
case 28:
|
|
202
|
+
_context2.next = 30;
|
|
203
|
+
return fs.writeJSON(loadersMapFile, loadersMap);
|
|
204
|
+
case 30:
|
|
205
|
+
_context2.next = 32;
|
|
206
|
+
return Promise.all(loaders.map( /*#__PURE__*/function () {
|
|
207
|
+
var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(loader, index) {
|
|
208
|
+
var name, filename, code;
|
|
209
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
210
|
+
while (1) {
|
|
211
|
+
switch (_context.prev = _context.next) {
|
|
212
|
+
case 0:
|
|
213
|
+
name = "loader_".concat(index);
|
|
214
|
+
filename = path.join(internalDirectory, entryName, TEMP_LOADERS_DIR, "".concat(name, ".js"));
|
|
215
|
+
code = "\n export { loader as ".concat(name, " } from '").concat(loader, "'\n ");
|
|
216
|
+
_context.next = 5;
|
|
217
|
+
return fs.ensureFile(filename);
|
|
218
|
+
case 5:
|
|
219
|
+
_context.next = 7;
|
|
220
|
+
return fs.writeFile(filename, code);
|
|
221
|
+
case 7:
|
|
222
|
+
case "end":
|
|
223
|
+
return _context.stop();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}, _callee);
|
|
227
|
+
}));
|
|
228
|
+
return function (_x2, _x3) {
|
|
229
|
+
return _ref7.apply(this, arguments);
|
|
230
|
+
};
|
|
231
|
+
}()));
|
|
232
|
+
case 32:
|
|
233
|
+
return _context2.abrupt("return", "\n ".concat(importLazyCode, "\n ").concat(rootLayoutCode, "\n ").concat(importLoadingCode, "\n ").concat(importErrorComponentsCode, "\n ").concat(importLoadersCode, "\n ").concat(routeComponentsCode, "\n "));
|
|
234
|
+
case 33:
|
|
235
|
+
case "end":
|
|
236
|
+
return _context2.stop();
|
|
121
237
|
}
|
|
122
238
|
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
loading: loading,
|
|
128
|
-
loader: loader,
|
|
129
|
-
error: error,
|
|
130
|
-
children: children
|
|
131
|
-
});
|
|
132
|
-
if (route._component) {
|
|
133
|
-
finalRoute.component = component;
|
|
134
|
-
}
|
|
135
|
-
return finalRoute;
|
|
239
|
+
}, _callee2);
|
|
240
|
+
}));
|
|
241
|
+
return function fileSystemRoutes(_x) {
|
|
242
|
+
return _ref6.apply(this, arguments);
|
|
136
243
|
};
|
|
137
|
-
|
|
138
|
-
var _iterator2 = _createForOfIteratorHelper(routes),
|
|
139
|
-
_step2;
|
|
140
|
-
try {
|
|
141
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
142
|
-
var route = _step2.value;
|
|
143
|
-
if ('type' in route) {
|
|
144
|
-
var newRoute = traverseRouteTree(route);
|
|
145
|
-
routeComponentsCode += "".concat(JSON.stringify(newRoute, null, 2).replace(/"(loadable.*\))"/g, '$1').replace(/"(loadableLazy.*\))"/g, '$1').replace(/"(lazy.*\))"/g, '$1').replace(/"(loading_[^"])"/g, '$1').replace(/"(loader_[^"])"/g, '$1').replace(/"(error_[^"])"/g, '$1').replace(/\\"/g, '"'), ",");
|
|
146
|
-
} else {
|
|
147
|
-
var component = "loadable(() => import('".concat(route._component, "'))");
|
|
148
|
-
var finalRoute = _objectSpread(_objectSpread({}, route), {}, {
|
|
149
|
-
component: component
|
|
150
|
-
});
|
|
151
|
-
routeComponentsCode += "".concat(JSON.stringify(finalRoute, null, 2).replace(/"(loadable[^"]*)"/g, '$1').replace(/"(lazy[^"]*)"/g, '$1'), ",");
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
} catch (err) {
|
|
155
|
-
_iterator2.e(err);
|
|
156
|
-
} finally {
|
|
157
|
-
_iterator2.f();
|
|
158
|
-
}
|
|
159
|
-
routeComponentsCode += "\n];";
|
|
160
|
-
var importLoadingCode = loadings.map(function (loading, index) {
|
|
161
|
-
return "import loading_".concat(index, " from '").concat(loading, "';\n");
|
|
162
|
-
}).join('');
|
|
163
|
-
var importErrorComponentsCode = errors.map(function (error, index) {
|
|
164
|
-
return "import error_".concat(index, " from '").concat(error, "';\n");
|
|
165
|
-
}).join('');
|
|
166
|
-
var importLoaderComponentsCode = loaders.map(function (loader, index) {
|
|
167
|
-
return "import loader_".concat(index, " from '").concat(dataLoaderPath).concat(loader, "';\n");
|
|
168
|
-
}).join('');
|
|
169
|
-
return "\n ".concat(importLazyCode, "\n ").concat(importLoadingCode, "\n ").concat(importErrorComponentsCode, "\n ").concat(importLoaderComponentsCode, "\n ").concat(routeComponentsCode, "\n ");
|
|
170
|
-
};
|
|
244
|
+
}();
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
1
4
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
5
|
import fs from 'fs';
|
|
3
6
|
import path from 'path';
|
|
4
|
-
import { isReact18, normalizeToPosixPath } from '@modern-js/utils';
|
|
5
|
-
import {
|
|
7
|
+
import { isReact18, normalizeToPosixPath, fs as fse } from '@modern-js/utils';
|
|
8
|
+
import { transform } from 'esbuild';
|
|
9
|
+
import { parse } from 'es-module-lexer';
|
|
10
|
+
import { FILE_SYSTEM_ROUTES_FILE_NAME, LOADER_EXPORT_NAME } from "./constants";
|
|
6
11
|
export var walkDirectory = function walkDirectory(dir) {
|
|
7
12
|
return fs.readdirSync(dir).reduce(function (previous, filename) {
|
|
8
13
|
var filePath = path.join(dir, filename);
|
|
@@ -51,7 +56,7 @@ export var getDefaultImports = function getDefaultImports(_ref) {
|
|
|
51
56
|
specifiers: [{
|
|
52
57
|
imported: 'routes'
|
|
53
58
|
}],
|
|
54
|
-
value: normalizeToPosixPath("".concat(internalDirAlias, "/").concat(entryName, "/").concat(FILE_SYSTEM_ROUTES_FILE_NAME))
|
|
59
|
+
value: normalizeToPosixPath("".concat(internalDirAlias, "/").concat(entryName, "/").concat(FILE_SYSTEM_ROUTES_FILE_NAME.replace('.js', '')))
|
|
55
60
|
};
|
|
56
61
|
if (fileSystemRoutes.globalApp) {
|
|
57
62
|
imports.push({
|
|
@@ -85,4 +90,75 @@ export var isRouteComponentFile = function isRouteComponentFile(filePath) {
|
|
|
85
90
|
};
|
|
86
91
|
export var replaceWithAlias = function replaceWithAlias(base, filePath, alias) {
|
|
87
92
|
return normalizeToPosixPath(path.join(alias, path.relative(base, filePath)));
|
|
88
|
-
};
|
|
93
|
+
};
|
|
94
|
+
export var parseModule = /*#__PURE__*/function () {
|
|
95
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref2) {
|
|
96
|
+
var source, filename, content, result;
|
|
97
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
98
|
+
while (1) {
|
|
99
|
+
switch (_context.prev = _context.next) {
|
|
100
|
+
case 0:
|
|
101
|
+
source = _ref2.source, filename = _ref2.filename;
|
|
102
|
+
content = source;
|
|
103
|
+
if (!(filename.endsWith('.tsx') || filename.endsWith('.jsx'))) {
|
|
104
|
+
_context.next = 7;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
_context.next = 5;
|
|
108
|
+
return transform(content, {
|
|
109
|
+
loader: path.extname(filename).slice(1),
|
|
110
|
+
format: 'esm'
|
|
111
|
+
});
|
|
112
|
+
case 5:
|
|
113
|
+
result = _context.sent;
|
|
114
|
+
content = result.code;
|
|
115
|
+
case 7:
|
|
116
|
+
_context.next = 9;
|
|
117
|
+
return parse(content);
|
|
118
|
+
case 9:
|
|
119
|
+
return _context.abrupt("return", _context.sent);
|
|
120
|
+
case 10:
|
|
121
|
+
case "end":
|
|
122
|
+
return _context.stop();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}, _callee);
|
|
126
|
+
}));
|
|
127
|
+
return function parseModule(_x) {
|
|
128
|
+
return _ref3.apply(this, arguments);
|
|
129
|
+
};
|
|
130
|
+
}();
|
|
131
|
+
export var hasLoader = /*#__PURE__*/function () {
|
|
132
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(filename) {
|
|
133
|
+
var source, _yield$parseModule, _yield$parseModule2, moduleExports;
|
|
134
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
135
|
+
while (1) {
|
|
136
|
+
switch (_context2.prev = _context2.next) {
|
|
137
|
+
case 0:
|
|
138
|
+
_context2.next = 2;
|
|
139
|
+
return fse.readFile(filename);
|
|
140
|
+
case 2:
|
|
141
|
+
source = _context2.sent;
|
|
142
|
+
_context2.next = 5;
|
|
143
|
+
return parseModule({
|
|
144
|
+
source: source.toString(),
|
|
145
|
+
filename: filename
|
|
146
|
+
});
|
|
147
|
+
case 5:
|
|
148
|
+
_yield$parseModule = _context2.sent;
|
|
149
|
+
_yield$parseModule2 = _slicedToArray(_yield$parseModule, 2);
|
|
150
|
+
moduleExports = _yield$parseModule2[1];
|
|
151
|
+
return _context2.abrupt("return", moduleExports.some(function (e) {
|
|
152
|
+
return e.n === LOADER_EXPORT_NAME;
|
|
153
|
+
}));
|
|
154
|
+
case 9:
|
|
155
|
+
case "end":
|
|
156
|
+
return _context2.stop();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}, _callee2);
|
|
160
|
+
}));
|
|
161
|
+
return function hasLoader(_x2) {
|
|
162
|
+
return _ref4.apply(this, arguments);
|
|
163
|
+
};
|
|
164
|
+
}();
|