expo-server 0.0.0 → 0.0.1
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 +60 -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 +36 -0
- package/build/cjs/runtime/api.js +64 -0
- package/build/cjs/runtime/api.js.map +1 -0
- package/build/cjs/runtime/error.d.ts +19 -0
- package/build/cjs/runtime/error.js +69 -0
- package/build/cjs/runtime/error.js.map +1 -0
- package/build/cjs/runtime/index.d.ts +11 -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 +10 -0
- package/build/cjs/runtime/scope.js +12 -0
- package/build/cjs/runtime/scope.js.map +1 -0
- package/build/cjs/types.d.ts +43 -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 +60 -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 +36 -0
- package/build/mjs/runtime/api.js +56 -0
- package/build/mjs/runtime/api.js.map +1 -0
- package/build/mjs/runtime/error.d.ts +19 -0
- package/build/mjs/runtime/error.js +64 -0
- package/build/mjs/runtime/error.js.map +1 -0
- package/build/mjs/runtime/index.d.ts +11 -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 +10 -0
- package/build/mjs/runtime/scope.js +9 -0
- package/build/mjs/runtime/scope.js.map +1 -0
- package/build/mjs/types.d.ts +43 -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 +58 -7
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpoError = void 0;
|
|
4
|
+
exports.createRequestHandler = createRequestHandler;
|
|
5
|
+
exports.convertHeaders = convertHeaders;
|
|
6
|
+
exports.convertRequest = convertRequest;
|
|
7
|
+
exports.respond = respond;
|
|
8
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
9
|
+
const node_stream_1 = require("node:stream");
|
|
10
|
+
const promises_1 = require("node:stream/promises");
|
|
11
|
+
const abstract_1 = require("./abstract");
|
|
12
|
+
const node_1 = require("./environment/node");
|
|
13
|
+
var abstract_2 = require("./abstract");
|
|
14
|
+
Object.defineProperty(exports, "ExpoError", { enumerable: true, get: function () { return abstract_2.ExpoError; } });
|
|
15
|
+
const STORE = new node_async_hooks_1.AsyncLocalStorage();
|
|
16
|
+
/**
|
|
17
|
+
* Returns a request handler for Express that serves the response using Remix.
|
|
18
|
+
*/
|
|
19
|
+
function createRequestHandler(params, setup) {
|
|
20
|
+
const run = (0, node_1.createNodeRequestScope)(STORE, params);
|
|
21
|
+
const onRequest = (0, abstract_1.createRequestHandler)({
|
|
22
|
+
...(0, node_1.createNodeEnv)(params),
|
|
23
|
+
...setup,
|
|
24
|
+
});
|
|
25
|
+
return async (req, res, next) => {
|
|
26
|
+
if (!req?.url || !req.method) {
|
|
27
|
+
return next();
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const request = convertRequest(req, res);
|
|
31
|
+
const response = await run(onRequest, request);
|
|
32
|
+
await respond(res, response);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// Express doesn't support async functions, so we have to pass along the
|
|
36
|
+
// error manually using next().
|
|
37
|
+
next(error);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function convertHeaders(requestHeaders) {
|
|
42
|
+
const headers = new Headers();
|
|
43
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
44
|
+
if (values) {
|
|
45
|
+
if (Array.isArray(values)) {
|
|
46
|
+
for (const value of values) {
|
|
47
|
+
headers.append(key, value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
headers.set(key, values);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return headers;
|
|
56
|
+
}
|
|
57
|
+
function convertRawHeaders(requestHeaders) {
|
|
58
|
+
const headers = new Headers();
|
|
59
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
60
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
61
|
+
}
|
|
62
|
+
return headers;
|
|
63
|
+
}
|
|
64
|
+
function convertRequest(req, res) {
|
|
65
|
+
const url = new URL(`${req.protocol}://${req.get('host')}${req.url}`);
|
|
66
|
+
// Abort action/loaders once we can no longer write a response
|
|
67
|
+
const controller = new AbortController();
|
|
68
|
+
res.on('close', () => controller.abort());
|
|
69
|
+
const init = {
|
|
70
|
+
method: req.method,
|
|
71
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
72
|
+
// Cast until reason/throwIfAborted added
|
|
73
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
74
|
+
signal: controller.signal,
|
|
75
|
+
};
|
|
76
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
77
|
+
init.body = node_stream_1.Readable.toWeb(req);
|
|
78
|
+
init.duplex = 'half';
|
|
79
|
+
}
|
|
80
|
+
return new Request(url.href, init);
|
|
81
|
+
}
|
|
82
|
+
async function respond(res, expoRes) {
|
|
83
|
+
res.statusMessage = expoRes.statusText;
|
|
84
|
+
res.status(expoRes.status);
|
|
85
|
+
if (typeof res.setHeaders === 'function') {
|
|
86
|
+
res.setHeaders(expoRes.headers);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
for (const [key, value] of expoRes.headers.entries()) {
|
|
90
|
+
res.appendHeader(key, value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (expoRes.body) {
|
|
94
|
+
await (0, promises_1.pipeline)(node_stream_1.Readable.fromWeb(expoRes.body), res);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
res.end();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# 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,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpoError = void 0;
|
|
4
|
+
exports.createRequestHandler = createRequestHandler;
|
|
5
|
+
exports.convertRequest = convertRequest;
|
|
6
|
+
exports.convertHeaders = convertHeaders;
|
|
7
|
+
exports.respond = respond;
|
|
8
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
9
|
+
const node_stream_1 = require("node:stream");
|
|
10
|
+
const promises_1 = require("node:stream/promises");
|
|
11
|
+
const abstract_1 = require("./abstract");
|
|
12
|
+
const node_1 = require("./environment/node");
|
|
13
|
+
var abstract_2 = require("./abstract");
|
|
14
|
+
Object.defineProperty(exports, "ExpoError", { enumerable: true, get: function () { return abstract_2.ExpoError; } });
|
|
15
|
+
const STORE = new node_async_hooks_1.AsyncLocalStorage();
|
|
16
|
+
/**
|
|
17
|
+
* Returns a request handler for http that serves the response using Remix.
|
|
18
|
+
*/
|
|
19
|
+
function createRequestHandler(params, setup) {
|
|
20
|
+
const run = (0, node_1.createNodeRequestScope)(STORE, params);
|
|
21
|
+
const nodeEnv = (0, node_1.createNodeEnv)(params);
|
|
22
|
+
const onRequest = (0, abstract_1.createRequestHandler)({
|
|
23
|
+
...nodeEnv,
|
|
24
|
+
...setup,
|
|
25
|
+
getRoutesManifest: setup?.getRoutesManifest ?? nodeEnv.getRoutesManifest,
|
|
26
|
+
});
|
|
27
|
+
return async (req, res, next) => {
|
|
28
|
+
if (!req?.url || !req.method) {
|
|
29
|
+
return next();
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const request = convertRequest(req, res);
|
|
33
|
+
const response = await run(onRequest, request);
|
|
34
|
+
await respond(res, response);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
// http doesn't support async functions, so we have to pass along the
|
|
38
|
+
// error manually using next().
|
|
39
|
+
next(error);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function convertRawHeaders(requestHeaders) {
|
|
44
|
+
const headers = new Headers();
|
|
45
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
46
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
47
|
+
}
|
|
48
|
+
return headers;
|
|
49
|
+
}
|
|
50
|
+
// Convert an http request to an expo request
|
|
51
|
+
function convertRequest(req, res) {
|
|
52
|
+
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
53
|
+
// Abort action/loaders once we can no longer write a response
|
|
54
|
+
const controller = new AbortController();
|
|
55
|
+
res.on('close', () => controller.abort());
|
|
56
|
+
const init = {
|
|
57
|
+
method: req.method,
|
|
58
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
59
|
+
// Cast until reason/throwIfAborted added
|
|
60
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
61
|
+
signal: controller.signal,
|
|
62
|
+
};
|
|
63
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
64
|
+
init.body = node_stream_1.Readable.toWeb(req);
|
|
65
|
+
init.duplex = 'half';
|
|
66
|
+
}
|
|
67
|
+
return new Request(url.href, init);
|
|
68
|
+
}
|
|
69
|
+
function convertHeaders(requestHeaders) {
|
|
70
|
+
const headers = new Headers();
|
|
71
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
72
|
+
if (values) {
|
|
73
|
+
if (Array.isArray(values)) {
|
|
74
|
+
for (const value of values) {
|
|
75
|
+
headers.append(key, value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
headers.set(key, values);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return headers;
|
|
84
|
+
}
|
|
85
|
+
async function respond(res, expoRes) {
|
|
86
|
+
res.statusMessage = expoRes.statusText;
|
|
87
|
+
res.statusCode = expoRes.status;
|
|
88
|
+
if (typeof res.setHeaders === 'function') {
|
|
89
|
+
res.setHeaders(expoRes.headers);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
for (const [key, value] of expoRes.headers.entries()) {
|
|
93
|
+
res.appendHeader(key, value);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (expoRes.body) {
|
|
97
|
+
await (0, promises_1.pipeline)(node_stream_1.Readable.fromWeb(expoRes.body), res);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
res.end();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/vendor/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpoError = void 0;
|
|
4
|
+
exports.createRequestHandler = createRequestHandler;
|
|
5
|
+
const abstract_1 = require("./abstract");
|
|
6
|
+
const runtime_1 = require("../runtime");
|
|
7
|
+
const node_1 = require("./environment/node");
|
|
8
|
+
var abstract_2 = require("./abstract");
|
|
9
|
+
Object.defineProperty(exports, "ExpoError", { enumerable: true, get: function () { return abstract_2.ExpoError; } });
|
|
10
|
+
const scopeSymbol = Symbol.for('expoServerScope');
|
|
11
|
+
/** @see https://docs.netlify.com/build/functions/api/#netlify-specific-context-object */
|
|
12
|
+
function getContext() {
|
|
13
|
+
const fromGlobal = globalThis;
|
|
14
|
+
if (!fromGlobal.Netlify) {
|
|
15
|
+
throw new Error('"globalThis.Netlify" is missing but expected.\n' +
|
|
16
|
+
'- Are you using Netlify Server Functions 1.0 instead of 2.0?\n' +
|
|
17
|
+
'- Make sure your Netlify function has a default export instead of exporting "handler".');
|
|
18
|
+
}
|
|
19
|
+
return fromGlobal.Netlify?.context ?? {};
|
|
20
|
+
}
|
|
21
|
+
// Netlify already has an async-scoped context in NetlifyContext, so we can attach
|
|
22
|
+
// our scope context to this object
|
|
23
|
+
const STORE = {
|
|
24
|
+
getStore: () => getContext()[scopeSymbol],
|
|
25
|
+
run(scope, runner, ...args) {
|
|
26
|
+
getContext()[scopeSymbol] = scope;
|
|
27
|
+
return runner(...args);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
function createRequestHandler(params) {
|
|
31
|
+
const makeRequestAPISetup = (request, context) => ({
|
|
32
|
+
origin: (context ?? getContext()).site?.url || request.headers.get('Origin') || 'null',
|
|
33
|
+
environment: (context ?? getContext()).deploy?.context || null,
|
|
34
|
+
waitUntil: (context ?? getContext()).waitUntil,
|
|
35
|
+
});
|
|
36
|
+
const run = (0, runtime_1.createRequestScope)(STORE, makeRequestAPISetup);
|
|
37
|
+
const onRequest = (0, abstract_1.createRequestHandler)((0, node_1.createNodeEnv)(params));
|
|
38
|
+
return async (req, ctx) => {
|
|
39
|
+
if ('multiValueHeaders' in req) {
|
|
40
|
+
throw new Error('Unexpected Request object. API was called by Netlify Server Functions 1.0\n' +
|
|
41
|
+
'- Make sure your Netlify function has a default export instead of exporting "handler".');
|
|
42
|
+
}
|
|
43
|
+
return await run(onRequest, req, ctx);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=netlify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"netlify.js","sourceRoot":"","sources":["../../../src/vendor/netlify.ts"],"names":[],"mappings":";;;AAyCA,oDAiBC;AA1DD,yCAAuE;AACvE,wCAAgD;AAChD,6CAAmD;AAGnD,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAElB,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,SAAgB,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,IAAA,4BAAkB,EAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC,IAAA,oBAAa,EAAC,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,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpoError = void 0;
|
|
4
|
+
exports.createRequestHandler = createRequestHandler;
|
|
5
|
+
exports.convertHeaders = convertHeaders;
|
|
6
|
+
exports.convertRequest = convertRequest;
|
|
7
|
+
exports.respond = respond;
|
|
8
|
+
const node_stream_1 = require("node:stream");
|
|
9
|
+
const promises_1 = require("node:stream/promises");
|
|
10
|
+
const abstract_1 = require("./abstract");
|
|
11
|
+
const runtime_1 = require("../runtime");
|
|
12
|
+
const node_1 = require("./environment/node");
|
|
13
|
+
const createReadableStreamFromReadable_1 = require("../utils/createReadableStreamFromReadable");
|
|
14
|
+
var abstract_2 = require("./abstract");
|
|
15
|
+
Object.defineProperty(exports, "ExpoError", { enumerable: true, get: function () { return abstract_2.ExpoError; } });
|
|
16
|
+
const scopeSymbol = Symbol.for('expoServerScope');
|
|
17
|
+
const SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');
|
|
18
|
+
/** @see https://github.com/vercel/vercel/blob/b189b39/packages/functions/src/get-context.ts */
|
|
19
|
+
function getContext() {
|
|
20
|
+
const fromSymbol = globalThis;
|
|
21
|
+
return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};
|
|
22
|
+
}
|
|
23
|
+
// Vercel already has an async-scoped context in VercelContext, so we can attach
|
|
24
|
+
// our scope context to this object
|
|
25
|
+
const STORE = {
|
|
26
|
+
getStore: () => getContext()[scopeSymbol],
|
|
27
|
+
run(scope, runner, ...args) {
|
|
28
|
+
getContext()[scopeSymbol] = scope;
|
|
29
|
+
return runner(...args);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Returns a request handler for Vercel's Node.js runtime that serves the
|
|
34
|
+
* response using Remix.
|
|
35
|
+
*/
|
|
36
|
+
function createRequestHandler(params) {
|
|
37
|
+
const makeRequestAPISetup = (request) => {
|
|
38
|
+
const host = request.headers.get('host');
|
|
39
|
+
const proto = request.headers.get('x-forwarded-proto') || 'https';
|
|
40
|
+
return {
|
|
41
|
+
origin: host ? `${proto}://${host}` : 'null',
|
|
42
|
+
// See: https://github.com/vercel/vercel/blob/b189b39/packages/functions/src/get-env.ts#L25C3-L25C13
|
|
43
|
+
environment: process.env.VERCEL_ENV ?? process.env.NODE_ENV,
|
|
44
|
+
waitUntil: getContext().waitUntil,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const run = (0, runtime_1.createRequestScope)(STORE, makeRequestAPISetup);
|
|
48
|
+
const onRequest = (0, abstract_1.createRequestHandler)((0, node_1.createNodeEnv)(params));
|
|
49
|
+
return async (req, res) => {
|
|
50
|
+
return respond(res, await run(onRequest, convertRequest(req, res)));
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function convertHeaders(requestHeaders) {
|
|
54
|
+
const headers = new Headers();
|
|
55
|
+
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
56
|
+
if (values) {
|
|
57
|
+
if (Array.isArray(values)) {
|
|
58
|
+
for (const value of values) {
|
|
59
|
+
headers.append(key, value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
headers.set(key, values);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return headers;
|
|
68
|
+
}
|
|
69
|
+
function convertRawHeaders(requestHeaders) {
|
|
70
|
+
const headers = new Headers();
|
|
71
|
+
for (let index = 0; index < requestHeaders.length; index += 2) {
|
|
72
|
+
headers.append(requestHeaders[index], requestHeaders[index + 1]);
|
|
73
|
+
}
|
|
74
|
+
return headers;
|
|
75
|
+
}
|
|
76
|
+
function convertRequest(req, res) {
|
|
77
|
+
const host = req.headers['x-forwarded-host'] || req.headers['host'];
|
|
78
|
+
// doesn't seem to be available on their req object!
|
|
79
|
+
const protocol = req.headers['x-forwarded-proto'] || 'https';
|
|
80
|
+
const url = new URL(`${protocol}://${host}${req.url}`);
|
|
81
|
+
// Abort action/loaders once we can no longer write a response
|
|
82
|
+
const controller = new AbortController();
|
|
83
|
+
res.on('close', () => controller.abort());
|
|
84
|
+
const init = {
|
|
85
|
+
method: req.method,
|
|
86
|
+
headers: convertRawHeaders(req.rawHeaders),
|
|
87
|
+
// Cast until reason/throwIfAborted added
|
|
88
|
+
// https://github.com/mysticatea/abort-controller/issues/36
|
|
89
|
+
signal: controller.signal,
|
|
90
|
+
};
|
|
91
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
92
|
+
// NOTE(@krystofwoldrich) Readable.toWeb breaks the stream in Vercel Functions, unknown why.
|
|
93
|
+
// No error is thrown, but reading the stream like `await req.json()` never resolves.
|
|
94
|
+
init.body = (0, createReadableStreamFromReadable_1.createReadableStreamFromReadable)(req);
|
|
95
|
+
init.duplex = 'half';
|
|
96
|
+
}
|
|
97
|
+
return new Request(url.href, init);
|
|
98
|
+
}
|
|
99
|
+
async function respond(res, expoRes) {
|
|
100
|
+
res.statusMessage = expoRes.statusText;
|
|
101
|
+
res.writeHead(expoRes.status, expoRes.statusText, [...expoRes.headers.entries()].flat());
|
|
102
|
+
if (expoRes.body) {
|
|
103
|
+
await (0, promises_1.pipeline)(node_stream_1.Readable.fromWeb(expoRes.body), res);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
res.end();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/vendor/vercel.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpoError = void 0;
|
|
4
|
+
exports.createRequestHandler = createRequestHandler;
|
|
5
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
6
|
+
const abstract_1 = require("./abstract");
|
|
7
|
+
const workerd_1 = require("./environment/workerd");
|
|
8
|
+
var abstract_2 = require("./abstract");
|
|
9
|
+
Object.defineProperty(exports, "ExpoError", { enumerable: true, get: function () { return abstract_2.ExpoError; } });
|
|
10
|
+
const STORE = new node_async_hooks_1.AsyncLocalStorage();
|
|
11
|
+
/**
|
|
12
|
+
* Returns a request handler for Workerd deployments.
|
|
13
|
+
*/
|
|
14
|
+
function createRequestHandler(params, setup) {
|
|
15
|
+
const run = (0, workerd_1.createWorkerdRequestScope)(STORE, params);
|
|
16
|
+
const onRequest = (0, abstract_1.createRequestHandler)({
|
|
17
|
+
...(0, workerd_1.createWorkerdEnv)(params),
|
|
18
|
+
...setup,
|
|
19
|
+
});
|
|
20
|
+
return (request, env, ctx) => run(onRequest, request, env, ctx);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=workerd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerd.js","sourceRoot":"","sources":["../../../src/vendor/workerd.ts"],"names":[],"mappings":";;;AAsBA,oDAUC;AAhCD,uDAAqD;AAErD,yCAAkG;AAClG,mDAI+B;AAE/B,uCAAuC;AAA9B,qGAAA,SAAS,OAAA;AAQlB,MAAM,KAAK,GAAG,IAAI,oCAAiB,EAAE,CAAC;AAEtC;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAsD,EACtD,KAAqC;IAErC,MAAM,GAAG,GAAG,IAAA,mCAAyB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAA,+BAAiB,EAAC;QAClC,GAAG,IAAA,0BAAgB,EAAC,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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2025 650 Industries.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
declare const ImmutableHeaders_base: {
|
|
8
|
+
new (init?: HeadersInit): Headers;
|
|
9
|
+
prototype: Headers;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* An immutable version of the Fetch API's [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object which prevents mutations.
|
|
13
|
+
*/
|
|
14
|
+
declare class ImmutableHeaders extends ImmutableHeaders_base {
|
|
15
|
+
#private;
|
|
16
|
+
set(): void;
|
|
17
|
+
append(): void;
|
|
18
|
+
delete(): void;
|
|
19
|
+
}
|
|
20
|
+
export type _ImmutableRequest = Omit<Request, 'body' | 'bodyUsed' | 'arrayBuffer' | 'blob' | 'formData' | 'json' | 'text' | 'bytes' | 'headers'> & {
|
|
21
|
+
headers: ImmutableHeaders;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* An immutable version of the Fetch API's [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object which prevents mutations to the request body and headers.
|
|
25
|
+
*/
|
|
26
|
+
export declare class ImmutableRequest implements _ImmutableRequest {
|
|
27
|
+
#private;
|
|
28
|
+
constructor(request: Request);
|
|
29
|
+
get cache(): RequestCache;
|
|
30
|
+
get credentials(): RequestCredentials;
|
|
31
|
+
get destination(): RequestDestination;
|
|
32
|
+
get integrity(): string;
|
|
33
|
+
get keepalive(): boolean;
|
|
34
|
+
get method(): string;
|
|
35
|
+
get mode(): RequestMode;
|
|
36
|
+
get redirect(): RequestRedirect;
|
|
37
|
+
get referrer(): string;
|
|
38
|
+
get referrerPolicy(): ReferrerPolicy;
|
|
39
|
+
get signal(): AbortSignal;
|
|
40
|
+
get url(): string;
|
|
41
|
+
get bodyUsed(): boolean;
|
|
42
|
+
get duplex(): "half" | undefined;
|
|
43
|
+
get headers(): ImmutableHeaders;
|
|
44
|
+
/**
|
|
45
|
+
* The request body is not accessible in immutable requests.
|
|
46
|
+
*/
|
|
47
|
+
get body(): void;
|
|
48
|
+
arrayBuffer(): Promise<void>;
|
|
49
|
+
blob(): Promise<void>;
|
|
50
|
+
bytes(): Promise<void>;
|
|
51
|
+
formData(): Promise<void>;
|
|
52
|
+
json(): Promise<void>;
|
|
53
|
+
text(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Creates a mutable clone of the original request. This is provided as an escape hatch.
|
|
56
|
+
*/
|
|
57
|
+
clone(): Request;
|
|
58
|
+
}
|
|
59
|
+
export declare function assertRuntimeFetchAPISupport({ Request, Response, Headers, process, }?: any): void;
|
|
60
|
+
export {};
|