generator-reackt 0.3.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.prettierrc +4 -4
  2. package/.stylelintrc +104 -0
  3. package/LICENSE +9 -7
  4. package/README.md +18 -18
  5. package/generators/app/index.js +1 -307
  6. package/generators/component/index.js +1 -56
  7. package/generators/es.regexp.flags-ccfbed60.js +1 -0
  8. package/generators/module/index.js +1 -117
  9. package/generators/util/fs.js +1 -31
  10. package/package.json +33 -29
  11. package/templates/app/.babelrc +9 -9
  12. package/templates/app/.browserslistrc +3 -3
  13. package/templates/app/.editorconfig +11 -11
  14. package/templates/app/.esdoc.json +23 -23
  15. package/templates/app/.eslintrc.js +5 -13
  16. package/templates/app/.lintstagedrc +4 -4
  17. package/templates/app/.prettierrc +4 -4
  18. package/templates/app/.storybook/addons.js +1 -1
  19. package/templates/app/.storybook/config.js +14 -14
  20. package/templates/app/.storybook/webpack.config.babel.js +7 -7
  21. package/templates/app/.stylelintrc +271 -277
  22. package/templates/app/gitignore +2 -0
  23. package/templates/app/jest.config.js +15 -15
  24. package/templates/app/jsconfig.json +8 -8
  25. package/templates/app/package.json +18 -18
  26. package/templates/app/src/components/App.js +14 -0
  27. package/templates/app/src/icons.js +3 -3
  28. package/templates/app/src/index.html +10 -10
  29. package/templates/app/src/index.js +50 -54
  30. package/templates/app/src/index.scss +16 -17
  31. package/templates/app/src/reducers/application.js +21 -21
  32. package/templates/app/src/reducers/index.js +7 -7
  33. package/templates/app/src/sagas/application.js +9 -9
  34. package/templates/app/src/sagas/index.js +7 -7
  35. package/templates/app/src/selectors/application.js +1 -1
  36. package/templates/app/src/selectors/application.test.js +13 -13
  37. package/templates/app/src/utils/index.js +36 -32
  38. package/templates/app/webpack.config.babel.js +103 -109
  39. package/templates/component/index.js +19 -19
  40. package/templates/component/index.test.js +14 -14
  41. package/templates/module/reducer/index.js +20 -20
  42. package/templates/module/saga/index.js +9 -9
  43. package/CHANGELOG.md +0 -227
  44. package/templates/app/src/components/App/App.js +0 -19
