@codama/renderers-rust 1.0.15 → 1.0.16
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 +225 -167
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +163 -89
- package/dist/index.node.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.node.cjs
CHANGED
|
@@ -1,20 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
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);
|
|
16
29
|
|
|
17
|
-
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
ImportMap: () => ImportMap,
|
|
34
|
+
default: () => renderVisitor,
|
|
35
|
+
getRenderMapVisitor: () => getRenderMapVisitor,
|
|
36
|
+
getTypeManifestVisitor: () => getTypeManifestVisitor,
|
|
37
|
+
renderVisitor: () => renderVisitor
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(index_exports);
|
|
18
40
|
|
|
19
41
|
// src/ImportMap.ts
|
|
20
42
|
var DEFAULT_MODULE_MAP = {
|
|
@@ -86,19 +108,36 @@ var ImportMap = class _ImportMap {
|
|
|
86
108
|
return importStatements.join("\n");
|
|
87
109
|
}
|
|
88
110
|
};
|
|
111
|
+
|
|
112
|
+
// src/getRenderMapVisitor.ts
|
|
113
|
+
var import_errors3 = require("@codama/errors");
|
|
114
|
+
var import_nodes5 = require("@codama/nodes");
|
|
115
|
+
var import_renderers_core = require("@codama/renderers-core");
|
|
116
|
+
var import_visitors_core3 = require("@codama/visitors-core");
|
|
117
|
+
|
|
118
|
+
// src/getTypeManifestVisitor.ts
|
|
119
|
+
var import_errors2 = require("@codama/errors");
|
|
120
|
+
var import_nodes3 = require("@codama/nodes");
|
|
121
|
+
var import_visitors_core = require("@codama/visitors-core");
|
|
122
|
+
|
|
123
|
+
// src/utils/codecs.ts
|
|
124
|
+
var import_codecs_strings = require("@solana/codecs-strings");
|
|
89
125
|
function getBytesFromBytesValueNode(node) {
|
|
90
126
|
switch (node.encoding) {
|
|
91
127
|
case "utf8":
|
|
92
|
-
return
|
|
128
|
+
return (0, import_codecs_strings.getUtf8Encoder)().encode(node.data);
|
|
93
129
|
case "base16":
|
|
94
|
-
return
|
|
130
|
+
return (0, import_codecs_strings.getBase16Encoder)().encode(node.data);
|
|
95
131
|
case "base58":
|
|
96
|
-
return
|
|
132
|
+
return (0, import_codecs_strings.getBase58Encoder)().encode(node.data);
|
|
97
133
|
case "base64":
|
|
98
134
|
default:
|
|
99
|
-
return
|
|
135
|
+
return (0, import_codecs_strings.getBase64Encoder)().encode(node.data);
|
|
100
136
|
}
|
|
101
137
|
}
|
|
138
|
+
|
|
139
|
+
// src/utils/linkOverrides.ts
|
|
140
|
+
var import_errors = require("@codama/errors");
|
|
102
141
|
function getImportFromFactory(overrides) {
|
|
103
142
|
const linkOverrides = {
|
|
104
143
|
accounts: overrides.accounts ?? {},
|
|
@@ -124,7 +163,7 @@ function getImportFromFactory(overrides) {
|
|
|
124
163
|
case "resolverValueNode":
|
|
125
164
|
return linkOverrides.resolvers[node.name] ?? "hooked";
|
|
126
165
|
default:
|
|
127
|
-
throw new
|
|
166
|
+
throw new import_errors.CodamaError(import_errors.CODAMA_ERROR__UNEXPECTED_NODE_KIND, {
|
|
128
167
|
expectedKinds: [
|
|
129
168
|
"AccountLinkNode",
|
|
130
169
|
"DefinedTypeLinkNode",
|
|
@@ -139,6 +178,12 @@ function getImportFromFactory(overrides) {
|
|
|
139
178
|
}
|
|
140
179
|
};
|
|
141
180
|
}
|
|
181
|
+
|
|
182
|
+
// src/utils/render.ts
|
|
183
|
+
var import_node_path = require("path");
|
|
184
|
+
var import_node_url = require("url");
|
|
185
|
+
var import_nodes = require("@codama/nodes");
|
|
186
|
+
var import_nunjucks = __toESM(require("nunjucks"));
|
|
142
187
|
function rustDocblock(docs) {
|
|
143
188
|
if (docs.length <= 0) return "";
|
|
144
189
|
const lines = docs.map((doc) => `/// ${doc}`);
|
|
@@ -146,17 +191,20 @@ function rustDocblock(docs) {
|
|
|
146
191
|
`;
|
|
147
192
|
}
|
|
148
193
|
var render = (template, context, options) => {
|
|
149
|
-
const dirname = __dirname;
|
|
150
|
-
const templates =
|
|
151
|
-
const env =
|
|
152
|
-
env.addFilter("pascalCase",
|
|
153
|
-
env.addFilter("camelCase",
|
|
154
|
-
env.addFilter("snakeCase",
|
|
155
|
-
env.addFilter("kebabCase",
|
|
156
|
-
env.addFilter("titleCase",
|
|
194
|
+
const dirname = false ? pathDirname(fileURLToPath(import_meta.url)) : __dirname;
|
|
195
|
+
const templates = false ? (0, import_node_path.join)(dirname, "..", "..", "public", "templates") : (0, import_node_path.join)(dirname, "templates");
|
|
196
|
+
const env = import_nunjucks.default.configure(templates, { autoescape: false, trimBlocks: true, ...options });
|
|
197
|
+
env.addFilter("pascalCase", import_nodes.pascalCase);
|
|
198
|
+
env.addFilter("camelCase", import_nodes.camelCase);
|
|
199
|
+
env.addFilter("snakeCase", import_nodes.snakeCase);
|
|
200
|
+
env.addFilter("kebabCase", import_nodes.kebabCase);
|
|
201
|
+
env.addFilter("titleCase", import_nodes.titleCase);
|
|
157
202
|
env.addFilter("rustDocblock", rustDocblock);
|
|
158
203
|
return env.render(template, context);
|
|
159
204
|
};
|
|
205
|
+
|
|
206
|
+
// src/utils/traitOptions.ts
|
|
207
|
+
var import_nodes2 = require("@codama/nodes");
|
|
160
208
|
var DEFAULT_TRAIT_OPTIONS = {
|
|
161
209
|
baseDefaults: [
|
|
162
210
|
"borsh::BorshSerialize",
|
|
@@ -179,14 +227,14 @@ function getTraitsFromNodeFactory(options = {}) {
|
|
|
179
227
|
return (node) => getTraitsFromNode(node, options);
|
|
180
228
|
}
|
|
181
229
|
function getTraitsFromNode(node, userOptions = {}) {
|
|
182
|
-
|
|
230
|
+
(0, import_nodes2.assertIsNode)(node, ["accountNode", "definedTypeNode", "instructionNode"]);
|
|
183
231
|
const options = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };
|
|
184
232
|
const nodeType = getNodeType(node);
|
|
185
233
|
if (nodeType === "alias") {
|
|
186
234
|
return { imports: new ImportMap(), render: "" };
|
|
187
235
|
}
|
|
188
236
|
const sanitizedOverrides = Object.fromEntries(
|
|
189
|
-
Object.entries(options.overrides).map(([key, value]) => [
|
|
237
|
+
Object.entries(options.overrides).map(([key, value]) => [(0, import_nodes2.camelCase)(key), value])
|
|
190
238
|
);
|
|
191
239
|
const nodeOverrides = sanitizedOverrides[node.name];
|
|
192
240
|
const allTraits = nodeOverrides === void 0 ? getDefaultTraits(nodeType, options) : nodeOverrides;
|
|
@@ -208,10 +256,10 @@ function getTraitsFromNode(node, userOptions = {}) {
|
|
|
208
256
|
return { imports, render: traitLines.join("") };
|
|
209
257
|
}
|
|
210
258
|
function getNodeType(node) {
|
|
211
|
-
if (
|
|
212
|
-
if (
|
|
213
|
-
if (
|
|
214
|
-
return
|
|
259
|
+
if ((0, import_nodes2.isNode)(node, ["accountNode", "instructionNode"])) return "struct";
|
|
260
|
+
if ((0, import_nodes2.isNode)(node.type, "structTypeNode")) return "struct";
|
|
261
|
+
if ((0, import_nodes2.isNode)(node.type, "enumTypeNode")) {
|
|
262
|
+
return (0, import_nodes2.isScalarEnum)(node.type) ? "scalarEnum" : "dataEnum";
|
|
215
263
|
}
|
|
216
264
|
return "alias";
|
|
217
265
|
}
|
|
@@ -264,19 +312,19 @@ function getTypeManifestVisitor(options) {
|
|
|
264
312
|
let nestedStruct = options.nestedStruct ?? false;
|
|
265
313
|
let inlineStruct = false;
|
|
266
314
|
let parentSize = null;
|
|
267
|
-
return
|
|
268
|
-
|
|
315
|
+
return (0, import_visitors_core.pipe)(
|
|
316
|
+
(0, import_visitors_core.mergeVisitor)(
|
|
269
317
|
() => ({ imports: new ImportMap(), nestedStructs: [], type: "" }),
|
|
270
318
|
(_, values) => ({
|
|
271
319
|
...mergeManifests(values),
|
|
272
320
|
type: values.map((v) => v.type).join("\n")
|
|
273
321
|
}),
|
|
274
|
-
{ keys: [...
|
|
322
|
+
{ keys: [...import_nodes3.REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"] }
|
|
275
323
|
),
|
|
276
|
-
(v) =>
|
|
324
|
+
(v) => (0, import_visitors_core.extendVisitor)(v, {
|
|
277
325
|
visitAccount(account, { self }) {
|
|
278
|
-
parentName =
|
|
279
|
-
const manifest =
|
|
326
|
+
parentName = (0, import_nodes3.pascalCase)(account.name);
|
|
327
|
+
const manifest = (0, import_visitors_core.visit)(account.data, self);
|
|
280
328
|
const traits = getTraitsFromNode2(account);
|
|
281
329
|
manifest.imports.mergeWith(traits.imports);
|
|
282
330
|
parentName = null;
|
|
@@ -286,21 +334,21 @@ function getTypeManifestVisitor(options) {
|
|
|
286
334
|
};
|
|
287
335
|
},
|
|
288
336
|
visitArrayType(arrayType, { self }) {
|
|
289
|
-
const childManifest =
|
|
290
|
-
if (
|
|
337
|
+
const childManifest = (0, import_visitors_core.visit)(arrayType.item, self);
|
|
338
|
+
if ((0, import_nodes3.isNode)(arrayType.count, "fixedCountNode")) {
|
|
291
339
|
return {
|
|
292
340
|
...childManifest,
|
|
293
341
|
type: `[${childManifest.type}; ${arrayType.count.value}]`
|
|
294
342
|
};
|
|
295
343
|
}
|
|
296
|
-
if (
|
|
344
|
+
if ((0, import_nodes3.isNode)(arrayType.count, "remainderCountNode")) {
|
|
297
345
|
childManifest.imports.add("kaigan::types::RemainderVec");
|
|
298
346
|
return {
|
|
299
347
|
...childManifest,
|
|
300
348
|
type: `RemainderVec<${childManifest.type}>`
|
|
301
349
|
};
|
|
302
350
|
}
|
|
303
|
-
const prefix =
|
|
351
|
+
const prefix = (0, import_nodes3.resolveNestedTypeNode)(arrayType.count.prefix);
|
|
304
352
|
if (prefix.endian === "le") {
|
|
305
353
|
switch (prefix.format) {
|
|
306
354
|
case "u32":
|
|
@@ -332,7 +380,7 @@ function getTypeManifestVisitor(options) {
|
|
|
332
380
|
throw new Error("Array size not supported by Borsh");
|
|
333
381
|
},
|
|
334
382
|
visitBooleanType(booleanType) {
|
|
335
|
-
const resolvedSize =
|
|
383
|
+
const resolvedSize = (0, import_nodes3.resolveNestedTypeNode)(booleanType.size);
|
|
336
384
|
if (resolvedSize.format === "u8" && resolvedSize.endian === "le") {
|
|
337
385
|
return {
|
|
338
386
|
imports: new ImportMap(),
|
|
@@ -343,26 +391,26 @@ function getTypeManifestVisitor(options) {
|
|
|
343
391
|
throw new Error("Bool size not supported by Borsh");
|
|
344
392
|
},
|
|
345
393
|
visitBytesType(_bytesType, { self }) {
|
|
346
|
-
let arraySize =
|
|
394
|
+
let arraySize = (0, import_nodes3.remainderCountNode)();
|
|
347
395
|
if (typeof parentSize === "number") {
|
|
348
|
-
arraySize =
|
|
396
|
+
arraySize = (0, import_nodes3.fixedCountNode)(parentSize);
|
|
349
397
|
} else if (parentSize && typeof parentSize === "object") {
|
|
350
|
-
arraySize =
|
|
398
|
+
arraySize = (0, import_nodes3.prefixedCountNode)(parentSize);
|
|
351
399
|
}
|
|
352
|
-
const arrayType =
|
|
353
|
-
return
|
|
400
|
+
const arrayType = (0, import_nodes3.arrayTypeNode)((0, import_nodes3.numberTypeNode)("u8"), arraySize);
|
|
401
|
+
return (0, import_visitors_core.visit)(arrayType, self);
|
|
354
402
|
},
|
|
355
403
|
visitDefinedType(definedType, { self }) {
|
|
356
|
-
parentName =
|
|
357
|
-
const manifest =
|
|
404
|
+
parentName = (0, import_nodes3.pascalCase)(definedType.name);
|
|
405
|
+
const manifest = (0, import_visitors_core.visit)(definedType.type, self);
|
|
358
406
|
const traits = getTraitsFromNode2(definedType);
|
|
359
407
|
manifest.imports.mergeWith(traits.imports);
|
|
360
408
|
parentName = null;
|
|
361
|
-
const renderedType =
|
|
409
|
+
const renderedType = (0, import_nodes3.isNode)(definedType.type, ["enumTypeNode", "structTypeNode"]) ? manifest.type : `pub type ${(0, import_nodes3.pascalCase)(definedType.name)} = ${manifest.type};`;
|
|
362
410
|
return { ...manifest, type: `${traits.render}${renderedType}` };
|
|
363
411
|
},
|
|
364
412
|
visitDefinedTypeLink(node) {
|
|
365
|
-
const pascalCaseDefinedType =
|
|
413
|
+
const pascalCaseDefinedType = (0, import_nodes3.pascalCase)(node.name);
|
|
366
414
|
const importFrom = getImportFrom(node);
|
|
367
415
|
return {
|
|
368
416
|
imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),
|
|
@@ -371,7 +419,7 @@ function getTypeManifestVisitor(options) {
|
|
|
371
419
|
};
|
|
372
420
|
},
|
|
373
421
|
visitEnumEmptyVariantType(enumEmptyVariantType) {
|
|
374
|
-
const name =
|
|
422
|
+
const name = (0, import_nodes3.pascalCase)(enumEmptyVariantType.name);
|
|
375
423
|
return {
|
|
376
424
|
imports: new ImportMap(),
|
|
377
425
|
nestedStructs: [],
|
|
@@ -379,14 +427,14 @@ function getTypeManifestVisitor(options) {
|
|
|
379
427
|
};
|
|
380
428
|
},
|
|
381
429
|
visitEnumStructVariantType(enumStructVariantType, { self }) {
|
|
382
|
-
const name =
|
|
430
|
+
const name = (0, import_nodes3.pascalCase)(enumStructVariantType.name);
|
|
383
431
|
const originalParentName = parentName;
|
|
384
432
|
if (!originalParentName) {
|
|
385
433
|
throw new Error("Enum struct variant type must have a parent name.");
|
|
386
434
|
}
|
|
387
435
|
inlineStruct = true;
|
|
388
|
-
parentName =
|
|
389
|
-
const typeManifest =
|
|
436
|
+
parentName = (0, import_nodes3.pascalCase)(originalParentName) + name;
|
|
437
|
+
const typeManifest = (0, import_visitors_core.visit)(enumStructVariantType.struct, self);
|
|
390
438
|
inlineStruct = false;
|
|
391
439
|
parentName = originalParentName;
|
|
392
440
|
return {
|
|
@@ -395,13 +443,13 @@ function getTypeManifestVisitor(options) {
|
|
|
395
443
|
};
|
|
396
444
|
},
|
|
397
445
|
visitEnumTupleVariantType(enumTupleVariantType, { self }) {
|
|
398
|
-
const name =
|
|
446
|
+
const name = (0, import_nodes3.pascalCase)(enumTupleVariantType.name);
|
|
399
447
|
const originalParentName = parentName;
|
|
400
448
|
if (!originalParentName) {
|
|
401
449
|
throw new Error("Enum struct variant type must have a parent name.");
|
|
402
450
|
}
|
|
403
|
-
parentName =
|
|
404
|
-
const childManifest =
|
|
451
|
+
parentName = (0, import_nodes3.pascalCase)(originalParentName) + name;
|
|
452
|
+
const childManifest = (0, import_visitors_core.visit)(enumTupleVariantType.tuple, self);
|
|
405
453
|
parentName = originalParentName;
|
|
406
454
|
let derive = "";
|
|
407
455
|
if (childManifest.type === "(Pubkey)") {
|
|
@@ -419,25 +467,25 @@ function getTypeManifestVisitor(options) {
|
|
|
419
467
|
if (!originalParentName) {
|
|
420
468
|
throw new Error("Enum type must have a parent name.");
|
|
421
469
|
}
|
|
422
|
-
const variants = enumType.variants.map((variant) =>
|
|
470
|
+
const variants = enumType.variants.map((variant) => (0, import_visitors_core.visit)(variant, self));
|
|
423
471
|
const variantNames = variants.map((variant) => variant.type).join("\n");
|
|
424
472
|
const mergedManifest = mergeManifests(variants);
|
|
425
473
|
return {
|
|
426
474
|
...mergedManifest,
|
|
427
|
-
type: `pub enum ${
|
|
475
|
+
type: `pub enum ${(0, import_nodes3.pascalCase)(originalParentName)} {
|
|
428
476
|
${variantNames}
|
|
429
477
|
}`
|
|
430
478
|
};
|
|
431
479
|
},
|
|
432
480
|
visitFixedSizeType(fixedSizeType, { self }) {
|
|
433
481
|
parentSize = fixedSizeType.size;
|
|
434
|
-
const manifest =
|
|
482
|
+
const manifest = (0, import_visitors_core.visit)(fixedSizeType.type, self);
|
|
435
483
|
parentSize = null;
|
|
436
484
|
return manifest;
|
|
437
485
|
},
|
|
438
486
|
visitMapType(mapType, { self }) {
|
|
439
|
-
const key =
|
|
440
|
-
const value =
|
|
487
|
+
const key = (0, import_visitors_core.visit)(mapType.key, self);
|
|
488
|
+
const value = (0, import_visitors_core.visit)(mapType.value, self);
|
|
441
489
|
const mergedManifest = mergeManifests([key, value]);
|
|
442
490
|
mergedManifest.imports.add("std::collections::HashMap");
|
|
443
491
|
return {
|
|
@@ -463,8 +511,8 @@ ${variantNames}
|
|
|
463
511
|
};
|
|
464
512
|
},
|
|
465
513
|
visitOptionType(optionType, { self }) {
|
|
466
|
-
const childManifest =
|
|
467
|
-
const optionPrefix =
|
|
514
|
+
const childManifest = (0, import_visitors_core.visit)(optionType.item, self);
|
|
515
|
+
const optionPrefix = (0, import_nodes3.resolveNestedTypeNode)(optionType.prefix);
|
|
468
516
|
if (optionPrefix.format === "u8" && optionPrefix.endian === "le") {
|
|
469
517
|
return {
|
|
470
518
|
...childManifest,
|
|
@@ -481,10 +529,10 @@ ${variantNames}
|
|
|
481
529
|
};
|
|
482
530
|
},
|
|
483
531
|
visitRemainderOptionType(node) {
|
|
484
|
-
throw new
|
|
532
|
+
throw new import_errors2.CodamaError(import_errors2.CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });
|
|
485
533
|
},
|
|
486
534
|
visitSetType(setType, { self }) {
|
|
487
|
-
const childManifest =
|
|
535
|
+
const childManifest = (0, import_visitors_core.visit)(setType.item, self);
|
|
488
536
|
childManifest.imports.add("std::collections::HashSet");
|
|
489
537
|
return {
|
|
490
538
|
...childManifest,
|
|
@@ -492,8 +540,8 @@ ${variantNames}
|
|
|
492
540
|
};
|
|
493
541
|
},
|
|
494
542
|
visitSizePrefixType(sizePrefixType, { self }) {
|
|
495
|
-
parentSize =
|
|
496
|
-
const manifest =
|
|
543
|
+
parentSize = (0, import_nodes3.resolveNestedTypeNode)(sizePrefixType.prefix);
|
|
544
|
+
const manifest = (0, import_visitors_core.visit)(sizePrefixType.type, self);
|
|
497
545
|
parentSize = null;
|
|
498
546
|
return manifest;
|
|
499
547
|
},
|
|
@@ -512,7 +560,7 @@ ${variantNames}
|
|
|
512
560
|
type: `[u8; ${parentSize}]`
|
|
513
561
|
};
|
|
514
562
|
}
|
|
515
|
-
if (
|
|
563
|
+
if ((0, import_nodes3.isNode)(parentSize, "numberTypeNode") && parentSize.endian === "le") {
|
|
516
564
|
switch (parentSize.format) {
|
|
517
565
|
case "u32":
|
|
518
566
|
return {
|
|
@@ -543,24 +591,24 @@ ${variantNames}
|
|
|
543
591
|
if (!originalParentName) {
|
|
544
592
|
throw new Error("Struct field type must have a parent name.");
|
|
545
593
|
}
|
|
546
|
-
parentName =
|
|
594
|
+
parentName = (0, import_nodes3.pascalCase)(originalParentName) + (0, import_nodes3.pascalCase)(structFieldType.name);
|
|
547
595
|
nestedStruct = true;
|
|
548
596
|
inlineStruct = false;
|
|
549
|
-
const fieldManifest =
|
|
597
|
+
const fieldManifest = (0, import_visitors_core.visit)(structFieldType.type, self);
|
|
550
598
|
parentName = originalParentName;
|
|
551
599
|
inlineStruct = originalInlineStruct;
|
|
552
600
|
nestedStruct = originalNestedStruct;
|
|
553
|
-
const fieldName =
|
|
601
|
+
const fieldName = (0, import_nodes3.snakeCase)(structFieldType.name);
|
|
554
602
|
const docblock = rustDocblock(structFieldType.docs);
|
|
555
|
-
const resolvedNestedType =
|
|
603
|
+
const resolvedNestedType = (0, import_nodes3.resolveNestedTypeNode)(structFieldType.type);
|
|
556
604
|
let derive = "";
|
|
557
605
|
if (fieldManifest.type === "Pubkey") {
|
|
558
606
|
derive = '#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::DisplayFromStr>"))]\n';
|
|
559
607
|
} else if (fieldManifest.type === "Vec<Pubkey>") {
|
|
560
608
|
derive = '#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<Vec<serde_with::DisplayFromStr>>"))]\n';
|
|
561
|
-
} else if (
|
|
609
|
+
} else if ((0, import_nodes3.isNode)(resolvedNestedType, "arrayTypeNode") && (0, import_nodes3.isNode)(resolvedNestedType.count, "fixedCountNode") && resolvedNestedType.count.value > 32) {
|
|
562
610
|
derive = '#[cfg_attr(feature = "serde", serde(with = "serde_big_array::BigArray"))]\n';
|
|
563
|
-
} else if (
|
|
611
|
+
} else if ((0, import_nodes3.isNode)(resolvedNestedType, ["bytesTypeNode", "stringTypeNode"]) && (0, import_nodes3.isNode)(structFieldType.type, "fixedSizeTypeNode") && structFieldType.type.size > 32) {
|
|
564
612
|
derive = '#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::Bytes>"))]\n';
|
|
565
613
|
}
|
|
566
614
|
return {
|
|
@@ -573,23 +621,23 @@ ${variantNames}
|
|
|
573
621
|
if (!originalParentName) {
|
|
574
622
|
throw new Error("Struct type must have a parent name.");
|
|
575
623
|
}
|
|
576
|
-
const fields = structType.fields.map((field) =>
|
|
624
|
+
const fields = structType.fields.map((field) => (0, import_visitors_core.visit)(field, self));
|
|
577
625
|
const fieldTypes = fields.map((field) => field.type).join("\n");
|
|
578
626
|
const mergedManifest = mergeManifests(fields);
|
|
579
627
|
if (nestedStruct) {
|
|
580
628
|
const nestedTraits = getTraitsFromNode2(
|
|
581
|
-
|
|
629
|
+
(0, import_nodes3.definedTypeNode)({ name: originalParentName, type: structType })
|
|
582
630
|
);
|
|
583
631
|
mergedManifest.imports.mergeWith(nestedTraits.imports);
|
|
584
632
|
return {
|
|
585
633
|
...mergedManifest,
|
|
586
634
|
nestedStructs: [
|
|
587
635
|
...mergedManifest.nestedStructs,
|
|
588
|
-
`${nestedTraits.render}pub struct ${
|
|
636
|
+
`${nestedTraits.render}pub struct ${(0, import_nodes3.pascalCase)(originalParentName)} {
|
|
589
637
|
${fieldTypes}
|
|
590
638
|
}`
|
|
591
639
|
],
|
|
592
|
-
type:
|
|
640
|
+
type: (0, import_nodes3.pascalCase)(originalParentName)
|
|
593
641
|
};
|
|
594
642
|
}
|
|
595
643
|
if (inlineStruct) {
|
|
@@ -599,13 +647,13 @@ ${fieldTypes}
|
|
|
599
647
|
}
|
|
600
648
|
return {
|
|
601
649
|
...mergedManifest,
|
|
602
|
-
type: `pub struct ${
|
|
650
|
+
type: `pub struct ${(0, import_nodes3.pascalCase)(originalParentName)} {
|
|
603
651
|
${fieldTypes}
|
|
604
652
|
}`
|
|
605
653
|
};
|
|
606
654
|
},
|
|
607
655
|
visitTupleType(tupleType, { self }) {
|
|
608
|
-
const items = tupleType.items.map((item) =>
|
|
656
|
+
const items = tupleType.items.map((item) => (0, import_visitors_core.visit)(item, self));
|
|
609
657
|
const mergedManifest = mergeManifests(items);
|
|
610
658
|
return {
|
|
611
659
|
...mergedManifest,
|
|
@@ -613,7 +661,7 @@ ${fieldTypes}
|
|
|
613
661
|
};
|
|
614
662
|
},
|
|
615
663
|
visitZeroableOptionType(node) {
|
|
616
|
-
throw new
|
|
664
|
+
throw new import_errors2.CodamaError(import_errors2.CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });
|
|
617
665
|
}
|
|
618
666
|
})
|
|
619
667
|
);
|
|
@@ -624,13 +672,17 @@ function mergeManifests(manifests) {
|
|
|
624
672
|
nestedStructs: manifests.flatMap((m) => m.nestedStructs)
|
|
625
673
|
};
|
|
626
674
|
}
|
|
675
|
+
|
|
676
|
+
// src/renderValueNodeVisitor.ts
|
|
677
|
+
var import_nodes4 = require("@codama/nodes");
|
|
678
|
+
var import_visitors_core2 = require("@codama/visitors-core");
|
|
627
679
|
function renderValueNode(value, getImportFrom, useStr = false) {
|
|
628
|
-
return
|
|
680
|
+
return (0, import_visitors_core2.visit)(value, renderValueNodeVisitor(getImportFrom, useStr));
|
|
629
681
|
}
|
|
630
682
|
function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
631
683
|
return {
|
|
632
684
|
visitArrayValue(node) {
|
|
633
|
-
const list = node.items.map((v) =>
|
|
685
|
+
const list = node.items.map((v) => (0, import_visitors_core2.visit)(v, this));
|
|
634
686
|
return {
|
|
635
687
|
imports: new ImportMap().mergeWith(...list.map((c) => c.imports)),
|
|
636
688
|
render: `[${list.map((c) => c.render).join(", ")}]`
|
|
@@ -644,18 +696,18 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
644
696
|
},
|
|
645
697
|
visitBytesValue(node) {
|
|
646
698
|
const bytes = getBytesFromBytesValueNode(node);
|
|
647
|
-
const numbers = Array.from(bytes).map(
|
|
648
|
-
return
|
|
699
|
+
const numbers = Array.from(bytes).map(import_nodes4.numberValueNode);
|
|
700
|
+
return (0, import_visitors_core2.visit)((0, import_nodes4.arrayValueNode)(numbers), this);
|
|
649
701
|
},
|
|
650
702
|
visitConstantValue(node) {
|
|
651
|
-
if (
|
|
652
|
-
return
|
|
703
|
+
if ((0, import_nodes4.isNode)(node.value, "bytesValueNode")) {
|
|
704
|
+
return (0, import_visitors_core2.visit)(node.value, this);
|
|
653
705
|
}
|
|
654
|
-
if (
|
|
655
|
-
return
|
|
706
|
+
if ((0, import_nodes4.isNode)(node.type, "stringTypeNode") && (0, import_nodes4.isNode)(node.value, "stringValueNode")) {
|
|
707
|
+
return (0, import_visitors_core2.visit)((0, import_nodes4.bytesValueNode)(node.type.encoding, node.value.string), this);
|
|
656
708
|
}
|
|
657
|
-
if (
|
|
658
|
-
const numberManifest =
|
|
709
|
+
if ((0, import_nodes4.isNode)(node.type, "numberTypeNode") && (0, import_nodes4.isNode)(node.value, "numberValueNode")) {
|
|
710
|
+
const numberManifest = (0, import_visitors_core2.visit)(node.value, this);
|
|
659
711
|
const { format, endian } = node.type;
|
|
660
712
|
const byteFunction = endian === "le" ? "to_le_bytes" : "to_be_bytes";
|
|
661
713
|
numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;
|
|
@@ -665,14 +717,14 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
665
717
|
},
|
|
666
718
|
visitEnumValue(node) {
|
|
667
719
|
const imports = new ImportMap();
|
|
668
|
-
const enumName =
|
|
669
|
-
const variantName =
|
|
720
|
+
const enumName = (0, import_nodes4.pascalCase)(node.enum.name);
|
|
721
|
+
const variantName = (0, import_nodes4.pascalCase)(node.variant);
|
|
670
722
|
const importFrom = getImportFrom(node.enum);
|
|
671
723
|
imports.add(`${importFrom}::${enumName}`);
|
|
672
724
|
if (!node.value) {
|
|
673
725
|
return { imports, render: `${enumName}::${variantName}` };
|
|
674
726
|
}
|
|
675
|
-
const enumValue =
|
|
727
|
+
const enumValue = (0, import_visitors_core2.visit)(node.value, this);
|
|
676
728
|
const fields = enumValue.render;
|
|
677
729
|
return {
|
|
678
730
|
imports: imports.mergeWith(enumValue.imports),
|
|
@@ -680,15 +732,15 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
680
732
|
};
|
|
681
733
|
},
|
|
682
734
|
visitMapEntryValue(node) {
|
|
683
|
-
const mapKey =
|
|
684
|
-
const mapValue =
|
|
735
|
+
const mapKey = (0, import_visitors_core2.visit)(node.key, this);
|
|
736
|
+
const mapValue = (0, import_visitors_core2.visit)(node.value, this);
|
|
685
737
|
return {
|
|
686
738
|
imports: mapKey.imports.mergeWith(mapValue.imports),
|
|
687
739
|
render: `[${mapKey.render}, ${mapValue.render}]`
|
|
688
740
|
};
|
|
689
741
|
},
|
|
690
742
|
visitMapValue(node) {
|
|
691
|
-
const map = node.entries.map((entry) =>
|
|
743
|
+
const map = node.entries.map((entry) => (0, import_visitors_core2.visit)(entry, this));
|
|
692
744
|
const imports = new ImportMap().add("std::collection::HashMap");
|
|
693
745
|
return {
|
|
694
746
|
imports: imports.mergeWith(...map.map((c) => c.imports)),
|
|
@@ -714,7 +766,7 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
714
766
|
};
|
|
715
767
|
},
|
|
716
768
|
visitSetValue(node) {
|
|
717
|
-
const set = node.items.map((v) =>
|
|
769
|
+
const set = node.items.map((v) => (0, import_visitors_core2.visit)(v, this));
|
|
718
770
|
const imports = new ImportMap().add("std::collection::HashSet");
|
|
719
771
|
return {
|
|
720
772
|
imports: imports.mergeWith(...set.map((c) => c.imports)),
|
|
@@ -722,7 +774,7 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
722
774
|
};
|
|
723
775
|
},
|
|
724
776
|
visitSomeValue(node) {
|
|
725
|
-
const child =
|
|
777
|
+
const child = (0, import_visitors_core2.visit)(node.value, this);
|
|
726
778
|
return {
|
|
727
779
|
...child,
|
|
728
780
|
render: `Some(${child.render})`
|
|
@@ -735,21 +787,21 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
735
787
|
};
|
|
736
788
|
},
|
|
737
789
|
visitStructFieldValue(node) {
|
|
738
|
-
const structValue =
|
|
790
|
+
const structValue = (0, import_visitors_core2.visit)(node.value, this);
|
|
739
791
|
return {
|
|
740
792
|
imports: structValue.imports,
|
|
741
793
|
render: `${node.name}: ${structValue.render}`
|
|
742
794
|
};
|
|
743
795
|
},
|
|
744
796
|
visitStructValue(node) {
|
|
745
|
-
const struct = node.fields.map((field) =>
|
|
797
|
+
const struct = node.fields.map((field) => (0, import_visitors_core2.visit)(field, this));
|
|
746
798
|
return {
|
|
747
799
|
imports: new ImportMap().mergeWith(...struct.map((c) => c.imports)),
|
|
748
800
|
render: `{ ${struct.map((c) => c.render).join(", ")} }`
|
|
749
801
|
};
|
|
750
802
|
},
|
|
751
803
|
visitTupleValue(node) {
|
|
752
|
-
const tuple = node.items.map((v) =>
|
|
804
|
+
const tuple = node.items.map((v) => (0, import_visitors_core2.visit)(v, this));
|
|
753
805
|
return {
|
|
754
806
|
imports: new ImportMap().mergeWith(...tuple.map((c) => c.imports)),
|
|
755
807
|
render: `(${tuple.map((c) => c.render).join(", ")})`
|
|
@@ -760,8 +812,8 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
|
|
|
760
812
|
|
|
761
813
|
// src/getRenderMapVisitor.ts
|
|
762
814
|
function getRenderMapVisitor(options = {}) {
|
|
763
|
-
const linkables = new
|
|
764
|
-
const stack = new
|
|
815
|
+
const linkables = new import_visitors_core3.LinkableDictionary();
|
|
816
|
+
const stack = new import_visitors_core3.NodeStack();
|
|
765
817
|
let program = null;
|
|
766
818
|
const renderParentInstructions = options.renderParentInstructions ?? false;
|
|
767
819
|
const dependencyMap = options.dependencyMap ?? {};
|
|
@@ -769,46 +821,46 @@ function getRenderMapVisitor(options = {}) {
|
|
|
769
821
|
const getTraitsFromNode2 = getTraitsFromNodeFactory(options.traitOptions);
|
|
770
822
|
const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode: getTraitsFromNode2 });
|
|
771
823
|
const anchorTraits = options.anchorTraits ?? true;
|
|
772
|
-
return
|
|
773
|
-
|
|
824
|
+
return (0, import_visitors_core3.pipe)(
|
|
825
|
+
(0, import_visitors_core3.staticVisitor)(() => new import_renderers_core.RenderMap(), {
|
|
774
826
|
keys: ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
|
|
775
827
|
}),
|
|
776
|
-
(v) =>
|
|
828
|
+
(v) => (0, import_visitors_core3.extendVisitor)(v, {
|
|
777
829
|
visitAccount(node) {
|
|
778
|
-
const typeManifest =
|
|
830
|
+
const typeManifest = (0, import_visitors_core3.visit)(node, typeManifestVisitor);
|
|
779
831
|
const seedsImports = new ImportMap();
|
|
780
832
|
const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : void 0;
|
|
781
833
|
const pdaSeeds = pda?.seeds ?? [];
|
|
782
834
|
const seeds = pdaSeeds.map((seed) => {
|
|
783
|
-
if (
|
|
784
|
-
const seedManifest2 =
|
|
835
|
+
if ((0, import_nodes5.isNode)(seed, "variablePdaSeedNode")) {
|
|
836
|
+
const seedManifest2 = (0, import_visitors_core3.visit)(seed.type, typeManifestVisitor);
|
|
785
837
|
seedsImports.mergeWith(seedManifest2.imports);
|
|
786
|
-
const resolvedType2 =
|
|
838
|
+
const resolvedType2 = (0, import_nodes5.resolveNestedTypeNode)(seed.type);
|
|
787
839
|
return { ...seed, resolvedType: resolvedType2, typeManifest: seedManifest2 };
|
|
788
840
|
}
|
|
789
|
-
if (
|
|
841
|
+
if ((0, import_nodes5.isNode)(seed.value, "programIdValueNode")) {
|
|
790
842
|
return seed;
|
|
791
843
|
}
|
|
792
|
-
const seedManifest =
|
|
844
|
+
const seedManifest = (0, import_visitors_core3.visit)(seed.type, typeManifestVisitor);
|
|
793
845
|
const valueManifest = renderValueNode(seed.value, getImportFrom, true);
|
|
794
846
|
seedsImports.mergeWith(valueManifest.imports);
|
|
795
|
-
const resolvedType =
|
|
847
|
+
const resolvedType = (0, import_nodes5.resolveNestedTypeNode)(seed.type);
|
|
796
848
|
return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };
|
|
797
849
|
});
|
|
798
|
-
const hasVariableSeeds = pdaSeeds.filter(
|
|
799
|
-
const constantSeeds = seeds.filter(
|
|
850
|
+
const hasVariableSeeds = pdaSeeds.filter((0, import_nodes5.isNodeFilter)("variablePdaSeedNode")).length > 0;
|
|
851
|
+
const constantSeeds = seeds.filter((0, import_nodes5.isNodeFilter)("constantPdaSeedNode")).filter((seed) => !(0, import_nodes5.isNode)(seed.value, "programIdValueNode"));
|
|
800
852
|
const { imports } = typeManifest;
|
|
801
853
|
if (hasVariableSeeds) {
|
|
802
854
|
imports.mergeWith(seedsImports);
|
|
803
855
|
}
|
|
804
|
-
return new
|
|
805
|
-
`accounts/${
|
|
856
|
+
return new import_renderers_core.RenderMap().add(
|
|
857
|
+
`accounts/${(0, import_nodes5.snakeCase)(node.name)}.rs`,
|
|
806
858
|
render("accountsPage.njk", {
|
|
807
859
|
account: node,
|
|
808
860
|
anchorTraits,
|
|
809
861
|
constantSeeds,
|
|
810
862
|
hasVariableSeeds,
|
|
811
|
-
imports: imports.remove(`generatedAccounts::${
|
|
863
|
+
imports: imports.remove(`generatedAccounts::${(0, import_nodes5.pascalCase)(node.name)}`).toString(dependencyMap),
|
|
812
864
|
pda,
|
|
813
865
|
program,
|
|
814
866
|
seeds,
|
|
@@ -817,13 +869,13 @@ function getRenderMapVisitor(options = {}) {
|
|
|
817
869
|
);
|
|
818
870
|
},
|
|
819
871
|
visitDefinedType(node) {
|
|
820
|
-
const typeManifest =
|
|
872
|
+
const typeManifest = (0, import_visitors_core3.visit)(node, typeManifestVisitor);
|
|
821
873
|
const imports = new ImportMap().mergeWithManifest(typeManifest);
|
|
822
|
-
return new
|
|
823
|
-
`types/${
|
|
874
|
+
return new import_renderers_core.RenderMap().add(
|
|
875
|
+
`types/${(0, import_nodes5.snakeCase)(node.name)}.rs`,
|
|
824
876
|
render("definedTypesPage.njk", {
|
|
825
877
|
definedType: node,
|
|
826
|
-
imports: imports.remove(`generatedTypes::${
|
|
878
|
+
imports: imports.remove(`generatedTypes::${(0, import_nodes5.pascalCase)(node.name)}`).toString(dependencyMap),
|
|
827
879
|
typeManifest
|
|
828
880
|
})
|
|
829
881
|
);
|
|
@@ -832,7 +884,7 @@ function getRenderMapVisitor(options = {}) {
|
|
|
832
884
|
const imports = new ImportMap();
|
|
833
885
|
const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);
|
|
834
886
|
if (accountsAndArgsConflicts.length > 0) {
|
|
835
|
-
|
|
887
|
+
(0, import_errors3.logWarn)(
|
|
836
888
|
`[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.`
|
|
837
889
|
);
|
|
838
890
|
}
|
|
@@ -844,12 +896,12 @@ function getRenderMapVisitor(options = {}) {
|
|
|
844
896
|
getImportFrom,
|
|
845
897
|
getTraitsFromNode: getTraitsFromNode2,
|
|
846
898
|
nestedStruct: true,
|
|
847
|
-
parentName: `${
|
|
899
|
+
parentName: `${(0, import_nodes5.pascalCase)(node.name)}InstructionData`
|
|
848
900
|
});
|
|
849
|
-
const manifest =
|
|
901
|
+
const manifest = (0, import_visitors_core3.visit)(argument.type, argumentVisitor);
|
|
850
902
|
imports.mergeWith(manifest.imports);
|
|
851
|
-
const innerOptionType =
|
|
852
|
-
const hasDefaultValue = !!argument.defaultValue &&
|
|
903
|
+
const innerOptionType = (0, import_nodes5.isNode)(argument.type, "optionTypeNode") ? manifest.type.slice("Option<".length, -1) : null;
|
|
904
|
+
const hasDefaultValue = !!argument.defaultValue && (0, import_nodes5.isNode)(argument.defaultValue, import_nodes5.VALUE_NODES);
|
|
853
905
|
let renderValue = null;
|
|
854
906
|
if (hasDefaultValue) {
|
|
855
907
|
const { imports: argImports, render: value } = renderValueNode(
|
|
@@ -871,22 +923,22 @@ function getRenderMapVisitor(options = {}) {
|
|
|
871
923
|
value: renderValue
|
|
872
924
|
});
|
|
873
925
|
});
|
|
874
|
-
const struct =
|
|
926
|
+
const struct = (0, import_nodes5.structTypeNodeFromInstructionArgumentNodes)(node.arguments);
|
|
875
927
|
const structVisitor = getTypeManifestVisitor({
|
|
876
928
|
getImportFrom,
|
|
877
929
|
getTraitsFromNode: getTraitsFromNode2,
|
|
878
|
-
parentName: `${
|
|
930
|
+
parentName: `${(0, import_nodes5.pascalCase)(node.name)}InstructionData`
|
|
879
931
|
});
|
|
880
|
-
const typeManifest =
|
|
932
|
+
const typeManifest = (0, import_visitors_core3.visit)(struct, structVisitor);
|
|
881
933
|
const dataTraits = getTraitsFromNode2(node);
|
|
882
934
|
imports.mergeWith(dataTraits.imports);
|
|
883
|
-
return new
|
|
884
|
-
`instructions/${
|
|
935
|
+
return new import_renderers_core.RenderMap().add(
|
|
936
|
+
`instructions/${(0, import_nodes5.snakeCase)(node.name)}.rs`,
|
|
885
937
|
render("instructionsPage.njk", {
|
|
886
938
|
dataTraits: dataTraits.render,
|
|
887
939
|
hasArgs,
|
|
888
940
|
hasOptional,
|
|
889
|
-
imports: imports.remove(`generatedInstructions::${
|
|
941
|
+
imports: imports.remove(`generatedInstructions::${(0, import_nodes5.pascalCase)(node.name)}`).toString(dependencyMap),
|
|
890
942
|
instruction: node,
|
|
891
943
|
instructionArgs,
|
|
892
944
|
program,
|
|
@@ -896,14 +948,14 @@ function getRenderMapVisitor(options = {}) {
|
|
|
896
948
|
},
|
|
897
949
|
visitProgram(node, { self }) {
|
|
898
950
|
program = node;
|
|
899
|
-
const renderMap = new
|
|
900
|
-
...
|
|
951
|
+
const renderMap = new import_renderers_core.RenderMap().mergeWith(...node.accounts.map((account) => (0, import_visitors_core3.visit)(account, self))).mergeWith(...node.definedTypes.map((type) => (0, import_visitors_core3.visit)(type, self))).mergeWith(
|
|
952
|
+
...(0, import_nodes5.getAllInstructionsWithSubs)(node, {
|
|
901
953
|
leavesOnly: !renderParentInstructions
|
|
902
|
-
}).map((ix) =>
|
|
954
|
+
}).map((ix) => (0, import_visitors_core3.visit)(ix, self))
|
|
903
955
|
);
|
|
904
956
|
if (node.errors.length > 0) {
|
|
905
957
|
renderMap.add(
|
|
906
|
-
`errors/${
|
|
958
|
+
`errors/${(0, import_nodes5.snakeCase)(node.name)}.rs`,
|
|
907
959
|
render("errorsPage.njk", {
|
|
908
960
|
errors: node.errors,
|
|
909
961
|
imports: new ImportMap().toString(dependencyMap),
|
|
@@ -915,12 +967,12 @@ function getRenderMapVisitor(options = {}) {
|
|
|
915
967
|
return renderMap;
|
|
916
968
|
},
|
|
917
969
|
visitRoot(node, { self }) {
|
|
918
|
-
const programsToExport =
|
|
919
|
-
const accountsToExport =
|
|
920
|
-
const instructionsToExport =
|
|
970
|
+
const programsToExport = (0, import_nodes5.getAllPrograms)(node);
|
|
971
|
+
const accountsToExport = (0, import_nodes5.getAllAccounts)(node);
|
|
972
|
+
const instructionsToExport = (0, import_nodes5.getAllInstructionsWithSubs)(node, {
|
|
921
973
|
leavesOnly: !renderParentInstructions
|
|
922
974
|
});
|
|
923
|
-
const definedTypesToExport =
|
|
975
|
+
const definedTypesToExport = (0, import_nodes5.getAllDefinedTypes)(node);
|
|
924
976
|
const hasAnythingToExport = programsToExport.length > 0 || accountsToExport.length > 0 || instructionsToExport.length > 0 || definedTypesToExport.length > 0;
|
|
925
977
|
const ctx = {
|
|
926
978
|
accountsToExport,
|
|
@@ -930,7 +982,7 @@ function getRenderMapVisitor(options = {}) {
|
|
|
930
982
|
programsToExport,
|
|
931
983
|
root: node
|
|
932
984
|
};
|
|
933
|
-
const map = new
|
|
985
|
+
const map = new import_renderers_core.RenderMap();
|
|
934
986
|
if (accountsToExport.length > 0) {
|
|
935
987
|
map.add("shared.rs", render("sharedPage.njk", ctx));
|
|
936
988
|
}
|
|
@@ -949,11 +1001,11 @@ function getRenderMapVisitor(options = {}) {
|
|
|
949
1001
|
if (definedTypesToExport.length > 0) {
|
|
950
1002
|
map.add("types/mod.rs", render("definedTypesMod.njk", ctx));
|
|
951
1003
|
}
|
|
952
|
-
return map.add("mod.rs", render("rootMod.njk", ctx)).mergeWith(...
|
|
1004
|
+
return map.add("mod.rs", render("rootMod.njk", ctx)).mergeWith(...(0, import_nodes5.getAllPrograms)(node).map((p) => (0, import_visitors_core3.visit)(p, self)));
|
|
953
1005
|
}
|
|
954
1006
|
}),
|
|
955
|
-
(v) =>
|
|
956
|
-
(v) =>
|
|
1007
|
+
(v) => (0, import_visitors_core3.recordNodeStackVisitor)(v, stack),
|
|
1008
|
+
(v) => (0, import_visitors_core3.recordLinkablesOnFirstVisitVisitor)(v, linkables)
|
|
957
1009
|
);
|
|
958
1010
|
}
|
|
959
1011
|
function getConflictsForInstructionAccountsAndArgs(instruction) {
|
|
@@ -964,40 +1016,46 @@ function getConflictsForInstructionAccountsAndArgs(instruction) {
|
|
|
964
1016
|
const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);
|
|
965
1017
|
return [...new Set(duplicates)];
|
|
966
1018
|
}
|
|
1019
|
+
|
|
1020
|
+
// src/renderVisitor.ts
|
|
1021
|
+
var import_errors4 = require("@codama/errors");
|
|
1022
|
+
var import_renderers_core2 = require("@codama/renderers-core");
|
|
1023
|
+
var import_visitors_core4 = require("@codama/visitors-core");
|
|
1024
|
+
var import_child_process = require("child_process");
|
|
967
1025
|
function renderVisitor(path, options = {}) {
|
|
968
|
-
return
|
|
1026
|
+
return (0, import_visitors_core4.rootNodeVisitor)((root) => {
|
|
969
1027
|
if (options.deleteFolderBeforeRendering ?? true) {
|
|
970
|
-
|
|
1028
|
+
(0, import_renderers_core2.deleteDirectory)(path);
|
|
971
1029
|
}
|
|
972
|
-
|
|
1030
|
+
(0, import_visitors_core4.visit)(root, (0, import_renderers_core2.writeRenderMapVisitor)(getRenderMapVisitor(options), path));
|
|
973
1031
|
if (options.formatCode) {
|
|
974
1032
|
if (options.crateFolder) {
|
|
975
1033
|
const toolchain = options.toolchain ?? "+stable";
|
|
976
1034
|
runFormatter("cargo", [toolchain, "fmt", "--manifest-path", `${options.crateFolder}/Cargo.toml`]);
|
|
977
1035
|
} else {
|
|
978
|
-
|
|
1036
|
+
(0, import_errors4.logWarn)("No crate folder specified, skipping formatting.");
|
|
979
1037
|
}
|
|
980
1038
|
}
|
|
981
1039
|
});
|
|
982
1040
|
}
|
|
983
1041
|
function runFormatter(cmd, args) {
|
|
984
|
-
const { stdout, stderr, error } =
|
|
1042
|
+
const { stdout, stderr, error } = (0, import_child_process.spawnSync)(cmd, args);
|
|
985
1043
|
if (error?.message?.includes("ENOENT")) {
|
|
986
|
-
|
|
1044
|
+
(0, import_errors4.logWarn)(`Could not find ${cmd}, skipping formatting.`);
|
|
987
1045
|
return;
|
|
988
1046
|
}
|
|
989
1047
|
if (stdout.length > 0) {
|
|
990
|
-
|
|
1048
|
+
(0, import_errors4.logWarn)(`(cargo-fmt) ${stdout ? stdout?.toString() : error}`);
|
|
991
1049
|
}
|
|
992
1050
|
if (stderr.length > 0) {
|
|
993
|
-
|
|
1051
|
+
(0, import_errors4.logError)(`(cargo-fmt) ${stderr ? stderr.toString() : error}`);
|
|
994
1052
|
}
|
|
995
1053
|
}
|
|
996
|
-
|
|
997
|
-
exports
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1054
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1055
|
+
0 && (module.exports = {
|
|
1056
|
+
ImportMap,
|
|
1057
|
+
getRenderMapVisitor,
|
|
1058
|
+
getTypeManifestVisitor,
|
|
1059
|
+
renderVisitor
|
|
1060
|
+
});
|
|
1003
1061
|
//# sourceMappingURL=index.node.cjs.map
|