@ic-reactor/candid 3.0.7-beta.2 → 3.0.8-beta.0
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/display-reactor.d.ts +3 -2
- package/dist/display-reactor.d.ts.map +1 -1
- package/dist/display-reactor.js +6 -0
- package/dist/display-reactor.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata-display-reactor.d.ts +73 -0
- package/dist/metadata-display-reactor.d.ts.map +1 -0
- package/dist/metadata-display-reactor.js +128 -0
- package/dist/metadata-display-reactor.js.map +1 -0
- package/dist/visitor/arguments/index.d.ts +69 -0
- package/dist/visitor/arguments/index.d.ts.map +1 -0
- package/dist/visitor/arguments/index.js +277 -0
- package/dist/visitor/arguments/index.js.map +1 -0
- package/dist/visitor/arguments/types.d.ts +92 -0
- package/dist/visitor/arguments/types.d.ts.map +1 -0
- package/dist/visitor/arguments/types.js +2 -0
- package/dist/visitor/arguments/types.js.map +1 -0
- package/dist/visitor/constants.d.ts +4 -0
- package/dist/visitor/constants.d.ts.map +1 -0
- package/dist/visitor/constants.js +61 -0
- package/dist/visitor/constants.js.map +1 -0
- package/dist/visitor/helpers.d.ts +30 -0
- package/dist/visitor/helpers.d.ts.map +1 -0
- package/dist/visitor/helpers.js +200 -0
- package/dist/visitor/helpers.js.map +1 -0
- package/dist/visitor/returns/index.d.ts +76 -0
- package/dist/visitor/returns/index.d.ts.map +1 -0
- package/dist/visitor/returns/index.js +425 -0
- package/dist/visitor/returns/index.js.map +1 -0
- package/dist/visitor/returns/types.d.ts +142 -0
- package/dist/visitor/returns/types.d.ts.map +1 -0
- package/dist/visitor/returns/types.js +2 -0
- package/dist/visitor/returns/types.js.map +1 -0
- package/dist/visitor/types.d.ts +6 -0
- package/dist/visitor/types.d.ts.map +1 -0
- package/dist/visitor/types.js +3 -0
- package/dist/visitor/types.js.map +1 -0
- package/package.json +3 -2
- package/src/display-reactor.ts +10 -2
- package/src/index.ts +1 -0
- package/src/metadata-display-reactor.ts +184 -0
- package/src/visitor/arguments/index.test.ts +882 -0
- package/src/visitor/arguments/index.ts +405 -0
- package/src/visitor/arguments/types.ts +168 -0
- package/src/visitor/constants.ts +62 -0
- package/src/visitor/helpers.ts +221 -0
- package/src/visitor/returns/index.test.ts +2027 -0
- package/src/visitor/returns/index.ts +545 -0
- package/src/visitor/returns/types.ts +271 -0
- package/src/visitor/types.ts +29 -0
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { isQuery } from "../helpers";
|
|
2
|
+
import { checkTextFormat, checkNumberFormat } from "../constants";
|
|
3
|
+
import { IDL } from "../types";
|
|
4
|
+
import { DisplayCodecVisitor } from "@ic-reactor/core";
|
|
5
|
+
export * from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* ResultFieldVisitor generates metadata for displaying method results from Candid IDL types.
|
|
8
|
+
*
|
|
9
|
+
* ## Design Principles
|
|
10
|
+
*
|
|
11
|
+
* 1. **Works with raw IDL types BEFORE transformation** - generates metadata at initialization
|
|
12
|
+
* 2. **No value dependencies** - metadata describes structure, not specific values
|
|
13
|
+
* 3. **Describes display format** - includes hints for how values will appear after transformation
|
|
14
|
+
* 4. **Efficient** - single traversal, reusable metadata
|
|
15
|
+
* 5. **Resolvable** - metadata can be combined with values at runtime via .resolve(val)
|
|
16
|
+
*
|
|
17
|
+
* ## Key Insight: Metadata vs Values
|
|
18
|
+
*
|
|
19
|
+
* The visitor generates a "schema" that describes:
|
|
20
|
+
* - What type each field is in Candid (nat, Principal, opt, etc.)
|
|
21
|
+
* - What it becomes after display transformation (string, null, etc.)
|
|
22
|
+
* - How it should be formatted (timestamp, cycle, hex, etc.)
|
|
23
|
+
*
|
|
24
|
+
* Values are NOT passed during traversal. Instead, the generated schema
|
|
25
|
+
* is used at render time to properly display transformed values.
|
|
26
|
+
*
|
|
27
|
+
* ## Display Transformations (applied by DisplayCodecVisitor)
|
|
28
|
+
*
|
|
29
|
+
* | Candid Type | Display Type | Notes |
|
|
30
|
+
* |-------------|--------------|-------|
|
|
31
|
+
* | nat, int, nat64, int64 | string | BigInt → string |
|
|
32
|
+
* | Principal | string | Principal.toText() |
|
|
33
|
+
* | opt T | T \| null | [value] → value, [] → null |
|
|
34
|
+
* | vec nat8 (blob) | string | Uint8Array → hex string |
|
|
35
|
+
* | variant { Ok, Err } | unwrapped | { Ok: val } → val (or throws on Err) |
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const visitor = new ResultFieldVisitor()
|
|
40
|
+
* const serviceMeta = service.accept(visitor, null)
|
|
41
|
+
*
|
|
42
|
+
* // Get method result metadata
|
|
43
|
+
* const methodMeta = serviceMeta["icrc1_balance_of"]
|
|
44
|
+
* // methodMeta.resultFields[0] = {
|
|
45
|
+
* // type: "number",
|
|
46
|
+
* // candidType: "nat",
|
|
47
|
+
* // displayType: "string",
|
|
48
|
+
* // numberFormat: "normal"
|
|
49
|
+
* // }
|
|
50
|
+
*
|
|
51
|
+
* // At render time, apply to transformed value:
|
|
52
|
+
* const transformedResult = "1000000000" // Already transformed by DisplayCodec
|
|
53
|
+
* renderField(methodMeta.resultFields[0], transformedResult)
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export class ResultFieldVisitor extends IDL.Visitor {
|
|
57
|
+
constructor() {
|
|
58
|
+
super(...arguments);
|
|
59
|
+
Object.defineProperty(this, "displayVisitor", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
configurable: true,
|
|
62
|
+
writable: true,
|
|
63
|
+
value: new DisplayCodecVisitor()
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
67
|
+
// Service & Function Level
|
|
68
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
69
|
+
visitService(t) {
|
|
70
|
+
const result = {};
|
|
71
|
+
for (const [functionName, func] of t._fields) {
|
|
72
|
+
result[functionName] = func.accept(this, functionName);
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
visitFunc(t, functionName) {
|
|
77
|
+
const functionType = isQuery(t) ? "query" : "update";
|
|
78
|
+
const resultFields = t.retTypes.map((retType, index) => retType.accept(this, `__ret${index}`));
|
|
79
|
+
const generateMetadata = (data) => {
|
|
80
|
+
const dataArray = resultFields.length === 0
|
|
81
|
+
? []
|
|
82
|
+
: resultFields.length === 1
|
|
83
|
+
? [data]
|
|
84
|
+
: data;
|
|
85
|
+
const results = resultFields.map((field, index) => field.resolve(dataArray[index]));
|
|
86
|
+
return {
|
|
87
|
+
functionType,
|
|
88
|
+
functionName,
|
|
89
|
+
results,
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
functionType,
|
|
94
|
+
functionName,
|
|
95
|
+
resultFields,
|
|
96
|
+
returnCount: t.retTypes.length,
|
|
97
|
+
generateMetadata,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
101
|
+
// Compound Types
|
|
102
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
103
|
+
visitRecord(_t, fields_, label) {
|
|
104
|
+
const fields = fields_.map(([key, type]) => type.accept(this, key));
|
|
105
|
+
const field = {
|
|
106
|
+
type: "record",
|
|
107
|
+
label,
|
|
108
|
+
candidType: "record",
|
|
109
|
+
displayType: "object",
|
|
110
|
+
fields,
|
|
111
|
+
resolve(value) {
|
|
112
|
+
const record = value;
|
|
113
|
+
if (record == null) {
|
|
114
|
+
return { field, value: null, raw: value };
|
|
115
|
+
}
|
|
116
|
+
const resolvedFields = {};
|
|
117
|
+
for (const f of fields) {
|
|
118
|
+
resolvedFields[f.label] = f.resolve(record[f.label]);
|
|
119
|
+
}
|
|
120
|
+
return { field, value: resolvedFields, raw: value };
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
return field;
|
|
124
|
+
}
|
|
125
|
+
visitVariant(_t, fields_, label) {
|
|
126
|
+
const options = [];
|
|
127
|
+
const optionFields = [];
|
|
128
|
+
for (const [key, type] of fields_) {
|
|
129
|
+
options.push(key);
|
|
130
|
+
optionFields.push(type.accept(this, key));
|
|
131
|
+
}
|
|
132
|
+
// Detect if this is a Result type (has Ok and Err options)
|
|
133
|
+
const isResult = options.includes("Ok") && options.includes("Err");
|
|
134
|
+
const displayType = isResult ? "result" : "variant";
|
|
135
|
+
const field = {
|
|
136
|
+
type: "variant",
|
|
137
|
+
label,
|
|
138
|
+
candidType: "variant",
|
|
139
|
+
displayType,
|
|
140
|
+
options,
|
|
141
|
+
optionFields,
|
|
142
|
+
resolve(value) {
|
|
143
|
+
if (value == null) {
|
|
144
|
+
return { field, value: null, raw: value };
|
|
145
|
+
}
|
|
146
|
+
const variant = value;
|
|
147
|
+
const optionsInValue = Object.keys(variant);
|
|
148
|
+
const activeOption = optionsInValue.find((opt) => options.includes(opt));
|
|
149
|
+
if (!activeOption) {
|
|
150
|
+
return { field, value: null, raw: value };
|
|
151
|
+
}
|
|
152
|
+
const activeValue = variant[activeOption];
|
|
153
|
+
const optionIndex = options.indexOf(activeOption);
|
|
154
|
+
const optionField = optionFields[optionIndex];
|
|
155
|
+
const specificField = {
|
|
156
|
+
...field,
|
|
157
|
+
options,
|
|
158
|
+
optionFields: [optionField],
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
field: specificField,
|
|
162
|
+
value: {
|
|
163
|
+
option: activeOption,
|
|
164
|
+
value: optionField?.resolve(activeValue) ?? {
|
|
165
|
+
field: optionField,
|
|
166
|
+
value: activeValue,
|
|
167
|
+
raw: activeValue,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
raw: value,
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
return field;
|
|
175
|
+
}
|
|
176
|
+
visitTuple(_t, components, label) {
|
|
177
|
+
const fields = components.map((type, index) => type.accept(this, `_${index}`));
|
|
178
|
+
const field = {
|
|
179
|
+
type: "tuple",
|
|
180
|
+
label,
|
|
181
|
+
candidType: "tuple",
|
|
182
|
+
displayType: "array",
|
|
183
|
+
fields,
|
|
184
|
+
resolve(value) {
|
|
185
|
+
const tuple = value;
|
|
186
|
+
if (tuple == null) {
|
|
187
|
+
return { field, value: null, raw: value };
|
|
188
|
+
}
|
|
189
|
+
const resolvedItems = fields.map((f, index) => f.resolve(tuple[index]));
|
|
190
|
+
return { field, value: resolvedItems, raw: value };
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
return field;
|
|
194
|
+
}
|
|
195
|
+
visitOpt(_t, ty, label) {
|
|
196
|
+
const innerField = ty.accept(this, label);
|
|
197
|
+
const field = {
|
|
198
|
+
type: "optional",
|
|
199
|
+
label,
|
|
200
|
+
candidType: "opt",
|
|
201
|
+
displayType: "nullable",
|
|
202
|
+
innerField,
|
|
203
|
+
resolve(value) {
|
|
204
|
+
const opt = value;
|
|
205
|
+
if (opt == null || opt.length === 0) {
|
|
206
|
+
return { field, value: null, raw: value };
|
|
207
|
+
}
|
|
208
|
+
return { field, value: innerField.resolve(opt[0]), raw: value };
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
return field;
|
|
212
|
+
}
|
|
213
|
+
visitVec(_t, ty, label) {
|
|
214
|
+
// Check if it's blob (vec nat8)
|
|
215
|
+
if (ty instanceof IDL.FixedNatClass && ty._bits === 8) {
|
|
216
|
+
const codec = _t.accept(this.displayVisitor, null);
|
|
217
|
+
const blobField = {
|
|
218
|
+
type: "blob",
|
|
219
|
+
label,
|
|
220
|
+
candidType: "blob",
|
|
221
|
+
displayType: "string", // Transformed to hex string
|
|
222
|
+
displayHint: "hex",
|
|
223
|
+
resolve(value) {
|
|
224
|
+
return {
|
|
225
|
+
field: blobField,
|
|
226
|
+
value: codec.decode(value),
|
|
227
|
+
raw: value,
|
|
228
|
+
};
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
return blobField;
|
|
232
|
+
}
|
|
233
|
+
const itemField = ty.accept(this, "item");
|
|
234
|
+
const field = {
|
|
235
|
+
type: "vector",
|
|
236
|
+
label,
|
|
237
|
+
candidType: "vec",
|
|
238
|
+
displayType: "array",
|
|
239
|
+
itemField,
|
|
240
|
+
resolve(value) {
|
|
241
|
+
const vec = value;
|
|
242
|
+
if (vec == null) {
|
|
243
|
+
return { field, value: null, raw: value };
|
|
244
|
+
}
|
|
245
|
+
const resolvedItems = vec.map((item) => itemField.resolve(item));
|
|
246
|
+
return { field, value: resolvedItems, raw: value };
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
return field;
|
|
250
|
+
}
|
|
251
|
+
visitRec(t, ty, label) {
|
|
252
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
253
|
+
const self = this;
|
|
254
|
+
const field = {
|
|
255
|
+
type: "recursive",
|
|
256
|
+
label,
|
|
257
|
+
candidType: "rec",
|
|
258
|
+
displayType: "recursive",
|
|
259
|
+
typeName: t.name,
|
|
260
|
+
// Lazy extraction to prevent infinite loops
|
|
261
|
+
extract: () => ty.accept(self, label),
|
|
262
|
+
resolve(value) {
|
|
263
|
+
// Extract the inner field and resolve with it
|
|
264
|
+
const innerField = field.extract();
|
|
265
|
+
return innerField.resolve(value);
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
return field;
|
|
269
|
+
}
|
|
270
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
271
|
+
// Primitive Types
|
|
272
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
273
|
+
visitPrincipal(t, label) {
|
|
274
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
275
|
+
const field = {
|
|
276
|
+
type: "principal",
|
|
277
|
+
label,
|
|
278
|
+
candidType: "principal",
|
|
279
|
+
displayType: "string", // Principal.toText()
|
|
280
|
+
textFormat: checkTextFormat(label),
|
|
281
|
+
resolve(value) {
|
|
282
|
+
return {
|
|
283
|
+
field,
|
|
284
|
+
value: codec.decode(value),
|
|
285
|
+
raw: value,
|
|
286
|
+
};
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
return field;
|
|
290
|
+
}
|
|
291
|
+
visitText(t, label) {
|
|
292
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
293
|
+
const field = {
|
|
294
|
+
type: "text",
|
|
295
|
+
label,
|
|
296
|
+
candidType: "text",
|
|
297
|
+
displayType: "string",
|
|
298
|
+
textFormat: checkTextFormat(label),
|
|
299
|
+
resolve(value) {
|
|
300
|
+
return { field, value: codec.decode(value), raw: value };
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
return field;
|
|
304
|
+
}
|
|
305
|
+
visitBool(t, label) {
|
|
306
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
307
|
+
const field = {
|
|
308
|
+
type: "boolean",
|
|
309
|
+
label,
|
|
310
|
+
candidType: "bool",
|
|
311
|
+
displayType: "boolean",
|
|
312
|
+
resolve(value) {
|
|
313
|
+
return { field, value: codec.decode(value), raw: value };
|
|
314
|
+
},
|
|
315
|
+
};
|
|
316
|
+
return field;
|
|
317
|
+
}
|
|
318
|
+
visitNull(t, label) {
|
|
319
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
320
|
+
const field = {
|
|
321
|
+
type: "null",
|
|
322
|
+
label,
|
|
323
|
+
candidType: "null",
|
|
324
|
+
displayType: "null",
|
|
325
|
+
resolve(value) {
|
|
326
|
+
return { field, value: codec.decode(value), raw: value };
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
return field;
|
|
330
|
+
}
|
|
331
|
+
// Numbers
|
|
332
|
+
visitInt(t, label) {
|
|
333
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
334
|
+
const field = {
|
|
335
|
+
type: "number",
|
|
336
|
+
label,
|
|
337
|
+
candidType: "int",
|
|
338
|
+
displayType: "string", // BigInt → string
|
|
339
|
+
numberFormat: checkNumberFormat(label),
|
|
340
|
+
resolve(value) {
|
|
341
|
+
return { field, value: codec.decode(value), raw: value };
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
return field;
|
|
345
|
+
}
|
|
346
|
+
visitNat(t, label) {
|
|
347
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
348
|
+
const field = {
|
|
349
|
+
type: "number",
|
|
350
|
+
label,
|
|
351
|
+
candidType: "nat",
|
|
352
|
+
displayType: "string", // BigInt → string
|
|
353
|
+
numberFormat: checkNumberFormat(label),
|
|
354
|
+
resolve(value) {
|
|
355
|
+
return { field, value: codec.decode(value), raw: value };
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
return field;
|
|
359
|
+
}
|
|
360
|
+
visitFloat(t, label) {
|
|
361
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
362
|
+
const field = {
|
|
363
|
+
type: "number",
|
|
364
|
+
label,
|
|
365
|
+
candidType: `float${t._bits}`,
|
|
366
|
+
displayType: "number", // Floats stay as numbers
|
|
367
|
+
numberFormat: checkNumberFormat(label),
|
|
368
|
+
resolve(value) {
|
|
369
|
+
return { field, value: codec.decode(value), raw: value };
|
|
370
|
+
},
|
|
371
|
+
};
|
|
372
|
+
return field;
|
|
373
|
+
}
|
|
374
|
+
visitFixedInt(t, label) {
|
|
375
|
+
const bits = t._bits;
|
|
376
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
377
|
+
const field = {
|
|
378
|
+
type: "number",
|
|
379
|
+
label,
|
|
380
|
+
candidType: `int${bits}`,
|
|
381
|
+
displayType: bits <= 32 ? "number" : "string", // int64 → string
|
|
382
|
+
numberFormat: checkNumberFormat(label),
|
|
383
|
+
resolve(value) {
|
|
384
|
+
return {
|
|
385
|
+
field,
|
|
386
|
+
value: codec.decode(value),
|
|
387
|
+
raw: value,
|
|
388
|
+
};
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
return field;
|
|
392
|
+
}
|
|
393
|
+
visitFixedNat(t, label) {
|
|
394
|
+
const bits = t._bits;
|
|
395
|
+
const codec = t.accept(this.displayVisitor, null);
|
|
396
|
+
const field = {
|
|
397
|
+
type: "number",
|
|
398
|
+
label,
|
|
399
|
+
candidType: `nat${bits}`,
|
|
400
|
+
displayType: bits <= 32 ? "number" : "string", // nat64 → string
|
|
401
|
+
numberFormat: checkNumberFormat(label),
|
|
402
|
+
resolve(value) {
|
|
403
|
+
return {
|
|
404
|
+
field,
|
|
405
|
+
value: codec.decode(value),
|
|
406
|
+
raw: value,
|
|
407
|
+
};
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
return field;
|
|
411
|
+
}
|
|
412
|
+
visitType(_t, label) {
|
|
413
|
+
const field = {
|
|
414
|
+
type: "unknown",
|
|
415
|
+
label,
|
|
416
|
+
candidType: "unknown",
|
|
417
|
+
displayType: "unknown",
|
|
418
|
+
resolve(value) {
|
|
419
|
+
return { field, value, raw: value };
|
|
420
|
+
},
|
|
421
|
+
};
|
|
422
|
+
return field;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/visitor/returns/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { BaseActor, FunctionName, DisplayOf, FunctionType, ActorMethodReturnType } from "@ic-reactor/core";
|
|
2
|
+
export type ResultFieldType = "record" | "variant" | "tuple" | "optional" | "vector" | "blob" | "recursive" | "principal" | "number" | "text" | "boolean" | "null" | "unknown";
|
|
3
|
+
export type DisplayType = "string" | "number" | "boolean" | "null" | "object" | "array" | "variant" | "result" | "nullable" | "recursive" | "unknown";
|
|
4
|
+
/**
|
|
5
|
+
* Number-specific formatting hints derived from field names.
|
|
6
|
+
*/
|
|
7
|
+
export type NumberFormat = "timestamp" | "cycle" | "value" | "token" | "normal";
|
|
8
|
+
/**
|
|
9
|
+
* Text-specific formatting hints derived from field names.
|
|
10
|
+
*/
|
|
11
|
+
export type TextFormat = "plain" | "timestamp" | "uuid" | "url" | "email" | "phone" | "btc" | "eth" | "account-id" | "principal";
|
|
12
|
+
/**
|
|
13
|
+
* Display hints for UI rendering.
|
|
14
|
+
*/
|
|
15
|
+
export type DisplayHint = "copyable" | "linkable" | "truncate" | "hex" | "code" | "none";
|
|
16
|
+
export interface ResultFieldBase {
|
|
17
|
+
/** The Candid type category */
|
|
18
|
+
type: ResultFieldType;
|
|
19
|
+
/** Human-readable label from Candid */
|
|
20
|
+
label: string;
|
|
21
|
+
/** Original Candid type name */
|
|
22
|
+
candidType: string;
|
|
23
|
+
/** What it becomes after display transformation */
|
|
24
|
+
displayType: DisplayType;
|
|
25
|
+
/**
|
|
26
|
+
* Combine metadata with value to create a render-ready tree.
|
|
27
|
+
* This allows "zipping" the static schema with dynamic runtime data.
|
|
28
|
+
*/
|
|
29
|
+
resolve(value: unknown): ResultFieldWithValue;
|
|
30
|
+
}
|
|
31
|
+
export interface RecordResultField extends ResultFieldBase {
|
|
32
|
+
type: "record";
|
|
33
|
+
displayType: "object";
|
|
34
|
+
fields: ResultField[];
|
|
35
|
+
}
|
|
36
|
+
export interface VariantResultField extends ResultFieldBase {
|
|
37
|
+
type: "variant";
|
|
38
|
+
displayType: "variant" | "result";
|
|
39
|
+
options: string[];
|
|
40
|
+
optionFields: ResultField[];
|
|
41
|
+
}
|
|
42
|
+
export interface TupleResultField extends ResultFieldBase {
|
|
43
|
+
type: "tuple";
|
|
44
|
+
displayType: "array";
|
|
45
|
+
fields: ResultField[];
|
|
46
|
+
}
|
|
47
|
+
export interface OptionalResultField extends ResultFieldBase {
|
|
48
|
+
type: "optional";
|
|
49
|
+
displayType: "nullable";
|
|
50
|
+
innerField: ResultField;
|
|
51
|
+
}
|
|
52
|
+
export interface VectorResultField extends ResultFieldBase {
|
|
53
|
+
type: "vector";
|
|
54
|
+
displayType: "array";
|
|
55
|
+
itemField: ResultField;
|
|
56
|
+
}
|
|
57
|
+
export interface BlobResultField extends ResultFieldBase {
|
|
58
|
+
type: "blob";
|
|
59
|
+
displayType: "string";
|
|
60
|
+
displayHint: "hex";
|
|
61
|
+
}
|
|
62
|
+
export interface RecursiveResultField extends ResultFieldBase {
|
|
63
|
+
type: "recursive";
|
|
64
|
+
displayType: "recursive";
|
|
65
|
+
typeName: string;
|
|
66
|
+
/** Lazily extract the inner field to prevent infinite loops */
|
|
67
|
+
extract: () => ResultField;
|
|
68
|
+
}
|
|
69
|
+
export interface PrincipalResultField extends ResultFieldBase {
|
|
70
|
+
type: "principal";
|
|
71
|
+
displayType: "string";
|
|
72
|
+
textFormat: TextFormat;
|
|
73
|
+
}
|
|
74
|
+
export interface NumberResultField extends ResultFieldBase {
|
|
75
|
+
type: "number";
|
|
76
|
+
displayType: "string" | "number";
|
|
77
|
+
numberFormat: NumberFormat;
|
|
78
|
+
}
|
|
79
|
+
export interface TextResultField extends ResultFieldBase {
|
|
80
|
+
type: "text";
|
|
81
|
+
displayType: "string";
|
|
82
|
+
textFormat: TextFormat;
|
|
83
|
+
}
|
|
84
|
+
export interface BooleanResultField extends ResultFieldBase {
|
|
85
|
+
type: "boolean";
|
|
86
|
+
displayType: "boolean";
|
|
87
|
+
}
|
|
88
|
+
export interface NullResultField extends ResultFieldBase {
|
|
89
|
+
type: "null";
|
|
90
|
+
displayType: "null";
|
|
91
|
+
}
|
|
92
|
+
export interface UnknownResultField extends ResultFieldBase {
|
|
93
|
+
type: "unknown";
|
|
94
|
+
displayType: "unknown";
|
|
95
|
+
}
|
|
96
|
+
export type ResultField = RecordResultField | VariantResultField | TupleResultField | OptionalResultField | VectorResultField | BlobResultField | RecursiveResultField | PrincipalResultField | NumberResultField | TextResultField | BooleanResultField | NullResultField | UnknownResultField;
|
|
97
|
+
/**
|
|
98
|
+
* A result field paired with its transformed value for rendering.
|
|
99
|
+
* Can contain nested resolved fields for compound types.
|
|
100
|
+
*/
|
|
101
|
+
export interface ResultFieldWithValue<T = unknown> {
|
|
102
|
+
field: ResultField;
|
|
103
|
+
value: DisplayOf<T>;
|
|
104
|
+
raw: T;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Resolved method result containing metadata and resolved field values.
|
|
108
|
+
* This is the output of `generateMetadata()`.
|
|
109
|
+
*/
|
|
110
|
+
export interface ResolvedMethodResult<A = BaseActor> {
|
|
111
|
+
functionType: FunctionType;
|
|
112
|
+
functionName: FunctionName<A>;
|
|
113
|
+
results: ResultFieldWithValue[];
|
|
114
|
+
}
|
|
115
|
+
export interface MethodResultMeta<A = BaseActor, Name extends FunctionName<A> = FunctionName<A>> {
|
|
116
|
+
functionType: FunctionType;
|
|
117
|
+
functionName: Name;
|
|
118
|
+
resultFields: ResultField[];
|
|
119
|
+
returnCount: number;
|
|
120
|
+
/**
|
|
121
|
+
* Generate metadata by resolving each result field with its corresponding display value.
|
|
122
|
+
* This "zips" the static schema with dynamic runtime data for easy rendering.
|
|
123
|
+
*
|
|
124
|
+
* @param data - Array of display-transformed return values from the canister method call
|
|
125
|
+
* @returns Resolved method result with metadata attached to each value
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* const result = await reactor.callMethod({ functionName: "myMethod", args: [] })
|
|
130
|
+
* const resolved = methodMeta.generateMetadata(result)
|
|
131
|
+
* // resolved.results contains fields with their display values for rendering
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
generateMetadata(data: ActorMethodReturnType<A[Name]>): ResolvedMethodResult<A>;
|
|
135
|
+
}
|
|
136
|
+
export type ServiceResultMeta<A = BaseActor> = {
|
|
137
|
+
[K in FunctionName<A>]: MethodResultMeta<A, K>;
|
|
138
|
+
};
|
|
139
|
+
export type ResultFieldByType<T extends ResultFieldType> = Extract<ResultField, {
|
|
140
|
+
type: T;
|
|
141
|
+
}>;
|
|
142
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/visitor/returns/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type FieldType = "functionRecord" | "function" | "record" | "variant" | "tuple" | "optional" | "vector" | "table" | "blob" | "blob-large" | "recursive" | "unknown" | "text" | "number" | "principal" | "boolean" | "null";
|
|
2
|
+
export { IDL } from "@icp-sdk/core/candid";
|
|
3
|
+
export { Principal } from "@icp-sdk/core/principal";
|
|
4
|
+
import { IDL } from "@icp-sdk/core/candid";
|
|
5
|
+
export type AllNumberTypes = IDL.NatClass | IDL.IntClass | IDL.FixedNatClass | IDL.FixedIntClass | IDL.FloatClass;
|
|
6
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/visitor/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,gBAAgB,GAChB,UAAU,GACV,QAAQ,GACR,SAAS,GACT,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,MAAM,GACN,YAAY,GACZ,WAAW,GACX,SAAS,GACT,MAAM,GACN,QAAQ,GACR,WAAW,GACX,SAAS,GACT,MAAM,CAAA;AAEV,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,MAAM,MAAM,cAAc,GACtB,GAAG,CAAC,QAAQ,GACZ,GAAG,CAAC,QAAQ,GACZ,GAAG,CAAC,aAAa,GACjB,GAAG,CAAC,aAAa,GACjB,GAAG,CAAC,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/visitor/types.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic-reactor/candid",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.8-beta.0",
|
|
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",
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
"author": "Behrad Deylami",
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@
|
|
45
|
+
"@noble/hashes": "^1.8.0",
|
|
46
|
+
"@ic-reactor/core": "^3.0.8-beta.0"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"@icp-sdk/core": "^5.0.0"
|
package/src/display-reactor.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
BaseActor,
|
|
3
|
+
DisplayReactorParameters,
|
|
4
|
+
TransformKey,
|
|
5
|
+
} from "@ic-reactor/core"
|
|
2
6
|
import type {
|
|
3
7
|
CandidDisplayReactorParameters,
|
|
4
8
|
DynamicMethodOptions,
|
|
@@ -64,7 +68,11 @@ import { IDL } from "@icp-sdk/core/candid"
|
|
|
64
68
|
* })
|
|
65
69
|
* ```
|
|
66
70
|
*/
|
|
67
|
-
export class CandidDisplayReactor<
|
|
71
|
+
export class CandidDisplayReactor<
|
|
72
|
+
A = BaseActor,
|
|
73
|
+
T extends TransformKey = "display",
|
|
74
|
+
> extends DisplayReactor<A, T> {
|
|
75
|
+
public readonly transform = "display" as T
|
|
68
76
|
public adapter: CandidAdapter
|
|
69
77
|
private candidSource?: string
|
|
70
78
|
|
package/src/index.ts
CHANGED