Skip to content

Commit

Permalink
fix(platform-router): exclude ws verbs
Browse files Browse the repository at this point in the history
  • Loading branch information
Romakita committed Nov 28, 2023
1 parent c4b57b1 commit 41b801a
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 200 deletions.
66 changes: 38 additions & 28 deletions packages/platform/platform-router/src/domain/PlatformRouters.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
import {getValue, Hooks, Type} from "@tsed/core";
import {ControllerProvider, GlobalProviders, Injectable, InjectorService, Provider, ProviderType, TokenProvider} from "@tsed/di";
import {PlatformParamsCallback} from "@tsed/platform-params";
import {concatPath, getOperationsRoutes, JsonMethodStore} from "@tsed/schema";
import {useContextHandler} from "../utils/useContextHandler";
import {PlatformHandlerMetadata} from "./PlatformHandlerMetadata";
import {PlatformLayer} from "./PlatformLayer";
import {PlatformRouter} from "./PlatformRouter";
import { getValue, Hooks, Type } from "@tsed/core";
import {
ControllerProvider,
GlobalProviders,
Injectable,
InjectorService,
Provider,
ProviderType,
TokenProvider
} from "@tsed/di";
import { PlatformParamsCallback } from "@tsed/platform-params";
import { concatPath, getOperationsRoutes, JsonMethodStore, OPERATION_HTTP_VERBS } from "@tsed/schema";
import { useContextHandler } from "../utils/useContextHandler";
import { PlatformHandlerMetadata } from "./PlatformHandlerMetadata";
import { PlatformLayer } from "./PlatformLayer";
import { PlatformRouter } from "./PlatformRouter";

let AUTO_INC = 0;

Expand Down Expand Up @@ -35,7 +43,7 @@ function createInjectableRouter(injector: InjectorService, provider: ControllerP
}

