@simplysm/sd-cli 7.0.81 → 7.0.146
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 +36 -6
- package/dist/build-tool/SdCliCordova.d.ts +4 -4
- package/dist/build-tool/SdCliCordova.mjs +108 -107
- package/dist/build-tool/SdCliElectron.d.ts +9 -0
- package/dist/build-tool/SdCliElectron.mjs +66 -0
- package/dist/build-tool/SdCliGithubApi.d.ts +13 -0
- package/dist/build-tool/SdCliGithubApi.mjs +93 -0
- package/dist/builder/SdCliClientBuilder.mjs +151 -65
- package/dist/builder/SdCliServerBuilder.mjs +6 -7
- package/dist/commons.d.ts +38 -11
- package/dist/entry-points/SdCliWorkspace.mjs +48 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +3 -1
- package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +2 -2
- package/dist/ng-tools/babel/SdCliBbRootMetadata.d.ts +1 -0
- package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +29 -3
- package/dist/packages/SdCliPackage.mjs +13 -2
- package/package.json +13 -7
- package/src/bin/sd-cli.ts +46 -7
- package/src/build-tool/SdCliCordova.ts +133 -141
- package/src/build-tool/SdCliElectron.ts +76 -0
- package/src/build-tool/SdCliGithubApi.ts +117 -0
- package/src/builder/SdCliClientBuilder.ts +165 -65
- package/src/builder/SdCliServerBuilder.ts +6 -7
- package/src/commons.ts +35 -11
- package/src/entry-points/SdCliWorkspace.ts +47 -6
- package/src/index.ts +2 -0
- package/src/ng-tools/babel/SdCliBbFileMetadata.ts +1 -1
- package/src/ng-tools/babel/SdCliBbRootMetadata.ts +30 -2
- package/src/packages/SdCliPackage.ts +18 -1
- package/tsconfig.json +3 -0
package/dist/bin/sd-cli.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import { SdCliNpm } from "../entry-points/SdCliNpm";
|
|
|
8
8
|
import { SdCliPrepare } from "../entry-points/SdCliPrepare";
|
|
9
9
|
import { SdCliFileCrypto } from "../entry-points/SdCliFileCrypto";
|
|
10
10
|
import { SdCliCordova } from "../build-tool/SdCliCordova";
|
|
11
|
+
import { SdCliElectron } from "../build-tool/SdCliElectron";
|
|
11
12
|
Error.stackTraceLimit = Infinity;
|
|
12
13
|
const argv = yargs(hideBin(process.argv))
|
|
13
14
|
.version(false)
|
|
@@ -46,16 +47,38 @@ const argv = yargs(hideBin(process.argv))
|
|
|
46
47
|
describe: "수행할 패키지 설정"
|
|
47
48
|
}
|
|
48
49
|
}))
|
|
49
|
-
.command("run-
|
|
50
|
-
.positional("
|
|
50
|
+
.command("run-electron <package> <url>", "변경감지중인 플랫폼을 ELECTRON 앱 형태로 띄웁니다.", (cmd) => cmd
|
|
51
|
+
.positional("package", {
|
|
51
52
|
type: "string",
|
|
52
|
-
describe: "
|
|
53
|
+
describe: "패키지명",
|
|
53
54
|
demandOption: true
|
|
54
55
|
})
|
|
56
|
+
.positional("url", {
|
|
57
|
+
type: "string",
|
|
58
|
+
describe: "Webview로 오픈할 URL",
|
|
59
|
+
demandOption: true
|
|
60
|
+
})
|
|
61
|
+
.options({
|
|
62
|
+
config: {
|
|
63
|
+
type: "string",
|
|
64
|
+
describe: "simplysm.json 파일 경로"
|
|
65
|
+
},
|
|
66
|
+
options: {
|
|
67
|
+
type: "string",
|
|
68
|
+
array: true,
|
|
69
|
+
describe: "옵션 설정 (설정파일에서 @로 시작하는 부분)"
|
|
70
|
+
}
|
|
71
|
+
}))
|
|
72
|
+
.command("run-cordova <platform> <package> <url>", "변경감지중인 플랫폼을 코도바 디바이스에 앱 형태로 띄웁니다.", (cmd) => cmd
|
|
55
73
|
.positional("platform", {
|
|
56
74
|
type: "string",
|
|
57
75
|
describe: "빌드 플랫폼(android,...)",
|
|
58
76
|
demandOption: true
|
|
77
|
+
})
|
|
78
|
+
.positional("package", {
|
|
79
|
+
type: "string",
|
|
80
|
+
describe: "패키지명",
|
|
81
|
+
demandOption: true
|
|
59
82
|
})
|
|
60
83
|
.positional("url", {
|
|
61
84
|
type: "string",
|
|
@@ -149,8 +172,15 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
149
172
|
pkgs: argv.packages ?? []
|
|
150
173
|
});
|
|
151
174
|
}
|
|
152
|
-
else if (argv._[0] === "run-
|
|
153
|
-
await
|
|
175
|
+
else if (argv._[0] === "run-electron") {
|
|
176
|
+
await new SdCliElectron(process.cwd())
|
|
177
|
+
.runWebviewOnDeviceAsync(argv.package, argv.url, {
|
|
178
|
+
confFileRelPath: argv.config ?? "simplysm.json",
|
|
179
|
+
optNames: argv.options ?? []
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else if (argv._[0] === "run-cordova") {
|
|
183
|
+
await SdCliCordova.runWebviewOnDeviceAsync(process.cwd(), argv.platform, argv.package, argv.url);
|
|
154
184
|
}
|
|
155
185
|
else if (argv._[0] === "build") {
|
|
156
186
|
await new SdCliWorkspace(process.cwd())
|
|
@@ -186,4 +216,4 @@ const logger = Logger.get(["simplysm", "sd-cli", "bin", "sd-cli"]);
|
|
|
186
216
|
logger.error(err);
|
|
187
217
|
process.exit(1);
|
|
188
218
|
});
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QtY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9zZC1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsS0FBSyxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0tBQ25CLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0tBQ2xCLE9BQU8sQ0FBQztJQUNQLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxTQUFTO1FBQ2YsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QixPQUFPLEVBQUUsS0FBSztLQUNmO0NBQ0YsQ0FBQztLQUNELE9BQU8sQ0FDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLENBQUMsR0FBRyxFQUFFLEVBQUUs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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ISdCliClientBuilderCordovaConfig } from "../commons";
|
|
2
2
|
import { Logger } from "@simplysm/sd-core-node";
|
|
3
3
|
export declare class SdCliCordova {
|
|
4
4
|
private readonly _rootPath;
|
|
@@ -7,10 +7,10 @@ export declare class SdCliCordova {
|
|
|
7
7
|
private readonly _npmConfig;
|
|
8
8
|
readonly cordovaPath: string;
|
|
9
9
|
private readonly _binPath;
|
|
10
|
-
get platforms():
|
|
11
|
-
constructor(_rootPath: string, _config:
|
|
10
|
+
get platforms(): ("browser" | "android")[];
|
|
11
|
+
constructor(_rootPath: string, _config: ISdCliClientBuilderCordovaConfig);
|
|
12
12
|
private _execAsync;
|
|
13
13
|
initializeAsync(): Promise<void>;
|
|
14
14
|
buildAsync(outPath: string): Promise<void>;
|
|
15
|
-
static runWebviewOnDeviceAsync(
|
|
15
|
+
static runWebviewOnDeviceAsync(rootPath: string, platform: "browser" | "android", pkgName: string, url: string): Promise<void>;
|
|
16
16
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from "path";
|
|
2
2
|
import { FsUtil, Logger, SdProcess } from "@simplysm/sd-core-node";
|
|
3
|
-
import { NotImplementError } from "@simplysm/sd-core-common";
|
|
4
3
|
import JSZip from "jszip";
|
|
4
|
+
import xml2js from "xml2js";
|
|
5
5
|
export class SdCliCordova {
|
|
6
6
|
constructor(_rootPath, _config) {
|
|
7
7
|
this._rootPath = _rootPath;
|
|
@@ -12,7 +12,10 @@ export class SdCliCordova {
|
|
|
12
12
|
this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name, this._npmConfig.name]);
|
|
13
13
|
}
|
|
14
14
|
get platforms() {
|
|
15
|
-
return
|
|
15
|
+
return [
|
|
16
|
+
...this._config.target?.browser ? ["browser"] : [],
|
|
17
|
+
...this._config.target?.android ? ["android"] : []
|
|
18
|
+
];
|
|
16
19
|
}
|
|
17
20
|
async _execAsync(cmd, cwd) {
|
|
18
21
|
this._logger.debug(cmd);
|
|
@@ -39,119 +42,125 @@ export class SdCliCordova {
|
|
|
39
42
|
await this._execAsync(`${this._binPath} platform add ${platform}`, this.cordovaPath);
|
|
40
43
|
}
|
|
41
44
|
}
|
|
45
|
+
// 설치 미빌드 플랫폼 삭제
|
|
46
|
+
for (const alreadyPlatform of alreadyPlatforms) {
|
|
47
|
+
if (this._config.target?.[alreadyPlatform] == null) {
|
|
48
|
+
await this._execAsync(`${this._binPath} platform remove ${alreadyPlatform}`, this.cordovaPath);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
42
51
|
// 미설치 플러그인들 설치
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
?
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const pluginsFetch = FsUtil.exists(path.resolve(this.cordovaPath, "plugins/fetch.json"))
|
|
53
|
+
? await FsUtil.readJsonAsync(path.resolve(this.cordovaPath, "plugins/fetch.json"))
|
|
54
|
+
: undefined;
|
|
55
|
+
const alreadyPlugins = pluginsFetch != undefined
|
|
56
|
+
? Object.values(pluginsFetch)
|
|
57
|
+
.map((item) => (item.source.id !== undefined ? item.source.id.replace(/@.*$/, "") : item.source.url))
|
|
58
|
+
: [];
|
|
59
|
+
for (const plugin of this._config.plugins?.distinct() ?? []) {
|
|
60
|
+
if (!alreadyPlugins.includes(plugin)) {
|
|
61
|
+
await this._execAsync(`${this._binPath} plugin add ${plugin}`, this.cordovaPath);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// 설치된 미사용 플러그인 삭제
|
|
65
|
+
for (const alreadyPlugin of alreadyPlugins) {
|
|
66
|
+
if (!(this._config.plugins?.distinct() ?? []).includes(alreadyPlugin)) {
|
|
67
|
+
await this._execAsync(`${this._binPath} plugin remove ${alreadyPlugin}`, this.cordovaPath);
|
|
55
68
|
}
|
|
56
69
|
}
|
|
70
|
+
// ANDROID SIGN 파일 복사
|
|
71
|
+
if (this._config.target?.android?.sign) {
|
|
72
|
+
await FsUtil.copyAsync(path.resolve(this._rootPath, this._config.target.android.sign.keystore), path.resolve(this.cordovaPath, "android.keystore"));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await FsUtil.removeAsync(path.resolve(this.cordovaPath, "android.keystore"));
|
|
76
|
+
}
|
|
77
|
+
// 빌드 옵션 파일 생성
|
|
78
|
+
await FsUtil.writeJsonAsync(path.resolve(this.cordovaPath, "build.json"), {
|
|
79
|
+
...this._config.target?.android ? {
|
|
80
|
+
android: {
|
|
81
|
+
release: {
|
|
82
|
+
packageType: this._config.target.android.bundle ? "bundle" : "apk",
|
|
83
|
+
...this._config.target.android.sign ? {
|
|
84
|
+
keystore: path.resolve(this.cordovaPath, "android.keystore"),
|
|
85
|
+
storePassword: this._config.target.android.sign.storePassword,
|
|
86
|
+
alias: this._config.target.android.sign.alias,
|
|
87
|
+
password: this._config.target.android.sign.password,
|
|
88
|
+
keystoreType: this._config.target.android.sign.keystoreType
|
|
89
|
+
} : {}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} : {}
|
|
93
|
+
});
|
|
57
94
|
// ICON 파일 복사
|
|
58
95
|
if (this._config.icon !== undefined) {
|
|
59
|
-
await FsUtil.copyAsync(path.resolve(this._rootPath, this._config.icon), path.resolve(this.cordovaPath, "res", "icon
|
|
96
|
+
await FsUtil.copyAsync(path.resolve(this._rootPath, this._config.icon), path.resolve(this.cordovaPath, "res", "icon.png"));
|
|
60
97
|
}
|
|
61
|
-
|
|
98
|
+
else {
|
|
99
|
+
await FsUtil.removeAsync(path.resolve(this.cordovaPath, "res", "icon.png"));
|
|
100
|
+
}
|
|
101
|
+
// CONFIG: 초기값 백업
|
|
62
102
|
const configFilePath = path.resolve(this.cordovaPath, "config.xml");
|
|
63
|
-
|
|
103
|
+
const configBackFilePath = path.resolve(this.cordovaPath, "config.xml.bak");
|
|
104
|
+
if (!FsUtil.exists(configBackFilePath)) {
|
|
105
|
+
await FsUtil.copyAsync(configFilePath, configBackFilePath);
|
|
106
|
+
}
|
|
107
|
+
// CONFIG: 초기값 읽기
|
|
108
|
+
const configFileContent = await FsUtil.readFileAsync(configBackFilePath);
|
|
109
|
+
const configXml = await xml2js.parseStringPromise(configFileContent);
|
|
64
110
|
// CONFIG: 버전 설정
|
|
65
|
-
|
|
111
|
+
configXml.widget.$.version = this._npmConfig.version;
|
|
66
112
|
// CONFIG: ICON 설정
|
|
67
|
-
if (this._config.icon !== undefined
|
|
68
|
-
|
|
113
|
+
if (this._config.icon !== undefined) {
|
|
114
|
+
configXml["widget"]["icon"] = [{ "$": { "src": "res/icon.png" } }];
|
|
69
115
|
}
|
|
116
|
+
// CONFIG: 접근허용 세팅
|
|
117
|
+
configXml["widget"]["allow-navigation"] = [{ "$": { "href": "*://*/*" } }];
|
|
70
118
|
// CONFIG: ANDROID usesCleartextTraffic 설정
|
|
71
|
-
if (this._config.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
}
|
|
119
|
+
if (this._config.target?.android) {
|
|
120
|
+
configXml.widget.$["xmlns:android"] = "http://schemas.android.com/apk/res/android";
|
|
121
|
+
configXml["widget"]["platform"] = configXml["widget"]["platform"] ?? [];
|
|
122
|
+
configXml["widget"]["platform"].push({
|
|
123
|
+
"$": {
|
|
124
|
+
"name": "android"
|
|
125
|
+
},
|
|
126
|
+
"edit-config": [{
|
|
127
|
+
"$": {
|
|
128
|
+
"file": "app/src/main/AndroidManifest.xml",
|
|
129
|
+
"mode": "merge",
|
|
130
|
+
"target": "/manifest/application"
|
|
131
|
+
},
|
|
132
|
+
"application": [{
|
|
133
|
+
"android:usesCleartextTraffic": "true"
|
|
134
|
+
}]
|
|
135
|
+
}]
|
|
136
|
+
});
|
|
91
137
|
}
|
|
92
|
-
// CONFIG:
|
|
93
|
-
|
|
138
|
+
// CONFIG: 파일 새로 쓰기
|
|
139
|
+
const configResultContent = new xml2js.Builder().buildObject(configXml);
|
|
140
|
+
await FsUtil.writeFileAsync(configFilePath, configResultContent);
|
|
141
|
+
// 각 플랫폼 www 준비
|
|
142
|
+
await this._execAsync(`${this._binPath} prepare`, this.cordovaPath);
|
|
94
143
|
}
|
|
95
144
|
async buildAsync(outPath) {
|
|
96
|
-
const packageType = this._config.buildOption?.bundle ? "bundle" : "apk";
|
|
97
|
-
// ANDROID 서명 처리
|
|
98
|
-
if (this._config.buildOption?.sign?.android) {
|
|
99
|
-
await FsUtil.copyAsync(path.resolve(this._rootPath, this._config.buildOption.sign.android.keystore), path.resolve(this.cordovaPath, path.basename(this._config.buildOption.sign.android.keystore)));
|
|
100
|
-
await FsUtil.writeJsonAsync(path.resolve(this.cordovaPath, "build.json"), {
|
|
101
|
-
android: {
|
|
102
|
-
release: {
|
|
103
|
-
keystore: path.basename(this._config.buildOption.sign.android.keystore),
|
|
104
|
-
storePassword: this._config.buildOption.sign.android.storePassword,
|
|
105
|
-
alias: this._config.buildOption.sign.android.alias,
|
|
106
|
-
password: this._config.buildOption.sign.android.password,
|
|
107
|
-
keystoreType: this._config.buildOption.sign.android.keystoreType,
|
|
108
|
-
packageType
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
// CONFIG
|
|
114
|
-
const configFilePath = path.resolve(this.cordovaPath, "config.xml");
|
|
115
|
-
let configFileContent = await FsUtil.readFileAsync(configFilePath);
|
|
116
|
-
// CONFIG: 접근허용 일단 모두 지우기
|
|
117
|
-
configFileContent = configFileContent.replace(/ {4}<allow-navigation href="[^"]*" \/>\n/g, "");
|
|
118
|
-
// CONFIG: 접근허용 등록
|
|
119
|
-
configFileContent = configFileContent.replace("</widget>", ` <allow-navigation href="*://*/*" />\n</widget>`);
|
|
120
|
-
// CONFIG: 파일쓰기
|
|
121
|
-
await FsUtil.writeFileAsync(configFilePath, configFileContent);
|
|
122
145
|
// 실행
|
|
123
|
-
const buildType = this._config.
|
|
146
|
+
const buildType = this._config.debug ? "debug" : "release";
|
|
124
147
|
for (const platform of this.platforms) {
|
|
125
|
-
await this._execAsync(`${this._binPath} build ${platform} --${buildType}
|
|
148
|
+
await this._execAsync(`${this._binPath} build ${platform} --${buildType}`, this.cordovaPath);
|
|
126
149
|
}
|
|
127
|
-
// 결과물
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
await FsUtil.copyAsync(path.resolve(this.cordovaPath, "platforms/android/app/build/outputs/apk", buildType, apkFileName), path.resolve(targetOutPath, latestDistApkFileName));
|
|
137
|
-
}
|
|
138
|
-
else if (platform === "electron") {
|
|
139
|
-
const targetOutPath = path.resolve(outPath, platform);
|
|
140
|
-
const outFileName = `${this._config.appName} Setup ${this._npmConfig.version}.exe`;
|
|
141
|
-
const distFileName = outFileName;
|
|
142
|
-
const latestDistFileName = `${this._config.appName} Setup latest.exe`;
|
|
143
|
-
await FsUtil.mkdirsAsync(targetOutPath);
|
|
144
|
-
await FsUtil.copyAsync(path.resolve(this.cordovaPath, "platforms/electron/build/", outFileName), path.resolve(targetOutPath, distFileName));
|
|
145
|
-
await FsUtil.copyAsync(path.resolve(this.cordovaPath, "platforms/electron/build/", outFileName), path.resolve(targetOutPath, latestDistFileName));
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
throw new NotImplementError();
|
|
149
|
-
}
|
|
150
|
+
// 결과물 복사: ANDROID
|
|
151
|
+
if (this._config.target?.android) {
|
|
152
|
+
const targetOutPath = path.resolve(outPath, "android");
|
|
153
|
+
const apkFileName = this._config.target.android.sign ? `app-${buildType}.apk` : `app-${buildType}-unsigned.apk`;
|
|
154
|
+
const distApkFileName = path.basename(`${this._config.appName}${this._config.target.android.sign ? "" : "-unsigned"}-v${this._npmConfig.version}.apk`);
|
|
155
|
+
const latestDistApkFileName = path.basename(`${this._config.appName}${this._config.target.android.sign ? "" : "-unsigned"}-latest.apk`);
|
|
156
|
+
await FsUtil.mkdirsAsync(targetOutPath);
|
|
157
|
+
await FsUtil.copyAsync(path.resolve(this.cordovaPath, "platforms/android/app/build/outputs/apk", buildType, apkFileName), path.resolve(targetOutPath, distApkFileName));
|
|
158
|
+
await FsUtil.copyAsync(path.resolve(this.cordovaPath, "platforms/android/app/build/outputs/apk", buildType, apkFileName), path.resolve(targetOutPath, latestDistApkFileName));
|
|
150
159
|
}
|
|
151
|
-
if (this.
|
|
160
|
+
if (this._config.target?.android) {
|
|
152
161
|
// 자동업데이트를 위한 zip 파일 쓰기
|
|
153
162
|
const zip = new JSZip();
|
|
154
|
-
const resultFiles = await FsUtil.globAsync(path.resolve(this.cordovaPath, "www", "**/*"), {
|
|
163
|
+
const resultFiles = await FsUtil.globAsync(path.resolve(this.cordovaPath, "platforms", "android", "app", "src", "main", "assets", "www", "**/*"), {
|
|
155
164
|
dot: true,
|
|
156
165
|
nodir: true
|
|
157
166
|
});
|
|
@@ -165,21 +174,13 @@ export class SdCliCordova {
|
|
|
165
174
|
await FsUtil.writeFileAsync(path.resolve(outPath, "updates/", zipFileName), resultBuffer);
|
|
166
175
|
}
|
|
167
176
|
}
|
|
168
|
-
static async runWebviewOnDeviceAsync(
|
|
177
|
+
static async runWebviewOnDeviceAsync(rootPath, platform, pkgName, url) {
|
|
178
|
+
const cordovaPath = path.resolve(rootPath, `packages/${pkgName}/.cordova/`);
|
|
169
179
|
await FsUtil.removeAsync(path.resolve(cordovaPath, "www"));
|
|
170
180
|
await FsUtil.mkdirsAsync(path.resolve(cordovaPath, "www"));
|
|
171
|
-
await FsUtil.writeFileAsync(path.resolve(cordovaPath, "www/index.html"), `'${url}'로 이동중... <script>setTimeout(function () {window.location.href = "${url}"}, 3000);</script>`.trim());
|
|
172
|
-
// CONFIG
|
|
173
|
-
const configFilePath = path.resolve(cordovaPath, "config.xml");
|
|
174
|
-
let configFileContent = await FsUtil.readFileAsync(configFilePath);
|
|
175
|
-
// CONFIG: 접근허용 일단 모두 지우기
|
|
176
|
-
configFileContent = configFileContent.replace(/ {4}<allow-navigation href="[^"]*" \/>\n/g, "");
|
|
177
|
-
// CONFIG: 접근허용 등록
|
|
178
|
-
configFileContent = configFileContent.replace("</widget>", ` <allow-navigation href="*://*/*" />\n</widget>`);
|
|
179
|
-
// CONFIG: 파일쓰기
|
|
180
|
-
await FsUtil.writeFileAsync(configFilePath, configFileContent);
|
|
181
|
+
await FsUtil.writeFileAsync(path.resolve(cordovaPath, "www/index.html"), `'${url}'로 이동중... <script>setTimeout(function () {window.location.href = "${url.replace(/\/$/, "")}/${pkgName}/cordova/"}, 3000);</script>`.trim());
|
|
181
182
|
const binPath = path.resolve(process.cwd(), "node_modules/.bin/cordova.cmd");
|
|
182
183
|
await SdProcess.spawnAsync(`${binPath} run ${platform} --device`, { cwd: cordovaPath }, true);
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDb3Jkb3ZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkLXRvb2wvU2RDbGlDb3Jkb3ZhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUFvQyxTQUFpQixFQUFtQixPQUF5QztRQUE3RSxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQW1CLFlBQU8sR0FBUCxPQUFPLENBQWtDO1FBUGpHLGdCQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELGFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBT3ZGLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBUEQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQU9PLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQVc7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlO1FBQzFCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNsRDthQUNJO1lBQ0gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV2RSxVQUFVO1lBQ1YsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsWUFBWSxJQUFJLENBQUMsV0FBVyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDekk7UUFFRCx5QkFBeUI7UUFDekIsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXRFLG1CQUFtQjtRQUNuQixNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFaEUsbUJBQW1CO1FBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN4QyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxpQkFBaUIsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3RGO1NBQ0Y7UUFFRCxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN4QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUN0RixDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNsRixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2QsTUFBTSxjQUFjLEdBQUcsWUFBWSxJQUFJLFNBQVM7Z0JBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztxQkFDMUIsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVQLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNwQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDbEY7YUFDRjtTQUNGO1FBRUQsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ25DLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3BJO1FBRUQsU0FBUztRQUNULE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRSxJQUFJLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxnQkFBZ0I7UUFDaEIsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBRTFHLGtCQUFrQjtRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzRSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7U0FDbkg7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyw4REFBOEQsQ0FBQyxFQUFFO2dCQUMvRixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQzNDLHdDQUF3QyxFQUN4QyxpR0FBaUcsQ0FDbEcsQ0FBQzthQUNIO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxzREFBc0QsQ0FBQyxFQUFFO2dCQUN2RixJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO29CQUM3RCxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7OztxQkFHbEUsQ0FBQyxDQUFDO2lCQUNkO3FCQUNJO29CQUNILGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRTs7Ozs7Z0JBSzFFLENBQUMsQ0FBQztpQkFDVDthQUNGO1NBQ0Y7UUFFRCxlQUFlO1FBQ2YsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQWU7UUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUV4RSxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzNDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDOUYsQ0FBQztZQUNGLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUM1QztnQkFDRSxPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFO3dCQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO3dCQUN2RSxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO3dCQUNsRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO3dCQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3dCQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO3dCQUNoRSxXQUFXO3FCQUNaO2lCQUNGO2FBQ0YsQ0FDRixDQUFDO1NBQ0g7UUFFRCxTQUFTO1FBQ1QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLElBQUksaUJBQWlCLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRW5FLHlCQUF5QjtRQUN6QixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0Ysa0JBQWtCO1FBQ2xCLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUVqSCxlQUFlO1FBQ2YsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9ELEtBQUs7UUFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hFLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxVQUFVLFFBQVEsTUFBTSxTQUFTLGtCQUFrQixXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0g7UUFFRCxTQUFTO1FBQ1QsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtnQkFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxlQUFlLENBQUM7Z0JBQ3ZILE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUM7Z0JBQzlKLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxhQUFhLENBQUMsQ0FBQztnQkFDL0ksTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSx5Q0FBeUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQ2pHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUM3QyxDQUFDO2dCQUNGLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHlDQUF5QyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFDakcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUscUJBQXFCLENBQUMsQ0FDbkQsQ0FBQzthQUNIO2lCQUNJLElBQUksUUFBUSxLQUFLLFVBQVUsRUFBRTtnQkFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLE1BQU0sQ0FBQztnQkFDbkYsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO2dCQUNqQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLG1CQUFtQixDQUFDO2dCQUN0RSxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLDJCQUEyQixFQUFFLFdBQVcsQ0FBQyxFQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FDMUMsQ0FBQztnQkFDRixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxXQUFXLENBQUMsRUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FDaEQsQ0FBQzthQUNIO2lCQUNJO2dCQUNILE1BQU0sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2FBQy9CO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RDLHVCQUF1QjtZQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hCLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUN4RixHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztZQUNILEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO2dCQUNwQyxNQUFNLGFBQWEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RGLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQzthQUM3QztZQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUM7WUFDN0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFFckUsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUMzRjtJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFdBQW1CLEVBQUUsUUFBK0IsRUFBRSxHQUFXO1FBQzNHLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksR0FBRyxxRUFBcUUsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRMLFNBQVM7UUFDVCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxJQUFJLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSx5QkFBeUI7UUFDekIsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9GLGtCQUFrQjtRQUNsQixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLG9EQUFvRCxDQUFDLENBQUM7UUFFakgsZUFBZTtRQUNmLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sUUFBUSxRQUFRLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRyxDQUFDO0NBQ0YifQ==
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlDb3Jkb3ZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkLXRvb2wvU2RDbGlDb3Jkb3ZhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxPQUFPLFlBQVk7SUFldkIsWUFBb0MsU0FBaUIsRUFBbUIsT0FBeUM7UUFBN0UsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUFtQixZQUFPLEdBQVAsT0FBTyxDQUFrQztRQVZqRyxnQkFBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxhQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQVV2RixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQVZELElBQVcsU0FBUztRQUNsQixPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBa0IsQ0FB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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class SdCliElectron {
|
|
2
|
+
private readonly _rootPath;
|
|
3
|
+
private readonly _logger;
|
|
4
|
+
constructor(_rootPath: string);
|
|
5
|
+
runWebviewOnDeviceAsync(pkgName: string, url: string, opt: {
|
|
6
|
+
confFileRelPath: string;
|
|
7
|
+
optNames: string[];
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { FsUtil, Logger, SdProcess } from "@simplysm/sd-core-node";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
|
|
4
|
+
import ts from "typescript";
|
|
5
|
+
export class SdCliElectron {
|
|
6
|
+
constructor(_rootPath) {
|
|
7
|
+
this._rootPath = _rootPath;
|
|
8
|
+
this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
|
|
9
|
+
}
|
|
10
|
+
async runWebviewOnDeviceAsync(pkgName, url, opt) {
|
|
11
|
+
this._logger.debug("프로젝트 설정 가져오기...");
|
|
12
|
+
const config = await SdCliConfigUtil.loadConfigAsync(path.resolve(this._rootPath, opt.confFileRelPath), true, opt.optNames);
|
|
13
|
+
const pkgConfig = config.packages[pkgName];
|
|
14
|
+
if (!pkgConfig)
|
|
15
|
+
throw new Error("패키지 설정을 찾을 수 없습니다.");
|
|
16
|
+
const electronConfig = pkgConfig.builder?.electron;
|
|
17
|
+
if (!electronConfig)
|
|
18
|
+
throw new Error("ELECTRON 설정을 찾을 수 없습니다.");
|
|
19
|
+
const pkgRootPath = path.resolve(this._rootPath, `packages/${pkgName}`);
|
|
20
|
+
const electronSrcPath = path.resolve(pkgRootPath, `.electron/src`);
|
|
21
|
+
await FsUtil.removeAsync(electronSrcPath);
|
|
22
|
+
const npmConfig = (await FsUtil.readJsonAsync(path.resolve(pkgRootPath, `package.json`)));
|
|
23
|
+
const electronVersion = npmConfig.dependencies?.["electron"];
|
|
24
|
+
if (electronVersion === undefined) {
|
|
25
|
+
throw new Error("ELECTRON 빌드 패키지의 'dependencies'에는 'electron'이 반드시 포함되어야 합니다.");
|
|
26
|
+
}
|
|
27
|
+
const dotenvVersion = npmConfig.dependencies?.["dotenv"];
|
|
28
|
+
if (dotenvVersion === undefined) {
|
|
29
|
+
throw new Error("ELECTRON 빌드 패키지의 'dependencies'에는 'dotenv'가 반드시 포함되어야 합니다.");
|
|
30
|
+
}
|
|
31
|
+
await FsUtil.writeJsonAsync(path.resolve(electronSrcPath, `package.json`), {
|
|
32
|
+
name: npmConfig.name,
|
|
33
|
+
version: npmConfig.version,
|
|
34
|
+
description: npmConfig.description,
|
|
35
|
+
main: "electron.js",
|
|
36
|
+
author: npmConfig.author,
|
|
37
|
+
license: npmConfig.license,
|
|
38
|
+
devDependencies: {
|
|
39
|
+
"electron": electronVersion.replace("^", "")
|
|
40
|
+
},
|
|
41
|
+
dependencies: {
|
|
42
|
+
"dotenv": dotenvVersion
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (FsUtil.exists(path.resolve(pkgRootPath, "src/favicon.ico"))) {
|
|
46
|
+
await FsUtil.copyAsync(path.resolve(pkgRootPath, "src/favicon.ico"), path.resolve(electronSrcPath, "favicon.ico"));
|
|
47
|
+
}
|
|
48
|
+
if (FsUtil.exists(path.resolve(pkgRootPath, "src/assets"))) {
|
|
49
|
+
await FsUtil.copyAsync(path.resolve(pkgRootPath, "src/assets"), path.resolve(electronSrcPath, "assets"));
|
|
50
|
+
}
|
|
51
|
+
await FsUtil.writeFileAsync(path.resolve(electronSrcPath, `.env`), [
|
|
52
|
+
"NODE_ENV=development",
|
|
53
|
+
`SD_TITLE=${npmConfig.description}`,
|
|
54
|
+
`SD_VERSION=${npmConfig.version}`,
|
|
55
|
+
`SD_ELECTRON_DEV_URL=${url.replace(/\/$/, "")}/${pkgName}/electron/`,
|
|
56
|
+
(electronConfig.icon !== undefined) ? `SD_ELECTRON_ICON=${electronConfig.icon}` : `SD_ELECTRON_ICON=favicon.ico`,
|
|
57
|
+
...(pkgConfig.env !== undefined) ? Object.keys(pkgConfig.env).map((key) => `${key}=${pkgConfig.env[key]}`) : []
|
|
58
|
+
].filterExists().join("\n"));
|
|
59
|
+
let electronTsFileContent = await FsUtil.readFileAsync(path.resolve(pkgRootPath, `src/electron.ts`));
|
|
60
|
+
electronTsFileContent = "require(\"dotenv\").config({ path: `${__dirname}\\\\.env` });\n" + electronTsFileContent;
|
|
61
|
+
const result = ts.transpileModule(electronTsFileContent, { compilerOptions: { module: ts.ModuleKind.CommonJS } });
|
|
62
|
+
await FsUtil.writeFileAsync(path.resolve(electronSrcPath, "electron.js"), result.outputText);
|
|
63
|
+
await SdProcess.spawnAsync(`${path.resolve(this._rootPath, "node_modules/.bin/electron.cmd")} ${electronSrcPath}`, { cwd: electronSrcPath }, true);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlFbGVjdHJvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZC10b29sL1NkQ2xpRWxlY3Ryb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkUsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUIsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFBb0MsU0FBaUI7UUFBakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUZwQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBR3JGLENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBZSxFQUFFLEdBQVcsRUFBRSxHQUFvRDtRQUNySCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUgsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQTBDLENBQUM7UUFDcEYsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFD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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare class SdCliGithubApi {
|
|
3
|
+
private readonly _apiKey;
|
|
4
|
+
private readonly _repoOwner;
|
|
5
|
+
private readonly _repoName;
|
|
6
|
+
constructor(_apiKey: string, _repoOwner: string, _repoName: string);
|
|
7
|
+
uploadAsync(version: string, files: {
|
|
8
|
+
name: string;
|
|
9
|
+
buffer: Buffer;
|
|
10
|
+
}[]): Promise<void>;
|
|
11
|
+
private _uploadFileAsync;
|
|
12
|
+
private _createReleaseTagAsync;
|
|
13
|
+
}
|