Skip to content

Commit

Permalink
feat(docz-core): add initial gatsby bundler algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
pedronauck committed May 12, 2019
1 parent b2091fb commit 9249e34
Show file tree
Hide file tree
Showing 23 changed files with 289 additions and 924 deletions.
39 changes: 6 additions & 33 deletions core/docz-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,79 +20,52 @@
},
"dependencies": {
"@babel/core": "7.4.4",
"@babel/polyfill": "7.4.4",
"@babel/runtime": "^7.4.4",
"@mdx-js/loader": "^1.0.18",
"@sindresorhus/slugify": "^0.9.1",
"@svgr/webpack": "^4.2.0",
"acorn": "6.0.5",
"babel-loader": "^8.0.5",
"babel-plugin-export-metadata": "^1.2.0",
"babel-plugin-named-asset-import": "^0.3.2",
"babel-preset-react-app": "^9.0.0",
"cache-loader": "^3.0.0",
"chalk": "^2.4.2",
"chokidar": "^3.0.0",
"common-tags": "^1.8.0",
"detect-port": "^1.3.0",
"docz-utils": "^1.2.0",
"dotenv": "^8.0.0",
"env-dot-prop": "^2.0.1",
"express": "^4.16.4",
"fast-deep-equal": "^2.0.1",
"fast-glob": "^2.2.6",
"file-loader": "^3.0.1",
"find-up": "^3.0.0",
"fs-extra": "^7.0.1",
"get-pkg-repo": "^4.1.0",
"html-minifier": "^4.0.0",
"humanize-string": "^2.1.0",
"load-cfg": "^1.2.0",
"lodash": "^4.17.11",
"mini-html-webpack-plugin": "^0.2.3",
"ora": "^3.4.0",
"p-reduce": "^2.1.0",
"react-dev-utils": "^9.0.1",
"react-docgen": "^4.1.1",
"react-docgen-actual-name-handler": "^1.2.0",
"react-docgen-external-proptypes-handler": "^1.0.2",
"react-docgen-typescript": "^1.12.4",
"react-hot-loader": "^4.8.4",
"recast": "^0.17.6",
"rehype-docz": "^1.2.0",
"rehype-slug": "^2.0.2",
"remark-docz": "^1.2.0",
"remark-frontmatter": "^1.3.1",
"remark-parse": "^6.0.2",
"resolve": "^1.10.1",
"serve": "^11.0.0",
"shelljs": "^0.8.3",
"signale": "^1.4.0",
"source-map-loader": "^0.2.4",
"terser-webpack-plugin": "^1.2.3",
"thread-loader": "^2.1.2",
"titleize": "^2.1.0",
"typescript": "3.3.4000",
"url-loader": "^1.1.2",
"webpack": "^4.30.0",
"webpack-bundle-analyzer": "^3.3.2",
"webpack-chain": "^6.0.0",
"webpack-dev-server": "^3.3.1",
"webpack-hot-client": "^4.1.1",
"webpack-manifest-plugin": "^2.0.4",
"webpackbar": "^3.2.0",
"ws": "^7.0.0",
"xstate": "^4.5.0",
"yargs": "^13.2.2"
},
"devDependencies": {
"@types/cross-spawn": "^6.0.0",
"@types/express": "^4.16.1",
"@types/find-up": "^2.1.1",
"@types/html-minifier": "^3.5.3",
"@types/ora": "^3.2.0",
"@types/p-reduce": "^1.0.1",
"@types/react": "^16.8.17",
"@types/resolve": "^0.0.8",
"@types/webpack": "^4.4.31",
"@types/webpack-chain": "^5.2.0",
"@types/webpack-dev-server": "^3.1.5",
"@types/shelljs": "^0.8.5",
"@types/signale": "^1.2.1",
"@types/ws": "^6.0.1",
"cpy": "^7.2.0",
"docz-rollup": "^1.2.0"
Expand Down
133 changes: 2 additions & 131 deletions core/docz-core/src/bundler/build.ts
Original file line number Diff line number Diff line change
@@ -1,132 +1,3 @@
import * as fs from 'fs-extra'
import * as logger from 'signale'
import * as envDotProp from 'env-dot-prop'
import webpack, { Configuration as CFG } from 'webpack'
import chalk from 'chalk'

const FSR = require('react-dev-utils/FileSizeReporter')
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages')

import * as paths from '../config/paths'

const { measureFileSizesBeforeBuild, printFileSizesAfterBuild } = FSR
const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024
const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024

const hasCiEnvVar = () => envDotProp.get('ci', false, { parse: true })

const copyPublicFolder = async (
dest: string,
publicDir: string
): Promise<void> => {
if (await fs.pathExists(publicDir)) {
await fs.copy(publicDir, paths.distPublic(dest), {
dereference: true,
filter: file => file !== paths.indexHtml,
})
}
}

const compile = (config: CFG) =>
new Promise((resolve, reject) => {
let compiler
try {
compiler = webpack(config)
} catch (err) {
onError(err)
}
compiler &&
compiler.run((err, stats) => {
if (err) reject(err)
resolve(stats)
})
})

const builder = async (config: CFG, previousFileSizes: any) =>
new Promise(async (resolve, reject) => {
try {
const stats: any = await compile(config)
const messages = formatWebpackMessages(stats.toJson({}, true))

if (messages.errors.length) {
return reject(new Error(messages.errors.join('\n\n')))
}

if (hasCiEnvVar() && messages.warnings.length) {
logger.warn(
'\nTreating warnings as errors because process.env.CI = true.\n' +
'Most CI servers set it automatically.\n'
)
return reject(new Error(messages.warnings.join('\n\n')))
}

return resolve({
stats,
previousFileSizes,
warnings: messages.warnings,
})
} catch (err) {
reject(err)
}
})

const onSuccess = (
dist: string,
{ stats, previousFileSizes, warnings }: any
) => {
if (warnings.length) {
logger.log()
logger.warn('Compiled with warnings.\n')
logger.warn(warnings.join('\n\n'))
logger.warn(
'\nSearch for the ' +
chalk.underline(chalk.yellow('keywords')) +
' to learn more about each warning.'
)
logger.warn(
'To ignore, add ' +
chalk.cyan('// eslint-disable-next-line') +
' to the line before.\n'
)
}

logger.log()
logger.log(`File sizes after gzip:\n`)
printFileSizesAfterBuild(
stats,
previousFileSizes,
dist,
WARN_AFTER_BUNDLE_GZIP_SIZE,
WARN_AFTER_CHUNK_GZIP_SIZE
)
logger.log()
}

const onError = (err: Error) => {
logger.log()
logger.fatal(err)
process.exit(1)
logger.log()
}

export const build = async (config: CFG, dist: string, publicDir: string) => {
const interactive = new logger.Signale({ interactive: true, scope: 'build' })

try {
interactive.start('Creating an optimized bundle')

await fs.ensureDir(dist)
const previousFileSizes = await measureFileSizesBeforeBuild(dist)

await fs.emptyDir(dist)
await copyPublicFolder(dist, publicDir)

const result = await builder(config, previousFileSizes)

interactive.success('Build successfully created')
onSuccess(dist, result)
} catch (err) {
logger.fatal(chalk.red('Failed to compile.\n'))
onError(err)
}
export const build = async (config: any, dist: string, publicDir: string) => {
return null
}
Loading

0 comments on commit 9249e34

Please sign in to comment.