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.
Files changed (158) hide show
  1. package/README.md +1 -0
  2. package/build/cjs/ImmutableRequest.d.ts +61 -0
  3. package/build/cjs/ImmutableRequest.js +160 -0
  4. package/build/cjs/ImmutableRequest.js.map +1 -0
  5. package/build/cjs/global.types.d.ts +13 -0
  6. package/build/cjs/global.types.js +3 -0
  7. package/build/cjs/global.types.js.map +1 -0
  8. package/build/cjs/index.d.ts +2 -0
  9. package/build/cjs/index.js +18 -0
  10. package/build/cjs/index.js.map +1 -0
  11. package/build/cjs/manifest.d.ts +27 -0
  12. package/build/cjs/manifest.js +3 -0
  13. package/build/cjs/manifest.js.map +1 -0
  14. package/build/cjs/middleware/rsc.d.ts +36 -0
  15. package/build/cjs/middleware/rsc.js +124 -0
  16. package/build/cjs/middleware/rsc.js.map +1 -0
  17. package/build/cjs/private.d.ts +2 -0
  18. package/build/cjs/private.js +6 -0
  19. package/build/cjs/private.js.map +1 -0
  20. package/build/cjs/runtime/api.d.ts +39 -0
  21. package/build/cjs/runtime/api.js +73 -0
  22. package/build/cjs/runtime/api.js.map +1 -0
  23. package/build/cjs/runtime/error.d.ts +36 -0
  24. package/build/cjs/runtime/error.js +86 -0
  25. package/build/cjs/runtime/error.js.map +1 -0
  26. package/build/cjs/runtime/index.d.ts +10 -0
  27. package/build/cjs/runtime/index.js +77 -0
  28. package/build/cjs/runtime/index.js.map +1 -0
  29. package/build/cjs/runtime/scope.d.ts +15 -0
  30. package/build/cjs/runtime/scope.js +12 -0
  31. package/build/cjs/runtime/scope.js.map +1 -0
  32. package/build/cjs/types.d.ts +57 -0
  33. package/build/cjs/types.js +3 -0
  34. package/build/cjs/types.js.map +1 -0
  35. package/build/cjs/utils/createReadableStreamFromReadable.d.ts +15 -0
  36. package/build/cjs/utils/createReadableStreamFromReadable.js +97 -0
  37. package/build/cjs/utils/createReadableStreamFromReadable.js.map +1 -0
  38. package/build/cjs/utils/importMetaRegistry.d.ts +3 -0
  39. package/build/cjs/utils/importMetaRegistry.js +30 -0
  40. package/build/cjs/utils/importMetaRegistry.js.map +1 -0
  41. package/build/cjs/utils/matchers.d.ts +12 -0
  42. package/build/cjs/utils/matchers.js +76 -0
  43. package/build/cjs/utils/matchers.js.map +1 -0
  44. package/build/cjs/utils/middleware.d.ts +9 -0
  45. package/build/cjs/utils/middleware.js +82 -0
  46. package/build/cjs/utils/middleware.js.map +1 -0
  47. package/build/cjs/vendor/abstract.d.ts +40 -0
  48. package/build/cjs/vendor/abstract.js +245 -0
  49. package/build/cjs/vendor/abstract.js.map +1 -0
  50. package/build/cjs/vendor/bun.d.ts +10 -0
  51. package/build/cjs/vendor/bun.js +22 -0
  52. package/build/cjs/vendor/bun.js.map +1 -0
  53. package/build/cjs/vendor/eas.d.ts +10 -0
  54. package/build/cjs/vendor/eas.js +28 -0
  55. package/build/cjs/vendor/eas.js.map +1 -0
  56. package/build/cjs/vendor/environment/common.d.ts +14 -0
  57. package/build/cjs/vendor/environment/common.js +66 -0
  58. package/build/cjs/vendor/environment/common.js.map +1 -0
  59. package/build/cjs/vendor/environment/node.d.ts +14 -0
  60. package/build/cjs/vendor/environment/node.js +55 -0
  61. package/build/cjs/vendor/environment/node.js.map +1 -0
  62. package/build/cjs/vendor/environment/workerd.d.ts +18 -0
  63. package/build/cjs/vendor/environment/workerd.js +72 -0
  64. package/build/cjs/vendor/environment/workerd.js.map +1 -0
  65. package/build/cjs/vendor/express.d.ts +14 -0
  66. package/build/cjs/vendor/express.js +100 -0
  67. package/build/cjs/vendor/express.js.map +1 -0
  68. package/build/cjs/vendor/http.d.ts +15 -0
  69. package/build/cjs/vendor/http.js +103 -0
  70. package/build/cjs/vendor/http.js.map +1 -0
  71. package/build/cjs/vendor/netlify.d.ts +15 -0
  72. package/build/cjs/vendor/netlify.js +46 -0
  73. package/build/cjs/vendor/netlify.js.map +1 -0
  74. package/build/cjs/vendor/vercel.d.ts +13 -0
  75. package/build/cjs/vendor/vercel.js +109 -0
  76. package/build/cjs/vendor/vercel.js.map +1 -0
  77. package/build/cjs/vendor/workerd.d.ts +11 -0
  78. package/build/cjs/vendor/workerd.js +22 -0
  79. package/build/cjs/vendor/workerd.js.map +1 -0
  80. package/build/mjs/ImmutableRequest.d.ts +61 -0
  81. package/build/mjs/ImmutableRequest.js +155 -0
  82. package/build/mjs/ImmutableRequest.js.map +1 -0
  83. package/build/mjs/global.types.d.ts +13 -0
  84. package/build/mjs/global.types.js +2 -0
  85. package/build/mjs/global.types.js.map +1 -0
  86. package/build/mjs/index.d.ts +2 -0
  87. package/build/mjs/index.js +2 -0
  88. package/build/mjs/index.js.map +1 -0
  89. package/build/mjs/manifest.d.ts +27 -0
  90. package/build/mjs/manifest.js +2 -0
  91. package/build/mjs/manifest.js.map +1 -0
  92. package/build/mjs/middleware/rsc.d.ts +36 -0
  93. package/build/mjs/middleware/rsc.js +119 -0
  94. package/build/mjs/middleware/rsc.js.map +1 -0
  95. package/build/mjs/private.d.ts +2 -0
  96. package/build/mjs/private.js +2 -0
  97. package/build/mjs/private.js.map +1 -0
  98. package/build/mjs/runtime/api.d.ts +39 -0
  99. package/build/mjs/runtime/api.js +65 -0
  100. package/build/mjs/runtime/api.js.map +1 -0
  101. package/build/mjs/runtime/error.d.ts +36 -0
  102. package/build/mjs/runtime/error.js +81 -0
  103. package/build/mjs/runtime/error.js.map +1 -0
  104. package/build/mjs/runtime/index.d.ts +10 -0
  105. package/build/mjs/runtime/index.js +74 -0
  106. package/build/mjs/runtime/index.js.map +1 -0
  107. package/build/mjs/runtime/scope.d.ts +15 -0
  108. package/build/mjs/runtime/scope.js +9 -0
  109. package/build/mjs/runtime/scope.js.map +1 -0
  110. package/build/mjs/types.d.ts +57 -0
  111. package/build/mjs/types.js +2 -0
  112. package/build/mjs/types.js.map +1 -0
  113. package/build/mjs/utils/createReadableStreamFromReadable.d.ts +15 -0
  114. package/build/mjs/utils/createReadableStreamFromReadable.js +93 -0
  115. package/build/mjs/utils/createReadableStreamFromReadable.js.map +1 -0
  116. package/build/mjs/utils/importMetaRegistry.d.ts +3 -0
  117. package/build/mjs/utils/importMetaRegistry.js +27 -0
  118. package/build/mjs/utils/importMetaRegistry.js.map +1 -0
  119. package/build/mjs/utils/matchers.d.ts +12 -0
  120. package/build/mjs/utils/matchers.js +69 -0
  121. package/build/mjs/utils/matchers.js.map +1 -0
  122. package/build/mjs/utils/middleware.d.ts +9 -0
  123. package/build/mjs/utils/middleware.js +79 -0
  124. package/build/mjs/utils/middleware.js.map +1 -0
  125. package/build/mjs/vendor/abstract.d.ts +40 -0
  126. package/build/mjs/vendor/abstract.js +240 -0
  127. package/build/mjs/vendor/abstract.js.map +1 -0
  128. package/build/mjs/vendor/bun.d.ts +10 -0
  129. package/build/mjs/vendor/bun.js +17 -0
  130. package/build/mjs/vendor/bun.js.map +1 -0
  131. package/build/mjs/vendor/eas.d.ts +10 -0
  132. package/build/mjs/vendor/eas.js +23 -0
  133. package/build/mjs/vendor/eas.js.map +1 -0
  134. package/build/mjs/vendor/environment/common.d.ts +14 -0
  135. package/build/mjs/vendor/environment/common.js +63 -0
  136. package/build/mjs/vendor/environment/common.js.map +1 -0
  137. package/build/mjs/vendor/environment/node.d.ts +14 -0
  138. package/build/mjs/vendor/environment/node.js +48 -0
  139. package/build/mjs/vendor/environment/node.js.map +1 -0
  140. package/build/mjs/vendor/environment/workerd.d.ts +18 -0
  141. package/build/mjs/vendor/environment/workerd.js +68 -0
  142. package/build/mjs/vendor/environment/workerd.js.map +1 -0
  143. package/build/mjs/vendor/express.d.ts +14 -0
  144. package/build/mjs/vendor/express.js +92 -0
  145. package/build/mjs/vendor/express.js.map +1 -0
  146. package/build/mjs/vendor/http.d.ts +15 -0
  147. package/build/mjs/vendor/http.js +95 -0
  148. package/build/mjs/vendor/http.js.map +1 -0
  149. package/build/mjs/vendor/netlify.d.ts +15 -0
  150. package/build/mjs/vendor/netlify.js +41 -0
  151. package/build/mjs/vendor/netlify.js.map +1 -0
  152. package/build/mjs/vendor/vercel.d.ts +13 -0
  153. package/build/mjs/vendor/vercel.js +101 -0
  154. package/build/mjs/vendor/vercel.js.map +1 -0
  155. package/build/mjs/vendor/workerd.d.ts +11 -0
  156. package/build/mjs/vendor/workerd.js +17 -0
  157. package/build/mjs/vendor/workerd.js.map +1 -0
  158. package/package.json +68 -7
