@factiii/stack 0.1.33 → 0.1.35
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/README.md +441 -441
- package/bin/stack +46 -0
- package/dist/cli/fix.d.ts.map +1 -1
- package/dist/cli/fix.js +17 -11
- package/dist/cli/fix.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +20 -7
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/scan.d.ts.map +1 -1
- package/dist/cli/scan.js +14 -22
- package/dist/cli/scan.js.map +1 -1
- package/dist/generators/generate-stack-yml.d.ts +1 -1
- package/dist/generators/generate-stack-yml.d.ts.map +1 -1
- package/dist/generators/generate-stack-yml.js +96 -69
- package/dist/generators/generate-stack-yml.js.map +1 -1
- package/dist/plugins/addons/openclaw/index.d.ts +45 -0
- package/dist/plugins/addons/openclaw/index.d.ts.map +1 -0
- package/dist/plugins/addons/openclaw/index.js +107 -0
- package/dist/plugins/addons/openclaw/index.js.map +1 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.d.ts +19 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.d.ts.map +1 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.js +441 -0
- package/dist/plugins/addons/openclaw/scanfix/setup.js.map +1 -0
- package/dist/plugins/frameworks/expo/index.d.ts +45 -0
- package/dist/plugins/frameworks/expo/index.d.ts.map +1 -0
- package/dist/plugins/frameworks/expo/index.js +549 -0
- package/dist/plugins/frameworks/expo/index.js.map +1 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js +8 -8
- package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/pipelines/aws/index.js +15 -15
- package/dist/plugins/pipelines/aws/prod.js +7 -7
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +3 -1
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +17 -7
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/config.js +4 -4
- package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/credentials.js +30 -76
- package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts +1 -4
- package/dist/plugins/pipelines/aws/scanfix/db-replication.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/db-replication.js +11 -41
- package/dist/plugins/pipelines/aws/scanfix/db-replication.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ec2.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ec2.js +64 -113
- package/dist/plugins/pipelines/aws/scanfix/ec2.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ecr.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ecr.js +27 -36
- package/dist/plugins/pipelines/aws/scanfix/ecr.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/iam.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/iam.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/iam.js +37 -46
- package/dist/plugins/pipelines/aws/scanfix/iam.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/rds.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/rds.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/rds.js +43 -108
- package/dist/plugins/pipelines/aws/scanfix/rds.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/s3.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/s3.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/s3.js +46 -55
- package/dist/plugins/pipelines/aws/scanfix/s3.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/security-groups.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/security-groups.js +83 -82
- package/dist/plugins/pipelines/aws/scanfix/security-groups.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ses.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ses.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ses.js +31 -53
- package/dist/plugins/pipelines/aws/scanfix/ses.js.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts +17 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js +180 -0
- package/dist/plugins/pipelines/aws/scanfix/ssh-bridge.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts +1 -0
- package/dist/plugins/pipelines/aws/scanfix/vpc.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/scanfix/vpc.js +97 -98
- package/dist/plugins/pipelines/aws/scanfix/vpc.js.map +1 -1
- package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts +101 -28
- package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts.map +1 -1
- package/dist/plugins/pipelines/aws/utils/aws-helpers.js +428 -76
- package/dist/plugins/pipelines/aws/utils/aws-helpers.js.map +1 -1
- package/dist/plugins/pipelines/factiii/index.d.ts +11 -1
- package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/index.js +183 -33
- package/dist/plugins/pipelines/factiii/index.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/ansible.js +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/ansible.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js +6 -6
- package/dist/plugins/pipelines/factiii/scanfix/bootstrap.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/config.js +4 -4
- package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js +7 -7
- package/dist/plugins/pipelines/factiii/scanfix/env-files.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js +73 -13
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -1
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js +52 -4
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -1
- package/dist/plugins/servers/mac/index.js +13 -13
- package/dist/plugins/servers/mac/scanfix/config.js +5 -5
- package/dist/plugins/servers/mac/scanfix/config.js.map +1 -1
- package/dist/plugins/servers/mac/scanfix/containers.js +1 -1
- package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -1
- package/dist/plugins/servers/mac/scanfix/system.js +6 -6
- package/dist/plugins/servers/mac/scanfix/system.js.map +1 -1
- package/dist/plugins/servers/mac/staging.js +4 -4
- package/dist/plugins/servers/windows/index.js +2 -2
- package/dist/plugins/servers/windows/index.js.map +1 -1
- package/dist/scanfix/fixes/certbot.js +1 -1
- package/dist/scripts/validate-example-values.d.ts +1 -1
- package/dist/scripts/validate-example-values.js +6 -6
- package/dist/utils/config-helpers.d.ts +3 -0
- package/dist/utils/config-helpers.d.ts.map +1 -1
- package/dist/utils/config-helpers.js.map +1 -1
- package/dist/utils/secret-prompts.d.ts +5 -2
- package/dist/utils/secret-prompts.d.ts.map +1 -1
- package/dist/utils/secret-prompts.js +55 -32
- package/dist/utils/secret-prompts.js.map +1 -1
- package/dist/utils/template-generator.js +71 -71
- package/package.json +8 -1
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Expo (React Native) Framework Plugin
|
|
4
|
+
*
|
|
5
|
+
* Validates all dependencies needed for EAS Build to work.
|
|
6
|
+
* Each dependency has its own scanfix so `eas build` succeeds
|
|
7
|
+
* once all checks pass.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
const config_helpers_js_1 = require("../../../utils/config-helpers.js");
|
|
47
|
+
/**
|
|
48
|
+
* Read and parse app.json from rootDir
|
|
49
|
+
*/
|
|
50
|
+
function readAppJson(rootDir) {
|
|
51
|
+
const appJsonPath = path.join(rootDir, 'app.json');
|
|
52
|
+
if (!fs.existsSync(appJsonPath))
|
|
53
|
+
return null;
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(fs.readFileSync(appJsonPath, 'utf8'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if any app config file exists (app.json, app.config.js, app.config.ts)
|
|
63
|
+
*/
|
|
64
|
+
function hasAppConfig(rootDir) {
|
|
65
|
+
return (fs.existsSync(path.join(rootDir, 'app.json')) ||
|
|
66
|
+
fs.existsSync(path.join(rootDir, 'app.config.js')) ||
|
|
67
|
+
fs.existsSync(path.join(rootDir, 'app.config.ts')));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get dev OS from stack.local.yml or fall back to process.platform
|
|
71
|
+
*/
|
|
72
|
+
function getDevOS(rootDir) {
|
|
73
|
+
const localConfig = (0, config_helpers_js_1.loadLocalConfig)(rootDir);
|
|
74
|
+
if (localConfig.dev_os)
|
|
75
|
+
return localConfig.dev_os;
|
|
76
|
+
if (process.platform === 'darwin')
|
|
77
|
+
return 'mac';
|
|
78
|
+
if (process.platform === 'win32')
|
|
79
|
+
return 'windows';
|
|
80
|
+
return 'ubuntu';
|
|
81
|
+
}
|
|
82
|
+
class ExpoPlugin {
|
|
83
|
+
// ============================================================
|
|
84
|
+
// STATIC METADATA
|
|
85
|
+
// ============================================================
|
|
86
|
+
static id = 'expo';
|
|
87
|
+
static name = 'Expo (React Native)';
|
|
88
|
+
static category = 'framework';
|
|
89
|
+
static version = '1.0.0';
|
|
90
|
+
static requiredEnvVars = [];
|
|
91
|
+
static configSchema = {
|
|
92
|
+
expo: {
|
|
93
|
+
profile: null, // Optional: EAS build profile override
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
static autoConfigSchema = {
|
|
97
|
+
has_expo: 'boolean',
|
|
98
|
+
expo_version: 'string',
|
|
99
|
+
has_app_json: 'boolean',
|
|
100
|
+
has_eas_json: 'boolean',
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Determine if this plugin should be loaded for this project
|
|
104
|
+
* Loads if 'expo' is in package.json dependencies
|
|
105
|
+
*/
|
|
106
|
+
static async shouldLoad(rootDir, _config) {
|
|
107
|
+
const pkgPath = path.join(rootDir, 'package.json');
|
|
108
|
+
if (!fs.existsSync(pkgPath))
|
|
109
|
+
return false;
|
|
110
|
+
try {
|
|
111
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
112
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
113
|
+
return !!deps.expo;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ============================================================
|
|
120
|
+
// FIXES - All EAS Build dependencies
|
|
121
|
+
// ============================================================
|
|
122
|
+
static fixes = [
|
|
123
|
+
// ============================================================
|
|
124
|
+
// CLI & Runtime
|
|
125
|
+
// ============================================================
|
|
126
|
+
{
|
|
127
|
+
id: 'expo-not-installed',
|
|
128
|
+
stage: 'dev',
|
|
129
|
+
severity: 'critical',
|
|
130
|
+
description: '📦 Expo SDK not found in package.json dependencies',
|
|
131
|
+
scan: async (_config, rootDir) => {
|
|
132
|
+
const pkgPath = path.join(rootDir, 'package.json');
|
|
133
|
+
if (!fs.existsSync(pkgPath))
|
|
134
|
+
return true;
|
|
135
|
+
try {
|
|
136
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
137
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
138
|
+
return !deps.expo;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
fix: async (_config, rootDir) => {
|
|
145
|
+
try {
|
|
146
|
+
(0, child_process_1.execSync)('pnpm add expo', { cwd: rootDir, stdio: 'inherit' });
|
|
147
|
+
console.log(' Installed Expo SDK');
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
manualFix: 'Run: pnpm add expo',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: 'eas-cli-not-installed',
|
|
158
|
+
stage: 'dev',
|
|
159
|
+
severity: 'critical',
|
|
160
|
+
description: '🔧 EAS CLI not installed (required for eas build)',
|
|
161
|
+
scan: async (_config, _rootDir) => {
|
|
162
|
+
try {
|
|
163
|
+
(0, child_process_1.execSync)('npx eas --version', { stdio: 'pipe' });
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
fix: async (_config, _rootDir) => {
|
|
171
|
+
try {
|
|
172
|
+
(0, child_process_1.execSync)('pnpm add -g eas-cli', { stdio: 'inherit' });
|
|
173
|
+
console.log(' Installed eas-cli globally');
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
manualFix: 'Run: pnpm add -g eas-cli',
|
|
181
|
+
},
|
|
182
|
+
// ============================================================
|
|
183
|
+
// Config Files
|
|
184
|
+
// ============================================================
|
|
185
|
+
{
|
|
186
|
+
id: 'expo-app-config-missing',
|
|
187
|
+
stage: 'dev',
|
|
188
|
+
severity: 'critical',
|
|
189
|
+
description: '📋 Expo app config not found (app.json, app.config.js, or app.config.ts)',
|
|
190
|
+
scan: async (_config, rootDir) => {
|
|
191
|
+
return !hasAppConfig(rootDir);
|
|
192
|
+
},
|
|
193
|
+
fix: null,
|
|
194
|
+
manualFix: 'Create app.json in your project root:\n' +
|
|
195
|
+
' {\n' +
|
|
196
|
+
' "expo": {\n' +
|
|
197
|
+
' "name": "My App",\n' +
|
|
198
|
+
' "slug": "my-app",\n' +
|
|
199
|
+
' "version": "1.0.0",\n' +
|
|
200
|
+
' "ios": { "bundleIdentifier": "com.example.myapp" },\n' +
|
|
201
|
+
' "android": { "package": "com.example.myapp" }\n' +
|
|
202
|
+
' }\n' +
|
|
203
|
+
' }',
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
id: 'expo-eas-json-missing',
|
|
207
|
+
stage: 'dev',
|
|
208
|
+
severity: 'critical',
|
|
209
|
+
description: '📋 eas.json not found (required for EAS Build configuration)',
|
|
210
|
+
scan: async (_config, rootDir) => {
|
|
211
|
+
return !fs.existsSync(path.join(rootDir, 'eas.json'));
|
|
212
|
+
},
|
|
213
|
+
fix: async (_config, rootDir) => {
|
|
214
|
+
try {
|
|
215
|
+
(0, child_process_1.execSync)('npx eas build:configure', { cwd: rootDir, stdio: 'inherit' });
|
|
216
|
+
console.log(' Created eas.json via eas build:configure');
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
manualFix: 'Run: npx eas build:configure',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: 'expo-app-name-missing',
|
|
227
|
+
stage: 'dev',
|
|
228
|
+
severity: 'warning',
|
|
229
|
+
description: '📝 Expo app name or slug missing in app.json',
|
|
230
|
+
scan: async (_config, rootDir) => {
|
|
231
|
+
const appJson = readAppJson(rootDir);
|
|
232
|
+
if (!appJson)
|
|
233
|
+
return false; // Caught by expo-app-config-missing
|
|
234
|
+
return !appJson.expo?.name || !appJson.expo?.slug;
|
|
235
|
+
},
|
|
236
|
+
fix: null,
|
|
237
|
+
manualFix: 'Add name and slug to app.json:\n' +
|
|
238
|
+
' "expo": {\n' +
|
|
239
|
+
' "name": "Your App Name",\n' +
|
|
240
|
+
' "slug": "your-app-slug"\n' +
|
|
241
|
+
' }',
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
id: 'expo-bundle-id-missing',
|
|
245
|
+
stage: 'dev',
|
|
246
|
+
severity: 'warning',
|
|
247
|
+
description: '🍎 iOS bundleIdentifier not set in app.json (required for iOS builds)',
|
|
248
|
+
scan: async (_config, rootDir) => {
|
|
249
|
+
const appJson = readAppJson(rootDir);
|
|
250
|
+
if (!appJson)
|
|
251
|
+
return false; // Caught by expo-app-config-missing
|
|
252
|
+
return !appJson.expo?.ios?.bundleIdentifier;
|
|
253
|
+
},
|
|
254
|
+
fix: null,
|
|
255
|
+
manualFix: 'Add ios.bundleIdentifier to app.json:\n' +
|
|
256
|
+
' "expo": {\n' +
|
|
257
|
+
' "ios": { "bundleIdentifier": "com.yourcompany.yourapp" }\n' +
|
|
258
|
+
' }',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: 'expo-package-name-missing',
|
|
262
|
+
stage: 'dev',
|
|
263
|
+
severity: 'warning',
|
|
264
|
+
description: '🤖 Android package name not set in app.json (required for Android builds)',
|
|
265
|
+
scan: async (_config, rootDir) => {
|
|
266
|
+
const appJson = readAppJson(rootDir);
|
|
267
|
+
if (!appJson)
|
|
268
|
+
return false; // Caught by expo-app-config-missing
|
|
269
|
+
return !appJson.expo?.android?.package;
|
|
270
|
+
},
|
|
271
|
+
fix: null,
|
|
272
|
+
manualFix: 'Add android.package to app.json:\n' +
|
|
273
|
+
' "expo": {\n' +
|
|
274
|
+
' "android": { "package": "com.yourcompany.yourapp" }\n' +
|
|
275
|
+
' }',
|
|
276
|
+
},
|
|
277
|
+
// ============================================================
|
|
278
|
+
// Auth
|
|
279
|
+
// ============================================================
|
|
280
|
+
{
|
|
281
|
+
id: 'expo-not-logged-in',
|
|
282
|
+
stage: 'dev',
|
|
283
|
+
severity: 'critical',
|
|
284
|
+
description: '🔑 Not logged into Expo account (required for EAS Build)',
|
|
285
|
+
scan: async (_config, _rootDir) => {
|
|
286
|
+
try {
|
|
287
|
+
(0, child_process_1.execSync)('npx eas whoami', { stdio: 'pipe' });
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
fix: async (_config, _rootDir) => {
|
|
295
|
+
try {
|
|
296
|
+
(0, child_process_1.execSync)('npx eas login', { stdio: 'inherit' });
|
|
297
|
+
// Verify login succeeded
|
|
298
|
+
(0, child_process_1.execSync)('npx eas whoami', { stdio: 'pipe' });
|
|
299
|
+
console.log(' Logged into Expo account');
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
manualFix: 'Log into your Expo account:\n' +
|
|
307
|
+
' npx eas login\n' +
|
|
308
|
+
' For CI, set EXPO_TOKEN environment variable',
|
|
309
|
+
},
|
|
310
|
+
// ============================================================
|
|
311
|
+
// Platform Tools (OS-aware)
|
|
312
|
+
// ============================================================
|
|
313
|
+
{
|
|
314
|
+
id: 'expo-xcode-missing',
|
|
315
|
+
stage: 'dev',
|
|
316
|
+
severity: 'warning',
|
|
317
|
+
description: '🍎 Xcode not installed (required for local iOS builds)',
|
|
318
|
+
scan: async (_config, rootDir) => {
|
|
319
|
+
const devOS = getDevOS(rootDir);
|
|
320
|
+
if (devOS !== 'mac')
|
|
321
|
+
return false; // Only check on macOS
|
|
322
|
+
try {
|
|
323
|
+
(0, child_process_1.execSync)('xcodebuild -version', { stdio: 'pipe' });
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
fix: null,
|
|
331
|
+
manualFix: 'Install Xcode from the Mac App Store:\n' +
|
|
332
|
+
' 1. Open App Store and search for "Xcode"\n' +
|
|
333
|
+
' 2. Install Xcode\n' +
|
|
334
|
+
' 3. Run: sudo xcode-select --switch /Applications/Xcode.app\n' +
|
|
335
|
+
' 4. Run: sudo xcodebuild -license accept',
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
id: 'expo-cocoapods-missing',
|
|
339
|
+
stage: 'dev',
|
|
340
|
+
severity: 'warning',
|
|
341
|
+
description: '🍎 CocoaPods not installed (required for iOS builds)',
|
|
342
|
+
scan: async (_config, rootDir) => {
|
|
343
|
+
const devOS = getDevOS(rootDir);
|
|
344
|
+
if (devOS !== 'mac')
|
|
345
|
+
return false; // Only check on macOS
|
|
346
|
+
try {
|
|
347
|
+
(0, child_process_1.execSync)('pod --version', { stdio: 'pipe' });
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
fix: async (_config, _rootDir) => {
|
|
355
|
+
try {
|
|
356
|
+
(0, child_process_1.execSync)('brew install cocoapods', { stdio: 'inherit' });
|
|
357
|
+
console.log(' Installed CocoaPods via Homebrew');
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
// Fallback to gem install
|
|
362
|
+
try {
|
|
363
|
+
(0, child_process_1.execSync)('sudo gem install cocoapods', { stdio: 'inherit' });
|
|
364
|
+
console.log(' Installed CocoaPods via gem');
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
manualFix: 'Run: brew install cocoapods (or: sudo gem install cocoapods)',
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: 'expo-jdk-missing',
|
|
376
|
+
stage: 'dev',
|
|
377
|
+
severity: 'warning',
|
|
378
|
+
description: '☕ JDK 17+ not installed (required for Android builds)',
|
|
379
|
+
scan: async (_config, _rootDir) => {
|
|
380
|
+
try {
|
|
381
|
+
const output = (0, child_process_1.execSync)('java -version 2>&1', {
|
|
382
|
+
encoding: 'utf8',
|
|
383
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
384
|
+
});
|
|
385
|
+
// Parse version: "openjdk version "17.0.x"" or "java version "17.0.x""
|
|
386
|
+
const versionMatch = output.match(/version "(\d+)/);
|
|
387
|
+
if (versionMatch) {
|
|
388
|
+
const major = parseInt(versionMatch[1], 10);
|
|
389
|
+
return major < 17;
|
|
390
|
+
}
|
|
391
|
+
return true; // Can't parse version
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
fix: async (_config, rootDir) => {
|
|
398
|
+
const devOS = getDevOS(rootDir);
|
|
399
|
+
try {
|
|
400
|
+
if (devOS === 'mac') {
|
|
401
|
+
(0, child_process_1.execSync)('brew install openjdk@17', { stdio: 'inherit' });
|
|
402
|
+
console.log(' Installed JDK 17 via Homebrew');
|
|
403
|
+
}
|
|
404
|
+
else if (devOS === 'windows') {
|
|
405
|
+
(0, child_process_1.execSync)('winget install --id=EclipseAdoptium.Temurin.17.JDK --accept-source-agreements --accept-package-agreements', { stdio: 'inherit' });
|
|
406
|
+
console.log(' Installed JDK 17 via winget');
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
(0, child_process_1.execSync)('sudo apt-get install -y openjdk-17-jdk', { stdio: 'inherit' });
|
|
410
|
+
console.log(' Installed JDK 17 via apt-get');
|
|
411
|
+
}
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
},
|
|
418
|
+
manualFix: 'Install JDK 17+:\n' +
|
|
419
|
+
' macOS: brew install openjdk@17\n' +
|
|
420
|
+
' Windows: winget install EclipseAdoptium.Temurin.17.JDK\n' +
|
|
421
|
+
' Linux: sudo apt-get install openjdk-17-jdk',
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
id: 'expo-android-sdk-missing',
|
|
425
|
+
stage: 'dev',
|
|
426
|
+
severity: 'info',
|
|
427
|
+
description: '🤖 ANDROID_HOME not set (Android SDK required for local Android builds)',
|
|
428
|
+
scan: async (_config, _rootDir) => {
|
|
429
|
+
const androidHome = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
|
|
430
|
+
if (!androidHome)
|
|
431
|
+
return true;
|
|
432
|
+
return !fs.existsSync(androidHome);
|
|
433
|
+
},
|
|
434
|
+
fix: null,
|
|
435
|
+
manualFix: 'Install Android Studio and set ANDROID_HOME:\n' +
|
|
436
|
+
' 1. Download Android Studio from https://developer.android.com/studio\n' +
|
|
437
|
+
' 2. Install and open Android Studio\n' +
|
|
438
|
+
' 3. Install Android SDK via SDK Manager\n' +
|
|
439
|
+
' 4. Set ANDROID_HOME environment variable:\n' +
|
|
440
|
+
' macOS: export ANDROID_HOME=$HOME/Library/Android/sdk\n' +
|
|
441
|
+
' Windows: setx ANDROID_HOME "%LOCALAPPDATA%\\Android\\Sdk"\n' +
|
|
442
|
+
' Linux: export ANDROID_HOME=$HOME/Android/Sdk',
|
|
443
|
+
},
|
|
444
|
+
// ============================================================
|
|
445
|
+
// Project Integrity
|
|
446
|
+
// ============================================================
|
|
447
|
+
{
|
|
448
|
+
id: 'expo-project-id-missing',
|
|
449
|
+
stage: 'dev',
|
|
450
|
+
severity: 'warning',
|
|
451
|
+
description: '🆔 EAS project ID not configured (required for EAS Build)',
|
|
452
|
+
scan: async (_config, rootDir) => {
|
|
453
|
+
const appJson = readAppJson(rootDir);
|
|
454
|
+
if (!appJson)
|
|
455
|
+
return false; // Caught by expo-app-config-missing
|
|
456
|
+
// Check app.json for projectId
|
|
457
|
+
if (appJson.expo?.extra?.eas?.projectId)
|
|
458
|
+
return false;
|
|
459
|
+
// Also check app.config.js/ts (can't parse, but check if eas.json has projectId)
|
|
460
|
+
const easJsonPath = path.join(rootDir, 'eas.json');
|
|
461
|
+
if (fs.existsSync(easJsonPath)) {
|
|
462
|
+
try {
|
|
463
|
+
const easJson = JSON.parse(fs.readFileSync(easJsonPath, 'utf8'));
|
|
464
|
+
// eas.json doesn't store projectId, but if eas init was run, app.json would have it
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
// ignore
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return true;
|
|
471
|
+
},
|
|
472
|
+
fix: async (_config, rootDir) => {
|
|
473
|
+
try {
|
|
474
|
+
(0, child_process_1.execSync)('npx eas init', { cwd: rootDir, stdio: 'inherit' });
|
|
475
|
+
console.log(' Configured EAS project ID');
|
|
476
|
+
return true;
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
manualFix: 'Run: npx eas init (links your project to an EAS project)',
|
|
483
|
+
},
|
|
484
|
+
];
|
|
485
|
+
// ============================================================
|
|
486
|
+
// STATIC HELPER METHODS
|
|
487
|
+
// ============================================================
|
|
488
|
+
/**
|
|
489
|
+
* Auto-detect Expo configuration
|
|
490
|
+
*/
|
|
491
|
+
static async detectConfig(rootDir) {
|
|
492
|
+
const pkgPath = path.join(rootDir, 'package.json');
|
|
493
|
+
if (!fs.existsSync(pkgPath))
|
|
494
|
+
return null;
|
|
495
|
+
let expoVersion = null;
|
|
496
|
+
try {
|
|
497
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
498
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
499
|
+
if (!deps.expo)
|
|
500
|
+
return null;
|
|
501
|
+
expoVersion = deps.expo ? deps.expo.replace(/^[\^~]/, '') : null;
|
|
502
|
+
}
|
|
503
|
+
catch {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
return {
|
|
507
|
+
has_expo: true,
|
|
508
|
+
expo_version: expoVersion,
|
|
509
|
+
has_app_json: fs.existsSync(path.join(rootDir, 'app.json')),
|
|
510
|
+
has_eas_json: fs.existsSync(path.join(rootDir, 'eas.json')),
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
// ============================================================
|
|
514
|
+
// INSTANCE METHODS
|
|
515
|
+
// ============================================================
|
|
516
|
+
_config;
|
|
517
|
+
constructor(config) {
|
|
518
|
+
this._config = config;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Deploy - trigger EAS Build
|
|
522
|
+
*/
|
|
523
|
+
async deploy(_config, environment) {
|
|
524
|
+
const rootDir = process.cwd();
|
|
525
|
+
const profile = environment === 'prod' ? 'production' : environment;
|
|
526
|
+
console.log(' Building with EAS for ' + environment + ' (profile: ' + profile + ')...');
|
|
527
|
+
try {
|
|
528
|
+
(0, child_process_1.execSync)('npx eas build --profile ' + profile + ' --non-interactive', {
|
|
529
|
+
cwd: rootDir,
|
|
530
|
+
stdio: 'inherit',
|
|
531
|
+
});
|
|
532
|
+
return { success: true, message: 'EAS Build submitted for ' + environment };
|
|
533
|
+
}
|
|
534
|
+
catch (error) {
|
|
535
|
+
return {
|
|
536
|
+
success: false,
|
|
537
|
+
error: error instanceof Error ? error.message : String(error),
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Undeploy - nothing to do for Expo
|
|
543
|
+
*/
|
|
544
|
+
async undeploy(_config, _environment) {
|
|
545
|
+
return { success: true, message: 'Nothing to undeploy for Expo' };
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
exports.default = ExpoPlugin;
|
|
549
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/frameworks/expo/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,7 +99,7 @@ class PrismaTrpcPlugin {
|
|
|
99
99
|
id: 'missing-prisma',
|
|
100
100
|
stage: 'dev',
|
|
101
101
|
severity: 'info',
|
|
102
|
-
description: 'Prisma not detected in project',
|
|
102
|
+
description: '📦 Prisma not detected in project',
|
|
103
103
|
scan: async (_config, rootDir) => {
|
|
104
104
|
// Check if prisma is in package.json
|
|
105
105
|
const pkgPath = path.join(rootDir, 'package.json');
|
|
@@ -121,7 +121,7 @@ class PrismaTrpcPlugin {
|
|
|
121
121
|
id: 'missing-prisma-schema',
|
|
122
122
|
stage: 'dev',
|
|
123
123
|
severity: 'critical',
|
|
124
|
-
description: 'Prisma schema not found',
|
|
124
|
+
description: '📋 Prisma schema not found',
|
|
125
125
|
scan: async (_config, rootDir) => {
|
|
126
126
|
// Only check if Prisma is installed
|
|
127
127
|
const hasPrisma = await PrismaTrpcPlugin.hasPrisma(rootDir);
|
|
@@ -136,7 +136,7 @@ class PrismaTrpcPlugin {
|
|
|
136
136
|
id: 'missing-env-file',
|
|
137
137
|
stage: 'dev',
|
|
138
138
|
severity: 'warning',
|
|
139
|
-
description: '.env file missing (copy of .env.example)',
|
|
139
|
+
description: '📄 .env file missing (copy of .env.example)',
|
|
140
140
|
scan: async (_config, rootDir) => {
|
|
141
141
|
if (!fs.existsSync(path.join(rootDir, '.env.example')))
|
|
142
142
|
return false;
|
|
@@ -153,7 +153,7 @@ class PrismaTrpcPlugin {
|
|
|
153
153
|
id: 'prisma-client-not-generated',
|
|
154
154
|
stage: 'dev',
|
|
155
155
|
severity: 'warning',
|
|
156
|
-
description: 'Prisma client not generated',
|
|
156
|
+
description: '⚙️ Prisma client not generated',
|
|
157
157
|
scan: async (_config, rootDir) => {
|
|
158
158
|
const hasPrisma = await PrismaTrpcPlugin.hasPrisma(rootDir);
|
|
159
159
|
if (!hasPrisma)
|
|
@@ -180,7 +180,7 @@ class PrismaTrpcPlugin {
|
|
|
180
180
|
id: 'pending-migrations-dev',
|
|
181
181
|
stage: 'dev',
|
|
182
182
|
severity: 'warning',
|
|
183
|
-
description: 'Prisma migrations pending locally',
|
|
183
|
+
description: '🗃️ Prisma migrations pending locally',
|
|
184
184
|
scan: async (_config, rootDir) => {
|
|
185
185
|
const hasPrisma = await PrismaTrpcPlugin.hasPrisma(rootDir);
|
|
186
186
|
if (!hasPrisma)
|
|
@@ -213,7 +213,7 @@ class PrismaTrpcPlugin {
|
|
|
213
213
|
id: 'missing-env-staging',
|
|
214
214
|
stage: 'staging',
|
|
215
215
|
severity: 'critical',
|
|
216
|
-
description: '.env.staging file missing',
|
|
216
|
+
description: '📄 .env.staging file missing',
|
|
217
217
|
scan: async (_config, rootDir) => {
|
|
218
218
|
return !fs.existsSync(path.join(rootDir, '.env.staging'));
|
|
219
219
|
},
|
|
@@ -233,7 +233,7 @@ class PrismaTrpcPlugin {
|
|
|
233
233
|
id: 'missing-env-prod',
|
|
234
234
|
stage: 'prod',
|
|
235
235
|
severity: 'critical',
|
|
236
|
-
description: '.env.prod file missing',
|
|
236
|
+
description: '📄 .env.prod file missing',
|
|
237
237
|
scan: async (_config, rootDir) => {
|
|
238
238
|
return !fs.existsSync(path.join(rootDir, '.env.prod'));
|
|
239
239
|
},
|
|
@@ -252,7 +252,7 @@ class PrismaTrpcPlugin {
|
|
|
252
252
|
id: 'env-example-staging-format',
|
|
253
253
|
stage: 'dev',
|
|
254
254
|
severity: 'warning',
|
|
255
|
-
description: '.env.example and .env.staging should use postgres:5432 format (container format) and match each other',
|
|
255
|
+
description: '🔗 .env.example and .env.staging should use postgres:5432 format (container format) and match each other',
|
|
256
256
|
scan: async (config, rootDir) => {
|
|
257
257
|
const hasPrisma = await PrismaTrpcPlugin.hasPrisma(rootDir);
|
|
258
258
|
if (!hasPrisma)
|