@@ -36,35 +36,63 @@ export const createSectionBuilder = () => {
3636 /**
3737 * Creates metadata from a hierarchized entry.
3838 * @param {import('../types.d.ts').HierarchizedEntry } entry - The entry to create metadata from.
39- * @returns {import('../types.d.ts').Meta } The created metadata.
39+ * @returns {import('../types.d.ts').Meta | undefined } The created metadata, or undefined if all fields are empty .
4040 */
4141 const createMeta = ( {
4242 added_in = [ ] ,
4343 n_api_version = [ ] ,
4444 deprecated_in = [ ] ,
4545 removed_in = [ ] ,
4646 changes,
47- } ) => ( {
48- changes,
49- added : enforceArray ( added_in ) ,
50- napiVersion : enforceArray ( n_api_version ) ,
51- deprecated : enforceArray ( deprecated_in ) ,
52- removed : enforceArray ( removed_in ) ,
53- } ) ;
47+ } ) => {
48+ const meta = { changes } ;
49+
50+ if ( added_in ?. length ) {
51+ meta . added = enforceArray ( added_in ) ;
52+ }
53+
54+ if ( n_api_version ?. length ) {
55+ meta . napiVersion = enforceArray ( n_api_version ) ;
56+ }
57+
58+ if ( deprecated_in ?. length ) {
59+ meta . deprecated = enforceArray ( deprecated_in ) ;
60+ }
61+
62+ if ( removed_in ?. length ) {
63+ meta . removed = enforceArray ( removed_in ) ;
64+ }
65+
66+ // Check if there are any non-empty fields in the meta object
67+ const atLeastOneNonEmptyField =
68+ changes ?. length || Object . keys ( meta ) . length > 1 ;
69+
70+ // Return undefined if the meta object is completely empty
71+ return atLeastOneNonEmptyField ? meta : undefined ;
72+ } ;
5473
5574 /**
5675 * Creates a section from an entry and its heading.
5776 * @param {import('../types.d.ts').HierarchizedEntry } entry - The AST entry.
5877 * @param {HeadingMetadataParent } head - The head node of the entry.
5978 * @returns {import('../types.d.ts').Section } The created section.
6079 */
61- const createSection = ( entry , head ) => ( {
62- textRaw : transformNodesToString ( head . children ) ,
63- name : head . data . name ,
64- type : head . data . type ,
65- meta : createMeta ( entry ) ,
66- introduced_in : entry . introduced_in ,
67- } ) ;
80+ const createSection = ( entry , head ) => {
81+ const section = {
82+ textRaw : transformNodesToString ( head . children ) ,
83+ name : head . data . name ,
84+ type : head . data . type ,
85+ introduced_in : entry . introduced_in ,
86+ } ;
87+
88+ const meta = createMeta ( entry ) ;
89+
90+ if ( meta !== undefined ) {
91+ section . meta = meta ;
92+ }
93+
94+ return section ;
95+ } ;
6896
6997 /**
7098 * Parses stability metadata and adds it to the section.
@@ -76,7 +104,7 @@ export const createSectionBuilder = () => {
76104 const stabilityInfo = stability . children . map ( node => node . data ) ?. [ 0 ] ;
77105
78106 if ( stabilityInfo ) {
79- section . stability = stabilityInfo . index ;
107+ section . stability = Number ( stabilityInfo . index ) ;
80108 section . stabilityText = stabilityInfo . description ;
81109 nodes . shift ( ) ; // Remove stability node from processing
82110 }
0 commit comments