nsgm-cli 1.0.27 → 2.0.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 (70) hide show
  1. package/.babelrc +13 -0
  2. package/LICENSE +201 -201
  3. package/README.md +161 -162
  4. package/client/layout/index.tsx +245 -0
  5. package/client/redux/reducers.ts +5 -0
  6. package/{generation/client → client}/redux/store.ts +50 -44
  7. package/{generation/client → client}/redux/template/manage/actions.ts +190 -190
  8. package/{generation/client → client}/redux/template/manage/reducers.ts +118 -118
  9. package/{generation/client → client}/redux/template/manage/types.ts +24 -24
  10. package/client/service/template/manage.ts +97 -0
  11. package/{generation/client → client}/styled/common.ts +27 -28
  12. package/client/styled/layout/index.ts +26 -0
  13. package/{generation/client → client}/styled/template/manage.ts +51 -51
  14. package/client/utils/common.ts +86 -0
  15. package/client/utils/cookie.ts +52 -0
  16. package/{generation/client → client}/utils/fetch.ts +25 -25
  17. package/client/utils/menu.tsx +27 -0
  18. package/generation/.DS_Store +0 -0
  19. package/generation/.babelrc +3 -2
  20. package/generation/README.md +19 -18
  21. package/generation/app.js +2 -2
  22. package/generation/client/redux/reducers.ts +5 -5
  23. package/generation/client/utils/menu.tsx +27 -26
  24. package/generation/gitignore +5 -4
  25. package/generation/mysql.config.js +13 -12
  26. package/generation/next.config.js +6 -6
  27. package/generation/package.json +25 -20
  28. package/generation/project.config.js +12 -12
  29. package/generation/server/rest.js +20 -20
  30. package/generation/server/utils/common.js +7 -0
  31. package/generation/tsconfig.json +30 -29
  32. package/index.js +10 -10
  33. package/lib/args.d.ts +6 -6
  34. package/lib/args.js +47 -47
  35. package/lib/generate.d.ts +3 -3
  36. package/lib/generate.js +735 -590
  37. package/lib/index.d.ts +2 -2
  38. package/lib/index.js +259 -182
  39. package/lib/server/db.d.ts +5 -5
  40. package/lib/server/db.js +110 -47
  41. package/lib/server/graphql.d.ts +7 -7
  42. package/lib/server/graphql.js +119 -119
  43. package/lib/server/plugins/date.d.ts +5 -5
  44. package/lib/server/plugins/date.js +16 -16
  45. package/lib/tsconfig.build.tsbuildinfo +1 -0
  46. package/mysql.config.js +14 -14
  47. package/next-env.d.ts +6 -0
  48. package/next.config.js +194 -174
  49. package/package.json +125 -113
  50. package/{generation/pages → pages}/_app.tsx +44 -44
  51. package/{generation/pages → pages}/_document.tsx +4 -2
  52. package/pages/index.tsx +68 -0
  53. package/{generation/pages → pages}/template/manage.tsx +278 -280
  54. package/project.config.js +14 -14
  55. package/public/slbhealthcheck.html +10 -0
  56. package/scripts/shutdown.sh +10 -0
  57. package/scripts/startup.sh +35 -0
  58. package/{generation/server → server}/apis/template.js +17 -18
  59. package/{generation/server → server}/modules/template/resolver.js +29 -35
  60. package/{generation/server → server}/modules/template/schema.js +33 -33
  61. package/server/rest.js +20 -0
  62. package/{generation/server → server}/sql/template.sql +8 -8
  63. package/server/utils/common.js +7 -0
  64. package/generation/client/layout/index.tsx +0 -223
  65. package/generation/client/service/template/manage.ts +0 -74
  66. package/generation/client/styled/layout/index.ts +0 -14
  67. package/generation/client/utils/common.ts +0 -45
  68. package/generation/next-env.d.ts +0 -2
  69. package/generation/pages/index.tsx +0 -55
  70. /package/{generation/public → public}/images/zhizuotu_1.png +0 -0
