mockaton 7.5.3 → 7.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/Api.js +17 -1
- package/src/ApiConstants.js +2 -1
- package/src/Commander.js +4 -0
- package/src/Dashboard.css +26 -2
- package/src/Dashboard.js +27 -5
- package/src/Mockaton.js +1 -1
- package/src/StaticDispatcher.js +9 -4
package/README.md
CHANGED
package/package.json
CHANGED
package/src/Api.js
CHANGED
|
@@ -8,6 +8,7 @@ import { cookie } from './cookie.js'
|
|
|
8
8
|
import { Config } from './Config.js'
|
|
9
9
|
import { DF, API } from './ApiConstants.js'
|
|
10
10
|
import { parseJSON } from './utils/http-request.js'
|
|
11
|
+
import { listFilesRecursively } from './utils/fs.js'
|
|
11
12
|
import * as mockBrokersCollection from './mockBrokersCollection.js'
|
|
12
13
|
import { sendOK, sendBadRequest, sendJSON, sendFile } from './utils/http-response.js'
|
|
13
14
|
|
|
@@ -23,7 +24,8 @@ export const apiGetRequests = new Map([
|
|
|
23
24
|
[API.mocks, listMockBrokers],
|
|
24
25
|
[API.cookies, listCookies],
|
|
25
26
|
[API.comments, listComments],
|
|
26
|
-
[API.cors, getIsCorsAllowed]
|
|
27
|
+
[API.cors, getIsCorsAllowed],
|
|
28
|
+
[API.static, listStaticFiles]
|
|
27
29
|
])
|
|
28
30
|
|
|
29
31
|
export const apiPatchRequests = new Map([
|
|
@@ -128,3 +130,17 @@ async function setCorsAllowed(req, response) {
|
|
|
128
130
|
sendBadRequest(response, error)
|
|
129
131
|
}
|
|
130
132
|
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
// TESTME
|
|
136
|
+
async function listStaticFiles(req, response) {
|
|
137
|
+
try {
|
|
138
|
+
const files = Config.staticDir
|
|
139
|
+
? listFilesRecursively(Config.staticDir).filter(f => !Config.ignore.test(f))
|
|
140
|
+
: []
|
|
141
|
+
sendJSON(response, files)
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
sendBadRequest(response, error)
|
|
145
|
+
}
|
|
146
|
+
}
|
package/src/ApiConstants.js
CHANGED
package/src/Commander.js
CHANGED
package/src/Dashboard.css
CHANGED
|
@@ -88,9 +88,9 @@ menu {
|
|
|
88
88
|
gap: 16px;
|
|
89
89
|
|
|
90
90
|
img {
|
|
91
|
-
width:
|
|
91
|
+
width: 130px;
|
|
92
92
|
align-self: center;
|
|
93
|
-
margin-right:
|
|
93
|
+
margin-right: 85px;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
label {
|
|
@@ -311,6 +311,30 @@ main {
|
|
|
311
311
|
font-weight: bold;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
+
.StaticFilesList {
|
|
315
|
+
margin-top: 40px;
|
|
316
|
+
|
|
317
|
+
summary {
|
|
318
|
+
margin-bottom: 8px;
|
|
319
|
+
cursor: pointer;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
li {
|
|
323
|
+
list-style: none;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
a {
|
|
327
|
+
color: var(--colorAccent);
|
|
328
|
+
text-decoration: none;
|
|
329
|
+
padding: 3px 0;
|
|
330
|
+
display: inline-block;
|
|
331
|
+
|
|
332
|
+
&:hover {
|
|
333
|
+
text-decoration: underline;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
314
338
|
|
|
315
339
|
/*
|
|
316
340
|
* Prism
|
package/src/Dashboard.js
CHANGED
|
@@ -14,6 +14,7 @@ const Strings = {
|
|
|
14
14
|
mock: 'Mock',
|
|
15
15
|
reset: 'Reset',
|
|
16
16
|
select_one: 'Select One',
|
|
17
|
+
static: 'Static',
|
|
17
18
|
title: 'Mockaton'
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -25,6 +26,7 @@ const CSS = {
|
|
|
25
26
|
PayloadViewer: 'PayloadViewer',
|
|
26
27
|
PreviewLink: 'PreviewLink',
|
|
27
28
|
ProgressBar: 'ProgressBar',
|
|
29
|
+
StaticFilesList: 'StaticFilesList',
|
|
28
30
|
|
|
29
31
|
bold: 'bold',
|
|
30
32
|
chosen: 'chosen',
|
|
@@ -42,20 +44,21 @@ function init() {
|
|
|
42
44
|
mockaton.listMocks(),
|
|
43
45
|
mockaton.listCookies(),
|
|
44
46
|
mockaton.listComments(),
|
|
45
|
-
mockaton.getCorsAllowed()
|
|
47
|
+
mockaton.getCorsAllowed(),
|
|
48
|
+
mockaton.listStaticFiles()
|
|
46
49
|
].map(api => api.then(response => response.ok && response.json())))
|
|
47
50
|
.then(App)
|
|
48
51
|
.catch(console.error)
|
|
49
52
|
}
|
|
50
53
|
init()
|
|
51
54
|
|
|
52
|
-
function App([brokersByMethod, cookies, comments, corsAllowed]) {
|
|
55
|
+
function App([brokersByMethod, cookies, comments, corsAllowed, staticFiles]) {
|
|
53
56
|
empty(document.body)
|
|
54
57
|
createRoot(document.body).render(
|
|
55
|
-
DevPanel(brokersByMethod, cookies, comments, corsAllowed))
|
|
58
|
+
DevPanel(brokersByMethod, cookies, comments, corsAllowed, staticFiles))
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
function DevPanel(brokersByMethod, cookies, comments, corsAllowed) {
|
|
61
|
+
function DevPanel(brokersByMethod, cookies, comments, corsAllowed, staticFiles) {
|
|
59
62
|
document.title = Strings.title
|
|
60
63
|
return (
|
|
61
64
|
r('div', null,
|
|
@@ -71,7 +74,8 @@ function DevPanel(brokersByMethod, cookies, comments, corsAllowed) {
|
|
|
71
74
|
r('div', { className: CSS.PayloadViewer },
|
|
72
75
|
r('h2', { ref: refPayloadFile }, Strings.mock),
|
|
73
76
|
r('pre', null,
|
|
74
|
-
r('code', { ref: refPayloadViewer }, Strings.click_link_to_preview))))
|
|
77
|
+
r('code', { ref: refPayloadViewer }, Strings.click_link_to_preview)))),
|
|
78
|
+
r(StaticFilesList, { staticFiles })))
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
function CookieSelector({ list }) {
|
|
@@ -140,6 +144,24 @@ function ResetButton() {
|
|
|
140
144
|
)
|
|
141
145
|
}
|
|
142
146
|
|
|
147
|
+
function StaticFilesList({ staticFiles }) {
|
|
148
|
+
console.log(staticFiles)
|
|
149
|
+
if (!staticFiles.length)
|
|
150
|
+
return null
|
|
151
|
+
return (
|
|
152
|
+
r('details', {
|
|
153
|
+
open: true,
|
|
154
|
+
className: CSS.StaticFilesList
|
|
155
|
+
},
|
|
156
|
+
r('summary', null, Strings.static),
|
|
157
|
+
r('ul', null,
|
|
158
|
+
staticFiles.map(f =>
|
|
159
|
+
r('li', null,
|
|
160
|
+
r('a', {
|
|
161
|
+
href: f,
|
|
162
|
+
target: '_blank'
|
|
163
|
+
}, f))))))
|
|
164
|
+
}
|
|
143
165
|
|
|
144
166
|
|
|
145
167
|
function SectionByMethod({ method, brokers }) {
|
package/src/Mockaton.js
CHANGED
|
@@ -52,7 +52,7 @@ async function onRequest(req, response) {
|
|
|
52
52
|
else if (method === 'GET' && apiGetRequests.has(url))
|
|
53
53
|
apiGetRequests.get(url)(req, response)
|
|
54
54
|
|
|
55
|
-
else if (method === 'GET' && isStatic(req))
|
|
55
|
+
else if (method === 'GET' && isStatic(req))
|
|
56
56
|
await dispatchStatic(req, response)
|
|
57
57
|
|
|
58
58
|
else
|
package/src/StaticDispatcher.js
CHANGED
|
@@ -5,11 +5,16 @@ import { sendFile, sendPartialContent, sendNotFound } from './utils/http-respons
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
export function isStatic(req) {
|
|
8
|
-
|
|
8
|
+
if (!Config.staticDir)
|
|
9
|
+
return false
|
|
10
|
+
|
|
11
|
+
const f = resolvePath(req.url)
|
|
12
|
+
return !Config.ignore.test(f) // TESTME
|
|
13
|
+
&& Boolean(f)
|
|
9
14
|
}
|
|
10
15
|
|
|
11
16
|
export async function dispatchStatic(req, response) {
|
|
12
|
-
const file = resolvePath(req)
|
|
17
|
+
const file = resolvePath(req.url)
|
|
13
18
|
if (!file)
|
|
14
19
|
sendNotFound(response)
|
|
15
20
|
else if (req.headers.range)
|
|
@@ -18,8 +23,8 @@ export async function dispatchStatic(req, response) {
|
|
|
18
23
|
sendFile(response, file)
|
|
19
24
|
}
|
|
20
25
|
|
|
21
|
-
function resolvePath(
|
|
22
|
-
let candidate = join(Config.staticDir,
|
|
26
|
+
function resolvePath(url) {
|
|
27
|
+
let candidate = join(Config.staticDir, url)
|
|
23
28
|
if (isDirectory(candidate))
|
|
24
29
|
candidate += '/index.html'
|
|
25
30
|
if (isFile(candidate))
|