Skip to content

Commit abc0301

Browse files
committed
chore: mount docs.json & swagger
1 parent 56d8c58 commit abc0301

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

packages/pharaoh/lib/src/_next/_core/core_impl.dart

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,20 @@ class _PharaohNextImpl implements Application {
3030
serverUrls: [_appConfig.url],
3131
);
3232

33-
File('openapi.json')
34-
.writeAsStringSync(JsonEncoder.withIndent(' ').convert(result));
33+
final openApiFile = File('openapi.json');
34+
openApiFile.writeAsStringSync(JsonEncoder.withIndent(' ').convert(result));
35+
36+
Route.route(HTTPMethod.GET, '/swagger', (req, res) {
37+
return res
38+
.header(HttpHeaders.contentTypeHeader, ContentType.html.value)
39+
.send(OpenApiGenerator.renderDocsPage('/swagger.json'));
40+
}).commit(_spanner);
41+
42+
Route.route(HTTPMethod.GET, '/swagger.json', (_, res) {
43+
return res
44+
.header(HttpHeaders.contentTypeHeader, ContentType.json.value)
45+
.send(openApiFile.openRead());
46+
}).commit(_spanner);
3547
}
3648

3749
@override

packages/pharaoh/lib/src/_next/openapi.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,37 @@ class OpenApiGenerator {
138138

139139
return schemas;
140140
}
141+
142+
static String renderDocsPage(String openApiRoute) {
143+
return '''
144+
<!DOCTYPE html>
145+
<html lang="en">
146+
<head>
147+
<meta charset="utf-8" />
148+
<meta name="viewport" content="width=device-width, initial-scale=1" />
149+
<meta name="description" content="SwaggerUI" />
150+
<title>SwaggerUI</title>
151+
<link rel="stylesheet" href="https://unpkg.com/[email protected]/swagger-ui.css" />
152+
</head>
153+
<body>
154+
<div id="swagger-ui"></div>
155+
<script src="https://unpkg.com/[email protected]/swagger-ui-bundle.js" crossorigin></script>
156+
<script src="https://unpkg.com/[email protected]/swagger-ui-standalone-preset.js" crossorigin></script>
157+
<script>
158+
window.onload = () => {
159+
window.ui = SwaggerUIBundle({
160+
url: '$openApiRoute',
161+
dom_id: '#swagger-ui',
162+
presets: [
163+
SwaggerUIBundle.presets.apis,
164+
SwaggerUIStandalonePreset
165+
],
166+
layout: "StandaloneLayout",
167+
});
168+
};
169+
</script>
170+
</body>
171+
</html>
172+
''';
173+
}
141174
}

0 commit comments

Comments
 (0)