Skip to content

Commit 2ff1b57

Browse files
committed
Compute mime type
1 parent 6e1adb8 commit 2ff1b57

File tree

7 files changed

+1890
-13
lines changed

7 files changed

+1890
-13
lines changed

devserver/defs.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,5 @@ def devserver(name, port, static_files, workspace_name, debug = False, data = []
3737
deps = ["@bazel_tools//tools/cpp/runfiles"],
3838
linkopts = ["-lpthread"],
3939
copts = ["-fpermissive", "-w"],
40+
includes = ["@rules_devserver//devserver"],
4041
)

devserver/main.cc

Lines changed: 96 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
#include <sstream>
44
#include <vector>
55

6-
#include "external/rules_devserver/devserver/argparse/argparse.h"
7-
#include "external/rules_devserver/devserver/base64/base64.h"
8-
#include "external/rules_devserver/devserver/httplib/httplib.h"
9-
#include "external/rules_devserver/devserver/json/json.h"
10-
#include "external/rules_devserver/devserver/md5/md5.h"
11-
12-
// #include "devserver/argparse/argparse.h"
13-
// #include "devserver/base64/base64.h"
14-
// #include "devserver/httplib/httplib.h"
15-
// #include "devserver/json/json.h"
16-
// #include "devserver/md5/md5.h"
6+
// #include "external/rules_devserver/devserver/argparse/argparse.h"
7+
// #include "external/rules_devserver/devserver/base64/base64.h"
8+
// #include "external/rules_devserver/devserver/httplib/httplib.h"
9+
// #include "external/rules_devserver/devserver/json/json.h"
10+
// #include "external/rules_devserver/devserver/md5/md5.h"
11+
12+
#include "devserver/argparse/argparse.h"
13+
#include "devserver/base64/base64.h"
14+
#include "devserver/httplib/httplib.h"
15+
#include "devserver/json/json.h"
16+
#include "devserver/md5/md5.h"
1717
#include "tools/cpp/runfiles/runfiles.h"
1818

1919
using bazel::tools::cpp::runfiles::Runfiles;
@@ -46,6 +46,90 @@ std::string GetFileContents(const Path &path) {
4646
return content;
4747
}
4848

49+
std::string ComputeMimeType(const std::string &path) {
50+
const std::regex re("\\.([a-zA-Z0-9]+)$");
51+
std::smatch match;
52+
std::regex_search(path, match, re);
53+
std::string mime_type;
54+
55+
if (match.size() == 2) {
56+
const std::string extension = match[1];
57+
if (extension == "html") {
58+
mime_type = "text/html";
59+
} else if (extension == "js") {
60+
mime_type = "text/javascript";
61+
} else if (extension == "css") {
62+
mime_type = "text/css";
63+
} else if (extension == "png") {
64+
mime_type = "image/png";
65+
} else if (extension == "jpg") {
66+
mime_type = "image/jpeg";
67+
} else if (extension == "gif") {
68+
mime_type = "image/gif";
69+
} else if (extension == "svg") {
70+
mime_type = "image/svg+xml";
71+
} else if (extension == "ico") {
72+
mime_type = "image/x-icon";
73+
} else if (extension == "json") {
74+
mime_type = "application/json";
75+
} else if (extension == "txt") {
76+
mime_type = "text/plain";
77+
} else if (extension == "xml") {
78+
mime_type = "text/xml";
79+
} else if (extension == "pdf") {
80+
mime_type = "application/pdf";
81+
} else if (extension == "zip") {
82+
mime_type = "application/zip";
83+
} else if (extension == "gz") {
84+
mime_type = "application/gzip";
85+
} else if (extension == "tar") {
86+
mime_type = "application/x-tar";
87+
} else if (extension == "wav") {
88+
mime_type = "audio/wav";
89+
} else if (extension == "mp3") {
90+
mime_type = "audio/mpeg";
91+
} else if (extension == "mp4") {
92+
mime_type = "video/mp4";
93+
} else if (extension == "webm") {
94+
mime_type = "video/webm";
95+
} else if (extension == "ogg") {
96+
mime_type = "audio/ogg";
97+
} else if (extension == "ogv") {
98+
mime_type = "video/ogg";
99+
} else if (extension == "flac") {
100+
mime_type = "audio/flac";
101+
} else if (extension == "woff") {
102+
mime_type = "font/woff";
103+
} else if (extension == "woff2") {
104+
mime_type = "font/woff2";
105+
} else if (extension == "ttf") {
106+
mime_type = "font/ttf";
107+
} else if (extension == "eot") {
108+
mime_type = "font/eot";
109+
} else if (extension == "otf") {
110+
mime_type = "font/otf";
111+
} else if (extension == "map") {
112+
mime_type = "application/json";
113+
} else if (extension == "woff") {
114+
mime_type = "font/woff";
115+
} else if (extension == "woff2") {
116+
mime_type = "font/woff2";
117+
} else if (extension == "ttf") {
118+
mime_type = "font/ttf";
119+
} else if (extension == "eot") {
120+
mime_type = "font/eot";
121+
} else if (extension == "otf") {
122+
mime_type = "font/otf";
123+
} else if (extension == "map") {
124+
mime_type = "application/json";
125+
} else {
126+
mime_type = "application/octet-stream";
127+
}
128+
}
129+
130+
return mime_type;
131+
}
132+
49133
json ComputeManifest(const PathMap &path_to_contents) {
50134
json manifest;
51135

@@ -202,7 +286,7 @@ int main(int argc, char **argv) {
202286
httplib::Response &res) {
203287
DEBUG_LOG("path: " << path << "\n");
204288
DEBUG_LOG("contents: " << contents << "\n\n");
205-
res.set_content(contents, "text/html");
289+
res.set_content(contents, ComputeMimeType(path));
206290
});
207291
}
208292
svr.Get("/devserver/devserver_loader.js",

examples/WORKSPACE

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,19 @@
1-
workspace(name = "devserver_examples")
1+
workspace(name = "devserver_examples")
2+
3+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
4+
http_archive(
5+
name = "build_bazel_rules_nodejs",
6+
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-5.8.0.tar.gz"],
7+
)
8+
load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies")
9+
build_bazel_rules_nodejs_dependencies()
10+
11+
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
12+
node_repositories(
13+
node_version = "18.12.1",
14+
)
15+
npm_install(
16+
name = "npm",
17+
package_json = "//ts_serve:package.json",
18+
package_lock_json = "//ts_serve:package-lock.json",
19+
)

examples/ts_serve/BUILD

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
exports_files([
2+
"package.json",
3+
"tsconfig.json",
4+
"package-lock.json",
5+
])

0 commit comments

Comments
 (0)