Merge branch 'master' of source.mapcomplete.org:mapcomplete/mapcomplete

This commit is contained in:
Pieter Vander Vennet 2025-04-26 22:41:57 +02:00
commit 8d6f9ea94f
7 changed files with 47 additions and 20 deletions

15
package-lock.json generated
View file

@ -1,4 +1,3 @@
{
"name": "mapcomplete",
"version": "0.51.1",
"lockfileVersion": 2,
@ -67,7 +66,7 @@
"marked": "^12.0.2",
"monaco-editor": "^0.46.0",
"mvt-to-geojson": "^0.0.6",
"name-suggestion-index": "^6.0.20250302",
"name-suggestion-index": "^6.0.20250413",
"npm": "^11.1.0",
"opening_hours": "^3.6.0",
"osm-auth": "^2.6.0",
@ -20056,9 +20055,9 @@
}
},
"node_modules/name-suggestion-index": {
"version": "6.0.20250302",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250302.tgz",
"integrity": "sha512-9tdHRaHBXhFTXCt0FGWhOuIRWx8GalsbTD2GIL9B8XmFah8q6hk99yjMMnRkRAedarvJpYHaUCSbkaH6QQpplA==",
"version": "6.0.20250413",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250413.tgz",
"integrity": "sha512-rJ+6A2pp/NQ9gidWs72XuVBlfzynF4IaoeOFhKX19fCQbVNHiWbxlTSxQ852pQoisJXDSW5kgzakoKz7uxo9BA==",
"license": "BSD-3-Clause",
"dependencies": {
"diacritics": "^1.3.0",
@ -44340,9 +44339,9 @@
}
},
"name-suggestion-index": {
"version": "6.0.20250302",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250302.tgz",
"integrity": "sha512-9tdHRaHBXhFTXCt0FGWhOuIRWx8GalsbTD2GIL9B8XmFah8q6hk99yjMMnRkRAedarvJpYHaUCSbkaH6QQpplA==",
"version": "6.0.20250413",
"resolved": "https://registry.npmjs.org/name-suggestion-index/-/name-suggestion-index-6.0.20250413.tgz",
"integrity": "sha512-rJ+6A2pp/NQ9gidWs72XuVBlfzynF4IaoeOFhKX19fCQbVNHiWbxlTSxQ852pQoisJXDSW5kgzakoKz7uxo9BA==",
"requires": {
"diacritics": "^1.3.0",
"run-s": "^0.0.0",

View file

@ -37,6 +37,8 @@
"summary_server": "https://cache.mapcomplete.org/",
"geoip_server": "https://ipinfo.mapcomplete.org/",
"error_server": "https://report.mapcomplete.org/report",
"#nsi_logos_server": "The location where a running instance of MapComplete will fetch the NSI-logos. This is by default the host itself, but not in e.g. the android app",
"nsi_logos_server": "https://mapcomplete.org/assets/data/nsi/",
"api_keys": {
"#": "Various API-keys for various services. Feel free to reuse those in another MapComplete-hosted version",
"#fork": "Not bound to a domain; can be reused",
@ -111,7 +113,7 @@
"generate": "npm run generate:licenses && npm run generate:images && npm run generate:charging-stations && npm run generate:translations && npm run refresh:layeroverview && npm run generate:service-worker",
"generate:charging-stations": "cd ./assets/layers/charging_station && vite-node csvToJson.ts && cd -",
"clean:tests": "find . -type f -name \"*.doctest.ts\" | xargs -r rm",
"clean": "rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|privacy\\|test\\|studio\\|theme\\|style_test\\|statistics\\|status\\|leaderboard\\|inspector\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm)",
"clean": "echo '{\n \"#\": \"Settings in this file override the `config`-section of `package.json`\"\n}' > config.json && rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|privacy\\|test\\|studio\\|theme\\|style_test\\|statistics\\|status\\|leaderboard\\|inspector\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm)",
"generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot",
"scrapeWebsites": "vite-node scripts/importscripts/compareWebsiteData.ts -- ~/Downloads/ShopsWithWebsiteNodes.csv ~/data/scraped_websites/",
"### 0": "VELOPARK",
@ -229,7 +231,7 @@
"marked": "^12.0.2",
"monaco-editor": "^0.46.0",
"mvt-to-geojson": "^0.0.6",
"name-suggestion-index": "^6.0.20250302",
"name-suggestion-index": "^6.0.20250413",
"npm": "^11.1.0",
"opening_hours": "^3.6.0",
"osm-auth": "^2.6.0",

View file

@ -126,7 +126,7 @@ class DownloadEli extends Script {
fs.writeFileSync(targetGlobal, JSON.stringify(contentsGlobal, null, " "), {
encoding: "utf8",
})
console.log("Written", keptGlobalLayers.length + ", entries to the global ELI")
console.log("Written", keptGlobalLayers.length + ", entries to the global ELI ("+targetGlobal+")")
}
}

View file

@ -211,7 +211,7 @@ class NsiLogos extends Script {
const config: LayerConfigJson = {
id: "nsi_" + type,
description: {
en: "Exposes part of the NSI to reuse in other themes, e.g. for rendering",
en: "Exposes part of the NSI to reuse in other themes, e.g. for rendering. Automatically generated and never directly loaded in a theme",
},
source: "special:library",
pointRendering: null,

View file

@ -8,7 +8,18 @@ then
npm run generate:layeroverview
npm run generate:layouts
fi
vite-node scripts/nsiLogos.ts -- patch
echo '''
{
"nsi_logos_server": "https://mapcomplete.org/assets/data/nsi/logos/"
}
''' > config.json
cat config.json | jq
if [ $? -ne 0 ]
then
echo "config.json file is invalid, exiting now"
tput bel
exit 0
fi
npm run build
echo '''
import type { CapacitorConfig } from "@capacitor/cli";
@ -22,6 +33,7 @@ const config: CapacitorConfig = {
export default config;
''' > capacitor.config.ts
# copy distribution files
rm -rf dist-full
mkdir dist-full
@ -51,6 +63,11 @@ cp -r dist/assets/svg dist-full/assets/
cp -r dist/assets/templates dist-full/assets/
cp -r dist/assets/generated/themes/ dist-full/assets/generated/
cp -r dist/assets/themes dist-full/assets/
cp dist/assets/*.js.map dist-full/assets/
rm -rf dist-full/assets/data/nsi
rm /home/pietervdvn/git/MapComplete/dist-full/assets/layers/nsi_brand/nsi_brand.json
rm /home/pietervdvn/git/MapComplete/dist-full/assets/layers/nsi_operator/nsi_operator.json
# mkdir dist-full/assets/generated
nvm use
@ -59,7 +76,8 @@ nvm use
npx capacitor-assets generate
npx cap sync
cd android
npm run clean
echo "All done! Don't forget to click 'gradle sync files' in Android Studio"
tput bel
tput bel

View file

@ -8,6 +8,7 @@ import { TypedTranslation } from "../../UI/i18n/Translation"
import { RegexTag } from "../Tags/RegexTag"
import { TagConfigJson } from "../../Models/ThemeConfig/Json/TagConfigJson"
import { TagUtils } from "../Tags/TagUtils"
import Constants from "../../Models/Constants"
/**
* Main name suggestion index file
@ -69,8 +70,10 @@ export default class NameSuggestionIndex {
private loco: LocationConflation // Some additional boundaries
private _supportedTypes: string[]
private _serverLocation: string
constructor(
private constructor(
serverLocation: string,
nsiFile: Readonly<NSIFile>,
nsiWdFile: Readonly<
Record<
@ -82,6 +85,7 @@ export default class NameSuggestionIndex {
>,
features: Readonly<FeatureCollection>
) {
this._serverLocation = serverLocation
this.nsiFile = nsiFile
this.nsiWdFile = nsiWdFile
this.loco = new LocationConflation(features)
@ -101,6 +105,7 @@ export default class NameSuggestionIndex {
].map((url) => Utils.downloadJsonCached(url, 1000 * 60 * 60 * 24 * 30))
)
NameSuggestionIndex.inited = new NameSuggestionIndex(
Constants.nsiLogosEndpoint,
<any>nsi,
<any>nsiWd["wikidata"],
<any>features
@ -129,12 +134,13 @@ export default class NameSuggestionIndex {
* @param countries
* @private
*/
private static async fetchFrequenciesFor(type: string, countries: string[]) {
private async fetchFrequenciesFor(type: string, countries: string[]) {
const server = this._serverLocation
let stats = await Promise.all(
countries.map((c) => {
try {
return Utils.downloadJsonCached<Record<string, number>>(
`./assets/data/nsi/stats/${type}.${c.toUpperCase()}.json`,
`${server}/stats/${type}.${c.toUpperCase()}.json`,
24 * 60 * 60 * 1000
)
} catch (e) {
@ -194,7 +200,7 @@ export default class NameSuggestionIndex {
const mappings: (Mapping & { frequency: number })[] = []
const frequencies =
country !== undefined
? await NameSuggestionIndex.fetchFrequenciesFor(type, country)
? await this.fetchFrequenciesFor(type, country)
: {}
for (const key in tags) {
if (key.startsWith("_")) {
@ -398,11 +404,12 @@ export default class NameSuggestionIndex {
}
public getIconUrl(nsiItem: NSIItem): string | undefined {
if (!nsiItem.ext) {
const baseUrl = this._serverLocation
if (!nsiItem.ext || baseUrl === null) {
// No extension -> there is no logo
return undefined
}
return "./assets/data/nsi/logos/" + nsiItem.id + "." + nsiItem.ext
return baseUrl +"/logos/"+ nsiItem.id + "." + nsiItem.ext
}
private static readonly brandPrefix = ["name", "alt_name", "operator", "brand"] as const

View file

@ -139,6 +139,7 @@ export default class Constants {
public static osmAuthConfig: AuthConfig = Constants.config.oauth_credentials
public static nominatimEndpoint: string = Constants.config.nominatimEndpoint
public static photonEndpoint: string = Constants.config.photonEndpoint
public static nsiLogosEndpoint: string = Constants.config.nsi_logos_server ?? null
public static weblate: string = "https://translate.mapcomplete.org/"
public static linkedDataProxy: string = Constants.config["jsonld-proxy"]