Bun har fra og med versjon 1.1.43 som kom nå i januar fått innebygget støtte for Amazon S3 Object Storage. Og i versjon 1.2 som kommer om ikke lenge skal det populære JavaScript-kjøremiljøet også få en innebygget PostgreSQL-klient.
Innebygget støtte for ting mange ofte bruker høres kanskje forlokkende ut, men Buns valg om å inkludere leverandørspesifikke API-er som S3 blir nå kritisert av flere, skriver DevClass.
Nyheten om S3-støtte først ble delt av Bun før jul, og da uttrykte utviklere bekymring for eventuelle konsekvenser om leverandørene skulle endre sine API-er:
Cute - I do generally like the API design, but vendor specific APIs in a runtime aren’t a great idea.
— James Ross (@CherryJimbo) December 29, 2024
What about when vendors do breaking changes? Or there’s some nuance between implementations that needs an update?
Now my vendor API is locked to a specific runtime version. https://t.co/5jpmlZ0pmk
Forsvarer avgjørelsen
Bun-sjef Jarred Sumner gikk imidlertid ut og forsvarte avgjørelsen:
– Hvilke "breaking changes"? S3 er mer enn 15 år gammelt. Det er nok gamle S3-klienter og S3-kompatible API-er at "breaking changes" er i praksis umulig å levere, skrev Sumner på X, som et svar på meldingen over.
Til dette svarer én at S3 legger til ny funksjonalitet hele tiden, og at det å oppgradere for å bruke ny funksjonalitet i S3 ikke bør ha noe å gjøre med hvilken versjon av hvilket kjøremiljø man bruker.
Sumner svarer at Bun ikke vil være en "early adopter" for ny funksjonalitet.
– Men det er ingenting som hindrer deg fra å bruke et tredjepartsbibliotek i slike situasjoner, sier Sumner.
Her er et eksempel fra dokumentasjonen på hvordan Bun-brukere nå kan bruke S3 direkte uten å trenge noen tredjepartsbiblioteker:
import { s3, write, S3Client } from "bun";
// Bun.s3 reads environment variables for credentials
// file() returns a lazy reference to a file on S3
const metadata = s3.file("123.json");
// Download from S3 as JSON
const data = await metadata.json();
// Upload to S3
await write(metadata, JSON.stringify({ name: "John", age: 30 }));
// Presign a URL (synchronous - no network request needed)
const url = metadata.presign({
acl: "public-read",
expiresIn: 60 * 60 * 24, // 1 day
});
// Delete the file
await metadata.delete();
PostgreSQL rett rundt hjørnet
Bun har allerede innebygget støtte for Sqlite for lokale databaser, men som nevnt skal også PostgreSQL (Bun.sql) komme innebygget snart.
Da kan du importere PostgreSQL-klienten slik:
import { sql } from "bun";
import { expect } from "bun:test";
const result = await sql`select 1 as x`;
expect(result).toEqual([{ x: 1 }]);
– I løpet av det siste året har ett av mine sideprosjekter vært en rask, innebygget PostgreSQL-klient for Bun, og den er nesten ferdig, skriver Jarred Sumner i lanseringsbloggposten for versojn 1.1.43.
Bun.sql kommer i versjon 1.2, som skal være bare noen dager unna, og kan prøves ut i canary-versjonen av Bun.