@simplysm/sd-cli 7.0.22 → 7.0.23
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/bin/sd-cli.mjs +38 -13
- package/dist/commons.d.ts +1 -1
- package/dist/entry-points/SdCliLocalUpdate.d.ts +7 -4
- package/dist/entry-points/SdCliLocalUpdate.mjs +6 -7
- package/dist/entry-points/SdCliWorkspace.d.ts +12 -5
- package/dist/entry-points/SdCliWorkspace.mjs +45 -11
- package/dist/packages/SdCliPackage.d.ts +5 -2
- package/dist/packages/SdCliPackage.mjs +21 -12
- package/dist/utils/SdCliConfigUtil.d.ts +1 -1
- package/dist/utils/SdCliConfigUtil.mjs +5 -5
- package/package.json +6 -4
- package/src/bin/sd-cli.ts +37 -12
- package/src/commons.ts +1 -1
- package/src/entry-points/SdCliLocalUpdate.ts +5 -6
- package/src/entry-points/SdCliWorkspace.ts +60 -13
- package/src/packages/SdCliPackage.ts +22 -10
- package/src/utils/SdCliConfigUtil.ts +4 -4
- package/tsconfig.json +4 -1
package/dist/bin/sd-cli.mjs
CHANGED
|
@@ -30,6 +30,11 @@ const argv = yargs(hideBin(process.argv))
|
|
|
30
30
|
config: {
|
|
31
31
|
type: "string",
|
|
32
32
|
describe: "simplysm.json 파일 경로"
|
|
33
|
+
},
|
|
34
|
+
options: {
|
|
35
|
+
type: "string",
|
|
36
|
+
array: true,
|
|
37
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
33
38
|
}
|
|
34
39
|
}))
|
|
35
40
|
.command("build", "프로젝트의 각 패키지에 대한 빌드를 수행합니다.", (cmd) => cmd.version(false)
|
|
@@ -37,18 +42,28 @@ const argv = yargs(hideBin(process.argv))
|
|
|
37
42
|
config: {
|
|
38
43
|
type: "string",
|
|
39
44
|
describe: "simplysm.json 파일 경로"
|
|
45
|
+
},
|
|
46
|
+
options: {
|
|
47
|
+
type: "string",
|
|
48
|
+
array: true,
|
|
49
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
40
50
|
}
|
|
41
51
|
}))
|
|
42
52
|
.command("publish", "프로젝트의 각 패키지를 배포합니다.", (cmd) => cmd.version(false)
|
|
43
53
|
.options({
|
|
54
|
+
noBuild: {
|
|
55
|
+
type: "boolean",
|
|
56
|
+
describe: "빌드를 하지않고 배포합니다.",
|
|
57
|
+
default: false
|
|
58
|
+
},
|
|
44
59
|
config: {
|
|
45
60
|
type: "string",
|
|
46
61
|
describe: "simplysm.json 파일 경로"
|
|
47
62
|
},
|
|
48
|
-
|
|
49
|
-
type: "
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
options: {
|
|
64
|
+
type: "string",
|
|
65
|
+
array: true,
|
|
66
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
52
67
|
}
|
|
53
68
|
}))
|
|
54
69
|
.parseSync();
|
|
@@ -68,21 +83,31 @@ else {
|
|
|
68
83
|
const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
69
84
|
(async () => {
|
|
70
85
|
if (argv._[0] === "local-update") {
|
|
71
|
-
await new SdCliLocalUpdate(process.cwd()
|
|
72
|
-
.runAsync(
|
|
86
|
+
await new SdCliLocalUpdate(process.cwd())
|
|
87
|
+
.runAsync({
|
|
88
|
+
confFileRelPath: argv.config ?? "simplysm.json"
|
|
89
|
+
});
|
|
73
90
|
}
|
|
74
91
|
else if (argv._[0] === "watch") {
|
|
75
|
-
await new SdCliWorkspace(process.cwd()
|
|
76
|
-
.watchAsync(
|
|
92
|
+
await new SdCliWorkspace(process.cwd())
|
|
93
|
+
.watchAsync({
|
|
94
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
95
|
+
optNames: argv.options ?? []
|
|
96
|
+
});
|
|
77
97
|
}
|
|
78
98
|
else if (argv._[0] === "build") {
|
|
79
|
-
await new SdCliWorkspace(process.cwd()
|
|
80
|
-
.buildAsync(
|
|
99
|
+
await new SdCliWorkspace(process.cwd())
|
|
100
|
+
.buildAsync({
|
|
101
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
102
|
+
optNames: argv.options ?? []
|
|
103
|
+
});
|
|
81
104
|
}
|
|
82
105
|
else if (argv._[0] === "publish") {
|
|
83
|
-
await new SdCliWorkspace(process.cwd()
|
|
106
|
+
await new SdCliWorkspace(process.cwd())
|
|
84
107
|
.publishAsync({
|
|
85
|
-
noBuild: argv.noBuild
|
|
108
|
+
noBuild: argv.noBuild,
|
|
109
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
110
|
+
optNames: argv.options ?? []
|
|
86
111
|
});
|
|
87
112
|
}
|
|
88
113
|
else {
|
|
@@ -91,4 +116,4 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
91
116
|
})().catch((err) => {
|
|
92
117
|
logger.error(err);
|
|
93
118
|
});
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QtY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9zZC1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFM0IsS0FBSyxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0tBQ25CLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0tBQ2xCLE9BQU8sQ0FBQztJQUNQLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxTQUFTO1FBQ2YsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QixPQUFPLEVBQUUsS0FBSztLQUNmO0NBQ0YsQ0FBQztLQUNELE9BQU8sQ0FDTixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUN4QixPQUFPLENBQUM7SUFDUCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsUUFBUTtRQUNkLFFBQVEsRUFBRSxxQkFBcUI7S0FDaEM7Q0FDRixDQUFDLENBQ0w7S0FDQSxPQUFPLENBQ04s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
|
package/dist/commons.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export interface ISdCliConfig {
|
|
|
34
34
|
packages: Record<string, TSdCliPackageConfig | undefined>;
|
|
35
35
|
localUpdates?: Record<string, string>;
|
|
36
36
|
}
|
|
37
|
-
export declare type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig;
|
|
37
|
+
export declare type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig | ISdCliServerPackageConfig;
|
|
38
38
|
export interface ISdCliLibPackageConfig {
|
|
39
39
|
type: "library";
|
|
40
40
|
publish?: "npm";
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export declare class SdCliLocalUpdate {
|
|
2
2
|
private readonly _rootPath;
|
|
3
|
-
private readonly _configFilePath?;
|
|
4
3
|
private readonly _logger;
|
|
5
|
-
constructor(_rootPath: string
|
|
6
|
-
runAsync(
|
|
7
|
-
|
|
4
|
+
constructor(_rootPath: string);
|
|
5
|
+
runAsync(opt: {
|
|
6
|
+
confFileRelPath: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
watchAsync(opt: {
|
|
9
|
+
confFileRelPath: string;
|
|
10
|
+
}): Promise<void>;
|
|
8
11
|
private _getUpdatePathInfosAsync;
|
|
9
12
|
protected _getWatchPathsAsync(sourcePath: string): Promise<string[]>;
|
|
10
13
|
}
|
|
@@ -2,14 +2,13 @@ import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
|
2
2
|
import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
export class SdCliLocalUpdate {
|
|
5
|
-
constructor(_rootPath
|
|
5
|
+
constructor(_rootPath) {
|
|
6
6
|
this._rootPath = _rootPath;
|
|
7
|
-
this._configFilePath = _configFilePath;
|
|
8
7
|
this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
9
8
|
}
|
|
10
|
-
async runAsync() {
|
|
9
|
+
async runAsync(opt) {
|
|
11
10
|
this._logger.debug("프로젝트 설정 가져오기...");
|
|
12
|
-
const conf = SdCliConfigUtil.
|
|
11
|
+
const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false);
|
|
13
12
|
if (!conf.localUpdates)
|
|
14
13
|
return;
|
|
15
14
|
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
@@ -26,9 +25,9 @@ export class SdCliLocalUpdate {
|
|
|
26
25
|
}
|
|
27
26
|
this._logger.info("로컬 라이브러리 업데이트 완료");
|
|
28
27
|
}
|
|
29
|
-
async watchAsync() {
|
|
28
|
+
async watchAsync(opt) {
|
|
30
29
|
this._logger.debug("프로젝트 설정 가져오기...");
|
|
31
|
-
const conf = SdCliConfigUtil.
|
|
30
|
+
const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false);
|
|
32
31
|
if (!conf.localUpdates)
|
|
33
32
|
return;
|
|
34
33
|
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
@@ -87,4 +86,4 @@ export class SdCliLocalUpdate {
|
|
|
87
86
|
});
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlMb2NhbFVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRyeS1wb2ludHMvU2RDbGlMb2NhbFVwZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0MsU0FBaUI7UUFBakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUZwQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBR3JGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQWdDO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUvQixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN4QyxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtZQUM1QyxJQUFJLENBQUMsTUFB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
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
export declare class SdCliWorkspace {
|
|
2
2
|
private readonly _rootPath;
|
|
3
|
-
private readonly _configFilePath?;
|
|
4
3
|
private readonly _logger;
|
|
5
4
|
private readonly _npmConfig;
|
|
6
|
-
private readonly
|
|
7
|
-
constructor(_rootPath: string
|
|
8
|
-
watchAsync(
|
|
9
|
-
|
|
5
|
+
private readonly _serverInfoMap;
|
|
6
|
+
constructor(_rootPath: string);
|
|
7
|
+
watchAsync(opt: {
|
|
8
|
+
confFileRelPath: string;
|
|
9
|
+
optNames: string[];
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
buildAsync(opt: {
|
|
12
|
+
confFileRelPath: string;
|
|
13
|
+
optNames: string[];
|
|
14
|
+
}): Promise<void>;
|
|
10
15
|
private _buildPkgsAsync;
|
|
11
16
|
publishAsync(opt: {
|
|
12
17
|
noBuild: boolean;
|
|
18
|
+
confFileRelPath: string;
|
|
19
|
+
optNames: string[];
|
|
13
20
|
}): Promise<void>;
|
|
14
21
|
private _upgradeVersionAsync;
|
|
15
22
|
private _waitSecMessageAsync;
|
|
@@ -5,18 +5,21 @@ import { Wait } from "@simplysm/sd-core-common";
|
|
|
5
5
|
import os from "os";
|
|
6
6
|
import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
|
|
7
7
|
import semver from "semver/preload";
|
|
8
|
+
import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
9
|
+
import decache from "decache";
|
|
8
10
|
export class SdCliWorkspace {
|
|
9
|
-
constructor(_rootPath
|
|
11
|
+
constructor(_rootPath) {
|
|
10
12
|
this._rootPath = _rootPath;
|
|
11
|
-
this._configFilePath = _configFilePath;
|
|
12
13
|
this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
14
|
+
this._serverInfoMap = new Map();
|
|
13
15
|
const npmConfigFilePath = path.resolve(this._rootPath, "package.json");
|
|
14
16
|
this._npmConfig = FsUtil.readJson(npmConfigFilePath);
|
|
15
|
-
this._config = FsUtil.readJson(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"));
|
|
16
17
|
}
|
|
17
|
-
async watchAsync() {
|
|
18
|
+
async watchAsync(opt) {
|
|
19
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
20
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), true, opt.optNames);
|
|
18
21
|
this._logger.debug("패키지 목록 구성...");
|
|
19
|
-
const pkgs = await this._getPackagesAsync();
|
|
22
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
20
23
|
this._logger.debug("패키지 이벤트 설정...");
|
|
21
24
|
let changeCount = 0;
|
|
22
25
|
const totalResultMap = new Map();
|
|
@@ -40,6 +43,33 @@ export class SdCliWorkspace {
|
|
|
40
43
|
}
|
|
41
44
|
}, 500);
|
|
42
45
|
});
|
|
46
|
+
if (pkg.type === "server") {
|
|
47
|
+
pkg.on("complete", async (results) => {
|
|
48
|
+
if (results.some((item) => item.severity === "error")) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const entryFileRelPath = pkg.main;
|
|
52
|
+
if (entryFileRelPath === undefined) {
|
|
53
|
+
this._logger.error(`서버패키지(${pkg.name})의 'package.json'에서 'main'필드를 찾을 수 없습니다.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const entryFilePath = path.resolve(pkg.rootPath, entryFileRelPath);
|
|
57
|
+
this._logger.log(`서버(${pkg.name}) 재시작...`);
|
|
58
|
+
const serverInfo = this._serverInfoMap.getOrCreate(pkg.name, {});
|
|
59
|
+
if (serverInfo.server) {
|
|
60
|
+
await serverInfo.server.closeAsync();
|
|
61
|
+
delete serverInfo.server;
|
|
62
|
+
decache(entryFilePath);
|
|
63
|
+
}
|
|
64
|
+
serverInfo.server = (await import(entryFilePath));
|
|
65
|
+
if (serverInfo.server === undefined) {
|
|
66
|
+
this._logger.error(`${entryFilePath}(0, 0): 'SdServiceServer'를 'export'해야 합니다.`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
await Wait.until(() => serverInfo.server.isOpen);
|
|
70
|
+
this._logger.log(`서버(${pkg.name}) 재시작 완료`);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
43
73
|
}
|
|
44
74
|
this._logger.debug("빌드를 시작합니다...");
|
|
45
75
|
const pkgNames = pkgs.map((item) => item.name);
|
|
@@ -50,9 +80,11 @@ export class SdCliWorkspace {
|
|
|
50
80
|
buildCompletedPackageNames.push(pkg.name);
|
|
51
81
|
});
|
|
52
82
|
}
|
|
53
|
-
async buildAsync() {
|
|
83
|
+
async buildAsync(opt) {
|
|
84
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
85
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false, opt.optNames);
|
|
54
86
|
this._logger.debug("패키지 목록 구성...");
|
|
55
|
-
const pkgs = await this._getPackagesAsync();
|
|
87
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
56
88
|
this._logger.debug("프로젝트 및 패키지 버전 설정...");
|
|
57
89
|
await this._upgradeVersionAsync(pkgs);
|
|
58
90
|
// 빌드
|
|
@@ -79,6 +111,8 @@ export class SdCliWorkspace {
|
|
|
79
111
|
}
|
|
80
112
|
}
|
|
81
113
|
async publishAsync(opt) {
|
|
114
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
115
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false, opt.optNames);
|
|
82
116
|
if (opt.noBuild) {
|
|
83
117
|
this._logger.warn("빌드하지 않고, 배포하는것은 상당히 위험합니다.");
|
|
84
118
|
await this._waitSecMessageAsync("프로세스를 중지하려면, 'CTRL+C'를 누르세요.", 5);
|
|
@@ -92,7 +126,7 @@ export class SdCliWorkspace {
|
|
|
92
126
|
}
|
|
93
127
|
}
|
|
94
128
|
this._logger.debug("패키지 목록 구성...");
|
|
95
|
-
const pkgs = await this._getPackagesAsync();
|
|
129
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
96
130
|
this._logger.debug("프로젝트 및 패키지 버전 설정...");
|
|
97
131
|
await this._upgradeVersionAsync(pkgs);
|
|
98
132
|
// 빌드
|
|
@@ -151,13 +185,13 @@ export class SdCliWorkspace {
|
|
|
151
185
|
process.stdout.cursorTo(0);
|
|
152
186
|
process.stdout.clearLine(0);
|
|
153
187
|
}
|
|
154
|
-
async _getPackagesAsync() {
|
|
188
|
+
async _getPackagesAsync(conf) {
|
|
155
189
|
const pkgRootPaths = await this._npmConfig.workspaces?.mapManyAsync(async (item) => await FsUtil.globAsync(item));
|
|
156
190
|
if (!pkgRootPaths) {
|
|
157
191
|
throw new Error("최상위 'package.json'에서 'workspaces'를 찾을 수 없습니다.");
|
|
158
192
|
}
|
|
159
193
|
return pkgRootPaths.map((pkgRootPath) => {
|
|
160
|
-
const pkgConfig =
|
|
194
|
+
const pkgConfig = conf.packages[path.basename(pkgRootPath)];
|
|
161
195
|
return pkgConfig ? new SdCliPackage(this._rootPath, pkgRootPath, pkgConfig) : undefined;
|
|
162
196
|
}).filterExists();
|
|
163
197
|
}
|
|
@@ -190,4 +224,4 @@ export class SdCliWorkspace {
|
|
|
190
224
|
}
|
|
191
225
|
}
|
|
192
226
|
}
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlXb3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50cnktcG9pbnRzL1NkQ2xpV29ya3NwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUVwQyxNQUFNLE9BQU8sY0FBYztJQU16QixZQUFvQyxTQUFpQixFQUNqQixlQUF3QjtRQUR4QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLG9CQUFlLEdBQWYsZUFBZSxDQUFTO1FBTjNDLFlBQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFPbkYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBQ3JFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLEdBQUc7aUJBQ0EsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtvQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2xDO2dCQUNELFdBQVcsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUM7aUJBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2pELGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxXQUFXLEVBQUUsQ0FBQztvQkFDZCxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7cUJBQ3RDO2dCQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNWLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSwwQkFBMEIsR0FBYSxFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEksTUFBTSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsS0FBSztRQUNMLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQjtRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSwwQkFBMEIsR0FBYSxFQUFFLENBQUM7UUFDaEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7UUFDckUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pELGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQztZQUVqRCwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxFQUFFO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyQzthQUNJO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQXlCO1FBQ2pELElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDaEQsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyQyxNQUFNLGVBQWUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEUsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ2hGLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUU1QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLEtBQUs7UUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7UUFFRCwrQkFBK0I7UUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxQyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLG1CQUFtQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDekUsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDeEc7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBb0I7UUFDckQsMEJBQTBCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBRXJDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBd0MsRUFBUSxFQUFFO1lBQzFFLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQzVCO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVuRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RSxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTlFLDJCQUEyQjtRQUMzQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sR0FBRyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUI7WUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtRQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCO1FBQzdCLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxlQUFlLENBQUMsY0FBdUQ7UUFDN0UsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDdEQsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQyxDQUFDO2FBQ0gsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsWUFBWTthQUMxQixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO2FBQzdDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDO2FBQzNFLFFBQVEsRUFBRSxDQUFDO1FBRWQsTUFBTSxNQUFNLEdBQUcsWUFBWTthQUN4QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO2FBQzNDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDO2FBQzNFLFFBQVEsRUFBRSxDQUFDO1FBRWQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsQ0FBQyxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDdEU7YUFDSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7Q0FDRiJ9
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlXb3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50cnktcG9pbnRzL1NkQ2xpV29ya3NwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBRTlCLE1BQU0sT0FBTyxjQUFjO0lBTXpCLFlBQW9DLFNBQWlCO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFMcEMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUdwRSxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRy9ELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQW9EO1FBQzFFLElBQUksQ0FBQyxP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
|
|
@@ -3,12 +3,15 @@ import { ISdCliPackageBuildResult, TSdCliPackageConfig } from "../commons";
|
|
|
3
3
|
import { EventEmitter } from "events";
|
|
4
4
|
export declare class SdCliPackage extends EventEmitter {
|
|
5
5
|
private readonly _workspaceRootPath;
|
|
6
|
-
|
|
6
|
+
readonly rootPath: string;
|
|
7
7
|
private readonly _config;
|
|
8
8
|
private readonly _npmConfig;
|
|
9
|
+
get basename(): string;
|
|
9
10
|
get name(): string;
|
|
11
|
+
get main(): string | undefined;
|
|
12
|
+
get type(): TSdCliPackageConfig["type"];
|
|
10
13
|
get allDependencies(): string[];
|
|
11
|
-
constructor(_workspaceRootPath: string,
|
|
14
|
+
constructor(_workspaceRootPath: string, rootPath: string, _config: TSdCliPackageConfig);
|
|
12
15
|
on(event: "change", listener: () => void): this;
|
|
13
16
|
on(event: "complete", listener: (results: ISdCliPackageBuildResult[]) => void): this;
|
|
14
17
|
setNewVersionAsync(newVersion: string, pkgNames: string[]): Promise<void>;
|
|
@@ -5,17 +5,26 @@ import { ObjectUtil } from "@simplysm/sd-core-common";
|
|
|
5
5
|
import { SdCliTsLibBuilder } from "../builder/SdCliTsLibBuilder";
|
|
6
6
|
import { SdCliJsLibBuilder } from "../builder/SdCliJsLibBuilder";
|
|
7
7
|
export class SdCliPackage extends EventEmitter {
|
|
8
|
-
constructor(_workspaceRootPath,
|
|
8
|
+
constructor(_workspaceRootPath, rootPath, _config) {
|
|
9
9
|
super();
|
|
10
10
|
this._workspaceRootPath = _workspaceRootPath;
|
|
11
|
-
this.
|
|
11
|
+
this.rootPath = rootPath;
|
|
12
12
|
this._config = _config;
|
|
13
|
-
const npmConfigFilePath = path.resolve(this.
|
|
13
|
+
const npmConfigFilePath = path.resolve(this.rootPath, "package.json");
|
|
14
14
|
this._npmConfig = FsUtil.readJson(npmConfigFilePath);
|
|
15
15
|
}
|
|
16
|
+
get basename() {
|
|
17
|
+
return path.basename(this._workspaceRootPath);
|
|
18
|
+
}
|
|
16
19
|
get name() {
|
|
17
20
|
return this._npmConfig.name;
|
|
18
21
|
}
|
|
22
|
+
get main() {
|
|
23
|
+
return this._npmConfig.main;
|
|
24
|
+
}
|
|
25
|
+
get type() {
|
|
26
|
+
return this._config.type;
|
|
27
|
+
}
|
|
19
28
|
get allDependencies() {
|
|
20
29
|
return [
|
|
21
30
|
...Object.keys(this._npmConfig.dependencies ?? {}),
|
|
@@ -42,16 +51,16 @@ export class SdCliPackage extends EventEmitter {
|
|
|
42
51
|
updateDepVersion(this._npmConfig.optionalDependencies);
|
|
43
52
|
updateDepVersion(this._npmConfig.devDependencies);
|
|
44
53
|
updateDepVersion(this._npmConfig.peerDependencies);
|
|
45
|
-
const npmConfigFilePath = path.resolve(this.
|
|
54
|
+
const npmConfigFilePath = path.resolve(this.rootPath, "package.json");
|
|
46
55
|
await FsUtil.writeJsonAsync(npmConfigFilePath, this._npmConfig, { space: 2 });
|
|
47
56
|
}
|
|
48
57
|
async watchAsync() {
|
|
49
|
-
const isTs = FsUtil.exists(path.resolve(this.
|
|
58
|
+
const isTs = FsUtil.exists(path.resolve(this.rootPath, "tsconfig.json"));
|
|
50
59
|
if (isTs) {
|
|
51
60
|
await this._genBuildTsconfigAsync();
|
|
52
61
|
}
|
|
53
62
|
const isAngular = isTs && this.allDependencies.includes("@angular/core");
|
|
54
|
-
const builder = !isTs ? new SdCliJsLibBuilder(this.
|
|
63
|
+
const builder = !isTs ? new SdCliJsLibBuilder(this.rootPath) : new SdCliTsLibBuilder(this.rootPath, isAngular);
|
|
55
64
|
await builder
|
|
56
65
|
.on("change", () => {
|
|
57
66
|
this.emit("change");
|
|
@@ -62,28 +71,28 @@ export class SdCliPackage extends EventEmitter {
|
|
|
62
71
|
.watchAsync();
|
|
63
72
|
}
|
|
64
73
|
async buildAsync() {
|
|
65
|
-
const isTs = FsUtil.exists(path.resolve(this.
|
|
74
|
+
const isTs = FsUtil.exists(path.resolve(this.rootPath, "tsconfig.json"));
|
|
66
75
|
if (isTs) {
|
|
67
76
|
await this._genBuildTsconfigAsync();
|
|
68
77
|
}
|
|
69
78
|
const isAngular = isTs && this.allDependencies.includes("@angular/core");
|
|
70
|
-
const builder = isTs ? new SdCliTsLibBuilder(this.
|
|
79
|
+
const builder = isTs ? new SdCliTsLibBuilder(this.rootPath, isAngular) : new SdCliJsLibBuilder(this.rootPath);
|
|
71
80
|
return await builder.buildAsync();
|
|
72
81
|
}
|
|
73
82
|
async publishAsync() {
|
|
74
83
|
if (this._config.type === "library" && this._config.publish === "npm") {
|
|
75
|
-
await SdProcess.execAsync("npm publish --quiet --access public", { cwd: this.
|
|
84
|
+
await SdProcess.execAsync("npm publish --quiet --access public", { cwd: this.rootPath });
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
87
|
async _genBuildTsconfigAsync() {
|
|
79
|
-
const baseTsconfigFilePath = path.resolve(this.
|
|
88
|
+
const baseTsconfigFilePath = path.resolve(this.rootPath, "tsconfig.json");
|
|
80
89
|
const baseTsconfig = await FsUtil.readJsonAsync(baseTsconfigFilePath);
|
|
81
90
|
const buildTsconfig = ObjectUtil.clone(baseTsconfig);
|
|
82
91
|
buildTsconfig.compilerOptions = buildTsconfig.compilerOptions ?? {};
|
|
83
92
|
delete buildTsconfig.compilerOptions.baseUrl;
|
|
84
93
|
delete buildTsconfig.compilerOptions.paths;
|
|
85
|
-
const buildTsconfigFilePath = path.resolve(this.
|
|
94
|
+
const buildTsconfigFilePath = path.resolve(this.rootPath, "tsconfig-build.json");
|
|
86
95
|
await FsUtil.writeJsonAsync(buildTsconfigFilePath, buildTsconfig, { space: 2 });
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlQYWNrYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhY2thZ2VzL1NkQ2xpUGFja2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVqRSxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUE0QjVDLFlBQW9DLGtCQUEwQixFQUMzQixRQUFnQixFQUNmLE9BQTRCO1FBQzlELEtBQUssRUFBRSxDQUFDO1FBSDBCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFHOUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQWhDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxV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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ISdCliConfig } from "../commons";
|
|
2
2
|
export declare class SdCliConfigUtil {
|
|
3
|
-
static
|
|
3
|
+
static loadConfigAsync(confFilePath: string, isDev: boolean, opts?: string[]): Promise<ISdCliConfig>;
|
|
4
4
|
private static _getConfigFromFileContent;
|
|
5
5
|
private static _getPkgConfigFromFileContent;
|
|
6
6
|
private static _mergeObj;
|
|
@@ -2,14 +2,14 @@ import { FsUtil } from "@simplysm/sd-core-node";
|
|
|
2
2
|
import { ObjectUtil } from "@simplysm/sd-core-common";
|
|
3
3
|
import path from "path";
|
|
4
4
|
export class SdCliConfigUtil {
|
|
5
|
-
static
|
|
6
|
-
const confFileCont = FsUtil.
|
|
5
|
+
static async loadConfigAsync(confFilePath, isDev, opts) {
|
|
6
|
+
const confFileCont = await FsUtil.readJsonAsync(confFilePath);
|
|
7
7
|
let conf = this._getConfigFromFileContent(confFileCont, isDev, opts);
|
|
8
8
|
// extends
|
|
9
9
|
if (conf.extends) {
|
|
10
10
|
for (const extConfFilePath of conf.extends) {
|
|
11
|
-
const extConf = this.
|
|
12
|
-
conf = this._mergeObj(
|
|
11
|
+
const extConf = await this.loadConfigAsync(path.resolve(path.dirname(confFilePath), extConfFilePath), isDev, opts);
|
|
12
|
+
conf = this._mergeObj(extConf, conf);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
delete conf["extends"];
|
|
@@ -66,4 +66,4 @@ export class SdCliConfigUtil {
|
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDb25maWdVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NkQ2xpQ29uZmlnVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixNQUFNLE9BQU8sZUFBZTtJQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFvQixFQUFFLEtBQWMsRUFBRSxJQUFlO1FBQ3ZGLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRSxVQUFVO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEtBQUssTUFBTSxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25ILElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkIsT0FBTyxJQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFTyxNQUFNLENBQUMseUJBQXlCLENBQUMsWUFBcUMsRUFBRSxLQUFjLEVBQUUsSUFBZTtRQUM3RyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixLQUFLLE1BQU0sT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkc7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxZQUFxQyxFQUFFLGVBQStDLEVBQUUsS0FBYyxFQUFFLElBQWU7UUFDakssSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRCxXQUFXO1FBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLFdBQVcsRUFBRTtZQUNmLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO2dCQUNwQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JELElBQUksT0FBTyxFQUFFO29CQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEYsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1lBQ0QsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzFCO1FBR0QsVUFBVTtRQUNWLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QixVQUFVO1FBQ1YsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRILEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlGLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM1QztZQUVELEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDaEYsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFPLEdBQU0sRUFBRSxNQUFTO1FBQzlDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO1lBQ25DLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.23",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -29,14 +29,16 @@
|
|
|
29
29
|
"ts-node": "^10.4.0",
|
|
30
30
|
"tsconfig-paths": "^3.12.0",
|
|
31
31
|
"typescript": "~4.5.5",
|
|
32
|
-
"yargs": "^17.3.1"
|
|
32
|
+
"yargs": "^17.3.1",
|
|
33
|
+
"decache": "^4.6.1"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/semver": "^7.3.9",
|
|
36
37
|
"@types/yargs": "^17.0.8"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
|
-
"@simplysm/sd-core-common": "7.0.
|
|
40
|
-
"@simplysm/sd-core-node": "7.0.
|
|
40
|
+
"@simplysm/sd-core-common": "7.0.23",
|
|
41
|
+
"@simplysm/sd-core-node": "7.0.23",
|
|
42
|
+
"@simplysm/sd-service": "7.0.23"
|
|
41
43
|
}
|
|
42
44
|
}
|
package/src/bin/sd-cli.ts
CHANGED
|
@@ -41,6 +41,11 @@ const argv = yargs(hideBin(process.argv))
|
|
|
41
41
|
config: {
|
|
42
42
|
type: "string",
|
|
43
43
|
describe: "simplysm.json 파일 경로"
|
|
44
|
+
},
|
|
45
|
+
options: {
|
|
46
|
+
type: "string",
|
|
47
|
+
array: true,
|
|
48
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
44
49
|
}
|
|
45
50
|
})
|
|
46
51
|
)
|
|
@@ -52,6 +57,11 @@ const argv = yargs(hideBin(process.argv))
|
|
|
52
57
|
config: {
|
|
53
58
|
type: "string",
|
|
54
59
|
describe: "simplysm.json 파일 경로"
|
|
60
|
+
},
|
|
61
|
+
options: {
|
|
62
|
+
type: "string",
|
|
63
|
+
array: true,
|
|
64
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
55
65
|
}
|
|
56
66
|
})
|
|
57
67
|
)
|
|
@@ -60,14 +70,19 @@ const argv = yargs(hideBin(process.argv))
|
|
|
60
70
|
"프로젝트의 각 패키지를 배포합니다.",
|
|
61
71
|
(cmd) => cmd.version(false)
|
|
62
72
|
.options({
|
|
73
|
+
noBuild: {
|
|
74
|
+
type: "boolean",
|
|
75
|
+
describe: "빌드를 하지않고 배포합니다.",
|
|
76
|
+
default: false
|
|
77
|
+
},
|
|
63
78
|
config: {
|
|
64
79
|
type: "string",
|
|
65
80
|
describe: "simplysm.json 파일 경로"
|
|
66
81
|
},
|
|
67
|
-
|
|
68
|
-
type: "
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
options: {
|
|
83
|
+
type: "string",
|
|
84
|
+
array: true,
|
|
85
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
71
86
|
}
|
|
72
87
|
})
|
|
73
88
|
)
|
|
@@ -92,21 +107,31 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
92
107
|
|
|
93
108
|
(async () => {
|
|
94
109
|
if (argv._[0] === "local-update") {
|
|
95
|
-
await new SdCliLocalUpdate(process.cwd()
|
|
96
|
-
.runAsync(
|
|
110
|
+
await new SdCliLocalUpdate(process.cwd())
|
|
111
|
+
.runAsync({
|
|
112
|
+
confFileRelPath: argv.config ?? "simplysm.json"
|
|
113
|
+
});
|
|
97
114
|
}
|
|
98
115
|
else if (argv._[0] === "watch") {
|
|
99
|
-
await new SdCliWorkspace(process.cwd()
|
|
100
|
-
.watchAsync(
|
|
116
|
+
await new SdCliWorkspace(process.cwd())
|
|
117
|
+
.watchAsync({
|
|
118
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
119
|
+
optNames: argv.options ?? []
|
|
120
|
+
});
|
|
101
121
|
}
|
|
102
122
|
else if (argv._[0] === "build") {
|
|
103
|
-
await new SdCliWorkspace(process.cwd()
|
|
104
|
-
.buildAsync(
|
|
123
|
+
await new SdCliWorkspace(process.cwd())
|
|
124
|
+
.buildAsync({
|
|
125
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
126
|
+
optNames: argv.options ?? []
|
|
127
|
+
});
|
|
105
128
|
}
|
|
106
129
|
else if (argv._[0] === "publish") {
|
|
107
|
-
await new SdCliWorkspace(process.cwd()
|
|
130
|
+
await new SdCliWorkspace(process.cwd())
|
|
108
131
|
.publishAsync({
|
|
109
|
-
noBuild: argv.noBuild
|
|
132
|
+
noBuild: argv.noBuild,
|
|
133
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
134
|
+
optNames: argv.options ?? []
|
|
110
135
|
});
|
|
111
136
|
}
|
|
112
137
|
else {
|
package/src/commons.ts
CHANGED
|
@@ -39,7 +39,7 @@ export interface ISdCliConfig {
|
|
|
39
39
|
localUpdates?: Record<string, string>;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig;
|
|
42
|
+
export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig | ISdCliServerPackageConfig;
|
|
43
43
|
|
|
44
44
|
export interface ISdCliLibPackageConfig {
|
|
45
45
|
type: "library";
|
|
@@ -5,13 +5,12 @@ import * as path from "path";
|
|
|
5
5
|
export class SdCliLocalUpdate {
|
|
6
6
|
private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
7
7
|
|
|
8
|
-
public constructor(private readonly _rootPath: string
|
|
9
|
-
private readonly _configFilePath?: string) {
|
|
8
|
+
public constructor(private readonly _rootPath: string) {
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
public async runAsync(): Promise<void> {
|
|
11
|
+
public async runAsync(opt: { confFileRelPath: string }): Promise<void> {
|
|
13
12
|
this._logger.debug("프로젝트 설정 가져오기...");
|
|
14
|
-
const conf = SdCliConfigUtil.
|
|
13
|
+
const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false);
|
|
15
14
|
if (!conf.localUpdates) return;
|
|
16
15
|
|
|
17
16
|
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
@@ -31,9 +30,9 @@ export class SdCliLocalUpdate {
|
|
|
31
30
|
this._logger.info("로컬 라이브러리 업데이트 완료");
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
public async watchAsync(): Promise<void> {
|
|
33
|
+
public async watchAsync(opt: { confFileRelPath: string }): Promise<void> {
|
|
35
34
|
this._logger.debug("프로젝트 설정 가져오기...");
|
|
36
|
-
const conf = SdCliConfigUtil.
|
|
35
|
+
const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false);
|
|
37
36
|
if (!conf.localUpdates) return;
|
|
38
37
|
|
|
39
38
|
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
@@ -6,24 +6,27 @@ import { Wait } from "@simplysm/sd-core-common";
|
|
|
6
6
|
import os from "os";
|
|
7
7
|
import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
|
|
8
8
|
import semver from "semver/preload";
|
|
9
|
+
import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
10
|
+
import { SdServiceServer } from "@simplysm/sd-service/server";
|
|
11
|
+
import decache from "decache";
|
|
9
12
|
|
|
10
13
|
export class SdCliWorkspace {
|
|
11
14
|
private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
12
15
|
|
|
13
16
|
private readonly _npmConfig: INpmConfig;
|
|
14
|
-
private readonly
|
|
17
|
+
private readonly _serverInfoMap = new Map<string, IServerInfo>();
|
|
15
18
|
|
|
16
|
-
public constructor(private readonly _rootPath: string
|
|
17
|
-
private readonly _configFilePath?: string) {
|
|
19
|
+
public constructor(private readonly _rootPath: string) {
|
|
18
20
|
const npmConfigFilePath = path.resolve(this._rootPath, "package.json");
|
|
19
21
|
this._npmConfig = FsUtil.readJson(npmConfigFilePath);
|
|
20
|
-
|
|
21
|
-
this._config = FsUtil.readJson(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"));
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
public async watchAsync(): Promise<void> {
|
|
24
|
+
public async watchAsync(opt: { confFileRelPath: string; optNames: string[] }): Promise<void> {
|
|
25
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
26
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), true, opt.optNames);
|
|
27
|
+
|
|
25
28
|
this._logger.debug("패키지 목록 구성...");
|
|
26
|
-
const pkgs = await this._getPackagesAsync();
|
|
29
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
27
30
|
|
|
28
31
|
this._logger.debug("패키지 이벤트 설정...");
|
|
29
32
|
let changeCount = 0;
|
|
@@ -49,6 +52,40 @@ export class SdCliWorkspace {
|
|
|
49
52
|
}
|
|
50
53
|
}, 500);
|
|
51
54
|
});
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
if (pkg.type === "server") {
|
|
58
|
+
pkg.on("complete", async (results) => {
|
|
59
|
+
if (results.some((item) => item.severity === "error")) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const entryFileRelPath = pkg.main;
|
|
64
|
+
if (entryFileRelPath === undefined) {
|
|
65
|
+
this._logger.error(`서버패키지(${pkg.name})의 'package.json'에서 'main'필드를 찾을 수 없습니다.`);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const entryFilePath = path.resolve(pkg.rootPath, entryFileRelPath);
|
|
69
|
+
|
|
70
|
+
this._logger.log(`서버(${pkg.name}) 재시작...`);
|
|
71
|
+
const serverInfo = this._serverInfoMap.getOrCreate(pkg.name, {});
|
|
72
|
+
if (serverInfo.server) {
|
|
73
|
+
await serverInfo.server.closeAsync();
|
|
74
|
+
delete serverInfo.server;
|
|
75
|
+
decache(entryFilePath);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
serverInfo.server = (await import(entryFilePath)) as SdServiceServer | undefined;
|
|
79
|
+
if (serverInfo.server === undefined) {
|
|
80
|
+
this._logger.error(`${entryFilePath}(0, 0): 'SdServiceServer'를 'export'해야 합니다.`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
await Wait.until(() => serverInfo.server!.isOpen);
|
|
85
|
+
|
|
86
|
+
this._logger.log(`서버(${pkg.name}) 재시작 완료`);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
52
89
|
}
|
|
53
90
|
|
|
54
91
|
this._logger.debug("빌드를 시작합니다...");
|
|
@@ -61,9 +98,12 @@ export class SdCliWorkspace {
|
|
|
61
98
|
});
|
|
62
99
|
}
|
|
63
100
|
|
|
64
|
-
public async buildAsync(): Promise<void> {
|
|
101
|
+
public async buildAsync(opt: { confFileRelPath: string; optNames: string[] }): Promise<void> {
|
|
102
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
103
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false, opt.optNames);
|
|
104
|
+
|
|
65
105
|
this._logger.debug("패키지 목록 구성...");
|
|
66
|
-
const pkgs = await this._getPackagesAsync();
|
|
106
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
67
107
|
|
|
68
108
|
this._logger.debug("프로젝트 및 패키지 버전 설정...");
|
|
69
109
|
await this._upgradeVersionAsync(pkgs);
|
|
@@ -96,7 +136,10 @@ export class SdCliWorkspace {
|
|
|
96
136
|
}
|
|
97
137
|
}
|
|
98
138
|
|
|
99
|
-
public async publishAsync(opt: { noBuild: boolean }): Promise<void> {
|
|
139
|
+
public async publishAsync(opt: { noBuild: boolean; confFileRelPath: string; optNames: string[] }): Promise<void> {
|
|
140
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
141
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), false, opt.optNames);
|
|
142
|
+
|
|
100
143
|
if (opt.noBuild) {
|
|
101
144
|
this._logger.warn("빌드하지 않고, 배포하는것은 상당히 위험합니다.");
|
|
102
145
|
await this._waitSecMessageAsync("프로세스를 중지하려면, 'CTRL+C'를 누르세요.", 5);
|
|
@@ -112,7 +155,7 @@ export class SdCliWorkspace {
|
|
|
112
155
|
}
|
|
113
156
|
|
|
114
157
|
this._logger.debug("패키지 목록 구성...");
|
|
115
|
-
const pkgs = await this._getPackagesAsync();
|
|
158
|
+
const pkgs = await this._getPackagesAsync(config);
|
|
116
159
|
|
|
117
160
|
this._logger.debug("프로젝트 및 패키지 버전 설정...");
|
|
118
161
|
await this._upgradeVersionAsync(pkgs);
|
|
@@ -182,14 +225,14 @@ export class SdCliWorkspace {
|
|
|
182
225
|
process.stdout.clearLine(0);
|
|
183
226
|
}
|
|
184
227
|
|
|
185
|
-
private async _getPackagesAsync(): Promise<SdCliPackage[]> {
|
|
228
|
+
private async _getPackagesAsync(conf: ISdCliConfig): Promise<SdCliPackage[]> {
|
|
186
229
|
const pkgRootPaths = await this._npmConfig.workspaces?.mapManyAsync(async (item) => await FsUtil.globAsync(item));
|
|
187
230
|
if (!pkgRootPaths) {
|
|
188
231
|
throw new Error("최상위 'package.json'에서 'workspaces'를 찾을 수 없습니다.");
|
|
189
232
|
}
|
|
190
233
|
|
|
191
234
|
return pkgRootPaths.map((pkgRootPath) => {
|
|
192
|
-
const pkgConfig =
|
|
235
|
+
const pkgConfig = conf.packages[path.basename(pkgRootPath)];
|
|
193
236
|
return pkgConfig ? new SdCliPackage(this._rootPath, pkgRootPath, pkgConfig) : undefined;
|
|
194
237
|
}).filterExists();
|
|
195
238
|
}
|
|
@@ -227,3 +270,7 @@ export class SdCliWorkspace {
|
|
|
227
270
|
}
|
|
228
271
|
}
|
|
229
272
|
}
|
|
273
|
+
|
|
274
|
+
interface IServerInfo {
|
|
275
|
+
server?: SdServiceServer;
|
|
276
|
+
}
|
|
@@ -9,10 +9,22 @@ import { SdCliJsLibBuilder } from "../builder/SdCliJsLibBuilder";
|
|
|
9
9
|
export class SdCliPackage extends EventEmitter {
|
|
10
10
|
private readonly _npmConfig: INpmConfig;
|
|
11
11
|
|
|
12
|
+
public get basename(): string {
|
|
13
|
+
return path.basename(this._workspaceRootPath);
|
|
14
|
+
}
|
|
15
|
+
|
|
12
16
|
public get name(): string {
|
|
13
17
|
return this._npmConfig.name;
|
|
14
18
|
}
|
|
15
19
|
|
|
20
|
+
public get main(): string | undefined {
|
|
21
|
+
return this._npmConfig.main;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public get type(): TSdCliPackageConfig["type"] {
|
|
25
|
+
return this._config.type;
|
|
26
|
+
}
|
|
27
|
+
|
|
16
28
|
public get allDependencies(): string[] {
|
|
17
29
|
return [
|
|
18
30
|
...Object.keys(this._npmConfig.dependencies ?? {}),
|
|
@@ -23,11 +35,11 @@ export class SdCliPackage extends EventEmitter {
|
|
|
23
35
|
}
|
|
24
36
|
|
|
25
37
|
public constructor(private readonly _workspaceRootPath: string,
|
|
26
|
-
|
|
38
|
+
public readonly rootPath: string,
|
|
27
39
|
private readonly _config: TSdCliPackageConfig) {
|
|
28
40
|
super();
|
|
29
41
|
|
|
30
|
-
const npmConfigFilePath = path.resolve(this.
|
|
42
|
+
const npmConfigFilePath = path.resolve(this.rootPath, "package.json");
|
|
31
43
|
this._npmConfig = FsUtil.readJson(npmConfigFilePath);
|
|
32
44
|
}
|
|
33
45
|
|
|
@@ -53,19 +65,19 @@ export class SdCliPackage extends EventEmitter {
|
|
|
53
65
|
updateDepVersion(this._npmConfig.devDependencies);
|
|
54
66
|
updateDepVersion(this._npmConfig.peerDependencies);
|
|
55
67
|
|
|
56
|
-
const npmConfigFilePath = path.resolve(this.
|
|
68
|
+
const npmConfigFilePath = path.resolve(this.rootPath, "package.json");
|
|
57
69
|
await FsUtil.writeJsonAsync(npmConfigFilePath, this._npmConfig, { space: 2 });
|
|
58
70
|
}
|
|
59
71
|
|
|
60
72
|
public async watchAsync(): Promise<void> {
|
|
61
|
-
const isTs = FsUtil.exists(path.resolve(this.
|
|
73
|
+
const isTs = FsUtil.exists(path.resolve(this.rootPath, "tsconfig.json"));
|
|
62
74
|
|
|
63
75
|
if (isTs) {
|
|
64
76
|
await this._genBuildTsconfigAsync();
|
|
65
77
|
}
|
|
66
78
|
|
|
67
79
|
const isAngular = isTs && this.allDependencies.includes("@angular/core");
|
|
68
|
-
const builder = !isTs ? new SdCliJsLibBuilder(this.
|
|
80
|
+
const builder = !isTs ? new SdCliJsLibBuilder(this.rootPath) : new SdCliTsLibBuilder(this.rootPath, isAngular);
|
|
69
81
|
|
|
70
82
|
await builder
|
|
71
83
|
.on("change", () => {
|
|
@@ -78,26 +90,26 @@ export class SdCliPackage extends EventEmitter {
|
|
|
78
90
|
}
|
|
79
91
|
|
|
80
92
|
public async buildAsync(): Promise<ISdCliPackageBuildResult[]> {
|
|
81
|
-
const isTs = FsUtil.exists(path.resolve(this.
|
|
93
|
+
const isTs = FsUtil.exists(path.resolve(this.rootPath, "tsconfig.json"));
|
|
82
94
|
|
|
83
95
|
if (isTs) {
|
|
84
96
|
await this._genBuildTsconfigAsync();
|
|
85
97
|
}
|
|
86
98
|
|
|
87
99
|
const isAngular = isTs && this.allDependencies.includes("@angular/core");
|
|
88
|
-
const builder = isTs ? new SdCliTsLibBuilder(this.
|
|
100
|
+
const builder = isTs ? new SdCliTsLibBuilder(this.rootPath, isAngular) : new SdCliJsLibBuilder(this.rootPath);
|
|
89
101
|
|
|
90
102
|
return await builder.buildAsync();
|
|
91
103
|
}
|
|
92
104
|
|
|
93
105
|
public async publishAsync(): Promise<void> {
|
|
94
106
|
if (this._config.type === "library" && this._config.publish === "npm") {
|
|
95
|
-
await SdProcess.execAsync("npm publish --quiet --access public", { cwd: this.
|
|
107
|
+
await SdProcess.execAsync("npm publish --quiet --access public", { cwd: this.rootPath });
|
|
96
108
|
}
|
|
97
109
|
}
|
|
98
110
|
|
|
99
111
|
private async _genBuildTsconfigAsync(): Promise<void> {
|
|
100
|
-
const baseTsconfigFilePath = path.resolve(this.
|
|
112
|
+
const baseTsconfigFilePath = path.resolve(this.rootPath, "tsconfig.json");
|
|
101
113
|
const baseTsconfig: ITsconfig = await FsUtil.readJsonAsync(baseTsconfigFilePath);
|
|
102
114
|
|
|
103
115
|
const buildTsconfig: ITsconfig = ObjectUtil.clone(baseTsconfig);
|
|
@@ -105,7 +117,7 @@ export class SdCliPackage extends EventEmitter {
|
|
|
105
117
|
delete buildTsconfig.compilerOptions.baseUrl;
|
|
106
118
|
delete buildTsconfig.compilerOptions.paths;
|
|
107
119
|
|
|
108
|
-
const buildTsconfigFilePath = path.resolve(this.
|
|
120
|
+
const buildTsconfigFilePath = path.resolve(this.rootPath, "tsconfig-build.json");
|
|
109
121
|
await FsUtil.writeJsonAsync(buildTsconfigFilePath, buildTsconfig, { space: 2 });
|
|
110
122
|
}
|
|
111
123
|
}
|
|
@@ -4,15 +4,15 @@ import { ObjectUtil } from "@simplysm/sd-core-common";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
|
|
6
6
|
export class SdCliConfigUtil {
|
|
7
|
-
public static
|
|
8
|
-
const confFileCont = FsUtil.
|
|
7
|
+
public static async loadConfigAsync(confFilePath: string, isDev: boolean, opts?: string[]): Promise<ISdCliConfig> {
|
|
8
|
+
const confFileCont = await FsUtil.readJsonAsync(confFilePath);
|
|
9
9
|
let conf = this._getConfigFromFileContent(confFileCont, isDev, opts);
|
|
10
10
|
|
|
11
11
|
// extends
|
|
12
12
|
if (conf.extends) {
|
|
13
13
|
for (const extConfFilePath of conf.extends) {
|
|
14
|
-
const extConf = this.
|
|
15
|
-
conf = this._mergeObj(
|
|
14
|
+
const extConf = await this.loadConfigAsync(path.resolve(path.dirname(confFilePath), extConfFilePath), isDev, opts);
|
|
15
|
+
conf = this._mergeObj(extConf, conf);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
delete conf["extends"];
|