@giteeteam/apps-cli 0.3.2 → 0.4.1
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/dist/index.js +101 -110
- package/package.json +11 -6
package/dist/index.js
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
require('dotenv/config');
|
|
5
5
|
var commander = require('commander');
|
|
6
|
-
var appsBundler = require('@giteeteam/apps-bundler');
|
|
7
6
|
var fse = require('fs-extra');
|
|
8
7
|
var path = require('path');
|
|
9
8
|
var archiver = require('archiver');
|
|
9
|
+
var rollup = require('rollup');
|
|
10
|
+
var fs = require('fs');
|
|
11
|
+
var esbuild$1 = require('esbuild');
|
|
12
|
+
var pluginNodeResolve = require('@rollup/plugin-node-resolve');
|
|
13
|
+
var commonjs = require('@rollup/plugin-commonjs');
|
|
10
14
|
var ora = require('ora');
|
|
11
|
-
var
|
|
15
|
+
var appsManifest = require('@giteeteam/apps-manifest');
|
|
12
16
|
var inquirer = require('inquirer');
|
|
13
17
|
var simpleGit = require('simple-git');
|
|
14
18
|
var chalk = require('chalk');
|
|
@@ -22,6 +26,8 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
22
26
|
var fse__default = /*#__PURE__*/_interopDefaultLegacy(fse);
|
|
23
27
|
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
24
28
|
var archiver__default = /*#__PURE__*/_interopDefaultLegacy(archiver);
|
|
29
|
+
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
30
|
+
var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
|
|
25
31
|
var ora__default = /*#__PURE__*/_interopDefaultLegacy(ora);
|
|
26
32
|
var inquirer__default = /*#__PURE__*/_interopDefaultLegacy(inquirer);
|
|
27
33
|
var simpleGit__default = /*#__PURE__*/_interopDefaultLegacy(simpleGit);
|
|
@@ -30,7 +36,7 @@ var execa__default = /*#__PURE__*/_interopDefaultLegacy(execa);
|
|
|
30
36
|
var child_process__default = /*#__PURE__*/_interopDefaultLegacy(child_process);
|
|
31
37
|
var chokidar__default = /*#__PURE__*/_interopDefaultLegacy(chokidar);
|
|
32
38
|
|
|
33
|
-
var version = "0.
|
|
39
|
+
var version = "0.4.1";
|
|
34
40
|
|
|
35
41
|
const packageApp = async ({ outputDir, manifest, copyFiles }) => {
|
|
36
42
|
const { resources } = manifest;
|
|
@@ -89,11 +95,98 @@ const archiveApp = async (archiveDir, pkgName) => {
|
|
|
89
95
|
});
|
|
90
96
|
};
|
|
91
97
|
|
|
98
|
+
const defaultOptions = {
|
|
99
|
+
treeShaking: true,
|
|
100
|
+
format: 'esm',
|
|
101
|
+
loader: 'tsx',
|
|
102
|
+
};
|
|
103
|
+
function esbuild(options) {
|
|
104
|
+
options = { ...defaultOptions, ...options };
|
|
105
|
+
return {
|
|
106
|
+
name: 'esbuild',
|
|
107
|
+
resolveId(source, importer, opts) {
|
|
108
|
+
// console.log('resolveId:');
|
|
109
|
+
// console.dir({ source, importer, opts }, { depth: null });
|
|
110
|
+
if (!importer || ['.ts', '.tsx', '.js', '.jsx'].some(ext => source.endsWith(ext))) {
|
|
111
|
+
return source;
|
|
112
|
+
}
|
|
113
|
+
const dirPath = path.dirname(importer);
|
|
114
|
+
let path$1;
|
|
115
|
+
if (fs.existsSync((path$1 = path.resolve(dirPath, source, 'index.ts')))) {
|
|
116
|
+
return path$1;
|
|
117
|
+
}
|
|
118
|
+
else if (fs.existsSync((path$1 = path.resolve(dirPath, source, 'index.tsx')))) {
|
|
119
|
+
return path$1;
|
|
120
|
+
}
|
|
121
|
+
else if (fs.existsSync((path$1 = path.resolve(dirPath, source + '.ts')))) {
|
|
122
|
+
return path$1;
|
|
123
|
+
}
|
|
124
|
+
else if (fs.existsSync((path$1 = path.resolve(dirPath, source + '.tsx')))) {
|
|
125
|
+
return path$1;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.error({ source, importer, options: opts });
|
|
129
|
+
path$1 = path.relative('.', path.resolve(importer, source));
|
|
130
|
+
throw new Error(`ENOENT: ${path$1.replace(/\\/g, '/')}`);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
async transform(src, id) {
|
|
134
|
+
options.sourcefile = id;
|
|
135
|
+
const { code, map } = await esbuild$1.transform(src, options);
|
|
136
|
+
if (!map)
|
|
137
|
+
return code;
|
|
138
|
+
return { code, map };
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
var MODE;
|
|
144
|
+
(function (MODE) {
|
|
145
|
+
MODE["DEV"] = "development";
|
|
146
|
+
MODE["PROD"] = "production";
|
|
147
|
+
})(MODE || (MODE = {}));
|
|
148
|
+
function getRollupOptions(input, outputFile, mode = MODE.DEV) {
|
|
149
|
+
const plugins = [pluginNodeResolve.nodeResolve(), commonjs__default["default"]()];
|
|
150
|
+
plugins.push(esbuild({
|
|
151
|
+
sourcemap: mode === MODE.DEV,
|
|
152
|
+
minify: mode !== MODE.DEV,
|
|
153
|
+
target: 'es2018',
|
|
154
|
+
jsx: 'transform',
|
|
155
|
+
jsxFactory: 'AppsUI.createElement',
|
|
156
|
+
jsxFragment: 'AppsUI.Fragment',
|
|
157
|
+
}));
|
|
158
|
+
const inputOptions = {
|
|
159
|
+
input,
|
|
160
|
+
plugins,
|
|
161
|
+
};
|
|
162
|
+
const outputOptions = {
|
|
163
|
+
file: outputFile,
|
|
164
|
+
format: 'es',
|
|
165
|
+
sourcemap: mode === MODE.DEV,
|
|
166
|
+
};
|
|
167
|
+
return { inputOptions, outputOptions };
|
|
168
|
+
}
|
|
169
|
+
async function bundle(opts) {
|
|
170
|
+
const { fileName, inputDir, outputDir, mode = MODE.DEV } = opts;
|
|
171
|
+
const input = path__default["default"].join(inputDir, `${fileName}.ts`);
|
|
172
|
+
try {
|
|
173
|
+
await fs__default["default"].promises.access(input);
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
console.error(`${input} is not exist`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const outputFile = path__default["default"].join(outputDir, `${fileName}.js`);
|
|
180
|
+
const { inputOptions, outputOptions } = getRollupOptions(input, outputFile, mode);
|
|
181
|
+
const build = await rollup.rollup(inputOptions);
|
|
182
|
+
await build.write(outputOptions);
|
|
183
|
+
}
|
|
184
|
+
|
|
92
185
|
const bundleApp = async (opts) => {
|
|
93
186
|
const { manifest, mode, outputDir, inputDir } = opts;
|
|
94
187
|
const functionFiles = manifest.getFunctionFiles();
|
|
95
188
|
const bundlePromise = functionFiles.map(async (fileName) => {
|
|
96
|
-
await
|
|
189
|
+
await bundle({
|
|
97
190
|
inputDir,
|
|
98
191
|
fileName,
|
|
99
192
|
outputDir,
|
|
@@ -116,112 +209,10 @@ const execActionWithSpinner = async (message, action) => {
|
|
|
116
209
|
spinner.succeed(message.succeed);
|
|
117
210
|
};
|
|
118
211
|
|
|
119
|
-
class Manifest {
|
|
120
|
-
constructor(manifestString) {
|
|
121
|
-
this.manifest = yaml.parse(manifestString);
|
|
122
|
-
this.manifestString = manifestString;
|
|
123
|
-
}
|
|
124
|
-
get resources() {
|
|
125
|
-
return this.manifest.resources;
|
|
126
|
-
}
|
|
127
|
-
get app() {
|
|
128
|
-
return this.manifest.app;
|
|
129
|
-
}
|
|
130
|
-
get tables() {
|
|
131
|
-
return this.manifest.tables;
|
|
132
|
-
}
|
|
133
|
-
getManifest() {
|
|
134
|
-
return this.manifest;
|
|
135
|
-
}
|
|
136
|
-
getManifestString() {
|
|
137
|
-
return this.manifestString;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* 获取所有自定义事项类型
|
|
141
|
-
*/
|
|
142
|
-
getCustomItemType() {
|
|
143
|
-
const { modules } = this.manifest;
|
|
144
|
-
return modules.customItemType || [];
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* 获取所有自定义字段类型
|
|
148
|
-
*/
|
|
149
|
-
getCustomFieldType() {
|
|
150
|
-
const { modules } = this.manifest;
|
|
151
|
-
return modules.customFieldType || [];
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* 获取所有自定义字段
|
|
155
|
-
*/
|
|
156
|
-
getCustomField() {
|
|
157
|
-
const { modules } = this.manifest;
|
|
158
|
-
return modules.customField || [];
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* 根据key获取执行的function
|
|
162
|
-
* @param key
|
|
163
|
-
* @returns
|
|
164
|
-
*/
|
|
165
|
-
getFunctionByKey(key) {
|
|
166
|
-
const functionKey = this.getFunctionKeyByKey(key);
|
|
167
|
-
if (functionKey) {
|
|
168
|
-
return this.getFunctionByFunctionKey(functionKey);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* 根据functionKey获取执行的function
|
|
173
|
-
* @param functionKey
|
|
174
|
-
* @returns
|
|
175
|
-
*/
|
|
176
|
-
getFunctionByFunctionKey(functionKey) {
|
|
177
|
-
var _a, _b;
|
|
178
|
-
return (_b = (_a = this.manifest.modules) === null || _a === void 0 ? void 0 : _a.function) === null || _b === void 0 ? void 0 : _b.find(f => f.key === functionKey);
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* 根据key获取执行的functionKey
|
|
182
|
-
* @param key
|
|
183
|
-
* @returns
|
|
184
|
-
*/
|
|
185
|
-
getFunctionKeyByKey(key) {
|
|
186
|
-
var _a, _b, _c;
|
|
187
|
-
const { modules } = this.manifest;
|
|
188
|
-
for (const k in modules) {
|
|
189
|
-
if (k === 'function') {
|
|
190
|
-
continue;
|
|
191
|
-
}
|
|
192
|
-
else if (k === 'importer') {
|
|
193
|
-
// importer扩展点需要判断function和validate
|
|
194
|
-
if (key === ((_a = modules[k]) === null || _a === void 0 ? void 0 : _a.function) || key === ((_b = modules[k]) === null || _b === void 0 ? void 0 : _b.validate)) {
|
|
195
|
-
return key;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
else if (Array.isArray(modules[k])) {
|
|
199
|
-
const targetModule = (_c = modules[k]) === null || _c === void 0 ? void 0 : _c.find(v => v.key === key);
|
|
200
|
-
if (targetModule) {
|
|
201
|
-
return targetModule.function;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* 获取function下的文件列表
|
|
208
|
-
* @returns
|
|
209
|
-
*/
|
|
210
|
-
getFunctionFiles() {
|
|
211
|
-
var _a, _b;
|
|
212
|
-
const fileNames = new Set();
|
|
213
|
-
(_b = (_a = this.manifest.modules) === null || _a === void 0 ? void 0 : _a.function) === null || _b === void 0 ? void 0 : _b.forEach(({ handler }) => {
|
|
214
|
-
const filename = handler.split('.')[0];
|
|
215
|
-
fileNames.add(filename);
|
|
216
|
-
});
|
|
217
|
-
return [...fileNames];
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
212
|
const getManifest = async () => {
|
|
222
213
|
const manifestFile = path__default["default"].resolve('manifest.yml');
|
|
223
214
|
const strBuffer = await fse__default["default"].readFile(manifestFile);
|
|
224
|
-
return new Manifest(strBuffer.toString());
|
|
215
|
+
return new appsManifest.Manifest(strBuffer.toString());
|
|
225
216
|
};
|
|
226
217
|
|
|
227
218
|
var run$2 = async ({ outputDir, inputDir, prod, copyFiles, zip }) => {
|
|
@@ -242,7 +233,7 @@ var run$2 = async ({ outputDir, inputDir, prod, copyFiles, zip }) => {
|
|
|
242
233
|
start: 'start bundle',
|
|
243
234
|
error: 'bundle failed',
|
|
244
235
|
succeed: 'bundle success',
|
|
245
|
-
}, () => bundleApp({ outputDir, inputDir, manifest, mode: prod ?
|
|
236
|
+
}, () => bundleApp({ outputDir, inputDir, manifest, mode: prod ? MODE.PROD : MODE.DEV }));
|
|
246
237
|
// package
|
|
247
238
|
await execActionWithSpinner({
|
|
248
239
|
start: 'start package',
|
|
@@ -495,11 +486,11 @@ class DockerService {
|
|
|
495
486
|
|
|
496
487
|
const build = (functionFiles, inputDir, outputDir) => {
|
|
497
488
|
for (const fileName of functionFiles) {
|
|
498
|
-
|
|
489
|
+
bundle({
|
|
499
490
|
inputDir,
|
|
500
491
|
outputDir,
|
|
501
492
|
fileName,
|
|
502
|
-
mode:
|
|
493
|
+
mode: MODE.DEV,
|
|
503
494
|
});
|
|
504
495
|
}
|
|
505
496
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@giteeteam/apps-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Giteeteam Apps cli",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"dev": "tsc -w",
|
|
28
28
|
"build": "rm -rf dist && rollup -c",
|
|
29
29
|
"prepublish": "pnpm build",
|
|
30
|
+
"prepack": "pnpm build",
|
|
30
31
|
"unlink": "yarn unlink",
|
|
31
32
|
"link": "chmod +x ./dist/index.js && yarn link && yarn link '@giteeteam/apps-cli' -g",
|
|
32
33
|
"build-link": "pnpm build && yarn run link"
|
|
@@ -37,25 +38,29 @@
|
|
|
37
38
|
"registry": "https://registry.npmjs.org/"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
|
-
"@giteeteam/apps-
|
|
41
|
-
"@
|
|
41
|
+
"@giteeteam/apps-manifest": "^0.3.0",
|
|
42
|
+
"@rollup/plugin-commonjs": "^22.0.0",
|
|
43
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
42
44
|
"archiver": "^5.3.1",
|
|
43
45
|
"chalk": "^4.1.2",
|
|
44
46
|
"chokidar": "^3.5.3",
|
|
45
47
|
"commander": "^9.3.0",
|
|
46
48
|
"dotenv": "^16.0.2",
|
|
49
|
+
"esbuild": "^0.16.11",
|
|
47
50
|
"execa": "^5.1.1",
|
|
48
51
|
"fs-extra": "^10.1.0",
|
|
49
52
|
"inquirer": "^8.2.4",
|
|
50
53
|
"ora": "^5.4.1",
|
|
54
|
+
"rollup": "^2.79.0",
|
|
51
55
|
"simple-git": "^3.7.1",
|
|
52
56
|
"yaml": "^2.1.1"
|
|
53
57
|
},
|
|
54
58
|
"devDependencies": {
|
|
59
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
55
60
|
"@types/archiver": "^5.3.1",
|
|
56
61
|
"@types/fs-extra": "^9.0.13",
|
|
57
62
|
"@types/inquirer": "^8.2.1",
|
|
58
|
-
"@types/uuid": "^8.3.4"
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
"@types/uuid": "^8.3.4",
|
|
64
|
+
"rollup-plugin-typescript2": "^0.31.2"
|
|
65
|
+
}
|
|
61
66
|
}
|