@absolutejs/absolute 0.20.0-beta.181 → 0.20.0-beta.183
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/CHANGELOG.md +46 -0
- package/changelog.json +75 -0
- package/dist/angular/browser.js +2 -2
- package/dist/angular/browser.js.map +4 -4
- package/dist/angular/components/constants.js +4 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +520 -84
- package/dist/angular/index.js.map +13 -12
- package/dist/angular/server.js +520 -84
- package/dist/angular/server.js.map +13 -12
- package/dist/build.js +452 -85
- package/dist/build.js.map +18 -18
- package/dist/cli/{add-8gw9mk2b.js → add-jft96bp4.js} +9 -9
- package/dist/cli/{analyze-e57zz9x8.js → analyze-5w46d1f0.js} +3 -3
- package/dist/cli/{androidEmulatorController-vqc5m2rp.js → androidEmulatorController-gbf9r660.js} +6 -6
- package/dist/cli/{androidNativeWatcher-s03aczxv.js → androidNativeWatcher-3astrxxz.js} +6 -6
- package/dist/cli/{api-8ppxw487.js → api-zmvnvdsf.js} +8 -8
- package/dist/cli/{build-ptx5a72p.js → build-df81wh71.js} +67 -6
- package/dist/cli/{build-fz7qbdn3.js → build-mskrk9zb.js} +3 -3
- package/dist/cli/{buildDepVendor-qnwfct22.js → buildDepVendor-36d1aa7c.js} +2 -2
- package/dist/cli/{buildReactServerComponents-01s87hnk.js → buildReactServerComponents-k6amghrj.js} +5 -5
- package/dist/cli/{compile-54rb8szn.js → compile-7mjd739p.js} +10 -6
- package/dist/cli/config/server.js +37 -18
- package/dist/cli/{db-qbzjw3en.js → db-mpmj37jq.js} +2 -2
- package/dist/cli/{dev-6s6g5tnk.js → dev-9d6d7757.js} +14 -14
- package/dist/cli/{doctor-m36tmx4d.js → doctor-nng9szw6.js} +3 -3
- package/dist/cli/{emulatorDoctor-s1z5tkp7.js → emulatorDoctor-3eszsqs8.js} +5 -5
- package/dist/cli/{emulatorInstaller-pgkdswvq.js → emulatorInstaller-1r6cawm0.js} +6 -6
- package/dist/cli/{env-5nz1qm8e.js → env-bfa7vs35.js} +3 -3
- package/dist/cli/{expoDevController-018anvbm.js → expoDevController-s0msdwbm.js} +6 -6
- package/dist/cli/{generate-5vyz1s44.js → generate-xk3a7qnc.js} +8 -8
- package/dist/cli/{heapDiff-kncvdtn8.js → heapDiff-3ba8p8wf.js} +3 -3
- package/dist/cli/{htmx-26hs6jdm.js → htmx-an2x3gpx.js} +6 -6
- package/dist/cli/{index-7854xf0m.js → index-1bszxtdj.js} +1 -1
- package/dist/cli/{index-kx2d067c.js → index-3066eqr3.js} +8 -5
- package/dist/cli/{index-8khbn8qr.js → index-3a9h87v5.js} +3 -3
- package/dist/cli/{index-jkg2h10c.js → index-3dz754hk.js} +3 -3
- package/dist/cli/{index-9djrap79.js → index-3pz5sjaz.js} +1 -1
- package/dist/cli/{index-50ag35xg.js → index-3ys9tz53.js} +2 -2
- package/dist/cli/{index-6f448d7m.js → index-4ynx0cq6.js} +26 -12
- package/dist/cli/{index-btp4fyf1.js → index-785hpa2r.js} +2 -2
- package/dist/cli/{index-kes8he5s.js → index-9sqqzeq4.js} +1 -1
- package/dist/cli/{index-pr1skxen.js → index-akseq9ps.js} +1 -1
- package/dist/cli/{index-23hvdyxf.js → index-c6j2727a.js} +1 -1
- package/dist/cli/{index-pkw3jktb.js → index-eh786rj4.js} +2 -2
- package/dist/cli/{index-aemhvvwb.js → index-eydgkr7w.js} +1 -1
- package/dist/cli/{index-rz56x932.js → index-fbmfpqk8.js} +1 -1
- package/dist/cli/{index-c8rcfe5a.js → index-fy4th3n0.js} +1 -1
- package/dist/cli/{index-prza6tkp.js → index-gx6pjzzk.js} +3 -3
- package/dist/cli/{index-125cfzvn.js → index-hker5fs4.js} +2 -2
- package/dist/cli/{index-cgmp9d02.js → index-hqkcxa2p.js} +1 -1
- package/dist/cli/{index-5w8arh3m.js → index-pq4qqz0r.js} +2 -2
- package/dist/cli/{index-enbw9484.js → index-wpgsermq.js} +1 -1
- package/dist/cli/{index-0z5fgb80.js → index-wqpg377f.js} +1 -1
- package/dist/cli/{index-3sfcmb49.js → index-x7h6w6td.js} +1 -1
- package/dist/cli/{index-a6xx0p9e.js → index-ydaxsftq.js} +1 -1
- package/dist/cli/{index-3ewt17wm.js → index-yhkg5by0.js} +1 -1
- package/dist/cli/{index-aqe25w4h.js → index-zeeep92g.js} +1 -1
- package/dist/cli/index.js +32 -32
- package/dist/cli/{info-k124sh7g.js → info-5rwsbhe2.js} +4 -4
- package/dist/cli/{inspect-n6pcfvfw.js → inspect-nmwb0q5k.js} +5 -5
- package/dist/cli/{iosNativeWatcher-wdq2fvj1.js → iosNativeWatcher-7r9gnk87.js} +7 -7
- package/dist/cli/{iosSimulatorController-n97dpa8p.js → iosSimulatorController-w963vv9r.js} +7 -7
- package/dist/cli/{islands-17tfx8jf.js → islands-w9xrehpk.js} +3 -3
- package/dist/cli/{logs-shg23fbt.js → logs-m793x8a7.js} +3 -3
- package/dist/cli/{ls-0wr74w0b.js → ls-k31npd5b.js} +3 -3
- package/dist/cli/{mem-16sy1707.js → mem-jm6kw6gr.js} +5 -5
- package/dist/cli/{migrate-k91k050s.js → migrate-95bjkqkr.js} +2 -2
- package/dist/cli/{mobile-hpqpy61f.js → mobile-cpp8vfn7.js} +13 -13
- package/dist/cli/prerender-26pzynh4.js +13 -0
- package/dist/cli/{prettier-dh5fh786.js → prettier-0ws9pbc1.js} +1 -1
- package/dist/cli/{ps-pk7ncjac.js → ps-fx8mz3e3.js} +6 -6
- package/dist/cli/{psTui-50wf0b72.js → psTui-0e9c7an6.js} +7 -7
- package/dist/cli/{remoteMacProtocol-g10s408w.js → remoteMacProtocol-y7h79gr8.js} +7 -7
- package/dist/cli/{remove-x987pvd3.js → remove-xhvph8bz.js} +8 -8
- package/dist/cli/{routes-mc3ymp8t.js → routes-hq9yje5z.js} +3 -3
- package/dist/cli/{start-mbn2zgs2.js → start-5mjh9hh2.js} +5 -5
- package/dist/cli/{typecheck-ynzw2eep.js → typecheck-bvm0ndq4.js} +188 -75
- package/dist/cli/{workspace-7sbyyc59.js → workspace-xeb6abxj.js} +5 -5
- package/dist/dev/serverBootstrap.js +8 -2
- package/dist/index.js +469 -99
- package/dist/index.js.map +20 -20
- package/dist/islands/index.js +312 -23
- package/dist/islands/index.js.map +5 -5
- package/dist/mobile/index.js +2 -2
- package/dist/mobile/index.js.map +3 -3
- package/dist/react/browser.js +18 -1
- package/dist/react/browser.js.map +6 -4
- package/dist/react/components/index.js +2 -2
- package/dist/react/components/index.js.map +3 -3
- package/dist/react/index.js +370 -62
- package/dist/react/index.js.map +14 -13
- package/dist/react/server.js +51 -36
- package/dist/react/server.js.map +10 -10
- package/dist/src/angular/colocatedRouteMatch.d.ts +23 -0
- package/dist/src/angular/components/constants.d.ts +1 -0
- package/dist/src/angular/components/defer-slot-payload.d.ts +5 -0
- package/dist/src/cli/scripts/manifestKeysEditorHint.d.ts +9 -0
- package/dist/src/cli/scripts/typecheck.d.ts +1 -0
- package/dist/src/cli/scripts/typecheckDiagnostics.d.ts +41 -0
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/core/prerender.d.ts +10 -0
- package/dist/src/dev/hot/analyze.d.ts +1 -1
- package/dist/src/react/browser.d.ts +1 -0
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/svelte/lowerAwaitSlotSyntax.d.ts +23 -0
- package/dist/src/utils/pageCspNonce.d.ts +14 -0
- package/dist/src/utils/spaRouteManifest.d.ts +1 -0
- package/dist/svelte/index.js +372 -69
- package/dist/svelte/index.js.map +11 -11
- package/dist/svelte/server.js +363 -60
- package/dist/svelte/server.js.map +11 -11
- package/dist/types/manifest.d.ts +3 -2
- package/dist/types/svelte.d.ts +3 -0
- package/dist/vue/components/Image.js +2 -2
- package/dist/vue/components/Image.js.map +3 -3
- package/dist/vue/components/index.js +2 -2
- package/dist/vue/components/index.js.map +3 -3
- package/dist/vue/index.js +364 -61
- package/dist/vue/index.js.map +11 -11
- package/dist/vue/server.js +54 -40
- package/dist/vue/server.js.map +9 -9
- package/package.json +1 -1
- package/dist/cli/prerender-w65xp6h8.js +0 -11
- /package/dist/cli/{index-t8jmj8w1.js → index-fm9x6sjs.js} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** True when `routes` (a page's runtime `Routes` array) can match `path`,
|
|
2
|
+
* the request path with the base href removed. Conservative: unsure
|
|
3
|
+
* cases match. */
|
|
4
|
+
export declare const matchesAngularColocatedRoutes: (routes: unknown, path: string) => boolean;
|
|
5
|
+
/** The request path below `baseHref` (which ends in `/`), or `null` when the
|
|
6
|
+
* path isn't under it. Repeated slashes collapse first, as they do in the
|
|
7
|
+
* URL the page renders for. */
|
|
8
|
+
export declare const pathBelowBaseHref: (pathname: string, baseHref: string) => string | null;
|
|
9
|
+
type ColocatedRouteRequest = {
|
|
10
|
+
handlerProviders: unknown;
|
|
11
|
+
pageModule: Record<string, unknown>;
|
|
12
|
+
request: Request | undefined;
|
|
13
|
+
/** The Elysia route pattern that matched this request. */
|
|
14
|
+
route: string | undefined;
|
|
15
|
+
/** The base href derived from `route` for this request. */
|
|
16
|
+
runtimeBaseHref: string | null;
|
|
17
|
+
};
|
|
18
|
+
/** True only when the page's colocated routes certainly can't match this
|
|
19
|
+
* request: the page exports `routes` and the build wired them into its
|
|
20
|
+
* `providers`, the Elysia route is a wildcard mount whose base is known
|
|
21
|
+
* for this request, and no route matches the path below it. */
|
|
22
|
+
export declare const isUnmatchedColocatedRoute: ({ handlerProviders, pageModule, request, route, runtimeBaseHref }: ColocatedRouteRequest) => boolean;
|
|
23
|
+
export {};
|
|
@@ -30,6 +30,7 @@ export declare const CONFIG_DEFAULT_PORT = 4099;
|
|
|
30
30
|
export declare const HMR_UPDATE_TIMEOUT_MS = 2000;
|
|
31
31
|
export declare const HOOK_SIGNATURE_LENGTH = 12;
|
|
32
32
|
export declare const EXCLUDE_LAST_OFFSET = -1;
|
|
33
|
+
export declare const HTML_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
33
34
|
export declare const HTTP_STATUS_OK = 200;
|
|
34
35
|
export declare const HTTP_STATUS_BAD_REQUEST = 400;
|
|
35
36
|
export declare const HTTP_STATUS_NOT_FOUND = 404;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export type AngularDeferSlotPayload = {
|
|
2
2
|
data?: Record<string, string>;
|
|
3
|
+
/** Size-accounting only: the streaming pipeline measures it for
|
|
4
|
+
* `maxSlotHtmlSizeBytes` and slot metrics. Never insert it into the DOM;
|
|
5
|
+
* the slot renders from `data` through Angular's own escaping, and the
|
|
6
|
+
* stream-swap runtime deliberately skips `angular-defer` payloads.
|
|
7
|
+
* Interpolated values in it are HTML-escaped at build time. */
|
|
3
8
|
html: string;
|
|
4
9
|
kind: 'angular-defer';
|
|
5
10
|
state?: 'error' | 'resolved';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type TsconfigLists = {
|
|
2
|
+
exclude?: unknown;
|
|
3
|
+
files?: unknown;
|
|
4
|
+
include?: unknown;
|
|
5
|
+
};
|
|
6
|
+
/** The note, or null when tsconfig.json (its `include`, `files` and
|
|
7
|
+
* `exclude`) already lists the declaration. */
|
|
8
|
+
export declare const manifestKeysEditorHint: (config: TsconfigLists) => string | null;
|
|
9
|
+
export {};
|
|
@@ -28,5 +28,6 @@ export declare const svelteCheckIncludes: (projectRoot: string, configuredDirs:
|
|
|
28
28
|
export declare const serverEntryPaths: (targets: readonly AbsoluteServiceConfig[]) => string[];
|
|
29
29
|
export declare const dedupeAngularResult: (results: CheckerResult[], cacheDir: string) => CheckerResult[];
|
|
30
30
|
export declare const dedupeVueResult: (results: CheckerResult[]) => CheckerResult[];
|
|
31
|
+
export declare const dedupeSvelteResult: (results: CheckerResult[], read?: (file: string) => string | null) => CheckerResult[];
|
|
31
32
|
export declare const typecheck: (configPath?: string) => Promise<void>;
|
|
32
33
|
export {};
|
|
@@ -15,3 +15,44 @@ export declare const withoutReported: (output: string, reported: ReadonlySet<str
|
|
|
15
15
|
output: string;
|
|
16
16
|
remaining: number;
|
|
17
17
|
};
|
|
18
|
+
type SveltePosition = {
|
|
19
|
+
character: number;
|
|
20
|
+
line: number;
|
|
21
|
+
};
|
|
22
|
+
export type SvelteCheckDiagnostic = {
|
|
23
|
+
code?: number | string;
|
|
24
|
+
end: SveltePosition;
|
|
25
|
+
filename: string;
|
|
26
|
+
message: string;
|
|
27
|
+
source?: string;
|
|
28
|
+
start: SveltePosition;
|
|
29
|
+
type: 'ERROR' | 'WARNING';
|
|
30
|
+
};
|
|
31
|
+
/** svelte-check's machine-verbose output: its errors, its failures, and any
|
|
32
|
+
* other line it (or node) printed, kept verbatim. Warnings are dropped:
|
|
33
|
+
* `--threshold error` keeps them out of the output, and this keeps them
|
|
34
|
+
* out of the count if one ever gets through. */
|
|
35
|
+
export declare const parseSvelteCheckOutput: (output: string) => {
|
|
36
|
+
diagnostics: SvelteCheckDiagnostic[];
|
|
37
|
+
failures: string[];
|
|
38
|
+
other: string[];
|
|
39
|
+
};
|
|
40
|
+
/** The `file:line:column:code` key of a TypeScript diagnostic, 1-based like
|
|
41
|
+
* the plain checker's; null for the Svelte compiler's own diagnostics,
|
|
42
|
+
* which no other checker reports. */
|
|
43
|
+
export declare const svelteDiagnosticKey: (diagnostic: SvelteCheckDiagnostic, cwd?: string) => string | null;
|
|
44
|
+
/** svelte-check's errors in tsc's pretty shape: `file:line:col - error
|
|
45
|
+
* TS2322: message`, then the line with the span underlined. */
|
|
46
|
+
export declare const formatSvelteDiagnostics: (diagnostics: readonly SvelteCheckDiagnostic[], readSource: (file: string) => string | null, cwd?: string) => string;
|
|
47
|
+
/**
|
|
48
|
+
* svelte-check's output, read and rendered for people, without the errors
|
|
49
|
+
* the plain checker already reported (`reported`, from diagnosticKeys).
|
|
50
|
+
* A failure or any unrecognised line is kept, and keeps the run failing.
|
|
51
|
+
* `remaining` is 0 when everything svelte-check found is already on screen.
|
|
52
|
+
*/
|
|
53
|
+
export declare const svelteCheckReport: (output: string, reported: ReadonlySet<string>, readSource: (file: string) => string | null, cwd?: string) => {
|
|
54
|
+
dropped: number;
|
|
55
|
+
output: string;
|
|
56
|
+
remaining: number;
|
|
57
|
+
};
|
|
58
|
+
export {};
|
package/dist/src/constants.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export declare const CONFIG_DEFAULT_PORT = 4099;
|
|
|
30
30
|
export declare const HMR_UPDATE_TIMEOUT_MS = 2000;
|
|
31
31
|
export declare const HOOK_SIGNATURE_LENGTH = 12;
|
|
32
32
|
export declare const EXCLUDE_LAST_OFFSET = -1;
|
|
33
|
+
export declare const HTML_CONTENT_TYPE = "text/html; charset=utf-8";
|
|
33
34
|
export declare const HTTP_STATUS_OK = 200;
|
|
34
35
|
export declare const HTTP_STATUS_BAD_REQUEST = 400;
|
|
35
36
|
export declare const HTTP_STATUS_NOT_FOUND = 404;
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { StaticConfig } from '../../types/build';
|
|
2
|
+
export type PrerenderFailure = {
|
|
3
|
+
/** Why the route couldn't be pre-rendered */
|
|
4
|
+
reason: string;
|
|
5
|
+
route: string;
|
|
6
|
+
};
|
|
2
7
|
export type PrerenderResult = {
|
|
3
8
|
/** Map of route path → rendered HTML file path on disk */
|
|
4
9
|
routes: Map<string, string>;
|
|
5
10
|
/** Directory where pre-rendered files are stored */
|
|
6
11
|
dir: string;
|
|
12
|
+
/** Routes that couldn't be pre-rendered; they render per request */
|
|
13
|
+
failures: PrerenderFailure[];
|
|
7
14
|
};
|
|
8
15
|
type LogFn = (message: string) => void;
|
|
9
16
|
/** Header used to bypass the prerender cache during ISR re-renders */
|
|
@@ -17,6 +24,9 @@ export declare const readTimestamp: (htmlPath: string) => number;
|
|
|
17
24
|
* with the bypass header so it hits SSR instead of the cache.
|
|
18
25
|
*/
|
|
19
26
|
export declare const rerenderRoute: (route: string, port: number, prerenderDir: string) => Promise<boolean>;
|
|
27
|
+
/** The line `absolute start` and `absolute compile` print, once, for a
|
|
28
|
+
* route that couldn't be pre-rendered. */
|
|
29
|
+
export declare const formatPrerenderFailure: ({ reason, route }: PrerenderFailure) => string;
|
|
20
30
|
/**
|
|
21
31
|
* Pre-render routes by fetching them from a running server and saving the HTML to disk.
|
|
22
32
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as TS from 'typescript';
|
|
2
|
-
export declare const ANALYZER_VERSION =
|
|
2
|
+
export declare const ANALYZER_VERSION = 3;
|
|
3
3
|
export type ExportKind = 'class' | 'function' | 'live' | 'value';
|
|
4
4
|
export type ImportUse = {
|
|
5
5
|
/** Resolved module path the binding comes from. */
|
|
@@ -4,3 +4,4 @@ export { handleReactServerPageRequest } from './serverComponents/pageHandler';
|
|
|
4
4
|
export { Island } from './Island';
|
|
5
5
|
export { createTypedIsland } from './createIsland';
|
|
6
6
|
export { useIslandStore } from './hooks/useIslandStore';
|
|
7
|
+
export { getCspNonce } from '../utils/pageCspNonce';
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
export declare const AWAIT_STREAM_DIRECTIVE = "<!-- absolute:stream -->";
|
|
2
|
+
export declare const AWAIT_SCOPE_CLASS_PLACEHOLDER = "__absoluteAwaitScopeClass__";
|
|
3
|
+
export declare const AWAIT_HTML_HELPERS_SOURCE: string;
|
|
4
|
+
/** Puts `scopeClass` (or nothing, for a component without a `<style>`)
|
|
5
|
+
* where the lowering left the scoped-CSS class placeholder. */
|
|
6
|
+
export declare const applyAwaitScopeClass: (code: string, scopeClass: string) => string;
|
|
7
|
+
/** A `cssHash` compile option that hashes exactly as Svelte's default does
|
|
8
|
+
* (svelte/src/compiler/validate-options.js) and remembers the class, plus
|
|
9
|
+
* `apply`, which writes that class into the compiled code of a lowered
|
|
10
|
+
* component. Svelte only calls `cssHash` for a component with a `<style>`,
|
|
11
|
+
* so without one the placeholder becomes an empty string. One capture per
|
|
12
|
+
* `compile` call. */
|
|
13
|
+
export declare const createAwaitScopeClassCapture: () => {
|
|
14
|
+
apply: (code: string) => string;
|
|
15
|
+
cssHash: (args: {
|
|
16
|
+
name: string;
|
|
17
|
+
filename: string;
|
|
18
|
+
css: string;
|
|
19
|
+
hash: (input: string) => string;
|
|
20
|
+
}) => string;
|
|
21
|
+
};
|
|
22
|
+
/** Turns a branch's markup into a JS template literal that renders it,
|
|
23
|
+
* escaping every expression as Svelte's SSR would. */
|
|
24
|
+
export declare const branchMarkupToTemplateLiteral: (markup: string, branch?: string, filePath?: string) => string;
|
|
2
25
|
/** Lowers every `{#await}` marked with `AWAIT_STREAM_DIRECTIVE` to a
|
|
3
26
|
* streaming slot and leaves every other block to Svelte. Throws for a
|
|
4
27
|
* marked block it can't stream. */
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** This page's Content-Security-Policy nonce, for the inline `<script>` and
|
|
2
|
+
* `<style>` tags a page component writes itself:
|
|
3
|
+
*
|
|
4
|
+
* ```tsx
|
|
5
|
+
* <script nonce={getCspNonce()} dangerouslySetInnerHTML={{ __html: code }} />
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* Safe in code that also runs in the browser. During SSR it is the
|
|
9
|
+
* request's nonce (the one in the policy header); in the browser it is the
|
|
10
|
+
* same value, read back from the page's own scripts, so the component
|
|
11
|
+
* renders the same nonce on both sides. Undefined without
|
|
12
|
+
* `secureHeaders()`. In a route handler, `cspNonce` in the context is the
|
|
13
|
+
* same value. */
|
|
14
|
+
export declare const getCspNonce: () => string | undefined;
|
|
@@ -9,3 +9,4 @@ export declare const getObservedSpaRoutes: () => RuntimeSpaHost[];
|
|
|
9
9
|
export declare const setObservedSpaRoutes: (hosts: RuntimeSpaHost[]) => void;
|
|
10
10
|
export declare const isKnownSpaRoute: (framework: keyof ConventionsMap, pageName: string, request: Request | undefined) => boolean;
|
|
11
11
|
export declare const renderSpaNotFound: (framework: keyof ConventionsMap, pageName: string, request: Request | undefined) => Promise<Response | null>;
|
|
12
|
+
export declare const renderSpaNotFoundResponse: (request: Request | undefined) => Promise<Response>;
|