@ic-reactor/candid 3.0.11-beta.1 → 3.0.11-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/visitor/returns/index.d.ts +2 -1
- package/dist/visitor/returns/index.d.ts.map +1 -1
- package/dist/visitor/returns/index.js +52 -12
- package/dist/visitor/returns/index.js.map +1 -1
- package/package.json +2 -2
- package/src/visitor/returns/index.test.ts +162 -0
- package/src/visitor/returns/index.ts +60 -13
|
@@ -5,6 +5,7 @@ import type { BaseActor, FunctionName } from "@ic-reactor/core";
|
|
|
5
5
|
export * from "./types";
|
|
6
6
|
export declare class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<string, ResultNode | MethodMeta<A> | ServiceMeta<A>> {
|
|
7
7
|
private codec;
|
|
8
|
+
private recCache;
|
|
8
9
|
private getCodec;
|
|
9
10
|
visitService(t: IDL.ServiceClass): ServiceMeta<A>;
|
|
10
11
|
visitFunc(t: IDL.FuncClass, functionName: FunctionName<A>): MethodMeta<A>;
|
|
@@ -13,7 +14,7 @@ export declare class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<strin
|
|
|
13
14
|
visitTuple<T extends IDL.Type[]>(_t: IDL.TupleClass<T>, components: IDL.Type[], label: string): ResultNode<"tuple">;
|
|
14
15
|
visitOpt<T>(_t: IDL.OptClass<T>, ty: IDL.Type<T>, label: string): ResultNode<"optional">;
|
|
15
16
|
visitVec<T>(_t: IDL.VecClass<T>, ty: IDL.Type<T>, label: string): ResultNode<"vector"> | ResultNode<"blob">;
|
|
16
|
-
visitRec<T>(
|
|
17
|
+
visitRec<T>(t: IDL.RecClass<T>, ty: IDL.ConstructType<T>, label: string): ResultNode<"recursive">;
|
|
17
18
|
visitPrincipal(t: IDL.PrincipalClass, label: string): ResultNode<"principal">;
|
|
18
19
|
visitText(t: IDL.TextClass, label: string): ResultNode<"text">;
|
|
19
20
|
visitBool(t: IDL.BoolClass, label: string): ResultNode<"boolean">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,EACV,UAAU,EAGV,UAAU,EACV,WAAW,EAIZ,MAAM,SAAS,CAAA;AAEhB,cAAc,SAAS,CAAA;AAGvB,OAAO,KAAK,EAEV,SAAS,EACT,YAAY,EAEb,MAAM,kBAAkB,CAAA;AAEzB,cAAc,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,11 +16,16 @@ function primitiveNode(type, label, candidType, displayType, codec, extras = {})
|
|
|
16
16
|
displayType,
|
|
17
17
|
...extras,
|
|
18
18
|
resolve(data) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
try {
|
|
20
|
+
return {
|
|
21
|
+
...node,
|
|
22
|
+
value: codec.decode(data),
|
|
23
|
+
raw: data,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
throw new Error(`Failed to decode field "${label}" of type ${type} (${candidType}) with data: ${JSON.stringify(data)}. Error: ${e}`);
|
|
28
|
+
}
|
|
24
29
|
},
|
|
25
30
|
};
|
|
26
31
|
return node;
|
|
@@ -37,9 +42,25 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
37
42
|
writable: true,
|
|
38
43
|
value: new DisplayCodecVisitor()
|
|
39
44
|
});
|
|
45
|
+
Object.defineProperty(this, "recCache", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: new Map()
|
|
50
|
+
});
|
|
40
51
|
}
|
|
41
52
|
getCodec(t) {
|
|
42
|
-
|
|
53
|
+
const codec = t.accept(this.codec, null);
|
|
54
|
+
return {
|
|
55
|
+
decode: (v) => {
|
|
56
|
+
try {
|
|
57
|
+
return typeof codec?.decode === "function" ? codec.decode(v) : v;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return v;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
43
64
|
}
|
|
44
65
|
// ══════════════════════════════════════════════════════════════════════════
|
|
45
66
|
// Service & Function
|
|
@@ -90,8 +111,15 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
90
111
|
}
|
|
91
112
|
const recordData = data;
|
|
92
113
|
const resolvedFields = {};
|
|
114
|
+
let index = 0;
|
|
93
115
|
for (const [key, field] of Object.entries(fields)) {
|
|
94
|
-
|
|
116
|
+
// Try named key first, then try numeric index (for tuples/indexed records)
|
|
117
|
+
const value = recordData[key] !== undefined ? recordData[key] : recordData[index];
|
|
118
|
+
if (!field || typeof field.resolve !== "function") {
|
|
119
|
+
throw new Error(`Field "${key}" in record "${label}" is not a valid ResultNode. Got: ${JSON.stringify(field)}`);
|
|
120
|
+
}
|
|
121
|
+
resolvedFields[key] = field.resolve(value);
|
|
122
|
+
index++;
|
|
95
123
|
}
|
|
96
124
|
return { ...node, fields: resolvedFields, raw: data };
|
|
97
125
|
},
|
|
@@ -115,10 +143,11 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
115
143
|
throw new Error(`Expected variant for field ${label}, but got ${data}`);
|
|
116
144
|
}
|
|
117
145
|
const variantData = data;
|
|
118
|
-
|
|
146
|
+
// Support both raw { Selected: value } and transformed { _type: 'Selected', Selected: value }
|
|
147
|
+
const selected = variantData._type || Object.keys(variantData)[0];
|
|
119
148
|
const optionNode = selectedOption[selected];
|
|
120
149
|
if (!optionNode) {
|
|
121
|
-
throw new Error(`Option ${selected} not found in variant`);
|
|
150
|
+
throw new Error(`Option ${selected} not found in variant ${label}. Available options: ${Object.keys(selectedOption).join(", ")}`);
|
|
122
151
|
}
|
|
123
152
|
return {
|
|
124
153
|
...node,
|
|
@@ -161,8 +190,15 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
161
190
|
displayType: "nullable",
|
|
162
191
|
value: null, // null until resolved
|
|
163
192
|
resolve(data) {
|
|
164
|
-
|
|
165
|
-
|
|
193
|
+
// If data is an array (raw format [T] or []), unwrap it.
|
|
194
|
+
// Otherwise, use data directly (already transformed or null/undefined).
|
|
195
|
+
const resolved = Array.isArray(data)
|
|
196
|
+
? data.length > 0
|
|
197
|
+
? inner.resolve(data[0])
|
|
198
|
+
: null
|
|
199
|
+
: data !== null && data !== undefined
|
|
200
|
+
? inner.resolve(data)
|
|
201
|
+
: null;
|
|
166
202
|
return { ...node, value: resolved, raw: data };
|
|
167
203
|
},
|
|
168
204
|
};
|
|
@@ -217,7 +253,10 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
217
253
|
};
|
|
218
254
|
return node;
|
|
219
255
|
}
|
|
220
|
-
visitRec(
|
|
256
|
+
visitRec(t, ty, label) {
|
|
257
|
+
if (this.recCache.has(t)) {
|
|
258
|
+
return this.recCache.get(t);
|
|
259
|
+
}
|
|
221
260
|
const self = this;
|
|
222
261
|
// Lazy extraction to prevent infinite loops
|
|
223
262
|
let innerSchema = null;
|
|
@@ -232,6 +271,7 @@ export class ResultFieldVisitor extends IDL.Visitor {
|
|
|
232
271
|
return { ...node, inner: getInner().resolve(data), raw: data };
|
|
233
272
|
},
|
|
234
273
|
};
|
|
274
|
+
this.recCache.set(t, node);
|
|
235
275
|
return node;
|
|
236
276
|
}
|
|
237
277
|
// ══════════════════════════════════════════════════════════════════════════
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/visitor/returns/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/visitor/returns/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic-reactor/candid",
|
|
3
|
-
"version": "3.0.11-beta.
|
|
3
|
+
"version": "3.0.11-beta.2",
|
|
4
4
|
"description": "IC Reactor Candid Adapter - Fetch and parse Candid definitions from Internet Computer canisters",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@noble/hashes": "^1.8.0",
|
|
46
|
-
"@ic-reactor/core": "^3.0.11-beta.
|
|
46
|
+
"@ic-reactor/core": "^3.0.11-beta.2"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"@icp-sdk/core": "^5.0.0"
|
|
@@ -1974,3 +1974,165 @@ describe("ResultFieldVisitor", () => {
|
|
|
1974
1974
|
})
|
|
1975
1975
|
})
|
|
1976
1976
|
})
|
|
1977
|
+
|
|
1978
|
+
describe("ResultFieldVisitor Reproduction - User reported issue", () => {
|
|
1979
|
+
const visitor = new ResultFieldVisitor()
|
|
1980
|
+
|
|
1981
|
+
it("should handle record data provided as an array (tuple-like) even if IDL has names", () => {
|
|
1982
|
+
const Rule = IDL.Variant({
|
|
1983
|
+
Quorum: IDL.Record({
|
|
1984
|
+
min_approved: IDL.Nat,
|
|
1985
|
+
approvers: IDL.Variant({ Group: IDL.Vec(IDL.Principal) }),
|
|
1986
|
+
}),
|
|
1987
|
+
})
|
|
1988
|
+
|
|
1989
|
+
const NamedRule = IDL.Record({
|
|
1990
|
+
description: IDL.Opt(IDL.Text),
|
|
1991
|
+
id: IDL.Text,
|
|
1992
|
+
name: IDL.Text,
|
|
1993
|
+
rule: Rule,
|
|
1994
|
+
})
|
|
1995
|
+
|
|
1996
|
+
const field = visitor.visitRecord(
|
|
1997
|
+
NamedRule,
|
|
1998
|
+
[
|
|
1999
|
+
["description", IDL.Opt(IDL.Text)],
|
|
2000
|
+
["id", IDL.Text],
|
|
2001
|
+
["name", IDL.Text],
|
|
2002
|
+
["rule", Rule],
|
|
2003
|
+
],
|
|
2004
|
+
"NamedRule"
|
|
2005
|
+
)
|
|
2006
|
+
|
|
2007
|
+
// Simulate lib-agent returning an array for a named record
|
|
2008
|
+
const arrayData = [
|
|
2009
|
+
[], // description (empty opt)
|
|
2010
|
+
"1253ec41-ef1d-4317-bb82-2366fc34f37c", // id
|
|
2011
|
+
"Admin approval", // name
|
|
2012
|
+
{ Quorum: { min_approved: BigInt(1), approvers: { Group: [] } } }, // rule
|
|
2013
|
+
]
|
|
2014
|
+
|
|
2015
|
+
// Before the fix, this would throw because arrayData["rule"] is undefined
|
|
2016
|
+
const resolved = field.resolve(arrayData)
|
|
2017
|
+
|
|
2018
|
+
expect(resolved.fields.id.value).toBe(
|
|
2019
|
+
"1253ec41-ef1d-4317-bb82-2366fc34f37c"
|
|
2020
|
+
)
|
|
2021
|
+
expect(resolved.fields.name.value).toBe("Admin approval")
|
|
2022
|
+
|
|
2023
|
+
const ruleNode = resolved.fields.rule as VariantNode
|
|
2024
|
+
expect(ruleNode.selected).toBe("Quorum")
|
|
2025
|
+
})
|
|
2026
|
+
|
|
2027
|
+
it("should handle already transformed variant data with _type", () => {
|
|
2028
|
+
const Rule = IDL.Variant({
|
|
2029
|
+
Quorum: IDL.Text,
|
|
2030
|
+
})
|
|
2031
|
+
|
|
2032
|
+
const field = visitor.visitVariant(Rule, [["Quorum", IDL.Text]], "Rule")
|
|
2033
|
+
|
|
2034
|
+
// Data transformed by DisplayCodecVisitor
|
|
2035
|
+
const transformedData = {
|
|
2036
|
+
_type: "Quorum",
|
|
2037
|
+
Quorum: "some text",
|
|
2038
|
+
}
|
|
2039
|
+
|
|
2040
|
+
// Before the fix, this would throw because transformedData["Quorum"] is there but
|
|
2041
|
+
// Object.keys(transformedData)[0] is "_type"
|
|
2042
|
+
const resolved = field.resolve(transformedData)
|
|
2043
|
+
|
|
2044
|
+
expect(resolved.selected).toBe("Quorum")
|
|
2045
|
+
expect(resolved.selectedOption.value).toBe("some text")
|
|
2046
|
+
})
|
|
2047
|
+
|
|
2048
|
+
it("should handle already transformed optional data (unwrapped)", () => {
|
|
2049
|
+
const OptText = IDL.Opt(IDL.Text)
|
|
2050
|
+
const field = visitor.visitOpt(OptText, IDL.Text, "maybeText")
|
|
2051
|
+
|
|
2052
|
+
// Raw format is [value]
|
|
2053
|
+
expect(field.resolve(["hello"]).value?.value).toBe("hello")
|
|
2054
|
+
expect(field.resolve([]).value).toBeNull()
|
|
2055
|
+
|
|
2056
|
+
// Transformed format is just the value
|
|
2057
|
+
expect(field.resolve("hello").value?.value).toBe("hello")
|
|
2058
|
+
expect(field.resolve(null).value).toBeNull()
|
|
2059
|
+
expect(field.resolve(undefined).value).toBeNull()
|
|
2060
|
+
})
|
|
2061
|
+
|
|
2062
|
+
it("should provide a better error message when an option is missing", () => {
|
|
2063
|
+
const MyVariant = IDL.Variant({ A: IDL.Null, B: IDL.Null })
|
|
2064
|
+
const field = visitor.visitVariant(
|
|
2065
|
+
MyVariant,
|
|
2066
|
+
[
|
|
2067
|
+
["A", IDL.Null],
|
|
2068
|
+
["B", IDL.Null],
|
|
2069
|
+
],
|
|
2070
|
+
"MyVariant"
|
|
2071
|
+
)
|
|
2072
|
+
|
|
2073
|
+
expect(() => field.resolve({ C: null })).toThrow(
|
|
2074
|
+
/Option C not found in variant MyVariant. Available options: A, B/
|
|
2075
|
+
)
|
|
2076
|
+
})
|
|
2077
|
+
|
|
2078
|
+
describe("Recursive types", () => {
|
|
2079
|
+
it("should handle recursive variant with transformed data", () => {
|
|
2080
|
+
const Rule = IDL.Rec()
|
|
2081
|
+
const RuleType = IDL.Variant({
|
|
2082
|
+
Quorum: IDL.Record({
|
|
2083
|
+
min_approved: IDL.Nat,
|
|
2084
|
+
}),
|
|
2085
|
+
Nested: Rule,
|
|
2086
|
+
})
|
|
2087
|
+
Rule.fill(RuleType)
|
|
2088
|
+
|
|
2089
|
+
const field = visitor.visitRec(Rule, RuleType, "rule")
|
|
2090
|
+
|
|
2091
|
+
// Transformed data (using _type)
|
|
2092
|
+
const transformedData = {
|
|
2093
|
+
_type: "Quorum",
|
|
2094
|
+
Quorum: {
|
|
2095
|
+
min_approved: "1",
|
|
2096
|
+
},
|
|
2097
|
+
}
|
|
2098
|
+
|
|
2099
|
+
// This should work because Rule.resolve calls Variant.resolve
|
|
2100
|
+
const resolved = field.resolve(transformedData) as RecursiveNode
|
|
2101
|
+
const variantNode = resolved.inner as VariantNode
|
|
2102
|
+
|
|
2103
|
+
expect(variantNode.selected).toBe("Quorum")
|
|
2104
|
+
expect(variantNode.selectedOption.type).toBe("record")
|
|
2105
|
+
})
|
|
2106
|
+
|
|
2107
|
+
it("should handle deeply nested recursive variant with transformed data", () => {
|
|
2108
|
+
const Rule = IDL.Rec()
|
|
2109
|
+
const RuleType = IDL.Variant({
|
|
2110
|
+
Quorum: IDL.Record({
|
|
2111
|
+
min_approved: IDL.Nat,
|
|
2112
|
+
}),
|
|
2113
|
+
Nested: Rule,
|
|
2114
|
+
})
|
|
2115
|
+
Rule.fill(RuleType)
|
|
2116
|
+
|
|
2117
|
+
const field = visitor.visitRec(Rule, RuleType, "rule")
|
|
2118
|
+
|
|
2119
|
+
const transformedData = {
|
|
2120
|
+
_type: "Nested",
|
|
2121
|
+
Nested: {
|
|
2122
|
+
_type: "Quorum",
|
|
2123
|
+
Quorum: {
|
|
2124
|
+
min_approved: "2",
|
|
2125
|
+
},
|
|
2126
|
+
},
|
|
2127
|
+
}
|
|
2128
|
+
|
|
2129
|
+
const resolved = field.resolve(transformedData) as RecursiveNode
|
|
2130
|
+
const variantNode = resolved.inner as VariantNode
|
|
2131
|
+
expect(variantNode.selected).toBe("Nested")
|
|
2132
|
+
|
|
2133
|
+
const nestedResolved = variantNode.selectedOption as RecursiveNode
|
|
2134
|
+
const innerVariant = nestedResolved.inner as VariantNode
|
|
2135
|
+
expect(innerVariant.selected).toBe("Quorum")
|
|
2136
|
+
})
|
|
2137
|
+
})
|
|
2138
|
+
})
|
|
@@ -48,11 +48,17 @@ function primitiveNode<T extends NodeType>(
|
|
|
48
48
|
displayType,
|
|
49
49
|
...extras,
|
|
50
50
|
resolve(data: unknown): ResolvedNode<T> {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
try {
|
|
52
|
+
return {
|
|
53
|
+
...node,
|
|
54
|
+
value: codec.decode(data),
|
|
55
|
+
raw: data,
|
|
56
|
+
} as unknown as ResolvedNode<T>
|
|
57
|
+
} catch (e) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Failed to decode field "${label}" of type ${type} (${candidType}) with data: ${JSON.stringify(data)}. Error: ${e}`
|
|
60
|
+
)
|
|
61
|
+
}
|
|
56
62
|
},
|
|
57
63
|
} as unknown as ResultNode<T>
|
|
58
64
|
return node
|
|
@@ -68,8 +74,19 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
68
74
|
> {
|
|
69
75
|
private codec = new DisplayCodecVisitor()
|
|
70
76
|
|
|
77
|
+
private recCache = new Map<IDL.RecClass<any>, ResultNode<"recursive">>()
|
|
78
|
+
|
|
71
79
|
private getCodec(t: IDL.Type): Codec {
|
|
72
|
-
|
|
80
|
+
const codec = t.accept(this.codec, null) as any
|
|
81
|
+
return {
|
|
82
|
+
decode: (v: unknown) => {
|
|
83
|
+
try {
|
|
84
|
+
return typeof codec?.decode === "function" ? codec.decode(v) : v
|
|
85
|
+
} catch {
|
|
86
|
+
return v
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
}
|
|
73
90
|
}
|
|
74
91
|
|
|
75
92
|
// ══════════════════════════════════════════════════════════════════════════
|
|
@@ -138,8 +155,20 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
138
155
|
}
|
|
139
156
|
const recordData = data as Record<string, unknown>
|
|
140
157
|
const resolvedFields: Record<string, ResolvedNode> = {}
|
|
158
|
+
let index = 0
|
|
141
159
|
for (const [key, field] of Object.entries(fields)) {
|
|
142
|
-
|
|
160
|
+
// Try named key first, then try numeric index (for tuples/indexed records)
|
|
161
|
+
const value =
|
|
162
|
+
recordData[key] !== undefined ? recordData[key] : recordData[index]
|
|
163
|
+
|
|
164
|
+
if (!field || typeof field.resolve !== "function") {
|
|
165
|
+
throw new Error(
|
|
166
|
+
`Field "${key}" in record "${label}" is not a valid ResultNode. Got: ${JSON.stringify(field)}`
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
resolvedFields[key] = field.resolve(value)
|
|
171
|
+
index++
|
|
143
172
|
}
|
|
144
173
|
return { ...node, fields: resolvedFields, raw: data }
|
|
145
174
|
},
|
|
@@ -170,10 +199,15 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
170
199
|
)
|
|
171
200
|
}
|
|
172
201
|
const variantData = data as Record<string, unknown>
|
|
173
|
-
|
|
202
|
+
// Support both raw { Selected: value } and transformed { _type: 'Selected', Selected: value }
|
|
203
|
+
const selected =
|
|
204
|
+
(variantData._type as string) || Object.keys(variantData)[0]
|
|
174
205
|
const optionNode = selectedOption[selected]
|
|
206
|
+
|
|
175
207
|
if (!optionNode) {
|
|
176
|
-
throw new Error(
|
|
208
|
+
throw new Error(
|
|
209
|
+
`Option ${selected} not found in variant ${label}. Available options: ${Object.keys(selectedOption).join(", ")}`
|
|
210
|
+
)
|
|
177
211
|
}
|
|
178
212
|
return {
|
|
179
213
|
...node,
|
|
@@ -230,9 +264,16 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
230
264
|
displayType: "nullable",
|
|
231
265
|
value: null, // null until resolved
|
|
232
266
|
resolve(data: unknown): ResolvedNode<"optional"> {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
267
|
+
// If data is an array (raw format [T] or []), unwrap it.
|
|
268
|
+
// Otherwise, use data directly (already transformed or null/undefined).
|
|
269
|
+
const resolved = Array.isArray(data)
|
|
270
|
+
? data.length > 0
|
|
271
|
+
? inner.resolve(data[0])
|
|
272
|
+
: null
|
|
273
|
+
: data !== null && data !== undefined
|
|
274
|
+
? inner.resolve(data)
|
|
275
|
+
: null
|
|
276
|
+
|
|
236
277
|
return { ...node, value: resolved, raw: data }
|
|
237
278
|
},
|
|
238
279
|
}
|
|
@@ -300,10 +341,14 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
300
341
|
}
|
|
301
342
|
|
|
302
343
|
public visitRec<T>(
|
|
303
|
-
|
|
344
|
+
t: IDL.RecClass<T>,
|
|
304
345
|
ty: IDL.ConstructType<T>,
|
|
305
346
|
label: string
|
|
306
347
|
): ResultNode<"recursive"> {
|
|
348
|
+
if (this.recCache.has(t)) {
|
|
349
|
+
return this.recCache.get(t)! as ResultNode<"recursive">
|
|
350
|
+
}
|
|
351
|
+
|
|
307
352
|
const self = this
|
|
308
353
|
// Lazy extraction to prevent infinite loops
|
|
309
354
|
let innerSchema: ResultNode | null = null
|
|
@@ -320,6 +365,8 @@ export class ResultFieldVisitor<A = BaseActor> extends IDL.Visitor<
|
|
|
320
365
|
return { ...node, inner: getInner().resolve(data), raw: data }
|
|
321
366
|
},
|
|
322
367
|
}
|
|
368
|
+
|
|
369
|
+
this.recCache.set(t, node)
|
|
323
370
|
return node
|
|
324
371
|
}
|
|
325
372
|
|