forked from MapComplete/MapComplete
		
	Refactoring: finish move to 'src' directory
This commit is contained in:
		
							parent
							
								
									e75d2789d2
								
							
						
					
					
						commit
						1bba106a86
					
				
					 158 changed files with 7715 additions and 7241 deletions
				
			
		|  | @ -1,9 +1,9 @@ | |||
| import * as fs from "fs" | ||||
| import { existsSync, lstatSync, readdirSync, readFileSync } from "fs" | ||||
| import { Utils } from "../Utils" | ||||
| import { Utils } from "../src/Utils" | ||||
| import * as https from "https" | ||||
| import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import { LayoutConfigJson } from "../src/Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import xml2js from "xml2js" | ||||
| 
 | ||||
| export default class ScriptUtils { | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ export NODE_OPTIONS="--max-old-space-size=8192" | |||
| 
 | ||||
| # This script ends every line with '&&' to chain everything. A failure will thus stop the build | ||||
| npm run generate:editor-layer-index && | ||||
| npm run generate && | ||||
| # npm run generate && | ||||
| npm run generate:layouts | ||||
| 
 | ||||
| if [ $? -ne 0 ]; then | ||||
|  | @ -51,8 +51,5 @@ vite build $SRC_MAPS | |||
| cp -r assets/layers/ dist/assets/layers/ | ||||
| cp -r assets/themes/ dist/assets/themes/ | ||||
| cp -r assets/svg/ dist/assets/svg/ | ||||
| cp -r assets/tagRenderings/ dist/assets/tagRenderings/ | ||||
| cp assets/*.png dist/assets/ | ||||
| cp assets/*.svg dist/assets/ | ||||
| 
 | ||||
| export NODE_OPTIONS="" | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import Script from "./Script" | ||||
| import { Utils } from "../Utils" | ||||
| import { Utils } from "../src/Utils" | ||||
| import { FeatureCollection } from "geojson" | ||||
| import fs from "fs" | ||||
| 
 | ||||
|  | @ -10,7 +10,7 @@ class DownloadEli extends Script { | |||
|     async main(args: string[]): Promise<void> { | ||||
|         const url = "https://osmlab.github.io/editor-layer-index/imagery.geojson" | ||||
|         // Target should use '.json' instead of '.geojson', as the latter cannot be imported by the build systems
 | ||||
|         const target = args[0] ?? "assets/editor-layer-index.json" | ||||
|         const target = args[0] ?? "src/assets/editor-layer-index.json" | ||||
| 
 | ||||
|         const eli = <FeatureCollection>await Utils.downloadJson(url) | ||||
|         const keptLayers = [] | ||||
|  |  | |||
|  | @ -4,12 +4,12 @@ | |||
|  */ | ||||
| 
 | ||||
| import * as wds from "wikidata-sdk" | ||||
| import { Utils } from "../Utils" | ||||
| import { Utils } from "../src/Utils" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| import { existsSync, readFileSync, writeFileSync } from "fs" | ||||
| import WikidataUtils from "../Utils/WikidataUtils" | ||||
| import LanguageUtils from "../Utils/LanguageUtils" | ||||
| import Wikidata from "../Logic/Web/Wikidata" | ||||
| import WikidataUtils from "../src/Utils/WikidataUtils" | ||||
| import LanguageUtils from "../src/Utils/LanguageUtils" | ||||
| import Wikidata from "../src/Logic/Web/Wikidata" | ||||
| 
 | ||||
| interface value<T> { | ||||
|     value: T | ||||
|  | @ -150,8 +150,8 @@ async function getOfficialLanguagesPerCountryCached( | |||
|     wipeCache: boolean | ||||
| ): Promise<Record<string /*Country code*/, string[] /*Language codes*/>> { | ||||
|     let officialLanguages: Record<string, string[]> | ||||
|     const officialLanguagesPath = "./assets/language_in_country.json" | ||||
|     if (existsSync("./assets/languages_in_country.json") && !wipeCache) { | ||||
|     const officialLanguagesPath = "./src/assets/language_in_country.json" | ||||
|     if (existsSync("./src/assets/languages_in_country.json") && !wipeCache) { | ||||
|         officialLanguages = JSON.parse(readFileSync(officialLanguagesPath, "utf8")) | ||||
|     } else { | ||||
|         officialLanguages = Utils.MapToObj(await getOfficialLanguagesPerCountry(), (t) => t) | ||||
|  | @ -161,7 +161,7 @@ async function getOfficialLanguagesPerCountryCached( | |||
| } | ||||
| 
 | ||||
| async function main(wipeCache = false) { | ||||
|     const cacheFile = "./assets/generated/languages-wd.json" | ||||
|     const cacheFile = "./src/assets/generated/languages-wd.json" | ||||
|     if (wipeCache || !existsSync(cacheFile)) { | ||||
|         console.log("Refreshing cache") | ||||
|         await fetch(cacheFile) | ||||
|  | @ -172,7 +172,7 @@ async function main(wipeCache = false) { | |||
|     const data = JSON.parse(readFileSync(cacheFile, { encoding: "utf8" })) | ||||
|     const perId = WikidataUtils.extractLanguageData(data, WikidataUtils.languageRemapping) | ||||
|     const nativeList = getNativeList(perId) | ||||
|     writeFileSync("./assets/language_native.json", JSON.stringify(nativeList, null, "  ")) | ||||
|     writeFileSync("./src/assets/language_native.json", JSON.stringify(nativeList, null, "  ")) | ||||
|     const languagesPerCountry = Utils.TransposeMap( | ||||
|         await getOfficialLanguagesPerCountryCached(wipeCache) | ||||
|     ) | ||||
|  | @ -195,7 +195,10 @@ async function main(wipeCache = false) { | |||
|         return translatedForId | ||||
|     }) | ||||
| 
 | ||||
|     writeFileSync("./assets/language_translations.json", JSON.stringify(translations, null, "  ")) | ||||
|     writeFileSync( | ||||
|         "./src/assets/language_translations.json", | ||||
|         JSON.stringify(translations, null, "  ") | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| const forceRefresh = process.argv[2] === "--force-refresh" | ||||
|  |  | |||
|  | @ -49,9 +49,9 @@ function main() { | |||
|             hist.set(author, 1 + (hist.get(author) ?? 0)) | ||||
|         } | ||||
| 
 | ||||
|         const codeContributorsTarget = "assets/contributors.json" | ||||
|         const codeContributorsTarget = "src/assets/contributors.json" | ||||
|         writeFileSync(codeContributorsTarget, JSON.stringify(asList(codeContributors), null, "  ")) | ||||
|         const translatorsTarget = "assets/translators.json" | ||||
|         const translatorsTarget = "src/assets/translators.json" | ||||
|         writeFileSync( | ||||
|             translatorsTarget, | ||||
|             JSON.stringify(asList(translationContributors), null, "  ") | ||||
|  |  | |||
|  | @ -1,38 +1,37 @@ | |||
| import ScriptUtils from "./ScriptUtils" | ||||
| import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "fs" | ||||
| import licenses from "../assets/generated/license_info.json" | ||||
| import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import Constants from "../Models/Constants" | ||||
| import licenses from "../src/assets/generated/license_info.json" | ||||
| import { LayoutConfigJson } from "../src/Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import Constants from "../src/Models/Constants" | ||||
| import { | ||||
|     DetectDuplicateFilters, | ||||
|     DoesImageExist, | ||||
|     PrevalidateTheme, | ||||
|     ValidateLayer, | ||||
|     ValidateTagRenderings, | ||||
|     ValidateThemeAndLayers, | ||||
| } from "../Models/ThemeConfig/Conversion/Validation" | ||||
| import { Translation } from "../UI/i18n/Translation" | ||||
| import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson" | ||||
| import questions from "../assets/tagRenderings/questions.json" | ||||
| import PointRenderingConfigJson from "../Models/ThemeConfig/Json/PointRenderingConfigJson" | ||||
| import { PrepareLayer, RewriteSpecial } from "../Models/ThemeConfig/Conversion/PrepareLayer" | ||||
| import { PrepareTheme } from "../Models/ThemeConfig/Conversion/PrepareTheme" | ||||
| import { DesugaringContext } from "../Models/ThemeConfig/Conversion/Conversion" | ||||
| import { Utils } from "../Utils" | ||||
| } from "../src/Models/ThemeConfig/Conversion/Validation" | ||||
| import { Translation } from "../src/UI/i18n/Translation" | ||||
| import { TagRenderingConfigJson } from "../src/Models/ThemeConfig/Json/TagRenderingConfigJson" | ||||
| import PointRenderingConfigJson from "../src/Models/ThemeConfig/Json/PointRenderingConfigJson" | ||||
| import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer" | ||||
| import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme" | ||||
| import { DesugaringContext } from "../src/Models/ThemeConfig/Conversion/Conversion" | ||||
| import { Utils } from "../src/Utils" | ||||
| import Script from "./Script" | ||||
| import { AllSharedLayers } from "../Customizations/AllSharedLayers" | ||||
| import { AllSharedLayers } from "../src/Customizations/AllSharedLayers" | ||||
| 
 | ||||
| // This scripts scans 'assets/layers/*.json' for layer definition files and 'assets/themes/*.json' for theme definition files.
 | ||||
| // This scripts scans 'src/assets/layers/*.json' for layer definition files and 'src/assets/themes/*.json' for theme definition files.
 | ||||
| // It spits out an overview of those to be used to load them
 | ||||
| 
 | ||||
| class LayerOverviewUtils extends Script { | ||||
|     public static readonly layerPath = "./assets/generated/layers/" | ||||
|     public static readonly themePath = "./assets/generated/themes/" | ||||
|     public static readonly layerPath = "./src/assets/generated/layers/" | ||||
|     public static readonly themePath = "./src/assets/generated/themes/" | ||||
| 
 | ||||
|     constructor() { | ||||
|         super("Reviews and generates the compiled themes") | ||||
|     } | ||||
| 
 | ||||
|     private static publicLayerIdsFrom(themefiles: LayoutConfigJson[]): Set<string> { | ||||
|         const publicThemes = [].concat(...themefiles.filter((th) => !th.hideFromOverview)) | ||||
| 
 | ||||
|  | @ -125,7 +124,7 @@ class LayerOverviewUtils extends Script { | |||
|         }) | ||||
| 
 | ||||
|         writeFileSync( | ||||
|             "./assets/generated/theme_overview.json", | ||||
|             "./src/assets/generated/theme_overview.json", | ||||
|             JSON.stringify(sorted, null, "  "), | ||||
|             { encoding: "utf8" } | ||||
|         ) | ||||
|  | @ -153,51 +152,45 @@ class LayerOverviewUtils extends Script { | |||
|         ) | ||||
|     } | ||||
| 
 | ||||
|     getSharedTagRenderings(doesImageExist: DoesImageExist): Map<string, TagRenderingConfigJson> { | ||||
|         const dict = new Map<string, TagRenderingConfigJson>() | ||||
| 
 | ||||
|         const prep = new RewriteSpecial() | ||||
|         const validator = new ValidateTagRenderings(undefined, doesImageExist) | ||||
|         for (const key in questions) { | ||||
|             if (key === "id") { | ||||
|                 continue | ||||
|             } | ||||
|             questions[key].id = key | ||||
|             questions[key]["source"] = "shared-questions" | ||||
|             const config = prep.convertStrict( | ||||
|                 <TagRenderingConfigJson>questions[key], | ||||
|                 "questions.json:" + key | ||||
|             ) | ||||
|             delete config["#"] | ||||
|             validator.convertStrict( | ||||
|                 config, | ||||
|                 "generate-layer-overview:tagRenderings/questions.json:" + key | ||||
|             ) | ||||
|             dict.set(key, config) | ||||
|         } | ||||
| 
 | ||||
|         dict.forEach((value, key) => { | ||||
|             if (key === "id") { | ||||
|                 return | ||||
|             } | ||||
|             value.id = value.id ?? key | ||||
|     getSharedTagRenderings( | ||||
|         doesImageExist: DoesImageExist, | ||||
|         bootstrapTagRenderings: Map<string, TagRenderingConfigJson> = null | ||||
|     ): Map<string, TagRenderingConfigJson> { | ||||
|         const prepareLayer = new PrepareLayer({ | ||||
|             tagRenderings: bootstrapTagRenderings, | ||||
|             sharedLayers: null, | ||||
|             publicLayers: null, | ||||
|         }) | ||||
| 
 | ||||
|         return dict | ||||
|         let path = "assets/layers/questions/questions.json" | ||||
|         const sharedQuestions = this.parseLayer(doesImageExist, prepareLayer, path) | ||||
| 
 | ||||
|         const dict = new Map<string, TagRenderingConfigJson>() | ||||
| 
 | ||||
|         for (const tr of sharedQuestions.tagRenderings) { | ||||
|             const tagRendering = <TagRenderingConfigJson>tr | ||||
|             dict.set(tagRendering.id, tagRendering) | ||||
|         } | ||||
| 
 | ||||
|         if (dict.size === bootstrapTagRenderings?.size) { | ||||
|             return dict | ||||
|         } | ||||
| 
 | ||||
|         return this.getSharedTagRenderings(doesImageExist, dict) | ||||
|     } | ||||
| 
 | ||||
|     checkAllSvgs() { | ||||
|         const allSvgs = ScriptUtils.readDirRecSync("./assets") | ||||
|         const allSvgs = ScriptUtils.readDirRecSync("./src/assets") | ||||
|             .filter((path) => path.endsWith(".svg")) | ||||
|             .filter((path) => !path.startsWith("./assets/generated")) | ||||
|             .filter((path) => !path.startsWith("./src/assets/generated")) | ||||
|         let errCount = 0 | ||||
|         const exempt = [ | ||||
|             "assets/SocialImageTemplate.svg", | ||||
|             "assets/SocialImageTemplateWide.svg", | ||||
|             "assets/SocialImageBanner.svg", | ||||
|             "assets/SocialImageRepo.svg", | ||||
|             "assets/svg/osm-logo.svg", | ||||
|             "assets/templates/*", | ||||
|             "src/assets/SocialImageTemplate.svg", | ||||
|             "src/assets/SocialImageTemplateWide.svg", | ||||
|             "src/assets/SocialImageBanner.svg", | ||||
|             "src/assets/SocialImageRepo.svg", | ||||
|             "src/assets/svg/osm-logo.svg", | ||||
|             "src/assets/templates/*", | ||||
|         ] | ||||
|         for (const path of allSvgs) { | ||||
|             if ( | ||||
|  | @ -215,7 +208,7 @@ class LayerOverviewUtils extends Script { | |||
|             if (contents.indexOf("data:image/png;") >= 0) { | ||||
|                 console.warn("The SVG at " + path + " is a fake SVG: it contains PNG data!") | ||||
|                 errCount++ | ||||
|                 if (path.startsWith("./assets/svg")) { | ||||
|                 if (path.startsWith("./src/assets/svg")) { | ||||
|                     throw "A core SVG is actually a PNG. Don't do this!" | ||||
|                 } | ||||
|             } | ||||
|  | @ -251,7 +244,7 @@ class LayerOverviewUtils extends Script { | |||
|             throw ( | ||||
|                 "Priviliged layer " + | ||||
|                 Array.from(priviliged).join(", ") + | ||||
|                 " has no definition file, create it at `assets/layers/<layername>/<layername.json>" | ||||
|                 " has no definition file, create it at `src/assets/layers/<layername>/<layername.json>" | ||||
|             ) | ||||
|         } | ||||
|         const recompiledThemes: string[] = [] | ||||
|  | @ -263,14 +256,14 @@ class LayerOverviewUtils extends Script { | |||
|         ) | ||||
| 
 | ||||
|         writeFileSync( | ||||
|             "./assets/generated/known_themes.json", | ||||
|             "./src/assets/generated/known_themes.json", | ||||
|             JSON.stringify({ | ||||
|                 themes: Array.from(sharedThemes.values()), | ||||
|             }) | ||||
|         ) | ||||
| 
 | ||||
|         writeFileSync( | ||||
|             "./assets/generated/known_layers.json", | ||||
|             "./src/assets/generated/known_layers.json", | ||||
|             JSON.stringify({ layers: Array.from(sharedLayers.values()) }) | ||||
|         ) | ||||
| 
 | ||||
|  | @ -317,15 +310,49 @@ class LayerOverviewUtils extends Script { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private parseLayer( | ||||
|         doesImageExist: DoesImageExist, | ||||
|         prepLayer: PrepareLayer, | ||||
|         sharedLayerPath: string | ||||
|     ): LayerConfigJson { | ||||
|         let parsed | ||||
|         try { | ||||
|             parsed = JSON.parse(readFileSync(sharedLayerPath, "utf8")) | ||||
|         } catch (e) { | ||||
|             throw "Could not parse or read file " + sharedLayerPath | ||||
|         } | ||||
|         const context = "While building builtin layer " + sharedLayerPath | ||||
|         const fixed = prepLayer.convertStrict(parsed, context) | ||||
| 
 | ||||
|         if (!fixed.source) { | ||||
|             console.error(sharedLayerPath, "has no source configured:", fixed) | ||||
|             throw sharedLayerPath + " layer has no source configured" | ||||
|         } | ||||
| 
 | ||||
|         if ( | ||||
|             typeof fixed.source !== "string" && | ||||
|             fixed.source["osmTags"] && | ||||
|             fixed.source["osmTags"]["and"] === undefined | ||||
|         ) { | ||||
|             fixed.source["osmTags"] = { and: [fixed.source["osmTags"]] } | ||||
|         } | ||||
| 
 | ||||
|         const validator = new ValidateLayer(sharedLayerPath, true, doesImageExist) | ||||
|         validator.convertStrict(fixed, context) | ||||
| 
 | ||||
|         return fixed | ||||
|     } | ||||
| 
 | ||||
|     private buildLayerIndex( | ||||
|         doesImageExist: DoesImageExist, | ||||
|         forceReload: boolean | ||||
|     ): Map<string, LayerConfigJson> { | ||||
|         // First, we expand and validate all builtin layers. These are written to assets/generated/layers
 | ||||
|         // First, we expand and validate all builtin layers. These are written to src/assets/generated/layers
 | ||||
|         // At the same time, an index of available layers is built.
 | ||||
|         console.log("   ---------- VALIDATING BUILTIN LAYERS ---------") | ||||
| 
 | ||||
|         console.log("------------- VALIDATING THE BUILTIN QUESTIONS ---------------") | ||||
|         const sharedTagRenderings = this.getSharedTagRenderings(doesImageExist) | ||||
|         console.log("Shared questions are:", Array.from(sharedTagRenderings.keys()).join(", ")) | ||||
|         console.log("   ---------- VALIDATING BUILTIN LAYERS ---------") | ||||
|         const state: DesugaringContext = { | ||||
|             tagRenderings: sharedTagRenderings, | ||||
|             sharedLayers: AllSharedLayers.getSharedLayersConfigs(), | ||||
|  | @ -347,30 +374,8 @@ class LayerOverviewUtils extends Script { | |||
|                     continue | ||||
|                 } | ||||
|             } | ||||
|             let parsed | ||||
|             try { | ||||
|                 parsed = JSON.parse(readFileSync(sharedLayerPath, "utf8")) | ||||
|             } catch (e) { | ||||
|                 throw "Could not parse or read file " + sharedLayerPath | ||||
|             } | ||||
|             const context = "While building builtin layer " + sharedLayerPath | ||||
|             const fixed = prepLayer.convertStrict(parsed, context) | ||||
| 
 | ||||
|             if (!fixed.source) { | ||||
|                 console.error(sharedLayerPath, "has no source configured:", fixed) | ||||
|                 throw sharedLayerPath + " layer has no source configured" | ||||
|             } | ||||
| 
 | ||||
|             if ( | ||||
|                 typeof fixed.source !== "string" && | ||||
|                 fixed.source["osmTags"] && | ||||
|                 fixed.source["osmTags"]["and"] === undefined | ||||
|             ) { | ||||
|                 fixed.source["osmTags"] = { and: [fixed.source["osmTags"]] } | ||||
|             } | ||||
| 
 | ||||
|             const validator = new ValidateLayer(sharedLayerPath, true, doesImageExist) | ||||
|             validator.convertStrict(fixed, context) | ||||
|             const fixed = this.parseLayer(doesImageExist, prepLayer, sharedLayerPath) | ||||
| 
 | ||||
|             if (sharedLayers.has(fixed.id)) { | ||||
|                 throw "There are multiple layers with the id " + fixed.id | ||||
|  |  | |||
|  | @ -1,17 +1,17 @@ | |||
| import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFile, writeFileSync } from "fs" | ||||
| import Locale from "../UI/i18n/Locale" | ||||
| import Translations from "../UI/i18n/Translations" | ||||
| import { Translation } from "../UI/i18n/Translation" | ||||
| import all_known_layouts from "../assets/generated/known_themes.json" | ||||
| import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import LayoutConfig from "../Models/ThemeConfig/LayoutConfig" | ||||
| import Locale from "../src/UI/i18n/Locale" | ||||
| import Translations from "../src/UI/i18n/Translations" | ||||
| import { Translation } from "../src/UI/i18n/Translation" | ||||
| import all_known_layouts from "../src/assets/generated/known_themes.json" | ||||
| import { LayoutConfigJson } from "../src/Models/ThemeConfig/Json/LayoutConfigJson" | ||||
| import LayoutConfig from "../src/Models/ThemeConfig/LayoutConfig" | ||||
| import xml2js from "xml2js" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| import { Utils } from "../Utils" | ||||
| import { Utils } from "../src/Utils" | ||||
| 
 | ||||
| const sharp = require("sharp") | ||||
| const template = readFileSync("theme.html", "utf8") | ||||
| const codeTemplate = readFileSync("index_theme.ts.template", "utf8") | ||||
| const codeTemplate = readFileSync("src/index_theme.ts.template", "utf8") | ||||
| 
 | ||||
| function enc(str: string): string { | ||||
|     return encodeURIComponent(str.toLowerCase()) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs" | ||||
| import SmallLicense from "../Models/smallLicense" | ||||
| import SmallLicense from "../src/Models/smallLicense" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| import Script from "./Script" | ||||
| 
 | ||||
|  | @ -280,7 +280,7 @@ export class GenerateLicenseInfo extends Script { | |||
|         } | ||||
| 
 | ||||
|         writeFileSync( | ||||
|             "./assets/generated/license_info.json", | ||||
|             "./src/assets/generated/license_info.json", | ||||
|             JSON.stringify(allLicenses, null, "  ") | ||||
|         ) | ||||
|     } | ||||
|  | @ -288,13 +288,13 @@ export class GenerateLicenseInfo extends Script { | |||
|     async main(args: string[]) { | ||||
|         console.log("Checking and compiling license info") | ||||
| 
 | ||||
|         if (!existsSync("./assets/generated")) { | ||||
|             mkdirSync("./assets/generated") | ||||
|         if (!existsSync("./src/assets/generated")) { | ||||
|             mkdirSync("./src/assets/generated") | ||||
|         } | ||||
| 
 | ||||
|         let contents = ScriptUtils.readDirRecSync("./assets") | ||||
|             .filter((p) => !p.startsWith("./assets/templates/")) | ||||
|             .filter((entry) => entry.indexOf("./assets/generated") != 0) | ||||
|         let contents = ScriptUtils.readDirRecSync("./assets").filter( | ||||
|             (entry) => entry.indexOf("./assets/generated") != 0 | ||||
|         ) | ||||
|         let licensePaths = contents.filter((entry) => entry.indexOf("license_info.json") >= 0) | ||||
|         let licenseInfos = this.generateLicenseInfos(licensePaths) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import known_layers from "../assets/generated/known_layers.json" | ||||
| import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import { TagUtils } from "../Logic/Tags/TagUtils" | ||||
| import { Utils } from "../Utils" | ||||
| import known_layers from "../src/assets/generated/known_layers.json" | ||||
| import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import { TagUtils } from "../src/Logic/Tags/TagUtils" | ||||
| import { Utils } from "../src/Utils" | ||||
| import { writeFileSync } from "fs" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| 
 | ||||
|  | @ -65,7 +65,7 @@ async function main(includeTags = true) { | |||
|         }) | ||||
|     ) | ||||
|     writeFileSync( | ||||
|         "./assets/key_totals.json", | ||||
|         "./src/assets/key_totals.json", | ||||
|         JSON.stringify( | ||||
|             { | ||||
|                 keys: Utils.MapToObj(keyTotal, (t) => t), | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import * as fs from "fs" | ||||
| import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" | ||||
| import { Utils } from "../Utils" | ||||
| import { Utils } from "../src/Utils" | ||||
| import ScriptUtils from "./ScriptUtils" | ||||
| 
 | ||||
| const knownLanguages = ["en", "nl", "de", "fr", "es", "gl", "ca"] | ||||
|  | @ -460,8 +460,11 @@ function formatFile(path) { | |||
|  * Generates the big compiledTranslations file | ||||
|  */ | ||||
| function genTranslations() { | ||||
|     if (!fs.existsSync("./src/assets/generated/")) { | ||||
|         fs.mkdirSync("./src/assets/generated/") | ||||
|     } | ||||
|     const translations = JSON.parse( | ||||
|         fs.readFileSync("./assets/generated/translations.json", "utf-8") | ||||
|         fs.readFileSync("./src/assets/generated/translations.json", "utf-8") | ||||
|     ) | ||||
|     const transformed = transformTranslation(translations) | ||||
| 
 | ||||
|  | @ -469,7 +472,7 @@ function genTranslations() { | |||
|     module += " public static t = " + transformed | ||||
|     module += "\n    }" | ||||
| 
 | ||||
|     fs.writeFileSync("./assets/generated/CompiledTranslations.ts", module) | ||||
|     fs.writeFileSync("./src/assets/generated/CompiledTranslations.ts", module) | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  | @ -497,7 +500,7 @@ function compileTranslationsFromWeblate() { | |||
|     } | ||||
| 
 | ||||
|     writeFileSync( | ||||
|         "./assets/generated/translations.json", | ||||
|         "./src/assets/generated/translations.json", | ||||
|         JSON.stringify(JSON.parse(allTranslations.toJson()), null, "    ") | ||||
|     ) | ||||
| } | ||||
|  | @ -692,22 +695,9 @@ if (!existsSync("./langs/themes")) { | |||
|     mkdirSync("./langs/themes") | ||||
| } | ||||
| const themeOverwritesWeblate = process.argv[2] === "--ignore-weblate" | ||||
| const questionsPath = "assets/tagRenderings/questions.json" | ||||
| const questionsParsed = JSON.parse(readFileSync(questionsPath, "utf8")) | ||||
| if (!themeOverwritesWeblate) { | ||||
|     mergeLayerTranslations() | ||||
|     mergeThemeTranslations() | ||||
| 
 | ||||
|     mergeLayerTranslation( | ||||
|         questionsParsed, | ||||
|         questionsPath, | ||||
|         loadTranslationFilesFrom("shared-questions") | ||||
|     ) | ||||
|     const endsWithNewline = readFileSync(questionsPath, { encoding: "utf8" }).endsWith("\n") | ||||
|     writeFileSync( | ||||
|         questionsPath, | ||||
|         JSON.stringify(questionsParsed, null, "  ") + (endsWithNewline ? "\n" : "") | ||||
|     ) | ||||
| } else { | ||||
|     console.log("Ignore weblate") | ||||
| } | ||||
|  | @ -717,14 +707,10 @@ const l2 = generateTranslationsObjectFrom( | |||
|     ScriptUtils.getThemeFiles().filter((th) => th.parsed.mustHaveLanguage === undefined), | ||||
|     "themes" | ||||
| ) | ||||
| const l3 = generateTranslationsObjectFrom( | ||||
|     [{ path: questionsPath, parsed: questionsParsed }], | ||||
|     "shared-questions" | ||||
| ) | ||||
| 
 | ||||
| const usedLanguages: string[] = Utils.Dedup(l1.concat(l2).concat(l3)).filter((v) => v !== "*") | ||||
| const usedLanguages: string[] = Utils.Dedup(l1.concat(l2)).filter((v) => v !== "*") | ||||
| usedLanguages.sort() | ||||
| fs.writeFileSync("./assets/used_languages.json", JSON.stringify({ languages: usedLanguages })) | ||||
| fs.writeFileSync("./src/assets/used_languages.json", JSON.stringify({ languages: usedLanguages })) | ||||
| 
 | ||||
| if (!themeOverwritesWeblate) { | ||||
|     // Generates the core translations
 | ||||
|  | @ -742,5 +728,4 @@ for (const path of allTranslationFiles) { | |||
| TranslationPart.fromDirectory("./langs").validateStrict("./langs") | ||||
| TranslationPart.fromDirectory("./langs/layers").validateStrict("layers") | ||||
| TranslationPart.fromDirectory("./langs/themes").validateStrict("themes") | ||||
| TranslationPart.fromDirectory("./langs/shared-questions").validateStrict("shared-questions") | ||||
| console.log("All done!") | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue