Skip to content

Commit 0116012

Browse files
committed
Add trigger tracking to changelog
1 parent 20eb313 commit 0116012

File tree

5 files changed

+102
-1
lines changed

5 files changed

+102
-1
lines changed

examples/vitepress/docs/changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ Eu excepteur irure occaecat adipisicing anim non consequat deserunt ipsum id ame
7878

7979
Represents a speaker at an event.
8080

81+
## New Triggers
82+
83+
These triggers are new.
84+
85+
- PaymentDeviceTrigger on Payment_Device__c
86+
8187
## New or Removed Fields to Custom Objects or Standard Objects
8288

8389
These custom fields have been added or removed.

src/core/changelog/generate-change-log.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import { hookableTemplate } from '../markdown/templates/hookable';
2727
import changelogToSourceChangelog from './helpers/changelog-to-source-changelog';
2828
import { CustomMetadataMetadata } from '../reflection/sobject/reflect-custom-metadata-source';
2929
import { TriggerMetadata } from '../reflection/trigger/reflect-trigger-source';
30+
import { reflectTriggerSource } from '../reflection/trigger/reflect-trigger-source';
31+
import { filterTriggerFiles } from '#utils/source-bundle-utils';
3032

3133
type Config = Omit<UserDefinedChangelogConfig, 'targetGenerator'>;
3234

@@ -79,6 +81,13 @@ function reflect(bundles: UnparsedSourceBundle[], config: Omit<UserDefinedChange
7981
TE.map((parsedObjectFiles) => [...parsedApexFiles, ...parsedObjectFiles]),
8082
);
8183
}),
84+
// Add trigger reflection
85+
TE.chain((parsedFiles) => {
86+
return pipe(
87+
reflectTriggerSource(filterTriggerFiles(bundles)),
88+
TE.map((parsedTriggerFiles) => [...parsedFiles, ...parsedTriggerFiles]),
89+
);
90+
}),
8291
);
8392
}
8493

src/core/changelog/process-changelog.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ type ModificationTypes =
2222
| 'NewField'
2323
| 'RemovedField'
2424
| 'NewCustomMetadataRecord'
25-
| 'RemovedCustomMetadataRecord';
25+
| 'RemovedCustomMetadataRecord'
26+
| 'NewTrigger'
27+
| 'RemovedTrigger';
2628

2729
export type MemberModificationType = {
2830
__typename: ModificationTypes;
@@ -35,13 +37,20 @@ export type NewOrModifiedMember = {
3537
modifications: MemberModificationType[];
3638
};
3739

40+
export type TriggerChange = {
41+
triggerName: string;
42+
objectName: string;
43+
};
44+
3845
export type Changelog = {
3946
newApexTypes: string[];
4047
removedApexTypes: string[];
4148
newOrModifiedApexMembers: NewOrModifiedMember[];
4249
newCustomObjects: string[];
4350
removedCustomObjects: string[];
4451
customObjectModifications: NewOrModifiedMember[];
52+
newTriggers: TriggerChange[];
53+
removedTriggers: TriggerChange[];
4554
};
4655

4756
export function hasChanges(changelog: Changelog): boolean {
@@ -63,6 +72,8 @@ export function processChangelog(oldVersion: VersionManifest, newVersion: Versio
6372
...getCustomObjectModifications(oldVersion, newVersion),
6473
...getNewOrModifiedExtensionFields(oldVersion, newVersion),
6574
],
75+
newTriggers: getNewTriggers(oldVersion, newVersion),
76+
removedTriggers: getRemovedTriggers(oldVersion, newVersion),
6677
};
6778
}
6879

@@ -80,6 +91,24 @@ function getRemovedApexTypes(oldVersion: VersionManifest, newVersion: VersionMan
8091
.map((type) => type.name);
8192
}
8293

