@modern-js/server-core
Version:
A Progressive React Framework for modern web development.
249 lines (248 loc) • 7.41 kB
JavaScript
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_method_get";
import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
import { _ as _create_class } from "@swc/helpers/_/_create_class";
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
import { server } from "@modern-js/plugin-v2/server";
import { Hono } from "hono";
import { run } from "./context";
import { handleSetupResult } from "./plugins/compat/hooks";
import { loadConfig } from "./utils";
var _applyMiddlewares = /* @__PURE__ */ new WeakSet();
var ServerBase = /* @__PURE__ */ function() {
"use strict";
function ServerBase2(options) {
_class_call_check(this, ServerBase2);
_class_private_method_init(this, _applyMiddlewares);
this.plugins = [];
this.serverContext = null;
this.options = options;
this.app = new Hono();
this.app.use("*", run);
}
var _proto = ServerBase2.prototype;
_proto.init = function init() {
var _this = this;
return _async_to_generator(function() {
var _this_options, serverConfig, cliConfig, mergedConfig, serverContext;
return _ts_generator(this, function(_state) {
switch (_state.label) {
case 0:
_this_options = _this.options, serverConfig = _this_options.serverConfig, cliConfig = _this_options.config;
mergedConfig = loadConfig({
cliConfig,
serverConfig: serverConfig || {}
});
return [
4,
server.run({
plugins: _this.plugins,
options: _this.options,
config: mergedConfig,
handleSetupResult
})
];
case 1:
serverContext = _state.sent().serverContext;
serverContext.serverBase = _this;
return [
4,
serverContext.hooks.onPrepare.call()
];
case 2:
_state.sent();
_this.serverContext = serverContext;
_class_private_method_get(_this, _applyMiddlewares, applyMiddlewares).call(_this);
return [
2,
_this
];
}
});
})();
};
_proto.addPlugins = function addPlugins(plugins) {
var _this_plugins;
(_this_plugins = this.plugins).push.apply(_this_plugins, _to_consumable_array(plugins));
};
_create_class(ServerBase2, [
{
key: "hooks",
get: function get() {
return this.serverContext.hooks;
}
},
{
key: "all",
get: function get() {
return this.app.all.bind(this.app);
}
},
{
key: "use",
get: function get() {
return this.app.use.bind(this.app);
}
},
{
key: "get",
get: function get() {
return this.app.get.bind(this.app);
}
},
{
key: "post",
get: function get() {
return this.app.post.bind(this.app);
}
},
{
key: "put",
get: function get() {
return this.app.put.bind(this.app);
}
},
{
key: "delete",
get: function get() {
return this.app.delete.bind(this.app);
}
},
{
key: "patch",
get: function get() {
return this.app.patch.bind(this.app);
}
},
{
key: "handle",
get: function get() {
return this.app.fetch.bind(this.app);
}
},
{
key: "request",
get: function get() {
return this.app.request.bind(this.app);
}
},
{
key: "notFound",
get: function get() {
return this.app.notFound.bind(this.app);
}
},
{
key: "onError",
get: function get() {
return this.app.onError.bind(this.app);
}
}
]);
return ServerBase2;
}();
function applyMiddlewares() {
var middlewares = this.serverContext.middlewares;
var preMiddlewares = [];
var defaultMiddlewares = [];
var postMiddlewares = [];
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (var _iterator = middlewares[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var middleware = _step.value;
switch (middleware.order) {
case "pre":
preMiddlewares.push(middleware);
break;
case "post":
postMiddlewares.push(middleware);
break;
default:
defaultMiddlewares.push(middleware);
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var finalMiddlewares = [];
var insertMiddleware = function(middleware2) {
if (middleware2.before) {
var targetIndex = finalMiddlewares.findIndex(function(item) {
var _middleware_before;
if ((_middleware_before = middleware2.before) === null || _middleware_before === void 0 ? void 0 : _middleware_before.includes(item.name)) {
return true;
} else {
return false;
}
});
if (targetIndex !== -1) {
finalMiddlewares.splice(targetIndex, 0, middleware2);
} else {
finalMiddlewares.push(middleware2);
}
} else {
finalMiddlewares.push(middleware2);
}
};
preMiddlewares.forEach(insertMiddleware);
defaultMiddlewares.forEach(insertMiddleware);
postMiddlewares.forEach(insertMiddleware);
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
try {
for (var _iterator1 = finalMiddlewares[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
var middleware1 = _step1.value;
var _this_app;
var _middleware_path = middleware1.path, path = _middleware_path === void 0 ? "*" : _middleware_path, _middleware_method = middleware1.method, method = _middleware_method === void 0 ? "all" : _middleware_method, handler = middleware1.handler;
var handlers = handler2Handlers(handler);
(_this_app = this.app)[method].apply(_this_app, [
path
].concat(_to_consumable_array(handlers)));
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
function handler2Handlers(handler2) {
if (Array.isArray(handler2)) {
return handler2;
} else {
return [
handler2
];
}
}
}
function createServerBase(options) {
if (options == null) {
throw new Error("can not start server without options");
}
var server2 = new ServerBase(options);
return server2;
}
export {
ServerBase,
createServerBase
};