Skip to content

Commit 329120f

Browse files
committed
WIP, updating server.js to use JSDOM to fix isExternal, but also some other changes
1 parent 22f1b2b commit 329120f

File tree

7 files changed

+109
-57
lines changed

7 files changed

+109
-57
lines changed

build/ssr.js

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
var rollup = require('rollup')
2-
var buble = require('rollup-plugin-buble')
3-
var async = require('rollup-plugin-async')
4-
var replace = require('rollup-plugin-replace')
1+
var rollup = require('rollup');
2+
// var buble = require('rollup-plugin-buble');
3+
// var async = require('rollup-plugin-async')
4+
var replace = require('rollup-plugin-replace');
55

66
rollup
77
.rollup({
88
input: 'packages/docsify-server-renderer/index.js',
99
plugins: [
10-
async(),
10+
// async(),
1111
replace({
1212
__VERSION__: process.env.VERSION || require('../package.json').version,
13-
'process.env.SSR': true
13+
'process.env.SSR': true,
1414
}),
15-
buble({
16-
transforms: {
17-
generator: false
18-
}
19-
})
15+
// buble({
16+
// transforms: {
17+
// generator: false,
18+
// },
19+
// }),
2020
],
21-
onwarn: function () {}
21+
onwarn: function() {},
2222
})
23-
.then(function (bundle) {
24-
var dest = 'packages/docsify-server-renderer/build.js'
23+
.then(function(bundle) {
24+
var dest = 'packages/docsify-server-renderer/build.js';
2525

26-
console.log(dest)
26+
console.log(dest);
2727
return bundle.write({
2828
format: 'cjs',
29-
file: dest
30-
})
31-
})
32-
.catch(function (err) {
33-
console.error(err)
34-
process.exit(1)
29+
file: dest,
30+
});
3531
})
32+
.catch(function(err) {
33+
console.error(err);
34+
process.exit(1);
35+
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"pub": "sh build/release.sh",
4949
"postinstall": "opencollective-postinstall"
5050
},
51-
"husky": {
51+
"husky-OFF": {
5252
"hooks": {
5353
"pre-commit": "lint-staged"
5454
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<title>docsify</title>
6+
<meta
7+
name="viewport"
8+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
9+
/>
10+
<link rel="stylesheet" href="/themes/vue.css" title="vue" />
11+
</head>
12+
<body>
13+
<!--inject-app-->
14+
<!--inject-config-->
15+
<script src="/lib/docsify.js"></script>
16+
</body>
17+
</html>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
4+
const tmplPath = path.resolve(__dirname, 'default-template.html');
5+
6+
export function getDefaultTemplate() {
7+
return fs.readFileSync(tmplPath).toString();
8+
}

packages/docsify-server-renderer/index.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ import { Compiler } from '../../src/core/render/compiler';
99
import { isAbsolutePath } from '../../src/core/router/util';
1010
import * as tpl from '../../src/core/render/tpl';
1111
import { prerenderEmbed } from '../../src/core/render/embed';
12+
import { getDefaultTemplate } from './default-template';
13+
14+
export { getDefaultTemplate };
1215

1316
function cwd(...args) {
1417
return resolve(process.cwd(), ...args);
1518
}
1619

1720
// Borrowed from https://j11y.io/snippets/getting-a-fully-qualified-url.
1821
function qualifyURL(url) {
22+
// TODO this doesn't work in Node, passing in / results in /. It doesn't know the origin. Maybe we should update `location` globally first.
1923
const img = document.createElement('img');
2024
img.src = url; // set string url
2125
url = img.src; // get qualified url
@@ -25,6 +29,7 @@ function qualifyURL(url) {
2529

2630
function isExternal(url) {
2731
url = qualifyURL(url);
32+
// console.log('qualified URL:', url, location.origin);
2833
url = new URL(url);
2934
return url.origin !== location.origin;
3035
}
@@ -48,12 +53,13 @@ function mainTpl(config) {
4853
}
4954

5055
export default class Renderer {
51-
constructor({ template, config, cache }) {
56+
constructor({ template, config /* , cache */ }) {
5257
this.html = template;
5358
this.config = config = Object.assign({}, config, {
5459
routerMode: 'history',
5560
});
56-
this.cache = cache;
61+
62+
// this.cache = cache; // not used for anything?
5763

5864
this.router = new AbstractHistory(config);
5965
this.compiler = new Compiler(config, this.router);

server.js

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
const liveServer = require('live-server')
2-
const isSSR = !!process.env.SSR
3-
const middleware = []
1+
const liveServer = require('live-server');
2+
const isSSR = !!process.env.SSR;
3+
const middleware = [];
44

55
if (isSSR) {
6-
const Renderer = require('./packages/docsify-server-renderer/build.js')
6+
const { initJSDOM } = require('./test/_helper');
7+
8+
const dom = initJSDOM();
9+
dom.reconfigure({ url: 'https://127.0.0.1:3000' });
10+
11+
require = require('esm')(module /* , options */);
12+
13+
const {
14+
Renderer,
15+
getDefaultTemplate,
16+
} = require('./packages/docsify-server-renderer/index');
17+
18+
debugger;
19+
720
const renderer = new Renderer({
8-
template: `
9-
<!DOCTYPE html>
10-
<html lang="en">
11-
<head>
12-
<meta charset="UTF-8">
13-
<title>docsify</title>
14-
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
15-
<link rel="stylesheet" href="/themes/vue.css" title="vue">
16-
</head>
17-
<body>
18-
<!--inject-app-->
19-
<!--inject-config-->
20-
<script src="/lib/docsify.js"></script>
21-
</body>
22-
</html>`,
21+
template: getDefaultTemplate(),
2322
config: {
2423
name: 'docsify',
2524
repo: 'docsifyjs/docsify',
@@ -32,24 +31,24 @@ if (isSSR) {
3231
'/de-de/changelog': '/changelog',
3332
'/zh-cn/changelog': '/changelog',
3433
'/changelog':
35-
'https://github.com/raw/docsifyjs/docsify/master/CHANGELOG'
36-
}
34+
'https://github.com/raw/docsifyjs/docsify/master/CHANGELOG',
35+
},
3736
},
38-
path: './'
39-
})
37+
// path: './', // not used for anything?
38+
});
4039

4140
middleware.push(function(req, res, next) {
4241
if (/\.(css|js)$/.test(req.url)) {
43-
return next()
42+
return next();
4443
}
45-
renderer.renderToString(req.url).then(html => res.end(html))
46-
})
44+
renderer.renderToString(req.url).then(html => res.end(html));
45+
});
4746
}
4847

4948
const params = {
5049
port: 3000,
5150
watch: ['lib', 'docs', 'themes'],
52-
middleware
53-
}
51+
middleware,
52+
};
5453

55-
liveServer.start(params)
54+
liveServer.start(params);

test/unit/server.test.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,33 @@ const { initJSDOM } = require('../_helper');
88

99
initJSDOM();
1010

11-
const { Renderer } = require('../../packages/docsify-server-renderer/index');
11+
const {
12+
Renderer,
13+
getDefaultTemplate,
14+
} = require('../../packages/docsify-server-renderer/index');
1215

1316
describe('pacakges/docsify-server-render', function() {
14-
it('toURL', function() {
15-
expect(Renderer).to.be.an.instanceof(Function);
16-
expect('foo').equal('foo');
17+
it('renders content', function() {
18+
const renderer = new Renderer({
19+
template: getDefaultTemplate(),
20+
config: {
21+
name: 'docsify',
22+
repo: 'docsifyjs/docsify',
23+
basePath: 'https://docsify.js.org/',
24+
loadNavbar: true,
25+
loadSidebar: true,
26+
subMaxLevel: 3,
27+
auto2top: true,
28+
alias: {
29+
'/de-de/changelog': '/changelog',
30+
'/zh-cn/changelog': '/changelog',
31+
'/changelog':
32+
'https://github.com/raw/docsifyjs/docsify/master/CHANGELOG',
33+
},
34+
},
35+
// path: './', // not used for anything?
36+
});
37+
38+
expect(renderer).to.be.an.instanceof(Renderer);
1739
});
1840
});

0 commit comments

Comments
 (0)