Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ src/vendor_deprecated
src/**/__tests__/**
# This should be enabled but that folder has too much in it that doesn't belong
src/test
test/the-files-to-test.generated.js
4 changes: 2 additions & 2 deletions src/.eslintrc → .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ globals:

rules:
# ERRORS
space-before-blocks: 2
indent: [2, 2, indentSwitchCase: true]
brace-style: 2
space-after-keywords: 2
strict: 2
Expand All @@ -25,8 +27,6 @@ rules:
consistent-return: 2
no-unused-vars: [2, args: none]
quotes: [2, 'single']
space-before-blocks: 2
indent: [2, 2, indentSwitchCase: true]

# WARNINGS
# This is the only one that's hard to track since we don't lint just changes.
Expand Down
18 changes: 0 additions & 18 deletions .jshintrc

This file was deleted.

93 changes: 58 additions & 35 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ var npmReactTasks = require('./grunt/tasks/npm-react');
var npmReactToolsTasks = require('./grunt/tasks/npm-react-tools');
var versionCheckTask = require('./grunt/tasks/version-check');
var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
var eslintTask = require('./grunt/tasks/eslint');

module.exports = function(grunt) {

Expand All @@ -22,45 +23,43 @@ module.exports = function(grunt) {
browserify: require('./grunt/config/browserify'),
populist: require('./grunt/config/populist')(grunt),
connect: require('./grunt/config/server')(grunt),
"webdriver-jasmine": require('./grunt/config/webdriver-jasmine'),
"webdriver-perf": require('./grunt/config/webdriver-perf'),
'webdriver-jasmine': require('./grunt/config/webdriver-jasmine'),
'webdriver-perf': require('./grunt/config/webdriver-perf'),
npm: require('./grunt/config/npm'),
clean: ['./build', './*.gem', './docs/_site', './examples/shared/*.js', '.module-cache'],
clean: [
'./build',
'./*.gem',
'./docs/_site',
'./examples/shared/*.js',
'.module-cache'
],
jshint: require('./grunt/config/jshint'),
/*eslint-disable camelcase */
compare_size: require('./grunt/config/compare_size')
/*eslint-enable camelcase */
});

grunt.config.set('compress', require('./grunt/config/compress'));

Object.keys(grunt.file.readJSON('package.json').devDependencies)
.filter(function(npmTaskName) { return npmTaskName.indexOf('grunt-') === 0; })
.filter(function(npmTaskName) { return npmTaskName != 'grunt-cli'; })
.forEach(function(npmTaskName) { grunt.loadNpmTasks(npmTaskName); });

// Super simplified eslint task that we can use to replace linting. This just
// shells out to eslint.
grunt.registerTask('eslint', function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node_modules/.bin/eslint',
args: ['src']
}, function(err, result, code) {
if (code === 0) {
grunt.log.ok('Lint passed (but may contain warnings)');
} else {
grunt.log.error('Lint failed');
}
if (result.stdout.length) {
grunt.log.writeln(result.stdout);
}

done(code === 0);
.filter(function(npmTaskName) {
return npmTaskName.indexOf('grunt-') === 0;
})
.filter(function(npmTaskName) {
return npmTaskName !== 'grunt-cli';
})
.forEach(function(npmTaskName) {
grunt.loadNpmTasks(npmTaskName);
});
});

grunt.registerTask('eslint', eslintTask);

grunt.registerTask('lint', ['eslint']);

grunt.registerTask('download-previous-version', require('./grunt/tasks/download-previous-version.js'));
grunt.registerTask(
'download-previous-version',
require('./grunt/tasks/download-previous-version.js')
);

