@codama/renderers-js 1.3.3 → 1.3.5
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 +1543 -965
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +1459 -878
- package/dist/index.node.mjs.map +1 -1
- package/dist/templates/fragments/instructionExtraArgs.njk +1 -1
- package/dist/templates/fragments/pdaFunction.njk +4 -3
- package/dist/templates/fragments/type.njk +3 -3
- package/dist/templates/fragments/typeDecoder.njk +1 -1
- package/dist/templates/fragments/typeEncoder.njk +1 -1
- package/dist/types/ImportMap.d.ts +1 -1
- package/dist/types/ImportMap.d.ts.map +1 -1
- package/dist/types/TypeManifest.d.ts +5 -5
- package/dist/types/TypeManifest.d.ts.map +1 -1
- package/dist/types/fragments/accountFetchHelpers.d.ts +1 -1
- package/dist/types/fragments/accountFetchHelpers.d.ts.map +1 -1
- package/dist/types/fragments/accountPdaHelpers.d.ts +1 -1
- package/dist/types/fragments/accountPdaHelpers.d.ts.map +1 -1
- package/dist/types/fragments/accountSizeHelpers.d.ts +1 -1
- package/dist/types/fragments/accountType.d.ts +1 -1
- package/dist/types/fragments/discriminatorCondition.d.ts +1 -1
- package/dist/types/fragments/discriminatorCondition.d.ts.map +1 -1
- package/dist/types/fragments/discriminatorConstants.d.ts +1 -1
- package/dist/types/fragments/discriminatorConstants.d.ts.map +1 -1
- package/dist/types/fragments/index.d.ts +0 -1
- package/dist/types/fragments/index.d.ts.map +1 -1
- package/dist/types/fragments/instructionAccountMeta.d.ts +1 -1
- package/dist/types/fragments/instructionAccountMeta.d.ts.map +1 -1
- package/dist/types/fragments/instructionAccountTypeParam.d.ts +1 -1
- package/dist/types/fragments/instructionAccountTypeParam.d.ts.map +1 -1
- package/dist/types/fragments/instructionByteDelta.d.ts +1 -1
- package/dist/types/fragments/instructionByteDelta.d.ts.map +1 -1
- package/dist/types/fragments/instructionData.d.ts +1 -1
- package/dist/types/fragments/instructionExtraArgs.d.ts +1 -1
- package/dist/types/fragments/instructionExtraArgs.d.ts.map +1 -1
- package/dist/types/fragments/instructionFunction.d.ts +1 -1
- package/dist/types/fragments/instructionFunction.d.ts.map +1 -1
- package/dist/types/fragments/instructionInputDefault.d.ts +1 -1
- package/dist/types/fragments/instructionInputDefault.d.ts.map +1 -1
- package/dist/types/fragments/instructionInputResolved.d.ts +1 -1
- package/dist/types/fragments/instructionInputResolved.d.ts.map +1 -1
- package/dist/types/fragments/instructionInputType.d.ts +1 -1
- package/dist/types/fragments/instructionInputType.d.ts.map +1 -1
- package/dist/types/fragments/instructionParseFunction.d.ts +1 -1
- package/dist/types/fragments/instructionParseFunction.d.ts.map +1 -1
- package/dist/types/fragments/instructionRemainingAccounts.d.ts +1 -1
- package/dist/types/fragments/instructionRemainingAccounts.d.ts.map +1 -1
- package/dist/types/fragments/instructionType.d.ts +1 -1
- package/dist/types/fragments/instructionType.d.ts.map +1 -1
- package/dist/types/fragments/pdaFunction.d.ts +1 -1
- package/dist/types/fragments/pdaFunction.d.ts.map +1 -1
- package/dist/types/fragments/program.d.ts +1 -1
- package/dist/types/fragments/program.d.ts.map +1 -1
- package/dist/types/fragments/programAccounts.d.ts +1 -1
- package/dist/types/fragments/programAccounts.d.ts.map +1 -1
- package/dist/types/fragments/programErrors.d.ts +1 -1
- package/dist/types/fragments/programErrors.d.ts.map +1 -1
- package/dist/types/fragments/programInstructions.d.ts +1 -1
- package/dist/types/fragments/programInstructions.d.ts.map +1 -1
- package/dist/types/fragments/type.d.ts +1 -1
- package/dist/types/fragments/type.d.ts.map +1 -1
- package/dist/types/fragments/typeCodec.d.ts +1 -1
- package/dist/types/fragments/typeCodec.d.ts.map +1 -1
- package/dist/types/fragments/typeDecoder.d.ts +1 -1
- package/dist/types/fragments/typeDecoder.d.ts.map +1 -1
- package/dist/types/fragments/typeDiscriminatedUnionHelpers.d.ts +1 -1
- package/dist/types/fragments/typeDiscriminatedUnionHelpers.d.ts.map +1 -1
- package/dist/types/fragments/typeEncoder.d.ts +1 -1
- package/dist/types/fragments/typeEncoder.d.ts.map +1 -1
- package/dist/types/fragments/typeWithCodec.d.ts +1 -1
- package/dist/types/getRenderMapVisitor.d.ts +1 -2
- package/dist/types/getRenderMapVisitor.d.ts.map +1 -1
- package/dist/types/getTypeManifestVisitor.d.ts +9 -3
- package/dist/types/getTypeManifestVisitor.d.ts.map +1 -1
- package/dist/types/utils/fragment.d.ts +20 -0
- package/dist/types/utils/fragment.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/types/fragments/common.d.ts +0 -25
- package/dist/types/fragments/common.d.ts.map +0 -1
package/dist/index.node.cjs
CHANGED
|
@@ -36,7 +36,7 @@ __export(index_exports, {
|
|
|
36
36
|
getNameApi: () => getNameApi,
|
|
37
37
|
getRenderMapVisitor: () => getRenderMapVisitor,
|
|
38
38
|
getTypeManifestVisitor: () => getTypeManifestVisitor,
|
|
39
|
-
|
|
39
|
+
mergeTypeManifests: () => mergeTypeManifests,
|
|
40
40
|
renderVisitor: () => renderVisitor,
|
|
41
41
|
typeManifest: () => typeManifest
|
|
42
42
|
});
|
|
@@ -175,12 +175,6 @@ var ImportMap = class {
|
|
|
175
175
|
}
|
|
176
176
|
};
|
|
177
177
|
|
|
178
|
-
// src/fragments/accountFetchHelpers.ts
|
|
179
|
-
var import_visitors_core2 = require("@codama/visitors-core");
|
|
180
|
-
|
|
181
|
-
// src/fragments/common.ts
|
|
182
|
-
var import_node_path2 = require("path");
|
|
183
|
-
|
|
184
178
|
// src/utils/async.ts
|
|
185
179
|
var import_nodes = require("@codama/nodes");
|
|
186
180
|
var import_visitors_core = require("@codama/visitors-core");
|
|
@@ -303,6 +297,74 @@ var getDefinedTypeNodesToExtract = (nodes, parsedCustomDataOptions) => nodes.fla
|
|
|
303
297
|
];
|
|
304
298
|
});
|
|
305
299
|
|
|
300
|
+
// src/utils/fragment.ts
|
|
301
|
+
var import_renderers_core = require("@codama/renderers-core");
|
|
302
|
+
|
|
303
|
+
// src/utils/render.ts
|
|
304
|
+
var import_node_path = require("path");
|
|
305
|
+
var import_node_url = require("url");
|
|
306
|
+
var import_nodes3 = require("@codama/nodes");
|
|
307
|
+
var import_nunjucks = __toESM(require("nunjucks"));
|
|
308
|
+
function jsDocblock(docs) {
|
|
309
|
+
if (docs.length <= 0) return "";
|
|
310
|
+
if (docs.length === 1) return `/** ${docs[0]} */
|
|
311
|
+
`;
|
|
312
|
+
const lines = docs.map((doc) => ` * ${doc}`);
|
|
313
|
+
return `/**
|
|
314
|
+
${lines.join("\n")}
|
|
315
|
+
*/
|
|
316
|
+
`;
|
|
317
|
+
}
|
|
318
|
+
var render = (template, context, options) => {
|
|
319
|
+
const dirname = false ? pathDirname(fileURLToPath(import_meta.url)) : __dirname;
|
|
320
|
+
const templates = false ? (0, import_node_path.join)(dirname, "..", "..", "public", "templates") : (0, import_node_path.join)(dirname, "templates");
|
|
321
|
+
const env = import_nunjucks.default.configure(templates, { autoescape: false, trimBlocks: true, ...options });
|
|
322
|
+
env.addFilter("pascalCase", import_nodes3.pascalCase);
|
|
323
|
+
env.addFilter("camelCase", import_nodes3.camelCase);
|
|
324
|
+
env.addFilter("snakeCase", import_nodes3.snakeCase);
|
|
325
|
+
env.addFilter("kebabCase", import_nodes3.kebabCase);
|
|
326
|
+
env.addFilter("titleCase", import_nodes3.titleCase);
|
|
327
|
+
env.addFilter("jsDocblock", jsDocblock);
|
|
328
|
+
return env.render(template, context);
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// src/utils/fragment.ts
|
|
332
|
+
function fragment(content) {
|
|
333
|
+
return Object.freeze({
|
|
334
|
+
content,
|
|
335
|
+
features: /* @__PURE__ */ new Set(),
|
|
336
|
+
imports: new ImportMap()
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
function fragmentFromTemplate(fragmentFile, context, options) {
|
|
340
|
+
return fragment(render((0, import_renderers_core.joinPath)("fragments", fragmentFile), context, options));
|
|
341
|
+
}
|
|
342
|
+
function mergeFragments(fragments, mergeContent) {
|
|
343
|
+
return Object.freeze({
|
|
344
|
+
content: mergeContent(fragments.map((fragment2) => fragment2.content)),
|
|
345
|
+
features: new Set(fragments.flatMap((f) => [...f.features])),
|
|
346
|
+
imports: new ImportMap().mergeWith(...fragments.map((f) => f.imports))
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
function mergeFragmentImports(fragment2, importMaps) {
|
|
350
|
+
return Object.freeze({
|
|
351
|
+
...fragment2,
|
|
352
|
+
imports: new ImportMap().mergeWith(fragment2.imports, ...importMaps)
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
function addFragmentImports(fragment2, module2, imports) {
|
|
356
|
+
return Object.freeze({
|
|
357
|
+
...fragment2,
|
|
358
|
+
imports: new ImportMap().mergeWith(fragment2.imports).add(module2, imports)
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function addFragmentFeatures(fragment2, features) {
|
|
362
|
+
return Object.freeze({
|
|
363
|
+
...fragment2,
|
|
364
|
+
features: /* @__PURE__ */ new Set([...fragment2.features, ...features])
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
|
|
306
368
|
// src/utils/linkOverrides.ts
|
|
307
369
|
var import_errors = require("@codama/errors");
|
|
308
370
|
function getImportFromFactory(overrides, customAccountData, customInstructionData) {
|
|
@@ -352,135 +414,72 @@ function getImportFromFactory(overrides, customAccountData, customInstructionDat
|
|
|
352
414
|
};
|
|
353
415
|
}
|
|
354
416
|
|
|
355
|
-
// src/
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
${lines.join("\n")}
|
|
367
|
-
*/
|
|
368
|
-
`;
|
|
369
|
-
}
|
|
370
|
-
var render = (template, context, options) => {
|
|
371
|
-
const dirname = false ? pathDirname(fileURLToPath(import_meta.url)) : __dirname;
|
|
372
|
-
const templates = false ? (0, import_node_path.join)(dirname, "..", "..", "public", "templates") : (0, import_node_path.join)(dirname, "templates");
|
|
373
|
-
const env = import_nunjucks.default.configure(templates, { autoescape: false, trimBlocks: true, ...options });
|
|
374
|
-
env.addFilter("pascalCase", import_nodes3.pascalCase);
|
|
375
|
-
env.addFilter("camelCase", import_nodes3.camelCase);
|
|
376
|
-
env.addFilter("snakeCase", import_nodes3.snakeCase);
|
|
377
|
-
env.addFilter("kebabCase", import_nodes3.kebabCase);
|
|
378
|
-
env.addFilter("titleCase", import_nodes3.titleCase);
|
|
379
|
-
env.addFilter("jsDocblock", jsDocblock);
|
|
380
|
-
return env.render(template, context);
|
|
381
|
-
};
|
|
382
|
-
|
|
383
|
-
// src/fragments/common.ts
|
|
384
|
-
function fragment(render2, imports) {
|
|
385
|
-
return new Fragment(render2, imports);
|
|
386
|
-
}
|
|
387
|
-
function fragmentFromTemplate(fragmentFile, context, options) {
|
|
388
|
-
return fragment(render((0, import_node_path2.join)("fragments", fragmentFile), context, options));
|
|
417
|
+
// src/TypeManifest.ts
|
|
418
|
+
function typeManifest(input = {}) {
|
|
419
|
+
return Object.freeze({
|
|
420
|
+
decoder: fragment(""),
|
|
421
|
+
encoder: fragment(""),
|
|
422
|
+
isEnum: false,
|
|
423
|
+
looseType: fragment(""),
|
|
424
|
+
strictType: fragment(""),
|
|
425
|
+
value: fragment(""),
|
|
426
|
+
...input
|
|
427
|
+
});
|
|
389
428
|
}
|
|
390
|
-
function
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
429
|
+
function mergeTypeManifests(manifests, options = {}) {
|
|
430
|
+
const { mergeTypes, mergeCodecs, mergeValues } = options;
|
|
431
|
+
const merge = (fragmentFn, mergeFn) => mergeFn ? mergeFragments(manifests.map(fragmentFn), mergeFn) : fragment("");
|
|
432
|
+
return Object.freeze({
|
|
433
|
+
decoder: merge((m) => m.decoder, mergeCodecs),
|
|
434
|
+
encoder: merge((m) => m.encoder, mergeCodecs),
|
|
435
|
+
isEnum: false,
|
|
436
|
+
looseType: merge((m) => m.looseType, mergeTypes),
|
|
437
|
+
strictType: merge((m) => m.strictType, mergeTypes),
|
|
438
|
+
value: merge((m) => m.value, mergeValues)
|
|
439
|
+
});
|
|
396
440
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
this.features = /* @__PURE__ */ new Set([...features ?? []]);
|
|
405
|
-
}
|
|
406
|
-
setRender(render2) {
|
|
407
|
-
this.render = render2;
|
|
408
|
-
return this;
|
|
409
|
-
}
|
|
410
|
-
mapRender(fn) {
|
|
411
|
-
this.render = fn(this.render);
|
|
412
|
-
return this;
|
|
413
|
-
}
|
|
414
|
-
addImports(module2, imports) {
|
|
415
|
-
this.imports.add(module2, imports);
|
|
416
|
-
return this;
|
|
417
|
-
}
|
|
418
|
-
removeImports(module2, imports) {
|
|
419
|
-
this.imports.remove(module2, imports);
|
|
420
|
-
return this;
|
|
421
|
-
}
|
|
422
|
-
mergeImportsWith(...others) {
|
|
423
|
-
this.imports.mergeWith(...others);
|
|
424
|
-
return this;
|
|
425
|
-
}
|
|
426
|
-
addImportAlias(module2, name, alias) {
|
|
427
|
-
this.imports.addAlias(module2, name, alias);
|
|
428
|
-
return this;
|
|
429
|
-
}
|
|
430
|
-
addFeatures(features) {
|
|
431
|
-
const featureArray = typeof features === "string" ? [features] : features;
|
|
432
|
-
featureArray.forEach((f) => this.features.add(f));
|
|
433
|
-
return this;
|
|
434
|
-
}
|
|
435
|
-
removeFeatures(features) {
|
|
436
|
-
const featureArray = typeof features === "string" ? [features] : features;
|
|
437
|
-
featureArray.forEach((f) => this.features.delete(f));
|
|
438
|
-
return this;
|
|
439
|
-
}
|
|
440
|
-
hasFeatures(features) {
|
|
441
|
-
const featureArray = typeof features === "string" ? [features] : features;
|
|
442
|
-
return featureArray.every((f) => this.features.has(f));
|
|
443
|
-
}
|
|
444
|
-
mergeFeaturesWith(...others) {
|
|
445
|
-
others.forEach((f) => this.addFeatures([...f.features]));
|
|
446
|
-
return this;
|
|
447
|
-
}
|
|
448
|
-
clone() {
|
|
449
|
-
return new _Fragment(this.render).mergeImportsWith(this.imports);
|
|
450
|
-
}
|
|
451
|
-
toString() {
|
|
452
|
-
return this.render;
|
|
453
|
-
}
|
|
454
|
-
};
|
|
441
|
+
|
|
442
|
+
// src/getRenderMapVisitor.ts
|
|
443
|
+
var import_node_path2 = require("path");
|
|
444
|
+
var import_errors2 = require("@codama/errors");
|
|
445
|
+
var import_nodes26 = require("@codama/nodes");
|
|
446
|
+
var import_renderers_core13 = require("@codama/renderers-core");
|
|
447
|
+
var import_visitors_core31 = require("@codama/visitors-core");
|
|
455
448
|
|
|
456
449
|
// src/fragments/accountFetchHelpers.ts
|
|
450
|
+
var import_visitors_core2 = require("@codama/visitors-core");
|
|
457
451
|
function getAccountFetchHelpersFragment(scope) {
|
|
458
452
|
const { accountPath, typeManifest: typeManifest2, nameApi, customAccountData } = scope;
|
|
459
453
|
const accountNode = (0, import_visitors_core2.getLastNodeFromPath)(accountPath);
|
|
460
454
|
const hasCustomData = customAccountData.has(accountNode.name);
|
|
461
|
-
const accountTypeFragment = hasCustomData ? typeManifest2.strictType
|
|
462
|
-
const decoderFunctionFragment = hasCustomData ? typeManifest2.decoder
|
|
463
|
-
return
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
"
|
|
475
|
-
"
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
455
|
+
const accountTypeFragment = hasCustomData ? typeManifest2.strictType : fragment(nameApi.dataType(accountNode.name));
|
|
456
|
+
const decoderFunctionFragment = hasCustomData ? typeManifest2.decoder : fragment(`${nameApi.decoderFunction(accountNode.name)}()`);
|
|
457
|
+
return (0, import_visitors_core2.pipe)(
|
|
458
|
+
fragmentFromTemplate("accountFetchHelpers.njk", {
|
|
459
|
+
accountType: accountTypeFragment.content,
|
|
460
|
+
decodeFunction: nameApi.accountDecodeFunction(accountNode.name),
|
|
461
|
+
decoderFunction: decoderFunctionFragment.content,
|
|
462
|
+
fetchAllFunction: nameApi.accountFetchAllFunction(accountNode.name),
|
|
463
|
+
fetchAllMaybeFunction: nameApi.accountFetchAllMaybeFunction(accountNode.name),
|
|
464
|
+
fetchFunction: nameApi.accountFetchFunction(accountNode.name),
|
|
465
|
+
fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name)
|
|
466
|
+
}),
|
|
467
|
+
(f) => mergeFragmentImports(f, [accountTypeFragment.imports, decoderFunctionFragment.imports]),
|
|
468
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"]),
|
|
469
|
+
(f) => addFragmentImports(f, "solanaAccounts", [
|
|
470
|
+
"type Account",
|
|
471
|
+
"assertAccountExists",
|
|
472
|
+
"assertAccountsExist",
|
|
473
|
+
"decodeAccount",
|
|
474
|
+
"type EncodedAccount",
|
|
475
|
+
"fetchEncodedAccount",
|
|
476
|
+
"fetchEncodedAccounts",
|
|
477
|
+
"type FetchAccountConfig",
|
|
478
|
+
"type FetchAccountsConfig",
|
|
479
|
+
"type MaybeAccount",
|
|
480
|
+
"type MaybeEncodedAccount"
|
|
481
|
+
])
|
|
482
|
+
);
|
|
484
483
|
}
|
|
485
484
|
|
|
486
485
|
// src/fragments/accountPdaHelpers.ts
|
|
@@ -494,27 +493,33 @@ function getAccountPdaHelpersFragment(scope) {
|
|
|
494
493
|
if (!pdaNode) {
|
|
495
494
|
return fragment("");
|
|
496
495
|
}
|
|
497
|
-
const accountTypeFragment = customAccountData.has(accountNode.name) ? typeManifest2.strictType
|
|
496
|
+
const accountTypeFragment = customAccountData.has(accountNode.name) ? typeManifest2.strictType : fragment(nameApi.dataType(accountNode.name));
|
|
498
497
|
const importFrom = "generatedPdas";
|
|
499
498
|
const pdaSeedsType = nameApi.pdaSeedsType(pdaNode.name);
|
|
500
499
|
const findPdaFunction = nameApi.pdaFindFunction(pdaNode.name);
|
|
501
500
|
const hasVariableSeeds = pdaNode.seeds.filter((0, import_nodes4.isNodeFilter)("variablePdaSeedNode")).length > 0;
|
|
502
|
-
return
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
"type
|
|
517
|
-
|
|
501
|
+
return (0, import_visitors_core3.pipe)(
|
|
502
|
+
fragmentFromTemplate("accountPdaHelpers.njk", {
|
|
503
|
+
accountType: accountTypeFragment.content,
|
|
504
|
+
fetchFromSeedsFunction: nameApi.accountFetchFromSeedsFunction(accountNode.name),
|
|
505
|
+
fetchFunction: nameApi.accountFetchFunction(accountNode.name),
|
|
506
|
+
fetchMaybeFromSeedsFunction: nameApi.accountFetchMaybeFromSeedsFunction(accountNode.name),
|
|
507
|
+
fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name),
|
|
508
|
+
findPdaFunction,
|
|
509
|
+
hasVariableSeeds,
|
|
510
|
+
pdaSeedsType,
|
|
511
|
+
program: programNode
|
|
512
|
+
}),
|
|
513
|
+
(f) => mergeFragmentImports(f, [accountTypeFragment.imports]),
|
|
514
|
+
(f) => addFragmentImports(f, importFrom, hasVariableSeeds ? [pdaSeedsType, findPdaFunction] : [findPdaFunction]),
|
|
515
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"]),
|
|
516
|
+
(f) => addFragmentImports(f, "solanaAccounts", [
|
|
517
|
+
"type Account",
|
|
518
|
+
"assertAccountExists",
|
|
519
|
+
"type FetchAccountConfig",
|
|
520
|
+
"type MaybeAccount"
|
|
521
|
+
])
|
|
522
|
+
);
|
|
518
523
|
}
|
|
519
524
|
|
|
520
525
|
// src/fragments/accountSizeHelpers.ts
|
|
@@ -533,55 +538,68 @@ function getAccountSizeHelpersFragment(scope) {
|
|
|
533
538
|
|
|
534
539
|
// src/fragments/accountType.ts
|
|
535
540
|
var import_nodes7 = require("@codama/nodes");
|
|
536
|
-
var
|
|
541
|
+
var import_visitors_core9 = require("@codama/visitors-core");
|
|
537
542
|
|
|
538
543
|
// src/fragments/type.ts
|
|
544
|
+
var import_visitors_core5 = require("@codama/visitors-core");
|
|
539
545
|
function getTypeFragment(scope) {
|
|
540
546
|
const { name, manifest, nameApi, docs = [] } = scope;
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
return typeFragment;
|
|
547
|
+
return (0, import_visitors_core5.pipe)(
|
|
548
|
+
fragmentFromTemplate("type.njk", {
|
|
549
|
+
docs,
|
|
550
|
+
looseName: nameApi.dataArgsType(name),
|
|
551
|
+
manifest,
|
|
552
|
+
strictName: nameApi.dataType(name)
|
|
553
|
+
}),
|
|
554
|
+
(f) => !manifest.isEnum ? mergeFragmentImports(f, [manifest.strictType.imports, manifest.looseType.imports]) : f
|
|
555
|
+
);
|
|
551
556
|
}
|
|
552
557
|
|
|
558
|
+
// src/fragments/typeCodec.ts
|
|
559
|
+
var import_visitors_core8 = require("@codama/visitors-core");
|
|
560
|
+
|
|
553
561
|
// src/fragments/typeDecoder.ts
|
|
554
562
|
var import_nodes5 = require("@codama/nodes");
|
|
563
|
+
var import_visitors_core6 = require("@codama/visitors-core");
|
|
555
564
|
function getTypeDecoderFragment(scope) {
|
|
556
565
|
const { name, node, manifest, nameApi, docs = [] } = scope;
|
|
557
566
|
const decoderType = typeof scope.size === "number" ? "FixedSizeDecoder" : "Decoder";
|
|
558
567
|
const useTypeCast = (0, import_nodes5.isNode)(node, "enumTypeNode") && (0, import_nodes5.isDataEnum)(node) && typeof scope.size === "number";
|
|
559
|
-
return
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
+
return (0, import_visitors_core6.pipe)(
|
|
569
|
+
fragmentFromTemplate("typeDecoder.njk", {
|
|
570
|
+
decoderFunction: nameApi.decoderFunction(name),
|
|
571
|
+
decoderType,
|
|
572
|
+
docs,
|
|
573
|
+
looseName: nameApi.dataArgsType(name),
|
|
574
|
+
manifest,
|
|
575
|
+
strictName: nameApi.dataType(name),
|
|
576
|
+
useTypeCast
|
|
577
|
+
}),
|
|
578
|
+
(f) => mergeFragmentImports(f, [manifest.decoder.imports]),
|
|
579
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", [`type ${decoderType}`])
|
|
580
|
+
);
|
|
568
581
|
}
|
|
569
582
|
|
|
570
583
|
// src/fragments/typeEncoder.ts
|
|
571
584
|
var import_nodes6 = require("@codama/nodes");
|
|
585
|
+
var import_visitors_core7 = require("@codama/visitors-core");
|
|
572
586
|
function getTypeEncoderFragment(scope) {
|
|
573
587
|
const { name, node, manifest, nameApi, docs = [] } = scope;
|
|
574
588
|
const encoderType = typeof scope.size === "number" ? "FixedSizeEncoder" : "Encoder";
|
|
575
589
|
const useTypeCast = (0, import_nodes6.isNode)(node, "enumTypeNode") && (0, import_nodes6.isDataEnum)(node) && typeof scope.size === "number";
|
|
576
|
-
return
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
590
|
+
return (0, import_visitors_core7.pipe)(
|
|
591
|
+
fragmentFromTemplate("typeEncoder.njk", {
|
|
592
|
+
docs,
|
|
593
|
+
encoderFunction: nameApi.encoderFunction(name),
|
|
594
|
+
encoderType,
|
|
595
|
+
looseName: nameApi.dataArgsType(name),
|
|
596
|
+
manifest,
|
|
597
|
+
strictName: nameApi.dataType(name),
|
|
598
|
+
useTypeCast
|
|
599
|
+
}),
|
|
600
|
+
(f) => mergeFragmentImports(f, [manifest.encoder.imports]),
|
|
601
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", [`type ${encoderType}`])
|
|
602
|
+
);
|
|
585
603
|
}
|
|
586
604
|
|
|
587
605
|
// src/fragments/typeCodec.ts
|
|
@@ -592,16 +610,19 @@ function getTypeCodecFragment(scope) {
|
|
|
592
610
|
[
|
|
593
611
|
getTypeEncoderFragment({ ...scope, docs: scope.encoderDocs }),
|
|
594
612
|
getTypeDecoderFragment({ ...scope, docs: scope.decoderDocs }),
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
613
|
+
(0, import_visitors_core8.pipe)(
|
|
614
|
+
fragmentFromTemplate("typeCodec.njk", {
|
|
615
|
+
codecFunction: nameApi.codecFunction(name),
|
|
616
|
+
codecType,
|
|
617
|
+
decoderFunction: nameApi.decoderFunction(name),
|
|
618
|
+
docs: scope.codecDocs,
|
|
619
|
+
encoderFunction: nameApi.encoderFunction(name),
|
|
620
|
+
looseName: nameApi.dataArgsType(name),
|
|
621
|
+
manifest,
|
|
622
|
+
strictName: nameApi.dataType(name)
|
|
623
|
+
}),
|
|
624
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", [`type ${codecType}`, "combineCodec"])
|
|
625
|
+
)
|
|
605
626
|
],
|
|
606
627
|
(renders) => renders.join("\n\n")
|
|
607
628
|
);
|
|
@@ -618,7 +639,7 @@ function getTypeWithCodecFragment(scope) {
|
|
|
618
639
|
// src/fragments/accountType.ts
|
|
619
640
|
function getAccountTypeFragment(scope) {
|
|
620
641
|
const { accountPath, typeManifest: typeManifest2, nameApi, customAccountData } = scope;
|
|
621
|
-
const accountNode = (0,
|
|
642
|
+
const accountNode = (0, import_visitors_core9.getLastNodeFromPath)(accountPath);
|
|
622
643
|
if (customAccountData.has(accountNode.name)) {
|
|
623
644
|
return fragment("");
|
|
624
645
|
}
|
|
@@ -633,24 +654,28 @@ function getAccountTypeFragment(scope) {
|
|
|
633
654
|
|
|
634
655
|
// src/fragments/discriminatorCondition.ts
|
|
635
656
|
var import_nodes8 = require("@codama/nodes");
|
|
636
|
-
var
|
|
657
|
+
var import_renderers_core2 = require("@codama/renderers-core");
|
|
658
|
+
var import_visitors_core10 = require("@codama/visitors-core");
|
|
637
659
|
var import_codecs_strings2 = require("@solana/codecs-strings");
|
|
638
660
|
function getDiscriminatorConditionFragment(scope) {
|
|
639
|
-
return
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
661
|
+
return (0, import_visitors_core10.pipe)(
|
|
662
|
+
mergeFragments(
|
|
663
|
+
scope.discriminators.flatMap((discriminator) => {
|
|
664
|
+
if ((0, import_nodes8.isNode)(discriminator, "sizeDiscriminatorNode")) {
|
|
665
|
+
return [getSizeConditionFragment(discriminator, scope)];
|
|
666
|
+
}
|
|
667
|
+
if ((0, import_nodes8.isNode)(discriminator, "constantDiscriminatorNode")) {
|
|
668
|
+
return [getByteConditionFragment(discriminator, scope)];
|
|
669
|
+
}
|
|
670
|
+
if ((0, import_nodes8.isNode)(discriminator, "fieldDiscriminatorNode")) {
|
|
671
|
+
return [getFieldConditionFragment(discriminator, scope)];
|
|
672
|
+
}
|
|
673
|
+
return [];
|
|
674
|
+
}),
|
|
675
|
+
(c) => c.join(" && ")
|
|
676
|
+
),
|
|
677
|
+
(f) => (0, import_renderers_core2.mapFragmentContent)(f, (c) => `if (${c}) { ${scope.ifTrue}; }`)
|
|
678
|
+
);
|
|
654
679
|
}
|
|
655
680
|
function getSizeConditionFragment(discriminator, scope) {
|
|
656
681
|
const { dataName } = scope;
|
|
@@ -658,8 +683,12 @@ function getSizeConditionFragment(discriminator, scope) {
|
|
|
658
683
|
}
|
|
659
684
|
function getByteConditionFragment(discriminator, scope) {
|
|
660
685
|
const { dataName, typeManifestVisitor } = scope;
|
|
661
|
-
const constant = (0,
|
|
662
|
-
return
|
|
686
|
+
const constant = (0, import_visitors_core10.visit)(discriminator.constant, typeManifestVisitor).value;
|
|
687
|
+
return (0, import_visitors_core10.pipe)(
|
|
688
|
+
constant,
|
|
689
|
+
(f) => (0, import_renderers_core2.mapFragmentContent)(f, (c) => `containsBytes(${dataName}, ${c}, ${discriminator.offset})`),
|
|
690
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["containsBytes"])
|
|
691
|
+
);
|
|
663
692
|
}
|
|
664
693
|
function getFieldConditionFragment(discriminator, scope) {
|
|
665
694
|
const field = scope.struct.fields.find((f) => f.name === discriminator.name);
|
|
@@ -685,28 +714,43 @@ function getFieldConditionFragment(discriminator, scope) {
|
|
|
685
714
|
|
|
686
715
|
// src/fragments/instructionAccountMeta.ts
|
|
687
716
|
var import_nodes9 = require("@codama/nodes");
|
|
717
|
+
var import_visitors_core11 = require("@codama/visitors-core");
|
|
688
718
|
function getInstructionAccountMetaFragment(instructionAccountNode) {
|
|
689
719
|
const typeParam = `TAccount${(0, import_nodes9.pascalCase)(instructionAccountNode.name)}`;
|
|
690
720
|
if (instructionAccountNode.isSigner === true && instructionAccountNode.isWritable) {
|
|
691
|
-
return
|
|
721
|
+
return (0, import_visitors_core11.pipe)(
|
|
722
|
+
fragment(`WritableSignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`),
|
|
723
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type WritableSignerAccount"]),
|
|
724
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type AccountSignerMeta"])
|
|
725
|
+
);
|
|
692
726
|
}
|
|
693
727
|
if (instructionAccountNode.isSigner === true) {
|
|
694
|
-
return
|
|
728
|
+
return (0, import_visitors_core11.pipe)(
|
|
729
|
+
fragment(`ReadonlySignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`),
|
|
730
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type ReadonlySignerAccount"]),
|
|
731
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type AccountSignerMeta"])
|
|
732
|
+
);
|
|
695
733
|
}
|
|
696
734
|
if (instructionAccountNode.isWritable) {
|
|
697
|
-
return
|
|
735
|
+
return (0, import_visitors_core11.pipe)(
|
|
736
|
+
fragment(`WritableAccount<${typeParam}>`),
|
|
737
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type WritableAccount"])
|
|
738
|
+
);
|
|
698
739
|
}
|
|
699
|
-
return
|
|
740
|
+
return (0, import_visitors_core11.pipe)(
|
|
741
|
+
fragment(`ReadonlyAccount<${typeParam}>`),
|
|
742
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type ReadonlyAccount"])
|
|
743
|
+
);
|
|
700
744
|
}
|
|
701
745
|
|
|
702
746
|
// src/fragments/instructionAccountTypeParam.ts
|
|
703
747
|
var import_nodes10 = require("@codama/nodes");
|
|
704
|
-
var
|
|
748
|
+
var import_visitors_core12 = require("@codama/visitors-core");
|
|
705
749
|
function getInstructionAccountTypeParamFragment(scope) {
|
|
706
750
|
const { instructionAccountPath, allowAccountMeta, linkables } = scope;
|
|
707
|
-
const instructionAccountNode = (0,
|
|
708
|
-
const instructionNode = (0,
|
|
709
|
-
const programNode = (0,
|
|
751
|
+
const instructionAccountNode = (0, import_visitors_core12.getLastNodeFromPath)(instructionAccountPath);
|
|
752
|
+
const instructionNode = (0, import_visitors_core12.findInstructionNodeFromPath)(instructionAccountPath);
|
|
753
|
+
const programNode = (0, import_visitors_core12.findProgramNodeFromPath)(instructionAccountPath);
|
|
710
754
|
const typeParam = `TAccount${(0, import_nodes10.pascalCase)(instructionAccountNode.name)}`;
|
|
711
755
|
const accountMeta = allowAccountMeta ? " | AccountMeta<string>" : "";
|
|
712
756
|
const imports = new ImportMap();
|
|
@@ -714,10 +758,16 @@ function getInstructionAccountTypeParamFragment(scope) {
|
|
|
714
758
|
imports.add("solanaInstructions", "type AccountMeta");
|
|
715
759
|
}
|
|
716
760
|
if (instructionNode.optionalAccountStrategy === "omitted" && instructionAccountNode.isOptional) {
|
|
717
|
-
return
|
|
761
|
+
return (0, import_visitors_core12.pipe)(
|
|
762
|
+
fragment(`${typeParam} extends string${accountMeta} | undefined = undefined`),
|
|
763
|
+
(f) => mergeFragmentImports(f, [imports])
|
|
764
|
+
);
|
|
718
765
|
}
|
|
719
766
|
const defaultAddress = getDefaultAddress(instructionAccountNode.defaultValue, programNode.publicKey, linkables);
|
|
720
|
-
return
|
|
767
|
+
return (0, import_visitors_core12.pipe)(
|
|
768
|
+
fragment(`${typeParam} extends string${accountMeta} = ${defaultAddress}`),
|
|
769
|
+
(f) => mergeFragmentImports(f, [imports])
|
|
770
|
+
);
|
|
721
771
|
}
|
|
722
772
|
function getDefaultAddress(defaultValue, programId, linkables) {
|
|
723
773
|
switch (defaultValue?.kind) {
|
|
@@ -735,19 +785,20 @@ function getDefaultAddress(defaultValue, programId, linkables) {
|
|
|
735
785
|
|
|
736
786
|
// src/fragments/instructionByteDelta.ts
|
|
737
787
|
var import_nodes11 = require("@codama/nodes");
|
|
738
|
-
var
|
|
788
|
+
var import_renderers_core3 = require("@codama/renderers-core");
|
|
789
|
+
var import_visitors_core13 = require("@codama/visitors-core");
|
|
739
790
|
function getInstructionByteDeltaFragment(scope) {
|
|
740
|
-
const { byteDeltas } = (0,
|
|
741
|
-
const fragments = (byteDeltas ?? []).flatMap((
|
|
791
|
+
const { byteDeltas } = (0, import_visitors_core13.getLastNodeFromPath)(scope.instructionPath);
|
|
792
|
+
const fragments = (byteDeltas ?? []).flatMap((c) => getByteDeltaFragment(c, scope));
|
|
742
793
|
if (fragments.length === 0) return fragment("");
|
|
743
794
|
return mergeFragments(
|
|
744
795
|
fragments,
|
|
745
|
-
(
|
|
746
|
-
const byteDelta: number = [${
|
|
796
|
+
(c) => `// Bytes created or reallocated by the instruction.
|
|
797
|
+
const byteDelta: number = [${c.join(",")}].reduce((a, b) => a + b, 0);`
|
|
747
798
|
);
|
|
748
799
|
}
|
|
749
800
|
function getByteDeltaFragment(byteDelta, scope) {
|
|
750
|
-
|
|
801
|
+
let bytesFragment = (() => {
|
|
751
802
|
if ((0, import_nodes11.isNode)(byteDelta.value, "numberValueNode")) {
|
|
752
803
|
return getNumberValueNodeFragment(byteDelta);
|
|
753
804
|
}
|
|
@@ -764,10 +815,14 @@ function getByteDeltaFragment(byteDelta, scope) {
|
|
|
764
815
|
})();
|
|
765
816
|
if (bytesFragment === null) return [];
|
|
766
817
|
if (byteDelta.withHeader) {
|
|
767
|
-
bytesFragment
|
|
818
|
+
bytesFragment = (0, import_visitors_core13.pipe)(
|
|
819
|
+
bytesFragment,
|
|
820
|
+
(f) => (0, import_renderers_core3.mapFragmentContent)(f, (c) => `${c} + BASE_ACCOUNT_SIZE`),
|
|
821
|
+
(f) => addFragmentImports(f, "solanaAccounts", ["BASE_ACCOUNT_SIZE"])
|
|
822
|
+
);
|
|
768
823
|
}
|
|
769
824
|
if (byteDelta.subtract) {
|
|
770
|
-
bytesFragment.
|
|
825
|
+
bytesFragment = (0, import_visitors_core13.pipe)(bytesFragment, (f) => (0, import_renderers_core3.mapFragmentContent)(f, (c) => `- (${c})`));
|
|
771
826
|
}
|
|
772
827
|
return [bytesFragment];
|
|
773
828
|
}
|
|
@@ -783,7 +838,8 @@ function getArgumentValueNodeFragment(byteDelta) {
|
|
|
783
838
|
function getAccountLinkNodeFragment(byteDelta, scope) {
|
|
784
839
|
(0, import_nodes11.assertIsNode)(byteDelta.value, "accountLinkNode");
|
|
785
840
|
const functionName = scope.nameApi.accountGetSizeFunction(byteDelta.value.name);
|
|
786
|
-
|
|
841
|
+
const module2 = scope.getImportFrom(byteDelta.value);
|
|
842
|
+
return (0, import_visitors_core13.pipe)(fragment(`${functionName}()`), (f) => addFragmentImports(f, module2, [functionName]));
|
|
787
843
|
}
|
|
788
844
|
function getResolverValueNodeFragment(byteDelta, scope) {
|
|
789
845
|
(0, import_nodes11.assertIsNode)(byteDelta.value, "resolverValueNode");
|
|
@@ -791,15 +847,20 @@ function getResolverValueNodeFragment(byteDelta, scope) {
|
|
|
791
847
|
if (!scope.useAsync && isAsync) return null;
|
|
792
848
|
const awaitKeyword = scope.useAsync && isAsync ? "await " : "";
|
|
793
849
|
const functionName = scope.nameApi.resolverFunction(byteDelta.value.name);
|
|
794
|
-
|
|
850
|
+
const module2 = scope.getImportFrom(byteDelta.value);
|
|
851
|
+
return (0, import_visitors_core13.pipe)(
|
|
852
|
+
fragment(`${awaitKeyword}${functionName}(resolverScope)`),
|
|
853
|
+
(f) => addFragmentImports(f, module2, [functionName]),
|
|
854
|
+
(f) => addFragmentFeatures(f, ["instruction:resolverScopeVariable"])
|
|
855
|
+
);
|
|
795
856
|
}
|
|
796
857
|
|
|
797
858
|
// src/fragments/instructionData.ts
|
|
798
859
|
var import_nodes12 = require("@codama/nodes");
|
|
799
|
-
var
|
|
860
|
+
var import_visitors_core14 = require("@codama/visitors-core");
|
|
800
861
|
function getInstructionDataFragment(scope) {
|
|
801
862
|
const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;
|
|
802
|
-
const instructionNode = (0,
|
|
863
|
+
const instructionNode = (0, import_visitors_core14.getLastNodeFromPath)(instructionPath);
|
|
803
864
|
if (instructionNode.arguments.length === 0 || customInstructionData.has(instructionNode.name)) {
|
|
804
865
|
return fragment("");
|
|
805
866
|
}
|
|
@@ -815,10 +876,11 @@ function getInstructionDataFragment(scope) {
|
|
|
815
876
|
|
|
816
877
|
// src/fragments/discriminatorConstants.ts
|
|
817
878
|
var import_nodes13 = require("@codama/nodes");
|
|
818
|
-
var
|
|
879
|
+
var import_renderers_core4 = require("@codama/renderers-core");
|
|
880
|
+
var import_visitors_core15 = require("@codama/visitors-core");
|
|
819
881
|
function getDiscriminatorConstantsFragment(scope) {
|
|
820
882
|
const fragments = scope.discriminatorNodes.map((node) => getDiscriminatorConstantFragment(node, scope)).filter(Boolean);
|
|
821
|
-
return mergeFragments(fragments, (
|
|
883
|
+
return mergeFragments(fragments, (c) => c.join("\n\n"));
|
|
822
884
|
}
|
|
823
885
|
function getDiscriminatorConstantFragment(discriminatorNode, scope) {
|
|
824
886
|
switch (discriminatorNode.kind) {
|
|
@@ -835,8 +897,8 @@ function getConstantDiscriminatorConstantFragment(discriminatorNode, scope) {
|
|
|
835
897
|
const index = discriminatorNodes.filter((0, import_nodes13.isNodeFilter)("constantDiscriminatorNode")).indexOf(discriminatorNode);
|
|
836
898
|
const suffix = index <= 0 ? "" : `_${index + 1}`;
|
|
837
899
|
const name = (0, import_nodes13.camelCase)(`${prefix}_discriminator${suffix}`);
|
|
838
|
-
const encoder = (0,
|
|
839
|
-
const value = (0,
|
|
900
|
+
const encoder = (0, import_visitors_core15.visit)(discriminatorNode.constant.type, typeManifestVisitor).encoder;
|
|
901
|
+
const value = (0, import_visitors_core15.visit)(discriminatorNode.constant.value, typeManifestVisitor).value;
|
|
840
902
|
return getConstantFragment({ ...scope, encoder, name, value });
|
|
841
903
|
}
|
|
842
904
|
function getFieldDiscriminatorConstantFragment(discriminatorNode, scope) {
|
|
@@ -846,8 +908,8 @@ function getFieldDiscriminatorConstantFragment(discriminatorNode, scope) {
|
|
|
846
908
|
return null;
|
|
847
909
|
}
|
|
848
910
|
const name = (0, import_nodes13.camelCase)(`${prefix}_${discriminatorNode.name}`);
|
|
849
|
-
const encoder = (0,
|
|
850
|
-
const value = (0,
|
|
911
|
+
const encoder = (0, import_visitors_core15.visit)(field.type, typeManifestVisitor).encoder;
|
|
912
|
+
const value = (0, import_visitors_core15.visit)(field.defaultValue, typeManifestVisitor).value;
|
|
851
913
|
return getConstantFragment({ ...scope, encoder, name, value });
|
|
852
914
|
}
|
|
853
915
|
function getConstantFragment(scope) {
|
|
@@ -856,40 +918,49 @@ function getConstantFragment(scope) {
|
|
|
856
918
|
const constantFunction = nameApi.constantFunction(name);
|
|
857
919
|
return mergeFragments(
|
|
858
920
|
[
|
|
859
|
-
|
|
860
|
-
|
|
921
|
+
(0, import_renderers_core4.mapFragmentContent)(value, (c) => `export const ${constantName} = ${c};`),
|
|
922
|
+
(0, import_renderers_core4.mapFragmentContent)(
|
|
923
|
+
encoder,
|
|
924
|
+
(c) => `export function ${constantFunction}() { return ${c}.encode(${constantName}); }`
|
|
925
|
+
)
|
|
861
926
|
],
|
|
862
|
-
(
|
|
927
|
+
(c) => c.join("\n\n")
|
|
863
928
|
);
|
|
864
929
|
}
|
|
865
930
|
|
|
866
931
|
// src/fragments/instructionExtraArgs.ts
|
|
867
|
-
var
|
|
932
|
+
var import_visitors_core16 = require("@codama/visitors-core");
|
|
868
933
|
function getInstructionExtraArgsFragment(scope) {
|
|
869
934
|
const { instructionPath, extraArgsManifest, nameApi } = scope;
|
|
870
|
-
const instructionNode = (0,
|
|
935
|
+
const instructionNode = (0, import_visitors_core16.getLastNodeFromPath)(instructionPath);
|
|
871
936
|
if ((instructionNode.extraArguments ?? []).length === 0) {
|
|
872
937
|
return fragment("");
|
|
873
938
|
}
|
|
874
939
|
const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);
|
|
875
|
-
return
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
940
|
+
return (0, import_visitors_core16.pipe)(
|
|
941
|
+
fragmentFromTemplate("instructionExtraArgs.njk", {
|
|
942
|
+
looseName: nameApi.dataArgsType(instructionExtraName),
|
|
943
|
+
manifest: extraArgsManifest,
|
|
944
|
+
strictName: nameApi.dataType(instructionExtraName)
|
|
945
|
+
}),
|
|
946
|
+
(f) => mergeFragmentImports(f, [extraArgsManifest.looseType.imports])
|
|
947
|
+
);
|
|
880
948
|
}
|
|
881
949
|
|
|
882
950
|
// src/fragments/instructionFunction.ts
|
|
883
951
|
var import_nodes18 = require("@codama/nodes");
|
|
884
|
-
var
|
|
952
|
+
var import_renderers_core8 = require("@codama/renderers-core");
|
|
953
|
+
var import_visitors_core21 = require("@codama/visitors-core");
|
|
885
954
|
|
|
886
955
|
// src/fragments/instructionInputResolved.ts
|
|
887
956
|
var import_nodes15 = require("@codama/nodes");
|
|
888
|
-
var
|
|
957
|
+
var import_renderers_core6 = require("@codama/renderers-core");
|
|
958
|
+
var import_visitors_core18 = require("@codama/visitors-core");
|
|
889
959
|
|
|
890
960
|
// src/fragments/instructionInputDefault.ts
|
|
891
961
|
var import_nodes14 = require("@codama/nodes");
|
|
892
|
-
var
|
|
962
|
+
var import_renderers_core5 = require("@codama/renderers-core");
|
|
963
|
+
var import_visitors_core17 = require("@codama/visitors-core");
|
|
893
964
|
function getInstructionInputDefaultFragment(scope) {
|
|
894
965
|
const { input, optionalAccountStrategy, asyncResolvers, useAsync, nameApi, typeManifestVisitor, getImportFrom } = scope;
|
|
895
966
|
if (!input.defaultValue) {
|
|
@@ -919,97 +990,142 @@ accounts.${inputName}.isWritable = ${isWritable ? "true" : "false"}`
|
|
|
919
990
|
case "accountValueNode":
|
|
920
991
|
const name = (0, import_nodes14.camelCase)(defaultValue.name);
|
|
921
992
|
if (input.kind === "instructionAccountNode" && input.resolvedIsSigner && !input.isSigner) {
|
|
922
|
-
return
|
|
923
|
-
|
|
924
|
-
"expectTransactionSigner"
|
|
993
|
+
return (0, import_visitors_core17.pipe)(
|
|
994
|
+
defaultFragment(`expectTransactionSigner(accounts.${name}.value).address`),
|
|
995
|
+
(f) => addFragmentImports(f, "shared", ["expectTransactionSigner"])
|
|
925
996
|
);
|
|
926
997
|
}
|
|
927
998
|
if (input.kind === "instructionAccountNode") {
|
|
928
|
-
return
|
|
999
|
+
return (0, import_visitors_core17.pipe)(
|
|
1000
|
+
defaultFragment(`expectSome(accounts.${name}.value)`),
|
|
1001
|
+
(f) => addFragmentImports(f, "shared", ["expectSome"])
|
|
1002
|
+
);
|
|
929
1003
|
}
|
|
930
|
-
return
|
|
1004
|
+
return (0, import_visitors_core17.pipe)(
|
|
1005
|
+
defaultFragment(`expectAddress(accounts.${name}.value)`),
|
|
1006
|
+
(f) => addFragmentImports(f, "shared", ["expectAddress"])
|
|
1007
|
+
);
|
|
931
1008
|
case "pdaValueNode":
|
|
932
1009
|
if ((0, import_nodes14.isNode)(defaultValue.pda, "pdaNode")) {
|
|
933
|
-
const pdaProgram = defaultValue.pda.programId ?
|
|
934
|
-
`'${defaultValue.pda.programId}' as Address<'${defaultValue.pda.programId}'>`
|
|
935
|
-
|
|
1010
|
+
const pdaProgram = defaultValue.pda.programId ? (0, import_visitors_core17.pipe)(
|
|
1011
|
+
fragment(`'${defaultValue.pda.programId}' as Address<'${defaultValue.pda.programId}'>`),
|
|
1012
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1013
|
+
) : fragment("programAddress");
|
|
936
1014
|
const pdaSeeds2 = defaultValue.pda.seeds.flatMap((seed) => {
|
|
937
1015
|
if ((0, import_nodes14.isNode)(seed, "constantPdaSeedNode") && (0, import_nodes14.isNode)(seed.value, "programIdValueNode")) {
|
|
938
1016
|
return [
|
|
939
|
-
|
|
1017
|
+
(0, import_visitors_core17.pipe)(
|
|
1018
|
+
fragment(`getAddressEncoder().encode(${pdaProgram.content})`),
|
|
1019
|
+
(f) => mergeFragmentImports(f, [pdaProgram.imports]),
|
|
1020
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["getAddressEncoder"])
|
|
1021
|
+
)
|
|
940
1022
|
];
|
|
941
1023
|
}
|
|
942
1024
|
if ((0, import_nodes14.isNode)(seed, "constantPdaSeedNode") && !(0, import_nodes14.isNode)(seed.value, "programIdValueNode")) {
|
|
943
|
-
const typeManifest2 = (0,
|
|
944
|
-
const valueManifest2 = (0,
|
|
1025
|
+
const typeManifest2 = (0, import_visitors_core17.visit)(seed.type, typeManifestVisitor);
|
|
1026
|
+
const valueManifest2 = (0, import_visitors_core17.visit)(seed.value, typeManifestVisitor);
|
|
945
1027
|
return [
|
|
946
|
-
|
|
947
|
-
`${typeManifest2.encoder.
|
|
948
|
-
|
|
1028
|
+
(0, import_visitors_core17.pipe)(
|
|
1029
|
+
fragment(`${typeManifest2.encoder.content}.encode(${valueManifest2.value.content})`),
|
|
1030
|
+
(f) => mergeFragmentImports(f, [
|
|
1031
|
+
typeManifest2.encoder.imports,
|
|
1032
|
+
valueManifest2.value.imports
|
|
1033
|
+
])
|
|
1034
|
+
)
|
|
949
1035
|
];
|
|
950
1036
|
}
|
|
951
1037
|
if ((0, import_nodes14.isNode)(seed, "variablePdaSeedNode")) {
|
|
952
|
-
const typeManifest2 = (0,
|
|
1038
|
+
const typeManifest2 = (0, import_visitors_core17.visit)(seed.type, typeManifestVisitor);
|
|
953
1039
|
const valueSeed = defaultValue.seeds.find((s) => s.name === seed.name)?.value;
|
|
954
1040
|
if (!valueSeed) return [];
|
|
955
1041
|
if ((0, import_nodes14.isNode)(valueSeed, "accountValueNode")) {
|
|
956
1042
|
return [
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
1043
|
+
(0, import_visitors_core17.pipe)(
|
|
1044
|
+
fragment(
|
|
1045
|
+
`${typeManifest2.encoder.content}.encode(expectAddress(accounts.${(0, import_nodes14.camelCase)(valueSeed.name)}.value))`
|
|
1046
|
+
),
|
|
1047
|
+
(f) => mergeFragmentImports(f, [typeManifest2.encoder.imports]),
|
|
1048
|
+
(f) => addFragmentImports(f, "shared", ["expectAddress"])
|
|
1049
|
+
)
|
|
960
1050
|
];
|
|
961
1051
|
}
|
|
962
1052
|
if ((0, import_nodes14.isNode)(valueSeed, "argumentValueNode")) {
|
|
963
1053
|
return [
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
1054
|
+
(0, import_visitors_core17.pipe)(
|
|
1055
|
+
fragment(
|
|
1056
|
+
`${typeManifest2.encoder.content}.encode(expectSome(args.${(0, import_nodes14.camelCase)(valueSeed.name)}))`
|
|
1057
|
+
),
|
|
1058
|
+
(f) => mergeFragmentImports(f, [typeManifest2.encoder.imports]),
|
|
1059
|
+
(f) => addFragmentImports(f, "shared", ["expectSome"])
|
|
1060
|
+
)
|
|
967
1061
|
];
|
|
968
1062
|
}
|
|
969
|
-
const valueManifest2 = (0,
|
|
1063
|
+
const valueManifest2 = (0, import_visitors_core17.visit)(valueSeed, typeManifestVisitor);
|
|
970
1064
|
return [
|
|
971
|
-
|
|
972
|
-
`${typeManifest2.encoder.
|
|
973
|
-
|
|
1065
|
+
(0, import_visitors_core17.pipe)(
|
|
1066
|
+
fragment(`${typeManifest2.encoder.content}.encode(${valueManifest2.value.content})`),
|
|
1067
|
+
(f) => mergeFragmentImports(f, [
|
|
1068
|
+
typeManifest2.encoder.imports,
|
|
1069
|
+
valueManifest2.value.imports
|
|
1070
|
+
])
|
|
1071
|
+
)
|
|
974
1072
|
];
|
|
975
1073
|
}
|
|
976
1074
|
return [];
|
|
977
1075
|
});
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
1076
|
+
return (0, import_visitors_core17.pipe)(
|
|
1077
|
+
mergeFragments([pdaProgram, ...pdaSeeds2], ([p, ...s]) => {
|
|
1078
|
+
const programAddress2 = p === "programAddress" ? p : `programAddress: ${p}`;
|
|
1079
|
+
return `await getProgramDerivedAddress({ ${programAddress2}, seeds: [${s.join(", ")}] })`;
|
|
1080
|
+
}),
|
|
1081
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["getProgramDerivedAddress"]),
|
|
1082
|
+
(f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => defaultFragment(c).content)
|
|
1083
|
+
);
|
|
983
1084
|
}
|
|
984
1085
|
const pdaFunction = nameApi.pdaFindFunction(defaultValue.pda.name);
|
|
985
1086
|
const pdaArgs = [];
|
|
986
1087
|
const pdaSeeds = defaultValue.seeds.map((seed) => {
|
|
987
1088
|
if ((0, import_nodes14.isNode)(seed.value, "accountValueNode")) {
|
|
988
|
-
return
|
|
989
|
-
`${seed.name}: expectAddress(accounts.${(0, import_nodes14.camelCase)(seed.value.name)}.value)`
|
|
990
|
-
|
|
1089
|
+
return (0, import_visitors_core17.pipe)(
|
|
1090
|
+
fragment(`${seed.name}: expectAddress(accounts.${(0, import_nodes14.camelCase)(seed.value.name)}.value)`),
|
|
1091
|
+
(f) => addFragmentImports(f, "shared", ["expectAddress"])
|
|
1092
|
+
);
|
|
991
1093
|
}
|
|
992
1094
|
if ((0, import_nodes14.isNode)(seed.value, "argumentValueNode")) {
|
|
993
|
-
return
|
|
994
|
-
|
|
995
|
-
"expectSome"
|
|
1095
|
+
return (0, import_visitors_core17.pipe)(
|
|
1096
|
+
fragment(`${seed.name}: expectSome(args.${(0, import_nodes14.camelCase)(seed.value.name)})`),
|
|
1097
|
+
(f) => addFragmentImports(f, "shared", ["expectSome"])
|
|
996
1098
|
);
|
|
997
1099
|
}
|
|
998
|
-
return (0,
|
|
1100
|
+
return (0, import_visitors_core17.pipe)(
|
|
1101
|
+
(0, import_visitors_core17.visit)(seed.value, typeManifestVisitor).value,
|
|
1102
|
+
(f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => `${seed.name}: ${c}`)
|
|
1103
|
+
);
|
|
999
1104
|
});
|
|
1000
|
-
const pdaSeedsFragment =
|
|
1105
|
+
const pdaSeedsFragment = (0, import_visitors_core17.pipe)(
|
|
1106
|
+
mergeFragments(pdaSeeds, (renders) => renders.join(", ")),
|
|
1107
|
+
(f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => `{ ${c} }`)
|
|
1108
|
+
);
|
|
1001
1109
|
if (pdaSeeds.length > 0) {
|
|
1002
|
-
pdaArgs.push(pdaSeedsFragment.
|
|
1110
|
+
pdaArgs.push(pdaSeedsFragment.content);
|
|
1003
1111
|
}
|
|
1004
|
-
|
|
1112
|
+
const module2 = getImportFrom(defaultValue.pda);
|
|
1113
|
+
return (0, import_visitors_core17.pipe)(
|
|
1114
|
+
defaultFragment(`await ${pdaFunction}(${pdaArgs.join(", ")})`),
|
|
1115
|
+
(f) => mergeFragmentImports(f, [pdaSeedsFragment.imports]),
|
|
1116
|
+
(f) => addFragmentImports(f, module2, [pdaFunction])
|
|
1117
|
+
);
|
|
1005
1118
|
case "publicKeyValueNode":
|
|
1006
|
-
return
|
|
1007
|
-
|
|
1008
|
-
"type Address"
|
|
1119
|
+
return (0, import_visitors_core17.pipe)(
|
|
1120
|
+
defaultFragment(`'${defaultValue.publicKey}' as Address<'${defaultValue.publicKey}'>`),
|
|
1121
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1009
1122
|
);
|
|
1010
1123
|
case "programLinkNode":
|
|
1011
1124
|
const programAddress = nameApi.programAddressConstant(defaultValue.name);
|
|
1012
|
-
return
|
|
1125
|
+
return (0, import_visitors_core17.pipe)(
|
|
1126
|
+
defaultFragment(programAddress, false),
|
|
1127
|
+
(f) => addFragmentImports(f, getImportFrom(defaultValue), [programAddress])
|
|
1128
|
+
);
|
|
1013
1129
|
case "programIdValueNode":
|
|
1014
1130
|
if (optionalAccountStrategy === "programId" && input.kind === "instructionAccountNode" && input.isOptional) {
|
|
1015
1131
|
return fragment("");
|
|
@@ -1019,18 +1135,23 @@ accounts.${inputName}.isWritable = ${isWritable ? "true" : "false"}`
|
|
|
1019
1135
|
case "payerValueNode":
|
|
1020
1136
|
return fragment("");
|
|
1021
1137
|
case "accountBumpValueNode":
|
|
1022
|
-
return
|
|
1023
|
-
`expectProgramDerivedAddress(accounts.${(0, import_nodes14.camelCase)(defaultValue.name)}.value)[1]`
|
|
1024
|
-
|
|
1138
|
+
return (0, import_visitors_core17.pipe)(
|
|
1139
|
+
defaultFragment(`expectProgramDerivedAddress(accounts.${(0, import_nodes14.camelCase)(defaultValue.name)}.value)[1]`),
|
|
1140
|
+
(f) => addFragmentImports(f, "shared", ["expectProgramDerivedAddress"])
|
|
1141
|
+
);
|
|
1025
1142
|
case "argumentValueNode":
|
|
1026
|
-
return
|
|
1027
|
-
|
|
1028
|
-
"expectSome"
|
|
1143
|
+
return (0, import_visitors_core17.pipe)(
|
|
1144
|
+
defaultFragment(`expectSome(args.${(0, import_nodes14.camelCase)(defaultValue.name)})`),
|
|
1145
|
+
(f) => addFragmentImports(f, "shared", ["expectSome"])
|
|
1029
1146
|
);
|
|
1030
1147
|
case "resolverValueNode":
|
|
1031
1148
|
const resolverFunction = nameApi.resolverFunction(defaultValue.name);
|
|
1032
1149
|
const resolverAwait = useAsync && asyncResolvers.includes(defaultValue.name) ? "await " : "";
|
|
1033
|
-
return
|
|
1150
|
+
return (0, import_visitors_core17.pipe)(
|
|
1151
|
+
defaultFragment(`${resolverAwait}${resolverFunction}(resolverScope)`),
|
|
1152
|
+
(f) => addFragmentImports(f, getImportFrom(defaultValue), [resolverFunction]),
|
|
1153
|
+
(f) => addFragmentFeatures(f, ["instruction:resolverScopeVariable"])
|
|
1154
|
+
);
|
|
1034
1155
|
case "conditionalValueNode":
|
|
1035
1156
|
const ifTrueRenderer = renderNestedInstructionDefault({
|
|
1036
1157
|
...scope,
|
|
@@ -1043,49 +1164,56 @@ accounts.${inputName}.isWritable = ${isWritable ? "true" : "false"}`
|
|
|
1043
1164
|
if (!ifTrueRenderer && !ifFalseRenderer) {
|
|
1044
1165
|
return fragment("");
|
|
1045
1166
|
}
|
|
1046
|
-
|
|
1167
|
+
let conditionalFragment = fragment("");
|
|
1047
1168
|
if (ifTrueRenderer) {
|
|
1048
|
-
conditionalFragment
|
|
1169
|
+
conditionalFragment = mergeFragments([conditionalFragment, ifTrueRenderer], (c) => c[0]);
|
|
1049
1170
|
}
|
|
1050
1171
|
if (ifFalseRenderer) {
|
|
1051
|
-
conditionalFragment
|
|
1172
|
+
conditionalFragment = mergeFragments([conditionalFragment, ifFalseRenderer], (c) => c[0]);
|
|
1052
1173
|
}
|
|
1053
1174
|
const negatedCondition = !ifTrueRenderer;
|
|
1054
1175
|
let condition = "true";
|
|
1055
1176
|
if ((0, import_nodes14.isNode)(defaultValue.condition, "resolverValueNode")) {
|
|
1056
1177
|
const conditionalResolverFunction = nameApi.resolverFunction(defaultValue.condition.name);
|
|
1057
|
-
|
|
1178
|
+
const module3 = getImportFrom(defaultValue.condition);
|
|
1179
|
+
conditionalFragment = (0, import_visitors_core17.pipe)(
|
|
1180
|
+
conditionalFragment,
|
|
1181
|
+
(f) => addFragmentImports(f, module3, [conditionalResolverFunction]),
|
|
1182
|
+
(f) => addFragmentFeatures(f, ["instruction:resolverScopeVariable"])
|
|
1183
|
+
);
|
|
1058
1184
|
const conditionalResolverAwait = useAsync && asyncResolvers.includes(defaultValue.condition.name) ? "await " : "";
|
|
1059
1185
|
condition = `${conditionalResolverAwait}${conditionalResolverFunction}(resolverScope)`;
|
|
1060
1186
|
condition = negatedCondition ? `!${condition}` : condition;
|
|
1061
1187
|
} else {
|
|
1062
1188
|
const comparedInputName = (0, import_nodes14.isNode)(defaultValue.condition, "accountValueNode") ? `accounts.${(0, import_nodes14.camelCase)(defaultValue.condition.name)}.value` : `args.${(0, import_nodes14.camelCase)(defaultValue.condition.name)}`;
|
|
1063
1189
|
if (defaultValue.value) {
|
|
1064
|
-
const comparedValue = (0,
|
|
1065
|
-
conditionalFragment
|
|
1190
|
+
const comparedValue = (0, import_visitors_core17.visit)(defaultValue.value, typeManifestVisitor).value;
|
|
1191
|
+
conditionalFragment = mergeFragments([conditionalFragment, comparedValue], (c) => c[0]);
|
|
1066
1192
|
const operator = negatedCondition ? "!==" : "===";
|
|
1067
|
-
condition = `${comparedInputName} ${operator} ${comparedValue.
|
|
1193
|
+
condition = `${comparedInputName} ${operator} ${comparedValue.content}`;
|
|
1068
1194
|
} else {
|
|
1069
1195
|
condition = negatedCondition ? `!${comparedInputName}` : comparedInputName;
|
|
1070
1196
|
}
|
|
1071
1197
|
}
|
|
1072
1198
|
if (ifTrueRenderer && ifFalseRenderer) {
|
|
1073
|
-
return
|
|
1199
|
+
return (0, import_renderers_core5.setFragmentContent)(
|
|
1200
|
+
conditionalFragment,
|
|
1074
1201
|
`if (${condition}) {
|
|
1075
|
-
${ifTrueRenderer.
|
|
1202
|
+
${ifTrueRenderer.content}
|
|
1076
1203
|
} else {
|
|
1077
|
-
${ifFalseRenderer.
|
|
1204
|
+
${ifFalseRenderer.content}
|
|
1078
1205
|
}`
|
|
1079
1206
|
);
|
|
1080
1207
|
}
|
|
1081
|
-
return
|
|
1208
|
+
return (0, import_renderers_core5.setFragmentContent)(
|
|
1209
|
+
conditionalFragment,
|
|
1082
1210
|
`if (${condition}) {
|
|
1083
|
-
${ifTrueRenderer ? ifTrueRenderer.
|
|
1211
|
+
${ifTrueRenderer ? ifTrueRenderer.content : ifFalseRenderer?.content}
|
|
1084
1212
|
}`
|
|
1085
1213
|
);
|
|
1086
1214
|
default:
|
|
1087
|
-
const valueManifest = (0,
|
|
1088
|
-
return
|
|
1215
|
+
const valueManifest = (0, import_visitors_core17.visit)(defaultValue, typeManifestVisitor).value;
|
|
1216
|
+
return (0, import_visitors_core17.pipe)(valueManifest, (f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => defaultFragment(c).content));
|
|
1089
1217
|
}
|
|
1090
1218
|
}
|
|
1091
1219
|
function renderNestedInstructionDefault(scope) {
|
|
@@ -1099,21 +1227,22 @@ function renderNestedInstructionDefault(scope) {
|
|
|
1099
1227
|
|
|
1100
1228
|
// src/fragments/instructionInputResolved.ts
|
|
1101
1229
|
function getInstructionInputResolvedFragment(scope) {
|
|
1102
|
-
const instructionNode = (0,
|
|
1230
|
+
const instructionNode = (0, import_visitors_core18.getLastNodeFromPath)(scope.instructionPath);
|
|
1103
1231
|
const resolvedInputFragments = scope.resolvedInputs.flatMap((input) => {
|
|
1104
1232
|
const inputFragment = getInstructionInputDefaultFragment({
|
|
1105
1233
|
...scope,
|
|
1106
1234
|
input,
|
|
1107
1235
|
optionalAccountStrategy: (0, import_nodes15.parseOptionalAccountStrategy)(instructionNode.optionalAccountStrategy)
|
|
1108
1236
|
});
|
|
1109
|
-
if (!inputFragment.
|
|
1237
|
+
if (!inputFragment.content) return [];
|
|
1110
1238
|
const camelName = (0, import_nodes15.camelCase)(input.name);
|
|
1111
1239
|
return [
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1240
|
+
(0, import_renderers_core6.mapFragmentContent)(
|
|
1241
|
+
inputFragment,
|
|
1242
|
+
(c) => (0, import_nodes15.isNode)(input, "instructionArgumentNode") ? `if (!args.${camelName}) {
|
|
1243
|
+
${c}
|
|
1115
1244
|
}` : `if (!accounts.${camelName}.value) {
|
|
1116
|
-
${
|
|
1245
|
+
${c}
|
|
1117
1246
|
}`
|
|
1118
1247
|
)
|
|
1119
1248
|
];
|
|
@@ -1121,42 +1250,44 @@ ${r}
|
|
|
1121
1250
|
if (resolvedInputFragments.length === 0) {
|
|
1122
1251
|
return fragment("");
|
|
1123
1252
|
}
|
|
1124
|
-
return mergeFragments(
|
|
1125
|
-
[fragment("// Resolve default values."), ...resolvedInputFragments],
|
|
1126
|
-
(renders) => renders.join("\n")
|
|
1127
|
-
);
|
|
1253
|
+
return mergeFragments([fragment("// Resolve default values."), ...resolvedInputFragments], (c) => c.join("\n"));
|
|
1128
1254
|
}
|
|
1129
1255
|
|
|
1130
1256
|
// src/fragments/instructionInputType.ts
|
|
1131
1257
|
var import_nodes16 = require("@codama/nodes");
|
|
1132
|
-
var
|
|
1258
|
+
var import_renderers_core7 = require("@codama/renderers-core");
|
|
1259
|
+
var import_visitors_core19 = require("@codama/visitors-core");
|
|
1133
1260
|
function getInstructionInputTypeFragment(scope) {
|
|
1134
1261
|
const { instructionPath, useAsync, nameApi } = scope;
|
|
1135
|
-
const instructionNode = (0,
|
|
1262
|
+
const instructionNode = (0, import_visitors_core19.getLastNodeFromPath)(instructionPath);
|
|
1136
1263
|
const instructionInputType = useAsync ? nameApi.instructionAsyncInputType(instructionNode.name) : nameApi.instructionSyncInputType(instructionNode.name);
|
|
1137
1264
|
const accountsFragment = getAccountsFragment(scope);
|
|
1138
1265
|
const [dataArgumentsFragment, customDataArgumentsFragment] = getDataArgumentsFragments(scope);
|
|
1139
1266
|
const extraArgumentsFragment = getExtraArgumentsFragment(scope);
|
|
1140
1267
|
const remainingAccountsFragment = getRemainingAccountsFragment(instructionNode);
|
|
1141
|
-
return
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1268
|
+
return (0, import_visitors_core19.pipe)(
|
|
1269
|
+
fragmentFromTemplate("instructionInputType.njk", {
|
|
1270
|
+
accountsFragment: accountsFragment.content,
|
|
1271
|
+
customDataArgumentsFragment: customDataArgumentsFragment.content,
|
|
1272
|
+
dataArgumentsFragment: dataArgumentsFragment.content,
|
|
1273
|
+
extraArgumentsFragment: extraArgumentsFragment.content,
|
|
1274
|
+
instruction: instructionNode,
|
|
1275
|
+
instructionInputType,
|
|
1276
|
+
remainingAccountsFragment: remainingAccountsFragment.content
|
|
1277
|
+
}),
|
|
1278
|
+
(f) => mergeFragmentImports(f, [
|
|
1279
|
+
accountsFragment.imports,
|
|
1280
|
+
dataArgumentsFragment.imports,
|
|
1281
|
+
customDataArgumentsFragment.imports,
|
|
1282
|
+
extraArgumentsFragment.imports,
|
|
1283
|
+
remainingAccountsFragment.imports
|
|
1284
|
+
]),
|
|
1285
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1286
|
+
);
|
|
1156
1287
|
}
|
|
1157
1288
|
function getAccountsFragment(scope) {
|
|
1158
1289
|
const { instructionPath, resolvedInputs, useAsync, asyncResolvers } = scope;
|
|
1159
|
-
const instructionNode = (0,
|
|
1290
|
+
const instructionNode = (0, import_visitors_core19.getLastNodeFromPath)(instructionPath);
|
|
1160
1291
|
const fragments = instructionNode.accounts.map((account) => {
|
|
1161
1292
|
const resolvedAccount = resolvedInputs.find(
|
|
1162
1293
|
(input) => input.kind === "instructionAccountNode" && input.name === account.name
|
|
@@ -1165,38 +1296,55 @@ function getAccountsFragment(scope) {
|
|
|
1165
1296
|
const accountDocs = (0, import_nodes16.parseDocs)(account.docs);
|
|
1166
1297
|
const docblock = accountDocs.length > 0 ? jsDocblock(accountDocs) : "";
|
|
1167
1298
|
const optionalSign = hasDefaultValue || resolvedAccount.isOptional ? "?" : "";
|
|
1168
|
-
return
|
|
1169
|
-
(
|
|
1299
|
+
return (0, import_renderers_core7.mapFragmentContent)(
|
|
1300
|
+
getAccountTypeFragment2(resolvedAccount),
|
|
1301
|
+
(c) => `${docblock}${(0, import_nodes16.camelCase)(account.name)}${optionalSign}: ${c};`
|
|
1170
1302
|
);
|
|
1171
1303
|
});
|
|
1172
|
-
return mergeFragments(fragments, (
|
|
1304
|
+
return mergeFragments(fragments, (c) => c.join("\n"));
|
|
1173
1305
|
}
|
|
1174
1306
|
function getAccountTypeFragment2(account) {
|
|
1175
1307
|
const typeParam = `TAccount${(0, import_nodes16.pascalCase)(account.name)}`;
|
|
1176
1308
|
if (account.isPda && account.isSigner === false) {
|
|
1177
|
-
return
|
|
1178
|
-
|
|
1179
|
-
|
|
1309
|
+
return (0, import_visitors_core19.pipe)(
|
|
1310
|
+
fragment(`ProgramDerivedAddress<${typeParam}>`),
|
|
1311
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type ProgramDerivedAddress"])
|
|
1312
|
+
);
|
|
1180
1313
|
}
|
|
1181
1314
|
if (account.isPda && account.isSigner === "either") {
|
|
1182
|
-
return
|
|
1315
|
+
return (0, import_visitors_core19.pipe)(
|
|
1316
|
+
fragment(`ProgramDerivedAddress<${typeParam}> | TransactionSigner<${typeParam}>`),
|
|
1317
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type ProgramDerivedAddress"]),
|
|
1318
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type TransactionSigner"])
|
|
1319
|
+
);
|
|
1183
1320
|
}
|
|
1184
1321
|
if (account.isSigner === "either") {
|
|
1185
|
-
return
|
|
1322
|
+
return (0, import_visitors_core19.pipe)(
|
|
1323
|
+
fragment(`Address<${typeParam}> | TransactionSigner<${typeParam}>`),
|
|
1324
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"]),
|
|
1325
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type TransactionSigner"])
|
|
1326
|
+
);
|
|
1186
1327
|
}
|
|
1187
1328
|
if (account.isSigner) {
|
|
1188
|
-
return
|
|
1329
|
+
return (0, import_visitors_core19.pipe)(
|
|
1330
|
+
fragment(`TransactionSigner<${typeParam}>`),
|
|
1331
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type TransactionSigner"])
|
|
1332
|
+
);
|
|
1189
1333
|
}
|
|
1190
|
-
return fragment(`Address<${typeParam}>`)
|
|
1334
|
+
return (0, import_visitors_core19.pipe)(fragment(`Address<${typeParam}>`), (f) => addFragmentImports(f, "solanaAddresses", ["type Address"]));
|
|
1191
1335
|
}
|
|
1192
1336
|
function getDataArgumentsFragments(scope) {
|
|
1193
1337
|
const { instructionPath, nameApi } = scope;
|
|
1194
|
-
const instructionNode = (0,
|
|
1338
|
+
const instructionNode = (0, import_visitors_core19.getLastNodeFromPath)(instructionPath);
|
|
1195
1339
|
const customData = scope.customInstructionData.get(instructionNode.name);
|
|
1196
1340
|
if (customData) {
|
|
1197
1341
|
return [
|
|
1198
1342
|
fragment(""),
|
|
1199
|
-
|
|
1343
|
+
(0, import_visitors_core19.pipe)(
|
|
1344
|
+
fragment(nameApi.dataArgsType(customData.importAs)),
|
|
1345
|
+
(f) => mergeFragmentImports(f, [scope.dataArgsManifest.looseType.imports]),
|
|
1346
|
+
(f) => (0, import_renderers_core7.mapFragmentContent)(f, (c) => `${c} & `)
|
|
1347
|
+
)
|
|
1200
1348
|
];
|
|
1201
1349
|
}
|
|
1202
1350
|
const instructionDataName = nameApi.instructionDataType(instructionNode.name);
|
|
@@ -1205,18 +1353,18 @@ function getDataArgumentsFragments(scope) {
|
|
|
1205
1353
|
const argFragment = getArgumentFragment(arg, fragment(dataArgsType), scope.resolvedInputs, scope.renamedArgs);
|
|
1206
1354
|
return argFragment ? [argFragment] : [];
|
|
1207
1355
|
});
|
|
1208
|
-
return [mergeFragments(fragments, (
|
|
1356
|
+
return [mergeFragments(fragments, (c) => c.join("\n")), fragment("")];
|
|
1209
1357
|
}
|
|
1210
1358
|
function getExtraArgumentsFragment(scope) {
|
|
1211
1359
|
const { instructionPath, nameApi } = scope;
|
|
1212
|
-
const instructionNode = (0,
|
|
1360
|
+
const instructionNode = (0, import_visitors_core19.getLastNodeFromPath)(instructionPath);
|
|
1213
1361
|
const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);
|
|
1214
1362
|
const extraArgsType = nameApi.dataArgsType(instructionExtraName);
|
|
1215
1363
|
const fragments = (instructionNode.extraArguments ?? []).flatMap((arg) => {
|
|
1216
1364
|
const argFragment = getArgumentFragment(arg, fragment(extraArgsType), scope.resolvedInputs, scope.renamedArgs);
|
|
1217
1365
|
return argFragment ? [argFragment] : [];
|
|
1218
1366
|
});
|
|
1219
|
-
return mergeFragments(fragments, (
|
|
1367
|
+
return mergeFragments(fragments, (c) => c.join("\n"));
|
|
1220
1368
|
}
|
|
1221
1369
|
function getArgumentFragment(arg, argsType, resolvedInputs, renamedArgs) {
|
|
1222
1370
|
const resolvedArg = resolvedInputs.find(
|
|
@@ -1225,7 +1373,10 @@ function getArgumentFragment(arg, argsType, resolvedInputs, renamedArgs) {
|
|
|
1225
1373
|
if (arg.defaultValue && arg.defaultValueStrategy === "omitted") return null;
|
|
1226
1374
|
const renamedName = renamedArgs.get(arg.name) ?? arg.name;
|
|
1227
1375
|
const optionalSign = arg.defaultValue || resolvedArg?.defaultValue ? "?" : "";
|
|
1228
|
-
return
|
|
1376
|
+
return (0, import_renderers_core7.mapFragmentContent)(
|
|
1377
|
+
argsType,
|
|
1378
|
+
(c) => `${(0, import_nodes16.camelCase)(renamedName)}${optionalSign}: ${c}["${(0, import_nodes16.camelCase)(arg.name)}"];`
|
|
1379
|
+
);
|
|
1229
1380
|
}
|
|
1230
1381
|
function getRemainingAccountsFragment(instructionNode) {
|
|
1231
1382
|
const fragments = (instructionNode.remainingAccounts ?? []).flatMap((remainingAccountsNode) => {
|
|
@@ -1236,30 +1387,42 @@ function getRemainingAccountsFragment(instructionNode) {
|
|
|
1236
1387
|
if (argumentExists) return [];
|
|
1237
1388
|
const isSigner = remainingAccountsNode.isSigner ?? false;
|
|
1238
1389
|
const optionalSign = remainingAccountsNode.isOptional ?? false ? "?" : "";
|
|
1239
|
-
const signerFragment =
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1390
|
+
const signerFragment = (0, import_visitors_core19.pipe)(
|
|
1391
|
+
fragment(`TransactionSigner`),
|
|
1392
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type TransactionSigner"])
|
|
1393
|
+
);
|
|
1394
|
+
const addressFragment = (0, import_visitors_core19.pipe)(
|
|
1395
|
+
fragment(`Address`),
|
|
1396
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1397
|
+
);
|
|
1398
|
+
return (0, import_renderers_core7.mapFragmentContent)(
|
|
1399
|
+
(() => {
|
|
1400
|
+
if (isSigner === "either") {
|
|
1401
|
+
return mergeFragments([signerFragment, addressFragment], (c) => c.join(" | "));
|
|
1402
|
+
}
|
|
1403
|
+
return isSigner ? signerFragment : addressFragment;
|
|
1404
|
+
})(),
|
|
1405
|
+
(c) => `${(0, import_nodes16.camelCase)(name)}${optionalSign}: Array<${c}>;`
|
|
1406
|
+
);
|
|
1247
1407
|
});
|
|
1248
|
-
return mergeFragments(fragments, (
|
|
1408
|
+
return mergeFragments(fragments, (c) => c.join("\n"));
|
|
1249
1409
|
}
|
|
1250
1410
|
|
|
1251
1411
|
// src/fragments/instructionRemainingAccounts.ts
|
|
1252
1412
|
var import_nodes17 = require("@codama/nodes");
|
|
1253
|
-
var
|
|
1413
|
+
var import_visitors_core20 = require("@codama/visitors-core");
|
|
1254
1414
|
function getInstructionRemainingAccountsFragment(scope) {
|
|
1255
|
-
const { remainingAccounts } = (0,
|
|
1256
|
-
const fragments = (remainingAccounts ?? []).flatMap((
|
|
1415
|
+
const { remainingAccounts } = (0, import_visitors_core20.getLastNodeFromPath)(scope.instructionPath);
|
|
1416
|
+
const fragments = (remainingAccounts ?? []).flatMap((a) => getRemainingAccountsFragment2(a, scope));
|
|
1257
1417
|
if (fragments.length === 0) return fragment("");
|
|
1258
|
-
return
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1418
|
+
return (0, import_visitors_core20.pipe)(
|
|
1419
|
+
mergeFragments(
|
|
1420
|
+
fragments,
|
|
1421
|
+
(c) => `// Remaining accounts.
|
|
1422
|
+
const remainingAccounts: AccountMeta[] = ${c.length === 1 ? c[0] : `[...${c.join(", ...")}]`}`
|
|
1423
|
+
),
|
|
1424
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type AccountMeta"])
|
|
1425
|
+
);
|
|
1263
1426
|
}
|
|
1264
1427
|
function getRemainingAccountsFragment2(remainingAccounts, scope) {
|
|
1265
1428
|
const remainingAccountsFragment = (() => {
|
|
@@ -1275,7 +1438,7 @@ function getRemainingAccountsFragment2(remainingAccounts, scope) {
|
|
|
1275
1438
|
return [remainingAccountsFragment];
|
|
1276
1439
|
}
|
|
1277
1440
|
function getArgumentValueNodeFragment2(remainingAccounts, scope) {
|
|
1278
|
-
const instructionNode = (0,
|
|
1441
|
+
const instructionNode = (0, import_visitors_core20.getLastNodeFromPath)(scope.instructionPath);
|
|
1279
1442
|
(0, import_nodes17.assertIsNode)(remainingAccounts.value, "argumentValueNode");
|
|
1280
1443
|
const argumentName = (0, import_nodes17.camelCase)(remainingAccounts.value.name);
|
|
1281
1444
|
const isOptional = remainingAccounts.isOptional ?? false;
|
|
@@ -1288,22 +1451,27 @@ function getArgumentValueNodeFragment2(remainingAccounts, scope) {
|
|
|
1288
1451
|
const allArguments = (0, import_nodes17.getAllInstructionArguments)(instructionNode);
|
|
1289
1452
|
const argumentExists = allArguments.some((arg) => arg.name === remainingAccounts.value.name);
|
|
1290
1453
|
if (argumentExists || isSigner === false) {
|
|
1291
|
-
return
|
|
1292
|
-
|
|
1293
|
-
["AccountRole"]
|
|
1454
|
+
return (0, import_visitors_core20.pipe)(
|
|
1455
|
+
fragment(`${argumentArray}.map((address) => ({ address, role: ${role} }))`),
|
|
1456
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["AccountRole"])
|
|
1294
1457
|
);
|
|
1295
1458
|
}
|
|
1296
1459
|
if (isSigner === "either") {
|
|
1297
|
-
return
|
|
1298
|
-
|
|
1460
|
+
return (0, import_visitors_core20.pipe)(
|
|
1461
|
+
fragment(
|
|
1462
|
+
`${argumentArray}.map((addressOrSigner) => (isTransactionSigner(addressOrSigner)
|
|
1299
1463
|
? { address: addressOrSigner.address, role: ${role}, signer: addressOrSigner }
|
|
1300
1464
|
: { address: addressOrSigner, role: ${role} }
|
|
1301
1465
|
))`
|
|
1302
|
-
|
|
1466
|
+
),
|
|
1467
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["AccountRole"]),
|
|
1468
|
+
(f) => addFragmentImports(f, "shared", ["isTransactionSigner"])
|
|
1469
|
+
);
|
|
1303
1470
|
}
|
|
1304
|
-
return
|
|
1305
|
-
`${argumentArray}.map((signer) => ({ address: signer.address, role: ${signerRole}, signer }))`
|
|
1306
|
-
|
|
1471
|
+
return (0, import_visitors_core20.pipe)(
|
|
1472
|
+
fragment(`${argumentArray}.map((signer) => ({ address: signer.address, role: ${signerRole}, signer }))`),
|
|
1473
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["AccountRole"])
|
|
1474
|
+
);
|
|
1307
1475
|
}
|
|
1308
1476
|
function getResolverValueNodeFragment2(remainingAccounts, scope) {
|
|
1309
1477
|
(0, import_nodes17.assertIsNode)(remainingAccounts.value, "resolverValueNode");
|
|
@@ -1311,7 +1479,12 @@ function getResolverValueNodeFragment2(remainingAccounts, scope) {
|
|
|
1311
1479
|
if (!scope.useAsync && isAsync) return null;
|
|
1312
1480
|
const awaitKeyword = scope.useAsync && isAsync ? "await " : "";
|
|
1313
1481
|
const functionName = scope.nameApi.resolverFunction(remainingAccounts.value.name);
|
|
1314
|
-
|
|
1482
|
+
const module2 = scope.getImportFrom(remainingAccounts.value);
|
|
1483
|
+
return (0, import_visitors_core20.pipe)(
|
|
1484
|
+
fragment(`${awaitKeyword}${functionName}(resolverScope)`),
|
|
1485
|
+
(f) => addFragmentImports(f, module2, [functionName]),
|
|
1486
|
+
(f) => addFragmentFeatures(f, ["instruction:resolverScopeVariable"])
|
|
1487
|
+
);
|
|
1315
1488
|
}
|
|
1316
1489
|
|
|
1317
1490
|
// src/fragments/instructionFunction.ts
|
|
@@ -1326,8 +1499,8 @@ function getInstructionFunctionFragment(scope) {
|
|
|
1326
1499
|
nameApi,
|
|
1327
1500
|
customInstructionData
|
|
1328
1501
|
} = scope;
|
|
1329
|
-
const instructionNode = (0,
|
|
1330
|
-
const programNode = (0,
|
|
1502
|
+
const instructionNode = (0, import_visitors_core21.getLastNodeFromPath)(instructionPath);
|
|
1503
|
+
const programNode = (0, import_visitors_core21.findProgramNodeFromPath)(instructionPath);
|
|
1331
1504
|
if (useAsync && !hasAsyncFunction(instructionNode, resolvedInputs, asyncResolvers)) {
|
|
1332
1505
|
return fragment("");
|
|
1333
1506
|
}
|
|
@@ -1353,13 +1526,11 @@ function getInstructionFunctionFragment(scope) {
|
|
|
1353
1526
|
const hasInput = hasAccounts || hasAnyArgs;
|
|
1354
1527
|
const instructionDataName = nameApi.instructionDataType(instructionNode.name);
|
|
1355
1528
|
const programAddressConstant = nameApi.programAddressConstant(programNode.name);
|
|
1356
|
-
const encoderFunction = customData ? dataArgsManifest.encoder.
|
|
1357
|
-
const argsTypeFragment =
|
|
1358
|
-
customData ? dataArgsManifest.looseType.
|
|
1529
|
+
const encoderFunction = customData ? dataArgsManifest.encoder.content : `${nameApi.encoderFunction(instructionDataName)}()`;
|
|
1530
|
+
const argsTypeFragment = (0, import_visitors_core21.pipe)(
|
|
1531
|
+
fragment(customData ? dataArgsManifest.looseType.content : nameApi.dataArgsType(instructionDataName)),
|
|
1532
|
+
customData ? (f) => mergeFragmentImports(f, [dataArgsManifest.looseType.imports, dataArgsManifest.encoder.imports]) : (f) => f
|
|
1359
1533
|
);
|
|
1360
|
-
if (customData) {
|
|
1361
|
-
argsTypeFragment.mergeImportsWith(dataArgsManifest.looseType, dataArgsManifest.encoder);
|
|
1362
|
-
}
|
|
1363
1534
|
const functionName = useAsync ? nameApi.instructionAsyncFunction(instructionNode.name) : nameApi.instructionSyncFunction(instructionNode.name);
|
|
1364
1535
|
const typeParamsFragment = getTypeParams(instructionNode, programAddressConstant);
|
|
1365
1536
|
const instructionTypeFragment = getInstructionType(scope);
|
|
@@ -1371,11 +1542,11 @@ function getInstructionFunctionFragment(scope) {
|
|
|
1371
1542
|
const byteDeltaFragment = getInstructionByteDeltaFragment(scope);
|
|
1372
1543
|
const resolvedFragment = mergeFragments(
|
|
1373
1544
|
[resolvedInputsFragment, remainingAccountsFragment, byteDeltaFragment],
|
|
1374
|
-
(
|
|
1545
|
+
(content) => content.join("\n\n")
|
|
1375
1546
|
);
|
|
1376
|
-
const hasRemainingAccounts = remainingAccountsFragment.
|
|
1377
|
-
const hasByteDeltas = byteDeltaFragment.
|
|
1378
|
-
const hasResolver = resolvedFragment.
|
|
1547
|
+
const hasRemainingAccounts = remainingAccountsFragment.content !== "";
|
|
1548
|
+
const hasByteDeltas = byteDeltaFragment.content !== "";
|
|
1549
|
+
const hasResolver = resolvedFragment.features.has("instruction:resolverScopeVariable");
|
|
1379
1550
|
const getReturnType = (instructionType) => {
|
|
1380
1551
|
let returnType = instructionType;
|
|
1381
1552
|
if (hasByteDeltas) {
|
|
@@ -1383,54 +1554,59 @@ function getInstructionFunctionFragment(scope) {
|
|
|
1383
1554
|
}
|
|
1384
1555
|
return useAsync ? `Promise<${returnType}>` : returnType;
|
|
1385
1556
|
};
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1557
|
+
return (0, import_visitors_core21.pipe)(
|
|
1558
|
+
fragmentFromTemplate("instructionFunction.njk", {
|
|
1559
|
+
argsTypeFragment: argsTypeFragment.content,
|
|
1560
|
+
encoderFunction,
|
|
1561
|
+
functionName,
|
|
1562
|
+
getReturnType,
|
|
1563
|
+
hasAccounts,
|
|
1564
|
+
hasAnyArgs,
|
|
1565
|
+
hasByteDeltas,
|
|
1566
|
+
hasData,
|
|
1567
|
+
hasDataArgs,
|
|
1568
|
+
hasExtraArgs,
|
|
1569
|
+
hasInput,
|
|
1570
|
+
hasLegacyOptionalAccounts,
|
|
1571
|
+
hasRemainingAccounts,
|
|
1572
|
+
hasResolver,
|
|
1573
|
+
inputTypeCallFragment: inputTypeCallFragment.content,
|
|
1574
|
+
inputTypeFragment: inputTypeFragment.content,
|
|
1575
|
+
instruction: instructionNode,
|
|
1576
|
+
instructionTypeFragment: instructionTypeFragment.content,
|
|
1577
|
+
programAddressConstant,
|
|
1578
|
+
renamedArgs: renamedArgsText,
|
|
1579
|
+
resolvedFragment: resolvedFragment.content,
|
|
1580
|
+
typeParamsFragment: typeParamsFragment.content,
|
|
1581
|
+
useAsync
|
|
1582
|
+
}),
|
|
1583
|
+
(f) => mergeFragmentImports(f, [
|
|
1584
|
+
typeParamsFragment.imports,
|
|
1585
|
+
instructionTypeFragment.imports,
|
|
1586
|
+
inputTypeFragment.imports,
|
|
1587
|
+
inputTypeCallFragment.imports,
|
|
1588
|
+
resolvedFragment.imports,
|
|
1589
|
+
argsTypeFragment.imports
|
|
1590
|
+
]),
|
|
1591
|
+
(f) => addFragmentImports(f, "generatedPrograms", [programAddressConstant]),
|
|
1592
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"]),
|
|
1593
|
+
(f) => hasAccounts ? addFragmentImports(f, "solanaInstructions", ["type AccountMeta"]) : f,
|
|
1594
|
+
(f) => hasAccounts ? addFragmentImports(f, "shared", ["getAccountMetaFactory", "type ResolvedAccount"]) : f,
|
|
1595
|
+
(f) => hasByteDeltas ? addFragmentImports(f, "shared", ["type InstructionWithByteDelta"]) : f
|
|
1596
|
+
);
|
|
1425
1597
|
}
|
|
1426
1598
|
function getTypeParams(instructionNode, programAddressConstant) {
|
|
1427
1599
|
const typeParams = instructionNode.accounts.map((account) => `TAccount${(0, import_nodes18.pascalCase)(account.name)} extends string`);
|
|
1428
1600
|
typeParams.push(`TProgramAddress extends Address = typeof ${programAddressConstant}`);
|
|
1429
|
-
return
|
|
1601
|
+
return (0, import_visitors_core21.pipe)(
|
|
1602
|
+
fragment(typeParams.filter((x) => !!x).join(", ")),
|
|
1603
|
+
(f) => (0, import_renderers_core8.mapFragmentContent)(f, (c) => `<${c}>`),
|
|
1604
|
+
(f) => addFragmentImports(f, "generatedPrograms", [programAddressConstant])
|
|
1605
|
+
);
|
|
1430
1606
|
}
|
|
1431
1607
|
function getInstructionType(scope) {
|
|
1432
1608
|
const { instructionPath, nameApi } = scope;
|
|
1433
|
-
const instructionNode = (0,
|
|
1609
|
+
const instructionNode = (0, import_visitors_core21.getLastNodeFromPath)(instructionPath);
|
|
1434
1610
|
const instructionTypeName = nameApi.instructionType(instructionNode.name);
|
|
1435
1611
|
const programAddressFragment = fragment("TProgramAddress");
|
|
1436
1612
|
const accountTypeParamsFragments = instructionNode.accounts.map((account) => {
|
|
@@ -1438,20 +1614,24 @@ function getInstructionType(scope) {
|
|
|
1438
1614
|
const camelName = (0, import_nodes18.camelCase)(account.name);
|
|
1439
1615
|
if (account.isSigner === "either") {
|
|
1440
1616
|
const signerRole = account.isWritable ? "WritableSignerAccount" : "ReadonlySignerAccount";
|
|
1441
|
-
return
|
|
1442
|
-
|
|
1443
|
-
|
|
1617
|
+
return (0, import_visitors_core21.pipe)(
|
|
1618
|
+
fragment(
|
|
1619
|
+
`typeof input["${camelName}"] extends TransactionSigner<${typeParam}> ? ${signerRole}<${typeParam}> & AccountSignerMeta<${typeParam}> : ${typeParam}`
|
|
1620
|
+
),
|
|
1621
|
+
(f) => addFragmentImports(f, "solanaInstructions", [`type ${signerRole}`]),
|
|
1622
|
+
(f) => addFragmentImports(f, "solanaSigners", ["type AccountSignerMeta"])
|
|
1623
|
+
);
|
|
1444
1624
|
}
|
|
1445
1625
|
return fragment(typeParam);
|
|
1446
1626
|
});
|
|
1447
|
-
return
|
|
1448
|
-
[programAddressFragment, ...accountTypeParamsFragments],
|
|
1449
|
-
(
|
|
1450
|
-
)
|
|
1627
|
+
return (0, import_visitors_core21.pipe)(
|
|
1628
|
+
mergeFragments([programAddressFragment, ...accountTypeParamsFragments], (c) => c.join(", ")),
|
|
1629
|
+
(f) => (0, import_renderers_core8.mapFragmentContent)(f, (c) => `${instructionTypeName}<${c}>`)
|
|
1630
|
+
);
|
|
1451
1631
|
}
|
|
1452
1632
|
function getInputTypeCall(scope) {
|
|
1453
1633
|
const { instructionPath, useAsync, nameApi } = scope;
|
|
1454
|
-
const instructionNode = (0,
|
|
1634
|
+
const instructionNode = (0, import_visitors_core21.getLastNodeFromPath)(instructionPath);
|
|
1455
1635
|
const inputTypeName = useAsync ? nameApi.instructionAsyncInputType(instructionNode.name) : nameApi.instructionSyncInputType(instructionNode.name);
|
|
1456
1636
|
if (instructionNode.accounts.length === 0) return fragment(inputTypeName);
|
|
1457
1637
|
const accountTypeParams = instructionNode.accounts.map((account) => `TAccount${(0, import_nodes18.pascalCase)(account.name)}`).join(", ");
|
|
@@ -1459,11 +1639,11 @@ function getInputTypeCall(scope) {
|
|
|
1459
1639
|
}
|
|
1460
1640
|
|
|
1461
1641
|
// src/fragments/instructionParseFunction.ts
|
|
1462
|
-
var
|
|
1642
|
+
var import_visitors_core22 = require("@codama/visitors-core");
|
|
1463
1643
|
function getInstructionParseFunctionFragment(scope) {
|
|
1464
1644
|
const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;
|
|
1465
|
-
const instructionNode = (0,
|
|
1466
|
-
const programNode = (0,
|
|
1645
|
+
const instructionNode = (0, import_visitors_core22.getLastNodeFromPath)(instructionPath);
|
|
1646
|
+
const programNode = (0, import_visitors_core22.findProgramNodeFromPath)(instructionPath);
|
|
1467
1647
|
const customData = customInstructionData.get(instructionNode.name);
|
|
1468
1648
|
const hasAccounts = instructionNode.accounts.length > 0;
|
|
1469
1649
|
const hasOptionalAccounts = instructionNode.accounts.some((account) => account.isOptional);
|
|
@@ -1471,34 +1651,44 @@ function getInstructionParseFunctionFragment(scope) {
|
|
|
1471
1651
|
const hasData = !!customData || instructionNode.arguments.length > 0;
|
|
1472
1652
|
const instructionDataName = nameApi.instructionDataType(instructionNode.name);
|
|
1473
1653
|
const programAddressConstant = nameApi.programAddressConstant(programNode.name);
|
|
1474
|
-
const dataTypeFragment =
|
|
1475
|
-
|
|
1654
|
+
const dataTypeFragment = customData ? (0, import_visitors_core22.pipe)(
|
|
1655
|
+
fragment(dataArgsManifest.strictType.content),
|
|
1656
|
+
(f) => mergeFragmentImports(f, [dataArgsManifest.strictType.imports, dataArgsManifest.decoder.imports])
|
|
1657
|
+
) : fragment(nameApi.dataType(instructionDataName));
|
|
1658
|
+
const decoderFunction = customData ? dataArgsManifest.decoder.content : `${nameApi.decoderFunction(instructionDataName)}()`;
|
|
1659
|
+
return (0, import_visitors_core22.pipe)(
|
|
1660
|
+
fragmentFromTemplate("instructionParseFunction.njk", {
|
|
1661
|
+
dataTypeFragment: dataTypeFragment.content,
|
|
1662
|
+
decoderFunction,
|
|
1663
|
+
hasAccounts,
|
|
1664
|
+
hasData,
|
|
1665
|
+
hasOptionalAccounts,
|
|
1666
|
+
instruction: instructionNode,
|
|
1667
|
+
instructionParseFunction: nameApi.instructionParseFunction(instructionNode.name),
|
|
1668
|
+
instructionParsedType: nameApi.instructionParsedType(instructionNode.name),
|
|
1669
|
+
minimumNumberOfAccounts,
|
|
1670
|
+
programAddressConstant
|
|
1671
|
+
}),
|
|
1672
|
+
(f) => mergeFragmentImports(f, [dataTypeFragment.imports]),
|
|
1673
|
+
(f) => addFragmentImports(f, "generatedPrograms", [programAddressConstant]),
|
|
1674
|
+
(f) => addFragmentImports(f, "solanaInstructions", ["type Instruction"]),
|
|
1675
|
+
hasAccounts ? (f) => addFragmentImports(f, "solanaInstructions", ["type InstructionWithAccounts", "type AccountMeta"]) : (f) => f,
|
|
1676
|
+
hasData ? (f) => addFragmentImports(
|
|
1677
|
+
addFragmentImports(f, "solanaInstructions", ["type InstructionWithData"]),
|
|
1678
|
+
"solanaCodecsCore",
|
|
1679
|
+
["type ReadonlyUint8Array"]
|
|
1680
|
+
) : (f) => f
|
|
1476
1681
|
);
|
|
1477
|
-
const decoderFunction = customData ? dataArgsManifest.decoder.render : `${nameApi.decoderFunction(instructionDataName)}()`;
|
|
1478
|
-
if (customData) {
|
|
1479
|
-
dataTypeFragment.mergeImportsWith(dataArgsManifest.strictType, dataArgsManifest.decoder);
|
|
1480
|
-
}
|
|
1481
|
-
return fragmentFromTemplate("instructionParseFunction.njk", {
|
|
1482
|
-
dataTypeFragment,
|
|
1483
|
-
decoderFunction,
|
|
1484
|
-
hasAccounts,
|
|
1485
|
-
hasData,
|
|
1486
|
-
hasOptionalAccounts,
|
|
1487
|
-
instruction: instructionNode,
|
|
1488
|
-
instructionParseFunction: nameApi.instructionParseFunction(instructionNode.name),
|
|
1489
|
-
instructionParsedType: nameApi.instructionParsedType(instructionNode.name),
|
|
1490
|
-
minimumNumberOfAccounts,
|
|
1491
|
-
programAddressConstant
|
|
1492
|
-
}).mergeImportsWith(dataTypeFragment).addImports("generatedPrograms", [programAddressConstant]).addImports("solanaInstructions", ["type Instruction"]).addImports("solanaInstructions", hasAccounts ? ["type InstructionWithAccounts", "type AccountMeta"] : []).addImports("solanaInstructions", hasData ? ["type InstructionWithData"] : []).addImports("solanaCodecsCore", hasData ? ["type ReadonlyUint8Array"] : []);
|
|
1493
1682
|
}
|
|
1494
1683
|
|
|
1495
1684
|
// src/fragments/instructionType.ts
|
|
1496
1685
|
var import_nodes19 = require("@codama/nodes");
|
|
1497
|
-
var
|
|
1686
|
+
var import_renderers_core9 = require("@codama/renderers-core");
|
|
1687
|
+
var import_visitors_core23 = require("@codama/visitors-core");
|
|
1498
1688
|
function getInstructionTypeFragment(scope) {
|
|
1499
1689
|
const { instructionPath, nameApi, customInstructionData } = scope;
|
|
1500
|
-
const instructionNode = (0,
|
|
1501
|
-
const programNode = (0,
|
|
1690
|
+
const instructionNode = (0, import_visitors_core23.getLastNodeFromPath)(instructionPath);
|
|
1691
|
+
const programNode = (0, import_visitors_core23.findProgramNodeFromPath)(instructionPath);
|
|
1502
1692
|
const hasAccounts = instructionNode.accounts.length > 0;
|
|
1503
1693
|
const customData = customInstructionData.get(instructionNode.name);
|
|
1504
1694
|
const hasData = !!customData || instructionNode.arguments.length > 0;
|
|
@@ -1518,45 +1708,50 @@ function getInstructionTypeFragment(scope) {
|
|
|
1518
1708
|
const usesLegacyOptionalAccounts = instructionNode.optionalAccountStrategy === "omitted";
|
|
1519
1709
|
const accountMetasFragment = mergeFragments(
|
|
1520
1710
|
instructionNode.accounts.map(
|
|
1521
|
-
(account) => getInstructionAccountMetaFragment(account)
|
|
1711
|
+
(account) => (0, import_renderers_core9.mapFragmentContent)(getInstructionAccountMetaFragment(account), (c) => {
|
|
1522
1712
|
const typeParam = `TAccount${(0, import_nodes19.pascalCase)(account.name)}`;
|
|
1523
1713
|
const isLegacyOptional = account.isOptional && usesLegacyOptionalAccounts;
|
|
1524
|
-
const type = `${typeParam} extends string ? ${
|
|
1714
|
+
const type = `${typeParam} extends string ? ${c} : ${typeParam}`;
|
|
1525
1715
|
if (!isLegacyOptional) return type;
|
|
1526
1716
|
return `...(${typeParam} extends undefined ? [] : [${type}])`;
|
|
1527
1717
|
})
|
|
1528
1718
|
),
|
|
1529
|
-
(
|
|
1719
|
+
(c) => c.join(", ")
|
|
1720
|
+
);
|
|
1721
|
+
const fragment2 = (0, import_visitors_core23.pipe)(
|
|
1722
|
+
fragmentFromTemplate("instructionType.njk", {
|
|
1723
|
+
accountMetas: accountMetasFragment.content,
|
|
1724
|
+
accountTypeParams: accountTypeParamsFragment.content,
|
|
1725
|
+
dataType,
|
|
1726
|
+
hasAccounts,
|
|
1727
|
+
hasData,
|
|
1728
|
+
instruction: instructionNode,
|
|
1729
|
+
instructionType: nameApi.instructionType(instructionNode.name),
|
|
1730
|
+
programAddressConstant
|
|
1731
|
+
}),
|
|
1732
|
+
(f) => mergeFragmentImports(f, [accountTypeParamsFragment.imports, accountMetasFragment.imports]),
|
|
1733
|
+
(f) => addFragmentImports(f, "generatedPrograms", [programAddressConstant]),
|
|
1734
|
+
(f) => addFragmentImports(f, "solanaInstructions", [
|
|
1735
|
+
"type AccountMeta",
|
|
1736
|
+
"type Instruction",
|
|
1737
|
+
"type InstructionWithAccounts",
|
|
1738
|
+
...hasData ? ["type InstructionWithData"] : []
|
|
1739
|
+
])
|
|
1530
1740
|
);
|
|
1531
|
-
const fragment2 = fragmentFromTemplate("instructionType.njk", {
|
|
1532
|
-
accountMetas: accountMetasFragment.render,
|
|
1533
|
-
accountTypeParams: accountTypeParamsFragment.render,
|
|
1534
|
-
dataType,
|
|
1535
|
-
hasAccounts,
|
|
1536
|
-
hasData,
|
|
1537
|
-
instruction: instructionNode,
|
|
1538
|
-
instructionType: nameApi.instructionType(instructionNode.name),
|
|
1539
|
-
programAddressConstant
|
|
1540
|
-
}).mergeImportsWith(accountTypeParamsFragment, accountMetasFragment).addImports("generatedPrograms", [programAddressConstant]).addImports("solanaCodecsCore", hasData ? ["type ReadonlyUint8Array"] : []).addImports("solanaInstructions", [
|
|
1541
|
-
"type AccountMeta",
|
|
1542
|
-
"type Instruction",
|
|
1543
|
-
"type InstructionWithAccounts",
|
|
1544
|
-
...hasData ? ["type InstructionWithData"] : []
|
|
1545
|
-
]);
|
|
1546
1741
|
return fragment2;
|
|
1547
1742
|
}
|
|
1548
1743
|
|
|
1549
1744
|
// src/fragments/pdaFunction.ts
|
|
1550
1745
|
var import_nodes20 = require("@codama/nodes");
|
|
1551
|
-
var
|
|
1746
|
+
var import_visitors_core24 = require("@codama/visitors-core");
|
|
1552
1747
|
function getPdaFunctionFragment(scope) {
|
|
1553
1748
|
const { pdaPath, typeManifestVisitor, nameApi } = scope;
|
|
1554
|
-
const pdaNode = (0,
|
|
1555
|
-
const programNode = (0,
|
|
1749
|
+
const pdaNode = (0, import_visitors_core24.getLastNodeFromPath)(pdaPath);
|
|
1750
|
+
const programNode = (0, import_visitors_core24.findProgramNodeFromPath)(pdaPath);
|
|
1556
1751
|
const imports = new ImportMap();
|
|
1557
1752
|
const seeds = pdaNode.seeds.map((seed) => {
|
|
1558
1753
|
if ((0, import_nodes20.isNode)(seed, "variablePdaSeedNode")) {
|
|
1559
|
-
const seedManifest2 = (0,
|
|
1754
|
+
const seedManifest2 = (0, import_visitors_core24.visit)(seed.type, typeManifestVisitor);
|
|
1560
1755
|
imports.mergeWith(seedManifest2.looseType, seedManifest2.encoder);
|
|
1561
1756
|
return { ...seed, typeManifest: seedManifest2 };
|
|
1562
1757
|
}
|
|
@@ -1564,38 +1759,53 @@ function getPdaFunctionFragment(scope) {
|
|
|
1564
1759
|
imports.add("solanaAddresses", "getAddressEncoder");
|
|
1565
1760
|
return seed;
|
|
1566
1761
|
}
|
|
1567
|
-
const seedManifest = (0,
|
|
1762
|
+
const seedManifest = (0, import_visitors_core24.visit)(seed.type, typeManifestVisitor);
|
|
1568
1763
|
imports.mergeWith(seedManifest.encoder);
|
|
1569
|
-
const valueManifest = (0,
|
|
1764
|
+
const valueManifest = (0, import_visitors_core24.visit)(seed.value, typeManifestVisitor).value;
|
|
1570
1765
|
imports.mergeWith(valueManifest.imports);
|
|
1571
1766
|
return { ...seed, typeManifest: seedManifest, valueManifest };
|
|
1572
1767
|
});
|
|
1573
1768
|
const hasVariableSeeds = pdaNode.seeds.filter((0, import_nodes20.isNodeFilter)("variablePdaSeedNode")).length > 0;
|
|
1574
|
-
return
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1769
|
+
return (0, import_visitors_core24.pipe)(
|
|
1770
|
+
fragmentFromTemplate("pdaFunction.njk", {
|
|
1771
|
+
findPdaFunction: nameApi.pdaFindFunction(pdaNode.name),
|
|
1772
|
+
hasVariableSeeds,
|
|
1773
|
+
pdaDocs: pdaNode.docs,
|
|
1774
|
+
pdaSeedsType: nameApi.pdaSeedsType(pdaNode.name),
|
|
1775
|
+
programAddress: pdaNode.programId ?? programNode.publicKey,
|
|
1776
|
+
seeds
|
|
1777
|
+
}),
|
|
1778
|
+
(f) => mergeFragmentImports(f, [imports]),
|
|
1779
|
+
(f) => addFragmentImports(f, "solanaAddresses", [
|
|
1780
|
+
"type Address",
|
|
1781
|
+
"getProgramDerivedAddress",
|
|
1782
|
+
"type ProgramDerivedAddress"
|
|
1783
|
+
])
|
|
1784
|
+
);
|
|
1581
1785
|
}
|
|
1582
1786
|
|
|
1583
1787
|
// src/fragments/program.ts
|
|
1788
|
+
var import_visitors_core25 = require("@codama/visitors-core");
|
|
1584
1789
|
function getProgramFragment(scope) {
|
|
1585
1790
|
const { programNode, nameApi } = scope;
|
|
1586
|
-
return
|
|
1587
|
-
program
|
|
1588
|
-
|
|
1589
|
-
|
|
1791
|
+
return (0, import_visitors_core25.pipe)(
|
|
1792
|
+
fragmentFromTemplate("program.njk", {
|
|
1793
|
+
program: programNode,
|
|
1794
|
+
programAddressConstant: nameApi.programAddressConstant(programNode.name)
|
|
1795
|
+
}),
|
|
1796
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1797
|
+
);
|
|
1590
1798
|
}
|
|
1591
1799
|
|
|
1592
1800
|
// src/fragments/programAccounts.ts
|
|
1593
1801
|
var import_nodes21 = require("@codama/nodes");
|
|
1802
|
+
var import_renderers_core10 = require("@codama/renderers-core");
|
|
1803
|
+
var import_visitors_core26 = require("@codama/visitors-core");
|
|
1594
1804
|
function getProgramAccountsFragment(scope) {
|
|
1595
1805
|
if (scope.programNode.accounts.length === 0) return fragment("");
|
|
1596
1806
|
return mergeFragments(
|
|
1597
1807
|
[getProgramAccountsEnumFragment(scope), getProgramAccountsIdentifierFunctionFragment(scope)],
|
|
1598
|
-
(
|
|
1808
|
+
(c) => `${c.join("\n\n")}
|
|
1599
1809
|
`
|
|
1600
1810
|
);
|
|
1601
1811
|
}
|
|
@@ -1616,46 +1826,59 @@ function getProgramAccountsIdentifierFunctionFragment(scope) {
|
|
|
1616
1826
|
if (!hasAccountDiscriminators) return fragment("");
|
|
1617
1827
|
const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);
|
|
1618
1828
|
const programAccountsIdentifierFunction = nameApi.programAccountsIdentifierFunction(programNode.name);
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
(
|
|
1829
|
+
return (0, import_visitors_core26.pipe)(
|
|
1830
|
+
mergeFragments(
|
|
1831
|
+
accountsWithDiscriminators.map((account) => {
|
|
1832
|
+
const variant = nameApi.programAccountsEnumVariant(account.name);
|
|
1833
|
+
return getDiscriminatorConditionFragment({
|
|
1834
|
+
...scope,
|
|
1835
|
+
dataName: "data",
|
|
1836
|
+
discriminators: account.discriminators ?? [],
|
|
1837
|
+
ifTrue: `return ${programAccountsEnum}.${variant};`,
|
|
1838
|
+
struct: (0, import_nodes21.resolveNestedTypeNode)(account.data)
|
|
1839
|
+
});
|
|
1840
|
+
}),
|
|
1841
|
+
(c) => c.join("\n")
|
|
1842
|
+
),
|
|
1843
|
+
(f) => (0, import_renderers_core10.mapFragmentContent)(
|
|
1844
|
+
f,
|
|
1845
|
+
(discriminators) => `export function ${programAccountsIdentifierFunction}(account: { data: ReadonlyUint8Array } | ReadonlyUint8Array): ${programAccountsEnum} {
|
|
1634
1846
|
const data = 'data' in account ? account.data : account;
|
|
1635
1847
|
${discriminators}
|
|
1636
1848
|
throw new Error("The provided account could not be identified as a ${programNode.name} account.")
|
|
1637
1849
|
}`
|
|
1638
|
-
|
|
1850
|
+
),
|
|
1851
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["type ReadonlyUint8Array"])
|
|
1852
|
+
);
|
|
1639
1853
|
}
|
|
1640
1854
|
|
|
1641
1855
|
// src/fragments/programErrors.ts
|
|
1856
|
+
var import_visitors_core27 = require("@codama/visitors-core");
|
|
1642
1857
|
function getProgramErrorsFragment(scope) {
|
|
1643
1858
|
const { programNode, nameApi } = scope;
|
|
1644
1859
|
const programAddressConstant = nameApi.programAddressConstant(programNode.name);
|
|
1645
|
-
return
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1860
|
+
return (0, import_visitors_core27.pipe)(
|
|
1861
|
+
fragmentFromTemplate("programErrors.njk", {
|
|
1862
|
+
errors: programNode.errors,
|
|
1863
|
+
escapeProgramErrorMessage: (message) => message.replace(/`/g, "\\`"),
|
|
1864
|
+
getProgramErrorConstant: (name) => nameApi.programErrorConstantPrefix(programNode.name) + nameApi.programErrorConstant(name),
|
|
1865
|
+
programAddressConstant,
|
|
1866
|
+
programErrorMessagesMap: nameApi.programErrorMessagesMap(programNode.name),
|
|
1867
|
+
programErrorUnion: nameApi.programErrorUnion(programNode.name),
|
|
1868
|
+
programGetErrorMessageFunction: nameApi.programGetErrorMessageFunction(programNode.name),
|
|
1869
|
+
programIsErrorFunction: nameApi.programIsErrorFunction(programNode.name)
|
|
1870
|
+
}),
|
|
1871
|
+
(f) => addFragmentImports(f, "generatedPrograms", [programAddressConstant]),
|
|
1872
|
+
(f) => addFragmentImports(f, "solanaPrograms", ["isProgramError"]),
|
|
1873
|
+
(f) => addFragmentImports(f, "solanaErrors", ["type SolanaError", "type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM"]),
|
|
1874
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
1875
|
+
);
|
|
1655
1876
|
}
|
|
1656
1877
|
|
|
1657
1878
|
// src/fragments/programInstructions.ts
|
|
1658
1879
|
var import_nodes22 = require("@codama/nodes");
|
|
1880
|
+
var import_renderers_core11 = require("@codama/renderers-core");
|
|
1881
|
+
var import_visitors_core28 = require("@codama/visitors-core");
|
|
1659
1882
|
function getProgramInstructionsFragment(scope) {
|
|
1660
1883
|
if (scope.programNode.instructions.length === 0) return fragment("");
|
|
1661
1884
|
const allInstructions = (0, import_nodes22.getAllInstructionsWithSubs)(scope.programNode, {
|
|
@@ -1669,7 +1892,7 @@ function getProgramInstructionsFragment(scope) {
|
|
|
1669
1892
|
getProgramInstructionsIdentifierFunctionFragment(scopeWithInstructions),
|
|
1670
1893
|
getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions)
|
|
1671
1894
|
],
|
|
1672
|
-
(
|
|
1895
|
+
(c) => `${c.join("\n\n")}
|
|
1673
1896
|
`
|
|
1674
1897
|
);
|
|
1675
1898
|
}
|
|
@@ -1703,15 +1926,20 @@ function getProgramInstructionsIdentifierFunctionFragment(scope) {
|
|
|
1703
1926
|
struct: (0, import_nodes22.structTypeNodeFromInstructionArgumentNodes)(instruction.arguments)
|
|
1704
1927
|
});
|
|
1705
1928
|
}),
|
|
1706
|
-
(
|
|
1929
|
+
(c) => c.join("\n")
|
|
1707
1930
|
);
|
|
1708
|
-
return
|
|
1709
|
-
|
|
1931
|
+
return (0, import_visitors_core28.pipe)(
|
|
1932
|
+
discriminatorsFragment,
|
|
1933
|
+
(f) => (0, import_renderers_core11.mapFragmentContent)(
|
|
1934
|
+
f,
|
|
1935
|
+
(discriminators) => `export function ${programInstructionsIdentifierFunction}(instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array): ${programInstructionsEnum} {
|
|
1710
1936
|
const data = 'data' in instruction ? instruction.data : instruction;
|
|
1711
1937
|
${discriminators}
|
|
1712
1938
|
throw new Error("The provided instruction could not be identified as a ${programNode.name} instruction.")
|
|
1713
1939
|
}`
|
|
1714
|
-
|
|
1940
|
+
),
|
|
1941
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["type ReadonlyUint8Array"])
|
|
1942
|
+
);
|
|
1715
1943
|
}
|
|
1716
1944
|
function getProgramInstructionsParsedUnionTypeFragment(scope) {
|
|
1717
1945
|
const { programNode, allInstructions, nameApi } = scope;
|
|
@@ -1721,128 +1949,107 @@ function getProgramInstructionsParsedUnionTypeFragment(scope) {
|
|
|
1721
1949
|
const typeVariants = allInstructions.map((instruction) => {
|
|
1722
1950
|
const instructionEnumVariant = nameApi.programInstructionsEnumVariant(instruction.name);
|
|
1723
1951
|
const parsedInstructionType = nameApi.instructionParsedType(instruction.name);
|
|
1724
|
-
return
|
|
1725
|
-
|
|
1726
|
-
|
|
1952
|
+
return (0, import_visitors_core28.pipe)(
|
|
1953
|
+
fragment(
|
|
1954
|
+
`| { instructionType: ${programInstructionsEnum}.${instructionEnumVariant} } & ${parsedInstructionType}<TProgram>`
|
|
1955
|
+
),
|
|
1956
|
+
(f) => addFragmentImports(f, "generatedInstructions", [`type ${parsedInstructionType}`])
|
|
1957
|
+
);
|
|
1727
1958
|
});
|
|
1728
1959
|
return mergeFragments(
|
|
1729
1960
|
[
|
|
1730
1961
|
fragment(`export type ${programInstructionsType}<TProgram extends string = '${programAddress}'> =`),
|
|
1731
1962
|
...typeVariants
|
|
1732
1963
|
],
|
|
1733
|
-
(
|
|
1964
|
+
(c) => c.join("\n")
|
|
1734
1965
|
);
|
|
1735
1966
|
}
|
|
1736
1967
|
|
|
1737
1968
|
// src/fragments/typeDiscriminatedUnionHelpers.ts
|
|
1738
1969
|
var import_nodes23 = require("@codama/nodes");
|
|
1970
|
+
var import_visitors_core29 = require("@codama/visitors-core");
|
|
1739
1971
|
function getTypeDiscriminatedUnionHelpersFragment(scope) {
|
|
1740
1972
|
const { name, typeNode, nameApi } = scope;
|
|
1741
1973
|
const isDiscriminatedUnion = (0, import_nodes23.isNode)(typeNode, "enumTypeNode") && (0, import_nodes23.isDataEnum)(typeNode);
|
|
1742
1974
|
if (!isDiscriminatedUnion) {
|
|
1743
1975
|
return fragment("");
|
|
1744
1976
|
}
|
|
1745
|
-
return
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
"
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
function typeManifest() {
|
|
1761
|
-
return {
|
|
1762
|
-
decoder: fragment(""),
|
|
1763
|
-
encoder: fragment(""),
|
|
1764
|
-
isEnum: false,
|
|
1765
|
-
looseType: fragment(""),
|
|
1766
|
-
strictType: fragment(""),
|
|
1767
|
-
value: fragment("")
|
|
1768
|
-
};
|
|
1769
|
-
}
|
|
1770
|
-
function mergeManifests(manifests, options = {}) {
|
|
1771
|
-
const { mergeTypes, mergeCodecs, mergeValues } = options;
|
|
1772
|
-
const merge = (fragmentFn, mergeFn) => mergeFn ? mergeFragments(manifests.map(fragmentFn), mergeFn) : fragment("");
|
|
1773
|
-
return {
|
|
1774
|
-
decoder: merge((m) => m.decoder, mergeCodecs),
|
|
1775
|
-
encoder: merge((m) => m.encoder, mergeCodecs),
|
|
1776
|
-
isEnum: false,
|
|
1777
|
-
looseType: merge((m) => m.looseType, mergeTypes),
|
|
1778
|
-
strictType: merge((m) => m.strictType, mergeTypes),
|
|
1779
|
-
value: merge((m) => m.value, mergeValues)
|
|
1780
|
-
};
|
|
1977
|
+
return (0, import_visitors_core29.pipe)(
|
|
1978
|
+
fragmentFromTemplate("typeDiscriminatedUnionHelpers.njk", {
|
|
1979
|
+
discriminatedUnionDiscriminator: nameApi.discriminatedUnionDiscriminator(name),
|
|
1980
|
+
discriminatedUnionFunction: nameApi.discriminatedUnionFunction(name),
|
|
1981
|
+
getVariant: (variant) => nameApi.discriminatedUnionVariant(variant),
|
|
1982
|
+
isDiscriminatedUnionFunction: nameApi.isDiscriminatedUnionFunction(name),
|
|
1983
|
+
looseName: nameApi.dataArgsType(name),
|
|
1984
|
+
strictName: nameApi.dataType(name),
|
|
1985
|
+
typeNode
|
|
1986
|
+
}),
|
|
1987
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", [
|
|
1988
|
+
"type GetDiscriminatedUnionVariantContent",
|
|
1989
|
+
"type GetDiscriminatedUnionVariant"
|
|
1990
|
+
])
|
|
1991
|
+
);
|
|
1781
1992
|
}
|
|
1782
1993
|
|
|
1783
|
-
// src/getRenderMapVisitor.ts
|
|
1784
|
-
var import_node_path3 = require("path");
|
|
1785
|
-
var import_errors2 = require("@codama/errors");
|
|
1786
|
-
var import_nodes26 = require("@codama/nodes");
|
|
1787
|
-
var import_renderers_core = require("@codama/renderers-core");
|
|
1788
|
-
var import_visitors_core21 = require("@codama/visitors-core");
|
|
1789
|
-
|
|
1790
1994
|
// src/getTypeManifestVisitor.ts
|
|
1791
1995
|
var import_nodes24 = require("@codama/nodes");
|
|
1792
|
-
var
|
|
1996
|
+
var import_renderers_core12 = require("@codama/renderers-core");
|
|
1997
|
+
var import_visitors_core30 = require("@codama/visitors-core");
|
|
1793
1998
|
function getTypeManifestVisitor(input) {
|
|
1794
1999
|
const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;
|
|
1795
|
-
const stack = input.stack ?? new
|
|
2000
|
+
const stack = input.stack ?? new import_visitors_core30.NodeStack();
|
|
1796
2001
|
let parentName = null;
|
|
1797
|
-
return (0,
|
|
1798
|
-
(0,
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
...import_nodes24.REGISTERED_TYPE_NODE_KINDS,
|
|
1810
|
-
...import_nodes24.REGISTERED_VALUE_NODE_KINDS,
|
|
1811
|
-
"definedTypeLinkNode",
|
|
1812
|
-
"definedTypeNode",
|
|
1813
|
-
"accountNode",
|
|
1814
|
-
"instructionNode"
|
|
1815
|
-
]
|
|
1816
|
-
}
|
|
1817
|
-
),
|
|
1818
|
-
(visitor) => (0, import_visitors_core20.extendVisitor)(visitor, {
|
|
2002
|
+
return (0, import_visitors_core30.pipe)(
|
|
2003
|
+
(0, import_visitors_core30.staticVisitor)(() => typeManifest(), {
|
|
2004
|
+
keys: [
|
|
2005
|
+
...import_nodes24.REGISTERED_TYPE_NODE_KINDS,
|
|
2006
|
+
...import_nodes24.REGISTERED_VALUE_NODE_KINDS,
|
|
2007
|
+
"definedTypeLinkNode",
|
|
2008
|
+
"definedTypeNode",
|
|
2009
|
+
"accountNode",
|
|
2010
|
+
"instructionNode"
|
|
2011
|
+
]
|
|
2012
|
+
}),
|
|
2013
|
+
(visitor) => (0, import_visitors_core30.extendVisitor)(visitor, {
|
|
1819
2014
|
visitAccount(account, { self }) {
|
|
1820
2015
|
parentName = {
|
|
1821
2016
|
loose: nameApi.dataArgsType(account.name),
|
|
1822
2017
|
strict: nameApi.dataType(account.name)
|
|
1823
2018
|
};
|
|
1824
2019
|
const link = customAccountData.get(account.name)?.linkNode;
|
|
1825
|
-
const manifest = link ? (0,
|
|
2020
|
+
const manifest = link ? (0, import_visitors_core30.visit)(link, self) : (0, import_visitors_core30.visit)(account.data, self);
|
|
1826
2021
|
parentName = null;
|
|
1827
2022
|
return manifest;
|
|
1828
2023
|
},
|
|
1829
2024
|
visitAmountType(amountType, { self }) {
|
|
1830
|
-
return (0,
|
|
2025
|
+
return (0, import_visitors_core30.visit)(amountType.number, self);
|
|
1831
2026
|
},
|
|
1832
2027
|
visitArrayType(arrayType, { self }) {
|
|
1833
|
-
const childManifest = (0,
|
|
1834
|
-
childManifest.looseType.mapRender((r) => `Array<${r}>`);
|
|
1835
|
-
childManifest.strictType.mapRender((r) => `Array<${r}>`);
|
|
2028
|
+
const childManifest = (0, import_visitors_core30.visit)(arrayType.item, self);
|
|
1836
2029
|
const sizeManifest = getArrayLikeSizeOption(arrayType.count, self);
|
|
1837
|
-
const encoderOptions = sizeManifest.encoder.
|
|
1838
|
-
const decoderOptions = sizeManifest.decoder.
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
2030
|
+
const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : "";
|
|
2031
|
+
const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : "";
|
|
2032
|
+
return typeManifest({
|
|
2033
|
+
...childManifest,
|
|
2034
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2035
|
+
childManifest.decoder,
|
|
2036
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getArrayDecoder(${c + decoderOptions})`),
|
|
2037
|
+
(f) => mergeFragmentImports(f, [sizeManifest.decoder.imports]),
|
|
2038
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getArrayDecoder"])
|
|
2039
|
+
),
|
|
2040
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2041
|
+
childManifest.encoder,
|
|
2042
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getArrayEncoder(${c + encoderOptions})`),
|
|
2043
|
+
(f) => mergeFragmentImports(f, [sizeManifest.encoder.imports]),
|
|
2044
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getArrayEncoder"])
|
|
2045
|
+
),
|
|
2046
|
+
looseType: (0, import_renderers_core12.mapFragmentContent)(childManifest.looseType, (c) => `Array<${c}>`),
|
|
2047
|
+
strictType: (0, import_renderers_core12.mapFragmentContent)(childManifest.strictType, (c) => `Array<${c}>`)
|
|
2048
|
+
});
|
|
1842
2049
|
},
|
|
1843
2050
|
visitArrayValue(node, { self }) {
|
|
1844
|
-
return
|
|
1845
|
-
node.items.map((v) => (0,
|
|
2051
|
+
return mergeTypeManifests(
|
|
2052
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
1846
2053
|
{ mergeValues: (renders) => `[${renders.join(", ")}]` }
|
|
1847
2054
|
);
|
|
1848
2055
|
},
|
|
@@ -1853,75 +2060,74 @@ function getTypeManifestVisitor(input) {
|
|
|
1853
2060
|
let sizeDecoder = "";
|
|
1854
2061
|
const resolvedSize = (0, import_nodes24.resolveNestedTypeNode)(booleanType.size);
|
|
1855
2062
|
if (resolvedSize.format !== "u8" || resolvedSize.endian !== "le") {
|
|
1856
|
-
const size = (0,
|
|
2063
|
+
const size = (0, import_visitors_core30.visit)(booleanType.size, self);
|
|
1857
2064
|
encoderImports.mergeWith(size.encoder);
|
|
1858
2065
|
decoderImports.mergeWith(size.decoder);
|
|
1859
|
-
sizeEncoder = `{ size: ${size.encoder.
|
|
1860
|
-
sizeDecoder = `{ size: ${size.decoder.
|
|
2066
|
+
sizeEncoder = `{ size: ${size.encoder.content} }`;
|
|
2067
|
+
sizeDecoder = `{ size: ${size.decoder.content} }`;
|
|
1861
2068
|
}
|
|
1862
|
-
return {
|
|
1863
|
-
decoder:
|
|
1864
|
-
|
|
1865
|
-
|
|
2069
|
+
return typeManifest({
|
|
2070
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2071
|
+
fragment(`getBooleanDecoder(${sizeDecoder})`),
|
|
2072
|
+
(f) => mergeFragmentImports(f, [decoderImports])
|
|
2073
|
+
),
|
|
2074
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2075
|
+
fragment(`getBooleanEncoder(${sizeEncoder})`),
|
|
2076
|
+
(f) => mergeFragmentImports(f, [encoderImports])
|
|
2077
|
+
),
|
|
1866
2078
|
looseType: fragment("boolean"),
|
|
1867
|
-
strictType: fragment("boolean")
|
|
1868
|
-
|
|
1869
|
-
};
|
|
2079
|
+
strictType: fragment("boolean")
|
|
2080
|
+
});
|
|
1870
2081
|
},
|
|
1871
2082
|
visitBooleanValue(node) {
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
2083
|
+
return typeManifest({
|
|
2084
|
+
value: fragment(JSON.stringify(node.boolean))
|
|
2085
|
+
});
|
|
1875
2086
|
},
|
|
1876
2087
|
visitBytesType() {
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
"
|
|
1885
|
-
),
|
|
1886
|
-
isEnum: false,
|
|
1887
|
-
looseType: fragment("ReadonlyUint8Array").addImports(
|
|
1888
|
-
"solanaCodecsCore",
|
|
1889
|
-
"type ReadonlyUint8Array"
|
|
2088
|
+
const readonlyUint8Array = (0, import_visitors_core30.pipe)(
|
|
2089
|
+
fragment("ReadonlyUint8Array"),
|
|
2090
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["type ReadonlyUint8Array"])
|
|
2091
|
+
);
|
|
2092
|
+
return typeManifest({
|
|
2093
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2094
|
+
fragment(`getBytesDecoder()`),
|
|
2095
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getBytesDecoder"])
|
|
1890
2096
|
),
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
"
|
|
2097
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2098
|
+
fragment(`getBytesEncoder()`),
|
|
2099
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getBytesEncoder"])
|
|
1894
2100
|
),
|
|
1895
|
-
|
|
1896
|
-
|
|
2101
|
+
looseType: readonlyUint8Array,
|
|
2102
|
+
strictType: readonlyUint8Array
|
|
2103
|
+
});
|
|
1897
2104
|
},
|
|
1898
2105
|
visitBytesValue(node) {
|
|
1899
|
-
const manifest = typeManifest();
|
|
1900
2106
|
const bytes = getBytesFromBytesValueNode(node);
|
|
1901
|
-
|
|
1902
|
-
|
|
2107
|
+
return typeManifest({
|
|
2108
|
+
value: fragment(`new Uint8Array([${Array.from(bytes).join(", ")}])`)
|
|
2109
|
+
});
|
|
1903
2110
|
},
|
|
1904
2111
|
visitConstantValue(node, { self }) {
|
|
1905
2112
|
if ((0, import_nodes24.isNode)(node.type, "bytesTypeNode") && (0, import_nodes24.isNode)(node.value, "bytesValueNode")) {
|
|
1906
|
-
return (0,
|
|
2113
|
+
return (0, import_visitors_core30.visit)(node.value, self);
|
|
1907
2114
|
}
|
|
1908
|
-
return {
|
|
1909
|
-
...typeManifest(),
|
|
2115
|
+
return typeManifest({
|
|
1910
2116
|
value: mergeFragments(
|
|
1911
|
-
[(0,
|
|
2117
|
+
[(0, import_visitors_core30.visit)(node.type, self).encoder, (0, import_visitors_core30.visit)(node.value, self).value],
|
|
1912
2118
|
([encoderFunction, value]) => `${encoderFunction}.encode(${value})`
|
|
1913
2119
|
)
|
|
1914
|
-
};
|
|
2120
|
+
});
|
|
1915
2121
|
},
|
|
1916
2122
|
visitDateTimeType(dateTimeType, { self }) {
|
|
1917
|
-
return (0,
|
|
2123
|
+
return (0, import_visitors_core30.visit)(dateTimeType.number, self);
|
|
1918
2124
|
},
|
|
1919
2125
|
visitDefinedType(definedType, { self }) {
|
|
1920
2126
|
parentName = {
|
|
1921
2127
|
loose: nameApi.dataArgsType(definedType.name),
|
|
1922
2128
|
strict: nameApi.dataType(definedType.name)
|
|
1923
2129
|
};
|
|
1924
|
-
const manifest = (0,
|
|
2130
|
+
const manifest = (0, import_visitors_core30.visit)(definedType.type, self);
|
|
1925
2131
|
parentName = null;
|
|
1926
2132
|
return manifest;
|
|
1927
2133
|
},
|
|
@@ -1931,33 +2137,41 @@ function getTypeManifestVisitor(input) {
|
|
|
1931
2137
|
const encoderFunction = nameApi.encoderFunction(node.name);
|
|
1932
2138
|
const decoderFunction = nameApi.decoderFunction(node.name);
|
|
1933
2139
|
const importFrom = getImportFrom(node);
|
|
1934
|
-
return {
|
|
1935
|
-
decoder:
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
2140
|
+
return typeManifest({
|
|
2141
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2142
|
+
fragment(`${decoderFunction}()`),
|
|
2143
|
+
(f) => addFragmentImports(f, importFrom, [decoderFunction])
|
|
2144
|
+
),
|
|
2145
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2146
|
+
fragment(`${encoderFunction}()`),
|
|
2147
|
+
(f) => addFragmentImports(f, importFrom, [encoderFunction])
|
|
2148
|
+
),
|
|
2149
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2150
|
+
fragment(looseName),
|
|
2151
|
+
(f) => addFragmentImports(f, importFrom, [`type ${looseName}`])
|
|
2152
|
+
),
|
|
2153
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2154
|
+
fragment(strictName),
|
|
2155
|
+
(f) => addFragmentImports(f, importFrom, [`type ${strictName}`])
|
|
2156
|
+
)
|
|
2157
|
+
});
|
|
1942
2158
|
},
|
|
1943
2159
|
visitEnumEmptyVariantType(enumEmptyVariantType) {
|
|
1944
2160
|
const discriminator = nameApi.discriminatedUnionDiscriminator((0, import_nodes24.camelCase)(parentName?.strict ?? ""));
|
|
1945
2161
|
const name = nameApi.discriminatedUnionVariant(enumEmptyVariantType.name);
|
|
1946
2162
|
const kindAttribute = `${discriminator}: "${name}"`;
|
|
1947
|
-
return {
|
|
1948
|
-
decoder:
|
|
1949
|
-
|
|
1950
|
-
"getUnitDecoder"
|
|
2163
|
+
return typeManifest({
|
|
2164
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2165
|
+
fragment(`['${name}', getUnitDecoder()]`),
|
|
2166
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getUnitDecoder"])
|
|
1951
2167
|
),
|
|
1952
|
-
encoder:
|
|
1953
|
-
|
|
1954
|
-
"getUnitEncoder"
|
|
2168
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2169
|
+
fragment(`['${name}', getUnitEncoder()]`),
|
|
2170
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getUnitEncoder"])
|
|
1955
2171
|
),
|
|
1956
|
-
isEnum: false,
|
|
1957
2172
|
looseType: fragment(`{ ${kindAttribute} }`),
|
|
1958
|
-
strictType: fragment(`{ ${kindAttribute} }`)
|
|
1959
|
-
|
|
1960
|
-
};
|
|
2173
|
+
strictType: fragment(`{ ${kindAttribute} }`)
|
|
2174
|
+
});
|
|
1961
2175
|
},
|
|
1962
2176
|
visitEnumStructVariantType(enumStructVariantType, { self }) {
|
|
1963
2177
|
const currentParentName = parentName;
|
|
@@ -1967,13 +2181,21 @@ function getTypeManifestVisitor(input) {
|
|
|
1967
2181
|
const name = nameApi.discriminatedUnionVariant(enumStructVariantType.name);
|
|
1968
2182
|
const kindAttribute = `${discriminator}: "${name}"`;
|
|
1969
2183
|
parentName = null;
|
|
1970
|
-
const structManifest = (0,
|
|
2184
|
+
const structManifest = (0, import_visitors_core30.visit)(enumStructVariantType.struct, self);
|
|
1971
2185
|
parentName = currentParentName;
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
2186
|
+
return typeManifest({
|
|
2187
|
+
...structManifest,
|
|
2188
|
+
decoder: (0, import_visitors_core30.pipe)(structManifest.decoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)),
|
|
2189
|
+
encoder: (0, import_visitors_core30.pipe)(structManifest.encoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)),
|
|
2190
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2191
|
+
structManifest.looseType,
|
|
2192
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
|
|
2193
|
+
),
|
|
2194
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2195
|
+
structManifest.strictType,
|
|
2196
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
|
|
2197
|
+
)
|
|
2198
|
+
});
|
|
1977
2199
|
},
|
|
1978
2200
|
visitEnumTupleVariantType(enumTupleVariantType, { self }) {
|
|
1979
2201
|
const currentParentName = parentName;
|
|
@@ -1989,13 +2211,21 @@ function getTypeManifestVisitor(input) {
|
|
|
1989
2211
|
})
|
|
1990
2212
|
]);
|
|
1991
2213
|
parentName = null;
|
|
1992
|
-
const structManifest = (0,
|
|
2214
|
+
const structManifest = (0, import_visitors_core30.visit)(struct, self);
|
|
1993
2215
|
parentName = currentParentName;
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
2216
|
+
return typeManifest({
|
|
2217
|
+
...structManifest,
|
|
2218
|
+
decoder: (0, import_visitors_core30.pipe)(structManifest.decoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)),
|
|
2219
|
+
encoder: (0, import_visitors_core30.pipe)(structManifest.encoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)),
|
|
2220
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2221
|
+
structManifest.looseType,
|
|
2222
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
|
|
2223
|
+
),
|
|
2224
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2225
|
+
structManifest.strictType,
|
|
2226
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
|
|
2227
|
+
)
|
|
2228
|
+
});
|
|
1999
2229
|
},
|
|
2000
2230
|
visitEnumType(enumType, { self }) {
|
|
2001
2231
|
const currentParentName = parentName;
|
|
@@ -2005,11 +2235,11 @@ function getTypeManifestVisitor(input) {
|
|
|
2005
2235
|
const decoderOptions = [];
|
|
2006
2236
|
const enumSize = (0, import_nodes24.resolveNestedTypeNode)(enumType.size);
|
|
2007
2237
|
if (enumSize.format !== "u8" || enumSize.endian !== "le") {
|
|
2008
|
-
const sizeManifest = (0,
|
|
2238
|
+
const sizeManifest = (0, import_visitors_core30.visit)(enumType.size, self);
|
|
2009
2239
|
encoderImports.mergeWith(sizeManifest.encoder);
|
|
2010
2240
|
decoderImports.mergeWith(sizeManifest.decoder);
|
|
2011
|
-
encoderOptions.push(`size: ${sizeManifest.encoder.
|
|
2012
|
-
decoderOptions.push(`size: ${sizeManifest.decoder.
|
|
2241
|
+
encoderOptions.push(`size: ${sizeManifest.encoder.content}`);
|
|
2242
|
+
decoderOptions.push(`size: ${sizeManifest.decoder.content}`);
|
|
2013
2243
|
}
|
|
2014
2244
|
const discriminator = nameApi.discriminatedUnionDiscriminator(
|
|
2015
2245
|
(0, import_nodes24.camelCase)(currentParentName?.strict ?? "")
|
|
@@ -2027,31 +2257,50 @@ function getTypeManifestVisitor(input) {
|
|
|
2027
2257
|
);
|
|
2028
2258
|
}
|
|
2029
2259
|
const variantNames = enumType.variants.map(({ name }) => nameApi.enumVariant(name));
|
|
2030
|
-
return {
|
|
2031
|
-
decoder:
|
|
2032
|
-
`getEnumDecoder(${currentParentName.strict + decoderOptionsAsString})
|
|
2033
|
-
|
|
2260
|
+
return typeManifest({
|
|
2261
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2262
|
+
fragment(`getEnumDecoder(${currentParentName.strict + decoderOptionsAsString})`),
|
|
2263
|
+
(f) => mergeFragmentImports(f, [decoderImports]),
|
|
2264
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getEnumDecoder"])
|
|
2034
2265
|
),
|
|
2035
|
-
encoder:
|
|
2036
|
-
`getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})
|
|
2037
|
-
|
|
2266
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2267
|
+
fragment(`getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})`),
|
|
2268
|
+
(f) => mergeFragmentImports(f, [encoderImports]),
|
|
2269
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getEnumEncoder"])
|
|
2038
2270
|
),
|
|
2039
2271
|
isEnum: true,
|
|
2040
2272
|
looseType: fragment(`{ ${variantNames.join(", ")} }`),
|
|
2041
|
-
strictType: fragment(`{ ${variantNames.join(", ")} }`)
|
|
2042
|
-
|
|
2043
|
-
};
|
|
2273
|
+
strictType: fragment(`{ ${variantNames.join(", ")} }`)
|
|
2274
|
+
});
|
|
2044
2275
|
}
|
|
2045
|
-
const mergedManifest =
|
|
2046
|
-
enumType.variants.map((variant) => (0,
|
|
2276
|
+
const mergedManifest = mergeTypeManifests(
|
|
2277
|
+
enumType.variants.map((variant) => (0, import_visitors_core30.visit)(variant, self)),
|
|
2047
2278
|
{
|
|
2048
2279
|
mergeCodecs: (renders) => renders.join(", "),
|
|
2049
2280
|
mergeTypes: (renders) => renders.join(" | ")
|
|
2050
2281
|
}
|
|
2051
2282
|
);
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2283
|
+
return typeManifest({
|
|
2284
|
+
...mergedManifest,
|
|
2285
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2286
|
+
mergedManifest.decoder,
|
|
2287
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(
|
|
2288
|
+
f,
|
|
2289
|
+
(c) => `getDiscriminatedUnionDecoder([${c}]${decoderOptionsAsString})`
|
|
2290
|
+
),
|
|
2291
|
+
(f) => mergeFragmentImports(f, [decoderImports]),
|
|
2292
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getDiscriminatedUnionDecoder"])
|
|
2293
|
+
),
|
|
2294
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2295
|
+
mergedManifest.encoder,
|
|
2296
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(
|
|
2297
|
+
f,
|
|
2298
|
+
(c) => `getDiscriminatedUnionEncoder([${c}]${encoderOptionsAsString})`
|
|
2299
|
+
),
|
|
2300
|
+
(f) => mergeFragmentImports(f, [encoderImports]),
|
|
2301
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getDiscriminatedUnionEncoder"])
|
|
2302
|
+
)
|
|
2303
|
+
});
|
|
2055
2304
|
},
|
|
2056
2305
|
visitEnumValue(node, { self }) {
|
|
2057
2306
|
const manifest = typeManifest();
|
|
@@ -2062,40 +2311,108 @@ function getTypeManifestVisitor(input) {
|
|
|
2062
2311
|
const isScalar = enumNode && (0, import_nodes24.isNode)(enumNode, "enumTypeNode") ? (0, import_nodes24.isScalarEnum)(enumNode) : !nonScalarEnums.includes(node.enum.name);
|
|
2063
2312
|
if (!node.value && isScalar) {
|
|
2064
2313
|
const variantName2 = nameApi.enumVariant(node.variant);
|
|
2065
|
-
|
|
2066
|
-
|
|
2314
|
+
return typeManifest({
|
|
2315
|
+
...manifest,
|
|
2316
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2317
|
+
manifest.value,
|
|
2318
|
+
(f) => (0, import_renderers_core12.setFragmentContent)(f, `${enumName}.${variantName2}`),
|
|
2319
|
+
(f) => addFragmentImports(f, importFrom, [enumName])
|
|
2320
|
+
)
|
|
2321
|
+
});
|
|
2067
2322
|
}
|
|
2068
2323
|
const variantName = nameApi.discriminatedUnionVariant(node.variant);
|
|
2069
2324
|
if (!node.value) {
|
|
2070
|
-
|
|
2071
|
-
|
|
2325
|
+
return typeManifest({
|
|
2326
|
+
...manifest,
|
|
2327
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2328
|
+
manifest.value,
|
|
2329
|
+
(f) => (0, import_renderers_core12.setFragmentContent)(f, `${enumFunction}('${variantName}')`),
|
|
2330
|
+
(f) => addFragmentImports(f, importFrom, [enumFunction])
|
|
2331
|
+
)
|
|
2332
|
+
});
|
|
2072
2333
|
}
|
|
2073
|
-
|
|
2074
|
-
|
|
2334
|
+
return typeManifest({
|
|
2335
|
+
...manifest,
|
|
2336
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2337
|
+
(0, import_visitors_core30.visit)(node.value, self).value,
|
|
2338
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `${enumFunction}('${variantName}', ${c})`),
|
|
2339
|
+
(f) => addFragmentImports(f, importFrom, [enumFunction])
|
|
2340
|
+
)
|
|
2341
|
+
});
|
|
2075
2342
|
},
|
|
2076
2343
|
visitFixedSizeType(node, { self }) {
|
|
2077
|
-
const manifest = (0,
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2344
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2345
|
+
return typeManifest({
|
|
2346
|
+
...manifest,
|
|
2347
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2348
|
+
manifest.decoder,
|
|
2349
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `fixDecoderSize(${c}, ${node.size})`),
|
|
2350
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["fixDecoderSize"])
|
|
2351
|
+
),
|
|
2352
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2353
|
+
manifest.encoder,
|
|
2354
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `fixEncoderSize(${c}, ${node.size})`),
|
|
2355
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["fixEncoderSize"])
|
|
2356
|
+
)
|
|
2357
|
+
});
|
|
2081
2358
|
},
|
|
2082
2359
|
visitHiddenPrefixType(node, { self }) {
|
|
2083
|
-
const manifest = (0,
|
|
2084
|
-
const prefixes = node.prefix.map((c) => (0,
|
|
2085
|
-
const prefixEncoders =
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2360
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2361
|
+
const prefixes = node.prefix.map((c) => (0, import_visitors_core30.visit)(c, self).value);
|
|
2362
|
+
const prefixEncoders = (0, import_visitors_core30.pipe)(
|
|
2363
|
+
mergeFragments(prefixes, (contents) => contents.map((c) => `getConstantEncoder(${c})`).join(", ")),
|
|
2364
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["getConstantEncoder"])
|
|
2365
|
+
);
|
|
2366
|
+
const prefixDecoders = (0, import_visitors_core30.pipe)(
|
|
2367
|
+
mergeFragments(prefixes, (contents) => contents.map((c) => `getConstantDecoder(${c})`).join(", ")),
|
|
2368
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["getConstantDecoder"])
|
|
2369
|
+
);
|
|
2370
|
+
return typeManifest({
|
|
2371
|
+
...manifest,
|
|
2372
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2373
|
+
mergeFragments(
|
|
2374
|
+
[manifest.decoder, prefixDecoders],
|
|
2375
|
+
([child, prefixes2]) => `getHiddenPrefixDecoder(${child}, [${prefixes2}])`
|
|
2376
|
+
),
|
|
2377
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getHiddenPrefixDecoder"])
|
|
2378
|
+
),
|
|
2379
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2380
|
+
mergeFragments(
|
|
2381
|
+
[manifest.encoder, prefixEncoders],
|
|
2382
|
+
([child, prefixes2]) => `getHiddenPrefixEncoder(${child}, [${prefixes2}])`
|
|
2383
|
+
),
|
|
2384
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getHiddenPrefixEncoder"])
|
|
2385
|
+
)
|
|
2386
|
+
});
|
|
2090
2387
|
},
|
|
2091
2388
|
visitHiddenSuffixType(node, { self }) {
|
|
2092
|
-
const manifest = (0,
|
|
2093
|
-
const suffixes = node.suffix.map((c) => (0,
|
|
2094
|
-
const suffixEncoders =
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2389
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2390
|
+
const suffixes = node.suffix.map((c) => (0, import_visitors_core30.visit)(c, self).value);
|
|
2391
|
+
const suffixEncoders = (0, import_visitors_core30.pipe)(
|
|
2392
|
+
mergeFragments(suffixes, (contents) => contents.map((c) => `getConstantEncoder(${c})`).join(", ")),
|
|
2393
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["getConstantEncoder"])
|
|
2394
|
+
);
|
|
2395
|
+
const suffixDecoders = (0, import_visitors_core30.pipe)(
|
|
2396
|
+
mergeFragments(suffixes, (contents) => contents.map((c) => `getConstantDecoder(${c})`).join(", ")),
|
|
2397
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["getConstantDecoder"])
|
|
2398
|
+
);
|
|
2399
|
+
return typeManifest({
|
|
2400
|
+
...manifest,
|
|
2401
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2402
|
+
mergeFragments(
|
|
2403
|
+
[manifest.decoder, suffixDecoders],
|
|
2404
|
+
([child, suffixes2]) => `getHiddenSuffixDecoder(${child}, [${suffixes2}])`
|
|
2405
|
+
),
|
|
2406
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getHiddenSuffixDecoder"])
|
|
2407
|
+
),
|
|
2408
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2409
|
+
mergeFragments(
|
|
2410
|
+
[manifest.encoder, suffixEncoders],
|
|
2411
|
+
([child, suffixes2]) => `getHiddenSuffixEncoder(${child}, [${suffixes2}])`
|
|
2412
|
+
),
|
|
2413
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getHiddenSuffixEncoder"])
|
|
2414
|
+
)
|
|
2415
|
+
});
|
|
2099
2416
|
},
|
|
2100
2417
|
visitInstruction(instruction, { self }) {
|
|
2101
2418
|
const instructionDataName = nameApi.instructionDataType(instruction.name);
|
|
@@ -2105,39 +2422,49 @@ function getTypeManifestVisitor(input) {
|
|
|
2105
2422
|
};
|
|
2106
2423
|
const link = customInstructionData.get(instruction.name)?.linkNode;
|
|
2107
2424
|
const struct = (0, import_nodes24.structTypeNodeFromInstructionArgumentNodes)(instruction.arguments);
|
|
2108
|
-
const manifest = link ? (0,
|
|
2425
|
+
const manifest = link ? (0, import_visitors_core30.visit)(link, self) : (0, import_visitors_core30.visit)(struct, self);
|
|
2109
2426
|
parentName = null;
|
|
2110
2427
|
return manifest;
|
|
2111
2428
|
},
|
|
2112
2429
|
visitMapEntryValue(node, { self }) {
|
|
2113
|
-
return
|
|
2430
|
+
return mergeTypeManifests([(0, import_visitors_core30.visit)(node.key, self), (0, import_visitors_core30.visit)(node.value, self)], {
|
|
2114
2431
|
mergeValues: (renders) => `[${renders.join(", ")}]`
|
|
2115
2432
|
});
|
|
2116
2433
|
},
|
|
2117
2434
|
visitMapType(mapType, { self }) {
|
|
2118
|
-
const key = (0,
|
|
2119
|
-
const value = (0,
|
|
2120
|
-
const mergedManifest =
|
|
2435
|
+
const key = (0, import_visitors_core30.visit)(mapType.key, self);
|
|
2436
|
+
const value = (0, import_visitors_core30.visit)(mapType.value, self);
|
|
2437
|
+
const mergedManifest = mergeTypeManifests([key, value], {
|
|
2121
2438
|
mergeCodecs: ([k, v]) => `${k}, ${v}`,
|
|
2122
2439
|
mergeTypes: ([k, v]) => `Map<${k}, ${v}>`
|
|
2123
2440
|
});
|
|
2124
2441
|
const sizeManifest = getArrayLikeSizeOption(mapType.count, self);
|
|
2125
|
-
const encoderOptions = sizeManifest.encoder.
|
|
2126
|
-
const decoderOptions = sizeManifest.decoder.
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2442
|
+
const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : "";
|
|
2443
|
+
const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : "";
|
|
2444
|
+
return typeManifest({
|
|
2445
|
+
...mergedManifest,
|
|
2446
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2447
|
+
mergedManifest.decoder,
|
|
2448
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getMapDecoder(${c}${decoderOptions})`),
|
|
2449
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getMapDecoder"])
|
|
2450
|
+
),
|
|
2451
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2452
|
+
mergedManifest.encoder,
|
|
2453
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getMapEncoder(${c}${encoderOptions})`),
|
|
2454
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getMapEncoder"])
|
|
2455
|
+
)
|
|
2456
|
+
});
|
|
2130
2457
|
},
|
|
2131
2458
|
visitMapValue(node, { self }) {
|
|
2132
|
-
const entryFragments = node.entries.map((entry) => (0,
|
|
2133
|
-
return
|
|
2459
|
+
const entryFragments = node.entries.map((entry) => (0, import_visitors_core30.visit)(entry, self));
|
|
2460
|
+
return mergeTypeManifests(entryFragments, {
|
|
2134
2461
|
mergeValues: (renders) => `new Map([${renders.join(", ")}])`
|
|
2135
2462
|
});
|
|
2136
2463
|
},
|
|
2137
2464
|
visitNoneValue() {
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2465
|
+
return typeManifest({
|
|
2466
|
+
value: (0, import_visitors_core30.pipe)(fragment("none()"), (f) => addFragmentImports(f, "solanaOptions", ["none"]))
|
|
2467
|
+
});
|
|
2141
2468
|
},
|
|
2142
2469
|
visitNumberType(numberType) {
|
|
2143
2470
|
const encoderFunction = nameApi.encoderFunction(numberType.format);
|
|
@@ -2151,33 +2478,37 @@ function getTypeManifestVisitor(input) {
|
|
|
2151
2478
|
decoderImports.add("solanaCodecsNumbers", "Endian");
|
|
2152
2479
|
endianness = "{ endian: Endian.Big }";
|
|
2153
2480
|
}
|
|
2154
|
-
return {
|
|
2155
|
-
decoder:
|
|
2156
|
-
|
|
2157
|
-
|
|
2481
|
+
return typeManifest({
|
|
2482
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2483
|
+
fragment(`${decoderFunction}(${endianness})`),
|
|
2484
|
+
(f) => mergeFragmentImports(f, [decoderImports])
|
|
2485
|
+
),
|
|
2486
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2487
|
+
fragment(`${encoderFunction}(${endianness})`),
|
|
2488
|
+
(f) => mergeFragmentImports(f, [encoderImports])
|
|
2489
|
+
),
|
|
2158
2490
|
looseType: fragment(isBigNumber ? "number | bigint" : "number"),
|
|
2159
|
-
strictType: fragment(isBigNumber ? "bigint" : "number")
|
|
2160
|
-
|
|
2161
|
-
};
|
|
2491
|
+
strictType: fragment(isBigNumber ? "bigint" : "number")
|
|
2492
|
+
});
|
|
2162
2493
|
},
|
|
2163
2494
|
visitNumberValue(node) {
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2495
|
+
return typeManifest({
|
|
2496
|
+
value: fragment(JSON.stringify(node.number))
|
|
2497
|
+
});
|
|
2167
2498
|
},
|
|
2168
2499
|
visitOptionType(optionType, { self }) {
|
|
2169
|
-
const childManifest = (0,
|
|
2170
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2171
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2500
|
+
const childManifest = (0, import_visitors_core30.visit)(optionType.item, self);
|
|
2172
2501
|
const encoderOptions = [];
|
|
2173
2502
|
const decoderOptions = [];
|
|
2503
|
+
const encoderImports = new ImportMap();
|
|
2504
|
+
const decoderImports = new ImportMap();
|
|
2174
2505
|
const optionPrefix = (0, import_nodes24.resolveNestedTypeNode)(optionType.prefix);
|
|
2175
2506
|
if (optionPrefix.format !== "u8" || optionPrefix.endian !== "le") {
|
|
2176
|
-
const prefixManifest = (0,
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
encoderOptions.push(`prefix: ${prefixManifest.encoder.
|
|
2180
|
-
decoderOptions.push(`prefix: ${prefixManifest.decoder.
|
|
2507
|
+
const prefixManifest = (0, import_visitors_core30.visit)(optionType.prefix, self);
|
|
2508
|
+
encoderImports.mergeWith(prefixManifest.encoder);
|
|
2509
|
+
decoderImports.mergeWith(prefixManifest.decoder);
|
|
2510
|
+
encoderOptions.push(`prefix: ${prefixManifest.encoder.content}`);
|
|
2511
|
+
decoderOptions.push(`prefix: ${prefixManifest.decoder.content}`);
|
|
2181
2512
|
}
|
|
2182
2513
|
if (optionType.fixed) {
|
|
2183
2514
|
encoderOptions.push(`noneValue: "zeroes"`);
|
|
@@ -2185,16 +2516,48 @@ function getTypeManifestVisitor(input) {
|
|
|
2185
2516
|
}
|
|
2186
2517
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2187
2518
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2519
|
+
return typeManifest({
|
|
2520
|
+
...childManifest,
|
|
2521
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2522
|
+
childManifest.decoder,
|
|
2523
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionDecoder(${c + decoderOptionsAsString})`),
|
|
2524
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionDecoder"]),
|
|
2525
|
+
(f) => mergeFragmentImports(f, [decoderImports])
|
|
2526
|
+
),
|
|
2527
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2528
|
+
childManifest.encoder,
|
|
2529
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionEncoder(${c + encoderOptionsAsString})`),
|
|
2530
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionEncoder"]),
|
|
2531
|
+
(f) => mergeFragmentImports(f, [encoderImports])
|
|
2532
|
+
),
|
|
2533
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2534
|
+
childManifest.looseType,
|
|
2535
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `OptionOrNullable<${c}>`),
|
|
2536
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type OptionOrNullable"])
|
|
2537
|
+
),
|
|
2538
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2539
|
+
childManifest.strictType,
|
|
2540
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `Option<${c}>`),
|
|
2541
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type Option"])
|
|
2542
|
+
)
|
|
2543
|
+
});
|
|
2191
2544
|
},
|
|
2192
2545
|
visitPostOffsetType(node, { self }) {
|
|
2193
|
-
const manifest = (0,
|
|
2546
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2194
2547
|
if (node.strategy === "padded") {
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2548
|
+
return typeManifest({
|
|
2549
|
+
...manifest,
|
|
2550
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2551
|
+
manifest.decoder,
|
|
2552
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `padRightDecoder(${c}, ${node.offset})`),
|
|
2553
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["padRightDecoder"])
|
|
2554
|
+
),
|
|
2555
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2556
|
+
manifest.encoder,
|
|
2557
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `padRightEncoder(${c}, ${node.offset})`),
|
|
2558
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["padRightEncoder"])
|
|
2559
|
+
)
|
|
2560
|
+
});
|
|
2198
2561
|
}
|
|
2199
2562
|
const fn = (() => {
|
|
2200
2563
|
switch (node.strategy) {
|
|
@@ -2207,16 +2570,36 @@ function getTypeManifestVisitor(input) {
|
|
|
2207
2570
|
return node.offset < 0 ? `({ postOffset }) => postOffset ${node.offset}` : `({ postOffset }) => postOffset + ${node.offset}`;
|
|
2208
2571
|
}
|
|
2209
2572
|
})();
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2573
|
+
return typeManifest({
|
|
2574
|
+
...manifest,
|
|
2575
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2576
|
+
manifest.decoder,
|
|
2577
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `offsetDecoder(${c}, { postOffset: ${fn} })`),
|
|
2578
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["offsetDecoder"])
|
|
2579
|
+
),
|
|
2580
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2581
|
+
manifest.encoder,
|
|
2582
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `offsetEncoder(${c}, { postOffset: ${fn} })`),
|
|
2583
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["offsetEncoder"])
|
|
2584
|
+
)
|
|
2585
|
+
});
|
|
2213
2586
|
},
|
|
2214
2587
|
visitPreOffsetType(node, { self }) {
|
|
2215
|
-
const manifest = (0,
|
|
2588
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2216
2589
|
if (node.strategy === "padded") {
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2590
|
+
return typeManifest({
|
|
2591
|
+
...manifest,
|
|
2592
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2593
|
+
manifest.decoder,
|
|
2594
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `padLeftDecoder(${c}, ${node.offset})`),
|
|
2595
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["padLeftDecoder"])
|
|
2596
|
+
),
|
|
2597
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2598
|
+
manifest.encoder,
|
|
2599
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `padLeftEncoder(${c}, ${node.offset})`),
|
|
2600
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["padLeftEncoder"])
|
|
2601
|
+
)
|
|
2602
|
+
});
|
|
2220
2603
|
}
|
|
2221
2604
|
const fn = (() => {
|
|
2222
2605
|
switch (node.strategy) {
|
|
@@ -2227,85 +2610,177 @@ function getTypeManifestVisitor(input) {
|
|
|
2227
2610
|
return node.offset < 0 ? `({ preOffset }) => preOffset ${node.offset}` : `({ preOffset }) => preOffset + ${node.offset}`;
|
|
2228
2611
|
}
|
|
2229
2612
|
})();
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2613
|
+
return typeManifest({
|
|
2614
|
+
...manifest,
|
|
2615
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2616
|
+
manifest.decoder,
|
|
2617
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `offsetDecoder(${c}, { preOffset: ${fn} })`),
|
|
2618
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["offsetDecoder"])
|
|
2619
|
+
),
|
|
2620
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2621
|
+
manifest.encoder,
|
|
2622
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `offsetEncoder(${c}, { preOffset: ${fn} })`),
|
|
2623
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["offsetEncoder"])
|
|
2624
|
+
)
|
|
2625
|
+
});
|
|
2233
2626
|
},
|
|
2234
2627
|
visitPublicKeyType() {
|
|
2235
|
-
const
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2628
|
+
const addressFragment = (0, import_visitors_core30.pipe)(
|
|
2629
|
+
fragment("Address"),
|
|
2630
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["type Address"])
|
|
2631
|
+
);
|
|
2632
|
+
return typeManifest({
|
|
2633
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2634
|
+
fragment("getAddressDecoder()"),
|
|
2635
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["getAddressDecoder"])
|
|
2636
|
+
),
|
|
2637
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2638
|
+
fragment("getAddressEncoder()"),
|
|
2639
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["getAddressEncoder"])
|
|
2640
|
+
),
|
|
2641
|
+
looseType: addressFragment,
|
|
2642
|
+
strictType: addressFragment
|
|
2643
|
+
});
|
|
2244
2644
|
},
|
|
2245
2645
|
visitPublicKeyValue(node) {
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2646
|
+
return typeManifest({
|
|
2647
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2648
|
+
fragment(`address("${node.publicKey}")`),
|
|
2649
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["address"])
|
|
2650
|
+
)
|
|
2651
|
+
});
|
|
2249
2652
|
},
|
|
2250
2653
|
visitRemainderOptionType(node, { self }) {
|
|
2251
|
-
const childManifest = (0,
|
|
2252
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2253
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2654
|
+
const childManifest = (0, import_visitors_core30.visit)(node.item, self);
|
|
2254
2655
|
const encoderOptions = ["prefix: null"];
|
|
2255
2656
|
const decoderOptions = ["prefix: null"];
|
|
2256
2657
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2257
2658
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2659
|
+
return typeManifest({
|
|
2660
|
+
...childManifest,
|
|
2661
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2662
|
+
childManifest.decoder,
|
|
2663
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionDecoder(${c + decoderOptionsAsString})`),
|
|
2664
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionDecoder"])
|
|
2665
|
+
),
|
|
2666
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2667
|
+
childManifest.encoder,
|
|
2668
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionEncoder(${c + encoderOptionsAsString})`),
|
|
2669
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionEncoder"])
|
|
2670
|
+
),
|
|
2671
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2672
|
+
childManifest.looseType,
|
|
2673
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `OptionOrNullable<${c}>`),
|
|
2674
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type OptionOrNullable"])
|
|
2675
|
+
),
|
|
2676
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2677
|
+
childManifest.strictType,
|
|
2678
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `Option<${c}>`),
|
|
2679
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type Option"])
|
|
2680
|
+
)
|
|
2681
|
+
});
|
|
2261
2682
|
},
|
|
2262
2683
|
visitSentinelType(node, { self }) {
|
|
2263
|
-
const manifest = (0,
|
|
2264
|
-
const sentinel = (0,
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2684
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2685
|
+
const sentinel = (0, import_visitors_core30.visit)(node.sentinel, self).value;
|
|
2686
|
+
return typeManifest({
|
|
2687
|
+
...manifest,
|
|
2688
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2689
|
+
mergeFragments(
|
|
2690
|
+
[manifest.decoder, sentinel],
|
|
2691
|
+
([child, sentinel2]) => `addDecoderSentinel(${child}, ${sentinel2})`
|
|
2692
|
+
),
|
|
2693
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["addDecoderSentinel"])
|
|
2694
|
+
),
|
|
2695
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2696
|
+
mergeFragments(
|
|
2697
|
+
[manifest.encoder, sentinel],
|
|
2698
|
+
([child, sentinel2]) => `addEncoderSentinel(${child}, ${sentinel2})`
|
|
2699
|
+
),
|
|
2700
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["addEncoderSentinel"])
|
|
2701
|
+
)
|
|
2702
|
+
});
|
|
2268
2703
|
},
|
|
2269
2704
|
visitSetType(setType, { self }) {
|
|
2270
|
-
const childManifest = (0,
|
|
2271
|
-
childManifest.strictType.mapRender((r) => `Set<${r}>`);
|
|
2272
|
-
childManifest.looseType.mapRender((r) => `Set<${r}>`);
|
|
2705
|
+
const childManifest = (0, import_visitors_core30.visit)(setType.item, self);
|
|
2273
2706
|
const sizeManifest = getArrayLikeSizeOption(setType.count, self);
|
|
2274
|
-
const encoderOptions = sizeManifest.encoder.
|
|
2275
|
-
const decoderOptions = sizeManifest.decoder.
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2707
|
+
const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : "";
|
|
2708
|
+
const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : "";
|
|
2709
|
+
return typeManifest({
|
|
2710
|
+
...childManifest,
|
|
2711
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2712
|
+
childManifest.decoder,
|
|
2713
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getSetDecoder(${c + decoderOptions})`),
|
|
2714
|
+
(f) => mergeFragmentImports(f, [sizeManifest.decoder.imports]),
|
|
2715
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getSetDecoder"])
|
|
2716
|
+
),
|
|
2717
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2718
|
+
childManifest.encoder,
|
|
2719
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getSetEncoder(${c + encoderOptions})`),
|
|
2720
|
+
(f) => mergeFragmentImports(f, [sizeManifest.encoder.imports]),
|
|
2721
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getSetEncoder"])
|
|
2722
|
+
),
|
|
2723
|
+
looseType: (0, import_visitors_core30.pipe)(childManifest.looseType, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `Set<${c}>`)),
|
|
2724
|
+
strictType: (0, import_visitors_core30.pipe)(childManifest.strictType, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `Set<${c}>`))
|
|
2725
|
+
});
|
|
2279
2726
|
},
|
|
2280
2727
|
visitSetValue(node, { self }) {
|
|
2281
|
-
return
|
|
2282
|
-
node.items.map((v) => (0,
|
|
2728
|
+
return mergeTypeManifests(
|
|
2729
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
2283
2730
|
{ mergeValues: (renders) => `new Set([${renders.join(", ")}])` }
|
|
2284
2731
|
);
|
|
2285
2732
|
},
|
|
2286
2733
|
visitSizePrefixType(node, { self }) {
|
|
2287
|
-
const manifest = (0,
|
|
2288
|
-
const prefix = (0,
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2734
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2735
|
+
const prefix = (0, import_visitors_core30.visit)(node.prefix, self);
|
|
2736
|
+
return typeManifest({
|
|
2737
|
+
...manifest,
|
|
2738
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2739
|
+
mergeFragments(
|
|
2740
|
+
[manifest.decoder, prefix.decoder],
|
|
2741
|
+
([decoder, prefix2]) => `addDecoderSizePrefix(${decoder}, ${prefix2})`
|
|
2742
|
+
),
|
|
2743
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["addDecoderSizePrefix"])
|
|
2744
|
+
),
|
|
2745
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2746
|
+
mergeFragments(
|
|
2747
|
+
[manifest.encoder, prefix.encoder],
|
|
2748
|
+
([encoder, prefix2]) => `addEncoderSizePrefix(${encoder}, ${prefix2})`
|
|
2749
|
+
),
|
|
2750
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["addEncoderSizePrefix"])
|
|
2751
|
+
)
|
|
2752
|
+
});
|
|
2292
2753
|
},
|
|
2293
2754
|
visitSolAmountType({ number }, { self }) {
|
|
2294
|
-
const numberManifest = (0,
|
|
2295
|
-
const
|
|
2296
|
-
|
|
2297
|
-
|
|
2755
|
+
const numberManifest = (0, import_visitors_core30.visit)(number, self);
|
|
2756
|
+
const lamportFragment = (0, import_visitors_core30.pipe)(
|
|
2757
|
+
fragment("Lamports"),
|
|
2758
|
+
(f) => addFragmentImports(f, "solanaRpcTypes", ["type Lamports"])
|
|
2759
|
+
);
|
|
2760
|
+
return typeManifest({
|
|
2298
2761
|
...numberManifest,
|
|
2299
|
-
decoder:
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2762
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2763
|
+
numberManifest.decoder,
|
|
2764
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getLamportsDecoder(${c})`),
|
|
2765
|
+
(f) => addFragmentImports(f, "solanaRpcTypes", ["getLamportsDecoder"])
|
|
2766
|
+
),
|
|
2767
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2768
|
+
numberManifest.encoder,
|
|
2769
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getLamportsEncoder(${c})`),
|
|
2770
|
+
(f) => addFragmentImports(f, "solanaRpcTypes", ["getLamportsEncoder"])
|
|
2771
|
+
),
|
|
2772
|
+
looseType: lamportFragment,
|
|
2773
|
+
strictType: lamportFragment
|
|
2774
|
+
});
|
|
2304
2775
|
},
|
|
2305
2776
|
visitSomeValue(node, { self }) {
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2777
|
+
return typeManifest({
|
|
2778
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2779
|
+
(0, import_visitors_core30.visit)(node.value, self).value,
|
|
2780
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `some(${c})`),
|
|
2781
|
+
(f) => addFragmentImports(f, "solanaOptions", ["some"])
|
|
2782
|
+
)
|
|
2783
|
+
});
|
|
2309
2784
|
},
|
|
2310
2785
|
visitStringType(stringType) {
|
|
2311
2786
|
const [encoder, decoder] = (() => {
|
|
@@ -2322,66 +2797,109 @@ function getTypeManifestVisitor(input) {
|
|
|
2322
2797
|
throw new Error(`Unsupported string encoding: ${stringType.encoding}`);
|
|
2323
2798
|
}
|
|
2324
2799
|
})();
|
|
2325
|
-
return {
|
|
2326
|
-
decoder:
|
|
2327
|
-
|
|
2328
|
-
|
|
2800
|
+
return typeManifest({
|
|
2801
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2802
|
+
fragment(`${decoder}()`),
|
|
2803
|
+
(f) => addFragmentImports(f, "solanaCodecsStrings", [decoder])
|
|
2804
|
+
),
|
|
2805
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2806
|
+
fragment(`${encoder}()`),
|
|
2807
|
+
(f) => addFragmentImports(f, "solanaCodecsStrings", [encoder])
|
|
2808
|
+
),
|
|
2329
2809
|
looseType: fragment("string"),
|
|
2330
|
-
strictType: fragment("string")
|
|
2331
|
-
|
|
2332
|
-
};
|
|
2810
|
+
strictType: fragment("string")
|
|
2811
|
+
});
|
|
2333
2812
|
},
|
|
2334
2813
|
visitStringValue(node) {
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2814
|
+
return typeManifest({
|
|
2815
|
+
value: fragment(JSON.stringify(node.string))
|
|
2816
|
+
});
|
|
2338
2817
|
},
|
|
2339
2818
|
visitStructFieldType(structFieldType, { self }) {
|
|
2340
2819
|
const name = (0, import_nodes24.camelCase)(structFieldType.name);
|
|
2341
|
-
const
|
|
2820
|
+
const originalChildManifest = (0, import_visitors_core30.visit)(structFieldType.type, self);
|
|
2342
2821
|
const structFieldDocs = (0, import_nodes24.parseDocs)(structFieldType.docs);
|
|
2343
2822
|
const docblock = structFieldDocs.length > 0 ? `
|
|
2344
2823
|
${jsDocblock(structFieldDocs)}` : "";
|
|
2345
|
-
const originalLooseType =
|
|
2346
|
-
childManifest
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2824
|
+
const originalLooseType = originalChildManifest.looseType.content;
|
|
2825
|
+
const childManifest = typeManifest({
|
|
2826
|
+
...originalChildManifest,
|
|
2827
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2828
|
+
originalChildManifest.decoder,
|
|
2829
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)
|
|
2830
|
+
),
|
|
2831
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2832
|
+
originalChildManifest.encoder,
|
|
2833
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `['${name}', ${c}]`)
|
|
2834
|
+
),
|
|
2835
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2836
|
+
originalChildManifest.looseType,
|
|
2837
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `${docblock}${name}: ${c}; `)
|
|
2838
|
+
),
|
|
2839
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2840
|
+
originalChildManifest.strictType,
|
|
2841
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `${docblock}${name}: ${c}; `)
|
|
2842
|
+
)
|
|
2843
|
+
});
|
|
2350
2844
|
if (!structFieldType.defaultValue) {
|
|
2351
2845
|
return childManifest;
|
|
2352
2846
|
}
|
|
2353
2847
|
if (structFieldType.defaultValueStrategy !== "omitted") {
|
|
2354
|
-
|
|
2355
|
-
|
|
2848
|
+
return typeManifest({
|
|
2849
|
+
...childManifest,
|
|
2850
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2851
|
+
childManifest.looseType,
|
|
2852
|
+
(f) => (0, import_renderers_core12.setFragmentContent)(f, `${docblock}${name}?: ${originalLooseType}; `)
|
|
2853
|
+
)
|
|
2854
|
+
});
|
|
2356
2855
|
}
|
|
2357
|
-
|
|
2358
|
-
|
|
2856
|
+
return typeManifest({
|
|
2857
|
+
...childManifest,
|
|
2858
|
+
looseType: fragment("")
|
|
2859
|
+
});
|
|
2359
2860
|
},
|
|
2360
2861
|
visitStructFieldValue(node, { self }) {
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2862
|
+
return typeManifest({
|
|
2863
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2864
|
+
(0, import_visitors_core30.visit)(node.value, self).value,
|
|
2865
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `${node.name}: ${c}`)
|
|
2866
|
+
)
|
|
2867
|
+
});
|
|
2364
2868
|
},
|
|
2365
2869
|
visitStructType(structType, { self }) {
|
|
2366
2870
|
const optionalFields = structType.fields.filter((f) => !!f.defaultValue);
|
|
2367
|
-
const mergedManifest =
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2871
|
+
const mergedManifest = (0, import_visitors_core30.pipe)(
|
|
2872
|
+
mergeTypeManifests(
|
|
2873
|
+
structType.fields.map((field) => (0, import_visitors_core30.visit)(field, self)),
|
|
2874
|
+
{
|
|
2875
|
+
mergeCodecs: (renders) => `([${renders.join(", ")}])`,
|
|
2876
|
+
mergeTypes: (renders) => `{ ${renders.join("")} }`
|
|
2877
|
+
}
|
|
2878
|
+
),
|
|
2879
|
+
(manifest) => typeManifest({
|
|
2880
|
+
...manifest,
|
|
2881
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2882
|
+
manifest.decoder,
|
|
2883
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getStructDecoder${c}`),
|
|
2884
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getStructDecoder"])
|
|
2885
|
+
),
|
|
2886
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2887
|
+
manifest.encoder,
|
|
2888
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getStructEncoder${c}`),
|
|
2889
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getStructEncoder"])
|
|
2890
|
+
)
|
|
2891
|
+
})
|
|
2373
2892
|
);
|
|
2374
|
-
mergedManifest.encoder.mapRender((r) => `getStructEncoder${r}`).addImports("solanaCodecsDataStructures", "getStructEncoder");
|
|
2375
|
-
mergedManifest.decoder.mapRender((r) => `getStructDecoder${r}`).addImports("solanaCodecsDataStructures", "getStructDecoder");
|
|
2376
2893
|
if (optionalFields.length === 0) {
|
|
2377
2894
|
return mergedManifest;
|
|
2378
2895
|
}
|
|
2379
2896
|
const parentPath = stack.getPath();
|
|
2380
|
-
const instructionNode = (0,
|
|
2381
|
-
const accountNode = (0,
|
|
2897
|
+
const instructionNode = (0, import_visitors_core30.findLastNodeFromPath)(parentPath, "instructionNode");
|
|
2898
|
+
const accountNode = (0, import_visitors_core30.findLastNodeFromPath)(parentPath, "accountNode");
|
|
2382
2899
|
const discriminatorPrefix = instructionNode ? instructionNode.name : accountNode?.name;
|
|
2383
2900
|
const discriminators = (instructionNode ? instructionNode.discriminators : accountNode?.discriminators) ?? [];
|
|
2384
2901
|
const fieldDiscriminators = discriminators.filter((0, import_nodes24.isNodeFilter)("fieldDiscriminatorNode"));
|
|
2902
|
+
const encoderImports = new ImportMap();
|
|
2385
2903
|
const defaultValues = optionalFields.map((f) => {
|
|
2386
2904
|
const key = (0, import_nodes24.camelCase)(f.name);
|
|
2387
2905
|
if (fieldDiscriminators.some((d) => d.name === f.name)) {
|
|
@@ -2389,59 +2907,101 @@ ${jsDocblock(structFieldDocs)}` : "";
|
|
|
2389
2907
|
return f.defaultValueStrategy === "omitted" ? `${key}: ${constantName}` : `${key}: value.${key} ?? ${constantName}`;
|
|
2390
2908
|
}
|
|
2391
2909
|
const defaultValue = f.defaultValue;
|
|
2392
|
-
const {
|
|
2393
|
-
|
|
2910
|
+
const { content: renderedValue, imports } = (0, import_visitors_core30.visit)(defaultValue, self).value;
|
|
2911
|
+
encoderImports.mergeWith(imports);
|
|
2394
2912
|
return f.defaultValueStrategy === "omitted" ? `${key}: ${renderedValue}` : `${key}: value.${key} ?? ${renderedValue}`;
|
|
2395
2913
|
}).join(", ");
|
|
2396
|
-
|
|
2397
|
-
|
|
2914
|
+
return typeManifest({
|
|
2915
|
+
...mergedManifest,
|
|
2916
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2917
|
+
mergedManifest.encoder,
|
|
2918
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(
|
|
2919
|
+
f,
|
|
2920
|
+
(c) => `transformEncoder(${c}, (value) => ({ ...value, ${defaultValues} }))`
|
|
2921
|
+
),
|
|
2922
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["transformEncoder"]),
|
|
2923
|
+
(f) => mergeFragmentImports(f, [encoderImports])
|
|
2924
|
+
)
|
|
2925
|
+
});
|
|
2398
2926
|
},
|
|
2399
2927
|
visitStructValue(node, { self }) {
|
|
2400
|
-
return
|
|
2401
|
-
node.fields.map((field) => (0,
|
|
2928
|
+
return mergeTypeManifests(
|
|
2929
|
+
node.fields.map((field) => (0, import_visitors_core30.visit)(field, self)),
|
|
2402
2930
|
{ mergeValues: (renders) => `{ ${renders.join(", ")} }` }
|
|
2403
2931
|
);
|
|
2404
2932
|
},
|
|
2405
2933
|
visitTupleType(tupleType, { self }) {
|
|
2406
|
-
const items = tupleType.items.map((item) => (0,
|
|
2407
|
-
const mergedManifest =
|
|
2934
|
+
const items = tupleType.items.map((item) => (0, import_visitors_core30.visit)(item, self));
|
|
2935
|
+
const mergedManifest = mergeTypeManifests(items, {
|
|
2408
2936
|
mergeCodecs: (codecs) => `[${codecs.join(", ")}]`,
|
|
2409
2937
|
mergeTypes: (types) => `readonly [${types.join(", ")}]`
|
|
2410
2938
|
});
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2939
|
+
return typeManifest({
|
|
2940
|
+
...mergedManifest,
|
|
2941
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2942
|
+
mergedManifest.decoder,
|
|
2943
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getTupleDecoder(${c})`),
|
|
2944
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getTupleDecoder"])
|
|
2945
|
+
),
|
|
2946
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2947
|
+
mergedManifest.encoder,
|
|
2948
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getTupleEncoder(${c})`),
|
|
2949
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getTupleEncoder"])
|
|
2950
|
+
)
|
|
2951
|
+
});
|
|
2414
2952
|
},
|
|
2415
2953
|
visitTupleValue(node, { self }) {
|
|
2416
|
-
return
|
|
2417
|
-
node.items.map((v) => (0,
|
|
2954
|
+
return mergeTypeManifests(
|
|
2955
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
2418
2956
|
{ mergeValues: (renders) => `[${renders.join(", ")}]` }
|
|
2419
2957
|
);
|
|
2420
2958
|
},
|
|
2421
2959
|
visitZeroableOptionType(node, { self }) {
|
|
2422
|
-
const childManifest = (0,
|
|
2423
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2424
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2960
|
+
const childManifest = (0, import_visitors_core30.visit)(node.item, self);
|
|
2425
2961
|
const encoderOptions = ["prefix: null"];
|
|
2426
2962
|
const decoderOptions = ["prefix: null"];
|
|
2963
|
+
const encoderImports = new ImportMap();
|
|
2964
|
+
const decoderImports = new ImportMap();
|
|
2427
2965
|
if (node.zeroValue) {
|
|
2428
|
-
const zeroValueManifest = (0,
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
encoderOptions.push(`noneValue: ${zeroValueManifest.value.
|
|
2432
|
-
decoderOptions.push(`noneValue: ${zeroValueManifest.value.
|
|
2966
|
+
const zeroValueManifest = (0, import_visitors_core30.visit)(node.zeroValue, self);
|
|
2967
|
+
encoderImports.mergeWith(zeroValueManifest.value);
|
|
2968
|
+
decoderImports.mergeWith(zeroValueManifest.value);
|
|
2969
|
+
encoderOptions.push(`noneValue: ${zeroValueManifest.value.content}`);
|
|
2970
|
+
decoderOptions.push(`noneValue: ${zeroValueManifest.value.content}`);
|
|
2433
2971
|
} else {
|
|
2434
2972
|
encoderOptions.push(`noneValue: "zeroes"`);
|
|
2435
2973
|
decoderOptions.push(`noneValue: "zeroes"`);
|
|
2436
2974
|
}
|
|
2437
2975
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2438
2976
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2977
|
+
return typeManifest({
|
|
2978
|
+
...childManifest,
|
|
2979
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2980
|
+
childManifest.decoder,
|
|
2981
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionDecoder(${c + decoderOptionsAsString})`),
|
|
2982
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionDecoder"]),
|
|
2983
|
+
(f) => mergeFragmentImports(f, [decoderImports])
|
|
2984
|
+
),
|
|
2985
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2986
|
+
childManifest.encoder,
|
|
2987
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `getOptionEncoder(${c + encoderOptionsAsString})`),
|
|
2988
|
+
(f) => addFragmentImports(f, "solanaOptions", ["getOptionEncoder"]),
|
|
2989
|
+
(f) => mergeFragmentImports(f, [encoderImports])
|
|
2990
|
+
),
|
|
2991
|
+
looseType: (0, import_visitors_core30.pipe)(
|
|
2992
|
+
childManifest.looseType,
|
|
2993
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `OptionOrNullable<${c}>`),
|
|
2994
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type OptionOrNullable"])
|
|
2995
|
+
),
|
|
2996
|
+
strictType: (0, import_visitors_core30.pipe)(
|
|
2997
|
+
childManifest.strictType,
|
|
2998
|
+
(f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `Option<${c}>`),
|
|
2999
|
+
(f) => addFragmentImports(f, "solanaOptions", ["type Option"])
|
|
3000
|
+
)
|
|
3001
|
+
});
|
|
2442
3002
|
}
|
|
2443
3003
|
}),
|
|
2444
|
-
(visitor) => (0,
|
|
3004
|
+
(visitor) => (0, import_visitors_core30.recordNodeStackVisitor)(visitor, stack)
|
|
2445
3005
|
);
|
|
2446
3006
|
}
|
|
2447
3007
|
function getArrayLikeSizeOption(count, visitor) {
|
|
@@ -2461,10 +3021,11 @@ function getArrayLikeSizeOption(count, visitor) {
|
|
|
2461
3021
|
if (prefix.format === "u32" && prefix.endian === "le") {
|
|
2462
3022
|
return { decoder: fragment(""), encoder: fragment("") };
|
|
2463
3023
|
}
|
|
2464
|
-
const prefixManifest = (0,
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
3024
|
+
const prefixManifest = (0, import_visitors_core30.visit)(count.prefix, visitor);
|
|
3025
|
+
return {
|
|
3026
|
+
decoder: (0, import_visitors_core30.pipe)(prefixManifest.decoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `size: ${c}`)),
|
|
3027
|
+
encoder: (0, import_visitors_core30.pipe)(prefixManifest.encoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `size: ${c}`))
|
|
3028
|
+
};
|
|
2468
3029
|
}
|
|
2469
3030
|
|
|
2470
3031
|
// src/nameTransformers.ts
|
|
@@ -2533,8 +3094,8 @@ var DEFAULT_NAME_TRANSFORMERS = {
|
|
|
2533
3094
|
|
|
2534
3095
|
// src/getRenderMapVisitor.ts
|
|
2535
3096
|
function getRenderMapVisitor(options = {}) {
|
|
2536
|
-
const linkables = new
|
|
2537
|
-
const stack = new
|
|
3097
|
+
const linkables = new import_visitors_core31.LinkableDictionary();
|
|
3098
|
+
const stack = new import_visitors_core31.NodeStack();
|
|
2538
3099
|
const nameTransformers = {
|
|
2539
3100
|
...DEFAULT_NAME_TRANSFORMERS,
|
|
2540
3101
|
...options.nameTransformers
|
|
@@ -2558,8 +3119,8 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2558
3119
|
nonScalarEnums,
|
|
2559
3120
|
stack
|
|
2560
3121
|
});
|
|
2561
|
-
const resolvedInstructionInputVisitor = (0,
|
|
2562
|
-
const byteSizeVisitor = (0,
|
|
3122
|
+
const resolvedInstructionInputVisitor = (0, import_visitors_core31.getResolvedInstructionInputsVisitor)();
|
|
3123
|
+
const byteSizeVisitor = (0, import_visitors_core31.getByteSizeVisitor)(linkables, { stack });
|
|
2563
3124
|
const globalScope = {
|
|
2564
3125
|
asyncResolvers,
|
|
2565
3126
|
customAccountData,
|
|
@@ -2572,23 +3133,23 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2572
3133
|
typeManifestVisitor
|
|
2573
3134
|
};
|
|
2574
3135
|
const render2 = (template, context, renderOptions) => {
|
|
2575
|
-
return render((0,
|
|
3136
|
+
return render((0, import_node_path2.join)("pages", template), context, renderOptions);
|
|
2576
3137
|
};
|
|
2577
|
-
return (0,
|
|
2578
|
-
(0,
|
|
3138
|
+
return (0, import_visitors_core31.pipe)(
|
|
3139
|
+
(0, import_visitors_core31.staticVisitor)(() => (0, import_renderers_core13.renderMap)(), {
|
|
2579
3140
|
keys: ["rootNode", "programNode", "pdaNode", "accountNode", "definedTypeNode", "instructionNode"]
|
|
2580
3141
|
}),
|
|
2581
|
-
(v) => (0,
|
|
3142
|
+
(v) => (0, import_visitors_core31.extendVisitor)(v, {
|
|
2582
3143
|
visitAccount(node) {
|
|
2583
3144
|
const accountPath = stack.getPath("accountNode");
|
|
2584
|
-
if (!(0,
|
|
3145
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(accountPath)) {
|
|
2585
3146
|
throw new Error("Account must be visited inside a program.");
|
|
2586
3147
|
}
|
|
2587
3148
|
const scope = {
|
|
2588
3149
|
...globalScope,
|
|
2589
3150
|
accountPath,
|
|
2590
|
-
size: (0,
|
|
2591
|
-
typeManifest: (0,
|
|
3151
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor),
|
|
3152
|
+
typeManifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor)
|
|
2592
3153
|
};
|
|
2593
3154
|
const fields = (0, import_nodes26.resolveNestedTypeNode)(node.data).fields;
|
|
2594
3155
|
const accountDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({
|
|
@@ -2608,14 +3169,15 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2608
3169
|
accountSizeHelpersFragment,
|
|
2609
3170
|
accountPdaHelpersFragment
|
|
2610
3171
|
);
|
|
2611
|
-
return
|
|
3172
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3173
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2612
3174
|
`accounts/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2613
3175
|
render2("accountsPage.njk", {
|
|
2614
|
-
accountDiscriminatorConstantsFragment,
|
|
2615
|
-
accountFetchHelpersFragment,
|
|
2616
|
-
accountPdaHelpersFragment,
|
|
2617
|
-
accountSizeHelpersFragment,
|
|
2618
|
-
accountTypeFragment,
|
|
3176
|
+
accountDiscriminatorConstantsFragment: accountDiscriminatorConstantsFragment.content,
|
|
3177
|
+
accountFetchHelpersFragment: accountFetchHelpersFragment.content,
|
|
3178
|
+
accountPdaHelpersFragment: accountPdaHelpersFragment.content,
|
|
3179
|
+
accountSizeHelpersFragment: accountSizeHelpersFragment.content,
|
|
3180
|
+
accountTypeFragment: accountTypeFragment.content,
|
|
2619
3181
|
imports: imports.toString(dependencyMap, useGranularImports)
|
|
2620
3182
|
})
|
|
2621
3183
|
);
|
|
@@ -2626,10 +3188,10 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2626
3188
|
codecDocs: [],
|
|
2627
3189
|
decoderDocs: [],
|
|
2628
3190
|
encoderDocs: [],
|
|
2629
|
-
manifest: (0,
|
|
3191
|
+
manifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor),
|
|
2630
3192
|
name: node.name,
|
|
2631
3193
|
node: node.type,
|
|
2632
|
-
size: (0,
|
|
3194
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor),
|
|
2633
3195
|
typeDocs: node.docs,
|
|
2634
3196
|
typeNode: node.type
|
|
2635
3197
|
};
|
|
@@ -2642,28 +3204,26 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2642
3204
|
nameApi.decoderFunction(node.name),
|
|
2643
3205
|
nameApi.codecFunction(node.name)
|
|
2644
3206
|
]);
|
|
2645
|
-
return
|
|
3207
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3208
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2646
3209
|
`types/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2647
3210
|
render2("definedTypesPage.njk", {
|
|
2648
|
-
imports: imports.toString({
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
}),
|
|
2652
|
-
typeDiscriminatedUnionHelpersFragment,
|
|
2653
|
-
typeWithCodecFragment
|
|
3211
|
+
imports: imports.toString({ ...dependencyMap, generatedTypes: "." }),
|
|
3212
|
+
typeDiscriminatedUnionHelpersFragment: typeDiscriminatedUnionHelpersFragment.content,
|
|
3213
|
+
typeWithCodecFragment: typeWithCodecFragment.content
|
|
2654
3214
|
})
|
|
2655
3215
|
);
|
|
2656
3216
|
},
|
|
2657
3217
|
visitInstruction(node) {
|
|
2658
3218
|
const instructionPath = stack.getPath("instructionNode");
|
|
2659
|
-
if (!(0,
|
|
3219
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(instructionPath)) {
|
|
2660
3220
|
throw new Error("Instruction must be visited inside a program.");
|
|
2661
3221
|
}
|
|
2662
3222
|
const instructionExtraName = nameApi.instructionExtraType(node.name);
|
|
2663
3223
|
const scope = {
|
|
2664
3224
|
...globalScope,
|
|
2665
|
-
dataArgsManifest: (0,
|
|
2666
|
-
extraArgsManifest: (0,
|
|
3225
|
+
dataArgsManifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor),
|
|
3226
|
+
extraArgsManifest: (0, import_visitors_core31.visit)(
|
|
2667
3227
|
(0, import_nodes26.definedTypeNode)({
|
|
2668
3228
|
name: instructionExtraName,
|
|
2669
3229
|
type: (0, import_nodes26.structTypeNodeFromInstructionArgumentNodes)(node.extraArguments ?? [])
|
|
@@ -2672,8 +3232,8 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2672
3232
|
),
|
|
2673
3233
|
instructionPath,
|
|
2674
3234
|
renamedArgs: getRenamedArgsMap(node),
|
|
2675
|
-
resolvedInputs: (0,
|
|
2676
|
-
size: (0,
|
|
3235
|
+
resolvedInputs: (0, import_visitors_core31.visit)(node, resolvedInstructionInputVisitor),
|
|
3236
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor)
|
|
2677
3237
|
};
|
|
2678
3238
|
const instructionDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({
|
|
2679
3239
|
...scope,
|
|
@@ -2702,34 +3262,36 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2702
3262
|
instructionFunctionSyncFragment,
|
|
2703
3263
|
instructionParseFunctionFragment
|
|
2704
3264
|
);
|
|
2705
|
-
return
|
|
3265
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3266
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2706
3267
|
`instructions/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2707
3268
|
render2("instructionsPage.njk", {
|
|
2708
3269
|
imports: imports.toString(dependencyMap, useGranularImports),
|
|
2709
3270
|
instruction: node,
|
|
2710
|
-
instructionDataFragment,
|
|
2711
|
-
instructionDiscriminatorConstantsFragment,
|
|
2712
|
-
instructionExtraArgsFragment,
|
|
2713
|
-
instructionFunctionAsyncFragment,
|
|
2714
|
-
instructionFunctionSyncFragment,
|
|
2715
|
-
instructionParseFunctionFragment,
|
|
2716
|
-
instructionTypeFragment
|
|
3271
|
+
instructionDataFragment: instructionDataFragment.content,
|
|
3272
|
+
instructionDiscriminatorConstantsFragment: instructionDiscriminatorConstantsFragment.content,
|
|
3273
|
+
instructionExtraArgsFragment: instructionExtraArgsFragment.content,
|
|
3274
|
+
instructionFunctionAsyncFragment: instructionFunctionAsyncFragment.content,
|
|
3275
|
+
instructionFunctionSyncFragment: instructionFunctionSyncFragment.content,
|
|
3276
|
+
instructionParseFunctionFragment: instructionParseFunctionFragment.content,
|
|
3277
|
+
instructionTypeFragment: instructionTypeFragment.content
|
|
2717
3278
|
})
|
|
2718
3279
|
);
|
|
2719
3280
|
},
|
|
2720
3281
|
visitPda(node) {
|
|
2721
3282
|
const pdaPath = stack.getPath("pdaNode");
|
|
2722
|
-
if (!(0,
|
|
2723
|
-
throw new Error("
|
|
3283
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(pdaPath)) {
|
|
3284
|
+
throw new Error("PDA must be visited inside a program.");
|
|
2724
3285
|
}
|
|
2725
3286
|
const scope = { ...globalScope, pdaPath };
|
|
2726
3287
|
const pdaFunctionFragment = getPdaFunctionFragment(scope);
|
|
2727
3288
|
const imports = new ImportMap().mergeWith(pdaFunctionFragment);
|
|
2728
|
-
return
|
|
3289
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3290
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2729
3291
|
`pdas/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2730
3292
|
render2("pdasPage.njk", {
|
|
2731
3293
|
imports: imports.toString(dependencyMap, useGranularImports),
|
|
2732
|
-
pdaFunctionFragment
|
|
3294
|
+
pdaFunctionFragment: pdaFunctionFragment.content
|
|
2733
3295
|
})
|
|
2734
3296
|
);
|
|
2735
3297
|
},
|
|
@@ -2739,35 +3301,42 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2739
3301
|
...getDefinedTypeNodesToExtract(node.instructions, customInstructionData)
|
|
2740
3302
|
];
|
|
2741
3303
|
const scope = { ...globalScope, programNode: node };
|
|
2742
|
-
|
|
3304
|
+
let renders = (0, import_renderers_core13.mergeRenderMaps)([
|
|
3305
|
+
...node.pdas.map((p) => (0, import_visitors_core31.visit)(p, self)),
|
|
3306
|
+
...node.accounts.map((a) => (0, import_visitors_core31.visit)(a, self)),
|
|
3307
|
+
...node.definedTypes.map((t) => (0, import_visitors_core31.visit)(t, self)),
|
|
3308
|
+
...customDataDefinedType.map((t) => (0, import_visitors_core31.visit)(t, self))
|
|
3309
|
+
]);
|
|
2743
3310
|
if (node.errors.length > 0) {
|
|
2744
3311
|
const programErrorsFragment = getProgramErrorsFragment(scope);
|
|
2745
|
-
|
|
3312
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3313
|
+
renders,
|
|
2746
3314
|
`errors/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2747
3315
|
render2("errorsPage.njk", {
|
|
2748
3316
|
imports: new ImportMap().mergeWith(programErrorsFragment).toString(dependencyMap, useGranularImports),
|
|
2749
|
-
programErrorsFragment
|
|
3317
|
+
programErrorsFragment: programErrorsFragment.content
|
|
2750
3318
|
})
|
|
2751
3319
|
);
|
|
2752
3320
|
}
|
|
2753
3321
|
const programFragment = getProgramFragment(scope);
|
|
2754
3322
|
const programAccountsFragment = getProgramAccountsFragment(scope);
|
|
2755
3323
|
const programInstructionsFragment = getProgramInstructionsFragment(scope);
|
|
2756
|
-
|
|
3324
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3325
|
+
renders,
|
|
2757
3326
|
`programs/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2758
3327
|
render2("programsPage.njk", {
|
|
2759
3328
|
imports: new ImportMap().mergeWith(programFragment, programAccountsFragment, programInstructionsFragment).toString(dependencyMap, useGranularImports),
|
|
2760
|
-
programAccountsFragment,
|
|
2761
|
-
programFragment,
|
|
2762
|
-
programInstructionsFragment
|
|
3329
|
+
programAccountsFragment: programAccountsFragment.content,
|
|
3330
|
+
programFragment: programFragment.content,
|
|
3331
|
+
programInstructionsFragment: programInstructionsFragment.content
|
|
2763
3332
|
})
|
|
2764
3333
|
);
|
|
2765
|
-
|
|
3334
|
+
return (0, import_renderers_core13.mergeRenderMaps)([
|
|
3335
|
+
renders,
|
|
2766
3336
|
...(0, import_nodes26.getAllInstructionsWithSubs)(node, {
|
|
2767
3337
|
leavesOnly: !renderParentInstructions
|
|
2768
|
-
}).map((ix) => (0,
|
|
2769
|
-
);
|
|
2770
|
-
return renderMap;
|
|
3338
|
+
}).map((ix) => (0, import_visitors_core31.visit)(ix, self))
|
|
3339
|
+
]);
|
|
2771
3340
|
},
|
|
2772
3341
|
visitRoot(node, { self }) {
|
|
2773
3342
|
const isNotInternal = (n) => !internalNodes.includes(n.name);
|
|
@@ -2790,9 +3359,10 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2790
3359
|
programsWithErrorsToExport,
|
|
2791
3360
|
root: node
|
|
2792
3361
|
};
|
|
2793
|
-
|
|
3362
|
+
let renders = (0, import_renderers_core13.renderMap)();
|
|
2794
3363
|
if (hasAnythingToExport) {
|
|
2795
|
-
|
|
3364
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3365
|
+
renders,
|
|
2796
3366
|
"shared/index.ts",
|
|
2797
3367
|
render2("sharedPage.njk", {
|
|
2798
3368
|
...ctx,
|
|
@@ -2813,28 +3383,36 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2813
3383
|
);
|
|
2814
3384
|
}
|
|
2815
3385
|
if (programsToExport.length > 0) {
|
|
2816
|
-
|
|
3386
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "programs/index.ts", render2("programsIndex.njk", ctx));
|
|
2817
3387
|
}
|
|
2818
3388
|
if (programsWithErrorsToExport.length > 0) {
|
|
2819
|
-
|
|
3389
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "errors/index.ts", render2("errorsIndex.njk", ctx));
|
|
2820
3390
|
}
|
|
2821
3391
|
if (accountsToExport.length > 0) {
|
|
2822
|
-
|
|
3392
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "accounts/index.ts", render2("accountsIndex.njk", ctx));
|
|
2823
3393
|
}
|
|
2824
3394
|
if (pdasToExport.length > 0) {
|
|
2825
|
-
|
|
3395
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "pdas/index.ts", render2("pdasIndex.njk", ctx));
|
|
2826
3396
|
}
|
|
2827
3397
|
if (instructionsToExport.length > 0) {
|
|
2828
|
-
|
|
3398
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3399
|
+
renders,
|
|
3400
|
+
"instructions/index.ts",
|
|
3401
|
+
render2("instructionsIndex.njk", ctx)
|
|
3402
|
+
);
|
|
2829
3403
|
}
|
|
2830
3404
|
if (definedTypesToExport.length > 0) {
|
|
2831
|
-
|
|
3405
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "types/index.ts", render2("definedTypesIndex.njk", ctx));
|
|
2832
3406
|
}
|
|
2833
|
-
return
|
|
3407
|
+
return (0, import_visitors_core31.pipe)(
|
|
3408
|
+
renders,
|
|
3409
|
+
(r) => (0, import_renderers_core13.addToRenderMap)(r, "index.ts", render2("rootIndex.njk", ctx)),
|
|
3410
|
+
(r) => (0, import_renderers_core13.mergeRenderMaps)([r, ...(0, import_nodes26.getAllPrograms)(node).map((p) => (0, import_visitors_core31.visit)(p, self))])
|
|
3411
|
+
);
|
|
2834
3412
|
}
|
|
2835
3413
|
}),
|
|
2836
|
-
(v) => (0,
|
|
2837
|
-
(v) => (0,
|
|
3414
|
+
(v) => (0, import_visitors_core31.recordNodeStackVisitor)(v, stack),
|
|
3415
|
+
(v) => (0, import_visitors_core31.recordLinkablesOnFirstVisitVisitor)(v, linkables)
|
|
2838
3416
|
);
|
|
2839
3417
|
}
|
|
2840
3418
|
function getRenamedArgsMap(instruction) {
|
|
@@ -2856,8 +3434,8 @@ function getRenamedArgsMap(instruction) {
|
|
|
2856
3434
|
}
|
|
2857
3435
|
|
|
2858
3436
|
// src/renderVisitor.ts
|
|
2859
|
-
var
|
|
2860
|
-
var
|
|
3437
|
+
var import_renderers_core14 = require("@codama/renderers-core");
|
|
3438
|
+
var import_visitors_core32 = require("@codama/visitors-core");
|
|
2861
3439
|
var estreePlugin = __toESM(require("prettier/plugins/estree"));
|
|
2862
3440
|
var typeScriptPlugin = __toESM(require("prettier/plugins/typescript"));
|
|
2863
3441
|
var import_standalone = require("prettier/standalone");
|
|
@@ -2873,16 +3451,16 @@ var DEFAULT_PRETTIER_OPTIONS = {
|
|
|
2873
3451
|
useTabs: false
|
|
2874
3452
|
};
|
|
2875
3453
|
function renderVisitor(path, options = {}) {
|
|
2876
|
-
return (0,
|
|
3454
|
+
return (0, import_visitors_core32.rootNodeVisitor)(async (root) => {
|
|
2877
3455
|
if (options.deleteFolderBeforeRendering ?? true) {
|
|
2878
|
-
(0,
|
|
3456
|
+
(0, import_renderers_core14.deleteDirectory)(path);
|
|
2879
3457
|
}
|
|
2880
|
-
|
|
3458
|
+
let renderMap2 = (0, import_visitors_core32.visit)(root, getRenderMapVisitor(options));
|
|
2881
3459
|
if (options.formatCode ?? true) {
|
|
2882
3460
|
const prettierOptions = { ...DEFAULT_PRETTIER_OPTIONS, ...options.prettierOptions };
|
|
2883
|
-
await
|
|
3461
|
+
renderMap2 = await (0, import_renderers_core14.mapRenderMapContentAsync)(renderMap2, (code) => (0, import_standalone.format)(code, prettierOptions));
|
|
2884
3462
|
}
|
|
2885
|
-
|
|
3463
|
+
(0, import_renderers_core14.writeRenderMap)(renderMap2, path);
|
|
2886
3464
|
});
|
|
2887
3465
|
}
|
|
2888
3466
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -2892,7 +3470,7 @@ function renderVisitor(path, options = {}) {
|
|
|
2892
3470
|
getNameApi,
|
|
2893
3471
|
getRenderMapVisitor,
|
|
2894
3472
|
getTypeManifestVisitor,
|
|
2895
|
-
|
|
3473
|
+
mergeTypeManifests,
|
|
2896
3474
|
renderVisitor,
|
|
2897
3475
|
typeManifest
|
|
2898
3476
|
});
|