@@ -20,6 +20,48 @@ globalThis.Jig.data = (() => {
2020 /** @type {Map<string, object>|null } */
2121 let usecaseTypesMap = null ;
2222
23+ function buildDomainPackages ( domainPackageRoots , types ) {
24+ const packageTypesMap = new Map ( ) ;
25+
26+ for ( const type of types ) {
27+ const lastDot = type . fqn . lastIndexOf ( '.' ) ;
28+ if ( lastDot < 0 ) continue ;
29+ const pkgFqn = type . fqn . substring ( 0 , lastDot ) ;
30+
31+ globalThis . Jig . util . pushToMap ( packageTypesMap , pkgFqn , { fqn : type . fqn } ) ;
32+
33+ // 子パッケージのみを持つ中間パッケージのナビゲーションを成立させるため、
34+ // pkgFqn から domainPackageRoots に到達するまで空の親パッケージも Map に登録する
35+ let current = pkgFqn ;
36+ while ( ! domainPackageRoots . includes ( current ) ) {
37+ const parentDot = current . lastIndexOf ( '.' ) ;
38+ if ( parentDot < 0 ) break ;
39+ const parent = current . substring ( 0 , parentDot ) ;
40+ const isUnderRoot = domainPackageRoots . some (
41+ root => parent === root || parent . startsWith ( root + '.' ) ) ;
42+ if ( ! isUnderRoot ) break ;
43+ if ( ! packageTypesMap . has ( parent ) ) packageTypesMap . set ( parent , [ ] ) ;
44+ current = parent ;
45+ }
46+ }
47+
48+ return Array . from ( packageTypesMap . entries ( ) )
49+ . map ( ( [ fqn , pkgTypes ] ) => ( {
50+ fqn,
51+ types : pkgTypes . sort ( ( a , b ) => a . fqn . localeCompare ( b . fqn ) )
52+ } ) )
53+ . sort ( ( a , b ) => a . fqn . localeCompare ( b . fqn ) ) ;
54+ }
55+
56+ function buildChildPackagesMap ( packages ) {
57+ const map = new Map ( packages . map ( p => [ p . fqn , [ ] ] ) ) ;
58+ packages . forEach ( p => {
59+ const parentFqn = p . fqn . substring ( 0 , p . fqn . lastIndexOf ( '.' ) ) ;
60+ if ( map . has ( parentFqn ) ) map . get ( parentFqn ) . push ( p ) ;
61+ } ) ;
62+ return map ;
63+ }
64+
2365 const domain = {
2466 get ( ) {
2567 return globalThis . domainData ;
@@ -46,17 +88,18 @@ globalThis.Jig.data = (() => {
4688 return domainFqnSet ;
4789 } ,
4890 getPackages ( ) {
91+ if ( ! domainPackages ) {
92+ const data = globalThis . domainData ;
93+ domainPackages = data ? buildDomainPackages ( data . domainPackageRoots , data . types ) : [ ] ;
94+ }
4995 return domainPackages ;
5096 } ,
51- setPackages ( packages ) {
52- domainPackages = packages ;
53- } ,
5497 getChildPackagesMap ( ) {
98+ if ( ! domainChildPackagesMap ) {
99+ domainChildPackagesMap = buildChildPackagesMap ( domain . getPackages ( ) ) ;
100+ }
55101 return domainChildPackagesMap ;
56102 } ,
57- setChildPackagesMap ( map ) {
58- domainChildPackagesMap = map ;
59- } ,
60103 } ;
61104
62105 const glossary = {
@@ -124,6 +167,12 @@ globalThis.Jig.data = (() => {
124167 } ,
125168 } ;
126169
170+ const library = {
171+ get ( ) {
172+ return globalThis . libraryDependencyData ;
173+ } ,
174+ } ;
175+
127176 const navigation = {
128177 get ( ) {
129178 return globalThis . navigationData ;
@@ -213,6 +262,7 @@ globalThis.Jig.data = (() => {
213262 package : pkg ,
214263 insight,
215264 list,
265+ library,
216266 navigation,
217267 summary,
218268 typeRelations,
0 commit comments