@opennextjs/aws 3.2.1 → 3.2.2

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 (135) hide show
  1. package/README.md +15 -1
  2. package/dist/adapters/cache.d.ts +0 -23
  3. package/dist/adapters/cache.js +10 -12
  4. package/dist/adapters/config/index.js +1 -1
  5. package/dist/adapters/config/util.js +2 -2
  6. package/dist/adapters/dynamo-provider.js +3 -5
  7. package/dist/adapters/edge-adapter.d.ts +0 -3
  8. package/dist/adapters/edge-adapter.js +43 -38
  9. package/dist/adapters/image-optimization-adapter.js +4 -4
  10. package/dist/adapters/logger.d.ts +0 -3
  11. package/dist/adapters/logger.js +3 -5
  12. package/dist/adapters/middleware.js +42 -18
  13. package/dist/adapters/plugins/image-optimization/image-optimization.d.ts +0 -3
  14. package/dist/adapters/plugins/image-optimization/image-optimization.replacement.d.ts +0 -3
  15. package/dist/adapters/revalidate.js +2 -2
  16. package/dist/adapters/server-adapter.d.ts +0 -3
  17. package/dist/adapters/server-adapter.js +3 -1
  18. package/dist/adapters/util.js +2 -2
  19. package/dist/build/bundleNextServer.d.ts +3 -1
  20. package/dist/build/bundleNextServer.js +3 -3
  21. package/dist/build/compileConfig.js +1 -1
  22. package/dist/build/copyTracedFiles.js +14 -25
  23. package/dist/build/createAssets.js +35 -26
  24. package/dist/build/createImageOptimizationBundle.js +1 -1
  25. package/dist/build/createMiddleware.js +7 -2
  26. package/dist/build/createRevalidationBundle.js +1 -1
  27. package/dist/build/createServerBundle.js +23 -29
  28. package/dist/build/createWarmerBundle.js +1 -1
  29. package/dist/build/edge/createEdgeBundle.d.ts +7 -3
  30. package/dist/build/edge/createEdgeBundle.js +12 -5
  31. package/dist/build/generateOutput.js +7 -13
  32. package/dist/build/helper.d.ts +22 -4
  33. package/dist/build/helper.js +26 -12
  34. package/dist/build/installDeps.js +1 -1
  35. package/dist/build/patch/patchedAsyncStorage.js +1 -1
  36. package/dist/build/utils.js +3 -2
  37. package/dist/build/validateConfig.js +1 -0
  38. package/dist/core/createGenericHandler.d.ts +2 -4
  39. package/dist/core/createGenericHandler.js +1 -2
  40. package/dist/core/createMainHandler.d.ts +0 -17
  41. package/dist/core/createMainHandler.js +5 -4
  42. package/dist/core/edgeFunctionHandler.d.ts +1 -51
  43. package/dist/core/patchAsyncStorage.js +5 -6
  44. package/dist/core/requestHandler.js +98 -89
  45. package/dist/core/require-hooks.js +8 -7
  46. package/dist/core/resolve.d.ts +13 -7
  47. package/dist/core/resolve.js +29 -35
  48. package/dist/core/routing/cacheInterceptor.js +12 -13
  49. package/dist/core/routing/i18n/accept-header.js +3 -2
  50. package/dist/core/routing/matcher.d.ts +2 -4
  51. package/dist/core/routing/matcher.js +17 -26
  52. package/dist/core/routing/middleware.js +17 -16
  53. package/dist/core/routing/util.d.ts +0 -13
  54. package/dist/core/routing/util.js +25 -87
  55. package/dist/core/routingHandler.d.ts +2 -0
  56. package/dist/core/routingHandler.js +30 -12
  57. package/dist/core/util.js +5 -3
  58. package/dist/helpers/withSST.d.ts +1 -1
  59. package/dist/http/openNextResponse.d.ts +5 -9
  60. package/dist/http/openNextResponse.js +29 -31
  61. package/dist/http/request.d.ts +0 -3
  62. package/dist/http/request.js +4 -2
  63. package/dist/http/util.d.ts +1 -1
  64. package/dist/http/util.js +8 -12
  65. package/dist/minimize-js.js +19 -19
  66. package/dist/overrides/converters/aws-apigw-v1.d.ts +2 -2
  67. package/dist/overrides/converters/aws-apigw-v1.js +2 -1
  68. package/dist/overrides/converters/aws-apigw-v2.d.ts +2 -2
  69. package/dist/overrides/converters/aws-apigw-v2.js +6 -7
  70. package/dist/overrides/converters/aws-cloudfront.d.ts +2 -2
  71. package/dist/overrides/converters/aws-cloudfront.js +11 -30
  72. package/dist/overrides/converters/dummy.d.ts +1 -1
  73. package/dist/overrides/converters/edge.d.ts +2 -1
  74. package/dist/overrides/converters/edge.js +11 -15
  75. package/dist/overrides/converters/node.d.ts +1 -1
  76. package/dist/overrides/converters/node.js +1 -1
  77. package/dist/overrides/converters/sqs-revalidate.d.ts +1 -1
  78. package/dist/overrides/imageLoader/dummy.d.ts +1 -1
  79. package/dist/overrides/imageLoader/host.d.ts +1 -1
  80. package/dist/overrides/imageLoader/s3.d.ts +1 -1
  81. package/dist/overrides/imageLoader/s3.js +1 -1
  82. package/dist/overrides/incrementalCache/dummy.d.ts +1 -1
  83. package/dist/overrides/incrementalCache/s3-lite.d.ts +1 -1
  84. package/dist/overrides/incrementalCache/s3-lite.js +15 -19
  85. package/dist/overrides/incrementalCache/s3.d.ts +1 -1
  86. package/dist/overrides/incrementalCache/s3.js +1 -1
  87. package/dist/overrides/originResolver/dummy.d.ts +1 -1
  88. package/dist/overrides/originResolver/pattern-env.d.ts +1 -1
  89. package/dist/overrides/originResolver/pattern-env.js +10 -11
  90. package/dist/overrides/proxyExternalRequest/dummy.d.ts +3 -0
  91. package/dist/overrides/proxyExternalRequest/dummy.js +7 -0
  92. package/dist/overrides/proxyExternalRequest/fetch.d.ts +3 -0
  93. package/dist/overrides/proxyExternalRequest/fetch.js +25 -0
  94. package/dist/overrides/proxyExternalRequest/node.d.ts +3 -0
  95. package/dist/overrides/proxyExternalRequest/node.js +67 -0
  96. package/dist/overrides/queue/dummy.d.ts +1 -1
  97. package/dist/overrides/queue/sqs-lite.d.ts +1 -1
  98. package/dist/overrides/queue/sqs-lite.js +7 -9
  99. package/dist/overrides/queue/sqs.d.ts +1 -1
  100. package/dist/overrides/queue/sqs.js +1 -1
  101. package/dist/overrides/tagCache/constants.js +2 -2
  102. package/dist/overrides/tagCache/dummy.d.ts +1 -1
  103. package/dist/overrides/tagCache/dynamodb-lite.d.ts +1 -1
  104. package/dist/overrides/tagCache/dynamodb-lite.js +10 -12
  105. package/dist/overrides/tagCache/dynamodb.d.ts +1 -1
  106. package/dist/overrides/tagCache/dynamodb.js +2 -2
  107. package/dist/overrides/warmer/aws-lambda.d.ts +1 -1
  108. package/dist/overrides/warmer/dummy.d.ts +1 -1
  109. package/dist/overrides/wrappers/aws-lambda-streaming.d.ts +2 -2
  110. package/dist/overrides/wrappers/aws-lambda.d.ts +2 -2
  111. package/dist/overrides/wrappers/cloudflare.d.ts +2 -1
  112. package/dist/overrides/wrappers/cloudflare.js +20 -2
  113. package/dist/overrides/wrappers/dummy.d.ts +2 -2
  114. package/dist/overrides/wrappers/node.d.ts +2 -2
  115. package/dist/overrides/wrappers/node.js +3 -3
  116. package/dist/plugins/edge.js +6 -5
  117. package/dist/plugins/replacement.js +2 -2
  118. package/dist/plugins/resolve.d.ts +3 -1
  119. package/dist/plugins/resolve.js +4 -1
  120. package/dist/types/aws-lambda.d.ts +2 -5
  121. package/dist/types/cache.d.ts +0 -2
  122. package/dist/types/global.d.ts +188 -0
  123. package/dist/types/next-types.d.ts +1 -3
  124. package/dist/types/open-next.d.ts +15 -41
  125. package/dist/types/overrides.d.ts +87 -0
  126. package/dist/utils/promise.d.ts +3 -0
  127. package/dist/utils/promise.js +44 -0
  128. package/dist/utils/stream.d.ts +0 -1
  129. package/package.json +2 -2
  130. package/dist/overrides/incrementalCache/types.d.ts +0 -34
  131. package/dist/overrides/queue/types.d.ts +0 -12
  132. package/dist/overrides/tagCache/types.d.ts +0 -11
  133. package/dist/overrides/tagCache/types.js +0 -1
  134. /package/dist/{overrides/incrementalCache/types.js → types/global.js} +0 -0
  135. /package/dist/{overrides/queue/types.js → types/overrides.js} +0 -0
