@aztec/bb.js 0.0.1-commit.d3ec352c → 0.0.1-commit.e6bd8901
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/build/amd64-linux/bb +0 -0
- package/build/amd64-linux/nodejs_module.node +0 -0
- package/build/amd64-macos/bb +0 -0
- package/build/amd64-macos/nodejs_module.node +0 -0
- package/build/arm64-linux/bb +0 -0
- package/build/arm64-linux/nodejs_module.node +0 -0
- package/build/arm64-macos/bb +0 -0
- package/build/arm64-macos/nodejs_module.node +0 -0
- package/dest/browser/barretenberg/backend.d.ts +49 -17
- package/dest/browser/barretenberg/backend.d.ts.map +1 -1
- package/dest/browser/barretenberg/backend.js +109 -9
- package/dest/browser/barretenberg/index.d.ts +2 -2
- package/dest/browser/barretenberg/index.d.ts.map +1 -1
- package/dest/browser/barretenberg/index.js +2 -2
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
- package/dest/browser/bb_backends/index.d.ts +3 -1
- package/dest/browser/bb_backends/index.d.ts.map +1 -1
- package/dest/browser/cbind/generate.d.ts +5 -2
- package/dest/browser/cbind/generate.d.ts.map +1 -1
- package/dest/browser/cbind/generate.js +47 -25
- package/dest/browser/cbind/generated/api_types.d.ts +765 -1672
- package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/browser/cbind/generated/api_types.js +1453 -1525
- package/dest/browser/cbind/generated/async.d.ts +3 -5
- package/dest/browser/cbind/generated/async.d.ts.map +1 -1
- package/dest/browser/cbind/generated/async.js +13 -33
- package/dest/browser/cbind/generated/sync.d.ts +3 -5
- package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
- package/dest/browser/cbind/generated/sync.js +13 -31
- package/dest/browser/cbind/naming.d.ts +16 -0
- package/dest/browser/cbind/naming.d.ts.map +1 -0
- package/dest/browser/cbind/naming.js +24 -0
- package/dest/browser/cbind/rust_codegen.d.ts +26 -0
- package/dest/browser/cbind/rust_codegen.d.ts.map +1 -0
- package/dest/browser/cbind/rust_codegen.js +461 -0
- package/dest/browser/cbind/schema_visitor.d.ts +47 -0
- package/dest/browser/cbind/schema_visitor.d.ts.map +1 -0
- package/dest/browser/cbind/schema_visitor.js +158 -0
- package/dest/browser/cbind/typescript_codegen.d.ts +30 -0
- package/dest/browser/cbind/typescript_codegen.d.ts.map +1 -0
- package/dest/browser/cbind/typescript_codegen.js +365 -0
- package/dest/browser/index.d.ts +2 -2
- package/dest/browser/index.d.ts.map +1 -1
- package/dest/browser/index.js +2 -2
- package/dest/node/barretenberg/backend.d.ts +49 -17
- package/dest/node/barretenberg/backend.d.ts.map +1 -1
- package/dest/node/barretenberg/backend.js +109 -9
- package/dest/node/barretenberg/backend.test.d.ts +2 -0
- package/dest/node/barretenberg/backend.test.d.ts.map +1 -0
- package/dest/node/barretenberg/backend.test.js +103 -0
- package/dest/node/barretenberg/index.d.ts +2 -2
- package/dest/node/barretenberg/index.d.ts.map +1 -1
- package/dest/node/barretenberg/index.js +2 -2
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
- package/dest/node/bb_backends/index.d.ts +3 -1
- package/dest/node/bb_backends/index.d.ts.map +1 -1
- package/dest/node/bb_backends/node/index.d.ts +1 -1
- package/dest/node/bb_backends/node/index.d.ts.map +1 -1
- package/dest/node/bb_backends/node/index.js +5 -5
- package/dest/node/bb_backends/node/native_shm.d.ts +3 -2
- package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
- package/dest/node/bb_backends/node/native_shm.js +40 -21
- package/dest/node/bb_backends/node/native_shm_async.d.ts +2 -2
- package/dest/node/bb_backends/node/native_shm_async.d.ts.map +1 -1
- package/dest/node/bb_backends/node/native_shm_async.js +17 -21
- package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
- package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
- package/dest/node/bb_backends/node/native_socket.js +7 -5
- package/dest/node/bb_backends/node/platform.d.ts +1 -1
- package/dest/node/bb_backends/node/platform.d.ts.map +1 -1
- package/dest/node/bb_backends/node/platform.js +7 -2
- package/dest/node/cbind/generate.d.ts +5 -2
- package/dest/node/cbind/generate.d.ts.map +1 -1
- package/dest/node/cbind/generate.js +47 -25
- package/dest/node/cbind/generated/api_types.d.ts +765 -1672
- package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/node/cbind/generated/api_types.js +1453 -1525
- package/dest/node/cbind/generated/async.d.ts +3 -5
- package/dest/node/cbind/generated/async.d.ts.map +1 -1
- package/dest/node/cbind/generated/async.js +13 -33
- package/dest/node/cbind/generated/sync.d.ts +3 -5
- package/dest/node/cbind/generated/sync.d.ts.map +1 -1
- package/dest/node/cbind/generated/sync.js +13 -31
- package/dest/node/cbind/naming.d.ts +16 -0
- package/dest/node/cbind/naming.d.ts.map +1 -0
- package/dest/node/cbind/naming.js +24 -0
- package/dest/node/cbind/rust_codegen.d.ts +26 -0
- package/dest/node/cbind/rust_codegen.d.ts.map +1 -0
- package/dest/node/cbind/rust_codegen.js +461 -0
- package/dest/node/cbind/schema_visitor.d.ts +47 -0
- package/dest/node/cbind/schema_visitor.d.ts.map +1 -0
- package/dest/node/cbind/schema_visitor.js +158 -0
- package/dest/node/cbind/typescript_codegen.d.ts +30 -0
- package/dest/node/cbind/typescript_codegen.d.ts.map +1 -0
- package/dest/node/cbind/typescript_codegen.js +365 -0
- package/dest/node/index.d.ts +2 -2
- package/dest/node/index.d.ts.map +1 -1
- package/dest/node/index.js +2 -2
- package/dest/node-cjs/barretenberg/backend.d.ts +49 -17
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/backend.js +111 -9
- package/dest/node-cjs/barretenberg/backend.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/backend.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/backend.test.js +105 -0
- package/dest/node-cjs/barretenberg/index.d.ts +2 -2
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/index.js +4 -2
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
- package/dest/node-cjs/bb_backends/index.d.ts +3 -1
- package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/index.d.ts +1 -1
- package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/index.js +5 -5
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts +3 -2
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/native_shm.js +39 -20
- package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts +2 -2
- package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/native_shm_async.js +17 -21
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/native_socket.js +7 -5
- package/dest/node-cjs/bb_backends/node/platform.d.ts +1 -1
- package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/platform.js +7 -2
- package/dest/node-cjs/cbind/generate.d.ts +5 -2
- package/dest/node-cjs/cbind/generate.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generate.js +47 -25
- package/dest/node-cjs/cbind/generated/api_types.d.ts +765 -1672
- package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/api_types.js +1662 -1742
- package/dest/node-cjs/cbind/generated/async.d.ts +3 -5
- package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/async.js +12 -32
- package/dest/node-cjs/cbind/generated/sync.d.ts +3 -5
- package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/sync.js +12 -30
- package/dest/node-cjs/cbind/naming.d.ts +16 -0
- package/dest/node-cjs/cbind/naming.d.ts.map +1 -0
- package/dest/node-cjs/cbind/naming.js +28 -0
- package/dest/node-cjs/cbind/rust_codegen.d.ts +26 -0
- package/dest/node-cjs/cbind/rust_codegen.d.ts.map +1 -0
- package/dest/node-cjs/cbind/rust_codegen.js +465 -0
- package/dest/node-cjs/cbind/schema_visitor.d.ts +47 -0
- package/dest/node-cjs/cbind/schema_visitor.d.ts.map +1 -0
- package/dest/node-cjs/cbind/schema_visitor.js +162 -0
- package/dest/node-cjs/cbind/typescript_codegen.d.ts +30 -0
- package/dest/node-cjs/cbind/typescript_codegen.d.ts.map +1 -0
- package/dest/node-cjs/cbind/typescript_codegen.js +369 -0
- package/dest/node-cjs/index.d.ts +2 -2
- package/dest/node-cjs/index.d.ts.map +1 -1
- package/dest/node-cjs/index.js +4 -2
- package/package.json +1 -1
- package/src/barretenberg/backend.test.ts +122 -0
- package/src/barretenberg/backend.ts +149 -23
- package/src/barretenberg/index.ts +9 -1
- package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +1 -1
- package/src/bb_backends/index.ts +3 -0
- package/src/bb_backends/node/index.ts +9 -4
- package/src/bb_backends/node/native_shm.ts +38 -19
- package/src/bb_backends/node/native_shm_async.ts +15 -19
- package/src/bb_backends/node/native_socket.ts +7 -5
- package/src/bb_backends/node/platform.ts +6 -1
- package/src/cbind/generate.ts +51 -32
- package/src/cbind/generated/api_types.ts +1620 -2811
- package/src/cbind/generated/async.ts +13 -34
- package/src/cbind/generated/sync.ts +13 -32
- package/src/cbind/naming.ts +27 -0
- package/src/cbind/rust_codegen.ts +504 -0
- package/src/cbind/schema_visitor.ts +219 -0
- package/src/cbind/typescript_codegen.ts +419 -0
- package/src/index.ts +4 -0
- package/dest/browser/cbind/schema_compiler.d.ts +0 -68
- package/dest/browser/cbind/schema_compiler.d.ts.map +0 -1
- package/dest/browser/cbind/schema_compiler.js +0 -600
- package/dest/node/cbind/schema_compiler.d.ts +0 -68
- package/dest/node/cbind/schema_compiler.d.ts.map +0 -1
- package/dest/node/cbind/schema_compiler.js +0 -600
- package/dest/node-cjs/cbind/schema_compiler.d.ts +0 -68
- package/dest/node-cjs/cbind/schema_compiler.d.ts.map +0 -1
- package/dest/node-cjs/cbind/schema_compiler.js +0 -607
- package/src/cbind/schema_compiler.ts +0 -745
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Multi-language code generation from BB msgpack schema
|
|
4
|
+
*
|
|
5
|
+
* Architecture:
|
|
6
|
+
* Raw Schema → SchemaVisitor → CompiledSchema IR → Language Codegens → Files
|
|
4
7
|
*/
|
|
5
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
9
|
const fs_1 = require("fs");
|
|
@@ -9,23 +12,33 @@ const child_process_1 = require("child_process");
|
|
|
9
12
|
const util_1 = require("util");
|
|
10
13
|
const url_1 = require("url");
|
|
11
14
|
const msgpackr_1 = require("msgpackr");
|
|
12
|
-
const
|
|
15
|
+
const schema_visitor_js_1 = require("./schema_visitor.js");
|
|
16
|
+
const typescript_codegen_js_1 = require("./typescript_codegen.js");
|
|
17
|
+
const rust_codegen_js_1 = require("./rust_codegen.js");
|
|
13
18
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
14
|
-
const
|
|
19
|
+
const LANGUAGE_GENERATORS = [
|
|
15
20
|
{
|
|
16
|
-
name: '
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
name: 'TypeScript',
|
|
22
|
+
enabled: true,
|
|
23
|
+
generate: (compiled) => {
|
|
24
|
+
const tsGen = new typescript_codegen_js_1.TypeScriptCodegen();
|
|
25
|
+
return [
|
|
26
|
+
{ path: 'generated/api_types.ts', content: tsGen.generateTypes(compiled) },
|
|
27
|
+
{ path: 'generated/sync.ts', content: tsGen.generateSyncApi(compiled) },
|
|
28
|
+
{ path: 'generated/async.ts', content: tsGen.generateAsyncApi(compiled) },
|
|
29
|
+
];
|
|
30
|
+
},
|
|
19
31
|
},
|
|
20
32
|
{
|
|
21
|
-
name: '
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
name: 'Rust',
|
|
34
|
+
enabled: true,
|
|
35
|
+
generate: (compiled) => {
|
|
36
|
+
const rustGen = new rust_codegen_js_1.RustCodegen();
|
|
37
|
+
return [
|
|
38
|
+
{ path: '../../../rust/barretenberg-rs/src/generated_types.rs', content: rustGen.generateTypes(compiled) },
|
|
39
|
+
{ path: '../../../rust/barretenberg-rs/src/api.rs', content: rustGen.generateApi(compiled) },
|
|
40
|
+
];
|
|
41
|
+
},
|
|
29
42
|
},
|
|
30
43
|
];
|
|
31
44
|
// @ts-ignore
|
|
@@ -39,23 +52,32 @@ async function generate() {
|
|
|
39
52
|
if (!schema.commands || !schema.responses) {
|
|
40
53
|
throw new Error('Invalid schema: missing commands or responses');
|
|
41
54
|
}
|
|
42
|
-
|
|
55
|
+
// Compile schema once using visitor pattern
|
|
56
|
+
console.log('Compiling schema...');
|
|
57
|
+
const visitor = new schema_visitor_js_1.SchemaVisitor();
|
|
58
|
+
const compiled = visitor.visit(schema.commands, schema.responses);
|
|
59
|
+
console.log(`Found ${compiled.commands.length} commands, ${compiled.structs.size} structs\n`);
|
|
43
60
|
// Ensure output directory exists
|
|
44
61
|
const outputDir = (0, path_1.join)(__dirname, 'generated');
|
|
45
62
|
(0, fs_1.mkdirSync)(outputDir, { recursive: true });
|
|
46
|
-
// Generate
|
|
47
|
-
for (const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
63
|
+
// Generate all language bindings from compiled IR
|
|
64
|
+
for (const generator of LANGUAGE_GENERATORS) {
|
|
65
|
+
if (!generator.enabled) {
|
|
66
|
+
console.log(`⊘ ${generator.name}: disabled`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const files = generator.generate(compiled);
|
|
70
|
+
for (const file of files) {
|
|
71
|
+
const outputPath = (0, path_1.join)(__dirname, file.path);
|
|
72
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(outputPath), { recursive: true });
|
|
73
|
+
(0, fs_1.writeFileSync)(outputPath, file.content);
|
|
74
|
+
console.log(`✓ ${generator.name}: ${outputPath}`);
|
|
75
|
+
}
|
|
54
76
|
}
|
|
55
77
|
// Generate curve constants
|
|
56
78
|
console.log('\nGenerating curve constants...');
|
|
57
79
|
await generateCurveConstants(bbBuildPath, outputDir);
|
|
58
|
-
console.log('\
|
|
80
|
+
console.log('\n✨ Generation complete! Clean, maintainable, multi-language architecture.');
|
|
59
81
|
}
|
|
60
82
|
async function generateCurveConstants(bbBuildPath, outputDir) {
|
|
61
83
|
// Get curve constants from bb as msgpack binary
|
|
@@ -150,4 +172,4 @@ generate().catch(error => {
|
|
|
150
172
|
console.error('Generation failed:', error);
|
|
151
173
|
process.exit(1);
|
|
152
174
|
});
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2JpbmQvZ2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOztBQUVILDJCQUE4QztBQUM5QywrQkFBcUM7QUFDckMsaURBQXFDO0FBQ3JDLCtCQUFpQztBQUNqQyw2QkFBb0M7QUFDcEMsdUNBQWtDO0FBQ2xDLDJEQUF5RTtBQUN6RSxtRUFBNEQ7QUFDNUQsdURBQWdEO0FBRWhELE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQVMsRUFBQyxvQkFBSSxDQUFDLENBQUM7QUFTbEMsTUFBTSxtQkFBbUIsR0FBd0I7SUFDL0M7UUFDRSxJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSx5Q0FBaUIsRUFBRSxDQUFDO1lBQ3RDLE9BQU87Z0JBQ0wsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN2RSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2FBQzFFLENBQUM7UUFBQSxDQUNIO0tBQ0Y7SUFDRDtRQUNFLElBQUksRUFBRSxNQUFNO1FBQ1osT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksNkJBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU87Z0JBQ0wsRUFBRSxJQUFJLEVBQUUsc0RBQXNELEVB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
|