@simplysm/sd-cli 10.0.21 → 10.0.22

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/commons.d.ts CHANGED
@@ -35,6 +35,7 @@ export interface ISdCliPackageBuildResult {
35
35
  }
36
36
  export interface ISdCliConfig {
37
37
  packages: Record<string, TSdCliPackageConfig | undefined>;
38
+ localUpdates?: Record<string, string>;
38
39
  }
39
40
  export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliServerPackageConfig | ISdCliClientPackageConfig;
40
41
  export interface ISdCliLibPackageConfig {
@@ -0,0 +1,7 @@
1
+ export declare class SdCliLocalUpdate {
2
+ static runAsync(opt: {
3
+ rootPath: string;
4
+ confFileRelPath: string;
5
+ }): Promise<void>;
6
+ private static _getUpdatePathInfosAsync;
7
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdCliLocalUpdate.js","sourceRoot":"","sources":["../../../../src/entry/SdCliLocalUpdate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import path from "path";
2
+ import { FsUtil, Logger } from "@simplysm/sd-core-node";
3
+ import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
4
+ export class SdCliLocalUpdate {
5
+ static async runAsync(opt) {
6
+ const logger = Logger.get(["simplysm", "sd-cli", "SdCliLocalUpdate", "runAsync"]);
7
+ logger.debug("프로젝트 설정 가져오기...");
8
+ const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(opt.rootPath, opt.confFileRelPath), false);
9
+ if (!conf.localUpdates)
10
+ return;
11
+ logger.debug("로컬 업데이트 구성...");
12
+ const updatePathInfos = await this._getUpdatePathInfosAsync(opt.rootPath, conf.localUpdates);
13
+ logger.debug("로컬 업데이트 구성 완료", updatePathInfos);
14
+ logger.log("로컬 라이브러리 업데이트 시작...");
15
+ for (const updatePathInfo of updatePathInfos) {
16
+ if (!FsUtil.exists(updatePathInfo.source)) {
17
+ logger.warn(`소스경로를 찾을 수 없어 무시됩니다(${updatePathInfo.source})`);
18
+ return;
19
+ }
20
+ // 소스경로에서 대상경로로 파일 복사
21
+ await FsUtil.copyAsync(updatePathInfo.source, updatePathInfo.target, (src) => {
22
+ return !src.includes("node_modules") && !src.endsWith("package.json");
23
+ });
24
+ }
25
+ logger.info("로컬 라이브러리 업데이트 완료");
26
+ }
27
+ static async _getUpdatePathInfosAsync(rootPath, record) {
28
+ const result = [];
29
+ for (const pkgGlobPath of Object.keys(record)) {
30
+ // "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
31
+ const targetPaths = [
32
+ ...await FsUtil.globAsync(path.resolve(rootPath, "node_modules", pkgGlobPath)),
33
+ ...await FsUtil.globAsync(path.resolve(rootPath, "**", "node_modules", pkgGlobPath))
34
+ ];
35
+ result.push(...targetPaths
36
+ .map((targetPath) => {
37
+ // 대상의 명칭 추출
38
+ const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => (item === "/" ? "[\\\\\\/]"
39
+ : item === "." ? "\\."
40
+ : item === "*" ? "(.*)"
41
+ : item));
42
+ const targetNameMatch = new RegExp(regexpText).exec(targetPath);
43
+ if (!targetNameMatch || typeof targetNameMatch[1] === "undefined")
44
+ return undefined;
45
+ const targetName = targetNameMatch[1];
46
+ // 가져올 소스 경로 추출
47
+ const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
48
+ return { source: sourcePath, target: targetPath };
49
+ })
50
+ .filterExists());
51
+ }
52
+ return result;
53
+ }
54
+ }
55
+ //# sourceMappingURL=SdCliLocalUpdate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sd-cli.js","sourceRoot":"","sources":["../../../src/sd-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-cli.js","sourceRoot":"","sources":["../../../src/sd-cli.ts"],"names":[],"mappings":"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"}
package/dist/sd-cli.mjs CHANGED
@@ -3,6 +3,7 @@ import { hideBin } from "yargs/helpers";
3
3
  import { SdCliProject } from "./entry/SdCliProject";
