forked from MapComplete/MapComplete
		
	Feature: faster theme search with indexing by lunr
This commit is contained in:
		
							parent
							
								
									7226c82009
								
							
						
					
					
						commit
						1723f268c0
					
				
					 6 changed files with 194 additions and 184 deletions
				
			
		|  | @ -9,16 +9,12 @@ import { | |||
|     DoesImageExist, | ||||
|     PrevalidateTheme, | ||||
|     ValidateLayer, | ||||
|     ValidateThemeEnsemble, | ||||
|     ValidateThemeEnsemble | ||||
| } from "../src/Models/ThemeConfig/Conversion/Validation" | ||||
| import { Translation } from "../src/UI/i18n/Translation" | ||||
| import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer" | ||||
| import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme" | ||||
| import { | ||||
|     Conversion, | ||||
|     DesugaringContext, | ||||
|     DesugaringStep, | ||||
| } from "../src/Models/ThemeConfig/Conversion/Conversion" | ||||
| import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion" | ||||
| import { Utils } from "../src/Utils" | ||||
| import Script from "./Script" | ||||
| import { AllSharedLayers } from "../src/Customizations/AllSharedLayers" | ||||
|  | @ -267,6 +263,7 @@ class LayerOverviewUtils extends Script { | |||
|                 addWord(lang, tr[lang]) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         addWord("*", l.id) | ||||
|         addWords(l.title) | ||||
|         addWords(l.description) | ||||
|  | @ -286,9 +283,9 @@ class LayerOverviewUtils extends Script { | |||
|                 | LayerConfigJson | ||||
|                 | string | ||||
|                 | { | ||||
|                       builtin | ||||
|                   } | ||||
|             )[] | ||||
|                 builtin | ||||
|             } | ||||
|                 )[] | ||||
|         }[], | ||||
|         sharedLayers: Map<string, LayerConfigJson> | ||||
|     ) { | ||||
|  | @ -317,7 +314,10 @@ class LayerOverviewUtils extends Script { | |||
|                 hideFromOverview: theme.hideFromOverview, | ||||
|                 mustHaveLanguage: theme.mustHaveLanguage, | ||||
|                 keywords, | ||||
|                 layers: theme.layers.filter((l) => sharedLayers.has(l["id"])).map((l) => l["id"]), | ||||
|                 layers: (<LayerConfigJson[]>theme.layers) | ||||
|                     .filter((l) => sharedLayers.has(l.id)) | ||||
|                     .filter(l => l.minzoom < 17) | ||||
|                     .map((l) => l.id) | ||||
|             } | ||||
|             perId.set(data.id, data) | ||||
|         } | ||||
|  | @ -392,10 +392,10 @@ class LayerOverviewUtils extends Script { | |||
|                 tagRenderings: bootstrapTagRenderings, | ||||
|                 tagRenderingOrder: bootstrapTagRenderingsOrder, | ||||
|                 sharedLayers: null, | ||||
|                 publicLayers: null, | ||||
|                 publicLayers: null | ||||
|             }, | ||||
|             { | ||||
|                 addTagRenderingsToContext: true, | ||||
|                 addTagRenderingsToContext: true | ||||
|             } | ||||
|         ) | ||||
| 
 | ||||
