Skip to content

Commit ba8dd58

Browse files
authored
feat: ensure App_Resources exists before running (#5689)
1 parent c469f73 commit ba8dd58

File tree

5 files changed

+26
-2
lines changed

5 files changed

+26
-2
lines changed

lib/controllers/prepare-controller.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
IProjectConfigService,
1919
IProjectData,
2020
IProjectDataService,
21+
IProjectService,
2122
} from "../definitions/project";
2223
import {
2324
INodeModulesDependenciesBuilder,
@@ -64,7 +65,8 @@ export class PrepareController extends EventEmitter {
6465
private $watchIgnoreListService: IWatchIgnoreListService,
6566
private $analyticsService: IAnalyticsService,
6667
private $markingModeService: IMarkingModeService,
67-
private $projectConfigService: IProjectConfigService
68+
private $projectConfigService: IProjectConfigService,
69+
private $projectService: IProjectService
6870
) {
6971
super();
7072
}
@@ -127,6 +129,7 @@ export class PrepareController extends EventEmitter {
127129
prepareData: IPrepareData,
128130
projectData: IProjectData
129131
): Promise<IPrepareResultData> {
132+
await this.$projectService.ensureAppResourcesExist(projectData.projectDir);
130133
await this.$platformController.addPlatformIfNeeded(
131134
prepareData,
132135
projectData

lib/definitions/project.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,13 @@ interface IProjectService {
8888
* @returns {boolean} returns true if the project is valid NativeScript project.
8989
*/
9090
isValidNativeScriptProject(pathToProject?: string): boolean;
91+
92+
/**
93+
* Checks if App_Resources exists, or pulls down a fresh set
94+
* from the default template otherwise.
95+
* @param {string} projectDir
96+
*/
97+
ensureAppResourcesExist(projectDir: string): Promise<void>;
9198
}
9299

93100
interface INsConfigPlaform {

lib/services/project-service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ export class ProjectService implements IProjectService {
224224
}
225225

226226
@performanceLog()
227-
private async ensureAppResourcesExist(projectDir: string): Promise<void> {
227+
public async ensureAppResourcesExist(projectDir: string): Promise<void> {
228228
const projectData = this.$projectDataService.getProjectData(projectDir);
229229
const appResourcesDestinationPath = projectData.getAppResourcesDirectoryPath(
230230
projectDir

test/controllers/prepare-controller.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const prepareData = {
1919
let isCompileWithWatchCalled = false;
2020
let isCompileWithoutWatchCalled = false;
2121
let isNativePrepareCalled = false;
22+
let isEnsuringAppResourcesExist = false;
2223
let emittedEventNames: string[] = [];
2324
let emittedEventData: any[] = [];
2425

@@ -64,6 +65,12 @@ function createTestInjector(data: { hasNativeChanges: boolean }): IInjector {
6465
});
6566

6667
injector.register("tempService", TempServiceStub);
68+
injector.register("projectService", {
69+
ensureAppResourcesExist(projectDir: string): Promise<void> {
70+
isEnsuringAppResourcesExist = true;
71+
return;
72+
},
73+
});
6774

6875
const prepareController: PrepareController = injector.resolve(
6976
"prepareController"
@@ -84,6 +91,7 @@ describe("prepareController", () => {
8491
isNativePrepareCalled = false;
8592
isCompileWithWatchCalled = false;
8693
isCompileWithoutWatchCalled = false;
94+
isEnsuringAppResourcesExist = false;
8795

8896
emittedEventNames = [];
8997
emittedEventData = [];
@@ -102,6 +110,7 @@ describe("prepareController", () => {
102110

103111
assert.isTrue(isCompileWithWatchCalled);
104112
assert.isTrue(isNativePrepareCalled);
113+
assert.isTrue(isEnsuringAppResourcesExist);
105114
});
106115
});
107116
it(`should respect native changes that are made before the initial preparation of the project had been done for ${platform}`, async () => {
@@ -161,6 +170,7 @@ describe("prepareController", () => {
161170
assert.isTrue(isNativePrepareCalled);
162171
assert.isTrue(isCompileWithoutWatchCalled);
163172
assert.isFalse(isCompileWithWatchCalled);
173+
assert.isTrue(isEnsuringAppResourcesExist);
164174
});
165175
});
166176
});

test/project-commands.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ class ProjectServiceMock implements IProjectService {
9696
isValidNativeScriptProject(pathToProject?: string): boolean {
9797
return true;
9898
}
99+
100+
ensureAppResourcesExist(projectDir: string): Promise<void> {
101+
return;
102+
}
99103
}
100104

101105
class ProjectNameValidatorMock implements IProjectNameValidator {

0 commit comments

Comments
 (0)