@@ -20,7 +20,6 @@ internal static class PackageHelper
2020 private const string _schemaExtensionKind = "urn:graphql:schema-extensions" ;
2121 private const string _subgraphConfigKind = "urn:hotchocolate:fusion:subgraph-config" ;
2222 private const string _subgraphConfigId = "subgraph-config" ;
23- private const string _subgraphPackageKind = "urn:hotchocolate:fusion:subgraph-package" ;
2423
2524 public static async Task CreateSubgraphPackageAsync (
2625 string packageFile ,
@@ -46,6 +45,24 @@ public static async Task CreateSubgraphPackageAsync(
4645 await AddTransportConfigToPackage ( package , transportConfig ) ;
4746 await AddSchemaExtensionsToPackage ( package , extensions ) ;
4847 }
48+
49+ public static async Task < SubgraphConfigurationDto > LoadSubgraphConfigFromSubgraphPackageAsync (
50+ string packageFile ,
51+ CancellationToken ct = default )
52+ {
53+ using var package = Package . Open ( packageFile , FileMode . Open , FileAccess . Read ) ;
54+ var transportConfig = await ReadSubgraphConfigPartAsync ( package , ct ) ;
55+ return transportConfig ;
56+ }
57+
58+ public static async Task ReplaceSubgraphConfigInSubgraphPackageAsync (
59+ string packageFile ,
60+ SubgraphConfigurationDto config ,
61+ CancellationToken ct = default )
62+ {
63+ using var package = Package . Open ( packageFile , FileMode . Open , FileAccess . Read ) ;
64+ await ReplaceTransportConfigInPackageAsync ( package , config ) ;
65+ }
4966
5067 public static async Task CreateSubgraphPackageAsync (
5168 Stream stream ,
@@ -66,32 +83,6 @@ public static async Task CreateSubgraphPackageAsync(
6683 await AddSchemaExtensionsToPackage ( package , extensions ) ;
6784 }
6885
69- public static async Task CreateFusionPackageAsync (
70- string packageFile ,
71- DocumentNode schema ,
72- DocumentNode fusionGraph ,
73- IEnumerable < SubgraphConfiguration > subgraphConfigs )
74- {
75- if ( File . Exists ( packageFile ) )
76- {
77- File . Delete ( packageFile ) ;
78- }
79-
80- using var package = Package . Open ( packageFile , FileMode . Create ) ;
81-
82- await AddSchemaToPackageAsync ( package , schema ) ;
83- await AddFusionGraphToPackageAsync ( package , fusionGraph ) ;
84-
85- foreach ( var subgraphConfig in subgraphConfigs )
86- {
87- var uri = CreatePartUri ( new Uri ( $ "subgraphs/{ subgraphConfig . Name } ", Relative ) ) ;
88- var part = package . CreatePart ( uri , "application/subgraph-package" ) ;
89- await using var stream = part . GetStream ( FileMode . Create ) ;
90- await CreateSubgraphPackageAsync ( stream , subgraphConfig ) ;
91- package . CreateRelationship ( part . Uri , TargetMode . Internal , _subgraphPackageKind ) ;
92- }
93- }
94-
9586 public static async Task < SubgraphConfiguration > ReadSubgraphPackageAsync (
9687 string packageFile ,
9788 CancellationToken cancellationToken = default )
@@ -115,25 +106,6 @@ public static async Task<SubgraphConfiguration> ReadSubgraphPackageAsync(
115106 subgraphConfig . Clients ) ;
116107 }
117108
118- public static async Task < SubgraphConfiguration [ ] > ReadSubgraphConfigsFromFusionPackageAsync (
119- string packageFile ,
120- CancellationToken cancellationToken = default )
121- {
122- using var package = Package . Open ( packageFile , FileMode . Open , FileAccess . Read ) ;
123- var configs = new List < SubgraphConfiguration > ( ) ;
124-
125- foreach ( var extensionRel in package . GetRelationshipsByType ( _subgraphPackageKind ) )
126- {
127- var schemaPart = package . GetPart ( extensionRel . TargetUri ) ;
128- await using var stream = schemaPart . GetStream ( FileMode . Open , FileAccess . Read ) ;
129- using var subgraphPackage = Package . Open ( stream , FileMode . Open , FileAccess . Read ) ;
130- var config = await ReadSubgraphPackageAsync ( subgraphPackage , cancellationToken ) ;
131- configs . Add ( config ) ;
132- }
133-
134- return configs . ToArray ( ) ;
135- }
136-
137109 public static async Task ExtractSubgraphPackageAsync (
138110 string packageFile ,
139111 string targetDirectory ,
@@ -303,33 +275,6 @@ public static string FormatSubgraphConfig(
303275 return Encoding . UTF8 . GetString ( buffer . WrittenSpan ) ;
304276 }
305277
306- private static async Task AddFusionGraphToPackageAsync (
307- Package package ,
308- DocumentNode schema )
309- {
310- var uri = CreatePartUri ( new Uri ( "fusion.graphql" , Relative ) ) ;
311- var part = package . CreatePart ( uri , "application/graphql-schema" ) ;
312-
313- await using var stream = part . GetStream ( FileMode . Create ) ;
314- await using var writer = new StreamWriter ( stream , Encoding . UTF8 ) ;
315- await writer . WriteAsync ( schema . ToString ( true ) ) ;
316-
317- package . CreateRelationship ( part . Uri , TargetMode . Internal , _fusionKind , _fusionId ) ;
318- }
319-
320- private static async Task < DocumentNode > ReadFusionGraphPartAsync (
321- Package package ,
322- CancellationToken ct )
323- {
324- var schemaRel = package . GetRelationship ( _fusionId ) ;
325- var schemaPart = package . GetPart ( schemaRel . TargetUri ) ;
326-
327- await using var stream = schemaPart . GetStream ( FileMode . Open ) ;
328- using var reader = new StreamReader ( stream , Encoding . UTF8 ) ;
329- var schema = await reader . ReadToEndAsync ( ct ) ;
330- return Utf8GraphQLParser . Parse ( schema ) ;
331- }
332-
333278 private static async Task AddSchemaToPackageAsync (
334279 Package package ,
335280 DocumentNode schema )
@@ -406,6 +351,20 @@ private static async Task AddTransportConfigToPackage(
406351
407352 package . CreateRelationship ( part . Uri , TargetMode . Internal , _subgraphConfigKind , _subgraphConfigId ) ;
408353 }
354+
355+ private static async Task ReplaceTransportConfigInPackageAsync (
356+ Package package ,
357+ SubgraphConfigurationDto subgraphConfig )
358+ {
359+ var uri = CreatePartUri ( new Uri ( "subgraph.json" , Relative ) ) ;
360+ var part = package . GetPart ( uri ) ;
361+
362+ await using var stream = part . GetStream ( FileMode . Create ) ;
363+ await using var writer = new StreamWriter ( stream , Encoding . UTF8 ) ;
364+ await writer . WriteAsync ( FormatSubgraphConfig ( subgraphConfig ) ) ;
365+
366+ package . CreateRelationship ( part . Uri , TargetMode . Internal , _subgraphConfigKind , _subgraphConfigId ) ;
367+ }
409368
410369 private static async Task < SubgraphConfigurationDto > ReadSubgraphConfigPartAsync (
411370 Package package ,
0 commit comments