|  | @ -431,7 +431,7 @@ class LayerOverviewUtils extends Script { | |||
|             "src/assets/SocialImageBanner.svg", | ||||
|             "src/assets/SocialImageRepo.svg", | ||||
|             "src/assets/svg/osm-logo.svg", | ||||
|             "src/assets/templates/*", | ||||
|             "src/assets/templates/*" | ||||
|         ] | ||||
|         for (const path of allSvgs) { | ||||
|             if ( | ||||
|  | @ -456,8 +456,8 @@ class LayerOverviewUtils extends Script { | |||
|             if (contents.indexOf("<text") > 0) { | ||||
|                 console.warn( | ||||
|                     "The SVG at " + | ||||
|                         path + | ||||
|                         " contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path" | ||||
|                     path + | ||||
|                     " contains a `text`-tag. This is highly discouraged. Every machine viewing your theme has their own font libary, and the font you choose might not be present, resulting in a different font being rendered. Solution: open your .svg in inkscape (or another program), select the text and convert it to a path" | ||||
|                 ) | ||||
|                 errCount++ | ||||
|             } | ||||
|  | @ -529,7 +529,7 @@ class LayerOverviewUtils extends Script { | |||
|                 JSON.stringify({ | ||||
|                     layers: Array.from(sharedLayers.values()).filter( | ||||
|                         (l) => !(l["#no-index"] === "yes") | ||||
|                     ), | ||||
|                     ) | ||||
|                 }) | ||||
|             ) | ||||
|         } | ||||
|  | @ -546,11 +546,11 @@ class LayerOverviewUtils extends Script { | |||
|             // mapcomplete-changes shows an icon for each corresponding mapcomplete-theme
 | ||||
|             const iconsPerTheme = Array.from(sharedThemes.values()).map((th) => ({ | ||||
|                 if: "theme=" + th.id, | ||||
|                 then: th.icon, | ||||
|                 then: th.icon | ||||
|             })) | ||||
|             const proto: ThemeConfigJson = JSON.parse( | ||||
|                 readFileSync("./assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json", { | ||||
|                     encoding: "utf8", | ||||
|                     encoding: "utf8" | ||||
|                 }) | ||||
|             ) | ||||
|             const protolayer = <LayerConfigJson>( | ||||
|  | @ -566,7 +566,7 @@ class LayerOverviewUtils extends Script { | |||
|         new DetectDuplicateFilters().convertStrict( | ||||
|             { | ||||
|                 layers: ScriptUtils.getLayerFiles().map((f) => f.parsed), | ||||
|                 themes: ScriptUtils.getThemeFiles().map((f) => f.parsed), | ||||
|                 themes: ScriptUtils.getThemeFiles().map((f) => f.parsed) | ||||
|             }, | ||||
|             ConversionContext.construct([], []) | ||||
|         ) | ||||
|  | @ -614,7 +614,7 @@ class LayerOverviewUtils extends Script { | |||
|         const state: DesugaringContext = { | ||||
|             tagRenderings: LayerOverviewUtils.asDict(sharedTagRenderings), | ||||
|             tagRenderingOrder: sharedTagRenderings.map((tr) => tr.id), | ||||
|             sharedLayers: AllSharedLayers.getSharedLayersConfigs(), | ||||
|             sharedLayers: AllSharedLayers.getSharedLayersConfigs() | ||||
|         } | ||||
|         const sharedLayers = new Map<string, LayerConfigJson>() | ||||
|         const prepLayer = new PrepareLayer(state) | ||||
|  | @ -659,12 +659,12 @@ class LayerOverviewUtils extends Script { | |||
| 
 | ||||
|         console.log( | ||||
|             "Recompiled layers " + | ||||
|                 recompiledLayers.join(", ") + | ||||
|                 " and skipped " + | ||||
|                 skippedLayers.length + | ||||
|                 " layers. Detected " + | ||||
|                 warningCount + | ||||
|                 " warnings" | ||||
|             recompiledLayers.join(", ") + | ||||
|             " and skipped " + | ||||
|             skippedLayers.length + | ||||
|             " layers. Detected " + | ||||
|             warningCount + | ||||
|             " warnings" | ||||
|         ) | ||||
|         // We always need the calculated tags of 'usersettings', so we export them separately
 | ||||
|         this.extractJavascriptCodeForLayer( | ||||
|  | @ -686,11 +686,11 @@ class LayerOverviewUtils extends Script { | |||
|     private extractJavascriptCode(themeFile: ThemeConfigJson) { | ||||
|         const allCode = [ | ||||
|             "import {Feature} from 'geojson'", | ||||
|             'import { ExtraFuncType } from "../../../Logic/ExtraFunctions";', | ||||
|             'import { Utils } from "../../../Utils"', | ||||
|             "import { ExtraFuncType } from \"../../../Logic/ExtraFunctions\";", | ||||
|             "import { Utils } from \"../../../Utils\"", | ||||
|             "export class ThemeMetaTagging {", | ||||
|             "   public static readonly themeName = " + JSON.stringify(themeFile.id), | ||||
|             "", | ||||
|             "" | ||||
|         ] | ||||
|         for (const layer of themeFile.layers) { | ||||
|             const l = <LayerConfigJson>layer | ||||
|  | @ -699,8 +699,8 @@ class LayerOverviewUtils extends Script { | |||
| 
 | ||||
|             allCode.push( | ||||
|                 "   public metaTaggging_for_" + | ||||
|                     id + | ||||
|                     "(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {" | ||||
|                 id + | ||||
|                 "(feat: Feature, helperFunctions: Record<ExtraFuncType, (feature: Feature) => Function>) {" | ||||
|             ) | ||||
|             allCode.push("      const {" + ExtraFunctions.types.join(", ") + "} = helperFunctions") | ||||
|             for (const line of code) { | ||||
|  | @ -711,10 +711,10 @@ class LayerOverviewUtils extends Script { | |||
|                 if (!isStrict) { | ||||
|                     allCode.push( | ||||
|                         "      Utils.AddLazyProperty(feat.properties, '" + | ||||
|                             attributeName + | ||||
|                             "', () => " + | ||||
|                             expression + | ||||
|                             " ) " | ||||
|                         attributeName + | ||||
|                         "', () => " + | ||||
|                         expression + | ||||
|                         " ) " | ||||
|                     ) | ||||
|                 } else { | ||||
|                     attributeName = attributeName.substring(0, attributeName.length - 1).trim() | ||||
|  | @ -754,7 +754,7 @@ class LayerOverviewUtils extends Script { | |||
|             `/** This code is autogenerated - do not edit. Edit ./assets/layers/${l?.id}/${l?.id}.json instead */`, | ||||
|             "export class ThemeMetaTagging {", | ||||
|             "   public static readonly themeName = " + JSON.stringify(l.id), | ||||
|             "", | ||||
|             "" | ||||
|         ] | ||||
|         const code = l.calculatedTags ?? [] | ||||
| 
 | ||||
|  | @ -769,10 +769,10 @@ class LayerOverviewUtils extends Script { | |||
|             if (!isStrict) { | ||||
|                 allCode.push( | ||||
|                     "      Utils.AddLazyProperty(feat.properties, '" + | ||||
|                         attributeName + | ||||
|                         "', () => " + | ||||
|                         expression + | ||||
|                         " ) " | ||||
|                     attributeName + | ||||
|                     "', () => " + | ||||
|                     expression + | ||||
|                     " ) " | ||||
|                 ) | ||||
|             } else { | ||||
|                 attributeName = attributeName.substring(0, attributeName.length - 2).trim() | ||||
|  | @ -813,7 +813,7 @@ class LayerOverviewUtils extends Script { | |||
|             sharedLayers, | ||||
|             tagRenderings: LayerOverviewUtils.asDict(trs), | ||||
|             tagRenderingOrder: trs.map((tr) => tr.id), | ||||
|             publicLayers, | ||||
|             publicLayers | ||||
|         } | ||||
|         const knownTagRenderings = new Set<string>() | ||||
|         convertState.tagRenderings.forEach((_, key) => knownTagRenderings.add(key)) | ||||
|  | @ -870,7 +870,7 @@ class LayerOverviewUtils extends Script { | |||
|             ) | ||||
|             try { | ||||
|                 themeFile = new PrepareTheme(convertState, { | ||||
|                     skipDefaultLayers: true, | ||||
|                     skipDefaultLayers: true | ||||
|                 }).convertStrict( | ||||
|                     themeFile, | ||||
|                     ConversionContext.construct([themePath], ["PrepareLayer"]) | ||||
|  | @ -919,7 +919,7 @@ class LayerOverviewUtils extends Script { | |||
|                                 const e: string = [ | ||||
|                                     `the icon for theme ${themeFile.id} is too small. Please rescale the icon at ${themeFile.icon}`, | ||||
|                                     `Even though an SVG is 'infinitely scaleable', the icon should be dimensioned bigger. One of the build steps of the theme does convert the image to a PNG (to serve as PWA-icon) and having a small dimension will cause blurry images.`, | ||||
|                                     ` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.`, | ||||
|                                     ` Width = ${width} height = ${height}; we recommend a size of at least 500px * 500px and to use a square aspect ratio.` | ||||
|                                 ].join("\n") | ||||
|                                 err(e) | ||||
|                             } | ||||
|  | @ -956,7 +956,7 @@ class LayerOverviewUtils extends Script { | |||
|                         hideFromOverview: t.hideFromOverview ?? false, | ||||
|                         shortDescription: | ||||
|                             t.shortDescription ?? new Translation(t.description).FirstSentence(), | ||||
|                         mustHaveLanguage: t.mustHaveLanguage?.length > 0, | ||||
|                         mustHaveLanguage: t.mustHaveLanguage?.length > 0 | ||||
|                     } | ||||
|                 }), | ||||
|                 sharedLayers | ||||
|  | @ -965,10 +965,10 @@ class LayerOverviewUtils extends Script { | |||
| 
 | ||||
|         console.log( | ||||
|             "Recompiled themes " + | ||||
|                 recompiledThemes.join(", ") + | ||||
|                 " and skipped " + | ||||
|                 skippedThemes.length + | ||||
|                 " themes" | ||||
|             recompiledThemes.join(", ") + | ||||
|             " and skipped " + | ||||
|             skippedThemes.length + | ||||
|             " themes" | ||||
|         ) | ||||
| 
 | ||||
|         return fixed | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue