@ic-reactor/candid 3.0.7-beta.2 → 3.0.8-beta.1

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.
Files changed (53) hide show
  1. package/dist/display-reactor.d.ts +3 -2
  2. package/dist/display-reactor.d.ts.map +1 -1
  3. package/dist/display-reactor.js +6 -0
  4. package/dist/display-reactor.js.map +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/metadata-display-reactor.d.ts +73 -0
  10. package/dist/metadata-display-reactor.d.ts.map +1 -0
  11. package/dist/metadata-display-reactor.js +128 -0
  12. package/dist/metadata-display-reactor.js.map +1 -0
  13. package/dist/visitor/arguments/index.d.ts +69 -0
  14. package/dist/visitor/arguments/index.d.ts.map +1 -0
  15. package/dist/visitor/arguments/index.js +277 -0
  16. package/dist/visitor/arguments/index.js.map +1 -0
  17. package/dist/visitor/arguments/types.d.ts +92 -0
  18. package/dist/visitor/arguments/types.d.ts.map +1 -0
  19. package/dist/visitor/arguments/types.js +2 -0
  20. package/dist/visitor/arguments/types.js.map +1 -0
  21. package/dist/visitor/constants.d.ts +4 -0
  22. package/dist/visitor/constants.d.ts.map +1 -0
  23. package/dist/visitor/constants.js +61 -0
  24. package/dist/visitor/constants.js.map +1 -0
  25. package/dist/visitor/helpers.d.ts +30 -0
  26. package/dist/visitor/helpers.d.ts.map +1 -0
  27. package/dist/visitor/helpers.js +200 -0
  28. package/dist/visitor/helpers.js.map +1 -0
  29. package/dist/visitor/returns/index.d.ts +76 -0
  30. package/dist/visitor/returns/index.d.ts.map +1 -0
  31. package/dist/visitor/returns/index.js +426 -0
  32. package/dist/visitor/returns/index.js.map +1 -0
  33. package/dist/visitor/returns/types.d.ts +143 -0
  34. package/dist/visitor/returns/types.d.ts.map +1 -0
  35. package/dist/visitor/returns/types.js +2 -0
  36. package/dist/visitor/returns/types.js.map +1 -0
  37. package/dist/visitor/types.d.ts +6 -0
  38. package/dist/visitor/types.d.ts.map +1 -0
  39. package/dist/visitor/types.js +3 -0
  40. package/dist/visitor/types.js.map +1 -0
  41. package/package.json +3 -2
  42. package/src/display-reactor.ts +10 -2
  43. package/src/index.ts +1 -0
  44. package/src/metadata-display-reactor.ts +184 -0
  45. package/src/visitor/arguments/index.test.ts +882 -0
  46. package/src/visitor/arguments/index.ts +405 -0
  47. package/src/visitor/arguments/types.ts +168 -0
  48. package/src/visitor/constants.ts +62 -0
  49. package/src/visitor/helpers.ts +221 -0
  50. package/src/visitor/returns/index.test.ts +2027 -0
  51. package/src/visitor/returns/index.ts +553 -0
  52. package/src/visitor/returns/types.ts +272 -0
  53. package/src/visitor/types.ts +29 -0