@@ -1,14 +1,6 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- /// <reference types="node" />
5
- import type { Readable } from "node:stream";
6
1
  import type { ReadableStream } from "node:stream/web";
7
- import type { StreamCreator } from "../http/index.js";
8
2
  import type { WarmerEvent, WarmerResponse } from "../adapters/warmer-function";
9
- import type { IncrementalCache } from "../overrides/incrementalCache/types";
10
- import type { Queue } from "../overrides/queue/types";
11
- import type { TagCache } from "../overrides/tagCache/types";
3
+ import type { Converter, ImageLoader, IncrementalCache, OriginResolver, ProxyExternalRequest, Queue, TagCache, Warmer, Wrapper } from "./overrides";
12
4
  export type BaseEventOrResult<T extends string = string> = {
13
5
  type: T;
14
6
  };
@@ -58,44 +50,21 @@ export type BaseOverride = {
58
50
  name: string;
59
51
  };
60
52
  export type LazyLoadedOverride<T extends BaseOverride> = () => Promise<T>;
61
- export type OpenNextHandler<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = (event: E, responseStream?: StreamCreator) => Promise<R>;
62
- export type Converter<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = BaseOverride & {
63
- convertFrom: (event: any) => Promise<E>;
64
- convertTo: (result: R, originalRequest?: any) => Promise<any>;
65
- };
66
- export type WrapperHandler<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = (handler: OpenNextHandler<E, R>, converter: Converter<E, R>) => Promise<(...args: any[]) => any>;
67
- export type Wrapper<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = BaseOverride & {
68
- wrapper: WrapperHandler<E, R>;
69
- supportStreaming: boolean;
70
- edgeRuntime?: boolean;
71
- };
72
- export type Warmer = BaseOverride & {
73
- invoke: (warmerId: string) => Promise<void>;
74
- };
75
- export type ImageLoader = BaseOverride & {
76
- load: (url: string) => Promise<{
77
- body?: Readable;
78
- contentType?: string;
79
- cacheControl?: string;
80
- }>;
81
- };
82
53
  export interface Origin {
83
54
  host: string;
84
55
  protocol: "http" | "https";
85
56
  port?: number;
86
57
  customHeaders?: Record<string, string>;
87
58
  }
