forked from MapComplete/MapComplete
Add wrong default import from json files to code quality checks, fix those imports
This commit is contained in:
parent
71c815d37d
commit
ce44f34bf3
42 changed files with 167 additions and 148 deletions
|
@ -1,21 +1,20 @@
|
|||
import { Conversion, DesugaringStep } from "./Conversion"
|
||||
import { LayoutConfigJson } from "../Json/LayoutConfigJson"
|
||||
import { Utils } from "../../../Utils"
|
||||
import * as metapaths from "../../../assets/layoutconfigmeta.json"
|
||||
import * as tagrenderingmetapaths from "../../../assets/questionabletagrenderingconfigmeta.json"
|
||||
import metapaths from "../../../assets/layoutconfigmeta.json"
|
||||
import tagrenderingmetapaths from "../../../assets/questionabletagrenderingconfigmeta.json"
|
||||
import Translations from "../../../UI/i18n/Translations"
|
||||
|
||||
export class ExtractImages extends Conversion<LayoutConfigJson, string[]> {
|
||||
private _isOfficial: boolean
|
||||
private _sharedTagRenderings: Map<string, any>
|
||||
|
||||
private static readonly layoutMetaPaths = (metapaths["default"] ?? metapaths).filter(
|
||||
private static readonly layoutMetaPaths = metapaths.filter(
|
||||
(mp) =>
|
||||
ExtractImages.mightBeTagRendering(mp) ||
|
||||
ExtractImages.mightBeTagRendering(<any>mp) ||
|
||||
(mp.typeHint !== undefined && (mp.typeHint === "image" || mp.typeHint === "icon"))
|
||||
)
|
||||
private static readonly tagRenderingMetaPaths =
|
||||
tagrenderingmetapaths["default"] ?? tagrenderingmetapaths
|
||||
private static readonly tagRenderingMetaPaths = tagrenderingmetapaths
|
||||
|
||||
constructor(isOfficial: boolean, sharedTagRenderings: Map<string, any>) {
|
||||
super("Extract all images from a layoutConfig using the meta paths.", [], "ExctractImages")
|
||||
|
@ -23,14 +22,16 @@ export class ExtractImages extends Conversion<LayoutConfigJson, string[]> {
|
|||
this._sharedTagRenderings = sharedTagRenderings
|
||||
}
|
||||
|
||||
public static mightBeTagRendering(metapath: { type: string | string[] }): boolean {
|
||||
public static mightBeTagRendering(metapath: { type?: string | string[] }): boolean {
|
||||
if (!Array.isArray(metapath.type)) {
|
||||
return false
|
||||
}
|
||||
return metapath.type.some(
|
||||
(t) =>
|
||||
t["$ref"] == "#/definitions/TagRenderingConfigJson" ||
|
||||
t["$ref"] == "#/definitions/QuestionableTagRenderingConfigJson"
|
||||
return (
|
||||
metapath.type?.some(
|
||||
(t) =>
|
||||
t["$ref"] == "#/definitions/TagRenderingConfigJson" ||
|
||||
t["$ref"] == "#/definitions/QuestionableTagRenderingConfigJson"
|
||||
) ?? false
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -83,7 +84,7 @@ export class ExtractImages extends Conversion<LayoutConfigJson, string[]> {
|
|||
const errors = []
|
||||
const warnings = []
|
||||
for (const metapath of ExtractImages.layoutMetaPaths) {
|
||||
const mightBeTr = ExtractImages.mightBeTagRendering(metapath)
|
||||
const mightBeTr = ExtractImages.mightBeTagRendering(<any>metapath)
|
||||
const allRenderedValuesAreImages =
|
||||
metapath.typeHint === "icon" || metapath.typeHint === "image"
|
||||
const found = Utils.CollectPath(metapath.path, json)
|
||||
|
@ -271,14 +272,11 @@ export class FixImages extends DesugaringStep<LayoutConfigJson> {
|
|||
|
||||
json = Utils.Clone(json)
|
||||
|
||||
let paths = metapaths["default"] ?? metapaths
|
||||
let trpaths = tagrenderingmetapaths["default"] ?? tagrenderingmetapaths
|
||||
|
||||
for (const metapath of paths) {
|
||||
for (const metapath of metapaths) {
|
||||
if (metapath.typeHint !== "image" && metapath.typeHint !== "icon") {
|
||||
continue
|
||||
}
|
||||
const mightBeTr = ExtractImages.mightBeTagRendering(metapath)
|
||||
const mightBeTr = ExtractImages.mightBeTagRendering(<any>metapath)
|
||||
Utils.WalkPath(metapath.path, json, (leaf, path) => {
|
||||
if (typeof leaf === "string") {
|
||||
return replaceString(leaf)
|
||||
|
@ -287,7 +285,7 @@ export class FixImages extends DesugaringStep<LayoutConfigJson> {
|
|||
if (mightBeTr) {
|
||||
// We might have reached a tagRenderingConfig containing icons
|
||||
// lets walk every rendered value and fix the images in there
|
||||
for (const trpath of trpaths) {
|
||||
for (const trpath of tagrenderingmetapaths) {
|
||||
if (trpath.typeHint !== "rendered") {
|
||||
continue
|
||||
}
|
||||
|
|
|
@ -16,10 +16,10 @@ import RewritableConfigJson from "../Json/RewritableConfigJson"
|
|||
import SpecialVisualizations from "../../../UI/SpecialVisualizations"
|
||||
import Translations from "../../../UI/i18n/Translations"
|
||||
import { Translation } from "../../../UI/i18n/Translation"
|
||||
import * as tagrenderingconfigmeta from "../../../assets/tagrenderingconfigmeta.json"
|
||||
import tagrenderingconfigmeta from "../../../assets/tagrenderingconfigmeta.json"
|
||||
import { AddContextToTranslations } from "./AddContextToTranslations"
|
||||
import FilterConfigJson from "../Json/FilterConfigJson"
|
||||
import * as predifined_filters from "../../../assets/layers/filters/filters.json"
|
||||
import predifined_filters from "../../../assets/layers/filters/filters.json"
|
||||
|
||||
class ExpandFilter extends DesugaringStep<LayerConfigJson> {
|
||||
private static load_filters(): Map<string, FilterConfigJson> {
|
||||
|
@ -730,8 +730,7 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
} {
|
||||
const errors = []
|
||||
json = Utils.Clone(json)
|
||||
const paths: { path: string[]; type?: any; typeHint?: string }[] =
|
||||
tagrenderingconfigmeta["default"] ?? tagrenderingconfigmeta
|
||||
const paths: { path: string[]; type?: any; typeHint?: string }[] = tagrenderingconfigmeta
|
||||
for (const path of paths) {
|
||||
if (path.typeHint !== "rendered") {
|
||||
continue
|
||||
|
|
|
@ -9,11 +9,9 @@ import LayoutConfig from "../LayoutConfig"
|
|||
import { TagRenderingConfigJson } from "../Json/TagRenderingConfigJson"
|
||||
import { TagUtils } from "../../../Logic/Tags/TagUtils"
|
||||
import { ExtractImages } from "./FixImages"
|
||||
import ScriptUtils from "../../../scripts/ScriptUtils"
|
||||
import { And } from "../../../Logic/Tags/And"
|
||||
import Translations from "../../../UI/i18n/Translations"
|
||||
import Svg from "../../../Svg"
|
||||
import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson"
|
||||
import FilterConfigJson from "../Json/FilterConfigJson"
|
||||
import DeleteConfig from "../DeleteConfig"
|
||||
|
||||
|
@ -365,7 +363,7 @@ export class PrevalidateTheme extends Fuse<LayoutConfigJson> {
|
|||
}
|
||||
}
|
||||
|
||||
export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRenderingConfigJson> {
|
||||
export class DetectShadowedMappings extends DesugaringStep<TagRenderingConfigJson> {
|
||||
private readonly _calculatedTagNames: string[]
|
||||
|
||||
constructor(layerConfig?: LayerConfigJson) {
|
||||
|
@ -425,9 +423,9 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
* r.errors[0].indexOf("The mapping key=value&x=y is fully matched by a previous mapping (namely 0)") >= 0 // => true
|
||||
*/
|
||||
convert(
|
||||
json: QuestionableTagRenderingConfigJson,
|
||||
json: TagRenderingConfigJson,
|
||||
context: string
|
||||
): { result: QuestionableTagRenderingConfigJson; errors?: string[]; warnings?: string[] } {
|
||||
): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[] } {
|
||||
const errors = []
|
||||
const warnings = []
|
||||
if (json.mappings === undefined || json.mappings.length === 0) {
|
||||
|
@ -441,12 +439,9 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
const parsedConditions = json.mappings.map((m, i) => {
|
||||
const ctx = `${context}.mappings[${i}]`
|
||||
const ifTags = TagUtils.Tag(m.if, ctx)
|
||||
if (
|
||||
m.hideInAnswer !== undefined &&
|
||||
m.hideInAnswer !== false &&
|
||||
m.hideInAnswer !== true
|
||||
) {
|
||||
let conditionTags = TagUtils.Tag(m.hideInAnswer)
|
||||
const hideInAnswer = m["hideInAnswer"]
|
||||
if (hideInAnswer !== undefined && hideInAnswer !== false && hideInAnswer !== true) {
|
||||
let conditionTags = TagUtils.Tag(hideInAnswer)
|
||||
// Merge the condition too!
|
||||
return new And([conditionTags, ifTags])
|
||||
}
|
||||
|
@ -467,8 +462,8 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender
|
|||
const doesMatch = parsedConditions[j].matchesProperties(properties)
|
||||
if (
|
||||
doesMatch &&
|
||||
json.mappings[j].hideInAnswer === true &&
|
||||
json.mappings[i].hideInAnswer !== true
|
||||
json.mappings[j]["hideInAnswer"] === true &&
|
||||
json.mappings[i]["hideInAnswer"] !== true
|
||||
) {
|
||||
warnings.push(
|
||||
`At ${context}: Mapping ${i} is shadowed by mapping ${j}. However, mapping ${j} has 'hideInAnswer' set, which will result in a different rendering in question-mode.`
|
||||
|
@ -623,7 +618,8 @@ export class ValidateTagRenderings extends Fuse<TagRenderingConfigJson> {
|
|||
super(
|
||||
"Various validation on tagRenderingConfigs",
|
||||
new DetectShadowedMappings(layerConfig),
|
||||
new DetectMappingsWithImages(doesImageExist)
|
||||
new DetectMappingsWithImages(doesImageExist),
|
||||
new MiscTagRenderingChecks()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ export interface MappingConfigJson {
|
|||
/**
|
||||
* Size of the image
|
||||
*/
|
||||
class: "small" | "medium" | "large" | string
|
||||
class?: "small" | "medium" | "large" | string
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -125,7 +125,7 @@ export interface TagRenderingConfigJson {
|
|||
* A hint to mapcomplete on how to render this icon within the mapping.
|
||||
* This is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)
|
||||
*/
|
||||
class: "small" | "medium" | "large" | string
|
||||
class?: "small" | "medium" | "large" | string
|
||||
}
|
||||
}[]
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import TilesourceConfig from "./TilesourceConfig"
|
|||
import { ExtractImages } from "./Conversion/FixImages"
|
||||
import ExtraLinkConfig from "./ExtraLinkConfig"
|
||||
import { Utils } from "../../Utils"
|
||||
import * as used_languages from "../../assets/generated/used_languages.json"
|
||||
import used_languages from "../../assets/generated/used_languages.json"
|
||||
export default class LayoutConfig {
|
||||
public static readonly defaultSocialImage = "assets/SocialImage.png"
|
||||
public readonly id: string
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue