@rife/cli 0.0.6-beta.1 → 0.0.6-beta.11
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/1.js +24 -0
- package/dist/1.mjs +20 -0
- package/dist/cjs/1.js +24 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/esm/1.mjs +20 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.js +3 -11
- package/dist/logger.js.map +1 -1
- package/dist/plugin/commander.js +22 -17
- package/dist/plugin/commander.js.map +1 -1
- package/dist/plugin/compiler/index.js +11 -6
- package/dist/plugin/compiler/index.js.map +1 -1
- package/dist/plugin/compiler/swc.js +2 -1
- package/dist/plugin/compiler/swc.js.map +1 -1
- package/dist/plugin/compiler/swc2.js +65 -0
- package/dist/plugin/compiler/swc2.js.map +1 -0
- package/dist/plugin/config.js +25 -9
- package/dist/plugin/config.js.map +1 -1
- package/dist/plugin/index.js +1 -0
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/package copy.js.map +1 -1
- package/dist/plugin/package.js.map +1 -1
- package/dist/plugin/release.js +84 -14
- package/dist/plugin/release.js.map +1 -1
- package/dist/runner.js +33 -5
- package/dist/runner.js.map +1 -1
- package/dist/sync.js +4 -3
- package/dist/sync.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/util.js +14 -0
- package/dist/util.js.map +1 -0
- package/package.json +28 -26
- package/src/cli.ts +23 -19
- package/src/index.ts +15 -3
- package/src/logger.ts +16 -34
- package/src/plugin/commander.ts +49 -44
- package/src/plugin/compiler/index.ts +115 -109
- package/src/plugin/compiler/swc.ts +56 -55
- package/src/plugin/compiler/tsc.ts +101 -101
- package/src/plugin/config.ts +78 -63
- package/src/plugin/index.ts +1 -0
- package/src/plugin/package.ts +0 -3
- package/src/plugin/release.ts +113 -32
- package/src/runner.ts +128 -88
- package/src/sync.ts +63 -62
- package/src/util.ts +9 -0
- package/dist/build.js +0 -3
- package/dist/build.js.map +0 -1
- package/dist/compiler.js +0 -82
- package/dist/compiler.js.map +0 -1
- package/dist/plugin.js +0 -161
- package/dist/plugin.js.map +0 -1
- package/dist/pnpmfile.js +0 -144
- package/dist/swc.js +0 -78
- package/dist/swc.js.map +0 -1
- package/dist/tsc.js +0 -94
- package/dist/tsc.js.map +0 -1
- package/src/build.ts +0 -0
- package/src/pnpmfile.ts +0 -121
- package/src/test/pnpmfile.test.ts +0 -223
package/src/runner.ts
CHANGED
|
@@ -1,88 +1,128 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
1
|
+
import type { ConsolaInstance } from 'consola';
|
|
2
|
+
import { colors } from 'consola/utils';
|
|
3
|
+
import { AsyncSeriesHook } from 'tapable';
|
|
4
|
+
import zod from 'zod';
|
|
5
|
+
|
|
6
|
+
import { createLogger } from './logger';
|
|
7
|
+
import { fs, glob } from './util';
|
|
8
|
+
|
|
9
|
+
export interface Config {
|
|
10
|
+
name: string;
|
|
11
|
+
plugins: Plugin[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface Runner {
|
|
15
|
+
env: 'prod' | 'dev';
|
|
16
|
+
hook: {
|
|
17
|
+
loadPackage: AsyncSeriesHook<[]>;
|
|
18
|
+
loadConfig: AsyncSeriesHook<[]>;
|
|
19
|
+
validateConfig: AsyncSeriesHook<[]>;
|
|
20
|
+
applyConfig: AsyncSeriesHook<[]>;
|
|
21
|
+
validatePlugin: AsyncSeriesHook<[]>;
|
|
22
|
+
registerCommand: AsyncSeriesHook<[]>;
|
|
23
|
+
startCommand: AsyncSeriesHook<[]>;
|
|
24
|
+
finishCommand: AsyncSeriesHook<[]>;
|
|
25
|
+
dev: AsyncSeriesHook<[]>;
|
|
26
|
+
build: AsyncSeriesHook<[]>;
|
|
27
|
+
test: AsyncSeriesHook<[]>;
|
|
28
|
+
release: AsyncSeriesHook<[]>;
|
|
29
|
+
deploy: AsyncSeriesHook<[]>;
|
|
30
|
+
lint: AsyncSeriesHook<[]>;
|
|
31
|
+
};
|
|
32
|
+
logger: ConsolaInstance;
|
|
33
|
+
config: {
|
|
34
|
+
all: Config[];
|
|
35
|
+
current: Config;
|
|
36
|
+
};
|
|
37
|
+
command: import('commander').Command;
|
|
38
|
+
package: any;
|
|
39
|
+
z: typeof zod;
|
|
40
|
+
fs: typeof import('fs-extra');
|
|
41
|
+
glob: typeof import('glob')['glob'];
|
|
42
|
+
duration: string;
|
|
43
|
+
tempDir: string;
|
|
44
|
+
clear: () => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface Plugin {
|
|
48
|
+
name: string;
|
|
49
|
+
apply: (runner: Runner) => any;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (typeof Promise.withResolvers === 'undefined') {
|
|
53
|
+
Promise.withResolvers = <T>() => {
|
|
54
|
+
let resolve: (value: T | PromiseLike<T>) => void;
|
|
55
|
+
let reject: (reason?: unknown) => void;
|
|
56
|
+
const promise = new Promise<T>((res, rej) => {
|
|
57
|
+
resolve = res;
|
|
58
|
+
reject = rej;
|
|
59
|
+
});
|
|
60
|
+
return { promise, resolve: resolve!, reject: reject! };
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function createRunner() {
|
|
65
|
+
const perfStart = performance.now();
|
|
66
|
+
|
|
67
|
+
const { Command } = require('commander') as typeof import('commander');
|
|
68
|
+
const command = new Command();
|
|
69
|
+
|
|
70
|
+
command.option('--debug', '打开调试日志');
|
|
71
|
+
command.option('-n, --name <string>', '执行指定配置');
|
|
72
|
+
command.option('-h, --help', '帮助');
|
|
73
|
+
command.parse();
|
|
74
|
+
|
|
75
|
+
const args = zod
|
|
76
|
+
.object({
|
|
77
|
+
debug: zod.boolean().default(false),
|
|
78
|
+
})
|
|
79
|
+
.default({})
|
|
80
|
+
.safeParse(command.opts());
|
|
81
|
+
|
|
82
|
+
const runner: Runner = {
|
|
83
|
+
env: 'prod',
|
|
84
|
+
hook: {
|
|
85
|
+
loadPackage: new AsyncSeriesHook([]),
|
|
86
|
+
loadConfig: new AsyncSeriesHook([]),
|
|
87
|
+
validateConfig: new AsyncSeriesHook([]),
|
|
88
|
+
applyConfig: new AsyncSeriesHook([]),
|
|
89
|
+
validatePlugin: new AsyncSeriesHook([]),
|
|
90
|
+
registerCommand: new AsyncSeriesHook([]),
|
|
91
|
+
startCommand: new AsyncSeriesHook([]),
|
|
92
|
+
finishCommand: new AsyncSeriesHook([]),
|
|
93
|
+
dev: new AsyncSeriesHook([]),
|
|
94
|
+
build: new AsyncSeriesHook([]),
|
|
95
|
+
test: new AsyncSeriesHook([]),
|
|
96
|
+
release: new AsyncSeriesHook([]),
|
|
97
|
+
deploy: new AsyncSeriesHook([]),
|
|
98
|
+
lint: new AsyncSeriesHook([]),
|
|
99
|
+
},
|
|
100
|
+
logger: createLogger(args.data),
|
|
101
|
+
command,
|
|
102
|
+
config: {
|
|
103
|
+
all: [],
|
|
104
|
+
// @ts-expect-error
|
|
105
|
+
current: undefined,
|
|
106
|
+
},
|
|
107
|
+
package: {},
|
|
108
|
+
z: zod,
|
|
109
|
+
fs,
|
|
110
|
+
glob: glob.glob,
|
|
111
|
+
get duration() {
|
|
112
|
+
const duration = ((performance.now() - perfStart) / 1000).toFixed(3);
|
|
113
|
+
return `耗时 ${duration} s`;
|
|
114
|
+
},
|
|
115
|
+
tempDir: './node_modules/.temp/',
|
|
116
|
+
clear: () => {
|
|
117
|
+
console.clear();
|
|
118
|
+
process.stdout.write('\x1b[3J');
|
|
119
|
+
console.log(`${colors.bgBlue(' 项目名称 ')} ${runner.package.name} \n`);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
return runner;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function defineConfig(all: Config[]) {
|
|
127
|
+
return all;
|
|
128
|
+
}
|
package/src/sync.ts
CHANGED
|
@@ -1,62 +1,63 @@
|
|
|
1
|
-
async function sync(name: string) {
|
|
2
|
-
const res = await fetch(`https://registry-direct.npmmirror.com/-/package/${name}/syncs`, {
|
|
3
|
-
headers: {
|
|
4
|
-
accept: '*/*',
|
|
5
|
-
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
|
6
|
-
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
|
|
7
|
-
'sec-ch-ua-mobile': '?0',
|
|
8
|
-
'sec-ch-ua-platform': '"Windows"',
|
|
9
|
-
'sec-fetch-dest': 'empty',
|
|
10
|
-
'sec-fetch-mode': 'cors',
|
|
11
|
-
'sec-fetch-site': 'same-site',
|
|
12
|
-
Referer: 'https://npmmirror.com/',
|
|
13
|
-
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
|
14
|
-
},
|
|
15
|
-
body: null,
|
|
16
|
-
method: 'PUT',
|
|
17
|
-
});
|
|
18
|
-
const body = await res.json();
|
|
19
|
-
if (body.ok === true) {
|
|
20
|
-
console.log(`同步 ${name} 成功`);
|
|
21
|
-
}
|
|
22
|
-
return body;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const list = [
|
|
26
|
-
'@rife/config', //
|
|
27
|
-
|
|
28
|
-
'@rife/
|
|
29
|
-
// '@rife/
|
|
30
|
-
// '@rife/
|
|
31
|
-
// '@rife/
|
|
32
|
-
// '@rife/
|
|
33
|
-
'@rife/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
1
|
+
async function sync(name: string) {
|
|
2
|
+
const res = await fetch(`https://registry-direct.npmmirror.com/-/package/${name}/syncs`, {
|
|
3
|
+
headers: {
|
|
4
|
+
accept: '*/*',
|
|
5
|
+
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
|
6
|
+
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
|
|
7
|
+
'sec-ch-ua-mobile': '?0',
|
|
8
|
+
'sec-ch-ua-platform': '"Windows"',
|
|
9
|
+
'sec-fetch-dest': 'empty',
|
|
10
|
+
'sec-fetch-mode': 'cors',
|
|
11
|
+
'sec-fetch-site': 'same-site',
|
|
12
|
+
Referer: 'https://npmmirror.com/',
|
|
13
|
+
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
|
14
|
+
},
|
|
15
|
+
body: null,
|
|
16
|
+
method: 'PUT',
|
|
17
|
+
});
|
|
18
|
+
const body = await res.json();
|
|
19
|
+
if (body.ok === true) {
|
|
20
|
+
console.log(`同步 ${name} 成功`);
|
|
21
|
+
}
|
|
22
|
+
return body;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const list = [
|
|
26
|
+
'@rife/config', //
|
|
27
|
+
'@rife/cli', //
|
|
28
|
+
// '@rife/infra',
|
|
29
|
+
// '@rife/logger',
|
|
30
|
+
// '@rife/react',
|
|
31
|
+
// '@rife/next',
|
|
32
|
+
// '@rife/nest',
|
|
33
|
+
// '@rife/plugin-deploy',
|
|
34
|
+
// '@rife/fast',
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
async function main() {
|
|
38
|
+
for (const item of list) {
|
|
39
|
+
// https://registry.npmmirror.com/-/package/@rife/infra/syncs/65a255a2afa293666acf6655/log
|
|
40
|
+
await sync(item);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
poll();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
main();
|
|
47
|
+
|
|
48
|
+
async function get(name: string) {
|
|
49
|
+
try {
|
|
50
|
+
const res = await fetch(`https://r.cnpmjs.org/${name}?t=${Date.now()}&cache=0`);
|
|
51
|
+
const data = await res.json();
|
|
52
|
+
return `${name} ${data?.['dist-tags']?.['latest']}`;
|
|
53
|
+
} catch (e) {
|
|
54
|
+
return `${name} error`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function poll() {
|
|
59
|
+
const res = await Promise.all(list.map(get));
|
|
60
|
+
console.log(`${res.join('\n')}\n`);
|
|
61
|
+
|
|
62
|
+
setTimeout(poll, 1000);
|
|
63
|
+
}
|
package/src/util.ts
ADDED
package/dist/build.js
DELETED
package/dist/build.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":""}
|
package/dist/compiler.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compileTs = compileTs;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
|
-
const utils_1 = require("consola/utils");
|
|
7
|
-
const swc_1 = require("./swc");
|
|
8
|
-
const tsc_1 = require("./tsc");
|
|
9
|
-
const clear = () => {
|
|
10
|
-
console.clear();
|
|
11
|
-
process.stdout.write('\x1b[3J');
|
|
12
|
-
};
|
|
13
|
-
async function compileTs(runner, tsxConfig, { watch } = { watch: false }) {
|
|
14
|
-
const { logger, fs } = runner;
|
|
15
|
-
const log = logger.withTag(compileTs.name);
|
|
16
|
-
log.debug('tsxConfig %j', tsxConfig);
|
|
17
|
-
if (tsxConfig.clean) {
|
|
18
|
-
log.info('清空目录 %s', tsxConfig.outDir);
|
|
19
|
-
await fs.emptyDir(tsxConfig.outDir);
|
|
20
|
-
}
|
|
21
|
-
if (tsxConfig.type === 'tsc') {
|
|
22
|
-
(0, tsc_1.tsc)(tsxConfig);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (tsxConfig.type === 'swc') {
|
|
26
|
-
const formatDiagnostic = (diagnostics) => {
|
|
27
|
-
const ts = require('typescript');
|
|
28
|
-
return diagnostics
|
|
29
|
-
.map(diagnostic => {
|
|
30
|
-
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
|
31
|
-
if (diagnostic.file) {
|
|
32
|
-
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
|
33
|
-
return `${utils_1.colors.blue(diagnostic.file.fileName)} ${utils_1.colors.yellow(`(${line + 1},${character + 1})`)}: ${utils_1.colors.white(message)}`;
|
|
34
|
-
}
|
|
35
|
-
return message;
|
|
36
|
-
})
|
|
37
|
-
.join('\n');
|
|
38
|
-
};
|
|
39
|
-
(0, swc_1.swc)({
|
|
40
|
-
...tsxConfig,
|
|
41
|
-
watch,
|
|
42
|
-
onComplieSuccess: ({ watch, first, duration }) => {
|
|
43
|
-
if (watch && !first) {
|
|
44
|
-
// watch 模式下,第二次编译清空一下屏幕
|
|
45
|
-
clear();
|
|
46
|
-
console.log(`${utils_1.colors.bgBlue(' 项目名称 ')} ${runner.package.name} \n`);
|
|
47
|
-
}
|
|
48
|
-
log.success(`编译成功,耗时 ${duration.toFixed(2)} ms`);
|
|
49
|
-
runner.compiler.hook.tsxSuccess.promise();
|
|
50
|
-
},
|
|
51
|
-
onComplieFail: ({ watch, first, duration, reasons }) => {
|
|
52
|
-
if (watch && !first) {
|
|
53
|
-
// watch 模式下,第二次编译清空一下屏幕
|
|
54
|
-
clear();
|
|
55
|
-
console.log(`${utils_1.colors.bgBlue(' 项目名称 ')} ${runner.package.name} \n`);
|
|
56
|
-
}
|
|
57
|
-
const message = [...reasons.entries()]
|
|
58
|
-
.map(([key, value]) => {
|
|
59
|
-
const index = value.indexOf(key);
|
|
60
|
-
if (index > -1) {
|
|
61
|
-
return value.replace(key, path_1.default.resolve(key));
|
|
62
|
-
}
|
|
63
|
-
return `${value}`;
|
|
64
|
-
})
|
|
65
|
-
.join('\n');
|
|
66
|
-
log.error(`编译失败,耗时 ${duration.toFixed(2)} ms\n\n%s`, message);
|
|
67
|
-
},
|
|
68
|
-
onTypeCheckFinish: ({ diagnostics, duration }) => {
|
|
69
|
-
if (diagnostics.length) {
|
|
70
|
-
log.error(`类型检查失败,耗时 ${duration.toFixed(2)} ms\n\n%s`, formatDiagnostic(diagnostics));
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
log.success(`类型检查成功,耗时 ${duration.toFixed(2)} ms`);
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
log.error(`compiler type '${tsxConfig.type}' 不存在`);
|
|
80
|
-
process.exit(1);
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=compiler.js.map
|
package/dist/compiler.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pluginPackage = pluginPackage;
|
|
4
|
-
exports.pluginConfig = pluginConfig;
|
|
5
|
-
exports.pluginCommander = pluginCommander;
|
|
6
|
-
exports.pluginCompiler = pluginCompiler;
|
|
7
|
-
const tslib_1 = require("tslib");
|
|
8
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
9
|
-
const compiler_1 = require("./compiler");
|
|
10
|
-
function pluginPackage() {
|
|
11
|
-
const plugin = {
|
|
12
|
-
name: pluginPackage.name,
|
|
13
|
-
apply: runner => {
|
|
14
|
-
const { logger, hook, fs } = runner;
|
|
15
|
-
const log = logger.withTag(pluginPackage.name);
|
|
16
|
-
hook.loadPackage.tapPromise(pluginPackage.name, async () => {
|
|
17
|
-
const fileName = 'package.json';
|
|
18
|
-
const filePath = path_1.default.resolve(fileName);
|
|
19
|
-
if (!fs.existsSync(filePath)) {
|
|
20
|
-
log.error(`找不到文件 ${fileName}`);
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
const data = require(filePath);
|
|
25
|
-
runner.package = data;
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
log.error(`读取文件失败`, e.message);
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
return plugin;
|
|
35
|
-
}
|
|
36
|
-
function pluginConfig() {
|
|
37
|
-
const plugin = {
|
|
38
|
-
name: pluginConfig.name,
|
|
39
|
-
apply: runner => {
|
|
40
|
-
const { logger, hook, config, fs, z } = runner;
|
|
41
|
-
const log = logger.withTag(pluginConfig.name);
|
|
42
|
-
hook.loadConfig.tapPromise(pluginConfig.name, async () => {
|
|
43
|
-
const fileName = '.app.mjs';
|
|
44
|
-
const filePath = path_1.default.posix.resolve(fileName);
|
|
45
|
-
log.debug(`filePath %s`, filePath);
|
|
46
|
-
if (!fs.existsSync(filePath)) {
|
|
47
|
-
log.error(`找不到配置文件 ${fileName}`);
|
|
48
|
-
process.exit(1);
|
|
49
|
-
}
|
|
50
|
-
const all = (await import(filePath)).default;
|
|
51
|
-
runner.config.all = all;
|
|
52
|
-
});
|
|
53
|
-
hook.validateConfig.tapPromise(pluginConfig.name, async () => {
|
|
54
|
-
const validation = z
|
|
55
|
-
.array(z.object({
|
|
56
|
-
name: z.string().trim().min(1),
|
|
57
|
-
}))
|
|
58
|
-
.min(1)
|
|
59
|
-
.safeParse(config.all);
|
|
60
|
-
if (!validation.success) {
|
|
61
|
-
log.error(validation.error.message);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
hook.applyConfig.tapPromise(pluginConfig.name, async (options) => {
|
|
66
|
-
const result = z
|
|
67
|
-
.object({
|
|
68
|
-
name: z.string().trim().optional(),
|
|
69
|
-
})
|
|
70
|
-
.safeParse(options);
|
|
71
|
-
const name = result.data?.name;
|
|
72
|
-
if (!name) {
|
|
73
|
-
config.current = config.all[0];
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const find = config.all.find(t => t.name === name);
|
|
77
|
-
if (!find) {
|
|
78
|
-
log.error(`未找到 name '%s'`, name);
|
|
79
|
-
process.exit(1);
|
|
80
|
-
}
|
|
81
|
-
config.current = find;
|
|
82
|
-
}
|
|
83
|
-
config.current.plugins.forEach(plugin => plugin.apply(runner));
|
|
84
|
-
});
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
return plugin;
|
|
88
|
-
}
|
|
89
|
-
function pluginCommander() {
|
|
90
|
-
const plugin = {
|
|
91
|
-
name: pluginCommander.name,
|
|
92
|
-
apply: runner => {
|
|
93
|
-
const { hook, config, z } = runner;
|
|
94
|
-
hook.runCommand.tapPromise(pluginCommander.name, async () => {
|
|
95
|
-
const { Command } = require('commander');
|
|
96
|
-
const program = new Command();
|
|
97
|
-
program
|
|
98
|
-
.command('dev')
|
|
99
|
-
.option('-n, --name <string>', '', '')
|
|
100
|
-
.description('启动开发')
|
|
101
|
-
.action(async (options) => {
|
|
102
|
-
await hook.applyConfig.promise(options);
|
|
103
|
-
await hook.dev.promise();
|
|
104
|
-
});
|
|
105
|
-
program
|
|
106
|
-
.command('build')
|
|
107
|
-
.option('-n, --name <string>', '', '')
|
|
108
|
-
.description('构建项目')
|
|
109
|
-
.action(async (options) => {
|
|
110
|
-
await hook.applyConfig.promise(options);
|
|
111
|
-
await hook.build.promise();
|
|
112
|
-
});
|
|
113
|
-
program.parseAsync(process.argv);
|
|
114
|
-
});
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
return plugin;
|
|
118
|
-
}
|
|
119
|
-
function pluginCompiler(options) {
|
|
120
|
-
const plugin = {
|
|
121
|
-
name: pluginCompiler.name,
|
|
122
|
-
apply: runner => {
|
|
123
|
-
const { hook, logger, z, tapable } = runner;
|
|
124
|
-
const log = logger.withTag(pluginCompiler.name);
|
|
125
|
-
const validation = z
|
|
126
|
-
.object({
|
|
127
|
-
tsx: z
|
|
128
|
-
.object({
|
|
129
|
-
type: z.enum(['tsc', 'swc']).default('swc'),
|
|
130
|
-
rootDir: z.string().trim().min(1).default('.'),
|
|
131
|
-
outDir: z.string().trim().min(1).default('./dist/'),
|
|
132
|
-
clean: z.boolean().default(true),
|
|
133
|
-
options: z.object({}).passthrough().optional(),
|
|
134
|
-
})
|
|
135
|
-
.default({}),
|
|
136
|
-
})
|
|
137
|
-
.optional()
|
|
138
|
-
.default({})
|
|
139
|
-
.safeParse(options);
|
|
140
|
-
if (!validation.success) {
|
|
141
|
-
log.error('配置错误\n', validation.error.message);
|
|
142
|
-
process.exit(1);
|
|
143
|
-
}
|
|
144
|
-
runner.compiler = {
|
|
145
|
-
hook: {
|
|
146
|
-
tsxSuccess: new tapable.AsyncSeriesHook(),
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
hook.dev.tapPromise(pluginCompiler.name, async () => {
|
|
150
|
-
const tsxConfig = validation.data.tsx;
|
|
151
|
-
(0, compiler_1.compileTs)(runner, tsxConfig, { watch: true });
|
|
152
|
-
});
|
|
153
|
-
hook.build.tapPromise(pluginCompiler.name, async () => {
|
|
154
|
-
const tsxConfig = validation.data.tsx;
|
|
155
|
-
(0, compiler_1.compileTs)(runner, tsxConfig, { watch: false });
|
|
156
|
-
});
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
return plugin;
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|