diff --git a/notNeededPackages.json b/notNeededPackages.json index 2325aba66245ed..2b9ee4cddf20bc 100644 --- a/notNeededPackages.json +++ b/notNeededPackages.json @@ -1168,6 +1168,10 @@ "libraryName": "complex.js", "asOfVersion": "2.0.14" }, + "component-emitter": { + "libraryName": "component-emitter", + "asOfVersion": "2.0.0" + }, "composer-concerto": { "libraryName": "composer-concerto", "asOfVersion": "0.71.1" @@ -3845,6 +3849,10 @@ "libraryName": "koa-views", "asOfVersion": "7.0.0" }, + "koa__router": { + "libraryName": "@koa/router", + "asOfVersion": "15.0.0" + }, "ladda": { "libraryName": "ladda", "asOfVersion": "2.0.0" diff --git a/types/component-emitter/.eslintrc.json b/types/component-emitter/.eslintrc.json deleted file mode 100644 index 22b08eb4a82670..00000000000000 --- a/types/component-emitter/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rules": { - "@typescript-eslint/no-unsafe-function-type": "off", - "@typescript-eslint/no-wrapper-object-types": "off" - } -} diff --git a/types/component-emitter/.npmignore b/types/component-emitter/.npmignore deleted file mode 100644 index 93e307400a5456..00000000000000 --- a/types/component-emitter/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -* -!**/*.d.ts -!**/*.d.cts -!**/*.d.mts -!**/*.d.*.ts diff --git a/types/component-emitter/component-emitter-tests.ts b/types/component-emitter/component-emitter-tests.ts deleted file mode 100644 index 40486dc719e058..00000000000000 --- a/types/component-emitter/component-emitter-tests.ts +++ /dev/null @@ -1,91 +0,0 @@ -// These are all of the examples from https://www.npmjs.com/package/component-emitter as of June 18, 2016 - -// These are all of the examples from https://www.npmjs.com/package/component-emitter as of June 18, 2016 - -import Emitter = require("component-emitter"); -var emitter = new Emitter(); -emitter.emit("something"); - -var user = { name: "tobi" }; -Emitter(user); - -// (user).emit('im a user'); - -// this example modified from the one on https://www.npmjs.com/package/component-emitter -var User = Object.create({ - someUserFunction: () => { - console.log("someUserFunction called!"); - }, -}); -var another_user = Emitter(User); -// another_user.someUserFunction() -another_user.on("hi", () => { - console.log("Hi called"); -}); -another_user.emit("hi"); - -// Additional sample code for this test -function handleSomeRecurringEvent(event_data: any) { - console.log("handle some-recurring-event"); -} -emitter.on("some-recurring-event", handleSomeRecurringEvent); - -emitter.once("some-single-shot-event", (event_data: any) => { - console.log("handle some-single-shot-event"); -}); - -emitter.off(); -emitter.off("some-recurring-event"); -emitter.off("some-recurring-event", handleSomeRecurringEvent); - -emitter.removeAllListeners("some-recurring-event"); -emitter.removeAllListeners(); - -emitter.removeEventListener("some-recurring-event", handleSomeRecurringEvent); -emitter.removeEventListener("some-recurring-event"); -emitter.removeEventListener(); - -emitter.removeListener("some-recurring-event", handleSomeRecurringEvent); -emitter.removeListener("some-recurring-event"); -emitter.removeListener(); - -var event_data = { some: "data" }; -emitter.emit("some-recurring-event"); -emitter.emit("some-recurring-event", event_data); - -emitter.listeners("some-recurring-event"); - -emitter.hasListeners("some-recurring-event"); - -emitter.emit("some-event").emit("I can use chaining!"); - -let recurlyEmitter: Emitter<"change" | "field:submit"> = new Emitter(); - -recurlyEmitter.on("change", handleSomeRecurringEvent); -// @ts-expect-error -recurlyEmitter.on("some-recurring-event", handleSomeRecurringEvent); - -recurlyEmitter.once("field:submit", (event_data: any) => { - console.log("handle some-single-shot-event"); -}); -// @ts-expect-error -recurlyEmitter.once("some-single-shot-event", (event_data: any) => { - console.log("handle some-single-shot-event"); -}); - -recurlyEmitter.off(); -recurlyEmitter.off("change"); -// @ts-expect-error -recurlyEmitter.off("some-recurring-event"); - -recurlyEmitter.emit("field:submit", event_data); -// @ts-expect-error -recurlyEmitter.emit("some-recurring-event", event_data); - -recurlyEmitter.listeners("change"); -// @ts-expect-error -recurlyEmitter.listeners("some-recurring-event"); - -recurlyEmitter.hasListeners("field:submit"); -// @ts-expect-error -recurlyEmitter.hasListeners("some-recurring-event"); diff --git a/types/component-emitter/index.d.ts b/types/component-emitter/index.d.ts deleted file mode 100644 index 34bb1cb4f87d7e..00000000000000 --- a/types/component-emitter/index.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -// TypeScript Version: 2.2 - -interface Emitter { - on(event: Event, listener: Function): Emitter; - once(event: Event, listener: Function): Emitter; - off(event?: Event, listener?: Function): Emitter; - emit(event: Event, ...args: any[]): Emitter; - listeners(event: Event): Function[]; - hasListeners(event: Event): boolean; - removeListener(event?: Event, listener?: Function): Emitter; - removeEventListener(event?: Event, listener?: Function): Emitter; - removeAllListeners(event?: Event): Emitter; -} - -declare const Emitter: { - (obj?: object): Emitter; - new(obj?: object): Emitter; -}; - -export = Emitter; diff --git a/types/component-emitter/package.json b/types/component-emitter/package.json deleted file mode 100644 index fe1dc8d101c551..00000000000000 --- a/types/component-emitter/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "private": true, - "name": "@types/component-emitter", - "version": "1.2.9999", - "projects": [ - "https://www.npmjs.com/package/component-emitter" - ], - "devDependencies": { - "@types/component-emitter": "workspace:." - }, - "owners": [ - { - "name": "Peter Snider", - "githubUsername": "psnider" - } - ] -} diff --git a/types/component-emitter/tsconfig.json b/types/component-emitter/tsconfig.json deleted file mode 100644 index 3943d9030399b7..00000000000000 --- a/types/component-emitter/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "module": "node16", - "lib": [ - "es6", - "dom" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true - }, - "files": [ - "index.d.ts", - "component-emitter-tests.ts" - ] -} diff --git a/types/koa__router/.eslintrc.json b/types/koa__router/.eslintrc.json deleted file mode 100644 index 1fd8c81843b039..00000000000000 --- a/types/koa__router/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "@definitelytyped/no-unnecessary-generics": "off" - } -} diff --git a/types/koa__router/.npmignore b/types/koa__router/.npmignore deleted file mode 100644 index 93e307400a5456..00000000000000 --- a/types/koa__router/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -* -!**/*.d.ts -!**/*.d.cts -!**/*.d.mts -!**/*.d.*.ts diff --git a/types/koa__router/index.d.ts b/types/koa__router/index.d.ts deleted file mode 100644 index b26a6ada0085fa..00000000000000 --- a/types/koa__router/index.d.ts +++ /dev/null @@ -1,595 +0,0 @@ -/* =================== USAGE =================== - - import * as Router from "@koa/router"; - var router = new Router(); - - =============================================== */ - -import Koa = require("koa"); - -declare namespace Router { - interface RouterOptions { - /** - * Prefix for all routes. - */ - prefix?: string | undefined; - /** - * Methods which should be supported by the router. - */ - methods?: string[] | undefined; - routerPath?: string | undefined; - /** - * Whether or not routing should be case-sensitive. - */ - sensitive?: boolean | undefined; - /** - * Whether or not routes should matched strictly. - * - * If strict matching is enabled, the trailing slash is taken into - * account when matching routes. - */ - strict?: boolean | undefined; - /** - * Only run last matched route's controller when there are multiple matches - */ - exclusive?: boolean | undefined; - /** - * Host for router match - */ - host?: string | RegExp | undefined; - } - - interface RouterParamContext { - /** - * url params - */ - params: Record; - /** - * the router instance - */ - router: Router; - /** - * Matched route - */ - _matchedRoute: string | RegExp | undefined; - _matchedRouteName: string | undefined; - } - - type RouterContext = - Koa.ParameterizedContext, BodyT>; - - type Middleware = Koa.Middleware< - StateT, - ContextT & RouterParamContext, - BodyT - >; - - interface ParamMiddleware { - (param: string, ctx: RouterContext, next: Koa.Next): any; - } - - interface RouterAllowedMethodsOptions { - /** - * throw error instead of setting status and header - */ - throw?: boolean | undefined; - /** - * throw the returned value in place of the default NotImplemented error - */ - notImplemented?: (() => any) | undefined; - /** - * throw the returned value in place of the default MethodNotAllowed error - */ - methodNotAllowed?: (() => any) | undefined; - } - - interface LayerOptions { - /** - * Route name - */ - name: string | null; - /** - * Case sensitive (default: false) - */ - sensitive?: boolean | undefined; - /** - * Require the trailing slash (default: false) - */ - strict?: boolean | undefined; - /** - * (default: false) - */ - end?: boolean | undefined; - /** - * (default: '') - */ - prefix?: string | undefined; - ignoreCaptures?: boolean | undefined; - } - - interface UrlOptionsQuery { - query: object | string; - } - - interface RoutesMatch { - path: Layer[]; - pathAndMethod: Layer[]; - route: boolean; - } - - class ParamName { - asterisk: boolean; - delimiter: string; - name: string; - optional: boolean; - partial: boolean; - pattern: string; - prefix: string; - repeat: string; - } - - class Layer { - opts: LayerOptions; - name: string | null; - methods: string[]; - paramNames: ParamName[]; - stack: Middleware[]; - regexp: RegExp; - path: string | RegExp; - - constructor( - path: string | RegExp, - methods: string[], - middleware: Middleware | Middleware[], - opts?: LayerOptions, - ); - - /** - * Returns whether request `path` matches route. - */ - match(path: string): boolean; - - /** - * Returns map of URL parameters for given `path` and `paramNames`. - */ - params( - path: string | RegExp, - captures: ParamT[], - params?: Record, - ): { [key in ParamT]?: string }; - - /** - * Returns array of regexp url path captures. - */ - captures(path: string): string[]; - - /** - * Generate URL for route using given `params`. - * - * @example - * - * ```javascript - * const route = new Layer('/users/:id', ['GET'], fn); - * - * route.url({ id: 123 }); // => "/users/123" - * ``` - */ - url(params: object): string; - - /** - * Run validations on route named parameters. - * - * @example - * - * ```javascript - * router - * .param('user', function (id, ctx, next) { - * ctx.user = users[id]; - * if (!ctx.user) return ctx.status = 404; - * next(); - * }) - * .get('/users/:user', function (ctx, next) { - * ctx.body = ctx.user; - * }); - * ``` - */ - param(param: string, middleware: ParamMiddleware): Layer; - - /** - * Prefix route path. - */ - setPrefix(prefix: string): Layer; - } -} - -declare class Router { - opts: Router.RouterOptions; - methods: string[]; - params: object; - stack: Router.Layer[]; - - /** - * Create a new router. - */ - constructor(opt?: Router.RouterOptions); - - /** - * Use given middleware. - * - * Middleware run in the order they are defined by `.use()`. They are invoked - * sequentially, requests start at the first middleware and work their way - * "down" the middleware stack. - */ - use(...middleware: Array>): Router; - /** - * Use given middleware. - * - * Middleware run in the order they are defined by `.use()`. They are invoked - * sequentially, requests start at the first middleware and work their way - * "down" the middleware stack. - */ - use( - path: string | string[] | RegExp, - ...middleware: Array> - ): Router; - - /** - * HTTP get method - */ - get( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP get method - */ - get( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP post method - */ - post( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP post method - */ - post( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP put method - */ - put( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP put method - */ - put( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP link method - */ - link( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP link method - */ - link( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP unlink method - */ - unlink( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP unlink method - */ - unlink( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP delete method - */ - delete( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP delete method - */ - delete( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * Alias for `router.delete()` because delete is a reserved word - */ - del( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * Alias for `router.delete()` because delete is a reserved word - */ - del( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP head method - */ - head( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP head method - */ - head( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP options method - */ - options( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP options method - */ - options( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * HTTP patch method - */ - patch( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * HTTP patch method - */ - patch( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * Register route with all methods. - */ - all( - name: string, - path: string | RegExp, - ...middleware: Array> - ): Router; - /** - * Register route with all methods. - */ - all( - path: string | RegExp | Array, - ...middleware: Array> - ): Router; - - /** - * Set the path prefix for a Router instance that was already initialized. - * - * @example - * - * ```javascript - * router.prefix('/things/:thing_id') - * ``` - */ - prefix(prefix: string): Router; - - /** - * Returns router middleware which dispatches a route matching the request. - */ - routes(): Router.Middleware; - - /** - * Returns router middleware which dispatches a route matching the request. - */ - middleware(): Router.Middleware; - - /** - * Returns separate middleware for responding to `OPTIONS` requests with - * an `Allow` header containing the allowed methods, as well as responding - * with `405 Method Not Allowed` and `501 Not Implemented` as appropriate. - * - * @example - * - * ```javascript - * var Koa = require('koa'); - * var Router = require('koa-router'); - * - * var app = new Koa(); - * var router = new Router(); - * - * app.use(router.routes()); - * app.use(router.allowedMethods()); - * ``` - * - * **Example with [Boom](https://github.com/hapijs/boom)** - * - * ```javascript - * var Koa = require('koa'); - * var Router = require('koa-router'); - * var Boom = require('boom'); - * - * var app = new Koa(); - * var router = new Router(); - * - * app.use(router.routes()); - * app.use(router.allowedMethods({ - * throw: true, - * notImplemented: () => new Boom.notImplemented(), - * methodNotAllowed: () => new Boom.methodNotAllowed() - * })); - * ``` - */ - allowedMethods( - options?: Router.RouterAllowedMethodsOptions, - ): Router.Middleware; - - /** - * Redirect `source` to `destination` URL with optional 30x status `code`. - * - * Both `source` and `destination` can be route names. - * - * ```javascript - * router.redirect('/login', 'sign-in'); - * ``` - * - * This is equivalent to: - * - * ```javascript - * router.all('/login', ctx => { - * ctx.redirect('/sign-in'); - * ctx.status = 301; - * }); - * ``` - */ - redirect(source: string, destination: string, code?: number): Router; - - /** - * Create and register a route. - */ - register( - path: string | RegExp, - methods: string[], - middleware: Router.Middleware | Array>, - opts?: Router.LayerOptions, - ): Router.Layer; - - /** - * Lookup route with given `name`. - */ - route(name: string): Router.Layer | boolean; - - /** - * Generate URL for route. Takes either map of named `params` or series of - * arguments (for regular expression routes) - * - * router = new Router(); - * router.get('user', "/users/:id", ... - * - * router.url('user', { id: 3 }); - * // => "/users/3" - * - * Query can be generated from third argument: - * - * router.url('user', { id: 3 }, { query: { limit: 1 } }); - * // => "/users/3?limit=1" - * - * router.url('user', { id: 3 }, { query: "limit=1" }); - * // => "/users/3?limit=1" - */ - url(name: string, params?: any, options?: Router.UrlOptionsQuery): Error | string; - - /** - * Match given `path` and return corresponding routes. - */ - match(path: string, method: string): Router.RoutesMatch; - - /** - * Run middleware for named route parameters. Useful for auto-loading or - * validation. - * - * @example - * - * ```javascript - * router - * .param('user', (id, ctx, next) => { - * ctx.user = users[id]; - * if (!ctx.user) return ctx.status = 404; - * return next(); - * }) - * .get('/users/:user', ctx => { - * ctx.body = ctx.user; - * }) - * .get('/users/:user/friends', ctx => { - * return ctx.user.getFriends().then(function(friends) { - * ctx.body = friends; - * }); - * }) - * // /users/3 => {"id": 3, "name": "Alex"} - * // /users/3/friends => [{"id": 4, "name": "TJ"}] - * ``` - */ - - param( - param: string, - middleware: Router.ParamMiddleware, - ): Router; - - /** - * Generate URL for route. Takes a route name and map of named `params`. - * - * @example - * - * ```javascript - * router.get('user', '/users/:id', (ctx, next) => { - * // ... - * }); - * - * router.url('user', 3); - * // => "/users/3" - * - * router.url('user', { id: 3 }); - * // => "/users/3" - * - * router.use((ctx, next) => { - * // redirect to named route - * ctx.redirect(ctx.router.url('sign-in')); - * }) - * - * router.url('user', { id: 3 }, { query: { limit: 1 } }); - * // => "/users/3?limit=1" - * - * router.url('user', { id: 3 }, { query: "limit=1" }); - * // => "/users/3?limit=1" - * ``` - */ - static url(path: string | RegExp, params: object): string; -} - -export = Router; diff --git a/types/koa__router/koa__router-tests.ts b/types/koa__router/koa__router-tests.ts deleted file mode 100644 index 3e1ffb11aa3efe..00000000000000 --- a/types/koa__router/koa__router-tests.ts +++ /dev/null @@ -1,241 +0,0 @@ -import Koa = require("koa"); -import { Context } from "koa"; -import compose = require("koa-compose"); -import etag = require("koa-etag"); -import Router = require("@koa/router"); - -interface MyState { - foo: string; -} -interface MyContext { - bar: string; -} - -const app = new Koa<{}, {}>(); - -class MyRouter extends Router { - myMethod() { - const prefix = this.opts.prefix; // $ExpectType string | undefined - } -} - -const router = new Router({ - prefix: "/users", -}); - -router - .param("id", (id, ctx, next) => { - next(); - }) - .get("/", (ctx, next) => { - ctx.body = "Hello World!"; - }) - .get("user", "/users/:id", (ctx, next) => { - ctx.body = { - test1: ctx.router.url("user-accounts", { id: ctx.params.id }), - test2: ctx.router.url("user-accounts", ctx.params.id), - test3: ctx.router.url("user-accounts", [ctx.params.id]), - test4: ctx.router.url("users"), - }; - }) - .get("user-accounts", "/users/:id/accounts", (ctx, next) => { - ctx.body = { - test1: ctx.router.url("user", { id: 3 }, { query: { limit: 1 } }), - test2: ctx.router.url("user", { id: 3 }, { query: "limit=1" }), - test3: ctx.router.url("user", 3, { query: { limit: 1 } }), - test4: ctx.router.url("user", [3], { query: "limit=1" }), - test5: ctx.router.url("user", ["3"], { query: { limit: "1" } }), - }; - }) - .post("/users", (ctx, next) => { - ctx.state.foo = "foo"; - }) - .put("/users/:id", (ctx, next) => { - ctx.bar = "bar"; - ctx.body = ctx.params.id; - }) - .del("/users/:id", () => { - // ... - }); - -router.get<{}, {}, string>("user", "/users/:id", (ctx) => { - ctx.body = "sdsd"; - // @ts-expect-error Body can be typed - ctx.body = {}; -}); - -const match = router.match("/users/:id", "GET"); - -const mw: Router.Middleware = (ctx: Koa.ParameterizedContext, next: Koa.Next) => { - ctx.body = "Ok"; -}; - -const mw2: Router.Middleware = (ctx: Router.RouterContext, next: Koa.Next) => { - ctx.body = "Ok"; -}; - -app.use(async (ctx: Koa.ParameterizedContext, next) => { - ctx.state.foo = "foo"; - await next(); -}) - .use(router.routes()) - .use(router.allowedMethods()) - .use(async (ctx, next) => { - ctx.state.foo = "3"; - await next(); - }) - .listen(3000); - -const router3 = new Router(); -router3.get("/", (ctx) => { - ctx.state.foo = "bar"; - console.log(ctx.router.params); - ctx.body = "Hello World!"; -}); -router3.get("/foo", (ctx: Router.RouterContext) => { - ctx.body = "Yup"; -}); -new Koa() - .use(async (ctx, next) => next()) - .use(router3.routes()) - .use(router.allowedMethods()) - .listen(3001); - -// It's from https://github.com/DefinitelyTyped/DefinitelyTyped/pull/31704#issuecomment-451075919, -// to make sure we don't break it again - -declare module "koa" { - interface Context { - name: string; - } -} - -const app2 = new Koa(); - -const conditional = async (ctx: Context, next: any) => { - await next(); - if (ctx.fresh) { - ctx.status = 304; - ctx.body = null; - } -}; - -const router2 = compose([conditional, etag()]); - -app2.use(router2); - -app2.use(async (ctx: Context, next: any) => { - ctx.name = "hello world"; - await next(); -}); - -app2.use((ctx: Context, next: any) => { - console.log(ctx.name); - ctx.body = ctx.name; -}); - -app2.listen(8000); - -// Prepending middlewares tests - -interface BlahInterface { - blah: string; -} -interface WoohInterface { - wooh: string; -} - -const router4 = new Router({ prefix: "/users" }); - -router4.get("/", (ctx: Koa.ParameterizedContext, next) => { - ctx.state.blah = "blah"; - ctx.state.wooh = "wooh"; - return next(); -}, (ctx, next) => { - console.log(ctx.state.blah); - console.log(ctx.state.wooh); - console.log(ctx.state.foo); - ctx.body = "Hello World!"; - return next(); -}); - -const middleware1: Koa.Middleware = (ctx, next) => { - ctx.state.blah = "blah"; -}; - -const middleware2: Koa.Middleware = (ctx, next) => { - ctx.state.wooh = "blah"; -}; - -const emptyMiddleware: Koa.Middleware<{}> = (ctx, next) => { -}; - -function routeHandler1(ctx: Koa.ParameterizedContext): void { - ctx.body = "234"; -} - -function routeHandler2(ctx: Koa.ParameterizedContext): void { - ctx.body = "234"; -} - -function routeHandler3(ctx: Koa.ParameterizedContext<{}>): void { - ctx.body = "234"; -} - -function routeHandler4(ctx: Router.RouterContext): void { - ctx.body = "234"; -} - -const middleware3 = compose([middleware1, middleware2]); - -router4.get("/foo", middleware3, routeHandler1); -router4.post("/foo", middleware1, routeHandler2); -router4.put("/foo", middleware2, routeHandler3); - -router4.patch("foo", "/foo", middleware3, routeHandler1); -router4.delete("/foo", middleware1, routeHandler2); -router4.head("/foo", middleware2, routeHandler3); - -router4.post("/foo", emptyMiddleware, emptyMiddleware, routeHandler4); -router4.post("/foo", emptyMiddleware, emptyMiddleware, emptyMiddleware, routeHandler4); -router4.get("name", "/foo", emptyMiddleware, emptyMiddleware, routeHandler4); -router4.get("name", "/foo", emptyMiddleware, emptyMiddleware, emptyMiddleware, routeHandler4); - -const router5 = new Router(); -router5.register("/foo", ["GET"], middleware1, { - name: "foo", -}); -router5.register("/bar", ["GET", "DELETE"], [middleware1, middleware2]); - -const router6 = new Router<{}, {}>(); -router6.post("/foo", async (ctx) => { - ctx.state.foo = "bar"; - ctx.bar = "foo"; -}); -router6.put("/bar", async (ctx) => { - ctx.state.foo = "bar"; - // @ts-expect-error - ctx.bar = "foo"; -}); -router6.del("/baz", async (ctx) => { - // @ts-expect-error - ctx.state.foo = "bar"; - // @ts-expect-error - ctx.bar = "foo"; -}); -router6.put("/blah", async (ctx) => { - ctx.state = 123; -}); -router6.put("/blerg", async (ctx) => { - ctx.state = "abc"; -}); - -const optsName = router6.stack[0].opts.name; // $ExpectType string | null -const layerName = router6.stack[0].name; // $ExpectType string | null -const layerPath = router6.stack[0].path; // $ExpectType string | RegExp - -class MyRouter2 extends Router { - route(name: string): Router.Layer | boolean { - return super.route(name); - } -} diff --git a/types/koa__router/package.json b/types/koa__router/package.json deleted file mode 100644 index f18c48fd89a9eb..00000000000000 --- a/types/koa__router/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "private": true, - "name": "@types/koa__router", - "version": "12.0.9999", - "projects": [ - "https://github.com/koajs/koa-router#readme" - ], - "dependencies": { - "@types/koa": "*" - }, - "devDependencies": { - "@types/koa-compose": "*", - "@types/koa-etag": "*", - "@types/koa__router": "workspace:." - }, - "owners": [ - { - "name": "Jerry Chin", - "githubUsername": "hellopao" - }, - { - "name": "Pavel Ivanov", - "githubUsername": "schfkt" - }, - { - "name": "JounQin", - "githubUsername": "JounQin" - }, - { - "name": "Romain Faust", - "githubUsername": "romain-faust" - }, - { - "name": "Guillaume Mayer", - "githubUsername": "Guillaume-Mayer" - }, - { - "name": "Andrea Gueugnaut", - "githubUsername": "falinor" - }, - { - "name": "Jeremy Forsythe", - "githubUsername": "jdforsythe" - } - ] -} diff --git a/types/koa__router/tsconfig.json b/types/koa__router/tsconfig.json deleted file mode 100644 index 809a7b0178c473..00000000000000 --- a/types/koa__router/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "module": "node16", - "lib": [ - "es6" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true - }, - "files": [ - "index.d.ts", - "koa__router-tests.ts" - ] -} diff --git a/types/migrate-mongo/index.d.cts b/types/migrate-mongo/index.d.cts new file mode 100644 index 00000000000000..206ed7cf3913dd --- /dev/null +++ b/types/migrate-mongo/index.d.cts @@ -0,0 +1,117 @@ +/// + +import * as mongo from "mongodb"; + +export function init(): Promise; +export function create(description: string): Promise; +export namespace database { + function connect(): Promise<{ + client: mongo.MongoClient; + db: mongo.Db & { close: mongo.MongoClient["close"] }; + }>; +} +export namespace config { + /** + * @internal + */ + const DEFAULT_CONFIG_FILE_NAME: string; + /** + * @internal + */ + function shouldExist(): Promise; + /** + * @internal + */ + function shouldNotExist(): Promise; + /** + * @internal + */ + function getConfigFilename(): string; + /** + * Read the `migrate-mongo-config.js` file. + */ + function read(): Promise; + /** + * Set the passed config object. + * @param config The config object. + */ + function set(config: Partial): void; + + interface Config { + mongodb: { + url: Parameters[0]; + databaseName?: mongo.Db["databaseName"]; + options?: mongo.MongoClientOptions; + }; + /** + * The migrations dir, can be an relative or absolute path. + */ + migrationsDir?: string | undefined; + /** + * The MongoDB collection where the applied changes are stored. + */ + changelogCollectionName: string; + /** + * The file extension to create migrations and search for in migration dir + */ + migrationFileExtension?: string | undefined; + /** + * Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine + * if the file should be run. Requires that scripts are coded to be run multiple times. + */ + useFileHash?: boolean | undefined; + /** + * The MongoDB collection where the lock will be created. + */ + lockCollectionName?: string | undefined; + /** + * The value in seconds for the TTL index that will be used for the lock. Value of 0 will disable the feature. + */ + lockTtl?: number | undefined; + /** + * The module system used by the config file and migration scripts. + */ + moduleSystem?: "commonjs" | "esm" | undefined; + } +} + +/** + * Apply all pending migrations. + * @example + * ```js + * const db = await database.connect(); + * const migrated = await up(db); + * migrated.forEach(fileName => console.log('Migrated:', fileName)); + * ``` + * If an an error occurred, the promise will reject and won't continue with the rest of the pending migrations. + */ +export function up(db: mongo.Db, client: mongo.MongoClient): Promise; +/** + * Revert (only) the last applied migration. + * @example + * ```js + * const db = await database.connect(); + * const migratedDown = await down(db); + * migratedDown.forEach(fileName => console.log('Migrated Down:', fileName)); + * ``` + */ +export function down(db: mongo.Db, client: mongo.MongoClient): Promise; +export function status(db: mongo.Db): Promise; + +export interface MigrationStatus { + fileName: string; + fileHash?: string | undefined; + /** + * Either "PENDING" or a JSON date. + */ + appliedAt: string; + /** + * Timestamp shared by migrations that were applied together in the same `up`/`down` run. + */ + migrationBlock?: number | undefined; +} + +/** + * Type of `up()` and `down()` functions for migration scripts. + */ +export type MigrationFunction = (db: mongo.Db, client: mongo.MongoClient) => Promise; diff --git a/types/migrate-mongo/index.d.ts b/types/migrate-mongo/index.d.ts index f514731935642b..bd5377d1bb805c 100644 --- a/types/migrate-mongo/index.d.ts +++ b/types/migrate-mongo/index.d.ts @@ -1,112 +1 @@ -/// - -import * as mongo from "mongodb"; - -export function init(): Promise; -export function create(description: string): Promise; -export namespace database { - function connect(): Promise<{ - client: mongo.MongoClient; - db: mongo.Db & { close: mongo.MongoClient["close"] }; - }>; -} -export namespace config { - /** - * @internal - */ - const DEFAULT_CONFIG_FILE_NAME: string; - /** - * @internal - */ - function shouldExist(): Promise; - /** - * @internal - */ - function shouldNotExist(): Promise; - /** - * @internal - */ - function getConfigFilename(): string; - /** - * Read the `migrate-mongo-config.js` file. - */ - function read(): Promise; - /** - * Set the passed config object. - * @param config The config object. - */ - function set(config: Partial): void; - - interface Config { - mongodb: { - url: Parameters[0]; - databaseName?: mongo.Db["databaseName"]; - options?: mongo.MongoClientOptions; - }; - /** - * The migrations dir, can be an relative or absolute path. - */ - migrationsDir?: string | undefined; - /** - * The MongoDB collection where the applied changes are stored. - */ - changelogCollectionName: string; - /** - * The file extension to create migrations and search for in migration dir - */ - migrationFileExtension?: string | undefined; - /** - * Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine - * if the file should be run. Requires that scripts are coded to be run multiple times. - */ - useFileHash?: boolean | undefined; - } -} - -/** - * Apply all pending migrations. - * @example - * ```js - * const db = await database.connect(); - * const migrated = await up(db); - * migrated.forEach(fileName => console.log('Migrated:', fileName)); - * ``` - * If an an error occurred, the promise will reject and won't continue with the rest of the pending migrations. - */ -export function up(db: mongo.Db, client: mongo.MongoClient): Promise; -/** - * Revert (only) the last applied migration. - * @example - * ```js - * const db = await database.connect(); - * const migratedDown = await down(db); - * migratedDown.forEach(fileName => console.log('Migrated Down:', fileName)); - * ``` - */ -export function down(db: mongo.Db, client: mongo.MongoClient): Promise; -export function status(db: mongo.Db): Promise; - -export interface MigrationStatus { - fileName: string; - fileHash?: string | undefined; - /** - * Either "PENDING" or a JSON date. - */ - appliedAt: string; -} - -/** - * Type of `up()` and `down()` functions for migration scripts. - */ -export type MigrationFunction = - | ((db: mongo.Db, client: mongo.MongoClient) => Promise) - /** - * @deprecated Callbacks are supported for backwards compatibility. - * New migration scripts should be written using `Promise`s and/or `async` & `await`. It's easier to read and write. - */ - | ((db: mongo.Db, next: mongo.Callback) => void) - /** - * @deprecated Callbacks are supported for backwards compatibility. - * New migration scripts should be written using `Promise`s and/or `async` & `await`. It's easier to read and write. - */ - | ((db: mongo.Db, client: mongo.MongoClient, next: mongo.Callback) => void); +export * from "./index.cjs"; diff --git a/types/migrate-mongo/migrate-mongo-tests.ts b/types/migrate-mongo/migrate-mongo-tests.ts index 1b068840f59479..cf1502d3f59587 100644 --- a/types/migrate-mongo/migrate-mongo-tests.ts +++ b/types/migrate-mongo/migrate-mongo-tests.ts @@ -9,6 +9,10 @@ const downPromisified: MigrationFunction = async (db: Db, client: MongoClient): await db.collection("albums").updateOne({ artist: "The Doors" }, { $set: { stars: 0 } }); await db.collection("albums").updateOne({ artist: "The Beatles" }, { $set: { blacklisted: false } }); }; +// @ts-expect-error - callback-style migrations were removed in migrate-mongo@14.0.0 +const upWithCallback: MigrationFunction = (db: Db, next: (err?: Error) => void) => { + next(); +}; const customMongoConnectionSetting: Partial = { mongodb: { url: "mongodb://localhost:27017", @@ -22,6 +26,9 @@ const customMongoConnectionSetting: Partial = { changelogCollectionName: "changelog", migrationFileExtension: ".js", useFileHash: false, + lockCollectionName: "changelog_lock", + lockTtl: 0, + moduleSystem: "commonjs", }; async function test() { @@ -37,8 +44,8 @@ async function test() { const migratedDown = await down(db, client); migratedDown.forEach(fileName => console.log("Migrated Down:", fileName)); const migrationStatus = await status(db); - migrationStatus.forEach(({ fileName, fileHash, appliedAt }) => - console.log(fileName, fileHash !== undefined ? `(${fileHash})` : "", ":", appliedAt) + migrationStatus.forEach(({ fileName, fileHash, appliedAt, migrationBlock }) => + console.log(fileName, fileHash !== undefined ? `(${fileHash})` : "", ":", appliedAt, migrationBlock) ); await db.close(); } diff --git a/types/migrate-mongo/package.json b/types/migrate-mongo/package.json index 6d108a5b1b3f7b..6576052d89f41b 100644 --- a/types/migrate-mongo/package.json +++ b/types/migrate-mongo/package.json @@ -1,7 +1,14 @@ { "private": true, "name": "@types/migrate-mongo", - "version": "10.0.9999", + "version": "14.0.9999", + "type": "module", + "exports": { + ".": { + "import": "./index.d.ts", + "require": "./index.d.cts" + } + }, "projects": [ "https://github.com/seppevs/migrate-mongo#readme" ], @@ -12,10 +19,5 @@ "devDependencies": { "@types/migrate-mongo": "workspace:." }, - "owners": [ - { - "name": "Amit Beckenstein", - "githubUsername": "amitbeck" - } - ] + "owners": [] } diff --git a/types/sc-channel/v1/package.json b/types/sc-channel/v1/package.json index 643816fa227567..c0222853566535 100644 --- a/types/sc-channel/v1/package.json +++ b/types/sc-channel/v1/package.json @@ -6,7 +6,7 @@ "https://github.com/SocketCluster/sc-channel" ], "dependencies": { - "@types/component-emitter": "*" + "@types/component-emitter": "<2" }, "devDependencies": { "@types/sc-channel": "workspace:." diff --git a/types/socketcluster-client/v13/package.json b/types/socketcluster-client/v13/package.json index e2c84c271c633b..28157fbd59ae05 100644 --- a/types/socketcluster-client/v13/package.json +++ b/types/socketcluster-client/v13/package.json @@ -7,7 +7,7 @@ "http://socketcluster.io" ], "dependencies": { - "@types/component-emitter": "*", + "@types/component-emitter": "<2", "@types/sc-auth": "*", "@types/sc-channel": "^1", "@types/sc-errors": "*", diff --git a/types/socketcluster-server/v14/package.json b/types/socketcluster-server/v14/package.json index c023eef8e570fb..74bb5b4fe2db6a 100644 --- a/types/socketcluster-server/v14/package.json +++ b/types/socketcluster-server/v14/package.json @@ -6,7 +6,7 @@ "https://github.com/SocketCluster/socketcluster-server" ], "dependencies": { - "@types/component-emitter": "*", + "@types/component-emitter": "<2", "@types/jsonwebtoken": "*", "@types/sc-auth": "*", "@types/sc-broker-cluster": "^6",