GlobalProviders.createRegistry(ProviderType.CONTROLLER, ControllerProvider, {
onInvoke(provider: ControllerProvider, locals: any, {injector}) {
onInvoke(provider: ControllerProvider, locals: any, { injector }) {
const router = createInjectableRouter(injector, provider);
locals.set(PlatformRouter, router);
}
Expand All @@ -50,30 +58,19 @@ export interface AlterEndpointHandlersArg {
@Injectable()
export class PlatformRouters {
readonly hooks = new Hooks();
readonly allowedVerbs = OPERATION_HTTP_VERBS;

constructor(protected readonly injector: InjectorService) {}
constructor(protected readonly injector: InjectorService) {
}

prebuild() {
this.injector.getProviders(ProviderType.CONTROLLER).forEach((provider: ControllerProvider) => {
createInjectableRouter(this.injector, provider);
});
}

private sortHandlers(handlers: AlterEndpointHandlersArg) {
const get = (token: TokenProvider) => {
return this.injector.getProvider(token)?.priority || 0;
};

const sort = (p1: TokenProvider, p2: TokenProvider) => (get(p1) < get(p2) ? -1 : get(p1) > get(p2) ? 1 : 0);

handlers.before = handlers.before.sort(sort);
handlers.after = handlers.after.sort(sort);

return handlers;
}

from(token: TokenProvider, parentMiddlewares: any[] = []) {
const {injector} = this;
const { injector } = this;
const provider = injector.getProvider<ControllerProvider>(token)!;

if (!provider) {
Expand All @@ -88,11 +85,11 @@ export class PlatformRouters {

const useBefore = getValue(provider, "middlewares.useBefore", []);

const {children} = provider;
const { children } = provider;

getOperationsRoutes(provider.token).forEach((operationRoute) => {
const {endpoint} = operationRoute;
const {beforeMiddlewares, middlewares: mldwrs, afterMiddlewares} = endpoint;
getOperationsRoutes(provider.token, { allowedVerbs: this.allowedVerbs }).forEach((operationRoute) => {
const { endpoint } = operationRoute;
const { beforeMiddlewares, middlewares: mldwrs, afterMiddlewares } = endpoint;

const useBefore = getValue(provider, "middlewares.useBefore", []);
const use = getValue(provider, "middlewares.use", []);
Expand Down Expand Up @@ -139,6 +136,19 @@ export class PlatformRouters {
return this.flatMapLayers(router.layers);
}

private sortHandlers(handlers: AlterEndpointHandlersArg) {
const get = (token: TokenProvider) => {
return this.injector.getProvider(token)?.priority || 0;
};

const sort = (p1: TokenProvider, p2: TokenProvider) => (get(p1) < get(p2) ? -1 : get(p1) > get(p2) ? 1 : 0);

handlers.before = handlers.before.sort(sort);
handlers.after = handlers.after.sort(sort);

return handlers;
}

private flatMapLayers(layers: PlatformLayer[]): PlatformLayer[] {
return layers
.flatMap((layer) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {catchError} from "@tsed/core";
import {Controller, InjectorService} from "@tsed/di";
import {UseBefore} from "@tsed/platform-middlewares";
import {Context, PlatformParams} from "@tsed/platform-params";
import {Delete, Get, Head, Options, Patch, Post, Put} from "@tsed/schema";
import {Delete, Get, Head, Options, Patch, Post, Publish, Put, Subscribe} from "@tsed/schema";
import {PlatformRouter} from "../src/domain/PlatformRouter";
import {AlterEndpointHandlersArg, PlatformRouters} from "../src/domain/PlatformRouters";

Expand Down Expand Up @@ -35,11 +35,13 @@ class NestedController {
@UseBefore(function useBefore() {})
class MyController {
@Get("/")
@Publish("get.event")
get(@Context() $ctx: Context) {
return $ctx;
}

@Post("/")
@Subscribe("update.event")
post() {}

@Put("/:id")
Expand Down
4 changes: 2 additions & 2 deletions packages/specs/schema/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ module.exports = {
roots: ["<rootDir>/src", "<rootDir>/test"],
coverageThreshold: {
global: {
statements: 99.45,
statements: 99.41,
branches: 96.19,
functions: 100,
lines: 99.45
lines: 99.41
}
},
moduleNameMapper: {
Expand Down
7 changes: 1 addition & 6 deletions packages/specs/schema/src/domain/JsonEntityStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,12 +213,7 @@ export abstract class JsonEntityStore implements JsonEntityStoreOptions {

if (!store.has("JsonEntityStore")) {
const decoratorType = decoratorTypeOf(args);
const entityStore = JsonEntitiesContainer.get(decoratorType);

// istanbul ignore next
if (!entityStore) {
throw Error("Unsupported json entity type");
}
const entityStore = JsonEntitiesContainer.get(decoratorType)!;

const jsonSchemaStore = new entityStore({
store,
Expand Down
163 changes: 0 additions & 163 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5614,70 +5614,6 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==

"@tsed/common@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/common/-/common-7.48.0.tgz#b60194245700fc0fcb156b58aa10029135139b6b"
integrity sha512-UnOFAdmkPrb+rGtNmP2A4UE+oVUXyzcmHJEBcx/xbiPA4xzmltQQWjEUtzfz/Oh7MEqYpF9NdHOMMeSH9ZdFew==
dependencies:
"@tsed/core" "7.48.0"
"@tsed/di" "7.48.0"
"@tsed/exceptions" "7.48.0"
"@tsed/json-mapper" "7.48.0"
"@tsed/logger" ">=6.2.2"
"@tsed/logger-file" ">=6.2.2"
"@tsed/platform-exceptions" "7.48.0"
"@tsed/platform-log-middleware" "7.48.0"
"@tsed/platform-middlewares" "7.48.0"
"@tsed/platform-params" "7.48.0"
"@tsed/platform-response-filter" "7.48.0"
"@tsed/platform-router" "7.48.0"
"@tsed/platform-views" "7.48.0"
"@tsed/schema" "7.48.0"
"@types/json-schema" "7.0.11"
accepts "^1.3.8"
tslib "2.5.0"
uuid "8.3.2"

"@tsed/core@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/core/-/core-7.48.0.tgz#a2061f6397cb555b23bcd0f8fc3de5781660c9ce"
integrity sha512-pCpoZY58yhSRpxorwT4i2K9xkaaI4H0KAgRyPHQAPXAuDqXlGI6kC/wit58zfUEjnm5p4/tXYYiowneNkrUfIg==
dependencies:
reflect-metadata "^0.1.13"
tslib "2.5.0"

"@tsed/di@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/di/-/di-7.48.0.tgz#fce53c5c619fbf9ee8845f54a4e5a483439d0e42"
integrity sha512-CIt4k3wEw/EX6VEkluR1SxHtDSocpF7bpoHSyVTMHkymqH1Lz4TaAl0UjCQoknEpUuyLafhTNKGsdKZDhh4XWw==
dependencies:
tslib "2.5.0"

"@tsed/engines@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/engines/-/engines-7.48.0.tgz#5dcac56218a473c6fb1000666ac3590c88002764"
integrity sha512-GxmeOVwVBCY7p5nVnXjXKHer6f0snlVb8yXEva5XoLOrR4TjRNrcovBDZlbu8rgyrCDtHrbdpXPSKZBXPavUpw==
dependencies:
filedirname "^2.7.0"
fs-extra "11.1.1"
tslib "2.5.0"

"@tsed/exceptions@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/exceptions/-/exceptions-7.48.0.tgz#1caab75f60f01b996d194e1e4cb5b457a44cb378"
integrity sha512-xyci0iwu7R6z69WEGdkLGpnLdpkabXR1re8LEZ4ZK9rfxWPnatlZmkGVchbE1uxAoHtSRTqpYAR1G/wN+A+OgA==
dependencies:
change-case "4.1.2"
statuses ">=2.0.1"
tslib "2.5.0"

"@tsed/json-mapper@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/json-mapper/-/json-mapper-7.48.0.tgz#31f109a90df85265a7c8004896dfe5df63909496"
integrity sha512-dIxf2ayirEBtAaQ+VkYR6qBn9DUZtLtXZdPOtko+bJV4ZWWWcoVWId6tA5fs1i2pybAYJrMSrW0ghFlbvZRXVQ==
dependencies:
tslib "2.5.0"

"@tsed/logger-file@>=6.2.2":
version "6.2.2"
resolved "https://registry.yarnpkg.com/@tsed/logger-file/-/logger-file-6.2.2.tgz#ffd1f9ab1a0e09160433676976c370a0800ba674"
Expand Down Expand Up @@ -5717,105 +5653,6 @@
normalize-path "3.0.0"
semver "7.3.7"

"@tsed/normalize-path@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/normalize-path/-/normalize-path-7.48.0.tgz#88e1389ccfa996747cb9ef3a6a0fdf5b4bd0ee93"
integrity sha512-wpH2y55EykNxbIjUPUneF41KByaSIu+5o4DkH9AqYtkaNbemdq3sP7JLaBPgUZegOLYcMtMcSky/wF2PaCl7ig==
dependencies:
normalize-path "3.0.0"
tslib "2.5.0"

"@tsed/openspec@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/openspec/-/openspec-7.48.0.tgz#1b62a5d608e89ed7cc58c88f9d7fb5aa622006e4"
integrity sha512-izcOEwtN/lqoijhlaOHr5Yr6hIIGuF5hMwtRm3DgSOJgGLSckS+MM9k9l8jNBHwpYVqxBRmg7EXW1L9yfZVifQ==

"@tsed/platform-exceptions@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-exceptions/-/platform-exceptions-7.48.0.tgz#e71a876674b4b676cee1cc603cb86f1c7cba3a29"
integrity sha512-RUgPk+vhnt6u+5oPkKaGNXk2/hVeVbYCoKNEHorZqVXEkMnVcbkh7mmY1iq53wil529DsYhdt1WjS3SsN51kiw==
dependencies:
tslib "2.5.0"

"@tsed/platform-express@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-express/-/platform-express-7.48.0.tgz#7bbad4ee5612cf6970eb633c3e100dda97863fa6"
integrity sha512-XoTGNJKAAkEUUbr0515YeiyQ/b4PTHUQy+rKnzNo/aPV8MpCKQyBCRgFSzj3gxGrJoxy+s9bkC+FagkqSvcQAw==
dependencies:
express "^4.18.1"
multer "^1.4.5-lts.1"
tslib "2.5.0"

"@tsed/platform-log-middleware@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-log-middleware/-/platform-log-middleware-7.48.0.tgz#37ec0c06cc13b761133d45f573699da1c727e0cb"
integrity sha512-f/m6iXSmgf53vlmlH2BZiHQskUNhcT7yP0+JmGBzPn60lzsssEMhJ6Hyc0tPz6XPhBM6ZzL/NrayF32DaJ1dCA==
dependencies:
tslib "2.5.0"

"@tsed/platform-middlewares@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-middlewares/-/platform-middlewares-7.48.0.tgz#3a981d3dec02d7a5666ea4146759b7eee9c81c23"
integrity sha512-pWbSZwsbiD1mjZFMIPGAaKpi3hRFEpGEOs5SvPWYZ53S3Dfi3c8oRE0muLn9jLhjVApe73EFW9IS42XX/n4YLQ==
dependencies:
tslib "2.5.0"

"@tsed/platform-params@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-params/-/platform-params-7.48.0.tgz#509c9ef3d635f80f62e2669509216a4d6b44882b"
integrity sha512-cE1EKbJ9BHb/GuSubIvFLA8krCggRbUWYj2QtETuVWcEjb8O3xka28SxwVqTU3kdYD7zIK/K20lPR6dMF8hDwg==
dependencies:
tslib "2.5.0"

"@tsed/platform-response-filter@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-response-filter/-/platform-response-filter-7.48.0.tgz#2a69e0fe63866849b25d7c4ff4bbe03d6df49b39"
integrity sha512-EU9vMAXq3JtSvyYAWgfw9qL0lpaHKcbQxY5RuIgTpBUrh/ayxcB1J3B3SbS6boyFoaFRujtwv8+cCteL6eRubg==
dependencies:
tslib "2.5.0"

"@tsed/platform-router@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-router/-/platform-router-7.48.0.tgz#730df7ab9101e3680d9b86090ca2ac5304225c27"
integrity sha512-Q9PEdfHLl9FABDOzNJww06F+k/Xn4bgf/V0b+/TlvmGnzA1OZtBjYAS0fGOC2tnEJ/123AaThUIC5t/fo7u2Yw==
dependencies:
tslib "2.5.0"

"@tsed/platform-views@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/platform-views/-/platform-views-7.48.0.tgz#c98a610f02a1aecb4be674dfdc09bb47095d8323"
integrity sha512-Ns6qCZbn32dAQAlQWAw2QXqBEqKrVLGuuoW/QRrQ0w+yLXyDrYuHzY4aYbbBnRtIxvdgQ9M7GPcQMVqNpQGNWw==
dependencies:
"@tsed/engines" "7.48.0"
ejs "^3.1.5"
tslib "2.5.0"

"@tsed/schema@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/schema/-/schema-7.48.0.tgz#f1fffe742eecfac1d089354db80fd992048cd660"
integrity sha512-Q2hu+rn3SQm/IErMEy4+sGE9IJNz74O1hp13SGFbnxKrz0hhv+Yrmw7ZY7AmuPtnVLWGj3GAv1mX+AHO+FgxmA==
dependencies:
"@tsed/openspec" "7.48.0"
change-case "^4.1.2"
fs-extra "^11.1.1"
json-schema "0.4.0"
picomatch "2.3.1"
statuses ">=2.0.1"
tslib "2.5.0"

"@tsed/swagger@7.48.0":
version "7.48.0"
resolved "https://registry.yarnpkg.com/@tsed/swagger/-/swagger-7.48.0.tgz#e0512f5ea6a942994626458f96d0e9cf94666ad5"
integrity sha512-9WFpTI/IW0GIaoY78o8Rr/dzdRmJ1ZjmbpPPjGwm18+03Y9/w5e0R1FUmUNAStpYnwccQZK2trEjW+KHKpBfsQ==
dependencies:
"@tsed/normalize-path" "7.48.0"
"@tsed/openspec" "7.48.0"
filedirname "^2.7.0"
fs-extra "11.1.1"
micromatch "4.0.5"
swagger-ui-dist "^4.5.2"
tslib "2.5.0"

"@tsed/ts-doc@4.0.14":
version "4.0.14"
resolved "https://registry.yarnpkg.com/@tsed/ts-doc/-/ts-doc-4.0.14.tgz#6f09a1b09962354c0a1e7847f475a3e35a191eed"
Expand Down

0 comments on commit 41b801a

Please sign in to comment.