@etohq/framework 1.5.1-alpha.4 → 1.5.1-alpha.5
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.
- package/dist/config/loader.d.ts +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +3 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/deps/awilix.d.ts +2 -0
- package/dist/deps/awilix.d.ts.map +1 -0
- package/dist/deps/awilix.js +18 -0
- package/dist/deps/awilix.js.map +1 -0
- package/dist/deps/mikro-orm-cli.d.ts +2 -0
- package/dist/deps/mikro-orm-cli.d.ts.map +1 -0
- package/dist/deps/mikro-orm-cli.js +18 -0
- package/dist/deps/mikro-orm-cli.js.map +1 -0
- package/dist/deps/mikro-orm-core.d.ts +2 -0
- package/dist/deps/mikro-orm-core.d.ts.map +1 -0
- package/dist/deps/mikro-orm-core.js +18 -0
- package/dist/deps/mikro-orm-core.js.map +1 -0
- package/dist/deps/mikro-orm-knex.d.ts +2 -0
- package/dist/deps/mikro-orm-knex.d.ts.map +1 -0
- package/dist/deps/mikro-orm-knex.js +18 -0
- package/dist/deps/mikro-orm-knex.js.map +1 -0
- package/dist/deps/mikro-orm-migrations.d.ts +2 -0
- package/dist/deps/mikro-orm-migrations.d.ts.map +1 -0
- package/dist/deps/mikro-orm-migrations.js +18 -0
- package/dist/deps/mikro-orm-migrations.js.map +1 -0
- package/dist/deps/mikro-orm-postgresql.d.ts +2 -0
- package/dist/deps/mikro-orm-postgresql.d.ts.map +1 -0
- package/dist/deps/mikro-orm-postgresql.js +18 -0
- package/dist/deps/mikro-orm-postgresql.js.map +1 -0
- package/dist/deps/opentelemetry-api.d.ts +2 -0
- package/dist/deps/opentelemetry-api.d.ts.map +1 -0
- package/dist/deps/opentelemetry-api.js +18 -0
- package/dist/deps/opentelemetry-api.js.map +1 -0
- package/dist/deps/opentelemetry-instrumentation-pg.d.ts +2 -0
- package/dist/deps/opentelemetry-instrumentation-pg.d.ts.map +1 -0
- package/dist/deps/opentelemetry-instrumentation-pg.js +18 -0
- package/dist/deps/opentelemetry-instrumentation-pg.js.map +1 -0
- package/dist/deps/opentelemetry-resources.d.ts +2 -0
- package/dist/deps/opentelemetry-resources.d.ts.map +1 -0
- package/dist/deps/opentelemetry-resources.js +18 -0
- package/dist/deps/opentelemetry-resources.js.map +1 -0
- package/dist/deps/opentelemetry-sdk-node.d.ts +2 -0
- package/dist/deps/opentelemetry-sdk-node.d.ts.map +1 -0
- package/dist/deps/opentelemetry-sdk-node.js +18 -0
- package/dist/deps/opentelemetry-sdk-node.js.map +1 -0
- package/dist/deps/opentelemetry-sdk-trace-node.d.ts +2 -0
- package/dist/deps/opentelemetry-sdk-trace-node.d.ts.map +1 -0
- package/dist/deps/opentelemetry-sdk-trace-node.js +18 -0
- package/dist/deps/opentelemetry-sdk-trace-node.js.map +1 -0
- package/dist/deps/pg.d.ts +2 -0
- package/dist/deps/pg.d.ts.map +1 -0
- package/dist/deps/pg.js +18 -0
- package/dist/deps/pg.js.map +1 -0
- package/dist/deps/zod.d.ts +2 -0
- package/dist/deps/zod.d.ts.map +1 -0
- package/dist/deps/zod.js +18 -0
- package/dist/deps/zod.js.map +1 -0
- package/dist/eto-app-loader.d.ts.map +1 -1
- package/dist/eto-app-loader.js +4 -2
- package/dist/eto-app-loader.js.map +1 -1
- package/dist/eto.d.ts +11 -2
- package/dist/eto.d.ts.map +1 -1
- package/dist/eto.js +29 -18
- package/dist/eto.js.map +1 -1
- package/dist/http/express-loader.d.ts +10 -0
- package/dist/http/express-loader.d.ts.map +1 -0
- package/dist/http/express-loader.js +130 -0
- package/dist/http/express-loader.js.map +1 -0
- package/dist/http/middleware-file-loader.d.ts +33 -0
- package/dist/http/middleware-file-loader.d.ts.map +1 -0
- package/dist/http/middleware-file-loader.js +186 -0
- package/dist/http/middleware-file-loader.js.map +1 -0
- package/dist/http/middlewares/apply-locale.d.ts +12 -0
- package/dist/http/middlewares/apply-locale.d.ts.map +1 -0
- package/dist/http/middlewares/apply-locale.js +31 -0
- package/dist/http/middlewares/apply-locale.js.map +1 -0
- package/dist/http/middlewares/check-permissions.d.ts +15 -0
- package/dist/http/middlewares/check-permissions.d.ts.map +1 -0
- package/dist/http/middlewares/check-permissions.js +54 -0
- package/dist/http/middlewares/check-permissions.js.map +1 -0
- package/dist/http/router.d.ts +36 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +317 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/routes-finder.d.ts +22 -0
- package/dist/http/routes-finder.d.ts.map +1 -0
- package/dist/http/routes-finder.js +68 -0
- package/dist/http/routes-finder.js.map +1 -0
- package/dist/http/routes-loader.d.ts +39 -0
- package/dist/http/routes-loader.d.ts.map +1 -0
- package/dist/http/routes-loader.js +232 -0
- package/dist/http/routes-loader.js.map +1 -0
- package/dist/http/routes-sorter.d.ts +105 -0
- package/dist/http/routes-sorter.d.ts.map +1 -0
- package/dist/http/routes-sorter.js +146 -0
- package/dist/http/routes-sorter.js.map +1 -0
- package/dist/http/utils/define-middlewares.d.ts +22 -0
- package/dist/http/utils/define-middlewares.d.ts.map +1 -0
- package/dist/http/utils/define-middlewares.js +27 -0
- package/dist/http/utils/define-middlewares.js.map +1 -0
- package/dist/http/utils/field-filtering/field-parser.d.ts +32 -0
- package/dist/http/utils/field-filtering/field-parser.d.ts.map +1 -0
- package/dist/http/utils/field-filtering/field-parser.js +87 -0
- package/dist/http/utils/field-filtering/field-parser.js.map +1 -0
- package/dist/http/utils/field-filtering/field-validator.d.ts +24 -0
- package/dist/http/utils/field-filtering/field-validator.d.ts.map +1 -0
- package/dist/http/utils/field-filtering/field-validator.js +67 -0
- package/dist/http/utils/field-filtering/field-validator.js.map +1 -0
- package/dist/http/utils/field-filtering/index.d.ts +33 -0
- package/dist/http/utils/field-filtering/index.d.ts.map +1 -0
- package/dist/http/utils/field-filtering/index.js +9 -0
- package/dist/http/utils/field-filtering/index.js.map +1 -0
- package/dist/http/utils/policies/rbac-field-filter.d.ts +19 -0
- package/dist/http/utils/policies/rbac-field-filter.d.ts.map +1 -0
- package/dist/http/utils/policies/rbac-field-filter.js +348 -0
- package/dist/http/utils/policies/rbac-field-filter.js.map +1 -0
- package/dist/links/link-loader.d.ts +2 -1
- package/dist/links/link-loader.d.ts.map +1 -1
- package/dist/links/link-loader.js +9 -7
- package/dist/links/link-loader.js.map +1 -1
- package/dist/policies/has-permission.d.ts +33 -0
- package/dist/policies/has-permission.d.ts.map +1 -0
- package/dist/policies/has-permission.js +110 -0
- package/dist/policies/has-permission.js.map +1 -0
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -0
- package/dist/policies/index.js +19 -0
- package/dist/policies/index.js.map +1 -0
- package/dist/policies/policy-loader.d.ts +6 -0
- package/dist/policies/policy-loader.d.ts.map +1 -0
- package/dist/policies/policy-loader.js +17 -0
- package/dist/policies/policy-loader.js.map +1 -0
- package/dist/telemetry/index.d.ts +50 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +81 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/utils/resource-loader.d.ts +3 -1
- package/dist/utils/resource-loader.d.ts.map +1 -1
- package/dist/utils/resource-loader.js +18 -7
- package/dist/utils/resource-loader.js.map +1 -1
- package/dist/zod/index.d.ts +1 -0
- package/dist/zod/index.d.ts.map +1 -1
- package/dist/zod/index.js +1 -0
- package/dist/zod/index.js.map +1 -1
- package/package.json +21 -9
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Express, RequestHandler } from "express";
|
|
2
|
+
import type { MiddlewareFunction, RouteHandler } from "./types";
|
|
3
|
+
import { EtoContainer } from "@etohq/types";
|
|
4
|
+
export declare class ApiLoader {
|
|
5
|
+
#private;
|
|
6
|
+
/**
|
|
7
|
+
* Wrap the original route handler implementation for
|
|
8
|
+
* instrumentation.
|
|
9
|
+
*/
|
|
10
|
+
static traceRoute?: (handler: RouteHandler, route: {
|
|
11
|
+
route: string;
|
|
12
|
+
method: string;
|
|
13
|
+
}) => RouteHandler;
|
|
14
|
+
/**
|
|
15
|
+
* Wrap the original middleware handler implementation for
|
|
16
|
+
* instrumentation.
|
|
17
|
+
*/
|
|
18
|
+
static traceMiddleware?: (handler: RequestHandler | MiddlewareFunction, route: {
|
|
19
|
+
route: string;
|
|
20
|
+
method?: string;
|
|
21
|
+
}) => RequestHandler | MiddlewareFunction;
|
|
22
|
+
constructor({ app, sourceDir, baseRestrictedFields, container, }: {
|
|
23
|
+
app: Express;
|
|
24
|
+
sourceDir: string | string[];
|
|
25
|
+
baseRestrictedFields?: string[];
|
|
26
|
+
container: EtoContainer;
|
|
27
|
+
});
|
|
28
|
+
load(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Clear all API resources registered by this loader
|
|
31
|
+
* This removes all routes and middleware added after the initial stack state
|
|
32
|
+
* Used by HMR to reset the API state before reloading
|
|
33
|
+
*/
|
|
34
|
+
clearAllResources(): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,OAAO,EAEP,cAAc,EACf,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAOV,kBAAkB,EAGlB,YAAY,EACb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAU,YAAY,EAAE,MAAM,cAAc,CAAA;AAenD,qBAAa,SAAS;;IACpB;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,CAClB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACrC,YAAY,CAAA;IAEjB;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,EAAE,CACvB,OAAO,EAAE,cAAc,GAAG,kBAAkB,EAC5C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACtC,cAAc,GAAG,kBAAkB,CAAA;gBAgB5B,EACV,GAAG,EACH,SAAS,EACT,oBAAyB,EACzB,SAAS,GACV,EAAE;QACD,GAAG,EAAE,OAAO,CAAA;QACZ,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC5B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;QAC/B,SAAS,EAAE,YAAY,CAAA;KACxB;IA+VK,IAAI;IAoHV;;;;OAIG;IACH,iBAAiB;CASlB"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
var _ApiLoader_instances, _a, _ApiLoader_app, _ApiLoader_sourceDirs, _ApiLoader_logger, _ApiLoader_loadHttpResources, _ApiLoader_isRouteFileDisabled, _ApiLoader_registerExpressHandler, _ApiLoader_assignRestrictedFields, _ApiLoader_createCorsOptions, _ApiLoader_applyCorsMiddleware, _ApiLoader_applyAuthMiddleware, _ApiLoader_applyBodyParserMiddleware, _ApiLoader_assignAdditionalDataValidator, _ApiLoader_applyStorePublishableKeyMiddleware, _ApiLoader_applyLocaleMiddleware;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ApiLoader = void 0;
|
|
19
|
+
const utils_1 = require("@etohq/utils");
|
|
20
|
+
const cors_1 = __importDefault(require("cors"));
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const config_1 = require("../config");
|
|
23
|
+
const middleware_file_loader_1 = require("./middleware-file-loader");
|
|
24
|
+
const middlewares_1 = require("./middlewares");
|
|
25
|
+
const bodyparser_1 = require("./middlewares/bodyparser");
|
|
26
|
+
const check_permissions_1 = require("./middlewares/check-permissions");
|
|
27
|
+
const ensure_publishable_api_key_1 = require("./middlewares/ensure-publishable-api-key");
|
|
28
|
+
const error_handler_1 = require("./middlewares/error-handler");
|
|
29
|
+
const routes_finder_1 = require("./routes-finder");
|
|
30
|
+
const routes_loader_1 = require("./routes-loader");
|
|
31
|
+
const routes_sorter_1 = require("./routes-sorter");
|
|
32
|
+
const restricted_fields_1 = require("./utils/restricted-fields");
|
|
33
|
+
const wrap_handler_1 = require("./utils/wrap-handler");
|
|
34
|
+
class ApiLoader {
|
|
35
|
+
constructor({ app, sourceDir, baseRestrictedFields = [], container, }) {
|
|
36
|
+
_ApiLoader_instances.add(this);
|
|
37
|
+
/**
|
|
38
|
+
* An express instance
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
_ApiLoader_app.set(this, void 0);
|
|
42
|
+
/**
|
|
43
|
+
* Path from where to load the routes from
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
_ApiLoader_sourceDirs.set(this, void 0);
|
|
47
|
+
_ApiLoader_logger.set(this, void 0);
|
|
48
|
+
__classPrivateFieldSet(this, _ApiLoader_app, app, "f");
|
|
49
|
+
__classPrivateFieldSet(this, _ApiLoader_sourceDirs, Array.isArray(sourceDir) ? sourceDir : [sourceDir], "f");
|
|
50
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_assignRestrictedFields).call(this, baseRestrictedFields ?? []);
|
|
51
|
+
__classPrivateFieldSet(this, _ApiLoader_logger, container.resolve(utils_1.ContainerRegistrationKeys.LOGGER), "f");
|
|
52
|
+
}
|
|
53
|
+
async load() {
|
|
54
|
+
if (utils_1.FeatureFlag.isFeatureEnabled("backend_hmr")) {
|
|
55
|
+
;
|
|
56
|
+
global.__MEDUSA_HMR_API_LOADER__ = this;
|
|
57
|
+
}
|
|
58
|
+
const { errorHandler: sourceErrorHandler, middlewares, routes, routesFinder, bodyParserConfigRoutes, additionalDataValidatorRoutes, } = await __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_loadHttpResources).call(this);
|
|
59
|
+
/**
|
|
60
|
+
* Parse request body on all the requests and use the routes finder
|
|
61
|
+
* to pick the best matching config for the given route.
|
|
62
|
+
*/
|
|
63
|
+
const bodyParserRoutesFinder = new routes_finder_1.RoutesFinder(new routes_sorter_1.RoutesSorter(bodyParserConfigRoutes).sort([
|
|
64
|
+
"static",
|
|
65
|
+
"params",
|
|
66
|
+
"regex",
|
|
67
|
+
"wildcard",
|
|
68
|
+
"global",
|
|
69
|
+
]));
|
|
70
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyBodyParserMiddleware).call(this, "/", bodyParserRoutesFinder);
|
|
71
|
+
/**
|
|
72
|
+
* Use the routes finder to pick the additional data validator
|
|
73
|
+
* to be applied on the current request
|
|
74
|
+
*/
|
|
75
|
+
if (additionalDataValidatorRoutes.length) {
|
|
76
|
+
const additionalDataValidatorRoutesFinder = new routes_finder_1.RoutesFinder(new routes_sorter_1.RoutesSorter(additionalDataValidatorRoutes).sort([
|
|
77
|
+
"static",
|
|
78
|
+
"params",
|
|
79
|
+
"regex",
|
|
80
|
+
"wildcard",
|
|
81
|
+
"global",
|
|
82
|
+
]));
|
|
83
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_assignAdditionalDataValidator).call(this, "/", additionalDataValidatorRoutesFinder);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* CORS and Auth setup for admin routes
|
|
87
|
+
*/
|
|
88
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/admin", "shouldAppendAdminCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.adminCors));
|
|
89
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyAuthMiddleware).call(this, routesFinder, "/admin", "user", [
|
|
90
|
+
"bearer",
|
|
91
|
+
"session",
|
|
92
|
+
"api-key",
|
|
93
|
+
]);
|
|
94
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/store", "shouldAppendStoreCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.storeCors));
|
|
95
|
+
/**
|
|
96
|
+
* Publishable key check, CORS and auth setup for store routes.
|
|
97
|
+
*/
|
|
98
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyStorePublishableKeyMiddleware).call(this, "/store");
|
|
99
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyLocaleMiddleware).call(this, "/store");
|
|
100
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyAuthMiddleware).call(this, routesFinder, "/store", "customer", ["bearer", "session"], {
|
|
101
|
+
allowUnauthenticated: true,
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* Apply CORS middleware for "/auth" routes
|
|
105
|
+
*/
|
|
106
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_applyCorsMiddleware).call(this, routesFinder, "/auth", "shouldAppendAuthCors", __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_createCorsOptions).call(this, config_1.configManager.config.projectConfig.http.authCors));
|
|
107
|
+
const collectionToSort = []
|
|
108
|
+
.concat(middlewares)
|
|
109
|
+
.concat(routes);
|
|
110
|
+
const sortedRoutes = new routes_sorter_1.RoutesSorter(collectionToSort).sort();
|
|
111
|
+
sortedRoutes.forEach((route) => {
|
|
112
|
+
if ("isRoute" in route) {
|
|
113
|
+
routesFinder.add(route);
|
|
114
|
+
}
|
|
115
|
+
__classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_registerExpressHandler).call(this, route);
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* Registering error handler as the final handler
|
|
119
|
+
*/
|
|
120
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(sourceErrorHandler ?? (0, error_handler_1.errorHandler)());
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Clear all API resources registered by this loader
|
|
124
|
+
* This removes all routes and middleware added after the initial stack state
|
|
125
|
+
* Used by HMR to reset the API state before reloading
|
|
126
|
+
*/
|
|
127
|
+
clearAllResources() {
|
|
128
|
+
const router = __classPrivateFieldGet(this, _ApiLoader_app, "f")._router;
|
|
129
|
+
const initialStackLength = global.__MEDUSA_HMR_INITIAL_STACK_LENGTH__ ?? 0;
|
|
130
|
+
if (router && router.stack) {
|
|
131
|
+
router.stack.splice(initialStackLength);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.ApiLoader = ApiLoader;
|
|
136
|
+
_a = ApiLoader, _ApiLoader_app = new WeakMap(), _ApiLoader_sourceDirs = new WeakMap(), _ApiLoader_logger = new WeakMap(), _ApiLoader_instances = new WeakSet(), _ApiLoader_loadHttpResources =
|
|
137
|
+
/**
|
|
138
|
+
* Loads routes, middleware, bodyParserConfig routes, routes that have
|
|
139
|
+
* opted out for Auth and CORS and the error handler.
|
|
140
|
+
*/
|
|
141
|
+
async function _ApiLoader_loadHttpResources() {
|
|
142
|
+
const routesLoader = new routes_loader_1.RoutesLoader();
|
|
143
|
+
const middlewareLoader = new middleware_file_loader_1.MiddlewareFileLoader();
|
|
144
|
+
for (const dir of __classPrivateFieldGet(this, _ApiLoader_sourceDirs, "f")) {
|
|
145
|
+
await routesLoader.scanDir(dir);
|
|
146
|
+
await middlewareLoader.scanDir(dir);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
routes: routesLoader.getRoutes(),
|
|
150
|
+
routesFinder: new routes_finder_1.RoutesFinder(),
|
|
151
|
+
middlewares: middlewareLoader.getMiddlewares(),
|
|
152
|
+
errorHandler: middlewareLoader.getErrorHandler(),
|
|
153
|
+
bodyParserConfigRoutes: middlewareLoader.getBodyParserConfigRoutes(),
|
|
154
|
+
additionalDataValidatorRoutes: middlewareLoader.getAdditionalDataValidatorRoutes(),
|
|
155
|
+
};
|
|
156
|
+
}, _ApiLoader_isRouteFileDisabled = function _ApiLoader_isRouteFileDisabled(matcher) {
|
|
157
|
+
const routePathSegments = matcher
|
|
158
|
+
.split("/")
|
|
159
|
+
.filter(Boolean)
|
|
160
|
+
.map((segment) => {
|
|
161
|
+
if (segment.startsWith(":")) {
|
|
162
|
+
return `[${segment.slice(1)}]`;
|
|
163
|
+
}
|
|
164
|
+
return segment;
|
|
165
|
+
});
|
|
166
|
+
for (const sourceDir of __classPrivateFieldGet(this, _ApiLoader_sourceDirs, "f")) {
|
|
167
|
+
for (const ext of [".ts", ".js"]) {
|
|
168
|
+
const routeFilePath = (0, path_1.join)(sourceDir, ...routePathSegments, `route${ext}`);
|
|
169
|
+
if ((0, utils_1.isFileDisabled)(routeFilePath)) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return false;
|
|
175
|
+
}, _ApiLoader_registerExpressHandler = function _ApiLoader_registerExpressHandler(route) {
|
|
176
|
+
if ("isRoute" in route) {
|
|
177
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`registering route ${route.method} ${route.matcher}`);
|
|
178
|
+
const handler = _a.traceRoute
|
|
179
|
+
? _a.traceRoute(route.handler, {
|
|
180
|
+
route: route.matcher,
|
|
181
|
+
method: route.method,
|
|
182
|
+
})
|
|
183
|
+
: route.handler;
|
|
184
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f")[route.method.toLowerCase()](route.matcher, (0, wrap_handler_1.wrapHandler)(handler));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const isRbacEnabled = utils_1.FeatureFlag.isFeatureEnabled("rbac");
|
|
188
|
+
if (!route.methods) {
|
|
189
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`registering global middleware for ${route.matcher}`);
|
|
190
|
+
// Wrap with permission check if policies are defined
|
|
191
|
+
let handlerToUse = route.handler;
|
|
192
|
+
if (route.policies && isRbacEnabled) {
|
|
193
|
+
handlerToUse = (0, check_permissions_1.wrapWithPoliciesCheck)(route.handler, route.policies);
|
|
194
|
+
}
|
|
195
|
+
const handler = _a.traceMiddleware
|
|
196
|
+
? _a.traceMiddleware(handlerToUse, {
|
|
197
|
+
route: route.matcher,
|
|
198
|
+
})
|
|
199
|
+
: handlerToUse;
|
|
200
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(route.matcher, (0, wrap_handler_1.wrapHandler)(handler));
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const methods = Array.isArray(route.methods)
|
|
204
|
+
? route.methods
|
|
205
|
+
: [route.methods];
|
|
206
|
+
methods.forEach((method) => {
|
|
207
|
+
const isDisabled = __classPrivateFieldGet(this, _ApiLoader_instances, "m", _ApiLoader_isRouteFileDisabled).call(this, route.matcher);
|
|
208
|
+
if (isDisabled) {
|
|
209
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`skipping disabled route middleware registration for ${method} ${route.matcher}`);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`registering route middleware ${method} ${route.matcher}`);
|
|
213
|
+
let handlerToUse = route.handler;
|
|
214
|
+
if (route.policies && isRbacEnabled) {
|
|
215
|
+
handlerToUse = (0, check_permissions_1.wrapWithPoliciesCheck)(route.handler, route.policies);
|
|
216
|
+
}
|
|
217
|
+
const handler = _a.traceMiddleware
|
|
218
|
+
? _a.traceMiddleware((0, wrap_handler_1.wrapHandler)(handlerToUse), {
|
|
219
|
+
route: route.matcher,
|
|
220
|
+
method: method,
|
|
221
|
+
})
|
|
222
|
+
: (0, wrap_handler_1.wrapHandler)(handlerToUse);
|
|
223
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f")[method.toLowerCase()](route.matcher, handler);
|
|
224
|
+
});
|
|
225
|
+
}, _ApiLoader_assignRestrictedFields = function _ApiLoader_assignRestrictedFields(baseRestrictedFields) {
|
|
226
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use("/store", ((req, _, next) => {
|
|
227
|
+
req.restrictedFields = new restricted_fields_1.RestrictedFields();
|
|
228
|
+
req.restrictedFields.add(baseRestrictedFields);
|
|
229
|
+
next();
|
|
230
|
+
}));
|
|
231
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use("/admin", ((req, _, next) => {
|
|
232
|
+
req.restrictedFields = new restricted_fields_1.RestrictedFields();
|
|
233
|
+
next();
|
|
234
|
+
}));
|
|
235
|
+
}, _ApiLoader_createCorsOptions = function _ApiLoader_createCorsOptions(origin) {
|
|
236
|
+
return {
|
|
237
|
+
origin: (0, utils_1.parseCorsOrigins)(origin),
|
|
238
|
+
credentials: true,
|
|
239
|
+
preflightContinue: false,
|
|
240
|
+
};
|
|
241
|
+
}, _ApiLoader_applyCorsMiddleware = function _ApiLoader_applyCorsMiddleware(routesFinder, namespace, toggleKey, corsOptions) {
|
|
242
|
+
const logger = __classPrivateFieldGet(this, _ApiLoader_logger, "f");
|
|
243
|
+
const corsFn = (0, cors_1.default)(corsOptions);
|
|
244
|
+
const corsMiddleware = function corsMiddleware(req, res, next) {
|
|
245
|
+
let method = req.method;
|
|
246
|
+
if (req.method === "OPTIONS") {
|
|
247
|
+
method = req.headers["access-control-request-method"] ?? req.method;
|
|
248
|
+
}
|
|
249
|
+
const path = `${namespace}${req.path}`;
|
|
250
|
+
const matchingRoute = routesFinder.find(path, method);
|
|
251
|
+
if (matchingRoute && matchingRoute[toggleKey] === true) {
|
|
252
|
+
return corsFn(req, res, next);
|
|
253
|
+
}
|
|
254
|
+
logger.debug(`Skipping CORS middleware ${req.method} ${path}`);
|
|
255
|
+
return next();
|
|
256
|
+
};
|
|
257
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
258
|
+
? _a.traceMiddleware(corsMiddleware, {
|
|
259
|
+
route: namespace,
|
|
260
|
+
})
|
|
261
|
+
: corsMiddleware);
|
|
262
|
+
}, _ApiLoader_applyAuthMiddleware = function _ApiLoader_applyAuthMiddleware(routesFinder, namespace, actorType, authType, options) {
|
|
263
|
+
const logger = __classPrivateFieldGet(this, _ApiLoader_logger, "f");
|
|
264
|
+
logger.debug(`Registering auth middleware for prefix ${namespace}`);
|
|
265
|
+
const originalFn = (0, middlewares_1.authenticate)(actorType, authType, options);
|
|
266
|
+
const authMiddleware = function authMiddleware(req, res, next) {
|
|
267
|
+
const path = `${namespace}${req.path}`;
|
|
268
|
+
const matchingRoute = routesFinder.find(path, req.method);
|
|
269
|
+
if (matchingRoute && matchingRoute.optedOutOfAuth) {
|
|
270
|
+
logger.debug(`Skipping auth ${req.method} ${path}`);
|
|
271
|
+
return next();
|
|
272
|
+
}
|
|
273
|
+
logger.debug(`Authenticating route ${req.method} ${path}`);
|
|
274
|
+
return originalFn(req, res, next);
|
|
275
|
+
};
|
|
276
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
277
|
+
? _a.traceMiddleware(authMiddleware, {
|
|
278
|
+
route: namespace,
|
|
279
|
+
})
|
|
280
|
+
: authMiddleware);
|
|
281
|
+
}, _ApiLoader_applyBodyParserMiddleware = function _ApiLoader_applyBodyParserMiddleware(namespace, routesFinder) {
|
|
282
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`Registering bodyparser middleware for prefix ${namespace}`);
|
|
283
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, (0, bodyparser_1.createBodyParserMiddlewaresStack)(namespace, routesFinder, _a.traceMiddleware));
|
|
284
|
+
}, _ApiLoader_assignAdditionalDataValidator = function _ApiLoader_assignAdditionalDataValidator(namespace, routesFinder) {
|
|
285
|
+
const logger = __classPrivateFieldGet(this, _ApiLoader_logger, "f");
|
|
286
|
+
logger.debug(`Registering assignAdditionalDataValidator middleware for prefix ${namespace}`);
|
|
287
|
+
const additionalDataValidator = function additionalDataValidator(req, _, next) {
|
|
288
|
+
const matchingRoute = routesFinder.find(req.path, req.method);
|
|
289
|
+
if (matchingRoute && matchingRoute.validator) {
|
|
290
|
+
logger.debug(`Using validator to validate additional data on ${req.method} ${req.path}`);
|
|
291
|
+
req.additionalDataValidator = matchingRoute.validator;
|
|
292
|
+
}
|
|
293
|
+
return next();
|
|
294
|
+
};
|
|
295
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, _a.traceMiddleware
|
|
296
|
+
? _a.traceMiddleware(additionalDataValidator, {
|
|
297
|
+
route: namespace,
|
|
298
|
+
})
|
|
299
|
+
: additionalDataValidator);
|
|
300
|
+
}, _ApiLoader_applyStorePublishableKeyMiddleware = function _ApiLoader_applyStorePublishableKeyMiddleware(namespace) {
|
|
301
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`Registering publishable key middleware for namespace ${namespace}`);
|
|
302
|
+
let middleware = _a.traceMiddleware
|
|
303
|
+
? _a.traceMiddleware(ensure_publishable_api_key_1.ensurePublishableApiKeyMiddleware, {
|
|
304
|
+
route: namespace,
|
|
305
|
+
})
|
|
306
|
+
: ensure_publishable_api_key_1.ensurePublishableApiKeyMiddleware;
|
|
307
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, middleware);
|
|
308
|
+
}, _ApiLoader_applyLocaleMiddleware = function _ApiLoader_applyLocaleMiddleware(namespace) {
|
|
309
|
+
__classPrivateFieldGet(this, _ApiLoader_logger, "f").debug(`Registering locale middleware for namespace ${namespace}`);
|
|
310
|
+
let middleware = _a.traceMiddleware
|
|
311
|
+
? _a.traceMiddleware(middlewares_1.applyLocale, {
|
|
312
|
+
route: namespace,
|
|
313
|
+
})
|
|
314
|
+
: middlewares_1.applyLocale;
|
|
315
|
+
__classPrivateFieldGet(this, _ApiLoader_app, "f").use(namespace, middleware);
|
|
316
|
+
};
|
|
317
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,wCAKqB;AACrB,gDAAwC;AAqBxC,+BAA2B;AAC3B,sCAAyC;AACzC,qEAA+D;AAC/D,+CAAmE;AACnE,yDAA2E;AAC3E,uEAAuE;AACvE,yFAA4F;AAC5F,+DAA0D;AAC1D,mDAA8C;AAC9C,mDAA8C;AAC9C,mDAA8C;AAC9C,iEAA4D;AAC5D,uDAAkD;AAElD,MAAa,SAAS;IAiCpB,YAAY,EACV,GAAG,EACH,SAAS,EACT,oBAAoB,GAAG,EAAE,EACzB,SAAS,GAMV;;QAxBD;;;WAGG;QACM,iCAAa;QAEtB;;;WAGG;QACM,wCAAqB;QAErB,oCAAe;QAatB,uBAAA,IAAI,kBAAQ,GAAG,MAAA,CAAA;QACf,uBAAA,IAAI,yBAAe,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAA,CAAA;QACrE,uBAAA,IAAI,+DAAwB,MAA5B,IAAI,EAAyB,oBAAoB,IAAI,EAAE,CAAC,CAAA;QACxD,uBAAA,IAAI,qBAAW,SAAS,CAAC,OAAO,CAAC,iCAAyB,CAAC,MAAM,CAAC,MAAA,CAAA;IACpE,CAAC;IA0VD,KAAK,CAAC,IAAI;QACR,IAAI,mBAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YAChD,CAAC;YAAC,MAAc,CAAC,yBAAyB,GAAG,IAAI,CAAA;QACnD,CAAC;QAED,MAAM,EACJ,YAAY,EAAE,kBAAkB,EAChC,WAAW,EACX,MAAM,EACN,YAAY,EACZ,sBAAsB,EACtB,6BAA6B,GAC9B,GAAG,MAAM,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,CAAqB,CAAA;QAEnC;;;WAGG;QACH,MAAM,sBAAsB,GAAG,IAAI,4BAAY,CAC7C,IAAI,4BAAY,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC;YAC5C,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,UAAU;YACV,QAAQ;SACT,CAAC,CACH,CAAA;QACD,uBAAA,IAAI,kEAA2B,MAA/B,IAAI,EAA4B,GAAG,EAAE,sBAAsB,CAAC,CAAA;QAE5D;;;WAGG;QACH,IAAI,6BAA6B,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,mCAAmC,GACvC,IAAI,4BAAY,CACd,IAAI,4BAAY,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC;gBACnD,QAAQ;gBACR,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,QAAQ;aACT,CAAC,CACH,CAAA;YACH,uBAAA,IAAI,sEAA+B,MAAnC,IAAI,EACF,GAAG,EACH,mCAAmC,CACpC,CAAA;QACH,CAAC;QAED;;WAEG;QACH,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EACF,YAAY,EACZ,QAAQ,EACR,uBAAuB,EACvB,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,EAAoB,sBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAC3E,CAAA;QACD,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EAAsB,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;YACxD,QAAQ;YACR,SAAS;YACT,SAAS;SACV,CAAC,CAAA;QAEF,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EACF,YAAY,EACZ,QAAQ,EACR,uBAAuB,EACvB,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,EAAoB,sBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAC3E,CAAA;QACD;;WAEG;QACH,uBAAA,IAAI,2EAAoC,MAAxC,IAAI,EAAqC,QAAQ,CAAC,CAAA;QAElD,uBAAA,IAAI,8DAAuB,MAA3B,IAAI,EAAwB,QAAQ,CAAC,CAAA;QAErC,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EACF,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,CAAC,QAAQ,EAAE,SAAS,CAAC,EACrB;YACE,oBAAoB,EAAE,IAAI;SAC3B,CACF,CAAA;QAED;;WAEG;QACH,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EACF,YAAY,EACZ,OAAO,EACP,sBAAsB,EACtB,uBAAA,IAAI,0DAAmB,MAAvB,IAAI,EAAoB,sBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC1E,CAAA;QAED,MAAM,gBAAgB,GAAI,EAAiD;aACxE,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,MAAM,CAAC,CAAA;QAEjB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAA;QAC9D,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACvB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACzB,CAAC;YACD,uBAAA,IAAI,+DAAwB,MAA5B,IAAI,EAAyB,KAAK,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF;;WAEG;QACH,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAA,4BAAY,GAAE,CAAC,CAAA;IACrD,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,MAAM,MAAM,GAAG,uBAAA,IAAI,sBAAK,CAAC,OAAkB,CAAA;QAC3C,MAAM,kBAAkB,GACrB,MAAc,CAAC,mCAAmC,IAAI,CAAC,CAAA;QAE1D,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;CACF;AA5gBD,8BA4gBC;;AA1dC;;;GAGG;AACH,KAAK;IACH,MAAM,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAA;IAEvC,MAAM,gBAAgB,GAAG,IAAI,6CAAoB,EAAE,CAAA;IAEnD,KAAK,MAAM,GAAG,IAAI,uBAAA,IAAI,6BAAY,EAAE,CAAC;QACnC,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE;QAChC,YAAY,EAAE,IAAI,4BAAY,EAAmB;QACjD,WAAW,EAAE,gBAAgB,CAAC,cAAc,EAAE;QAC9C,YAAY,EAAE,gBAAgB,CAAC,eAAe,EAEjC;QACb,sBAAsB,EAAE,gBAAgB,CAAC,yBAAyB,EAAE;QACpE,6BAA6B,EAC3B,gBAAgB,CAAC,gCAAgC,EAAE;KACtD,CAAA;AACH,CAAC,2EAMoB,OAAe;IAClC,MAAM,iBAAiB,GAAG,OAAO;SAC9B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;QAChC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAEJ,KAAK,MAAM,SAAS,IAAI,uBAAA,IAAI,6BAAY,EAAE,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,IAAA,WAAI,EACxB,SAAS,EACT,GAAG,iBAAiB,EACpB,QAAQ,GAAG,EAAE,CACd,CAAA;YAED,IAAI,IAAA,sBAAc,EAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,iFAMC,KAA+D;IAE/D,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,MAAM,OAAO,GAAG,EAAS,CAAC,UAAU;YAClC,CAAC,CAAC,EAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;gBAClC,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;YACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;QAEjB,uBAAA,IAAI,sBAAK,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC,CAAA;QAE1E,OAAM;IACR,CAAC;IAED,MAAM,aAAa,GAAG,mBAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAExE,qDAAqD;QACrD,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;QAChC,IAAI,KAAK,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;YACpC,YAAY,GAAG,IAAA,yCAAqB,EAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,EAAS,CAAC,eAAe;YACvC,CAAC,CAAE,EAAS,CAAC,eAAe,CAAC,YAAY,EAAE;gBACvC,KAAK,EAAE,KAAK,CAAC,OAAO;aACrB,CAAoB;YACvB,CAAC,CAAE,YAA+B,CAAA;QAEpC,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC,CAAC,CAAA;QAClD,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,uBAAA,IAAI,4DAAqB,MAAzB,IAAI,EAAsB,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,UAAU,EAAE,CAAC;YACf,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAChB,uDAAuD,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CACjF,CAAA;YACD,OAAM;QACR,CAAC;QAED,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAChB,gCAAgC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAC1D,CAAA;QAED,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;QAChC,IAAI,KAAK,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;YACpC,YAAY,GAAG,IAAA,yCAAqB,EAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,EAAS,CAAC,eAAe;YACvC,CAAC,CAAE,EAAS,CAAC,eAAe,CAAC,IAAA,0BAAW,EAAC,YAAY,CAAC,EAAE;gBACpD,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,MAAM,EAAE,MAAM;aACf,CAAoB;YACvB,CAAC,CAAC,IAAA,0BAAW,EAAC,YAAY,CAAC,CAAA;QAE7B,uBAAA,IAAI,sBAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC,iFAKuB,oBAA8B;IACpD,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CACvB,GAAkB,EAClB,CAAiB,EACjB,IAAwB,EACxB,EAAE;QACF,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAgB,EAAE,CAAA;QAC7C,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QAC9C,IAAI,EAAE,CAAA;IACR,CAAC,CAA8B,CAAC,CAAA;IAEhC,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CACvB,GAAkB,EAClB,CAAiB,EACjB,IAAwB,EACxB,EAAE;QACF,GAAG,CAAC,gBAAgB,GAAG,IAAI,oCAAgB,EAAE,CAAA;QAC7C,IAAI,EAAE,CAAA;IACR,CAAC,CAA8B,CAAC,CAAA;AAClC,CAAC,uEAKkB,MAAc;IAC/B,OAAO;QACL,MAAM,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC;QAChC,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,KAAK;KACzB,CAAA;AACH,CAAC,2EAMC,YAA2C,EAC3C,SAAiB,EACjB,SAG2B,EAC3B,WAAwB;IAExB,MAAM,MAAM,GAAG,uBAAA,IAAI,yBAAQ,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC,WAAW,CAAC,CAAA;IAChC,MAAM,cAAc,GAAmB,SAAS,cAAc,CAC5D,GAAG,EACH,GAAG,EACH,IAAI;QAEJ,IAAI,MAAM,GAAW,GAAG,CAAC,MAAM,CAAA;QAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,GAAG,CAAC,MAAM,CAAA;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAA;QACvE,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC/B,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9D,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;IAED,uBAAA,IAAI,sBAAK,CAAC,GAAG,CACX,SAAS,EACT,EAAS,CAAC,eAAe;QACvB,CAAC,CAAE,EAAS,CAAC,eAAe,CAAC,cAAc,EAAE;YACzC,KAAK,EAAE,SAAS;SACjB,CAAoB;QACvB,CAAC,CAAC,cAAc,CACnB,CAAA;AACH,CAAC,2EAOC,YAA2C,EAC3C,SAAiB,EACjB,SAA4B,EAC5B,QAA+B,EAC/B,OAAyE;IAEzE,MAAM,MAAM,GAAG,uBAAA,IAAI,yBAAQ,CAAA;IAC3B,MAAM,CAAC,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAA;IAEnE,MAAM,UAAU,GAAG,IAAA,0BAAY,EAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7D,MAAM,cAAc,GAAmB,SAAS,cAAc,CAC5D,GAAG,EACH,GAAG,EACH,IAAI;QAEJ,MAAM,IAAI,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CACrC,IAAI,EACJ,GAAG,CAAC,MAAwB,CAC7B,CAAA;QACD,IAAI,aAAa,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;YACnD,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;QAC1D,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC,CAAA;IAED,uBAAA,IAAI,sBAAK,CAAC,GAAG,CACX,SAAS,EACT,EAAS,CAAC,eAAe;QACvB,CAAC,CAAE,EAAS,CAAC,eAAe,CAAC,cAAc,EAAE;YACzC,KAAK,EAAE,SAAS;SACjB,CAAoB;QACvB,CAAC,CAAC,cAAc,CACnB,CAAA;AACH,CAAC,uFAMC,SAAiB,EACjB,YAAiD;IAEjD,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAChB,gDAAgD,SAAS,EAAE,CAC5D,CAAA;IACD,uBAAA,IAAI,sBAAK,CAAC,GAAG,CACX,SAAS,EACT,IAAA,6CAAgC,EAC9B,SAAS,EACT,YAAY,EACZ,EAAS,CAAC,eAAe,CAC1B,CACF,CAAA;AACH,CAAC,+FAOC,SAAiB,EACjB,YAAwD;IAExD,MAAM,MAAM,GAAG,uBAAA,IAAI,yBAAQ,CAAA;IAC3B,MAAM,CAAC,KAAK,CACV,mEAAmE,SAAS,EAAE,CAC/E,CAAA;IAED,MAAM,uBAAuB,GAAG,SAAS,uBAAuB,CAC9D,GAAkB,EAClB,CAAiB,EACjB,IAAwB;QAExB,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CACrC,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,MAAwB,CAC7B,CAAA;QACD,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,CAAC,KAAK,CACV,kDAAkD,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAC3E,CAAA;YACD,GAAG,CAAC,uBAAuB,GAAG,aAAa,CAAC,SAAS,CAAA;QACvD,CAAC;QACD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;IAED,uBAAA,IAAI,sBAAK,CAAC,GAAG,CACX,SAAS,EACT,EAAS,CAAC,eAAe;QACvB,CAAC,CAAE,EAAS,CAAC,eAAe,CAAC,uBAAuB,EAAE;YAClD,KAAK,EAAE,SAAS;SACjB,CAAoB;QACvB,CAAC,CAAE,uBAA0C,CAChD,CAAA;AACH,CAAC,yGAMmC,SAAiB;IACnD,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAChB,wDAAwD,SAAS,EAAE,CACpE,CAAA;IACD,IAAI,UAAU,GAAG,EAAS,CAAC,eAAe;QACxC,CAAC,CAAC,EAAS,CAAC,eAAe,CAAC,8DAAiC,EAAE;YAC3D,KAAK,EAAE,SAAS;SACjB,CAAC;QACJ,CAAC,CAAC,8DAAiC,CAAA;IAErC,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,SAAS,EAAE,UAA4B,CAAC,CAAA;AACxD,CAAC,+EAEsB,SAAiB;IACtC,uBAAA,IAAI,yBAAQ,CAAC,KAAK,CAChB,+CAA+C,SAAS,EAAE,CAC3D,CAAA;IACD,IAAI,UAAU,GAAG,EAAS,CAAC,eAAe;QACxC,CAAC,CAAC,EAAS,CAAC,eAAe,CAAC,yBAAW,EAAE;YACrC,KAAK,EAAE,SAAS;SACjB,CAAC;QACJ,CAAC,CAAC,yBAAW,CAAA;IACf,uBAAA,IAAI,sBAAK,CAAC,GAAG,CAAC,SAAS,EAAE,UAA4B,CAAC,CAAA;AACxD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MiddlewareVerb, RouteVerb } from "./types";
|
|
2
|
+
export declare class RoutesFinder<T extends {
|
|
3
|
+
matcher: string;
|
|
4
|
+
methods: MiddlewareVerb | MiddlewareVerb[];
|
|
5
|
+
} | {
|
|
6
|
+
matcher: string;
|
|
7
|
+
method: RouteVerb;
|
|
8
|
+
}> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(routes?: T[]);
|
|
11
|
+
/**
|
|
12
|
+
* Register route for lookup
|
|
13
|
+
*/
|
|
14
|
+
add(route: T): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get the matching route for a given HTTP method and URL
|
|
17
|
+
*/
|
|
18
|
+
find(url: string, method: MiddlewareVerb): (T & {
|
|
19
|
+
matchRegex: RegExp;
|
|
20
|
+
}) | null | undefined;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=routes-finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-finder.d.ts","sourceRoot":"","sources":["../../src/http/routes-finder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGxD,qBAAa,YAAY,CACvB,CAAC,SACG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAAA;CAAE,GAC/D;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE;;gBAqB9B,MAAM,CAAC,EAAE,CAAC,EAAE;IAMxB;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,CAAC;IAeZ;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;oBAvCtB,MAAM;;CAwDzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _RoutesFinder_existingMatches, _RoutesFinder_routes;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RoutesFinder = void 0;
|
|
10
|
+
const path_to_regexp_1 = require("path-to-regexp");
|
|
11
|
+
const utils_1 = require("@etohq/utils");
|
|
12
|
+
class RoutesFinder {
|
|
13
|
+
constructor(routes) {
|
|
14
|
+
/**
|
|
15
|
+
* Cache of existing matches to avoid regex tests on every
|
|
16
|
+
* single HTTP request
|
|
17
|
+
*/
|
|
18
|
+
_RoutesFinder_existingMatches.set(this, new Map()
|
|
19
|
+
/**
|
|
20
|
+
* Collection of registered routes
|
|
21
|
+
*/
|
|
22
|
+
);
|
|
23
|
+
/**
|
|
24
|
+
* Collection of registered routes
|
|
25
|
+
*/
|
|
26
|
+
_RoutesFinder_routes.set(this, []);
|
|
27
|
+
if (routes) {
|
|
28
|
+
routes.forEach((route) => this.add(route));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register route for lookup
|
|
33
|
+
*/
|
|
34
|
+
add(route) {
|
|
35
|
+
// Doing a replacement for backwards compatibility with the old path-to-regexp with express 4
|
|
36
|
+
let normalizedPath = route.matcher;
|
|
37
|
+
if ((0, utils_1.isString)(route.matcher)) {
|
|
38
|
+
// Replace /* with {*splat} (wildcard matches zero or more path segments)
|
|
39
|
+
normalizedPath = normalizedPath.replace(/\/\*/g, "{*splat}");
|
|
40
|
+
// Replace /path* (no slash before asterisk) with /path{*splat}
|
|
41
|
+
normalizedPath = normalizedPath.replace(/(\w)\*/g, "$1{*splat}");
|
|
42
|
+
}
|
|
43
|
+
__classPrivateFieldGet(this, _RoutesFinder_routes, "f").push({
|
|
44
|
+
...route,
|
|
45
|
+
matchRegex: (0, path_to_regexp_1.pathToRegexp)(normalizedPath).regexp,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the matching route for a given HTTP method and URL
|
|
50
|
+
*/
|
|
51
|
+
find(url, method) {
|
|
52
|
+
const key = `${method}:${url}`;
|
|
53
|
+
if (__classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").has(key)) {
|
|
54
|
+
return __classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").get(key);
|
|
55
|
+
}
|
|
56
|
+
const result = __classPrivateFieldGet(this, _RoutesFinder_routes, "f").find((route) => {
|
|
57
|
+
if ("methods" in route) {
|
|
58
|
+
return route.methods.includes(method) && route.matchRegex.test(url);
|
|
59
|
+
}
|
|
60
|
+
return route.method === method && route.matchRegex.test(url);
|
|
61
|
+
}) ?? null;
|
|
62
|
+
__classPrivateFieldGet(this, _RoutesFinder_existingMatches, "f").set(key, result);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.RoutesFinder = RoutesFinder;
|
|
67
|
+
_RoutesFinder_existingMatches = new WeakMap(), _RoutesFinder_routes = new WeakMap();
|
|
68
|
+
//# sourceMappingURL=routes-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-finder.js","sourceRoot":"","sources":["../../src/http/routes-finder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mDAA6C;AAE7C,wCAAuC;AAEvC,MAAa,YAAY;IAwBvB,YAAY,MAAY;QAnBxB;;;WAGG;QACH,wCAMI,IAAI,GAAG,EAAE;QAEb;;WAEG;UAJU;QAEb;;WAEG;QACH,+BAEO,EAAE,EAAA;QAGP,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,KAAQ;QACV,6FAA6F;QAC7F,IAAI,cAAc,GAAG,KAAK,CAAC,OAAO,CAAA;QAClC,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,yEAAyE;YACzE,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAC5D,+DAA+D;YAC/D,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAClE,CAAC;QACD,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC;YAChB,GAAG,KAAK;YACR,UAAU,EAAE,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC,MAAM;SAChD,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,GAAW,EAAE,MAAsB;QACtC,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;QAC9B,IAAI,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,MAAM,GACV,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrE,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9D,CAAC,CAAC,IAAI,IAAI,CAAA;QAEZ,uBAAA,IAAI,qCAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AApED,oCAoEC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type RouteDescriptor } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Exposes to API to register routes manually or by scanning the filesystem from a
|
|
4
|
+
* source directory.
|
|
5
|
+
*
|
|
6
|
+
* In case of duplicates routes, the route registered afterwards will override the
|
|
7
|
+
* one registered first.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RoutesLoader {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Creates the route path from its relative file path.
|
|
13
|
+
*/
|
|
14
|
+
createRoutePath(relativePath: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Scans a given directory and loads all routes from it. You can access the loaded
|
|
17
|
+
* routes via "getRoutes" method
|
|
18
|
+
*/
|
|
19
|
+
scanDir(sourceDir: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Register a route
|
|
22
|
+
*/
|
|
23
|
+
registerRoute(route: RouteDescriptor): void;
|
|
24
|
+
/**
|
|
25
|
+
* Register one or more routes
|
|
26
|
+
*/
|
|
27
|
+
registerRoutes(routes: RouteDescriptor[]): void;
|
|
28
|
+
/**
|
|
29
|
+
* Returns an array of routes scanned by the routes loader or registered
|
|
30
|
+
* manually.
|
|
31
|
+
*/
|
|
32
|
+
getRoutes(): RouteDescriptor[];
|
|
33
|
+
/**
|
|
34
|
+
* Reload a single route file
|
|
35
|
+
* This is used by HMR to reload routes when files change
|
|
36
|
+
*/
|
|
37
|
+
reloadRouteFile(absolutePath: string, sourceDir: string): Promise<RouteDescriptor[]>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=routes-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-loader.d.ts","sourceRoot":"","sources":["../../src/http/routes-loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,eAAe,EAAkB,MAAM,SAAS,CAAA;AAqC5E;;;;;;GAMG;AACH,qBAAa,YAAY;;IAMvB;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAoG7C;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM;IA0C/B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,eAAe;IAMpC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE;IAIxC;;;OAGG;IACH,SAAS;IAcT;;;OAGG;IACG,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC;CAoB9B"}
|