npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@masterportal/mpconfigparser

v1.4.0

Published

parses the config.json.md to a tree structure; also usable as validator

Downloads

567

Readme

Switch to the English version.

MP Config Parser

Der MP Config Parser ist ein Paket, das Tools und Definitionen zum Parsen einer config.json.md für das Masterportal umfasst. Zurückgeliefert wird eine Graphstruktur, die die Möglichkeiten für eine config.json-Datei beschreibt, und ein Warnungslog, der Fehler in der Struktur der config.json.md anzeigt.

Im Masterportal Admintool wird dies zur Formulargenerierung eingesetzt. Im Masterportal wird dies zur Validierung des Zustands der config.json.md eingesetzt; außerdem wird überprüft, ob deutsche und englische Dokumentation strukturell identisch sind.

# Verwendung als CLI tool
node ./node_modules/mpconfigparser/cli.js ./doc/config.json.md ./doc/config.json.de.md

Es folgt die Beschreibung der Struktur der config.json.md.

Mit config ist die gesamte config.json gemeint.

Mit ε, ε2, ... sind punktseparierte Listen von Titelfragmenten gemeint. (etwa "Portalconfig.menu.tools")

Dokumentstruktur

  • Das h1-Kapitel mit Namen "config.json" stellt den Startknoten der Konfiguration dar
    • Das h2-Kapitel "Themenconfig" darin wird zu einem gesonderten (nicht-generierten) Formular verarbeitet
    • Alle anderen h2-Kapitel darin werden als Grundlage zur Formulargenerierung genutzt
    • Es darf kein h2-Kapitel "version" geben: Dieses Feld wird im Hintergrund benutzt, um Versionsinformationen abzulegen
  • Paragraphen/Listen/... werden wie vorgefunden zu HTML umgewandelt und in den Formularen als Hilfstexte dargestellt
  • Inhalte außerhalb des h1-Kapitels "config.json" werden nicht im Admintool dargestellt
    • Inhaltsverzeichnis, Typbeschreibungen, Links, ...

Admintoolstruktur basierend auf Kapiteln

  • h1: Keine Darstellung
  • h2: Jedes h2 ist ein Schritt in der Konfiguration (Step in der Sidebar)
  • h3: Jedes h3 ist ein Unterschritt für einen Schritt (Unterelement zum Step)
  • h4+: Ist ein Unterkapitel im Formular für h2 bzw. h3, das als Box abgehoben wird
    • Wenn ein Kapitel also mehrere Abschnitte im Formular, aber keine Unterkapitel haben soll, muss h4 auf h2 folgen

Titelstruktur

  • Fall 1: Titel beschreiben eine Objektverschachtelung
    • Für Kapitel mit Titel ε gilt, dass das Objekt config.ε beschrieben wird
    • Für ein Kapitel ε mit ε = ε2.x gilt, falls ε2 nicht-leer ist, ist in mindestens einer Zeile der tabellarischen Beschreibung zu ε2 der Typ x
  • Fall 2: Titel beschreiben einen Typ
    • Für ein Kapitel mit Titel ε gilt, dass das Objekt config.ε nicht existiert
    • Für ein Kapitel ε gilt, dass ein ε2 existiert mit
      • ε2 entspricht wiederum den Regeln von Fall 1 oder Fall 2
      • ε2 referenziert als Typ oder erbt von ε

Die Struktur dahinter ist ein kreisfreier Graph, wobei die Knoten Kapitel sind. Kanten sind

  • Kindverweise (Objektverschachtelung)
  • Querverweise (Objektverschachtelung)
  • Vererbungsbeziehungen

Referenzstruktur

Die Struktur [a]: # (ε) wird genutzt, wobei a die Art der Beziehung beschreibt, und ε den referenzierten Pfad. Diese Struktur ist in der Ansicht von Markdown für den Leser nicht sichtbar und wird deshalb hier zweckentfremdet.

Kindverweis

Direkte Verweise ergeben sich implizit daraus, dass in ε der Typ x benutzt wird und ε.x existiert.

