@simplysm/sd-cli 14.0.19 → 14.0.21

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.
Files changed (89) hide show
  1. package/dist/angular/vite-postcss-inline-plugin.d.ts.map +1 -1
  2. package/dist/angular/vite-postcss-inline-plugin.js +4 -1
  3. package/dist/angular/vite-postcss-inline-plugin.js.map +1 -1
  4. package/dist/capacitor/capacitor-android.d.ts +16 -0
  5. package/dist/capacitor/capacitor-android.d.ts.map +1 -0
  6. package/dist/capacitor/capacitor-android.js +289 -0
  7. package/dist/capacitor/capacitor-android.js.map +1 -0
  8. package/dist/capacitor/capacitor.d.ts +0 -49
  9. package/dist/capacitor/capacitor.d.ts.map +1 -1
  10. package/dist/capacitor/capacitor.js +4 -244
  11. package/dist/capacitor/capacitor.js.map +1 -1
  12. package/dist/commands/check.js +2 -2
  13. package/dist/commands/check.js.map +1 -1
  14. package/dist/commands/lint.d.ts +1 -42
  15. package/dist/commands/lint.d.ts.map +1 -1
  16. package/dist/commands/lint.js +1 -151
  17. package/dist/commands/lint.js.map +1 -1
  18. package/dist/commands/publish.d.ts.map +1 -1
  19. package/dist/commands/publish.js +2 -1
  20. package/dist/commands/publish.js.map +1 -1
  21. package/dist/commands/typecheck.d.ts +3 -40
  22. package/dist/commands/typecheck.d.ts.map +1 -1
  23. package/dist/commands/typecheck.js +3 -232
  24. package/dist/commands/typecheck.js.map +1 -1
  25. package/dist/electron/electron.js +11 -4
  26. package/dist/electron/electron.js.map +1 -1
  27. package/dist/orchestrators/DevWatchOrchestrator.d.ts +1 -0
  28. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -1
  29. package/dist/orchestrators/DevWatchOrchestrator.js +10 -6
  30. package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -1
  31. package/dist/orchestrators/TypecheckOrchestrator.d.ts +74 -0
  32. package/dist/orchestrators/TypecheckOrchestrator.d.ts.map +1 -0
  33. package/dist/orchestrators/TypecheckOrchestrator.js +285 -0
  34. package/dist/orchestrators/TypecheckOrchestrator.js.map +1 -0
  35. package/dist/sd-cli.js +6 -1
  36. package/dist/sd-cli.js.map +1 -1
  37. package/dist/utils/lint-core.d.ts +43 -0
  38. package/dist/utils/lint-core.d.ts.map +1 -0
  39. package/dist/utils/lint-core.js +154 -0
  40. package/dist/utils/lint-core.js.map +1 -0
  41. package/dist/utils/lint-utils.d.ts +1 -1
  42. package/dist/utils/lint-utils.d.ts.map +1 -1
  43. package/dist/utils/server-production-files.d.ts +22 -0
  44. package/dist/utils/server-production-files.d.ts.map +1 -0
  45. package/dist/utils/server-production-files.js +162 -0
  46. package/dist/utils/server-production-files.js.map +1 -0
  47. package/dist/workers/lint.worker.d.ts +1 -1
  48. package/dist/workers/lint.worker.d.ts.map +1 -1
  49. package/dist/workers/lint.worker.js +1 -1
  50. package/dist/workers/lint.worker.js.map +1 -1
  51. package/dist/workers/server-build.worker.d.ts.map +1 -1
  52. package/dist/workers/server-build.worker.js +11 -161
  53. package/dist/workers/server-build.worker.js.map +1 -1
  54. package/package.json +4 -4
  55. package/src/angular/vite-postcss-inline-plugin.ts +5 -1
  56. package/src/capacitor/capacitor-android.ts +368 -0
  57. package/src/capacitor/capacitor.ts +4 -317
  58. package/src/commands/check.ts +2 -2
  59. package/src/commands/lint.ts +1 -201
  60. package/src/commands/publish.ts +2 -1
  61. package/src/commands/typecheck.ts +7 -292
  62. package/src/electron/electron.ts +4 -4
  63. package/src/orchestrators/DevWatchOrchestrator.ts +10 -6
  64. package/src/orchestrators/TypecheckOrchestrator.ts +364 -0
  65. package/src/sd-cli.ts +6 -1
  66. package/src/utils/lint-core.ts +205 -0
  67. package/src/utils/lint-utils.ts +1 -1
  68. package/src/utils/server-production-files.ts +186 -0
  69. package/src/workers/lint.worker.ts +1 -1
  70. package/src/workers/server-build.worker.ts +10 -185
  71. package/tests/angular/vite-postcss-inline-plugin.spec.ts +10 -0
  72. package/tests/capacitor/capacitor-android-exports.verify.md +11 -0
  73. package/tests/capacitor/capacitor-android.spec.ts +219 -0
  74. package/tests/capacitor/capacitor-build.spec.ts +17 -21
  75. package/tests/capacitor/capacitor-icon.spec.ts +17 -19
  76. package/tests/capacitor/capacitor-init.spec.ts +18 -14
  77. package/tests/capacitor/capacitor-run.spec.ts +10 -24
  78. package/tests/capacitor/capacitor-workspace.spec.ts +10 -15
  79. package/tests/commands/check.spec.ts +2 -2
  80. package/tests/commands/lint.spec.ts +33 -194
  81. package/tests/commands/publish-set.verify.md +7 -0
  82. package/tests/electron/electron-symlink-cleanup.verify.md +8 -0
  83. package/tests/orchestrators/dist-delete-watcher.verify.md +10 -0
  84. package/tests/orchestrators/typecheck-orchestrator.spec.ts +180 -0
  85. package/tests/sd-cli-catch-all.verify.md +7 -0
  86. package/tests/utils/lint-core-import-paths.verify.md +10 -0
  87. package/tests/utils/lint-core.spec.ts +188 -0
  88. package/tests/utils/server-production-files-import-paths.verify.md +14 -0
  89. package/tests/workers/server-build-context-dispose.verify.md +8 -0
