Initial Commit

This commit is contained in:
2026-05-27 23:29:53 +01:00
commit fbc70f96e6
10000 changed files with 1102152 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
import { readdirSync, readFileSync } from "node:fs";
import { join } from "node:path";
import { describe, expect, it } from "@suaveplan/testing/runner";
const PKG_ROOT = join(__dirname, "..");
const packageJson = JSON.parse(
readFileSync(join(PKG_ROOT, "package.json"), "utf-8")
) as {
sideEffects: unknown;
bin: Record<string, string>;
exports: Record<string, unknown>;
};
const DOCUMENTED_SUBPATHS = [
"error-codes",
"telemetry",
"types",
"schemas",
"fs",
"runner",
"config",
"templates",
"icons",
"generator",
"prompts",
"cli",
] as const;
describe("package shape", () => {
it("package.json declares the documented subpath exports", {
timeout: 5000,
}, () => {
const subpathKeys = Object.keys(packageJson.exports)
.filter((k) => k.startsWith("./") && k !== "./package.json")
.map((k) => k.replace(/^\.\//, ""));
for (const sub of DOCUMENTED_SUBPATHS) {
expect(subpathKeys).toContain(sub);
}
});
it("bin entry resolves to the published binary", { timeout: 5000 }, () => {
expect(packageJson.bin["suaveplan-electrobun"]).toBe(
"./dist/bin/suaveplan-electrobun.js"
);
});
it("sideEffects is false", { timeout: 5000 }, () => {
expect(packageJson.sideEffects).toBe(false);
});
it("every feature folder has a matching subpath export", {
timeout: 5000,
}, () => {
const srcDir = join(PKG_ROOT, "src");
const featureFolders = readdirSync(srcDir, {
withFileTypes: true,
})
.filter((e) => e.isDirectory() && e.name !== "bin")
.map((e) => e.name)
.sort();
const subpathKeys = Object.keys(packageJson.exports)
.filter((k) => k.startsWith("./") && k !== "./package.json")
.map((k) => k.replace(/^\.\//, ""));
for (const folder of featureFolders) {
expect(subpathKeys).toContain(folder);
}
});
});

View File

@@ -0,0 +1,34 @@
/**
* Test setup for @suaveplan/electrobun.
*
* Registers a real in-memory OpenTelemetry MeterProvider BEFORE source
* modules import so the global meter resolved on first use binds to it.
* The electrobun package is server-tier and uses node:fs / node:child_process —
* no DOM shims required.
*/
import { metrics } from "@opentelemetry/api";
import {
AggregationTemporality,
InMemoryMetricExporter,
MeterProvider,
PeriodicExportingMetricReader,
} from "@opentelemetry/sdk-metrics";
export const testInMemoryMetricExporter = new InMemoryMetricExporter(
AggregationTemporality.CUMULATIVE
);
const reader = new PeriodicExportingMetricReader({
exporter: testInMemoryMetricExporter,
exportIntervalMillis: 60_000,
});
export const testMeterProvider = new MeterProvider({ readers: [reader] });
metrics.setGlobalMeterProvider(testMeterProvider);
export async function flushTestMetrics() {
await testMeterProvider.forceFlush();
const collected = testInMemoryMetricExporter.getMetrics();
testInMemoryMetricExporter.reset();
return collected;
}