alien-middleware 0.8.2 → 0.8.3
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.
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { Any, noop } from 'radashi';
|
|
2
2
|
import { AdapterRequestContext, HattipHandler } from '@hattip/core';
|
|
3
3
|
|
|
4
|
+
type Eval<T> = {} & {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
};
|
|
7
|
+
type Keys<T> = T extends any ? keyof T : never;
|
|
8
|
+
type IsOptional<T, K> = K extends keyof T ? T[K] extends Required<T>[K] ? false : true : true;
|
|
9
|
+
type PossiblyUndefined<T, K extends keyof T> = undefined extends Required<T>[K] ? true : false;
|
|
10
|
+
type MergeProperty<TSource, TOverrides, K> = (K extends keyof TOverrides ? PossiblyUndefined<TOverrides, K> extends true ? TOverrides[K] : Exclude<TOverrides[K], undefined> : never) | (IsOptional<TOverrides, K> extends true ? K extends keyof TSource ? TSource[K] : undefined : never) extends infer TProperty ? TProperty : never;
|
|
11
|
+
/**
|
|
12
|
+
* Merge a union of object types (possibly undefined) into a single object type.
|
|
13
|
+
*
|
|
14
|
+
* **FIXME:** Optional properties resolve as `foo: Foo | undefined` instead of `foo?: Foo`.
|
|
15
|
+
*/
|
|
16
|
+
type Merge<TSource extends object, TOverrides extends object | undefined> = {} & Eval<Omit<TSource, Keys<TOverrides>> & {
|
|
17
|
+
[K in Keys<TOverrides>]: TOverrides extends any ? MergeProperty<TSource, TOverrides, K> : never;
|
|
18
|
+
}>;
|
|
19
|
+
|
|
4
20
|
type RequestEnvPlugin = {
|
|
5
21
|
/**
|
|
6
22
|
* Add type-safe environment variables. These are accessed with the `env()`
|
|
@@ -72,16 +88,18 @@ type Middleware<TEnv extends object = any, TProperties extends object = any, TPl
|
|
|
72
88
|
* Extract a `Middleware` type from a `MiddlewareChain` type.
|
|
73
89
|
*/
|
|
74
90
|
type ExtractMiddleware<T extends MiddlewareChain> = Middleware<Env<T>, Properties<T>, Platform<T>>;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
type
|
|
91
|
+
/**
|
|
92
|
+
* Merge a request plugin into a middleware chain.
|
|
93
|
+
*/
|
|
94
|
+
type ApplyMiddlewareResult<TParent extends MiddlewareChain, TResult> = {} & MiddlewareTypes<Merge<Env<TParent>, TResult extends {
|
|
95
|
+
env: infer TEnv extends object | undefined;
|
|
96
|
+
} ? TEnv : undefined>, Merge<Properties<TParent>, TResult extends RequestPlugin ? Omit<TResult, keyof RequestEnvPlugin> : undefined>>;
|
|
79
97
|
/**
|
|
80
98
|
* This applies a middleware to a chain. If the type `TMiddleware` is itself a
|
|
81
99
|
* chain, it's treated as a nested chain, which won't leak its plugins into the
|
|
82
100
|
* parent chain.
|
|
83
101
|
*/
|
|
84
|
-
type ApplyMiddleware<TFirst extends MiddlewareChain, TSecond extends Middleware<Env<TFirst>, Properties<TFirst>, Platform<TFirst>>> = RequestHandler<Inputs<TFirst>, TSecond extends MiddlewareChain ? MiddlewareTypes<Merge<Env<TFirst>, Env<TSecond>>, Merge<Properties<TFirst>, Properties<TSecond>>> : TSecond extends (...args: any[]) => Awaitable<infer TResult> ?
|
|
102
|
+
type ApplyMiddleware<TFirst extends MiddlewareChain, TSecond extends Middleware<Env<TFirst>, Properties<TFirst>, Platform<TFirst>>> = RequestHandler<Inputs<TFirst>, TSecond extends MiddlewareChain ? MiddlewareTypes<Merge<Env<TFirst>, Env<TSecond>>, Merge<Properties<TFirst>, Properties<TSecond>>> : TSecond extends (...args: any[]) => Awaitable<infer TResult> ? ApplyMiddlewareResult<TFirst, TResult> : Current<TFirst>, Platform<TFirst>>;
|
|
85
103
|
type EmptyMiddlewareChain = MiddlewareChain<MiddlewareTypes<{}, {}>, MiddlewareTypes<{}, {}>, unknown>;
|
|
86
104
|
type ApplyFirstMiddleware<T extends Middleware> = T extends MiddlewareChain ? T : ApplyMiddleware<EmptyMiddlewareChain, T>;
|
|
87
105
|
type RouteMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import 'radashi';
|
|
2
|
-
export { A as ApplyMiddleware, e as ExtractMiddleware, f as Middleware, M as MiddlewareChain, a as MiddlewareContext, g as RequestContext, h as RequestHandler, i as RequestMiddleware, j as RequestPlugin, k as ResponseMiddleware, d as chain } from './index-
|
|
2
|
+
export { A as ApplyMiddleware, e as ExtractMiddleware, f as Middleware, M as MiddlewareChain, a as MiddlewareContext, g as RequestContext, h as RequestHandler, i as RequestMiddleware, j as RequestPlugin, k as ResponseMiddleware, d as chain } from './index-BbUg2fQl.js';
|
|
3
3
|
import '@hattip/core';
|
package/dist/router.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { InferParams } from 'pathic';
|
|
2
|
-
import { M as MiddlewareChain, E as EmptyMiddlewareChain, a as MiddlewareContext, R as RouteHandler, b as RouteMethod } from './index-
|
|
3
|
-
export { c as RouterContext } from './index-
|
|
2
|
+
import { M as MiddlewareChain, E as EmptyMiddlewareChain, a as MiddlewareContext, R as RouteHandler, b as RouteMethod } from './index-BbUg2fQl.js';
|
|
3
|
+
export { c as RouterContext } from './index-BbUg2fQl.js';
|
|
4
4
|
import 'radashi';
|
|
5
5
|
import '@hattip/core';
|
|
6
6
|
|