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

Commit a808ff5

Browse files
refactor: tidy up uploadStaticAssets
1 parent 248669a commit a808ff5

File tree

2 files changed

+39
-72
lines changed

2 files changed

+39
-72
lines changed
Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
const path = require("path");
2-
const fs = require("fs");
2+
const fse = require("fs-extra");
33
const { when } = require("jest-when");
44
const uploadStaticAssets = require("../uploadStaticAssets");
55
const parseNextConfiguration = require("../parseNextConfiguration");
66
const parsedNextConfigurationFactory = require("../../utils/test/parsedNextConfigurationFactory");
77
const ServerlessPluginBuilder = require("../../utils/test/ServerlessPluginBuilder");
88
const uploadDirToS3Factory = require("../../utils/s3/upload");
99

10-
jest.mock("fs");
10+
jest.mock("fs-extra");
1111
jest.mock("../../utils/s3/upload");
1212
jest.mock("../parseNextConfiguration");
1313

@@ -19,7 +19,7 @@ describe("uploadStaticAssets", () => {
1919
uploadDirToS3Factory.mockReturnValue(uploadDirToS3);
2020
});
2121

22-
it("should NOT upload build assets when there isn't a bucket available", () => {
22+
it("does NOT upload build assets when there isn't a bucket available", () => {
2323
parseNextConfiguration.mockReturnValueOnce(
2424
parsedNextConfigurationFactory({}, null)
2525
);
@@ -31,7 +31,7 @@ describe("uploadStaticAssets", () => {
3131
});
3232
});
3333

34-
it("should upload next build assets", () => {
34+
it("uploads next build assets", () => {
3535
const distDir = "build";
3636
parseNextConfiguration.mockReturnValueOnce(
3737
parsedNextConfigurationFactory({
@@ -54,7 +54,7 @@ describe("uploadStaticAssets", () => {
5454
});
5555
});
5656

57-
it("should upload next build assets using bucketName from plugin config", () => {
57+
it("uploads next build assets using bucketName from plugin config", () => {
5858
const distDir = "build";
5959
parseNextConfiguration.mockReturnValueOnce(
6060
parsedNextConfigurationFactory({
@@ -80,80 +80,59 @@ describe("uploadStaticAssets", () => {
8080
});
8181
});
8282

83-
it("should upload staticDir", () => {
84-
const staticDir = "/path/to/assets";
83+
it("uploads static directory", () => {
84+
const plugin = new ServerlessPluginBuilder().build();
85+
const staticDir = path.join(plugin.nextConfigDir, "static");
8586

86-
when(fs.readdirSync)
87+
when(fse.pathExists)
8788
.calledWith(staticDir)
88-
.mockReturnValueOnce(["foo/bar.js"]);
89+
.mockResolvedValueOnce(true);
8990

9091
parseNextConfiguration.mockReturnValueOnce(
9192
parsedNextConfigurationFactory()
9293
);
9394

94-
const plugin = new ServerlessPluginBuilder()
95-
.withPluginConfig({
96-
staticDir
97-
})
98-
.build();
99-
10095
return uploadStaticAssets.call(plugin).then(() => {
10196
expect(uploadDirToS3).toBeCalledWith(staticDir, {
10297
bucket: "my-bucket",
103-
truncate: "assets"
98+
truncate: "static"
10499
});
105100
});
106101
});
107102

108-
it("should upload publicDir", () => {
109-
const publicDir = "/path/to/assets";
103+
it("uploads public directory", () => {
104+
const plugin = new ServerlessPluginBuilder().build();
105+
const publicDir = path.join(plugin.nextConfigDir, "public");
110106

111-
when(fs.readdirSync)
107+
when(fse.pathExists)
112108
.calledWith(publicDir)
113-
.mockReturnValueOnce(["foo/bar.js"]);
109+
.mockResolvedValueOnce(true);
114110

115111
parseNextConfiguration.mockReturnValueOnce(
116112
parsedNextConfigurationFactory()
117113
);
118114

119-
const plugin = new ServerlessPluginBuilder()
120-
.withPluginConfig({
121-
publicDir
122-
})
123-
.build();
124-
125115
return uploadStaticAssets.call(plugin).then(() => {
126116
expect(uploadDirToS3).toBeCalledWith(publicDir, {
127117
bucket: "my-bucket",
128-
truncate: "assets"
118+
truncate: "public"
129119
});
130120
});
131121
});
132122

133-
it("should not upload build assets", () => {
134-
const staticDir = "/path/to/assets";
135-
136-
when(fs.readdirSync)
137-
.calledWith(staticDir)
138-
.mockReturnValueOnce(["foo/bar.js"]);
139-
123+
it("does not upload build assets", () => {
140124
parseNextConfiguration.mockReturnValueOnce(
141125
parsedNextConfigurationFactory()
142126
);
143127

144128
const plugin = new ServerlessPluginBuilder()
145129
.withPluginConfig({
146-
uploadBuildAssets: false,
147-
staticDir
130+
uploadBuildAssets: false
148131
})
149132
.build();
150133

151134
return uploadStaticAssets.call(plugin).then(() => {
152-
expect(uploadDirToS3).toBeCalledTimes(1);
153-
expect(uploadDirToS3).toBeCalledWith(staticDir, {
154-
bucket: "my-bucket",
155-
truncate: "assets"
156-
});
135+
expect(uploadDirToS3).not.toBeCalled();
157136
});
158137
});
159138
});
Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
1-
const fs = require("fs");
1+
const fse = require("fs-extra");
22
const path = require("path");
33
const uploadDirToS3Factory = require("../utils/s3/upload");
44

5-
module.exports = function() {
5+
module.exports = async function() {
66
const uploadDirToS3 = uploadDirToS3Factory(this.providerRequest);
77

88
let { nextConfiguration, staticAssetsBucket } = this.configuration;
99

10-
const [
11-
bucketNameFromConfig,
12-
staticDir = "static",
13-
publicDir = "public",
14-
uploadBuildAssets
15-
] = this.getPluginConfigValues(
10+
const [bucketNameFromConfig, uploadBuildAssets] = this.getPluginConfigValues(
1611
"assetsBucketName",
17-
"staticDir",
18-
"publicDir",
1912
"uploadBuildAssets"
2013
);
2114

@@ -29,6 +22,20 @@ module.exports = function() {
2922

3023
const uploadPromises = [];
3124

25+
const uploadStaticOrPublicDirectory = async dirName => {
26+
const dir = path.join(this.nextConfigDir, dirName);
27+
const dirExists = await fse.pathExists(dir);
28+
29+
if (dirExists) {
30+
const uploadPromise = uploadDirToS3(dir, {
31+
bucket: staticAssetsBucket,
32+
truncate: dirName
33+
});
34+
35+
uploadPromises.push(uploadPromise);
36+
}
37+
};
38+
3239
if (uploadBuildAssets !== false) {
3340
const buildAssetsUpload = uploadDirToS3(
3441
path.join(this.nextConfigDir, nextConfiguration.distDir, "static"),
@@ -41,27 +48,8 @@ module.exports = function() {
4148
uploadPromises.push(buildAssetsUpload);
4249
}
4350

44-
const staticFiles = fs.readdirSync(staticDir);
45-
46-
if (staticFiles) {
47-
const staticDirUpload = uploadDirToS3(staticDir, {
48-
bucket: staticAssetsBucket,
49-
truncate: path.basename(staticDir)
50-
});
51-
52-
uploadPromises.push(staticDirUpload);
53-
}
54-
55-
const publicFiles = fs.readdirSync(publicDir);
56-
57-
if (publicFiles) {
58-
const staticDirUpload = uploadDirToS3(publicDir, {
59-
bucket: staticAssetsBucket,
60-
truncate: path.basename(publicDir)
61-
});
62-
63-
uploadPromises.push(staticDirUpload);
64-
}
51+
uploadStaticOrPublicDirectory("static");
52+
uploadStaticOrPublicDirectory("public");
6553

6654
return Promise.all(uploadPromises);
6755
};

0 commit comments

Comments
 (0)