sparkling-app-cli 2.0.0-rc.2

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 (64) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +48 -0
  3. package/bin.js +16 -0
  4. package/dist/commands/autolink.d.ts +8 -0
  5. package/dist/commands/autolink.d.ts.map +1 -0
  6. package/dist/commands/autolink.js +611 -0
  7. package/dist/commands/autolink.js.map +1 -0
  8. package/dist/commands/build.d.ts +7 -0
  9. package/dist/commands/build.d.ts.map +1 -0
  10. package/dist/commands/build.js +59 -0
  11. package/dist/commands/build.js.map +1 -0
  12. package/dist/commands/copy-assets.d.ts +8 -0
  13. package/dist/commands/copy-assets.d.ts.map +1 -0
  14. package/dist/commands/copy-assets.js +38 -0
  15. package/dist/commands/copy-assets.js.map +1 -0
  16. package/dist/commands/doctor/checks.d.ts +9 -0
  17. package/dist/commands/doctor/checks.d.ts.map +1 -0
  18. package/dist/commands/doctor/checks.js +368 -0
  19. package/dist/commands/doctor/checks.js.map +1 -0
  20. package/dist/commands/doctor/index.d.ts +5 -0
  21. package/dist/commands/doctor/index.d.ts.map +1 -0
  22. package/dist/commands/doctor/index.js +131 -0
  23. package/dist/commands/doctor/index.js.map +1 -0
  24. package/dist/commands/doctor/types.d.ts +18 -0
  25. package/dist/commands/doctor/types.d.ts.map +1 -0
  26. package/dist/commands/doctor/types.js +6 -0
  27. package/dist/commands/doctor/types.js.map +1 -0
  28. package/dist/commands/run-android.d.ts +6 -0
  29. package/dist/commands/run-android.d.ts.map +1 -0
  30. package/dist/commands/run-android.js +93 -0
  31. package/dist/commands/run-android.js.map +1 -0
  32. package/dist/commands/run-ios.d.ts +8 -0
  33. package/dist/commands/run-ios.d.ts.map +1 -0
  34. package/dist/commands/run-ios.js +240 -0
  35. package/dist/commands/run-ios.js.map +1 -0
  36. package/dist/config.d.ts +6 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/config.js +155 -0
  39. package/dist/config.js.map +1 -0
  40. package/dist/index.d.ts +4 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +122 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/types.d.ts +55 -0
  45. package/dist/types.d.ts.map +1 -0
  46. package/dist/types.js +8 -0
  47. package/dist/types.js.map +1 -0
  48. package/dist/utils/exec.d.ts +7 -0
  49. package/dist/utils/exec.d.ts.map +1 -0
  50. package/dist/utils/exec.js +36 -0
  51. package/dist/utils/exec.js.map +1 -0
  52. package/dist/utils/paths.d.ts +22 -0
  53. package/dist/utils/paths.d.ts.map +1 -0
  54. package/dist/utils/paths.js +54 -0
  55. package/dist/utils/paths.js.map +1 -0
  56. package/dist/utils/ui.d.ts +12 -0
  57. package/dist/utils/ui.d.ts.map +1 -0
  58. package/dist/utils/ui.js +81 -0
  59. package/dist/utils/ui.js.map +1 -0
  60. package/dist/utils/verbose.d.ts +4 -0
  61. package/dist/utils/verbose.d.ts.map +1 -0
  62. package/dist/utils/verbose.js +25 -0
  63. package/dist/utils/verbose.js.map +1 -0
  64. package/package.json +44 -0
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildProject = buildProject;
7
+ // Copyright (c) 2025 TikTok Pte. Ltd.
8
+ // Licensed under the Apache License Version 2.0 that can be found in the
9
+ // LICENSE file in the root directory of this source tree.
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const config_1 = require("../config");
13
+ const exec_1 = require("../utils/exec");
14
+ const ui_1 = require("../utils/ui");
15
+ const verbose_1 = require("../utils/verbose");
16
+ const copy_assets_1 = require("./copy-assets");
17
+ function createTempLynxConfig(cwd, appConfigPath) {
18
+ const tempDir = node_path_1.default.resolve(cwd, '.sparkling');
19
+ fs_extra_1.default.ensureDirSync(tempDir);
20
+ const tempConfigPath = node_path_1.default.join(tempDir, 'lynx.config.ts');
21
+ const rel = node_path_1.default.relative(tempDir, node_path_1.default.resolve(appConfigPath)).split(node_path_1.default.sep).join('/');
22
+ const content = [
23
+ `import cfgModule from '${rel.startsWith('.') ? rel : './' + rel}'`,
24
+ 'const cfg: any = (cfgModule as any).default ?? cfgModule',
25
+ 'export default (cfg.lynxConfig ?? cfg) as any',
26
+ ].join('\n');
27
+ fs_extra_1.default.writeFileSync(tempConfigPath, content);
28
+ return tempConfigPath;
29
+ }
30
+ function resolveRspeedyBinary() {
31
+ // Rely on the package manager to place `rspeedy` on PATH via node_modules/.bin
32
+ return 'rspeedy';
33
+ }
34
+ async function buildProject(options) {
35
+ const configPath = node_path_1.default.resolve(options.cwd, options.configFile ?? 'app.config.ts');
36
+ const tempConfigPath = createTempLynxConfig(options.cwd, configPath);
37
+ const rspeedyBin = resolveRspeedyBinary();
38
+ if ((0, verbose_1.isVerboseEnabled)()) {
39
+ (0, verbose_1.verboseLog)(`App config path: ${configPath}`);
40
+ (0, verbose_1.verboseLog)(`Temp Lynx config: ${tempConfigPath}`);
41
+ (0, verbose_1.verboseLog)(`rspeedy binary: ${rspeedyBin}`);
42
+ }
43
+ console.log(ui_1.ui.headline(`Building Lynx bundle with config from ${node_path_1.default.relative(options.cwd, configPath)}`));
44
+ await (0, exec_1.runCommand)(rspeedyBin, ['build', '--config', tempConfigPath], { cwd: options.cwd });
45
+ const shouldCopy = options.skipCopy !== true; // default to no copy
46
+ if (shouldCopy) {
47
+ // Read AppConfig to locate platform asset destinations if provided
48
+ const { config } = await (0, config_1.loadAppConfig)(options.cwd, options.configFile ?? 'app.config.ts');
49
+ await (0, copy_assets_1.copyAssets)({
50
+ cwd: options.cwd,
51
+ androidDest: config.paths?.androidAssets ?? 'android/app/src/main/assets',
52
+ iosDest: config.paths?.iosAssets ?? 'ios/SparklingGo/SparklingGo/Resources/Assets',
53
+ });
54
+ }
55
+ else if ((0, verbose_1.isVerboseEnabled)()) {
56
+ (0, verbose_1.verboseLog)('Skipping asset copy because --skip-copy is in effect.');
57
+ }
58
+ }
59
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface CopyAssetsOptions {
2
+ source?: string;
3
+ androidDest?: string;
4
+ iosDest?: string;
5
+ cwd: string;
6
+ }
7
+ export declare function copyAssets(options: CopyAssetsOptions): Promise<void>;
8
+ //# sourceMappingURL=copy-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-assets.d.ts","sourceRoot":"","sources":["../../src/commands/copy-assets.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAWD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB1E"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.copyAssets = copyAssets;
7
+ // Copyright (c) 2025 TikTok Pte. Ltd.
8
+ // Licensed under the Apache License Version 2.0 that can be found in the
9
+ // LICENSE file in the root directory of this source tree.
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const paths_1 = require("../utils/paths");
13
+ const verbose_1 = require("../utils/verbose");
14
+ const ui_1 = require("../utils/ui");
15
+ function copyDir(src, dest) {
16
+ if (!fs_extra_1.default.existsSync(src)) {
17
+ console.warn(ui_1.ui.warn(`Skip copy: missing source ${src}`));
18
+ return;
19
+ }
20
+ fs_extra_1.default.ensureDirSync(dest);
21
+ fs_extra_1.default.cpSync(src, dest, { recursive: true, force: true, dereference: true });
22
+ }
23
+ async function copyAssets(options) {
24
+ const source = node_path_1.default.resolve(options.cwd, options.source ?? 'dist');
25
+ const androidDest = node_path_1.default.resolve(options.cwd, options.androidDest ?? 'android/app/src/main/assets');
26
+ const iosDest = node_path_1.default.resolve(options.cwd, options.iosDest ?? 'ios/LynxResources/Assets');
27
+ if ((0, verbose_1.isVerboseEnabled)()) {
28
+ (0, verbose_1.verboseLog)(`Copy assets source: ${source}`);
29
+ (0, verbose_1.verboseLog)(`Android assets destination: ${androidDest}`);
30
+ (0, verbose_1.verboseLog)(`iOS assets destination: ${iosDest}`);
31
+ }
32
+ for (const dest of [androidDest, iosDest]) {
33
+ console.log(ui_1.ui.info(`Copying ${(0, paths_1.relativeTo)(options.cwd, source)} -> ${(0, paths_1.relativeTo)(options.cwd, dest)}`));
34
+ copyDir(source, dest);
35
+ }
36
+ console.log(ui_1.ui.success('Assets copied successfully.'));
37
+ }
38
+ //# sourceMappingURL=copy-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-assets.js","sourceRoot":"","sources":["../../src/commands/copy-assets.ts"],"names":[],"mappings":";;;;;AAyBA,gCAgBC;AAzCD,sCAAsC;AACtC,yEAAyE;AACzE,0DAA0D;AAC1D,wDAA0B;AAC1B,0DAA6B;AAC7B,0CAA4C;AAC5C,8CAAgE;AAChE,oCAAiC;AASjC,SAAS,OAAO,CAAC,GAAW,EAAE,IAAY;IACxC,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,OAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,kBAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACvB,kBAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,6BAA6B,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC,CAAC;IACzF,IAAI,IAAA,0BAAgB,GAAE,EAAE,CAAC;QACvB,IAAA,oBAAU,EAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAA,oBAAU,EAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;QACzD,IAAA,oBAAU,EAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,IAAI,CAAC,WAAW,IAAA,kBAAU,EAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,IAAA,kBAAU,EAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CheckResult } from './types';
2
+ export declare function checkNodeVersion(): CheckResult;
3
+ export declare function checkJdk(): CheckResult;
4
+ export declare function checkAndroidSdk(): CheckResult;
5
+ export declare function checkAdb(): CheckResult;
6
+ export declare function checkXcode(): CheckResult;
7
+ export declare function checkCocoaPods(): CheckResult;
8
+ export declare function checkSimulator(): CheckResult;
9
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/checks.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAgF3C,wBAAgB,gBAAgB,IAAI,WAAW,CAyC9C;AAQD,wBAAgB,QAAQ,IAAI,WAAW,CAuDtC;AAED,wBAAgB,eAAe,IAAI,WAAW,CAgD7C;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAwBtC;AAYD,wBAAgB,UAAU,IAAI,WAAW,CAqDxC;AAED,wBAAgB,cAAc,IAAI,WAAW,CA6B5C;AAED,wBAAgB,cAAc,IAAI,WAAW,CA+C5C"}
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ // Copyright (c) 2026 TikTok Pte. Ltd.
3
+ // Licensed under the Apache License Version 2.0 that can be found in the
4
+ // LICENSE file in the root directory of this source tree.
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.checkNodeVersion = checkNodeVersion;
10
+ exports.checkJdk = checkJdk;
11
+ exports.checkAndroidSdk = checkAndroidSdk;
12
+ exports.checkAdb = checkAdb;
13
+ exports.checkXcode = checkXcode;
14
+ exports.checkCocoaPods = checkCocoaPods;
15
+ exports.checkSimulator = checkSimulator;
16
+ const node_child_process_1 = require("node:child_process");
17
+ const node_fs_1 = __importDefault(require("node:fs"));
18
+ const node_path_1 = __importDefault(require("node:path"));
19
+ const semver_1 = __importDefault(require("semver"));
20
+ const verbose_1 = require("../../utils/verbose");
21
+ // ---------------------------------------------------------------------------
22
+ // Helpers
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Run a command and return its stdout (trimmed).
26
+ * Returns `null` if the command is not found or fails.
27
+ */
28
+ function exec(cmd, args) {
29
+ try {
30
+ const result = (0, node_child_process_1.execFileSync)(cmd, args, {
31
+ encoding: 'utf8',
32
+ stdio: ['ignore', 'pipe', 'pipe'],
33
+ timeout: 15000,
34
+ });
35
+ return result.trim();
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /**
42
+ * Some tools (e.g. `java -version`) print to stderr instead of stdout.
43
+ * This helper captures stderr.
44
+ */
45
+ function execStderr(cmd, args) {
46
+ try {
47
+ (0, node_child_process_1.execFileSync)(cmd, args, {
48
+ encoding: 'utf8',
49
+ stdio: ['ignore', 'pipe', 'pipe'],
50
+ timeout: 15000,
51
+ });
52
+ return null; // if it wrote to stdout we won't get stderr this way
53
+ }
54
+ catch (err) {
55
+ // execFileSync throws when the process writes to stderr even with exit 0
56
+ // on some Node versions, or when exit code != 0. The stderr is on the error.
57
+ if (err && typeof err === 'object' && 'stderr' in err) {
58
+ const stderr = err.stderr;
59
+ return typeof stderr === 'string' ? stderr.trim() : stderr.toString('utf8').trim();
60
+ }
61
+ return null;
62
+ }
63
+ }
64
+ /**
65
+ * A more robust way to get java -version output.
66
+ * `java -version` prints to stderr; we try to capture it both ways.
67
+ */
68
+ function getJavaVersionOutput() {
69
+ try {
70
+ const child = (0, node_child_process_1.execFileSync)('java', ['-version'], {
71
+ encoding: 'utf8',
72
+ stdio: ['ignore', 'pipe', 'pipe'],
73
+ timeout: 15000,
74
+ });
75
+ // Some environments return the output on stdout
76
+ if (child && child.trim())
77
+ return child.trim();
78
+ }
79
+ catch (err) {
80
+ if (err && typeof err === 'object' && 'stderr' in err) {
81
+ const stderr = err.stderr;
82
+ const text = typeof stderr === 'string' ? stderr.trim() : stderr.toString('utf8').trim();
83
+ if (text)
84
+ return text;
85
+ }
86
+ if (err && typeof err === 'object' && 'stdout' in err) {
87
+ const stdout = err.stdout;
88
+ const text = typeof stdout === 'string' ? stdout.trim() : stdout.toString('utf8').trim();
89
+ if (text)
90
+ return text;
91
+ }
92
+ }
93
+ return null;
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // General checks
97
+ // ---------------------------------------------------------------------------
98
+ const NODE_REQUIRED = '^22 || ^24';
99
+ function checkNodeVersion() {
100
+ const base = {
101
+ name: 'Node.js',
102
+ category: 'general',
103
+ expected: NODE_REQUIRED,
104
+ };
105
+ const raw = exec('node', ['--version']);
106
+ if (!raw) {
107
+ return {
108
+ ...base,
109
+ status: 'fail',
110
+ message: 'Node.js is not installed or not found in PATH',
111
+ fixHint: 'Node.js is not installed. I need Node.js version ^22 or ^24.',
112
+ };
113
+ }
114
+ const version = semver_1.default.clean(raw);
115
+ if (!version) {
116
+ return {
117
+ ...base,
118
+ status: 'fail',
119
+ version: raw,
120
+ message: `Could not parse Node.js version: ${raw}`,
121
+ fixHint: `Could not parse Node.js version "${raw}". I need Node.js version ^22 or ^24.`,
122
+ };
123
+ }
124
+ (0, verbose_1.verboseLog)(`Node.js version: ${version}`);
125
+ if (!semver_1.default.satisfies(version, NODE_REQUIRED)) {
126
+ return {
127
+ ...base,
128
+ status: 'fail',
129
+ version,
130
+ message: `Node.js ${version} does not satisfy ${NODE_REQUIRED}`,
131
+ fixHint: `Node.js version is ${version}, but Sparkling requires ${NODE_REQUIRED}. Please upgrade Node.js.`,
132
+ };
133
+ }
134
+ return { ...base, status: 'pass', version };
135
+ }
136
+ // ---------------------------------------------------------------------------
137
+ // Android checks
138
+ // ---------------------------------------------------------------------------
139
+ const JDK_MIN_MAJOR = 11;
140
+ function checkJdk() {
141
+ const base = {
142
+ name: 'JDK',
143
+ category: 'android',
144
+ expected: `>= ${JDK_MIN_MAJOR}`,
145
+ };
146
+ const output = getJavaVersionOutput();
147
+ if (!output) {
148
+ return {
149
+ ...base,
150
+ status: 'fail',
151
+ message: 'Java is not installed or not found in PATH',
152
+ fixHint: `Java (JDK) is not installed. I need JDK ${JDK_MIN_MAJOR} or higher.`,
153
+ };
154
+ }
155
+ (0, verbose_1.verboseLog)(`java -version output:\n${output}`);
156
+ // Parse version from patterns like:
157
+ // openjdk version "11.0.21" ...
158
+ // java version "1.8.0_392" ...
159
+ // openjdk version "17.0.9" ...
160
+ const match = output.match(/version\s+"(\d+)(?:\.(\d+))?(?:\.(\d+))?/);
161
+ if (!match) {
162
+ return {
163
+ ...base,
164
+ status: 'fail',
165
+ message: `Could not parse Java version from output: ${output.split('\n')[0]}`,
166
+ fixHint: `Could not determine Java version. I need JDK ${JDK_MIN_MAJOR}+.`,
167
+ };
168
+ }
169
+ let major = parseInt(match[1], 10);
170
+ const minor = match[2] ? parseInt(match[2], 10) : 0;
171
+ const patch = match[3] ? parseInt(match[3], 10) : 0;
172
+ // Old-style versioning: "1.8.0" means Java 8
173
+ if (major === 1 && minor > 0) {
174
+ major = minor;
175
+ }
176
+ const versionStr = `${major}.${minor}.${patch}`;
177
+ if (major < JDK_MIN_MAJOR) {
178
+ return {
179
+ ...base,
180
+ status: 'fail',
181
+ version: versionStr,
182
+ message: `JDK ${major} is below the minimum required version ${JDK_MIN_MAJOR}`,
183
+ fixHint: `JDK version is ${major}, but Sparkling requires JDK ${JDK_MIN_MAJOR}+. Please install JDK ${JDK_MIN_MAJOR}.`,
184
+ };
185
+ }
186
+ return { ...base, status: 'pass', version: versionStr };
187
+ }
188
+ function checkAndroidSdk() {
189
+ const base = {
190
+ name: 'Android SDK',
191
+ category: 'android',
192
+ };
193
+ const sdkRoot = process.env.ANDROID_HOME ?? process.env.ANDROID_SDK_ROOT;
194
+ if (!sdkRoot) {
195
+ return {
196
+ ...base,
197
+ status: 'fail',
198
+ message: 'ANDROID_HOME (or ANDROID_SDK_ROOT) environment variable is not set',
199
+ fixHint: 'ANDROID_HOME environment variable is not set. I need it pointing to my Android SDK installation directory.',
200
+ };
201
+ }
202
+ if (!node_fs_1.default.existsSync(sdkRoot)) {
203
+ return {
204
+ ...base,
205
+ status: 'fail',
206
+ message: `ANDROID_HOME points to "${sdkRoot}" but the directory does not exist`,
207
+ fixHint: `ANDROID_HOME is set to "${sdkRoot}" but that directory does not exist. Please install the Android SDK or fix the path.`,
208
+ };
209
+ }
210
+ (0, verbose_1.verboseLog)(`ANDROID_HOME: ${sdkRoot}`);
211
+ // Check for compileSdk 34 platform
212
+ const platformDir = node_path_1.default.join(sdkRoot, 'platforms', 'android-34');
213
+ if (!node_fs_1.default.existsSync(platformDir)) {
214
+ return {
215
+ ...base,
216
+ status: 'warn',
217
+ version: sdkRoot,
218
+ message: `Android SDK found at "${sdkRoot}" but platform android-34 (compileSdk 34) is missing`,
219
+ fixHint: 'Android SDK is installed but platform android-34 (compileSdk 34) is missing. Please install it via Android Studio SDK Manager or `sdkmanager "platforms;android-34"`.',
220
+ };
221
+ }
222
+ return {
223
+ ...base,
224
+ status: 'pass',
225
+ version: sdkRoot,
226
+ message: 'Android SDK found with platform android-34',
227
+ };
228
+ }
229
+ function checkAdb() {
230
+ const base = {
231
+ name: 'adb',
232
+ category: 'android',
233
+ };
234
+ const output = exec('adb', ['version']);
235
+ if (!output) {
236
+ return {
237
+ ...base,
238
+ status: 'fail',
239
+ message: 'adb is not found in PATH',
240
+ fixHint: 'adb is not found in PATH. It is bundled with Android SDK platform-tools. Please ensure Android SDK platform-tools is installed and added to PATH.',
241
+ };
242
+ }
243
+ // Parse "Android Debug Bridge version X.Y.Z"
244
+ const match = output.match(/(\d+\.\d+\.\d+)/);
245
+ const version = match ? match[1] : undefined;
246
+ (0, verbose_1.verboseLog)(`adb version: ${version ?? output}`);
247
+ return { ...base, status: 'pass', version };
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // iOS checks (macOS only)
251
+ // ---------------------------------------------------------------------------
252
+ const XCODE_MIN_MAJOR = 26;
253
+ function isMacOS() {
254
+ return process.platform === 'darwin';
255
+ }
256
+ function checkXcode() {
257
+ const base = {
258
+ name: 'Xcode',
259
+ category: 'ios',
260
+ expected: `>= ${XCODE_MIN_MAJOR}`,
261
+ };
262
+ if (!isMacOS()) {
263
+ return {
264
+ ...base,
265
+ status: 'skip',
266
+ message: 'Not on macOS — Xcode check skipped',
267
+ };
268
+ }
269
+ const output = exec('xcodebuild', ['-version']);
270
+ if (!output) {
271
+ return {
272
+ ...base,
273
+ status: 'fail',
274
+ message: 'Xcode is not installed or xcodebuild is not available',
275
+ fixHint: `Xcode is not installed. I need Xcode ${XCODE_MIN_MAJOR} or later. Please install it from the Mac App Store.`,
276
+ };
277
+ }
278
+ (0, verbose_1.verboseLog)(`xcodebuild -version output: ${output}`);
279
+ // Parse "Xcode 15.4" or "Xcode 26.0"
280
+ const match = output.match(/Xcode\s+(\d+)(?:\.(\d+))?/);
281
+ if (!match) {
282
+ return {
283
+ ...base,
284
+ status: 'fail',
285
+ message: `Could not parse Xcode version from: ${output.split('\n')[0]}`,
286
+ fixHint: `Could not determine Xcode version. I need Xcode ${XCODE_MIN_MAJOR}+.`,
287
+ };
288
+ }
289
+ const major = parseInt(match[1], 10);
290
+ const minor = match[2] ? parseInt(match[2], 10) : 0;
291
+ const versionStr = `${major}.${minor}`;
292
+ if (major < XCODE_MIN_MAJOR) {
293
+ return {
294
+ ...base,
295
+ status: 'fail',
296
+ version: versionStr,
297
+ message: `Xcode ${versionStr} is below the required version ${XCODE_MIN_MAJOR}`,
298
+ fixHint: `Xcode version is ${versionStr}, but Sparkling requires Xcode ${XCODE_MIN_MAJOR}+. Please update Xcode from the Mac App Store.`,
299
+ };
300
+ }
301
+ return { ...base, status: 'pass', version: versionStr };
302
+ }
303
+ function checkCocoaPods() {
304
+ const base = {
305
+ name: 'CocoaPods',
306
+ category: 'ios',
307
+ };
308
+ if (!isMacOS()) {
309
+ return {
310
+ ...base,
311
+ status: 'skip',
312
+ message: 'Not on macOS — CocoaPods check skipped',
313
+ };
314
+ }
315
+ const output = exec('pod', ['--version']);
316
+ if (!output) {
317
+ return {
318
+ ...base,
319
+ status: 'fail',
320
+ message: 'CocoaPods is not installed or not found in PATH',
321
+ fixHint: 'CocoaPods is not installed. I need CocoaPods for iOS dependency management. Please install it with `sudo gem install cocoapods` or `brew install cocoapods`.',
322
+ };
323
+ }
324
+ const version = output.split('\n')[0].trim();
325
+ (0, verbose_1.verboseLog)(`CocoaPods version: ${version}`);
326
+ return { ...base, status: 'pass', version };
327
+ }
328
+ function checkSimulator() {
329
+ const base = {
330
+ name: 'iOS Simulator',
331
+ category: 'ios',
332
+ };
333
+ if (!isMacOS()) {
334
+ return {
335
+ ...base,
336
+ status: 'skip',
337
+ message: 'Not on macOS — iOS Simulator check skipped',
338
+ };
339
+ }
340
+ const output = exec('xcrun', ['simctl', 'list', 'devices', 'available']);
341
+ if (!output) {
342
+ return {
343
+ ...base,
344
+ status: 'fail',
345
+ message: 'Could not list iOS simulators (xcrun simctl failed)',
346
+ fixHint: 'iOS Simulator is not available. Please install Xcode and an iOS Simulator runtime from Xcode > Settings > Platforms.',
347
+ };
348
+ }
349
+ // Count lines that look like device entries (indented, with UDID in parentheses)
350
+ const deviceLines = output
351
+ .split('\n')
352
+ .filter((line) => /^\s+.+\([\dA-F-]+\)/i.test(line));
353
+ (0, verbose_1.verboseLog)(`Found ${deviceLines.length} available iOS simulators`);
354
+ if (deviceLines.length === 0) {
355
+ return {
356
+ ...base,
357
+ status: 'fail',
358
+ message: 'No available iOS simulators found',
359
+ fixHint: 'No iOS simulators are available. Please install an iOS Simulator runtime from Xcode > Settings > Platforms.',
360
+ };
361
+ }
362
+ return {
363
+ ...base,
364
+ status: 'pass',
365
+ message: `${deviceLines.length} simulator(s) available`,
366
+ };
367
+ }
368
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/doctor/checks.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,yEAAyE;AACzE,0DAA0D;;;;;AAuF1D,4CAyCC;AAQD,4BAuDC;AAED,0CAgDC;AAED,4BAwBC;AAYD,gCAqDC;AAED,wCA6BC;AAED,wCA+CC;AA1ZD,2DAAkD;AAClD,sDAAyB;AACzB,0DAA6B;AAC7B,oDAA4B;AAC5B,iDAAiD;AAGjD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,IAAI,CAAC,GAAW,EAAE,IAAc;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,iCAAY,EAAC,GAAG,EAAE,IAAI,EAAE;YACrC,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,IAAc;IAC7C,IAAI,CAAC;QACH,IAAA,iCAAY,EAAC,GAAG,EAAE,IAAI,EAAE;YACtB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,CAAC,qDAAqD;IACpE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,yEAAyE;QACzE,6EAA6E;QAC7E,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,MAAM,MAAM,GAAI,GAAmC,CAAC,MAAM,CAAC;YAC3D,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,iCAAY,EAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;YAC/C,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,gDAAgD;QAChD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,MAAM,MAAM,GAAI,GAAmC,CAAC,MAAM,CAAC;YAC3D,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACzF,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACtD,MAAM,MAAM,GAAI,GAAmC,CAAC,MAAM,CAAC;YAC3D,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACzF,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,aAAa,GAAG,YAAY,CAAC;AAEnC,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,aAAa;KACxB,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,+CAA+C;YACxD,OAAO,EAAE,8DAA8D;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,oCAAoC,GAAG,EAAE;YAClD,OAAO,EAAE,oCAAoC,GAAG,uCAAuC;SACxF,CAAC;IACJ,CAAC;IAED,IAAA,oBAAU,EAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC,gBAAM,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO;YACP,OAAO,EAAE,WAAW,OAAO,qBAAqB,aAAa,EAAE;YAC/D,OAAO,EAAE,sBAAsB,OAAO,4BAA4B,aAAa,2BAA2B;SAC3G,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,SAAgB,QAAQ;IACtB,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM,aAAa,EAAE;KAChC,CAAC;IAEF,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,2CAA2C,aAAa,aAAa;SAC/E,CAAC;IACJ,CAAC;IAED,IAAA,oBAAU,EAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;IAE/C,oCAAoC;IACpC,kCAAkC;IAClC,iCAAiC;IACjC,iCAAiC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,6CAA6C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7E,OAAO,EAAE,gDAAgD,aAAa,IAAI;SAC3E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,6CAA6C;IAC7C,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;IAEhD,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC1B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,OAAO,KAAK,0CAA0C,aAAa,EAAE;YAC9E,OAAO,EAAE,kBAAkB,KAAK,gCAAgC,aAAa,yBAAyB,aAAa,GAAG;SACvH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,SAAS;KACpB,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEzE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,oEAAoE;YAC7E,OAAO,EACL,4GAA4G;SAC/G,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,2BAA2B,OAAO,oCAAoC;YAC/E,OAAO,EAAE,2BAA2B,OAAO,sFAAsF;SAClI,CAAC;IACJ,CAAC;IAED,IAAA,oBAAU,EAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IAEvC,mCAAmC;IACnC,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,yBAAyB,OAAO,sDAAsD;YAC/F,OAAO,EACL,uKAAuK;SAC1K,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,4CAA4C;KACtD,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,SAAS;KACpB,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,0BAA0B;YACnC,OAAO,EACL,mJAAmJ;SACtJ,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7C,IAAA,oBAAU,EAAC,gBAAgB,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;IAEhD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,MAAM,eAAe,EAAE;KAClC,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACf,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,oCAAoC;SAC9C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,uDAAuD;YAChE,OAAO,EAAE,wCAAwC,eAAe,sDAAsD;SACvH,CAAC;IACJ,CAAC;IAED,IAAA,oBAAU,EAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;IAEpD,qCAAqC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,uCAAuC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACvE,OAAO,EAAE,mDAAmD,eAAe,IAAI;SAChF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;IAEvC,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;QAC5B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,SAAS,UAAU,kCAAkC,eAAe,EAAE;YAC/E,OAAO,EAAE,oBAAoB,UAAU,kCAAkC,eAAe,gDAAgD;SACzI,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACf,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,wCAAwC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,iDAAiD;YAC1D,OAAO,EACL,8JAA8J;SACjK,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,IAAA,oBAAU,EAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAE5C,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAgC;QACxC,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACf,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,4CAA4C;SACtD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,qDAAqD;YAC9D,OAAO,EACL,sHAAsH;SACzH,CAAC;IACJ,CAAC;IAED,iFAAiF;IACjF,MAAM,WAAW,GAAG,MAAM;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvD,IAAA,oBAAU,EAAC,SAAS,WAAW,CAAC,MAAM,2BAA2B,CAAC,CAAC;IAEnE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mCAAmC;YAC5C,OAAO,EACL,6GAA6G;SAChH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,GAAG,WAAW,CAAC,MAAM,yBAAyB;KACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface DoctorOptions {
2
+ platform: 'android' | 'ios' | 'all';
3
+ }
4
+ export declare function doctor(opts: DoctorOptions): Promise<void>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAwEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;CACrC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4F/D"}