weaver-e10-builder 1.0.2-beta
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/README.md +200 -0
- package/dist/commands/app.d.ts +3 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +305 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +386 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +106 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +134 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/docx.d.ts +3 -0
- package/dist/commands/docx.d.ts.map +1 -0
- package/dist/commands/docx.js +54 -0
- package/dist/commands/docx.js.map +1 -0
- package/dist/commands/form-button.d.ts +3 -0
- package/dist/commands/form-button.d.ts.map +1 -0
- package/dist/commands/form-button.js +441 -0
- package/dist/commands/form-button.js.map +1 -0
- package/dist/commands/form-data.d.ts +3 -0
- package/dist/commands/form-data.d.ts.map +1 -0
- package/dist/commands/form-data.js +197 -0
- package/dist/commands/form-data.js.map +1 -0
- package/dist/commands/form-ebuilder-columns.d.ts +3 -0
- package/dist/commands/form-ebuilder-columns.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-columns.js +118 -0
- package/dist/commands/form-ebuilder-columns.js.map +1 -0
- package/dist/commands/form-ebuilder-filter.d.ts +3 -0
- package/dist/commands/form-ebuilder-filter.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-filter.js +135 -0
- package/dist/commands/form-ebuilder-filter.js.map +1 -0
- package/dist/commands/form-ebuilder-scope.d.ts +3 -0
- package/dist/commands/form-ebuilder-scope.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-scope.js +321 -0
- package/dist/commands/form-ebuilder-scope.js.map +1 -0
- package/dist/commands/form-ebuilder-search.d.ts +3 -0
- package/dist/commands/form-ebuilder-search.d.ts.map +1 -0
- package/dist/commands/form-ebuilder-search.js +252 -0
- package/dist/commands/form-ebuilder-search.js.map +1 -0
- package/dist/commands/form-formula.d.ts +12 -0
- package/dist/commands/form-formula.d.ts.map +1 -0
- package/dist/commands/form-formula.js +252 -0
- package/dist/commands/form-formula.js.map +1 -0
- package/dist/commands/form-layout-init.d.ts +15 -0
- package/dist/commands/form-layout-init.d.ts.map +1 -0
- package/dist/commands/form-layout-init.js +162 -0
- package/dist/commands/form-layout-init.js.map +1 -0
- package/dist/commands/form-layout.d.ts +3 -0
- package/dist/commands/form-layout.d.ts.map +1 -0
- package/dist/commands/form-layout.js +236 -0
- package/dist/commands/form-layout.js.map +1 -0
- package/dist/commands/form-list-click.d.ts +3 -0
- package/dist/commands/form-list-click.d.ts.map +1 -0
- package/dist/commands/form-list-click.js +154 -0
- package/dist/commands/form-list-click.js.map +1 -0
- package/dist/commands/form-list-event.d.ts +3 -0
- package/dist/commands/form-list-event.d.ts.map +1 -0
- package/dist/commands/form-list-event.js +203 -0
- package/dist/commands/form-list-event.js.map +1 -0
- package/dist/commands/form-list-filter.d.ts +9 -0
- package/dist/commands/form-list-filter.d.ts.map +1 -0
- package/dist/commands/form-list-filter.js +107 -0
- package/dist/commands/form-list-filter.js.map +1 -0
- package/dist/commands/form-list-group.d.ts +11 -0
- package/dist/commands/form-list-group.d.ts.map +1 -0
- package/dist/commands/form-list-group.js +100 -0
- package/dist/commands/form-list-group.js.map +1 -0
- package/dist/commands/form-list-permission.d.ts +3 -0
- package/dist/commands/form-list-permission.d.ts.map +1 -0
- package/dist/commands/form-list-permission.js +127 -0
- package/dist/commands/form-list-permission.js.map +1 -0
- package/dist/commands/form-list-search-group.d.ts +3 -0
- package/dist/commands/form-list-search-group.d.ts.map +1 -0
- package/dist/commands/form-list-search-group.js +132 -0
- package/dist/commands/form-list-search-group.js.map +1 -0
- package/dist/commands/form-list-stats.d.ts +11 -0
- package/dist/commands/form-list-stats.d.ts.map +1 -0
- package/dist/commands/form-list-stats.js +139 -0
- package/dist/commands/form-list-stats.js.map +1 -0
- package/dist/commands/form-list-unit.d.ts +3 -0
- package/dist/commands/form-list-unit.d.ts.map +1 -0
- package/dist/commands/form-list-unit.js +95 -0
- package/dist/commands/form-list-unit.js.map +1 -0
- package/dist/commands/form-list-utils.d.ts +32 -0
- package/dist/commands/form-list-utils.d.ts.map +1 -0
- package/dist/commands/form-list-utils.js +76 -0
- package/dist/commands/form-list-utils.js.map +1 -0
- package/dist/commands/form-list.d.ts +3 -0
- package/dist/commands/form-list.d.ts.map +1 -0
- package/dist/commands/form-list.js +624 -0
- package/dist/commands/form-list.js.map +1 -0
- package/dist/commands/form-permission.d.ts +3 -0
- package/dist/commands/form-permission.d.ts.map +1 -0
- package/dist/commands/form-permission.js +193 -0
- package/dist/commands/form-permission.js.map +1 -0
- package/dist/commands/form-relate.d.ts +14 -0
- package/dist/commands/form-relate.d.ts.map +1 -0
- package/dist/commands/form-relate.js +140 -0
- package/dist/commands/form-relate.js.map +1 -0
- package/dist/commands/form-serial-mark.d.ts +18 -0
- package/dist/commands/form-serial-mark.d.ts.map +1 -0
- package/dist/commands/form-serial-mark.js +167 -0
- package/dist/commands/form-serial-mark.js.map +1 -0
- package/dist/commands/form-table-view.d.ts +3 -0
- package/dist/commands/form-table-view.d.ts.map +1 -0
- package/dist/commands/form-table-view.js +217 -0
- package/dist/commands/form-table-view.js.map +1 -0
- package/dist/commands/form-validate.d.ts +3 -0
- package/dist/commands/form-validate.d.ts.map +1 -0
- package/dist/commands/form-validate.js +122 -0
- package/dist/commands/form-validate.js.map +1 -0
- package/dist/commands/form-view-permission.d.ts +3 -0
- package/dist/commands/form-view-permission.d.ts.map +1 -0
- package/dist/commands/form-view-permission.js +86 -0
- package/dist/commands/form-view-permission.js.map +1 -0
- package/dist/commands/form-view.d.ts +3 -0
- package/dist/commands/form-view.d.ts.map +1 -0
- package/dist/commands/form-view.js +145 -0
- package/dist/commands/form-view.js.map +1 -0
- package/dist/commands/form.d.ts +3 -0
- package/dist/commands/form.d.ts.map +1 -0
- package/dist/commands/form.js +2467 -0
- package/dist/commands/form.js.map +1 -0
- package/dist/commands/icon.d.ts +3 -0
- package/dist/commands/icon.d.ts.map +1 -0
- package/dist/commands/icon.js +82 -0
- package/dist/commands/icon.js.map +1 -0
- package/dist/commands/matrix.d.ts +3 -0
- package/dist/commands/matrix.d.ts.map +1 -0
- package/dist/commands/matrix.js +587 -0
- package/dist/commands/matrix.js.map +1 -0
- package/dist/commands/menu-permission.d.ts +3 -0
- package/dist/commands/menu-permission.d.ts.map +1 -0
- package/dist/commands/menu-permission.js +188 -0
- package/dist/commands/menu-permission.js.map +1 -0
- package/dist/commands/menu.d.ts +16 -0
- package/dist/commands/menu.d.ts.map +1 -0
- package/dist/commands/menu.js +269 -0
- package/dist/commands/menu.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +345 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/role.d.ts +3 -0
- package/dist/commands/role.d.ts.map +1 -0
- package/dist/commands/role.js +224 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +49 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/workflow-action.d.ts +3 -0
- package/dist/commands/workflow-action.d.ts.map +1 -0
- package/dist/commands/workflow-action.js +1821 -0
- package/dist/commands/workflow-action.js.map +1 -0
- package/dist/commands/workflow-advanced.d.ts +3 -0
- package/dist/commands/workflow-advanced.d.ts.map +1 -0
- package/dist/commands/workflow-advanced.js +290 -0
- package/dist/commands/workflow-advanced.js.map +1 -0
- package/dist/commands/workflow-condition.d.ts +7 -0
- package/dist/commands/workflow-condition.d.ts.map +1 -0
- package/dist/commands/workflow-condition.js +562 -0
- package/dist/commands/workflow-condition.js.map +1 -0
- package/dist/commands/workflow-message.d.ts +3 -0
- package/dist/commands/workflow-message.d.ts.map +1 -0
- package/dist/commands/workflow-message.js +399 -0
- package/dist/commands/workflow-message.js.map +1 -0
- package/dist/commands/workflow-node-overtime.d.ts +3 -0
- package/dist/commands/workflow-node-overtime.d.ts.map +1 -0
- package/dist/commands/workflow-node-overtime.js +150 -0
- package/dist/commands/workflow-node-overtime.js.map +1 -0
- package/dist/commands/workflow-node-reject.d.ts +3 -0
- package/dist/commands/workflow-node-reject.d.ts.map +1 -0
- package/dist/commands/workflow-node-reject.js +115 -0
- package/dist/commands/workflow-node-reject.js.map +1 -0
- package/dist/commands/workflow-node-sign.d.ts +15 -0
- package/dist/commands/workflow-node-sign.d.ts.map +1 -0
- package/dist/commands/workflow-node-sign.js +100 -0
- package/dist/commands/workflow-node-sign.js.map +1 -0
- package/dist/commands/workflow-node-validate.d.ts +16 -0
- package/dist/commands/workflow-node-validate.d.ts.map +1 -0
- package/dist/commands/workflow-node-validate.js +169 -0
- package/dist/commands/workflow-node-validate.js.map +1 -0
- package/dist/commands/workflow-node.d.ts +3 -0
- package/dist/commands/workflow-node.d.ts.map +1 -0
- package/dist/commands/workflow-node.js +347 -0
- package/dist/commands/workflow-node.js.map +1 -0
- package/dist/commands/workflow-numbering.d.ts +17 -0
- package/dist/commands/workflow-numbering.d.ts.map +1 -0
- package/dist/commands/workflow-numbering.js +191 -0
- package/dist/commands/workflow-numbering.js.map +1 -0
- package/dist/commands/workflow-plan-range.d.ts +3 -0
- package/dist/commands/workflow-plan-range.d.ts.map +1 -0
- package/dist/commands/workflow-plan-range.js +116 -0
- package/dist/commands/workflow-plan-range.js.map +1 -0
- package/dist/commands/workflow-setting.d.ts +3 -0
- package/dist/commands/workflow-setting.d.ts.map +1 -0
- package/dist/commands/workflow-setting.js +440 -0
- package/dist/commands/workflow-setting.js.map +1 -0
- package/dist/commands/workflow-title.d.ts +14 -0
- package/dist/commands/workflow-title.d.ts.map +1 -0
- package/dist/commands/workflow-title.js +106 -0
- package/dist/commands/workflow-title.js.map +1 -0
- package/dist/commands/workflow.d.ts +26 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +2359 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/core/auth.d.ts +36 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +351 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +27 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +100 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/crypto.d.ts +11 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +102 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/edition.d.ts +4 -0
- package/dist/core/edition.d.ts.map +1 -0
- package/dist/core/edition.js +19 -0
- package/dist/core/edition.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/services/action-detail.d.ts +112 -0
- package/dist/services/action-detail.d.ts.map +1 -0
- package/dist/services/action-detail.js +443 -0
- package/dist/services/action-detail.js.map +1 -0
- package/dist/services/condition-rules.d.ts +45 -0
- package/dist/services/condition-rules.d.ts.map +1 -0
- package/dist/services/condition-rules.js +207 -0
- package/dist/services/condition-rules.js.map +1 -0
- package/dist/services/form-create.d.ts +102 -0
- package/dist/services/form-create.d.ts.map +1 -0
- package/dist/services/form-create.js +835 -0
- package/dist/services/form-create.js.map +1 -0
- package/dist/services/form-ebuilder-filter.d.ts +60 -0
- package/dist/services/form-ebuilder-filter.d.ts.map +1 -0
- package/dist/services/form-ebuilder-filter.js +562 -0
- package/dist/services/form-ebuilder-filter.js.map +1 -0
- package/dist/services/form-table-view.d.ts +117 -0
- package/dist/services/form-table-view.d.ts.map +1 -0
- package/dist/services/form-table-view.js +882 -0
- package/dist/services/form-table-view.js.map +1 -0
- package/dist/services/form-view-permission.d.ts +30 -0
- package/dist/services/form-view-permission.d.ts.map +1 -0
- package/dist/services/form-view-permission.js +208 -0
- package/dist/services/form-view-permission.js.map +1 -0
- package/dist/services/form-view.d.ts +41 -0
- package/dist/services/form-view.d.ts.map +1 -0
- package/dist/services/form-view.js +334 -0
- package/dist/services/form-view.js.map +1 -0
- package/dist/services/formula-detail.d.ts +31 -0
- package/dist/services/formula-detail.d.ts.map +1 -0
- package/dist/services/formula-detail.js +66 -0
- package/dist/services/formula-detail.js.map +1 -0
- package/dist/services/rich-types.d.ts +35 -0
- package/dist/services/rich-types.d.ts.map +1 -0
- package/dist/services/rich-types.js +105 -0
- package/dist/services/rich-types.js.map +1 -0
- package/dist/services/workflow-layout.d.ts +118 -0
- package/dist/services/workflow-layout.d.ts.map +1 -0
- package/dist/services/workflow-layout.js +279 -0
- package/dist/services/workflow-layout.js.map +1 -0
- package/dist/services/workflow-operator.d.ts +36 -0
- package/dist/services/workflow-operator.d.ts.map +1 -0
- package/dist/services/workflow-operator.js +65 -0
- package/dist/services/workflow-operator.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/column-name.d.ts +13 -0
- package/dist/utils/column-name.d.ts.map +1 -0
- package/dist/utils/column-name.js +45 -0
- package/dist/utils/column-name.js.map +1 -0
- package/ecodecmd/package.json +27 -0
- package/ecodecmd/src/build.js +709 -0
- package/ecodecmd/src/compile.js +81 -0
- package/ecodecmd/src/index.js +48 -0
- package/ecodecmd/src/init.js +73 -0
- package/ecodecmd/src/lib/@babel/plugin-proposal-object-rest-spread@7.5.5/index.js +1795 -0
- package/ecodecmd/src/lib/@babel/plugin-proposal-optional-chaining@7.6.0/index.js +135 -0
- package/ecodecmd/src/lib/@babel/preset-env-standalone@7.5.5/babel-preset-env.js +76043 -0
- package/ecodecmd/src/lib/@babel/standalone@7.5.5/babel.js +90802 -0
- package/ecodecmd/src/lib/exec.js +77 -0
- package/ecodecmd/src/loaddep.js +154 -0
- package/ecodecmd/src/util/compress.js +58 -0
- package/ecodecmd/src/util/crypto-util.js +19 -0
- package/ecodecmd/src/util/index.js +153 -0
- package/ecodecmd/src/util/snowflake.js +144 -0
- package/package.json +43 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const Babel = require('./@babel/standalone@7.5.5/babel');
|
|
5
|
+
|
|
6
|
+
// const args = process.argv.slice(2);
|
|
7
|
+
// console.info(args);
|
|
8
|
+
// if (args.length === 0) {
|
|
9
|
+
// console.error("接受参数异常");
|
|
10
|
+
// return;
|
|
11
|
+
// }
|
|
12
|
+
// const filepath = args[0];
|
|
13
|
+
|
|
14
|
+
// // 读取code中的代码
|
|
15
|
+
// const code = fs.readFileSync(filepath);
|
|
16
|
+
// try {
|
|
17
|
+
// const transformObj = Babel.transform(code, {
|
|
18
|
+
// presets: ['es2015', 'react', ['stage-2', {decoratorsLegacy: true, loose: true}]],
|
|
19
|
+
// filename: filepath,
|
|
20
|
+
// plugins: ['proposal-object-rest-spread'],
|
|
21
|
+
// sourceMap: false,
|
|
22
|
+
// sourceType: 'module',
|
|
23
|
+
// wrapPluginVisitorMethod: undefined
|
|
24
|
+
// });
|
|
25
|
+
// console.info(transformObj.code);
|
|
26
|
+
// } catch (err) {
|
|
27
|
+
// console.error("编译异常;", err.message);
|
|
28
|
+
// }
|
|
29
|
+
// console.info(transformObj);
|
|
30
|
+
/*
|
|
31
|
+
const compileCode = transformObj.code;
|
|
32
|
+
|
|
33
|
+
fs.writeFileSync(path.resolve(__dirname, '../ecode-app/compile.js'), compileCode);
|
|
34
|
+
|
|
35
|
+
console.info("compile success size ["
|
|
36
|
+
+ compileCode.length + "] at " + new Date());
|
|
37
|
+
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
module.exports = {
|
|
41
|
+
compileJs: (code, filepath) => {
|
|
42
|
+
try {
|
|
43
|
+
const transformObj = Babel.transform(code, {
|
|
44
|
+
presets: ['es2015', 'react', ['stage-2', {decoratorsLegacy: true, loose: true}]],
|
|
45
|
+
filename: filepath,
|
|
46
|
+
plugins: ['proposal-object-rest-spread'],
|
|
47
|
+
sourceMap: false,
|
|
48
|
+
sourceType: 'module',
|
|
49
|
+
wrapPluginVisitorMethod: undefined
|
|
50
|
+
});
|
|
51
|
+
// console.info(transformObj);
|
|
52
|
+
// console.info(transformObj.code);
|
|
53
|
+
return transformObj.code;
|
|
54
|
+
} catch (err) {
|
|
55
|
+
console.error("编译异常;", err.message);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
compileJsE10: (code, filepath) => { // 针对E10的编译处理,主要增加了部分ts、可选链 语法支持
|
|
60
|
+
try {
|
|
61
|
+
const transformObj = Babel.transform(code, {
|
|
62
|
+
presets: ['es2015', 'react', ['stage-2', {decoratorsLegacy: true, loose: true}]],
|
|
63
|
+
filename: filepath,
|
|
64
|
+
plugins: ['proposal-object-rest-spread', 'proposal-optional-chaining'],
|
|
65
|
+
sourceMap: false,
|
|
66
|
+
sourceType: 'module',
|
|
67
|
+
wrapPluginVisitorMethod: undefined
|
|
68
|
+
});
|
|
69
|
+
// console.info(transformObj);
|
|
70
|
+
// console.info(transformObj.code);
|
|
71
|
+
return transformObj.code;
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.error("编译异常;", err.message);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const { mkdirs } = require('./util/index');
|
|
4
|
+
const { calcFileMd5 } = require('./util/crypto-util');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const os = require('os');
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const axios = require('axios');
|
|
9
|
+
const request = require('request')
|
|
10
|
+
|
|
11
|
+
const cacheJarDir = path.join(os.homedir(), '.ecode_ide_plugin/cache');
|
|
12
|
+
|
|
13
|
+
const download = (url, filepath) => {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const stream = fs.createWriteStream(filepath);
|
|
16
|
+
// 添加useragent
|
|
17
|
+
const pipe = request(url, { headers: { 'User-Agent': 'ecodecmd' } }).pipe(stream);
|
|
18
|
+
pipe.on('close', (err) => {
|
|
19
|
+
if (err) {
|
|
20
|
+
reject(err);
|
|
21
|
+
} else {
|
|
22
|
+
resolve('');
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 拉取jar包
|
|
30
|
+
*/
|
|
31
|
+
const handleJar = async (serviceUrl, jarInfo) => {
|
|
32
|
+
|
|
33
|
+
console.info(`拉取 jar包: ${jarInfo.jarName}`);
|
|
34
|
+
const targetPath = path.join(cacheJarDir, jarInfo.md5);
|
|
35
|
+
if (!fs.existsSync(targetPath)) mkdirs(targetPath);
|
|
36
|
+
else {
|
|
37
|
+
// 判断jar包是否已经存在
|
|
38
|
+
if (fs.existsSync(path.join(targetPath, jarInfo.jarName))) {
|
|
39
|
+
// 校验文件是否正常
|
|
40
|
+
const md5 = calcFileMd5(path.join(targetPath, jarInfo.jarName));
|
|
41
|
+
if (md5 != jarInfo.md5) {
|
|
42
|
+
console.info(`jar包: ${jarInfo.jarName} 发生变更`);
|
|
43
|
+
} else {
|
|
44
|
+
// console.info(`jar包: ${jarInfo.jarName} 已存在`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const url = `${serviceUrl}/papi/inner/ide/getJar?jarPath=${jarInfo.path}`;
|
|
50
|
+
console.info('load url => ', url);
|
|
51
|
+
// 拷贝文件到指定缓存目录下
|
|
52
|
+
await download(url, path.join(targetPath, jarInfo.jarName));
|
|
53
|
+
console.info(`============> jar包: ${jarInfo.jarName} 拉取成功,dir: ${targetPath}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const buildGradleStr = `
|
|
57
|
+
plugins {
|
|
58
|
+
id 'java'
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
group 'com.weaver.seconddev'
|
|
62
|
+
version '1.0.0'
|
|
63
|
+
description 'ecode 二开demo'
|
|
64
|
+
|
|
65
|
+
java.targetCompatibility = JavaVersion.VERSION_1_8
|
|
66
|
+
|
|
67
|
+
compileJava {
|
|
68
|
+
options.encoding = 'UTF-8'
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
jar {
|
|
72
|
+
manifest {
|
|
73
|
+
attributes 'weaver-ecode-seconddev-id': rootProject.group + '-' + rootProject.name,
|
|
74
|
+
'Implementation-Version': version,
|
|
75
|
+
'Implementation-Vendor-Id': rootProject.group,
|
|
76
|
+
'Implementation-Title': rootProject.name
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
repositories {
|
|
81
|
+
maven { url 'https://maven.aliyun.com/repository/public/' }
|
|
82
|
+
mavenLocal()
|
|
83
|
+
mavenCentral()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
dependencies {
|
|
88
|
+
|
|
89
|
+
implementation group: 'junit', name: 'junit', version: '4.12'
|
|
90
|
+
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
|
|
91
|
+
annotationProcessor 'org.projectlombok:lombok:1.18.20'
|
|
92
|
+
implementation group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
|
|
93
|
+
|
|
94
|
+
// 添加二开服务拉取的清单依赖
|
|
95
|
+
def includeType = ['**/*.jar', '**/*.class']
|
|
96
|
+
compile fileTree(dir: project.projectDir.getPath() + '/secDevLib', includes: includeType)
|
|
97
|
+
// 项目二开自定义依赖
|
|
98
|
+
// implementation fileTree(dir: project.projectDir.getPath() + "/devLib", includes: includeType)
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
`
|
|
104
|
+
|
|
105
|
+
const settingGradleStr = `
|
|
106
|
+
rootProject.name = 'seconddev-demo'
|
|
107
|
+
`
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* 生成项目依赖目录结构, 即 生成 secDevLib 目录,settings.gradle文件,build.gradle文件
|
|
111
|
+
* @param {*} projectPath 项目路径
|
|
112
|
+
* @param {*} jarData jarlist
|
|
113
|
+
*/
|
|
114
|
+
const createProjectItem = async (projectPath, jarData) => {
|
|
115
|
+
// 处理依赖
|
|
116
|
+
const secDevLibDir = path.join(projectPath, 'secDevLib');
|
|
117
|
+
console.info('创建二开依赖目录 => ', secDevLibDir);
|
|
118
|
+
if (!fs.existsSync(secDevLibDir)) mkdirs(secDevLibDir);
|
|
119
|
+
for (let i = 0; i < jarData.length; i++) {
|
|
120
|
+
if (fs.existsSync(path.join(secDevLibDir, jarData[i].jarName))) {
|
|
121
|
+
fs.rmSync(path.join(secDevLibDir, jarData[i].jarName));
|
|
122
|
+
}
|
|
123
|
+
fs.symlinkSync(path.join(cacheJarDir, jarData[i].md5, jarData[i].jarName), path.join(secDevLibDir, jarData[i].jarName));
|
|
124
|
+
}
|
|
125
|
+
console.info('创建gradle项目信息');
|
|
126
|
+
// 处理gradle文件
|
|
127
|
+
fs.writeFileSync(path.join(projectPath, 'build.gradle'), buildGradleStr);
|
|
128
|
+
fs.writeFileSync(path.join(projectPath, 'settings.gradle'), settingGradleStr);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* e10 依赖拉取
|
|
133
|
+
*/
|
|
134
|
+
const loadJar = async (serviceUrl, projectPath) => {
|
|
135
|
+
const startTime = new Date().getTime();
|
|
136
|
+
console.info('============> 开始处理')
|
|
137
|
+
const listRes = await axios({url: `${serviceUrl}/papi/inner/ide/dependencyList`, method: 'get'})
|
|
138
|
+
if (listRes.status === 200 && listRes.data.code === 200) {
|
|
139
|
+
const { data = [] } = listRes.data;
|
|
140
|
+
for (let i = 0; i < data.length; i++) {
|
|
141
|
+
await handleJar(serviceUrl, data[i]);
|
|
142
|
+
}
|
|
143
|
+
createProjectItem(projectPath, data);
|
|
144
|
+
console.info(`============> 处理结束,jar包共计 ${data.length} 个, 耗时 ${new Date().getTime() - startTime} (ms)`);
|
|
145
|
+
} else {
|
|
146
|
+
console.info('dependencyList 接口异常:', listRes.status, listRes.data);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
module.exports = function(serviceUrl, projectPath) {
|
|
151
|
+
|
|
152
|
+
return loadJar(serviceUrl, projectPath);
|
|
153
|
+
|
|
154
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const archiver = require('archiver');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const { parseFileObj } = require('.');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
function zip(source_path, target_path) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
|
|
11
|
+
const output = fs.createWriteStream(target_path);
|
|
12
|
+
|
|
13
|
+
//设置压缩格式为zip
|
|
14
|
+
const archive = archiver('zip', {
|
|
15
|
+
zlib: { level: 9 } // Sets the compression level.
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
output.on('close', function () {
|
|
19
|
+
resolve(archive.pointer()); // 返回字节数
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
archive.on('error', function (err) {
|
|
24
|
+
reject(err);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
archive.pipe(output);
|
|
28
|
+
console.info(source_path, target_path);
|
|
29
|
+
archive.directory(source_path, false);
|
|
30
|
+
|
|
31
|
+
// // 添加压缩的实体
|
|
32
|
+
// const pathArr = [];
|
|
33
|
+
// pathArr.push(source_path);
|
|
34
|
+
|
|
35
|
+
// while (pathArr.length > 0) {
|
|
36
|
+
// const tmp_path = pathArr.pop();
|
|
37
|
+
// const fileObj = parseFileObj(source_path);
|
|
38
|
+
// if (fileObj.isFile) {
|
|
39
|
+
// archive.append()
|
|
40
|
+
// }
|
|
41
|
+
// }
|
|
42
|
+
|
|
43
|
+
archive.finalize();
|
|
44
|
+
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 压缩相关工具类
|
|
50
|
+
*/
|
|
51
|
+
module.exports = {
|
|
52
|
+
zip
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
// zip(path.join(__dirname, '../../ecode-apps/cs/.temp'), path.join(__dirname, '../../ecode-apps/cs/.target/1.zip')).then(res => {
|
|
57
|
+
// console.info(res);
|
|
58
|
+
// });
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const crypto = require('crypto');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
|
|
7
|
+
function calcFileMd5(filepath) {
|
|
8
|
+
const hash = crypto.createHash('md5');
|
|
9
|
+
const buffer = fs.readFileSync(filepath);
|
|
10
|
+
hash.update(buffer, 'utf8');
|
|
11
|
+
const md5 = hash.digest('hex');
|
|
12
|
+
return md5;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
calcFileMd5
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const readline = require('readline');
|
|
6
|
+
/**
|
|
7
|
+
* 将命令路径解析成绝对路径
|
|
8
|
+
* @param {*} path_name
|
|
9
|
+
*/
|
|
10
|
+
const parsePath = (path_name) => {
|
|
11
|
+
if (path.isAbsolute(path_name)) {
|
|
12
|
+
return path_name;
|
|
13
|
+
} else {
|
|
14
|
+
return path.join(process.cwd(), path_name);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 检查是否为一个文件, 不存在或为目录均返回false
|
|
20
|
+
* @param {*} path_name
|
|
21
|
+
*/
|
|
22
|
+
const checkIsFile = (path_name) => {
|
|
23
|
+
if (fs.existsSync(path_name)) {
|
|
24
|
+
if (fs.statSync(path_name).isFile()) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 检查是否为一个目录, 不存在或为文件均返回false
|
|
33
|
+
* @param {*} path_name
|
|
34
|
+
*/
|
|
35
|
+
const checkIsDir = (path_name) => {
|
|
36
|
+
if (fs.existsSync(path_name)) {
|
|
37
|
+
if (fs.statSync(path_name).isDirectory()) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const mkdirs = (path_name, over_flag) => {
|
|
45
|
+
if (fs.existsSync(path_name)) {
|
|
46
|
+
if (over_flag) {
|
|
47
|
+
fs.removeSync(path_name);
|
|
48
|
+
fs.mkdirsSync(path_name);
|
|
49
|
+
return true;
|
|
50
|
+
} else {
|
|
51
|
+
console.error(`路径已经存在 ${path_name}`)
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
fs.mkdirsSync(path_name);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 解析路径到fileObj对象
|
|
62
|
+
* @param {*} file_path
|
|
63
|
+
*/
|
|
64
|
+
const parseFileObj = (file_path) => {
|
|
65
|
+
const fileObj = {
|
|
66
|
+
path: file_path,
|
|
67
|
+
name: '',
|
|
68
|
+
filename: '',
|
|
69
|
+
content: '',
|
|
70
|
+
isFile: false,
|
|
71
|
+
exists: false,
|
|
72
|
+
isDir: false,
|
|
73
|
+
parentDir: '',
|
|
74
|
+
ext: ''
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
if (fs.existsSync(file_path)) {
|
|
78
|
+
fileObj.exists = true;
|
|
79
|
+
fileObj.isFile = checkIsFile(file_path);
|
|
80
|
+
fileObj.isDir = checkIsDir(file_path);
|
|
81
|
+
const parseObj = path.parse(file_path);
|
|
82
|
+
// 如果是文件夹则name 获取会过滤后缀
|
|
83
|
+
if (fileObj.isDir) {
|
|
84
|
+
fileObj.name = parseObj.name + parseObj.ext;
|
|
85
|
+
} else {
|
|
86
|
+
fileObj.name = parseObj.name;
|
|
87
|
+
}
|
|
88
|
+
fileObj.parentDir = parseObj.dir;
|
|
89
|
+
fileObj.ext = parseObj.ext;
|
|
90
|
+
fileObj.filename = fileObj.name + fileObj.ext;
|
|
91
|
+
if (fileObj.isFile) {
|
|
92
|
+
fileObj.content = fs.readFileSync(file_path);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return fileObj;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const uuid = () => { // 生成uuid
|
|
100
|
+
const s = [];
|
|
101
|
+
const hexDigits = "0123456789abcdef";
|
|
102
|
+
for (let i = 0; i < 36; i++) {
|
|
103
|
+
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
|
|
104
|
+
}
|
|
105
|
+
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
|
|
106
|
+
s[19] = hexDigits.substring((parseInt(s[19]) & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
|
|
107
|
+
s[8] = s[13] = s[18] = s[23] = "";
|
|
108
|
+
|
|
109
|
+
return s.join("");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const readLine = (title) => {
|
|
113
|
+
return new Promise((resolve) => {
|
|
114
|
+
const rl = readline.createInterface({
|
|
115
|
+
prompt: title,
|
|
116
|
+
output: process.stdout,
|
|
117
|
+
input: process.stdin
|
|
118
|
+
})
|
|
119
|
+
rl.prompt();
|
|
120
|
+
rl.on('line', str => {
|
|
121
|
+
resolve(str);
|
|
122
|
+
rl.close();
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
const delDir = (path) => {
|
|
129
|
+
let files = [];
|
|
130
|
+
if(fs.existsSync(path)){
|
|
131
|
+
files = fs.readdirSync(path);
|
|
132
|
+
files.forEach((file, index) => {
|
|
133
|
+
let curPath = path + "/" + file;
|
|
134
|
+
if(fs.statSync(curPath).isDirectory()){
|
|
135
|
+
delDir(curPath); //递归删除文件夹
|
|
136
|
+
} else {
|
|
137
|
+
fs.unlinkSync(curPath); //删除文件
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
fs.rmdirSync(path); // 删除文件夹自身
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = {
|
|
145
|
+
parsePath,
|
|
146
|
+
checkIsFile,
|
|
147
|
+
checkIsDir,
|
|
148
|
+
mkdirs,
|
|
149
|
+
parseFileObj,
|
|
150
|
+
uuid,
|
|
151
|
+
readLine,
|
|
152
|
+
delDir
|
|
153
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
|
|
2
|
+
class Snowflake {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
options = options || {};
|
|
5
|
+
this.seq = 0;
|
|
6
|
+
//机器id或任何随机数。如果您是在分布式系统中生成id,强烈建议您提供一个适合不同机器的mid。
|
|
7
|
+
this.mid = (options.mid || 1) % 1023;
|
|
8
|
+
//这是一个时间偏移量,它将从当前时间中减去以获得id的前42位。这将有助于生成更小的id。
|
|
9
|
+
this.offset = options.offset || (new Date().getFullYear() - 1970) * 31536000 * 1000;
|
|
10
|
+
this.lastTime = 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
generate() {
|
|
14
|
+
const time = Date.now();
|
|
15
|
+
const bTime = (time - this.offset).toString(2);
|
|
16
|
+
// get the sequence number
|
|
17
|
+
if (this.lastTime == time) {
|
|
18
|
+
this.seq++;
|
|
19
|
+
if (this.seq > 4095) {
|
|
20
|
+
this.seq = 0;
|
|
21
|
+
// make system wait till time is been shifted by one millisecond
|
|
22
|
+
while (Date.now() <= time) {}
|
|
23
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
this.seq = 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
this.lastTime = time;
|
|
29
|
+
|
|
30
|
+
let bSeq = this.seq.toString(2);
|
|
31
|
+
let bMid = this.mid.toString(2);
|
|
32
|
+
|
|
33
|
+
// create sequence binary bit
|
|
34
|
+
while (bSeq.length < 12) bSeq = '0' + bSeq;
|
|
35
|
+
|
|
36
|
+
while (bMid.length < 10) bMid = '0' + bMid;
|
|
37
|
+
|
|
38
|
+
const bid = bTime + bMid + bSeq;
|
|
39
|
+
let id = '';
|
|
40
|
+
for (let i = bid.length; i > 0; i -= 4) {
|
|
41
|
+
id = parseInt(bid.substring(i - 4, i), 2).toString(16) + id;
|
|
42
|
+
}
|
|
43
|
+
return this.hexToDec(id);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
add(x, y, base) {
|
|
47
|
+
let z = [];
|
|
48
|
+
let n = Math.max(x.length, y.length);
|
|
49
|
+
let carry = 0;
|
|
50
|
+
let i = 0;
|
|
51
|
+
while (i < n || carry) {
|
|
52
|
+
let xi = i < x.length ? x[i] : 0;
|
|
53
|
+
let yi = i < y.length ? y[i] : 0;
|
|
54
|
+
let zi = carry + xi + yi;
|
|
55
|
+
z.push(zi % base);
|
|
56
|
+
carry = Math.floor(zi / base);
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
return z;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 乘以数字
|
|
64
|
+
* @param {*} num
|
|
65
|
+
* @param {*} x
|
|
66
|
+
* @param {*} base
|
|
67
|
+
*/
|
|
68
|
+
multiplyByNumber(num, x, base) {
|
|
69
|
+
if (num < 0) return null;
|
|
70
|
+
if (num == 0) return [];
|
|
71
|
+
|
|
72
|
+
let result = [];
|
|
73
|
+
let power = x;
|
|
74
|
+
while (true) {
|
|
75
|
+
if (num & 1) {
|
|
76
|
+
result = this.add(result, power, base);
|
|
77
|
+
}
|
|
78
|
+
num = num >> 1;
|
|
79
|
+
if (num === 0) break;
|
|
80
|
+
power = this.add(power, power, base);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 解析为数组
|
|
88
|
+
* @param {*} str
|
|
89
|
+
* @param {*} base
|
|
90
|
+
*/
|
|
91
|
+
parseToDigitsArray(str, base) {
|
|
92
|
+
let digits = str.split('');
|
|
93
|
+
let ary = [];
|
|
94
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
95
|
+
let n = parseInt(digits[i], base);
|
|
96
|
+
if (isNaN(n)) return null;
|
|
97
|
+
ary.push(n);
|
|
98
|
+
}
|
|
99
|
+
return ary;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* 转换
|
|
104
|
+
* @param {*} str
|
|
105
|
+
* @param {*} fromBase
|
|
106
|
+
* @param {*} toBase
|
|
107
|
+
*/
|
|
108
|
+
convertBase(str, fromBase, toBase, legnth) {
|
|
109
|
+
let digits = this.parseToDigitsArray(str, fromBase);
|
|
110
|
+
if (digits === null) return null;
|
|
111
|
+
let outArray = [];
|
|
112
|
+
let power = [1];
|
|
113
|
+
for (let i = 0; i < digits.length; i++) {
|
|
114
|
+
// inletiant: at this point, fromBase^i = power
|
|
115
|
+
if (digits[i]) {
|
|
116
|
+
outArray = this.add(
|
|
117
|
+
outArray,
|
|
118
|
+
this.multiplyByNumber(digits[i], power, toBase),
|
|
119
|
+
toBase
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
power = this.multiplyByNumber(fromBase, power, toBase);
|
|
123
|
+
}
|
|
124
|
+
let out = '';
|
|
125
|
+
//设置了这里-3会返回16位的字符,如果是设置为outArray.length - 1 会返回18位的字符
|
|
126
|
+
for (let i = outArray.length - 3; i >= 0; i--) {
|
|
127
|
+
out += outArray[i].toString(toBase);
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 16进制=> 10进制
|
|
134
|
+
* @param {*} hexStr
|
|
135
|
+
*/
|
|
136
|
+
hexToDec(hexStr) {
|
|
137
|
+
if (hexStr.substring(0, 2) === '0x') hexStr = hexStr.substring(2);
|
|
138
|
+
hexStr = hexStr.toLowerCase();
|
|
139
|
+
return this.convertBase(hexStr, 16, 10);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const obj = new Snowflake();
|
|
144
|
+
module.exports = obj;
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "weaver-e10-builder",
|
|
3
|
+
"version": "1.0.2-beta",
|
|
4
|
+
"description": "Eteams/Ebuilder CLI — 泛微 OA 命令行工具",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"ecodecmd"
|
|
9
|
+
],
|
|
10
|
+
"bin": {
|
|
11
|
+
"e10-cli": "./dist/index.js",
|
|
12
|
+
"ecodecmd": "./ecodecmd/src/index.js"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"dev": "tsx src/index.ts",
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"pack:all": "node scripts/pack-editions.mjs",
|
|
18
|
+
"start": "node dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
22
|
+
"archiver": "^5.3.1",
|
|
23
|
+
"axios": "^1.3.4",
|
|
24
|
+
"chalk": "^5.0.1",
|
|
25
|
+
"chokidar": "^3.5.3",
|
|
26
|
+
"commander": "^13.0.0",
|
|
27
|
+
"debug": "^4.3.4",
|
|
28
|
+
"fs-extra": "^10.1.0",
|
|
29
|
+
"js-base64": "^3.7.2",
|
|
30
|
+
"mammoth": "^1.12.0",
|
|
31
|
+
"minimist": "^1.2.6",
|
|
32
|
+
"node-html-markdown": "^2.0.0",
|
|
33
|
+
"request": "^2.88.2",
|
|
34
|
+
"sql.js": "^1.11.0",
|
|
35
|
+
"tiny-pinyin": "^1.3.2"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^22.0.0",
|
|
39
|
+
"@types/sql.js": "^1.4.11",
|
|
40
|
+
"tsx": "^4.19.0",
|
|
41
|
+
"typescript": "^5.6.0"
|
|
42
|
+
}
|
|
43
|
+
}
|