mirror of
https://github.com/JimLiu/baoyu-skills.git
synced 2026-07-12 05:51:44 +08:00
Use npm packages for shared skill code (#136)
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { execFile } from "node:child_process";
|
||||
import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import process from "node:process";
|
||||
import test from "node:test";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { promisify } from "node:util";
|
||||
|
||||
const execFileAsync = promisify(execFile);
|
||||
const SCRIPT_PATH = path.resolve(
|
||||
path.dirname(fileURLToPath(import.meta.url)),
|
||||
"verify-shared-package-deps.mjs",
|
||||
);
|
||||
|
||||
async function makeTempDir(prefix: string): Promise<string> {
|
||||
return fs.mkdtemp(path.join(os.tmpdir(), prefix));
|
||||
}
|
||||
|
||||
async function writeFile(filePath: string, contents = ""): Promise<void> {
|
||||
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
||||
await fs.writeFile(filePath, contents);
|
||||
}
|
||||
|
||||
async function writeJson(filePath: string, value: unknown): Promise<void> {
|
||||
await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
||||
}
|
||||
|
||||
async function runVerifier(root: string): Promise<void> {
|
||||
await execFileAsync(process.execPath, [SCRIPT_PATH, "--repo-root", root]);
|
||||
}
|
||||
|
||||
test("verify-shared-package-deps accepts npm semver dependencies", async (t) => {
|
||||
const root = await makeTempDir("baoyu-verify-shared-ok-");
|
||||
t.after(() => fs.rm(root, { recursive: true, force: true }));
|
||||
|
||||
await writeJson(path.join(root, "packages", "baoyu-md", "package.json"), {
|
||||
name: "baoyu-md",
|
||||
version: "1.2.3",
|
||||
});
|
||||
await writeJson(path.join(root, "skills", "demo", "scripts", "package.json"), {
|
||||
dependencies: {
|
||||
"baoyu-md": "^1.2.3",
|
||||
},
|
||||
});
|
||||
|
||||
await assert.doesNotReject(() => runVerifier(root));
|
||||
});
|
||||
|
||||
test("verify-shared-package-deps rejects file dependencies and vendored workspace packages", async (t) => {
|
||||
const root = await makeTempDir("baoyu-verify-shared-bad-");
|
||||
t.after(() => fs.rm(root, { recursive: true, force: true }));
|
||||
|
||||
await writeJson(path.join(root, "packages", "baoyu-md", "package.json"), {
|
||||
name: "baoyu-md",
|
||||
version: "1.2.3",
|
||||
});
|
||||
await writeJson(path.join(root, "skills", "demo", "scripts", "package.json"), {
|
||||
dependencies: {
|
||||
"baoyu-md": "file:./vendor/baoyu-md",
|
||||
},
|
||||
});
|
||||
await writeFile(path.join(root, "skills", "demo", "scripts", "vendor", "baoyu-md", "index.ts"));
|
||||
|
||||
await assert.rejects(
|
||||
() => runVerifier(root),
|
||||
(error: unknown) => {
|
||||
assert(error instanceof Error);
|
||||
assert.match(error.message, /must use \^1\.2\.3/);
|
||||
assert.match(error.message, /remove vendored workspace package/);
|
||||
return true;
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user