Skip to content

Commit b354b60

Browse files
farfromrefugclaude
andcommitted
feat(config): allow per-platform ignoredNativeDependencies
`ignoredNativeDependencies` could only be declared at the top level of the config. Declare it on the shared platform interface so `ios`, `android`, `visionos` and `catalyst` sections can each contribute their own entries, which are concatenated with the top level list. Callers now pass the platform they prepare for; omitting it keeps the previous top level only behaviour. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 2f9f2e0 commit b354b60

8 files changed

Lines changed: 39 additions & 4 deletions

File tree

lib/contracts/project-data.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export abstract class ProjectData {
2525
abstract projectIdentifiers?: Mobile.IProjectIdentifier;
2626
abstract dependencies: any;
2727
abstract ignoredDependencies?: string[];
28+
29+
abstract getIgnoredDependencies(platform?: string): string[];
2830
abstract devDependencies: IStringDictionary;
2931
abstract appDirectoryPath: string;
3032
abstract appResourcesDirectoryPath: string;

lib/controllers/prepare-controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ export class PrepareController extends EventEmitter {
404404
const dependencies = this.$nodeModulesDependenciesBuilder
405405
.getProductionDependencies(
406406
projectData.projectDir,
407-
projectData.ignoredDependencies,
407+
projectData.getIgnoredDependencies(platformData.platformNameLowerCase),
408408
)
409409
.filter((dep) => dep.nativescript);
410410
const pluginsNativeDirectories = dependencies.map((dep) =>

lib/definitions/project.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ interface IProjectService {
101101

102102
interface INsConfigPlaform {
103103
id?: string;
104+
ignoredNativeDependencies?: string[];
104105
}
105106

106107
interface IOSSPMPackageBase {

lib/project-data.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,30 @@ export class ProjectData implements IProjectData {
348348
return identifier;
349349
}
350350

351+
public getIgnoredDependencies(platform?: string): string[] {
352+
const ignored = this.nsConfig?.ignoredNativeDependencies ?? [];
353+
if (!platform || !this.nsConfig) {
354+
return ignored;
355+
}
356+
357+
switch (platform.toLowerCase()) {
358+
case constants.PlatformTypes.ios:
359+
return ignored.concat(
360+
this.nsConfig.ios?.ignoredNativeDependencies ?? [],
361+
);
362+
case constants.PlatformTypes.visionos:
363+
return ignored.concat(
364+
this.nsConfig.visionos?.ignoredNativeDependencies ?? [],
365+
);
366+
case constants.PlatformTypes.android:
367+
return ignored.concat(
368+
this.nsConfig.android?.ignoredNativeDependencies ?? [],
369+
);
370+
default:
371+
return ignored;
372+
}
373+
}
374+
351375
private getProjectType(): string {
352376
let detectedProjectType = _.find(
353377
ProjectData.PROJECT_TYPES,

lib/services/plugins-service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ export class PluginsService implements IPluginsService {
359359
dependencies ||
360360
this.$nodeModulesDependenciesBuilder.getProductionDependencies(
361361
projectData.projectDir,
362-
projectData.ignoredDependencies,
362+
projectData.getIgnoredDependencies(platform),
363363
);
364364

365365
if (_.isEmpty(dependencies)) {

lib/services/project-changes-service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ export class ProjectChangesService implements IProjectChangesService {
109109
this.$nodeModulesDependenciesBuilder
110110
.getProductionDependencies(
111111
projectData.projectDir,
112-
projectData.ignoredDependencies
112+
projectData.getIgnoredDependencies(
113+
platformData.platformNameLowerCase,
114+
)
113115
)
114116
.filter(
115117
(dep) =>

lib/tools/node-modules/node-modules-builder.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
2020
}: IPrepareNodeModulesData): Promise<void> {
2121
let dependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(
2222
projectData.projectDir,
23-
projectData.ignoredDependencies
23+
projectData.getIgnoredDependencies(
24+
platformData.platformNameLowerCase,
25+
)
2426
);
2527
dependencies = await platformData.platformProjectService.beforePrepareAllPlugins(
2628
projectData,

test/stubs.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,10 @@ export class ProjectDataStub implements IProjectData {
720720
return "";
721721
}
722722

723+
public getIgnoredDependencies(platform?: string): string[] {
724+
return [];
725+
}
726+
723727
public getAppDirectoryPath(projectDir?: string): string {
724728
if (!projectDir) {
725729
projectDir = this.projectDir;

0 commit comments

Comments
 (0)