@shuvi/platform-web 1.0.32 → 1.0.34

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.
@@ -1,7 +1,6 @@
1
1
  import { IPageRouteRecord, IAppData, IAppState, Application as _Application } from '@shuvi/platform-shared/shared';
2
2
  import { ApplicationImpl as _ApplicationImpl } from '@shuvi/platform-shared/shuvi-app/application';
3
3
  import type { ShuviRequest } from '@shuvi/service';
4
- import { Span } from '@shuvi/service/lib/trace';
5
4
  export interface AppConfig {
6
5
  ssr: boolean;
7
6
  }
@@ -11,7 +10,6 @@ export interface CreateAppServer {
11
10
  (options: {
12
11
  req: ShuviRequest;
13
12
  ssr: boolean;
14
- serverCreateAppTrace: Span;
15
13
  }): InternalApplication;
16
14
  }
17
15
  export interface CreateAppClient {
@@ -2,7 +2,6 @@ import type { ShuviRequest } from '@shuvi/service';
2
2
  import { Response, IAppData } from '@shuvi/platform-shared/shared';
3
3
  import { IManifest } from '../shared';
4
4
  import { Application } from './appTypes';
5
- import { Span } from '@shuvi/service/lib/trace';
6
5
  export declare type IRenderViewOptions = {
7
6
  app: Application;
8
7
  };
@@ -39,7 +38,6 @@ export interface IClientRendererOptions<ExtraAppData = {}> extends IRenderOption
39
38
  export interface IServerRendererOptions extends IRenderOptions {
40
39
  req: ShuviRequest;
41
40
  manifest: IManifest;
42
- serverRequestTrace: Span;
43
41
  }
44
42
  export interface IViewClient<ExtraAppData = {}> extends IView<IClientRendererOptions<ExtraAppData>> {
45
43
  }
@@ -17,7 +17,7 @@ import logger from '@shuvi/utils/logger';
17
17
  import { serializeServerError } from '../helper/serializeServerError';
18
18
  const { SHUVI_SERVER_RUN_LOADERS } = SERVER_CREATE_APP.events;
19
19
  export const createApp = options => {
20
- const { req, ssr, serverCreateAppTrace } = options;
20
+ const { req, ssr } = options;
21
21
  const history = createMemoryHistory({
22
22
  initialEntries: [(req && req.url) || '/'],
23
23
  initialIndex: 0
@@ -29,7 +29,8 @@ export const createApp = options => {
29
29
  let app;
30
30
  if (ssr) {
31
31
  router.beforeResolve((to, from, next) => __awaiter(void 0, void 0, void 0, function* () {
32
- const runLoadersTrace = serverCreateAppTrace.traceChild(SHUVI_SERVER_RUN_LOADERS.name);
32
+ const { serverCreateAppTrace } = req._traces;
33
+ const runLoadersTrace = serverCreateAppTrace.traceChild(SHUVI_SERVER_RUN_LOADERS.name, { [SHUVI_SERVER_RUN_LOADERS.attrs.requestId]: req._requestId });
33
34
  const pageLoaders = yield app.getLoaders();
34
35
  const matches = getRouteMatchesWithInvalidLoader(to, from, pageLoaders);
35
36
  try {
@@ -22,7 +22,7 @@ import isThirdSite from '../../helper/isThirdSite';
22
22
  const { SHUVI_SERVER_RENDER_TO_STRING } = SERVER_REQUEST.events;
23
23
  export class ReactServerView {
24
24
  constructor() {
25
- this.renderApp = ({ req, app, manifest, serverRequestTrace }) => __awaiter(this, void 0, void 0, function* () {
25
+ this.renderApp = ({ req, app, manifest }) => __awaiter(this, void 0, void 0, function* () {
26
26
  yield Loadable.preloadAll();
27
27
  const { router, appComponent: AppComponent, setError: setAppError } = app;
28
28
  yield router.ready;
@@ -54,7 +54,8 @@ export class ReactServerView {
54
54
  </LoadableContext.Provider>
55
55
  </AppContainer>
56
56
  </Router>);
57
- const renderToStringTrace = serverRequestTrace.traceChild(SHUVI_SERVER_RENDER_TO_STRING.name);
57
+ const { serverRequestTrace } = req._traces;
58
+ const renderToStringTrace = serverRequestTrace.traceChild(SHUVI_SERVER_RENDER_TO_STRING.name, { [SHUVI_SERVER_RENDER_TO_STRING.attrs.requestId]: req._requestId });
58
59
  try {
59
60
  htmlContent = renderToString(RootApp);
60
61
  renderToStringTrace.setAttribute(SHUVI_SERVER_RENDER_TO_STRING.attrs.error.name, false);
@@ -15,7 +15,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.middleware = void 0;
16
16
  const router_1 = require("@shuvi/router");
17
17
  const resources_1 = __importDefault(require("@shuvi/service/lib/resources"));
18
+ const trace_1 = require("@shuvi/shared/constants/trace");
18
19
  const apiRouteHandler_1 = require("./apiRouteHandler");
20
+ const { SHUVI_SERVER_RUN_API_MIDDLEWARE } = trace_1.SERVER_REQUEST.events;
19
21
  function middleware(_ctx) {
20
22
  return function (req, res, next) {
21
23
  return __awaiter(this, void 0, void 0, function* () {
@@ -30,13 +32,24 @@ function middleware(_ctx) {
30
32
  }
31
33
  }
32
34
  if (tempApiModule) {
35
+ const { serverRequestTrace } = req._traces;
36
+ const runApiMiddlewareTrace = serverRequestTrace.traceChild(SHUVI_SERVER_RUN_API_MIDDLEWARE.name, { [SHUVI_SERVER_RUN_API_MIDDLEWARE.attrs.requestId]: req._requestId });
33
37
  try {
34
38
  const { config, default: resolver } = tempApiModule;
35
39
  yield (0, apiRouteHandler_1.apiRouteHandler)(req, res, resolver, (config === null || config === void 0 ? void 0 : config.api) || { bodyParser: true });
36
40
  }
37
41
  catch (error) {
42
+ runApiMiddlewareTrace.setAttributes({
43
+ [SHUVI_SERVER_RUN_API_MIDDLEWARE.attrs.error.name]: true,
44
+ [SHUVI_SERVER_RUN_API_MIDDLEWARE.attrs.statusCode.name]: res.statusCode
45
+ });
38
46
  next(error);
39
47
  }
48
+ runApiMiddlewareTrace.setAttributes({
49
+ [SHUVI_SERVER_RUN_API_MIDDLEWARE.attrs.error.name]: false,
50
+ [SHUVI_SERVER_RUN_API_MIDDLEWARE.attrs.statusCode.name]: res.statusCode
51
+ });
52
+ runApiMiddlewareTrace.stop();
40
53
  }
41
54
  else {
42
55
  next();
@@ -15,30 +15,65 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.middleware = void 0;
16
16
  const router_1 = require("@shuvi/router");
17
17
  const resources_1 = __importDefault(require("@shuvi/service/lib/resources"));
18
+ const trace_1 = require("@shuvi/shared/constants/trace");
19
+ const { SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES } = trace_1.SERVER_REQUEST.events;
18
20
  function middleware(_api) {
19
21
  return function (req, res, next) {
20
22
  return __awaiter(this, void 0, void 0, function* () {
21
- const { middlewareRoutes = [] } = resources_1.default.server;
22
- // match path for get middlewares
23
- let middlewares = [];
24
- for (let i = 0; i < middlewareRoutes.length; i++) {
25
- const middlewareRoute = middlewareRoutes[i];
26
- const match = (0, router_1.matchPathname)(middlewareRoute.path, req.pathname);
27
- if (match) {
28
- req.params = match.params;
29
- middlewares.push(middlewareRoutes[i].middleware.default);
23
+ const { serverCreateAppTrace } = req._traces;
24
+ const middlewareRoutesTrace = serverCreateAppTrace.traceChild(SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.name, { [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.requestId]: req._requestId });
25
+ try {
26
+ const { middlewareRoutes = [] } = resources_1.default.server;
27
+ // match path for get middlewares
28
+ let middlewares = [];
29
+ for (let i = 0; i < middlewareRoutes.length; i++) {
30
+ const middlewareRoute = middlewareRoutes[i];
31
+ const match = (0, router_1.matchPathname)(middlewareRoute.path, req.pathname);
32
+ if (match) {
33
+ req.params = match.params;
34
+ middlewares.push(middlewareRoutes[i].middleware.default);
35
+ }
30
36
  }
37
+ // run middlewares
38
+ let i = 0;
39
+ const runNext = () => runMiddleware(middlewares[++i]);
40
+ const runMiddleware = (middleware) => __awaiter(this, void 0, void 0, function* () {
41
+ if (i === middlewares.length) {
42
+ /** Most request should end here */
43
+ middlewareRoutesTrace.setAttributes({
44
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.error.name]: false,
45
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.statusCode.name]: res.statusCode,
46
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.headersSent.name]: res.headersSent
47
+ });
48
+ middlewareRoutesTrace.stop();
49
+ return next();
50
+ }
51
+ try {
52
+ yield middleware(req, res, runNext);
53
+ }
54
+ catch (err) {
55
+ /** Catch error from single middleware */
56
+ middlewareRoutesTrace.setAttributes({
57
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.error.name]: true,
58
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.statusCode.name]: 500,
59
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.headersSent.name]: res.headersSent
60
+ });
61
+ middlewareRoutesTrace.stop();
62
+ return next(err);
63
+ }
64
+ });
65
+ return yield runMiddleware(middlewares[i]);
66
+ }
67
+ catch (err) {
68
+ /** Catch error from the whole function */
69
+ middlewareRoutesTrace.setAttributes({
70
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.error.name]: true,
71
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.statusCode.name]: 500,
72
+ [SHUVI_SERVER_RUN_MIDDLEWARE_ROUTES.attrs.headersSent.name]: res.headersSent
73
+ });
74
+ middlewareRoutesTrace.stop();
75
+ return next(err);
31
76
  }
32
- // run middlewares
33
- let i = 0;
34
- const runNext = () => runMiddleware(middlewares[++i]);
35
- const runMiddleware = (middleware) => __awaiter(this, void 0, void 0, function* () {
36
- if (i === middlewares.length) {
37
- return next();
38
- }
39
- yield middleware(req, res, runNext);
40
- });
41
- return yield runMiddleware(middlewares[i]);
42
77
  });
43
78
  };
44
79
  }
@@ -16,9 +16,9 @@ const trace_1 = require("@shuvi/shared/constants/trace");
16
16
  const renderToHTML_1 = require("./renderToHTML");
17
17
  const { SHUVI_SERVER_SEND_HTML_ORIGINAL, SHUVI_SERVER_SEND_HTML_HOOK, SHUVI_SERVER_RENDER_TO_HTML, SHUVI_SERVER_RUN_PAGE_MIDDLEWARE } = trace_1.SERVER_REQUEST.events;
18
18
  function createPageHandler(serverPluginContext) {
19
- const { traces: { serverRequestTrace } } = serverPluginContext;
20
19
  const wrappedSendHtml = (html, { req, res }) => __awaiter(this, void 0, void 0, function* () {
21
- const sendHtmlOriginalTrace = serverRequestTrace.traceChild(SHUVI_SERVER_SEND_HTML_ORIGINAL.name);
20
+ const { serverRequestTrace } = req._traces;
21
+ const sendHtmlOriginalTrace = serverRequestTrace.traceChild(SHUVI_SERVER_SEND_HTML_ORIGINAL.name, { [SHUVI_SERVER_SEND_HTML_ORIGINAL.attrs.requestId]: req._requestId });
22
22
  (0, utils_1.sendHTML)(req, res, html);
23
23
  sendHtmlOriginalTrace.stop();
24
24
  });
@@ -26,8 +26,11 @@ function createPageHandler(serverPluginContext) {
26
26
  let pendingSendHtml;
27
27
  return function (req, res) {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
+ const { serverRequestTrace } = req._traces;
29
30
  const result = yield serverRequestTrace
30
- .traceChild(SHUVI_SERVER_RENDER_TO_HTML.name)
31
+ .traceChild(SHUVI_SERVER_RENDER_TO_HTML.name, {
32
+ [SHUVI_SERVER_RENDER_TO_HTML.attrs.requestId]: req._requestId
33
+ })
31
34
  .traceAsyncFn(() => (0, renderToHTML_1.renderToHTML)({
32
35
  req: req,
33
36
  serverPluginContext
@@ -49,8 +52,7 @@ function createPageHandler(serverPluginContext) {
49
52
  }
50
53
  sendHtml = yield pendingSendHtml;
51
54
  }
52
- const { traces: { serverRequestTrace } } = serverPluginContext;
53
- const sendHtmlHookTrace = serverRequestTrace.traceChild(SHUVI_SERVER_SEND_HTML_HOOK.name);
55
+ const sendHtmlHookTrace = serverRequestTrace.traceChild(SHUVI_SERVER_SEND_HTML_HOOK.name, { [SHUVI_SERVER_SEND_HTML_HOOK.attrs.requestId]: req._requestId });
54
56
  yield sendHtml(textResp.data, { req, res });
55
57
  sendHtmlHookTrace.stop();
56
58
  }
@@ -68,8 +70,8 @@ function getPageMiddleware(api) {
68
70
  let pendingPageHandler;
69
71
  return function (req, res, next) {
70
72
  return __awaiter(this, void 0, void 0, function* () {
71
- const { traces: { serverRequestTrace } } = api;
72
- const runPageMiddlewareTrace = serverRequestTrace.traceChild(SHUVI_SERVER_RUN_PAGE_MIDDLEWARE.name);
73
+ const { serverRequestTrace } = req._traces;
74
+ const runPageMiddlewareTrace = serverRequestTrace.traceChild(SHUVI_SERVER_RUN_PAGE_MIDDLEWARE.name, { [SHUVI_SERVER_RUN_PAGE_MIDDLEWARE.attrs.requestId]: req._requestId });
73
75
  if (!pageHandler) {
74
76
  if (!pendingPageHandler) {
75
77
  pendingPageHandler =
@@ -20,18 +20,21 @@ function renderToHTML({ req, serverPluginContext }) {
20
20
  return __awaiter(this, void 0, void 0, function* () {
21
21
  let result;
22
22
  const renderer = new renderer_1.Renderer({ serverPluginContext });
23
- const { traces: { serverCreateAppTrace } } = serverPluginContext;
23
+ const { serverCreateAppTrace } = req._traces;
24
24
  const { application } = resources_1.default.server;
25
25
  const app = serverCreateAppTrace
26
- .traceChild(trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_CREATE_APP.name)
26
+ .traceChild(trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_CREATE_APP.name, {
27
+ [trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_CREATE_APP.attrs.requestId]: req._requestId
28
+ })
27
29
  .traceFn(() => application.createApp({
28
30
  req,
29
- ssr: serverPluginContext.config.ssr,
30
- serverCreateAppTrace
31
+ ssr: serverPluginContext.config.ssr
31
32
  }));
32
33
  try {
33
34
  yield serverCreateAppTrace
34
- .traceChild(trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_APP_INIT.name)
35
+ .traceChild(trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_APP_INIT.name, {
36
+ [trace_1.SERVER_CREATE_APP.events.SHUVI_SERVER_APP_INIT.attrs.requestId]: req._requestId
37
+ })
35
38
  .traceAsyncFn(() => app.init());
36
39
  result = yield renderer.renderView({
37
40
  req,
@@ -22,7 +22,6 @@ class SsrRenderer extends base_1.BaseRenderer {
22
22
  return __awaiter(this, void 0, void 0, function* () {
23
23
  const { store, router, context } = app;
24
24
  const serverPluginContext = this._serverPluginContext;
25
- const { traces: { serverRequestTrace } } = serverPluginContext;
26
25
  const { view } = resources_1.default.server;
27
26
  if (!router) {
28
27
  throw new Error('router is null');
@@ -30,8 +29,7 @@ class SsrRenderer extends base_1.BaseRenderer {
30
29
  const result = yield view.renderApp({
31
30
  app,
32
31
  req,
33
- manifest: resources_1.default.clientManifest,
34
- serverRequestTrace
32
+ manifest: resources_1.default.clientManifest
35
33
  });
36
34
  if ((0, shared_1.isResponse)(result)) {
37
35
  return result;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { IncomingMessage, ServerResponse } from 'http';
2
+ import { ServerResponse } from 'http';
3
3
  import { ShuviRequest } from '@shuvi/service';
4
4
  import { IAppContext } from '@shuvi/platform-shared/shared';
5
5
  import { IHtmlDocument } from '../html-render';
@@ -7,9 +7,9 @@ export interface ModifyHtmlContext {
7
7
  req: ShuviRequest;
8
8
  appContext: IAppContext;
9
9
  }
10
- export declare type IHandlePageRequest = (req: IncomingMessage, res: ServerResponse) => Promise<void>;
10
+ export declare type IHandlePageRequest = (req: ShuviRequest, res: ServerResponse) => Promise<void>;
11
11
  export declare type RequestContext = {
12
- req: IncomingMessage;
12
+ req: ShuviRequest;
13
13
  res: ServerResponse;
14
14
  };
15
15
  export declare type ISendHtml = (html: string, requestContext: RequestContext) => Promise<void>;
@@ -1,7 +1,6 @@
1
1
  import { IPageRouteRecord, IAppData, IAppState, Application as _Application } from '@shuvi/platform-shared/shared';
2
2
  import { ApplicationImpl as _ApplicationImpl } from '@shuvi/platform-shared/shuvi-app/application';
3
3
  import type { ShuviRequest } from '@shuvi/service';
4
- import { Span } from '@shuvi/service/lib/trace';
5
4
  export interface AppConfig {
6
5
  ssr: boolean;
7
6
  }
@@ -11,7 +10,6 @@ export interface CreateAppServer {
11
10
  (options: {
12
11
  req: ShuviRequest;
13
12
  ssr: boolean;
14
- serverCreateAppTrace: Span;
15
13
  }): InternalApplication;
16
14
  }
17
15
  export interface CreateAppClient {
@@ -2,7 +2,6 @@ import type { ShuviRequest } from '@shuvi/service';
2
2
  import { Response, IAppData } from '@shuvi/platform-shared/shared';
3
3
  import { IManifest } from '../shared';
4
4
  import { Application } from './appTypes';
5
- import { Span } from '@shuvi/service/lib/trace';
6
5
  export declare type IRenderViewOptions = {
7
6
  app: Application;
8
7
  };
@@ -39,7 +38,6 @@ export interface IClientRendererOptions<ExtraAppData = {}> extends IRenderOption
39
38
  export interface IServerRendererOptions extends IRenderOptions {
40
39
  req: ShuviRequest;
41
40
  manifest: IManifest;
42
- serverRequestTrace: Span;
43
41
  }
44
42
  export interface IViewClient<ExtraAppData = {}> extends IView<IClientRendererOptions<ExtraAppData>> {
45
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shuvi/platform-web",
3
- "version": "1.0.32",
3
+ "version": "1.0.34",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/shuvijs/shuvi.git",
@@ -72,15 +72,15 @@
72
72
  },
73
73
  "dependencies": {
74
74
  "@next/react-refresh-utils": "12.1.6",
75
- "@shuvi/error-overlay": "1.0.32",
76
- "@shuvi/hook": "1.0.32",
77
- "@shuvi/platform-shared": "1.0.32",
78
- "@shuvi/router": "1.0.32",
79
- "@shuvi/router-react": "1.0.32",
80
- "@shuvi/runtime": "1.0.32",
81
- "@shuvi/shared": "1.0.32",
82
- "@shuvi/toolpack": "1.0.32",
83
- "@shuvi/utils": "1.0.32",
75
+ "@shuvi/error-overlay": "1.0.34",
76
+ "@shuvi/hook": "1.0.34",
77
+ "@shuvi/platform-shared": "1.0.34",
78
+ "@shuvi/router": "1.0.34",
79
+ "@shuvi/router-react": "1.0.34",
80
+ "@shuvi/runtime": "1.0.34",
81
+ "@shuvi/shared": "1.0.34",
82
+ "@shuvi/toolpack": "1.0.34",
83
+ "@shuvi/utils": "1.0.34",
84
84
  "content-type": "1.0.4",
85
85
  "core-js": "3.6.5",
86
86
  "doura": "0.0.11",
@@ -98,7 +98,7 @@
98
98
  "whatwg-fetch": "3.0.0"
99
99
  },
100
100
  "peerDependencies": {
101
- "@shuvi/service": "1.0.32"
101
+ "@shuvi/service": "1.0.34"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@shuvi/service": "workspace:*",