
























@@ -1,7 +1,5 @@
1-import { spawnSync } from "node:child_process";
21import fs from "node:fs";
32import path from "node:path";
4-import * as tar from "tar";
53import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
64import { safePathSegmentHashed } from "../infra/install-safe-path.js";
75import { resolveOpenClawPackageRootSync } from "../infra/openclaw-root.js";
@@ -16,6 +14,7 @@ import {
1614PLUGIN_INSTALL_ERROR_CODE,
1715resolvePluginInstallDir,
1816} from "./install.js";
17+import { packToArchive } from "./test-helpers/archive-fixtures.js";
1918import { createSuiteTempRootTracker } from "./test-helpers/fs-fixtures.js";
20192120vi.mock("../process/exec.js", () => ({
@@ -92,56 +91,6 @@ function ensureSuiteFixtureRoot() {
9291return suiteFixtureRoot;
9392}
949395-async function packToArchive({
96- pkgDir,
97- outDir,
98- outName,
99- flatRoot,
100-}: {
101-pkgDir: string;
102-outDir: string;
103-outName: string;
104-flatRoot?: boolean;
105-}) {
106-const dest = path.join(outDir, outName);
107-fs.rmSync(dest, { force: true });
108-const entries = flatRoot ? listFlatRootArchiveEntries(pkgDir) : [path.basename(pkgDir)];
109-await tar.c(
110-{
111-gzip: true,
112-file: dest,
113-cwd: flatRoot ? pkgDir : path.dirname(pkgDir),
114-},
115-entries,
116-);
117-return dest;
118-}
119-120-function listFlatRootArchiveEntries(pkgDir: string): string[] {
121-const externalEntries = listFindFlatRootArchiveEntries(pkgDir);
122-if (externalEntries) {
123-return externalEntries;
124-}
125-return fs.readdirSync(pkgDir).toSorted((left, right) => left.localeCompare(right));
126-}
127-128-function listFindFlatRootArchiveEntries(pkgDir: string): string[] | null {
129-const result = spawnSync("find", [pkgDir, "-mindepth", "1", "-maxdepth", "1"], {
130-encoding: "utf8",
131-maxBuffer: 1024 * 1024,
132-stdio: ["ignore", "pipe", "ignore"],
133-});
134-if (result.status !== 0) {
135-return null;
136-}
137-return result.stdout
138-.split("\n")
139-.map((line) => line.trim())
140-.filter((line) => line.length > 0)
141-.map((entry) => path.basename(entry))
142-.toSorted((left, right) => left.localeCompare(right));
143-}
144-14594function getArchiveFixturePath(params: {
14695cacheKey: string;
14796outName: string;
@@ -682,21 +631,6 @@ beforeEach(() => {
682631});
683632684633describe("installPluginFromArchive", () => {
685-it("lists flat archive entries without scanning package dirs in-process", () => {
686-const pkgDir = suiteTempRootTracker.makeTempDir();
687-fs.writeFileSync(path.join(pkgDir, "package.json"), "{}\n");
688-fs.mkdirSync(path.join(pkgDir, "dist"));
689-fs.writeFileSync(path.join(pkgDir, "dist", "index.js"), "export {}\n");
690-691-const readDir = vi.spyOn(fs, "readdirSync");
692-try {
693-expect(listFlatRootArchiveEntries(pkgDir)).toEqual(["dist", "package.json"]);
694-expect(readDir).not.toHaveBeenCalled();
695-} finally {
696-readDir.mockRestore();
697-}
698-});
699-700634it("installs package archive runtime dependencies", async () => {
701635const result = await installArchivePackageAndReturnResult({
702636packageJson: {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。