diff --git a/lib/contracts/project-data.ts b/lib/contracts/project-data.ts index aea166166e..f87ddb3ed6 100644 --- a/lib/contracts/project-data.ts +++ b/lib/contracts/project-data.ts @@ -25,6 +25,8 @@ export abstract class ProjectData { abstract projectIdentifiers?: Mobile.IProjectIdentifier; abstract dependencies: any; abstract ignoredDependencies?: string[]; + + abstract getIgnoredDependencies(platform?: string): string[]; abstract devDependencies: IStringDictionary; abstract appDirectoryPath: string; abstract appResourcesDirectoryPath: string; diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 5ef34172d5..64f0ecbcff 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -404,7 +404,7 @@ export class PrepareController extends EventEmitter { const dependencies = this.$nodeModulesDependenciesBuilder .getProductionDependencies( projectData.projectDir, - projectData.ignoredDependencies, + projectData.getIgnoredDependencies(platformData.platformNameLowerCase), ) .filter((dep) => dep.nativescript); const pluginsNativeDirectories = dependencies.map((dep) => diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index 7ab75c5b0f..37ce108182 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -101,6 +101,7 @@ interface IProjectService { interface INsConfigPlaform { id?: string; + ignoredNativeDependencies?: string[]; } interface IOSSPMPackageBase { diff --git a/lib/project-data.ts b/lib/project-data.ts index 277dbf32d1..dc612830b1 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -348,6 +348,30 @@ export class ProjectData implements IProjectData { return identifier; } + public getIgnoredDependencies(platform?: string): string[] { + const ignored = this.nsConfig?.ignoredNativeDependencies ?? []; + if (!platform || !this.nsConfig) { + return ignored; + } + + switch (platform.toLowerCase()) { + case constants.PlatformTypes.ios: + return ignored.concat( + this.nsConfig.ios?.ignoredNativeDependencies ?? [], + ); + case constants.PlatformTypes.visionos: + return ignored.concat( + this.nsConfig.visionos?.ignoredNativeDependencies ?? [], + ); + case constants.PlatformTypes.android: + return ignored.concat( + this.nsConfig.android?.ignoredNativeDependencies ?? [], + ); + default: + return ignored; + } + } + private getProjectType(): string { let detectedProjectType = _.find( ProjectData.PROJECT_TYPES, diff --git a/lib/services/plugins-service.ts b/lib/services/plugins-service.ts index 43c843e59a..58d5fff6b0 100644 --- a/lib/services/plugins-service.ts +++ b/lib/services/plugins-service.ts @@ -359,7 +359,7 @@ export class PluginsService implements IPluginsService { dependencies || this.$nodeModulesDependenciesBuilder.getProductionDependencies( projectData.projectDir, - projectData.ignoredDependencies, + projectData.getIgnoredDependencies(platform), ); if (_.isEmpty(dependencies)) { diff --git a/lib/services/project-changes-service.ts b/lib/services/project-changes-service.ts index 12e7574bfc..31a66d3e7d 100644 --- a/lib/services/project-changes-service.ts +++ b/lib/services/project-changes-service.ts @@ -109,7 +109,9 @@ export class ProjectChangesService implements IProjectChangesService { this.$nodeModulesDependenciesBuilder .getProductionDependencies( projectData.projectDir, - projectData.ignoredDependencies + projectData.getIgnoredDependencies( + platformData.platformNameLowerCase, + ) ) .filter( (dep) => diff --git a/lib/tools/node-modules/node-modules-builder.ts b/lib/tools/node-modules/node-modules-builder.ts index ac61ce8b54..ed3c7b36b0 100644 --- a/lib/tools/node-modules/node-modules-builder.ts +++ b/lib/tools/node-modules/node-modules-builder.ts @@ -20,7 +20,9 @@ export class NodeModulesBuilder implements INodeModulesBuilder { }: IPrepareNodeModulesData): Promise { let dependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies( projectData.projectDir, - projectData.ignoredDependencies + projectData.getIgnoredDependencies( + platformData.platformNameLowerCase, + ) ); dependencies = await platformData.platformProjectService.beforePrepareAllPlugins( projectData, diff --git a/test/stubs.ts b/test/stubs.ts index 96bc5e2a33..04e3fed122 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -720,6 +720,10 @@ export class ProjectDataStub implements IProjectData { return ""; } + public getIgnoredDependencies(platform?: string): string[] { + return []; + } + public getAppDirectoryPath(projectDir?: string): string { if (!projectDir) { projectDir = this.projectDir;