88
- export type OriginResolver = BaseOverride & {
89
- resolve: (path: string) => Promise<Origin | false>;
90
- };
91
- export type IncludedWrapper = "aws-lambda" | "aws-lambda-streaming" | "node" | "cloudflare";
59
+ export type IncludedWrapper = "aws-lambda" | "aws-lambda-streaming" | "node" | "cloudflare" | "dummy";
92
60
  export type IncludedConverter = "aws-apigw-v2" | "aws-apigw-v1" | "aws-cloudfront" | "edge" | "node" | "sqs-revalidate" | "dummy";
93
- export type IncludedQueue = "sqs" | "sqs-lite";
94
- export type IncludedIncrementalCache = "s3" | "s3-lite";
95
- export type IncludedTagCache = "dynamodb" | "dynamodb-lite";
96
- export type IncludedImageLoader = "s3" | "host";
97
- export type IncludedOriginResolver = "pattern-env";
98
- export type IncludedWarmer = "aws-lambda";
61
+ export type IncludedQueue = "sqs" | "sqs-lite" | "dummy";
62
+ export type IncludedIncrementalCache = "s3" | "s3-lite" | "dummy";
63
+ export type IncludedTagCache = "dynamodb" | "dynamodb-lite" | "dummy";
64
+ export type IncludedImageLoader = "s3" | "host" | "dummy";
65
+ export type IncludedOriginResolver = "pattern-env" | "dummy";
66
+ export type IncludedWarmer = "aws-lambda" | "dummy";
67
+ export type IncludedProxyExternalRequest = "node" | "fetch" | "dummy";
99
68
  export interface DefaultOverrideOptions<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> {
100
69
  /**
101
70
  * This is the main entrypoint of your app.
@@ -130,6 +99,11 @@ export interface OverrideOptions extends DefaultOverrideOptions {
130
99
  * @default "sqs"
131
100
  */
132
101
  queue?: IncludedQueue | LazyLoadedOverride<Queue>;
102
+ /**
103
+ * Add possibility to override the default proxy for external rewrite
104
+ * @default "node"
105
+ */
106
+ proxyExternalRequest?: IncludedProxyExternalRequest | LazyLoadedOverride<ProxyExternalRequest>;
133
107
  }
