Skip to content

Commit

Permalink
refactor: Replace imperative with the form of class.
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyi committed May 2, 2020
1 parent 35e5930 commit a1abf4a
Show file tree
Hide file tree
Showing 49 changed files with 2,800 additions and 2,712 deletions.
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,4 @@ config/components/es
config/components/package.json
**/package-lock.json

# gatsby files
.cache/
false
my-docs
.temp
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"pre-pub": "lerna publish --conventional-commits --canary",
"pub": "lerna publish --conventional-commits",
"serve": "yarn workspace docs serve",
"build": "yarn workspace docs build",
"test": "jest --config jest.config.js --collectCoverage",
"test-u": "jest -u --collectCoverage"
},
Expand Down
50 changes: 25 additions & 25 deletions packages/@rcpress/cli/src/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
'use strict';

/*
* @author wangyi7099
*/

const chalk = require('chalk');
const semver = require('semver');
const {
engines: { node: requiredVersion },
version
} = require('../package.json');
const path = require('path');
const { spa, ssr, eject } = require('@rcpress/core/lib/node');
const App = require('@rcpress/core/lib/node/app');
const { logger } = require('@rcpress/util');

if (!semver.satisfies(process.version, requiredVersion)) {
Expand All @@ -29,11 +35,11 @@ program
.option('-h, --host <host>', 'use specified host (default: 0.0.0.0)')
.option('--debug', 'start development server in debug mode')
.action((dir = 'docs', { host, port, debug }) => {
wrapCommand(spa)(path.resolve(dir), {
WrapperApp(App)(path.resolve(dir), {
host,
port,
debug
});
}).dev();
});

program
Expand All @@ -43,14 +49,10 @@ program
.option('--debug', 'build in development mode for debugging')
.action((dir = 'docs', { debug, dest }) => {
const outDir = dest ? path.resolve(dest) : null;
wrapCommand(spa)(
path.resolve(dir),
{
debug,
outDir
},
true /* is production */
);
WrapperApp(App)(path.resolve(dir), {
debug,
outDir
}).build();
});

program
Expand All @@ -60,11 +62,11 @@ program
.option('-h, --host <host>', 'use specified host (default: 0.0.0.0)')
.option('--debug', 'start development server in debug mode')
.action((dir = 'docs', { host, port, debug }) => {
wrapCommand(ssr)(path.resolve(dir), {
WrapperApp(App)(path.resolve(dir), {
host,
port,
debug
});
}).serve();
});

program
Expand All @@ -73,21 +75,17 @@ program
.option('-d, --dest <outDir>', 'specify build output dir (default: .rcpress/dist)')
.option('--debug', 'build in development mode for debugging')
.action((dir = 'docs', { dest, debug }) => {
wrapCommand(ssr)(
path.resolve(dir),
{
dest,
debug
},
true /* is production */
);
WrapperApp(App)(path.resolve(dir), {
dest,
debug
}).generate();
});

program
.command('eject [targetDir]')
.description('copy the default theme into .rcpress/theme for customization.')
.action((dir = 'docs') => {
wrapCommand(eject)(path.resolve(dir));
WrapperApp(App)(path.resolve(dir)).eject();
});

// output help information on unknown commands
Expand Down Expand Up @@ -142,11 +140,13 @@ if (!process.argv.slice(2).length) {
program.outputHelp();
}

function wrapCommand(fn) {
function WrapperApp(wrapperedApp) {
return (...args) => {
return fn(...args).catch(err => {
try {
return new wrapperedApp(...args);
} catch (error) {
logger.error(err.stack);
process.exitCode = 1;
});
}
};
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
const path = require('path');
const fs = require('fs-extra');
const prepare = require('../../prepare/index');
const App = require('../../app');
const { getSourceDirs } = require('@rcpress/test-util');

describe('App', () => {
test('should not throw error', async () => {
await Promise.all(
getSourceDirs(__dirname).map(async ({ name, docsPath, docsTempPath }) => {
await fs.ensureDir(docsTempPath);
const option = await prepare(docsPath);
expect(option.sourceDir).toBe(docsPath);
const app = new App(docsPath);
await app.prepare();
expect(app.options.sourceDir).toBe(docsPath);
})
);
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const prepare = require('../../prepare/index');
const fs = require('fs-extra');
const { getSourceDirs } = require('@rcpress/test-util');
const getConfig = require('../../commands/ssr/getConfig');
const { Helmet } = require('react-helmet');
const App = require('../../app');

jest.setTimeout(200000);
// Helmet.canUseDOM = false;
describe('ssr', () => {
Expand All @@ -14,12 +14,13 @@ describe('ssr', () => {
Helmet.canUseDOM = true;
});
test('pagerender', async () => {
const { getPageRender } = require('../../commands/ssr');
const getPageRenderer = require('../../app/getPageRenderer');
await Promise.all(
getSourceDirs(__dirname).map(async ({ name, docsPath, docsTempPath }) => {
await fs.ensureDir(docsTempPath);
const [ssrConfig, spaConfig, options] = await getConfig(docsPath, {}, true);
const pagerender = await getPageRender(ssrConfig, spaConfig, options);
const app = await new App(docsPath).process(true, true);
const { clientWebpackConfig, serverWebpackConfig, options } = app;
const pagerender = await getPageRenderer(serverWebpackConfig, clientWebpackConfig, options);
const html = await pagerender.renderPage(
options.siteData.pages[0],
true /* only render html*/
Expand Down
43 changes: 43 additions & 0 deletions packages/@rcpress/core/lib/node/app/getPageRenderer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';

/*
* @author wangyi7099
*/

const webpack = require('webpack');
const fs = require('fs-extra');
const path = require('path');

module.exports = async function getPageRenderer(ssrConfig, spaConfig, options) {
const { outDir } = options;
const PageRender = require('../pageRender');
if (path.resolve() === outDir) {
return console.error(
logger.error(
chalk.red('Unexpected option: outDir cannot be set to the current working directory.\n'),
false
)
);
}
await fs.remove(outDir);

return await new Promise((resolve, reject) => {
webpack([ssrConfig, spaConfig], async (err, stat) => {
if (err) {
reject(error);
}

const stats = stat.stats;
resolve(
new PageRender(stats[0].toJson(), {
clientManifest: stats[1].toJson(),
template: fs.readFileSync(
path.resolve(__dirname, '../templates/index.ssr.html'),
'utf-8'
),
outDir
})
);
});
});
};
Loading

0 comments on commit a1abf4a

Please sign in to comment.