@aztec/bb.js 0.0.1-commit.fce3e4f → 0.0.1-commit.fffb133c

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 (183) hide show
  1. package/build/amd64-linux/bb +0 -0
  2. package/build/amd64-linux/nodejs_module.node +0 -0
  3. package/build/amd64-macos/bb +0 -0
  4. package/build/amd64-macos/nodejs_module.node +0 -0
  5. package/build/arm64-linux/bb +0 -0
  6. package/build/arm64-linux/nodejs_module.node +0 -0
  7. package/build/arm64-macos/bb +0 -0
  8. package/build/arm64-macos/nodejs_module.node +0 -0
  9. package/dest/browser/barretenberg/backend.d.ts +49 -17
  10. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  11. package/dest/browser/barretenberg/backend.js +111 -11
  12. package/dest/browser/barretenberg/index.d.ts +2 -2
  13. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  14. package/dest/browser/barretenberg/index.js +2 -2
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  16. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  17. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  18. package/dest/browser/bb_backends/index.d.ts +3 -1
  19. package/dest/browser/bb_backends/index.d.ts.map +1 -1
  20. package/dest/browser/cbind/generate.d.ts +5 -2
  21. package/dest/browser/cbind/generate.d.ts.map +1 -1
  22. package/dest/browser/cbind/generate.js +47 -25
  23. package/dest/browser/cbind/generated/api_types.d.ts +766 -1687
  24. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  25. package/dest/browser/cbind/generated/api_types.js +1465 -1555
  26. package/dest/browser/cbind/generated/async.d.ts +3 -5
  27. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  28. package/dest/browser/cbind/generated/async.js +13 -33
  29. package/dest/browser/cbind/generated/sync.d.ts +3 -5
  30. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  31. package/dest/browser/cbind/generated/sync.js +13 -31
  32. package/dest/browser/cbind/naming.d.ts +16 -0
  33. package/dest/browser/cbind/naming.d.ts.map +1 -0
  34. package/dest/browser/cbind/naming.js +24 -0
  35. package/dest/browser/cbind/rust_codegen.d.ts +26 -0
  36. package/dest/browser/cbind/rust_codegen.d.ts.map +1 -0
  37. package/dest/browser/cbind/rust_codegen.js +461 -0
  38. package/dest/browser/cbind/schema_visitor.d.ts +47 -0
  39. package/dest/browser/cbind/schema_visitor.d.ts.map +1 -0
  40. package/dest/browser/cbind/schema_visitor.js +158 -0
  41. package/dest/browser/cbind/typescript_codegen.d.ts +30 -0
  42. package/dest/browser/cbind/typescript_codegen.d.ts.map +1 -0
  43. package/dest/browser/cbind/typescript_codegen.js +365 -0
  44. package/dest/browser/index.d.ts +2 -2
  45. package/dest/browser/index.d.ts.map +1 -1
  46. package/dest/browser/index.js +2 -2
  47. package/dest/node/barretenberg/backend.d.ts +49 -17
  48. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  49. package/dest/node/barretenberg/backend.js +111 -11
  50. package/dest/node/barretenberg/backend.test.d.ts +2 -0
  51. package/dest/node/barretenberg/backend.test.d.ts.map +1 -0
  52. package/dest/node/barretenberg/backend.test.js +103 -0
  53. package/dest/node/barretenberg/index.d.ts +2 -2
  54. package/dest/node/barretenberg/index.d.ts.map +1 -1
  55. package/dest/node/barretenberg/index.js +2 -2
  56. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  57. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  58. package/dest/node/bb_backends/index.d.ts +3 -1
  59. package/dest/node/bb_backends/index.d.ts.map +1 -1
  60. package/dest/node/bb_backends/node/index.d.ts +1 -1
  61. package/dest/node/bb_backends/node/index.d.ts.map +1 -1
  62. package/dest/node/bb_backends/node/index.js +5 -5
  63. package/dest/node/bb_backends/node/native_shm.d.ts +3 -2
  64. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
  65. package/dest/node/bb_backends/node/native_shm.js +40 -21
  66. package/dest/node/bb_backends/node/native_shm_async.d.ts +2 -2
  67. package/dest/node/bb_backends/node/native_shm_async.d.ts.map +1 -1
  68. package/dest/node/bb_backends/node/native_shm_async.js +17 -21
  69. package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
  70. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
  71. package/dest/node/bb_backends/node/native_socket.js +7 -5
  72. package/dest/node/bb_backends/node/platform.d.ts +1 -1
  73. package/dest/node/bb_backends/node/platform.d.ts.map +1 -1
  74. package/dest/node/bb_backends/node/platform.js +7 -2
  75. package/dest/node/cbind/generate.d.ts +5 -2
  76. package/dest/node/cbind/generate.d.ts.map +1 -1
  77. package/dest/node/cbind/generate.js +47 -25
  78. package/dest/node/cbind/generated/api_types.d.ts +766 -1687
  79. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  80. package/dest/node/cbind/generated/api_types.js +1465 -1555
  81. package/dest/node/cbind/generated/async.d.ts +3 -5
  82. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  83. package/dest/node/cbind/generated/async.js +13 -33
  84. package/dest/node/cbind/generated/sync.d.ts +3 -5
  85. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  86. package/dest/node/cbind/generated/sync.js +13 -31
  87. package/dest/node/cbind/naming.d.ts +16 -0
  88. package/dest/node/cbind/naming.d.ts.map +1 -0
  89. package/dest/node/cbind/naming.js +24 -0
  90. package/dest/node/cbind/rust_codegen.d.ts +26 -0
  91. package/dest/node/cbind/rust_codegen.d.ts.map +1 -0
  92. package/dest/node/cbind/rust_codegen.js +461 -0
  93. package/dest/node/cbind/schema_visitor.d.ts +47 -0
  94. package/dest/node/cbind/schema_visitor.d.ts.map +1 -0
  95. package/dest/node/cbind/schema_visitor.js +158 -0
  96. package/dest/node/cbind/typescript_codegen.d.ts +30 -0
  97. package/dest/node/cbind/typescript_codegen.d.ts.map +1 -0
  98. package/dest/node/cbind/typescript_codegen.js +365 -0
  99. package/dest/node/index.d.ts +2 -2
  100. package/dest/node/index.d.ts.map +1 -1
  101. package/dest/node/index.js +2 -2
  102. package/dest/node-cjs/barretenberg/backend.d.ts +49 -17
  103. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  104. package/dest/node-cjs/barretenberg/backend.js +113 -11
  105. package/dest/node-cjs/barretenberg/backend.test.d.ts +2 -0
  106. package/dest/node-cjs/barretenberg/backend.test.d.ts.map +1 -0
  107. package/dest/node-cjs/barretenberg/backend.test.js +105 -0
  108. package/dest/node-cjs/barretenberg/index.d.ts +2 -2
  109. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  110. package/dest/node-cjs/barretenberg/index.js +4 -2
  111. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  112. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  113. package/dest/node-cjs/bb_backends/index.d.ts +3 -1
  114. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
  115. package/dest/node-cjs/bb_backends/node/index.d.ts +1 -1
  116. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
  117. package/dest/node-cjs/bb_backends/node/index.js +5 -5
  118. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +3 -2
  119. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
  120. package/dest/node-cjs/bb_backends/node/native_shm.js +39 -20
  121. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts +2 -2
  122. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts.map +1 -1
  123. package/dest/node-cjs/bb_backends/node/native_shm_async.js +17 -21
  124. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
  125. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
  126. package/dest/node-cjs/bb_backends/node/native_socket.js +7 -5
  127. package/dest/node-cjs/bb_backends/node/platform.d.ts +1 -1
  128. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -1
  129. package/dest/node-cjs/bb_backends/node/platform.js +7 -2
  130. package/dest/node-cjs/cbind/generate.d.ts +5 -2
  131. package/dest/node-cjs/cbind/generate.d.ts.map +1 -1
  132. package/dest/node-cjs/cbind/generate.js +47 -25
  133. package/dest/node-cjs/cbind/generated/api_types.d.ts +766 -1687
  134. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  135. package/dest/node-cjs/cbind/generated/api_types.js +1671 -1771
  136. package/dest/node-cjs/cbind/generated/async.d.ts +3 -5
  137. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  138. package/dest/node-cjs/cbind/generated/async.js +12 -32
  139. package/dest/node-cjs/cbind/generated/sync.d.ts +3 -5
  140. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  141. package/dest/node-cjs/cbind/generated/sync.js +12 -30
  142. package/dest/node-cjs/cbind/naming.d.ts +16 -0
  143. package/dest/node-cjs/cbind/naming.d.ts.map +1 -0
  144. package/dest/node-cjs/cbind/naming.js +28 -0
  145. package/dest/node-cjs/cbind/rust_codegen.d.ts +26 -0
  146. package/dest/node-cjs/cbind/rust_codegen.d.ts.map +1 -0
  147. package/dest/node-cjs/cbind/rust_codegen.js +465 -0
  148. package/dest/node-cjs/cbind/schema_visitor.d.ts +47 -0
  149. package/dest/node-cjs/cbind/schema_visitor.d.ts.map +1 -0
  150. package/dest/node-cjs/cbind/schema_visitor.js +162 -0
  151. package/dest/node-cjs/cbind/typescript_codegen.d.ts +30 -0
  152. package/dest/node-cjs/cbind/typescript_codegen.d.ts.map +1 -0
  153. package/dest/node-cjs/cbind/typescript_codegen.js +369 -0
  154. package/dest/node-cjs/index.d.ts +2 -2
  155. package/dest/node-cjs/index.d.ts.map +1 -1
  156. package/dest/node-cjs/index.js +4 -2
  157. package/package.json +1 -1
  158. package/src/barretenberg/backend.test.ts +122 -0
  159. package/src/barretenberg/backend.ts +151 -25
  160. package/src/barretenberg/index.ts +9 -1
  161. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +1 -1
  162. package/src/bb_backends/index.ts +3 -0
  163. package/src/bb_backends/node/index.ts +9 -4
  164. package/src/bb_backends/node/native_shm.ts +38 -19
  165. package/src/bb_backends/node/native_shm_async.ts +15 -19
  166. package/src/bb_backends/node/native_socket.ts +7 -5
  167. package/src/bb_backends/node/platform.ts +6 -1
  168. package/src/cbind/generate.ts +51 -32
  169. package/src/cbind/naming.ts +27 -0
  170. package/src/cbind/rust_codegen.ts +504 -0
  171. package/src/cbind/schema_visitor.ts +219 -0
  172. package/src/cbind/typescript_codegen.ts +419 -0
  173. package/src/index.ts +4 -0
  174. package/dest/browser/cbind/schema_compiler.d.ts +0 -68
  175. package/dest/browser/cbind/schema_compiler.d.ts.map +0 -1
  176. package/dest/browser/cbind/schema_compiler.js +0 -600
  177. package/dest/node/cbind/schema_compiler.d.ts +0 -68
  178. package/dest/node/cbind/schema_compiler.d.ts.map +0 -1
  179. package/dest/node/cbind/schema_compiler.js +0 -600
  180. package/dest/node-cjs/cbind/schema_compiler.d.ts +0 -68
  181. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +0 -1
  182. package/dest/node-cjs/cbind/schema_compiler.js +0 -607
  183. package/src/cbind/schema_compiler.ts +0 -745
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Schema Visitor - Minimal abstraction over raw msgpack schema
3
+ *
4
+ * Philosophy:
5
+ * - Keep raw schema structure
6
+ * - Resolve type references into a graph
7
+ * - No normalization - languages handle their own conventions
8
+ * - Output is "compiled schema" with resolved types
9
+ */
10
+ /**
11
+ * SchemaVisitor - Walks raw msgpack schema and resolves references
12
+ */
13
+ export class SchemaVisitor {
14
+ structs = new Map();
15
+ responses = new Map();
16
+ visit(commandsSchema, responsesSchema) {
17
+ // Reset state
18
+ this.structs.clear();
19
+ this.responses.clear();
20
+ const commands = [];
21
+ // Schema format: ["named_union", [[name, schema], ...]]
22
+ const commandPairs = commandsSchema[1];
23
+ const responsePairs = responsesSchema[1];
24
+ // First, visit all response types (including ErrorResponse)
25
+ for (const [respName, respSchema] of responsePairs) {
26
+ if (typeof respSchema !== 'string') {
27
+ const respStruct = this.visitStruct(respName, respSchema);
28
+ this.responses.set(respName, respStruct);
29
+ }
30
+ }
31
+ // Visit all commands and pair with responses
32
+ for (let i = 0; i < commandPairs.length; i++) {
33
+ const [cmdName, cmdSchema] = commandPairs[i];
34
+ // Find matching response (skip ErrorResponse which is always last)
35
+ const normalResponses = responsePairs.filter(([name]) => name !== 'ErrorResponse');
36
+ const [respName] = normalResponses[i];
37
+ // Discover command structure
38
+ const cmdStruct = this.visitStruct(cmdName, cmdSchema);
39
+ this.structs.set(cmdName, cmdStruct);
40
+ // Create command mapping
41
+ commands.push({
42
+ name: cmdName,
43
+ fields: cmdStruct.fields,
44
+ responseType: respName,
45
+ });
46
+ }
47
+ return {
48
+ structs: this.structs,
49
+ commands,
50
+ responses: this.responses,
51
+ };
52
+ }
53
+ visitStruct(name, schema) {
54
+ const fields = [];
55
+ // Schema is an object with __typename and fields
56
+ for (const [key, value] of Object.entries(schema)) {
57
+ if (key === '__typename')
58
+ continue;
59
+ fields.push({
60
+ name: key,
61
+ type: this.visitType(value),
62
+ });
63
+ }
64
+ return { name, fields };
65
+ }
66
+ visitType(schema) {
67
+ // Primitive string type
68
+ if (typeof schema === 'string') {
69
+ return this.resolvePrimitive(schema);
70
+ }
71
+ // Array type descriptor: ['vector', [elementType]]
72
+ if (Array.isArray(schema)) {
73
+ const [kind, args] = schema;
74
+ switch (kind) {
75
+ case 'vector': {
76
+ const [elemType] = args;
77
+ // Special case: vector<unsigned char> = bytes
78
+ if (elemType === 'unsigned char') {
79
+ return { kind: 'primitive', primitive: 'bytes' };
80
+ }
81
+ return {
82
+ kind: 'vector',
83
+ element: this.visitType(elemType),
84
+ };
85
+ }
86
+ case 'array': {
87
+ const [elemType, size] = args;
88
+ // Special case: array<unsigned char, N> = bytes
89
+ if (elemType === 'unsigned char') {
90
+ return { kind: 'primitive', primitive: 'bytes' };
91
+ }
92
+ return {
93
+ kind: 'array',
94
+ element: this.visitType(elemType),
95
+ size,
96
+ };
97
+ }
98
+ case 'optional': {
99
+ const [elemType] = args;
100
+ return {
101
+ kind: 'optional',
102
+ element: this.visitType(elemType),
103
+ };
104
+ }
105
+ case 'shared_ptr': {
106
+ // Dereference shared_ptr - just use inner type
107
+ const [innerType] = args;
108
+ return this.visitType(innerType);
109
+ }
110
+ case 'alias': {
111
+ // Alias types (like uint256_t) are treated as bytes
112
+ return { kind: 'primitive', primitive: 'bytes' };
113
+ }
114
+ default:
115
+ throw new Error(`Unknown type kind: ${kind}`);
116
+ }
117
+ }
118
+ // Inline struct definition
119
+ if (typeof schema === 'object' && schema.__typename) {
120
+ const structName = schema.__typename;
121
+ // Check if already visited
122
+ if (!this.structs.has(structName)) {
123
+ const struct = this.visitStruct(structName, schema);
124
+ this.structs.set(structName, struct);
125
+ }
126
+ return {
127
+ kind: 'struct',
128
+ struct: this.structs.get(structName),
129
+ };
130
+ }
131
+ throw new Error(`Cannot resolve type: ${JSON.stringify(schema)}`);
132
+ }
133
+ resolvePrimitive(name) {
134
+ const primitiveMap = {
135
+ 'bool': 'bool',
136
+ 'int': 'u32',
137
+ 'unsigned int': 'u32',
138
+ 'unsigned short': 'u16',
139
+ 'unsigned long': 'u64',
140
+ 'unsigned char': 'u8',
141
+ 'double': 'f64',
142
+ 'string': 'string',
143
+ 'bin32': 'bytes',
144
+ 'field2': 'field2', // Extension field (Fq2) - pair of field elements
145
+ };
146
+ const primitive = primitiveMap[name];
147
+ if (primitive) {
148
+ return { kind: 'primitive', primitive };
149
+ }
150
+ // Unknown primitive - treat as struct reference
151
+ // This will be resolved later if it's a real struct
152
+ return {
153
+ kind: 'struct',
154
+ struct: { name, fields: [] }, // Placeholder
155
+ };
156
+ }
157
+ }
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hX3Zpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2JpbmQvc2NoZW1hX3Zpc2l0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUF1Q0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUNoQixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDcEMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTlDLEtBQUssQ0FBQyxjQUFtQixFQUFFLGVBQW9CLEVBQWtCO1FBQy9ELGNBQWM7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFdkIsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDO1FBRS9CLHdEQUF3RDtRQUN4RCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUF5QixDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQXlCLENBQUM7UUFFakUsNERBQTREO1FBQzVELEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNuRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFD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
@@ -0,0 +1,30 @@
1
+ /**
2
+ * TypeScript Code Generator - String template based
3
+ *
4
+ * Philosophy:
5
+ * - String templates for file structure
6
+ * - Simple type mapping
7
+ * - Idiomatic TypeScript conventions
8
+ * - No complex abstraction
9
+ */
10
+ import type { CompiledSchema } from './schema_visitor.js';
11
+ export declare class TypeScriptCodegen {
12
+ private mapType;
13
+ private mapMsgpackType;
14
+ private needsConversion;
15
+ private generateField;
16
+ private generateMsgpackField;
17
+ private generateInterface;
18
+ private generateMsgpackInterface;
19
+ private generateToFunction;
20
+ private generateFromFunction;
21
+ private generateToConverter;
22
+ private generateFromConverter;
23
+ generateTypes(schema: CompiledSchema): string;
24
+ private generateAsyncApiMethod;
25
+ private generateSyncApiMethod;
26
+ generateAsyncApi(schema: CompiledSchema): string;
27
+ generateSyncApi(schema: CompiledSchema): string;
28
+ private generateApiImports;
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdF9jb2RlZ2VuLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2JpbmQvdHlwZXNjcmlwdF9jb2RlZ2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHFCQUFxQixDQUFDO0FBUXhGLHFCQUFhLGlCQUFpQjtJQUU1QixPQUFPLENBQUMsT0FBTztJQWlDZixPQUFPLENBQUMsY0FBYztJQWlDdEIsT0FBTyxDQUFDLGVBQWU7SUFldkIsT0FBTyxDQUFDLGFBQWE7SUFPckIsT0FBTyxDQUFDLG9CQUFvQjtJQU01QixPQUFPLENBQUMsaUJBQWlCO0lBVXpCLE9BQU8sQ0FBQyx3QkFBd0I7SUFVaEMsT0FBTyxDQUFDLGtCQUFrQjtJQThCMUIsT0FBTyxDQUFDLG9CQUFvQjtJQWlDNUIsT0FBTyxDQUFDLG1CQUFtQjtJQXdCM0IsT0FBTyxDQUFDLHFCQUFxQjtJQXdCN0IsYUFBYSxDQUFDLE1BQU0sRUFBRSxjQUFjLEdBQUcsTUFBTSxDQWlENUM7SUFHRCxPQUFPLENBQUMsc0JBQXNCO0lBbUI5QixPQUFPLENBQUMscUJBQXFCO0lBbUI3QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxHQUFHLE1BQU0sQ0E2Qi9DO0lBR0QsZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLEdBQUcsTUFBTSxDQTZCOUM7SUFHRCxPQUFPLENBQUMsa0JBQWtCO0NBbUIzQiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript_codegen.d.ts","sourceRoot":"","sources":["../../../src/cbind/typescript_codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAgC,MAAM,qBAAqB,CAAC;AAQxF,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,OAAO;IAiCf,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,qBAAqB;IAwB7B,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAiD5C;IAGD,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,qBAAqB;IAmB7B,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6B/C;IAGD,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA6B9C;IAGD,OAAO,CAAC,kBAAkB;CAmB3B"}
@@ -0,0 +1,365 @@
1
+ /**
2
+ * TypeScript Code Generator - String template based
3
+ *
4
+ * Philosophy:
5
+ * - String templates for file structure
6
+ * - Simple type mapping
7
+ * - Idiomatic TypeScript conventions
8
+ * - No complex abstraction
9
+ */
10
+ import { toPascalCase } from './naming.js';
11
+ function toCamelCase(name) {
12
+ const pascal = toPascalCase(name);
13
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
14
+ }
15
+ export class TypeScriptCodegen {
16
+ // Type mapping: Schema type -> TypeScript type
17
+ mapType(type) {
18
+ switch (type.kind) {
19
+ case 'primitive':
20
+ switch (type.primitive) {
21
+ case 'bool': return 'boolean';
22
+ case 'u8': return 'number';
23
+ case 'u16': return 'number';
24
+ case 'u32': return 'number';
25
+ case 'u64': return 'number';
26
+ case 'f64': return 'number';
27
+ case 'string': return 'string';
28
+ case 'bytes': return 'Uint8Array';
29
+ case 'field2': return '[Uint8Array, Uint8Array]'; // Extension field (Fq2)
30
+ }
31
+ break;
32
+ case 'vector':
33
+ return `${this.mapType(type.element)}[]`;
34
+ case 'array':
35
+ return `${this.mapType(type.element)}[]`;
36
+ case 'optional':
37
+ return `${this.mapType(type.element)} | undefined`;
38
+ case 'struct':
39
+ return toPascalCase(type.struct.name);
40
+ }
41
+ return 'unknown';
42
+ }
43
+ // Type mapping for msgpack interfaces (uses Msgpack* prefix for structs)
44
+ mapMsgpackType(type) {
45
+ switch (type.kind) {
46
+ case 'primitive':
47
+ switch (type.primitive) {
48
+ case 'bool': return 'boolean';
49
+ case 'u8': return 'number';
50
+ case 'u16': return 'number';
51
+ case 'u32': return 'number';
52
+ case 'u64': return 'number';
53
+ case 'f64': return 'number';
54
+ case 'string': return 'string';
55
+ case 'bytes': return 'Uint8Array';
56
+ case 'field2': return '[Uint8Array, Uint8Array]';
57
+ }
58
+ break;
59
+ case 'vector':
60
+ return `${this.mapMsgpackType(type.element)}[]`;
61
+ case 'array':
62
+ return `${this.mapMsgpackType(type.element)}[]`;
63
+ case 'optional':
64
+ return `${this.mapMsgpackType(type.element)} | undefined`;
65
+ case 'struct':
66
+ return `Msgpack${toPascalCase(type.struct.name)}`;
67
+ }
68
+ return 'unknown';
69
+ }
70
+ // Check if type needs conversion (has nested structs)
71
+ needsConversion(type) {
72
+ switch (type.kind) {
73
+ case 'primitive':
74
+ return false;
75
+ case 'vector':
76
+ case 'array':
77
+ case 'optional':
78
+ return this.needsConversion(type.element);
79
+ case 'struct':
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+ // Generate field
85
+ generateField(field) {
86
+ const tsName = toCamelCase(field.name);
87
+ const tsType = this.mapType(field.type);
88
+ return ` ${tsName}: ${tsType};`;
89
+ }
90
+ // Generate msgpack field (original names, uses Msgpack* types for structs)
91
+ generateMsgpackField(field) {
92
+ const tsType = this.mapMsgpackType(field.type);
93
+ return ` ${field.name}: ${tsType};`;
94
+ }
95
+ // Generate public interface
96
+ generateInterface(struct) {
97
+ const tsName = toPascalCase(struct.name);
98
+ const fields = struct.fields.map(f => this.generateField(f)).join('\n');
99
+ return `export interface ${tsName} {
100
+ ${fields}
101
+ }`;
102
+ }
103
+ // Generate msgpack interface (internal)
104
+ generateMsgpackInterface(struct) {
105
+ const tsName = toPascalCase(struct.name);
106
+ const fields = struct.fields.map(f => this.generateMsgpackField(f)).join('\n');
107
+ return `interface Msgpack${tsName} {
108
+ ${fields}
109
+ }`;
110
+ }
111
+ // Generate to* conversion function
112
+ generateToFunction(struct) {
113
+ const tsName = toPascalCase(struct.name);
114
+ if (struct.fields.length === 0) {
115
+ return `function to${tsName}(o: Msgpack${tsName}): ${tsName} {
116
+ return {};
117
+ }`;
118
+ }
119
+ const checks = struct.fields
120
+ .map(f => ` if (o.${f.name} === undefined) { throw new Error("Expected ${f.name} in ${tsName} deserialization"); }`)
121
+ .join('\n');
122
+ const conversions = struct.fields
123
+ .map(f => {
124
+ const tsFieldName = toCamelCase(f.name);
125
+ const converter = this.generateToConverter(f.type, `o.${f.name}`);
126
+ return ` ${tsFieldName}: ${converter},`;
127
+ })
128
+ .join('\n');
129
+ return `function to${tsName}(o: Msgpack${tsName}): ${tsName} {
130
+ ${checks};
131
+ return {
132
+ ${conversions}
133
+ };
134
+ }`;
135
+ }
136
+ // Generate from* conversion function
137
+ generateFromFunction(struct) {
138
+ const tsName = toPascalCase(struct.name);
139
+ if (struct.fields.length === 0) {
140
+ return `function from${tsName}(o: ${tsName}): Msgpack${tsName} {
141
+ return {};
142
+ }`;
143
+ }
144
+ const checks = struct.fields
145
+ .map(f => {
146
+ const tsFieldName = toCamelCase(f.name);
147
+ return ` if (o.${tsFieldName} === undefined) { throw new Error("Expected ${tsFieldName} in ${tsName} serialization"); }`;
148
+ })
149
+ .join('\n');
150
+ const conversions = struct.fields
151
+ .map(f => {
152
+ const tsFieldName = toCamelCase(f.name);
153
+ const converter = this.generateFromConverter(f.type, `o.${tsFieldName}`);
154
+ return ` ${f.name}: ${converter},`;
155
+ })
156
+ .join('\n');
157
+ return `function from${tsName}(o: ${tsName}): Msgpack${tsName} {
158
+ ${checks};
159
+ return {
160
+ ${conversions}
161
+ };
162
+ }`;
163
+ }
164
+ // Generate converter for to* function
165
+ generateToConverter(type, value) {
166
+ if (!this.needsConversion(type)) {
167
+ return value;
168
+ }
169
+ switch (type.kind) {
170
+ case 'vector':
171
+ case 'array':
172
+ if (this.needsConversion(type.element)) {
173
+ return `${value}.map((v: any) => ${this.generateToConverter(type.element, 'v')})`;
174
+ }
175
+ return value;
176
+ case 'optional':
177
+ if (this.needsConversion(type.element)) {
178
+ return `${value} !== undefined ? ${this.generateToConverter(type.element, value)} : undefined`;
179
+ }
180
+ return value;
181
+ case 'struct':
182
+ return `to${toPascalCase(type.struct.name)}(${value})`;
183
+ }
184
+ return value;
185
+ }
186
+ // Generate converter for from* function
187
+ generateFromConverter(type, value) {
188
+ if (!this.needsConversion(type)) {
189
+ return value;
190
+ }
191
+ switch (type.kind) {
192
+ case 'vector':
193
+ case 'array':
194
+ if (this.needsConversion(type.element)) {
195
+ return `${value}.map((v: any) => ${this.generateFromConverter(type.element, 'v')})`;
196
+ }
197
+ return value;
198
+ case 'optional':
199
+ if (this.needsConversion(type.element)) {
200
+ return `${value} !== undefined ? ${this.generateFromConverter(type.element, value)} : undefined`;
201
+ }
202
+ return value;
203
+ case 'struct':
204
+ return `from${toPascalCase(type.struct.name)}(${value})`;
205
+ }
206
+ return value;
207
+ }
208
+ // Generate types file (api_types.ts)
209
+ generateTypes(schema) {
210
+ const allStructs = [...schema.structs.values(), ...schema.responses.values()];
211
+ // Public interfaces
212
+ const publicInterfaces = allStructs
213
+ .map(s => this.generateInterface(s))
214
+ .join('\n\n');
215
+ // Msgpack interfaces
216
+ const msgpackInterfaces = allStructs
217
+ .map(s => this.generateMsgpackInterface(s))
218
+ .join('\n\n');
219
+ // Conversion functions
220
+ const toFunctions = allStructs
221
+ .map(s => 'export ' + this.generateToFunction(s))
222
+ .join('\n\n');
223
+ const fromFunctions = allStructs
224
+ .map(s => 'export ' + this.generateFromFunction(s))
225
+ .join('\n\n');
226
+ // BbApiBase interface
227
+ const apiMethods = schema.commands
228
+ .map(c => ` ${toCamelCase(c.name)}(command: ${toPascalCase(c.name)}): Promise<${toPascalCase(c.responseType)}>;`)
229
+ .join('\n');
230
+ return `// AUTOGENERATED FILE - DO NOT EDIT
231
+
232
+ // Type aliases for primitive types
233
+ export type Field2 = [Uint8Array, Uint8Array];
234
+
235
+ // Public interfaces (exported)
236
+ ${publicInterfaces}
237
+
238
+ // Private Msgpack interfaces (not exported)
239
+ ${msgpackInterfaces}
240
+
241
+ // Conversion functions (exported)
242
+ ${toFunctions}
243
+
244
+ ${fromFunctions}
245
+
246
+ // Base API interface
247
+ export interface BbApiBase {
248
+ ${apiMethods}
249
+ destroy(): Promise<void>;
250
+ }
251
+ `;
252
+ }
253
+ // Generate API method
254
+ generateAsyncApiMethod(command) {
255
+ const methodName = toCamelCase(command.name);
256
+ const cmdType = toPascalCase(command.name);
257
+ const respType = toPascalCase(command.responseType);
258
+ return ` ${methodName}(command: ${cmdType}): Promise<${respType}> {
259
+ const msgpackCommand = from${cmdType}(command);
260
+ return msgpackCall(this.backend, [["${command.name}", msgpackCommand]]).then(([variantName, result]: [string, any]) => {
261
+ if (variantName === 'ErrorResponse') {
262
+ throw new BBApiException(result.message || 'Unknown error from barretenberg');
263
+ }
264
+ if (variantName !== '${command.responseType}') {
265
+ throw new BBApiException(\`Expected variant name '${command.responseType}' but got '\${variantName}'\`);
266
+ }
267
+ return to${respType}(result);
268
+ });
269
+ }`;
270
+ }
271
+ generateSyncApiMethod(command) {
272
+ const methodName = toCamelCase(command.name);
273
+ const cmdType = toPascalCase(command.name);
274
+ const respType = toPascalCase(command.responseType);
275
+ return ` ${methodName}(command: ${cmdType}): ${respType} {
276
+ const msgpackCommand = from${cmdType}(command);
277
+ const [variantName, result] = msgpackCall(this.backend, [["${command.name}", msgpackCommand]]);
278
+ if (variantName === 'ErrorResponse') {
279
+ throw new BBApiException(result.message || 'Unknown error from barretenberg');
280
+ }
281
+ if (variantName !== '${command.responseType}') {
282
+ throw new BBApiException(\`Expected variant name '${command.responseType}' but got '\${variantName}'\`);
283
+ }
284
+ return to${respType}(result);
285
+ }`;
286
+ }
287
+ // Generate async API file
288
+ generateAsyncApi(schema) {
289
+ const imports = this.generateApiImports(schema);
290
+ const methods = schema.commands
291
+ .map(c => this.generateAsyncApiMethod(c))
292
+ .join('\n\n');
293
+ return `// AUTOGENERATED FILE - DO NOT EDIT
294
+
295
+ import { IMsgpackBackendAsync } from '../../bb_backends/interface.js';
296
+ import { Decoder, Encoder } from 'msgpackr';
297
+ import { BBApiException } from '../../bbapi_exception.js';
298
+ ${imports}
299
+
300
+ async function msgpackCall(backend: IMsgpackBackendAsync, input: any[]) {
301
+ const inputBuffer = new Encoder({ useRecords: false }).pack(input);
302
+ const encodedResult = await backend.call(inputBuffer);
303
+ return new Decoder({ useRecords: false }).unpack(encodedResult);
304
+ }
305
+
306
+ export class AsyncApi implements BbApiBase {
307
+ constructor(protected backend: IMsgpackBackendAsync) {}
308
+
309
+ ${methods}
310
+
311
+ destroy(): Promise<void> {
312
+ return this.backend.destroy ? this.backend.destroy() : Promise.resolve();
313
+ }
314
+ }
315
+ `;
316
+ }
317
+ // Generate sync API file
318
+ generateSyncApi(schema) {
319
+ const imports = this.generateApiImports(schema);
320
+ const methods = schema.commands
321
+ .map(c => this.generateSyncApiMethod(c))
322
+ .join('\n\n');
323
+ return `// AUTOGENERATED FILE - DO NOT EDIT
324
+
325
+ import { IMsgpackBackendSync } from '../../bb_backends/interface.js';
326
+ import { Decoder, Encoder } from 'msgpackr';
327
+ import { BBApiException } from '../../bbapi_exception.js';
328
+ ${imports}
329
+
330
+ function msgpackCall(backend: IMsgpackBackendSync, input: any[]) {
331
+ const inputBuffer = new Encoder({ useRecords: false }).pack(input);
332
+ const encodedResult = backend.call(inputBuffer);
333
+ return new Decoder({ useRecords: false }).unpack(encodedResult);
334
+ }
335
+
336
+ export class SyncApi {
337
+ constructor(protected backend: IMsgpackBackendSync) {}
338
+
339
+ ${methods}
340
+
341
+ destroy(): void {
342
+ if (this.backend.destroy) this.backend.destroy();
343
+ }
344
+ }
345
+ `;
346
+ }
347
+ // Generate import statement for API files
348
+ generateApiImports(schema) {
349
+ const types = new Set();
350
+ // Add command types and their conversion functions
351
+ for (const cmd of schema.commands) {
352
+ const cmdType = toPascalCase(cmd.name);
353
+ const respType = toPascalCase(cmd.responseType);
354
+ types.add(cmdType);
355
+ types.add(respType);
356
+ types.add(`from${cmdType}`);
357
+ types.add(`to${respType}`);
358
+ }
359
+ // Add BbApiBase
360
+ types.add('BbApiBase');
361
+ const sortedTypes = Array.from(types).sort();
362
+ return `import { ${sortedTypes.join(', ')} } from './api_types.js';`;
363
+ }
364
+ }
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdF9jb2RlZ2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NiaW5kL3R5cGVzY3JpcHRfY29kZWdlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0MsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFVO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLENBQ3pEO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QiwrQ0FBK0M7SUFDdkMsT0FBTyxDQUFDLElBQVUsRUFBVTtRQUNsQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLFdBQVc7Z0JBQ2QsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssTUFBTSxFQUFFLE9BQU8sU0FBUyxDQUFDO29CQUM5QixLQUFLLElBQUksRUFBRSxPQUFPLFFBQVEsQ0FBQztvQkFDM0IsS0FBSyxLQUFLLEVBQUUsT0FBTyxRQUFRLENBQUM7b0JBQzVCLEtBQUssS0FBSyxFQUFFLE9BQU8sUUFBUSxDQUFDO29CQUM1QixLQUFLLEtBQUssRUFBRSxPQUFPLFFBQVEsQ0FBQztvQkFDNUIsS0FBSyxLQUFLLEVBQUUsT0FBTyxRQUFRLENBQUM7b0JBQzVCLEtBQUssUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDO29CQUMvQixLQUFLLE9BQU8sRUFBRSxPQUFPLFlBQVksQ0FBQztvQkFDbEMsS0FBSyxRQUFRLEVBQUUsT0FBTywwQkFBMEIsQ0FBQyxDQUFFLHdCQUF3QjtnQkFDN0UsQ0FBQztnQkFDRCxNQUFNO1lB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
@@ -1,9 +1,9 @@
1
1
  export { Crs, GrumpkinCrs } from './crs/index.js';
2
- export { type BackendOptions, BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, } from './barretenberg/index.js';
2
+ export { type BackendOptions, BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, fieldToString, fieldsToStrings, type UltraHonkBackendOptions, type VerifierTarget, } from './barretenberg/index.js';
3
3
  export { randomBytes } from './random/index.js';
4
4
  export { splitHonkProof, reconstructHonkProof, deflattenFields, type ProofData } from './proof/index.js';
5
5
  export { BBApiException } from './bbapi_exception.js';
6
6
  export type { Bn254G1Point, Bn254G2Point, GrumpkinPoint, Secp256k1Point, Secp256r1Point, Field2, } from './cbind/generated/api_types.js';
7
7
  export { BN254_FQ_MODULUS, BN254_FR_MODULUS, BN254_G1_GENERATOR, BN254_G2_GENERATOR, GRUMPKIN_FR_MODULUS, GRUMPKIN_FQ_MODULUS, GRUMPKIN_G1_GENERATOR, SECP256K1_FR_MODULUS, SECP256K1_FQ_MODULUS, SECP256K1_G1_GENERATOR, SECP256R1_FR_MODULUS, SECP256R1_FQ_MODULUS, SECP256R1_G1_GENERATOR, } from './cbind/generated/curve_constants.js';
8
8
  export { findNapiBinary } from './bb_backends/node/platform.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsWUFBWSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQyJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsRUFDZixLQUFLLHVCQUF1QixFQUM1QixLQUFLLGNBQWMsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsWUFBWSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,MAAM,GACP,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,MAAM,GACP,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  export { Crs, GrumpkinCrs } from './crs/index.js';
2
- export { BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, } from './barretenberg/index.js';
2
+ export { BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, fieldToString, fieldsToStrings, } from './barretenberg/index.js';
3
3
  export { randomBytes } from './random/index.js';
4
4
  export { splitHonkProof, reconstructHonkProof, deflattenFields } from './proof/index.js';
5
5
  export { BBApiException } from './bbapi_exception.js';
6
6
  // Export curve constants for use in foundation
7
7
  export { BN254_FQ_MODULUS, BN254_FR_MODULUS, BN254_G1_GENERATOR, BN254_G2_GENERATOR, GRUMPKIN_FR_MODULUS, GRUMPKIN_FQ_MODULUS, GRUMPKIN_G1_GENERATOR, SECP256K1_FR_MODULUS, SECP256K1_FQ_MODULUS, SECP256K1_G1_GENERATOR, SECP256R1_FR_MODULUS, SECP256R1_FQ_MODULUS, SECP256R1_G1_GENERATOR, } from './cbind/generated/curve_constants.js';
8
8
  export { findNapiBinary } from './bb_backends/browser/platform.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLE1BQU0sa0JBQWtCLENBQUM7QUFDekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBWXRELCtDQUErQztBQUMvQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsc0JBQXNCLEdBQ3ZCLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsR0FHaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLE1BQU0sa0JBQWtCLENBQUM7QUFDekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBWXRELCtDQUErQztBQUMvQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsc0JBQXNCLEdBQ3ZCLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIn0=