4
4
  import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
5
5
  import { EventEmitter } from "events";
6
+ import { SdCliLocalUpdate } from "./entry/SdCliLocalUpdate";
6
7
  Error.stackTraceLimit = Infinity;
7
8
  EventEmitter.defaultMaxListeners = 0;
8
9
  const argv = (await yargs(hideBin(process.argv))
@@ -70,6 +71,13 @@ const argv = (await yargs(hideBin(process.argv))
70
71
  array: true,
71
72
  describe: "수행할 패키지 설정"
72
73
  }
74
+ }))
75
+ .command("local-update", "로컬 라이브러리 업데이트를 수행합니다.", (cmd) => cmd.version(false).hide("help").hide("debug")
76
+ .options({
77
+ config: {
78
+ type: "string",
79
+ describe: "simplysm.json 파일 경로"
80
+ }
73
81
  }))
74
82
  .parseAsync());
75
83
  if (Boolean(argv.debug)) {
@@ -113,6 +121,13 @@ else if (argv._[0] === "publish") {
113
121
  pkgNames: argv.packages ?? []
114
122
  });
115
123
  }
124
+ else if (argv._[0] === "local-update") {
125
+ await SdCliLocalUpdate
126
+ .runAsync({
127
+ rootPath: process.cwd(),
128
+ confFileRelPath: argv.config ?? "simplysm.json"
129
+ });
130
+ }
116
131
  else {
117
132
  throw new Error(`명령어가 잘못 되었습니다.\n\t${argv._[0]}\n`);
118
133
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "10.0.21",
3
+ "version": "10.0.22",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -9,15 +9,15 @@
9
9
  "directory": "packages/sd-cli"
10
10
  },
11
11
  "license": "MIT",
12
- "bin": "./dist/bin/sd-cli.mjs",
12
+ "bin": "./dist/sd-cli.mjs",
13
13
  "type": "module",
14
14
  "engines": {
15
15
  "node": "^20"
16
16
  },