94+
function getNewTriggers(oldVersion: VersionManifest, newVersion: VersionManifest): TriggerChange[] {
95+
return newVersion.types
96+
.filter((newType): newType is TriggerMetadata => newType.type_name === 'trigger')
97+
.filter(
98+
(newTrigger) => !oldVersion.types.some((oldType) => oldType.name.toLowerCase() === newTrigger.name.toLowerCase()),
99+
)
100+
.map((trigger) => ({ triggerName: trigger.name, objectName: trigger.object_name }));
101+
}
102+
103+
function getRemovedTriggers(oldVersion: VersionManifest, newVersion: VersionManifest): TriggerChange[] {
104+
return oldVersion.types
105+
.filter((newType): newType is TriggerMetadata => newType.type_name === 'trigger')
106+
.filter(
107+
(oldTrigger) => !newVersion.types.some((newType) => newType.name.toLowerCase() === oldTrigger.name.toLowerCase()),
108+
)
109+
.map((trigger) => ({ triggerName: trigger.name, objectName: trigger.object_name }));
110+
}
111+
83112
function getNewCustomObjects(oldVersion: VersionManifest, newVersion: VersionManifest): string[] {
84113
return newVersion.types
85114
.filter((newType): newType is CustomObjectMetadata => newType.type_name === 'customobject')

src/core/changelog/renderable-changelog.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ type NewTypeSection<T extends 'class' | 'interface' | 'enum' | 'customobject'> =
1919
types: NewTypeRenderable[];
2020
};
2121

22+
type NewOrRemovedTriggerSection = {
23+
heading: string;
24+
description: string;
25+
triggerData: {
26+
triggerName: string;
27+
objectName: string;
28+
}[];
29+
};
30+
2231
type RemovedTypeSection = {
2332
heading: string;
2433
description: string;
@@ -46,6 +55,8 @@ export type RenderableChangelog = {
4655
removedCustomObjects: RemovedTypeSection | null;
4756
newOrRemovedCustomFields: NewOrModifiedMembersSection | null;
4857
newOrRemovedCustomMetadataTypeRecords: NewOrModifiedMembersSection | null;
58+
newTriggers: NewOrRemovedTriggerSection | null;
59+
removedTriggers: NewOrRemovedTriggerSection | null;
4960
};
5061

5162
export function convertToRenderableChangelog(
@@ -149,6 +160,28 @@ export function convertToRenderableChangelog(
149160
modifications: newOrModifiedCustomMetadataTypeRecords.map(toRenderableModification),
150161
}
151162
: null,
163+
newTriggers:
164+
changelog.newTriggers.length > 0
165+
? {
166+
heading: 'New Triggers',
167+
description: 'These triggers are new.',
168+
triggerData: changelog.newTriggers.map((trigger) => ({
169+
triggerName: trigger.triggerName,
170+
objectName: trigger.objectName,
171+
})),
172+
}
173+
: null,
174+
removedTriggers:
175+
changelog.removedTriggers.length > 0
176+
? {
177+
heading: 'Removed Triggers',
178+
description: 'These triggers have been removed.',
179+
triggerData: changelog.removedTriggers.map((trigger) => ({
180+
triggerName: trigger.triggerName,
181+
objectName: trigger.objectName,
182+
})),
183+
}
184+
: null,
152185
};
153186
}
154187

@@ -204,5 +237,9 @@ function toRenderableModificationDescription(memberModificationType: MemberModif
204237
return `New Custom Metadata Record: ${withDescription(memberModificationType)}`;
205238
case 'RemovedCustomMetadataRecord':
206239
return `Removed Custom Metadata Record: ${memberModificationType.name}`;
240+
case 'NewTrigger':
241+
return `New Trigger: ${withDescription(memberModificationType)}`;
242+
case 'RemovedTrigger':
243+
return `Removed Trigger: ${memberModificationType.name}`;
207244
}
208245
}

src/core/changelog/templates/changelog-template.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,26 @@ export const changelogTemplate = `
4949
{{/each}}
5050
{{/if}}
5151
52+
{{#if newTriggers}}
53+
## {{newTriggers.heading}}
54+
55+
{{newTriggers.description}}
56+
57+
{{#each newTriggers.triggerData}}
58+
- {{this.triggerName}} on {{this.objectName}}
59+
{{/each}}
60+
{{/if}}
61+
62+
{{#if removedTriggers}}
63+
## {{removedTriggers.heading}}
64+
65+
{{removedTriggers.description}}
66+
67+
{{#each removedTriggers.triggerData}}
68+
- {{this.triggerName}} on {{this.objectName}}
69+
{{/each}}
70+
{{/if}}
71+
5272
{{#if removedTypes}}
5373
## {{removedTypes.heading}}
5474

0 commit comments

Comments
 (0)