@@ -0,0 +1,14 @@
1
+ import type * as express from 'express';
2
+ import { type RequestHandlerParams } from './abstract';
3
+ export { ExpoError } from './abstract';
4
+ export type RequestHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => Promise<void>;
5
+ /**
6
+ * Returns a request handler for Express that serves the response using Remix.
7
+ */
8
+ export declare function createRequestHandler(params: {
9
+ build: string;
10
+ environment?: string | null;
11
+ }, setup?: Partial<RequestHandlerParams>): RequestHandler;
12
+ export declare function convertHeaders(requestHeaders: express.Request['headers']): Headers;
13
+ export declare function convertRequest(req: express.Request, res: express.Response): Request;
14
+ export declare function respond(res: express.Response, expoRes: Response): Promise<void>;
@@ -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,61 @@
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
+ /** @hidden */
21
+ export type _ImmutableRequest = Omit<Request, 'body' | 'bodyUsed' | 'arrayBuffer' | 'blob' | 'formData' | 'json' | 'text' | 'bytes' | 'headers'> & {
22
+ headers: ImmutableHeaders;
23
+ };
24
+ /**
25
+ * 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.
26
+ */
27
+ export declare class ImmutableRequest implements _ImmutableRequest {
28
+ #private;
29
+ constructor(request: Request);
30
+ get cache(): RequestCache;
31
+ get credentials(): RequestCredentials;
32
+ get destination(): RequestDestination;
33
+ get integrity(): string;
34
+ get keepalive(): boolean;
35
+ get method(): string;
36
+ get mode(): RequestMode;
37
+ get redirect(): RequestRedirect;
38
+ get referrer(): string;
39
+ get referrerPolicy(): ReferrerPolicy;
40
+ get signal(): AbortSignal;
41
+ get url(): string;
42
+ get bodyUsed(): boolean;
43
+ get duplex(): "half" | undefined;
44
+ get headers(): ImmutableHeaders;
45
+ /**
46
+ * The request body is not accessible in immutable requests.
47
+ */
48
+ get body(): void;
49
+ arrayBuffer(): Promise<void>;
50
+ blob(): Promise<void>;
51
+ bytes(): Promise<void>;
52
+ formData(): Promise<void>;
53
+ json(): Promise<void>;
54
+ text(): Promise<void>;
55
+ /**
56
+ * Creates a mutable clone of the original request. This is provided as an escape hatch.
57
+ */
58
+ clone(): Request;
59
+ }
60
+ export declare function assertRuntimeFetchAPISupport({ Request, Response, Headers, process, }?: any): void;
61
+ export {};