diff --git a/packages/workflow-runtime/src/bundle/index.ts b/packages/workflow-runtime/src/bundle/index.ts index 6a2f60d..fde4867 100644 --- a/packages/workflow-runtime/src/bundle/index.ts +++ b/packages/workflow-runtime/src/bundle/index.ts @@ -1,2 +1 @@ export type { WorkflowDescriptor, WorkflowRoleDescriptor, WorkflowRoleSchema } from "./types.js"; -export { validateWorkflowDescriptor } from "./workflow-descriptor.js"; diff --git a/packages/workflow-runtime/src/bundle/workflow-descriptor.ts b/packages/workflow-runtime/src/bundle/workflow-descriptor.ts deleted file mode 100644 index e21851b..0000000 --- a/packages/workflow-runtime/src/bundle/workflow-descriptor.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { err, ok, type Result } from "../util/index.js"; - -import type { WorkflowDescriptor, WorkflowRoleDescriptor, WorkflowRoleSchema } from "./types.js"; - -export function validateWorkflowDescriptor(value: unknown): Result { - if (value === null || typeof value !== "object" || Array.isArray(value)) { - return err("descriptor must be a non-array object"); - } - const root = value as Record; - const description = root.description; - if (typeof description !== "string") { - return err("descriptor.description must be a string"); - } - const rolesRaw = root.roles; - if (rolesRaw === null || typeof rolesRaw !== "object" || Array.isArray(rolesRaw)) { - return err("descriptor.roles must be a non-array object"); - } - - const roles: Record = {}; - for (const [roleName, specUnknown] of Object.entries(rolesRaw)) { - if (specUnknown === null || typeof specUnknown !== "object" || Array.isArray(specUnknown)) { - return err(`descriptor.roles.${roleName} must be a non-array object`); - } - const spec = specUnknown as Record; - const roleDesc = spec.description; - if (typeof roleDesc !== "string") { - return err(`descriptor.roles.${roleName}.description must be a string`); - } - const schema = spec.schema; - if (schema === null || typeof schema !== "object" || Array.isArray(schema)) { - return err(`descriptor.roles.${roleName}.schema must be a non-array object`); - } - roles[roleName] = { - description: roleDesc, - schema: schema as WorkflowRoleSchema, - }; - } - - return ok({ description, roles }); -} diff --git a/packages/workflow-runtime/src/index.ts b/packages/workflow-runtime/src/index.ts index 2416179..317c61b 100644 --- a/packages/workflow-runtime/src/index.ts +++ b/packages/workflow-runtime/src/index.ts @@ -3,7 +3,6 @@ export type { WorkflowRoleDescriptor, WorkflowRoleSchema, } from "./bundle/types.js"; -export { validateWorkflowDescriptor } from "./bundle/workflow-descriptor.js"; export type { CasStore } from "./cas/index.js"; export { createWorkflow } from "./engine/index.js"; export type { ExtractFn } from "./extract/index.js"; diff --git a/packages/workflow/src/bundle/workflow-descriptor.ts b/packages/workflow/src/bundle/workflow-descriptor.ts index fb586fa..e21851b 100644 --- a/packages/workflow/src/bundle/workflow-descriptor.ts +++ b/packages/workflow/src/bundle/workflow-descriptor.ts @@ -1 +1,40 @@ -export { validateWorkflowDescriptor } from "@uncaged/workflow-runtime"; +import { err, ok, type Result } from "../util/index.js"; + +import type { WorkflowDescriptor, WorkflowRoleDescriptor, WorkflowRoleSchema } from "./types.js"; + +export function validateWorkflowDescriptor(value: unknown): Result { + if (value === null || typeof value !== "object" || Array.isArray(value)) { + return err("descriptor must be a non-array object"); + } + const root = value as Record; + const description = root.description; + if (typeof description !== "string") { + return err("descriptor.description must be a string"); + } + const rolesRaw = root.roles; + if (rolesRaw === null || typeof rolesRaw !== "object" || Array.isArray(rolesRaw)) { + return err("descriptor.roles must be a non-array object"); + } + + const roles: Record = {}; + for (const [roleName, specUnknown] of Object.entries(rolesRaw)) { + if (specUnknown === null || typeof specUnknown !== "object" || Array.isArray(specUnknown)) { + return err(`descriptor.roles.${roleName} must be a non-array object`); + } + const spec = specUnknown as Record; + const roleDesc = spec.description; + if (typeof roleDesc !== "string") { + return err(`descriptor.roles.${roleName}.description must be a string`); + } + const schema = spec.schema; + if (schema === null || typeof schema !== "object" || Array.isArray(schema)) { + return err(`descriptor.roles.${roleName}.schema must be a non-array object`); + } + roles[roleName] = { + description: roleDesc, + schema: schema as WorkflowRoleSchema, + }; + } + + return ok({ description, roles }); +}