Konvertér JSON, CSV, YAML, XML og SQL fra terminalen. Intet forlader din maskine.

Transmute er et lille command-line tool til udviklere, analytikere og alle andre, der får en datafil i det forkerte format. Peg på filen, sig hvad du vil have ud, og filtrér, sortér, join eller flatten undervejs, hvis du har brug for det.

npm i -g @mahope/transmute Andre måder at installere på
$ npx @mahope/transmute people.csv -o json
[
  {
    "name": "Alice",
    "age": 32,
    "city": "Aarhus"
  },
  {
    "name": "Bob",
    "age": 25,
    "city": "Odense"
  }
]

Tre ting, du rent faktisk ville bruge det til

Alle eksempler på siden er kørt mod den aktuelle udgave, før de blev sat ind. Outputtet er det, du får.

Lav et API-udtræk om til en CSV, der kan åbnes i et regneark

Behold de afsendte ordrer, behold tre kolonner, sortér efter beløb. Feltnavnene er dine egne; item er den aktuelle række.

$ transmute orders.json --pipe '[
  {"op":"filter","expr":"item.status === \"shipped\""},
  {"op":"pick","fields":["id","customer","total"]},
  {"op":"sort","by":"total","dir":"desc"}
]' --output csv
id,customer,total
1039,Cara Vind,2199.99
1042,Alice Hansen,1299

Fyld en database fra en CSV

Tal forbliver tal, strenge bliver quoted og escaped, tomme celler bliver til NULL. Virker til Postgres, MySQL og SQLite.

$ transmute users.csv --output sql --table users
-- Generated by Transmute
INSERT INTO "users" ("id", "name", "email") VALUES
  (1, 'Alice', '[email protected]'),
  (2, 'O''Brien', '[email protected]');

Læs en XML-fil som JSON

Værdier fra XML kommer ind som strenge, så pak dem i Number(), når du filtrerer på dem.

$ transmute users.xml --pipe '[{"op":"filter","expr":"Number(item.age) > 26"},{"op":"pick","fields":["name"]}]' -o json
[
  {
    "name": "Alice"
  }
]

Formater

Læser
JSON, CSV, YAML og XML. Formatet genkendes ud fra filendelsen eller indholdet; overstyr det med --format.
Skriver
JSON, CSV, YAML, XML, SQL INSERT-statements eller en opstillet tabel i terminalen (standard).
Værd at vide
CSV-værdier tolkes, som et regneark ville gøre det: 32 bliver et tal, true en boolean. YAML-parseren håndterer lister af flade records og simple key–value-dokumenter, ikke anchors eller flerlinjede strenge. Alt læses ind i hukommelsen, så det er bygget til filer op til nogle hundrede megabyte, ikke logfiler på flere gigabyte.

Pipeline-operationer

OperationEksempel
filter{"op":"filter","expr":"item.age > 18"}
map{"op":"map","expr":"({...item, active: true})"}
pick / omit{"op":"pick","fields":["name","email"]}
sort{"op":"sort","by":"name","dir":"asc"}
unique{"op":"unique","by":"email"}
group{"op":"group","by":"city"}
add{"op":"add","fields":{"total":"item.price * item.qty"}}
join{"op":"join","on":"id","keep":"left","with":[…]}
rename{"op":"rename","mapping":{"qty":"quantity"}}
flatten{"op":"flatten","field":"items"}
head / tail / count{"op":"head","n":5}

Kæd trin sammen

En pipeline er et JSON-array af trin, der køres i rækkefølge. Udtryk er almindelig JavaScript med den aktuelle række som item. Her joines en kurv med lagertal fra et andet datasæt, hvorefter der filtreres og tælles:

$ transmute cart.json --pipe '[
  {"op":"join","on":"sku","keep":"left","with":[{"sku":"A1","stock":42},{"sku":"B2","stock":0}]},
  {"op":"filter","expr":"item.stock > 0"},
  {"op":"count"}
]' --output json
[
  {
    "count": 1
  }
]

Vil du joine mod en hel fil i stedet for inline-rækker, splejser du den ind fra shellen: --pipe "[{\"op\":\"join\",\"on\":\"sku\",\"with\":$(cat stock.json)}]". Join-guiden (engelsk) gennemgår det.

Installér CLI'en

Kræver Node.js 18 eller nyere. Ingen andre dependencies.

$ npm i -g @mahope/transmute
$ transmute --help

Eller kør den én gang uden at installere:

$ npx @mahope/transmute data.yaml -o json

Giv den en fil uden options, så får du en hurtig tabel-preview af indholdet. Pipe fra stdin med cat fil | transmute …. Kildekode og issues på GitHub.

Desktop-app

Samme engine med et vindue omkring: indsæt eller åbn en fil, byg pipelinen trin for trin, og se resultatet opdatere sig undervejs. Bygget med Tauri, så det er en lille native binary på hver platform.

Download til macOS, Windows eller Linux

Desktop-appen bliver et engangskøb på 19 USD, intet abonnement. Betaling er ikke koblet på endnu, så indtil videre er den gratis at hente; den nuværende udgave tillader tre transformationer pr. start, indtil der indtastes en licens. CLI'en har ingen begrænsninger og er og bliver gratis under MIT-licensen.

Guides

Længere gennemgange af konkrete opgaver, hver med kommandoer du kan kopiere og det output, de giver. Guiderne er på engelsk.

Spørgsmål

Virker det offline?

Ja. Hverken CLI'en eller desktop-appen laver netværkskald. Når den er installeret, kan du trække stikket.

Hvor havner mine data?

Ingen steder. Filer læses fra disk eller stdin, transformeres i hukommelsen og skrives til stdout. Der er ingen telemetri, ingen konto og ingen server.

Hvad er licensen?

CLI'en og enginen er MIT-licenseret; kildekoden ligger på GitHub. Desktop-appen er et betalt produkt (19 USD engangs), når betalingen er sat op. Indtil da er den gratis at hente med den begrænsning, der er beskrevet ovenfor.

Hvad er forskellen på CLI'en og desktop-appen?

De deler samme engine og giver samme output. CLI'en er til scripts, cron-jobs, CI og alle, der er hjemmevante i en terminal. Desktop-appen er til at bygge en pipeline interaktivt og se resultatet, mens du gør det. Skal du kun bruge én af dem, så start med CLI'en.

Hvordan quoter jeg pipelinen på Windows?

Ærligt talt: besværligt. I Git Bash eller WSL virker formen med enkelte anførselstegn fra denne side, som den er, og det er den anbefalede vej. I PowerShell kan du bruge stop-parsing-tokenet og skrive de indre anførselstegn som \": transmute --% orders.json --pipe "[{\"op\":\"filter\",\"expr\":\"item.status === 'shipped'\"}]" -o csv. Det knækker, så snart pipelinen indeholder < eller >, fordi cmd.exe læser dem som redirects, så sammenligninger kører du bedst fra Git Bash eller WSL.

Kan jeg bruge enginen fra min egen kode?

Ja. require('@mahope/transmute') giver dig run(text, inputFormat, pipeline, outputFormat) sammen med parsers, serializers og operations. Det er én fil uden dependencies.

Hvem står bag

Transmute er udviklet af Mads Holst Jensen, udvikler og teknisk partner i Odense. Han bygger og driver software for mindre virksomheder og deres teams, og værktøjet er vokset ud af det arbejde.

Fejl og ønsker meldes i GitHub issues. Alt andet, herunder samarbejde, går via mahoje.dk.