88} from "./predicates" ;
99
1010import * as dataSchemaJson from "./data-schema.json" ;
11- import { sanitizeExtensionPackName } from "./extension-pack-name" ;
1211import { Mode } from "./shared/mode" ;
1312import { assertNever } from "../common/helpers-pure" ;
1413
@@ -69,7 +68,6 @@ ${extensions.join("\n")}`;
6968}
7069
7170export function createDataExtensionYamls (
72- databaseName : string ,
7371 language : string ,
7472 methods : Method [ ] ,
7573 newModeledMethods : Record < string , ModeledMethod > ,
@@ -86,7 +84,6 @@ export function createDataExtensionYamls(
8684 ) ;
8785 case Mode . Framework :
8886 return createDataExtensionYamlsForFrameworkMode (
89- databaseName ,
9087 language ,
9188 methods ,
9289 newModeledMethods ,
@@ -97,31 +94,29 @@ export function createDataExtensionYamls(
9794 }
9895}
9996
100- export function createDataExtensionYamlsForApplicationMode (
97+ function createDataExtensionYamlsByGrouping (
10198 language : string ,
10299 methods : Method [ ] ,
103100 newModeledMethods : Record < string , ModeledMethod > ,
104101 existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
102+ createFilename : ( method : Method ) => string ,
105103) : Record < string , string > {
106- const methodsByLibraryFilename : Record <
107- string ,
108- Record < string , ModeledMethod >
109- > = { } ;
104+ const methodsByFilename : Record < string , Record < string , ModeledMethod > > = { } ;
110105
111106 // We only want to generate a yaml file when it's a known external API usage
112107 // and there are new modeled methods for it. This avoids us overwriting other
113108 // files that may contain data we don't know about.
114109 for ( const method of methods ) {
115110 if ( method . signature in newModeledMethods ) {
116- methodsByLibraryFilename [ createFilenameForLibrary ( method . library ) ] = { } ;
111+ methodsByFilename [ createFilename ( method ) ] = { } ;
117112 }
118113 }
119114
120- // First populate methodsByLibraryFilename with any existing modeled methods.
115+ // First populate methodsByFilename with any existing modeled methods.
121116 for ( const [ filename , methods ] of Object . entries ( existingModeledMethods ) ) {
122- if ( filename in methodsByLibraryFilename ) {
117+ if ( filename in methodsByFilename ) {
123118 for ( const [ signature , method ] of Object . entries ( methods ) ) {
124- methodsByLibraryFilename [ filename ] [ signature ] = method ;
119+ methodsByFilename [ filename ] [ signature ] = method ;
125120 }
126121 }
127122 }
@@ -131,14 +126,14 @@ export function createDataExtensionYamlsForApplicationMode(
131126 for ( const method of methods ) {
132127 const newMethod = newModeledMethods [ method . signature ] ;
133128 if ( newMethod ) {
134- const filename = createFilenameForLibrary ( method . library ) ;
135- methodsByLibraryFilename [ filename ] [ newMethod . signature ] = newMethod ;
129+ const filename = createFilename ( method ) ;
130+ methodsByFilename [ filename ] [ newMethod . signature ] = newMethod ;
136131 }
137132 }
138133
139134 const result : Record < string , string > = { } ;
140135
141- for ( const [ filename , methods ] of Object . entries ( methodsByLibraryFilename ) ) {
136+ for ( const [ filename , methods ] of Object . entries ( methodsByFilename ) ) {
142137 result [ filename ] = createDataExtensionYaml (
143138 language ,
144139 Object . values ( methods ) ,
@@ -148,43 +143,34 @@ export function createDataExtensionYamlsForApplicationMode(
148143 return result ;
149144}
150145
151- export function createDataExtensionYamlsForFrameworkMode (
152- databaseName : string ,
146+ export function createDataExtensionYamlsForApplicationMode (
153147 language : string ,
154- unmodeledMethods : Method [ ] ,
148+ methods : Method [ ] ,
155149 newModeledMethods : Record < string , ModeledMethod > ,
156150 existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
157- prefix = "models/" ,
158- suffix = ".model" ,
159151) : Record < string , string > {
160- const parts = databaseName . split ( "/" ) ;
161- const libraryName = parts
162- . slice ( 1 )
163- . map ( ( part ) => sanitizeExtensionPackName ( part ) )
164- . join ( "-" ) ;
165- const filename = `${ prefix } ${ libraryName } ${ suffix } .yml` ;
166-
167- const methods : Record < string , ModeledMethod > = { } ;
168-
169- // First populate methodsByLibraryFilename with any existing modeled methods.
170- for ( const [ signature , method ] of Object . entries (
171- existingModeledMethods [ filename ] || { } ,
172- ) ) {
173- methods [ signature ] = method ;
174- }
175-
176- // Add the new modeled methods, potentially overwriting existing modeled methods
177- // but not removing existing modeled methods that are not in the new set.
178- for ( const method of unmodeledMethods ) {
179- const modeledMethod = newModeledMethods [ method . signature ] ;
180- if ( modeledMethod ) {
181- methods [ modeledMethod . signature ] = modeledMethod ;
182- }
183- }
152+ return createDataExtensionYamlsByGrouping (
153+ language ,
154+ methods ,
155+ newModeledMethods ,
156+ existingModeledMethods ,
157+ ( method ) => createFilenameForLibrary ( method . library ) ,
158+ ) ;
159+ }
184160
185- return {
186- [ filename ] : createDataExtensionYaml ( language , Object . values ( methods ) ) ,
187- } ;
161+ export function createDataExtensionYamlsForFrameworkMode (
162+ language : string ,
163+ methods : Method [ ] ,
164+ newModeledMethods : Record < string , ModeledMethod > ,
165+ existingModeledMethods : Record < string , Record < string , ModeledMethod > > ,
166+ ) : Record < string , string > {
167+ return createDataExtensionYamlsByGrouping (
168+ language ,
169+ methods ,
170+ newModeledMethods ,
171+ existingModeledMethods ,
172+ ( method ) => createFilenameForPackage ( method . packageName ) ,
173+ ) ;
188174}
189175
190176export function createFilenameForLibrary (
@@ -214,6 +200,17 @@ export function createFilenameForLibrary(
214200 return `${ prefix } ${ libraryName } ${ suffix } .yml` ;
215201}
216202
203+ export function createFilenameForPackage (
204+ packageName : string ,
205+ prefix = "models/" ,
206+ suffix = ".model" ,
207+ ) {
208+ // A package name is e.g. `com.google.common.io` or `System.Net.Http.Headers`
209+ // We want to place these into `models/com.google.common.io.model.yml` and
210+ // `models/System.Net.Http.Headers.model.yml` respectively.
211+ return `${ prefix } ${ packageName } ${ suffix } .yml` ;
212+ }
213+
217214export function loadDataExtensionYaml (
218215 data : any ,
219216) : Record < string , ModeledMethod > | undefined {
0 commit comments