shiplint 0.1.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/README.md +107 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +101 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/scanner.d.ts +27 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +104 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/formatters/index.d.ts +13 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +29 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/json.d.ts +13 -0
- package/dist/formatters/json.d.ts.map +1 -0
- package/dist/formatters/json.js +17 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/sarif.d.ts +14 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +108 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/formatters/text.d.ts +9 -0
- package/dist/formatters/text.d.ts.map +1 -0
- package/dist/formatters/text.js +128 -0
- package/dist/formatters/text.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/entitlements-parser.d.ts +26 -0
- package/dist/parsers/entitlements-parser.d.ts.map +1 -0
- package/dist/parsers/entitlements-parser.js +105 -0
- package/dist/parsers/entitlements-parser.js.map +1 -0
- package/dist/parsers/framework-detector.d.ts +76 -0
- package/dist/parsers/framework-detector.d.ts.map +1 -0
- package/dist/parsers/framework-detector.js +501 -0
- package/dist/parsers/framework-detector.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +26 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/pbxproj-parser.d.ts +166 -0
- package/dist/parsers/pbxproj-parser.d.ts.map +1 -0
- package/dist/parsers/pbxproj-parser.js +423 -0
- package/dist/parsers/pbxproj-parser.js.map +1 -0
- package/dist/parsers/plist-parser.d.ts +26 -0
- package/dist/parsers/plist-parser.d.ts.map +1 -0
- package/dist/parsers/plist-parser.js +166 -0
- package/dist/parsers/plist-parser.js.map +1 -0
- package/dist/parsers/project-parser.d.ts +57 -0
- package/dist/parsers/project-parser.d.ts.map +1 -0
- package/dist/parsers/project-parser.js +618 -0
- package/dist/parsers/project-parser.js.map +1 -0
- package/dist/parsers/workspace-parser.d.ts +82 -0
- package/dist/parsers/workspace-parser.d.ts.map +1 -0
- package/dist/parsers/workspace-parser.js +287 -0
- package/dist/parsers/workspace-parser.js.map +1 -0
- package/dist/rules/auth/index.d.ts +5 -0
- package/dist/rules/auth/index.d.ts.map +1 -0
- package/dist/rules/auth/index.js +9 -0
- package/dist/rules/auth/index.js.map +1 -0
- package/dist/rules/auth/third-party-login-no-siwa.d.ts +11 -0
- package/dist/rules/auth/third-party-login-no-siwa.d.ts.map +1 -0
- package/dist/rules/auth/third-party-login-no-siwa.js +119 -0
- package/dist/rules/auth/third-party-login-no-siwa.js.map +1 -0
- package/dist/rules/base.d.ts +25 -0
- package/dist/rules/base.d.ts.map +1 -0
- package/dist/rules/base.js +37 -0
- package/dist/rules/base.js.map +1 -0
- package/dist/rules/config/ats-exception-without-justification.d.ts +12 -0
- package/dist/rules/config/ats-exception-without-justification.d.ts.map +1 -0
- package/dist/rules/config/ats-exception-without-justification.js +152 -0
- package/dist/rules/config/ats-exception-without-justification.js.map +1 -0
- package/dist/rules/config/index.d.ts +5 -0
- package/dist/rules/config/index.d.ts.map +1 -0
- package/dist/rules/config/index.js +9 -0
- package/dist/rules/config/index.js.map +1 -0
- package/dist/rules/index.d.ts +43 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +103 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/metadata/index.d.ts +5 -0
- package/dist/rules/metadata/index.d.ts.map +1 -0
- package/dist/rules/metadata/index.js +9 -0
- package/dist/rules/metadata/index.js.map +1 -0
- package/dist/rules/metadata/missing-privacy-manifest.d.ts +12 -0
- package/dist/rules/metadata/missing-privacy-manifest.d.ts.map +1 -0
- package/dist/rules/metadata/missing-privacy-manifest.js +186 -0
- package/dist/rules/metadata/missing-privacy-manifest.js.map +1 -0
- package/dist/rules/privacy/att-tracking-mismatch.d.ts +12 -0
- package/dist/rules/privacy/att-tracking-mismatch.d.ts.map +1 -0
- package/dist/rules/privacy/att-tracking-mismatch.js +113 -0
- package/dist/rules/privacy/att-tracking-mismatch.js.map +1 -0
- package/dist/rules/privacy/index.d.ts +11 -0
- package/dist/rules/privacy/index.d.ts.map +1 -0
- package/dist/rules/privacy/index.js +21 -0
- package/dist/rules/privacy/index.js.map +1 -0
- package/dist/rules/privacy/location-always-unjustified.d.ts +11 -0
- package/dist/rules/privacy/location-always-unjustified.d.ts.map +1 -0
- package/dist/rules/privacy/location-always-unjustified.js +102 -0
- package/dist/rules/privacy/location-always-unjustified.js.map +1 -0
- package/dist/rules/privacy/missing-camera-purpose.d.ts +11 -0
- package/dist/rules/privacy/missing-camera-purpose.d.ts.map +1 -0
- package/dist/rules/privacy/missing-camera-purpose.js +83 -0
- package/dist/rules/privacy/missing-camera-purpose.js.map +1 -0
- package/dist/rules/privacy/missing-contacts-purpose.d.ts +11 -0
- package/dist/rules/privacy/missing-contacts-purpose.d.ts.map +1 -0
- package/dist/rules/privacy/missing-contacts-purpose.js +85 -0
- package/dist/rules/privacy/missing-contacts-purpose.js.map +1 -0
- package/dist/rules/privacy/missing-location-purpose.d.ts +12 -0
- package/dist/rules/privacy/missing-location-purpose.d.ts.map +1 -0
- package/dist/rules/privacy/missing-location-purpose.js +137 -0
- package/dist/rules/privacy/missing-location-purpose.js.map +1 -0
- package/dist/rules/privacy/missing-microphone-purpose.d.ts +11 -0
- package/dist/rules/privacy/missing-microphone-purpose.d.ts.map +1 -0
- package/dist/rules/privacy/missing-microphone-purpose.js +132 -0
- package/dist/rules/privacy/missing-microphone-purpose.js.map +1 -0
- package/dist/rules/privacy/missing-photo-library-purpose.d.ts +11 -0
- package/dist/rules/privacy/missing-photo-library-purpose.d.ts.map +1 -0
- package/dist/rules/privacy/missing-photo-library-purpose.js +102 -0
- package/dist/rules/privacy/missing-photo-library-purpose.js.map +1 -0
- package/dist/types/index.d.ts +140 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +59 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cameraFrameworks = exports.locationFrameworks = exports.socialLoginSDKPatterns = exports.trackingSDKPatterns = void 0;
|
|
37
|
+
exports.parsePodfileLock = parsePodfileLock;
|
|
38
|
+
exports.parsePodfileLockContent = parsePodfileLockContent;
|
|
39
|
+
exports.parsePackageResolved = parsePackageResolved;
|
|
40
|
+
exports.parsePackageResolvedData = parsePackageResolvedData;
|
|
41
|
+
exports.parseProjectFrameworks = parseProjectFrameworks;
|
|
42
|
+
exports.parseProjectFrameworksContent = parseProjectFrameworksContent;
|
|
43
|
+
exports.detectTrackingSDKs = detectTrackingSDKs;
|
|
44
|
+
exports.detectSocialLoginSDKs = detectSocialLoginSDKs;
|
|
45
|
+
exports.loadDependenciesForProject = loadDependenciesForProject;
|
|
46
|
+
exports.loadAllDependencies = loadAllDependencies;
|
|
47
|
+
/**
|
|
48
|
+
* Utility to detect linked frameworks and dependencies in iOS projects
|
|
49
|
+
*/
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const index_js_1 = require("../types/index.js");
|
|
53
|
+
/**
|
|
54
|
+
* Known tracking SDK patterns for ATT detection
|
|
55
|
+
*/
|
|
56
|
+
exports.trackingSDKPatterns = [
|
|
57
|
+
// Facebook/Meta
|
|
58
|
+
{ pattern: 'FBSDKCoreKit', name: 'Facebook SDK' },
|
|
59
|
+
{ pattern: 'FacebookCore', name: 'Facebook SDK' },
|
|
60
|
+
{ pattern: 'FBAudienceNetwork', name: 'Facebook Audience Network' },
|
|
61
|
+
// Google
|
|
62
|
+
{ pattern: 'GoogleAnalytics', name: 'Google Analytics' },
|
|
63
|
+
{ pattern: 'FirebaseAnalytics', name: 'Firebase Analytics' },
|
|
64
|
+
{ pattern: 'Firebase/Analytics', name: 'Firebase Analytics' },
|
|
65
|
+
{ pattern: 'Google-Mobile-Ads-SDK', name: 'Google Mobile Ads' },
|
|
66
|
+
{ pattern: 'GoogleMobileAds', name: 'Google Mobile Ads' },
|
|
67
|
+
// Attribution/Analytics
|
|
68
|
+
{ pattern: 'Adjust', name: 'Adjust' },
|
|
69
|
+
{ pattern: 'AppsFlyer', name: 'AppsFlyer' },
|
|
70
|
+
{ pattern: 'AppsFlyerFramework', name: 'AppsFlyer' },
|
|
71
|
+
{ pattern: 'Branch', name: 'Branch.io' },
|
|
72
|
+
{ pattern: 'Amplitude', name: 'Amplitude' },
|
|
73
|
+
{ pattern: 'amplitude-ios', name: 'Amplitude' },
|
|
74
|
+
{ pattern: 'Mixpanel', name: 'Mixpanel' },
|
|
75
|
+
{ pattern: 'Segment', name: 'Segment' },
|
|
76
|
+
{ pattern: 'Singular', name: 'Singular' },
|
|
77
|
+
{ pattern: 'Kochava', name: 'Kochava' },
|
|
78
|
+
{ pattern: 'Tenjin', name: 'Tenjin' },
|
|
79
|
+
];
|
|
80
|
+
/**
|
|
81
|
+
* Known social login SDK patterns for SIWA detection
|
|
82
|
+
*/
|
|
83
|
+
exports.socialLoginSDKPatterns = [
|
|
84
|
+
// Google Sign-In
|
|
85
|
+
{ pattern: 'GoogleSignIn', name: 'Google Sign-In' },
|
|
86
|
+
{ pattern: 'GIDSignIn', name: 'Google Sign-In' },
|
|
87
|
+
// Facebook Login
|
|
88
|
+
{ pattern: 'FBSDKLoginKit', name: 'Facebook Login' },
|
|
89
|
+
{ pattern: 'FacebookLogin', name: 'Facebook Login' },
|
|
90
|
+
// Twitter/X
|
|
91
|
+
{ pattern: 'TwitterKit', name: 'Twitter Login' },
|
|
92
|
+
// Firebase Auth (may include social)
|
|
93
|
+
{ pattern: 'FirebaseAuth', name: 'Firebase Auth' },
|
|
94
|
+
{ pattern: 'Firebase/Auth', name: 'Firebase Auth' },
|
|
95
|
+
// Auth0
|
|
96
|
+
{ pattern: 'Auth0', name: 'Auth0' },
|
|
97
|
+
// Amazon
|
|
98
|
+
{ pattern: 'LoginWithAmazon', name: 'Login with Amazon' },
|
|
99
|
+
// LinkedIn
|
|
100
|
+
{ pattern: 'linkedin-sdk', name: 'LinkedIn Login' },
|
|
101
|
+
];
|
|
102
|
+
/**
|
|
103
|
+
* Location-related frameworks
|
|
104
|
+
*/
|
|
105
|
+
exports.locationFrameworks = new Set([
|
|
106
|
+
'CoreLocation',
|
|
107
|
+
'MapKit',
|
|
108
|
+
]);
|
|
109
|
+
/**
|
|
110
|
+
* Camera-related frameworks
|
|
111
|
+
*/
|
|
112
|
+
exports.cameraFrameworks = new Set([
|
|
113
|
+
'AVFoundation',
|
|
114
|
+
'AVKit',
|
|
115
|
+
'VisionKit',
|
|
116
|
+
]);
|
|
117
|
+
/**
|
|
118
|
+
* Parses Podfile.lock to extract CocoaPods dependencies
|
|
119
|
+
*/
|
|
120
|
+
function parsePodfileLock(filePath) {
|
|
121
|
+
if (!fs.existsSync(filePath)) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
125
|
+
return parsePodfileLockContent(content);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parses Podfile.lock content string
|
|
129
|
+
*/
|
|
130
|
+
function parsePodfileLockContent(content) {
|
|
131
|
+
const dependencies = [];
|
|
132
|
+
const lines = content.split('\n');
|
|
133
|
+
const seenNames = new Set();
|
|
134
|
+
let inPodsSection = false;
|
|
135
|
+
for (const line of lines) {
|
|
136
|
+
const trimmed = line.trim();
|
|
137
|
+
// Start of PODS section
|
|
138
|
+
if (trimmed === 'PODS:') {
|
|
139
|
+
inPodsSection = true;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// End of PODS section (next top-level key)
|
|
143
|
+
if (inPodsSection && !line.startsWith(' ') && !line.startsWith('\t') && trimmed.endsWith(':')) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
// Parse pod entry
|
|
147
|
+
if (inPodsSection && line.startsWith(' - ')) {
|
|
148
|
+
const entry = line.slice(4); // Remove " - "
|
|
149
|
+
// Match: "PodName (version)" or "PodName/Subspec (version)"
|
|
150
|
+
const match = entry.match(/^([^\s(]+)\s*\(([^)]+)\)/);
|
|
151
|
+
if (match) {
|
|
152
|
+
const fullName = match[1];
|
|
153
|
+
const version = match[2];
|
|
154
|
+
// Get base name (without subspec)
|
|
155
|
+
const baseName = fullName.split('/')[0];
|
|
156
|
+
// Add base name if not seen
|
|
157
|
+
if (!seenNames.has(baseName)) {
|
|
158
|
+
seenNames.add(baseName);
|
|
159
|
+
dependencies.push({
|
|
160
|
+
name: baseName,
|
|
161
|
+
version,
|
|
162
|
+
source: index_js_1.DependencySource.CocoaPods,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Also track the full name for subspec matching
|
|
166
|
+
if (fullName.includes('/') && !seenNames.has(fullName)) {
|
|
167
|
+
seenNames.add(fullName);
|
|
168
|
+
dependencies.push({
|
|
169
|
+
name: fullName,
|
|
170
|
+
version,
|
|
171
|
+
source: index_js_1.DependencySource.CocoaPods,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return dependencies;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parses Package.resolved to extract SPM dependencies
|
|
181
|
+
*/
|
|
182
|
+
function parsePackageResolved(filePath) {
|
|
183
|
+
if (!fs.existsSync(filePath)) {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
187
|
+
try {
|
|
188
|
+
const json = JSON.parse(content);
|
|
189
|
+
return parsePackageResolvedData(json);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Parses Package.resolved JSON data
|
|
197
|
+
*/
|
|
198
|
+
function parsePackageResolvedData(json) {
|
|
199
|
+
const dependencies = [];
|
|
200
|
+
// Try version 2 format first (newer)
|
|
201
|
+
const pins = json['pins'];
|
|
202
|
+
if (Array.isArray(pins)) {
|
|
203
|
+
for (const pin of pins) {
|
|
204
|
+
const identity = pin['identity'];
|
|
205
|
+
const state = pin['state'];
|
|
206
|
+
if (identity) {
|
|
207
|
+
dependencies.push({
|
|
208
|
+
name: identity,
|
|
209
|
+
version: state?.['version'],
|
|
210
|
+
source: index_js_1.DependencySource.SPM,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return dependencies;
|
|
215
|
+
}
|
|
216
|
+
// Try version 1 format (older)
|
|
217
|
+
const object = json['object'];
|
|
218
|
+
const v1Pins = object?.['pins'];
|
|
219
|
+
if (Array.isArray(v1Pins)) {
|
|
220
|
+
for (const pin of v1Pins) {
|
|
221
|
+
const pkg = pin['package'];
|
|
222
|
+
const state = pin['state'];
|
|
223
|
+
if (pkg) {
|
|
224
|
+
dependencies.push({
|
|
225
|
+
name: pkg,
|
|
226
|
+
version: state?.['version'],
|
|
227
|
+
source: index_js_1.DependencySource.SPM,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return dependencies;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Parses project.pbxproj to extract linked frameworks
|
|
236
|
+
*/
|
|
237
|
+
function parseProjectFrameworks(filePath) {
|
|
238
|
+
if (!fs.existsSync(filePath)) {
|
|
239
|
+
return new Set();
|
|
240
|
+
}
|
|
241
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
242
|
+
return parseProjectFrameworksContent(content);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Parses project.pbxproj content to extract linked frameworks
|
|
246
|
+
*/
|
|
247
|
+
function parseProjectFrameworksContent(content) {
|
|
248
|
+
const frameworks = new Set();
|
|
249
|
+
// Pattern: Framework file references like "AVFoundation.framework"
|
|
250
|
+
const frameworkPattern = /(\w+)\.framework/g;
|
|
251
|
+
let match;
|
|
252
|
+
while ((match = frameworkPattern.exec(content)) !== null) {
|
|
253
|
+
frameworks.add(match[1]);
|
|
254
|
+
}
|
|
255
|
+
return frameworks;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Detects tracking SDKs from a list of dependencies
|
|
259
|
+
*/
|
|
260
|
+
function detectTrackingSDKs(dependencies) {
|
|
261
|
+
const detected = [];
|
|
262
|
+
for (const { pattern, name } of exports.trackingSDKPatterns) {
|
|
263
|
+
const found = dependencies.some(dep => dep.name.toLowerCase().includes(pattern.toLowerCase()));
|
|
264
|
+
if (found && !detected.includes(name)) {
|
|
265
|
+
detected.push(name);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return detected;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Detects social login SDKs from a list of dependencies
|
|
272
|
+
*/
|
|
273
|
+
function detectSocialLoginSDKs(dependencies) {
|
|
274
|
+
const detected = [];
|
|
275
|
+
for (const { pattern, name } of exports.socialLoginSDKPatterns) {
|
|
276
|
+
const found = dependencies.some(dep => dep.name.toLowerCase().includes(pattern.toLowerCase()));
|
|
277
|
+
if (found && !detected.includes(name)) {
|
|
278
|
+
detected.push(name);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return detected;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Maximum depth for recursive directory searches
|
|
285
|
+
*/
|
|
286
|
+
const MAX_SEARCH_DEPTH = 5;
|
|
287
|
+
/**
|
|
288
|
+
* Check if directory contains a .xcodeproj different from the specified one
|
|
289
|
+
*/
|
|
290
|
+
function containsSiblingXcodeproj(dir, currentXcodeprojPath) {
|
|
291
|
+
if (!currentXcodeprojPath)
|
|
292
|
+
return false;
|
|
293
|
+
try {
|
|
294
|
+
const entries = fs.readdirSync(dir);
|
|
295
|
+
for (const entry of entries) {
|
|
296
|
+
if (entry.endsWith('.xcodeproj')) {
|
|
297
|
+
const xcprojPath = path.join(dir, entry);
|
|
298
|
+
if (path.resolve(xcprojPath) !== path.resolve(currentXcodeprojPath)) {
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// Ignore errors
|
|
306
|
+
}
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Recursively find files matching a predicate
|
|
311
|
+
* P2-C FIX: Can exclude directories containing sibling .xcodeproj files
|
|
312
|
+
*/
|
|
313
|
+
function findFilesRecursive(dir, predicate, options = {}, currentDepth = 0) {
|
|
314
|
+
const maxDepth = options.maxDepth ?? MAX_SEARCH_DEPTH;
|
|
315
|
+
if (currentDepth >= maxDepth)
|
|
316
|
+
return [];
|
|
317
|
+
const results = [];
|
|
318
|
+
try {
|
|
319
|
+
const entries = fs.readdirSync(dir);
|
|
320
|
+
for (const entry of entries) {
|
|
321
|
+
const fullPath = path.join(dir, entry);
|
|
322
|
+
// Skip common non-project directories for performance
|
|
323
|
+
if (entry === 'node_modules' || entry === '.git' ||
|
|
324
|
+
entry === 'build' || entry === 'DerivedData' || entry === '.build') {
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (predicate(entry)) {
|
|
328
|
+
results.push(fullPath);
|
|
329
|
+
}
|
|
330
|
+
// Recurse into directories
|
|
331
|
+
try {
|
|
332
|
+
const stat = fs.statSync(fullPath);
|
|
333
|
+
if (stat.isDirectory() &&
|
|
334
|
+
!entry.endsWith('.xcodeproj') &&
|
|
335
|
+
!entry.endsWith('.xcworkspace') &&
|
|
336
|
+
!entry.endsWith('.app') &&
|
|
337
|
+
!entry.endsWith('.framework')) {
|
|
338
|
+
// P2-C FIX: Skip directories containing sibling projects
|
|
339
|
+
if (options.currentXcodeprojPath && containsSiblingXcodeproj(fullPath, options.currentXcodeprojPath)) {
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
results.push(...findFilesRecursive(fullPath, predicate, options, currentDepth + 1));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
// Ignore stat errors
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// Ignore readdir errors
|
|
352
|
+
}
|
|
353
|
+
return results;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* P2-C FIX: Loads dependencies for a specific .xcodeproj, avoiding recursive scan of whole parent
|
|
357
|
+
*
|
|
358
|
+
* Searches lockfiles only in:
|
|
359
|
+
* 1. The .xcodeproj directory itself (project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
|
|
360
|
+
* 2. The parent directory of the .xcodeproj
|
|
361
|
+
* 3. The parent's .swiftpm directory
|
|
362
|
+
*
|
|
363
|
+
* This prevents picking up lockfiles from sibling projects in monorepos.
|
|
364
|
+
*
|
|
365
|
+
* @param xcodeprojPath Path to the .xcodeproj directory
|
|
366
|
+
* @returns Array of dependencies found
|
|
367
|
+
*/
|
|
368
|
+
function loadDependenciesForProject(xcodeprojPath) {
|
|
369
|
+
const all = [];
|
|
370
|
+
const seenPodfiles = new Set();
|
|
371
|
+
const seenPackageResolved = new Set();
|
|
372
|
+
// Ensure we have the .xcodeproj path
|
|
373
|
+
const xcprojDir = xcodeprojPath.endsWith('.xcodeproj')
|
|
374
|
+
? xcodeprojPath
|
|
375
|
+
: xcodeprojPath.includes('project.pbxproj')
|
|
376
|
+
? path.dirname(xcodeprojPath)
|
|
377
|
+
: xcodeprojPath;
|
|
378
|
+
const projectDir = path.dirname(xcprojDir);
|
|
379
|
+
// Specific locations to check for Podfile.lock (no recursive scan)
|
|
380
|
+
const podfileLockLocations = [
|
|
381
|
+
path.join(projectDir, 'Podfile.lock'),
|
|
382
|
+
path.join(path.dirname(projectDir), 'Podfile.lock'), // parent dir (workspace root)
|
|
383
|
+
];
|
|
384
|
+
for (const loc of podfileLockLocations) {
|
|
385
|
+
if (fs.existsSync(loc)) {
|
|
386
|
+
const deps = parsePodfileLock(loc);
|
|
387
|
+
for (const dep of deps) {
|
|
388
|
+
const key = `${dep.name}@${dep.version}`;
|
|
389
|
+
if (!seenPodfiles.has(key)) {
|
|
390
|
+
seenPodfiles.add(key);
|
|
391
|
+
all.push(dep);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
// Specific locations for Package.resolved (no recursive scan)
|
|
397
|
+
const packageResolvedLocations = [
|
|
398
|
+
// Inside the .xcodeproj bundle
|
|
399
|
+
path.join(xcprojDir, 'project.xcworkspace', 'xcshareddata', 'swiftpm', 'Package.resolved'),
|
|
400
|
+
// Project directory
|
|
401
|
+
path.join(projectDir, 'Package.resolved'),
|
|
402
|
+
path.join(projectDir, '.swiftpm', 'Package.resolved'),
|
|
403
|
+
// Parent directory (workspace root)
|
|
404
|
+
path.join(path.dirname(projectDir), 'Package.resolved'),
|
|
405
|
+
path.join(path.dirname(projectDir), '.swiftpm', 'Package.resolved'),
|
|
406
|
+
];
|
|
407
|
+
// Also check for workspace-level SPM
|
|
408
|
+
const workspacePath = path.join(projectDir, path.basename(xcprojDir).replace('.xcodeproj', '.xcworkspace'));
|
|
409
|
+
if (fs.existsSync(workspacePath)) {
|
|
410
|
+
packageResolvedLocations.push(path.join(workspacePath, 'xcshareddata', 'swiftpm', 'Package.resolved'));
|
|
411
|
+
}
|
|
412
|
+
for (const loc of packageResolvedLocations) {
|
|
413
|
+
if (fs.existsSync(loc) && !seenPackageResolved.has(loc)) {
|
|
414
|
+
seenPackageResolved.add(loc);
|
|
415
|
+
const deps = parsePackageResolved(loc);
|
|
416
|
+
for (const dep of deps) {
|
|
417
|
+
const key = `${dep.name}@${dep.version}`;
|
|
418
|
+
if (!seenPackageResolved.has(key)) {
|
|
419
|
+
seenPackageResolved.add(key);
|
|
420
|
+
all.push(dep);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
return all;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Loads all dependencies from a project directory
|
|
429
|
+
* BUG FIX #3: Now searches recursively for lockfiles
|
|
430
|
+
* P2-C FIX: When given a .xcodeproj path, uses scoped search to prevent monorepo bleeding
|
|
431
|
+
*/
|
|
432
|
+
function loadAllDependencies(projectDir) {
|
|
433
|
+
// P2-C FIX: If given a .xcodeproj path directly, use the scoped function
|
|
434
|
+
if (projectDir.endsWith('.xcodeproj')) {
|
|
435
|
+
return loadDependenciesForProject(projectDir);
|
|
436
|
+
}
|
|
437
|
+
// Check if this directory contains a single .xcodeproj - if so, scope to it
|
|
438
|
+
try {
|
|
439
|
+
const entries = fs.readdirSync(projectDir);
|
|
440
|
+
const xcodeprojs = entries.filter(e => e.endsWith('.xcodeproj'));
|
|
441
|
+
if (xcodeprojs.length === 1) {
|
|
442
|
+
// Single xcodeproj in directory - use scoped loading
|
|
443
|
+
return loadDependenciesForProject(path.join(projectDir, xcodeprojs[0]));
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
// Fall through to recursive search
|
|
448
|
+
}
|
|
449
|
+
const all = [];
|
|
450
|
+
const seenPodfiles = new Set();
|
|
451
|
+
const seenPackageResolved = new Set();
|
|
452
|
+
// Find all Podfile.lock files recursively
|
|
453
|
+
const podfileLocks = findFilesRecursive(projectDir, (name) => name === 'Podfile.lock');
|
|
454
|
+
// Also check root explicitly (in case of permission issues during recursion)
|
|
455
|
+
const rootPodfileLock = path.join(projectDir, 'Podfile.lock');
|
|
456
|
+
if (fs.existsSync(rootPodfileLock) && !podfileLocks.includes(rootPodfileLock)) {
|
|
457
|
+
podfileLocks.unshift(rootPodfileLock);
|
|
458
|
+
}
|
|
459
|
+
for (const podfileLock of podfileLocks) {
|
|
460
|
+
const deps = parsePodfileLock(podfileLock);
|
|
461
|
+
for (const dep of deps) {
|
|
462
|
+
const key = `${dep.name}@${dep.version}`;
|
|
463
|
+
if (!seenPodfiles.has(key)) {
|
|
464
|
+
seenPodfiles.add(key);
|
|
465
|
+
all.push(dep);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
// Find all Package.resolved files recursively
|
|
470
|
+
const packageResolvedFiles = findFilesRecursive(projectDir, (name) => name === 'Package.resolved');
|
|
471
|
+
// Also check common explicit locations
|
|
472
|
+
const explicitLocations = [
|
|
473
|
+
path.join(projectDir, 'Package.resolved'),
|
|
474
|
+
path.join(projectDir, '.swiftpm', 'Package.resolved'),
|
|
475
|
+
];
|
|
476
|
+
for (const loc of explicitLocations) {
|
|
477
|
+
if (fs.existsSync(loc) && !packageResolvedFiles.includes(loc)) {
|
|
478
|
+
packageResolvedFiles.push(loc);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Also search inside .xcodeproj and .xcworkspace for Package.resolved
|
|
482
|
+
const xcodeBundles = findFilesRecursive(projectDir, (name) => name.endsWith('.xcodeproj') || name.endsWith('.xcworkspace'));
|
|
483
|
+
for (const bundle of xcodeBundles) {
|
|
484
|
+
const nestedResolved = path.join(bundle, 'project.xcworkspace', 'xcshareddata', 'swiftpm', 'Package.resolved');
|
|
485
|
+
if (fs.existsSync(nestedResolved) && !packageResolvedFiles.includes(nestedResolved)) {
|
|
486
|
+
packageResolvedFiles.push(nestedResolved);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
for (const packageResolved of packageResolvedFiles) {
|
|
490
|
+
const deps = parsePackageResolved(packageResolved);
|
|
491
|
+
for (const dep of deps) {
|
|
492
|
+
const key = `${dep.name}@${dep.version}`;
|
|
493
|
+
if (!seenPackageResolved.has(key)) {
|
|
494
|
+
seenPackageResolved.add(key);
|
|
495
|
+
all.push(dep);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
return all;
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=framework-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../src/parsers/framework-detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,4CAOC;AAKD,0DA0DC;AAKD,oDAaC;AAKD,4DAsCC;AAKD,wDAOC;AAKD,sEAYC;AAKD,gDAaC;AAKD,sDAaC;AA2GD,gEAoEC;AAOD,kDAqFC;AA7hBD;;GAEG;AACH,uCAAyB;AACzB,2CAA6B;AAC7B,gDAAiE;AAEjE;;GAEG;AACU,QAAA,mBAAmB,GAA6C;IAC3E,gBAAgB;IAChB,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;IACjD,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;IACjD,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,2BAA2B,EAAE;IACnE,SAAS;IACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACxD,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC5D,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC7D,EAAE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,mBAAmB,EAAE;IAC/D,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACzD,wBAAwB;IACxB,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IACrC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3C,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,EAAE;IACpD,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACxC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3C,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;IAC/C,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;IACzC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IACvC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;IACzC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IACvC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;CACtC,CAAC;AAEF;;GAEG;AACU,QAAA,sBAAsB,GAA6C;IAC9E,iBAAiB;IACjB,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACnD,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChD,iBAAiB;IACjB,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACpD,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACpD,YAAY;IACZ,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;IAChD,qCAAqC;IACrC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE;IAClD,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE;IACnD,QAAQ;IACR,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IACnC,SAAS;IACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACzD,WAAW;IACX,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE;CACpD,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAgB,IAAI,GAAG,CAAC;IACrD,cAAc;IACd,QAAQ;CACT,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,gBAAgB,GAAgB,IAAI,GAAG,CAAC;IACnD,cAAc;IACd,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AAEH;;GAEG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,OAAe;IACrD,MAAM,YAAY,GAAiB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,wBAAwB;QACxB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,aAAa,GAAG,IAAI,CAAC;YACrB,SAAS;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9F,MAAM;QACR,CAAC;QAED,kBAAkB;QAClB,IAAI,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAE7C,4DAA4D;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEzB,kCAAkC;gBAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExC,4BAA4B;gBAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACxB,YAAY,CAAC,IAAI,CAAC;wBAChB,IAAI,EAAE,QAAQ;wBACd,OAAO;wBACP,MAAM,EAAE,2BAAgB,CAAC,SAAS;qBACnC,CAAC,CAAC;gBACL,CAAC;gBAED,gDAAgD;gBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACxB,YAAY,CAAC,IAAI,CAAC;wBAChB,IAAI,EAAE,QAAQ;wBACd,OAAO;wBACP,MAAM,EAAE,2BAAgB,CAAC,SAAS;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,IAA6B;IACpE,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,qCAAqC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAA+C,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAW,CAAC;YAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAwC,CAAC;YAClE,IAAI,QAAQ,EAAE,CAAC;gBACb,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAuB;oBACjD,MAAM,EAAE,2BAAgB,CAAC,GAAG;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAwC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAA+C,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAW,CAAC;YACrC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAwC,CAAC;YAClE,IAAI,GAAG,EAAE,CAAC;gBACR,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAuB;oBACjD,MAAM,EAAE,2BAAgB,CAAC,GAAG;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAAC,OAAe;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,mEAAmE;IACnE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;IAC7C,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,YAA0B;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,2BAAmB,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvD,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,YAA0B;IAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,8BAAsB,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACpC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvD,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAW3B;;GAEG;AACH,SAAS,wBAAwB,CAAC,GAAW,EAAE,oBAA6B;IAC1E,IAAI,CAAC,oBAAoB;QAAE,OAAO,KAAK,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBACpE,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,GAAW,EACX,SAAoC,EACpC,UAA4B,EAAE,EAC9B,eAAuB,CAAC;IAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,IAAI,YAAY,IAAI,QAAQ;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAEvC,sDAAsD;YACtD,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,MAAM;gBAC5C,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YAED,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAC7B,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAC/B,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAClC,yDAAyD;oBACzD,IAAI,OAAO,CAAC,oBAAoB,IAAI,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;wBACrG,SAAS;oBACX,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,0BAA0B,CAAC,aAAqB;IAC9D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,qCAAqC;IACrC,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;QACpD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC7B,CAAC,CAAC,aAAa,CAAC;IAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE3C,mEAAmE;IACnE,MAAM,oBAAoB,GAAG;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,EAAE,8BAA8B;KACpF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,MAAM,wBAAwB,GAAG;QAC/B,+BAA+B;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,CAAC;QAC1F,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC;QACrD,oCAAoC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,kBAAkB,CAAC;KACpE,CAAC;IAEF,qCAAqC;IACrC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5G,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,wBAAwB,CAAC,IAAI,CAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,CAAC,CACxE,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,yEAAyE;IACzE,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,qDAAqD;YACrD,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IAED,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,0CAA0C;IAC1C,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IAEvF,6EAA6E;IAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9E,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,MAAM,oBAAoB,GAAG,kBAAkB,CAC7C,UAAU,EACV,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,kBAAkB,CACtC,CAAC;IAEF,uCAAuC;IACvC,MAAM,iBAAiB,GAAG;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC;KACtD,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,YAAY,GAAG,kBAAkB,CACrC,UAAU,EACV,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CACvE,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAC/G,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpF,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,MAAM,eAAe,IAAI,oBAAoB,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsers module exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './plist-parser.js';
|
|
5
|
+
export * from './entitlements-parser.js';
|
|
6
|
+
export * from './framework-detector.js';
|
|
7
|
+
export * from './pbxproj-parser.js';
|
|
8
|
+
export * from './project-parser.js';
|
|
9
|
+
export * from './workspace-parser.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
/**
|
|
18
|
+
* Parsers module exports
|
|
19
|
+
*/
|
|
20
|
+
__exportStar(require("./plist-parser.js"), exports);
|
|
21
|
+
__exportStar(require("./entitlements-parser.js"), exports);
|
|
22
|
+
__exportStar(require("./framework-detector.js"), exports);
|
|
23
|
+
__exportStar(require("./pbxproj-parser.js"), exports);
|
|
24
|
+
__exportStar(require("./project-parser.js"), exports);
|
|
25
|
+
__exportStar(require("./workspace-parser.js"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,oDAAkC;AAClC,2DAAyC;AACzC,0DAAwC;AACxC,sDAAoC;AACpC,sDAAoC;AACpC,wDAAsC"}
|