@codama/renderers-rust 1.2.7 → 1.2.9
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/index.node.cjs +193 -260
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +113 -203
- package/dist/index.node.mjs.map +1 -1
- package/dist/types/getRenderMapVisitor.d.ts +3 -1
- package/dist/types/getRenderMapVisitor.d.ts.map +1 -1
- package/package.json +10 -10
package/dist/index.node.cjs
CHANGED
|
@@ -1,42 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
29
4
|
|
|
30
|
-
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
5
|
+
var errors = require('@codama/errors');
|
|
6
|
+
var nodes = require('@codama/nodes');
|
|
7
|
+
var renderersCore = require('@codama/renderers-core');
|
|
8
|
+
var visitorsCore = require('@codama/visitors-core');
|
|
9
|
+
var codecsStrings = require('@solana/codecs-strings');
|
|
10
|
+
var path = require('path');
|
|
11
|
+
require('url');
|
|
12
|
+
var nunjucks = require('nunjucks');
|
|
13
|
+
var child_process = require('child_process');
|
|
14
|
+
|
|
15
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
|
|
17
|
+
var nunjucks__default = /*#__PURE__*/_interopDefault(nunjucks);
|
|
40
18
|
|
|
41
19
|
// src/ImportMap.ts
|
|
42
20
|
var DEFAULT_MODULE_MAP = {
|
|
@@ -108,48 +86,26 @@ var ImportMap = class _ImportMap {
|
|
|
108
86
|
return importStatements.join("\n");
|
|
109
87
|
}
|
|
110
88
|
};
|
|
111
|
-
|
|
112
|
-
// src/getRenderMapVisitor.ts
|
|
113
|
-
var import_errors3 = require("@codama/errors");
|
|
114
|
-
var import_nodes6 = require("@codama/nodes");
|
|
115
|
-
var import_renderers_core = require("@codama/renderers-core");
|
|
116
|
-
var import_visitors_core4 = require("@codama/visitors-core");
|
|
117
|
-
|
|
118
|
-
// src/getTypeManifestVisitor.ts
|
|
119
|
-
var import_errors2 = require("@codama/errors");
|
|
120
|
-
var import_nodes5 = require("@codama/nodes");
|
|
121
|
-
var import_visitors_core3 = require("@codama/visitors-core");
|
|
122
|
-
|
|
123
|
-
// src/utils/codecs.ts
|
|
124
|
-
var import_codecs_strings = require("@solana/codecs-strings");
|
|
125
89
|
function getBytesFromBytesValueNode(node) {
|
|
126
90
|
switch (node.encoding) {
|
|
127
91
|
case "utf8":
|
|
128
|
-
return
|
|
92
|
+
return codecsStrings.getUtf8Encoder().encode(node.data);
|
|
129
93
|
case "base16":
|
|
130
|
-
return
|
|
94
|
+
return codecsStrings.getBase16Encoder().encode(node.data);
|
|
131
95
|
case "base58":
|
|
132
|
-
return
|
|
96
|
+
return codecsStrings.getBase58Encoder().encode(node.data);
|
|
133
97
|
case "base64":
|
|
134
98
|
default:
|
|
135
|
-
return
|
|
99
|
+
return codecsStrings.getBase64Encoder().encode(node.data);
|
|
136
100
|
}
|
|
137
101
|
}
|
|
138
|
-
|
|
139
|
-
// src/utils/discriminatorConstant.ts
|
|
140
|
-
var import_nodes2 = require("@codama/nodes");
|
|
141
|
-
var import_visitors_core2 = require("@codama/visitors-core");
|
|
142
|
-
|
|
143
|
-
// src/renderValueNodeVisitor.ts
|
|
144
|
-
var import_nodes = require("@codama/nodes");
|
|
145
|
-
var import_visitors_core = require("@codama/visitors-core");
|
|
146
102
|
function renderValueNode(value, getImportFrom, useStr = false) {
|
|
147
|
-
return
|
|
103
|
+
return visitorsCore.visit(value, renderValueNodeVisitor(getImportFrom, useStr));
|
|
148
104
|
}
|
|
149
105
|
function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
150
106
|
return {
|
|
151
107
|
visitArrayValue(node) {
|
|
152
|
-
const list = node.items.map((v) =>
|
|
108
|
+
const list = node.items.map((v) => visitorsCore.visit(v, this));
|
|
153
109
|
return {
|
|
154
110
|
imports: new ImportMap().mergeWith(...list.map((c) => c.imports)),
|
|
155
111
|
render: `[${list.map((c) => c.render).join(", ")}]`
|
|
@@ -163,18 +119,18 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
163
119
|
},
|
|
164
120
|
visitBytesValue(node) {
|
|
165
121
|
const bytes = getBytesFromBytesValueNode(node);
|
|
166
|
-
const numbers = Array.from(bytes).map(
|
|
167
|
-
return
|
|
122
|
+
const numbers = Array.from(bytes).map(nodes.numberValueNode);
|
|
123
|
+
return visitorsCore.visit(nodes.arrayValueNode(numbers), this);
|
|
168
124
|
},
|
|
169
125
|
visitConstantValue(node) {
|
|
170
|
-
if (
|
|
171
|
-
return
|
|
126
|
+
if (nodes.isNode(node.value, "bytesValueNode")) {
|
|
127
|
+
return visitorsCore.visit(node.value, this);
|
|
172
128
|
}
|
|
173
|
-
if (
|
|
174
|
-
return
|
|
129
|
+
if (nodes.isNode(node.type, "stringTypeNode") && nodes.isNode(node.value, "stringValueNode")) {
|
|
130
|
+
return visitorsCore.visit(nodes.bytesValueNode(node.type.encoding, node.value.string), this);
|
|
175
131
|
}
|
|
176
|
-
if (
|
|
177
|
-
const numberManifest =
|
|
132
|
+
if (nodes.isNode(node.type, "numberTypeNode") && nodes.isNode(node.value, "numberValueNode")) {
|
|
133
|
+
const numberManifest = visitorsCore.visit(node.value, this);
|
|
178
134
|
const { format, endian } = node.type;
|
|
179
135
|
const byteFunction = endian === "le" ? "to_le_bytes" : "to_be_bytes";
|
|
180
136
|
numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;
|
|
@@ -184,14 +140,14 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
184
140
|
},
|
|
185
141
|
visitEnumValue(node) {
|
|
186
142
|
const imports = new ImportMap();
|
|
187
|
-
const enumName =
|
|
188
|
-
const variantName =
|
|
143
|
+
const enumName = nodes.pascalCase(node.enum.name);
|
|
144
|
+
const variantName = nodes.pascalCase(node.variant);
|
|
189
145
|
const importFrom = getImportFrom(node.enum);
|
|
190
146
|
imports.add(`${importFrom}::${enumName}`);
|
|
191
147
|
if (!node.value) {
|
|
192
148
|
return { imports, render: `${enumName}::${variantName}` };
|
|
193
149
|
}
|
|
194
|
-
const enumValue =
|
|
150
|
+
const enumValue = visitorsCore.visit(node.value, this);
|
|
195
151
|
const fields = enumValue.render;
|
|
196
152
|
return {
|
|
197
153
|
imports: imports.mergeWith(enumValue.imports),
|
|
@@ -199,15 +155,15 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
199
155
|
};
|
|
200
156
|
},
|
|
201
157
|
visitMapEntryValue(node) {
|
|
202
|
-
const mapKey =
|
|
203
|
-
const mapValue =
|
|
158
|
+
const mapKey = visitorsCore.visit(node.key, this);
|
|
159
|
+
const mapValue = visitorsCore.visit(node.value, this);
|
|
204
160
|
return {
|
|
205
161
|
imports: mapKey.imports.mergeWith(mapValue.imports),
|
|
206
162
|
render: `[${mapKey.render}, ${mapValue.render}]`
|
|
207
163
|
};
|
|
208
164
|
},
|
|
209
165
|
visitMapValue(node) {
|
|
210
|
-
const map = node.entries.map((entry) =>
|
|
166
|
+
const map = node.entries.map((entry) => visitorsCore.visit(entry, this));
|
|
211
167
|
const imports = new ImportMap().add("std::collection::HashMap");
|
|
212
168
|
return {
|
|
213
169
|
imports: imports.mergeWith(...map.map((c) => c.imports)),
|
|
@@ -233,7 +189,7 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
233
189
|
};
|
|
234
190
|
},
|
|
235
191
|
visitSetValue(node) {
|
|
236
|
-
const set = node.items.map((v) =>
|
|
192
|
+
const set = node.items.map((v) => visitorsCore.visit(v, this));
|
|
237
193
|
const imports = new ImportMap().add("std::collection::HashSet");
|
|
238
194
|
return {
|
|
239
195
|
imports: imports.mergeWith(...set.map((c) => c.imports)),
|
|
@@ -241,7 +197,7 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
241
197
|
};
|
|
242
198
|
},
|
|
243
199
|
visitSomeValue(node) {
|
|
244
|
-
const child =
|
|
200
|
+
const child = visitorsCore.visit(node.value, this);
|
|
245
201
|
return {
|
|
246
202
|
...child,
|
|
247
203
|
render: `Some(${child.render})`
|
|
@@ -254,21 +210,21 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
254
210
|
};
|
|
255
211
|
},
|
|
256
212
|
visitStructFieldValue(node) {
|
|
257
|
-
const structValue =
|
|
213
|
+
const structValue = visitorsCore.visit(node.value, this);
|
|
258
214
|
return {
|
|
259
215
|
imports: structValue.imports,
|
|
260
216
|
render: `${node.name}: ${structValue.render}`
|
|
261
217
|
};
|
|
262
218
|
},
|
|
263
219
|
visitStructValue(node) {
|
|
264
|
-
const struct = node.fields.map((field) =>
|
|
220
|
+
const struct = node.fields.map((field) => visitorsCore.visit(field, this));
|
|
265
221
|
return {
|
|
266
222
|
imports: new ImportMap().mergeWith(...struct.map((c) => c.imports)),
|
|
267
223
|
render: `{ ${struct.map((c) => c.render).join(", ")} }`
|
|
268
224
|
};
|
|
269
225
|
},
|
|
270
226
|
visitTupleValue(node) {
|
|
271
|
-
const tuple = node.items.map((v) =>
|
|
227
|
+
const tuple = node.items.map((v) => visitorsCore.visit(v, this));
|
|
272
228
|
return {
|
|
273
229
|
imports: new ImportMap().mergeWith(...tuple.map((c) => c.imports)),
|
|
274
230
|
render: `(${tuple.map((c) => c.render).join(", ")})`
|
|
@@ -299,31 +255,28 @@ function getDiscriminatorConstant(discriminatorNode, scope) {
|
|
|
299
255
|
}
|
|
300
256
|
function getConstantDiscriminatorConstant(discriminatorNode, scope) {
|
|
301
257
|
const { discriminatorNodes, getImportFrom, prefix, typeManifestVisitor } = scope;
|
|
302
|
-
const index = discriminatorNodes.filter(
|
|
258
|
+
const index = discriminatorNodes.filter(nodes.isNodeFilter("constantDiscriminatorNode")).indexOf(discriminatorNode);
|
|
303
259
|
const suffix = index <= 0 ? "" : `_${index + 1}`;
|
|
304
|
-
const name =
|
|
305
|
-
const typeManifest =
|
|
260
|
+
const name = nodes.camelCase(`${prefix}_discriminator${suffix}`);
|
|
261
|
+
const typeManifest = visitorsCore.visit(discriminatorNode.constant.type, typeManifestVisitor);
|
|
306
262
|
const value = renderValueNode(discriminatorNode.constant.value, getImportFrom);
|
|
307
263
|
return getConstant(name, typeManifest, value);
|
|
308
264
|
}
|
|
309
265
|
function getFieldDiscriminatorConstant(discriminatorNode, scope) {
|
|
310
266
|
const { fields, prefix, getImportFrom, typeManifestVisitor } = scope;
|
|
311
267
|
const field = fields.find((f) => f.name === discriminatorNode.name);
|
|
312
|
-
if (!field || !field.defaultValue || !
|
|
268
|
+
if (!field || !field.defaultValue || !nodes.isNode(field.defaultValue, nodes.VALUE_NODES)) {
|
|
313
269
|
return null;
|
|
314
270
|
}
|
|
315
|
-
const name =
|
|
316
|
-
const typeManifest =
|
|
271
|
+
const name = nodes.camelCase(`${prefix}_${discriminatorNode.name}`);
|
|
272
|
+
const typeManifest = visitorsCore.visit(field.type, typeManifestVisitor);
|
|
317
273
|
const value = renderValueNode(field.defaultValue, getImportFrom);
|
|
318
274
|
return getConstant(name, typeManifest, value);
|
|
319
275
|
}
|
|
320
276
|
function getConstant(name, typeManifest, value) {
|
|
321
277
|
const type = { imports: typeManifest.imports, render: typeManifest.type };
|
|
322
|
-
return mergeFragments([type, value], ([t, v]) => `pub const ${
|
|
278
|
+
return mergeFragments([type, value], ([t, v]) => `pub const ${nodes.snakeCase(name).toUpperCase()}: ${t} = ${v};`);
|
|
323
279
|
}
|
|
324
|
-
|
|
325
|
-
// src/utils/linkOverrides.ts
|
|
326
|
-
var import_errors = require("@codama/errors");
|
|
327
280
|
function getImportFromFactory(overrides) {
|
|
328
281
|
const linkOverrides = {
|
|
329
282
|
accounts: overrides.accounts ?? {},
|
|
@@ -349,7 +302,7 @@ function getImportFromFactory(overrides) {
|
|
|
349
302
|
case "resolverValueNode":
|
|
350
303
|
return linkOverrides.resolvers[node.name] ?? "hooked";
|
|
351
304
|
default:
|
|
352
|
-
throw new
|
|
305
|
+
throw new errors.CodamaError(errors.CODAMA_ERROR__UNEXPECTED_NODE_KIND, {
|
|
353
306
|
expectedKinds: [
|
|
354
307
|
"AccountLinkNode",
|
|
355
308
|
"DefinedTypeLinkNode",
|
|
@@ -364,12 +317,6 @@ function getImportFromFactory(overrides) {
|
|
|
364
317
|
}
|
|
365
318
|
};
|
|
366
319
|
}
|
|
367
|
-
|
|
368
|
-
// src/utils/render.ts
|
|
369
|
-
var import_node_path = require("path");
|
|
370
|
-
var import_node_url = require("url");
|
|
371
|
-
var import_nodes3 = require("@codama/nodes");
|
|
372
|
-
var import_nunjucks = __toESM(require("nunjucks"));
|
|
373
320
|
function rustDocblock(docs) {
|
|
374
321
|
if (docs.length <= 0) return "";
|
|
375
322
|
const lines = docs.map((doc) => `/// ${doc}`);
|
|
@@ -377,14 +324,14 @@ function rustDocblock(docs) {
|
|
|
377
324
|
`;
|
|
378
325
|
}
|
|
379
326
|
var render = (template, context, options) => {
|
|
380
|
-
const dirname =
|
|
381
|
-
const templates =
|
|
382
|
-
const env =
|
|
383
|
-
env.addFilter("pascalCase",
|
|
384
|
-
env.addFilter("camelCase",
|
|
385
|
-
env.addFilter("snakeCase",
|
|
386
|
-
env.addFilter("kebabCase",
|
|
387
|
-
env.addFilter("titleCase",
|
|
327
|
+
const dirname = __dirname;
|
|
328
|
+
const templates = path.join(dirname, "templates");
|
|
329
|
+
const env = nunjucks__default.default.configure(templates, { autoescape: false, trimBlocks: true, ...options });
|
|
330
|
+
env.addFilter("pascalCase", nodes.pascalCase);
|
|
331
|
+
env.addFilter("camelCase", nodes.camelCase);
|
|
332
|
+
env.addFilter("snakeCase", nodes.snakeCase);
|
|
333
|
+
env.addFilter("kebabCase", nodes.kebabCase);
|
|
334
|
+
env.addFilter("titleCase", nodes.titleCase);
|
|
388
335
|
env.addFilter("rustDocblock", rustDocblock);
|
|
389
336
|
env.addFilter("hasTrait", (traits, ...traitNames) => {
|
|
390
337
|
if (typeof traits !== "string") return false;
|
|
@@ -392,9 +339,6 @@ var render = (template, context, options) => {
|
|
|
392
339
|
});
|
|
393
340
|
return env.render(template, context);
|
|
394
341
|
};
|
|
395
|
-
|
|
396
|
-
// src/utils/traitOptions.ts
|
|
397
|
-
var import_nodes4 = require("@codama/nodes");
|
|
398
342
|
var DEFAULT_TRAIT_OPTIONS = {
|
|
399
343
|
baseDefaults: [
|
|
400
344
|
"borsh::BorshSerialize",
|
|
@@ -417,14 +361,14 @@ function getTraitsFromNodeFactory(options = {}) {
|
|
|
417
361
|
return (node) => getTraitsFromNode(node, options);
|
|
418
362
|
}
|
|
419
363
|
function getTraitsFromNode(node, userOptions = {}) {
|
|
420
|
-
|
|
364
|
+
nodes.assertIsNode(node, ["accountNode", "definedTypeNode", "instructionNode"]);
|
|
421
365
|
const options = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };
|
|
422
366
|
const nodeType = getNodeType(node);
|
|
423
367
|
if (nodeType === "alias") {
|
|
424
368
|
return { imports: new ImportMap(), render: "" };
|
|
425
369
|
}
|
|
426
370
|
const sanitizedOverrides = Object.fromEntries(
|
|
427
|
-
Object.entries(options.overrides).map(([key, value]) => [
|
|
371
|
+
Object.entries(options.overrides).map(([key, value]) => [nodes.camelCase(key), value])
|
|
428
372
|
);
|
|
429
373
|
const nodeOverrides = sanitizedOverrides[node.name];
|
|
430
374
|
const allTraits = nodeOverrides === void 0 ? getDefaultTraits(nodeType, options) : nodeOverrides;
|
|
@@ -446,10 +390,10 @@ function getTraitsFromNode(node, userOptions = {}) {
|
|
|
446
390
|
return { imports, render: traitLines.join("") };
|
|
447
391
|
}
|
|
448
392
|
function getNodeType(node) {
|
|
449
|
-
if (
|
|
450
|
-
if (
|
|
451
|
-
if (
|
|
452
|
-
return
|
|
393
|
+
if (nodes.isNode(node, ["accountNode", "instructionNode"])) return "struct";
|
|
394
|
+
if (nodes.isNode(node.type, "structTypeNode")) return "struct";
|
|
395
|
+
if (nodes.isNode(node.type, "enumTypeNode")) {
|
|
396
|
+
return nodes.isScalarEnum(node.type) ? "scalarEnum" : "dataEnum";
|
|
453
397
|
}
|
|
454
398
|
return "alias";
|
|
455
399
|
}
|
|
@@ -495,14 +439,14 @@ function extractFullyQualifiedNames(traits, imports) {
|
|
|
495
439
|
});
|
|
496
440
|
}
|
|
497
441
|
function getSerdeFieldAttribute(serdeWith, node, userOptions = {}) {
|
|
498
|
-
|
|
442
|
+
nodes.assertIsNode(node, ["accountNode", "definedTypeNode", "instructionNode"]);
|
|
499
443
|
const options = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };
|
|
500
444
|
const nodeType = getNodeType(node);
|
|
501
445
|
if (nodeType === "alias") {
|
|
502
446
|
return "";
|
|
503
447
|
}
|
|
504
448
|
const sanitizedOverrides = Object.fromEntries(
|
|
505
|
-
Object.entries(options.overrides).map(([key, value]) => [
|
|
449
|
+
Object.entries(options.overrides).map(([key, value]) => [nodes.camelCase(key), value])
|
|
506
450
|
);
|
|
507
451
|
const nodeOverrides = sanitizedOverrides[node.name];
|
|
508
452
|
const allTraits = nodeOverrides === void 0 ? getDefaultTraits(nodeType, options) : nodeOverrides;
|
|
@@ -539,20 +483,20 @@ function getTypeManifestVisitor(options) {
|
|
|
539
483
|
let inlineStruct = false;
|
|
540
484
|
let parentSize = null;
|
|
541
485
|
let parentNode = null;
|
|
542
|
-
return
|
|
543
|
-
|
|
486
|
+
return visitorsCore.pipe(
|
|
487
|
+
visitorsCore.mergeVisitor(
|
|
544
488
|
() => ({ imports: new ImportMap(), nestedStructs: [], type: "" }),
|
|
545
489
|
(_, values) => ({
|
|
546
490
|
...mergeManifests(values),
|
|
547
491
|
type: values.map((v) => v.type).join("\n")
|
|
548
492
|
}),
|
|
549
|
-
{ keys: [...
|
|
493
|
+
{ keys: [...nodes.REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"] }
|
|
550
494
|
),
|
|
551
|
-
(v) =>
|
|
495
|
+
(v) => visitorsCore.extendVisitor(v, {
|
|
552
496
|
visitAccount(account, { self }) {
|
|
553
|
-
parentName =
|
|
497
|
+
parentName = nodes.pascalCase(account.name);
|
|
554
498
|
parentNode = account;
|
|
555
|
-
const manifest =
|
|
499
|
+
const manifest = visitorsCore.visit(account.data, self);
|
|
556
500
|
const traits = getTraitsFromNode2(account);
|
|
557
501
|
manifest.imports.mergeWith(traits.imports);
|
|
558
502
|
parentName = null;
|
|
@@ -563,21 +507,21 @@ function getTypeManifestVisitor(options) {
|
|
|
563
507
|
};
|
|
564
508
|
},
|
|
565
509
|
visitArrayType(arrayType, { self }) {
|
|
566
|
-
const childManifest =
|
|
567
|
-
if (
|
|
510
|
+
const childManifest = visitorsCore.visit(arrayType.item, self);
|
|
511
|
+
if (nodes.isNode(arrayType.count, "fixedCountNode")) {
|
|
568
512
|
return {
|
|
569
513
|
...childManifest,
|
|
570
514
|
type: `[${childManifest.type}; ${arrayType.count.value}]`
|
|
571
515
|
};
|
|
572
516
|
}
|
|
573
|
-
if (
|
|
517
|
+
if (nodes.isNode(arrayType.count, "remainderCountNode")) {
|
|
574
518
|
childManifest.imports.add("kaigan::types::RemainderVec");
|
|
575
519
|
return {
|
|
576
520
|
...childManifest,
|
|
577
521
|
type: `RemainderVec<${childManifest.type}>`
|
|
578
522
|
};
|
|
579
523
|
}
|
|
580
|
-
const prefix =
|
|
524
|
+
const prefix = nodes.resolveNestedTypeNode(arrayType.count.prefix);
|
|
581
525
|
if (prefix.endian === "le") {
|
|
582
526
|
switch (prefix.format) {
|
|
583
527
|
case "u32":
|
|
@@ -609,7 +553,7 @@ function getTypeManifestVisitor(options) {
|
|
|
609
553
|
throw new Error("Array size not supported by Borsh");
|
|
610
554
|
},
|
|
611
555
|
visitBooleanType(booleanType) {
|
|
612
|
-
const resolvedSize =
|
|
556
|
+
const resolvedSize = nodes.resolveNestedTypeNode(booleanType.size);
|
|
613
557
|
if (resolvedSize.format === "u8" && resolvedSize.endian === "le") {
|
|
614
558
|
return {
|
|
615
559
|
imports: new ImportMap(),
|
|
@@ -620,28 +564,28 @@ function getTypeManifestVisitor(options) {
|
|
|
620
564
|
throw new Error("Bool size not supported by Borsh");
|
|
621
565
|
},
|
|
622
566
|
visitBytesType(_bytesType, { self }) {
|
|
623
|
-
let arraySize =
|
|
567
|
+
let arraySize = nodes.remainderCountNode();
|
|
624
568
|
if (typeof parentSize === "number") {
|
|
625
|
-
arraySize =
|
|
569
|
+
arraySize = nodes.fixedCountNode(parentSize);
|
|
626
570
|
} else if (parentSize && typeof parentSize === "object") {
|
|
627
|
-
arraySize =
|
|
571
|
+
arraySize = nodes.prefixedCountNode(parentSize);
|
|
628
572
|
}
|
|
629
|
-
const arrayType =
|
|
630
|
-
return
|
|
573
|
+
const arrayType = nodes.arrayTypeNode(nodes.numberTypeNode("u8"), arraySize);
|
|
574
|
+
return visitorsCore.visit(arrayType, self);
|
|
631
575
|
},
|
|
632
576
|
visitDefinedType(definedType, { self }) {
|
|
633
|
-
parentName =
|
|
577
|
+
parentName = nodes.pascalCase(definedType.name);
|
|
634
578
|
parentNode = definedType;
|
|
635
|
-
const manifest =
|
|
579
|
+
const manifest = visitorsCore.visit(definedType.type, self);
|
|
636
580
|
const traits = getTraitsFromNode2(definedType);
|
|
637
581
|
manifest.imports.mergeWith(traits.imports);
|
|
638
582
|
parentName = null;
|
|
639
583
|
parentNode = null;
|
|
640
|
-
const renderedType =
|
|
584
|
+
const renderedType = nodes.isNode(definedType.type, ["enumTypeNode", "structTypeNode"]) ? manifest.type : `pub type ${nodes.pascalCase(definedType.name)} = ${manifest.type};`;
|
|
641
585
|
return { ...manifest, type: `${traits.render}${renderedType}` };
|
|
642
586
|
},
|
|
643
587
|
visitDefinedTypeLink(node) {
|
|
644
|
-
const pascalCaseDefinedType =
|
|
588
|
+
const pascalCaseDefinedType = nodes.pascalCase(node.name);
|
|
645
589
|
const importFrom = getImportFrom(node);
|
|
646
590
|
return {
|
|
647
591
|
imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),
|
|
@@ -650,7 +594,7 @@ function getTypeManifestVisitor(options) {
|
|
|
650
594
|
};
|
|
651
595
|
},
|
|
652
596
|
visitEnumEmptyVariantType(enumEmptyVariantType) {
|
|
653
|
-
const name =
|
|
597
|
+
const name = nodes.pascalCase(enumEmptyVariantType.name);
|
|
654
598
|
return {
|
|
655
599
|
imports: new ImportMap(),
|
|
656
600
|
nestedStructs: [],
|
|
@@ -658,14 +602,14 @@ function getTypeManifestVisitor(options) {
|
|
|
658
602
|
};
|
|
659
603
|
},
|
|
660
604
|
visitEnumStructVariantType(enumStructVariantType, { self }) {
|
|
661
|
-
const name =
|
|
605
|
+
const name = nodes.pascalCase(enumStructVariantType.name);
|
|
662
606
|
const originalParentName = parentName;
|
|
663
607
|
if (!originalParentName) {
|
|
664
608
|
throw new Error("Enum struct variant type must have a parent name.");
|
|
665
609
|
}
|
|
666
610
|
inlineStruct = true;
|
|
667
|
-
parentName =
|
|
668
|
-
const typeManifest =
|
|
611
|
+
parentName = nodes.pascalCase(originalParentName) + name;
|
|
612
|
+
const typeManifest = visitorsCore.visit(enumStructVariantType.struct, self);
|
|
669
613
|
inlineStruct = false;
|
|
670
614
|
parentName = originalParentName;
|
|
671
615
|
return {
|
|
@@ -674,13 +618,13 @@ function getTypeManifestVisitor(options) {
|
|
|
674
618
|
};
|
|
675
619
|
},
|
|
676
620
|
visitEnumTupleVariantType(enumTupleVariantType, { self }) {
|
|
677
|
-
const name =
|
|
621
|
+
const name = nodes.pascalCase(enumTupleVariantType.name);
|
|
678
622
|
const originalParentName = parentName;
|
|
679
623
|
if (!originalParentName) {
|
|
680
624
|
throw new Error("Enum struct variant type must have a parent name.");
|
|
681
625
|
}
|
|
682
|
-
parentName =
|
|
683
|
-
const childManifest =
|
|
626
|
+
parentName = nodes.pascalCase(originalParentName) + name;
|
|
627
|
+
const childManifest = visitorsCore.visit(enumTupleVariantType.tuple, self);
|
|
684
628
|
parentName = originalParentName;
|
|
685
629
|
let derive = "";
|
|
686
630
|
if (parentNode && childManifest.type === "(Pubkey)") {
|
|
@@ -706,25 +650,25 @@ function getTypeManifestVisitor(options) {
|
|
|
706
650
|
if (!originalParentName) {
|
|
707
651
|
throw new Error("Enum type must have a parent name.");
|
|
708
652
|
}
|
|
709
|
-
const variants = enumType.variants.map((variant) =>
|
|
653
|
+
const variants = enumType.variants.map((variant) => visitorsCore.visit(variant, self));
|
|
710
654
|
const variantNames = variants.map((variant) => variant.type).join("\n");
|
|
711
655
|
const mergedManifest = mergeManifests(variants);
|
|
712
656
|
return {
|
|
713
657
|
...mergedManifest,
|
|
714
|
-
type: `pub enum ${
|
|
658
|
+
type: `pub enum ${nodes.pascalCase(originalParentName)} {
|
|
715
659
|
${variantNames}
|
|
716
660
|
}`
|
|
717
661
|
};
|
|
718
662
|
},
|
|
719
663
|
visitFixedSizeType(fixedSizeType, { self }) {
|
|
720
664
|
parentSize = fixedSizeType.size;
|
|
721
|
-
const manifest =
|
|
665
|
+
const manifest = visitorsCore.visit(fixedSizeType.type, self);
|
|
722
666
|
parentSize = null;
|
|
723
667
|
return manifest;
|
|
724
668
|
},
|
|
725
669
|
visitMapType(mapType, { self }) {
|
|
726
|
-
const key =
|
|
727
|
-
const value =
|
|
670
|
+
const key = visitorsCore.visit(mapType.key, self);
|
|
671
|
+
const value = visitorsCore.visit(mapType.value, self);
|
|
728
672
|
const mergedManifest = mergeManifests([key, value]);
|
|
729
673
|
mergedManifest.imports.add("std::collections::HashMap");
|
|
730
674
|
return {
|
|
@@ -750,8 +694,8 @@ ${variantNames}
|
|
|
750
694
|
};
|
|
751
695
|
},
|
|
752
696
|
visitOptionType(optionType, { self }) {
|
|
753
|
-
const childManifest =
|
|
754
|
-
const optionPrefix =
|
|
697
|
+
const childManifest = visitorsCore.visit(optionType.item, self);
|
|
698
|
+
const optionPrefix = nodes.resolveNestedTypeNode(optionType.prefix);
|
|
755
699
|
if (optionPrefix.format === "u8" && optionPrefix.endian === "le") {
|
|
756
700
|
return {
|
|
757
701
|
...childManifest,
|
|
@@ -768,10 +712,10 @@ ${variantNames}
|
|
|
768
712
|
};
|
|
769
713
|
},
|
|
770
714
|
visitRemainderOptionType(node) {
|
|
771
|
-
throw new
|
|
715
|
+
throw new errors.CodamaError(errors.CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });
|
|
772
716
|
},
|
|
773
717
|
visitSetType(setType, { self }) {
|
|
774
|
-
const childManifest =
|
|
718
|
+
const childManifest = visitorsCore.visit(setType.item, self);
|
|
775
719
|
childManifest.imports.add("std::collections::HashSet");
|
|
776
720
|
return {
|
|
777
721
|
...childManifest,
|
|
@@ -779,8 +723,8 @@ ${variantNames}
|
|
|
779
723
|
};
|
|
780
724
|
},
|
|
781
725
|
visitSizePrefixType(sizePrefixType, { self }) {
|
|
782
|
-
parentSize =
|
|
783
|
-
const manifest =
|
|
726
|
+
parentSize = nodes.resolveNestedTypeNode(sizePrefixType.prefix);
|
|
727
|
+
const manifest = visitorsCore.visit(sizePrefixType.type, self);
|
|
784
728
|
parentSize = null;
|
|
785
729
|
return manifest;
|
|
786
730
|
},
|
|
@@ -799,7 +743,7 @@ ${variantNames}
|
|
|
799
743
|
type: `[u8; ${parentSize}]`
|
|
800
744
|
};
|
|
801
745
|
}
|
|
802
|
-
if (
|
|
746
|
+
if (nodes.isNode(parentSize, "numberTypeNode") && parentSize.endian === "le") {
|
|
803
747
|
switch (parentSize.format) {
|
|
804
748
|
case "u32":
|
|
805
749
|
return {
|
|
@@ -830,16 +774,16 @@ ${variantNames}
|
|
|
830
774
|
if (!originalParentName) {
|
|
831
775
|
throw new Error("Struct field type must have a parent name.");
|
|
832
776
|
}
|
|
833
|
-
parentName =
|
|
777
|
+
parentName = nodes.pascalCase(originalParentName) + nodes.pascalCase(structFieldType.name);
|
|
834
778
|
nestedStruct = true;
|
|
835
779
|
inlineStruct = false;
|
|
836
|
-
const fieldManifest =
|
|
780
|
+
const fieldManifest = visitorsCore.visit(structFieldType.type, self);
|
|
837
781
|
parentName = originalParentName;
|
|
838
782
|
inlineStruct = originalInlineStruct;
|
|
839
783
|
nestedStruct = originalNestedStruct;
|
|
840
|
-
const fieldName =
|
|
841
|
-
const docblock = rustDocblock(
|
|
842
|
-
const resolvedNestedType =
|
|
784
|
+
const fieldName = nodes.snakeCase(structFieldType.name);
|
|
785
|
+
const docblock = rustDocblock(nodes.parseDocs(structFieldType.docs));
|
|
786
|
+
const resolvedNestedType = nodes.resolveNestedTypeNode(structFieldType.type);
|
|
843
787
|
let derive = "";
|
|
844
788
|
if (parentNode) {
|
|
845
789
|
if (fieldManifest.type === "Pubkey") {
|
|
@@ -854,9 +798,9 @@ ${variantNames}
|
|
|
854
798
|
parentNode,
|
|
855
799
|
traitOptions
|
|
856
800
|
);
|
|
857
|
-
} else if (
|
|
801
|
+
} else if (nodes.isNode(resolvedNestedType, "arrayTypeNode") && nodes.isNode(resolvedNestedType.count, "fixedCountNode") && resolvedNestedType.count.value > 32) {
|
|
858
802
|
derive = getSerdeFieldAttribute("serde_big_array::BigArray", parentNode, traitOptions);
|
|
859
|
-
} else if (
|
|
803
|
+
} else if (nodes.isNode(resolvedNestedType, ["bytesTypeNode", "stringTypeNode"]) && nodes.isNode(structFieldType.type, "fixedSizeTypeNode") && structFieldType.type.size > 32) {
|
|
860
804
|
derive = getSerdeFieldAttribute(
|
|
861
805
|
"serde_with::As::<serde_with::Bytes>",
|
|
862
806
|
parentNode,
|
|
@@ -874,23 +818,23 @@ ${variantNames}
|
|
|
874
818
|
if (!originalParentName) {
|
|
875
819
|
throw new Error("Struct type must have a parent name.");
|
|
876
820
|
}
|
|
877
|
-
const fields = structType.fields.map((field) =>
|
|
821
|
+
const fields = structType.fields.map((field) => visitorsCore.visit(field, self));
|
|
878
822
|
const fieldTypes = fields.map((field) => field.type).join("\n");
|
|
879
823
|
const mergedManifest = mergeManifests(fields);
|
|
880
824
|
if (nestedStruct) {
|
|
881
825
|
const nestedTraits = getTraitsFromNode2(
|
|
882
|
-
|
|
826
|
+
nodes.definedTypeNode({ name: originalParentName, type: structType })
|
|
883
827
|
);
|
|
884
828
|
mergedManifest.imports.mergeWith(nestedTraits.imports);
|
|
885
829
|
return {
|
|
886
830
|
...mergedManifest,
|
|
887
831
|
nestedStructs: [
|
|
888
832
|
...mergedManifest.nestedStructs,
|
|
889
|
-
`${nestedTraits.render}pub struct ${
|
|
833
|
+
`${nestedTraits.render}pub struct ${nodes.pascalCase(originalParentName)} {
|
|
890
834
|
${fieldTypes}
|
|
891
835
|
}`
|
|
892
836
|
],
|
|
893
|
-
type:
|
|
837
|
+
type: nodes.pascalCase(originalParentName)
|
|
894
838
|
};
|
|
895
839
|
}
|
|
896
840
|
if (inlineStruct) {
|
|
@@ -900,13 +844,13 @@ ${fieldTypes}
|
|
|
900
844
|
}
|
|
901
845
|
return {
|
|
902
846
|
...mergedManifest,
|
|
903
|
-
type: `pub struct ${
|
|
847
|
+
type: `pub struct ${nodes.pascalCase(originalParentName)} {
|
|
904
848
|
${fieldTypes}
|
|
905
849
|
}`
|
|
906
850
|
};
|
|
907
851
|
},
|
|
908
852
|
visitTupleType(tupleType, { self }) {
|
|
909
|
-
const items = tupleType.items.map((item) =>
|
|
853
|
+
const items = tupleType.items.map((item) => visitorsCore.visit(item, self));
|
|
910
854
|
const mergedManifest = mergeManifests(items);
|
|
911
855
|
return {
|
|
912
856
|
...mergedManifest,
|
|
@@ -914,7 +858,7 @@ ${fieldTypes}
|
|
|
914
858
|
};
|
|
915
859
|
},
|
|
916
860
|
visitZeroableOptionType(node) {
|
|
917
|
-
throw new
|
|
861
|
+
throw new errors.CodamaError(errors.CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });
|
|
918
862
|
}
|
|
919
863
|
})
|
|
920
864
|
);
|
|
@@ -928,8 +872,8 @@ function mergeManifests(manifests) {
|
|
|
928
872
|
|
|
929
873
|
// src/getRenderMapVisitor.ts
|
|
930
874
|
function getRenderMapVisitor(options = {}) {
|
|
931
|
-
const linkables = new
|
|
932
|
-
const stack = new
|
|
875
|
+
const linkables = new visitorsCore.LinkableDictionary();
|
|
876
|
+
const stack = new visitorsCore.NodeStack();
|
|
933
877
|
let program = null;
|
|
934
878
|
const renderParentInstructions = options.renderParentInstructions ?? false;
|
|
935
879
|
const dependencyMap = options.dependencyMap ?? {};
|
|
@@ -941,14 +885,14 @@ function getRenderMapVisitor(options = {}) {
|
|
|
941
885
|
traitOptions: options.traitOptions
|
|
942
886
|
});
|
|
943
887
|
const anchorTraits = options.anchorTraits ?? true;
|
|
944
|
-
return
|
|
945
|
-
|
|
888
|
+
return visitorsCore.pipe(
|
|
889
|
+
visitorsCore.staticVisitor(() => renderersCore.createRenderMap(), {
|
|
946
890
|
keys: ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
|
|
947
891
|
}),
|
|
948
|
-
(v) =>
|
|
892
|
+
(v) => visitorsCore.extendVisitor(v, {
|
|
949
893
|
visitAccount(node) {
|
|
950
|
-
const typeManifest =
|
|
951
|
-
const fields =
|
|
894
|
+
const typeManifest = visitorsCore.visit(node, typeManifestVisitor);
|
|
895
|
+
const fields = nodes.resolveNestedTypeNode(node.data).fields;
|
|
952
896
|
const discriminatorConstants = getDiscriminatorConstants({
|
|
953
897
|
discriminatorNodes: node.discriminators ?? [],
|
|
954
898
|
fields,
|
|
@@ -960,60 +904,58 @@ function getRenderMapVisitor(options = {}) {
|
|
|
960
904
|
const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : void 0;
|
|
961
905
|
const pdaSeeds = pda?.seeds ?? [];
|
|
962
906
|
const seeds = pdaSeeds.map((seed) => {
|
|
963
|
-
if (
|
|
964
|
-
const seedManifest2 =
|
|
907
|
+
if (nodes.isNode(seed, "variablePdaSeedNode")) {
|
|
908
|
+
const seedManifest2 = visitorsCore.visit(seed.type, typeManifestVisitor);
|
|
965
909
|
seedsImports.mergeWith(seedManifest2.imports);
|
|
966
|
-
const resolvedType2 =
|
|
910
|
+
const resolvedType2 = nodes.resolveNestedTypeNode(seed.type);
|
|
967
911
|
return { ...seed, resolvedType: resolvedType2, typeManifest: seedManifest2 };
|
|
968
912
|
}
|
|
969
|
-
if (
|
|
913
|
+
if (nodes.isNode(seed.value, "programIdValueNode")) {
|
|
970
914
|
return seed;
|
|
971
915
|
}
|
|
972
|
-
const seedManifest =
|
|
916
|
+
const seedManifest = visitorsCore.visit(seed.type, typeManifestVisitor);
|
|
973
917
|
const valueManifest = renderValueNode(seed.value, getImportFrom, true);
|
|
974
918
|
seedsImports.mergeWith(valueManifest.imports);
|
|
975
|
-
const resolvedType =
|
|
919
|
+
const resolvedType = nodes.resolveNestedTypeNode(seed.type);
|
|
976
920
|
return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };
|
|
977
921
|
});
|
|
978
|
-
const hasVariableSeeds = pdaSeeds.filter(
|
|
979
|
-
const constantSeeds = seeds.filter(
|
|
922
|
+
const hasVariableSeeds = pdaSeeds.filter(nodes.isNodeFilter("variablePdaSeedNode")).length > 0;
|
|
923
|
+
const constantSeeds = seeds.filter(nodes.isNodeFilter("constantPdaSeedNode")).filter((seed) => !nodes.isNode(seed.value, "programIdValueNode"));
|
|
980
924
|
const { imports } = typeManifest;
|
|
981
925
|
if (hasVariableSeeds) {
|
|
982
926
|
imports.mergeWith(seedsImports);
|
|
983
927
|
}
|
|
984
|
-
return (
|
|
985
|
-
|
|
986
|
-
render("accountsPage.njk", {
|
|
928
|
+
return renderersCore.createRenderMap(`accounts/${nodes.snakeCase(node.name)}.rs`, {
|
|
929
|
+
content: render("accountsPage.njk", {
|
|
987
930
|
account: node,
|
|
988
931
|
anchorTraits,
|
|
989
932
|
constantSeeds,
|
|
990
933
|
discriminatorConstants: discriminatorConstants.render,
|
|
991
934
|
hasVariableSeeds,
|
|
992
|
-
imports: imports.mergeWith(discriminatorConstants.imports).remove(`generatedAccounts::${
|
|
935
|
+
imports: imports.mergeWith(discriminatorConstants.imports).remove(`generatedAccounts::${nodes.pascalCase(node.name)}`).toString(dependencyMap),
|
|
993
936
|
pda,
|
|
994
937
|
program,
|
|
995
938
|
seeds,
|
|
996
939
|
typeManifest
|
|
997
940
|
})
|
|
998
|
-
);
|
|
941
|
+
});
|
|
999
942
|
},
|
|
1000
943
|
visitDefinedType(node) {
|
|
1001
|
-
const typeManifest =
|
|
944
|
+
const typeManifest = visitorsCore.visit(node, typeManifestVisitor);
|
|
1002
945
|
const imports = new ImportMap().mergeWithManifest(typeManifest);
|
|
1003
|
-
return (
|
|
1004
|
-
|
|
1005
|
-
render("definedTypesPage.njk", {
|
|
946
|
+
return renderersCore.createRenderMap(`types/${nodes.snakeCase(node.name)}.rs`, {
|
|
947
|
+
content: render("definedTypesPage.njk", {
|
|
1006
948
|
definedType: node,
|
|
1007
|
-
imports: imports.remove(`generatedTypes::${
|
|
949
|
+
imports: imports.remove(`generatedTypes::${nodes.pascalCase(node.name)}`).toString(dependencyMap),
|
|
1008
950
|
typeManifest
|
|
1009
951
|
})
|
|
1010
|
-
);
|
|
952
|
+
});
|
|
1011
953
|
},
|
|
1012
954
|
visitInstruction(node) {
|
|
1013
955
|
const imports = new ImportMap();
|
|
1014
956
|
const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);
|
|
1015
957
|
if (accountsAndArgsConflicts.length > 0) {
|
|
1016
|
-
|
|
958
|
+
errors.logWarn(
|
|
1017
959
|
`[Rust] Accounts and args of instruction [${node.name}] have the following conflicting attributes [${accountsAndArgsConflicts.join(", ")}]. Thus, the conflicting arguments will be suffixed with "_arg". You may want to rename the conflicting attributes.`
|
|
1018
960
|
);
|
|
1019
961
|
}
|
|
@@ -1032,12 +974,12 @@ function getRenderMapVisitor(options = {}) {
|
|
|
1032
974
|
getImportFrom,
|
|
1033
975
|
getTraitsFromNode: getTraitsFromNode2,
|
|
1034
976
|
nestedStruct: true,
|
|
1035
|
-
parentName: `${
|
|
977
|
+
parentName: `${nodes.pascalCase(node.name)}InstructionData`
|
|
1036
978
|
});
|
|
1037
|
-
const manifest =
|
|
979
|
+
const manifest = visitorsCore.visit(argument.type, argumentVisitor);
|
|
1038
980
|
imports.mergeWith(manifest.imports);
|
|
1039
|
-
const innerOptionType =
|
|
1040
|
-
const hasDefaultValue = !!argument.defaultValue &&
|
|
981
|
+
const innerOptionType = nodes.isNode(argument.type, "optionTypeNode") ? manifest.type.slice("Option<".length, -1) : null;
|
|
982
|
+
const hasDefaultValue = !!argument.defaultValue && nodes.isNode(argument.defaultValue, nodes.VALUE_NODES);
|
|
1041
983
|
let renderValue = null;
|
|
1042
984
|
if (hasDefaultValue) {
|
|
1043
985
|
const { imports: argImports, render: value } = renderValueNode(
|
|
@@ -1059,60 +1001,57 @@ function getRenderMapVisitor(options = {}) {
|
|
|
1059
1001
|
value: renderValue
|
|
1060
1002
|
});
|
|
1061
1003
|
});
|
|
1062
|
-
const struct =
|
|
1004
|
+
const struct = nodes.structTypeNodeFromInstructionArgumentNodes(node.arguments);
|
|
1063
1005
|
const structVisitor = getTypeManifestVisitor({
|
|
1064
1006
|
getImportFrom,
|
|
1065
1007
|
getTraitsFromNode: getTraitsFromNode2,
|
|
1066
|
-
parentName: `${
|
|
1008
|
+
parentName: `${nodes.pascalCase(node.name)}InstructionData`
|
|
1067
1009
|
});
|
|
1068
|
-
const typeManifest =
|
|
1010
|
+
const typeManifest = visitorsCore.visit(struct, structVisitor);
|
|
1069
1011
|
const dataTraits = getTraitsFromNode2(node);
|
|
1070
1012
|
imports.mergeWith(dataTraits.imports);
|
|
1071
|
-
return (
|
|
1072
|
-
|
|
1073
|
-
render("instructionsPage.njk", {
|
|
1013
|
+
return renderersCore.createRenderMap(`instructions/${nodes.snakeCase(node.name)}.rs`, {
|
|
1014
|
+
content: render("instructionsPage.njk", {
|
|
1074
1015
|
dataTraits: dataTraits.render,
|
|
1075
1016
|
discriminatorConstants: discriminatorConstants.render,
|
|
1076
1017
|
hasArgs,
|
|
1077
1018
|
hasOptional,
|
|
1078
|
-
imports: imports.mergeWith(discriminatorConstants.imports).remove(`generatedInstructions::${
|
|
1019
|
+
imports: imports.mergeWith(discriminatorConstants.imports).remove(`generatedInstructions::${nodes.pascalCase(node.name)}`).toString(dependencyMap),
|
|
1079
1020
|
instruction: node,
|
|
1080
1021
|
instructionArgs,
|
|
1081
1022
|
program,
|
|
1082
1023
|
typeManifest
|
|
1083
1024
|
})
|
|
1084
|
-
);
|
|
1025
|
+
});
|
|
1085
1026
|
},
|
|
1086
1027
|
visitProgram(node, { self }) {
|
|
1087
1028
|
program = node;
|
|
1088
|
-
let renders =
|
|
1089
|
-
...node.accounts.map((account) =>
|
|
1090
|
-
...node.definedTypes.map((type) =>
|
|
1091
|
-
...
|
|
1029
|
+
let renders = renderersCore.mergeRenderMaps([
|
|
1030
|
+
...node.accounts.map((account) => visitorsCore.visit(account, self)),
|
|
1031
|
+
...node.definedTypes.map((type) => visitorsCore.visit(type, self)),
|
|
1032
|
+
...nodes.getAllInstructionsWithSubs(node, {
|
|
1092
1033
|
leavesOnly: !renderParentInstructions
|
|
1093
|
-
}).map((ix) =>
|
|
1034
|
+
}).map((ix) => visitorsCore.visit(ix, self))
|
|
1094
1035
|
]);
|
|
1095
1036
|
if (node.errors.length > 0) {
|
|
1096
|
-
renders = (
|
|
1097
|
-
|
|
1098
|
-
`errors/${(0, import_nodes6.snakeCase)(node.name)}.rs`,
|
|
1099
|
-
render("errorsPage.njk", {
|
|
1037
|
+
renders = renderersCore.addToRenderMap(renders, `errors/${nodes.snakeCase(node.name)}.rs`, {
|
|
1038
|
+
content: render("errorsPage.njk", {
|
|
1100
1039
|
errors: node.errors,
|
|
1101
1040
|
imports: new ImportMap().toString(dependencyMap),
|
|
1102
1041
|
program: node
|
|
1103
1042
|
})
|
|
1104
|
-
);
|
|
1043
|
+
});
|
|
1105
1044
|
}
|
|
1106
1045
|
program = null;
|
|
1107
1046
|
return renders;
|
|
1108
1047
|
},
|
|
1109
1048
|
visitRoot(node, { self }) {
|
|
1110
|
-
const programsToExport =
|
|
1111
|
-
const accountsToExport =
|
|
1112
|
-
const instructionsToExport =
|
|
1049
|
+
const programsToExport = nodes.getAllPrograms(node);
|
|
1050
|
+
const accountsToExport = nodes.getAllAccounts(node);
|
|
1051
|
+
const instructionsToExport = nodes.getAllInstructionsWithSubs(node, {
|
|
1113
1052
|
leavesOnly: !renderParentInstructions
|
|
1114
1053
|
});
|
|
1115
|
-
const definedTypesToExport =
|
|
1054
|
+
const definedTypesToExport = nodes.getAllDefinedTypes(node);
|
|
1116
1055
|
const hasAnythingToExport = programsToExport.length > 0 || accountsToExport.length > 0 || instructionsToExport.length > 0 || definedTypesToExport.length > 0;
|
|
1117
1056
|
const ctx = {
|
|
1118
1057
|
accountsToExport,
|
|
@@ -1122,22 +1061,22 @@ function getRenderMapVisitor(options = {}) {
|
|
|
1122
1061
|
programsToExport,
|
|
1123
1062
|
root: node
|
|
1124
1063
|
};
|
|
1125
|
-
return
|
|
1126
|
-
|
|
1127
|
-
["accounts/mod.rs"]: accountsToExport.length > 0 ? render("accountsMod.njk", ctx) : void 0,
|
|
1128
|
-
["errors/mod.rs"]: programsToExport.length > 0 ? render("errorsMod.njk", ctx) : void 0,
|
|
1129
|
-
["instructions/mod.rs"]: instructionsToExport.length > 0 ? render("instructionsMod.njk", ctx) : void 0,
|
|
1130
|
-
["mod.rs"]: render("rootMod.njk", ctx),
|
|
1131
|
-
["programs.rs"]: programsToExport.length > 0 ? render("programsMod.njk", ctx) : void 0,
|
|
1132
|
-
["shared.rs"]: accountsToExport.length > 0 ? render("sharedPage.njk", ctx) : void 0,
|
|
1133
|
-
["types/mod.rs"]: definedTypesToExport.length > 0 ? render("definedTypesMod.njk", ctx) : void 0
|
|
1064
|
+
return renderersCore.mergeRenderMaps([
|
|
1065
|
+
renderersCore.createRenderMap({
|
|
1066
|
+
["accounts/mod.rs"]: accountsToExport.length > 0 ? { content: render("accountsMod.njk", ctx) } : void 0,
|
|
1067
|
+
["errors/mod.rs"]: programsToExport.length > 0 ? { content: render("errorsMod.njk", ctx) } : void 0,
|
|
1068
|
+
["instructions/mod.rs"]: instructionsToExport.length > 0 ? { content: render("instructionsMod.njk", ctx) } : void 0,
|
|
1069
|
+
["mod.rs"]: { content: render("rootMod.njk", ctx) },
|
|
1070
|
+
["programs.rs"]: programsToExport.length > 0 ? { content: render("programsMod.njk", ctx) } : void 0,
|
|
1071
|
+
["shared.rs"]: accountsToExport.length > 0 ? { content: render("sharedPage.njk", ctx) } : void 0,
|
|
1072
|
+
["types/mod.rs"]: definedTypesToExport.length > 0 ? { content: render("definedTypesMod.njk", ctx) } : void 0
|
|
1134
1073
|
}),
|
|
1135
|
-
...
|
|
1074
|
+
...nodes.getAllPrograms(node).map((p) => visitorsCore.visit(p, self))
|
|
1136
1075
|
]);
|
|
1137
1076
|
}
|
|
1138
1077
|
}),
|
|
1139
|
-
(v) =>
|
|
1140
|
-
(v) =>
|
|
1078
|
+
(v) => visitorsCore.recordNodeStackVisitor(v, stack),
|
|
1079
|
+
(v) => visitorsCore.recordLinkablesOnFirstVisitVisitor(v, linkables)
|
|
1141
1080
|
);
|
|
1142
1081
|
}
|
|
1143
1082
|
function getConflictsForInstructionAccountsAndArgs(instruction) {
|
|
@@ -1148,18 +1087,12 @@ function getConflictsForInstructionAccountsAndArgs(instruction) {
|
|
|
1148
1087
|
const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);
|
|
1149
1088
|
return [...new Set(duplicates)];
|
|
1150
1089
|
}
|
|
1151
|
-
|
|
1152
|
-
// src/renderVisitor.ts
|
|
1153
|
-
var import_errors4 = require("@codama/errors");
|
|
1154
|
-
var import_renderers_core2 = require("@codama/renderers-core");
|
|
1155
|
-
var import_visitors_core5 = require("@codama/visitors-core");
|
|
1156
|
-
var import_child_process = require("child_process");
|
|
1157
1090
|
function renderVisitor(path, options = {}) {
|
|
1158
|
-
return
|
|
1091
|
+
return visitorsCore.rootNodeVisitor((root) => {
|
|
1159
1092
|
if (options.deleteFolderBeforeRendering ?? true) {
|
|
1160
|
-
|
|
1093
|
+
renderersCore.deleteDirectory(path);
|
|
1161
1094
|
}
|
|
1162
|
-
|
|
1095
|
+
visitorsCore.visit(root, renderersCore.writeRenderMapVisitor(getRenderMapVisitor(options), path));
|
|
1163
1096
|
if (options.formatCode) {
|
|
1164
1097
|
if (options.crateFolder) {
|
|
1165
1098
|
const removeFalsy = (arg) => Boolean(arg);
|
|
@@ -1170,29 +1103,29 @@ function renderVisitor(path, options = {}) {
|
|
|
1170
1103
|
)
|
|
1171
1104
|
);
|
|
1172
1105
|
} else {
|
|
1173
|
-
|
|
1106
|
+
errors.logWarn("No crate folder specified, skipping formatting.");
|
|
1174
1107
|
}
|
|
1175
1108
|
}
|
|
1176
1109
|
});
|
|
1177
1110
|
}
|
|
1178
1111
|
function runFormatter(cmd, args) {
|
|
1179
|
-
const { stdout, stderr, error } =
|
|
1112
|
+
const { stdout, stderr, error } = child_process.spawnSync(cmd, args);
|
|
1180
1113
|
if (error?.message?.includes("ENOENT")) {
|
|
1181
|
-
|
|
1114
|
+
errors.logWarn(`Could not find ${cmd}, skipping formatting.`);
|
|
1182
1115
|
return;
|
|
1183
1116
|
}
|
|
1184
1117
|
if (stdout.length > 0) {
|
|
1185
|
-
|
|
1118
|
+
errors.logWarn(`(cargo-fmt) ${stdout ? stdout?.toString() : error}`);
|
|
1186
1119
|
}
|
|
1187
1120
|
if (stderr.length > 0) {
|
|
1188
|
-
|
|
1121
|
+
errors.logError(`(cargo-fmt) ${stderr ? stderr.toString() : error}`);
|
|
1189
1122
|
}
|
|
1190
1123
|
}
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1124
|
+
|
|
1125
|
+
exports.ImportMap = ImportMap;
|
|
1126
|
+
exports.default = renderVisitor;
|
|
1127
|
+
exports.getRenderMapVisitor = getRenderMapVisitor;
|
|
1128
|
+
exports.getTypeManifestVisitor = getTypeManifestVisitor;
|
|
1129
|
+
exports.renderVisitor = renderVisitor;
|
|
1130
|
+
//# sourceMappingURL=index.node.cjs.map
|
|
1198
1131
|
//# sourceMappingURL=index.node.cjs.map
|