UNPKG

sensai

Version:

Because even AI needs a master

69 lines (68 loc) 2.76 kB
"use strict"; 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; };