mapfix 1.0.0

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/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "mapfix",
3
+ "version": "1.0.0",
4
+ "description": "CLI for configuring and building React Native projects",
5
+ "main": "src/index.js",
6
+ "bin": {
7
+ "mapfix": "src/index.js"
8
+ },
9
+ "scripts": {
10
+ "dev": "node src/index.js"
11
+ },
12
+ "keywords": [
13
+ "react-native",
14
+ "cli",
15
+ "android",
16
+ "google-maps"
17
+ ],
18
+ "author": "Bussz e Emptyxzdev",
19
+ "license": "ISC",
20
+ "type": "commonjs"
21
+ }
@@ -0,0 +1,49 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+ const os = require("node:os");
4
+
5
+ function getAndroidSdkHome() {
6
+ const candidates = [
7
+ process.env.ANDROID_HOME,
8
+ process.env.ANDROID_SDK_ROOT,
9
+ path.join(
10
+ os.homedir(),
11
+ "AppData",
12
+ "Local",
13
+ "Android",
14
+ "Sdk",
15
+ ),
16
+ ];
17
+
18
+ for (const sdkPath of candidates) {
19
+ if (!sdkPath) continue;
20
+
21
+ if (
22
+ fs.existsSync(path.join(sdkPath, "platform-tools")) &&
23
+ fs.existsSync(path.join(sdkPath, "platforms"))
24
+ ) {
25
+ console.log("Android SDK encontrado!");
26
+ return sdkPath;
27
+ }
28
+ }
29
+
30
+ console.log("Android SDK não encontrado.");
31
+
32
+ return null;
33
+ }
34
+
35
+ function getAndroidEnv(sdkPath) {
36
+ return {
37
+ ANDROID_HOME: sdkPath,
38
+ ANDROID_SDK_ROOT: sdkPath,
39
+ PATH: `${path.join(
40
+ sdkPath,
41
+ "platform-tools",
42
+ )}${path.delimiter}${process.env.PATH}`,
43
+ };
44
+ }
45
+
46
+ module.exports = {
47
+ getAndroidSdkHome,
48
+ getAndroidEnv,
49
+ };
@@ -0,0 +1,30 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+
4
+ function isExpoProject() {
5
+ const packageJsonPath = path.join(process.cwd(), "package.json");
6
+
7
+ if (!fs.existsSync(packageJsonPath)) {
8
+ return false;
9
+ }
10
+
11
+ const packageJson = JSON.parse(
12
+ fs.readFileSync(packageJsonPath, "utf-8"),
13
+ );
14
+
15
+ return Boolean(
16
+ packageJson.dependencies?.expo ||
17
+ packageJson.devDependencies?.expo,
18
+ );
19
+ }
20
+
21
+ function hasAppJson() {
22
+ const appJsonPath = path.join(process.cwd(), "app.json");
23
+
24
+ return fs.existsSync(appJsonPath);
25
+ }
26
+
27
+ module.exports = {
28
+ isExpoProject,
29
+ hasAppJson,
30
+ };
@@ -0,0 +1,255 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+ const os = require("node:os");
4
+ const { execSync } = require("node:child_process");
5
+
6
+ function getJava17Home() {
7
+ const javaHome = getSystemJavaHome();
8
+
9
+ if (javaHome) {
10
+ console.log("Java 17 encontrado!");
11
+ return javaHome;
12
+ }
13
+
14
+ const cachedJava = getCachedJava17();
15
+
16
+ if (cachedJava) {
17
+ console.log("JDK 17 encontrado no cache!");
18
+ return cachedJava;
19
+ }
20
+
21
+ console.log("Java 17 não encontrado.");
22
+
23
+ return downloadJava17();
24
+ }
25
+
26
+ function getSystemJavaHome() {
27
+ try {
28
+ const output = execSync("java -XshowSettings:properties -version 2>&1", {
29
+ encoding: "utf-8",
30
+ });
31
+
32
+ const version = output.match(/java\.version\s*=\s*([^\s]+)/)?.[1];
33
+
34
+ if (!version?.startsWith("17")) {
35
+ return;
36
+ }
37
+
38
+ const javaHome = output.match(/java\.home\s*=\s*(.+)/)?.[1]?.trim();
39
+
40
+ return javaHome || null;
41
+ } catch {
42
+ return;
43
+ }
44
+ }
45
+
46
+ function getCachedJava17() {
47
+ const cachePath = getJavaCachePath();
48
+
49
+ const javaExecutable =
50
+ process.platform === "win32"
51
+ ? path.join(cachePath, "bin", "java.exe")
52
+ : path.join(cachePath, "bin", "java");
53
+
54
+ if (!fs.existsSync(javaExecutable)) {
55
+ return;
56
+ }
57
+
58
+ return cachePath;
59
+ }
60
+
61
+ function getJavaCachePath() {
62
+ if (process.platform === "win32") {
63
+ return path.join(
64
+ process.env.LOCALAPPDATA || path.join(os.homedir(), "AppData", "Local"),
65
+ "expo-maps",
66
+ "jdk-17",
67
+ );
68
+ }
69
+
70
+ if (process.platform === "linux") {
71
+ return path.join(os.homedir(), ".expo-maps", "jdk-17");
72
+ }
73
+
74
+ throw new Error(`Sistema operacional não suportado: ${process.platform}`);
75
+ }
76
+
77
+ function getJavaDownloadUrl() {
78
+ if (process.platform === "win32") {
79
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/windows";
80
+ }
81
+
82
+ if (process.platform === "linux") {
83
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/linux";
84
+ }
85
+
86
+ throw new Error(`Sistema operacional não suportado: ${process.platform}`);
87
+ }
88
+
89
+ function downloadJava17() {
90
+ console.log("Baixando JDK 17...");
91
+
92
+ const cachePath = getJavaCachePath();
93
+ const extractPath = path.join(os.tmpdir(), "expo-maps-jdk17");
94
+
95
+ const isWindows = process.platform === "win32";
96
+ const isLinux = process.platform === "linux";
97
+
98
+ const archivePath = path.join(
99
+ os.tmpdir(),
100
+ isWindows ? "expo-maps-jdk17.zip" : "expo-maps-jdk17.tar.gz",
101
+ );
102
+
103
+ const url = getJavaDownloadUrl();
104
+
105
+ try {
106
+ fs.rmSync(extractPath, {
107
+ recursive: true,
108
+ force: true,
109
+ });
110
+
111
+ fs.rmSync(archivePath, {
112
+ force: true,
113
+ });
114
+
115
+ fs.mkdirSync(extractPath, {
116
+ recursive: true,
117
+ });
118
+
119
+ if (isWindows) {
120
+ console.log("Baixando JDK 17 para Windows...");
121
+
122
+ execSync(`curl.exe -L "${url}" -o "${archivePath}"`, {
123
+ stdio: "inherit",
124
+ });
125
+
126
+ console.log("JDK 17 baixado!");
127
+
128
+ console.log("Extraindo JDK 17...");
129
+
130
+ execSync(
131
+ `powershell -NoProfile -Command "Expand-Archive -Path '${archivePath}' -DestinationPath '${extractPath}' -Force"`,
132
+ {
133
+ stdio: "inherit",
134
+ },
135
+ );
136
+ }
137
+
138
+ if (isLinux) {
139
+ console.log("Baixando JDK 17 para Linux...");
140
+
141
+ execSync(`curl -L "${url}" -o "${archivePath}"`, {
142
+ stdio: "inherit",
143
+ });
144
+
145
+ console.log("JDK 17 baixado!");
146
+
147
+ console.log("Extraindo JDK 17...");
148
+
149
+ execSync(`tar -xzf "${archivePath}" -C "${extractPath}"`, {
150
+ stdio: "inherit",
151
+ });
152
+ }
153
+
154
+ const jdkFolder = fs
155
+ .readdirSync(extractPath, {
156
+ withFileTypes: true,
157
+ })
158
+ .find((entry) => entry.isDirectory());
159
+
160
+ if (!jdkFolder) {
161
+ throw new Error("JDK não encontrado no arquivo baixado.");
162
+ }
163
+
164
+ const sourcePath = path.join(extractPath, jdkFolder.name);
165
+
166
+ fs.rmSync(cachePath, {
167
+ recursive: true,
168
+ force: true,
169
+ });
170
+
171
+ fs.mkdirSync(path.dirname(cachePath), {
172
+ recursive: true,
173
+ });
174
+
175
+ fs.cpSync(sourcePath, cachePath, {
176
+ recursive: true,
177
+ });
178
+
179
+ fs.rmSync(archivePath, {
180
+ force: true,
181
+ });
182
+
183
+ fs.rmSync(extractPath, {
184
+ recursive: true,
185
+ force: true,
186
+ });
187
+
188
+ console.log("JDK 17 instalado no cache!");
189
+
190
+ return getCachedJava17();
191
+ } catch (error) {
192
+ console.error("Não foi possível instalar o JDK 17.");
193
+
194
+ if (error?.message) {
195
+ console.error(error.message);
196
+ }
197
+
198
+ return null;
199
+ }
200
+ }
201
+
202
+ function getJavaDownloadUrl() {
203
+ if (process.platform === "win32") {
204
+ if (process.arch !== "x64") {
205
+ throw new Error("Windows ARM64 ainda não é suportado.");
206
+ }
207
+
208
+ return "https://api.adoptium.net/v3/binary/latest/17/ga/windows/x64/jdk/hotspot/normal/eclipse";
209
+ }
210
+
211
+ if (process.platform === "linux") {
212
+ if (process.arch === "x64") {
213
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/linux";
214
+ }
215
+
216
+ if (process.arch === "arm64") {
217
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/linux";
218
+ }
219
+
220
+ throw new Error(`Arquitetura Linux não suportada: ${process.arch}`);
221
+ }
222
+
223
+ if (process.platform === "darwin") {
224
+ if (process.arch === "x64") {
225
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/macos";
226
+ }
227
+
228
+ if (process.arch === "arm64") {
229
+ return "https://api-sdk57.vercel.app/api/sdk/java-version/macos";
230
+ }
231
+
232
+ throw new Error(`Arquitetura macOS não suportada: ${process.arch}`);
233
+ }
234
+
235
+ throw new Error(`Sistema operacional não suportado: ${process.platform}`);
236
+ }
237
+
238
+ function getJavaEnv(javaHome) {
239
+ return {
240
+ ...process.env,
241
+
242
+ JAVA_HOME: javaHome,
243
+
244
+ PATH: `${path.join(
245
+ javaHome,
246
+ "bin",
247
+ )}${path.delimiter}${process.env.PATH || ""}`,
248
+ };
249
+ }
250
+
251
+ module.exports = {
252
+ getJava17Home,
253
+ downloadJava17,
254
+ getJavaEnv,
255
+ };
@@ -0,0 +1,32 @@
1
+ const { execSync } = require("node:child_process");
2
+ const { getJava17Home, getJavaEnv } = require("../checks/java");
3
+ const {
4
+ getAndroidSdkHome,
5
+ getAndroidEnv,
6
+ } = require("../checks/android");
7
+
8
+ function android() {
9
+ const java17 = getJava17Home();
10
+
11
+ if (!java17) {
12
+ console.log("Não foi possível obter o JDK 17.");
13
+ return;
14
+ }
15
+
16
+ const androidSdk = getAndroidSdkHome();
17
+
18
+ if (!androidSdk) {
19
+ console.log("Não foi possível encontrar o Android SDK.");
20
+ return;
21
+ }
22
+
23
+ execSync("npx expo run:android", {
24
+ stdio: "inherit",
25
+ env: {
26
+ ...getJavaEnv(java17),
27
+ ...getAndroidEnv(androidSdk),
28
+ },
29
+ });
30
+ }
31
+
32
+ module.exports = android;
@@ -0,0 +1,100 @@
1
+ const { isExpoProject } = require("../checks/expo");
2
+ const { getJava17Home } = require("../checks/java");
3
+ const { runPrebuild } = require("../expo/prebuild");
4
+ const fs = require("node:fs");
5
+ const path = require("node:path");
6
+
7
+ const {
8
+ hasReactNativeMaps,
9
+ installReactNativeMaps,
10
+ } = require("../expo/maps");
11
+
12
+ const {
13
+ getExpoConfig,
14
+ readAppJson,
15
+ createAppConfig,
16
+ hasMapsPlugin,
17
+ addMapsPlugin,
18
+ validateConfig,
19
+ createDefaultAppConfig,
20
+ } = require("../expo/config");
21
+
22
+ const { createEnvFile, loadEnv } = require("../expo/env");
23
+
24
+ function setup() {
25
+ if (!isExpoProject()) {
26
+ console.log("Este não parece ser um projeto Expo.");
27
+ return;
28
+ }
29
+
30
+ console.log("Projeto Expo encontrado!");
31
+
32
+
33
+ if (!runPrebuild()) {
34
+ return;
35
+ }
36
+
37
+ loadEnv();
38
+
39
+ const java17 = getJava17Home();
40
+
41
+ if (!java17) {
42
+ console.log("Precisamos instalar o JDK 17.");
43
+ return;
44
+ }
45
+
46
+ const hasMaps = hasReactNativeMaps();
47
+
48
+ if (!hasMaps) {
49
+ const installed = installReactNativeMaps();
50
+
51
+ if (!installed) {
52
+ return;
53
+ }
54
+
55
+ console.log("react-native-maps instalado!");
56
+ } else {
57
+ console.log("react-native-maps encontrado!");
58
+ }
59
+
60
+ const config = getExpoConfig();
61
+
62
+ if (!config) {
63
+ createDefaultAppConfig();
64
+ } else {
65
+ console.log(`Configuração encontrada: ${config}`);
66
+
67
+ if (config === "app.json") {
68
+ const appJson = readAppJson();
69
+
70
+ createAppConfig(appJson);
71
+
72
+ console.log("app.config.js criado!");
73
+ }
74
+ }
75
+
76
+ createEnvFile();
77
+
78
+ const hasPlugin = hasMapsPlugin();
79
+
80
+ if (!hasPlugin) {
81
+ addMapsPlugin();
82
+ } else {
83
+ console.log("Plugin react-native-maps encontrado!");
84
+ }
85
+
86
+
87
+ runPrebuild();
88
+
89
+ validateConfig();
90
+
91
+
92
+ const appJsonPath = path.join(process.cwd(), "app.json");
93
+
94
+ if (fs.existsSync(appJsonPath)) {
95
+ fs.unlinkSync(appJsonPath);
96
+ console.log("app.json removido!");
97
+ }
98
+ }
99
+
100
+ module.exports = setup;
@@ -0,0 +1,170 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+
4
+ function getExpoConfig() {
5
+ const cwd = process.cwd();
6
+
7
+ const appJsonPath = path.join(cwd, "app.json");
8
+ const appConfigPath = path.join(cwd, "app.config.js");
9
+
10
+ if (fs.existsSync(appConfigPath)) {
11
+ return "app.config.js";
12
+ }
13
+
14
+ if (fs.existsSync(appJsonPath)) {
15
+ return "app.json";
16
+ }
17
+
18
+ return null;
19
+ }
20
+
21
+ function readAppJson() {
22
+ const appJsonPath = path.join(process.cwd(), "app.json");
23
+
24
+ return JSON.parse(fs.readFileSync(appJsonPath, "utf-8"));
25
+ }
26
+
27
+ function createAppConfig(appJson) {
28
+ const appConfigPath = path.join(process.cwd(), "app.config.js");
29
+
30
+ const config = structuredClone(appJson);
31
+
32
+ const plugins = config.expo.plugins ?? [];
33
+
34
+ plugins.push([
35
+ "react-native-maps",
36
+ {
37
+ androidGoogleMapsApiKey: "__EXPO_MAPS_ENV__",
38
+ },
39
+ ]);
40
+
41
+ config.expo.plugins = plugins;
42
+
43
+ let content = JSON.stringify(config, null, 2);
44
+
45
+ content = content.replace(
46
+ `"__EXPO_MAPS_ENV__"`,
47
+ "process.env.EXPO_PUBLIC_KEY_GOOGLE_MAPS",
48
+ );
49
+
50
+ content = `module.exports = ${content};`;
51
+
52
+ fs.writeFileSync(appConfigPath, content);
53
+ }
54
+
55
+ function hasMapsPlugin() {
56
+ const config = require(path.join(process.cwd(), "app.config.js"));
57
+
58
+ return config.expo.plugins?.some((plugin) => {
59
+ if (typeof plugin === "string") {
60
+ return plugin === "react-native-maps";
61
+ }
62
+
63
+ return plugin[0] === "react-native-maps";
64
+ });
65
+ }
66
+
67
+ function addMapsPlugin() {
68
+ const appConfigPath = path.join(process.cwd(), "app.config.js");
69
+
70
+ let content = fs.readFileSync(appConfigPath, "utf-8");
71
+
72
+ const mapsPlugin = `[
73
+ "react-native-maps",
74
+ {
75
+ androidGoogleMapsApiKey: process.env.EXPO_PUBLIC_KEY_GOOGLE_MAPS,
76
+ }
77
+ ]`;
78
+
79
+ content = content.replace(
80
+ /"?plugins"?\s*:\s*\[/,
81
+ `plugins: [\n ${mapsPlugin},`,
82
+ );
83
+
84
+ fs.writeFileSync(appConfigPath, content);
85
+
86
+ console.log("Plugin react-native-maps adicionado!");
87
+ }
88
+
89
+ function validateConfig() {
90
+ try {
91
+ const config = require(path.join(process.cwd(), "app.config.js"));
92
+
93
+ const plugins = config.expo?.plugins ?? [];
94
+
95
+ const mapsPlugin = plugins.find((plugin) => {
96
+ if (typeof plugin === "string") {
97
+ return plugin === "react-native-maps";
98
+ }
99
+
100
+ return plugin[0] === "react-native-maps";
101
+ });
102
+
103
+ if (!mapsPlugin) {
104
+ console.log("Plugin react-native-maps não encontrado.");
105
+
106
+ return false;
107
+ }
108
+
109
+ if (!process.env.EXPO_PUBLIC_KEY_GOOGLE_MAPS) {
110
+ console.log(
111
+ "Google Maps API Key não configurada. " +
112
+ "Configure EXPO_PUBLIC_KEY_GOOGLE_MAPS no .env.",
113
+ );
114
+
115
+ return false;
116
+ }
117
+
118
+ console.log("Configuração do Google Maps já configurada!");
119
+
120
+ return true;
121
+ } catch {
122
+ console.log("Não foi possível validar o app.config.js.");
123
+
124
+ return false;
125
+ }
126
+ }
127
+
128
+ function createDefaultAppConfig() {
129
+ const appConfigPath = path.join(process.cwd(), "app.config.js");
130
+
131
+ const content = `module.exports = {
132
+ expo: {
133
+ name: "meu-app",
134
+ slug: "meu-app",
135
+ version: "1.0.0",
136
+ orientation: "portrait",
137
+ userInterfaceStyle: "automatic",
138
+
139
+ plugins: [
140
+ "expo-router",
141
+ [
142
+ "react-native-maps",
143
+ {
144
+ androidGoogleMapsApiKey:
145
+ process.env.EXPO_PUBLIC_KEY_GOOGLE_MAPS,
146
+ },
147
+ ],
148
+ ],
149
+
150
+ experiments: {
151
+ typedRoutes: true,
152
+ reactCompiler: true,
153
+ },
154
+ },
155
+ };`;
156
+
157
+ fs.writeFileSync(appConfigPath, content);
158
+
159
+ console.log("app.config.js criado!");
160
+ }
161
+
162
+ module.exports = {
163
+ getExpoConfig,
164
+ readAppJson,
165
+ createDefaultAppConfig,
166
+ createAppConfig,
167
+ hasMapsPlugin,
168
+ addMapsPlugin,
169
+ validateConfig,
170
+ };
@@ -0,0 +1,62 @@
1
+ const fs = require("node:fs");
2
+ const path = require("node:path");
3
+
4
+ function createEnvFile() {
5
+ const envPath = path.join(process.cwd(), ".env");
6
+
7
+ if (!fs.existsSync(envPath)) {
8
+ fs.writeFileSync(envPath, "EXPO_PUBLIC_KEY_GOOGLE_MAPS=\n");
9
+
10
+ console.log(".env criado!");
11
+
12
+ return;
13
+ }
14
+
15
+ let content = fs.readFileSync(envPath, "utf-8");
16
+
17
+ const hasGoogleMapsKey = /^EXPO_PUBLIC_KEY_GOOGLE_MAPS=/m.test(content);
18
+
19
+ if (hasGoogleMapsKey) {
20
+ console.log("Chave do Google Maps já existe no .env.");
21
+
22
+ return;
23
+ }
24
+
25
+ if (content.length > 0 && !content.endsWith("\n")) {
26
+ content += "\n";
27
+ }
28
+
29
+ content += "EXPO_PUBLIC_KEY_GOOGLE_MAPS=\n";
30
+
31
+ fs.writeFileSync(envPath, content);
32
+
33
+ console.log("Chave do Google Maps adicionada ao .env!");
34
+ }
35
+
36
+ function loadEnv() {
37
+ const envPath = path.join(process.cwd(), ".env");
38
+
39
+ if (!fs.existsSync(envPath)) {
40
+ return;
41
+ }
42
+
43
+ const content = fs.readFileSync(envPath, "utf-8");
44
+
45
+ for (const line of content.split(/\r?\n/)) {
46
+ const match = line.match(/^([^#=\s]+)\s*=\s*(.*)$/);
47
+
48
+ if (!match) continue;
49
+
50
+ const [, key, value] = match;
51
+
52
+ if (!process.env[key]) {
53
+ process.env[key] = value;
54
+ }
55
+ }
56
+
57
+ }
58
+
59
+ module.exports = {
60
+ createEnvFile,
61
+ loadEnv,
62
+ };
@@ -0,0 +1,40 @@
1
+ const { execSync } = require("node:child_process");
2
+ const fs = require("node:fs");
3
+ const path = require("node:path");
4
+
5
+ function hasReactNativeMaps() {
6
+ const packageJsonPath = path.join(
7
+ process.cwd(),
8
+ "package.json",
9
+ );
10
+
11
+ const packageJson = JSON.parse(
12
+ fs.readFileSync(packageJsonPath, "utf-8"),
13
+ );
14
+
15
+ return Boolean(
16
+ packageJson.dependencies?.["react-native-maps"] ||
17
+ packageJson.devDependencies?.["react-native-maps"],
18
+ );
19
+ }
20
+
21
+ function installReactNativeMaps() {
22
+ try {
23
+ execSync("npx expo install react-native-maps", {
24
+ stdio: "inherit",
25
+ });
26
+
27
+ return true;
28
+ } catch {
29
+ console.log(
30
+ "Não foi possível instalar o react-native-maps.",
31
+ );
32
+
33
+ return false;
34
+ }
35
+ }
36
+
37
+ module.exports = {
38
+ hasReactNativeMaps,
39
+ installReactNativeMaps,
40
+ };
@@ -0,0 +1,20 @@
1
+ const { execSync } = require("node:child_process");
2
+
3
+ function runPrebuild(clean = false) {
4
+ try {
5
+ const command = clean ? "npx expo prebuild --clean" : "npx expo prebuild";
6
+
7
+ execSync(command, {
8
+ stdio: "inherit",
9
+ });
10
+
11
+ return true;
12
+ } catch {
13
+ console.log("Não foi possível executar o prebuild.");
14
+ return false;
15
+ }
16
+ }
17
+
18
+ module.exports = {
19
+ runPrebuild,
20
+ };
package/src/index.js ADDED
@@ -0,0 +1,31 @@
1
+ const setup = require("./commands/setup");
2
+ const android = require("./commands/android");
3
+ const { runPrebuild } = require("./expo/prebuild");
4
+
5
+ function main() {
6
+ const command = process.argv[2];
7
+
8
+ if (!command) {
9
+ console.log("Use: bussz setup | prebuild | android");
10
+ return;
11
+ }
12
+
13
+ if (command === "setup") {
14
+ setup();
15
+ return;
16
+ }
17
+
18
+ if (command === "prebuild") {
19
+ runPrebuild(process.argv.includes("--clean"));
20
+ return;
21
+ }
22
+
23
+ if (command === "android") {
24
+ android();
25
+ return;
26
+ }
27
+
28
+ console.log(`Comando desconhecido: ${command}`);
29
+ }
30
+
31
+ main();
File without changes