Add HyperFrames skills (from heygen-com/hyperframes, Apache-2.0)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FXVsD1DgdzZLiPuwtKzMSY
This commit is contained in:
300 files changed
+49175
No files matched your search
@@ -0,0 +1,73 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import { dirname, join } from "node:path";
|
||||
import { test } from "node:test";
|
||||
import { optedOut } from "./telemetry.mjs";
|
||||
|
||||
// optedOut() reads ~/.hyperframes/config.json and env vars. Point HOME at a temp
|
||||
// dir so the run never touches the real config, and pin the env opt-outs to a
|
||||
// neutral state; restore both afterwards.
|
||||
const ENV_KEYS = [
|
||||
"HOME",
|
||||
"USERPROFILE",
|
||||
"HYPERFRAMES_NO_TELEMETRY",
|
||||
"DO_NOT_TRACK",
|
||||
"CI",
|
||||
"NODE_ENV",
|
||||
];
|
||||
const savedEnv = Object.fromEntries(ENV_KEYS.map((k) => [k, process.env[k]]));
|
||||
const home = mkdtempSync(join(tmpdir(), "mu-telemetry-"));
|
||||
const configPath = join(home, ".hyperframes", "config.json");
|
||||
|
||||
function writeConfig(contents) {
|
||||
if (contents === null) {
|
||||
rmSync(configPath, { force: true });
|
||||
} else {
|
||||
mkdirSync(dirname(configPath), { recursive: true });
|
||||
writeFileSync(configPath, contents);
|
||||
}
|
||||
}
|
||||
|
||||
test.before(() => {
|
||||
for (const key of ENV_KEYS) delete process.env[key];
|
||||
process.env.HOME = process.env.USERPROFILE = home;
|
||||
});
|
||||
|
||||
test.after(() => {
|
||||
for (const key of ENV_KEYS) {
|
||||
if (savedEnv[key] === undefined) delete process.env[key];
|
||||
else process.env[key] = savedEnv[key];
|
||||
}
|
||||
rmSync(home, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
test("optedOut is false with no config and no opt-out env", () => {
|
||||
writeConfig(null);
|
||||
assert.equal(optedOut(), false);
|
||||
});
|
||||
|
||||
test("optedOut honors telemetryEnabled: false from the shared config", () => {
|
||||
writeConfig(JSON.stringify({ telemetryEnabled: false }));
|
||||
assert.equal(optedOut(), true);
|
||||
});
|
||||
|
||||
test("optedOut is false when the shared config enables telemetry", () => {
|
||||
writeConfig(JSON.stringify({ telemetryEnabled: true }));
|
||||
assert.equal(optedOut(), false);
|
||||
});
|
||||
|
||||
test("optedOut treats an unreadable shared config as no opt-out", () => {
|
||||
writeConfig("{not json");
|
||||
assert.equal(optedOut(), false);
|
||||
});
|
||||
|
||||
test("optedOut still honors the env opt-outs", () => {
|
||||
writeConfig(JSON.stringify({ telemetryEnabled: true }));
|
||||
process.env.DO_NOT_TRACK = "1";
|
||||
try {
|
||||
assert.equal(optedOut(), true);
|
||||
} finally {
|
||||
delete process.env.DO_NOT_TRACK;
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user