@modern-js/server-core 2.60.5 → 2.61.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.
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var helper_exports = {};
20
20
  __export(helper_exports, {
21
+ isResFinalized: () => import_utils.isResFinalized,
21
22
  loadCacheConfig: () => import_loadCache.loadCacheConfig,
22
23
  loadServerCliConfig: () => import_loadConfig.loadServerCliConfig,
23
24
  loadServerEnv: () => import_loadEnv.loadServerEnv,
@@ -29,8 +30,10 @@ var import_loadEnv = require("./loadEnv");
29
30
  var import_loadPlugin = require("./loadPlugin");
30
31
  var import_loadConfig = require("./loadConfig");
31
32
  var import_loadCache = require("./loadCache");
33
+ var import_utils = require("./utils");
32
34
  // Annotate the CommonJS export names for ESM import in node:
33
35
  0 && (module.exports = {
36
+ isResFinalized,
34
37
  loadCacheConfig,
35
38
  loadServerCliConfig,
36
39
  loadServerEnv,
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ isResFinalized: () => isResFinalized
22
+ });
23
+ module.exports = __toCommonJS(utils_exports);
24
+ const isResFinalized = (res) => {
25
+ var _res_socket;
26
+ return res.headersSent || res._modernBodyPiped || res.writableEnded || res.finished || !((_res_socket = res.socket) === null || _res_socket === void 0 ? void 0 : _res_socket.writable);
27
+ };
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ isResFinalized
31
+ });
@@ -22,6 +22,7 @@ __export(hono_exports, {
22
22
  httpCallBack2HonoMid: () => httpCallBack2HonoMid
23
23
  });
24
24
  module.exports = __toCommonJS(hono_exports);
