cdk-nextjs 0.7.6 → 0.7.7
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/.jsii +3 -3
- package/.jsii.tabl.json +1 -1
- package/README.md +12 -3
- package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +31 -13
- package/docs/caching-guide.md +11 -1
- package/docs/harness-coverage.md +2 -1
- package/lib/adapter/aws-cache-store.d.ts +214 -3
- package/lib/adapter/aws-cache-store.js +470 -35
- package/lib/adapter/aws-cache-store.test.js +675 -3
- package/lib/adapter/cache-handler.mjs +421 -30
- package/lib/adapter/use-cache-common.d.ts +53 -1
- package/lib/adapter/use-cache-common.js +121 -14
- package/lib/adapter/use-cache-common.test.js +138 -1
- package/lib/adapter/use-cache-default-handler.js +36 -6
- package/lib/adapter/use-cache-default-handler.mjs +525 -42
- package/lib/adapter/use-cache-handlers.test.js +247 -7
- package/lib/adapter/use-cache-remote-handler.js +9 -7
- package/lib/adapter/use-cache-remote-handler.mjs +516 -40
- package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +2 -1
- package/lib/lambdas/post-deploy/prune-revalidation-table.js +35 -13
- package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +19 -1
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.js +18 -4
- package/lib/runtime/core.test.js +17 -1
- package/lib/runtime/lambda.mjs +16 -3
- package/lib/runtime/server.mjs +16 -3
- package/lib/runtime/tag-manifest.d.ts +15 -0
- package/lib/runtime/tag-manifest.js +24 -0
- package/lib/runtime/tag-manifest.test.d.ts +1 -0
- package/lib/runtime/tag-manifest.test.js +21 -0
- package/package.json +1 -1
package/lib/runtime/lambda.mjs
CHANGED
|
@@ -38647,6 +38647,16 @@ function httpDate(value) {
|
|
|
38647
38647
|
return date2 && !Number.isNaN(date2.getTime()) ? date2 : void 0;
|
|
38648
38648
|
}
|
|
38649
38649
|
|
|
38650
|
+
// src/runtime/tag-manifest.ts
|
|
38651
|
+
var TAG_MANIFEST_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
38652
|
+
"cdk-nextjs.use-cache.tag-manifest"
|
|
38653
|
+
);
|
|
38654
|
+
async function catchUpTags(render) {
|
|
38655
|
+
const global = globalThis;
|
|
38656
|
+
const manifest = global[TAG_MANIFEST_SYMBOL];
|
|
38657
|
+
return manifest ? manifest.catchUp(render) : render();
|
|
38658
|
+
}
|
|
38659
|
+
|
|
38650
38660
|
// src/runtime/core.ts
|
|
38651
38661
|
var NextjsRuntime = class {
|
|
38652
38662
|
constructor(options) {
|
|
@@ -38794,7 +38804,7 @@ var NextjsRuntime = class {
|
|
|
38794
38804
|
const search = toSearch(invocationQuery);
|
|
38795
38805
|
req.url = search ? `${pathname}?${search}` : pathname;
|
|
38796
38806
|
req.headers = toIncomingHttpHeaders(result.requestHeaders);
|
|
38797
|
-
|
|
38807
|
+
const options = {
|
|
38798
38808
|
waitUntil,
|
|
38799
38809
|
requestMeta: {
|
|
38800
38810
|
// The resolved query, stated rather than left to be re-derived.
|
|
@@ -38869,7 +38879,9 @@ var NextjsRuntime = class {
|
|
|
38869
38879
|
// mocked `req`/`res`).
|
|
38870
38880
|
revalidate: (config) => this.revalidate(config, request)
|
|
38871
38881
|
}
|
|
38872
|
-
}
|
|
38882
|
+
};
|
|
38883
|
+
const render = () => handler2(req, asServerResponse(res), options);
|
|
38884
|
+
await (result.entrypoint.type === "app-page" ? catchUpTags(render) : render());
|
|
38873
38885
|
if (!res.writableEnded && result.entrypoint.type !== "page-api") {
|
|
38874
38886
|
res.end();
|
|
38875
38887
|
}
|
|
@@ -39156,7 +39168,8 @@ var NextjsRuntime = class {
|
|
|
39156
39168
|
if (target.kind === "entrypoint") {
|
|
39157
39169
|
const handler2 = await this.entrypoints.load(target.entrypoint);
|
|
39158
39170
|
req.url = requestedUrl ?? req.url;
|
|
39159
|
-
|
|
39171
|
+
const render = () => handler2(req, asServerResponse(res), { waitUntil });
|
|
39172
|
+
await (target.entrypoint.type === "app-page" ? catchUpTags(render) : render());
|
|
39160
39173
|
if (!res.writableEnded) {
|
|
39161
39174
|
res.end();
|
|
39162
39175
|
}
|
package/lib/runtime/server.mjs
CHANGED
|
@@ -38647,6 +38647,16 @@ function httpDate(value) {
|
|
|
38647
38647
|
return date2 && !Number.isNaN(date2.getTime()) ? date2 : void 0;
|
|
38648
38648
|
}
|
|
38649
38649
|
|
|
38650
|
+
// src/runtime/tag-manifest.ts
|
|
38651
|
+
var TAG_MANIFEST_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
38652
|
+
"cdk-nextjs.use-cache.tag-manifest"
|
|
38653
|
+
);
|
|
38654
|
+
async function catchUpTags(render) {
|
|
38655
|
+
const global = globalThis;
|
|
38656
|
+
const manifest = global[TAG_MANIFEST_SYMBOL];
|
|
38657
|
+
return manifest ? manifest.catchUp(render) : render();
|
|
38658
|
+
}
|
|
38659
|
+
|
|
38650
38660
|
// src/runtime/core.ts
|
|
38651
38661
|
var NextjsRuntime = class {
|
|
38652
38662
|
constructor(options) {
|
|
@@ -38794,7 +38804,7 @@ var NextjsRuntime = class {
|
|
|
38794
38804
|
const search = toSearch(invocationQuery);
|
|
38795
38805
|
req.url = search ? `${pathname}?${search}` : pathname;
|
|
38796
38806
|
req.headers = toIncomingHttpHeaders(result.requestHeaders);
|
|
38797
|
-
|
|
38807
|
+
const options = {
|
|
38798
38808
|
waitUntil,
|
|
38799
38809
|
requestMeta: {
|
|
38800
38810
|
// The resolved query, stated rather than left to be re-derived.
|
|
@@ -38869,7 +38879,9 @@ var NextjsRuntime = class {
|
|
|
38869
38879
|
// mocked `req`/`res`).
|
|
38870
38880
|
revalidate: (config) => this.revalidate(config, request)
|
|
38871
38881
|
}
|
|
38872
|
-
}
|
|
38882
|
+
};
|
|
38883
|
+
const render = () => handler(req, asServerResponse(res), options);
|
|
38884
|
+
await (result.entrypoint.type === "app-page" ? catchUpTags(render) : render());
|
|
38873
38885
|
if (!res.writableEnded && result.entrypoint.type !== "page-api") {
|
|
38874
38886
|
res.end();
|
|
38875
38887
|
}
|
|
@@ -39156,7 +39168,8 @@ var NextjsRuntime = class {
|
|
|
39156
39168
|
if (target.kind === "entrypoint") {
|
|
39157
39169
|
const handler = await this.entrypoints.load(target.entrypoint);
|
|
39158
39170
|
req.url = requestedUrl ?? req.url;
|
|
39159
|
-
|
|
39171
|
+
const render = () => handler(req, asServerResponse(res), { waitUntil });
|
|
39172
|
+
await (target.entrypoint.type === "app-page" ? catchUpTags(render) : render());
|
|
39160
39173
|
if (!res.writableEnded) {
|
|
39161
39174
|
res.end();
|
|
39162
39175
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The key the process's tag manifest (`TrackedTagMarkers`, from the adapter's
|
|
3
|
+
* `sharedTagManifest`) is kept under on `globalThis`, since the runtime and the
|
|
4
|
+
* cache handlers are separate bundles.
|
|
5
|
+
*/
|
|
6
|
+
export declare const TAG_MANIFEST_SYMBOL: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Render a page, after waiting for the revalidation log query if the instance
|
|
9
|
+
* has fallen behind on it (sat idle, or thawed): here, before Next.js starts
|
|
10
|
+
* rendering, rather than inside the first `'use cache'` lookup, where the wait
|
|
11
|
+
* cuts a staged render's static stage short. Just `render` until a cache
|
|
12
|
+
* handler first creates the manifest, and then there is nothing to catch up
|
|
13
|
+
* on. Rejects only as `render` does.
|
|
14
|
+
*/
|
|
15
|
+
export declare function catchUpTags<T>(render: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TAG_MANIFEST_SYMBOL = void 0;
|
|
4
|
+
exports.catchUpTags = catchUpTags;
|
|
5
|
+
/**
|
|
6
|
+
* The key the process's tag manifest (`TrackedTagMarkers`, from the adapter's
|
|
7
|
+
* `sharedTagManifest`) is kept under on `globalThis`, since the runtime and the
|
|
8
|
+
* cache handlers are separate bundles.
|
|
9
|
+
*/
|
|
10
|
+
exports.TAG_MANIFEST_SYMBOL = Symbol.for("cdk-nextjs.use-cache.tag-manifest");
|
|
11
|
+
/**
|
|
12
|
+
* Render a page, after waiting for the revalidation log query if the instance
|
|
13
|
+
* has fallen behind on it (sat idle, or thawed): here, before Next.js starts
|
|
14
|
+
* rendering, rather than inside the first `'use cache'` lookup, where the wait
|
|
15
|
+
* cuts a staged render's static stage short. Just `render` until a cache
|
|
16
|
+
* handler first creates the manifest, and then there is nothing to catch up
|
|
17
|
+
* on. Rejects only as `render` does.
|
|
18
|
+
*/
|
|
19
|
+
async function catchUpTags(render) {
|
|
20
|
+
const global = globalThis;
|
|
21
|
+
const manifest = global[exports.TAG_MANIFEST_SYMBOL];
|
|
22
|
+
return manifest ? manifest.catchUp(render) : render();
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLW1hbmlmZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvdGFnLW1hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxrQ0FNQztBQXZCRDs7OztHQUlHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUMzQyxtQ0FBbUMsQ0FDcEMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUFJLE1BQXdCO0lBQzNELE1BQU0sTUFBTSxHQUFHLFVBRWQsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQywyQkFBbUIsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUcmFja2VkVGFnTWFya2VycyB9IGZyb20gXCIuLi9hZGFwdGVyL2F3cy1jYWNoZS1zdG9yZVwiO1xuXG4vKipcbiAqIFRoZSBrZXkgdGhlIHByb2Nlc3MncyB0YWcgbWFuaWZlc3QgKGBUcmFja2VkVGFnTWFya2Vyc2AsIGZyb20gdGhlIGFkYXB0ZXInc1xuICogYHNoYXJlZFRhZ01hbmlmZXN0YCkgaXMga2VwdCB1bmRlciBvbiBgZ2xvYmFsVGhpc2AsIHNpbmNlIHRoZSBydW50aW1lIGFuZCB0aGVcbiAqIGNhY2hlIGhhbmRsZXJzIGFyZSBzZXBhcmF0ZSBidW5kbGVzLlxuICovXG5leHBvcnQgY29uc3QgVEFHX01BTklGRVNUX1NZTUJPTCA9IFN5bWJvbC5mb3IoXG4gIFwiY2RrLW5leHRqcy51c2UtY2FjaGUudGFnLW1hbmlmZXN0XCIsXG4pO1xuXG4vKipcbiAqIFJlbmRlciBhIHBhZ2UsIGFmdGVyIHdhaXRpbmcgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5IGlmIHRoZSBpbnN0YW5jZVxuICogaGFzIGZhbGxlbiBiZWhpbmQgb24gaXQgKHNhdCBpZGxlLCBvciB0aGF3ZWQpOiBoZXJlLCBiZWZvcmUgTmV4dC5qcyBzdGFydHNcbiAqIHJlbmRlcmluZywgcmF0aGVyIHRoYW4gaW5zaWRlIHRoZSBmaXJzdCBgJ3VzZSBjYWNoZSdgIGxvb2t1cCwgd2hlcmUgdGhlIHdhaXRcbiAqIGN1dHMgYSBzdGFnZWQgcmVuZGVyJ3Mgc3RhdGljIHN0YWdlIHNob3J0LiBKdXN0IGByZW5kZXJgIHVudGlsIGEgY2FjaGVcbiAqIGhhbmRsZXIgZmlyc3QgY3JlYXRlcyB0aGUgbWFuaWZlc3QsIGFuZCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2F0Y2ggdXBcbiAqIG9uLiBSZWplY3RzIG9ubHkgYXMgYHJlbmRlcmAgZG9lcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhdGNoVXBUYWdzPFQ+KHJlbmRlcjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBnbG9iYWwgPSBnbG9iYWxUaGlzIGFzIHtcbiAgICBbVEFHX01BTklGRVNUX1NZTUJPTF0/OiBQaWNrPFRyYWNrZWRUYWdNYXJrZXJzLCBcImNhdGNoVXBcIj47XG4gIH07XG4gIGNvbnN0IG1hbmlmZXN0ID0gZ2xvYmFsW1RBR19NQU5JRkVTVF9TWU1CT0xdO1xuICByZXR1cm4gbWFuaWZlc3QgPyBtYW5pZmVzdC5jYXRjaFVwKHJlbmRlcikgOiByZW5kZXIoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tag_manifest_1 = require("./tag-manifest");
|
|
4
|
+
const global = globalThis;
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
delete global[tag_manifest_1.TAG_MANIFEST_SYMBOL];
|
|
7
|
+
});
|
|
8
|
+
describe("catchUpTags", () => {
|
|
9
|
+
it("just renders before a cache handler creates the manifest", async () => {
|
|
10
|
+
await expect((0, tag_manifest_1.catchUpTags)(async () => "page")).resolves.toBe("page");
|
|
11
|
+
});
|
|
12
|
+
it("renders through the manifest the cache handlers share", async () => {
|
|
13
|
+
const manifest = {
|
|
14
|
+
catchUp: jest.fn(async (render) => render()),
|
|
15
|
+
};
|
|
16
|
+
global[tag_manifest_1.TAG_MANIFEST_SYMBOL] = manifest;
|
|
17
|
+
await expect((0, tag_manifest_1.catchUpTags)(async () => "page")).resolves.toBe("page");
|
|
18
|
+
expect(manifest.catchUp).toHaveBeenCalledTimes(1);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLW1hbmlmZXN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS90YWctbWFuaWZlc3QudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlEQUFrRTtBQUVsRSxNQUFNLE1BQU0sR0FBRyxVQUFpRCxDQUFDO0FBRWpFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixPQUFPLE1BQU0sQ0FBQyxrQ0FBbUIsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hFLE1BQU0sTUFBTSxDQUFDLElBQUEsMEJBQVcsRUFBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUE2QixFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRSxDQUFDO1FBQ0YsTUFBTSxDQUFDLGtDQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxDQUFDLElBQUEsMEJBQVcsRUFBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYXRjaFVwVGFncywgVEFHX01BTklGRVNUX1NZTUJPTCB9IGZyb20gXCIuL3RhZy1tYW5pZmVzdFwiO1xuXG5jb25zdCBnbG9iYWwgPSBnbG9iYWxUaGlzIGFzIHsgW1RBR19NQU5JRkVTVF9TWU1CT0xdPzogdW5rbm93biB9O1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBkZWxldGUgZ2xvYmFsW1RBR19NQU5JRkVTVF9TWU1CT0xdO1xufSk7XG5cbmRlc2NyaWJlKFwiY2F0Y2hVcFRhZ3NcIiwgKCkgPT4ge1xuICBpdChcImp1c3QgcmVuZGVycyBiZWZvcmUgYSBjYWNoZSBoYW5kbGVyIGNyZWF0ZXMgdGhlIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoY2F0Y2hVcFRhZ3MoYXN5bmMgKCkgPT4gXCJwYWdlXCIpKS5yZXNvbHZlcy50b0JlKFwicGFnZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIHRocm91Z2ggdGhlIG1hbmlmZXN0IHRoZSBjYWNoZSBoYW5kbGVycyBzaGFyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICBjYXRjaFVwOiBqZXN0LmZuKGFzeW5jIChyZW5kZXI6ICgpID0+IFByb21pc2U8c3RyaW5nPikgPT4gcmVuZGVyKCkpLFxuICAgIH07XG4gICAgZ2xvYmFsW1RBR19NQU5JRkVTVF9TWU1CT0xdID0gbWFuaWZlc3Q7XG4gICAgYXdhaXQgZXhwZWN0KGNhdGNoVXBUYWdzKGFzeW5jICgpID0+IFwicGFnZVwiKSkucmVzb2x2ZXMudG9CZShcInBhZ2VcIik7XG4gICAgZXhwZWN0KG1hbmlmZXN0LmNhdGNoVXApLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG59KTtcbiJdfQ==
|