@@ -1,11 +1,12 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
3
  import esbuild from "esbuild";
4
- import { cpx, createWorker, FsWatcher, pathx } from "@simplysm/core-node";
4
+ import { createWorker, FsWatcher, pathx } from "@simplysm/core-node";
5
5
  import { err as errNs } from "@simplysm/core-common";
6
6
  import { consola } from "consola";
7
7
  import { parseTsconfig, getPackageSourceFiles, } from "../utils/tsconfig.js";
8
- import { createServerEsbuildOptions, collectAllDependencyExternals, writeChangedOutputFiles, } from "../utils/esbuild-config.js";
8
+ import { createServerEsbuildOptions, writeChangedOutputFiles, } from "../utils/esbuild-config.js";
9
+ import { collectAllExternals, generateProductionFiles } from "../utils/server-production-files.js";
9
10
  import { runTscPackageBuild } from "../utils/tsc-build.js";
10
11
  import { LintWithProgramRunner } from "../utils/lint-with-program.js";
11
12
  import { registerCleanupHandlers, createOnceGuard, setupWorkerConsola } from "../utils/worker-utils.js";
@@ -42,161 +43,6 @@ async function cleanup() {
42
43
  await srcWatcherToClose.close();
43
44
  }
44
45
  }
45
- /**
46
- * 세 가지 소스에서 외부 모듈을 수집하고 병합한다.
47
- * collectAllDependencyExternals를 통한 단일 패스 의존성 트리 순회를 사용한다.
48
- */
49
- function collectAllExternals(pkgDir, manualExternals) {
50
- logger.debug("의존성 트리 스캔 중...");
51
- const { optionalPeerDeps, nativeModules } = collectAllDependencyExternals(pkgDir);
52
- const manual = manualExternals ?? [];
53
- return [...new Set([...optionalPeerDeps, ...nativeModules, ...manual])];
54
- }
55
- /**
56
- * pnpm-lock.yaml의 packages 섹션을 파싱하여 name→version 맵을 생성한다.
57
- * Lockfile v9 형식: `packages:` 섹션의 `'name@version':` 키를 파싱한다.
58
- * YAML 파서 의존성을 피하기 위해 단순 라인 기반 파싱을 사용한다.
59
- */
60
- function parseLockfileVersions(cwd) {
61
- const lockfilePath = path.join(cwd, "pnpm-lock.yaml");
62
- if (!fs.existsSync(lockfilePath)) {
63
- throw new Error(`pnpm-lock.yaml not found in ${cwd}. Run "pnpm install" first.`);
64
- }
65
- const content = fs.readFileSync(lockfilePath, "utf-8");
66
- const map = new Map();
67
- // "packages:" 섹션을 찾고 "'@scope/name@1.2.3':" 또는 "'name@1.2.3':" 형태의 항목을 파싱
68
- const lines = content.split("\n");
69
- let inPackages = false;
70
- for (const line of lines) {
71
- if (line === "packages:") {
72
- inPackages = true;
73
- continue;
74
- }
75
- if (inPackages && line.length > 0 && !line.startsWith(" ") && !line.startsWith("'")) {
76
- break; // 다음 최상위 섹션
77
- }
78
- if (!inPackages)
79
- continue;
80
- // "'@scope/name@version':" 또는 "'name@version':" 매칭
81
- const match = /^\s{2}'(.+)@(\d[^']*)':\s*$/.exec(line);
82
- if (match != null) {
83
- const name = match[1];
84
- const version = match[2];
85
- // 첫 번째 항목 유지 (lockfile은 각 버전을 한 번만 기록)
86
- if (!map.has(name)) {
87
- map.set(name, version);
88
- }
89
- }
90
- }
91
- return map;
92
- }
93
- /**
94
- * pnpm-lock.yaml에서 주어진 모든 패키지의 잠긴 버전을 확인한다.
95
- * lockfile에서 패키지를 찾을 수 없으면 에러를 던진다.
96
- */
97
- function resolveLockedVersions(cwd, pkgNames) {
98
- const versionMap = parseLockfileVersions(cwd);
99
- const result = {};
100
- for (const name of pkgNames) {
101
- const version = versionMap.get(name);
102
- if (version == null) {
103
- throw new Error(`External dependency "${name}" not found in pnpm-lock.yaml. ` +
104
- `Run "pnpm install" and try again.`);
105
- }
106
- result[name] = version;
107
- }
108
- return result;
109
- }
110
- /**
111
- * 프로덕션 배포용 파일을 생성한다
112
- */
113
- function generateProductionFiles(info, externals) {
114
- const distDir = path.join(info.pkgDir, "dist");
115
- const pkgJson = JSON.parse(fs.readFileSync(path.join(info.pkgDir, "package.json"), "utf-8"));
116
- // dist/package.json
117
- const distPkgJson = {
118
- name: pkgJson.name,
119
- version: pkgJson.version,
120
- type: pkgJson.type,
121
- };
122
- if (externals.length > 0) {
123
- distPkgJson["dependencies"] = resolveLockedVersions(info.cwd, externals);
124
- }
125
- if (info.packageManager === "volta") {
126
- const nodeVersion = cpx.spawnSync("node", ["-v"]).stdout.trim();
127
- distPkgJson["volta"] = { node: nodeVersion };
128
- }
129
- fs.writeFileSync(path.join(distDir, "package.json"), JSON.stringify(distPkgJson, undefined, 2));
130
- // dist/mise.toml
131
- if (info.packageManager === "mise") {
132
- const rootMiseTomlPath = path.join(info.cwd, "mise.toml");
133
- let nodeVersion = "20";
134
- if (fs.existsSync(rootMiseTomlPath)) {
135
- const miseContent = fs.readFileSync(rootMiseTomlPath, "utf-8");
136
- const match = /node\s*=\s*"([^"]+)"/.exec(miseContent);
137
- if (match != null) {
138
- nodeVersion = match[1];
139
- }
140
- }
141
- fs.writeFileSync(path.join(distDir, "mise.toml"), `[tools]\nnode = "${nodeVersion}"\n`);
142
- }
143
- // dist/openssl.cnf
144
- fs.writeFileSync(path.join(distDir, "openssl.cnf"), [
145
- "nodejs_conf = openssl_init",
146
- "",
147
- "[openssl_init]",
148
- "providers = provider_sect",
149
- "ssl_conf = ssl_sect",
150
- "",
151
- "[provider_sect]",
152
- "default = default_sect",
153
- "legacy = legacy_sect",
154
- "",
155
- "[default_sect]",
156
- "activate = 1",
157
- "",
158
- "[legacy_sect]",
159
- "activate = 1",
160
- "",
161
- "[ssl_sect]",
162
- "system_default = system_default_sect",
163
- "",
164
- "[system_default_sect]",
165
- "Options = UnsafeLegacyRenegotiation",
166
- ].join("\n"));
167
- // dist/pm2.config.cjs
168
- if (info.pm2 != null) {
169
- const pm2Name = info.pm2.name ?? pkgJson.name.replace(/@/g, "").replace(/[/\\]/g, "-");
170
- const ignoreWatch = JSON.stringify([
171
- "node_modules",
172
- "www",
173
- ...(info.pm2.ignoreWatchPaths ?? []),
174
- ]);
175
- const envObj = {
176
- NODE_ENV: "production",
177
- TZ: "Asia/Seoul",
178
- ...(info.env ?? {}),
179
- };
180
- const envStr = JSON.stringify(envObj, undefined, 4);
181
- const useInterpreter = info.packageManager !== "volta";
182
- const pm2Config = [
183
- ...(useInterpreter ? [`const cp = require("child_process");`, ``] : []),
184
- `module.exports = {`,
185
- ` name: ${JSON.stringify(pm2Name)},`,
186
- ` script: "main.js",`,
187
- ` watch: true,`,
188
- ` watch_delay: 2000,`,
189
- ` ignore_watch: ${ignoreWatch},`,
190
- ...(useInterpreter ? [` interpreter: cp.execSync("mise which node").toString().trim(),`] : []),
191
- ` interpreter_args: "--openssl-config=openssl.cnf",`,
192
- ` env: ${envStr.replace(/\n/g, "\n ")},`,
193
- ` arrayProcess: "concat",`,
194
- ` useDelTargetNull: true,`,
195
- `};`,
196
- ].join("\n");
197
- fs.writeFileSync(path.join(distDir, "pm2.config.cjs"), pm2Config);
198
- }
199
- }
200
46
  registerCleanupHandlers(cleanup, logger);
