Skip to content
This repository was archived by the owner on Dec 19, 2023. It is now read-only.

Commit 62eff09

Browse files
committed
feat(GraphQL&&Voyager): Add full CDNs dependencies fetching
resolve #198
1 parent 41b19ce commit 62eff09

File tree

3 files changed

+62
-66
lines changed

3 files changed

+62
-66
lines changed

graphiql-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/graphiql/boot/GraphiQLController.java

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,7 @@ public class GraphiQLController {
3333

3434
private static final String CDNJS_CLOUDFLARE_COM_AJAX_LIBS = "//cdnjs.cloudflare.com/ajax/libs/";
3535
private static final String CDN_JSDELIVR_NET_NPM = "//cdn.jsdelivr.net/npm/";
36-
private static final String FETCH = "fetch";
3736
private static final String GRAPHIQL = "graphiql";
38-
private static final String ES_6_PROMISE = "es6-promise";
39-
private static final String REACT = "react";
40-
private static final String REACT_DOM = "react-dom";
41-
private static final String SUBSCRIPTIONS_TRANSPORT_WS = "subscriptions-transport-ws";
42-
private static final String GRAPHIQL_SUBSCRIPTIONS_FETCHER = "graphiql-subscriptions-fetcher";
4337

4438
@Value("${graphiql.endpoint.graphql:/graphql}")
4539
private String graphqlEndpoint;
@@ -120,44 +114,47 @@ private Map<String, String> getReplacements(String graphqlEndpoint, String subsc
120114
replacements.put("subscriptionsEndpoint", subscriptionsEndpoint);
121115
replacements.put("staticBasePath", staticBasePath);
122116
replacements.put("pageTitle", pageTitle);
123-
replacements.put("es6PromiseJsUrl", getCdnJsUrl(staticBasePath, graphiqlCdnEnabled, ES_6_PROMISE,
124-
"4.1.1", "es6-promise.auto.min.js", "es6-promise.auto.min.js"));
125-
replacements.put("fetchJsUrl", getCdnJsUrl(staticBasePath, graphiqlCdnEnabled, FETCH,
126-
"2.0.4", "fetch.min.js", "fetch.min.js"));
127-
replacements.put("reactJsUrl", getCdnJsUrl(staticBasePath, graphiqlCdnEnabled, REACT,
128-
"16.8.3", "umd/react.production.min.js", "react.min.js"));
129-
replacements.put("reactDomJsUrl", getCdnJsUrl(staticBasePath, graphiqlCdnEnabled, REACT_DOM,
130-
"16.8.3", "umd/react-dom.production.min.js", "react-dom.min.js"));
131-
replacements.put("graphiqlCssUrl", getJsDelivrUrl(staticBasePath, graphiqlCdnEnabled, GRAPHIQL,
132-
graphiqlCdnVersion, "graphiql.css", "graphiql.min.css"));
133-
replacements.put("graphiqlJsUrl", getJsDelivrUrl(staticBasePath, graphiqlCdnEnabled, GRAPHIQL,
134-
graphiqlCdnVersion, "graphiql.min.js", "graphiql.min.js"));
135-
replacements.put("subscriptionsTransportWsBrowserClient", getJsDelivrUrl(staticBasePath, graphiqlCdnEnabled,
136-
SUBSCRIPTIONS_TRANSPORT_WS, "0.9.15", "browser/client.js",
137-
"subscriptions-transport-ws-browser-client.js"));
138-
replacements.put("graphiqlSubscriptionsFetcherBrowserClient", getJsDelivrUrl(staticBasePath, graphiqlCdnEnabled,
139-
GRAPHIQL_SUBSCRIPTIONS_FETCHER, "0.0.2", "browser/client.js",
140-
"graphiql-subscriptions-fetcher-browser-client.js"));
117+
replacements.put("es6PromiseJsUrl", getResourceUrl(staticBasePath, "es6-promise.auto.min.js",
118+
joinCdnjsPath("es6-promise", "4.1.1", "es6-promise.auto.min.js")));
119+
replacements.put("fetchJsUrl", getResourceUrl(staticBasePath, "fetch.min.js",
120+
joinCdnjsPath("fetch", "2.0.4", "fetch.min.js")));
121+
replacements.put("reactJsUrl", getResourceUrl(staticBasePath, "react.min.js",
122+
joinCdnjsPath("react", "16.8.3", "umd/react.production.min.js")));
123+
replacements.put("reactDomJsUrl", getResourceUrl(staticBasePath, "react-dom.min.js",
124+
joinCdnjsPath("react-dom", "16.8.3", "umd/react-dom.production.min.js")));
125+
replacements.put("graphiqlCssUrl", getResourceUrl(staticBasePath, "graphiql.min.css",
126+
joinJsDelivrPath(GRAPHIQL, graphiqlCdnVersion, "graphiql.css")));
127+
replacements.put("graphiqlJsUrl", getResourceUrl(staticBasePath, "graphiql.min.js",
128+
joinJsDelivrPath(GRAPHIQL, graphiqlCdnVersion, "graphiql.min.js")));
129+
replacements.put("subscriptionsTransportWsBrowserClientUrl", getResourceUrl(staticBasePath,
130+
"subscriptions-transport-ws-browser-client.js",
131+
joinJsDelivrPath("subscriptions-transport-ws", "0.9.15", "browser/client.js")));
132+
replacements.put("graphiqlSubscriptionsFetcherBrowserClientUrl", getResourceUrl(staticBasePath,
133+
"graphiql-subscriptions-fetcher-browser-client.js",
134+
joinJsDelivrPath("graphiql-subscriptions-fetcher", "0.0.2", "browser/client.js")));
141135
replacements.put("props", props);
142136
replacements.put("headers", headers);
143137
replacements.put("subscriptionClientTimeout", String.valueOf(subscriptionsTimeout));
144138
return replacements;
145139
}
146140

147-
private String getCdnJsUrl(String staticBasePath, Boolean isCdnEnabled, String library,
148-
String cdnVersion, String cdnFileName, String filename) {
149-
if (isCdnEnabled && StringUtils.isNotBlank(cdnVersion)) {
150-
return CDNJS_CLOUDFLARE_COM_AJAX_LIBS + library + "/" + cdnVersion + "/" + cdnFileName;
141+
private String getResourceUrl(String staticBasePath, String staticFileName, String cdnUrl) {
142+
if (graphiqlCdnEnabled && StringUtils.isNotBlank(cdnUrl)) {
143+
return cdnUrl;
151144
}
152-
return staticBasePath + "vendor/" + filename;
145+
return joinStaticPath(staticBasePath, staticFileName);
153146
}
154147

155-
private String getJsDelivrUrl(String staticBasePath, Boolean isCdnEnabled, String library,
156-
String cdnVersion, String cdnFileName, String filename) {
157-
if (isCdnEnabled && StringUtils.isNotBlank(cdnVersion)) {
158-
return CDN_JSDELIVR_NET_NPM + library + "@" + cdnVersion + "/" + cdnFileName;
159-
}
160-
return staticBasePath + "vendor/" + filename;
148+
private String joinStaticPath(String staticBasePath, String staticFileName) {
149+
return staticBasePath + "vendor/" + staticFileName;
150+
}
151+
152+
private String joinCdnjsPath(String library, String cdnVersion, String cdnFileName) {
153+
return CDNJS_CLOUDFLARE_COM_AJAX_LIBS + library + "/" + cdnVersion + "/" + cdnFileName;
154+
}
155+
156+
private String joinJsDelivrPath(String library, String cdnVersion, String cdnFileName) {
157+
return CDN_JSDELIVR_NET_NPM + library + "@" + cdnVersion + "/" + cdnFileName;
161158
}
162159

163160
private String constructGraphQlEndpoint(HttpServletRequest request, @RequestParam Map<String, String> params) {

graphiql-spring-boot-autoconfigure/src/main/resources/graphiql.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232

3333
<link rel="stylesheet" href="${graphiqlCssUrl}"/>
3434
<script src="${graphiqlJsUrl}"></script>
35-
<script src="${subscriptionsTransportWsBrowserClient}"></script>
36-
<script src="${graphiqlSubscriptionsFetcherBrowserClient}"></script>
35+
<script src="${subscriptionsTransportWsBrowserClientUrl}"></script>
36+
<script src="${graphiqlSubscriptionsFetcherBrowserClientUrl}"></script>
3737
</head>
3838
<body>
3939
<div id="splash">

voyager-spring-boot-autoconfigure/src/main/java/com/oembedler/moon/voyager/boot/VoyagerController.java

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ public class VoyagerController {
2323

2424
private static final String CDNJS_CLOUDFLARE_COM_AJAX_LIBS = "//cdnjs.cloudflare.com/ajax/libs/";
2525
private static final String CDN_JSDELIVR_NET_NPM = "//cdn.jsdelivr.net/npm/";
26-
private static final String FETCH = "fetch";
27-
private static final String ES_6_PROMISE = "es6-promise";
28-
private static final String REACT = "react";
29-
private static final String REACT_DOM = "react-dom";
3026
private static final String VOYAGER = "graphql-voyager";
3127

3228
@Value("${voyager.endpoint:/graphql}")
@@ -53,38 +49,41 @@ public void voyager(HttpServletRequest request, HttpServletResponse response) th
5349
Map<String, String> replacements = new HashMap<>();
5450
replacements.put("graphqlEndpoint", contextPath + graphqlEndpoint);
5551
replacements.put("pageTitle", pageTitle);
56-
replacements.put("es6PromiseJsUrl", getCdnJsUrl(staticBasePath, voyagerCdnEnabled, ES_6_PROMISE,
57-
"4.1.1", "es6-promise.auto.min.js", "es6-promise.auto.min.js"));
58-
replacements.put("fetchJsUrl", getCdnJsUrl(staticBasePath, voyagerCdnEnabled, FETCH,
59-
"2.0.4", "fetch.min.js", "fetch.min.js"));
60-
replacements.put("reactJsUrl", getCdnJsUrl(staticBasePath, voyagerCdnEnabled, REACT,
61-
"16.8.3", "umd/react.production.min.js", "react.min.js"));
62-
replacements.put("reactDomJsUrl", getCdnJsUrl(staticBasePath, voyagerCdnEnabled, REACT_DOM,
63-
"16.8.3", "umd/react-dom.production.min.js", "react-dom.min.js"));
64-
replacements.put("voyagerCssUrl", getJsDeliverUrl(staticBasePath, voyagerCdnEnabled, VOYAGER,
65-
voyagerCdnVersion, "dist/voyager.css", "voyager.css"));
66-
replacements.put("voyagerJsUrl", getJsDeliverUrl(staticBasePath, voyagerCdnEnabled, VOYAGER,
67-
voyagerCdnVersion, "dist/voyager.min.js", "voyager.min.js"));
68-
replacements.put("voyagerWorkerJsUrl", getJsDeliverUrl(staticBasePath, voyagerCdnEnabled, VOYAGER,
69-
voyagerCdnVersion, "dist/voyager.worker.min.js", "voyager.worker.min.js"));
52+
replacements.put("es6PromiseJsUrl", getResourceUrl(staticBasePath, "es6-promise.auto.min.js",
53+
joinCdnjsPath("es6-promise", "4.1.1", "es6-promise.auto.min.js")));
54+
replacements.put("fetchJsUrl", getResourceUrl(staticBasePath, "fetch.min.js",
55+
joinCdnjsPath("fetch", "2.0.4", "fetch.min.js")));
56+
replacements.put("reactJsUrl", getResourceUrl(staticBasePath, "react.min.js",
57+
joinCdnjsPath("react", "16.8.3", "umd/react.production.min.js")));
58+
replacements.put("reactDomJsUrl", getResourceUrl(staticBasePath, "react-dom.min.js",
59+
joinCdnjsPath("react-dom", "16.8.3", "umd/react-dom.production.min.js")));
60+
replacements.put("voyagerCssUrl", getResourceUrl(staticBasePath, "voyager.css",
61+
joinJsDelivrPath(VOYAGER, voyagerCdnVersion, "dist/voyager.css")));
62+
replacements.put("voyagerJsUrl", getResourceUrl(staticBasePath, "voyager.min.js",
63+
joinJsDelivrPath(VOYAGER, voyagerCdnVersion, "dist/voyager.min.js")));
64+
replacements.put("voyagerWorkerJsUrl", getResourceUrl(staticBasePath, "voyager.worker.js",
65+
joinJsDelivrPath(VOYAGER, voyagerCdnVersion, "dist/voyager.worker.min.js")));
7066
replacements.put("contextPath", contextPath);
7167

7268
response.getOutputStream().write(StrSubstitutor.replace(template, replacements).getBytes(Charset.defaultCharset()));
7369
}
7470

75-
private String getCdnJsUrl(String staticBasePath, Boolean isCdnEnabled, String library,
76-
String cdnVersion, String cdnFileName, String filename) {
77-
if (isCdnEnabled && StringUtils.isNotBlank(cdnVersion)) {
78-
return CDNJS_CLOUDFLARE_COM_AJAX_LIBS + library + "/" + cdnVersion + "/" + cdnFileName;
71+
private String getResourceUrl(String staticBasePath, String staticFileName, String cdnUrl) {
72+
if (voyagerCdnEnabled && StringUtils.isNotBlank(cdnUrl)) {
73+
return cdnUrl;
7974
}
80-
return staticBasePath + "vendor/" + filename;
75+
return joinStaticPath(staticBasePath, staticFileName);
8176
}
8277

83-
private String getJsDeliverUrl(String staticBasePath, Boolean isCdnEnabled, String library,
84-
String cdnVersion, String cdnFileName, String filename) {
85-
if (isCdnEnabled && StringUtils.isNotBlank(cdnVersion)) {
86-
return CDN_JSDELIVR_NET_NPM + library + "@" + cdnVersion + "/" + cdnFileName;
87-
}
88-
return staticBasePath + "vendor/" + filename;
78+
private String joinStaticPath(String staticBasePath, String staticFileName) {
79+
return staticBasePath + "vendor/" + staticFileName;
80+
}
81+
82+
private String joinCdnjsPath(String library, String cdnVersion, String cdnFileName) {
83+
return CDNJS_CLOUDFLARE_COM_AJAX_LIBS + library + "/" + cdnVersion + "/" + cdnFileName;
84+
}
85+
86+
private String joinJsDelivrPath(String library, String cdnVersion, String cdnFileName) {
87+
return CDN_JSDELIVR_NET_NPM + library + "@" + cdnVersion + "/" + cdnFileName;
8988
}
9089
}

0 commit comments

Comments
 (0)