New principles for our UI: - Components should use inline styles whenever possible - Let's shrink the size of main.css to < 100 lines over time so it just contains typography and basic styles - Always require just the individual component that is needed from Material UI so that the whole library doesn't get loaded (important for startup perf)
109 lines
2.3 KiB
JavaScript
Executable File
109 lines
2.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
var fs = require('fs')
|
|
var cp = require('child_process')
|
|
|
|
// We can't use `builtin-modules` here since our TravisCI
|
|
// setup expects this file to run with no dependencies
|
|
var BUILT_IN_NODE_MODULES = [
|
|
'assert',
|
|
'buffer',
|
|
'child_process',
|
|
'cluster',
|
|
'console',
|
|
'constants',
|
|
'crypto',
|
|
'dgram',
|
|
'dns',
|
|
'domain',
|
|
'events',
|
|
'fs',
|
|
'http',
|
|
'https',
|
|
'module',
|
|
'net',
|
|
'os',
|
|
'path',
|
|
'process',
|
|
'punycode',
|
|
'querystring',
|
|
'readline',
|
|
'repl',
|
|
'stream',
|
|
'string_decoder',
|
|
'timers',
|
|
'tls',
|
|
'tty',
|
|
'url',
|
|
'util',
|
|
'v8',
|
|
'vm',
|
|
'zlib'
|
|
]
|
|
|
|
var BUILT_IN_ELECTRON_MODULES = [ 'electron' ]
|
|
|
|
var BUILT_IN_DEPS = [].concat(BUILT_IN_NODE_MODULES, BUILT_IN_ELECTRON_MODULES)
|
|
|
|
var EXECUTABLE_DEPS = [
|
|
'babel-cli',
|
|
'babel-plugin-syntax-jsx',
|
|
'babel-plugin-transform-es2015-destructuring',
|
|
'babel-plugin-transform-object-rest-spread',
|
|
'babel-plugin-transform-react-jsx',
|
|
'gh-release',
|
|
'nodemon',
|
|
'standard'
|
|
]
|
|
|
|
main()
|
|
|
|
// Scans codebase for missing or unused dependencies. Exits with code 0 on success.
|
|
function main () {
|
|
if (process.platform === 'win32') {
|
|
console.error('Sorry, check-deps only works on Mac and Linux')
|
|
return
|
|
}
|
|
|
|
var usedDeps = findUsedDeps()
|
|
var packageDeps = findPackageDeps()
|
|
|
|
var missingDeps = usedDeps.filter(
|
|
(dep) => !includes(packageDeps, dep) && !includes(BUILT_IN_DEPS, dep)
|
|
)
|
|
var unusedDeps = packageDeps.filter(
|
|
(dep) => !includes(usedDeps, dep) && !includes(EXECUTABLE_DEPS, dep)
|
|
)
|
|
|
|
if (missingDeps.length > 0) {
|
|
console.error('Missing package dependencies: ' + missingDeps)
|
|
}
|
|
if (unusedDeps.length > 0) {
|
|
console.error('Unused package dependencies: ' + unusedDeps)
|
|
}
|
|
if (missingDeps.length + unusedDeps.length > 0) {
|
|
process.exitCode = 1
|
|
}
|
|
}
|
|
|
|
// Finds all dependencies specified in `package.json`
|
|
function findPackageDeps () {
|
|
var pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'))
|
|
|
|
var deps = Object.keys(pkg.dependencies)
|
|
var devDeps = Object.keys(pkg.devDependencies)
|
|
var optionalDeps = Object.keys(pkg.optionalDependencies)
|
|
|
|
return [].concat(deps, devDeps, optionalDeps)
|
|
}
|
|
|
|
// Finds all dependencies that used with `require()`
|
|
function findUsedDeps () {
|
|
var stdout = cp.execSync('./bin/list-deps.sh')
|
|
return stdout.toString().trim().split('\n')
|
|
}
|
|
|
|
function includes (arr, elem) {
|
|
return arr.indexOf(elem) >= 0
|
|
}
|