Startseite Docs Projekt Archiv MD-Curcuma Lib | Anleitung MD-Curcuma Lib | Anleitung Zuletzt aktualisiert am 29. Mai 2024
11 Minuten
Auf dieser Seite MD-Curcuma MD-Curcuma kopiert und transformiert Markdown-Dateien aus Obsidian external link
zur Verwendung in Hugo external link
.
Transformers sind derzeit für die folgenden Aufgaben verfügbar:
Verfügbare Transporter:
MD_Transporter - für Markdown-Dateien CSV_Transporter - Für Dateien mit kommagetrennten Werten, bei denen jede Zeile ein Datensatz ist. Dies ist eine BookBuddy App external link
Unterstützung: CSV-Dateikonvertierung & Bild-Download. Verfügbare Markdown-Transformer:
Splittet eine Markdown-Longform in separate Dateien bei Headlines. Obsidian-Links (Bilder und Dokumente), Kopieren von Dateien im laufenden Betrieb. Latex-Formeln, Absatz und Inline. Frontmatter: Hinzufügen, Ersetzen, Zuordnen und Transformieren von Werten. Beschriftungen. Todos entfernen. TODO: Berücksichtigt Wikilinks (Querverweise). TODO: Fußnoten Endnoten-Unterstützung. Verfügbare Mappings:
Adopt Value - ein einfaches Beispiel. ArrayJoin, ArraySplit Boolesche Umkehrung Image Downloader Datum einfügen (jetzt) UUID einfügen Zeichen aus der Zeichenkette abschneiden. Du kannst eigene Transformer und Mapper erstellen. Geplante Features und Änderungen findest du in der CHANGELOG.md external link
Beschränkungen
Es läuft nur im Backend, nicht in Browsern. Wie es funktioniert# Kurz gesagt:
const my_transporter : MD_Transporter = new MD_Transporter ();
my_transporter . perform_job_from ( "../test-data-obsidian-vault/transport-config.json" , "Example-Job No.1" );
Alle Aufgaben werden in der Konfigurationsdatei transport-config.json
definiert.
Die Langfassung:
const my_transporter : MD_Transporter = new MD_Transporter ();
// Basic config
const transporter_parameter : MD_Transporter_Parameter_Type = {
readPath : "test-obsidian-vault/longform.md" ,
writePath : "test-hugo/hugo-content-2/" ,
doSubfolders : false ,
limit : 1990 ,
useCounter : false
};
// Transformer config
const parameter_images : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "![[" ,
tag_obsidian_suffix : "]]" ,
find_rule : "jpg|png" ,
replace_template : `{{ < image src="assets/images/{name_full}" > }}` ,
copy_task : {
source : "test-obsidian-vault/images/" ,
target : "test-hugo/hugo-content-2/assets/images/{name}/" ,
simulate :false
}
};
// Hinzufügen des Transformators zur Pipeline
my_transporter . addTransformer ( new MD_ObsidianLink_Transformer ( parameter_images ));
// execute the job
my_transporter . perform_job ( transporter_parameter );
Schaue im Ordner test
nach laufenden Beispielen.
Ich habe eine Reihe von Transformationen im Angebot, aber du kannst auch eigene zur Pipeline hinzufügen.
Das Problem:
Ich habe ein langes Markdown-Dokument, das mit dem Obsidian Longform Plugin external link
erstellt wurde. Ich würde es gerne auf meiner Website zur Verfügung stellen. Die Website ist mit Hugo external link
erstellt. Zu diesem Zweck soll das Longform-Dokument in mehrere Einzeldokumente aufgeteilt werden.Die Aufteilung soll auf Überschriften erfolgen: z.B.: #
Der Text der Überschrift wird als Dateiname verwendet. Wenn nötig, mit vorangestellter Zahl, ggf. Sonderzeichen ersetzen url conform Hugo-kompatibel sein.Die einzelnen Dokumente sollten mit Frontmatter ausgestattet sein. Autogenerierte uuids Bestimmte Inhalte müssen eventuell transformiert werden. Code-Beispiel# var splitter_frontmatter : MD_Frontmatter = new MD_Frontmatter ( `---
title: "{title}"
description: ""
url: /docs/{url_prefix}-{url}/
date: {date}
draft: false
images: []
menu:
docs:
parent: "docs-9602b15bad02600f3883f55e2ade6b81"
identifier: "{url_prefix}-{url}-{uuid}"
weight: {weight}
toc: true
--- \ n \ n` );
const parameter_splitter : MD_Splitter_Parameter_Type = {
pattern : "# " ,
cleanName : "# " ,
limit : 100 ,
hasCounter : false ,
weightBase : 8000 ,
url_prefix : "test-prefix" ,
doRemoveHeadline : true ,
frontmatter_filename : "" , // ./test/frontmatter-template.md
frontmatter : splitter_frontmatter
};
my_transporter . addTransformer ( new MD_Splitter_Transformer ( parameter_splitter ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_Splitter_Transformer" ,
"transformer_parameter" : {
"pattern" : "# " ,
"cleanName" : "# " ,
"limit" : 100 ,
"hasCounter" : false ,
"weightBase" : 8000 ,
"url_prefix" : "test-prefix" ,
"doRemoveHeadline" : true ,
"frontmatter_filename" : "./test-data-obsidian-vault/frontmatter-template.md" ,
"frontmatter" : {}
}
2. Obsidian-Links# Bilder aus
Hugo-Ersatz:
{{ < image folder="images/my-image.jpg" > }}
oder Dokumente von
Hugo-Ersatz:
{{ < button href="/getthis.php?id=docu-1" name="download docu-1 (pdf)" > }}
Please think away the blank space in {{ <
and > }}
. I had to add this in the documentation so that Hugo would not render it as code.
Code-Beispiel# const parameter_images : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "![[" ,
tag_obsidian_suffix : "]]" ,
find_rule : "jpg|png" ,
replace_template : `{{ < image src="assets/images//{name}/{name_full}" > }}` ,
copy_task : {
source : "test-data-obsidian-vault/images/" ,
target : "test-data-hugo/hugo-content-2/assets/images/{name}/" ,
simulate :simulate_copy_job
}
};
const parameter_docs : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "![[" ,
tag_obsidian_suffix : "]]" ,
find_rule : "pdf|ods|odp" ,
replace_template : `{{ < button href="/getthis.php?id={name}" name="download {name} ({name_suffix})" > }}` ,
copy_task : {
source : "test-data-obsidian-vault/attachments/" ,
target : "test-data-hugo/hugo-content-2/static/downloads/" ,
simulate :simulate_copy_job
}
};
my_transporter . addTransformer ( new MD_ObsidianLink_Transformer ( parameter_images ));
my_transporter . addTransformer ( new MD_ObsidianLink_Transformer ( parameter_docs ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_ObsidianLink_Transformer" ,
"transformer_parameter" : {
"tag_obsidian_prefix" : "![[" ,
"tag_obsidian_suffix" : "]]" ,
"find_rule" : "jpg|png" ,
"replace_template" : "{{ < lightbox-docs id=\"0\" folder=\"images/{name}/*\" showImageNr=0 > }}" ,
"copy_task" :{
"source" : "test-data-obsidian-vault/images/" ,
"target" : "test-data-hugo/hugo-content-1/assets/images/{name}/" ,
"simulate" : false
}
}
} ,
{
"transformer_class_name" : "MD_ObsidianLink_Transformer" ,
"transformer_parameter" : {
"tag_obsidian_prefix" : "![[" ,
"tag_obsidian_suffix" : "]]" ,
"find_rule" : "pdf|ods|odp" ,
"replace_template" : "{{ < button href=\"/getthis.php?id={name}\" name=\"download {name} ({name_suffix})\" > }}" ,
"copy_task" :{
"source" : "test-data-obsidian-vault/attachments/" ,
"target" : "test-data-hugo/hugo-content-1/static/downloads/" ,
"simulate" : false
}
}
} ,
Bilder und Dokumente nebenbei kopieren# Ein Simulationsmodus gibt Auskunft darüber, welche Bilder und Anhänge wo erwartet werde.
Umwandlung von Latexformeln vom Obsidian-Stil in den Hugo-Stil.
https://www.makeuseof.com/write-mathematical-notation-obsidian/ https://getdoks.org/docs/built-ins/math/ von diesem:
$$
W_{kin} = \frac { m \cdot v^ 2 }{ 2 } = \frac {p^ 2 }{ 2 \cdot m}
$$
This is an inline $ { ( x + y ) }^ 2 $ Formula.
in das:
```math { .text-center}
$$
W_{kin} = \frac { m \cdot v^ 2 }{ 2 } = \frac {p^ 2 }{ 2 \cdot m}
$$
```
Dass ist eine inline {{ < math > }} $ { ( x + y ) }^ 2 $ {{ < /math > }} Formel.
Code-Beispiel#
var parameter_math_paragraph : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "$$" ,
tag_obsidian_suffix : "$$" ,
find_rule : "" ,
replace_template : "```math {.text-center}\n$$\n {content} \n$$\n```\n" ,
};
var parameter_math_inline : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "$" ,
tag_obsidian_suffix : "$" ,
find_rule : "" ,
replace_template : "{{ < math > }} ${content}$ {{ < /math > }}" ,
};
my_transporter . addTransformer ( new MD_MathParagraph_Transformer ( parameter_math_paragraph ));
my_transporter . addTransformer ( new MD_MathInline_Transformer ( parameter_math_inline ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_MathParagraph_Transformer" ,
"transformer_parameter" : {
"tag_obsidian_prefix" : "$$" ,
"tag_obsidian_suffix" : "$$" ,
"find_rule" : "" ,
"replace_template" : "```math {.text-center}\n$$\n {content} \n$$\n```\n"
}
} ,
{
"transformer_class_name" : "MD_MathInline_Transformer" ,
"transformer_parameter" : {
"tag_obsidian_prefix" : "$" ,
"tag_obsidian_suffix" : "$" ,
"find_rule" : "" ,
"replace_template" : "{{ < math > }} ${content}$ {{ < /math > }}"
}
} ,
Was geschieht hier?
Fügt Frontmatter zu einer einzelnen Datei (oder einem Stapel von einzelnen Dateien) hinzu.
Das Frontmatter aus der Quelldatei wird entfernt. Stattdessen wird das neue Frontmatter-Template eingefügt. Nehmen Sie einige Frontmatter-Felder aus der Quelldatei,und schreibe sie in ein anderes Feld in der Zieldatei. Der Wert kann auf dem Weg konvertiert werden. Ist noch nicht ganz fertig.
Code-Beispiel# var document_frontmatter : MD_Frontmatter_Template =
new MD_Frontmatter_Template ( `---
title: ""
description: ""
summary: ""
date:
draft:
weight:
categories: []
tags: []
contributors: []
pinned: false
homepage: false
seo:
title: ""
description: ""
canonical: ""
noindex: false
--- \ n \ n` );
// use one of the predefined tasks like so:
// task: new MD_Mapping_BooleanInverse_Task()
// or write a custom task:
const map_1 : MD_Mapping = {
mapping_items : [{
source_property_name : "doPublish" ,
target_poperty_name : "draft" ,
}],
task : {
perform : function ( mapping_properties : MD_MappingTask_Properties ) : boolean {
let target_value = ! mapping_properties . source_value ;
return target_value ;
},
},
};
// An example task that inserts the current date. Source Property isnt used here.
const map_2 : MD_Mapping = {
mapping_items : [{
source_property_name : "" ,
target_poperty_name : "date" ,
}],
task : {
perform : function ( mapping_properties : MD_MappingTask_Properties ) : any {
return new Date (). toJSON (). slice ( 0 , 16 );
},
},
};
const parameter_frontmatter : MD_Frontmatter_Parameter_Type = {
frontmatter : document_frontmatter ,
frontmatter_filename : "" ,
mappings : [ map_1 , map_2 ],
};
my_transporter . addTransformer ( new MD_Frontmatter_Transformer ( parameter_frontmatter ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_Frontmatter_Transformer" ,
"transformer_parameter" : {
"frontmatter_filename" : "./test-data-obsidian-vault/frontmatter-template.md" ,
"frontmatter" : {}
}
} ,
5. Callouts# Obsidian-Callouts in Hugo-Callout-Shortcodes umwandeln.
Obsidian-Callouts https://help.obsidian.md/Editing+und+Formatierung/Callouts Hugo-Callouts https://getdoks.org/docs/basics/shortcodes/ Auch hier bin ich noch nicht ganz fertig.
von
> [!info] Custom Title
> Here's a callout block.
> It supports **Markdown**, [[Internal link|Wikilinks]], and [[Embed files|embeds]]!
> ![[Engelbart.jpg]]
note abstract(summary, tldr) info todo tip (hint, important) success(check, done) question (help, faq) warning (caution, attention) failure (fail, missing) danger (error) bug example quote (cite) in
{{ < callout context="tip" title="Custom Title" icon="outline/rocket" > }}
Here's a callout block.
{{ < /callout > }}
context=“tip” title=“Tip” icon=“outline/rocket” context=“note” title=“Note” icon=“outline/info-circle” context=“caution” title=“Caution” icon=“filled/alert-triangle” context=“danger” title=“Danger” icon=“filled/alert-octagon” Code-Beispiel#
var parameter_callouts : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "> [!" ,
tag_obsidian_suffix : "]" ,
find_rule : "" ,
replace_template : `{{ < callout context="{context}" title="{title}" icon="{icon}" > }} {content} {{ < /callout > }}` ,
};
my_transporter . addTransformer ( new MD_Callout_Transformer ( parameter_callouts ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_Callout_Transformer" ,
"transformer_parameter" : {
"tag_obsidian_prefix" : "> [!" ,
"tag_obsidian_suffix" : "]" ,
"find_rule" : "" ,
"replace_template" : "{{ < callout context=\"{context}\" title=\"{title}\" icon=\"{icon}\" > }} {content} {{ < /callout > }}"
}
} ,
6. Remove TODOs# Entferne zum Beispiel die folgenden Absätze:
- [ ] #TODO Some serious stuff to do...
Code-Beispiel# const parameter_remove : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "" ,
tag_obsidian_suffix : "" ,
find_rule : "- [ ] #TODO " ,
replace_template : `` ,
};
my_transporter . addTransformer ( new MD_RemoveTODOS_Transformer ( parameter_remove ));
Beispiel JSON für die config Datei# {
"transformer_class_name" : "MD_RemoveTODOS_Transformer" ,
"transformer_parameter" : {
"find_rule" : "- [ ] #TODO " ,
"replace_template" : ""
}
} ,
7. Wikilinks / Cross-References# Das ist noch nicht fertig.
8. BookBuddy-App, CSV Support# Die BookBuddy App external link
exportiert ihren Inhalt als csv-Datei. Ich möchte die Daten in Hugo verwenden. Dazu konvertiere ich die csv nach json und lade die ebenfalls exportierten Bilder von der URL herunter. Die Eigenschaft Cover_Image
speichert den lokalen Pfad zum Bild für Hugo.
let image_download_mapping_props : MD_ImageDownloader_MappingType = {
image_target_folder : "test-data-hugo/hugo-content-4/assets/images/" ,
image_hugo_path : "images/" ,
filename_property_name : "UUID" , // not used by now
simulate : false
};
const image_download_mapping : MD_Mapping = {
source_property_name : "Uploaded_Image_URL" ,
target_poperty_name : "Cover_Image" ,
task : new MD_ImageDownloader_Mapping ( image_download_mapping_props ),
};
const csv_transporter_parameter : CSV_Transporter_Parameter_Type = {
readPath : "test-data-obsidian-vault/attachments/bookbuddy-export.csv" ,
writePath : "test-data-hugo/hugo-content-4/data/bookbuddy-export.json" ,
csvSeparator : ',' ,
mappings : [ image_download_mapping ],
};
CSV_Transporter . transform_to_json ( csv_transporter_parameter );
Installieren und Verwenden Wo einsetzen?# Die Transport-Skripte können verwendet werden…
im Hugo-Projekt - und aus dem Obsidian Vault ziehen. in Obsidian - und in Ihr Hugo-Projekt pushen. Ich werde in naher Zukunft ein Obsidian-Plugin dafür schreiben. als alleinstehendes Projekt zwischen Obsidian und Hugo - so dass es Pulling und Pushing macht. Ich empfehle im Moment Option 3
.
Install it# Installations-Methode 1: Klonen des Repositorys# Der einfachste Weg ist, das Repository zu klonen. Du bekommst dann auch die Tests und habst damit einen guten Ausgangspunkt für die eigenen Anpassungen.
Kopieren den Link: https://github.com/cnichte/md-curcuma.git external link Öffnen VS Code Klicken auf “Git-Repository klonen”. Wähle ein Verzeichnis, in das das Ziel geklont werden soll. Das Verzeichnis md-curcuma
wird erstellt. Öffnen das Projekt in VS-Code. Im Terminal npm install
npm run build:ts
npm run test
Installations-Methode 2: neues Projekt erstellen# Eine andere Möglichkeit ist, ein leeres Projekt zu erstellen, und die Bibliothek per npm installieren…
einen Projekt-Ordner
erstellen öffne diesen Ordner, und darin… npm init
# follow the guide
npm install md-curcuma
# check typescript installation
tsc --version
eine tsconfig.json
erstellen
Wenn du die in deinem Hugo-Projekt verwendest, werden einige Ordner standardmäßig ausgeschlossen.
{
"compilerOptions" : {
"module" : "commonjs" ,
"target" : "ES5" ,
"noImplicitAny" : true ,
"removeComments" : true ,
"preserveConstEnums" : true ,
"sourceMap" : false ,
"baseUrl" : "./" ,
"rootDir" : "transport-scripts" ,
"outDir" : "transport-scripts-compiled"
},
"include" : [ "transport-scripts/**/*" ],
"exclude" : [
"assets" ,
"config" ,
"content" ,
"data" ,
"layouts" ,
"node_modules" ,
"resources" ,
"static" ,
"transport-scripts-compiled"
]
}
Update per npm# # nach Aktualisierungen suchen
npx npm-check-updates
# upgrade package.json
npx npm-check-updates -u
# or
npx npm-check-updates -u --interactive --format group
# Installiere die neuen Versionen
npm update --save
# or
npm update --save-dev
# and then
npm install
Erstellen dein Skript# Im Ordner test
findest du funktionierende Beispiele.
Erstelle zwei Ordner für dein Skripte:
transport-scripts
- enthält den Typescript-Quellcodetransport-scripts-compiled
Der erste ist für den Typescript-Quellcode, der zweite für das Java-Skript, das später daraus kompiliert wird.
Kompilieren zu Javascript# Um die Handhabung zu vereinfachen, füge die folgenden Build-Befehle in die package.json
ein:
Das ts-Suffix in build:ts
trennt es von den golag-Skripten, die ich build:go
nenne, aber natürlich kann man sie nennen, wie man will.
"build:ts" : "rm -rf transport-scripts-compiled && tsc" ,
"watch:ts" : "tsc --watch" ,
Die Beispiel-Markdown-Dateien erstellen# Erstellen den Ordner test
, und im Ordner testErstellen den Ordner test/obsidian-fault/
- und lege deine longform.md hinein. Ordner test/hugo-content/
erstellen - das ist das Zielverzeichnis Ein Transport-Skript erstellen# Erstelle im Ordner transport-scripts
die Datei split-my-longform.ts
und fügen Sie den Code ein:
const my_transporter : MD_Transporter = new MD_Transporter ();
my_transporter . perform_job_from ( "../test-data/transport-config.json" , "Example-Job No.1" );
Das ist alles, was du brauchst, wenn du eine Konfigurationsdatei und eine Frontmatter-Datei bereitstellst.
Du kannst es auch auf die andere - die lange - Weise machen:
import {
MD_Frontmatter_Template ,
MD_ObsidianLink_Transformer ,
MD_RemoveTODOS_Transformer ,
MD_Math_Transformer ,
MD_Splitter_Parameter_Type ,
MD_Transformer_Parameter_Type ,
} from "md-curcuma" ;
import {
MD_Transporter ,
MD_Transporter_Parameter_Type ,
} from "md-curcuma" ;
const my_transporter : MD_Transporter = new MD_Transporter ();
// Basic instructions for MD_Transporter
const transporter_parameter : MD_Transporter_Parameter_Type = {
readPath : "test/obsidian-vault/longform.md" ,
writePath : "test/hugo-content-2/" ,
doSubfolders : false ,
limit : 1990 ,
useCounter : false
};
const simulate_copy_job = true ;
// The tasks to operate. If you add no tasks you have a simple copy job.
// Placeholders in the Transformer-Template
// as pre defined in MD_Transformer_TemplateValues_Type in the md-transformer module:
// {name_full} {name_suffix} {name}
const parameter_images : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "![[" ,
tag_obsidian_suffix : "]]" ,
find_rule : "jpg|png" ,
replace_template : `{{ < image src="assets/images/{name_full}" > }}` ,
copy_task : {
source : "test/obsidian-vault/images/" ,
target : "test/hugo-content-2/assets/images/{name}/" ,
simulate :simulate_copy_job
}
};
const parameter_docs : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "![[" ,
tag_obsidian_suffix : "]]" ,
find_rule : "pdf|ods|odp" ,
replace_template : `{{ < button href="/getthis.php?id={name}" name="download {name} ({name_suffix})" > }}` ,
copy_task : {
source : "test/obsidian-vault/attachments/" ,
target : "test/hugo-content-2/static/downloads/" ,
simulate :simulate_copy_job
}
};
var parameter_math : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "$$" ,
tag_obsidian_suffix : "$$" ,
find_rule : "" ,
replace_template : "```math {.text-center}\n$$\n {content} \n$$\n```\n" ,
};
const parameter_remove : MD_Transformer_Parameter_Type = {
tag_obsidian_prefix : "" , // TODO optional?
tag_obsidian_suffix : "" , // TODO optional?
find_rule : "- [ ] #TODO " ,
replace_template : `` ,
};
// The Markdown-Splitter Task needs a Frontmatter
// The placeholders result from the definition of MD_Frontmatter_Type in md-frontmatter
// A file definition in frontmatter_filename, overwrites frontmatter Property
var splitter_frontmatter : MD_Frontmatter = new MD_Frontmatter ( `---
title: "{title}"
description: ""
url: /docs/{url_prefix}-{url}/
date: {date}
draft: false
images: []
menu:
docs:
parent: "docs-9602b15bad02600f3883f55e2ade6b81"
identifier: "{url_prefix}-{url}-{uuid}"
weight: {weight}
toc: true
--- \ n \ n` );
const parameter_splitter : MD_Splitter_Parameter_Type = {
pattern : "# " ,
cleanName : "# " ,
limit : 100 ,
hasCounter : false ,
weightBase : 8000 ,
url_prefix : "test-prefix" ,
doRemoveHeadline : true ,
frontmatter_filename : "" , // ./test/frontmatter-template.md
frontmatter : splitter_frontmatter
};
my_transporter . addTransformer ( new MD_ObsidianLink_Transformer ( parameter_images ));
my_transporter . addTransformer ( new MD_ObsidianLink_Transformer ( parameter_docs ));
my_transporter . addTransformer ( new MD_RemoveTODOS_Transformer ( parameter_remove ));
my_transporter . addTransformer ( new MD_Math_Transformer ( parameter_math ));
my_transporter . addTransformer ( new MD_Splitter_Transformer ( parameter_splitter ));
my_transporter . perform_job ( transporter_parameter );
Kompiliere das Transport-Skript# Die Skripte können dann wie folgt verwendet werden. Im Terminal:
npm run build:ts
- die Bibliothek bauen.npm run watch:ts
- Überwachen und kompilieren.Die kompilierten Dateien landen im Verzeichnis transport-scripts-compiled
.
Das Skript in VSCode ausführen# In Visual Studio Code
Gehe das Verzeichnis transport-scripts-compiled
.
Auf die kompilierte .js
Datei
Rechtsklick mit der Maus -> Menü-Eingabe Run Code
Schau in den Ordner test
, um das Ergebnis zu überprüfen.
Beobachte die Konsolenausgabe auf der Registerkarte Ausgabe
.
import { MD_Transporter_Parameter_Type } from "md-curcuma" ;
import { MD_Transformer_AbstractBase } from "md-curcuma" ;
interface MD_Custom_Parameter_Type {
custom_property : string ;
}
class MD_Custom_Transformer extends MD_Transformer_AbstractBase {
private parameter : MD_Custom_Parameter_Type ;
constructor ( parameter : MD_Custom_Parameter_Type ){
super ();
this . parameter = parameter ;
}
public set_job_parameter ( job_paramter : MD_Transporter_Parameter_Type ) : void {
super . set_job_parameter ( job_paramter ); // this is a hack
}
public transform ( file_content : MD_FileContent_Interface , index : number ) : MD_FileContent_Interface {
const body_array = file_content . body_array ;
let item = file_content . body_array [ index ];
// file_content.frontmatter;
// file_content.frontmatter_attributes;
if ( body_array [ index ]. indexOf ( this . parameter . find_rule ) >= 0 ) {
console . log ( `Transform before: ${ body_array [ index ] } ` );
body_array . splice ( index , 1 );
file_content . index = file_content . index - 1 ;
console . log ( `Transform after: ${ body_array [ index ] } ` );
}
return file_content ;
}
}
Du kannst derzeit keine benutzerdefinierten Transformer aus einer Konfigurationsdatei heraus aufrufen, du musst sie im Skript instanziieren.
Du kannst die Ausführung aus einer Konfigurationsdatei, und das Hinzufügen von benutzerdefinierten Transformer-Klassen wie folgt kombinieren:
const my_transporter : MD_Transporter = new MD_Transporter ();
my_transporter . addTransformer ( new MyCustomTransformer ( custom_params ));
my_transporter . perform_job_from ( "../test-data/transport-config.json" , "Example-Job No.1" );