grunt.registerTask('delete-build-modules', function() {
if (grunt.file.exists('build/modules')) {
Expand Down Expand Up @@ -93,11 +92,28 @@ module.exports = function(grunt) {

grunt.registerTask('version-check', versionCheckTask);

grunt.registerTask('build:basic', ['jsx:normal', 'version-check', 'browserify:basic']);
grunt.registerTask('build:addons', ['jsx:normal', 'browserify:addons']);
grunt.registerTask('build:transformer', ['jsx:normal', 'browserify:transformer']);
grunt.registerTask('build:min', ['jsx:normal', 'version-check', 'browserify:min']);
grunt.registerTask('build:addons-min', ['jsx:normal', 'browserify:addonsMin']);
grunt.registerTask('build:basic', [
'jsx:normal',
'version-check',
'browserify:basic'
]);
grunt.registerTask('build:addons', [
'jsx:normal',
'browserify:addons'
]);
grunt.registerTask('build:transformer', [
'jsx:normal',
'browserify:transformer'
]);
grunt.registerTask('build:min', [
'jsx:normal',
'version-check',
'browserify:min'
]);
grunt.registerTask('build:addons-min', [
'jsx:normal',
'browserify:addonsMin'
]);
grunt.registerTask('build:withCodeCoverageLogging', [
'jsx:normal',
'version-check',
Expand All @@ -117,8 +133,15 @@ module.exports = function(grunt) {
'version-check',
'populist:test'
]);
grunt.registerTask('build:npm-react', ['version-check', 'jsx:normal', 'npm-react:release']);
grunt.registerTask('build:gem-react-source', ['build', 'gem-react-source:release']);
grunt.registerTask('build:npm-react', [
'version-check',
'jsx:normal',
'npm-react:release'
]);
grunt.registerTask('build:gem-react-source', [
'build',
'gem-react-source:release'
]);

grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);

Expand Down Expand Up @@ -161,7 +184,7 @@ module.exports = function(grunt) {
'webdriver-perf:saucelabs_firefox',
'webdriver-perf:saucelabs_chrome',
'webdriver-perf:saucelabs_ie11',
'webdriver-perf:saucelabs_ie8',
'webdriver-perf:saucelabs_ie8'
]);

grunt.registerTask('test:webdriver:saucelabs', [
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ grunt test
grunt test --debug
# For speed, you can use fasttest and add --filter to only run one test
grunt fasttest --filter=ReactIdentity
# Lint the code with JSHint
# Lint the code with ESLint
grunt lint
# Wipe out build directory
grunt clean
Expand Down
3 changes: 1 addition & 2 deletions grunt/config/browserify.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* jshint multistr:true */
/* jshint -W040 */
/*eslint-disable no-multi-str */

'use strict';

Expand Down
2 changes: 1 addition & 1 deletion grunt/config/compare_size.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ module.exports = {
return gzip.zip(contents, {}).length;
}
},
cache: ".grunt/sizecache.json"
cache: '.grunt/sizecache.json'
}
};
2 changes: 1 addition & 1 deletion grunt/config/copy.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';

/*eslint-disable camelcase*/
module.exports = {

react_docs: {
Expand Down
22 changes: 11 additions & 11 deletions grunt/config/jsx.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ var grunt = require('grunt');
var _ = require('lodash');

var rootIDs = [
"React",
"ReactWithAddons"
'React',
'ReactWithAddons'
];

// TODO: stop packaging these libraries
rootIDs = rootIDs.concat([
"merge",
"mergeInto",
"copyProperties"
'merge',
'mergeInto',
'copyProperties'
]);

var normal = {
Expand All @@ -23,23 +23,23 @@ var normal = {
constants: {}
};
},
sourceDir: "src",
outputDir: "build/modules"
sourceDir: 'src',
outputDir: 'build/modules'
};


var test = {
rootIDs: rootIDs.concat([
"test/all.js",
"**/__tests__/*.js"
'test/all.js',
'**/__tests__/*.js'
]),
getConfig: function() {
return _.merge({}, normal.getConfig(), {
mocking: true
});
},
sourceDir: "src",
outputDir: "build/modules"
sourceDir: 'src',
outputDir: 'build/modules'
};


Expand Down
14 changes: 7 additions & 7 deletions grunt/config/populist.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

module.exports = function(grunt) {
var jasmine = {
rootDirectory: "build/jasmine",
// This syntax means to require and expose the "jasmine" module
rootDirectory: 'build/jasmine',
// This syntax means to require and expose the 'jasmine' module
// (build/jasmine/jasmine.js) as global.jasmine, and to require the
// "all" module (build/jasmine/all.js) but not expose it globally.
args: ["jasmine:jasmine", "all:"],
outfile: "./build/jasmine.js"
// 'all' module (build/jasmine/all.js) but not expose it globally.
args: ['jasmine:jasmine', 'all:'],
outfile: './build/jasmine.js'
};

var filterExpr = grunt.option('filter');
Expand All @@ -19,8 +19,8 @@ module.exports = function(grunt) {
}

var test = {
rootDirectory: "build/modules",
args: ["test/all:harness"],
rootDirectory: 'build/modules',
args: ['test/all:harness'],
requires: [filterExpr],
outfile: './build/react-test.js'
};
Expand Down
41 changes: 24 additions & 17 deletions grunt/config/server.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
'use strict';

module.exports = function(grunt){
var fs = require('fs');
var path = require('path');

module.exports = function(grunt) {
var coverageWriteStream;

grunt.task.registerTask('finalize-coverage-stream', function(){
grunt.task.registerTask('finalize-coverage-stream', function() {
if (!coverageWriteStream) {
return;
}
Expand All @@ -14,13 +17,13 @@ module.exports = function(grunt){
});

function consoleLoggerMiddleware(req, res, next) {
if (!(req.method == 'POST' && req._parsedUrl.pathname.replace(/\//g,'') == 'console' && Array.isArray(req.body))) {
if (!(req.method === 'POST' && req._parsedUrl.pathname.replace(/\//g, '') === 'console' && Array.isArray(req.body))) {
return next();
}
res.write('<!doctype html><meta charset=utf-8>');
res.end('Got it, thanks!');

req.body.forEach(function(log){
req.body.forEach(function(log) {
if (log.message.indexOf('not ok ') === 0) {
log.type = 'error';
} else if (log.message.indexOf('ok ') === 0) {
Expand All @@ -31,20 +34,20 @@ module.exports = function(grunt){
log.type = 'coverage done';
}

if (log.type == 'error') {
if (log.type === 'error') {
grunt.log.error(log.message);
} else if (log.type == 'ok') {
} else if (log.type === 'ok') {
grunt.log.ok(log.message);
} else if (log.type == 'log') {
} else if (log.type === 'log') {
grunt.log.writeln(log.message);
} else if (log.type == 'coverage') {
} else if (log.type === 'coverage') {
if (!coverageWriteStream) {
coverageWriteStream = require('fs').createWriteStream(__dirname + '/../../coverage.log');
coverageWriteStream = fs.createWriteStream(path.join(__dirname, '/../../coverage.log'));
}
coverageWriteStream.write(log.message + '\n');
} else if (log.type == 'coverage done') {
} else if (log.type === 'coverage done') {
grunt.task.run('finalize-coverage-stream');
} else if (log.type == 'perf') {
} else if (log.type === 'perf') {
grunt.event.emit('perf results', log.message);
} else {
grunt.verbose.writeln(log);
Expand All @@ -53,7 +56,7 @@ module.exports = function(grunt){
}

function testResultLoggerMiddleware(req, res, next) {
if (!(req.method == 'POST' && req._parsedUrl.pathname.indexOf('/reportTestResults') === 0)) {
if (!(req.method === 'POST' && req._parsedUrl.pathname.indexOf('/reportTestResults') === 0)) {
return next();
}
res.write('<!doctype html><meta charset=utf-8>');
Expand All @@ -62,8 +65,8 @@ module.exports = function(grunt){
var logType = 'writeln';
var message = req.body;

if (req.body.type && req.body.message){
if (req.body.type == 'error') {
if (req.body.type && req.body.message) {
if (req.body.type === 'error') {
logType = 'error';
} else if (req.body.message.indexOf('ok') === 0) {
logType = 'ok';
Expand All @@ -72,7 +75,7 @@ module.exports = function(grunt){
}
message = req.body.message;
}
if (typeof message != 'string') {
if (typeof message !== 'string') {
message = JSON.stringify(message, null, 2);
}
grunt.log[logType]('[%s][%s]', req.headers['user-agent'], Date.now(), message);
Expand All @@ -86,8 +89,12 @@ module.exports = function(grunt){
port: 9999,
middleware: function(connect, options) {

connect.logger.token('user-agent', function(req, res) { return req.headers['user-agent']; });
connect.logger.token('timestamp', function(req, res) { return Date.now(); });
connect.logger.token('user-agent', function(req, res) {
return req.headers['user-agent'];
});
connect.logger.token('timestamp', function(req, res) {
return Date.now();
});

return [
connect.json(),
Expand Down
Loading