@@ -109,6 +109,9 @@ export type Options = Protobuf.IParseOptions &
109
109
includeDirs ?: string [ ] ;
110
110
} ;
111
111
112
+ type DecodedDescriptorSet = Protobuf . Message < descriptor . IFileDescriptorSet > &
113
+ descriptor . IFileDescriptorSet ;
114
+
112
115
const descriptorOptions : Protobuf . IConversionOptions = {
113
116
longs : String ,
114
117
enums : String ,
@@ -318,6 +321,19 @@ function addIncludePathResolver(root: Protobuf.Root, includePaths: string[]) {
318
321
} ;
319
322
}
320
323
324
+ function createPackageDefinitionFromDescriptorSet (
325
+ decodedDescriptorSet : DecodedDescriptorSet ,
326
+ options ?: Options
327
+ ) {
328
+ options = options || { } ;
329
+
330
+ const root = ( Protobuf . Root as Protobuf . RootConstructor ) . fromDescriptor (
331
+ decodedDescriptorSet
332
+ ) ;
333
+ root . resolveAll ( ) ;
334
+ return createPackageDefinition ( root , options ) ;
335
+ }
336
+
321
337
/**
322
338
* Load a .proto file with the specified options.
323
339
* @param filename One or multiple file paths to load. Can be an absolute path
@@ -379,52 +395,32 @@ export function loadSync(
379
395
return createPackageDefinition ( root , options ! ) ;
380
396
}
381
397
382
- export function loadFileDescriptorSet (
383
- descriptorSet :
384
- | Buffer
385
- | ReturnType < typeof descriptor . FileDescriptorSet . toObject > ,
398
+ export function loadFileDescriptorSetFromBuffer (
399
+ descriptorSet : Buffer ,
386
400
options ?: Options
387
401
) : PackageDefinition {
388
- type DecodedDescriptorSet = Protobuf . Message < descriptor . IFileDescriptorSet > &
389
- descriptor . IFileDescriptorSet ;
402
+ const decodedDescriptorSet = descriptor . FileDescriptorSet . decode (
403
+ descriptorSet
404
+ ) as DecodedDescriptorSet ;
390
405
391
- options = options || { } ;
392
-
393
- let decodedDescriptorSet : DecodedDescriptorSet ;
394
- if ( Buffer . isBuffer ( descriptorSet ) ) {
395
- decodedDescriptorSet = descriptor . FileDescriptorSet . decode (
396
- descriptorSet
397
- ) as DecodedDescriptorSet ;
398
- } else {
399
- decodedDescriptorSet = descriptor . FileDescriptorSet . fromObject (
400
- descriptorSet
401
- ) as DecodedDescriptorSet ;
402
- }
403
-
404
- const root = ( Protobuf . Root as Protobuf . RootConstructor ) . fromDescriptor (
405
- decodedDescriptorSet
406
+ return createPackageDefinitionFromDescriptorSet (
407
+ decodedDescriptorSet ,
408
+ options
406
409
) ;
407
- root . resolveAll ( ) ;
408
- return createPackageDefinition ( root , options ) ;
409
410
}
410
411
411
- export function loadFileDescriptorSetFile (
412
- filename : string ,
412
+ export function loadFileDescriptorSetFromObject (
413
+ descriptorSet : Parameters < typeof descriptor . FileDescriptorSet . fromObject > [ 0 ] ,
413
414
options ?: Options
414
- ) : Promise < PackageDefinition > {
415
- return new Promise ( ( resolve , reject ) => {
416
- fs . readFile ( filename , ( err , data ) => {
417
- if ( err ) {
418
- return reject ( err ) ;
419
- }
420
-
421
- try {
422
- data = JSON . parse ( data . toString ( ) ) ;
423
- } catch ( e ) { }
415
+ ) : PackageDefinition {
416
+ const decodedDescriptorSet = descriptor . FileDescriptorSet . fromObject (
417
+ descriptorSet
418
+ ) as DecodedDescriptorSet ;
424
419
425
- return resolve ( loadFileDescriptorSet ( data , options ) ) ;
426
- } ) ;
427
- } ) ;
420
+ return createPackageDefinitionFromDescriptorSet (
421
+ decodedDescriptorSet ,
422
+ options
423
+ ) ;
428
424
}
429
425
430
426
// Load Google's well-known proto files that aren't exposed by Protobuf.js.
0 commit comments