@shuvi/platform-web 0.0.1-rc.32 → 1.0.0-rc.0
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/esm/shared/appTypes.d.ts +15 -0
- package/esm/shared/appTypes.js +1 -0
- package/esm/shared/index.d.ts +4 -0
- package/esm/shared/index.js +4 -0
- package/esm/shared/renderTypes.d.ts +44 -0
- package/esm/shared/renderTypes.js +1 -0
- package/esm/shared/routeTypes.d.ts +47 -0
- package/esm/shared/routeTypes.js +1 -0
- package/esm/shared/serverTypes.d.ts +6 -0
- package/esm/shared/serverTypes.js +1 -0
- package/esm/shuvi-app/app/client.d.ts +2 -0
- package/esm/shuvi-app/app/client.js +125 -0
- package/esm/shuvi-app/app/server.d.ts +2 -0
- package/esm/shuvi-app/app/server.js +67 -0
- package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.d.ts +0 -0
- package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.js +0 -0
- package/esm/shuvi-app/entry/client/app.d.ts +2 -0
- package/esm/shuvi-app/entry/client/app.js +57 -0
- package/esm/shuvi-app/entry/client/index.d.ts +2 -0
- package/esm/shuvi-app/entry/client/index.js +12 -0
- package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.d.ts +0 -0
- package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.js +2 -2
- package/{shuvi-app → esm/shuvi-app}/entry/client/run.prod.d.ts +0 -0
- package/esm/shuvi-app/entry/client/run.prod.js +3 -0
- package/{shuvi-app → esm/shuvi-app}/entry/client/setup-env.d.ts +1 -1
- package/esm/shuvi-app/entry/client/setup-env.js +17 -0
- package/esm/shuvi-app/entry/server/index.d.ts +6 -0
- package/esm/shuvi-app/entry/server/index.js +7 -0
- package/esm/shuvi-app/react/AppComponent.d.ts +4 -0
- package/esm/shuvi-app/react/AppComponent.jsx +6 -0
- package/esm/shuvi-app/react/AppContainer.d.ts +6 -0
- package/esm/shuvi-app/react/AppContainer.jsx +23 -0
- package/esm/shuvi-app/react/Error.d.ts +5 -0
- package/esm/shuvi-app/react/Error.jsx +38 -0
- package/esm/shuvi-app/react/ErrorBoundary.d.ts +16 -0
- package/esm/shuvi-app/react/ErrorBoundary.jsx +25 -0
- package/esm/shuvi-app/react/ErrorPage.d.ts +5 -0
- package/esm/shuvi-app/react/ErrorPage.jsx +7 -0
- package/esm/shuvi-app/react/Link.d.ts +7 -0
- package/esm/shuvi-app/react/Link.jsx +115 -0
- package/esm/shuvi-app/react/applicationContext.d.ts +7 -0
- package/esm/shuvi-app/react/applicationContext.jsx +10 -0
- package/esm/shuvi-app/react/dynamic.d.ts +31 -0
- package/esm/shuvi-app/react/dynamic.jsx +62 -0
- package/esm/shuvi-app/react/getRoutes.d.ts +2 -0
- package/esm/shuvi-app/react/getRoutes.js +31 -0
- package/esm/shuvi-app/react/head/head-manager-context.d.ts +2 -0
- package/esm/shuvi-app/react/head/head-manager-context.js +2 -0
- package/esm/shuvi-app/react/head/head-manager.d.ts +10 -0
- package/esm/shuvi-app/react/head/head-manager.js +93 -0
- package/esm/shuvi-app/react/head/head.d.ts +33 -0
- package/esm/shuvi-app/react/head/head.jsx +178 -0
- package/esm/shuvi-app/react/head/index.d.ts +4 -0
- package/esm/shuvi-app/react/head/index.js +4 -0
- package/esm/shuvi-app/react/head/side-effect.d.ts +30 -0
- package/esm/shuvi-app/react/head/side-effect.jsx +44 -0
- package/esm/shuvi-app/react/head/types.d.ts +15 -0
- package/esm/shuvi-app/react/head/types.js +1 -0
- package/esm/shuvi-app/react/index.d.ts +4 -0
- package/esm/shuvi-app/react/index.js +4 -0
- package/esm/shuvi-app/react/loadRouteComponent.d.ts +4 -0
- package/esm/shuvi-app/react/loadRouteComponent.jsx +9 -0
- package/esm/shuvi-app/react/loadable/index.d.ts +2 -0
- package/esm/shuvi-app/react/loadable/index.js +2 -0
- package/esm/shuvi-app/react/loadable/loadable-context.d.ts +4 -0
- package/esm/shuvi-app/react/loadable/loadable-context.js +3 -0
- package/esm/shuvi-app/react/loadable/loadable.d.ts +30 -0
- package/esm/shuvi-app/react/loadable/loadable.js +277 -0
- package/esm/shuvi-app/react/shuvi-runtime-api.d.ts +5 -0
- package/esm/shuvi-app/react/shuvi-runtime-api.js +5 -0
- package/esm/shuvi-app/react/types.d.ts +14 -0
- package/esm/shuvi-app/react/types.js +1 -0
- package/esm/shuvi-app/react/useLoaderData.d.ts +2 -0
- package/esm/shuvi-app/react/useLoaderData.js +27 -0
- package/esm/shuvi-app/react/utils/getDisplayName.d.ts +2 -0
- package/esm/shuvi-app/react/utils/getDisplayName.js +3 -0
- package/esm/shuvi-app/react/utils/requestIdleCallback.d.ts +2 -0
- package/esm/shuvi-app/react/utils/requestIdleCallback.js +20 -0
- package/esm/shuvi-app/react/utils/useIntersection.d.ts +8 -0
- package/esm/shuvi-app/react/utils/useIntersection.jsx +91 -0
- package/esm/shuvi-app/react/view/ReactView.client.d.ts +5 -0
- package/esm/shuvi-app/react/view/ReactView.client.jsx +64 -0
- package/esm/shuvi-app/react/view/ReactView.server.d.ts +4 -0
- package/esm/shuvi-app/react/view/ReactView.server.jsx +109 -0
- package/esm/shuvi-app/react/view/clientView.d.ts +3 -0
- package/esm/shuvi-app/react/view/clientView.js +2 -0
- package/esm/shuvi-app/react/view/index.d.ts +2 -0
- package/esm/shuvi-app/react/view/index.js +7 -0
- package/esm/shuvi-app/react/view/render-action.d.ts +10 -0
- package/esm/shuvi-app/react/view/render-action.js +29 -0
- package/esm/shuvi-app/react/view/serverView.d.ts +3 -0
- package/esm/shuvi-app/react/view/serverView.js +2 -0
- package/esm/shuvi-app/react/view/transformRoutes.d.ts +2 -0
- package/esm/shuvi-app/react/view/transformRoutes.js +3 -0
- package/esm/shuvi-app/shuvi-runtime-index.d.ts +4 -0
- package/esm/shuvi-app/shuvi-runtime-index.js +2 -0
- package/esm/shuvi-app/shuvi-runtime-server.d.ts +6 -0
- package/esm/shuvi-app/shuvi-runtime-server.js +1 -0
- package/lib/node/features/custom-server/hooks.d.ts +9 -0
- package/lib/node/features/custom-server/hooks.js +13 -0
- package/lib/node/features/custom-server/index.d.ts +17 -0
- package/lib/node/features/custom-server/index.js +28 -0
- package/lib/node/features/custom-server/server.d.ts +2 -0
- package/lib/node/features/custom-server/server.js +32 -0
- package/lib/node/features/custom-server/shuvi-app.d.ts +11 -0
- package/lib/node/features/custom-server/shuvi-app.js +2 -0
- package/lib/node/features/filesystem-routes/api/apiRouteHandler.d.ts +50 -0
- package/lib/node/features/filesystem-routes/api/apiRouteHandler.js +237 -0
- package/lib/node/features/filesystem-routes/api/apiRoutes.d.ts +7 -0
- package/lib/node/features/filesystem-routes/api/apiRoutes.js +35 -0
- package/lib/node/features/filesystem-routes/api/index.d.ts +3 -0
- package/lib/node/features/filesystem-routes/api/index.js +7 -0
- package/lib/node/features/filesystem-routes/api/middleware.d.ts +2 -0
- package/lib/node/features/filesystem-routes/api/middleware.js +46 -0
- package/lib/node/features/filesystem-routes/hooks.d.ts +3 -0
- package/lib/node/features/filesystem-routes/hooks.js +6 -0
- package/lib/node/features/filesystem-routes/index.d.ts +20 -0
- package/lib/node/features/filesystem-routes/index.js +182 -0
- package/lib/node/features/filesystem-routes/middleware/index.d.ts +2 -0
- package/lib/node/features/filesystem-routes/middleware/index.js +7 -0
- package/lib/node/features/filesystem-routes/middleware/middleware.d.ts +2 -0
- package/lib/node/features/filesystem-routes/middleware/middleware.js +42 -0
- package/lib/node/features/filesystem-routes/middleware/routes.d.ts +9 -0
- package/lib/node/features/filesystem-routes/middleware/routes.js +34 -0
- package/lib/node/features/filesystem-routes/page/index.d.ts +2 -0
- package/lib/node/features/filesystem-routes/page/index.js +21 -0
- package/lib/node/features/filesystem-routes/page/routes.d.ts +8 -0
- package/lib/node/features/filesystem-routes/page/routes.js +83 -0
- package/lib/node/features/filesystem-routes/page/store.d.ts +3 -0
- package/lib/node/features/filesystem-routes/page/store.js +10 -0
- package/lib/node/features/filesystem-routes/shuvi-app.d.ts +7 -0
- package/lib/node/features/filesystem-routes/shuvi-app.js +2 -0
- package/lib/node/features/html-render/index.d.ts +16 -0
- package/lib/node/features/html-render/index.js +21 -0
- package/lib/node/features/html-render/lib/generateFilesByRoutId.d.ts +3 -0
- package/lib/node/features/html-render/lib/generateFilesByRoutId.js +13 -0
- package/lib/node/features/html-render/lib/getPageMiddleware.d.ts +2 -0
- package/lib/node/features/html-render/lib/getPageMiddleware.js +56 -0
- package/lib/node/features/html-render/lib/index.d.ts +4 -0
- package/lib/node/features/html-render/lib/index.js +23 -0
- package/lib/node/features/html-render/lib/pageLoader.d.ts +1 -0
- package/lib/node/features/html-render/lib/pageLoader.js +42 -0
- package/lib/node/features/html-render/lib/renderToHTML.d.ts +6 -0
- package/lib/node/features/html-render/lib/renderToHTML.js +81 -0
- package/lib/node/features/html-render/lib/renderer/base.d.ts +17 -0
- package/lib/node/features/html-render/lib/renderer/base.js +70 -0
- package/lib/node/features/html-render/lib/renderer/htmlTag.d.ts +4 -0
- package/lib/node/features/html-render/lib/renderer/htmlTag.js +70 -0
- package/lib/node/features/html-render/lib/renderer/index.d.ts +15 -0
- package/lib/node/features/html-render/lib/renderer/index.js +48 -0
- package/lib/node/features/html-render/lib/renderer/spa.d.ts +5 -0
- package/lib/node/features/html-render/lib/renderer/spa.js +26 -0
- package/lib/node/features/html-render/lib/renderer/ssr.d.ts +5 -0
- package/lib/node/features/html-render/lib/renderer/ssr.js +70 -0
- package/lib/node/features/html-render/lib/renderer/types.d.ts +20 -0
- package/lib/node/features/html-render/lib/renderer/types.js +2 -0
- package/lib/node/features/html-render/lib/viewTemplate.d.ts +5 -0
- package/lib/node/features/html-render/lib/viewTemplate.js +37 -0
- package/lib/node/features/index.d.ts +28 -0
- package/lib/node/features/index.js +25 -0
- package/lib/node/features/main/buildHtml.d.ts +8 -0
- package/lib/node/features/main/buildHtml.js +64 -0
- package/lib/node/features/main/generateResource.d.ts +3 -0
- package/lib/node/features/main/generateResource.js +58 -0
- package/lib/node/features/main/index.d.ts +3 -0
- package/lib/node/features/main/index.js +103 -0
- package/lib/node/features/middlewares.d.ts +4 -0
- package/lib/node/features/middlewares.js +22 -0
- package/lib/node/features/model/index.d.ts +20 -0
- package/lib/node/features/model/index.js +54 -0
- package/lib/node/features/model/runtime.d.ts +8 -0
- package/lib/node/features/model/runtime.js +47 -0
- package/lib/node/features/model/server.d.ts +3 -0
- package/lib/node/features/model/server.js +12 -0
- package/lib/node/features/model/shuvi-app.d.ts +6 -0
- package/lib/node/features/model/shuvi-app.js +2 -0
- package/lib/node/features/on-demand-compile-page/emptyComponent.d.ts +1 -0
- package/lib/node/features/on-demand-compile-page/emptyComponent.js +7 -0
- package/lib/node/features/on-demand-compile-page/index.d.ts +14 -0
- package/lib/node/features/on-demand-compile-page/index.js +36 -0
- package/lib/node/features/on-demand-compile-page/onDemandRouteManager.d.ts +11 -0
- package/lib/node/features/on-demand-compile-page/onDemandRouteManager.js +104 -0
- package/lib/node/index.d.ts +4 -0
- package/lib/node/index.js +39 -0
- package/lib/{paths.d.ts → node/paths.d.ts} +1 -2
- package/lib/node/paths.js +16 -0
- package/lib/node/shuvi-node-extensions.d.ts +17 -0
- package/lib/node/shuvi-node-extensions.js +2 -0
- package/lib/node/targets/react/bundler/index.d.ts +15 -0
- package/lib/node/targets/react/bundler/index.js +102 -0
- package/lib/node/targets/react/index.d.ts +30 -0
- package/lib/node/targets/react/index.js +28 -0
- package/lib/node/targets/react/redox-react/RedoxWrapper.d.ts +8 -0
- package/lib/node/targets/react/redox-react/RedoxWrapper.js +37 -0
- package/lib/node/targets/react/redox-react/index.d.ts +17 -0
- package/lib/node/targets/react/redox-react/index.js +50 -0
- package/lib/node/targets/react/redox-react/runtime.d.ts +2 -0
- package/lib/node/targets/react/redox-react/runtime.js +18 -0
- package/lib/shared/appTypes.d.ts +15 -0
- package/lib/shared/appTypes.js +2 -0
- package/lib/shared/index.d.ts +4 -0
- package/lib/shared/index.js +20 -0
- package/lib/shared/renderTypes.d.ts +44 -0
- package/lib/shared/renderTypes.js +2 -0
- package/lib/shared/routeTypes.d.ts +47 -0
- package/lib/shared/routeTypes.js +2 -0
- package/lib/shared/serverTypes.d.ts +6 -0
- package/lib/shared/serverTypes.js +2 -0
- package/package.json +71 -17
- package/shuvi-app-extensions.d.ts +36 -0
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -44
- package/lib/paths.js +0 -7
- package/shuvi-app/application/client/create-application-factory.d.ts +0 -3
- package/shuvi-app/application/client/create-application-factory.js +0 -70
- package/shuvi-app/application/client/create-application-history-browser.d.ts +0 -1
- package/shuvi-app/application/client/create-application-history-browser.js +0 -3
- package/shuvi-app/application/client/create-application-history-hash.d.ts +0 -1
- package/shuvi-app/application/client/create-application-history-hash.js +0 -3
- package/shuvi-app/application/client/create-application-history-memory.d.ts +0 -1
- package/shuvi-app/application/client/create-application-history-memory.js +0 -3
- package/shuvi-app/application/server/create-application-spa.d.ts +0 -2
- package/shuvi-app/application/server/create-application-spa.js +0 -8
- package/shuvi-app/application/server/create-application.d.ts +0 -2
- package/shuvi-app/application/server/create-application.js +0 -25
- package/shuvi-app/entry/client/index.d.ts +0 -1
- package/shuvi-app/entry/client/index.js +0 -11
- package/shuvi-app/entry/client/run.prod.js +0 -3
- package/shuvi-app/entry/client/setup-app.d.ts +0 -3
- package/shuvi-app/entry/client/setup-app.js +0 -38
- package/shuvi-app/entry/client/setup-env.js +0 -27
- package/shuvi-app/entry/server/index.d.ts +0 -6
- package/shuvi-app/entry/server/index.js +0 -7
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getPageMiddleware = void 0;
|
|
13
|
+
const utils_1 = require("@shuvi/service/lib/server/utils");
|
|
14
|
+
const renderToHTML_1 = require("./renderToHTML");
|
|
15
|
+
const shared_1 = require("@shuvi/platform-shared/shared");
|
|
16
|
+
function createPageHandler(serverPluginContext) {
|
|
17
|
+
return function (req, res) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const result = yield (0, renderToHTML_1.renderToHTML)({
|
|
20
|
+
req: req,
|
|
21
|
+
serverPluginContext
|
|
22
|
+
});
|
|
23
|
+
if ((0, shared_1.isRedirect)(result)) {
|
|
24
|
+
const redirectResp = result;
|
|
25
|
+
res.writeHead(redirectResp.status, {
|
|
26
|
+
Location: redirectResp.headers.get('Location')
|
|
27
|
+
});
|
|
28
|
+
res.end();
|
|
29
|
+
}
|
|
30
|
+
else if ((0, shared_1.isText)(result)) {
|
|
31
|
+
const textResp = result;
|
|
32
|
+
res.statusCode = textResp.status;
|
|
33
|
+
(0, utils_1.sendHTML)(req, res, textResp.data);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// shuold never reach here
|
|
37
|
+
throw new Error('Unexpected reponse type from renderToHTML');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function getPageMiddleware(api) {
|
|
43
|
+
let pageHandler = createPageHandler(api);
|
|
44
|
+
return function (req, res, next) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
try {
|
|
47
|
+
pageHandler = yield api.serverPluginRunner.handlePageRequest(pageHandler);
|
|
48
|
+
yield pageHandler(req, res);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
next(error);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
exports.getPageMiddleware = getPageMiddleware;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.renderToHTML = exports.getPageMiddleware = void 0;
|
|
18
|
+
var getPageMiddleware_1 = require("./getPageMiddleware");
|
|
19
|
+
Object.defineProperty(exports, "getPageMiddleware", { enumerable: true, get: function () { return getPageMiddleware_1.getPageMiddleware; } });
|
|
20
|
+
var renderToHTML_1 = require("./renderToHTML");
|
|
21
|
+
Object.defineProperty(exports, "renderToHTML", { enumerable: true, get: function () { return renderToHTML_1.renderToHTML; } });
|
|
22
|
+
__exportStar(require("./renderer"), exports);
|
|
23
|
+
__exportStar(require("./pageLoader"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ifComponentHasLoader(component: string): boolean;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ifComponentHasLoader = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const file_utils_1 = require("@shuvi/service/lib/project/file-utils");
|
|
29
|
+
const file_1 = require("@shuvi/utils/lib/file");
|
|
30
|
+
function ifComponentHasLoader(component) {
|
|
31
|
+
const file = (0, file_1.resolveFile)(component);
|
|
32
|
+
if (file) {
|
|
33
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
34
|
+
try {
|
|
35
|
+
const exports = (0, file_utils_1.getExports)(content);
|
|
36
|
+
return exports.includes('loader');
|
|
37
|
+
}
|
|
38
|
+
catch (_a) { }
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
exports.ifComponentHasLoader = ifComponentHasLoader;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IRequest, IServerPluginContext } from '@shuvi/service';
|
|
2
|
+
import { Response } from '@shuvi/platform-shared/shared';
|
|
3
|
+
export declare function renderToHTML({ req, serverPluginContext }: {
|
|
4
|
+
req: IRequest;
|
|
5
|
+
serverPluginContext: IServerPluginContext;
|
|
6
|
+
}): Promise<Response>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.renderToHTML = void 0;
|
|
13
|
+
const resources_1 = require("@shuvi/service/lib/resources");
|
|
14
|
+
const shared_1 = require("@shuvi/platform-shared/shared");
|
|
15
|
+
const renderer_1 = require("./renderer");
|
|
16
|
+
const htmlTag_1 = require("./renderer/htmlTag");
|
|
17
|
+
function addEssentialTagsIfMissing(document) {
|
|
18
|
+
let hasMetaCharset = false;
|
|
19
|
+
let hasMetaViewport = false;
|
|
20
|
+
for (const { tagName, attrs } of document.headTags) {
|
|
21
|
+
if (hasMetaCharset && hasMetaViewport) {
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
if (tagName === 'meta') {
|
|
25
|
+
if (attrs.charset) {
|
|
26
|
+
hasMetaCharset = true;
|
|
27
|
+
}
|
|
28
|
+
else if (attrs.name === 'viewport') {
|
|
29
|
+
hasMetaViewport = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!hasMetaCharset) {
|
|
34
|
+
document.headTags.unshift((0, htmlTag_1.tag)('meta', {
|
|
35
|
+
charset: 'utf-8'
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
if (!hasMetaViewport) {
|
|
39
|
+
document.headTags.unshift((0, htmlTag_1.tag)('meta', {
|
|
40
|
+
name: 'viewport',
|
|
41
|
+
content: 'width=device-width,minimum-scale=1,initial-scale=1'
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
return document;
|
|
45
|
+
}
|
|
46
|
+
function renderToHTML({ req, serverPluginContext }) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
let result;
|
|
49
|
+
const renderer = new renderer_1.Renderer({ serverPluginContext });
|
|
50
|
+
const { application } = resources_1.server;
|
|
51
|
+
const app = application.createApp({
|
|
52
|
+
req,
|
|
53
|
+
ssr: serverPluginContext.config.ssr
|
|
54
|
+
});
|
|
55
|
+
try {
|
|
56
|
+
yield app.init();
|
|
57
|
+
const publicApp = app.getPublicAPI();
|
|
58
|
+
let doc = yield renderer.renderDocument({
|
|
59
|
+
app: publicApp,
|
|
60
|
+
req
|
|
61
|
+
});
|
|
62
|
+
if ((0, shared_1.isResponse)(doc)) {
|
|
63
|
+
result = doc;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
addEssentialTagsIfMissing(doc);
|
|
67
|
+
yield serverPluginContext.serverPluginRunner.modifyHtml(doc, app.context);
|
|
68
|
+
const htmlStr = renderer.renderDocumentToString(doc);
|
|
69
|
+
const appError = app.error.getError;
|
|
70
|
+
result = (0, shared_1.text)(htmlStr, {
|
|
71
|
+
status: appError && typeof appError.code !== 'undefined' ? appError.code : 200
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
yield app.dispose();
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
exports.renderToHTML = renderToHTML;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IAppData, Response } from '@shuvi/platform-shared/shared';
|
|
2
|
+
import { IServerPluginContext } from '@shuvi/service';
|
|
3
|
+
import { IHtmlDocument, IHtmlTag, IApplication } from './types';
|
|
4
|
+
import { IRendererConstructorOptions, IRenderDocumentOptions } from './types';
|
|
5
|
+
export declare type AppData = Omit<IAppData, 'filesByRoutId' | 'publicPath'>;
|
|
6
|
+
export declare abstract class BaseRenderer {
|
|
7
|
+
protected _serverPluginContext: IServerPluginContext;
|
|
8
|
+
protected _app?: IApplication;
|
|
9
|
+
constructor({ serverPluginContext }: IRendererConstructorOptions);
|
|
10
|
+
abstract renderDocument({ app, req }: IRenderDocumentOptions): Promise<IHtmlDocument | Response> | IHtmlDocument | Response;
|
|
11
|
+
protected _getMainAssetTags(): {
|
|
12
|
+
styles: IHtmlTag<any>[];
|
|
13
|
+
scripts: IHtmlTag<any>[];
|
|
14
|
+
};
|
|
15
|
+
protected _getAppContainerTag(html?: string): IHtmlTag<'div'>;
|
|
16
|
+
protected _getInlineAppData(app: IApplication, appData: AppData): IHtmlTag;
|
|
17
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseRenderer = void 0;
|
|
7
|
+
const htmlescape_1 = require("@shuvi/utils/lib/htmlescape");
|
|
8
|
+
const service_1 = require("@shuvi/service");
|
|
9
|
+
const constants_1 = require("@shuvi/shared/lib/constants");
|
|
10
|
+
const resources_1 = require("@shuvi/service/lib/resources");
|
|
11
|
+
const generateFilesByRoutId_1 = __importDefault(require("../generateFilesByRoutId"));
|
|
12
|
+
const htmlTag_1 = require("./htmlTag");
|
|
13
|
+
class BaseRenderer {
|
|
14
|
+
constructor({ serverPluginContext }) {
|
|
15
|
+
this._serverPluginContext = serverPluginContext;
|
|
16
|
+
}
|
|
17
|
+
_getMainAssetTags() {
|
|
18
|
+
const styles = [];
|
|
19
|
+
const scripts = [];
|
|
20
|
+
const entrypoints = resources_1.clientManifest.entries[service_1.BUILD_CLIENT_RUNTIME_MAIN];
|
|
21
|
+
const polyfill = resources_1.clientManifest.bundles[service_1.BUILD_CLIENT_RUNTIME_POLYFILL];
|
|
22
|
+
scripts.push((0, htmlTag_1.tag)('script', {
|
|
23
|
+
src: this._serverPluginContext.getAssetPublicUrl(polyfill)
|
|
24
|
+
}));
|
|
25
|
+
entrypoints.js.forEach((asset) => {
|
|
26
|
+
scripts.push((0, htmlTag_1.tag)('script', {
|
|
27
|
+
src: this._serverPluginContext.getAssetPublicUrl(asset)
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
if (entrypoints.css) {
|
|
31
|
+
entrypoints.css.forEach((asset) => {
|
|
32
|
+
styles.push((0, htmlTag_1.tag)('link', {
|
|
33
|
+
rel: 'stylesheet',
|
|
34
|
+
href: this._serverPluginContext.getAssetPublicUrl(asset)
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (this._serverPluginContext.mode === 'development') {
|
|
39
|
+
styles.push((0, htmlTag_1.tag)('style', {
|
|
40
|
+
[constants_1.DEV_STYLE_HIDE_FOUC]: true
|
|
41
|
+
}, 'body{display:none}'),
|
|
42
|
+
/**
|
|
43
|
+
* this element is used to mount development styles so the
|
|
44
|
+
* ordering matches production
|
|
45
|
+
* (by default, style-loader injects at the bottom of <head />)
|
|
46
|
+
*/
|
|
47
|
+
(0, htmlTag_1.tag)('style', {
|
|
48
|
+
id: constants_1.DEV_STYLE_ANCHOR_ID
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
styles,
|
|
53
|
+
scripts
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
_getAppContainerTag(html = '') {
|
|
57
|
+
return (0, htmlTag_1.tag)('div', {
|
|
58
|
+
id: constants_1.CLIENT_CONTAINER_ID
|
|
59
|
+
}, html);
|
|
60
|
+
}
|
|
61
|
+
_getInlineAppData(app, appData) {
|
|
62
|
+
const routes = app.router.routes || [];
|
|
63
|
+
const data = JSON.stringify(Object.assign(Object.assign({}, appData), { filesByRoutId: (0, generateFilesByRoutId_1.default)(resources_1.clientManifest, routes), publicPath: this._serverPluginContext.getAssetPublicUrl() }));
|
|
64
|
+
return (0, htmlTag_1.tag)('script', {
|
|
65
|
+
id: constants_1.CLIENT_APPDATA_ID,
|
|
66
|
+
type: 'application/json'
|
|
67
|
+
}, (0, htmlescape_1.htmlEscapeJsonString)(data));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.BaseRenderer = BaseRenderer;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { IHtmlAttrs, IHtmlTag } from './types';
|
|
2
|
+
export declare function stringifyAttrs(attrs: IHtmlAttrs): string;
|
|
3
|
+
export declare function stringifyTag(tag: IHtmlTag): string;
|
|
4
|
+
export declare function tag<T extends string>(tagName: T, attrs: IHtmlAttrs, innerHTML?: string): IHtmlTag<T>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tag = exports.stringifyTag = exports.stringifyAttrs = void 0;
|
|
4
|
+
const htmlescape_1 = require("@shuvi/utils/lib/htmlescape");
|
|
5
|
+
/**
|
|
6
|
+
* All html tag elements which must not contain innerHTML
|
|
7
|
+
* @see https://www.w3.org/TR/html5/syntax.html#void-elements
|
|
8
|
+
*/
|
|
9
|
+
const voidTags = [
|
|
10
|
+
'area',
|
|
11
|
+
'base',
|
|
12
|
+
'br',
|
|
13
|
+
'col',
|
|
14
|
+
'embed',
|
|
15
|
+
'hr',
|
|
16
|
+
'img',
|
|
17
|
+
'input',
|
|
18
|
+
'keygen',
|
|
19
|
+
'link',
|
|
20
|
+
'meta',
|
|
21
|
+
'param',
|
|
22
|
+
'source',
|
|
23
|
+
'track',
|
|
24
|
+
'wbr'
|
|
25
|
+
];
|
|
26
|
+
// the result will have an extra leading space
|
|
27
|
+
function stringifyAttrs(attrs) {
|
|
28
|
+
var _a;
|
|
29
|
+
const attrNames = Object.keys(attrs);
|
|
30
|
+
const res = [''];
|
|
31
|
+
for (let index = 0; index < attrNames.length; index++) {
|
|
32
|
+
const attributeName = attrNames[index];
|
|
33
|
+
if (attributeName === 'textContent')
|
|
34
|
+
continue;
|
|
35
|
+
if (attrs[attributeName] === false) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (attrs[attributeName] === true) {
|
|
39
|
+
res.push((0, htmlescape_1.htmlEscapeContent)(attributeName));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
res.push(`${(0, htmlescape_1.htmlEscapeContent)(attributeName)}="${(0, htmlescape_1.htmlEscapeContent)(((_a = attrs[attributeName]) === null || _a === void 0 ? void 0 : _a.toString()) || '')}"`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return res.join(' ');
|
|
46
|
+
}
|
|
47
|
+
exports.stringifyAttrs = stringifyAttrs;
|
|
48
|
+
function stringifyTag(tag) {
|
|
49
|
+
const attr = stringifyAttrs(tag.attrs);
|
|
50
|
+
const voidTag = voidTags.indexOf(tag.tagName) !== -1;
|
|
51
|
+
let res = `<${tag.tagName}${attr}`;
|
|
52
|
+
if (voidTag) {
|
|
53
|
+
return `${res} />`;
|
|
54
|
+
}
|
|
55
|
+
res += '>';
|
|
56
|
+
res +=
|
|
57
|
+
tag.innerHTML ||
|
|
58
|
+
(tag.attrs.textContent ? (0, htmlescape_1.htmlEscapeContent)(tag.attrs.textContent) : '');
|
|
59
|
+
res += '</' + tag.tagName + '>';
|
|
60
|
+
return res;
|
|
61
|
+
}
|
|
62
|
+
exports.stringifyTag = stringifyTag;
|
|
63
|
+
function tag(tagName, attrs, innerHTML) {
|
|
64
|
+
return {
|
|
65
|
+
tagName: tagName,
|
|
66
|
+
attrs: attrs || {},
|
|
67
|
+
innerHTML
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.tag = tag;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IRendererConstructorOptions, IRenderDocumentOptions } from './types';
|
|
2
|
+
import { IHtmlDocument } from './types';
|
|
3
|
+
export * from './types';
|
|
4
|
+
export interface ITemplateData {
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
}
|
|
7
|
+
export declare class Renderer {
|
|
8
|
+
private _documentTemplate;
|
|
9
|
+
private _serverPluginContext;
|
|
10
|
+
private _ssrRenderer;
|
|
11
|
+
private _spaRenderer;
|
|
12
|
+
constructor(options: IRendererConstructorOptions);
|
|
13
|
+
renderDocument(options: IRenderDocumentOptions): import("@shuvi/platform-shared/shared").Response | IHtmlDocument | Promise<import("@shuvi/platform-shared/shared").Response | IHtmlDocument>;
|
|
14
|
+
renderDocumentToString(document: IHtmlDocument, templateData?: ITemplateData): string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Renderer = void 0;
|
|
18
|
+
const resources_1 = require("@shuvi/service/lib/resources");
|
|
19
|
+
const htmlTag_1 = require("./htmlTag");
|
|
20
|
+
const viewTemplate_1 = require("../viewTemplate");
|
|
21
|
+
const spa_1 = require("./spa");
|
|
22
|
+
const ssr_1 = require("./ssr");
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
class Renderer {
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this._serverPluginContext = options.serverPluginContext;
|
|
27
|
+
this._documentTemplate = (0, viewTemplate_1.parseTemplateFile)(resources_1.documentPath);
|
|
28
|
+
this._ssrRenderer = new ssr_1.SsrRenderer(options);
|
|
29
|
+
this._spaRenderer = new spa_1.SpaRenderer(options);
|
|
30
|
+
}
|
|
31
|
+
renderDocument(options) {
|
|
32
|
+
if (this._serverPluginContext.config.ssr) {
|
|
33
|
+
return this._ssrRenderer.renderDocument(options);
|
|
34
|
+
}
|
|
35
|
+
return this._spaRenderer.renderDocument(options);
|
|
36
|
+
}
|
|
37
|
+
renderDocumentToString(document, templateData = {}) {
|
|
38
|
+
const htmlAttrs = (0, htmlTag_1.stringifyAttrs)(document.htmlAttrs);
|
|
39
|
+
const head = document.headTags.map(tag => (0, htmlTag_1.stringifyTag)(tag)).join('');
|
|
40
|
+
const main = document.mainTags.map(tag => (0, htmlTag_1.stringifyTag)(tag)).join('');
|
|
41
|
+
const script = document.scriptTags.map(tag => (0, htmlTag_1.stringifyTag)(tag)).join('');
|
|
42
|
+
return (0, viewTemplate_1.renderTemplate)(this._documentTemplate, Object.assign({ htmlAttrs,
|
|
43
|
+
head,
|
|
44
|
+
main,
|
|
45
|
+
script }, templateData));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.Renderer = Renderer;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpaRenderer = void 0;
|
|
4
|
+
const base_1 = require("./base");
|
|
5
|
+
class SpaRenderer extends base_1.BaseRenderer {
|
|
6
|
+
renderDocument({ app }) {
|
|
7
|
+
const assets = this._getMainAssetTags();
|
|
8
|
+
const serverPluginContext = this._serverPluginContext;
|
|
9
|
+
const appData = {
|
|
10
|
+
pageData: {},
|
|
11
|
+
ssr: serverPluginContext.config.ssr,
|
|
12
|
+
loadersData: {}
|
|
13
|
+
};
|
|
14
|
+
const document = {
|
|
15
|
+
htmlAttrs: {},
|
|
16
|
+
headTags: [...assets.styles],
|
|
17
|
+
mainTags: [
|
|
18
|
+
this._getInlineAppData(app, appData),
|
|
19
|
+
this._getAppContainerTag()
|
|
20
|
+
],
|
|
21
|
+
scriptTags: [...assets.scripts]
|
|
22
|
+
};
|
|
23
|
+
return document;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.SpaRenderer = SpaRenderer;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BaseRenderer } from './base';
|
|
2
|
+
import { IHtmlDocument, IRenderDocumentOptions } from './types';
|
|
3
|
+
export declare class SsrRenderer extends BaseRenderer {
|
|
4
|
+
renderDocument({ app, req }: IRenderDocumentOptions): Promise<import("@shuvi/platform-shared/shared").Response | IHtmlDocument>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SsrRenderer = void 0;
|
|
13
|
+
const shared_1 = require("@shuvi/platform-shared/shared");
|
|
14
|
+
const shuvi_singleton_runtimeConfig_1 = require("@shuvi/platform-shared/shared/shuvi-singleton-runtimeConfig");
|
|
15
|
+
const constants_1 = require("@shuvi/shared/lib/constants");
|
|
16
|
+
const resources_1 = require("@shuvi/service/lib/resources");
|
|
17
|
+
const base_1 = require("./base");
|
|
18
|
+
const htmlTag_1 = require("./htmlTag");
|
|
19
|
+
class SsrRenderer extends base_1.BaseRenderer {
|
|
20
|
+
renderDocument({ app, req }) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const { router, context } = app;
|
|
23
|
+
const serverPluginContext = this._serverPluginContext;
|
|
24
|
+
const { view } = resources_1.server;
|
|
25
|
+
const { getAssetPublicUrl } = serverPluginContext;
|
|
26
|
+
if (!router) {
|
|
27
|
+
throw new Error('router is null');
|
|
28
|
+
}
|
|
29
|
+
const result = yield view.renderApp({
|
|
30
|
+
app,
|
|
31
|
+
req,
|
|
32
|
+
manifest: resources_1.clientManifest,
|
|
33
|
+
getAssetPublicUrl
|
|
34
|
+
});
|
|
35
|
+
if ((0, shared_1.isResponse)(result)) {
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
const mainAssetsTags = this._getMainAssetTags();
|
|
39
|
+
const pageDataList = yield serverPluginContext.serverPluginRunner.getPageData(context);
|
|
40
|
+
const pageData = pageDataList.reduce((acc, data) => {
|
|
41
|
+
Object.assign(acc, data);
|
|
42
|
+
return acc;
|
|
43
|
+
}, {});
|
|
44
|
+
const appData = Object.assign(Object.assign({}, result.appData), { pageData, ssr: serverPluginContext.config.ssr });
|
|
45
|
+
appData.runtimeConfig = (0, shuvi_singleton_runtimeConfig_1.getPublicRuntimeConfig)() || {};
|
|
46
|
+
const document = {
|
|
47
|
+
htmlAttrs: Object.assign({}, result.htmlAttrs),
|
|
48
|
+
headTags: [
|
|
49
|
+
...(result.headBeginTags || []),
|
|
50
|
+
...mainAssetsTags.styles,
|
|
51
|
+
...(result.headEndTags || [])
|
|
52
|
+
],
|
|
53
|
+
mainTags: [
|
|
54
|
+
this._getInlineAppData(app, appData),
|
|
55
|
+
...(result.mainBeginTags || []),
|
|
56
|
+
this._getAppContainerTag(result.content),
|
|
57
|
+
...(result.mainEndTags || [])
|
|
58
|
+
],
|
|
59
|
+
scriptTags: [
|
|
60
|
+
(0, htmlTag_1.tag)('script', {}, `${constants_1.IDENTITY_RUNTIME_PUBLICPATH} = "${serverPluginContext.assetPublicPath}"`),
|
|
61
|
+
...(result.scriptBeginTags || []),
|
|
62
|
+
...mainAssetsTags.scripts,
|
|
63
|
+
...(result.scriptEndTags || [])
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
return document;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.SsrRenderer = SsrRenderer;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IApplication, IRequest } from '@shuvi/platform-shared/shared';
|
|
2
|
+
import { IHtmlAttrs, IHtmlTag, IClientRendererOptions, IServerRendererOptions, IViewClient, IViewServer, IRenderAppServerResult } from '../../../../../shared';
|
|
3
|
+
import { IServerPluginContext } from '@shuvi/service';
|
|
4
|
+
export { IHtmlAttrs, IHtmlTag, IApplication };
|
|
5
|
+
export interface IRendererConstructorOptions {
|
|
6
|
+
serverPluginContext: IServerPluginContext;
|
|
7
|
+
}
|
|
8
|
+
export declare type IRenderDocumentOptions = {
|
|
9
|
+
app: IApplication;
|
|
10
|
+
req: IRequest;
|
|
11
|
+
};
|
|
12
|
+
export interface IHtmlDocument {
|
|
13
|
+
htmlAttrs: IHtmlAttrs;
|
|
14
|
+
headTags: IHtmlTag<'meta' | 'link' | 'style' | 'script' | 'noscript' | 'title'>[];
|
|
15
|
+
mainTags: IHtmlTag[];
|
|
16
|
+
scriptTags: IHtmlTag<'script'>[];
|
|
17
|
+
}
|
|
18
|
+
export interface IRenderOptions extends IRenderDocumentOptions {
|
|
19
|
+
}
|
|
20
|
+
export { IRenderAppServerResult, IClientRendererOptions, IServerRendererOptions, IViewClient, IViewServer };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TemplateFunction } from 'ejs';
|
|
2
|
+
export { TemplateFunction };
|
|
3
|
+
declare function parseTemplateFile(templateFile: string): TemplateFunction;
|
|
4
|
+
declare function renderTemplate(templateFn: TemplateFunction, data: any): string;
|
|
5
|
+
export { parseTemplateFile, renderTemplate };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.renderTemplate = exports.parseTemplateFile = void 0;
|
|
27
|
+
const ejs = __importStar(require("ejs"));
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
function parseTemplateFile(templateFile) {
|
|
30
|
+
const content = fs.readFileSync(templateFile, 'utf8');
|
|
31
|
+
return ejs.compile(content);
|
|
32
|
+
}
|
|
33
|
+
exports.parseTemplateFile = parseTemplateFile;
|
|
34
|
+
function renderTemplate(templateFn, data) {
|
|
35
|
+
return templateFn(data);
|
|
36
|
+
}
|
|
37
|
+
exports.renderTemplate = renderTemplate;
|