sensai
Version:
Because even AI needs a master
69 lines (68 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _http = /*#__PURE__*/ _interop_require_default(require("../lib/server/http"));
const _router = /*#__PURE__*/ _interop_require_default(require("../lib/router"));
const _gateway = /*#__PURE__*/ _interop_require_default(require("../lib/server/gateway"));
const _walker = /*#__PURE__*/ _interop_require_default(require("../utils/walker"));
const _watcher = /*#__PURE__*/ _interop_require_default(require("../lib/router/watcher"));
const _compiler = /*#__PURE__*/ _interop_require_default(require("../lib/compiler"));
const _enums = require("../lib/compiler/enums");
const _typescript = /*#__PURE__*/ _interop_require_default(require("./typescript"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
const apiRouteRegex = /^\/api($|\/|\?)/;
const _default = async (options)=>{
const { watch, port } = options;
// initialize development router
const router = await createDevRouter(options);
if (watch) await (0, _watcher.default)(router, options); // TODO should be part of createDevRouter
(0, _compiler.default)(router, options); // TODO should be part of createDevRouter
// connect router to HTTP
const api = (0, _gateway.default)(router);
const server = await (0, _http.default)((request, response)=>{
const { url } = request;
if (apiRouteRegex.test(url)) {
// TODO test for performance
return api(request, response);
} else {
// TODO documentation
}
}, port);
return server;
};
/**
* Create router with all files in the `apiDir` directory and initialize
* Typescript if needed (i.e if `apiDir` contains at least one `.ts` or `.tsx` files).
*/ const createDevRouter = async ({ cwdPath, apiDir })=>{
let hasTypescript = false;
const router = await (0, _router.default)(cwdPath);
const devRouter = {
...router,
// detect typesript whenever a file is added to the `apiDir` directory
add (filePath) {
const isTypescript = filePath.endsWith(_enums.JSExtensionE.TYPESCRIPT) || filePath.endsWith(_enums.JSExtensionE.TSX);
if (!hasTypescript && isTypescript) {
hasTypescript = true;
(0, _typescript.default)();
}
router.add(filePath);
}
};
// read api directory and add all files to the router
const entries = await (0, _walker.default)(apiDir);
for await (const filePath of entries){
devRouter.add(filePath);
}
return devRouter;
};