@@ -1,19 +1,19 @@
1
- {
2
- "name": "<%= package.name %>",
3
- "version": "<%= package.version %>",
4
- "description": "<%= package.description %>",
5
- "author": "<%= author.name %> <<%= author.email %>>",
6
- "license": "<%= package.license %>",
7
- "scripts": {
8
- <% if (flags.addStorybook) { %>
9
- "storybook": "start-storybook",
10
- <% } %>
11
- <% if (flags.addJest) { %>
12
- "test": "jest",
13
- <% } %>
14
- "build": "cross-env NODE_ENV=production webpack",
15
- "start": "cross-env NODE_ENV=development webpack serve"
16
- },
17
- "dependencies": {},
18
- "devDependencies": {}
1
+ {
2
+ "name": "<%= package.name %>",
3
+ "version": "<%= package.version %>",
4
+ "description": "<%= package.description %>",
5
+ "author": "<%= author.name %> <<%= author.email %>>",
6
+ "license": "<%= package.license %>",
7
+ "scripts": {
8
+ <% if (flags.addStorybook) { %>
9
+ "storybook": "start-storybook",
10
+ <% } %>
11
+ <% if (flags.addJest) { %>
12
+ "test": "jest",
13
+ <% } %>
14
+ "build": "cross-env NODE_ENV=production webpack",
15
+ "start": "cross-env NODE_ENV=development webpack serve"
16
+ },
17
+ "dependencies": {},
18
+ "devDependencies": {}
19
19
  }
@@ -0,0 +1,14 @@
1
+ <% if (flags.addRedux) { %>
2
+ import { connect } from 'react-redux';
3
+ <% } %>
4
+
5
+ export default function App() {
6
+ return <h1>Hello World</h1>;
7
+ }
8
+
9
+ <% if (flags.addRedux) { %>
10
+ export default connect(
11
+ null,
12
+ null
13
+ )(App);
14
+ <% } %>
@@ -1,4 +1,4 @@
1
- import { library } from '@fortawesome/fontawesome-svg-core';
2
- import { faCircle } from '@fortawesome/free-solid-svg-icons';
3
-
1
+ import { library } from '@fortawesome/fontawesome-svg-core';
2
+ import { faCircle } from '@fortawesome/free-solid-svg-icons';
3
+
4
4
  library.add(faCircle);
@@ -1,10 +1,10 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- </head>
7
- <body>
8
- <div id="root"></div>
9
- </body>
10
- </html>
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width" />
6
+ </head>
7
+ <body>
8
+ <div id="root"></div>
9
+ </body>
10
+ </html>
@@ -1,54 +1,50 @@
1
- import 'core-js/stable';
2
- import 'regenerator-runtime/runtime';
3
-
4
- import React from 'react';
5
- import ReactDOM from 'react-dom';
6
- import { BrowserRouter as Router } from 'react-router-dom';
7
- <% if (flags.addRedux) { %>
8
- import { Provider } from 'react-redux';
9
- import createSagaMiddleware from 'redux-saga';
10
- import { applyMiddleware, createStore, compose } from 'redux';
11
- <% } %>
12
-
13
- <% if (flags.addFontAwesome) { %>
14
- import './icons.js';
15
- <% } %>
16
- import './index.scss';
17
- import App from './components/App/App';
18
- <% if (flags.addRedux) { %>
19
- import rootSaga from './sagas';
20
- import rootReducer from './reducers';
21
-
22
- /* eslint-disable no-underscore-dangle */
23
- const composer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
24
- /* eslint-enable */
25
-
26
- const sagaMiddleware = createSagaMiddleware();
27
- const enhancers = composer(applyMiddleware(sagaMiddleware));
28
-
29
- export const store = createStore(rootReducer, {}, enhancers);
30
-
31
- if (module.hot) {
32
- module.hot.accept('./reducers', () => {
33
- store.replaceReducer(require('./reducers').default);
34
- });
35
- }
36
-
37
- sagaMiddleware.run(rootSaga);
38
- <% } %>
39
-
40
- ReactDOM.render(
41
- <Router>
42
- <% if (flags.addRedux) { %>
43
- <Provider store={store}>
44
- <App />
45
- </Provider>
46
- <% } else { %>
47
- <App />
48
- <% } %>
49
- </Router>,
50
- document.getElementById('root')
51
- );
52
-
53
- export default App;
54
-
1
+ import 'core-js/stable';
2
+ import 'regenerator-runtime/runtime';
3
+
4
+ import ReactDOM from 'react-dom';
5
+ import { BrowserRouter as Router } from 'react-router-dom';
6
+ <% if (flags.addRedux) { %>
7
+ import { Provider } from 'react-redux';
8
+ import createSagaMiddleware from 'redux-saga';
9
+ import { applyMiddleware, createStore, compose } from 'redux';
10
+ <% } %>
11
+
12
+ <% if (flags.addFontAwesome) { %>
13
+ import './icons.js';
14
+ <% } %>
15
+ import './index.scss';
16
+ import App from './components/App';
17
+ <% if (flags.addRedux) { %>
18
+ import rootSaga from './sagas';
19
+ import rootReducer from './reducers';
20
+
21
+ /* eslint-disable no-underscore-dangle */
22
+ const composer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
23
+ /* eslint-enable */
24
+
25
+ const sagaMiddleware = createSagaMiddleware();
26
+ const enhancers = composer(applyMiddleware(sagaMiddleware));
27
+
28
+ export const store = createStore(rootReducer, {}, enhancers);
29
+
30
+ if (module.hot) {
31
+ module.hot.accept('./reducers', () => {
32
+ store.replaceReducer(require('./reducers').default);
33
+ });
34
+ }
35
+
36
+ sagaMiddleware.run(rootSaga);
37
+ <% } %>
38
+
39
+ ReactDOM.render(
40
+ <Router>
41
+ <% if (flags.addRedux) { %>
42
+ <Provider store={store}>
43
+ <App />
44
+ </Provider>
45
+ <% } else { %>
46
+ <App />
47
+ <% } %>
48
+ </Router>,
49
+ document.getElementById('root')
50
+ );
@@ -1,17 +1,16 @@
1
- <% if (styleFramework === 'bulma') { %>
2
- @charset "utf-8";
3
- <% } %>
4
- @import "~normalize-scss/sass/normalize/import-now";
5
- <% if (styleFramework === 'bootstrap') { %>
6
- @import "~bootstrap/scss/bootstrap";
7
- <% } else if (styleFramework === 'uikit') { %>
8
- @import "~uikit/src/scss/variables-theme";
9
- @import "~uikit/src/scss/mixins-theme";
10
- @import "~uikit/src/scss/uikit-theme";
11
- <% } else if (styleFramework === 'foundation') { %>
12
- @import "~foundation-sites/scss/foundation";
13
- <% } else if (styleFramework === 'materialize') { %>
14
- @import "~materialize-css/sass/materialize";
15
- <% } else if (styleFramework === 'bulma') { %>
16
- @import "~bulma/bulma";
17
- <% } %>
1
+ <% if (styleFramework === 'bulma') { %>
2
+ @charset "utf-8";
3
+ <% } %>
4
+ <% if (styleFramework === 'bootstrap') { %>
5
+ @import "~bootstrap/scss/bootstrap";
6
+ <% } else if (styleFramework === 'uikit') { %>
7
+ @import "~uikit/src/scss/variables-theme";
8
+ @import "~uikit/src/scss/mixins-theme";
9
+ @import "~uikit/src/scss/uikit-theme";
10
+ <% } else if (styleFramework === 'foundation') { %>
11
+ @import "~foundation-sites/scss/foundation";
12
+ <% } else if (styleFramework === 'materialize') { %>
13
+ @import "~materialize-css/sass/materialize";
14
+ <% } else if (styleFramework === 'bulma') { %>
15
+ @import "~bulma/bulma";
16
+ <% } %>
@@ -1,21 +1,21 @@
1
- import { buildActions } from 'utils';
2
-
3
- export const types = buildActions('application', ['INIT_APP']);
4
-
5
- const initApp = () => ({
6
- type: types.INIT_APP
7
- });
8
-
9
- export const actions = {
10
- initApp
11
- };
12
-
13
- export const initialState = {};
14
-
15
- export const reducer = (state = initialState, action = {}) => {
16
- switch (action.type) {
17
- default:
18
- return state;
19
- }
20
- };
21
-
1
+ import { buildActions } from 'utils';
2
+
3
+ export const types = buildActions('application', ['INIT_APP']);
4
+
5
+ const initApp = () => ({
6
+ type: types.INIT_APP
7
+ });
8
+
9
+ export const actions = {
10
+ initApp
11
+ };
12
+
13
+ export const initialState = {};
14
+
15
+ export const reducer = (state = initialState, action = {}) => {
16
+ switch (action.type) {
17
+ default:
18
+ return state;
19
+ }
20
+ };
21
+
@@ -1,7 +1,7 @@
1
- import { combineReducers } from 'redux';
2
-
3
- import { reducer as application } from './application';
4
-
5
- export default combineReducers({
6
- application
7
- });
1
+ import { combineReducers } from 'redux';
2
+
3
+ import { reducer as application } from './application';
4
+
5
+ export default combineReducers({
6
+ application
7
+ });
@@ -1,9 +1,9 @@
1
- import { all } from 'redux-saga/effects';
2
-
3
- export const workers = {};
4
-
5
- export const watchers = {};
6
-
7
- export default function* saga() {
8
- yield all(Object.values(watchers).map(watcher => watcher()));
9
- }
1
+ import { all } from 'redux-saga/effects';
2
+
3
+ export const workers = {};
4
+
5
+ export const watchers = {};
6
+
7
+ export default function* saga() {
8
+ yield all(Object.values(watchers).map(watcher => watcher()));
9
+ }
@@ -1,7 +1,7 @@
1
- import { fork } from 'redux-saga/effects';
2
-
3
- import application from './application';
4
-
5
- export default function* saga() {
6
- yield fork(application);
7
- }
1
+ import { fork } from 'redux-saga/effects';
2
+
3
+ import application from './application';
4
+
5
+ export default function* saga() {
6
+ yield fork(application);
7
+ }
@@ -1 +1 @@
1
- export const getApplication = state => state.application;
1
+ export const getApplication = state => state.application;
@@ -1,13 +1,13 @@
1
- import { getApplication } from './application';
2
-
3
- describe('application selectors', () => {
4
- const state = {
5
- application: {
6
- test: true
7
- }
8
- };
9
-
10
- it('getApplication', () => {
11
- expect(getApplication(state)).toBe(state.application);
12
- });
13
- });
1
+ import { getApplication } from './application';
2
+
3
+ describe('application selectors', () => {
4
+ const state = {
5
+ application: {
6
+ test: true
7
+ }
8
+ };
9
+
10
+ it('getApplication', () => {
11
+ expect(getApplication(state)).toBe(state.application);
12
+ });
13
+ });
@@ -1,32 +1,36 @@
1
- import { createElement } from 'react';
2
-
3
- <% if (flags.addRedux) { %>
4
- /* eslint-disable react/display-name, react/prop-types */
5
-
6
- /**
7
- * Creates an object containing action constants namespaced under the specified reducer.
8
- *
9
- * @param {string} reducer The name of the reducer or module
10
- * @param {string[]} actions A list of action names
11
- * @return {object} Object with action name keys and full action string values
12
- */
13
- export function buildActions(reducer, actions) {
14
- const result = {};
15
-
16
- for (const action of actions) {
17
- result[action] = `${reducer}/${action}`;
18
- }
19
-
20
- return result;
21
- }
22
- <% } %>
23
-
24
- /**
25
- * Creates a mock component which will expose its props for snapshot testing purposes.
26
- *
27
- * @param {string} name The component/element name (e.g. "MyComponent")
28
- * @param {object} props An object containing props to setup
29
- * @return {object} Mock component with specified name and props
30
- */
31
- export const mockComponent = (name, props = {}) => () =>
32
- createElement(name, props, props.children);
1
+ <% if (flags.addJest) { %>
2
+ import { createElement } from 'react';
3
+ <% } %>
4
+
5
+ <% if (flags.addRedux) { %>
6
+ /* eslint-disable react/display-name, react/prop-types */
7
+
8
+ /**
9
+ * Creates an object containing action constants namespaced under the specified reducer.
10
+ *
11
+ * @param {string} reducer The name of the reducer or module
12
+ * @param {string[]} actions A list of action names
13
+ * @return {object} Object with action name keys and full action string values
14
+ */
15
+ export function buildActions(reducer, actions) {
16
+ const result = {};
17
+
18
+ for (const action of actions) {
19
+ result[action] = `${reducer}/${action}`;
20
+ }
21
+
22
+ return result;
23
+ }
24
+ <% } %>
25
+
26
+ <% if (flags.addJest) { %>
27
+ /**
28
+ * Creates a mock component which will expose its props for snapshot testing purposes.
29
+ *
30
+ * @param {string} name The component/element name (e.g. "MyComponent")
31
+ * @param {object} props An object containing props to setup
32
+ * @return {object} Mock component with specified name and props
33
+ */
34
+ export const mockComponent = (name, props = {}) => () =>
35
+ createElement(name, props, props.children);
36
+ <% } %>
@@ -1,109 +1,103 @@
1
- import webpack from 'webpack';
2
- import { resolve } from 'path';
3
- import HtmlPlugin from 'html-webpack-plugin';
4
- import ESLintPlugin from 'eslint-webpack-plugin';
5
- import TerserPlugin from 'terser-webpack-plugin';
6
- import StylelintPlugin from 'stylelint-webpack-plugin';
7
- import MiniCssExtractPlugin from 'mini-css-extract-plugin';
8
- import { CleanWebpackPlugin as CleanPlugin } from 'clean-webpack-plugin';
9
- import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
10
-
11
- const dev = process.env.NODE_ENV === 'development';
12
-
13
- const plugins = [
14
- new CleanPlugin(),
15
- new StylelintPlugin({
16
- configFile: '.stylelintrc',
17
- context: 'src',
18
- files: '**/*.scss',
19
- failOnError: true,
20
- quiet: false,
21
- syntax: 'scss'
22
- }),
23
- new HtmlPlugin({
24
- template: './src/index.html'
25
- }),
26
- new ESLintPlugin(),
27
- new MiniCssExtractPlugin()
28
- ];
29
-
30
- if (dev) {
31
- plugins.push(new webpack.HotModuleReplacementPlugin());
32
- }
33
-
34
- export default {
35
- mode: dev ? 'development' : 'production',
36
- devtool: dev ? 'eval-cheap-module-source-map' : 'cheap-module-source-map',
37
- entry: './src/index.js',
38
- devServer: {
39
- compress: dev,
40
- open: true,
41
- overlay: true,
42
- historyApiFallback: true,
43
- hot: dev,
44
- port: 9000
45
- },
46
- module: {
47
- rules: [
48
- {
49
- test: /\.js$/,
50
- exclude: /node_modules/,
51
- use: ['babel-loader']
52
- },
53
- {
54
- test: /\.(sa|sc|c)ss$/,
55
- use: [
56
- MiniCssExtractPlugin.loader,
57
- 'css-loader',
58
- {
59
- loader: 'postcss-loader',
60
- options: {
61
- postcssOptions: {
62
- ident: 'postcss',
63
- plugins: [
64
- require('autoprefixer'),
65
- require('postcss-flexbugs-fixes')
66
- ]
67
- },
68
- sourceMap: dev
69
- }
70
- },
71
- 'sass-loader'
72
- ]
73
- },
74
- {
75
- test: /\.html$/,
76
- use: [
77
- {
78
- loader: 'html-loader',
79
- options: { minimize: true }
80
- }
81
- ]
82
- }
83
- ]
84
- },
85
- output: {
86
- path: resolve(__dirname, 'dist'),
87
- filename: 'main.js',
88
- chunkFilename: '[name].js'
89
- },
90
- plugins,
91
- resolve: {
92
- extensions: ['.js', '.json'],
93
- modules: ['node_modules', 'src'],
94
- alias: {
95
- components: resolve(__dirname, 'src/components'),
96
- utils: resolve(__dirname, 'src/utils')
97
- }
98
- },
99
- optimization: {
100
- minimizer: [
101
- new TerserPlugin({
102
- terserOptions: {
103
- ecma: 9
104
- }
105
- }),
106
- new CssMinimizerPlugin()
107
- ]
108
- }
109
- };
1
+ import { resolve } from 'path';
2
+ import HtmlPlugin from 'html-webpack-plugin';
3
+ import ESLintPlugin from 'eslint-webpack-plugin';
4
+ import TerserPlugin from 'terser-webpack-plugin';
5
+ import StylelintPlugin from 'stylelint-webpack-plugin';
6
+ import MiniCssExtractPlugin from 'mini-css-extract-plugin';
7
+ import { CleanWebpackPlugin as CleanPlugin } from 'clean-webpack-plugin';
8
+ import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
9
+
10
+ const dev = process.env.NODE_ENV === 'development';
11
+
12
+ const plugins = [
13
+ new CleanPlugin(),
14
+ new StylelintPlugin({
15
+ configFile: '.stylelintrc',
16
+ context: 'src',
17
+ files: '**/*.scss',
18
+ failOnError: true,
19
+ quiet: false,
20
+ customSyntax: 'postcss-scss'
21
+ }),
22
+ new HtmlPlugin({
23
+ template: './src/index.html'
24
+ }),
25
+ new ESLintPlugin(),
26
+ new MiniCssExtractPlugin()
27
+ ];
28
+
29
+ export default {
30
+ mode: dev ? 'development' : 'production',
31
+ devtool: dev ? 'eval-cheap-module-source-map' : 'cheap-module-source-map',
32
+ entry: './src/index.js',
33
+ devServer: {
34
+ compress: dev,
35
+ open: true,
36
+ historyApiFallback: true,
37
+ hot: dev,
38
+ port: 9000
39
+ },
40
+ module: {
41
+ rules: [
42
+ {
43
+ test: /\.js$/,
44
+ exclude: /node_modules/,
45
+ use: ['babel-loader']
46
+ },
47
+ {
48
+ test: /\.(sa|sc|c)ss$/,
49
+ use: [
50
+ MiniCssExtractPlugin.loader,
51
+ 'css-loader',
52
+ {
53
+ loader: 'postcss-loader',
54
+ options: {
55
+ postcssOptions: {
56
+ ident: 'postcss',
57
+ plugins: [
58
+ require('autoprefixer'),
59
+ require('postcss-flexbugs-fixes')
60
+ ]
61
+ },
62
+ sourceMap: dev
63
+ }
64
+ },
65
+ 'sass-loader'
66
+ ]
67
+ },
68
+ {
69
+ test: /\.html$/,
70
+ use: [
71
+ {
72
+ loader: 'html-loader',
73
+ options: { minimize: true }
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ },
79
+ output: {
80
+ path: resolve(__dirname, 'dist'),
81
+ filename: 'main.js',
82
+ chunkFilename: '[name].js'
83
+ },
84
+ plugins,
85
+ resolve: {
86
+ extensions: ['.js', '.json'],
87
+ modules: ['node_modules', 'src'],
88
+ alias: {
89
+ components: resolve(__dirname, 'src/components'),
90
+ utils: resolve(__dirname, 'src/utils')
91
+ }
92
+ },
93
+ optimization: {
94
+ minimizer: [
95
+ new TerserPlugin({
96
+ terserOptions: {
97
+ ecma: 12
98
+ }
99
+ }),
100
+ new CssMinimizerPlugin()
101
+ ]
102
+ }
103
+ };