mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-18 07:27:28 +00:00
refactor(frontmatter): share openclaw manifest parsing
This commit is contained in:
@@ -12,6 +12,9 @@ import {
|
||||
normalizeStringList,
|
||||
parseFrontmatterBool,
|
||||
resolveOpenClawManifestBlock,
|
||||
resolveOpenClawManifestInstall,
|
||||
resolveOpenClawManifestOs,
|
||||
resolveOpenClawManifestRequires,
|
||||
} from "../../shared/frontmatter.js";
|
||||
|
||||
export function parseFrontmatter(content: string): ParsedSkillFrontmatter {
|
||||
@@ -83,15 +86,9 @@ export function resolveOpenClawMetadata(
|
||||
if (!metadataObj) {
|
||||
return undefined;
|
||||
}
|
||||
const requiresRaw =
|
||||
typeof metadataObj.requires === "object" && metadataObj.requires !== null
|
||||
? (metadataObj.requires as Record<string, unknown>)
|
||||
: undefined;
|
||||
const installRaw = Array.isArray(metadataObj.install) ? (metadataObj.install as unknown[]) : [];
|
||||
const install = installRaw
|
||||
.map((entry) => parseInstallSpec(entry))
|
||||
.filter((entry): entry is SkillInstallSpec => Boolean(entry));
|
||||
const osRaw = normalizeStringList(metadataObj.os);
|
||||
const requires = resolveOpenClawManifestRequires(metadataObj);
|
||||
const install = resolveOpenClawManifestInstall(metadataObj, parseInstallSpec);
|
||||
const osRaw = resolveOpenClawManifestOs(metadataObj);
|
||||
return {
|
||||
always: typeof metadataObj.always === "boolean" ? metadataObj.always : undefined,
|
||||
emoji: typeof metadataObj.emoji === "string" ? metadataObj.emoji : undefined,
|
||||
@@ -99,14 +96,7 @@ export function resolveOpenClawMetadata(
|
||||
skillKey: typeof metadataObj.skillKey === "string" ? metadataObj.skillKey : undefined,
|
||||
primaryEnv: typeof metadataObj.primaryEnv === "string" ? metadataObj.primaryEnv : undefined,
|
||||
os: osRaw.length > 0 ? osRaw : undefined,
|
||||
requires: requiresRaw
|
||||
? {
|
||||
bins: normalizeStringList(requiresRaw.bins),
|
||||
anyBins: normalizeStringList(requiresRaw.anyBins),
|
||||
env: normalizeStringList(requiresRaw.env),
|
||||
config: normalizeStringList(requiresRaw.config),
|
||||
}
|
||||
: undefined,
|
||||
requires: requires,
|
||||
install: install.length > 0 ? install : undefined,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@ import {
|
||||
normalizeStringList,
|
||||
parseFrontmatterBool,
|
||||
resolveOpenClawManifestBlock,
|
||||
resolveOpenClawManifestInstall,
|
||||
resolveOpenClawManifestOs,
|
||||
resolveOpenClawManifestRequires,
|
||||
} from "../shared/frontmatter.js";
|
||||
|
||||
export function parseFrontmatter(content: string): ParsedHookFrontmatter {
|
||||
@@ -60,15 +63,9 @@ export function resolveOpenClawMetadata(
|
||||
if (!metadataObj) {
|
||||
return undefined;
|
||||
}
|
||||
const requiresRaw =
|
||||
typeof metadataObj.requires === "object" && metadataObj.requires !== null
|
||||
? (metadataObj.requires as Record<string, unknown>)
|
||||
: undefined;
|
||||
const installRaw = Array.isArray(metadataObj.install) ? (metadataObj.install as unknown[]) : [];
|
||||
const install = installRaw
|
||||
.map((entry) => parseInstallSpec(entry))
|
||||
.filter((entry): entry is HookInstallSpec => Boolean(entry));
|
||||
const osRaw = normalizeStringList(metadataObj.os);
|
||||
const requires = resolveOpenClawManifestRequires(metadataObj);
|
||||
const install = resolveOpenClawManifestInstall(metadataObj, parseInstallSpec);
|
||||
const osRaw = resolveOpenClawManifestOs(metadataObj);
|
||||
const eventsRaw = normalizeStringList(metadataObj.events);
|
||||
return {
|
||||
always: typeof metadataObj.always === "boolean" ? metadataObj.always : undefined,
|
||||
@@ -78,14 +75,7 @@ export function resolveOpenClawMetadata(
|
||||
export: typeof metadataObj.export === "string" ? metadataObj.export : undefined,
|
||||
os: osRaw.length > 0 ? osRaw : undefined,
|
||||
events: eventsRaw.length > 0 ? eventsRaw : [],
|
||||
requires: requiresRaw
|
||||
? {
|
||||
bins: normalizeStringList(requiresRaw.bins),
|
||||
anyBins: normalizeStringList(requiresRaw.anyBins),
|
||||
env: normalizeStringList(requiresRaw.env),
|
||||
config: normalizeStringList(requiresRaw.config),
|
||||
}
|
||||
: undefined,
|
||||
requires: requires,
|
||||
install: install.length > 0 ? install : undefined,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -58,3 +58,42 @@ export function resolveOpenClawManifestBlock(params: {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export type OpenClawManifestRequires = {
|
||||
bins: string[];
|
||||
anyBins: string[];
|
||||
env: string[];
|
||||
config: string[];
|
||||
};
|
||||
|
||||
export function resolveOpenClawManifestRequires(
|
||||
metadataObj: Record<string, unknown>,
|
||||
): OpenClawManifestRequires | undefined {
|
||||
const requiresRaw =
|
||||
typeof metadataObj.requires === "object" && metadataObj.requires !== null
|
||||
? (metadataObj.requires as Record<string, unknown>)
|
||||
: undefined;
|
||||
if (!requiresRaw) {
|
||||
return undefined;
|
||||
}
|
||||
return {
|
||||
bins: normalizeStringList(requiresRaw.bins),
|
||||
anyBins: normalizeStringList(requiresRaw.anyBins),
|
||||
env: normalizeStringList(requiresRaw.env),
|
||||
config: normalizeStringList(requiresRaw.config),
|
||||
};
|
||||
}
|
||||
|
||||
export function resolveOpenClawManifestInstall<T>(
|
||||
metadataObj: Record<string, unknown>,
|
||||
parseInstallSpec: (input: unknown) => T | undefined,
|
||||
): T[] {
|
||||
const installRaw = Array.isArray(metadataObj.install) ? (metadataObj.install as unknown[]) : [];
|
||||
return installRaw
|
||||
.map((entry) => parseInstallSpec(entry))
|
||||
.filter((entry): entry is T => Boolean(entry));
|
||||
}
|
||||
|
||||
export function resolveOpenClawManifestOs(metadataObj: Record<string, unknown>): string[] {
|
||||
return normalizeStringList(metadataObj.os);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user