diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index 40fd0456b4..7589ae9c09 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -161,6 +161,7 @@ interface INsConfig { visionos?: INSConfigVisionOS; ignoredNativeDependencies?: string[]; hooks?: INsConfigHooks[]; + projectName?: string; } interface IProjectData extends ICreateProjectData { @@ -195,6 +196,7 @@ interface IProjectData extends ICreateProjectData { * The value can be changed by setting `webpackConfigPath` in nativescript.config. */ webpackConfigPath: string; + projectName: string; /** * Initializes project data with the given project directory. If none supplied defaults to --path option or cwd. diff --git a/lib/project-data.ts b/lib/project-data.ts index 63ddc34e73..3e36c374b5 100644 --- a/lib/project-data.ts +++ b/lib/project-data.ts @@ -162,9 +162,10 @@ export class ProjectData implements IProjectData { } if (packageJsonData) { - this.projectName = this.$projectHelper.sanitizeName( - path.basename(projectDir) - ); + this.projectName = + nsConfig && nsConfig.projectName + ? nsConfig.projectName + : this.$projectHelper.sanitizeName(path.basename(projectDir)); this.platformsDir = path.join(projectDir, constants.PLATFORMS_DIR_NAME); this.projectFilePath = projectFilePath; this.projectIdentifiers = this.initializeProjectIdentifiers(nsConfig); diff --git a/test/project-data.ts b/test/project-data.ts index 673d2e9456..7ce33a1320 100644 --- a/test/project-data.ts +++ b/test/project-data.ts @@ -53,7 +53,11 @@ describe("projectData", () => { dependencies?: IStringDictionary; devDependencies: IStringDictionary; }; - configData?: { shared?: boolean; webpackConfigPath?: string }; + configData?: { + shared?: boolean; + webpackConfigPath?: string; + projectName?: string; + }; }): IProjectData => { const testInjector = createTestInjector(); const fs = testInjector.resolve("fs"); @@ -172,6 +176,20 @@ describe("projectData", () => { }); }); + describe("projectName", () => { + it("has correct name when no value is set in nativescript.conf", () => { + const projectData = prepareTest(); + assert.isString("projectDir", projectData.projectName); + }); + + it("has correct name when a project name is set in nativescript.conf", () => { + const projectData = prepareTest({ + configData: { projectName: "specifiedProjectName" }, + }); + assert.isString("specifiedProjectName", projectData.projectName); + }); + }); + describe("webpackConfigPath", () => { it("default path to webpack.config.js is set when nsconfig.json does not set value", () => { const projectData = prepareTest();