Querverweis

Hierfür wird im Markdown nach dem Titel und einer Leerzeile der Eintrag [type:x]: # (ε) gesetzt. Damit wird für den Typen "x" für dieses Kapitel festgelegt, dass das Objekt dahinter nach der Beschreibung in ε strukturiert ist. Es darf im gleichen Kapitel keine zwei Definitionen [type:x] und [type:y] geben mit x.toLowerCase() === y.toLowerCase().

Vererbung

Zur Annotation einer Vererbung ist im Markdown nach dem Titel und einer Leerzeile der Eintrag [inherits]: # (ε) gesetzt. Damit werden alle Zeilen von ε als Grundlage genutzt und die neue Definition wird über sie kopiert.

Weiterhin gilt, dass erbende Kapitel anstelle ihrer vererbenden Kapitel genutzt werden können. Falls also A von B erbt, und C hat für eine Zeile den Typen B, dann kann hier anstelle von B auch ein A verwendet werden. Dies gilt auch transitiv.

Abstrakte Kapitel können implizit deklariert werden, indem sie nirgends als Typ verwandt werden. Wenn also A von B erbt, aber B nirgends als Typ vermerkt ist, ist B gleichsam abstrakt. Hierdurch können gemeinsame Propertysets rausgezogen werden.

Tabellenstruktur

Tabellen beschreiben die Struktur von Objekten. Für Kapitel ab h2 werden Tabellen interpretiert. Tabellen haben folgende Spalten in dieser Reihenfolge. Die Spalte "Expert" ist derzeit optional. Wenn sie nicht vorhanden ist, wird angenommen, dass kein Eintrag in dieser Tabelle zum Expertenmodus gehört.

|Name|Verpflichtend|Typ|Default|Beschreibung|Expert| |----|-------------|---|-------|------------|--------| |Beliebiger String, der als Key in einem Objekt zugelassen ist. Der Name wird von camelCase zu Title Case umgewandelt und als Label benutzt.|"ja" oder "nein" ist erlaubt. Wenn "ja" gesetzt ist, muss der User einen Wert hinterlegen, der truthy ist.|siehe unten|Vorbelegung für den Eintrag. Muss mit JSON.parse verarbeitbar sein und dem Typen entsprechen.|Beliebiger Beschreibungstext, der am Formularelement dargestellt wird. Enthält dieser Text "@deprecated", wird ein entsprechender Hinweis angezeigt und das Feld wird read-only.|true oder false; wenn true, wird das Element nur im Expertenmodus angezeigt.|

Typ

Im Feld Typ wird ein String nach folgendem Muster erwartet. Abhängig vom Typ werden dem Nutzer typspezifische Eingabeelemente angeboten.

Primitive

  • Number
  • Boolean
  • String

Selbstdefinierte

  • Integer (Ganzzahlen)
  • Float (entspricht Number)
  • Coordinate (Auswahl über Karte)
  • Extent (Auswahl über Karte)
  • LayerId (Auswahl über Dropdown)
  • RestId (Auswahl über Dropdown)
  • StyleId (Auswahl über Dropdown)

Enums

  • enum[1,2,3]
    • Hier wären 1, 2, und 3 Optionen für den Enum
    • Alle primitiven Typen sind erlaubt

Objektreferenzen

Für einen String x, der nicht den bisher definierten Typen entspricht, wird angenommen, dass ein Objekt gemeint ist.

  • Ist ein Querverweis wie im Kapitel "Referenzstruktur" definiert, wird dieser hier aufgelöst
  • Sonst wird für x in ε angenommen, dass ε.x existiert

Arrays

Jeder bisherige Typ kann mit einem [] gesuffixed werden, sodass eine beliebige Anzahl dieser Elemente gesetzt werden kann.

Verorderung

Wenn es mehrere Typen für ein Feld gibt, können diese mit "/" getrennt werden. Dem User werden dann Radio-Buttons zur Verfügung gestellt, um sein Eingabeelement zu wählen.