MCPcopy Create free account
hub / github.com/ShipSecAI/studio / coercePrimitiveValue

Function coercePrimitiveValue

worker/src/temporal/input-resolver.ts:22–91  ·  view source on GitHub ↗
(type: string | undefined, value: unknown)

Source from the content-addressed store, hash-verified

20}
21
22function coercePrimitiveValue(type: string | undefined, value: unknown): CoercionResult {
23 if (value === undefined || value === null) {
24 return { ok: true, value };
25 }
26
27 switch (type) {
28 case 'text': {
29 if (typeof value === 'string') {
30 return { ok: true, value };
31 }
32 if (typeof value === 'number' || typeof value === 'boolean') {
33 return { ok: true, value: value.toString() };
34 }
35 return { ok: false, error: `Cannot coerce ${typeof value} to text` };
36 }
37 case 'number': {
38 if (typeof value === 'number' && Number.isFinite(value)) {
39 return { ok: true, value };
40 }
41 if (typeof value === 'string') {
42 const parsed = Number(value);
43 if (!Number.isNaN(parsed)) {
44 return { ok: true, value: parsed };
45 }
46 return { ok: false, error: `Cannot parse "${value}" as number` };
47 }
48 return { ok: false, error: `Cannot coerce ${typeof value} to number` };
49 }
50 case 'boolean': {
51 if (typeof value === 'boolean') {
52 return { ok: true, value };
53 }
54 if (typeof value === 'string') {
55 const normalized = value.trim().toLowerCase();
56 if (normalized === 'true') {
57 return { ok: true, value: true };
58 }
59 if (normalized === 'false') {
60 return { ok: true, value: false };
61 }
62 return { ok: false, error: `Cannot parse "${value}" as boolean` };
63 }
64 return { ok: false, error: `Cannot coerce ${typeof value} to boolean` };
65 }
66 case 'secret': {
67 if (typeof value === 'string') {
68 return { ok: true, value };
69 }
70 if (typeof value === 'object') {
71 try {
72 return { ok: true, value: JSON.stringify(value) };
73 } catch (error) {
74 return {
75 ok: false,
76 error:
77 error instanceof Error
78 ? `Secret value is not JSON-serializable: ${error.message}`
79 : 'Secret value is not JSON-serializable',

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected