antd-management-fast-develop 1.0.4 → 1.0.6

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.
package/bin/cli.js ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+
3
+ /* eslint-disable no-undef */
4
+ /* eslint-disable unicorn/prefer-module */
5
+ /* eslint-disable no-useless-escape */
6
+
7
+ const { Command } = require('commander');
8
+ const { getArgCollection } = require('easy-soft-develop');
9
+
10
+ const generator = require('../src/cliCollection/generate');
11
+
12
+ const program = new Command();
13
+
14
+ process.title = 'easy-soft-develop';
15
+
16
+ program.version(require('../package').version).usage('<command> [options]');
17
+
18
+ program
19
+ .command('generate')
20
+ .description('generate file from data source and template')
21
+ .option('--dataPath <string>', 'data json source file path')
22
+ .option(
23
+ '--relativeFolder <bool>',
24
+ 'file will be generate by the relative folder path, default is "."',
25
+ )
26
+ .action((a, o) => {
27
+ generator.run(a, o);
28
+ });
29
+
30
+ program.parse(getArgCollection());
package/package.json CHANGED
@@ -1,17 +1,24 @@
1
1
  {
2
2
  "name": "antd-management-fast-develop",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "author": "",
7
7
  "main": "src/index.js",
8
+ "types": "types/index.d.ts",
9
+ "bin": {
10
+ "antd-management-fast-develop": "./bin/cli.js"
11
+ },
8
12
  "directories": {
9
- "src": "src"
13
+ "src": "src",
14
+ "types": "types"
10
15
  },
11
16
  "files": [
12
- "src/"
17
+ "src/",
18
+ "types/"
13
19
  ],
14
20
  "scripts": {
21
+ "ejs:test": "node ./bin/cli.js generate --dataPath ./src/data.json",
15
22
  "precommit": "npm run z:lint:staged:quiet",
16
23
  "publish:npm": "npm publish --registry https://registry.npmjs.org/",
17
24
  "prez:documentation:generate": "npx rimraf ./docs && npm run z:documentation:lint",
@@ -41,9 +48,13 @@
41
48
  "z:test": "cross-env NODE_ENV=test jest",
42
49
  "z:tsc:build": "echo show tsc version and create declaration file && tsc -v && tsc -p ./tsconfig.types.json && echo declaration file generate complete"
43
50
  },
51
+ "dependencies": {
52
+ "commander": "^10.0.0",
53
+ "ejs": "^3.1.9"
54
+ },
44
55
  "devDependencies": {
45
- "@babel/core": "^7.21.0",
46
- "@babel/eslint-parser": "^7.19.1",
56
+ "@babel/core": "^7.21.3",
57
+ "@babel/eslint-parser": "^7.21.3",
47
58
  "@babel/plugin-external-helpers": "^7.18.6",
48
59
  "@babel/plugin-proposal-class-properties": "^7.18.6",
49
60
  "@babel/plugin-proposal-decorators": "^7.21.0",
@@ -56,15 +67,15 @@
56
67
  "@commitlint/config-lerna-scopes": "^17.4.2",
57
68
  "@commitlint/cz-commitlint": "^17.4.4",
58
69
  "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
59
- "@types/jest": "^29.4.0",
60
- "@types/node": "^18.15.0",
61
- "@typescript-eslint/parser": "^5.54.1",
62
- "@umijs/max": "^4.0.57",
70
+ "@types/jest": "^29.5.0",
71
+ "@types/node": "^18.15.3",
72
+ "@typescript-eslint/parser": "^5.55.0",
73
+ "@umijs/max": "^4.0.61",
63
74
  "commitizen": "^4.3.0",
64
75
  "conventional-changelog-conventionalcommits": "^5.0.0",
65
76
  "cross-env": "^7.0.3",
66
77
  "documentation": "^14.0.1",
67
- "easy-soft-develop": "^2.0.175",
78
+ "easy-soft-develop": "^2.0.177",
68
79
  "eslint": "^8.36.0",
69
80
  "eslint-config-airbnb": "^19.0.4",
70
81
  "eslint-config-airbnb-typescript": "^17.0.0",
@@ -90,8 +101,8 @@
90
101
  "react": "^18.2.0",
91
102
  "react-dnd": "^16.0.1",
92
103
  "rimraf": "^4.4.0",
93
- "stylelint": "^15.2.0",
104
+ "stylelint": "^15.3.0",
94
105
  "stylelint-config-prettier": "^9.0.5",
95
- "stylelint-config-standard": "^30.0.1"
106
+ "stylelint-config-standard": "^31.0.0"
96
107
  }
97
108
  }
@@ -0,0 +1,58 @@
1
+ /* eslint-disable no-undef */
2
+ /* eslint-disable unicorn/prefer-module */
3
+ /* eslint-disable no-useless-escape */
4
+
5
+ const {
6
+ promptWarn,
7
+ checkStringIsEmpty,
8
+ readJsonFileSync,
9
+ isObject,
10
+ exit,
11
+ promptInfo,
12
+ exec,
13
+ } = require('easy-soft-develop');
14
+ const { generate } = require('../tools/generate');
15
+
16
+ exports.run = function (s, o) {
17
+ const {
18
+ _optionValues: { dataPath = '', relativeFolder = '.' },
19
+ } = o;
20
+
21
+ if (checkStringIsEmpty(dataPath)) {
22
+ promptWarn('please input data json file path, use --help to get help info');
23
+
24
+ exit();
25
+ }
26
+
27
+ const data = readJsonFileSync(dataPath);
28
+
29
+ if (isObject(data)) {
30
+ if (Array.isArray(data.list)) {
31
+ promptInfo('File will generate, please wait a moment');
32
+
33
+ generate(data.list, relativeFolder);
34
+
35
+ promptInfo('Format generated file:');
36
+
37
+ exec(`npx prettier --write ${relativeFolder}/**`);
38
+ } else {
39
+ const simple = {
40
+ list: [
41
+ {
42
+ functionSegment: 'SimpleStatus',
43
+ label: '状态',
44
+ name: 'status',
45
+ },
46
+ ],
47
+ };
48
+
49
+ promptWarn(
50
+ `in the data json file, key "list" value is not an array, it must be like this ${JSON.stringify(
51
+ simple,
52
+ )}`,
53
+ );
54
+ }
55
+ }
56
+
57
+ exit();
58
+ };
package/src/data.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "list": [
3
+ {
4
+ "functionSegment": "SimpleStatus",
5
+ "label": "状态",
6
+ "name": "status"
7
+ },
8
+ {
9
+ "functionSegment": "Brand",
10
+ "label": "商品品牌",
11
+ "name": "brandId"
12
+ }
13
+ ]
14
+ }
package/src/index.js CHANGED
@@ -1 +1 @@
1
- export * from './configAssist';
1
+ console.log('this is an empty entry point');
@@ -0,0 +1,204 @@
1
+ /* eslint-disable no-undef */
2
+ /* eslint-disable unicorn/prefer-module */
3
+ /* eslint-disable no-useless-escape */
4
+
5
+ const templateContent = `
6
+ import {
7
+ isInvalid,
8
+ isNull,
9
+ isUndefined,
10
+ refitCommonData,
11
+ searchFromList,
12
+ } from 'easy-soft-utility';
13
+
14
+ import {
15
+ unknownLabel,
16
+ unlimitedWithStringFlag,
17
+ } from 'antd-management-fast-common';
18
+ import {
19
+ buildFlexRadio,
20
+ buildFlexSelect,
21
+ buildFormRadio,
22
+ buildFormSelect,
23
+ buildOptionItem,
24
+ buildRadioItem,
25
+ buildSearchFormSelect,
26
+ } from 'antd-management-fast-component';
27
+
28
+ export function refit<%= o.functionSegment %>List({ metaData, withUnlimited = true }) {
29
+ const { <%= o.defineName %>List: list } = {
30
+ <%= o.defineName %>List: [],
31
+ ...metaData,
32
+ };
33
+
34
+ if (withUnlimited) {
35
+ return refitCommonData(list, unlimitedWithStringFlag);
36
+ }
37
+
38
+ return refitCommonData(list);
39
+ }
40
+
41
+ export function get<%= o.functionSegment %>Name({ metaData, value, defaultValue = '' }) {
42
+ if (isInvalid(value)) {
43
+ return defaultValue;
44
+ }
45
+
46
+ const item = searchFromList(
47
+ 'flag',
48
+ \`\${isNull(isUndefined(value) ? null : value) ? '' : value}\`,
49
+ refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),
50
+ );
51
+
52
+ return item == null ? '未知' : item.name;
53
+ }
54
+
55
+ export function render<%= o.functionSegment %>Option({
56
+ metaData,
57
+ withUnlimited = true,
58
+ adjustListDataCallback = null,
59
+ }) {
60
+ const listData = refit<%= o.functionSegment %>List({ metaData, withUnlimited });
61
+
62
+ return buildOptionItem({ list: listData, adjustListDataCallback });
63
+ }
64
+
65
+ export function render<%= o.functionSegment %>Radio({
66
+ metaData,
67
+ withUnlimited = true,
68
+ adjustListDataCallback = null,
69
+ }) {
70
+ const listData = refit<%= o.functionSegment %>List({ metaData, withUnlimited });
71
+
72
+ return buildRadioItem({ list: listData, adjustListDataCallback });
73
+ }
74
+
75
+ export function renderSearch<%= o.functionSegment %>Select({
76
+ metaData = null,
77
+ withUnlimited = true,
78
+ label = '<%= o.label %>',
79
+ name = '<%= o.name %>',
80
+ helper = null,
81
+ }) {
82
+ const title = label || unknownLabel;
83
+
84
+ return buildSearchFormSelect({
85
+ label: title,
86
+ name,
87
+ helper,
88
+ list: refit<%= o.functionSegment %>List({ metaData, withUnlimited }),
89
+ dataConvert: (o) => o,
90
+ });
91
+ }
92
+
93
+ export function renderCustom<%= o.functionSegment %>Select({
94
+ metaData = null,
95
+ label = '<%= o.label %>',
96
+ separator = ':',
97
+ size = 'middle',
98
+ onChange: onChangeCallback,
99
+ innerProps: innerProperties = null,
100
+ }) {
101
+ return buildFlexSelect({
102
+ label,
103
+ defaultValue: null,
104
+ separator,
105
+ size,
106
+ list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: true }),
107
+ dataConvert: (o, index) => {
108
+ const { flag, name } = o;
109
+
110
+ return { index, label: name, value: flag, disabled: false, ...o };
111
+ },
112
+ renderItem: null,
113
+ onChange: onChangeCallback,
114
+ innerProps: innerProperties,
115
+ });
116
+ }
117
+
118
+ export function renderForm<%= o.functionSegment %>Select({
119
+ metaData = null,
120
+ helper = null,
121
+ onChange: onChangeCallback,
122
+ label = '<%= o.label %>',
123
+ formItemLayout = null,
124
+ required = true,
125
+ name = '<%= o.name %>',
126
+ innerProps: innerProperties = null,
127
+ }) {
128
+ const title = label || unknownLabel;
129
+
130
+ return buildFormSelect({
131
+ label: title,
132
+ name,
133
+ helper,
134
+ list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),
135
+ dataConvert: (o, index) => {
136
+ const { flag, name } = o;
137
+
138
+ return { index, label: name, value: flag, disabled: false, ...o };
139
+ },
140
+ onChange: onChangeCallback,
141
+ formItemLayout,
142
+ required,
143
+ innerProps: innerProperties,
144
+ });
145
+ }
146
+
147
+ export function renderCustom<%= o.functionSegment %>Radio({
148
+ metaData = null,
149
+ label = '<%= o.label %>',
150
+ separator = ': ',
151
+ size = 'middle',
152
+ onChange: onChangeCallback,
153
+ innerProps: innerProperties = null,
154
+ }) {
155
+ return buildFlexRadio({
156
+ label,
157
+ defaultValue: null,
158
+ separator,
159
+ size,
160
+ list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: true }),
161
+ dataConvert: (o, index) => {
162
+ const { flag, name } = o;
163
+
164
+ return { index, label: name, value: flag, disabled: false, ...o };
165
+ },
166
+ renderItem: null,
167
+ onChange: onChangeCallback,
168
+ innerProps: innerProperties,
169
+ });
170
+ }
171
+
172
+ export function renderForm<%= o.functionSegment %>Radio({
173
+ metaData = null,
174
+ helper = null,
175
+ onChange: onChangeCallback,
176
+ label = '<%= o.label %>',
177
+ formItemLayout = null,
178
+ required = true,
179
+ name = '<%= o.name %>',
180
+ innerProps: innerProperties = null,
181
+ }) {
182
+ const title = label || unknownLabel;
183
+
184
+ return buildFormRadio({
185
+ label: title,
186
+ name,
187
+ helper,
188
+ list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),
189
+ dataConvert: (o, index) => {
190
+ const { flag, name } = o;
191
+
192
+ return { index, label: name, value: flag, disabled: false, ...o };
193
+ },
194
+ onChange: onChangeCallback,
195
+ formItemLayout,
196
+ required,
197
+ innerProps: innerProperties,
198
+ });
199
+ }
200
+ `;
201
+
202
+ module.exports = {
203
+ templateContent,
204
+ };
@@ -0,0 +1,112 @@
1
+ /* eslint-disable no-undef */
2
+ /* eslint-disable unicorn/prefer-module */
3
+ /* eslint-disable no-useless-escape */
4
+
5
+ const { compile } = require('ejs');
6
+ const {
7
+ writeFileSync,
8
+ mkdirSync,
9
+ promptSuccess,
10
+ promptWarn,
11
+ promptEmptyLine,
12
+ } = require('easy-soft-develop');
13
+
14
+ let { templateContent } = require('../template');
15
+
16
+ function generate(dataSource, relativeFolder) {
17
+ mkdirSync(`${relativeFolder}/FunctionExtra`, {
18
+ recursive: true,
19
+ });
20
+
21
+ const dataAdjust = dataSource.map((o) => adjustSource(o));
22
+
23
+ for (const o of dataAdjust) {
24
+ checkDataItem(o);
25
+
26
+ let content = compile(templateContent)({ o });
27
+
28
+ mkdirSync(`${relativeFolder}/FunctionExtra/${o.functionSegment}`);
29
+
30
+ writeFileSync(
31
+ `${relativeFolder}/FunctionExtra/${o.functionSegment}/index.jsx`,
32
+ content,
33
+ {
34
+ coverFile: true,
35
+ },
36
+ );
37
+
38
+ promptSuccess(
39
+ `Generate "${relativeFolder}/FunctionExtra/${o.functionSegment}/index.jsx" complete`,
40
+ );
41
+ }
42
+ }
43
+
44
+ function adjustSource(o) {
45
+ const d = { ...o };
46
+
47
+ const functionSegment = d.functionSegment;
48
+
49
+ if (functionSegment === undefined) {
50
+ promptWarn('data has error, check item: ');
51
+
52
+ console.log(d);
53
+
54
+ promptEmptyLine();
55
+
56
+ throw new Error('data has not key "functionSegment"');
57
+ }
58
+
59
+ d.defineName = toLowerFirst(d.functionSegment);
60
+
61
+ return d;
62
+ }
63
+
64
+ function toLowerFirst(o) {
65
+ return `${o.charAt(0)}`.toLowerCase() + o.slice(1);
66
+ }
67
+
68
+ function checkDataItem(item) {
69
+ if (item.functionSegment === undefined) {
70
+ promptWarn('data has error, check item: ');
71
+
72
+ console.log(item);
73
+
74
+ promptEmptyLine();
75
+
76
+ throw new Error('data has not key "functionSegment"');
77
+ }
78
+
79
+ if (item.defineName === undefined) {
80
+ promptWarn('data has error, check item: ');
81
+
82
+ console.log(item);
83
+
84
+ promptEmptyLine();
85
+
86
+ throw new Error('data has not key "defineName"');
87
+ }
88
+
89
+ if (item.label === undefined) {
90
+ promptWarn('data has error, check item: ');
91
+
92
+ console.log(item);
93
+
94
+ promptEmptyLine();
95
+
96
+ throw new Error('data has not key "label"');
97
+ }
98
+
99
+ if (item.name === undefined) {
100
+ promptWarn('data has error, check item: ');
101
+
102
+ console.log(item);
103
+
104
+ promptEmptyLine();
105
+
106
+ throw new Error('data has not key "name"');
107
+ }
108
+ }
109
+
110
+ module.exports = {
111
+ generate,
112
+ };
@@ -0,0 +1 @@
1
+ export function run(s: any, o: any): void;
File without changes
@@ -0,0 +1 @@
1
+ export const templateContent: "\nimport {\n isInvalid,\n isNull,\n isUndefined,\n refitCommonData,\n searchFromList,\n} from 'easy-soft-utility';\n\nimport {\n unknownLabel,\n unlimitedWithStringFlag,\n} from 'antd-management-fast-common';\nimport {\n buildFlexRadio,\n buildFlexSelect,\n buildFormRadio,\n buildFormSelect,\n buildOptionItem,\n buildRadioItem,\n buildSearchFormSelect,\n} from 'antd-management-fast-component';\n\nexport function refit<%= o.functionSegment %>List({ metaData, withUnlimited = true }) {\n const { <%= o.defineName %>List: list } = {\n <%= o.defineName %>List: [],\n ...metaData,\n };\n\n if (withUnlimited) {\n return refitCommonData(list, unlimitedWithStringFlag);\n }\n\n return refitCommonData(list);\n}\n\nexport function get<%= o.functionSegment %>Name({ metaData, value, defaultValue = '' }) {\n if (isInvalid(value)) {\n return defaultValue;\n }\n\n const item = searchFromList(\n 'flag',\n `${isNull(isUndefined(value) ? null : value) ? '' : value}`,\n refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),\n );\n\n return item == null ? '未知' : item.name;\n}\n\nexport function render<%= o.functionSegment %>Option({\n metaData,\n withUnlimited = true,\n adjustListDataCallback = null,\n}) {\n const listData = refit<%= o.functionSegment %>List({ metaData, withUnlimited });\n\n return buildOptionItem({ list: listData, adjustListDataCallback });\n}\n\nexport function render<%= o.functionSegment %>Radio({\n metaData,\n withUnlimited = true,\n adjustListDataCallback = null,\n}) {\n const listData = refit<%= o.functionSegment %>List({ metaData, withUnlimited });\n\n return buildRadioItem({ list: listData, adjustListDataCallback });\n}\n\nexport function renderSearch<%= o.functionSegment %>Select({\n metaData = null,\n withUnlimited = true,\n label = '<%= o.label %>',\n name = '<%= o.name %>',\n helper = null,\n}) {\n const title = label || unknownLabel;\n\n return buildSearchFormSelect({\n label: title,\n name,\n helper,\n list: refit<%= o.functionSegment %>List({ metaData, withUnlimited }),\n dataConvert: (o) => o,\n });\n}\n\nexport function renderCustom<%= o.functionSegment %>Select({\n metaData = null,\n label = '<%= o.label %>',\n separator = ':',\n size = 'middle',\n onChange: onChangeCallback,\n innerProps: innerProperties = null,\n}) {\n return buildFlexSelect({\n label,\n defaultValue: null,\n separator,\n size,\n list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: true }),\n dataConvert: (o, index) => {\n const { flag, name } = o;\n\n return { index, label: name, value: flag, disabled: false, ...o };\n },\n renderItem: null,\n onChange: onChangeCallback,\n innerProps: innerProperties,\n });\n}\n\nexport function renderForm<%= o.functionSegment %>Select({\n metaData = null,\n helper = null,\n onChange: onChangeCallback,\n label = '<%= o.label %>',\n formItemLayout = null,\n required = true,\n name = '<%= o.name %>',\n innerProps: innerProperties = null,\n}) {\n const title = label || unknownLabel;\n\n return buildFormSelect({\n label: title,\n name,\n helper,\n list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),\n dataConvert: (o, index) => {\n const { flag, name } = o;\n\n return { index, label: name, value: flag, disabled: false, ...o };\n },\n onChange: onChangeCallback,\n formItemLayout,\n required,\n innerProps: innerProperties,\n });\n}\n\nexport function renderCustom<%= o.functionSegment %>Radio({\n metaData = null,\n label = '<%= o.label %>',\n separator = ': ',\n size = 'middle',\n onChange: onChangeCallback,\n innerProps: innerProperties = null,\n}) {\n return buildFlexRadio({\n label,\n defaultValue: null,\n separator,\n size,\n list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: true }),\n dataConvert: (o, index) => {\n const { flag, name } = o;\n\n return { index, label: name, value: flag, disabled: false, ...o };\n },\n renderItem: null,\n onChange: onChangeCallback,\n innerProps: innerProperties,\n });\n}\n\nexport function renderForm<%= o.functionSegment %>Radio({\n metaData = null,\n helper = null,\n onChange: onChangeCallback,\n label = '<%= o.label %>',\n formItemLayout = null,\n required = true,\n name = '<%= o.name %>',\n innerProps: innerProperties = null,\n}) {\n const title = label || unknownLabel;\n\n return buildFormRadio({\n label: title,\n name,\n helper,\n list: refit<%= o.functionSegment %>List({ metaData, withUnlimited: false }),\n dataConvert: (o, index) => {\n const { flag, name } = o;\n\n return { index, label: name, value: flag, disabled: false, ...o };\n },\n onChange: onChangeCallback,\n formItemLayout,\n required,\n innerProps: innerProperties,\n });\n}\n";
@@ -0,0 +1 @@
1
+ export function generate(dataSource: any, relativeFolder: any): void;
@@ -1,65 +0,0 @@
1
- export function checkDevelopment() {
2
- return process.env.NODE_ENV === 'development';
3
- }
4
-
5
- export const configAssist = {
6
- showInfoComplete: false,
7
- };
8
-
9
- export function buildConfig({ packageJson: packageImport, config = {} }) {
10
- const deps = packageImport.dependencies;
11
-
12
- let mfsu = {};
13
- const shared = {};
14
-
15
- if (deps) {
16
- if (deps['react']) {
17
- shared.react = {
18
- singleton: true,
19
- requiredVersion: deps['react'],
20
- };
21
- }
22
-
23
- if (deps['react-dom']) {
24
- shared['react-dom'] = {
25
- singleton: true,
26
- requiredVersion: deps['react-dom'],
27
- };
28
- }
29
-
30
- mfsu.shared = shared;
31
- }
32
-
33
- const mergeConfig = {
34
- mfsu,
35
- hash: true,
36
- antd: {},
37
- access: {},
38
- model: {},
39
- initialState: {},
40
- request: {},
41
- history: { type: 'hash' },
42
- locale: {
43
- // 默认使用 src/locales/zh-CN.ts 作为多语言文件
44
- default: 'zh-CN',
45
- antd: true,
46
- // default true, when it is true, will use `navigator.language` overwrite default
47
- baseNavigator: true,
48
- },
49
- layout: {},
50
- ...config,
51
- };
52
-
53
- // delete mergeConfig.initialState;
54
- // delete mergeConfig.model;
55
- delete mergeConfig.dva;
56
-
57
- if (!configAssist.showInfoComplete) {
58
- console.log(mergeConfig);
59
- console.log('---------------------------------');
60
-
61
- configAssist.showInfoComplete = true;
62
- }
63
-
64
- return mergeConfig;
65
- }
package/src/index.less DELETED
@@ -1,3 +0,0 @@
1
- #test {
2
- font-size: inherit;
3
- }