├── .nvmrc ├── .npmrc ├── .prettierignore ├── .prettierrc ├── src ├── index.scss ├── state │ ├── saga.js │ ├── reducer.js │ └── index.js ├── routes │ ├── Home │ │ ├── style.scss │ │ ├── index.js │ │ ├── sagas.js │ │ ├── Container.js │ │ ├── reducer.js │ │ └── Home.js │ └── index.js └── index.js ├── .travis.yml ├── .stylelintrc ├── .eslintrc ├── public └── index.html ├── .editorconfig ├── README.md ├── config ├── webpack.dev.js └── webpack.prod.js ├── package.json ├── .gitignore └── .eslintignore /.nvmrc: -------------------------------------------------------------------------------- 1 | v8.11.4 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact = true -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /src/index.scss: -------------------------------------------------------------------------------- 1 | @import '~normalize.css/normalize'; 2 | @import '~bulma/bulma'; 3 | -------------------------------------------------------------------------------- /src/state/saga.js: -------------------------------------------------------------------------------- 1 | import createSagaMiddleware from 'redux-saga'; 2 | 3 | export default createSagaMiddleware(); 4 | -------------------------------------------------------------------------------- /src/state/reducer.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | 3 | export default asyncReducers => 4 | combineReducers({ 5 | ...asyncReducers, 6 | }); 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: node_js 4 | 5 | # Keep empty to user version from .nvmrc 6 | node_js: null 7 | 8 | script: 9 | - yarn lint 10 | - yarn build:prod 11 | -------------------------------------------------------------------------------- /src/routes/Home/style.scss: -------------------------------------------------------------------------------- 1 | @import '~bulma/sass/utilities/initial-variables'; 2 | @import '~bulma/sass/utilities/derived-variables'; 3 | 4 | .home { 5 | &__spinner { 6 | color: $light; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-standard", 4 | "stylelint-config-prettier" 5 | ], 6 | "plugins": ["stylelint-prettier"], 7 | "rules": { 8 | "prettier/prettier": true 9 | } 10 | } -------------------------------------------------------------------------------- /src/routes/Home/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Loadable from 'react-loadable'; 3 | 4 | export default Loadable({ 5 | loader: () => import(/* webpackChunkName: "home" */ './Container'), 6 | loading() { 7 | return
Loading...
; 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "extends": ["airbnb", "eslint-config-prettier"], 4 | "plugins": ["eslint-plugin-prettier"], 5 | "rules": { 6 | "prettier/prettier": "error", 7 | "react/jsx-filename-extension": false, 8 | "import/no-extraneous-dependencies": false 9 | }, 10 | "env": { 11 | "browser": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/routes/Home/sagas.js: -------------------------------------------------------------------------------- 1 | import { put, takeEvery } from 'redux-saga/effects'; 2 | import { delay } from 'redux-saga'; 3 | 4 | function* shuffleFeatures() { 5 | yield delay(3000); 6 | yield put({ 7 | type: 'SHUFFLE-DONE', 8 | }); 9 | } 10 | 11 | function* shuffleFeaturesSaga() { 12 | yield takeEvery('SHUFFLE-REQUESTED', shuffleFeatures); 13 | } 14 | 15 | export default [shuffleFeaturesSaga]; 16 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | React-Kit 7 | 8 | 9 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /src/routes/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { BrowserRouter } from 'react-router-dom'; 4 | import { renderRoutes } from 'react-router-config'; 5 | import { hot } from 'react-hot-loader'; 6 | 7 | import Home from './Home'; 8 | 9 | const routes = [ 10 | { 11 | component: Home, 12 | }, 13 | ]; 14 | 15 | const Router = () => {renderRoutes(routes)}; 16 | 17 | export default hot(module)(Router); 18 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import '@babel/polyfill'; 2 | 3 | import React from 'react'; 4 | import ReactDOM from 'react-dom'; 5 | import { Provider } from 'react-redux'; 6 | 7 | import Router from './routes'; 8 | import state from './state'; 9 | 10 | import './index.scss'; 11 | 12 | const render = () => { 13 | try { 14 | ReactDOM.render( 15 | 16 | 17 | , 18 | document.getElementById('root') 19 | ); 20 | } catch (err) { 21 | // eslint-disable-next-line 22 | console.error(err) 23 | } 24 | }; 25 | 26 | render(); 27 | -------------------------------------------------------------------------------- /src/routes/Home/Container.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux'; 2 | 3 | import Home from './Home'; 4 | import state from '../../state'; 5 | import reducer from './reducer'; 6 | import sagas from './sagas'; 7 | 8 | state.injectReducer('home', reducer); 9 | state.injectSagas(sagas); 10 | 11 | const mapDispatchToProps = dispatch => ({ 12 | shuffle: () => dispatch({ type: 'SHUFFLE-REQUESTED' }), 13 | }); 14 | 15 | const mapStateToProps = s => ({ 16 | features: s.home.features, 17 | loading: s.home.loading, 18 | }); 19 | 20 | export default connect( 21 | mapStateToProps, 22 | mapDispatchToProps 23 | )(Home); 24 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | # Matches multiple files with brace expansion notation 14 | # Set default charset 15 | [*.{js,css,html}] 16 | charset = utf-8 17 | indent_style = space 18 | ndent_size = 2 19 | 20 | [*.js] 21 | max_line_length = 120 22 | 23 | # Matches the exact files either package.json or .travis.yml 24 | [{package.json,.travis.yml}] 25 | indent_style = space 26 | indent_size = 2 27 | -------------------------------------------------------------------------------- /src/routes/Home/reducer.js: -------------------------------------------------------------------------------- 1 | const initialState = { 2 | features: [ 3 | { 4 | heading: 'Predictable state managment', 5 | title: 'Redux', 6 | }, 7 | { 8 | heading: 'Multiple and dynamic bundles', 9 | title: 'Code splitting', 10 | }, 11 | { 12 | heading: 'Declarative routing', 13 | title: 'React Router', 14 | }, 15 | { 16 | heading: 'Realtime update', 17 | title: 'React Hot reload', 18 | }, 19 | ], 20 | loading: false, 21 | }; 22 | 23 | function shuffle(array) { 24 | const copy = array.slice(); 25 | 26 | for (let i = copy.length - 1; i > 0; i -= 1) { 27 | const j = Math.floor(Math.random() * (i + 1)); 28 | const temp = copy[i]; 29 | copy[i] = copy[j]; 30 | copy[j] = temp; 31 | } 32 | 33 | return copy; 34 | } 35 | 36 | export default function reducer(state = initialState, action) { 37 | switch (action.type) { 38 | case 'SHUFFLE-REQUESTED': 39 | return { 40 | ...state, 41 | loading: true, 42 | }; 43 | case 'SHUFFLE-DONE': 44 | return { 45 | ...state, 46 | features: shuffle(state.features), 47 | loading: false, 48 | }; 49 | default: 50 | return state; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/state/index.js: -------------------------------------------------------------------------------- 1 | import { applyMiddleware, compose, createStore } from 'redux'; 2 | 3 | import createRootReducer from './reducer'; 4 | import sagaMiddleware from './saga'; 5 | 6 | export class State { 7 | constructor(initialState = {}) { 8 | const enhancers = []; 9 | const middleware = [sagaMiddleware]; 10 | 11 | let composeEnhancers = compose; 12 | 13 | if (process.env.NODE_ENV === 'development') { 14 | const composeWithDevToolsExtension = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__; // eslint-disable-line no-underscore-dangle,max-len 15 | if (typeof composeWithDevToolsExtension === 'function') { 16 | composeEnhancers = composeWithDevToolsExtension; 17 | } 18 | } 19 | 20 | this.store = createStore( 21 | () => {}, // No-op root reducer 22 | initialState, 23 | composeEnhancers(applyMiddleware(...middleware), ...enhancers) 24 | ); 25 | this.store.asyncReducers = {}; 26 | this.store.sagas = {}; 27 | } 28 | 29 | injectReducer(key, reducer) { 30 | this.store.asyncReducers[key] = reducer; 31 | this.store.replaceReducer(createRootReducer(this.store.asyncReducers)); 32 | } 33 | 34 | injectSaga(saga) { 35 | if (saga.name in this.store.sagas) { 36 | this.store.sagas[saga.name].cancel(); 37 | this.store.sagas[saga.name] = sagaMiddleware.run(saga); 38 | } else { 39 | this.store.sagas[saga.name] = sagaMiddleware.run(saga); 40 | } 41 | } 42 | 43 | injectSagas(sagas) { 44 | if (Array.isArray(sagas)) sagas.forEach(saga => this.injectSaga(saga)); 45 | else this.injectSaga(sagas); 46 | } 47 | } 48 | 49 | export default new State(); 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **DEPRECATED** 2 | I'm archiving this repo. [Create React App](https://github.com/facebook/create-react-app) does a better job, is well maintained and support more options. 3 | 4 | --- 5 | 6 | Do you prefer `typescript` ? If so, use the [dedicated branch](https://github.com/thomasthiebaud/react-kit/tree/typescript) instead 7 | 8 | 9 | # Setup 10 | 11 | This project was tested with nodejs version `8.9.4`. You can easily install this version using [nvm](https://github.com/creationix/nvm) and then running 12 | 13 | nvm install 14 | 15 | and then install modules with 16 | 17 | npm install 18 | 19 | ## Scripts 20 | 21 | The following scripts are available 22 | 23 | |Name |Description | 24 | |-------------|----------------------------------------------------------------------------------------------| 25 | |build | Alias for `build:prod` | 26 | |build:dev | Create development bundle | 27 | |build:prod | Create optimized production bundle | 28 | |clean | Remove existing bundle and error files | 29 | |lint | Run linter | 30 | |lint:fix | Run linter and try to fix errors | 31 | |start | Alias for `start:dev` | 32 | |start:dev | Start developemnt server using development bundle | 33 | |start:prod | Start production server using production bundle | 34 | -------------------------------------------------------------------------------- /config/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const autoprefixer = require('autoprefixer'); 2 | 3 | const Dotenv = require('dotenv-webpack'); 4 | const HtmlWebPackPlugin = require('html-webpack-plugin'); 5 | 6 | module.exports = { 7 | mode: 'development', 8 | module: { 9 | rules: [ 10 | { 11 | test: /\.js$/, 12 | exclude: /node_modules/, 13 | use: { 14 | loader: 'babel-loader', 15 | options: { 16 | presets: ['@babel/preset-env', '@babel/preset-react'], 17 | plugins: ['react-hot-loader/babel', 'syntax-dynamic-import', 'transform-regenerator'], 18 | }, 19 | }, 20 | }, 21 | { 22 | test: /\.scss$/, 23 | use: [ 24 | 'style-loader', 25 | 'css-loader', 26 | { 27 | loader: 'postcss-loader', 28 | options: { 29 | plugins: () => [autoprefixer()], 30 | }, 31 | }, 32 | { 33 | loader: 'sass-loader', 34 | options: { 35 | includePaths: ['node_modules', 'src'], 36 | }, 37 | }, 38 | ], 39 | }, 40 | { 41 | test: /\.css$/, 42 | use: [ 43 | 'style-loader', 44 | 'css-loader', 45 | { 46 | loader: 'postcss-loader', 47 | options: { 48 | plugins: () => [autoprefixer()], 49 | }, 50 | }, 51 | ], 52 | }, 53 | { 54 | test: /\.(eot|svg|ttf|woff|woff2)$/, 55 | loader: 'file-loader', 56 | }, 57 | { 58 | test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], 59 | loader: 'url-loader', 60 | options: { 61 | limit: 10000, 62 | }, 63 | }, 64 | ], 65 | }, 66 | plugins: [ 67 | new Dotenv(), 68 | new HtmlWebPackPlugin({ 69 | template: './public/index.html', 70 | filename: './index.html', 71 | }), 72 | ], 73 | serve: { 74 | open: true, 75 | }, 76 | }; 77 | -------------------------------------------------------------------------------- /src/routes/Home/Home.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import Spinner from 'react-spinkit'; 4 | 5 | import './style.scss'; 6 | 7 | class Home extends React.PureComponent { 8 | render() { 9 | const { features, loading, shuffle } = this.props; 10 | return ( 11 |
12 |
13 |
14 |
15 |
16 | 17 | REACT KIT 18 | 19 |
20 |
21 |
22 |
23 |
24 |
25 |

A ready-to-go React App

26 |

Featuring...

27 | 43 | 46 |
47 |
48 |
49 | ); 50 | } 51 | } 52 | 53 | Home.propTypes = { 54 | features: PropTypes.arrayOf( 55 | PropTypes.shape({ 56 | heading: PropTypes.string.isRequired, 57 | title: PropTypes.string.isRequired, 58 | }) 59 | ).isRequired, 60 | loading: PropTypes.bool.isRequired, 61 | shuffle: PropTypes.func.isRequired, 62 | }; 63 | 64 | export default Home; 65 | -------------------------------------------------------------------------------- /config/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const autoprefixer = require('autoprefixer'); 2 | const cssnano = require('cssnano'); 3 | 4 | const HtmlWebPackPlugin = require('html-webpack-plugin'); 5 | const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 6 | const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); 7 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); 8 | 9 | module.exports = { 10 | mode: 'production', 11 | module: { 12 | rules: [ 13 | { 14 | test: /\.js$/, 15 | exclude: /node_modules/, 16 | use: { 17 | loader: 'babel-loader', 18 | options: { 19 | presets: ['@babel/preset-env', '@babel/preset-react'], 20 | plugins: ['syntax-dynamic-import', 'transform-regenerator'], 21 | }, 22 | }, 23 | }, 24 | { 25 | test: /\.scss$/, 26 | use: [ 27 | MiniCssExtractPlugin.loader, 28 | 'css-loader', 29 | { 30 | loader: 'postcss-loader', 31 | options: { 32 | plugins: () => [autoprefixer(), cssnano()], 33 | }, 34 | }, 35 | { 36 | loader: 'sass-loader', 37 | options: { 38 | includePaths: ['node_modules', 'src'], 39 | }, 40 | }, 41 | ], 42 | }, 43 | { 44 | test: /\.css$/, 45 | use: [ 46 | MiniCssExtractPlugin.loader, 47 | 'css-loader', 48 | { 49 | loader: 'postcss-loader', 50 | options: { 51 | plugins: () => [autoprefixer(), cssnano()], 52 | }, 53 | }, 54 | ], 55 | }, 56 | { 57 | test: /\.(eot|svg|ttf|woff|woff2)$/, 58 | loader: 'file-loader', 59 | }, 60 | { 61 | test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], 62 | loader: 'url-loader', 63 | options: { 64 | limit: 10000, 65 | }, 66 | }, 67 | ], 68 | }, 69 | plugins: [ 70 | new HtmlWebPackPlugin({ 71 | template: './public/index.html', 72 | filename: './index.html', 73 | minify: { 74 | removeComments: true, 75 | collapseWhitespace: true, 76 | removeRedundantAttributes: true, 77 | useShortDoctype: true, 78 | removeEmptyAttributes: true, 79 | removeStyleLinkTypeAttributes: true, 80 | keepClosingSlash: true, 81 | minifyJS: true, 82 | minifyCSS: true, 83 | minifyURLs: true, 84 | }, 85 | }), 86 | new MiniCssExtractPlugin({ 87 | filename: '[name].css', 88 | }), 89 | new UglifyJsPlugin({ 90 | cache: true, 91 | parallel: true, 92 | }), 93 | new OptimizeCSSAssetsPlugin({}), 94 | ], 95 | }; 96 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-kit", 3 | "version": "1.0.0", 4 | "description": "Ready to go React project", 5 | "main": "index.js", 6 | "author": "Thomas Thiebaud", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "npm run clean; npm run build:prod", 10 | "build:dev": "webpack --config config/webpack.dev.js", 11 | "build:prod": "webpack --config config/webpack.prod.js", 12 | "clean": "rimraf dist/ yarn-error.log npm-debug.log", 13 | "lint": "npm run lint:code && npm run lint:style", 14 | "lint:fix": "npm run lint:code:fix && npm run lint:style:fix", 15 | "lint:code": "eslint .", 16 | "lint:code:fix": "eslint --fix .", 17 | "lint:style": "stylelint 'src/**/*.scss'", 18 | "lint:style:fix": "stylelint --fix 'src/**/*.scss'", 19 | "start": "npm run start:dev", 20 | "start:dev": "webpack-serve --config config/webpack.dev.js", 21 | "start:prod": "npm run build && http-server --cors dist/" 22 | }, 23 | "pre-commit": [ 24 | "lint" 25 | ], 26 | "dependencies": { 27 | "@babel/polyfill": "7.0.0", 28 | "bulma": "0.7.1", 29 | "normalize.css": "8.0.0", 30 | "prop-types": "15.6.2", 31 | "react": "16.5.1", 32 | "react-dom": "16.5.1", 33 | "react-hot-loader": "4.3.8", 34 | "react-loadable": "5.5.0", 35 | "react-redux": "5.0.7", 36 | "react-router-config": "1.0.0-beta.4", 37 | "react-router-dom": "4.3.1", 38 | "react-spinkit": "3.0.0", 39 | "redux": "3.7.2", 40 | "redux-saga": "0.16.0" 41 | }, 42 | "devDependencies": { 43 | "@babel/core": "7.0.1", 44 | "@babel/plugin-transform-runtime": "7.0.0", 45 | "@babel/preset-env": "7.0.0", 46 | "@babel/preset-react": "7.0.0", 47 | "autoprefixer": "9.1.5", 48 | "babel-eslint": "9.0.0", 49 | "babel-loader": "8.0.2", 50 | "babel-plugin-syntax-dynamic-import": "6.18.0", 51 | "babel-plugin-transform-regenerator": "6.26.0", 52 | "css-loader": "1.0.0", 53 | "cssnano": "4.1.0", 54 | "dotenv-webpack": "1.5.7", 55 | "eslint": "5.6.0", 56 | "eslint-config-airbnb": "17.1.0", 57 | "eslint-config-prettier": "3.0.1", 58 | "eslint-plugin-import": "2.14.0", 59 | "eslint-plugin-jsx-a11y": "6.1.1", 60 | "eslint-plugin-prettier": "2.6.2", 61 | "eslint-plugin-react": "7.11.1", 62 | "file-loader": "2.0.0", 63 | "html-webpack-plugin": "3.2.0", 64 | "http-server": "0.11.1", 65 | "mini-css-extract-plugin": "0.4.2", 66 | "node-sass": "4.9.3", 67 | "optimize-css-assets-webpack-plugin": "5.0.1", 68 | "postcss-loader": "3.0.0", 69 | "pre-commit": "1.2.2", 70 | "prettier": "1.14.2", 71 | "rimraf": "2.6.2", 72 | "sass-loader": "7.1.0", 73 | "style-loader": "0.23.0", 74 | "stylelint": "9.5.0", 75 | "stylelint-config-prettier": "4.0.0", 76 | "stylelint-config-standard": "18.2.0", 77 | "stylelint-prettier": "1.0.1", 78 | "uglifyjs-webpack-plugin": "2.0.0", 79 | "url-loader": "1.1.1", 80 | "webpack": "4.19.0", 81 | "webpack-cli": "3.1.0", 82 | "webpack-serve": "2.0.2" 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Emacs template 3 | # -*- mode: gitignore; -*- 4 | *~ 5 | \#*\# 6 | /.emacs.desktop 7 | /.emacs.desktop.lock 8 | *.elc 9 | auto-save-list 10 | tramp 11 | .\#* 12 | 13 | # Org-mode 14 | .org-id-locations 15 | *_archive 16 | 17 | # flymake-mode 18 | *_flymake.* 19 | 20 | # eshell files 21 | /eshell/history 22 | /eshell/lastdir 23 | 24 | # elpa packages 25 | /elpa/ 26 | 27 | # reftex files 28 | *.rel 29 | 30 | # AUCTeX auto folder 31 | /auto/ 32 | 33 | # cask packages 34 | .cask/ 35 | dist/ 36 | 37 | # Flycheck 38 | flycheck_*.el 39 | 40 | # server auth directory 41 | /server/ 42 | 43 | # projectiles files 44 | .projectile 45 | 46 | # directory configuration 47 | .dir-locals.el 48 | ### Node template 49 | # Logs 50 | logs 51 | *.log 52 | npm-debug.log* 53 | yarn-debug.log* 54 | yarn-error.log* 55 | 56 | # Runtime data 57 | pids 58 | *.pid 59 | *.seed 60 | *.pid.lock 61 | 62 | # Directory for instrumented libs generated by jscoverage/JSCover 63 | lib-cov 64 | 65 | # Coverage directory used by tools like istanbul 66 | coverage 67 | 68 | # nyc test coverage 69 | .nyc_output 70 | 71 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 72 | .grunt 73 | 74 | # Bower dependency directory (https://bower.io/) 75 | bower_components 76 | 77 | # node-waf configuration 78 | .lock-wscript 79 | 80 | # Compiled binary addons (http://nodejs.org/api/addons.html) 81 | build/Release 82 | 83 | # Dependency directories 84 | node_modules/ 85 | jspm_packages/ 86 | 87 | # Typescript v1 declaration files 88 | typings/ 89 | 90 | # Optional npm cache directory 91 | .npm 92 | 93 | # Optional eslint cache 94 | .eslintcache 95 | 96 | # Optional REPL history 97 | .node_repl_history 98 | 99 | # Output of 'npm pack' 100 | *.tgz 101 | 102 | # Yarn Integrity file 103 | .yarn-integrity 104 | 105 | # dotenv environment variables file 106 | .env 107 | 108 | ### Windows template 109 | # Windows thumbnail cache files 110 | Thumbs.db 111 | ehthumbs.db 112 | ehthumbs_vista.db 113 | 114 | # Folder config file 115 | Desktop.ini 116 | 117 | # Recycle Bin used on file shares 118 | $RECYCLE.BIN/ 119 | 120 | # Windows Installer files 121 | *.cab 122 | *.msi 123 | *.msm 124 | *.msp 125 | 126 | # Windows shortcuts 127 | *.lnk 128 | ### JetBrains template 129 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 130 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 131 | .idea/ 132 | 133 | ## File-based project format: 134 | *.iws 135 | 136 | ## Plugin-specific files: 137 | 138 | # IntelliJ 139 | /out/ 140 | 141 | # mpeltonen/sbt-idea plugin 142 | .idea_modules/ 143 | 144 | # JIRA plugin 145 | atlassian-ide-plugin.xml 146 | 147 | # Crashlytics plugin (for Android Studio and IntelliJ) 148 | com_crashlytics_export_strings.xml 149 | crashlytics.properties 150 | crashlytics-build.properties 151 | fabric.properties 152 | ### Vim template 153 | # swap 154 | [._]*.s[a-v][a-z] 155 | [._]*.sw[a-p] 156 | [._]s[a-v][a-z] 157 | [._]sw[a-p] 158 | # session 159 | Session.vim 160 | # temporary 161 | .netrwhist 162 | # auto-generated tag files 163 | tags 164 | ### macOS template 165 | *.DS_Store 166 | .AppleDouble 167 | .LSOverride 168 | 169 | # Icon must end with two \r 170 | Icon 171 | 172 | 173 | # Thumbnails 174 | ._* 175 | 176 | # Files that might appear in the root of a volume 177 | .DocumentRevisions-V100 178 | .fseventsd 179 | .Spotlight-V100 180 | .TemporaryItems 181 | .Trashes 182 | .VolumeIcon.icns 183 | .com.apple.timemachine.donotpresent 184 | 185 | # Directories potentially created on remote AFP share 186 | .AppleDB 187 | .AppleDesktop 188 | Network Trash Folder 189 | Temporary Items 190 | .apdisk 191 | ### SublimeText template 192 | # cache files for sublime text 193 | *.tmlanguage.cache 194 | *.tmPreferences.cache 195 | *.stTheme.cache 196 | 197 | # workspace files are user-specific 198 | *.sublime-workspace 199 | 200 | # project files should be checked into the repository, unless a significant 201 | # proportion of contributors will probably not be using SublimeText 202 | # *.sublime-project 203 | 204 | # sftp configuration file 205 | sftp-config.json 206 | 207 | # Package control specific files 208 | Package Control.last-run 209 | Package Control.ca-list 210 | Package Control.ca-bundle 211 | Package Control.system-ca-bundle 212 | Package Control.cache/ 213 | Package Control.ca-certs/ 214 | Package Control.merged-ca-bundle 215 | Package Control.user-ca-bundle 216 | oscrypto-ca-bundle.crt 217 | bh_unicode_properties.cache 218 | 219 | # Sublime-github package stores a github token in this file 220 | # https://packagecontrol.io/packages/sublime-github 221 | GitHub.sublime-settings 222 | ### Linux template 223 | 224 | # temporary files which can be created if a process still has a handle open of a deleted file 225 | .fuse_hidden* 226 | 227 | # KDE directory preferences 228 | .directory 229 | 230 | # Linux trash folder which might appear on any partition or disk 231 | .Trash-* 232 | 233 | # .nfs files are created when an open file is removed but is still being accessed 234 | .nfs* 235 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Linux template 3 | *~ 4 | 5 | # temporary files which can be created if a process still has a handle open of a deleted file 6 | .fuse_hidden* 7 | 8 | # KDE directory preferences 9 | .directory 10 | 11 | # Linux trash folder which might appear on any partition or disk 12 | .Trash-* 13 | 14 | # .nfs files are created when an open file is removed but is still being accessed 15 | .nfs* 16 | ### Vim template 17 | # swap 18 | [._]*.s[a-v][a-z] 19 | [._]*.sw[a-p] 20 | [._]s[a-v][a-z] 21 | [._]sw[a-p] 22 | # session 23 | Session.vim 24 | # temporary 25 | .netrwhist 26 | # auto-generated tag files 27 | tags 28 | ### Windows template 29 | # Windows thumbnail cache files 30 | Thumbs.db 31 | ehthumbs.db 32 | ehthumbs_vista.db 33 | 34 | # Folder config file 35 | Desktop.ini 36 | 37 | # Recycle Bin used on file shares 38 | $RECYCLE.BIN/ 39 | 40 | # Windows Installer files 41 | *.cab 42 | *.msi 43 | *.msm 44 | *.msp 45 | 46 | # Windows shortcuts 47 | *.lnk 48 | ### Node template 49 | # Logs 50 | logs 51 | *.log 52 | npm-debug.log* 53 | yarn-debug.log* 54 | yarn-error.log* 55 | 56 | # Runtime data 57 | pids 58 | *.pid 59 | *.seed 60 | *.pid.lock 61 | 62 | # Directory for instrumented libs generated by jscoverage/JSCover 63 | lib-cov 64 | 65 | # Coverage directory used by tools like istanbul 66 | coverage 67 | 68 | # nyc test coverage 69 | .nyc_output 70 | 71 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 72 | .grunt 73 | 74 | # Bower dependency directory (https://bower.io/) 75 | bower_components 76 | 77 | # node-waf configuration 78 | .lock-wscript 79 | 80 | # Compiled binary addons (http://nodejs.org/api/addons.html) 81 | build/Release 82 | 83 | # Dependency directories 84 | node_modules/ 85 | jspm_packages/ 86 | 87 | # Typescript v1 declaration files 88 | typings/ 89 | 90 | # Optional npm cache directory 91 | .npm 92 | 93 | # Optional eslint cache 94 | .eslintcache 95 | 96 | # Optional REPL history 97 | .node_repl_history 98 | 99 | # Output of 'npm pack' 100 | *.tgz 101 | 102 | # Yarn Integrity file 103 | .yarn-integrity 104 | 105 | # dotenv environment variables file 106 | .env 107 | 108 | ### SublimeText template 109 | # cache files for sublime text 110 | *.tmlanguage.cache 111 | *.tmPreferences.cache 112 | *.stTheme.cache 113 | 114 | # workspace files are user-specific 115 | *.sublime-workspace 116 | 117 | # project files should be checked into the repository, unless a significant 118 | # proportion of contributors will probably not be using SublimeText 119 | # *.sublime-project 120 | 121 | # sftp configuration file 122 | sftp-config.json 123 | 124 | # Package control specific files 125 | Package Control.last-run 126 | Package Control.ca-list 127 | Package Control.ca-bundle 128 | Package Control.system-ca-bundle 129 | Package Control.cache/ 130 | Package Control.ca-certs/ 131 | Package Control.merged-ca-bundle 132 | Package Control.user-ca-bundle 133 | oscrypto-ca-bundle.crt 134 | bh_unicode_properties.cache 135 | 136 | # Sublime-github package stores a github token in this file 137 | # https://packagecontrol.io/packages/sublime-github 138 | GitHub.sublime-settings 139 | ### macOS template 140 | *.DS_Store 141 | .AppleDouble 142 | .LSOverride 143 | 144 | # Icon must end with two \r 145 | Icon 146 | 147 | 148 | # Thumbnails 149 | ._* 150 | 151 | # Files that might appear in the root of a volume 152 | .DocumentRevisions-V100 153 | .fseventsd 154 | .Spotlight-V100 155 | .TemporaryItems 156 | .Trashes 157 | .VolumeIcon.icns 158 | .com.apple.timemachine.donotpresent 159 | 160 | # Directories potentially created on remote AFP share 161 | .AppleDB 162 | .AppleDesktop 163 | Network Trash Folder 164 | Temporary Items 165 | .apdisk 166 | ### Emacs template 167 | # -*- mode: gitignore; -*- 168 | \#*\# 169 | /.emacs.desktop 170 | /.emacs.desktop.lock 171 | *.elc 172 | auto-save-list 173 | tramp 174 | .\#* 175 | 176 | # Org-mode 177 | .org-id-locations 178 | *_archive 179 | 180 | # flymake-mode 181 | *_flymake.* 182 | 183 | # eshell files 184 | /eshell/history 185 | /eshell/lastdir 186 | 187 | # elpa packages 188 | /elpa/ 189 | 190 | # reftex files 191 | *.rel 192 | 193 | # AUCTeX auto folder 194 | /auto/ 195 | 196 | # cask packages 197 | .cask/ 198 | dist/ 199 | 200 | # Flycheck 201 | flycheck_*.el 202 | 203 | # server auth directory 204 | /server/ 205 | 206 | # projectiles files 207 | .projectile 208 | 209 | # directory configuration 210 | .dir-locals.el 211 | ### JetBrains template 212 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 213 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 214 | 215 | # User-specific stuff: 216 | .idea/**/workspace.xml 217 | .idea/**/tasks.xml 218 | .idea/dictionaries 219 | 220 | # Sensitive or high-churn files: 221 | .idea/**/dataSources/ 222 | .idea/**/dataSources.ids 223 | .idea/**/dataSources.xml 224 | .idea/**/dataSources.local.xml 225 | .idea/**/sqlDataSources.xml 226 | .idea/**/dynamic.xml 227 | .idea/**/uiDesigner.xml 228 | 229 | # Gradle: 230 | .idea/**/gradle.xml 231 | .idea/**/libraries 232 | 233 | # Mongo Explorer plugin: 234 | .idea/**/mongoSettings.xml 235 | 236 | ## File-based project format: 237 | *.iws 238 | 239 | ## Plugin-specific files: 240 | 241 | # IntelliJ 242 | /out/ 243 | 244 | # mpeltonen/sbt-idea plugin 245 | .idea_modules/ 246 | 247 | # JIRA plugin 248 | atlassian-ide-plugin.xml 249 | 250 | # Crashlytics plugin (for Android Studio and IntelliJ) 251 | com_crashlytics_export_strings.xml 252 | crashlytics.properties 253 | crashlytics-build.properties 254 | fabric.properties 255 | --------------------------------------------------------------------------------