134
108
  export interface InstallOptions {
135
109
  /**
@@ -258,7 +232,7 @@ export interface OpenNextConfig {
258
232
  * @default undefined
259
233
  */
260
234
  warmer?: DefaultFunctionOptions<WarmerEvent, WarmerResponse> & {
261
- invokeFunction: IncludedWarmer | LazyLoadedOverride<Warmer>;
235
+ invokeFunction?: IncludedWarmer | LazyLoadedOverride<Warmer>;
262
236
  };
263
237
  /**
264
238
  * Override the default revalidate function
@@ -0,0 +1,87 @@
1
+ import type { Readable } from "node:stream";
2
+ import type { StreamCreator } from "../http/index";
3
+ import type { Meta } from "./cache";
4
+ import type { BaseEventOrResult, BaseOverride, InternalEvent, InternalResult, Origin } from "./open-next";
5
+ export interface QueueMessage {
6
+ MessageDeduplicationId: string;
7
+ MessageBody: {
8
+ host: string;
9
+ url: string;
10
+ };
11
+ MessageGroupId: string;
12
+ }
13
+ export interface Queue {
14
+ send(message: QueueMessage): Promise<void>;
15
+ name: string;
16
+ }
17
+ export type S3CachedFile = {
18
+ type: "redirect";
19
+ props?: Object;
20
+ meta?: Meta;
21
+ } | {
22
+ type: "page";
23
+ html: string;
24
+ json: Object;
25
+ meta?: Meta;
26
+ } | {
27
+ type: "app";
28
+ html: string;
29
+ rsc: string;
30
+ meta?: Meta;
31
+ } | {
32
+ type: "route";
33
+ body: string;
34
+ meta?: Meta;
35
+ };
36
+ export type S3FetchCache = Object;
37
+ export type WithLastModified<T> = {
38
+ lastModified?: number;
39
+ value?: T;
40
+ };
41
+ export type CacheValue<IsFetch extends boolean> = (IsFetch extends true ? S3FetchCache : S3CachedFile) & {
42
+ revalidate?: number | false;
43
+ };
44
+ export type IncrementalCache = {
45
+ get<IsFetch extends boolean = false>(key: string, isFetch?: IsFetch): Promise<WithLastModified<CacheValue<IsFetch>>>;
46
+ set<IsFetch extends boolean = false>(key: string, value: CacheValue<IsFetch>, isFetch?: IsFetch): Promise<void>;
47
+ delete(key: string): Promise<void>;
48
+ name: string;
49
+ };
50
+ export type TagCache = {
51
+ getByTag(tag: string): Promise<string[]>;
52
+ getByPath(path: string): Promise<string[]>;
53
+ getLastModified(path: string, lastModified?: number): Promise<number>;
54
+ writeTags(tags: {
55
+ tag: string;
56
+ path: string;
57
+ revalidatedAt?: number;
58
+ }[]): Promise<void>;
59
+ name: string;
60
+ };
61
+ export type WrapperHandler<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = (handler: OpenNextHandler<E, R>, converter: Converter<E, R>) => Promise<(...args: any[]) => any>;
62
+ export type Wrapper<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = BaseOverride & {
63
+ wrapper: WrapperHandler<E, R>;
64
+ supportStreaming: boolean;
65
+ edgeRuntime?: boolean;
66
+ };
67
+ export type OpenNextHandler<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = (event: E, responseStream?: StreamCreator) => Promise<R>;
68
+ export type Converter<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult> = BaseOverride & {
69
+ convertFrom: (event: any) => Promise<E>;
70
+ convertTo: (result: R, originalRequest?: any) => Promise<any>;
71
+ };
72
+ export type Warmer = BaseOverride & {
73
+ invoke: (warmerId: string) => Promise<void>;
74
+ };
75
+ export type ImageLoader = BaseOverride & {
76
+ load: (url: string) => Promise<{
77
+ body?: Readable;
78
+ contentType?: string;
79
+ cacheControl?: string;
80
+ }>;
81
+ };
82
+ export type OriginResolver = BaseOverride & {
83
+ resolve: (path: string) => Promise<Origin | false>;
84
+ };
85
+ export type ProxyExternalRequest = BaseOverride & {
86
+ proxy: (event: InternalEvent) => Promise<InternalResult>;
87
+ };
@@ -16,3 +16,6 @@ export declare class DetachedPromiseRunner {
16
16
  add<T>(promise: Promise<T>): void;
17
17
  await(): Promise<void>;
18
18
  }
19
+ export declare function runWithOpenNextRequestContext<T>({ isISRRevalidation }: {
20
+ isISRRevalidation: boolean;
21
+ }, fn: () => Promise<T>): Promise<T>;
@@ -46,3 +46,47 @@ export class DetachedPromiseRunner {
46
46
  });
47
47
  }
48
48
  }
49
+ async function awaitAllDetachedPromise() {
50
+ const promisesToAwait = globalThis.__openNextAls.getStore()?.pendingPromiseRunner.await() ??
51
+ Promise.resolve();
52
+ if (globalThis.openNextWaitUntil) {
53
+ globalThis.openNextWaitUntil(promisesToAwait);
54
+ return;
55
+ }
56
+ await promisesToAwait;
57
+ }
58
+ function provideNextAfterProvider() {
59
+ /** This should be considered unstable until `unstable_after` is stablized. */
60
+ const NEXT_REQUEST_CONTEXT_SYMBOL = Symbol.for("@next/request-context");
61
+ // This is needed by some lib that relies on the vercel request context to properly await stuff.
62
+ // Remove this when vercel builder is updated to provide '@next/request-context'.
63
+ const VERCEL_REQUEST_CONTEXT_SYMBOL = Symbol.for("@vercel/request-context");
64
+ const openNextStoreContext = globalThis.__openNextAls.getStore();
65
+ const waitUntil = globalThis.openNextWaitUntil ??
66
+ ((promise) => openNextStoreContext?.pendingPromiseRunner.add(promise));
67
+ const nextAfterContext = {
68
+ get: () => ({
69
+ waitUntil,
70
+ }),
71
+ };
72
+ //@ts-expect-error
73
+ globalThis[NEXT_REQUEST_CONTEXT_SYMBOL] = nextAfterContext;
74
+ // We probably want to avoid providing this everytime since some lib may incorrectly think they are running in Vercel
75
+ // It may break stuff, but at the same time it will allow libs like `@vercel/otel` to work as expected
76
+ if (process.env.EMULATE_VERCEL_REQUEST_CONTEXT) {
77
+ //@ts-expect-error
78
+ globalThis[VERCEL_REQUEST_CONTEXT_SYMBOL] = nextAfterContext;
79
+ }
80
+ }
81
+ export function runWithOpenNextRequestContext({ isISRRevalidation }, fn) {
82
+ return globalThis.__openNextAls.run({
83
+ requestId: Math.random().toString(36),
84
+ pendingPromiseRunner: new DetachedPromiseRunner(),
85
+ isISRRevalidation,
86
+ }, async () => {
87
+ provideNextAfterProvider();
88
+ const result = await fn();
89
+ await awaitAllDetachedPromise();
90
+ return result;
91
+ });
92
+ }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { ReadableStream } from "node:stream/web";
3
2
  export declare function fromReadableStream(stream: ReadableStream<Uint8Array>, base64?: boolean): Promise<string>;
