@simplysm/sd-cli 10.0.35 → 10.0.37
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/SdLinter.js.map +1 -1
- package/dist/SdTsIncrementalBuilder.d.ts +1 -1
- package/dist/SdTsIncrementalBuilder.js +17 -7
- package/dist/SdTsIncrementalBuilder.js.map +1 -1
- package/dist/build-cluster.js.map +1 -1
- package/dist/builders/SdCliClientBuilder.js +50 -7
- package/dist/builders/SdCliClientBuilder.js.map +1 -1
- package/dist/builders/SdCliJsLibLinter.js.map +1 -1
- package/dist/builders/SdCliServerBuilder.js +32 -3
- package/dist/builders/SdCliServerBuilder.js.map +1 -1
- package/dist/builders/SdCliTsLibBuilder.js +2 -2
- package/dist/builders/SdCliTsLibBuilder.js.map +1 -1
- package/dist/commons.d.ts +1 -0
- package/dist/commons.js.map +1 -1
- package/dist/entry/SdCliProject.js +0 -5
- package/dist/entry/SdCliProject.js.map +1 -1
- package/dist/sd-cli.js +0 -15
- package/dist/sd-cli.js.map +1 -1
- package/dist/server-worker.js.map +1 -1
- package/dist/utils/SdCliBuildResultUtil.js.map +1 -1
- package/dist/utils/SdCliConfigUtil.js.map +1 -1
- package/package.json +5 -5
- package/src/SdTsIncrementalBuilder.ts +18 -7
- package/src/builders/SdCliClientBuilder.ts +52 -8
- package/src/builders/SdCliServerBuilder.ts +38 -3
- package/src/builders/SdCliTsLibBuilder.ts +2 -2
- package/src/commons.ts +2 -0
- package/src/entry/SdCliProject.ts +1 -7
- package/src/sd-cli.ts +0 -19
- package/dist/entry/SdCliLocalUpdate.d.ts +0 -12
- package/dist/entry/SdCliLocalUpdate.js +0 -100
- package/dist/entry/SdCliLocalUpdate.js.map +0 -1
- package/src/entry/SdCliLocalUpdate.ts +0 -122
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-worker.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"server-worker.js","sourceRoot":"","sources":["../src/server-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AACjC,YAAY,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAErC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE;IACpC,MAAM,CAAC,SAAS,CAAC;QACf,OAAO,EAAE;YACP,KAAK,EAAE,cAAc,CAAC,KAAK;SAC5B;KACF,CAAC,CAAC;CACJ;KACI;IACH,MAAM,CAAC,SAAS,CAAC;QACf,GAAG,EAAE,IAAI;KACV,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;AAEnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAE3D,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAsC,CAAC;AACnE,IAAI,MAAM,KAAK,SAAS,EAAE;IACxB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,4CAA4C,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,EAAE,CAAC;CAChB;AAED,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IACtB,OAAO,CAAC,IAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAY,EAAE,EAAE;IACrC,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE;QACnC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;KACtC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdCliBuildResultUtil.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"SdCliBuildResultUtil.js","sourceRoot":"","sources":["../../src/utils/SdCliBuildResultUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,OAAO,oBAAoB;IACxB,MAAM,CAAC,iBAAiB,CAAC,IAAmB;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAgB;YAC/E,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAkB;gBACpE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,YAAqB;oBAC1E,CAAC,CAAC,SAAkB,CAAC;QAE3B,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAG1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzH,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3D,OAAO;YACL,QAAQ;YACR,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,QAAQ;YACR,OAAO;SACR,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAgC;QACvD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;YACjC,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;SACzE;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC7B,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC;SAC3B;QACD,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9C,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdCliConfigUtil.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"SdCliConfigUtil.js","sourceRoot":"","sources":["../../src/utils/SdCliConfigUtil.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.37",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"node": "^18"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@simplysm/sd-core-common": "10.0.
|
|
19
|
-
"@simplysm/sd-core-node": "10.0.
|
|
20
|
-
"@simplysm/sd-service-server": "10.0.
|
|
18
|
+
"@simplysm/sd-core-common": "10.0.37",
|
|
19
|
+
"@simplysm/sd-core-node": "10.0.37",
|
|
20
|
+
"@simplysm/sd-service-server": "10.0.37",
|
|
21
21
|
"@vitejs/plugin-react": "^4.0.3",
|
|
22
22
|
"esbuild": "^0.18.11",
|
|
23
23
|
"eslint": "^8.44.0",
|
|
24
24
|
"rollup": "^3.26.2",
|
|
25
|
-
"sass": "^1.63.6",
|
|
26
25
|
"semver": "^7.5.4",
|
|
27
26
|
"typescript": "^4.9.5",
|
|
28
27
|
"vite": "^4.4.2",
|
|
28
|
+
"vite-plugin-node-polyfills": "^0.9.0",
|
|
29
29
|
"vite-tsconfig-paths": "^4.2.0",
|
|
30
30
|
"yargs": "^17.7.2"
|
|
31
31
|
},
|
|
@@ -14,11 +14,15 @@ export class SdTsIncrementalBuilder {
|
|
|
14
14
|
private readonly _emitJs: boolean) {
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
public static async createAsync(pkgPath: string, emitJs: boolean): Promise<SdTsIncrementalBuilder> {
|
|
17
|
+
public static async createAsync(pkgPath: string, emitJs: boolean, dev: boolean): Promise<SdTsIncrementalBuilder> {
|
|
18
18
|
const tsConfigFilePath = path.resolve(pkgPath, "tsconfig.json");
|
|
19
19
|
const parsedTsConfig = ts.parseJsonConfigFileContent(await FsUtil.readJsonAsync(tsConfigFilePath), ts.sys, pkgPath);
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const tsCompilerOptions = parsedTsConfig.options.jsx === ts.JsxEmit.ReactJSX && dev ? {
|
|
21
|
+
...parsedTsConfig.options,
|
|
22
|
+
jsx: ts.JsxEmit.ReactJSXDev
|
|
23
|
+
} : parsedTsConfig.options;
|
|
24
|
+
const host = ts.createIncrementalCompilerHost(tsCompilerOptions);
|
|
25
|
+
return new SdTsIncrementalBuilder(pkgPath, tsCompilerOptions, host, emitJs);
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
public async buildAsync(): Promise<{
|
|
@@ -55,15 +59,22 @@ export class SdTsIncrementalBuilder {
|
|
|
55
59
|
|
|
56
60
|
if ("fileName" in semanticResult.affected) {
|
|
57
61
|
const emitResult = this.builderProgram.emit(semanticResult.affected, (filePath, data, writeByteOrderMark) => {
|
|
58
|
-
let realFilePath = filePath;
|
|
62
|
+
let realFilePath = filePath;
|
|
63
|
+
let realData = data;
|
|
59
64
|
if (PathUtil.isChildPath(realFilePath, path.resolve(this._pkgPath, "dist", path.basename(this._pkgPath), "src"))) {
|
|
60
65
|
realFilePath = path.resolve(this._pkgPath, "dist", path.relative(path.resolve(this._pkgPath, "dist", path.basename(this._pkgPath), "src"), realFilePath));
|
|
66
|
+
|
|
67
|
+
if (filePath.endsWith(".js.map")) {
|
|
68
|
+
const sourceMapContents = JSON.parse(realData);
|
|
69
|
+
sourceMapContents.sources[0] = sourceMapContents.sources[0].slice(6);
|
|
70
|
+
realData = JSON.stringify(sourceMapContents);
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
73
|
|
|
63
|
-
if (this._writeFileCache.get(realFilePath) !==
|
|
64
|
-
this._host.writeFile(realFilePath,
|
|
74
|
+
if (this._writeFileCache.get(realFilePath) !== realData) {
|
|
75
|
+
this._host.writeFile(realFilePath, realData, writeByteOrderMark);
|
|
65
76
|
}
|
|
66
|
-
this._writeFileCache.set(realFilePath,
|
|
77
|
+
this._writeFileCache.set(realFilePath, realData);
|
|
67
78
|
}, undefined, !this._emitJs);
|
|
68
79
|
diagnostics.push(...emitResult.diagnostics);
|
|
69
80
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
2
|
import { FsUtil, Logger, SdFsWatcher } from "@simplysm/sd-core-node";
|
|
3
|
-
import { ISdCliBuilderResult, ISdCliPackageBuildResult } from "../commons";
|
|
3
|
+
import { INpmConfig, ISdCliBuilderResult, ISdCliPackageBuildResult } from "../commons";
|
|
4
4
|
import { FunctionQueue, MathUtil } from "@simplysm/sd-core-common";
|
|
5
5
|
import * as vite from "vite";
|
|
6
|
-
import { createLogger } from "vite";
|
|
7
6
|
import vitePluginReact from "@vitejs/plugin-react";
|
|
8
7
|
import vitePluginPaths from "vite-tsconfig-paths";
|
|
9
8
|
import path from "path";
|
|
10
9
|
import { SdTsIncrementalBuilder } from "../SdTsIncrementalBuilder";
|
|
11
10
|
import { SdLinter } from "../SdLinter";
|
|
11
|
+
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
|
12
12
|
|
|
13
13
|
export class SdCliClientBuilder extends EventEmitter {
|
|
14
14
|
private readonly _logger = Logger.get(["simplysm", "sd-cli", "SdCliClientBuilder"]);
|
|
@@ -26,7 +26,12 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
26
26
|
|
|
27
27
|
public async watchAsync(): Promise<number> {
|
|
28
28
|
this._debug("빌드 준비...");
|
|
29
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false);
|
|
29
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false, true);
|
|
30
|
+
const pkgNpmConfig: INpmConfig = await FsUtil.readJsonAsync(path.resolve(this._pkgPath, "package.json"));
|
|
31
|
+
const projNpmConfig: INpmConfig = await FsUtil.readJsonAsync(path.resolve(this._pkgPath, "../../package.json"));
|
|
32
|
+
|
|
33
|
+
this._debug("dist 초기화...");
|
|
34
|
+
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
|
30
35
|
|
|
31
36
|
this.emit("change");
|
|
32
37
|
|
|
@@ -37,14 +42,37 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
37
42
|
root: path.resolve(this._pkgPath, "src"),
|
|
38
43
|
cacheDir: path.resolve(this._pkgPath, ".cache", "vite"),
|
|
39
44
|
base: "/" + path.basename(this._pkgPath) + "/",
|
|
45
|
+
define: {
|
|
46
|
+
"import.meta.env.SD_VERSION": JSON.stringify(pkgNpmConfig.version)
|
|
47
|
+
},
|
|
48
|
+
build: {},
|
|
49
|
+
esbuild: {
|
|
50
|
+
jsxDev: true
|
|
51
|
+
},
|
|
52
|
+
optimizeDeps: {
|
|
53
|
+
force: true,
|
|
54
|
+
...projNpmConfig.resolutions ? {
|
|
55
|
+
exclude: Object.keys(projNpmConfig.resolutions),
|
|
56
|
+
include: ["react-dom"]
|
|
57
|
+
} : {}
|
|
58
|
+
},
|
|
59
|
+
resolve: {
|
|
60
|
+
preserveSymlinks: true
|
|
61
|
+
},
|
|
40
62
|
server: {
|
|
41
63
|
port: viteServerPort,
|
|
42
64
|
hmr: {
|
|
43
65
|
port: viteServerPort
|
|
44
66
|
},
|
|
67
|
+
fs: {
|
|
68
|
+
allow: [
|
|
69
|
+
vite.searchForWorkspaceRoot(process.cwd()),
|
|
70
|
+
...projNpmConfig.resolutions ? Object.values(projNpmConfig.resolutions).map((item) => vite.searchForWorkspaceRoot(item.slice(8))) : []
|
|
71
|
+
].distinct()
|
|
72
|
+
}
|
|
45
73
|
},
|
|
46
74
|
customLogger: {
|
|
47
|
-
...createLogger(),
|
|
75
|
+
...vite.createLogger(),
|
|
48
76
|
info: (msg) => {
|
|
49
77
|
this._logger.debug(`[${path.basename(this._pkgPath)}] ${msg}`);
|
|
50
78
|
},
|
|
@@ -58,6 +86,11 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
58
86
|
plugins: [
|
|
59
87
|
vitePluginReact(),
|
|
60
88
|
vitePluginPaths(),
|
|
89
|
+
nodePolyfills({
|
|
90
|
+
globals: {
|
|
91
|
+
Buffer: true
|
|
92
|
+
}
|
|
93
|
+
}),
|
|
61
94
|
{
|
|
62
95
|
name: "simplysm",
|
|
63
96
|
configureServer: (server: vite.ViteDevServer) => {
|
|
@@ -114,7 +147,8 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
114
147
|
|
|
115
148
|
public async buildAsync(): Promise<ISdCliBuilderResult> {
|
|
116
149
|
this._debug("빌드 준비...");
|
|
117
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false);
|
|
150
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false, false);
|
|
151
|
+
const pkgNpmConfig: INpmConfig = await FsUtil.readJsonAsync(path.resolve(this._pkgPath, "package.json"));
|
|
118
152
|
|
|
119
153
|
this._debug("dist 초기화...");
|
|
120
154
|
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
|
@@ -127,11 +161,20 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
127
161
|
root: path.resolve(this._pkgPath, "src"),
|
|
128
162
|
cacheDir: path.resolve(this._pkgPath, ".cache", "vite"),
|
|
129
163
|
base: "/" + path.basename(this._pkgPath) + "/",
|
|
164
|
+
define: {
|
|
165
|
+
"import.meta.env.SD_VERSION": JSON.stringify(pkgNpmConfig.version)
|
|
166
|
+
},
|
|
167
|
+
optimizeDeps: {
|
|
168
|
+
force: true
|
|
169
|
+
},
|
|
170
|
+
resolve: {
|
|
171
|
+
preserveSymlinks: true
|
|
172
|
+
},
|
|
130
173
|
build: {
|
|
131
|
-
outDir: path.resolve(this._pkgPath, "dist")
|
|
174
|
+
outDir: path.resolve(this._pkgPath, "dist"),
|
|
132
175
|
},
|
|
133
176
|
customLogger: {
|
|
134
|
-
...createLogger(),
|
|
177
|
+
...vite.createLogger(),
|
|
135
178
|
info: (msg) => {
|
|
136
179
|
this._logger.debug(`[${path.basename(this._pkgPath)}] ${msg}`);
|
|
137
180
|
},
|
|
@@ -144,7 +187,8 @@ export class SdCliClientBuilder extends EventEmitter {
|
|
|
144
187
|
},
|
|
145
188
|
plugins: [
|
|
146
189
|
vitePluginReact(),
|
|
147
|
-
vitePluginPaths()
|
|
190
|
+
vitePluginPaths(),
|
|
191
|
+
nodePolyfills(),
|
|
148
192
|
],
|
|
149
193
|
});
|
|
150
194
|
}
|
|
@@ -24,7 +24,7 @@ export class SdCliServerBuilder extends EventEmitter {
|
|
|
24
24
|
|
|
25
25
|
public async watchAsync(): Promise<void> {
|
|
26
26
|
this._debug("빌드 준비...");
|
|
27
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false);
|
|
27
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false, true);
|
|
28
28
|
|
|
29
29
|
this._debug("dist 초기화...");
|
|
30
30
|
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
|
@@ -47,6 +47,9 @@ export class SdCliServerBuilder extends EventEmitter {
|
|
|
47
47
|
format: "esm",
|
|
48
48
|
// outExtension: { ".js": ".mjs" },
|
|
49
49
|
resolveExtensions: [".js", ".mjs", ".cjs", ".jsx", ".ts", ".tsx"],
|
|
50
|
+
loader: {
|
|
51
|
+
".pfx": "binary"
|
|
52
|
+
},
|
|
50
53
|
platform: "node",
|
|
51
54
|
logLevel: "silent",
|
|
52
55
|
outfile: path.resolve(this._pkgPath, "dist", "main.js"),
|
|
@@ -110,7 +113,20 @@ const __dirname = __path__.dirname(__filename);`.trim()
|
|
|
110
113
|
this._logger.error(err);
|
|
111
114
|
}
|
|
112
115
|
});
|
|
113
|
-
}
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "jsdom-patch",
|
|
120
|
+
setup: ({ onLoad }) => {
|
|
121
|
+
onLoad({ filter: /XMLHttpRequest-impl\.js$/ }, async (args) => {
|
|
122
|
+
let contents = await FsUtil.readFileAsync(args.path);
|
|
123
|
+
contents = contents.replace(
|
|
124
|
+
'./xhr-sync-worker.js',
|
|
125
|
+
'jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js'
|
|
126
|
+
);
|
|
127
|
+
return { contents };
|
|
128
|
+
});
|
|
129
|
+
},
|
|
114
130
|
}
|
|
115
131
|
]
|
|
116
132
|
});
|
|
@@ -119,7 +135,7 @@ const __dirname = __path__.dirname(__filename);`.trim()
|
|
|
119
135
|
|
|
120
136
|
public async buildAsync(): Promise<ISdCliBuilderResult> {
|
|
121
137
|
this._debug("빌드 준비...");
|
|
122
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false);
|
|
138
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, false, false);
|
|
123
139
|
|
|
124
140
|
this._debug("dist 초기화...");
|
|
125
141
|
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
|
@@ -138,6 +154,10 @@ const __dirname = __path__.dirname(__filename);`.trim()
|
|
|
138
154
|
write: true,
|
|
139
155
|
format: "esm",
|
|
140
156
|
// outExtension: { ".js": ".mjs" },
|
|
157
|
+
resolveExtensions: [".js", ".mjs", ".cjs", ".jsx", ".ts", ".tsx"],
|
|
158
|
+
loader: {
|
|
159
|
+
".pfx": "binary"
|
|
160
|
+
},
|
|
141
161
|
platform: "node",
|
|
142
162
|
logLevel: "silent",
|
|
143
163
|
outfile: path.resolve(this._pkgPath, "dist", "main.js"),
|
|
@@ -152,6 +172,21 @@ const require = __createRequire__(import.meta.url);
|
|
|
152
172
|
const __filename = __fileURLToPath__(import.meta.url);
|
|
153
173
|
const __dirname = __path__.dirname(__filename);`.trim()
|
|
154
174
|
},
|
|
175
|
+
plugins: [
|
|
176
|
+
{
|
|
177
|
+
name: "jsdom-patch",
|
|
178
|
+
setup: ({ onLoad }) => {
|
|
179
|
+
onLoad({ filter: /XMLHttpRequest-impl\.js$/ }, async (args) => {
|
|
180
|
+
let contents = await FsUtil.readFileAsync(args.path);
|
|
181
|
+
contents = contents.replace(
|
|
182
|
+
'./xhr-sync-worker.js',
|
|
183
|
+
'jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js'
|
|
184
|
+
);
|
|
185
|
+
return { contents };
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
}
|
|
189
|
+
]
|
|
155
190
|
});
|
|
156
191
|
|
|
157
192
|
const buildResults = [
|
|
@@ -22,7 +22,7 @@ export class SdCliTsLibBuilder extends EventEmitter {
|
|
|
22
22
|
|
|
23
23
|
public async buildAsync(): Promise<ISdCliBuilderResult> {
|
|
24
24
|
this._debug("빌드 준비...");
|
|
25
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, true);
|
|
25
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, true, false);
|
|
26
26
|
|
|
27
27
|
this._debug("dist 초기화...");
|
|
28
28
|
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
|
@@ -42,7 +42,7 @@ export class SdCliTsLibBuilder extends EventEmitter {
|
|
|
42
42
|
|
|
43
43
|
public async watchAsync(): Promise<void> {
|
|
44
44
|
this._debug("빌드 준비...");
|
|
45
|
-
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, true);
|
|
45
|
+
const sdTsProgram = await SdTsIncrementalBuilder.createAsync(this._pkgPath, true, true);
|
|
46
46
|
|
|
47
47
|
this._debug("dist 초기화...");
|
|
48
48
|
await FsUtil.removeAsync(path.resolve(this._pkgPath, "dist"));
|
package/src/commons.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface INpmConfig {
|
|
|
8
8
|
devDependencies?: Record<string, string>;
|
|
9
9
|
peerDependencies?: Record<string, string>;
|
|
10
10
|
peerDependenciesMeta?: Record<string, { optional?: boolean }>;
|
|
11
|
+
|
|
12
|
+
resolutions?: Record<string, string>;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export interface ISdCliBuildClusterReqMessage {
|
|
@@ -13,7 +13,6 @@ import { fileURLToPath } from "url";
|
|
|
13
13
|
import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
|
|
14
14
|
import semver from "semver";
|
|
15
15
|
import { NotImplementError, Wait } from "@simplysm/sd-core-common";
|
|
16
|
-
import { SdCliLocalUpdate } from "./SdCliLocalUpdate";
|
|
17
16
|
|
|
18
17
|
export class SdCliProject {
|
|
19
18
|
public static async watchAsync(opt: {
|
|
@@ -27,11 +26,6 @@ export class SdCliProject {
|
|
|
27
26
|
logger.debug("프로젝트 설정 가져오기...");
|
|
28
27
|
const projConf = await SdCliConfigUtil.loadConfigAsync(path.resolve(opt.rootPath, opt.confFileRelPath), false, opt.optNames);
|
|
29
28
|
|
|
30
|
-
if (projConf.localUpdates) {
|
|
31
|
-
logger.debug("로컬 라이브러리 업데이트 변경감지 시작...");
|
|
32
|
-
await SdCliLocalUpdate.watchAsync({ rootPath: opt.rootPath, confFileRelPath: opt.confFileRelPath });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
29
|
logger.debug("프로젝트 package.json 가져오기...");
|
|
36
30
|
const projNpmConf = FsUtil.readJson(path.resolve(opt.rootPath, "package.json"));
|
|
37
31
|
|
|
@@ -202,7 +196,7 @@ export class SdCliProject {
|
|
|
202
196
|
noBuild: boolean;
|
|
203
197
|
confFileRelPath: string;
|
|
204
198
|
optNames: string[];
|
|
205
|
-
pkgNames: string[]
|
|
199
|
+
pkgNames: string[];
|
|
206
200
|
}): Promise<void> {
|
|
207
201
|
const logger = Logger.get(["simplysm", "sd-cli", "SdCliProject", "publishAsync"]);
|
|
208
202
|
|
package/src/sd-cli.ts
CHANGED
|
@@ -5,7 +5,6 @@ import { hideBin } from "yargs/helpers";
|
|
|
5
5
|
import { SdCliProject } from "./entry/SdCliProject";
|
|
6
6
|
import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
|
|
7
7
|
import { EventEmitter } from "events";
|
|
8
|
-
import { SdCliLocalUpdate } from "./entry/SdCliLocalUpdate";
|
|
9
8
|
|
|
10
9
|
Error.stackTraceLimit = Infinity;
|
|
11
10
|
EventEmitter.defaultMaxListeners = 0;
|
|
@@ -89,17 +88,6 @@ const argv = (
|
|
|
89
88
|
}
|
|
90
89
|
})
|
|
91
90
|
)
|
|
92
|
-
.command(
|
|
93
|
-
"local-update",
|
|
94
|
-
"로컬 라이브러리 업데이트를 수행합니다.",
|
|
95
|
-
(cmd) => cmd.version(false).hide("help").hide("debug")
|
|
96
|
-
.options({
|
|
97
|
-
config: {
|
|
98
|
-
type: "string",
|
|
99
|
-
describe: "simplysm.json 파일 경로"
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
)
|
|
103
91
|
.parseAsync()
|
|
104
92
|
) as any;
|
|
105
93
|
|
|
@@ -145,13 +133,6 @@ else if (argv._[0] === "publish") {
|
|
|
145
133
|
pkgNames: argv.packages ?? []
|
|
146
134
|
});
|
|
147
135
|
}
|
|
148
|
-
else if (argv._[0] === "local-update") {
|
|
149
|
-
await SdCliLocalUpdate
|
|
150
|
-
.runAsync({
|
|
151
|
-
rootPath: process.cwd(),
|
|
152
|
-
confFileRelPath: argv.config ?? "simplysm.json"
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
136
|
else {
|
|
156
137
|
throw new Error(`명령어가 잘못 되었습니다.\n\t${argv._[0]}\n`);
|
|
157
138
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare class SdCliLocalUpdate {
|
|
2
|
-
static runAsync(opt: {
|
|
3
|
-
rootPath: string;
|
|
4
|
-
confFileRelPath: string;
|
|
5
|
-
}): Promise<void>;
|
|
6
|
-
static watchAsync(opt: {
|
|
7
|
-
rootPath: string;
|
|
8
|
-
confFileRelPath: string;
|
|
9
|
-
}): Promise<void>;
|
|
10
|
-
private static _getWatchPathsAsync;
|
|
11
|
-
private static _getUpdatePathInfosAsync;
|
|
12
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import { FsUtil, Logger, PathUtil, SdFsWatcher } 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 watchAsync(opt) {
|
|
28
|
-
const logger = Logger.get(["simplysm", "sd-cli", "SdCliLocalUpdate", "watchAsync"]);
|
|
29
|
-
logger.debug("프로젝트 설정 가져오기...");
|
|
30
|
-
const conf = await SdCliConfigUtil.loadConfigAsync(path.resolve(opt.rootPath, opt.confFileRelPath), false);
|
|
31
|
-
if (!conf.localUpdates)
|
|
32
|
-
return;
|
|
33
|
-
logger.debug("로컬 업데이트 구성...");
|
|
34
|
-
const updatePathInfos = await this._getUpdatePathInfosAsync(opt.rootPath, conf.localUpdates);
|
|
35
|
-
logger.debug("로컬 업데이트 구성 완료", updatePathInfos);
|
|
36
|
-
const watchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
37
|
-
const watcher = SdFsWatcher.watch(watchPaths);
|
|
38
|
-
watcher.onChange({ delay: 1000 }, async (changedInfos) => {
|
|
39
|
-
const changeFilePaths = changedInfos.filter((item) => ["add", "change", "unlink"].includes(item.event)).map((item) => item.path);
|
|
40
|
-
if (changeFilePaths.length === 0)
|
|
41
|
-
return;
|
|
42
|
-
logger.log("로컬 라이브러리 변경감지...");
|
|
43
|
-
for (const changedFilePath of changeFilePaths) {
|
|
44
|
-
if (!FsUtil.exists(changedFilePath))
|
|
45
|
-
continue;
|
|
46
|
-
for (const updatePathInfo of updatePathInfos) {
|
|
47
|
-
if (!PathUtil.isChildPath(changedFilePath, updatePathInfo.source))
|
|
48
|
-
continue;
|
|
49
|
-
const sourceRelPath = path.relative(updatePathInfo.source, changedFilePath);
|
|
50
|
-
if (sourceRelPath.includes("node_modules"))
|
|
51
|
-
continue;
|
|
52
|
-
if (sourceRelPath.includes("package.json"))
|
|
53
|
-
continue;
|
|
54
|
-
const targetFilePath = path.resolve(updatePathInfo.target, sourceRelPath);
|
|
55
|
-
logger.debug(`변경파일감지(복사): ${changedFilePath} => ${targetFilePath}`);
|
|
56
|
-
await FsUtil.copyAsync(changedFilePath, targetFilePath);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const watchWatchPaths = (await updatePathInfos.mapManyAsync(async (item) => await this._getWatchPathsAsync(item.source))).distinct();
|
|
60
|
-
watcher.add(watchWatchPaths);
|
|
61
|
-
logger.info("로컬 라이브러리 복사 완료");
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
static async _getWatchPathsAsync(sourcePath) {
|
|
65
|
-
return await FsUtil.globAsync(path.resolve(sourcePath, "**"), {
|
|
66
|
-
ignore: [
|
|
67
|
-
"**/node_modules/**",
|
|
68
|
-
"**/package.json"
|
|
69
|
-
]
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
static async _getUpdatePathInfosAsync(rootPath, record) {
|
|
73
|
-
const result = [];
|
|
74
|
-
for (const pkgGlobPath of Object.keys(record)) {
|
|
75
|
-
// "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
|
|
76
|
-
const targetPaths = [
|
|
77
|
-
...await FsUtil.globAsync(path.resolve(rootPath, "node_modules", pkgGlobPath)),
|
|
78
|
-
...await FsUtil.globAsync(path.resolve(rootPath, "**", "node_modules", pkgGlobPath))
|
|
79
|
-
];
|
|
80
|
-
result.push(...targetPaths
|
|
81
|
-
.map((targetPath) => {
|
|
82
|
-
// 대상의 명칭 추출
|
|
83
|
-
const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => (item === "/" ? "[\\\\\\/]"
|
|
84
|
-
: item === "." ? "\\."
|
|
85
|
-
: item === "*" ? "(.*)"
|
|
86
|
-
: item));
|
|
87
|
-
const targetNameMatch = new RegExp(regexpText).exec(targetPath);
|
|
88
|
-
if (!targetNameMatch || typeof targetNameMatch[1] === "undefined")
|
|
89
|
-
return undefined;
|
|
90
|
-
const targetName = targetNameMatch[1];
|
|
91
|
-
// 가져올 소스 경로 추출
|
|
92
|
-
const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
|
|
93
|
-
return { source: sourcePath, target: targetPath };
|
|
94
|
-
})
|
|
95
|
-
.filterExists());
|
|
96
|
-
}
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=SdCliLocalUpdate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SdCliLocalUpdate.js","sourceRoot":"","sources":["../../../../src/entry/SdCliLocalUpdate.ts"],"names":[],"mappings":"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"}
|