cdk-nextjs
Version:
Deploy Next.js apps on AWS with CDK
71 lines • 10.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.s3 = void 0;
exports.fsToS3 = fsToS3;
exports.createS3Key = createS3Key;
const node_fs_1 = require("node:fs");
const node_path_1 = require("node:path");
// eslint-disable-next-line import/no-extraneous-dependencies
const client_s3_1 = require("@aws-sdk/client-s3");
// eslint-disable-next-line import/no-extraneous-dependencies
const lib_storage_1 = require("@aws-sdk/lib-storage");
// eslint-disable-next-line import/no-extraneous-dependencies
const mime = require("mime-types");
const common_1 = require("./common");
const constants_1 = require("../../constants");
const utils_1 = require("../utils");
exports.s3 = new client_s3_1.S3Client({});
async function fsToS3(props) {
const { buildId, destinationBucketName, destinationKeyPrefix, nextjsType, sourcePath, } = props;
const sourceFilePaths = (0, common_1.listFilePaths)(sourcePath);
for await (const filePathChunk of (0, common_1.chunkArray)(sourceFilePaths, 100)) {
const putObjectInputs = filePathChunk.map((path) => {
const contentType = mime.lookup(path) || undefined;
const key = createS3Key({
keyPrefix: destinationKeyPrefix,
path,
basePath: sourcePath,
});
let body;
if (path.includes(".next/static/chunks/main-app-") &&
nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS) {
// see src/lambdas/assets-deployment/patch-fetch.js for why this is needed
const mainAppFileContent = (0, node_fs_1.readFileSync)(path);
const patchFetchContent = (0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "patch-fetch.js"))
.toString()
// remove "use strict" because it causes: Uncaught ReferenceError: _N_E is not defined
// since strict mode doesn't allow webpack to define undeclared variables
.replace('"use strict";', "");
body = patchFetchContent + "\n" + mainAppFileContent;
}
else {
body = (0, node_fs_1.createReadStream)(path);
}
return {
Body: body,
Bucket: destinationBucketName,
ContentType: contentType,
Key: key,
Metadata: {
"next-build-id": buildId,
},
};
});
(0, utils_1.debug)(putObjectInputs.map((i) => ({
bucket: i.Bucket,
key: i.Key,
})));
await Promise.all(putObjectInputs.map((input) => new lib_storage_1.Upload({ client: exports.s3, params: input }).done()));
}
}
/**
* Create S3 Key given local path
*/
function createS3Key({ keyPrefix, path, basePath }) {
const objectKeyParts = [];
if (keyPrefix)
objectKeyParts.push(keyPrefix);
objectKeyParts.push((0, node_path_1.relative)(basePath, path));
return (0, node_path_1.join)(...objectKeyParts);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtdG8tczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9hc3NldHMtZGVwbG95bWVudC9mcy10by1zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQkEsd0JBMkRDO0FBVUQsa0NBS0M7QUE5RkQscUNBQXFFO0FBQ3JFLHlDQUEyQztBQUMzQyw2REFBNkQ7QUFDN0Qsa0RBQXFFO0FBQ3JFLDZEQUE2RDtBQUM3RCxzREFBOEM7QUFDOUMsNkRBQTZEO0FBQzdELG1DQUFtQztBQUNuQyxxQ0FBcUQ7QUFDckQsK0NBQTZDO0FBRTdDLG9DQUFpQztBQUVwQixRQUFBLEVBQUUsR0FBRyxJQUFJLG9CQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFPNUIsS0FBSyxVQUFVLE1BQU0sQ0FBQyxLQUFrQjtJQUM3QyxNQUFNLEVBQ0osT0FBTyxFQUNQLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLFVBQVUsR0FDWCxHQUFHLEtBQUssQ0FBQztJQUNWLE1BQU0sZUFBZSxHQUFHLElBQUEsc0JBQWEsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxJQUFJLEtBQUssRUFBRSxNQUFNLGFBQWEsSUFBSSxJQUFBLG1CQUFVLEVBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkUsTUFBTSxlQUFlLEdBQTRCLGFBQWEsQ0FBQyxHQUFHLENBQ2hFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDUCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztZQUNuRCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUM7Z0JBQ3RCLFNBQVMsRUFBRSxvQkFBb0I7Z0JBQy9CLElBQUk7Z0JBQ0osUUFBUSxFQUFFLFVBQVU7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUF5QixDQUFDO1lBQzlCLElBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQztnQkFDOUMsVUFBVSxLQUFLLHNCQUFVLENBQUMsZ0JBQWdCLEVBQzFDLENBQUM7Z0JBQ0QsMEVBQTBFO2dCQUMxRSxNQUFNLGtCQUFrQixHQUFHLElBQUEsc0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHNCQUFZLEVBQ3BDLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FDbEM7cUJBQ0UsUUFBUSxFQUFFO29CQUNYLHNGQUFzRjtvQkFDdEYseUVBQXlFO3FCQUN4RSxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUscUJBQXFCO2dCQUM3QixXQUFXLEVBQUUsV0FBVztnQkFDeEIsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsUUFBUSxFQUFFO29CQUNSLGVBQWUsRUFBRSxPQUFPO2lCQUN6QjthQUNGLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUEsYUFBSyxFQUNILGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO1lBQ2hCLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztTQUNYLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzVCLElBQUksb0JBQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQ2pELENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBT0Q7O0dBRUc7QUFDSCxTQUFnQixXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBb0I7SUFDekUsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQ3BDLElBQUksU0FBUztRQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFRLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUMsT0FBTyxJQUFBLGdCQUFJLEVBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgcmVhZEZpbGVTeW5jLCBSZWFkU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgUHV0T2JqZWN0Q29tbWFuZElucHV0LCBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7IFVwbG9hZCB9IGZyb20gXCJAYXdzLXNkay9saWItc3RvcmFnZVwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgbWltZSBmcm9tIFwibWltZS10eXBlc1wiO1xuaW1wb3J0IHsgY2h1bmtBcnJheSwgbGlzdEZpbGVQYXRocyB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRnNUb1MzQWN0aW9uIH0gZnJvbSBcIi4uLy4uL25leHRqcy1hc3NldHMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KTtcblxuaW50ZXJmYWNlIEZzVG9TM1Byb3BzIGV4dGVuZHMgRnNUb1MzQWN0aW9uIHtcbiAgYnVpbGRJZDogc3RyaW5nO1xuICBuZXh0anNUeXBlPzogTmV4dGpzVHlwZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZzVG9TMyhwcm9wczogRnNUb1MzUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGJ1aWxkSWQsXG4gICAgZGVzdGluYXRpb25CdWNrZXROYW1lLFxuICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4LFxuICAgIG5leHRqc1R5cGUsXG4gICAgc291cmNlUGF0aCxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBzb3VyY2VGaWxlUGF0aHMgPSBsaXN0RmlsZVBhdGhzKHNvdXJjZVBhdGgpO1xuICBmb3IgYXdhaXQgKGNvbnN0IGZpbGVQYXRoQ2h1bmsgb2YgY2h1bmtBcnJheShzb3VyY2VGaWxlUGF0aHMsIDEwMCkpIHtcbiAgICBjb25zdCBwdXRPYmplY3RJbnB1dHM6IFB1dE9iamVjdENvbW1hbmRJbnB1dFtdID0gZmlsZVBhdGhDaHVuay5tYXAoXG4gICAgICAocGF0aCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHBhdGgpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qga2V5ID0gY3JlYXRlUzNLZXkoe1xuICAgICAgICAgIGtleVByZWZpeDogZGVzdGluYXRpb25LZXlQcmVmaXgsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBiYXNlUGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBSZWFkU3RyZWFtO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcGF0aC5pbmNsdWRlcyhcIi5uZXh0L3N0YXRpYy9jaHVua3MvbWFpbi1hcHAtXCIpICYmXG4gICAgICAgICAgbmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNlZSBzcmMvbGFtYmRhcy9hc3NldHMtZGVwbG95bWVudC9wYXRjaC1mZXRjaC5qcyBmb3Igd2h5IHRoaXMgaXMgbmVlZGVkXG4gICAgICAgICAgY29uc3QgbWFpbkFwcEZpbGVDb250ZW50ID0gcmVhZEZpbGVTeW5jKHBhdGgpO1xuICAgICAgICAgIGNvbnN0IHBhdGNoRmV0Y2hDb250ZW50ID0gcmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgam9pbihfX2Rpcm5hbWUsIFwicGF0Y2gtZmV0Y2guanNcIiksXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC8vIHJlbW92ZSBcInVzZSBzdHJpY3RcIiBiZWNhdXNlIGl0IGNhdXNlczogVW5jYXVnaHQgUmVmZXJlbmNlRXJyb3I6IF9OX0UgaXMgbm90IGRlZmluZWRcbiAgICAgICAgICAgIC8vIHNpbmNlIHN0cmljdCBtb2RlIGRvZXNuJ3QgYWxsb3cgd2VicGFjayB0byBkZWZpbmUgdW5kZWNsYXJlZCB2YXJpYWJsZXNcbiAgICAgICAgICAgIC5yZXBsYWNlKCdcInVzZSBzdHJpY3RcIjsnLCBcIlwiKTtcbiAgICAgICAgICBib2R5ID0gcGF0Y2hGZXRjaENvbnRlbnQgKyBcIlxcblwiICsgbWFpbkFwcEZpbGVDb250ZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBjcmVhdGVSZWFkU3RyZWFtKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgQm9keTogYm9keSxcbiAgICAgICAgICBCdWNrZXQ6IGRlc3RpbmF0aW9uQnVja2V0TmFtZSxcbiAgICAgICAgICBDb250ZW50VHlwZTogY29udGVudFR5cGUsXG4gICAgICAgICAgS2V5OiBrZXksXG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgIFwibmV4dC1idWlsZC1pZFwiOiBidWlsZElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG4gICAgZGVidWcoXG4gICAgICBwdXRPYmplY3RJbnB1dHMubWFwKChpKSA9PiAoe1xuICAgICAgICBidWNrZXQ6IGkuQnVja2V0LFxuICAgICAgICBrZXk6IGkuS2V5LFxuICAgICAgfSkpLFxuICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwdXRPYmplY3RJbnB1dHMubWFwKChpbnB1dCkgPT5cbiAgICAgICAgbmV3IFVwbG9hZCh7IGNsaWVudDogczMsIHBhcmFtczogaW5wdXQgfSkuZG9uZSgpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBDcmVhdGVTM0tleVByb3BzIHtcbiAga2V5UHJlZml4Pzogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG59XG4vKipcbiAqIENyZWF0ZSBTMyBLZXkgZ2l2ZW4gbG9jYWwgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUzNLZXkoeyBrZXlQcmVmaXgsIHBhdGgsIGJhc2VQYXRoIH06IENyZWF0ZVMzS2V5UHJvcHMpIHtcbiAgY29uc3Qgb2JqZWN0S2V5UGFydHM6IHN0cmluZ1tdID0gW107XG4gIGlmIChrZXlQcmVmaXgpIG9iamVjdEtleVBhcnRzLnB1c2goa2V5UHJlZml4KTtcbiAgb2JqZWN0S2V5UGFydHMucHVzaChyZWxhdGl2ZShiYXNlUGF0aCwgcGF0aCkpO1xuICByZXR1cm4gam9pbiguLi5vYmplY3RLZXlQYXJ0cyk7XG59XG4iXX0=