4
3
  export declare function toReadableStream(value: string, isBase64?: boolean): ReadableStream;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "access": "public"
4
4
  },
5
5
  "name": "@opennextjs/aws",
6
- "version": "3.2.1",
6
+ "version": "3.2.2",
7
7
  "bin": {
8
8
  "open-next": "./dist/index.js"
9
9
  },
@@ -49,7 +49,7 @@
49
49
  "@types/aws-lambda": "^8.10.109",
50
50
  "@types/node": "^18.16.1",
51
51
  "tsc-alias": "^1.8.8",
52
- "typescript": "^4.9.3"
52
+ "typescript": "^5.6.3"
53
53
  },
54
54
  "bugs": {
55
55
  "url": "https://github.com/opennextjs/opennextjs-aws/issues"
@@ -1,34 +0,0 @@
1
- import type { Meta } from "../../types/cache";
2
- export type S3CachedFile = {
3
- type: "redirect";
4
- props?: Object;
5
- meta?: Meta;
6
- } | {
7
- type: "page";
8
- html: string;
9
- json: Object;
10
- meta?: Meta;
11
- } | {
12
- type: "app";
13
- html: string;
14
- rsc: string;
15
- meta?: Meta;
16
- } | {
17
- type: "route";
18
- body: string;
19
- meta?: Meta;
20
- };
21
- export type S3FetchCache = Object;
22
- export type WithLastModified<T> = {
23
- lastModified?: number;
24
- value?: T;
25
- };
26
- export type CacheValue<IsFetch extends boolean> = (IsFetch extends true ? S3FetchCache : S3CachedFile) & {
27
- revalidate?: number | false;
28
- };
29
- export type IncrementalCache = {
30
- get<IsFetch extends boolean = false>(key: string, isFetch?: IsFetch): Promise<WithLastModified<CacheValue<IsFetch>>>;
31
- set<IsFetch extends boolean = false>(key: string, value: CacheValue<IsFetch>, isFetch?: IsFetch): Promise<void>;
32
- delete(key: string): Promise<void>;
33
- name: string;
34
- };
@@ -1,12 +0,0 @@
1
- export interface QueueMessage {
2
- MessageDeduplicationId: string;
3
- MessageBody: {
4
- host: string;
5
- url: string;
6
- };
7
- MessageGroupId: string;
8
- }
9
- export interface Queue {
10
- send(message: QueueMessage): Promise<void>;
11
- name: string;
12
- }
@@ -1,11 +0,0 @@
1
- export type TagCache = {
2
- getByTag(tag: string): Promise<string[]>;
3
- getByPath(path: string): Promise<string[]>;
4
- getLastModified(path: string, lastModified?: number): Promise<number>;
5
- writeTags(tags: {
6
- tag: string;
7
- path: string;
8
- revalidatedAt?: number;
9
- }[]): Promise<void>;
10
- name: string;
11
- };
@@ -1 +0,0 @@
1
- export {};