201
47
  //#endregion
202
48
  //#region Worker
@@ -443,11 +289,15 @@ async function startWatch(info) {
443
289
  }
444
290
  const newExternal = cachedExternal;
445
291
  const oldContext = esbuildContext;
446
- if (info.output.js) {
447
- esbuildContext = await createEsbuildWatchContext(info, newEntryPoints, newExternal);
292
+ try {
293
+ if (info.output.js) {
294
+ esbuildContext = await createEsbuildWatchContext(info, newEntryPoints, newExternal);
295
+ }
448
296
  }
449
- if (oldContext != null) {
450
- await oldContext.dispose();
297
+ finally {
298
+ if (oldContext != null) {
299
+ await oldContext.dispose();
300
+ }
451
301
  }
452
302
  const result = await rebuildAll();
453
303
  sender.send("build", result);
@@ -1 +1 @@
1
- {"version":3,"file":"server-build.worker.js","sourceRoot":"","sources":["../../src/workers/server-build.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-build.worker.js","sourceRoot":"","sources":["../../src/workers/server-build.worker.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": "14.0.19",
3
+ "version": "14.0.21",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -42,9 +42,9 @@
42
42
  "vite-plugin-solid": "^2.11.12",
43
43
  "vite-tsconfig-paths": "^6.1.1",
44
44
  "yargs": "^18.0.0",
45
- "@simplysm/core-common": "14.0.19",
46
- "@simplysm/core-node": "14.0.19",
47
- "@simplysm/storage": "14.0.19"
45
+ "@simplysm/storage": "14.0.21",
46
+ "@simplysm/core-common": "14.0.21",
47
+ "@simplysm/core-node": "14.0.21"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/semver": "^7.7.1",
@@ -115,10 +115,14 @@ export async function processPostCssInline(
115
115
  if (origChar === "`") {
116
116
  processedReplacements.push({ start: r.start, end: r.end, newText: `\`${newCss}\`` });
117
117
  } else {
118
+ const escaped =
119
+ origChar === '"'
120
+ ? newCss.replace(/\\/g, "\\\\").replace(/"/g, '\\"')
121
+ : newCss.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
118
122
  processedReplacements.push({
119
123
  start: r.start,
120
124
  end: r.end,
121
- newText: `'${newCss.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`,
125
+ newText: `${origChar}${escaped}${origChar}`,
122
126
  });
123
127
  }
124
128
  }
@@ -0,0 +1,368 @@
1
+ import { fsx, pathx } from "@simplysm/core-node";
2
+ import { env, xml } from "@simplysm/core-common";
3
+ import { consola } from "consola";
4
+ import type { NpmConfig, SdCapacitorAndroidConfig, SdCapacitorConfig } from "../sd-config.types.js";
5
+
6
+ const _logger = consola.withTag("sd:cli:capacitor");
7
+
8
+ /**
9
+ * Android 네이티브 설정 구성
10
+ *
11
+ * JAVA_HOME, Android SDK 경로, AndroidManifest.xml, build.gradle, styles.xml을 설정한다.
12
+ */
13
+ export async function configureAndroid(
14
+ capPath: string,
15
+ config: SdCapacitorConfig,
16
+ npmConfig: NpmConfig,
17
+ ): Promise<void> {
18
+ const androidPath = pathx.posixResolve(capPath, "android");
19
+
20
+ // Android 디렉토리 존재 확인
21
+ if (!(await fsx.exists(androidPath))) {
22
+ throw new Error(`Android 프로젝트 디렉토리를 찾을 수 없습니다: ${androidPath}`);
23
+ }
24
+
25
+ _logger.debug("JAVA_HOME 설정 시작");
26
+ await _configureJavaHomePath(androidPath);
27
+ _logger.debug("JAVA_HOME 설정 완료");
28
+
29
+ _logger.debug("Android SDK 경로 설정 시작");
30
+ await _configureSdkPath(androidPath);
31
+ _logger.debug("Android SDK 경로 설정 완료");
32
+
33
+ _logger.debug("AndroidManifest.xml 설정 시작");
34
+ await _configureManifest(androidPath, config.platform?.android);
35
+ _logger.debug("AndroidManifest.xml 설정 완료");
36
+
37
+ _logger.debug("루트 build.gradle Kotlin 플러그인 설정 시작");
38
+ await _configureRootBuildGradle(androidPath);
39
+ _logger.debug("루트 build.gradle Kotlin 플러그인 설정 완료");
40
+
41
+ _logger.debug("build.gradle 설정 시작");
42
+ await _configureBuildGradle(androidPath, npmConfig.version, config.platform?.android?.sdkVersion);
43
+ _logger.debug("build.gradle 설정 완료");
44
+
45
+ _logger.debug("styles.xml 설정 시작");
46
+ await _configureStyles(androidPath);
47
+ _logger.debug("styles.xml 설정 완료");
48
+ }
49
+
50
+ /**
51
+ * Java 21 경로 자동 탐색
52
+ */
53
+ export async function findJava21(): Promise<string | undefined> {
54
+ const patterns = [
55
+ "C:/Program Files/Amazon Corretto/jdk21*",
56
+ "C:/Program Files/Eclipse Adoptium/jdk-21*",
57
+ "C:/Program Files/Java/jdk-21*",
58
+ "C:/Program Files/Microsoft/jdk-21*",
59
+ "/usr/lib/jvm/java-21*",
60
+ "/usr/lib/jvm/temurin-21*",
61
+ ];
62
+
63
+ for (const pattern of patterns) {
64
+ const matches = await fsx.glob(pattern);
65
+ if (matches.length > 0) {
66
+ return matches.sort().at(-1);
67
+ }
68
+ }
69
+
70
+ return undefined;
71
+ }
72
+
73
+ /**
74
+ * Android SDK 경로 탐색
75
+ */
76
+ export async function findAndroidSdk(): Promise<string | undefined> {
77
+ const androidHome =
78
+ env("ANDROID_HOME") ??
79
+ env("ANDROID_SDK_ROOT");
80
+ if (androidHome != null && (await fsx.exists(androidHome))) {
81
+ return androidHome;
82
+ }
83
+
84
+ const candidates = [
85
+ pathx.posixResolve(env("LOCALAPPDATA") ?? "", "Android/Sdk"),
86
+ pathx.posixResolve(env("HOME") ?? "", "Android/Sdk"),
87
+ "C:/Program Files/Android/Sdk",
88
+ "C:/Android/Sdk",
89
+ ];
90
+
91
+ for (const candidate of candidates) {
92
+ if (await fsx.exists(candidate)) {
93
+ return candidate;
94
+ }
95
+ }
96
+
97
+ return undefined;
98
+ }
99
+
100
+ /**
101
+ * JAVA_HOME 경로 설정 (gradle.properties)
102
+ */
103
+ async function _configureJavaHomePath(androidPath: string): Promise<void> {
104
+ const gradlePropsPath = pathx.posixResolve(androidPath, "gradle.properties");
105
+
106
+ if (!(await fsx.exists(gradlePropsPath))) {
107
+ _logger.warn(`gradle.properties 파일을 찾을 수 없습니다: ${gradlePropsPath}`);
108
+ return;
109
+ }
110
+
111
+ let content = await fsx.read(gradlePropsPath);
112
+
113
+ const java21Path = await findJava21();
114
+ if (java21Path != null && !content.includes("org.gradle.java.home")) {
115
+ // Windows 경로 이스케이프
116
+ const escapedPath = java21Path.replace(/\\/g, "\\\\");
117
+ content += `\norg.gradle.java.home=${escapedPath}\n`;
118
+ await fsx.write(gradlePropsPath, content);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Android SDK 경로 설정 (local.properties)
124
+ */
125
+ async function _configureSdkPath(androidPath: string): Promise<void> {
126
+ const localPropsPath = pathx.posixResolve(androidPath, "local.properties");
127
+
128
+ const sdkPath = await findAndroidSdk();
129
+ if (sdkPath != null) {
130
+ // Gradle 호환: 항상 forward slash 사용
131
+ await fsx.write(localPropsPath, `sdk.dir=${pathx.posix(sdkPath)}\n`);
132
+ } else {
133
+ throw new Error(
134
+ "Android SDK를 찾을 수 없습니다.\n" +
135
+ "1. Android Studio를 설치하거나\n" +
136
+ "2. ANDROID_HOME 또는 ANDROID_SDK_ROOT 환경 변수를 설정하세요.",
137
+ );
138
+ }
139
+ }
140
+
141
+ /**
142
+ * AndroidManifest.xml 설정 (XML 파서 기반)
143
+ */
144
+ async function _configureManifest(
145
+ androidPath: string,
146
+ androidConfig?: SdCapacitorAndroidConfig,
147
+ ): Promise<void> {
148
+ const manifestPath = pathx.posixResolve(androidPath, "app/src/main/AndroidManifest.xml");
149
+
150
+ if (!(await fsx.exists(manifestPath))) {
151
+ throw new Error(`AndroidManifest.xml 파일을 찾을 수 없습니다: ${manifestPath}`);
152
+ }
153
+
154
+ const content = await fsx.read(manifestPath);
155
+
156
+ // XML 선언 보존 (xml.parse는 선언을 무시하므로 수동 보존)
157
+ const declMatch = content.match(/^(<\?xml[^?]*\?>\s*)/);
158
+ const xmlDecl = declMatch?.[1] ?? "";
159
+ const xmlBody = declMatch != null ? content.slice(declMatch[0].length) : content;
160
+
161
+ type Attrs = Record<string, string>;
162
+ type XmlNode = { $?: Attrs; [key: string]: unknown };
163
+
164
+ const parsed = xml.parse(xmlBody) as { manifest?: XmlNode };
165
+ const manifest = parsed.manifest;
166
+ if (manifest == null) {
167
+ _logger.warn("AndroidManifest.xml에 manifest 요소가 없습니다");
168
+ return;
169
+ }
170
+
171
+ const apps = manifest["application"] as Array<XmlNode | string> | undefined;
172
+ if (apps == null || apps.length === 0) {
173
+ _logger.warn("AndroidManifest.xml에 application 요소가 없습니다");
174
+ return;
175
+ }
176
+ // 자식 요소 없는 <application></application>은 텍스트 노드로 파싱될 수 있음
177
+ if (typeof apps[0] !== "object") {
178
+ apps[0] = {};
179
+ }
180
+ const app = apps[0];
181
+ app.$ ??= {};
182
+
183
+ // usesCleartextTraffic 설정
184
+ app.$["android:usesCleartextTraffic"] ??= "true";
185
+
186
+ // 추가 권한 설정
187
+ const permissions = androidConfig?.permissions ?? [];
188
+ if (permissions.length > 0) {
189
+ if (manifest["uses-permission"] == null) {
190
+ manifest["uses-permission"] = [];
191
+ }
192
+ const permArray = manifest["uses-permission"] as XmlNode[];
193
+ for (const perm of permissions) {
194
+ const permName = `android.permission.${perm.name}`;
195
+ const exists = permArray.some((p) => p.$?.["android:name"] === permName);
196
+ if (!exists) {
197
+ const attrs: Attrs = { "android:name": permName };
198
+ if (perm.maxSdkVersion != null) {
199
+ attrs["android:maxSdkVersion"] = String(perm.maxSdkVersion);
200
+ }
201
+ if (perm.ignore != null) {
202
+ attrs["tools:ignore"] = perm.ignore;
203
+ manifest.$ ??= {};
204
+ manifest.$["xmlns:tools"] ??= "http://schemas.android.com/tools";
205
+ }
206
+ permArray.push({ $: attrs });
207
+ }
208
+ }
209
+ }
210
+
211
+ // 추가 application 속성 설정
212
+ const appConfig = androidConfig?.config;
213
+ if (appConfig != null) {
214
+ for (const [key, value] of Object.entries(appConfig)) {
215
+ const attrName = `android:${key}`;
216
+ app.$[attrName] ??= String(value);
217
+ }
218
+ }
219
+
220
+ // intentFilters 설정
221
+ const intentFilters = androidConfig?.intentFilters ?? [];
222
+ if (intentFilters.length > 0) {
223
+ const activities = app["activity"] as XmlNode[] | undefined;
224
+ const mainActivity = activities?.find((a) => a.$?.["android:name"] === ".MainActivity");
225
+ if (mainActivity != null) {
226
+ if (mainActivity["intent-filter"] == null) {
227
+ mainActivity["intent-filter"] = [];
228
+ }
229
+ const filterArray = mainActivity["intent-filter"] as XmlNode[];
230
+ for (const filter of intentFilters) {
231
+ const filterKey = filter.action ?? filter.category ?? "";
232
+ if (filterKey === "") continue;
233
+ const exists = filterArray.some((f) => {
234
+ const actions = f["action"] as XmlNode[] | undefined;
235
+ const categories = f["category"] as XmlNode[] | undefined;
236
+ return (
237
+ (filter.action != null &&
238
+ actions?.some((a) => a.$?.["android:name"] === filter.action)) ||
239
+ (filter.category != null &&
240
+ categories?.some((c) => c.$?.["android:name"] === filter.category))
241
+ );
242
+ });
243
+ if (!exists) {
244
+ const newFilter: XmlNode = {};
245
+ if (filter.action != null) {
246
+ newFilter["action"] = [{ $: { "android:name": filter.action } }];
247
+ }
248
+ if (filter.category != null) {
249
+ newFilter["category"] = [{ $: { "android:name": filter.category } }];
250
+ }
251
+ filterArray.push(newFilter);
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ const result = xml.stringify(parsed, { format: true, indentBy: " ", suppressEmptyNode: true });
258
+ await fsx.write(manifestPath, xmlDecl + result);
259
+ }
260
+
261
+ /**
262
+ * 루트 build.gradle에 Kotlin Gradle 플러그인 classpath 추가
263
+ */
264
+ async function _configureRootBuildGradle(androidPath: string): Promise<void> {
265
+ const rootBuildGradlePath = pathx.posixResolve(androidPath, "build.gradle");
266
+
267
+ if (!(await fsx.exists(rootBuildGradlePath))) {
268
+ _logger.warn(`루트 build.gradle 파일을 찾을 수 없습니다: ${rootBuildGradlePath}`);
269
+ return;
270
+ }
271
+
272
+ let content = await fsx.read(rootBuildGradlePath);
273
+
274
+ if (!content.includes("kotlin-gradle-plugin")) {
275
+ content = content.replace(
276
+ /classpath 'com\.android\.tools\.build:gradle:[^']+'/,
277
+ `$&\n classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.20'`,
278
+ );
279
+ await fsx.write(rootBuildGradlePath, content);
280
+ }
281
+ }
282
+
283
+ /**
284
+ * build.gradle 수정 (서명 설정 제외)
285
+ */
286
+ async function _configureBuildGradle(
287
+ androidPath: string,
288
+ version: string,
289
+ sdkVersion?: number,
290
+ ): Promise<void> {
291
+ const buildGradlePath = pathx.posixResolve(androidPath, "app/build.gradle");
292
+
293
+ if (!(await fsx.exists(buildGradlePath))) {
294
+ throw new Error(`build.gradle 파일을 찾을 수 없습니다: ${buildGradlePath}`);
295
+ }
296
+
297
+ let content = await fsx.read(buildGradlePath);
298
+
299
+ // versionName, versionCode 설정
300
+ const cleanVersion = version.replace(/-.*$/, "");
301
+ const versionParts = cleanVersion.split(".");
302
+ const versionCode =
303
+ parseInt(versionParts[0] ?? "0") * 1000000 +
304
+ parseInt(versionParts[1] ?? "0") * 1000 +
305
+ parseInt(versionParts[2] ?? "0");
306
+
307
+ content = content.replace(/versionCode \d+/, `versionCode ${versionCode}`);
308
+ content = content.replace(/versionName "[^"]+"/, `versionName "${version}"`);
309
+
310
+ // SDK 버전 설정
311
+ if (sdkVersion != null) {
312
+ content = content.replace(/minSdkVersion .+/, `minSdkVersion ${sdkVersion}`);
313
+ content = content.replace(/targetSdkVersion .+/, `targetSdkVersion ${sdkVersion}`);
314
+ } else {
315
+ content = content.replace(/minSdkVersion .+/, `minSdkVersion rootProject.ext.minSdkVersion`);
316
+ content = content.replace(
317
+ /targetSdkVersion .+/,
318
+ `targetSdkVersion rootProject.ext.targetSdkVersion`,
319
+ );
320
+ }
321
+
322
+ await fsx.write(buildGradlePath, content);
323
+ }
324
+
325
+ /**
326
+ * styles.xml의 스플래시 테마 수정
327
+ *
328
+ * 1. Theme.SplashScreen parent → Theme.AppCompat.DayNight.NoActionBar
329
+ * Theme.SplashScreen은 android:windowBackground에 compat_splash_screen을 설정하여
330
+ * android:background(@drawable/splash)와 이중 표시를 발생시킨다.
331
+ * installSplashScreen()을 호출하지 않으므로 Theme.SplashScreen 기능이 불필요하다.
332
+ *
333
+ * 2. android:background → android:windowBackground
334
+ * android:background는 View 레벨 속성으로 AppCompat 뷰 계층의 여러 View에 상속되어
335
+ * 동일한 splash 로고가 다중 레이어에 중복 렌더링된다.
336
+ * android:windowBackground는 Window의 DecorView에만 적용되어 단일 렌더링을 보장한다.
337
+ */
338
+ async function _configureStyles(androidPath: string): Promise<void> {
339
+ const stylesPath = pathx.posixResolve(androidPath, "app/src/main/res/values/styles.xml");
340
+
341
+ if (!(await fsx.exists(stylesPath))) {
342
+ _logger.warn(`styles.xml 파일을 찾을 수 없습니다: ${stylesPath}`);
343
+ return;
344
+ }
345
+
346
+ let content = await fsx.read(stylesPath);
347
+ let changed = false;
348
+
349
+ if (content.includes('parent="Theme.SplashScreen"')) {
350
+ content = content.replace(
351
+ 'parent="Theme.SplashScreen"',
352
+ 'parent="Theme.AppCompat.DayNight.NoActionBar"',
353
+ );
354
+ changed = true;
355
+ }
356
+
357
+ if (content.includes('"android:background">@drawable/splash')) {
358
+ content = content.replace(
359
+ '"android:background">@drawable/splash',
360
+ '"android:windowBackground">@drawable/splash',
361
+ );
362
+ changed = true;
363
+ }
364
+
365
+ if (changed) {
366
+ await fsx.write(stylesPath, content);
367
+ }
368
+ }