2
2
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
3
// See the LICENSE file in the project root for more information
4
4
5
+ using System . Collections . Frozen ;
5
6
using System . Collections . Immutable ;
6
7
using System . IO . Abstractions ;
7
- using Elastic . Documentation ;
8
- using Elastic . Documentation . Configuration ;
9
8
using Elastic . Documentation . Configuration . Assembler ;
9
+ using Elastic . Documentation . Configuration . Builder ;
10
10
using Elastic . Documentation . Configuration . TableOfContents ;
11
+ using Elastic . Documentation . Diagnostics ;
11
12
using Elastic . Documentation . Navigation ;
12
13
using YamlDotNet . RepresentationModel ;
13
14
14
- namespace Documentation . Assembler . Navigation ;
15
+ namespace Elastic . Documentation . Configuration . Navigation ;
16
+
17
+ public record NavigationTocMapping
18
+ {
19
+ public required Uri Source { get ; init ; }
20
+ public required string SourcePathPrefix { get ; init ; }
21
+ public required Uri TopLevelSource { get ; init ; }
22
+ public required Uri ParentSource { get ; init ; }
23
+ }
24
+
25
+ public record TocConfigurationMapping
26
+ {
27
+ public required NavigationTocMapping TopLevel { get ; init ; }
28
+ public required ConfigurationFile RepositoryConfigurationFile { get ; init ; }
29
+ public required TableOfContentsConfiguration TableOfContentsConfiguration { get ; init ; }
30
+ }
15
31
16
32
public record GlobalNavigationFile : ITableOfContentsScope
17
33
{
18
- private readonly AssembleContext _context ;
19
- private readonly AssembleSources _assembleSources ;
34
+ //private readonly AssembleContext _context;
35
+ private readonly IDiagnosticsCollector _collector ;
36
+ private readonly ConfigurationFileProvider _configurationFileProvider ;
37
+ private readonly AssemblyConfiguration _configuration ;
38
+
39
+ private readonly FrozenDictionary < Uri , TocConfigurationMapping > _tocConfigurationMappings ;
40
+ //private readonly AssembleSources _assembleSources;
20
41
21
42
public IReadOnlyCollection < TocReference > TableOfContents { get ; }
22
43
public IReadOnlyCollection < TocReference > Phantoms { get ; }
23
44
24
45
public IDirectoryInfo ScopeDirectory { get ; }
25
46
26
- public GlobalNavigationFile ( AssembleContext context , AssembleSources assembleSources )
47
+ public GlobalNavigationFile (
48
+ IDiagnosticsCollector collector ,
49
+ ConfigurationFileProvider configurationFileProvider ,
50
+ AssemblyConfiguration configuration ,
51
+ FrozenDictionary < Uri , TocConfigurationMapping > tocConfigurationMappings
52
+ )
27
53
{
28
- _context = context ;
29
- _assembleSources = assembleSources ;
30
- NavigationFile = context . ConfigurationFileProvider . CreateNavigationFile ( context . Configuration ) ;
54
+ //_context = context;
55
+ _collector = collector ;
56
+ _configurationFileProvider = configurationFileProvider ;
57
+ _configuration = configuration ;
58
+ _tocConfigurationMappings = tocConfigurationMappings ;
59
+ NavigationFile = configurationFileProvider . CreateNavigationFile ( configuration ) ;
31
60
TableOfContents = Deserialize ( "toc" ) ;
32
61
Phantoms = Deserialize ( "phantoms" ) ;
33
62
ScopeDirectory = NavigationFile . Directory ! ;
34
63
}
35
64
36
65
private IFileInfo NavigationFile { get ; }
37
66
38
- public static bool ValidatePathPrefixes ( AssembleContext context )
67
+ public static bool ValidatePathPrefixes (
68
+ IDiagnosticsCollector collector ,
69
+ ConfigurationFileProvider configurationFileProvider ,
70
+ AssemblyConfiguration configuration
71
+ )
39
72
{
40
- var fileProvider = context . ConfigurationFileProvider ;
41
- var sourcePathPrefixes = GetAllPathPrefixes ( context ) ;
73
+ var sourcePathPrefixes = GetAllPathPrefixes ( collector , configurationFileProvider , configuration ) ;
42
74
var pathPrefixSet = new HashSet < string > ( ) ;
43
75
var valid = true ;
44
76
foreach ( var pathPrefix in sourcePathPrefixes )
@@ -47,23 +79,36 @@ public static bool ValidatePathPrefixes(AssembleContext context)
47
79
if ( pathPrefixSet . Add ( prefix ) )
48
80
continue ;
49
81
var duplicateOf = sourcePathPrefixes . First ( p => p . Host == pathPrefix . Host && p . AbsolutePath == pathPrefix . AbsolutePath ) ;
50
- context . Collector . EmitError ( fileProvider . NavigationFile , $ "Duplicate path prefix: { pathPrefix } duplicate: { duplicateOf } ") ;
82
+ collector . EmitError ( configurationFileProvider . NavigationFile , $ "Duplicate path prefix: { pathPrefix } duplicate: { duplicateOf } ") ;
51
83
valid = false ;
52
84
}
53
85
return valid ;
54
86
}
55
87
56
88
57
- public static ImmutableHashSet < Uri > GetAllPathPrefixes ( AssembleContext context ) =>
58
- GetSourceUris ( "toc" , context ) ;
59
-
60
- public static ImmutableHashSet < Uri > GetPhantomPrefixes ( AssembleContext context ) =>
61
- GetSourceUris ( "phantoms" , context ) ;
62
-
63
- private static ImmutableHashSet < Uri > GetSourceUris ( string key , AssembleContext context )
89
+ public static ImmutableHashSet < Uri > GetAllPathPrefixes (
90
+ IDiagnosticsCollector collector ,
91
+ ConfigurationFileProvider configurationFileProvider ,
92
+ AssemblyConfiguration configuration
93
+ ) =>
94
+ GetSourceUris ( "toc" , collector , configurationFileProvider , configuration ) ;
95
+
96
+ public static ImmutableHashSet < Uri > GetPhantomPrefixes (
97
+ IDiagnosticsCollector collector ,
98
+ ConfigurationFileProvider configurationFileProvider ,
99
+ AssemblyConfiguration configuration
100
+ ) =>
101
+ GetSourceUris ( "phantoms" , collector , configurationFileProvider , configuration ) ;
102
+
103
+ private static ImmutableHashSet < Uri > GetSourceUris (
104
+ string key ,
105
+ IDiagnosticsCollector collector ,
106
+ ConfigurationFileProvider configurationFileProvider ,
107
+ AssemblyConfiguration configuration
108
+ )
64
109
{
65
- var navigationFile = context . ConfigurationFileProvider . CreateNavigationFile ( context . Configuration ) ;
66
- var reader = new YamlStreamReader ( navigationFile , context . Collector ) ;
110
+ var navigationFile = configurationFileProvider . CreateNavigationFile ( configuration ) ;
111
+ var reader = new YamlStreamReader ( navigationFile , collector ) ;
67
112
var set = new HashSet < Uri > ( ) ;
68
113
foreach ( var entry in reader . Read ( ) )
69
114
{
@@ -145,15 +190,15 @@ static void ReadPathPrefixes(YamlStreamReader reader, KeyValuePair<YamlNode, Yam
145
190
}
146
191
}
147
192
public void EmitWarning ( string message ) =>
148
- _context . Collector . EmitWarning ( NavigationFile , message ) ;
193
+ _collector . EmitWarning ( NavigationFile , message ) ;
149
194
150
195
public void EmitError ( string message ) =>
151
- _context . Collector . EmitError ( NavigationFile , message ) ;
196
+ _collector . EmitError ( NavigationFile , message ) ;
152
197
153
198
private IReadOnlyCollection < TocReference > Deserialize ( string key )
154
199
{
155
- var navigationFile = _context . ConfigurationFileProvider . CreateNavigationFile ( _context . Configuration ) ;
156
- var reader = new YamlStreamReader ( navigationFile , _context . Collector ) ;
200
+ var navigationFile = _configurationFileProvider . CreateNavigationFile ( _configuration ) ;
201
+ var reader = new YamlStreamReader ( navigationFile , _collector ) ;
157
202
try
158
203
{
159
204
foreach ( var entry in reader . Read ( ) )
@@ -232,7 +277,7 @@ private IReadOnlyCollection<TocReference> ReadChildren(string key, YamlStreamRea
232
277
return null ;
233
278
234
279
235
- if ( ! _assembleSources . TocConfigurationMapping . TryGetValue ( sourceUri , out var mapping ) )
280
+ if ( ! _tocConfigurationMappings . TryGetValue ( sourceUri , out var mapping ) )
236
281
{
237
282
reader . EmitError ( $ "Toc entry '{ sourceUri } ' is could not be located", tocEntry ) ;
238
283
return null ;
@@ -270,7 +315,7 @@ private IReadOnlyCollection<TocReference> ReadChildren(string key, YamlStreamRea
270
315
if ( source is null )
271
316
return pathPrefix ;
272
317
273
- source = source . EndsWith ( "://" ) ? source : source . TrimEnd ( '/' ) + "/" ;
318
+ source = source . EndsWith ( "://" , StringComparison . OrdinalIgnoreCase ) ? source : source . TrimEnd ( '/' ) + "/" ;
274
319
if ( ! Uri . TryCreate ( source , UriKind . Absolute , out sourceUri ) )
275
320
{
276
321
reader . EmitError ( $ "Source toc entry is not a valid uri: { source } ", tocEntry ) ;
0 commit comments