mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-04 01:34:06 +00:00
Extract shared normalization/coercion helpers into private @openclaw/normalization-core workspace package while preserving existing plugin SDK helper subpaths.\n\nAlso keeps direct normalization-core imports internal, wires UI/build/loader resolution, and replaces the slow PR network CodeQL lane with a fast added-line boundary scan while retaining full CodeQL for scheduled/manual runs.\n\nVerification: local moved tests, plugin SDK boundary tests, extension loader tests, agents-support shard, UI build/test, build artifacts, lint, workflow guards, autoreview, and GitHub CI passed on PR head 963d893715.
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { isRecord } from "@openclaw/normalization-core/record-coerce";
|
|
import { z } from "zod";
|
|
import type { PluginInstallRecord } from "./types.plugins.js";
|
|
import { PluginInstallRecordShape } from "./zod-schema.installs.js";
|
|
|
|
const PluginInstallRecordsSchema = z.record(
|
|
z.string(),
|
|
z.object(PluginInstallRecordShape).passthrough(),
|
|
);
|
|
|
|
function pruneEmptyPluginsObject(plugins: Record<string, unknown>): unknown {
|
|
const { installs: _installs, ...rest } = plugins;
|
|
return Object.keys(rest).length === 0 ? undefined : rest;
|
|
}
|
|
|
|
export function extractShippedPluginInstallConfigRecords(
|
|
config: unknown,
|
|
): Record<string, PluginInstallRecord> {
|
|
if (!isRecord(config) || !isRecord(config.plugins)) {
|
|
return {};
|
|
}
|
|
const parsed = PluginInstallRecordsSchema.safeParse(config.plugins.installs);
|
|
return parsed.success
|
|
? (structuredClone(parsed.data) as Record<string, PluginInstallRecord>)
|
|
: {};
|
|
}
|
|
|
|
export function stripShippedPluginInstallConfigRecords(config: unknown): unknown {
|
|
if (!isRecord(config) || !isRecord(config.plugins) || !("installs" in config.plugins)) {
|
|
return config;
|
|
}
|
|
const plugins = pruneEmptyPluginsObject(config.plugins);
|
|
const { plugins: _plugins, ...rest } = config;
|
|
return plugins === undefined ? rest : { ...rest, plugins };
|
|
}
|