17
17
  "dependencies": {
18
- "@simplysm/sd-core-common": "10.0.21",
19
- "@simplysm/sd-core-node": "10.0.21",
20
- "@simplysm/sd-service-server": "10.0.21",
18
+ "@simplysm/sd-core-common": "10.0.22",
19
+ "@simplysm/sd-core-node": "10.0.22",
20
+ "@simplysm/sd-service-server": "10.0.22",
21
21
  "@vitejs/plugin-react": "^4.0.2",
22
22
  "esbuild": "^0.18.11",
23
23
  "eslint": "^8.44.0",
package/src/commons.ts CHANGED
@@ -39,6 +39,7 @@ export interface ISdCliPackageBuildResult {
39
39
 
40
40
  export interface ISdCliConfig {
41
41
  packages: Record<string, TSdCliPackageConfig | undefined>;
42
+ localUpdates?: Record<string, string>;
42
43
  }
43
44
 
44
45
  export type TSdCliPackageConfig = ISdCliLibPackageConfig | ISdCliServerPackageConfig | ISdCliClientPackageConfig;
@@ -0,0 +1,70 @@
1
+ import path from "path";
2
+ import { FsUtil, Logger } from "@simplysm/sd-core-node";
3
+ import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
4
+
5
+ export class SdCliLocalUpdate {
6
+ public static async runAsync(opt: { rootPath: string; confFileRelPath: string; }): Promise<void> {
7
+ const logger = Logger.get(["simplysm", "sd-cli", "SdCliLocalUpdate", "runAsync"]);
8
+
9
+ logger.debug("프로젝트 설정 가져오기...");
10
+ const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(opt.rootPath, opt.confFileRelPath), false);
11
+ if (!conf.localUpdates) return;
12
+
13
+ logger.debug("로컬 업데이트 구성...");
14
+ const updatePathInfos = await this._getUpdatePathInfosAsync(opt.rootPath, conf.localUpdates);
15
+ logger.debug("로컬 업데이트 구성 완료", updatePathInfos);
16
+
17
+ logger.log("로컬 라이브러리 업데이트 시작...");
18
+ for (const updatePathInfo of updatePathInfos) {
19
+ if (!FsUtil.exists(updatePathInfo.source)) {
20
+ logger.warn(`소스경로를 찾을 수 없어 무시됩니다(${updatePathInfo.source})`);
21
+ return;
22
+ }
23
+
24
+ // 소스경로에서 대상경로로 파일 복사
25
+ await FsUtil.copyAsync(updatePathInfo.source, updatePathInfo.target, (src) => {
26
+ return !src.includes("node_modules") && !src.endsWith("package.json");
27
+ });
28
+ }
29
+ logger.info("로컬 라이브러리 업데이트 완료");
30
+ }
31
+
32
+ private static async _getUpdatePathInfosAsync(rootPath: string, record: Record<string, string>): Promise<IUpdatePathInfo[]> {
33
+ const result: IUpdatePathInfo[] = [];
34
+ for (const pkgGlobPath of Object.keys(record)) {
35
+ // "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
36
+ const targetPaths = [
37
+ ...await FsUtil.globAsync(path.resolve(rootPath, "node_modules", pkgGlobPath)),
38
+ ...await FsUtil.globAsync(path.resolve(rootPath, "**", "node_modules", pkgGlobPath))
39
+ ];
40
+
41
+ result.push(
42
+ ...targetPaths
43
+ .map((targetPath) => {
44
+ // 대상의 명칭 추출
45
+ const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => (
46
+ item === "/" ? "[\\\\\\/]"
47
+ : item === "." ? "\\."
48
+ : item === "*" ? "(.*)"
49
+ : item
50
+ ));
51
+ const targetNameMatch = new RegExp(regexpText).exec(targetPath);
52
+ if (!targetNameMatch || typeof targetNameMatch[1] === "undefined") return undefined;
53
+ const targetName = targetNameMatch[1];
54
+
55
+ // 가져올 소스 경로 추출
56
+ const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
57
+ return { source: sourcePath, target: targetPath };
58
+ })
59
+ .filterExists()
60
+ );
61
+ }
62
+
63
+ return result;
64
+ }
65
+ }
66
+
67
+ interface IUpdatePathInfo {
68
+ source: string;
69
+ target: string;
70
+ }
package/src/sd-cli.ts CHANGED
@@ -3,6 +3,7 @@ import { hideBin } from "yargs/helpers";
3
3
  import { SdCliProject } from "./entry/SdCliProject";
4
4
  import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
5
5
  import { EventEmitter } from "events";
6
+ import { SdCliLocalUpdate } from "./entry/SdCliLocalUpdate";
6
7
 
7
8
  Error.stackTraceLimit = Infinity;
8
9
  EventEmitter.defaultMaxListeners = 0;
@@ -86,6 +87,17 @@ const argv = (
86
87
  }
87
88
  })
88
89
  )
90
+ .command(
91
+ "local-update",
92
+ "로컬 라이브러리 업데이트를 수행합니다.",
93
+ (cmd) => cmd.version(false).hide("help").hide("debug")
94
+ .options({
95
+ config: {
96
+ type: "string",
97
+ describe: "simplysm.json 파일 경로"
98
+ }
99
+ })
100
+ )
89
101
  .parseAsync()
90
102
  ) as any;
91
103
 
@@ -131,6 +143,13 @@ else if (argv._[0] === "publish") {
131
143
  pkgNames: argv.packages ?? []
132
144
  });
133
145
  }
146
+ else if (argv._[0] === "local-update") {
147
+ await SdCliLocalUpdate
148
+ .runAsync({
149
+ rootPath: process.cwd(),
150
+ confFileRelPath: argv.config ?? "simplysm.json"
151
+ });
152
+ }
134
153
  else {
135
154
  throw new Error(`명령어가 잘못 되었습니다.\n\t${argv._[0]}\n`);
136
155
  }