diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index 7dfc7bd3ea..185a3f3771 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -15,6 +15,7 @@ import { defaultWorkflowManifest, parseManifestFileOption, parseLogFileOption, + typesHandler, } from "../lib"; import { createLogger } from "./utils/createLogger"; @@ -143,7 +144,10 @@ const _run = async (options: WorkflowCommandOptions) => { fs.writeFileSync(outputFile, yaml.stringify(printableOutput, null, 2)); break; case "json": - fs.writeFileSync(outputFile, JSON.stringify(printableOutput, null, 2)); + fs.writeFileSync( + outputFile, + JSON.stringify(printableOutput, typesHandler, 2) + ); break; default: throw new Error( diff --git a/packages/cli/src/lib/helpers/workflow-validator.ts b/packages/cli/src/lib/helpers/workflow-validator.ts index b75c9fdd88..fc5252990a 100644 --- a/packages/cli/src/lib/helpers/workflow-validator.ts +++ b/packages/cli/src/lib/helpers/workflow-validator.ts @@ -14,6 +14,20 @@ export function cueExists(logger: Logger): boolean { return stdout ? stdout.startsWith("cue version ") : false; } +export const typesHandler = (_: unknown, value: unknown): unknown => { + if (value instanceof Map) { + return Array.from(value).reduce( + (obj: Record, [key, value]) => { + obj[key] = value; + return obj; + }, + {} + ); + } + + return value; +}; + export function validateOutput( output: WorkflowOutput, validateScriptPath: string, @@ -34,13 +48,11 @@ export function validateOutput( fs.writeFileSync( jsonOutput, - JSON.stringify({ data, error: error?.message }, null, 2) + JSON.stringify({ data, error: error?.message }, typesHandler, 2) ); - const { stderr } = runCommandSync( - `cue vet -d ${selector} ${validateScriptPath} ${jsonOutput}`, - logger - ); + const args = [selector, validateScriptPath, jsonOutput]; + const { stderr } = runCommandSync(`cue vet -d ${args.join(" ")}`, logger); if (fs.existsSync(jsonOutput)) { fs.unlinkSync(jsonOutput); diff --git a/packages/cli/src/lib/workflow/util.ts b/packages/cli/src/lib/workflow/util.ts index 2bbdc6df73..de2b1aa965 100644 --- a/packages/cli/src/lib/workflow/util.ts +++ b/packages/cli/src/lib/workflow/util.ts @@ -1,5 +1,6 @@ import { intlMsg } from "../intl"; import { WorkflowOutput } from "./types"; +import { typesHandler } from "../helpers"; import path from "path"; import fs from "fs"; @@ -44,7 +45,7 @@ export function printJobOutput(output: WorkflowOutput): void { console.log(`Job status: ${output.status}`); if (output.data !== undefined) { - console.log(`Data: ${JSON.stringify(output.data, null, 2)}`); + console.log(`Data: ${JSON.stringify(output.data, typesHandler, 2)}`); } if (output.error) { diff --git a/packages/test-cases/cases/cli/test/003-json-output/polywrap.test.yaml b/packages/test-cases/cases/cli/test/003-json-output/polywrap.test.yaml index 40b784b1af..1b1bc8437e 100644 --- a/packages/test-cases/cases/cli/test/003-json-output/polywrap.test.yaml +++ b/packages/test-cases/cases/cli/test/003-json-output/polywrap.test.yaml @@ -31,3 +31,12 @@ jobs: args: x: "$cases.0.data" y: "$cases.0.data" + case3: + steps: + - uri: fs/../run-test-wrapper/build + method: returnMap + args: + map: + nested_map: + Hello: 1 + Heyo: 50 \ No newline at end of file diff --git a/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts b/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts index 16433efac2..4269850151 100644 --- a/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts +++ b/packages/test-cases/cases/cli/test/run-test-wrapper/src/index.ts @@ -2,6 +2,7 @@ import { Args_add, Args_addInBox, Args_addFromEnv, + Args_returnMap, Num, Env } from "./wrap"; @@ -16,4 +17,8 @@ export function addInBox(args: Args_addInBox): Num { export function addFromEnv(args: Args_addFromEnv, env: Env): i32 { return args.x + env.value; -} \ No newline at end of file +} + +export function returnMap(args: Args_returnMap): Map> { + return args.map; +} diff --git a/packages/test-cases/cases/cli/test/run-test-wrapper/src/schema.graphql b/packages/test-cases/cases/cli/test/run-test-wrapper/src/schema.graphql index 27e7b438cb..6df61e255b 100644 --- a/packages/test-cases/cases/cli/test/run-test-wrapper/src/schema.graphql +++ b/packages/test-cases/cases/cli/test/run-test-wrapper/src/schema.graphql @@ -12,6 +12,10 @@ type Module { addFromEnv( x: Int32! ): Int32! @env(required: true) + + returnMap( + map: Map! @annotate(type: "Map!>!") + ): Map! @annotate(type: "Map!>!") } type Num {