Skip to content
This repository was archived by the owner on Jan 28, 2025. It is now read-only.

Commit 2b74304

Browse files
use new s3 upload package in serverless component
1 parent 4027b18 commit 2b74304

File tree

41 files changed

+1487
-1121
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1487
-1121
lines changed

package-lock.json

Lines changed: 851 additions & 946 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/lambda-at-edge/package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/lambda-at-edge/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"@types/fs-extra": "^8.1.0",
3737
"@types/node": "^13.13.0",
3838
"@types/path-to-regexp": "^1.7.0",
39-
"ts-loader": "^7.0.0"
39+
"ts-loader": "^7.0.0",
40+
"typescript": "^3.8.3"
4041
},
4142
"peerDependencies": {
4243
"next-aws-cloudfront": "file:../cloudfront-lambda@edge-compat"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import AWS from "aws-sdk";
2+
import { Credentials } from "./lib/s3";
3+
declare type UploadStaticAssetsOptions = {
4+
bucketName: string;
5+
nextConfigDir: string;
6+
credentials: Credentials;
7+
};
8+
declare const uploadStaticAssets: (options: UploadStaticAssetsOptions) => Promise<AWS.S3.ManagedUpload.SendData[]>;
9+
export default uploadStaticAssets;
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
var __importDefault = (this && this.__importDefault) || function (mod) {
12+
return (mod && mod.__esModule) ? mod : { "default": mod };
13+
};
14+
Object.defineProperty(exports, "__esModule", { value: true });
15+
const path_1 = __importDefault(require("path"));
16+
const fs_extra_1 = __importDefault(require("fs-extra"));
17+
const readDirectoryFiles_1 = __importDefault(require("./lib/readDirectoryFiles"));
18+
const filterOutDirectories_1 = __importDefault(require("./lib/filterOutDirectories"));
19+
const constants_1 = require("./lib/constants");
20+
const s3_1 = __importDefault(require("./lib/s3"));
21+
const pathToPosix_1 = __importDefault(require("./lib/pathToPosix"));
22+
const uploadStaticAssets = (options) => __awaiter(void 0, void 0, void 0, function* () {
23+
const { bucketName, nextConfigDir } = options;
24+
const s3 = yield s3_1.default({
25+
bucketName,
26+
credentials: options.credentials
27+
});
28+
const dotNextDirectory = path_1.default.join(nextConfigDir, ".next");
29+
const BUILD_ID = fs_extra_1.default
30+
.readFileSync(path_1.default.join(dotNextDirectory, "BUILD_ID"))
31+
.toString("utf8");
32+
const buildStaticFiles = yield readDirectoryFiles_1.default(path_1.default.join(dotNextDirectory, "static", BUILD_ID));
33+
const nextBuildFileUploads = buildStaticFiles
34+
.filter(filterOutDirectories_1.default)
35+
.map((fileItem) => __awaiter(void 0, void 0, void 0, function* () {
36+
const s3Key = pathToPosix_1.default(path_1.default
37+
.relative(path_1.default.resolve(nextConfigDir), fileItem.path)
38+
.replace(/^.next/, "_next"));
39+
return s3.uploadFile({
40+
s3Key,
41+
filePath: fileItem.path,
42+
cacheControl: constants_1.IMMUTABLE_CACHE_CONTROL_HEADER
43+
});
44+
}));
45+
const pagesManifest = yield fs_extra_1.default.readJSON(path_1.default.join(dotNextDirectory, "serverless/pages-manifest.json"));
46+
const htmlPageUploads = Object.values(pagesManifest)
47+
.filter(pageFile => pageFile.endsWith(".html"))
48+
.map(relativePageFilePath => {
49+
const pageFilePath = pathToPosix_1.default(path_1.default.join(dotNextDirectory, `serverless/${relativePageFilePath}`));
50+
return s3.uploadFile({
51+
s3Key: `static-pages/${relativePageFilePath.replace(/^pages\//, "")}`,
52+
filePath: pageFilePath
53+
});
54+
});
55+
const uploadPublicOrStaticDirectory = (directory) => __awaiter(void 0, void 0, void 0, function* () {
56+
const directoryPath = path_1.default.join(nextConfigDir, directory);
57+
if (!(yield fs_extra_1.default.pathExists(directoryPath))) {
58+
return Promise.resolve([]);
59+
}
60+
const files = yield readDirectoryFiles_1.default(directoryPath);
61+
return files.filter(filterOutDirectories_1.default).map(fileItem => s3.uploadFile({
62+
filePath: fileItem.path,
63+
s3Key: pathToPosix_1.default(path_1.default.relative(path_1.default.resolve(nextConfigDir), fileItem.path))
64+
}));
65+
});
66+
const publicDirUploads = yield uploadPublicOrStaticDirectory("public");
67+
const staticDirUploads = yield uploadPublicOrStaticDirectory("static");
68+
const allUploads = [
69+
...nextBuildFileUploads,
70+
...htmlPageUploads,
71+
...publicDirUploads,
72+
...staticDirUploads
73+
];
74+
return Promise.all(allUploads);
75+
});
76+
exports.default = uploadStaticAssets;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export declare const IMMUTABLE_CACHE_CONTROL_HEADER = "public, max-age=31536000, immutable";
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.IMMUTABLE_CACHE_CONTROL_HEADER = "public, max-age=31536000, immutable";
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { Item } from "klaw";
2+
declare const _default: (fileItem: Item) => boolean;
3+
export default _default;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.default = (fileItem) => !fileItem.stats.isDirectory();
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare const _default: (filePath: string) => string;
2+
export default _default;

0 commit comments

Comments
 (0)