├── .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 |
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 |
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 |
--------------------------------------------------------------------------------