@@ -0,0 +1,426 @@
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
+ raw: data,
91
+ };
92
+ };
93
+ return {
94
+ functionType,
95
+ functionName,
96
+ resultFields,
97
+ returnCount: t.retTypes.length,
98
+ generateMetadata,
99
+ };
100
+ }
101
+ // ════════════════════════════════════════════════════════════════════════
102
+ // Compound Types
103
+ // ════════════════════════════════════════════════════════════════════════
104
+ visitRecord(_t, fields_, label) {
105
+ const fields = fields_.map(([key, type]) => type.accept(this, key));
106
+ const field = {
107
+ type: "record",
108
+ label,
109
+ candidType: "record",
110
+ displayType: "object",
111
+ fields,
112
+ resolve(value) {
113
+ const record = value;
114
+ if (record == null) {
115
+ return { field, value: null, raw: value };
116
+ }
117
+ const resolvedFields = {};
118
+ for (const f of fields) {
119
+ resolvedFields[f.label] = f.resolve(record[f.label]);
120
+ }
121
+ return { field, value: resolvedFields, raw: value };
122
+ },
123
+ };
124
+ return field;
125
+ }
126
+ visitVariant(_t, fields_, label) {
127
+ const options = [];
128
+ const optionFields = [];
129
+ for (const [key, type] of fields_) {
130
+ options.push(key);
131
+ optionFields.push(type.accept(this, key));
132
+ }
133
+ // Detect if this is a Result type (has Ok and Err options)
134
+ const isResult = options.includes("Ok") && options.includes("Err");
135
+ const displayType = isResult ? "result" : "variant";
136
+ const field = {
137
+ type: "variant",
138
+ label,
139
+ candidType: "variant",
140
+ displayType,
141
+ options,
142
+ optionFields,
143
+ resolve(value) {
144
+ if (value == null) {
145
+ return { field, value: null, raw: value };
146
+ }
147
+ const variant = value;
148
+ const optionsInValue = Object.keys(variant);
149
+ const activeOption = optionsInValue.find((opt) => options.includes(opt));
150
+ if (!activeOption) {
151
+ return { field, value: null, raw: value };
152
+ }
153
+ const activeValue = variant[activeOption];
154
+ const optionIndex = options.indexOf(activeOption);
155
+ const optionField = optionFields[optionIndex];
156
+ const specificField = {
157
+ ...field,
158
+ options,
159
+ optionFields: [optionField],
160
+ };
161
+ return {
162
+ field: specificField,
163
+ value: {
164
+ option: activeOption,
165
+ value: optionField?.resolve(activeValue) ?? {
166
+ field: optionField,
167
+ value: activeValue,
168
+ raw: activeValue,
169
+ },
170
+ },
171
+ raw: value,
172
+ };
173
+ },
174
+ };
175
+ return field;
176
+ }
177
+ visitTuple(_t, components, label) {
178
+ const fields = components.map((type, index) => type.accept(this, `_${index}`));
179
+ const field = {
180
+ type: "tuple",
181
+ label,
182
+ candidType: "tuple",
183
+ displayType: "array",
184
+ fields,
185
+ resolve(value) {
186
+ const tuple = value;
187
+ if (tuple == null) {
188
+ return { field, value: null, raw: value };
189
+ }
190
+ const resolvedItems = fields.map((f, index) => f.resolve(tuple[index]));
191
+ return { field, value: resolvedItems, raw: value };
192
+ },
193
+ };
194
+ return field;
195
+ }
196
+ visitOpt(_t, ty, label) {
197
+ const innerField = ty.accept(this, label);
198
+ const field = {
199
+ type: "optional",
200
+ label,
201
+ candidType: "opt",
202
+ displayType: "nullable",
203
+ innerField,
204
+ resolve(value) {
205
+ const opt = value;
206
+ if (opt == null || opt.length === 0) {
207
+ return { field, value: null, raw: value };
208
+ }
209
+ return { field, value: innerField.resolve(opt[0]), raw: value };
210
+ },
211
+ };
212
+ return field;
213
+ }
214
+ visitVec(_t, ty, label) {
215
+ // Check if it's blob (vec nat8)
216
+ if (ty instanceof IDL.FixedNatClass && ty._bits === 8) {
217
+ const codec = _t.accept(this.displayVisitor, null);
218
+ const blobField = {
219
+ type: "blob",
220
+ label,
221
+ candidType: "blob",
222
+ displayType: "string", // Transformed to hex string
223
+ displayHint: "hex",
224
+ resolve(value) {
225
+ return {
226
+ field: blobField,
227
+ value: codec.decode(value),
228
+ raw: value,
229
+ };
230
+ },
231
+ };
232
+ return blobField;
233
+ }
234
+ const itemField = ty.accept(this, "item");
235
+ const field = {
236
+ type: "vector",
237
+ label,
238
+ candidType: "vec",
239
+ displayType: "array",
240
+ itemField,
241
+ resolve(value) {
242
+ const vec = value;
243
+ if (vec == null) {
244
+ return { field, value: null, raw: value };
245
+ }
246
+ const resolvedItems = vec.map((item) => itemField.resolve(item));
247
+ return { field, value: resolvedItems, raw: value };
248
+ },
249
+ };
250
+ return field;
251
+ }
252
+ visitRec(t, ty, label) {
253
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
254
+ const self = this;
255
+ const field = {
256
+ type: "recursive",
257
+ label,
258
+ candidType: "rec",
259
+ displayType: "recursive",
260
+ typeName: t.name,
261
+ // Lazy extraction to prevent infinite loops
262
+ extract: () => ty.accept(self, label),
263
+ resolve(value) {
264
+ // Extract the inner field and resolve with it
265
+ const innerField = field.extract();
266
+ return innerField.resolve(value);
267
+ },
268
+ };
269
+ return field;
270
+ }
271
+ // ════════════════════════════════════════════════════════════════════════
272
+ // Primitive Types
273
+ // ════════════════════════════════════════════════════════════════════════
274
+ visitPrincipal(t, label) {
275
+ const codec = t.accept(this.displayVisitor, null);
276
+ const field = {
277
+ type: "principal",
278
+ label,
279
+ candidType: "principal",
280
+ displayType: "string", // Principal.toText()
281
+ textFormat: checkTextFormat(label),
282
+ resolve(value) {
283
+ return {
284
+ field,
285
+ value: codec.decode(value),
286
+ raw: value,
287
+ };
288
+ },
289
+ };
290
+ return field;
291
+ }
292
+ visitText(t, label) {
293
+ const codec = t.accept(this.displayVisitor, null);
294
+ const field = {
295
+ type: "text",
296
+ label,
297
+ candidType: "text",
298
+ displayType: "string",
299
+ textFormat: checkTextFormat(label),
300
+ resolve(value) {
301
+ return { field, value: codec.decode(value), raw: value };
302
+ },
303
+ };
304
+ return field;
305
+ }
306
+ visitBool(t, label) {
307
+ const codec = t.accept(this.displayVisitor, null);
308
+ const field = {
309
+ type: "boolean",
310
+ label,
311
+ candidType: "bool",
312
+ displayType: "boolean",
313
+ resolve(value) {
314
+ return { field, value: codec.decode(value), raw: value };
315
+ },
316
+ };
317
+ return field;
318
+ }
319
+ visitNull(t, label) {
320
+ const codec = t.accept(this.displayVisitor, null);
321
+ const field = {
322
+ type: "null",
323
+ label,
324
+ candidType: "null",
325
+ displayType: "null",
326
+ resolve(value) {
327
+ return { field, value: codec.decode(value), raw: value };
328
+ },
329
+ };
330
+ return field;
331
+ }
332
+ // Numbers
333
+ visitInt(t, label) {
334
+ const codec = t.accept(this.displayVisitor, null);
335
+ const field = {
336
+ type: "number",
337
+ label,
338
+ candidType: "int",
339
+ displayType: "string", // BigInt → string
340
+ numberFormat: checkNumberFormat(label),
341
+ resolve(value) {
342
+ return { field, value: codec.decode(value), raw: value };
343
+ },
344
+ };
345
+ return field;
346
+ }
347
+ visitNat(t, label) {
348
+ const codec = t.accept(this.displayVisitor, null);
349
+ const field = {
350
+ type: "number",
351
+ label,
352
+ candidType: "nat",
353
+ displayType: "string", // BigInt → string
354
+ numberFormat: checkNumberFormat(label),
355
+ resolve(value) {
356
+ return { field, value: codec.decode(value), raw: value };
357
+ },
358
+ };
359
+ return field;
360
+ }
361
+ visitFloat(t, label) {
362
+ const codec = t.accept(this.displayVisitor, null);
363
+ const field = {
364
+ type: "number",
365
+ label,
366
+ candidType: `float${t._bits}`,
367
+ displayType: "number", // Floats stay as numbers
368
+ numberFormat: checkNumberFormat(label),
369
+ resolve(value) {
370
+ return { field, value: codec.decode(value), raw: value };
371
+ },
372
+ };
373
+ return field;
374
+ }
375
+ visitFixedInt(t, label) {
376
+ const bits = t._bits;
377
+ const codec = t.accept(this.displayVisitor, null);
378
+ const field = {
379
+ type: "number",
380
+ label,
381
+ candidType: `int${bits}`,
382
+ displayType: bits <= 32 ? "number" : "string", // int64 → string
383
+ numberFormat: checkNumberFormat(label),
384
+ resolve(value) {
385
+ return {
386
+ field,
387
+ value: codec.decode(value),
388
+ raw: value,
389
+ };
390
+ },
391
+ };
392
+ return field;
393
+ }
394
+ visitFixedNat(t, label) {
395
+ const bits = t._bits;
396
+ const codec = t.accept(this.displayVisitor, null);
397
+ const field = {
398
+ type: "number",
399
+ label,
400
+ candidType: `nat${bits}`,
401
+ displayType: bits <= 32 ? "number" : "string", // nat64 → string
402
+ numberFormat: checkNumberFormat(label),
403
+ resolve(value) {
404
+ return {
405
+ field,
406
+ value: codec.decode(value),
407
+ raw: value,
408
+ };
409
+ },
410
+ };
411
+ return field;
412
+ }
413
+ visitType(_t, label) {
414
+ const field = {
415
+ type: "unknown",
416
+ label,
417
+ candidType: "unknown",
418
+ displayType: "unknown",
419
+ resolve(value) {
420
+ return { field, value, raw: value };
421
+ },
422
+ };
423
+ return field;
424
+ }
425
+ }
426
+ //# 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,143 @@
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
+ raw: ActorMethodReturnType<A[FunctionName<A>]>;
115
+ }
116
+ export interface MethodResultMeta<A = BaseActor, Name extends FunctionName<A> = FunctionName<A>> {
117
+ functionType: FunctionType;
118
+ functionName: Name;
119
+ resultFields: ResultField[];
120
+ returnCount: number;
121
+ /**
122
+ * Generate metadata by resolving each result field with its corresponding display value.
123
+ * This "zips" the static schema with dynamic runtime data for easy rendering.
124
+ *
125
+ * @param data - Array of display-transformed return values from the canister method call
126
+ * @returns Resolved method result with metadata attached to each value
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * const result = await reactor.callMethod({ functionName: "myMethod", args: [] })
131
+ * const resolved = methodMeta.generateMetadata(result)
132
+ * // resolved.results contains fields with their display values for rendering
133
+ * ```
134
+ */
135
+ generateMetadata(data: ActorMethodReturnType<A[Name]>): ResolvedMethodResult<A>;
136
+ }
137
+ export type ServiceResultMeta<A = BaseActor> = {
138
+ [K in FunctionName<A>]: MethodResultMeta<A, K>;
139
+ };
140
+ export type ResultFieldByType<T extends ResultFieldType> = Extract<ResultField, {
141
+ type: T;
142
+ }>;
143
+ //# 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,3 @@
1
+ export { IDL } from "@icp-sdk/core/candid";
2
+ export { Principal } from "@icp-sdk/core/principal";
3
+ //# sourceMappingURL=types.js.map
@@ -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.7-beta.2",
3
+ "version": "3.0.8-beta.1",
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
- "@ic-reactor/core": "^3.0.7-beta.2"
45
+ "@noble/hashes": "^1.8.0",
46
+ "@ic-reactor/core": "^3.0.8-beta.1"
46
47
  },
47
48
  "peerDependencies": {
48
49
  "@icp-sdk/core": "^5.0.0"
@@ -1,4 +1,8 @@
1
- import type { BaseActor, DisplayReactorParameters } from "@ic-reactor/core"
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<A = BaseActor> extends DisplayReactor<A> {
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