├── .gitignore ├── app ├── components │ ├── home-page │ │ ├── home-page.css │ │ └── index.jsx │ ├── root │ │ ├── palette.css │ │ ├── root.css │ │ ├── index.jsx │ │ └── reset.css │ ├── header │ │ ├── header.css │ │ └── index.jsx │ └── simple-component │ │ └── index.jsx ├── flux │ ├── constants │ │ └── actions.js │ ├── reducers │ │ ├── index.js │ │ ├── example.js │ │ └── auto-example.js │ ├── util │ │ ├── store.js │ │ └── action.js │ ├── actions │ │ ├── example.js │ │ └── auto-example.js │ └── store │ │ └── index.js ├── main.js └── routes.jsx ├── README.md ├── webpack ├── dev-server.js ├── dev.config.js ├── base.config.js └── prod.config.js ├── index.html ├── Dockerfile ├── package.json └── .eslintrc /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | npm-debug.log 4 | -------------------------------------------------------------------------------- /app/components/home-page/home-page.css: -------------------------------------------------------------------------------- 1 | section.home-page { 2 | padding: 40px; 3 | } -------------------------------------------------------------------------------- /app/flux/constants/actions.js: -------------------------------------------------------------------------------- 1 | export const TEST = 'TEST' 2 | export const TEST_ASYNC = 'TEST_ASYNC' 3 | -------------------------------------------------------------------------------- /app/components/root/palette.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primaryLight: white; 3 | --primaryDark: black; 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Launch Development Server: 2 | `npm run debug` 3 | 4 | Build For Production: 5 | `npm run build` 6 | -------------------------------------------------------------------------------- /app/flux/reducers/index.js: -------------------------------------------------------------------------------- 1 | export {default as example} from './example' 2 | export {default as autoExample} from './auto-example' 3 | -------------------------------------------------------------------------------- /app/flux/util/store.js: -------------------------------------------------------------------------------- 1 | export default function createStore(initialState, handlers) { 2 | return (state = initialState, action) => 3 | handlers[action.type] ? 4 | handlers[action.type](state, action) : 5 | state 6 | } 7 | -------------------------------------------------------------------------------- /app/main.js: -------------------------------------------------------------------------------- 1 | /* global document */ 2 | import React from 'react' 3 | import Routes from './routes' 4 | import { Provider } from 'react-redux' 5 | import store from 'store' 6 | const element = ( 7 | 8 | {Routes} 9 | 10 | ) 11 | React.render(element, document.body) 12 | -------------------------------------------------------------------------------- /app/components/root/root.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | input:focus, select:focus { 5 | outline: 0; 6 | } 7 | a { 8 | text-decoration: none; 9 | } 10 | section.root { 11 | position: absolute; 12 | top: 0px; 13 | left: 0px; 14 | bottom: 0px; 15 | right: 0px; 16 | } 17 | -------------------------------------------------------------------------------- /app/components/header/header.css: -------------------------------------------------------------------------------- 1 | @import 'root/palette'; 2 | 3 | header { 4 | height: 60px; 5 | width: 100%; 6 | background: var(--primaryDark); 7 | color: var(--primaryLight); 8 | display: flex; 9 | justify-content: center; 10 | padding: 0px 30px; 11 | flex-direction: column; 12 | } 13 | -------------------------------------------------------------------------------- /app/flux/reducers/example.js: -------------------------------------------------------------------------------- 1 | import * as Actions from 'constants/actions' 2 | 3 | export default function (state = {}, action) { 4 | switch (action.type) { 5 | case Actions.TEST: 6 | case Actions.TEST_ASYNC: 7 | return { 8 | ...state, 9 | message: action.message, 10 | } 11 | } 12 | return state 13 | } 14 | -------------------------------------------------------------------------------- /app/flux/reducers/auto-example.js: -------------------------------------------------------------------------------- 1 | import createStore from 'util/store' 2 | 3 | export default createStore({}, { 4 | 5 | test(state,action) { 6 | return { 7 | ...state, 8 | message: action.message 9 | } 10 | }, 11 | 12 | testAsync(state, action) { 13 | return { 14 | ...state, 15 | message: action.message 16 | } 17 | } 18 | 19 | }) 20 | -------------------------------------------------------------------------------- /app/components/home-page/index.jsx: -------------------------------------------------------------------------------- 1 | import 'home-page/home-page.css' 2 | import React from 'react' 3 | import SimpleComponent from 'simple-component' 4 | 5 | export default class HomePage extends React.Component { 6 | render() { 7 | return ( 8 |
9 | 10 |
11 | ) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/flux/actions/example.js: -------------------------------------------------------------------------------- 1 | import * as Actions from 'constants/actions' 2 | 3 | export function test(message) { 4 | return { 5 | message, 6 | type: Actions.TEST, 7 | } 8 | } 9 | 10 | export function testAsync(message) { 11 | return dispatcher => { 12 | setTimeout(() => { 13 | dispatcher({ 14 | message, 15 | type: Actions.TEST_ASYNC, 16 | }) 17 | }, 2000) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/routes.jsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import React from 'react' 3 | import Router, { Route } from 'react-router' 4 | import Root from 'root' 5 | import HomePage from 'home-page' 6 | import createHistory from 'history/lib/createBrowserHistory' 7 | 8 | export const history = createHistory() 9 | export default () => ( 10 | 11 | 12 | 13 | 14 | 15 | ) 16 | -------------------------------------------------------------------------------- /webpack/dev-server.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack'); 2 | var WebpackDevServer = require('webpack-dev-server'); 3 | var port = 8080 4 | var config = require('./dev.config.js')('0.0.0.0', port); 5 | 6 | new WebpackDevServer(webpack(config), { 7 | contentBase: './build', 8 | historyApiFallback : true, 9 | hot: true 10 | }).listen(port, '0.0.0.0', function (err, result) { 11 | if (err) { 12 | console.log(err); 13 | } 14 | console.log('Listening at localhost:' + port); 15 | }); 16 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Change Me 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gliderlabs/alpine:3.1 2 | RUN apk --update add bash nodejs 3 | WORKDIR /app 4 | 5 | # Do this first so large npm installs are cached unless package.json changes 6 | ADD package.json /tmp/package.json 7 | RUN cd /tmp && npm install --no-optional 8 | RUN cp -R /tmp/node_modules ./ 9 | 10 | ADD . . 11 | RUN npm run build 12 | RUN rm -rf node_modules 13 | 14 | # Run this container to deploy static files to /www 15 | # Should link volumes-from your web server here 16 | CMD rm -rf /www/changeme && cp -R /app /www/changeme 17 | -------------------------------------------------------------------------------- /app/components/root/index.jsx: -------------------------------------------------------------------------------- 1 | import './reset.css' 2 | import './root.css' 3 | import React from 'react' 4 | import Header from 'header' 5 | 6 | 7 | // This is the root of your application. 8 | // React router will dynamically pass in this.props.children based on the route 9 | export default class Root extends React.Component { 10 | render() { 11 | return ( 12 |
13 |
14 |
15 | {this.props.children} 16 |
17 |
18 | ) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/flux/store/index.js: -------------------------------------------------------------------------------- 1 | import * as reducers from 'reducers' 2 | import { createStore, applyMiddleware, combineReducers } from 'redux' 3 | import thunk from 'redux-thunk' 4 | 5 | const createStoreWithMiddleware = applyMiddleware( 6 | thunk, 7 | )(createStore) 8 | 9 | const combined = combineReducers(reducers) 10 | const store = createStoreWithMiddleware(combined) 11 | 12 | if (module.hot) { 13 | module.hot.accept('../reducers', () => { 14 | const nextRootReducer = require('../reducers') 15 | store.replaceReducer(nextRootReducer) 16 | }) 17 | } 18 | 19 | export default store 20 | -------------------------------------------------------------------------------- /app/flux/actions/auto-example.js: -------------------------------------------------------------------------------- 1 | /* 2 | This uses helper functions from util/action to automatically generate names 3 | for dispatched events based on the function names. This prevents you from 4 | having to maintain a list of constants somewhere. 5 | */ 6 | 7 | 8 | import createActions from 'util/action' 9 | 10 | export default createActions({ 11 | test(message) { 12 | return { 13 | message, 14 | } 15 | }, 16 | testAsync(message) { 17 | return dispatcher => { 18 | setTimeout(() => { 19 | dispatcher({ 20 | message, 21 | }) 22 | }, 2000) 23 | } 24 | }, 25 | }) 26 | -------------------------------------------------------------------------------- /app/flux/util/action.js: -------------------------------------------------------------------------------- 1 | export default function createActions(actions) { 2 | var result = {} 3 | for (let k in actions) { 4 | (key => { 5 | var func = actions[key] 6 | result[key] = (...args) => { 7 | const data = func(...args) 8 | if (typeof data === 'function') { 9 | return dispatch => { 10 | data(output => dispatch(respond(key, output))) 11 | } 12 | } 13 | return respond(key, data) 14 | } 15 | })(k) 16 | } 17 | return result 18 | } 19 | 20 | function respond(type, output) { 21 | const result = { 22 | type, 23 | ...(output || {}) 24 | } 25 | console.log(result) 26 | return result 27 | } 28 | -------------------------------------------------------------------------------- /webpack/dev.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack'); 3 | var config = require("./prod.config.js"); 4 | var HtmlWebpackPlugin = require("html-webpack-plugin"); 5 | 6 | config.devtool = "cheap-module-eval-source-map"; 7 | 8 | config.entry.push('webpack/hot/only-dev-server'); 9 | config.plugins[1] = new webpack.HotModuleReplacementPlugin() 10 | config.module.loaders[0].loader = "react-hot!babel?stage=0" 11 | config.module.loaders[2].loader = "style-loader!css-loader?sourceMap!cssnext-loader" 12 | 13 | module.exports = function(host, port) { 14 | config.entry.push('webpack-dev-server/client?http://' + host + ':' + port); 15 | return config 16 | } 17 | -------------------------------------------------------------------------------- /app/components/header/index.jsx: -------------------------------------------------------------------------------- 1 | import 'header/header.css' 2 | import React from 'react' 3 | import { connect } from 'react-redux' 4 | import * as Example from 'actions/example' 5 | import AutoExample from 'actions/auto-example' 6 | 7 | // This decorator allows you to filter which stores you would like to sync 8 | // This example subscribes to all of them 9 | @connect(state => { 10 | return state 11 | }) 12 | export default class Header extends React.Component { 13 | componentWillMount() { 14 | const { dispatch } = this.props 15 | dispatch(Example.test('wait 2 seconds...')) 16 | dispatch(Example.testAsync('goodbye')) 17 | dispatch(AutoExample.test('wait for me too')) 18 | dispatch(AutoExample.testAsync('bar')) 19 | } 20 | render() { 21 | const { example, autoExample} = this.props 22 | return ( 23 |
24 |
Normal: {example.message}
25 |
Auto: {autoExample.message}
26 |
27 | ) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/components/simple-component/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default class SimpleComponent extends React.Component { 4 | // Optional constructor, use when you neeed to initialize state 5 | constructor() { 6 | super() 7 | this.state = { 8 | clicks: 0 9 | } 10 | } 11 | render() { 12 | // Read the color value passed in by parent component and create an inline style for the button 13 | const style = { 14 | color: this.props.color 15 | } 16 | return ( 17 | 18 | ) 19 | } 20 | // We use the arrow function syntax to define a function so that 'this' gets bound automatically. 21 | // Reference Lexical This 22 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions 23 | clicked = () => { 24 | // Setting state will merge the object you pass in with the previous state. Never mutate state directly! 25 | this.setState({ 26 | clicks: this.state.clicks + 1 27 | }) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "changeme", 3 | "version": "0.0.0", 4 | "description": "", 5 | "scripts": { 6 | "debug": "node ./webpack/dev-server.js", 7 | "build": "webpack -p --colors --progress --config=./webpack/prod.config.js", 8 | "lint": "eslint --ext=jsx --ext=js app" 9 | }, 10 | "author": "dax", 11 | "license": "BSD", 12 | "devDependencies": { 13 | "babel-core": "^5.6.15", 14 | "babel-eslint": "^4.1.3", 15 | "babel-loader": "^5.3.1", 16 | "babel-runtime": "^5.8.20", 17 | "css-loader": "^0.15.1", 18 | "cssnext-loader": "^1.0.1", 19 | "eslint": "^1.5.1", 20 | "eslint-plugin-babel": "^2.1.1", 21 | "eslint-plugin-react": "^3.5.0", 22 | "extract-text-webpack-plugin": "^0.8.2", 23 | "html-webpack-plugin": "^1.6.1", 24 | "node-libs-browser": "^0.5.2", 25 | "react-hot-loader": "^1.2.7", 26 | "style-loader": "^0.12.3", 27 | "url-loader": "^0.5.6", 28 | "webpack": "^1.10.1", 29 | "webpack-dev-server": "^1.10.1" 30 | }, 31 | "dependencies": { 32 | "babel-runtime": "^5.8.25", 33 | "history": "^1.8.4", 34 | "react": "^0.13.3", 35 | "react-redux": "^2.1.1", 36 | "react-router": "1.0.0-beta4", 37 | "redux": "^2.0.0", 38 | "redux-thunk": "^0.1.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/components/root/reset.css: -------------------------------------------------------------------------------- 1 | /* http://meyerweb.com/eric/tools/css/reset/ 2 | v2.0 | 20110126 3 | License: none (public domain) 4 | */ 5 | html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { 6 | margin: 0; 7 | padding: 0; 8 | border: 0; 9 | font-size: 100%; 10 | font: inherit; 11 | vertical-align: baseline; 12 | } 13 | 14 | /* HTML5 display-role reset for older browsers */ 15 | article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { 16 | display: block; 17 | } 18 | body { 19 | line-height: 1; 20 | } 21 | ol, ul { 22 | list-style: none; 23 | } 24 | blockquote, q { 25 | quotes: none; 26 | } 27 | blockquote:before, blockquote:after, q:before, q:after { 28 | content: ''; 29 | content: none; 30 | } 31 | table { 32 | border-collapse: collapse; 33 | border-spacing: 0; 34 | } -------------------------------------------------------------------------------- /webpack/base.config.js: -------------------------------------------------------------------------------- 1 | var path = require("path") 2 | var ExtractTextPlugin = require("extract-text-webpack-plugin"); 3 | var HtmlWebpackPlugin = require("html-webpack-plugin"); 4 | var webpack = require('webpack'); 5 | var output = path.join(__dirname, '../build'); 6 | 7 | module.exports = { 8 | context: path.resolve(__dirname, '..'), 9 | resolve: { 10 | modulesDirectories: ["node_modules", "components", "flux"], 11 | extensions : ["", ".js", ".jsx"] 12 | }, 13 | entry: [ 14 | './app/main.js' 15 | ], 16 | output: { 17 | path: output, 18 | filename: 'bundle.js', 19 | }, 20 | plugins: [], 21 | progress: true, 22 | module: { 23 | loaders: [{ 24 | test: /\.js.*$/, 25 | loader: 'babel?optional[]=runtime&stage=0', 26 | exclude: /node_modules/ 27 | }, { 28 | test: /\.png.*$/, 29 | loaders: ['url-loader?limit=100000&mimetype=image/png'], 30 | exclude: /node_modules/ 31 | }, { 32 | test: /\.css$/, 33 | loader: ExtractTextPlugin.extract("style-loader", "css-loader!autoprefixer-loader") 34 | }] 35 | }, 36 | plugins: [ 37 | new HtmlWebpackPlugin({ 38 | template: path.resolve(__dirname, '../index.html'), 39 | inject : 'body', 40 | hash : true, 41 | }), 42 | new ExtractTextPlugin("bundle.css"), 43 | ] 44 | }; 45 | -------------------------------------------------------------------------------- /webpack/prod.config.js: -------------------------------------------------------------------------------- 1 | var path = require("path") 2 | var ExtractTextPlugin = require("extract-text-webpack-plugin"); 3 | var HtmlWebpackPlugin = require("html-webpack-plugin"); 4 | var webpack = require('webpack'); 5 | var output = path.join(__dirname, '../build'); 6 | 7 | module.exports = { 8 | context: path.resolve(__dirname, '..'), 9 | resolve: { 10 | modulesDirectories: ["node_modules", "components", "flux"], 11 | extensions : ["", ".js", ".jsx"] 12 | }, 13 | entry: [ 14 | './app/main.js' 15 | ], 16 | output: { 17 | path: output, 18 | filename: 'bundle.js', 19 | }, 20 | plugins: [], 21 | progress: true, 22 | module: { 23 | loaders: [{ 24 | test: /\.js.*$/, 25 | loader: 'babel?optional[]=runtime&stage=0', 26 | exclude: /node_modules/ 27 | }, { 28 | test: /\.png.*$/, 29 | loaders: ['url-loader?limit=100000&mimetype=image/png'], 30 | exclude: /node_modules/ 31 | }, { 32 | test: /\.css$/, 33 | loader: ExtractTextPlugin.extract("style-loader", "css-loader!cssnext-loader") 34 | }] 35 | }, 36 | plugins: [ 37 | new HtmlWebpackPlugin({ 38 | template: path.resolve(__dirname, '../index.html'), 39 | inject : 'body', 40 | hash : true, 41 | }), 42 | new ExtractTextPlugin("bundle.css"), 43 | ], 44 | cssnext: { 45 | import: { 46 | path: [''] 47 | }, 48 | features: { 49 | } 50 | } 51 | }; 52 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "plugins": [ 4 | "babel", 5 | "react" 6 | ], 7 | "env": { 8 | "es6": true, 9 | "node": true 10 | }, 11 | "ecmaFeatures": { 12 | "arrowFunctions": true, 13 | "binaryLiterals": true, 14 | "blockBindings": true, 15 | "classes": true, 16 | "defaultParams": true, 17 | "destructuring": true, 18 | "experimentalObjectRestSpread": true, 19 | "forOf": true, 20 | "generators": true, 21 | "globalReturn": true, 22 | "jsx": true, 23 | "modules": true, 24 | "objectLiteralComputedProperties": true, 25 | "objectLiteralDuplicateProperties": true, 26 | "objectLiteralShorthandMethods": true, 27 | "objectLiteralShorthandProperties": true, 28 | "octalLiterals": true, 29 | "regexUFlag": true, 30 | "regexYFlag": true, 31 | "restParams": true, 32 | "spread": true, 33 | "superInFunctions": true, 34 | "templateStrings": true, 35 | "unicodeCodePointEscapes": true 36 | }, 37 | "rules": { 38 | "babel/arrow-parens": [2, "as-needed"], 39 | "array-bracket-spacing": [2, "never"], 40 | "arrow-spacing": 2, 41 | "block-scoped-var": 0, 42 | "brace-style": [2, "1tbs", {"allowSingleLine": true}], 43 | "callback-return": 2, 44 | "camelcase": [2, {"properties": "always"}], 45 | "comma-dangle": 0, 46 | "comma-spacing": 0, 47 | "comma-style": [2, "last"], 48 | "complexity": 0, 49 | "computed-property-spacing": [2, "never"], 50 | "consistent-return": 0, 51 | "consistent-this": 0, 52 | "curly": [0, "multi-line"], 53 | "default-case": 0, 54 | "dot-location": [2, "property"], 55 | "dot-notation": 0, 56 | "eol-last": 2, 57 | "eqeqeq": 2, 58 | "func-names": 0, 59 | "func-style": 0, 60 | "generator-star-spacing": [0, {"before": true, "after": false}], 61 | "guard-for-in": 0, 62 | "handle-callback-err": [2, "error"], 63 | "id-length": 0, 64 | "id-match": [2, "^(?:_?[a-zA-Z0-9]*)|[_A-Z0-9]+$"], 65 | "indent": [2,"tab"], 66 | "init-declarations": 0, 67 | "key-spacing": [2, {"beforeColon": false, "afterColon": true}], 68 | "linebreak-style": 2, 69 | "lines-around-comment": 0, 70 | "max-depth": 0, 71 | "max-len": [2, 120, 4], 72 | "max-nested-callbacks": 0, 73 | "max-params": 0, 74 | "max-statements": 0, 75 | "new-cap": 0, 76 | "new-parens": 2, 77 | "newline-after-var": 0, 78 | "no-alert": 2, 79 | "no-array-constructor": 2, 80 | "no-bitwise": 0, 81 | "no-caller": 2, 82 | "no-catch-shadow": 0, 83 | "no-class-assign": 2, 84 | "no-cond-assign": 2, 85 | "no-console": 1, 86 | "no-const-assign": 2, 87 | "no-constant-condition": 2, 88 | "no-continue": 0, 89 | "no-control-regex": 0, 90 | "no-debugger": 1, 91 | "no-delete-var": 2, 92 | "no-div-regex": 2, 93 | "no-dupe-args": 2, 94 | "no-dupe-keys": 2, 95 | "no-duplicate-case": 2, 96 | "no-else-return": 2, 97 | "no-empty": 2, 98 | "no-empty-character-class": 2, 99 | "no-empty-label": 2, 100 | "no-eq-null": 0, 101 | "no-eval": 2, 102 | "no-ex-assign": 2, 103 | "no-extend-native": 2, 104 | "no-extra-bind": 2, 105 | "no-extra-boolean-cast": 2, 106 | "no-extra-parens": 0, 107 | "no-extra-semi": 2, 108 | "no-fallthrough": 2, 109 | "no-floating-decimal": 2, 110 | "no-func-assign": 2, 111 | "no-implicit-coercion": 2, 112 | "no-implied-eval": 2, 113 | "no-inline-comments": 0, 114 | "no-inner-declarations": [2, "functions"], 115 | "no-invalid-regexp": 2, 116 | "no-invalid-this": 0, 117 | "no-irregular-whitespace": 2, 118 | "no-iterator": 2, 119 | "no-label-var": 2, 120 | "no-labels": 0, 121 | "no-lone-blocks": 2, 122 | "no-lonely-if": 2, 123 | "no-loop-func": 0, 124 | "no-mixed-requires": [2, true], 125 | "no-mixed-spaces-and-tabs": [2, "smart-tabs"], 126 | "no-multi-spaces": 2, 127 | "no-multi-str": 2, 128 | "no-multiple-empty-lines": 0, 129 | "no-native-reassign": 0, 130 | "no-negated-in-lhs": 2, 131 | "no-nested-ternary": 0, 132 | "no-new": 2, 133 | "no-new-func": 0, 134 | "no-new-object": 2, 135 | "no-new-require": 2, 136 | "no-new-wrappers": 2, 137 | "no-obj-calls": 2, 138 | "no-octal": 2, 139 | "no-octal-escape": 2, 140 | "no-param-reassign": 2, 141 | "no-path-concat": 2, 142 | "no-plusplus": 0, 143 | "no-process-env": 0, 144 | "no-process-exit": 0, 145 | "no-proto": 2, 146 | "no-redeclare": 2, 147 | "no-regex-spaces": 2, 148 | "no-restricted-modules": 0, 149 | "no-return-assign": 2, 150 | "no-script-url": 2, 151 | "no-self-compare": 0, 152 | "no-sequences": 2, 153 | "no-shadow": 2, 154 | "no-shadow-restricted-names": 2, 155 | "no-spaced-func": 2, 156 | "no-sparse-arrays": 2, 157 | "no-sync": 2, 158 | "no-ternary": 0, 159 | "no-this-before-super": 2, 160 | "no-throw-literal": 2, 161 | "no-trailing-spaces": 2, 162 | "no-undef": 2, 163 | "no-undef-init": 2, 164 | "no-undefined": 0, 165 | "no-underscore-dangle": 0, 166 | "no-unexpected-multiline": 2, 167 | "no-unneeded-ternary": 2, 168 | "no-unreachable": 2, 169 | "no-unused-expressions": 2, 170 | "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], 171 | "no-use-before-define": 0, 172 | "no-useless-call": 2, 173 | "no-var": 0, 174 | "no-void": 2, 175 | "no-warning-comments": 0, 176 | "no-with": 2, 177 | "object-curly-spacing": [0, "always"], 178 | "object-shorthand": [2, "always"], 179 | "one-var": [2, "never"], 180 | "operator-assignment": [2, "always"], 181 | "operator-linebreak": [2, "after"], 182 | "padded-blocks": 0, 183 | "prefer-const": 0, 184 | "prefer-reflect": 0, 185 | "prefer-spread": 0, 186 | "quote-props": [2, "as-needed"], 187 | "quotes": [2, "single"], 188 | "radix": 2, 189 | "require-yield": 2, 190 | "semi": [2, "never"], 191 | "semi-spacing": [2, {"before": false, "after": true}], 192 | "sort-vars": 0, 193 | "space-after-keywords": [2, "always"], 194 | "space-before-blocks": [2, "always"], 195 | "space-before-function-paren": [2, {"anonymous": "always", "named": "never"}], 196 | "space-in-parens": 0, 197 | "space-infix-ops": [2, {"int32Hint": false}], 198 | "space-return-throw-case": 2, 199 | "space-unary-ops": [2, {"words": true, "nonwords": false}], 200 | "spaced-comment": [2, "always"], 201 | "strict": 0, 202 | "use-isnan": 2, 203 | "valid-jsdoc": 0, 204 | "valid-typeof": 2, 205 | "vars-on-top": 0, 206 | "wrap-iife": 2, 207 | "wrap-regex": 0, 208 | "yoda": [2, "never", {"exceptRange": true}] 209 | } 210 | } 211 | --------------------------------------------------------------------------------