@@ -71,8 +71,8 @@ ${extensions.join("\n")}`;
7171export function createDataExtensionYamls (
7272 language : string ,
7373 methods : Method [ ] ,
74- newModeledMethods : Record < string , ModeledMethod > ,
75- existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
74+ newModeledMethods : Record < string , ModeledMethod [ ] > ,
75+ existingModeledMethods : Record < string , Record < string , ModeledMethod [ ] > > ,
7676 mode : Mode ,
7777) {
7878 switch ( mode ) {
@@ -98,11 +98,11 @@ export function createDataExtensionYamls(
9898function createDataExtensionYamlsByGrouping (
9999 language : string ,
100100 methods : Method [ ] ,
101- newModeledMethods : Record < string , ModeledMethod > ,
102- existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
101+ newModeledMethods : Record < string , ModeledMethod [ ] > ,
102+ existingModeledMethods : Record < string , Record < string , ModeledMethod [ ] > > ,
103103 createFilename : ( method : Method ) => string ,
104104) : Record < string , string > {
105- const methodsByFilename : Record < string , Record < string , ModeledMethod > > = { } ;
105+ const methodsByFilename : Record < string , Record < string , ModeledMethod [ ] > > = { } ;
106106
107107 // We only want to generate a yaml file when it's a known external API usage
108108 // and there are new modeled methods for it. This avoids us overwriting other
@@ -114,21 +114,25 @@ function createDataExtensionYamlsByGrouping(
114114 }
115115
116116 // First populate methodsByFilename with any existing modeled methods.
117- for ( const [ filename , methods ] of Object . entries ( existingModeledMethods ) ) {
117+ for ( const [ filename , methodsBySignature ] of Object . entries (
118+ existingModeledMethods ,
119+ ) ) {
118120 if ( filename in methodsByFilename ) {
119- for ( const [ signature , method ] of Object . entries ( methods ) ) {
120- methodsByFilename [ filename ] [ signature ] = method ;
121+ for ( const [ signature , methods ] of Object . entries ( methodsBySignature ) ) {
122+ methodsByFilename [ filename ] [ signature ] = methods ;
121123 }
122124 }
123125 }
124126
125127 // Add the new modeled methods, potentially overwriting existing modeled methods
126128 // but not removing existing modeled methods that are not in the new set.
127129 for ( const method of methods ) {
128- const newMethod = newModeledMethods [ method . signature ] ;
129- if ( newMethod ) {
130+ const newMethods = newModeledMethods [ method . signature ] ;
131+ if ( newMethods ) {
130132 const filename = createFilename ( method ) ;
131- methodsByFilename [ filename ] [ newMethod . signature ] = newMethod ;
133+
134+ // Override any existing modeled methods with the new ones.
135+ methodsByFilename [ filename ] [ method . signature ] = newMethods ;
132136 }
133137 }
134138
@@ -137,7 +141,7 @@ function createDataExtensionYamlsByGrouping(
137141 for ( const [ filename , methods ] of Object . entries ( methodsByFilename ) ) {
138142 result [ filename ] = createDataExtensionYaml (
139143 language ,
140- Object . values ( methods ) ,
144+ Object . values ( methods ) . flatMap ( ( methods ) => methods ) ,
141145 ) ;
142146 }
143147
@@ -147,8 +151,8 @@ function createDataExtensionYamlsByGrouping(
147151export function createDataExtensionYamlsForApplicationMode (
148152 language : string ,
149153 methods : Method [ ] ,
150- newModeledMethods : Record < string , ModeledMethod > ,
151- existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
154+ newModeledMethods : Record < string , ModeledMethod [ ] > ,
155+ existingModeledMethods : Record < string , Record < string , ModeledMethod [ ] > > ,
152156) : Record < string , string > {
153157 return createDataExtensionYamlsByGrouping (
154158 language ,
@@ -162,8 +166,8 @@ export function createDataExtensionYamlsForApplicationMode(
162166export function createDataExtensionYamlsForFrameworkMode (
163167 language : string ,
164168 methods : Method [ ] ,
165- newModeledMethods : Record < string , ModeledMethod > ,
166- existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
169+ newModeledMethods : Record < string , ModeledMethod [ ] > ,
170+ existingModeledMethods : Record < string , Record < string , ModeledMethod [ ] > > ,
167171) : Record < string , string > {
168172 return createDataExtensionYamlsByGrouping (
169173 language ,
@@ -228,14 +232,14 @@ function validateModelExtensionFile(data: unknown): data is ModelExtensionFile {
228232
229233export function loadDataExtensionYaml (
230234 data : unknown ,
231- ) : Record < string , ModeledMethod > | undefined {
235+ ) : Record < string , ModeledMethod [ ] > | undefined {
232236 if ( ! validateModelExtensionFile ( data ) ) {
233237 return undefined ;
234238 }
235239
236240 const extensions = data . extensions ;
237241
238- const modeledMethods : Record < string , ModeledMethod > = { } ;
242+ const modeledMethods : Record < string , ModeledMethod [ ] > = { } ;
239243
240244 for ( const extension of extensions ) {
241245 const addsTo = extension . addsTo ;
@@ -250,11 +254,16 @@ export function loadDataExtensionYaml(
250254 }
251255
252256 for ( const row of data ) {
253- const modeledMethod = definition . readModeledMethod ( row ) ;
257+ const modeledMethod : ModeledMethod = definition . readModeledMethod ( row ) ;
254258 if ( ! modeledMethod ) {
255259 continue ;
256260 }
257- modeledMethods [ modeledMethod . signature ] = modeledMethod ;
261+
262+ if ( ! ( modeledMethod . signature in modeledMethods ) ) {
263+ modeledMethods [ modeledMethod . signature ] = [ ] ;
264+ }
265+
266+ modeledMethods [ modeledMethod . signature ] . push ( modeledMethod ) ;
258267 }
259268 }
260269
0 commit comments