fix(docs-infra): include correct dependencies in StackBlitz examples (#36071)
Previously, all StackBlitz examples included the default dependencies for `cli`-type projects. However, different example types may have different `package.json` files with different dependencies. For example, the [boilerplate `package.json`][1] for `elements` examples includes an extra dependency on `@angular/elements`. This commit changes `StackblitzBuilder` to use the dependencies that correspond to each example type. (NOTE: Manually verified the changes.) Jira issue: [FW-2002][2] [1]: https://github.com/angular/angular/blob/05d058622/aio/tools/examples/shared/boilerplate/elements/package.json [2]: https://angular-team.atlassian.net/browse/FW-2002 PR Close #36071
This commit is contained in:
		
							parent
							
								
									9cc8bd5f7d
								
							
						
					
					
						commit
						c21c46a8e8
					
				| @ -13,16 +13,8 @@ class StackblitzBuilder { | ||||
|     this.basePath = basePath; | ||||
|     this.destPath = destPath; | ||||
| 
 | ||||
|     // Extract npm package dependencies
 | ||||
|     const packageJson = require(path.join(__dirname, '../examples/shared/boilerplate/cli/package.json')); | ||||
|     this.examplePackageDependencies = packageJson.dependencies; | ||||
| 
 | ||||
|     // Add unit test packages from devDependency for unit test examples
 | ||||
|     const devDependencies = packageJson.devDependencies; | ||||
|     this.examplePackageDependencies['jasmine-core'] = devDependencies['jasmine-core']; | ||||
|     this.examplePackageDependencies['jasmine-marbles'] = devDependencies['jasmine-marbles']; | ||||
| 
 | ||||
|     this.copyrights = this._buildCopyrightStrings(); | ||||
|     this._boilerplatePackageJsons = {}; | ||||
|   } | ||||
| 
 | ||||
|   build() { | ||||
| @ -42,8 +34,34 @@ class StackblitzBuilder { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   _addDependencies(postData) { | ||||
|     postData['dependencies'] = JSON.stringify(this.examplePackageDependencies); | ||||
|   _addDependencies(config, postData) { | ||||
|     // Extract npm package dependencies
 | ||||
|     const exampleType = this._getExampleType(config.basePath); | ||||
|     const packageJson = this._getBoilerplatePackageJson(exampleType) || this._getBoilerplatePackageJson('cli'); | ||||
|     const exampleDependencies = packageJson.dependencies; | ||||
| 
 | ||||
|     // Add unit test packages from devDependencies for unit test examples
 | ||||
|     const devDependencies = packageJson.devDependencies; | ||||
|     ['jasmine-core', 'jasmine-marbles'].forEach(dep => exampleDependencies[dep] = devDependencies[dep]); | ||||
| 
 | ||||
|     postData.dependencies = JSON.stringify(exampleDependencies); | ||||
|   } | ||||
| 
 | ||||
|   _getExampleType(exampleDir) { | ||||
|     const configPath = `${exampleDir}/example-config.json`; | ||||
|     const configSrc = fs.existsSync(configPath) && fs.readFileSync(configPath, 'utf-8').trim(); | ||||
|     const config = configSrc ? JSON.parse(configSrc) : {}; | ||||
| 
 | ||||
|     return config.projectType || 'cli'; | ||||
|   } | ||||
| 
 | ||||
|   _getBoilerplatePackageJson(exampleType) { | ||||
|     if (!this._boilerplatePackageJsons.hasOwnProperty(exampleType)) { | ||||
|       const pkgJsonPath = `${__dirname}/../examples/shared/boilerplate/${exampleType}/package.json`; | ||||
|       this._boilerplatePackageJsons[exampleType] = fs.existsSync(pkgJsonPath) ? require(pkgJsonPath) : null; | ||||
|     } | ||||
| 
 | ||||
|     return this._boilerplatePackageJsons[exampleType]; | ||||
|   } | ||||
| 
 | ||||
|   _buildCopyrightStrings() { | ||||
| @ -76,7 +94,7 @@ class StackblitzBuilder { | ||||
|     try { | ||||
|       const config = this._initConfigAndCollectFileNames(configFileName); | ||||
|       const postData = this._createPostData(config, configFileName); | ||||
|       this._addDependencies(postData); | ||||
|       this._addDependencies(config, postData); | ||||
|       const html = this._createStackblitzHtml(config, postData); | ||||
|       fs.writeFileSync(outputFileName, html, 'utf-8'); | ||||
|       if (altFileName) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user