diff --git a/app/.eslintrc b/app/.eslintrc
index 9d218e5..415b23f 100644
--- a/app/.eslintrc
+++ b/app/.eslintrc
@@ -1,6 +1,14 @@
{
- "extends": "eslint-config-airbnb",
+ "extends": "airbnb",
+ "parser": "babel-eslint",
+ "env": {
+ "meteor": true,
+ "browser": true,
+ "jasmine": true
+ },
"rules": {
- "prefer-const": 0
+ "no-console": 0,
+ "prefer-template": 0,
+ "import/no-unresolved": 0
}
}
diff --git a/app/components/App.jsx b/app/components/App.jsx
index 9d8cc61..d44b323 100644
--- a/app/components/App.jsx
+++ b/app/components/App.jsx
@@ -1,11 +1,11 @@
/* global ReactMeteorData */
-import React, {Component} from 'react';
+import React, { Component } from 'react';
import reactMixin from 'react-mixin';
import BlazeTemplate from './BlazeTemplate';
-import {Users, Posts} from 'collections';
+import { Users, Posts } from 'collections';
import './App.css';
-Meteor.call('sayHello', function(err, res) {
+Meteor.call('sayHello', (err, res) => {
console.log(res);
});
@@ -13,18 +13,19 @@ Meteor.call('sayHello', function(err, res) {
export default class App extends Component {
getMeteorData() {
return {
- users: Users.find().fetch()
+ usersCount: Users.find().fetch().length,
+ postsCount: Posts.find().fetch().length
};
}
render() {
- let userCount = Users.find().fetch().length;
- let postsCount = Posts.find().fetch().length;
+ const { usersCount, postsCount } = this.data;
+
return (
{Meteor.isClient &&
}
Hello Webpack!
-
There are {userCount} users in the Minimongo (login to change)
+
There are {usersCount} users in the Minimongo (login to change)
There are {postsCount} posts in the Minimongo (autopublish removed)
);
diff --git a/app/components/BlazeTemplate.js b/app/components/BlazeTemplate.js
index 276b39b..ebb12fe 100644
--- a/app/components/BlazeTemplate.js
+++ b/app/components/BlazeTemplate.js
@@ -1,8 +1,8 @@
/* global Blaze */
-import React, {component} from 'react';
+import React, { Component } from 'react';
import ReactDOM from 'react-dom';
-export default class BlazeTemplate extends React.Component {
+export default class BlazeTemplate extends Component {
static propTypes = {
template: React.PropTypes.any.isRequired,
component: React.PropTypes.any,
@@ -10,19 +10,19 @@ export default class BlazeTemplate extends React.Component {
static defaultProps = {
component: 'div',
}
- // we don't want to re-render this component if parent changes
- shouldComponentUpdate() {
- return false;
- }
componentDidMount() {
- let {template} = this.props;
+ const { template } = this.props;
this.view = Blaze.render(template, ReactDOM.findDOMNode(this.refs.root));
}
+ shouldComponentUpdate() {
+ return false;
+ }
componentWillUnmount() {
Blaze.remove(this.view);
}
render() {
- let {component, ...props} = this.props;
+ const { component } = this.props;
+ let { ...props } = this.props;
props.ref = 'root';
return React.createElement(component, props);
}
diff --git a/app/components/__tests__/client/unit/AppSpec.js b/app/components/__tests__/client/unit/AppSpec.js
index 499d9e0..e232414 100644
--- a/app/components/__tests__/client/unit/AppSpec.js
+++ b/app/components/__tests__/client/unit/AppSpec.js
@@ -5,23 +5,26 @@
// data and then the children can be very easily tested with
// just props and state. We'll use a local component for an example
-import React, {Component} from 'react';
-import {mount} from 'enzyme';
+import React, { Component, PropTypes } from 'react';
+import { mount } from 'enzyme';
class Post extends Component {
- state = {
- isVisible: true
- };
static defaultProps = {
- title: 'Default Post Name'
+ title: 'Default Post Name',
+ };
+ static propTypes = {
+ title: PropTypes.string,
+ };
+ state = {
+ isVisible: true,
};
handleHide = () => {
- this.setState({isVisible: false});
+ this.setState({ isVisible: false });
};
render() {
- let visibleClass = (this.state.isVisible) ? 'block' : 'hidden';
+ const visibleClass = (this.state.isVisible) ? 'block' : 'hidden';
return (
-
+
{this.props.title}
How now brown cow
@@ -34,22 +37,22 @@ class Post extends Component {
describe('Sample post component', () => {
it('renders default post name without props', () => {
- let comp = mount();
+ const comp = mount();
expect(comp.find('h1').text()).toEqual('Default Post Name');
});
it('renders correct post name with a name prop', () => {
- let comp = mount();
- expect(comp.find('h1').text()).toEqual("Webpack is awesome!");
+ const comp = mount();
+ expect(comp.find('h1').text()).toEqual('Webpack is awesome!');
});
- it("should have a default state of visible", () => {
- let comp = mount();
+ it('should have a default state of visible', () => {
+ const comp = mount();
expect(comp.find('.Post').prop('style').display).toEqual('block');
});
- it("should hide when hide button is clicked", () => {
- let comp = mount();
+ it('should hide when hide button is clicked', () => {
+ const comp = mount();
comp.find('button').simulate('click');
expect(comp.find('.Post').prop('style').display).toEqual('hidden');
});
diff --git a/app/fixtures.js b/app/fixtures.js
index f07b827..1f43304 100644
--- a/app/fixtures.js
+++ b/app/fixtures.js
@@ -1,9 +1,9 @@
/* global Accounts */
-import {Posts} from './collections';
+import { Posts } from './collections';
export function createPosts() {
console.log('Creating fake posts');
- [1, 2, 3, 4].forEach(function(count) {
+ [1, 2, 3, 4].forEach(count => {
Posts.insert({
name: 'Test post # ' + count,
desc: 'How now brown cow',
@@ -13,7 +13,7 @@ export function createPosts() {
export function createUsers() {
console.log('Creating fake users');
- ['Bob', 'Jane', 'Max'].forEach(function(name) {
+ ['Bob', 'Jane', 'Max'].forEach(name => {
Accounts.createUser({
username: name,
password: 'password',
diff --git a/app/main_client.js b/app/main_client.js
index 16f0cd6..2eb4fed 100644
--- a/app/main_client.js
+++ b/app/main_client.js
@@ -9,5 +9,5 @@ Accounts.ui.config({
console.log('Running on client only');
Meteor.startup(() => {
- ReactDOM.render(, document.getElementById('root'));
+ ReactDOM.render(, document.getElementById('root'));
});
diff --git a/app/main_server.js b/app/main_server.js
index a07f3fe..b6e19e0 100644
--- a/app/main_server.js
+++ b/app/main_server.js
@@ -1,7 +1,5 @@
-import React from 'react';
-import App from './components/App.jsx';
-import {Posts} from './collections';
-import {createPosts, createUsers} from './fixtures';
+import { Posts } from './collections';
+import { createPosts, createUsers } from './fixtures';
// we don't call this so we're just importing to initialize file
import './method_example';
@@ -16,5 +14,5 @@ console.log('\n\nRunning on server only');
console.log('There are # posts:', Posts.find().fetch().length);
Meteor.startup(() => {
- console.log('React SSR:', React.renderToString());
+
});
diff --git a/core-js-custom-build.js b/core-js-custom-build.js
index 4fab526..2b807b4 100644
--- a/core-js-custom-build.js
+++ b/core-js-custom-build.js
@@ -6,7 +6,7 @@ var path = require('path');
dirs.lib = path.join(dirs.webpack, 'lib');
if (!fs.existsSync(dirs.lib)) mkdir(dirs.lib);
-var coreJsVersion = JSON.parse(fs.readFileSync('node_modules/core-js/package.json')).version;
+var coreJsVersion = JSON.parse(fs.readFileSync('node_modules/core-js-builder/node_modules/core-js/package.json')).version;
var targetFileName = 'core-js-no-number.js';
var currentFileExist = fs.existsSync(path.join(dirs.lib, targetFileName));
var currentFileFewLines = currentFileExist ?
diff --git a/meteor_core/.meteor/.finished-upgraders b/meteor_core/.meteor/.finished-upgraders
index 61ee313..dacc2c0 100644
--- a/meteor_core/.meteor/.finished-upgraders
+++ b/meteor_core/.meteor/.finished-upgraders
@@ -10,3 +10,4 @@ notices-for-facebook-graph-api-2
1.2.0-meteor-platform-split
1.2.0-cordova-changes
1.2.0-breaking-changes
+1.3.0-split-minifiers-package
diff --git a/meteor_core/.meteor/packages b/meteor_core/.meteor/packages
index d67b4da..c3f2183 100644
--- a/meteor_core/.meteor/packages
+++ b/meteor_core/.meteor/packages
@@ -4,21 +4,20 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
-accounts-ui
+meteor-base
accounts-password
react-meteor-data
-babel-runtime
-meteor-base
-mobile-experience
mongo
-blaze-html-templates
session
-jquery
tracker
logging
reload
random
ejson
-spacebars
check
mindfront:why-reminify
+
+accounts-ui
+mobile-experience
+blaze-html-templates
+spacebars
diff --git a/meteor_core/.meteor/release b/meteor_core/.meteor/release
index 5684262..940e0b5 100644
--- a/meteor_core/.meteor/release
+++ b/meteor_core/.meteor/release
@@ -1 +1 @@
-METEOR@1.2.0.2
+METEOR@1.3.2.4
diff --git a/meteor_core/.meteor/versions b/meteor_core/.meteor/versions
index 8d333be..0988565 100644
--- a/meteor_core/.meteor/versions
+++ b/meteor_core/.meteor/versions
@@ -1,78 +1,82 @@
-accounts-base@1.2.1
-accounts-password@1.1.3
-accounts-ui@1.1.6
-accounts-ui-unstyled@1.1.8
-autoupdate@1.2.3
-babel-compiler@5.8.24_1
-babel-runtime@0.1.4
-base64@1.0.4
-binary-heap@1.0.4
-blaze@2.1.3
-blaze-html-templates@1.0.1
-blaze-tools@1.0.4
-boilerplate-generator@1.0.4
-caching-compiler@1.0.0
-caching-html-compiler@1.0.2
-callback-hook@1.0.4
-check@1.0.6
-ddp@1.2.2
-ddp-client@1.2.1
-ddp-common@1.2.1
-ddp-rate-limiter@1.0.0
-ddp-server@1.2.1
-deps@1.0.9
-diff-sequence@1.0.1
-ecmascript@0.1.5
-ecmascript-collections@0.1.6
-ejson@1.0.7
-email@1.0.7
-fastclick@1.0.7
-geojson-utils@1.0.4
-hot-code-push@1.0.0
-html-tools@1.0.5
-htmljs@1.0.5
-http@1.1.1
-id-map@1.0.4
-jquery@1.11.4
-jsx@0.2.1
-launch-screen@1.0.4
-less@2.5.0_3
-livedata@1.0.15
-localstorage@1.0.5
-logging@1.0.8
-meteor@1.1.9
-meteor-base@1.0.1
-mindfront:why-reminify@1.0.0
+accounts-base@1.2.7
+accounts-password@1.1.8
+accounts-ui@1.1.9
+accounts-ui-unstyled@1.1.12
+allow-deny@1.0.4
+autoupdate@1.2.9
+babel-compiler@6.6.4
+babel-runtime@0.1.8
+base64@1.0.8
+binary-heap@1.0.8
+blaze@2.1.7
+blaze-html-templates@1.0.4
+blaze-tools@1.0.8
+boilerplate-generator@1.0.8
+caching-compiler@1.0.4
+caching-html-compiler@1.0.6
+callback-hook@1.0.8
+check@1.2.1
+ddp@1.2.5
+ddp-client@1.2.7
+ddp-common@1.2.5
+ddp-rate-limiter@1.0.4
+ddp-server@1.2.6
+deps@1.0.12
+diff-sequence@1.0.5
+ecmascript@0.4.3
+ecmascript-runtime@0.2.10
+ejson@1.0.11
+email@1.0.12
+fastclick@1.0.11
+geojson-utils@1.0.8
+hot-code-push@1.0.4
+html-tools@1.0.9
+htmljs@1.0.9
+http@1.1.5
+id-map@1.0.7
+jquery@1.11.8
+launch-screen@1.0.11
+less@2.6.0
+livedata@1.0.18
+localstorage@1.0.9
+logging@1.0.12
+meteor@1.1.14
+meteor-base@1.0.4
+mindfront:why-reminify@1.0.1
+minifier-js@1.1.11
minifiers@1.1.7
-minimongo@1.0.10
-mobile-experience@1.0.1
-mobile-status-bar@1.0.6
-mongo@1.1.2
-mongo-id@1.0.1
-npm-bcrypt@0.7.8_2
-npm-mongo@1.4.39_1
-observe-sequence@1.0.7
-ordered-dict@1.0.4
-promise@0.5.0
-random@1.0.4
-rate-limit@1.0.0
-react-meteor-data@0.1.9
-reactive-dict@1.1.2
-reactive-var@1.0.6
-reload@1.1.4
-retry@1.0.4
-routepolicy@1.0.6
-service-configuration@1.0.5
-session@1.1.1
-sha@1.0.4
-spacebars@1.0.7
-spacebars-compiler@1.0.7
-srp@1.0.4
-templating@1.1.4
-templating-tools@1.0.0
-tracker@1.0.9
-ui@1.0.8
-underscore@1.0.4
-url@1.0.5
-webapp@1.2.2
-webapp-hashing@1.0.5
+minimongo@1.0.16
+mobile-experience@1.0.4
+mobile-status-bar@1.0.12
+modules@0.6.1
+modules-runtime@0.6.3
+mongo@1.1.7
+mongo-id@1.0.4
+npm-bcrypt@0.8.5
+npm-mongo@1.4.43
+observe-sequence@1.0.11
+ordered-dict@1.0.7
+promise@0.6.7
+random@1.0.9
+rate-limit@1.0.4
+react-meteor-data@0.2.9
+reactive-dict@1.1.7
+reactive-var@1.0.9
+reload@1.1.8
+retry@1.0.7
+routepolicy@1.0.10
+service-configuration@1.0.9
+session@1.1.5
+sha@1.0.7
+spacebars@1.0.11
+spacebars-compiler@1.0.11
+srp@1.0.8
+templating@1.1.9
+templating-tools@1.0.4
+tmeasday:check-npm-versions@0.3.1
+tracker@1.0.13
+ui@1.0.11
+underscore@1.0.8
+url@1.0.9
+webapp@1.2.8
+webapp-hashing@1.0.9
diff --git a/meteor_core/package.json b/meteor_core/package.json
new file mode 100644
index 0000000..f0e7155
--- /dev/null
+++ b/meteor_core/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "meteor_core",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "react": "^15.0.2",
+ "react-addons-pure-render-mixin": "^15.0.2"
+ }
+}
diff --git a/package.json b/package.json
index f503de6..38d64a1 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"repository": "https://www.github.com/jedwards1211/meteor-webpack-react",
"devDependencies": {
"babel-core": "^6.7.2",
- "babel-eslint": "^5.0.0",
+ "babel-eslint": "^6.0.4",
"babel-loader": "^6.2.4",
"babel-plugin-react-transform": "^2.0.2",
"babel-plugin-transform-decorators": "^6.6.5",
@@ -14,46 +14,44 @@
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-1": "^6.5.0",
- "core-js": "^2.1.4",
- "core-js-builder": "^2.1.4",
+ "core-js-builder": "^2.3.0",
"css-loader": "^0.23.1",
- "enzyme": "^2.1.0",
- "eslint-plugin-react": "^4.2.1",
+ "enzyme": "^2.2.0",
+ "eslint": "^2.9.0",
+ "eslint-config-airbnb": "^8.0.0",
+ "eslint-plugin-import": "^1.7.0",
+ "eslint-plugin-jsx-a11y": "^1.0.4",
+ "eslint-plugin-react": "^5.0.1",
"jasmine-core": "^2.4.1",
"json-loader": "^0.5.4",
- "karma": "^0.13.9",
- "karma-chrome-launcher": "^0.2.0",
- "karma-jasmine": "^0.3.7",
+ "karma": "^0.13.22",
+ "karma-chrome-launcher": "^1.0.1",
+ "karma-jasmine": "^1.0.2",
"karma-sourcemap-loader": "^0.3.5",
"karma-webpack": "^1.7.0",
"minimist": "^1.2.0",
- "node-libs-browser": "^1.0.0",
"null-loader": "^0.1.1",
- "progress-bar-webpack-plugin": "^1.4.1",
- "react-addons-test-utils": "^0.14.7",
- "react-transform-catch-errors": "^1.0.0",
- "react-transform-hmr": "^1.0.0",
- "redbox-react": "^1.0.1",
- "regenerator": "^0.8.36",
- "shelljs": "^0.6.0",
+ "progress-bar-webpack-plugin": "^1.5.0",
+ "react-addons-test-utils": "^15.0.2",
+ "react-transform-catch-errors": "^1.0.2",
+ "react-transform-hmr": "^1.0.4",
+ "redbox-react": "^1.2.4",
+ "regenerator-runtime": "^0.9.5",
+ "shelljs": "^0.7.0",
"source-map-support": "^0.4.0",
"style-loader": "^0.13.0",
"webpack": "^1.12.14",
"webpack-dev-server": "git+https://github.com/jedwards1211/webpack-dev-server#ec658699d413407fb12025c59c768221bb05ab0c",
- "webpack-merge": "^0.8.3"
+ "webpack-merge": "^0.12.0"
},
"dependencies": {
- "classnames": "^2.1.3",
- "karma": "^0.13.22",
- "lodash": "^4.6.1",
- "progress-bar-webpack-plugin": "^1.5.0",
- "react": "^0.14.0",
- "react-dom": "^0.14.0",
- "react-mixin": "^3.0.3",
- "react-transform-hmr": "^1.0.4"
+ "lodash": "^4.11.2",
+ "react": "^15.0.2",
+ "react-dom": "^15.0.2",
+ "react-mixin": "^3.0.3"
},
"scripts": {
- "lint": "eslint app",
+ "lint": "eslint app --ext .js,.jsx; exit 0",
"karma": "karma start"
},
"author": "",
diff --git a/webpack/make-webpack-config.js b/webpack/make-webpack-config.js
index 6e57b85..128ca01 100644
--- a/webpack/make-webpack-config.js
+++ b/webpack/make-webpack-config.js
@@ -35,7 +35,7 @@ module.exports = function(options) {
context: __dirname,
entry: [
'./lib/core-js-no-number',
- 'regenerator/runtime'
+ 'regenerator-runtime/runtime'
],
output: {
path: path.join(__dirname, 'assets'),
@@ -250,7 +250,8 @@ module.exports = function(options) {
jsdom: 'window'
},
plugins: [
- new webpack.IgnorePlugin(/react\/lib\/(ReactContext|ExecutionEnvironment)/)
+ new webpack.IgnorePlugin(/react\/lib\/(ReactContext|ExecutionEnvironment)/),
+ new webpack.IgnorePlugin(/react\/addons/)
],
devServer: {
port: webpackPort,
@@ -265,7 +266,7 @@ module.exports = function(options) {
if (entry) {
config = merge(config, {
- entry: entry
+ entry: entry
});
}