expo-server 0.0.0 → 1.0.0
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/README.md +1 -0
- package/build/cjs/ImmutableRequest.d.ts +61 -0
- package/build/cjs/ImmutableRequest.js +160 -0
- package/build/cjs/ImmutableRequest.js.map +1 -0
- package/build/cjs/global.types.d.ts +13 -0
- package/build/cjs/global.types.js +3 -0
- package/build/cjs/global.types.js.map +1 -0
- package/build/cjs/index.d.ts +2 -0
- package/build/cjs/index.js +18 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/manifest.d.ts +27 -0
- package/build/cjs/manifest.js +3 -0
- package/build/cjs/manifest.js.map +1 -0
- package/build/cjs/middleware/rsc.d.ts +36 -0
- package/build/cjs/middleware/rsc.js +124 -0
- package/build/cjs/middleware/rsc.js.map +1 -0
- package/build/cjs/private.d.ts +2 -0
- package/build/cjs/private.js +6 -0
- package/build/cjs/private.js.map +1 -0
- package/build/cjs/runtime/api.d.ts +39 -0
- package/build/cjs/runtime/api.js +73 -0
- package/build/cjs/runtime/api.js.map +1 -0
- package/build/cjs/runtime/error.d.ts +36 -0
- package/build/cjs/runtime/error.js +86 -0
- package/build/cjs/runtime/error.js.map +1 -0
- package/build/cjs/runtime/index.d.ts +10 -0
- package/build/cjs/runtime/index.js +77 -0
- package/build/cjs/runtime/index.js.map +1 -0
- package/build/cjs/runtime/scope.d.ts +15 -0
- package/build/cjs/runtime/scope.js +12 -0
- package/build/cjs/runtime/scope.js.map +1 -0
- package/build/cjs/types.d.ts +57 -0
- package/build/cjs/types.js +3 -0
- package/build/cjs/types.js.map +1 -0
- package/build/cjs/utils/createReadableStreamFromReadable.d.ts +15 -0
- package/build/cjs/utils/createReadableStreamFromReadable.js +97 -0
- package/build/cjs/utils/createReadableStreamFromReadable.js.map +1 -0
- package/build/cjs/utils/importMetaRegistry.d.ts +3 -0
- package/build/cjs/utils/importMetaRegistry.js +30 -0
- package/build/cjs/utils/importMetaRegistry.js.map +1 -0
- package/build/cjs/utils/matchers.d.ts +12 -0
- package/build/cjs/utils/matchers.js +76 -0
- package/build/cjs/utils/matchers.js.map +1 -0
- package/build/cjs/utils/middleware.d.ts +9 -0
- package/build/cjs/utils/middleware.js +82 -0
- package/build/cjs/utils/middleware.js.map +1 -0
- package/build/cjs/vendor/abstract.d.ts +40 -0
- package/build/cjs/vendor/abstract.js +245 -0
- package/build/cjs/vendor/abstract.js.map +1 -0
- package/build/cjs/vendor/bun.d.ts +10 -0
- package/build/cjs/vendor/bun.js +22 -0
- package/build/cjs/vendor/bun.js.map +1 -0
- package/build/cjs/vendor/eas.d.ts +10 -0
- package/build/cjs/vendor/eas.js +28 -0
- package/build/cjs/vendor/eas.js.map +1 -0
- package/build/cjs/vendor/environment/common.d.ts +14 -0
- package/build/cjs/vendor/environment/common.js +66 -0
- package/build/cjs/vendor/environment/common.js.map +1 -0
- package/build/cjs/vendor/environment/node.d.ts +14 -0
- package/build/cjs/vendor/environment/node.js +55 -0
- package/build/cjs/vendor/environment/node.js.map +1 -0
- package/build/cjs/vendor/environment/workerd.d.ts +18 -0
- package/build/cjs/vendor/environment/workerd.js +72 -0
- package/build/cjs/vendor/environment/workerd.js.map +1 -0
- package/build/cjs/vendor/express.d.ts +14 -0
- package/build/cjs/vendor/express.js +100 -0
- package/build/cjs/vendor/express.js.map +1 -0
- package/build/cjs/vendor/http.d.ts +15 -0
- package/build/cjs/vendor/http.js +103 -0
- package/build/cjs/vendor/http.js.map +1 -0
- package/build/cjs/vendor/netlify.d.ts +15 -0
- package/build/cjs/vendor/netlify.js +46 -0
- package/build/cjs/vendor/netlify.js.map +1 -0
- package/build/cjs/vendor/vercel.d.ts +13 -0
- package/build/cjs/vendor/vercel.js +109 -0
- package/build/cjs/vendor/vercel.js.map +1 -0
- package/build/cjs/vendor/workerd.d.ts +11 -0
- package/build/cjs/vendor/workerd.js +22 -0
- package/build/cjs/vendor/workerd.js.map +1 -0
- package/build/mjs/ImmutableRequest.d.ts +61 -0
- package/build/mjs/ImmutableRequest.js +155 -0
- package/build/mjs/ImmutableRequest.js.map +1 -0
- package/build/mjs/global.types.d.ts +13 -0
- package/build/mjs/global.types.js +2 -0
- package/build/mjs/global.types.js.map +1 -0
- package/build/mjs/index.d.ts +2 -0
- package/build/mjs/index.js +2 -0
- package/build/mjs/index.js.map +1 -0
- package/build/mjs/manifest.d.ts +27 -0
- package/build/mjs/manifest.js +2 -0
- package/build/mjs/manifest.js.map +1 -0
- package/build/mjs/middleware/rsc.d.ts +36 -0
- package/build/mjs/middleware/rsc.js +119 -0
- package/build/mjs/middleware/rsc.js.map +1 -0
- package/build/mjs/private.d.ts +2 -0
- package/build/mjs/private.js +2 -0
- package/build/mjs/private.js.map +1 -0
- package/build/mjs/runtime/api.d.ts +39 -0
- package/build/mjs/runtime/api.js +65 -0
- package/build/mjs/runtime/api.js.map +1 -0
- package/build/mjs/runtime/error.d.ts +36 -0
- package/build/mjs/runtime/error.js +81 -0
- package/build/mjs/runtime/error.js.map +1 -0
- package/build/mjs/runtime/index.d.ts +10 -0
- package/build/mjs/runtime/index.js +74 -0
- package/build/mjs/runtime/index.js.map +1 -0
- package/build/mjs/runtime/scope.d.ts +15 -0
- package/build/mjs/runtime/scope.js +9 -0
- package/build/mjs/runtime/scope.js.map +1 -0
- package/build/mjs/types.d.ts +57 -0
- package/build/mjs/types.js +2 -0
- package/build/mjs/types.js.map +1 -0
- package/build/mjs/utils/createReadableStreamFromReadable.d.ts +15 -0
- package/build/mjs/utils/createReadableStreamFromReadable.js +93 -0
- package/build/mjs/utils/createReadableStreamFromReadable.js.map +1 -0
- package/build/mjs/utils/importMetaRegistry.d.ts +3 -0
- package/build/mjs/utils/importMetaRegistry.js +27 -0
- package/build/mjs/utils/importMetaRegistry.js.map +1 -0
- package/build/mjs/utils/matchers.d.ts +12 -0
- package/build/mjs/utils/matchers.js +69 -0
- package/build/mjs/utils/matchers.js.map +1 -0
- package/build/mjs/utils/middleware.d.ts +9 -0
- package/build/mjs/utils/middleware.js +79 -0
- package/build/mjs/utils/middleware.js.map +1 -0
- package/build/mjs/vendor/abstract.d.ts +40 -0
- package/build/mjs/vendor/abstract.js +240 -0
- package/build/mjs/vendor/abstract.js.map +1 -0
- package/build/mjs/vendor/bun.d.ts +10 -0
- package/build/mjs/vendor/bun.js +17 -0
- package/build/mjs/vendor/bun.js.map +1 -0
- package/build/mjs/vendor/eas.d.ts +10 -0
- package/build/mjs/vendor/eas.js +23 -0
- package/build/mjs/vendor/eas.js.map +1 -0
- package/build/mjs/vendor/environment/common.d.ts +14 -0
- package/build/mjs/vendor/environment/common.js +63 -0
- package/build/mjs/vendor/environment/common.js.map +1 -0
- package/build/mjs/vendor/environment/node.d.ts +14 -0
- package/build/mjs/vendor/environment/node.js +48 -0
- package/build/mjs/vendor/environment/node.js.map +1 -0
- package/build/mjs/vendor/environment/workerd.d.ts +18 -0
- package/build/mjs/vendor/environment/workerd.js +68 -0
- package/build/mjs/vendor/environment/workerd.js.map +1 -0
- package/build/mjs/vendor/express.d.ts +14 -0
- package/build/mjs/vendor/express.js +92 -0
- package/build/mjs/vendor/express.js.map +1 -0
- package/build/mjs/vendor/http.d.ts +15 -0
- package/build/mjs/vendor/http.js +95 -0
- package/build/mjs/vendor/http.js.map +1 -0
- package/build/mjs/vendor/netlify.d.ts +15 -0
- package/build/mjs/vendor/netlify.js +41 -0
- package/build/mjs/vendor/netlify.js.map +1 -0
- package/build/mjs/vendor/vercel.d.ts +13 -0
- package/build/mjs/vendor/vercel.js +101 -0
- package/build/mjs/vendor/vercel.js.map +1 -0
- package/build/mjs/vendor/workerd.d.ts +11 -0
- package/build/mjs/vendor/workerd.js +17 -0
- package/build/mjs/vendor/workerd.js.map +1 -0
- package/package.json +68 -7
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
import { pipeline } from 'node:stream/promises';
|
|
4
|
+
import { createRequestHandler as createExpoHandler } from './abstract';
|
|
5
|
+
import { createNodeEnv, createNodeRequestScope } from './environment/node';
|
|
6
|
+
export { ExpoError } from './abstract';
|
|
7
|
+
const STORE = new AsyncLocalStorage();
|
|
8
|
+
/**
|
|
9
|
+
* Returns a request handler for Express that serves the response using Remix.
|
|
10
|
+
*/
|
|
11
|
+
export function createRequestHandler(params, setup) {
|
|
12
|
+
const run = createNodeRequestScope(STORE, params);
|
|
13
|
+
const onRequest = createExpoHandler({
|
|
14
|
+
...createNodeEnv(params),
|
|
15
|
+
...setup,
|
|
16
|
+
});
|
|
17
|
+
return async (req, res, next) => {
|
|
18
|
+
if (!req?.url || !req.method) {
|
|
19
|
+
return next();
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const request = convertRequest(req, res);
|
|
23
|
+
const response = await run(onRequest, request);
|
|
24
|
+
await respond(res, response);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
// Express doesn't support async functions, so we have to pass along the
|
|
28
|
+
// error manually using next().
|
|
29
|
+
next(error);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function convertHeaders(requestHeaders) {
|
|
34
|
+
const headers = new Headers();
|
|
35
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
36
|
+
if (values) {
|
|
37
|
+
if (Array.isArray(values)) {
|
|
38
|
+
for (const value of values) {
|
|
39
|
+
headers.append(key, value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
headers.set(key, values);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return headers;
|
|
48
|
+
}
|
|
49
|
+
function convertRawHeaders(requestHeaders) {
|
|
50
|
+
const headers = new Headers();
|
|
51
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
52
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
53
|
+
}
|
|
54
|
+
return headers;
|
|
55
|
+
}
|
|
56
|
+
export function convertRequest(req, res) {
|
|
57
|
+
const url = new URL(`${req.protocol}://${req.get('host')}${req.url}`);
|
|
58
|
+
// Abort action/loaders once we can no longer write a response
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
res.on('close', () => controller.abort());
|
|
61
|
+
const init = {
|
|
62
|
+
method: req.method,
|
|
63
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
64
|
+
// Cast until reason/throwIfAborted added
|
|
65
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
66
|
+
signal: controller.signal,
|
|
67
|
+
};
|
|
68
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
69
|
+
init.body = Readable.toWeb(req);
|
|
70
|
+
init.duplex = 'half';
|
|
71
|
+
}
|
|
72
|
+
return new Request(url.href, init);
|
|
73
|
+
}
|
|
74
|
+
export async function respond(res, expoRes) {
|
|
75
|
+
res.statusMessage = expoRes.statusText;
|
|
76
|
+
res.status(expoRes.status);
|
|
77
|
+
if (typeof res.setHeaders === 'function') {
|
|
78
|
+
res.setHeaders(expoRes.headers);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (const [key, value] of expoRes.headers.entries()) {
|
|
82
|
+
res.appendHeader(key, value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (expoRes.body) {
|
|
86
|
+
await pipeline(Readable.fromWeb(expoRes.body), res);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
res.end();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/vendor/express.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
import { type RequestHandlerParams } from './abstract';
|
|
3
|
+
export { ExpoError } from './abstract';
|
|
4
|
+
type NextFunction = (err?: any) => void;
|
|
5
|
+
export type RequestHandler = (req: http.IncomingMessage, res: http.ServerResponse, next: NextFunction) => Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Returns a request handler for http that serves the response using Remix.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createRequestHandler(params: {
|
|
10
|
+
build: string;
|
|
11
|
+
environment?: string | null;
|
|
12
|
+
}, setup?: Partial<RequestHandlerParams>): RequestHandler;
|
|
13
|
+
export declare function convertRequest(req: http.IncomingMessage, res: http.ServerResponse): Request;
|
|
14
|
+
export declare function convertHeaders(requestHeaders: http.IncomingHttpHeaders): Headers;
|
|
15
|
+
export declare function respond(res: http.ServerResponse, expoRes: Response): Promise<void>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
import { pipeline } from 'node:stream/promises';
|
|
4
|
+
import { createRequestHandler as createExpoHandler } from './abstract';
|
|
5
|
+
import { createNodeEnv, createNodeRequestScope } from './environment/node';
|
|
6
|
+
export { ExpoError } from './abstract';
|
|
7
|
+
const STORE = new AsyncLocalStorage();
|
|
8
|
+
/**
|
|
9
|
+
* Returns a request handler for http that serves the response using Remix.
|
|
10
|
+
*/
|
|
11
|
+
export function createRequestHandler(params, setup) {
|
|
12
|
+
const run = createNodeRequestScope(STORE, params);
|
|
13
|
+
const nodeEnv = createNodeEnv(params);
|
|
14
|
+
const onRequest = createExpoHandler({
|
|
15
|
+
...nodeEnv,
|
|
16
|
+
...setup,
|
|
17
|
+
getRoutesManifest: setup?.getRoutesManifest ?? nodeEnv.getRoutesManifest,
|
|
18
|
+
});
|
|
19
|
+
return async (req, res, next) => {
|
|
20
|
+
if (!req?.url || !req.method) {
|
|
21
|
+
return next();
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const request = convertRequest(req, res);
|
|
25
|
+
const response = await run(onRequest, request);
|
|
26
|
+
await respond(res, response);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
// http doesn't support async functions, so we have to pass along the
|
|
30
|
+
// error manually using next().
|
|
31
|
+
next(error);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function convertRawHeaders(requestHeaders) {
|
|
36
|
+
const headers = new Headers();
|
|
37
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
38
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
39
|
+
}
|
|
40
|
+
return headers;
|
|
41
|
+
}
|
|
42
|
+
// Convert an http request to an expo request
|
|
43
|
+
export function convertRequest(req, res) {
|
|
44
|
+
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
45
|
+
// Abort action/loaders once we can no longer write a response
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
res.on('close', () => controller.abort());
|
|
48
|
+
const init = {
|
|
49
|
+
method: req.method,
|
|
50
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
51
|
+
// Cast until reason/throwIfAborted added
|
|
52
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
53
|
+
signal: controller.signal,
|
|
54
|
+
};
|
|
55
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
56
|
+
init.body = Readable.toWeb(req);
|
|
57
|
+
init.duplex = 'half';
|
|
58
|
+
}
|
|
59
|
+
return new Request(url.href, init);
|
|
60
|
+
}
|
|
61
|
+
export function convertHeaders(requestHeaders) {
|
|
62
|
+
const headers = new Headers();
|
|
63
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
64
|
+
if (values) {
|
|
65
|
+
if (Array.isArray(values)) {
|
|
66
|
+
for (const value of values) {
|
|
67
|
+
headers.append(key, value);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
headers.set(key, values);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return headers;
|
|
76
|
+
}
|
|
77
|
+
export async function respond(res, expoRes) {
|
|
78
|
+
res.statusMessage = expoRes.statusText;
|
|
79
|
+
res.statusCode = expoRes.status;
|
|
80
|
+
if (typeof res.setHeaders === 'function') {
|
|
81
|
+
res.setHeaders(expoRes.headers);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
for (const [key, value] of expoRes.headers.entries()) {
|
|
85
|
+
res.appendHeader(key, value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (expoRes.body) {
|
|
89
|
+
await pipeline(Readable.fromWeb(expoRes.body), res);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
res.end();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,IAAI,iBAAiB,EAA6B,MAAM,YAAY,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAUvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAAqC;IAErC,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,OAAO;QACV,GAAG,KAAK;QACR,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;KACzE,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,GAAyB,EAAE,GAAwB,EAAE,IAAkB,EAAE,EAAE;QACvF,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qEAAqE;YACrE,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,cAAiC;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,cAAc,CAAC,GAAyB,EAAE,GAAwB;IAChF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D,8DAA8D;IAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAgB;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,yCAAyC;QACzC,2DAA2D;QAC3D,MAAM,EAAE,UAAU,CAAC,MAA+B;KACnD,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,cAAwC;IACrE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAwB,EAAE,OAAiB;IACvE,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAA0B,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { ExpoError } from './abstract';
|
|
2
|
+
declare const scopeSymbol: unique symbol;
|
|
3
|
+
interface NetlifyContext {
|
|
4
|
+
deploy?: {
|
|
5
|
+
context?: string | null;
|
|
6
|
+
};
|
|
7
|
+
site?: {
|
|
8
|
+
url?: string | null;
|
|
9
|
+
};
|
|
10
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
11
|
+
[scopeSymbol]?: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare function createRequestHandler(params: {
|
|
14
|
+
build: string;
|
|
15
|
+
}): (req: Request, ctx?: NetlifyContext) => Promise<Response>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createRequestHandler as createExpoHandler } from './abstract';
|
|
2
|
+
import { createRequestScope } from '../runtime';
|
|
3
|
+
import { createNodeEnv } from './environment/node';
|
|
4
|
+
export { ExpoError } from './abstract';
|
|
5
|
+
const scopeSymbol = Symbol.for('expoServerScope');
|
|
6
|
+
/** @see https://docs.netlify.com/build/functions/api/#netlify-specific-context-object */
|
|
7
|
+
function getContext() {
|
|
8
|
+
const fromGlobal = globalThis;
|
|
9
|
+
if (!fromGlobal.Netlify) {
|
|
10
|
+
throw new Error('"globalThis.Netlify" is missing but expected.\n' +
|
|
11
|
+
'- Are you using Netlify Server Functions 1.0 instead of 2.0?\n' +
|
|
12
|
+
'- Make sure your Netlify function has a default export instead of exporting "handler".');
|
|
13
|
+
}
|
|
14
|
+
return fromGlobal.Netlify?.context ?? {};
|
|
15
|
+
}
|
|
16
|
+
// Netlify already has an async-scoped context in NetlifyContext, so we can attach
|
|
17
|
+
// our scope context to this object
|
|
18
|
+
const STORE = {
|
|
19
|
+
getStore: () => getContext()[scopeSymbol],
|
|
20
|
+
run(scope, runner, ...args) {
|
|
21
|
+
getContext()[scopeSymbol] = scope;
|
|
22
|
+
return runner(...args);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export function createRequestHandler(params) {
|
|
26
|
+
const makeRequestAPISetup = (request, context) => ({
|
|
27
|
+
origin: (context ?? getContext()).site?.url || request.headers.get('Origin') || 'null',
|
|
28
|
+
environment: (context ?? getContext()).deploy?.context || null,
|
|
29
|
+
waitUntil: (context ?? getContext()).waitUntil,
|
|
30
|
+
});
|
|
31
|
+
const run = createRequestScope(STORE, makeRequestAPISetup);
|
|
32
|
+
const onRequest = createExpoHandler(createNodeEnv(params));
|
|
33
|
+
return async (req, ctx) => {
|
|
34
|
+
if ('multiValueHeaders' in req) {
|
|
35
|
+
throw new Error('Unexpected Request object. API was called by Netlify Server Functions 1.0\n' +
|
|
36
|
+
'- Make sure your Netlify function has a default export instead of exporting "handler".');
|
|
37
|
+
}
|
|
38
|
+
return await run(onRequest, req, ctx);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=netlify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"netlify.js","sourceRoot":"","sources":["../../../src/vendor/netlify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AASlD,yFAAyF;AACzF,SAAS,UAAU;IACjB,MAAM,UAAU,GAEZ,UAAU,CAAC;IACf,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,gEAAgE;YAChE,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,kFAAkF;AAClF,mCAAmC;AACnC,MAAM,KAAK,GAAoB;IAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC;IACzC,GAAG,CAAC,KAAU,EAAE,MAA+B,EAAE,GAAG,IAAW;QAC7D,UAAU,EAAE,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QAClC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,OAAwB,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,EAAE,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM;QACtF,WAAW,EAAE,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;QAC9D,SAAS,EAAE,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,SAAS;KAC/C,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,KAAK,EAAE,GAAY,EAAE,GAAoB,EAAE,EAAE;QAClD,IAAI,mBAAmB,IAAI,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,6EAA6E;gBAC3E,wFAAwF,CAC3F,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as http from 'http';
|
|
2
|
+
export { ExpoError } from './abstract';
|
|
3
|
+
export type RequestHandler = (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a request handler for Vercel's Node.js runtime that serves the
|
|
6
|
+
* response using Remix.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createRequestHandler(params: {
|
|
9
|
+
build: string;
|
|
10
|
+
}): RequestHandler;
|
|
11
|
+
export declare function convertHeaders(requestHeaders: http.IncomingMessage['headers']): Headers;
|
|
12
|
+
export declare function convertRequest(req: http.IncomingMessage, res: http.ServerResponse): Request;
|
|
13
|
+
export declare function respond(res: http.ServerResponse, expoRes: Response): Promise<void>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { pipeline } from 'node:stream/promises';
|
|
3
|
+
import { createRequestHandler as createExpoHandler } from './abstract';
|
|
4
|
+
import { createRequestScope } from '../runtime';
|
|
5
|
+
import { createNodeEnv } from './environment/node';
|
|
6
|
+
import { createReadableStreamFromReadable } from '../utils/createReadableStreamFromReadable';
|
|
7
|
+
export { ExpoError } from './abstract';
|
|
8
|
+
const scopeSymbol = Symbol.for('expoServerScope');
|
|
9
|
+
const SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');
|
|
10
|
+
/** @see https://github.com/vercel/vercel/blob/b189b39/packages/functions/src/get-context.ts */
|
|
11
|
+
function getContext() {
|
|
12
|
+
const fromSymbol = globalThis;
|
|
13
|
+
return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};
|
|
14
|
+
}
|
|
15
|
+
// Vercel already has an async-scoped context in VercelContext, so we can attach
|
|
16
|
+
// our scope context to this object
|
|
17
|
+
const STORE = {
|
|
18
|
+
getStore: () => getContext()[scopeSymbol],
|
|
19
|
+
run(scope, runner, ...args) {
|
|
20
|
+
getContext()[scopeSymbol] = scope;
|
|
21
|
+
return runner(...args);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Returns a request handler for Vercel's Node.js runtime that serves the
|
|
26
|
+
* response using Remix.
|
|
27
|
+
*/
|
|
28
|
+
export function createRequestHandler(params) {
|
|
29
|
+
const makeRequestAPISetup = (request) => {
|
|
30
|
+
const host = request.headers.get('host');
|
|
31
|
+
const proto = request.headers.get('x-forwarded-proto') || 'https';
|
|
32
|
+
return {
|
|
33
|
+
origin: host ? `${proto}://${host}` : 'null',
|
|
34
|
+
// See: https://github.com/vercel/vercel/blob/b189b39/packages/functions/src/get-env.ts#L25C3-L25C13
|
|
35
|
+
environment: process.env.VERCEL_ENV ?? process.env.NODE_ENV,
|
|
36
|
+
waitUntil: getContext().waitUntil,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const run = createRequestScope(STORE, makeRequestAPISetup);
|
|
40
|
+
const onRequest = createExpoHandler(createNodeEnv(params));
|
|
41
|
+
return async (req, res) => {
|
|
42
|
+
return respond(res, await run(onRequest, convertRequest(req, res)));
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function convertHeaders(requestHeaders) {
|
|
46
|
+
const headers = new Headers();
|
|
47
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
48
|
+
if (values) {
|
|
49
|
+
if (Array.isArray(values)) {
|
|
50
|
+
for (const value of values) {
|
|
51
|
+
headers.append(key, value);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
headers.set(key, values);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return headers;
|
|
60
|
+
}
|
|
61
|
+
function convertRawHeaders(requestHeaders) {
|
|
62
|
+
const headers = new Headers();
|
|
63
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
64
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
65
|
+
}
|
|
66
|
+
return headers;
|
|
67
|
+
}
|
|
68
|
+
export function convertRequest(req, res) {
|
|
69
|
+
const host = req.headers['x-forwarded-host'] || req.headers['host'];
|
|
70
|
+
// doesn't seem to be available on their req object!
|
|
71
|
+
const protocol = req.headers['x-forwarded-proto'] || 'https';
|
|
72
|
+
const url = new URL(`${protocol}://${host}${req.url}`);
|
|
73
|
+
// Abort action/loaders once we can no longer write a response
|
|
74
|
+
const controller = new AbortController();
|
|
75
|
+
res.on('close', () => controller.abort());
|
|
76
|
+
const init = {
|
|
77
|
+
method: req.method,
|
|
78
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
79
|
+
// Cast until reason/throwIfAborted added
|
|
80
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
81
|
+
signal: controller.signal,
|
|
82
|
+
};
|
|
83
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
84
|
+
// NOTE(@krystofwoldrich) Readable.toWeb breaks the stream in Vercel Functions, unknown why.
|
|
85
|
+
// No error is thrown, but reading the stream like `await req.json()` never resolves.
|
|
86
|
+
init.body = createReadableStreamFromReadable(req);
|
|
87
|
+
init.duplex = 'half';
|
|
88
|
+
}
|
|
89
|
+
return new Request(url.href, init);
|
|
90
|
+
}
|
|
91
|
+
export async function respond(res, expoRes) {
|
|
92
|
+
res.statusMessage = expoRes.statusText;
|
|
93
|
+
res.writeHead(expoRes.status, expoRes.statusText, [...expoRes.headers.entries()].flat());
|
|
94
|
+
if (expoRes.body) {
|
|
95
|
+
await pipeline(Readable.fromWeb(expoRes.body), res);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
res.end();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/vendor/vercel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAE7F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAOlD,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAErE,+FAA+F;AAC/F,SAAS,UAAU;IACjB,MAAM,UAAU,GAEZ,UAAU,CAAC;IACf,OAAO,UAAU,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,gFAAgF;AAChF,mCAAmC;AACnC,MAAM,KAAK,GAAoB;IAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC;IACzC,GAAG,CAAC,KAAU,EAAE,MAA+B,EAAE,GAAG,IAAW;QAC7D,UAAU,EAAE,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QAClC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM;YAC5C,oGAAoG;YACpG,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YAC3D,SAAS,EAAE,UAAU,EAAE,CAAC,SAAS;SAClC,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,cAA+C;IAC5E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,cAAiC;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAyB,EAAE,GAAwB;IAChF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,oDAAoD;IACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvD,8DAA8D;IAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAgB;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,yCAAyC;QACzC,2DAA2D;QAC3D,MAAM,EAAE,UAAU,CAAC,MAA+B;KACnD,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClD,4FAA4F;QAC5F,qFAAqF;QACrF,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAwB,EAAE,OAAiB;IACvE,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAA0B,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RequestHandlerParams } from './abstract';
|
|
2
|
+
import { ExecutionContext } from './environment/workerd';
|
|
3
|
+
export { ExpoError } from './abstract';
|
|
4
|
+
export type RequestHandler<Env = unknown> = (req: Request, env: Env, ctx: ExecutionContext) => Promise<Response>;
|
|
5
|
+
/**
|
|
6
|
+
* Returns a request handler for Workerd deployments.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createRequestHandler<Env = unknown>(params: {
|
|
9
|
+
build: string;
|
|
10
|
+
environment?: string | null;
|
|
11
|
+
}, setup?: Partial<RequestHandlerParams>): RequestHandler<Env>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { createRequestHandler as createExpoHandler } from './abstract';
|
|
3
|
+
import { createWorkerdEnv, createWorkerdRequestScope, } from './environment/workerd';
|
|
4
|
+
export { ExpoError } from './abstract';
|
|
5
|
+
const STORE = new AsyncLocalStorage();
|
|
6
|
+
/**
|
|
7
|
+
* Returns a request handler for Workerd deployments.
|
|
8
|
+
*/
|
|
9
|
+
export function createRequestHandler(params, setup) {
|
|
10
|
+
const run = createWorkerdRequestScope(STORE, params);
|
|
11
|
+
const onRequest = createExpoHandler({
|
|
12
|
+
...createWorkerdEnv(params),
|
|
13
|
+
...setup,
|
|
14
|
+
});
|
|
15
|
+
return (request, env, ctx) => run(onRequest, request, env, ctx);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=workerd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerd.js","sourceRoot":"","sources":["../../../src/vendor/workerd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,oBAAoB,IAAI,iBAAiB,EAA6B,MAAM,YAAY,CAAC;AAClG,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsD,EACtD,KAAqC;IAErC,MAAM,GAAG,GAAG,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,iBAAiB,CAAC;QAClC,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC3B,GAAG,KAAK;KACT,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,73 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-server",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Server API for Expo Router projects",
|
|
5
|
+
"main": "build/cjs/index.js",
|
|
6
|
+
"module": "build/mjs/index.js",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./build/mjs/index.js",
|
|
11
|
+
"require": "./build/cjs/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./private": {
|
|
14
|
+
"import": "./build/mjs/private.js",
|
|
15
|
+
"require": "./build/cjs/private.js"
|
|
16
|
+
},
|
|
17
|
+
"./adapter/*": {
|
|
18
|
+
"import": "./build/mjs/vendor/*.js",
|
|
19
|
+
"require": "./build/cjs/vendor/*.js"
|
|
20
|
+
},
|
|
21
|
+
"./vendor/*": {
|
|
22
|
+
"import": "./build/mjs/vendor/*.js",
|
|
23
|
+
"require": "./build/cjs/vendor/*.js"
|
|
24
|
+
},
|
|
25
|
+
"./runtime/*": {
|
|
26
|
+
"import": "./build/mjs/runtime/index.js",
|
|
27
|
+
"require": "./build/cjs/runtime/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./build/*": {
|
|
30
|
+
"import": "./build/mjs/*.js",
|
|
31
|
+
"require": "./build/cjs/*.js"
|
|
32
|
+
},
|
|
33
|
+
"./package.json": "./package.json"
|
|
34
|
+
},
|
|
6
35
|
"scripts": {
|
|
7
|
-
"
|
|
36
|
+
"build": "run-p build:cjs build:mjs",
|
|
37
|
+
"build:cjs": "tsc -p tsconfig.json",
|
|
38
|
+
"build:mjs": "tsc -p tsconfig.mjs.json",
|
|
39
|
+
"clean": "rimraf build",
|
|
40
|
+
"prepare": "run-s clean build",
|
|
41
|
+
"lint": "eslint .",
|
|
42
|
+
"test": "jest"
|
|
43
|
+
},
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "https://github.com/expo/expo.git",
|
|
47
|
+
"directory": "packages/expo-server"
|
|
48
|
+
},
|
|
49
|
+
"keywords": [
|
|
50
|
+
"expo"
|
|
51
|
+
],
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/expo/expo/issues"
|
|
55
|
+
},
|
|
56
|
+
"homepage": "https://github.com/expo/expo/tree/main/packages/expo-server#readme",
|
|
57
|
+
"files": [
|
|
58
|
+
"build",
|
|
59
|
+
"adapter"
|
|
60
|
+
],
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/express": "^5.0.3",
|
|
63
|
+
"npm-run-all2": "^8.0.4",
|
|
64
|
+
"rimraf": "^6.0.1"
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=20.16.0"
|
|
8
71
|
},
|
|
9
|
-
"
|
|
10
|
-
"author": "",
|
|
11
|
-
"license": "ISC"
|
|
72
|
+
"gitHead": "73d9bc0ee4f1e28cfda349dc36ee53d16fad0c5d"
|
|
12
73
|
}
|