forked from MapComplete/MapComplete
		
	Wrote a script to autofix issues with themes, applied this on the hailhydrant theme
This commit is contained in:
		
							parent
							
								
									dec565fc12
								
							
						
					
					
						commit
						1c902ca9c5
					
				
					 14 changed files with 910 additions and 53 deletions
				
			
		
							
								
								
									
										63
									
								
								scripts/fixTheme.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								scripts/fixTheme.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| 
 | ||||
| /* | ||||
|  * This script attempt to automatically fix some basic issues when a theme from the custom generator is loaded | ||||
|  */ | ||||
| import {Utils} from "../Utils" | ||||
| Utils.runningFromConsole = true; | ||||
| import {readFileSync, writeFileSync} from "fs"; | ||||
| import {LayoutConfigJson} from "../Customizations/JSON/LayoutConfigJson"; | ||||
| import {Layer} from "leaflet"; | ||||
| import LayerConfig from "../Customizations/JSON/LayerConfig"; | ||||
| import SmallLicense from "../Models/smallLicense"; | ||||
| 
 | ||||
| if(process.argv.length == 2){ | ||||
|     console.log("USAGE: ts-node scripts/fixTheme <path to theme>") | ||||
|     throw "No path specified" | ||||
| } | ||||
| 
 | ||||
| const path = process.argv[2] | ||||
| console.log("Fixing up ", path) | ||||
| 
 | ||||
| const themeConfigJson : LayoutConfigJson = JSON.parse(readFileSync(path, "UTF8")) | ||||
| 
 | ||||
| const linuxHints = [] | ||||
| const licenses : SmallLicense[] = [] | ||||
| 
 | ||||
| const replacements: {source: string, destination: string}[] = [] | ||||
| 
 | ||||
| for (const layerConfigJson of themeConfigJson.layers) { | ||||
|     if(typeof (layerConfigJson) === "string"){ | ||||
|         continue; | ||||
|     } | ||||
|     if(layerConfigJson["overpassTags"] !== undefined){ | ||||
|         const tags = layerConfigJson["overpassTags"]; | ||||
|         layerConfigJson["overpassTags"] = undefined; | ||||
|         layerConfigJson["source"] = { osmTags : tags} | ||||
|     } | ||||
|     // @ts-ignore
 | ||||
|     const layerConfig = new LayerConfig(layerConfigJson, true) | ||||
|     const images : string[] = Array.from(layerConfig.ExtractImages()) | ||||
|     const remoteImages = images.filter(img => img.startsWith("http")) | ||||
|     for (const remoteImage of remoteImages) { | ||||
|         linuxHints.push("wget " + remoteImage) | ||||
|         const imgPath = remoteImage.substring(remoteImage.lastIndexOf("/") + 1) | ||||
|         licenses.push({ | ||||
|             path: imgPath, | ||||
|             license: "", | ||||
|             authors: [], | ||||
|             sources: [remoteImage] | ||||
|         }) | ||||
|         replacements.push({source: remoteImage, destination: imgPath}) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| let fixedThemeJson = JSON.stringify(themeConfigJson, null , "  ") | ||||
| for (const replacement of replacements) { | ||||
|     fixedThemeJson = fixedThemeJson.replace(new RegExp(replacement.source, "g"), replacement.destination) | ||||
| } | ||||
| 
 | ||||
| const dir = path.substring(0, path.lastIndexOf("/")) | ||||
| writeFileSync(dir + "/generated.license_info.json", JSON.stringify(licenses, null, "  ")) | ||||
| writeFileSync(dir  + "/fix_script_"+path.replace(/\//g,"_")+".sh", linuxHints.join("\n")) | ||||
| writeFileSync(path+".autofixed.json", fixedThemeJson) | ||||
|       | ||||
|  | @ -51,8 +51,6 @@ for (const i in licenses) { | |||
| } | ||||
| const knownPaths = new Set<string>(licensePaths) | ||||
| 
 | ||||
| const linuxHints = [] | ||||
| 
 | ||||
| function validateLayer(layerJson: LayerConfigJson, context?: string): string[] { | ||||
|     let errorCount = []; | ||||
|     if (layerJson["overpassTags"] !== undefined) { | ||||
|  | @ -65,9 +63,7 @@ function validateLayer(layerJson: LayerConfigJson, context?: string): string[] { | |||
|         for (const remoteImage of remoteImages) { | ||||
|             errorCount.push("Found a remote image: " + remoteImage + " in layer " + layer.id + ", please download it.") | ||||
|             const path = remoteImage.substring(remoteImage.lastIndexOf("/") + 1) | ||||
|             linuxHints.push("wget " + remoteImage) | ||||
|             linuxHints.push(`echo '{"path":"${path}", "license": "<insert license here>", "authors": [ "<insert author(s) here"], "sources": [${remoteImage}] > ${path}.license_info.json`) | ||||
|         } | ||||
|           } | ||||
|         for (const image of images) { | ||||
|             if (!knownPaths.has(image)) { | ||||
|                 const ctx = context === undefined ? "" : ` in a layer defined in the theme ${context}` | ||||
|  | @ -129,7 +125,6 @@ if (layerErrorCount.length + themeErrorCount.length == 0) { | |||
|     console.log(errors) | ||||
|     const msg = (`Found ${layerErrorCount.length} errors in the layers; ${themeErrorCount.length} errors in the themes`) | ||||
|     console.log(msg) | ||||
|     console.log(linuxHints.join("\n")) | ||||
|     if (process.argv.indexOf("--report") >= 0) { | ||||
|         console.log("Writing report!") | ||||
|         writeFileSync("layer_report.txt", errors) | ||||
|  |  | |||
|  | @ -193,17 +193,18 @@ writeFileSync("./assets/generated/license_info.json", JSON.stringify(licenseInfo | |||
| 
 | ||||
| const artwork = contents.filter(pth => pth.match(/(.svg|.png|.jpg)$/i) != null) | ||||
| const missingLicenses = missingLicenseInfos(licenseInfos, artwork) | ||||
| 
 | ||||
| const invalidLicenses = licenseInfos.filter(l => (l.license ?? "") === "").map(l => `License for artwork ${l.path} is empty string or undefined`) | ||||
| 
 | ||||
| if (process.argv.indexOf("--prompt") >= 0 || process.argv.indexOf("--query") >= 0) { | ||||
|     queryMissingLicenses(missingLicenses) | ||||
| } | ||||
| if (missingLicenses.length > 0) { | ||||
|     const msg = `There are ${missingLicenses.length} licenses missing.` | ||||
|     const msg = `There are ${missingLicenses.length} licenses missing and ${invalidLicenses.length} invalid licenses.` | ||||
|     console.log( missingLicenses.concat(invalidLicenses).join("\n")) | ||||
|     console.error(msg) | ||||
|     if (process.argv.indexOf("--report") >= 0) { | ||||
|         console.log("Writing report!") | ||||
|         writeFileSync("missing_licenses.txt", missingLicenses.join("\n")) | ||||
|         writeFileSync("missing_licenses.txt", missingLicenses.concat(invalidLicenses).join("\n")) | ||||
|     } | ||||
|     if (process.argv.indexOf("--no-fail") < 0) { | ||||
|         throw msg | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue