77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /** | ||
|  |  * 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\nWhere <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'))); | ||
|  | } | ||
|  | 
 | ||
|  | documentation.setLinkRenderer(docsLinkRendererForLanguage(language)); | ||
|  | 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.\nUsage: node ${path.basename(process.argv[1])} <language> <version>\n\nWhere <version> is a version tag without v prefix, e.g. 1.45`); | ||
|  | } | ||
|  | 
 | ||
|  | const output = renderPlaywrightDevLinks(md.render(nodes), languageToRelativeDocsPath(language), ''); | ||
|  | process.stdout.write(output); |