@simplysm/sd-cli 7.0.9 → 7.0.15
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.d.ts +1 -0
- package/dist/bin/sd-cli.mjs +8 -2
- package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +2 -2
- package/dist/commons.d.ts +1 -0
- package/dist/entry-points/SdCliLocalUpdate.d.ts +10 -0
- package/dist/entry-points/SdCliLocalUpdate.mjs +90 -0
- package/dist/utils/SdCliConfigUtil.d.ts +1 -1
- package/dist/utils/SdCliConfigUtil.mjs +1 -1
- package/package.json +3 -3
- package/src/bin/sd-cli.ts +8 -1
- package/src/build-tool/SdCliNgCacheCompilerHost.ts +2 -2
- package/src/commons.ts +1 -0
- package/src/entry-points/SdCliLocalUpdate.ts +111 -0
- package/src/utils/SdCliConfigUtil.ts +3 -3
package/dist/bin/sd-cli.d.ts
CHANGED
package/dist/bin/sd-cli.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
import yargs from "yargs";
|
|
2
3
|
import { hideBin } from "yargs/helpers";
|
|
3
4
|
import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
|
|
4
5
|
import { SdCliWorkspace } from "../entry-points/SdCliWorkspace";
|
|
6
|
+
import { SdCliLocalUpdate } from "../entry-points/SdCliLocalUpdate";
|
|
5
7
|
Error.stackTraceLimit = Infinity;
|
|
6
8
|
const argv = yargs(hideBin(process.argv))
|
|
7
9
|
.version(false)
|
|
@@ -63,7 +65,11 @@ else {
|
|
|
63
65
|
}
|
|
64
66
|
const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
65
67
|
(async () => {
|
|
66
|
-
if (argv._[0] === "
|
|
68
|
+
if (argv._[0] === "local-update") {
|
|
69
|
+
await new SdCliLocalUpdate(process.cwd(), argv.config)
|
|
70
|
+
.runAsync();
|
|
71
|
+
}
|
|
72
|
+
else if (argv._[0] === "watch") {
|
|
67
73
|
await new SdCliWorkspace(process.cwd(), argv.config)
|
|
68
74
|
.watchAsync();
|
|
69
75
|
}
|
|
@@ -83,4 +89,4 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
83
89
|
})().catch((err) => {
|
|
84
90
|
logger.error(err);
|
|
85
91
|
});
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QtY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9zZC1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLEtBQUssQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRWpDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDZCxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztLQUNuQixLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztLQUNsQixPQUFPLENBQUM7SUFDUCxLQUFLLEVBQUU7UUFDTCxJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxvQkFBb0I7UUFDOUIsT0FBTyxFQUFFLEtBQUs7S0FDZjtDQUNGLENBQUM7S0FDRCxPQUFPLENBQ04sY0FBYyxFQUNkLHVCQUF1QixFQUN2QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDeEIsT0FBTyxDQUFDO0lBQ1AsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUscUJBQXFCO0tBQ2hDO0NBQ0YsQ0FBQyxDQUNMO0tBQ0EsT0FBTyxDQUNOLE9BQU8sRUFDUCxpQ0FBaUMsRUFDakMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMs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
|
|
@@ -22,7 +22,7 @@ export class SdCliNgCacheCompilerHost {
|
|
|
22
22
|
importer: {
|
|
23
23
|
findFileUrl: (url) => {
|
|
24
24
|
if (!url.startsWith("~"))
|
|
25
|
-
return
|
|
25
|
+
return null;
|
|
26
26
|
return new URL(url.substring(1), pathToFileURL("node_modules"));
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -33,4 +33,4 @@ export class SdCliNgCacheCompilerHost {
|
|
|
33
33
|
return cacheCompilerHost;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlOZ0NhY2hlQ29tcGlsZXJIb3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkLXRvb2wvU2RDbGlOZ0NhY2hlQ29tcGlsZXJIb3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFekMsTUFBTSxPQUFPLHdCQUF3QjtJQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQTZCLEVBQzdCLGVBQXdDO1FBQ3pELE1BQU0saUJBQWlCLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBRTlDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUMvQixLQUFLLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3pFO1lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQ3BDLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FDbkIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO29CQUNsQyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7b0JBQ2pELFFBQVEsRUFBRTt3QkFDUixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dDQUFFLE9BQU8sSUFBSSxDQUFDOzRCQUN0QyxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLENBQUM7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUNILENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0NBQ0YifQ==
|
package/dist/commons.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ export interface ISdCliPackageBuildResult {
|
|
|
32
32
|
}
|
|
33
33
|
export interface ISdCliConfig {
|
|
34
34
|
packages: Record<string, TSdCliPackageConfig | undefined>;
|
|
35
|
+
localUpdates?: Record<string, string>;
|
|
35
36
|
}
|
|
36
37
|
export declare type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig;
|
|
37
38
|
export interface ISdCliLibPackageConfig {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class SdCliLocalUpdate {
|
|
2
|
+
private readonly _rootPath;
|
|
3
|
+
private readonly _configFilePath?;
|
|
4
|
+
private readonly _logger;
|
|
5
|
+
constructor(_rootPath: string, _configFilePath?: string | undefined);
|
|
6
|
+
runAsync(): Promise<void>;
|
|
7
|
+
watchAsync(): Promise<void>;
|
|
8
|
+
private _getUpdatePathInfosAsync;
|
|
9
|
+
protected _getWatchPathsAsync(sourcePath: string): Promise<string[]>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
2
|
+
import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
export class SdCliLocalUpdate {
|
|
5
|
+
constructor(_rootPath, _configFilePath) {
|
|
6
|
+
this._rootPath = _rootPath;
|
|
7
|
+
this._configFilePath = _configFilePath;
|
|
8
|
+
this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
9
|
+
}
|
|
10
|
+
async runAsync() {
|
|
11
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
12
|
+
const conf = SdCliConfigUtil.loadConfig(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"), false);
|
|
13
|
+
if (!conf.localUpdates)
|
|
14
|
+
return;
|
|
15
|
+
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
16
|
+
this._logger.log("로컬 라이브러리 업데이트 시작...");
|
|
17
|
+
for (const updatePathInfo of updatePathInfos) {
|
|
18
|
+
if (!FsUtil.exists(updatePathInfo.source)) {
|
|
19
|
+
this._logger.warn(`소스경로를 찾을 수 없어 무시됩니다(${updatePathInfo.source})`);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// 소스경로에서 대상경로로 파일 복사
|
|
23
|
+
await FsUtil.copyAsync(updatePathInfo.source, updatePathInfo.target, (src) => {
|
|
24
|
+
return !src.includes("node_modules") && !src.endsWith("package.json");
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
this._logger.info("로컬 라이브러리 업데이트 완료");
|
|
28
|
+
}
|
|
29
|
+
async watchAsync() {
|
|
30
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
31
|
+
const conf = SdCliConfigUtil.loadConfig(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"), false);
|
|
32
|
+
if (!conf.localUpdates)
|
|
33
|
+
return;
|
|
34
|
+
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
35
|
+
const watchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
36
|
+
const watcher = SdFsWatcher.watch(watchPaths);
|
|
37
|
+
watcher.onChange(async (changeInfos) => {
|
|
38
|
+
const changeFilePaths = changeInfos.filter((item) => ["add", "change", "unlink"].includes(item.event)).map((item) => item.path);
|
|
39
|
+
if (changeFilePaths.length === 0)
|
|
40
|
+
return;
|
|
41
|
+
this._logger.log("로컬 라이브러리 변경감지...");
|
|
42
|
+
for (const changedFilePath of changeFilePaths) {
|
|
43
|
+
const currentUpdatePathInfos = updatePathInfos.filter((item) => PathUtil.isChildPath(changedFilePath, item.source));
|
|
44
|
+
const targetFilePaths = currentUpdatePathInfos.map((item) => path.resolve(item.target, path.relative(item.source, changedFilePath)));
|
|
45
|
+
if (FsUtil.exists(changedFilePath)) {
|
|
46
|
+
this._logger.debug(`변경파일감지(복사): ${changedFilePath}`);
|
|
47
|
+
for (const targetFilePath of targetFilePaths) {
|
|
48
|
+
await FsUtil.copyAsync(changedFilePath, targetFilePath);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const watchWatchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
53
|
+
watcher.add(watchWatchPaths);
|
|
54
|
+
this._logger.info("로컬 라이브러리 복사 완료");
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async _getUpdatePathInfosAsync(record) {
|
|
58
|
+
const result = [];
|
|
59
|
+
for (const pkgGlobPath of Object.keys(record)) {
|
|
60
|
+
// "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
|
|
61
|
+
const targetPaths = await FsUtil.globAsync(path.resolve(this._rootPath, "node_modules", pkgGlobPath));
|
|
62
|
+
result.push(...targetPaths
|
|
63
|
+
.map((targetPath) => {
|
|
64
|
+
// 대상의 명칭 추출
|
|
65
|
+
const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => (item === "/" ? "[\\\\\\/]"
|
|
66
|
+
: item === "." ? "\\."
|
|
67
|
+
: item === "*" ? "(.*)"
|
|
68
|
+
: item));
|
|
69
|
+
const targetNameMatch = new RegExp(regexpText).exec(targetPath);
|
|
70
|
+
if (!targetNameMatch || typeof targetNameMatch[1] === "undefined")
|
|
71
|
+
return undefined;
|
|
72
|
+
const targetName = targetNameMatch[1];
|
|
73
|
+
// 가져올 소스 경로 추출
|
|
74
|
+
const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
|
|
75
|
+
return { source: sourcePath, target: targetPath };
|
|
76
|
+
})
|
|
77
|
+
.filterExists());
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
async _getWatchPathsAsync(sourcePath) {
|
|
82
|
+
return await FsUtil.globAsync(path.resolve(sourcePath, "**"), {
|
|
83
|
+
ignore: [
|
|
84
|
+
"**/node_modules/**",
|
|
85
|
+
"**/package.json"
|
|
86
|
+
]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlMb2NhbFVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRyeS1wb2ludHMvU2RDbGlMb2NhbFVwZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0MsU0FBaUIsRUFDakIsZUFBd0I7UUFEeEIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixvQkFBZSxHQUFmLGVBQWUsQ0FBUztRQUgzQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBSXJGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEgsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUvQixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN4QyxLQUFLLE1BQU0sY0FBYyxJ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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ISdCliConfig } from "../commons";
|
|
2
2
|
export declare class SdCliConfigUtil {
|
|
3
|
-
static loadConfig(confFilePath: string, isDev
|
|
3
|
+
static loadConfig(confFilePath: string, isDev: boolean, opts?: string[]): ISdCliConfig;
|
|
4
4
|
private static _getConfigFromFileContent;
|
|
5
5
|
private static _getPkgConfigFromFileContent;
|
|
6
6
|
private static _mergeObj;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDb25maWdVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NkQ2xpQ29uZmlnVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixNQUFNLE9BQU8sZUFBZTtJQUNuQixNQUFNLENBQUMsVUFBVSxDQUFDLFlBQW9CLEVBQUUsS0FBYyxFQUFFLElBQWU7UUFDNUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRSxVQUFVO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEtBQUssTUFBTSxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdEM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZCLE9BQU8sSUFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLFlBQXFDLEVBQUUsS0FBYyxFQUFFLElBQWU7UUFDN0csTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.15",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@types/semver": "^7.3.9"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@simplysm/sd-core-common": "7.0.
|
|
39
|
-
"@simplysm/sd-core-node": "7.0.
|
|
38
|
+
"@simplysm/sd-core-common": "7.0.15",
|
|
39
|
+
"@simplysm/sd-core-node": "7.0.15"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/src/bin/sd-cli.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
1
3
|
import yargs from "yargs";
|
|
2
4
|
import { hideBin } from "yargs/helpers";
|
|
3
5
|
import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
|
|
4
6
|
import { SdCliWorkspace } from "../entry-points/SdCliWorkspace";
|
|
7
|
+
import { SdCliLocalUpdate } from "../entry-points/SdCliLocalUpdate";
|
|
5
8
|
|
|
6
9
|
Error.stackTraceLimit = Infinity;
|
|
7
10
|
|
|
@@ -85,7 +88,11 @@ else {
|
|
|
85
88
|
const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
86
89
|
|
|
87
90
|
(async () => {
|
|
88
|
-
if (argv._[0] === "
|
|
91
|
+
if (argv._[0] === "local-update") {
|
|
92
|
+
await new SdCliLocalUpdate(process.cwd(), argv.config)
|
|
93
|
+
.runAsync();
|
|
94
|
+
}
|
|
95
|
+
else if (argv._[0] === "watch") {
|
|
89
96
|
await new SdCliWorkspace(process.cwd(), argv.config)
|
|
90
97
|
.watchAsync();
|
|
91
98
|
}
|
|
@@ -28,7 +28,7 @@ export class SdCliNgCacheCompilerHost {
|
|
|
28
28
|
url: new URL(context.containingFile + ".sd.scss"),
|
|
29
29
|
importer: {
|
|
30
30
|
findFileUrl: (url) => {
|
|
31
|
-
if (!url.startsWith("~")) return
|
|
31
|
+
if (!url.startsWith("~")) return null;
|
|
32
32
|
return new URL(url.substring(1), pathToFileURL("node_modules"));
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -47,4 +47,4 @@ interface IFileCache {
|
|
|
47
47
|
sourceFile?: ts.SourceFile;
|
|
48
48
|
content?: string;
|
|
49
49
|
styleContent?: string;
|
|
50
|
-
}
|
|
50
|
+
}
|
package/src/commons.ts
CHANGED
|
@@ -36,6 +36,7 @@ export interface ISdCliPackageBuildResult {
|
|
|
36
36
|
|
|
37
37
|
export interface ISdCliConfig {
|
|
38
38
|
packages: Record<string, TSdCliPackageConfig | undefined>;
|
|
39
|
+
localUpdates?: Record<string, string>;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliNgLibPackageConfig;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
2
|
+
import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
|
|
5
|
+
export class SdCliLocalUpdate {
|
|
6
|
+
private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
7
|
+
|
|
8
|
+
public constructor(private readonly _rootPath: string,
|
|
9
|
+
private readonly _configFilePath?: string) {
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public async runAsync(): Promise<void> {
|
|
13
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
14
|
+
const conf = SdCliConfigUtil.loadConfig(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"), false);
|
|
15
|
+
if (!conf.localUpdates) return;
|
|
16
|
+
|
|
17
|
+
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
18
|
+
|
|
19
|
+
this._logger.log("로컬 라이브러리 업데이트 시작...");
|
|
20
|
+
for (const updatePathInfo of updatePathInfos) {
|
|
21
|
+
if (!FsUtil.exists(updatePathInfo.source)) {
|
|
22
|
+
this._logger.warn(`소스경로를 찾을 수 없어 무시됩니다(${updatePathInfo.source})`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// 소스경로에서 대상경로로 파일 복사
|
|
27
|
+
await FsUtil.copyAsync(updatePathInfo.source, updatePathInfo.target, (src) => {
|
|
28
|
+
return !src.includes("node_modules") && !src.endsWith("package.json");
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
this._logger.info("로컬 라이브러리 업데이트 완료");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public async watchAsync(): Promise<void> {
|
|
35
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
36
|
+
const conf = SdCliConfigUtil.loadConfig(path.resolve(this._rootPath, this._configFilePath ?? "simplysm.json"), false);
|
|
37
|
+
if (!conf.localUpdates) return;
|
|
38
|
+
|
|
39
|
+
const updatePathInfos = await this._getUpdatePathInfosAsync(conf.localUpdates);
|
|
40
|
+
|
|
41
|
+
const watchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
42
|
+
|
|
43
|
+
const watcher = SdFsWatcher.watch(watchPaths);
|
|
44
|
+
watcher.onChange(async (changeInfos) => {
|
|
45
|
+
const changeFilePaths = changeInfos.filter((item) => ["add", "change", "unlink"].includes(item.event)).map((item) => item.path);
|
|
46
|
+
if (changeFilePaths.length === 0) return;
|
|
47
|
+
|
|
48
|
+
this._logger.log("로컬 라이브러리 변경감지...");
|
|
49
|
+
for (const changedFilePath of changeFilePaths) {
|
|
50
|
+
const currentUpdatePathInfos = updatePathInfos.filter((item) => PathUtil.isChildPath(changedFilePath, item.source));
|
|
51
|
+
const targetFilePaths = currentUpdatePathInfos.map((item) => path.resolve(item.target, path.relative(item.source, changedFilePath)));
|
|
52
|
+
if (FsUtil.exists(changedFilePath)) {
|
|
53
|
+
this._logger.debug(`변경파일감지(복사): ${changedFilePath}`);
|
|
54
|
+
for (const targetFilePath of targetFilePaths) {
|
|
55
|
+
await FsUtil.copyAsync(changedFilePath, targetFilePath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const watchWatchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
61
|
+
watcher.add(watchWatchPaths);
|
|
62
|
+
|
|
63
|
+
this._logger.info("로컬 라이브러리 복사 완료");
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private async _getUpdatePathInfosAsync(record: Record<string, string>): Promise<IUpdatePathInfo[]> {
|
|
68
|
+
const result: IUpdatePathInfo[] = [];
|
|
69
|
+
for (const pkgGlobPath of Object.keys(record)) {
|
|
70
|
+
// "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
|
|
71
|
+
const targetPaths = await FsUtil.globAsync(path.resolve(this._rootPath, "node_modules", pkgGlobPath));
|
|
72
|
+
|
|
73
|
+
result.push(
|
|
74
|
+
...targetPaths
|
|
75
|
+
.map((targetPath) => {
|
|
76
|
+
// 대상의 명칭 추출
|
|
77
|
+
const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => (
|
|
78
|
+
item === "/" ? "[\\\\\\/]"
|
|
79
|
+
: item === "." ? "\\."
|
|
80
|
+
: item === "*" ? "(.*)"
|
|
81
|
+
: item
|
|
82
|
+
));
|
|
83
|
+
const targetNameMatch = new RegExp(regexpText).exec(targetPath);
|
|
84
|
+
if (!targetNameMatch || typeof targetNameMatch[1] === "undefined") return undefined;
|
|
85
|
+
const targetName = targetNameMatch[1];
|
|
86
|
+
|
|
87
|
+
// 가져올 소스 경로 추출
|
|
88
|
+
const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
|
|
89
|
+
return { source: sourcePath, target: targetPath };
|
|
90
|
+
})
|
|
91
|
+
.filterExists()
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected async _getWatchPathsAsync(sourcePath: string): Promise<string[]> {
|
|
99
|
+
return await FsUtil.globAsync(path.resolve(sourcePath, "**"), {
|
|
100
|
+
ignore: [
|
|
101
|
+
"**/node_modules/**",
|
|
102
|
+
"**/package.json"
|
|
103
|
+
]
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
interface IUpdatePathInfo {
|
|
109
|
+
source: string;
|
|
110
|
+
target: string;
|
|
111
|
+
}
|
|
@@ -4,7 +4,7 @@ import { ObjectUtil } from "@simplysm/sd-core-common";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
|
|
6
6
|
export class SdCliConfigUtil {
|
|
7
|
-
public static loadConfig(confFilePath: string, isDev
|
|
7
|
+
public static loadConfig(confFilePath: string, isDev: boolean, opts?: string[]): ISdCliConfig {
|
|
8
8
|
const confFileCont = FsUtil.readJson(confFilePath);
|
|
9
9
|
let conf = this._getConfigFromFileContent(confFileCont, isDev, opts);
|
|
10
10
|
|
|
@@ -20,7 +20,7 @@ export class SdCliConfigUtil {
|
|
|
20
20
|
return conf as ISdCliConfig;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
private static _getConfigFromFileContent(confFileCont: ISdCliConfigFileContent, isDev
|
|
23
|
+
private static _getConfigFromFileContent(confFileCont: ISdCliConfigFileContent, isDev: boolean, opts?: string[]): ISdCliConfigFileContent {
|
|
24
24
|
const conf = ObjectUtil.clone(confFileCont);
|
|
25
25
|
|
|
26
26
|
if (conf.packages) {
|
|
@@ -31,7 +31,7 @@ export class SdCliConfigUtil {
|
|
|
31
31
|
return conf;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
private static _getPkgConfigFromFileContent(confFileCont: ISdCliConfigFileContent, pkgConfFileCont: TSdCliPackageConfigFileContent, isDev
|
|
34
|
+
private static _getPkgConfigFromFileContent(confFileCont: ISdCliConfigFileContent, pkgConfFileCont: TSdCliPackageConfigFileContent, isDev: boolean, opts?: string[]): TSdCliPackageConfig {
|
|
35
35
|
let pkgConf = ObjectUtil.clone(pkgConfFileCont);
|
|
36
36
|
|
|
37
37
|
// override
|