Skip to content

Commit efba434

Browse files
committed
Header impact APIs
Signed-off-by: worksofliam <[email protected]>
1 parent a09a99a commit efba434

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

cli/src/targets/index.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,32 @@ export class Targets {
238238
return isRef;
239239
}
240240

241+
public getAllHeaders() {
242+
const allObjects = this.getResolvedObjects();
243+
const allHeaders: string[] = [];
244+
for (const obj of allObjects) {
245+
if (obj.headers) {
246+
for (const header of obj.headers) {
247+
if (!allHeaders.includes(header)) {
248+
allHeaders.push(header);
249+
}
250+
}
251+
}
252+
}
253+
return allHeaders;
254+
}
255+
256+
public getAffectedByHeader(headers: string[]): ILEObject[] {
257+
const allObjects = this.getResolvedObjects();
258+
const affectedObjects: ILEObject[] = [];
259+
for (const obj of allObjects) {
260+
if (obj.headers && headers.some(header => obj.headers.includes(header))) {
261+
affectedObjects.push(obj);
262+
}
263+
}
264+
return affectedObjects;
265+
}
266+
241267
public removeObjectByPath(localPath: string) {
242268
const resolvedObject = this.resolvedObjects[localPath];
243269

@@ -719,7 +745,7 @@ export class Targets {
719745
* Sadly the long name is not typically part of the path name, so we need to
720746
* find the name inside of the source code.
721747
*/
722-
async sqlObjectDataFromPath(fullPath: string): Promise<ObjectRef> {
748+
private async sqlObjectDataFromPath(fullPath: string): Promise<ObjectRef> {
723749
const relativePath = this.getRelative(fullPath);
724750

725751
if (await this.fs.exists(fullPath)) {

cli/test/cs_with_bnddir.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,26 @@ describe(`pseudo tests`, () => {
3838
expect(testModule.deps.find(f => f.systemName === `EMPDET` && f.type === `SRVPGM`)).toBeDefined();
3939
});
4040

41+
test(`We can get a list of headers`, () => {
42+
const allHeaders = targets.getAllHeaders();
43+
expect(allHeaders.length).toBe(2);
44+
expect(allHeaders).toContain(`qrpgleref/constants.rpgleinc`);
45+
expect(allHeaders).toContain(`qrpgleref/empdet.rpgleinc`);
46+
47+
const constantImpacts = targets.getAffectedByHeader([`qrpgleref/constants.rpgleinc`]);
48+
expect(constantImpacts.length).toBe(4);
49+
expect(constantImpacts.find(f => f.systemName === `DEPTS` && f.type === `PGM`)).toBeDefined();
50+
expect(constantImpacts.find(f => f.systemName === `EMPLOYEES` && f.type === `PGM`)).toBeDefined();
51+
expect(constantImpacts.find(f => f.systemName === `MYPGM` && f.type === `PGM`)).toBeDefined();
52+
expect(constantImpacts.find(f => f.systemName === `NEWEMP` && f.type === `PGM`)).toBeDefined();
53+
54+
const empdetImpacts = targets.getAffectedByHeader([`qrpgleref/empdet.rpgleinc`]);
55+
expect(empdetImpacts.length).toBe(3);
56+
expect(empdetImpacts.find(f => f.systemName === `EMPDET` && f.type === `MODULE`)).toBeDefined();
57+
expect(empdetImpacts.find(f => f.systemName === `EMPLOYEES` && f.type === `PGM`)).toBeDefined();
58+
expect(empdetImpacts.find(f => f.systemName === `TEMPDETT` && f.type === `MODULE`)).toBeDefined();
59+
});
60+
4161
test('Deps are picked up for the module', () => {
4262
const empdet = targets.getTarget({systemName: `EMPDET`, type: `MODULE`});
4363
expect(empdet).toBeDefined();

0 commit comments

Comments
 (0)