25
+ var import_helper = require("./helper");
25
26
  const httpCallBack2HonoMid = (handler) => {
26
27
  return async (context, next) => {
27
28
  const { req, res } = context.env.node;
@@ -40,7 +41,7 @@ const httpCallBack2HonoMid = (handler) => {
40
41
  delete req.__serverManifest;
41
42
  res.removeListener("pipe", onPipe);
42
43
  }
43
- if (res.headersSent || res._modernBodyPiped) {
44
+ if ((0, import_helper.isResFinalized)(res)) {
44
45
  context.finalized = true;
45
46
  } else {
46
47
  await next();
@@ -35,6 +35,7 @@ __export(node_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(node_exports);
37
37
  var import_node_http = require("node:http");
38
+ var import_helper = require("./helper");
38
39
  var import_install = require("./polyfills/install");
39
40
  var import_stream = require("./polyfills/stream");
40
41
  var import_polyfills = require("./polyfills");
@@ -57,7 +58,7 @@ const createWebRequest = (req, res, body) => {
57
58
  signal: controller.signal
58
59
  };
59
60
  res.on("close", () => controller.abort("res closed"));
60
- if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader"))) {
61
+ if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader")) || req.headers["x-mf-micro"]) {
61
62
  init.body = body !== null && body !== void 0 ? body : (0, import_stream.createReadableStreamFromReadable)(req);
62
63
  init.duplex = "half";
63
64
  }
@@ -116,7 +117,7 @@ const getRequestListener = (handler) => {
116
117
  res
117
118
  }
118
119
  });
119
- if (!res.headersSent && !response.res && !res._modernBodyPiped) {
120
+ if (!response.res && !(0, import_helper.isResFinalized)(res)) {
120
121
  await sendResponse(response, res);
121
122
  }
122
123
  } catch (error) {
@@ -70,7 +70,7 @@ function createCoreManager() {
70
70
  const hooks = {
71
71
  config: (0, import_plugin.createAsyncWaterfall)(),
72
72
  prepare: (0, import_plugin.createAsyncWaterfall)(),
73
- reset: (0, import_plugin.createParallelWorkflow)(),
73
+ reset: (0, import_plugin.createAsyncWorkflow)(),
74
74
  prepareWebServer: (0, import_plugin.createAsyncPipeline)(),
75
75
  fallback: (0, import_plugin.createParallelWorkflow)(),
76
76
  prepareApiServer: (0, import_plugin.createAsyncPipeline)(),
@@ -2,7 +2,9 @@ import { loadServerEnv } from "./loadEnv";
2
2
  import { loadServerPlugins } from "./loadPlugin";
3
3
  import { loadServerRuntimeConfig, loadServerCliConfig } from "./loadConfig";
4
4
  import { loadCacheConfig } from "./loadCache";
5
+ import { isResFinalized } from "./utils";
5
6
  export {
7
+ isResFinalized,
6
8
  loadCacheConfig,
7
9
  loadServerCliConfig,
8
10
  loadServerEnv,
@@ -0,0 +1,7 @@
1
+ var isResFinalized = function(res) {
2
+ var _res_socket;
3
+ return res.headersSent || res._modernBodyPiped || res.writableEnded || res.finished || !((_res_socket = res.socket) === null || _res_socket === void 0 ? void 0 : _res_socket.writable);
4
+ };
5
+ export {
6
+ isResFinalized
7
+ };
@@ -1,5 +1,6 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
+ import { isResFinalized } from "./helper";
3
4
  var httpCallBack2HonoMid = function(handler) {
4
5
  return function() {
5
6
  var _ref = _async_to_generator(function(context, next) {
@@ -42,7 +43,7 @@ var httpCallBack2HonoMid = function(handler) {
42
43
  7
43
44
  ];
44
45
  case 4:
45
- if (!(res.headersSent || res._modernBodyPiped))
46
+ if (!isResFinalized(res))
46
47
  return [
47
48
  3,
48
49
  5
@@ -3,6 +3,7 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
3
3
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
4
4
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
5
  import { ServerResponse } from "node:http";
6
+ import { isResFinalized } from "./helper";
6
7
  import { installGlobals } from "./polyfills/install";
7
8
  import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
8
9
  import { writeReadableStreamToWritable as writeReadableStreamToWritable2 } from "./polyfills";
@@ -27,7 +28,7 @@ var createWebRequest = function(req, res, body) {
27
28
  res.on("close", function() {
28
29
  return controller.abort("res closed");
29
30
  });
30
- if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader"))) {
31
+ if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader")) || req.headers["x-mf-micro"]) {
31
32
  init.body = body !== null && body !== void 0 ? body : createReadableStreamFromReadable(req);
32
33
  init.duplex = "half";
33
34
  }
@@ -145,7 +146,7 @@ var getRequestListener = function(handler) {
145
146
  ];
146
147
  case 1:
147
148
  response = _state.sent();
148
- if (!(!res.headersSent && !response.res && !res._modernBodyPiped))
149
+ if (!(!response.res && !isResFinalized(res)))
149
150
  return [
150
151
  3,
151
152
  3
@@ -7,7 +7,7 @@ import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_me
7
7
  import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
8
8
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
9
9
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
10
- import { createAsyncManager, createAsyncPipeline, createAsyncWaterfall, createContext, createParallelWorkflow } from "@modern-js/plugin";
10
+ import { createAsyncManager, createAsyncPipeline, createAsyncWaterfall, createAsyncWorkflow, createContext, createParallelWorkflow } from "@modern-js/plugin";
11
11
  import { loadConfig } from "./utils";
12
12
  var _appContext = /* @__PURE__ */ new WeakMap(), _plugins = /* @__PURE__ */ new WeakMap(), _options = /* @__PURE__ */ new WeakMap(), _configContext = /* @__PURE__ */ new WeakMap(), _createCoreManager = /* @__PURE__ */ new WeakSet(), _initConfigContext = /* @__PURE__ */ new WeakSet();
13
13
  var PluginManager = /* @__PURE__ */ function() {
@@ -79,7 +79,7 @@ function createCoreManager() {
79
79
  var hooks = {
80
80
  config: createAsyncWaterfall(),
81
81
  prepare: createAsyncWaterfall(),
82
- reset: createParallelWorkflow(),
82
+ reset: createAsyncWorkflow(),
83
83
  prepareWebServer: createAsyncPipeline(),
84
84
  fallback: createParallelWorkflow(),
85
85
  prepareApiServer: createAsyncPipeline(),
@@ -2,7 +2,9 @@ import { loadServerEnv } from "./loadEnv";
2
2
  import { loadServerPlugins } from "./loadPlugin";
3
3
  import { loadServerRuntimeConfig, loadServerCliConfig } from "./loadConfig";
4
4
  import { loadCacheConfig } from "./loadCache";
5
+ import { isResFinalized } from "./utils";
5
6
  export {
7
+ isResFinalized,
6
8
  loadCacheConfig,
7
9
  loadServerCliConfig,
8
10
  loadServerEnv,
@@ -0,0 +1,7 @@
1
+ const isResFinalized = (res) => {
2
+ var _res_socket;
3
+ return res.headersSent || res._modernBodyPiped || res.writableEnded || res.finished || !((_res_socket = res.socket) === null || _res_socket === void 0 ? void 0 : _res_socket.writable);
4
+ };
5
+ export {
6
+ isResFinalized
7
+ };
@@ -1,3 +1,4 @@
1
+ import { isResFinalized } from "./helper";
1
2
  const httpCallBack2HonoMid = (handler) => {
2
3
  return async (context, next) => {
3
4
  const { req, res } = context.env.node;
@@ -16,7 +17,7 @@ const httpCallBack2HonoMid = (handler) => {
16
17
  delete req.__serverManifest;
17
18
  res.removeListener("pipe", onPipe);
18
19
  }
19
- if (res.headersSent || res._modernBodyPiped) {
20
+ if (isResFinalized(res)) {
20
21
  context.finalized = true;
21
22
  } else {
22
23
  await next();
@@ -1,4 +1,5 @@
1
1
  import { ServerResponse } from "node:http";
2
+ import { isResFinalized } from "./helper";
2
3
  import { installGlobals } from "./polyfills/install";
3
4
  import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
4
5
  import { writeReadableStreamToWritable as writeReadableStreamToWritable2 } from "./polyfills";
@@ -21,7 +22,7 @@ const createWebRequest = (req, res, body) => {
21
22
  signal: controller.signal
22
23
  };
23
24
  res.on("close", () => controller.abort("res closed"));
24
- if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader"))) {
25
+ if (body || !(method === "GET" || method === "HEAD") && ((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.includes("__loader")) || req.headers["x-mf-micro"]) {
25
26
  init.body = body !== null && body !== void 0 ? body : createReadableStreamFromReadable(req);
26
27
  init.duplex = "half";
27
28
  }
@@ -80,7 +81,7 @@ const getRequestListener = (handler) => {
80
81
  res
81
82
  }
82
83
  });
83
- if (!res.headersSent && !response.res && !res._modernBodyPiped) {
84
+ if (!response.res && !isResFinalized(res)) {
84
85
  await sendResponse(response, res);
85
86
  }
86
87
  } catch (error) {
@@ -3,7 +3,7 @@ import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_fi
3
3
  import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
4
4
  import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_method_get";
5
5
  import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
6
- import { createAsyncManager, createAsyncPipeline, createAsyncWaterfall, createContext, createParallelWorkflow } from "@modern-js/plugin";
6
+ import { createAsyncManager, createAsyncPipeline, createAsyncWaterfall, createAsyncWorkflow, createContext, createParallelWorkflow } from "@modern-js/plugin";
7
7
  import { loadConfig } from "./utils";
8
8
  var _appContext = /* @__PURE__ */ new WeakMap(), _plugins = /* @__PURE__ */ new WeakMap(), _options = /* @__PURE__ */ new WeakMap(), _configContext = /* @__PURE__ */ new WeakMap(), _createCoreManager = /* @__PURE__ */ new WeakSet(), _initConfigContext = /* @__PURE__ */ new WeakSet();
9
9
  class PluginManager {
@@ -47,7 +47,7 @@ function createCoreManager() {
47
47
  const hooks = {
48
48
  config: createAsyncWaterfall(),
49
49
  prepare: createAsyncWaterfall(),
50
- reset: createParallelWorkflow(),
50
+ reset: createAsyncWorkflow(),
51
51
  prepareWebServer: createAsyncPipeline(),
52
52
  fallback: createParallelWorkflow(),
53
53
  prepareApiServer: createAsyncPipeline(),
@@ -2,3 +2,5 @@ export { loadServerEnv } from './loadEnv';
2
2
  export { loadServerPlugins } from './loadPlugin';
3
3
  export { loadServerRuntimeConfig, loadServerCliConfig } from './loadConfig';
4
4
  export { loadCacheConfig } from './loadCache';
5
+ export { isResFinalized } from './utils';
6
+ export type { NodeBindings } from './utils';
@@ -0,0 +1,17 @@
1
+ import type { HonoRequest, NodeRequest, NodeResponse, ServerManifest } from '../../../types';
2
+ type ExtendedNodeRequest = NodeRequest & {
3
+ __honoRequest?: HonoRequest;
4
+ __templates?: Record<string, string>;
5
+ __serverManifest?: ServerManifest;
6
+ };
7
+ type ExtendedNodeResponse = NodeResponse & {
8
+ _modernBodyPiped?: boolean;
9
+ };
10
+ export type NodeBindings = {
11
+ node: {
12
+ req: ExtendedNodeRequest;
13
+ res: ExtendedNodeResponse;
14
+ };
15
+ };
16
+ export declare const isResFinalized: (res: ExtendedNodeResponse) => boolean;
17
+ export {};
@@ -1,16 +1,5 @@
1
- import type { Context, HonoRequest, Middleware, Next, NodeRequest, NodeResponse, ServerEnv, ServerManifest } from '../../types';
2
- type NodeBindings = {
3
- node: {
4
- req: NodeRequest & {
5
- __honoRequest?: HonoRequest;
6
- __templates?: Record<string, string>;
7
- __serverManifest?: ServerManifest;
8
- };
9
- res: NodeResponse & {
10
- _modernBodyPiped?: boolean;
11
- };
12
- };
13
- };
1
+ import type { Context, Middleware, Next, NodeRequest, NodeResponse, ServerEnv } from '../../types';
2
+ import { type NodeBindings } from './helper';
14
3
  export type ServerNodeEnv = {
15
4
  Bindings: NodeBindings;
16
5
  };
@@ -11,9 +11,9 @@ export declare class PluginManager {
11
11
  init(): Promise<import("@modern-js/plugin").ToRunners<{
12
12
  config: import("@modern-js/plugin").AsyncWaterfall<ServerConfig>;
13
13
  prepare: import("@modern-js/plugin").AsyncWaterfall<void>;
14
- reset: import("@modern-js/plugin").ParallelWorkflow<{
14
+ reset: import("@modern-js/plugin").AsyncWorkflow<{
15
15
  event: import("./types").ResetEvent;
16
- }>;
16
+ }, void>;
17
17
  prepareWebServer: import("@modern-js/plugin").AsyncPipeline<import("./types").WebServerStartInput, import("./types").WebAdapter | import("@modern-js/types").UnstableMiddleware[] | null>;
18
18
  fallback: import("@modern-js/plugin").ParallelWorkflow<{
19
19
  reason: import("./types").FallbackReason;
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  /** Hooks */
3
3
  import type { IncomingMessage, Server as NodeServer, ServerResponse } from 'http';
4
- import type { AsyncPipeline, AsyncSetup, AsyncWaterfall, CommonAPI, ParallelWorkflow, PluginOptions, ToRunners, ToThreads, createContext } from '@modern-js/plugin';
4
+ import type { AsyncPipeline, AsyncSetup, AsyncWaterfall, AsyncWorkflow, CommonAPI, ParallelWorkflow, PluginOptions, ToRunners, ToThreads, createContext } from '@modern-js/plugin';
5
5
  import type { AfterMatchContext, AfterRenderContext, AfterStreamingRenderContext, CacheOption, Container, HttpMethodDecider, ISAppContext, Logger, Metrics, MiddlewareContext, Reporter, ServerRoute, UnstableMiddleware } from '@modern-js/types';
6
6
  import type { MiddlewareHandler } from 'hono';
7
7
  import type { UserConfig } from './config';
@@ -49,9 +49,9 @@ export type WebAdapter = (ctx: MiddlewareContext) => void | Promise<void>;
49
49
  export interface ServerHooks {
50
50
  config: AsyncWaterfall<ServerConfig>;
51
51
  prepare: AsyncWaterfall<void>;
52
- reset: ParallelWorkflow<{
52
+ reset: AsyncWorkflow<{
53
53
  event: ResetEvent;
54
- }>;
54
+ }, void>;
55
55
  /**
56
56
  * @deprecated
57
57
  *
@@ -1,11 +1,5 @@
1
- /// <reference types="node" />
2
- import type { Readable } from 'node:stream';
3
- import type { BaseSSRServerContext, Logger, Metrics, Monitors, NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
1
+ import type { Logger, Metrics, Monitors, NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
4
2
  import type { RequestHandler as BundleRequestHandler, OnError, OnTiming } from './requestHandler';
5
- export type SSRServerContext = BaseSSRServerContext & {
6
- staticGenerate?: boolean;
7
- };
8
- export type ServerRender = (ssrContext: SSRServerContext) => Promise<string | Readable | ReadableStream>;
9
3
  export type RequestHandler = (request: Request, ...args: any[]) => Response | Promise<Response>;
10
4
  type ServerLoaderBundle = {
11
5
  routes: NestedRoute[];
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.60.5",
18
+ "version": "2.61.0",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -53,9 +53,9 @@
53
53
  "flatted": "^3.2.9",
54
54
  "hono": "^3.12.2",
55
55
  "ts-deepmerge": "7.0.1",
56
- "@modern-js/plugin": "2.60.5",
57
- "@modern-js/runtime-utils": "2.60.5",
58
- "@modern-js/utils": "2.60.5"
56
+ "@modern-js/plugin": "2.61.0",
57
+ "@modern-js/utils": "2.61.0",
58
+ "@modern-js/runtime-utils": "2.61.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/jest": "^29",
@@ -65,9 +65,9 @@
65
65
  "jest": "^29",
66
66
  "ts-jest": "^29.1.0",
67
67
  "typescript": "^5",
68
- "@modern-js/types": "2.60.5",
69
- "@scripts/jest-config": "2.60.5",
70
- "@scripts/build": "2.60.5"
68
+ "@scripts/build": "2.61.0",
69
+ "@modern-js/types": "2.61.0",
70
+ "@scripts/jest-config": "2.61.0"
71
71
  },
72
72
  "sideEffects": false,
73
73
  "publishConfig": {