2023-10-16 12:23:22 +03:00
/ * *
* Copyright ( c ) Microsoft Corporation .
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* /
// @ts-check
import path from 'path' ;
import fs from 'fs' ;
import { parseApi } from './doclint/api_parser.js' ;
import md , { visitAll } from './markdown.js' ;
import { renderPlaywrightDevLinks , docsLinkRendererForLanguage , languageToRelativeDocsPath } from './doclint/linkUtils.js' ;
const _ _dirname = new URL ( '.' , import . meta . url ) . pathname ;
const PROJECT _DIR = path . join ( _ _dirname , '..' ) ;
const documentationRoot = path . join ( PROJECT _DIR , 'docs' , 'src' ) ;
const allowedLanguages = [ 'js' , 'python' , 'csharp' , 'java' ] ;
const [ , , language , version ] = process . argv ;
if ( ! allowedLanguages . includes ( language ) || ! version . match ( /^\d+\.\d+$/ ) )
throw new Error ( ` Usage: node ${ path . basename ( process . argv [ 1 ] ) } <language> <version> \n \n Where <version> is a version tag without v prefix, e.g. 1.45 ` ) ;
let documentation = parseApi ( path . join ( documentationRoot , 'api' ) ) ;
if ( language === 'js' ) {
documentation = documentation
. mergeWith ( parseApi ( path . join ( documentationRoot , 'test-api' ) , path . join ( documentationRoot , 'api' , 'params.md' ) ) )
. mergeWith ( parseApi ( path . join ( documentationRoot , 'test-reporter-api' ) ) ) ;
}
2024-04-10 20:05:54 +03:00
documentation . setLinkRenderer ( docsLinkRendererForLanguage ( language , 'ReleaseNotesMd' ) ) ;
2023-10-16 12:23:22 +03:00
const content = fs . readFileSync ( path . join ( documentationRoot , ` release-notes- ${ language } .md ` ) ) . toString ( ) ;
let nodes = md . parse ( content ) ;
documentation . renderLinksInNodes ( nodes ) ;
{
// Reduce by one heading level
visitAll ( nodes , node => {
if ( node . type === 'h4' )
node . type = 'h3' ;
else if ( node . type === 'h3' )
node . type = 'h2' ;
else if ( node . type === 'h2' )
node . type = 'h1' ;
else if ( node . type === 'h1' )
node . type = 'h0' ;
} ) ;
}
// Find the version heading and use it as a starting point in the output.
{
let foundVersion = false ;
visitAll ( nodes , node => {
if ( node . type === 'h1' && node . text === ` Version ${ version } ` ) {
nodes = node . children ;
foundVersion = true ;
}
} ) ;
if ( ! foundVersion )
throw new Error ( ` Could not find version ${ version } in release notes. \n Usage: node ${ path . basename ( process . argv [ 1 ] ) } <language> <version> \n \n Where <version> is a version tag without v prefix, e.g. 1.45 ` ) ;
}
const output = renderPlaywrightDevLinks ( md . render ( nodes ) , languageToRelativeDocsPath ( language ) , '' ) ;
process . stdout . write ( output ) ;