package/next.config.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Created by lei_sun on 2019/7/9.
3
3
  */
4
- const { PHASE_DEVELOPMENT_SERVER } = require('next/constants')
4
+ const { PHASE_DEVELOPMENT_SERVER, PHASE_EXPORT } = require('next/constants')
5
5
  const fs = require('fs')
6
6
  const { promisify } = require('util')
7
7
  const { join } = require('path')
@@ -11,8 +11,11 @@ const TerserPlugin = require('terser-webpack-plugin')
11
11
 
12
12
  module.exports = (phase, defaultConfig, options) => {
13
13
  let projectConfig = null
14
+ let pkg = null
15
+
14
16
  const curFolder = process.cwd()
15
17
  const curProjectConfigPath = curFolder + '/project.config.js'
18
+ const curPkgPath = curFolder + '/package.json'
16
19
 
17
20
  if (fs.existsSync(curProjectConfigPath)) {
18
21
  projectConfig = require(curProjectConfigPath)
@@ -20,192 +23,209 @@ module.exports = (phase, defaultConfig, options) => {
20
23
  projectConfig = require('./project.config.js')
21
24
  }
22
25
 
23
- // console.log('projectConfig', projectConfig)
24
- let { version, prefix, protocol, host, port } = projectConfig
25
-
26
- if(options != undefined){
27
- version = options.version
28
- prefix = options.prefix
29
- protocol = options.protocol
30
- host = options.host
31
- port = options.port
32
- // console.log('options', options)
33
- }
26
+ if (fs.existsSync(curPkgPath)) {
27
+ pkg = require(curPkgPath)
28
+ } else {
29
+ pkg = require('./package.json')
30
+ }
34
31
 
35
- // console.log('phase', phase, PHASE_DEVELOPMENT_SERVER, version, prefix, protocol, host, port)
36
-
37
- let configObj = {
38
- async rewrites() {
39
- return [
40
- {
41
- source: prefix + '/:slug*',
42
- destination: '/:slug*'
43
- }
44
- ]
45
- },
46
- //target: 'serverless',
47
- assetPrefix: '',
48
- crossOrign: 'anonymous',
49
- serverRuntimeConfig: {},
50
- publicRuntimeConfig: {
51
- version,
52
- prefix,
53
- protocol,
54
- host,
55
- port,
56
- phase
57
- },
58
- generateBuildId: async () => {
59
- return 'nsgm-cli-' + version
60
- },
61
- exportPathMap: async function (defaultPathMap,
62
- { dev, dir, outDir }) {
63
- if (dev) {
64
- return defaultPathMap
65
- }
32
+ const env = (pkg && pkg.config && pkg.config.env && pkg.config.env.toUpperCase()) || 'PROD'
66
33
 
67
- return defaultPathMap
68
- },
69
- generateEtags: false,
70
- useFileSystemPublicRoutes: true,
71
- webpack: (config, { dev, isServer }) => {
72
- //console.log('dev', dev, isServer)
73
-
74
- if(!dev){
75
- if(!isServer){
76
- config.optimization.splitChunks = {
77
- cacheGroups: {
78
- default: false,
79
- vendors: false,
80
- framework: {
81
- //将react和react-dom打入framework当中
82
- name: 'framework',
83
- chunks: 'all',
84
- test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/, //匹配库当中的react和react-dom
85
- priority: 40, //权重为40 最大权重
86
- },
87
- lib: {
88
- test(module) {
89
- //匹配包大于160000的
90
- if(module.size() > 100000){
91
- console.log('test_module', module.identifier(), module.size())
92
- }
93
- return module.size() > 100000
94
- },
95
- name(module) {
96
- //名字就是包当中的名字
97
- return (
98
- /[\\/]node_modules[\\/](.*)/.exec(module.identifier()) &&
99
- /[\\/]node_modules[\\/](.*)/.exec(module.identifier()).length &&
100
- /[\\/]node_modules[\\/](.*)/.exec(module.identifier())[1].replace(/\/|\\/g, '_')
101
- )
102
- },
103
- priority: 30, //权重为30
104
- minChunks: 1, //最小共用次数为1时就使用
105
- reuseExistingChunk: true
106
- },
107
- commons: {
108
- name: 'commons',
109
- chunks: 'all',
110
- minChunks: 20,
111
- maxSize: 30720,
112
- priority: 20
113
- },
114
- shared: {
115
- priority: 10,
116
- minChunks: 2,
117
- reuseExistingChunk: true
118
- },
119
- styles: {
120
- name: 'styles',
121
- test: /\.css$/,
122
- chunks: 'all',
123
- maxSize: 30720,
124
- enforce: true
125
- },
126
- less: {
127
- name: 'less',
128
- test: /\.less$/,
129
- chunks: 'all',
130
- maxSize: 30720,
131
- enforce: true
132
- }
133
- }
134
- }
135
- config.output.chunkFilename = `static/chunks/[name].${version}.js`
34
+ // console.log('projectConfig', projectConfig)
35
+ let { version, prefix, protocol, host, port } = projectConfig
36
+
37
+ // console.log('options', options)
38
+ if (options != undefined) {
39
+ version = options.version
40
+ prefix = options.prefix
41
+ protocol = options.protocol
42
+ host = options.host
43
+ port = options.port
44
+ }
136
45
 
137
- config.output.filename = ({ chunk }) => {
138
- const { name } = chunk
139
- //console.log('name', name)
46
+ if (phase === PHASE_DEVELOPMENT_SERVER) {
47
+ prefix = ''
48
+ }
140
49
 
141
- if(name === 'main'){
142
- return `static/main.${version}.js`
143
- } else if(name === 'polyfills') {
144
- return `static/polyfills.${version}.js`
145
- } else if(name.indexOf('webpack') != -1){
146
- return `[name]`
147
- }
50
+ // console.log('phase', phase, version, prefix, protocol, host, port)
51
+
52
+ let configObj = {
53
+ //target: 'serverless',
54
+ // crossOrign: 'anonymous',
55
+ serverRuntimeConfig: {},
56
+ publicRuntimeConfig: {
57
+ version,
58
+ prefix,
59
+ protocol,
60
+ host,
61
+ port,
62
+ env,
63
+ phase,
64
+ isExport: (phase === PHASE_EXPORT)
65
+ },
66
+ generateBuildId: async () => {
67
+ return 'nsgm-cli-' + version
68
+ },
69
+ exportPathMap: async function (defaultPathMap, { dev, dir, outDir }) {
70
+ if (dev) {
71
+ return defaultPathMap
72
+ }
73
+
74
+ return defaultPathMap
75
+ },
76
+ generateEtags: false,
77
+ useFileSystemPublicRoutes: true,
78
+ webpack: (config, { dev, isServer }) => {
79
+ //console.log('dev', dev, isServer)
80
+
81
+ if (!dev) {
82
+ if (!isServer) {
83
+ config.optimization.splitChunks = {
84
+ cacheGroups: {
85
+ default: false,
86
+ vendors: false,
87
+ framework: {
88
+ //将react和react-dom打入framework当中
89
+ name: 'framework',
90
+ chunks: 'all',
91
+ test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/, //匹配库当中的react和react-dom
92
+ priority: 40 //权重为40 最大权重
93
+ },
94
+ lib: {
95
+ test(module) {
96
+ //匹配包大于160000的
97
+ return module.size() > 160000
98
+ },
99
+ name(module) {
100
+ //名字就是包当中的名字
101
+ return (
102
+ /[\\/]node_modules[\\/](.*)/.exec(module.identifier()) &&
103
+ /[\\/]node_modules[\\/](.*)/.exec(module.identifier()).length &&
104
+ /[\\/]node_modules[\\/](.*)/.exec(module.identifier())[1].replace(/\/|\\/g, '_')
105
+ )
106
+ },
107
+ priority: 30, //权重为30
108
+ minChunks: 1, //最小共用次数为1时就使用
109
+ reuseExistingChunk: true
110
+ },
111
+ commons: {
112
+ name: 'commons',
113
+ chunks: 'all',
114
+ minChunks: 20,
115
+ maxSize: 30720,
116
+ priority: 20
117
+ },
118
+ shared: {
119
+ priority: 10,
120
+ minChunks: 2,
121
+ reuseExistingChunk: true
122
+ },
123
+ styles: {
124
+ name: 'styles',
125
+ test: /\.css$/,
126
+ chunks: 'all',
127
+ maxSize: 30720,
128
+ enforce: true,
129
+ },
130
+ less: {
131
+ name: 'less',
132
+ test: /\.less$/,
133
+ chunks: 'all',
134
+ maxSize: 30720,
135
+ enforce: true,
136
+ },
137
+ }
138
+ }
139
+ config.output.chunkFilename = `static/chunks/[name].${version}.js`
140
+
141
+ config.output.filename = ({ chunk }) => {
142
+ const { name } = chunk
143
+ //console.log('name', name)
144
+
145
+ if (name === 'main') {
146
+ return `static/main.${version}.js`
147
+ } else if (name === 'polyfills') {
148
+ return `static/polyfills.${version}.js`
149
+ } else if (name.indexOf('webpack') != -1) {
150
+ return `[name]`
151
+ }
148
152
 
149
- return `static/[name].${version}.js`
150
- }
153
+ return `static/[name].${version}.js`
154
+ }
155
+
156
+ config.optimization.runtimeChunk = {
157
+ name: `static/runtime/webpack.${version}.js`
158
+ }
159
+ }
151
160
 
152
- config.optimization.runtimeChunk = {
153
- name: `static/runtime/webpack.${version}.js`,
161
+ config.plugins.map((plugin) => {
162
+ //console.log('plugin.constructor.name', plugin.constructor.name)
163
+ if ('NextMiniCssExtractPlugin' == plugin.constructor.name) {
164
+ plugin.options = {
165
+ filename: `static/css/[name].${version}.css`,
166
+ chunkFilename: `static/css/[name].${version}.css`,
167
+ moduleFilename: ({ name }) => {
168
+ //console.log('name', name)
169
+ return `static/css/${name}.${version}.css`
154
170
  }
155
171
  }
156
-
157
- config.plugins.map(plugin => {
158
- //console.log('plugin.constructor.name', plugin.constructor.name)
159
- if ('NextMiniCssExtractPlugin' == plugin.constructor.name) {
160
- plugin.options = {
161
- filename: `static/css/[name].${version}.css`,
162
- chunkFilename: `static/css/[name].${version}.css`,
163
- moduleFilename: ({ name }) => {
164
- //console.log('name', name)
165
- return `static/css/${name}.${version}.css`
166
- }
172
+ }
173
+ })
174
+
175
+ config.plugins.push(new SimpleProgressPlugin())
176
+
177
+ config.optimization.minimizer = [
178
+ new TerserPlugin({
179
+ parallel: true,
180
+ terserOptions: {
181
+ ecma: 6
182
+ },
183
+ minify: (file, sourceMap) => {
184
+ // https://github.com/mishoo/UglifyJS2#minify-options
185
+ const uglifyJsOptions = {
186
+ /* your `uglify-js` package options */
187
+ compress: {
188
+ // warnings: true,
189
+ drop_console: true,
190
+ drop_debugger: true
167
191
  }
168
192
  }
169
- })
170
-
171
- config.plugins.push(new SimpleProgressPlugin())
172
-
173
- config.optimization.minimizer = [
174
- new TerserPlugin({
175
- parallel: true,
176
- terserOptions: {
177
- ecma: 6
178
- },
179
- minify: (file, sourceMap) => {
180
- // https://github.com/mishoo/UglifyJS2#minify-options
181
- const uglifyJsOptions = {
182
- /* your `uglify-js` package options */
183
- compress: {
184
- warnings: true,
185
- drop_console: true,
186
- drop_debugger: true
187
- }
188
- }
189
-
190
- if (sourceMap) {
191
- uglifyJsOptions.sourceMap = {
192
- content: sourceMap
193
- }
194
- }
195
-
196
- return require('uglify-es').minify(file, uglifyJsOptions)
193
+
194
+ if (sourceMap) {
195
+ uglifyJsOptions.sourceMap = {
196
+ content: sourceMap
197
197
  }
198
- })
199
- ]
200
- }
198
+ }
201
199
 
202
- return config
203
- }
200
+ return require('uglify-js').minify(file, uglifyJsOptions)
201
+ }
202
+ })
203
+ ]
204
+ }
205
+
206
+ return config
204
207
  }
208
+ }
205
209
 
206
- if(phase != PHASE_DEVELOPMENT_SERVER){
207
- configObj.distDir = 'build'
210
+ if (phase !== PHASE_DEVELOPMENT_SERVER) {
211
+ configObj = {
212
+ ...configObj,
213
+ distDir: 'build',
214
+ assetPrefix: prefix,
215
+ async rewrites() {
216
+ return [
217
+ {
218
+ source: prefix === '' ? '/' : prefix,
219
+ destination: '/'
220
+ },
221
+ {
222
+ source: prefix + '/:slug*',
223
+ destination: '/:slug*'
224
+ }
225
+ ]
226
+ }
208
227
  }
228
+ }
209
229
 
210
- return configObj
211
- }
230
+ return configObj
231
+ }
package/package.json CHANGED
@@ -1,113 +1,125 @@
1
- {
2
- "name": "nsgm-cli",
3
- "version": "1.0.27",
4
- "description": "A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project",
5
- "main": "index.js",
6
- "scripts": {
7
- "dev": "node ./lib/index.js dev",
8
- "build": "next build",
9
- "tsv": "node ./lib/index.js version",
10
- "start": "node ./lib/index.js start",
11
- "export": "node ./lib/index.js export",
12
- "init": "node ./lib/index.js init",
13
- "upgrade": "node ./lib/index.js upgrade",
14
- "create": "node ./lib/index.js create",
15
- "delete": "node ./lib/index.js delete",
16
- "clean": "rimraf .next && rimraf build && rimraf webapp && rimraf lib",
17
- "tsbuild": "rimraf lib && tsc --build tsconfig.build.json",
18
- "lint": "tslint -p tsconfig.build.json",
19
- "format": "prettier --write \"src/**/*.ts\" ",
20
- "prepare": "npm run tsbuild",
21
- "prepublishOnly": "npm run lint",
22
- "preversion": "npm run lint",
23
- "version": "npm run format && git add -A src",
24
- "postversion": "git push && git push --tags",
25
- "release": "npm run lint && npm run tsbuild && npm run build"
26
- },
27
- "repository": {
28
- "type": "git",
29
- "url": "git+https://github.com/erishen/nsgm-cli.git"
30
- },
31
- "keywords": [
32
- "next",
33
- "style-components",
34
- "graphql",
35
- "mysql",
36
- "redux",
37
- "react",
38
- "hooks",
39
- "express"
40
- ],
41
- "author": {
42
- "name": "Erishen Sun",
43
- "email": "leisun8309@gmail.com"
44
- },
45
- "license": "ISC",
46
- "bugs": {
47
- "url": "https://github.com/erishen/nsgm-cli/issues"
48
- },
49
- "bin": {
50
- "nsgm": "lib/index.js"
51
- },
52
- "files": [
53
- "generation/*",
54
- "lib/*",
55
- "*.config.js"
56
- ],
57
- "homepage": "https://github.com/erishen/nsgm-cli#readme",
58
- "dependencies": {
59
- "antd": "^4.11.2",
60
- "axios": "^0.21.1",
61
- "body-parser": "^1.19.0",
62
- "express": "^4.17.1",
63
- "express-fileupload": "^1.2.1",
64
- "express-graphql": "^0.12.0",
65
- "graphql": "^15.5.0",
66
- "lodash": "^4.17.20",
67
- "markdown-it": "^12.0.4",
68
- "moment": "^2.29.1",
69
- "mysql": "^2.18.1",
70
- "next": "^11.0.1",
71
- "react": "^17.0.1",
72
- "react-dom": "^17.0.1",
73
- "react-redux": "^7.2.2",
74
- "redux": "^4.0.5",
75
- "redux-devtools-extension": "^2.13.8",
76
- "redux-thunk": "^2.3.0",
77
- "replace": "^1.2.0",
78
- "replace-in-file": "^6.2.0",
79
- "shelljs": "^0.8.4",
80
- "styled-components": "^5.2.1",
81
- "terser-webpack-plugin": "^4.2.3",
82
- "typescript": "^4.1.3",
83
- "uglify-es": "^3.3.9",
84
- "webpack": "^5.44.0",
85
- "webpack-simple-progress-plugin": "0.0.4",
86
- "xlsx": "^0.16.9"
87
- },
88
- "devDependencies": {
89
- "@babel/core": "^7.12.10",
90
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
91
- "@types/body-parser": "^1.19.0",
92
- "@types/express": "^4.17.11",
93
- "@types/express-fileupload": "^1.1.6",
94
- "@types/express-graphql": "^0.9.0",
95
- "@types/graphql": "^14.5.0",
96
- "@types/lodash": "^4.14.168",
97
- "@types/moment": "^2.13.0",
98
- "@types/mysql": "^2.15.17",
99
- "@types/next": "^9.0.0",
100
- "@types/node": "^14.14.22",
101
- "@types/react": "18.0.1",
102
- "@types/react-dom": "^18.0.11",
103
- "@types/react-redux": "^7.1.16",
104
- "@types/shelljs": "^0.8.8",
105
- "@types/styled-components": "^5.1.7",
106
- "babel-plugin-react-html-attrs": "^3.0.5",
107
- "babel-plugin-styled-components": "^1.12.0",
108
- "prettier": "^2.2.1",
109
- "rimraf": "^3.0.2",
110
- "tslint": "^6.1.3",
111
- "tslint-config-prettier": "^1.18.0"
112
- }
113
- }
1
+ {
2
+ "name": "nsgm-cli",
3
+ "version": "2.0.0",
4
+ "description": "A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "help": "node ./lib/index.js",
8
+ "dev": "npm run tsbuild && node ./lib/index.js dev",
9
+ "tsbuild": "rimraf lib && tsc --build tsconfig.build.json",
10
+ "build": "node ./lib/index.js build",
11
+ "tsv": "node ./lib/index.js version",
12
+ "start": "node ./lib/index.js start",
13
+ "export": "node ./lib/index.js export",
14
+ "init": "node ./lib/index.js init",
15
+ "upgrade": "node ./lib/index.js upgrade",
16
+ "create": "node ./lib/index.js create",
17
+ "delete": "node ./lib/index.js delete",
18
+ "clean": "rimraf .next && rimraf build && rimraf webapp && rimraf lib",
19
+ "lint": "tslint -p tsconfig.build.json",
20
+ "format": "prettier --write \"src/**/*.ts\"",
21
+ "prepare": "npm run tsbuild",
22
+ "prepublishOnly": "npm run lint",
23
+ "preversion": "npm run lint",
24
+ "version": "npm run format && git add -A src",
25
+ "postversion": "git push && git push --tags",
26
+ "release": "npm run clean && npm run lint && npm run tsbuild && npm run build"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/erishen/nsgm-cli.git"
31
+ },
32
+ "keywords": [
33
+ "next",
34
+ "style-components",
35
+ "graphql",
36
+ "mysql",
37
+ "redux",
38
+ "react",
39
+ "hooks",
40
+ "express"
41
+ ],
42
+ "author": {
43
+ "name": "Erishen Sun",
44
+ "email": "leisun8309@gmail.com"
45
+ },
46
+ "license": "ISC",
47
+ "bugs": {
48
+ "url": "https://github.com/erishen/nsgm-cli/issues"
49
+ },
50
+ "bin": {
51
+ "nsgm": "lib/index.js"
52
+ },
53
+ "files": [
54
+ "generation/*",
55
+ "client/*",
56
+ "server/*",
57
+ "pages/*",
58
+ "lib/*",
59
+ "public/*",
60
+ "scripts/*",
61
+ "*.config.js",
62
+ ".babelrc",
63
+ "next-env.d.ts"
64
+ ],
65
+ "homepage": "https://github.com/erishen/nsgm-cli#readme",
66
+ "dependencies": {
67
+ "next": "^11.0.1",
68
+ "@reduxjs/toolkit": "^1.8.5",
69
+ "antd": "^4.11.2",
70
+ "axios": "^0.21.1",
71
+ "body-parser": "^1.19.0",
72
+ "cors": "^2.8.5",
73
+ "express": "^4.17.1",
74
+ "express-fileupload": "^1.2.1",
75
+ "express-graphql": "^0.12.0",
76
+ "graphql": "^15.5.0",
77
+ "lodash": "^4.17.20",
78
+ "markdown-it": "^12.0.4",
79
+ "moment": "^2.29.1",
80
+ "mysql": "^2.18.1",
81
+ "react": "^17.0.1",
82
+ "react-dom": "^17.0.1",
83
+ "react-redux": "^7.2.2",
84
+ "redux": "^4.0.5",
85
+ "redux-thunk": "^2.3.0",
86
+ "replace": "^1.2.0",
87
+ "replace-in-file": "^6.2.0",
88
+ "shelljs": "^0.8.4",
89
+ "styled-components": "^5.2.1",
90
+ "terser-webpack-plugin": "4.2.3",
91
+ "typescript": "^4.1.3",
92
+ "uglify-js": "^3.16.0",
93
+ "uuid": "^8.3.2",
94
+ "webpack": "4.44.1",
95
+ "webpack-simple-progress-plugin": "0.0.4",
96
+ "xlsx": "^0.16.9"
97
+ },
98
+ "devDependencies": {
99
+ "@babel/core": "^7.12.10",
100
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
101
+ "@types/body-parser": "^1.19.0",
102
+ "@types/express": "^4.17.11",
103
+ "@types/express-fileupload": "^1.1.6",
104
+ "@types/express-graphql": "^0.9.0",
105
+ "@types/graphql": "^14.5.0",
106
+ "@types/lodash": "^4.14.168",
107
+ "@types/moment": "^2.13.0",
108
+ "@types/mysql": "^2.15.17",
109
+ "@types/next": "^9.0.0",
110
+ "@types/node": "^14.14.31",
111
+ "@types/react": "18.0.1",
112
+ "@types/react-dom": "^18.0.11",
113
+ "@types/react-redux": "^7.1.25",
114
+ "@types/shelljs": "^0.8.8",
115
+ "@types/styled-components": "^5.1.7",
116
+ "@types/uuid": "^8.3.0",
117
+ "babel-plugin-react-html-attrs": "^3.0.5",
118
+ "babel-plugin-styled-components": "^1.12.0",
119
+ "cross-env": "^7.0.3",
120
+ "prettier": "^2.2.1",
121
+ "rimraf": "^3.0.2",
122
+ "tslint": "^6.1.3",
123
+ "tslint-config-prettier": "^1.18.0"
124
+ }
125
+ }