@simplysm/sd-cli 12.15.63 → 12.15.64

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.
@@ -84,27 +84,29 @@ export class SdCliProject {
84
84
  }
85
85
  static async publishAsync(opt) {
86
86
  const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliProject", "publishAsync"]);
87
- logger.debug("npm/yarn 토큰 유효성 체크...");
88
- try {
89
- const npmWhoami = await SdProcess.spawnAsync("npm", ["whoami"]);
90
- if (StringUtils.isNullOrEmpty(npmWhoami.trim())) {
91
- throw new Error();
87
+ logger.debug("프로젝트 설정 가져오기...");
88
+ const projConf = await loadProjConfAsync(process.cwd(), false, opt);
89
+ if (Object.values(projConf.packages).some((item) => item?.publish === "npm")) {
90
+ logger.debug("npm/yarn 토큰 유효성 체크...");
91
+ try {
92
+ const npmWhoami = await SdProcess.spawnAsync("npm", ["whoami"]);
93
+ if (StringUtils.isNullOrEmpty(npmWhoami.trim())) {
94
+ throw new Error();
95
+ }
96
+ logger.debug(`npm 로그인 확인: ${npmWhoami.trim()}`);
97
+ const yarnWhoami = await SdProcess.spawnAsync("yarn", ["npm", "whoami"]);
98
+ if (StringUtils.isNullOrEmpty(yarnWhoami.trim())) {
99
+ throw new Error();
100
+ }
101
+ logger.debug(`yarn 로그인 확인: ${yarnWhoami.trim()}`);
92
102
  }
93
- logger.debug(`npm 로그인 확인: ${npmWhoami.trim()}`);
94
- const yarnWhoami = await SdProcess.spawnAsync("yarn", ["npm", "whoami"]);
95
- if (StringUtils.isNullOrEmpty(yarnWhoami.trim())) {
96
- throw new Error();
103
+ catch {
104
+ throw new Error("npm 토큰이 유효하지 않거나 만료되었습니다.\n" +
105
+ "https://www.npmjs.com/settings/~/tokens 에서 Granular Access Token 생성 후:\n" +
106
+ " npm config set //registry.npmjs.org/:_authToken <토큰>\n" +
107
+ " yarn config set npmAuthToken <토큰> --home");
97
108
  }
98
- logger.debug(`yarn 로그인 확인: ${yarnWhoami.trim()}`);
99
- }
100
- catch {
101
- throw new Error("npm 토큰이 유효하지 않거나 만료되었습니다.\n" +
102
- "https://www.npmjs.com/settings/~/tokens 에서 Granular Access Token 생성 후:\n" +
103
- " npm config set //registry.npmjs.org/:_authToken <토큰>\n" +
104
- " yarn config set npmAuthToken <토큰> --home");
105
109
  }
106
- logger.debug("프로젝트 설정 가져오기...");
107
- const projConf = await loadProjConfAsync(process.cwd(), false, opt);
108
110
  logger.debug("프로젝트 package.json 가져오기...");
109
111
  const projNpmConf = FsUtils.readJson(path.resolve(process.cwd(), "package.json"));
110
112
  if (opt.noBuild) {
@@ -232,27 +232,33 @@ export class SdProjectBuildRunner {
232
232
  return new Set([...workspacePaths, ...localUpdatePaths].map((item) => PathUtils.norm(item)));
233
233
  }
234
234
  static async _restartServerAsync(prevWorker, pkgPath, pkgConfOrPort) {
235
- if (prevWorker) {
236
- await prevWorker.killAsync();
235
+ try {
236
+ if (prevWorker) {
237
+ await prevWorker.killAsync();
238
+ }
239
+ const npmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json"));
240
+ const worker = new SdWorker(import.meta.resolve("../workers/server.worker"), {
241
+ env: {
242
+ NODE_ENV: "development",
243
+ TZ: "Asia/Seoul",
244
+ SD_VERSION: npmConf.version,
245
+ ...(typeof pkgConfOrPort === "number" ? {} : pkgConfOrPort.env),
246
+ },
247
+ resourceLimits: {
248
+ maxOldGenerationSizeMb: 2048,
249
+ maxYoungGenerationSizeMb: 8,
250
+ stackSizeMb: 2,
251
+ },
252
+ });
253
+ const port = await worker.run("listen", [
254
+ typeof pkgConfOrPort === "number" ? pkgConfOrPort : pkgPath,
255
+ ]);
256
+ this._logger.debug("서버가 시작되었습니다.");
257
+ return { worker, port };
258
+ }
259
+ catch (err) {
260
+ this._logger.error("서버 재시작 실패: ", err);
261
+ return {};
237
262
  }
238
- const npmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json"));
239
- const worker = new SdWorker(import.meta.resolve("../workers/server.worker"), {
240
- env: {
241
- NODE_ENV: "development",
242
- TZ: "Asia/Seoul",
243
- SD_VERSION: npmConf.version,
244
- ...(typeof pkgConfOrPort === "number" ? {} : pkgConfOrPort.env),
245
- },
246
- resourceLimits: {
247
- maxOldGenerationSizeMb: 2048,
248
- maxYoungGenerationSizeMb: 8,
249
- stackSizeMb: 2,
250
- },
251
- });
252
- const port = await worker.run("listen", [
253
- typeof pkgConfOrPort === "number" ? pkgConfOrPort : pkgPath,
254
- ]);
255
- this._logger.debug("서버가 시작되었습니다.");
256
- return { worker, port };
257
263
  }
258
264
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "12.15.63",
3
+ "version": "12.15.64",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -17,10 +17,10 @@
17
17
  "@angular/compiler-cli": "^20.3.15",
18
18
  "@anthropic-ai/sdk": "^0.71.2",
19
19
  "@electron/rebuild": "^4.0.2",
20
- "@simplysm/sd-core-common": "12.15.63",
21
- "@simplysm/sd-core-node": "12.15.63",
22
- "@simplysm/sd-service-server": "12.15.63",
23
- "@simplysm/sd-storage": "12.15.63",
20
+ "@simplysm/sd-core-common": "12.15.64",
21
+ "@simplysm/sd-core-node": "12.15.64",
22
+ "@simplysm/sd-service-server": "12.15.64",
23
+ "@simplysm/sd-storage": "12.15.64",
24
24
  "browserslist": "^4.28.1",
25
25
  "cordova": "^13.0.0",
26
26
  "electron": "^33.4.11",
@@ -130,31 +130,33 @@ export class SdCliProject {
130
130
  }): Promise<void> {
131
131
  const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliProject", "publishAsync"]);
132
132
 
133
- logger.debug("npm/yarn 토큰 유효성 체크...");
134
- try {
135
- const npmWhoami = await SdProcess.spawnAsync("npm", ["whoami"]);
136
- if (StringUtils.isNullOrEmpty(npmWhoami.trim())) {
137
- throw new Error();
138
- }
139
- logger.debug(`npm 로그인 확인: ${npmWhoami.trim()}`);
133
+ logger.debug("프로젝트 설정 가져오기...");
134
+ const projConf = await loadProjConfAsync(process.cwd(), false, opt);
135
+
136
+ if (Object.values(projConf.packages).some((item) => item?.publish === "npm")) {
137
+ logger.debug("npm/yarn 토큰 유효성 체크...");
138
+ try {
139
+ const npmWhoami = await SdProcess.spawnAsync("npm", ["whoami"]);
140
+ if (StringUtils.isNullOrEmpty(npmWhoami.trim())) {
141
+ throw new Error();
142
+ }
143
+ logger.debug(`npm 로그인 확인: ${npmWhoami.trim()}`);
140
144
 
141
- const yarnWhoami = await SdProcess.spawnAsync("yarn", ["npm", "whoami"]);
142
- if (StringUtils.isNullOrEmpty(yarnWhoami.trim())) {
143
- throw new Error();
145
+ const yarnWhoami = await SdProcess.spawnAsync("yarn", ["npm", "whoami"]);
146
+ if (StringUtils.isNullOrEmpty(yarnWhoami.trim())) {
147
+ throw new Error();
148
+ }
149
+ logger.debug(`yarn 로그인 확인: ${yarnWhoami.trim()}`);
150
+ } catch {
151
+ throw new Error(
152
+ "npm 토큰이 유효하지 않거나 만료되었습니다.\n" +
153
+ "https://www.npmjs.com/settings/~/tokens 에서 Granular Access Token 생성 후:\n" +
154
+ " npm config set //registry.npmjs.org/:_authToken <토큰>\n" +
155
+ " yarn config set npmAuthToken <토큰> --home",
156
+ );
144
157
  }
145
- logger.debug(`yarn 로그인 확인: ${yarnWhoami.trim()}`);
146
- } catch {
147
- throw new Error(
148
- "npm 토큰이 유효하지 않거나 만료되었습니다.\n" +
149
- "https://www.npmjs.com/settings/~/tokens 에서 Granular Access Token 생성 후:\n" +
150
- " npm config set //registry.npmjs.org/:_authToken <토큰>\n" +
151
- " yarn config set npmAuthToken <토큰> --home"
152
- );
153
158
  }
154
159
 
155
- logger.debug("프로젝트 설정 가져오기...");
156
- const projConf = await loadProjConfAsync(process.cwd(), false, opt);
157
-
158
160
  logger.debug("프로젝트 package.json 가져오기...");
159
161
  const projNpmConf = FsUtils.readJson(path.resolve(process.cwd(), "package.json")) as INpmConfig;
160
162
 
@@ -358,36 +358,41 @@ export class SdProjectBuildRunner {
358
358
  pkgPath: string,
359
359
  pkgConfOrPort: ISdServerPackageConfig | number,
360
360
  ): Promise<{
361
- worker: SdWorker<IServerWorkerType>;
362
- port: number;
361
+ worker?: SdWorker<IServerWorkerType>;
362
+ port?: number;
363
363
  }> {
364
- if (prevWorker) {
365
- await prevWorker.killAsync();
366
- }
364
+ try {
365
+ if (prevWorker) {
366
+ await prevWorker.killAsync();
367
+ }
367
368
 
368
- const npmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json")) as INpmConfig;
369
+ const npmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json")) as INpmConfig;
369
370
 
370
- const worker = new SdWorker<IServerWorkerType>(
371
- import.meta.resolve("../workers/server.worker"),
372
- {
373
- env: {
374
- NODE_ENV: "development",
375
- TZ: "Asia/Seoul",
376
- SD_VERSION: npmConf.version,
377
- ...(typeof pkgConfOrPort === "number" ? {} : pkgConfOrPort.env),
378
- },
379
- resourceLimits: {
380
- maxOldGenerationSizeMb: 2048,
381
- maxYoungGenerationSizeMb: 8,
382
- stackSizeMb: 2,
371
+ const worker = new SdWorker<IServerWorkerType>(
372
+ import.meta.resolve("../workers/server.worker"),
373
+ {
374
+ env: {
375
+ NODE_ENV: "development",
376
+ TZ: "Asia/Seoul",
377
+ SD_VERSION: npmConf.version,
378
+ ...(typeof pkgConfOrPort === "number" ? {} : pkgConfOrPort.env),
379
+ },
380
+ resourceLimits: {
381
+ maxOldGenerationSizeMb: 2048,
382
+ maxYoungGenerationSizeMb: 8,
383
+ stackSizeMb: 2,
384
+ },
383
385
  },
384
- },
385
- );
386
- const port = await worker.run("listen", [
387
- typeof pkgConfOrPort === "number" ? pkgConfOrPort : pkgPath,
388
- ]);
389
- this._logger.debug("서버가 시작되었습니다.");
386
+ );
387
+ const port = await worker.run("listen", [
388
+ typeof pkgConfOrPort === "number" ? pkgConfOrPort : pkgPath,
389
+ ]);
390
+ this._logger.debug("서버가 시작되었습니다.");
390
391
 
391
- return { worker, port };
392
+ return { worker, port };
393
+ } catch (err) {
394
+ this._logger.error("서버 재시작 실패: ", err);
395
+ return {};
396
+ }
392
397
  }
393
398
  }