-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathcodama.mjs
More file actions
99 lines (98 loc) · 4.43 KB
/
codama.mjs
File metadata and controls
99 lines (98 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import * as c from 'codama';
export default {
idl: 'program/idl.json',
before: [],
scripts: {
js: {
from: '@codama/renderers-js',
args: ['clients/js/src/generated', { packageFolder: 'clients/js', syncPackageJson: true }],
},
rust: [
{
from: 'codama#bottomUpTransformerVisitor',
args: [
[
{
select: '[remainderOptionTypeNode]',
transform: node => {
c.assertIsNode(node, 'remainderOptionTypeNode');
if (c.isNode(node.item, 'bytesTypeNode')) {
return c.definedTypeLinkNode('remainderOptionBytes');
}
if (c.isNode(node.item, 'publicKeyTypeNode')) {
return c.definedTypeLinkNode('remainderOptionPubkey');
}
if (c.isNode(node.item, 'definedTypeLinkNode') && node.item.name === 'seed') {
return c.definedTypeLinkNode('remainderOptionSeed');
}
return node;
},
},
{
select: '[zeroableOptionTypeNode]',
transform: node => {
c.assertIsNode(node, 'zeroableOptionTypeNode');
if (c.isNode(node.item, 'publicKeyTypeNode')) {
return c.definedTypeLinkNode('zeroableOptionPubkey');
}
if (c.isNode(node.item, 'numberTypeNode') && node.item.format === 'u32') {
return c.definedTypeLinkNode('zeroableOptionOffset');
}
return node;
},
},
{
select: '[instructionArgumentNode]',
transform: node => {
c.assertIsNode(node, 'instructionArgumentNode');
if (node.defaultValue === undefined) {
return node;
}
if (!c.isNode(node.type, 'definedTypeLinkNode')) {
return node;
}
if (
!(
node.type.name.startsWith('remainderOption') ||
node.type.name.startsWith('zeroableOption')
)
) {
return node;
}
return c.instructionArgumentNode({ ...node, defaultValue: undefined });
},
},
{
select: '[accountNode]',
transform: node => {
c.assertIsNode(node, 'accountNode');
return c.accountNode({ ...node, pda: undefined });
},
},
],
],
},
{
from: '@codama/renderers-rust',
args: [
'clients/rust/src/generated',
{
formatCode: true,
crateFolder: 'clients/rust',
toolchain: '+nightly-2025-02-16',
anchorTraits: false,
linkOverrides: {
definedTypes: {
remainderOptionBytes: 'hooked',
remainderOptionPubkey: 'hooked',
remainderOptionSeed: 'hooked',
zeroableOptionPubkey: 'hooked',
zeroableOptionOffset: 'hooked',
},
},
},
],
},
],
},
};