-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroute.js
62 lines (54 loc) · 1.71 KB
/
route.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
let checkFileExists = require("./library/check-file-existence.js")
let path = require("path")
let symbols = require("./symbols.js")
let boopRoot = "boops"
let getName = request => request.url.split("/")[1]
let getNextUrl = request =>
request.url.slice(getName(request).length + 1) || "/"
let getNextRequest = request => {
request.url = getNextUrl(request)
return request
}
module.exports = async (request, response) => {
let boopName = getName(request)
let boopDirectory = boopName && path.resolve(boopRoot, boopName)
if (boopName && (await checkFileExists(boopDirectory))) {
// at this point we know there's a file at `boops/${boopName}`
let boopManifestPath = path.resolve(boopDirectory, "package.json")
let boopWebsitePath = path.resolve(boopDirectory, "website")
// let's redirect to `module/` because that's expected for a root
if (request.url == `/${boopName}`) {
return {
type: symbols.redirect,
to: request.url + "/",
}
}
if (await checkFileExists(boopManifestPath)) {
let {main} = require(boopManifestPath)
let nextRequest = getNextRequest(request)
if (main && main.endsWith(".js")) {
// we found a javascript module, hopefully can handle (request, repons)
let boop = require(boopDirectory)
return {
type: symbols.module,
module: boop,
request: nextRequest,
response: response,
result: boop(nextRequest, response),
}
} else if (await checkFileExists(boopWebsitePath)) {
// no javascript module, but we have some static files maybe?
return {
type: symbols.static,
request: nextRequest,
response: response,
websiteDirectory: boopWebsitePath,
}
}
}
}
// found nothing
return {
type: symbols.nothing,
}
}