mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | const fs = require('fs'); | ||
|  | const path = require('path'); | ||
|  | const packageDir = path.join(__dirname, '..', 'packages'); | ||
|  | const packages = fs.readdirSync(packageDir) | ||
|  |   .filter(packageDir => !packageDir.startsWith('.')) | ||
|  |   .map(name => path.join(packageDir, name)); | ||
|  | 
 | ||
|  | const packagePathToJSON = new Map(); | ||
|  | const packageNameToPath = new Map(); | ||
|  | const packagePathToDependencies = new Map(); | ||
|  | for (const packagePath of packages) { | ||
|  |   const packageJSON = require(path.join(packagePath, 'package.json')); | ||
|  |   packageNameToPath.set(packageJSON.name, packagePath); | ||
|  |   packagePathToJSON.set(packagePath, packageJSON); | ||
|  | } | ||
|  | 
 | ||
|  | for (const packagePath of packages) | ||
|  |   packagePathToDependencies.set(packagePath, new Set(internalDependencies(packagePath))); | ||
|  | 
 | ||
|  | // Sort packages by their interdependence.
 | ||
|  | packages.sort((a, b) => { | ||
|  |   if (packagePathToDependencies.get(a).has(b)) | ||
|  |     return 1; | ||
|  |   if (packagePathToDependencies.get(b).has(a)) | ||
|  |     return -1; | ||
|  |   return 0; | ||
|  | }); | ||
|  | 
 | ||
|  | function* internalDependencies(packagePath) { | ||
|  |   yield packagePath; | ||
|  |   for (const dependency of Object.keys(packagePathToJSON.get(packagePath).dependencies || {})) { | ||
|  |     const dependencyPath = packageNameToPath.get(dependency); | ||
|  |     if (dependencyPath) | ||
|  |       yield* internalDependencies(dependencyPath); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = { packages, packageNameToPath }; |