Skip to content

Commit f730a93

Browse files
committed
Add service worker for docs offline mode.
1 parent 2fb2885 commit f730a93

File tree

6 files changed

+1114
-49
lines changed

6 files changed

+1114
-49
lines changed

packages/react-renderer-demo/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"firebase-functions": "^3.6.1",
3636
"markdown-to-jsx": "^6.10.3",
3737
"next": "9.3.3",
38+
"next-offline": "^5.0.2",
3839
"prism-react-renderer": "^1.1.0",
3940
"prop-types": "^15.6.2",
4041
"raw-loader": "^3.1.0",

packages/react-renderer-demo/src/app/next.config.js

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,44 @@ const withMDX = require('@next/mdx')({
33
extension: /\.mdx?$/
44
});
55
const path = require('path');
6+
const withOffline = require('next-offline');
67

78
const withBundleAnalyzer = require('@next/bundle-analyzer')({
89
enabled: process.env.ANALYZE === 'true'
910
});
1011

1112
module.exports = withBundleAnalyzer(
12-
withMDX({
13-
crossOrigin: 'anonymous',
14-
pageExtensions: ['js', 'jsx', 'md', 'mdx'],
15-
distDir: '../../dist/functions/next',
16-
webpack: (config, options) => {
17-
config.resolve.alias = {
18-
...config.resolve.alias,
19-
react: path.resolve(__dirname, '../../../../node_modules/react'),
20-
'react-dom': path.resolve(__dirname, '../../../../node_modules/react-dom'),
21-
'@docs/doc-components': path.resolve(__dirname, './src/doc-components'),
22-
'@docs/components': path.resolve(__dirname, './src/components'),
23-
'@docs/pages': path.resolve(__dirname, './pages'),
24-
'@docs/examples': path.resolve(__dirname, './examples'),
25-
'@docs/list-of-contents': path.resolve(__dirname, './src/helpers/list-of-contents'),
26-
'@docs/code-example': path.resolve(__dirname, './src/components/code-example'),
27-
'@docs/hooks': path.resolve(__dirname, './src/hooks')
28-
};
13+
withOffline(
14+
withMDX({
15+
crossOrigin: 'anonymous',
16+
pageExtensions: ['js', 'jsx', 'md', 'mdx'],
17+
distDir: '../../dist/functions/next',
18+
webpack: (config, options) => {
19+
config.resolve.alias = {
20+
...config.resolve.alias,
21+
react: path.resolve(__dirname, '../../../../node_modules/react'),
22+
'react-dom': path.resolve(__dirname, '../../../../node_modules/react-dom'),
23+
'@docs/doc-components': path.resolve(__dirname, './src/doc-components'),
24+
'@docs/components': path.resolve(__dirname, './src/components'),
25+
'@docs/pages': path.resolve(__dirname, './pages'),
26+
'@docs/examples': path.resolve(__dirname, './examples'),
27+
'@docs/list-of-contents': path.resolve(__dirname, './src/helpers/list-of-contents'),
28+
'@docs/code-example': path.resolve(__dirname, './src/components/code-example'),
29+
'@docs/hooks': path.resolve(__dirname, './src/hooks')
30+
};
2931

30-
config.optimization.minimizer = [
31-
new TerserPlugin({
32-
cache: true,
33-
parallel: false,
34-
terserOptions: {
35-
keep_classnames: true, // eslint-disable-line camelcase
36-
keep_fnames: true // eslint-disable-line camelcase
37-
}
38-
})
39-
];
40-
return config;
41-
}
42-
})
32+
config.optimization.minimizer = [
33+
new TerserPlugin({
34+
cache: true,
35+
parallel: false,
36+
terserOptions: {
37+
keep_classnames: true, // eslint-disable-line camelcase
38+
keep_fnames: true // eslint-disable-line camelcase
39+
}
40+
})
41+
];
42+
return config;
43+
}
44+
})
45+
)
4346
);

packages/react-renderer-demo/src/app/pages/_document.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class MyDocument extends Document {
1515
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
1616
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Montserrat:700&display=swap" />
1717
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
18-
<link rel="stylesheet" type="text/css" href="//wpcc.io/lib/1.0.2/cookieconsent.min.css" />
19-
<script src="//wpcc.io/lib/1.0.2/cookieconsent.min.js"></script>
18+
<link rel="stylesheet" type="text/css" href="https://wpcc.io/lib/1.0.2/cookieconsent.min.css" />
19+
<script src="https://wpcc.io/lib/1.0.2/cookieconsent.min.js"></script>
2020
<style
2121
dangerouslySetInnerHTML={{
2222
__html: `

packages/react-renderer-demo/src/functions/index.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const path = require('path');
22
const functions = require('firebase-functions');
33
const next = require('next');
4+
const { join } = require('path');
5+
const { parse } = require('url');
46

57
let dev = process.env.NODE_ENV !== 'production';
68
let app = next({
@@ -11,5 +13,17 @@ let handle = app.getRequestHandler();
1113

1214
exports.next = functions.https.onRequest((req, res) => {
1315
console.log('File: ' + req.originalUrl); // eslint-disable-line no-console
14-
return app.prepare().then(() => handle(req, res));
16+
return app.prepare().then(() => {
17+
const parsedUrl = parse(req.url, true);
18+
const { pathname } = parsedUrl;
19+
20+
// handle GET request to /service-worker.js
21+
if (pathname === '/service-worker.js') {
22+
const filePath = join(__dirname, '.next', pathname);
23+
24+
app.serveStatic(req, res, filePath);
25+
} else {
26+
handle(req, res, parsedUrl);
27+
}
28+
});
1529
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* eslint no-restricted-globals: 0 */
2+
3+
const CACHE_NAME = 'simple-cache-v1';
4+
const urlsToCache = ['/'];
5+
6+
self.addEventListener('install', (event) => {
7+
const preLoaded = caches.open(CACHE_NAME).then((cache) => cache.addAll(urlsToCache));
8+
event.waitUntil(preLoaded);
9+
});
10+
11+
self.addEventListener('fetch', (event) => {
12+
const response = caches.match(event.request).then((match) => match || fetch(event.request));
13+
event.respondWith(response);
14+
});

0 commit comments

Comments
 (0)