@codama/renderers-js 1.3.4 → 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 -966
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +1459 -879
- package/dist/index.node.mjs.map +1 -1
- package/dist/templates/fragments/instructionExtraArgs.njk +1 -1
- package/dist/templates/fragments/pdaFunction.njk +3 -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,39 +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
|
-
|
|
1581
|
-
|
|
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
|
+
);
|
|
1582
1785
|
}
|
|
1583
1786
|
|
|
1584
1787
|
// src/fragments/program.ts
|
|
1788
|
+
var import_visitors_core25 = require("@codama/visitors-core");
|
|
1585
1789
|
function getProgramFragment(scope) {
|
|
1586
1790
|
const { programNode, nameApi } = scope;
|
|
1587
|
-
return
|
|
1588
|
-
program
|
|
1589
|
-
|
|
1590
|
-
|
|
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
|
+
);
|
|
1591
1798
|
}
|
|
1592
1799
|
|
|
1593
1800
|
// src/fragments/programAccounts.ts
|
|
1594
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");
|
|
1595
1804
|
function getProgramAccountsFragment(scope) {
|
|
1596
1805
|
if (scope.programNode.accounts.length === 0) return fragment("");
|
|
1597
1806
|
return mergeFragments(
|
|
1598
1807
|
[getProgramAccountsEnumFragment(scope), getProgramAccountsIdentifierFunctionFragment(scope)],
|
|
1599
|
-
(
|
|
1808
|
+
(c) => `${c.join("\n\n")}
|
|
1600
1809
|
`
|
|
1601
1810
|
);
|
|
1602
1811
|
}
|
|
@@ -1617,46 +1826,59 @@ function getProgramAccountsIdentifierFunctionFragment(scope) {
|
|
|
1617
1826
|
if (!hasAccountDiscriminators) return fragment("");
|
|
1618
1827
|
const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);
|
|
1619
1828
|
const programAccountsIdentifierFunction = nameApi.programAccountsIdentifierFunction(programNode.name);
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
(
|
|
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} {
|
|
1635
1846
|
const data = 'data' in account ? account.data : account;
|
|
1636
1847
|
${discriminators}
|
|
1637
1848
|
throw new Error("The provided account could not be identified as a ${programNode.name} account.")
|
|
1638
1849
|
}`
|
|
1639
|
-
|
|
1850
|
+
),
|
|
1851
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["type ReadonlyUint8Array"])
|
|
1852
|
+
);
|
|
1640
1853
|
}
|
|
1641
1854
|
|
|
1642
1855
|
// src/fragments/programErrors.ts
|
|
1856
|
+
var import_visitors_core27 = require("@codama/visitors-core");
|
|
1643
1857
|
function getProgramErrorsFragment(scope) {
|
|
1644
1858
|
const { programNode, nameApi } = scope;
|
|
1645
1859
|
const programAddressConstant = nameApi.programAddressConstant(programNode.name);
|
|
1646
|
-
return
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
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
|
+
);
|
|
1656
1876
|
}
|
|
1657
1877
|
|
|
1658
1878
|
// src/fragments/programInstructions.ts
|
|
1659
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");
|
|
1660
1882
|
function getProgramInstructionsFragment(scope) {
|
|
1661
1883
|
if (scope.programNode.instructions.length === 0) return fragment("");
|
|
1662
1884
|
const allInstructions = (0, import_nodes22.getAllInstructionsWithSubs)(scope.programNode, {
|
|
@@ -1670,7 +1892,7 @@ function getProgramInstructionsFragment(scope) {
|
|
|
1670
1892
|
getProgramInstructionsIdentifierFunctionFragment(scopeWithInstructions),
|
|
1671
1893
|
getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions)
|
|
1672
1894
|
],
|
|
1673
|
-
(
|
|
1895
|
+
(c) => `${c.join("\n\n")}
|
|
1674
1896
|
`
|
|
1675
1897
|
);
|
|
1676
1898
|
}
|
|
@@ -1704,15 +1926,20 @@ function getProgramInstructionsIdentifierFunctionFragment(scope) {
|
|
|
1704
1926
|
struct: (0, import_nodes22.structTypeNodeFromInstructionArgumentNodes)(instruction.arguments)
|
|
1705
1927
|
});
|
|
1706
1928
|
}),
|
|
1707
|
-
(
|
|
1929
|
+
(c) => c.join("\n")
|
|
1708
1930
|
);
|
|
1709
|
-
return
|
|
1710
|
-
|
|
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} {
|
|
1711
1936
|
const data = 'data' in instruction ? instruction.data : instruction;
|
|
1712
1937
|
${discriminators}
|
|
1713
1938
|
throw new Error("The provided instruction could not be identified as a ${programNode.name} instruction.")
|
|
1714
1939
|
}`
|
|
1715
|
-
|
|
1940
|
+
),
|
|
1941
|
+
(f) => addFragmentImports(f, "solanaCodecsCore", ["type ReadonlyUint8Array"])
|
|
1942
|
+
);
|
|
1716
1943
|
}
|
|
1717
1944
|
function getProgramInstructionsParsedUnionTypeFragment(scope) {
|
|
1718
1945
|
const { programNode, allInstructions, nameApi } = scope;
|
|
@@ -1722,128 +1949,107 @@ function getProgramInstructionsParsedUnionTypeFragment(scope) {
|
|
|
1722
1949
|
const typeVariants = allInstructions.map((instruction) => {
|
|
1723
1950
|
const instructionEnumVariant = nameApi.programInstructionsEnumVariant(instruction.name);
|
|
1724
1951
|
const parsedInstructionType = nameApi.instructionParsedType(instruction.name);
|
|
1725
|
-
return
|
|
1726
|
-
|
|
1727
|
-
|
|
1952
|
+
return (0, import_visitors_core28.pipe)(
|
|
1953
|
+
fragment(
|
|
1954
|
+
`| { instructionType: ${programInstructionsEnum}.${instructionEnumVariant} } & ${parsedInstructionType}<TProgram>`
|
|
1955
|
+
),
|
|
1956
|
+
(f) => addFragmentImports(f, "generatedInstructions", [`type ${parsedInstructionType}`])
|
|
1957
|
+
);
|
|
1728
1958
|
});
|
|
1729
1959
|
return mergeFragments(
|
|
1730
1960
|
[
|
|
1731
1961
|
fragment(`export type ${programInstructionsType}<TProgram extends string = '${programAddress}'> =`),
|
|
1732
1962
|
...typeVariants
|
|
1733
1963
|
],
|
|
1734
|
-
(
|
|
1964
|
+
(c) => c.join("\n")
|
|
1735
1965
|
);
|
|
1736
1966
|
}
|
|
1737
1967
|
|
|
1738
1968
|
// src/fragments/typeDiscriminatedUnionHelpers.ts
|
|
1739
1969
|
var import_nodes23 = require("@codama/nodes");
|
|
1970
|
+
var import_visitors_core29 = require("@codama/visitors-core");
|
|
1740
1971
|
function getTypeDiscriminatedUnionHelpersFragment(scope) {
|
|
1741
1972
|
const { name, typeNode, nameApi } = scope;
|
|
1742
1973
|
const isDiscriminatedUnion = (0, import_nodes23.isNode)(typeNode, "enumTypeNode") && (0, import_nodes23.isDataEnum)(typeNode);
|
|
1743
1974
|
if (!isDiscriminatedUnion) {
|
|
1744
1975
|
return fragment("");
|
|
1745
1976
|
}
|
|
1746
|
-
return
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
"
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
function typeManifest() {
|
|
1762
|
-
return {
|
|
1763
|
-
decoder: fragment(""),
|
|
1764
|
-
encoder: fragment(""),
|
|
1765
|
-
isEnum: false,
|
|
1766
|
-
looseType: fragment(""),
|
|
1767
|
-
strictType: fragment(""),
|
|
1768
|
-
value: fragment("")
|
|
1769
|
-
};
|
|
1770
|
-
}
|
|
1771
|
-
function mergeManifests(manifests, options = {}) {
|
|
1772
|
-
const { mergeTypes, mergeCodecs, mergeValues } = options;
|
|
1773
|
-
const merge = (fragmentFn, mergeFn) => mergeFn ? mergeFragments(manifests.map(fragmentFn), mergeFn) : fragment("");
|
|
1774
|
-
return {
|
|
1775
|
-
decoder: merge((m) => m.decoder, mergeCodecs),
|
|
1776
|
-
encoder: merge((m) => m.encoder, mergeCodecs),
|
|
1777
|
-
isEnum: false,
|
|
1778
|
-
looseType: merge((m) => m.looseType, mergeTypes),
|
|
1779
|
-
strictType: merge((m) => m.strictType, mergeTypes),
|
|
1780
|
-
value: merge((m) => m.value, mergeValues)
|
|
1781
|
-
};
|
|
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
|
+
);
|
|
1782
1992
|
}
|
|
1783
1993
|
|
|
1784
|
-
// src/getRenderMapVisitor.ts
|
|
1785
|
-
var import_node_path3 = require("path");
|
|
1786
|
-
var import_errors2 = require("@codama/errors");
|
|
1787
|
-
var import_nodes26 = require("@codama/nodes");
|
|
1788
|
-
var import_renderers_core = require("@codama/renderers-core");
|
|
1789
|
-
var import_visitors_core21 = require("@codama/visitors-core");
|
|
1790
|
-
|
|
1791
1994
|
// src/getTypeManifestVisitor.ts
|
|
1792
1995
|
var import_nodes24 = require("@codama/nodes");
|
|
1793
|
-
var
|
|
1996
|
+
var import_renderers_core12 = require("@codama/renderers-core");
|
|
1997
|
+
var import_visitors_core30 = require("@codama/visitors-core");
|
|
1794
1998
|
function getTypeManifestVisitor(input) {
|
|
1795
1999
|
const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;
|
|
1796
|
-
const stack = input.stack ?? new
|
|
2000
|
+
const stack = input.stack ?? new import_visitors_core30.NodeStack();
|
|
1797
2001
|
let parentName = null;
|
|
1798
|
-
return (0,
|
|
1799
|
-
(0,
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
...import_nodes24.REGISTERED_TYPE_NODE_KINDS,
|
|
1811
|
-
...import_nodes24.REGISTERED_VALUE_NODE_KINDS,
|
|
1812
|
-
"definedTypeLinkNode",
|
|
1813
|
-
"definedTypeNode",
|
|
1814
|
-
"accountNode",
|
|
1815
|
-
"instructionNode"
|
|
1816
|
-
]
|
|
1817
|
-
}
|
|
1818
|
-
),
|
|
1819
|
-
(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, {
|
|
1820
2014
|
visitAccount(account, { self }) {
|
|
1821
2015
|
parentName = {
|
|
1822
2016
|
loose: nameApi.dataArgsType(account.name),
|
|
1823
2017
|
strict: nameApi.dataType(account.name)
|
|
1824
2018
|
};
|
|
1825
2019
|
const link = customAccountData.get(account.name)?.linkNode;
|
|
1826
|
-
const manifest = link ? (0,
|
|
2020
|
+
const manifest = link ? (0, import_visitors_core30.visit)(link, self) : (0, import_visitors_core30.visit)(account.data, self);
|
|
1827
2021
|
parentName = null;
|
|
1828
2022
|
return manifest;
|
|
1829
2023
|
},
|
|
1830
2024
|
visitAmountType(amountType, { self }) {
|
|
1831
|
-
return (0,
|
|
2025
|
+
return (0, import_visitors_core30.visit)(amountType.number, self);
|
|
1832
2026
|
},
|
|
1833
2027
|
visitArrayType(arrayType, { self }) {
|
|
1834
|
-
const childManifest = (0,
|
|
1835
|
-
childManifest.looseType.mapRender((r) => `Array<${r}>`);
|
|
1836
|
-
childManifest.strictType.mapRender((r) => `Array<${r}>`);
|
|
2028
|
+
const childManifest = (0, import_visitors_core30.visit)(arrayType.item, self);
|
|
1837
2029
|
const sizeManifest = getArrayLikeSizeOption(arrayType.count, self);
|
|
1838
|
-
const encoderOptions = sizeManifest.encoder.
|
|
1839
|
-
const decoderOptions = sizeManifest.decoder.
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
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
|
+
});
|
|
1843
2049
|
},
|
|
1844
2050
|
visitArrayValue(node, { self }) {
|
|
1845
|
-
return
|
|
1846
|
-
node.items.map((v) => (0,
|
|
2051
|
+
return mergeTypeManifests(
|
|
2052
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
1847
2053
|
{ mergeValues: (renders) => `[${renders.join(", ")}]` }
|
|
1848
2054
|
);
|
|
1849
2055
|
},
|
|
@@ -1854,75 +2060,74 @@ function getTypeManifestVisitor(input) {
|
|
|
1854
2060
|
let sizeDecoder = "";
|
|
1855
2061
|
const resolvedSize = (0, import_nodes24.resolveNestedTypeNode)(booleanType.size);
|
|
1856
2062
|
if (resolvedSize.format !== "u8" || resolvedSize.endian !== "le") {
|
|
1857
|
-
const size = (0,
|
|
2063
|
+
const size = (0, import_visitors_core30.visit)(booleanType.size, self);
|
|
1858
2064
|
encoderImports.mergeWith(size.encoder);
|
|
1859
2065
|
decoderImports.mergeWith(size.decoder);
|
|
1860
|
-
sizeEncoder = `{ size: ${size.encoder.
|
|
1861
|
-
sizeDecoder = `{ size: ${size.decoder.
|
|
2066
|
+
sizeEncoder = `{ size: ${size.encoder.content} }`;
|
|
2067
|
+
sizeDecoder = `{ size: ${size.decoder.content} }`;
|
|
1862
2068
|
}
|
|
1863
|
-
return {
|
|
1864
|
-
decoder:
|
|
1865
|
-
|
|
1866
|
-
|
|
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
|
+
),
|
|
1867
2078
|
looseType: fragment("boolean"),
|
|
1868
|
-
strictType: fragment("boolean")
|
|
1869
|
-
|
|
1870
|
-
};
|
|
2079
|
+
strictType: fragment("boolean")
|
|
2080
|
+
});
|
|
1871
2081
|
},
|
|
1872
2082
|
visitBooleanValue(node) {
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
2083
|
+
return typeManifest({
|
|
2084
|
+
value: fragment(JSON.stringify(node.boolean))
|
|
2085
|
+
});
|
|
1876
2086
|
},
|
|
1877
2087
|
visitBytesType() {
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
"
|
|
1886
|
-
),
|
|
1887
|
-
isEnum: false,
|
|
1888
|
-
looseType: fragment("ReadonlyUint8Array").addImports(
|
|
1889
|
-
"solanaCodecsCore",
|
|
1890
|
-
"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"])
|
|
1891
2096
|
),
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
"
|
|
2097
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2098
|
+
fragment(`getBytesEncoder()`),
|
|
2099
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getBytesEncoder"])
|
|
1895
2100
|
),
|
|
1896
|
-
|
|
1897
|
-
|
|
2101
|
+
looseType: readonlyUint8Array,
|
|
2102
|
+
strictType: readonlyUint8Array
|
|
2103
|
+
});
|
|
1898
2104
|
},
|
|
1899
2105
|
visitBytesValue(node) {
|
|
1900
|
-
const manifest = typeManifest();
|
|
1901
2106
|
const bytes = getBytesFromBytesValueNode(node);
|
|
1902
|
-
|
|
1903
|
-
|
|
2107
|
+
return typeManifest({
|
|
2108
|
+
value: fragment(`new Uint8Array([${Array.from(bytes).join(", ")}])`)
|
|
2109
|
+
});
|
|
1904
2110
|
},
|
|
1905
2111
|
visitConstantValue(node, { self }) {
|
|
1906
2112
|
if ((0, import_nodes24.isNode)(node.type, "bytesTypeNode") && (0, import_nodes24.isNode)(node.value, "bytesValueNode")) {
|
|
1907
|
-
return (0,
|
|
2113
|
+
return (0, import_visitors_core30.visit)(node.value, self);
|
|
1908
2114
|
}
|
|
1909
|
-
return {
|
|
1910
|
-
...typeManifest(),
|
|
2115
|
+
return typeManifest({
|
|
1911
2116
|
value: mergeFragments(
|
|
1912
|
-
[(0,
|
|
2117
|
+
[(0, import_visitors_core30.visit)(node.type, self).encoder, (0, import_visitors_core30.visit)(node.value, self).value],
|
|
1913
2118
|
([encoderFunction, value]) => `${encoderFunction}.encode(${value})`
|
|
1914
2119
|
)
|
|
1915
|
-
};
|
|
2120
|
+
});
|
|
1916
2121
|
},
|
|
1917
2122
|
visitDateTimeType(dateTimeType, { self }) {
|
|
1918
|
-
return (0,
|
|
2123
|
+
return (0, import_visitors_core30.visit)(dateTimeType.number, self);
|
|
1919
2124
|
},
|
|
1920
2125
|
visitDefinedType(definedType, { self }) {
|
|
1921
2126
|
parentName = {
|
|
1922
2127
|
loose: nameApi.dataArgsType(definedType.name),
|
|
1923
2128
|
strict: nameApi.dataType(definedType.name)
|
|
1924
2129
|
};
|
|
1925
|
-
const manifest = (0,
|
|
2130
|
+
const manifest = (0, import_visitors_core30.visit)(definedType.type, self);
|
|
1926
2131
|
parentName = null;
|
|
1927
2132
|
return manifest;
|
|
1928
2133
|
},
|
|
@@ -1932,33 +2137,41 @@ function getTypeManifestVisitor(input) {
|
|
|
1932
2137
|
const encoderFunction = nameApi.encoderFunction(node.name);
|
|
1933
2138
|
const decoderFunction = nameApi.decoderFunction(node.name);
|
|
1934
2139
|
const importFrom = getImportFrom(node);
|
|
1935
|
-
return {
|
|
1936
|
-
decoder:
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
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
|
+
});
|
|
1943
2158
|
},
|
|
1944
2159
|
visitEnumEmptyVariantType(enumEmptyVariantType) {
|
|
1945
2160
|
const discriminator = nameApi.discriminatedUnionDiscriminator((0, import_nodes24.camelCase)(parentName?.strict ?? ""));
|
|
1946
2161
|
const name = nameApi.discriminatedUnionVariant(enumEmptyVariantType.name);
|
|
1947
2162
|
const kindAttribute = `${discriminator}: "${name}"`;
|
|
1948
|
-
return {
|
|
1949
|
-
decoder:
|
|
1950
|
-
|
|
1951
|
-
"getUnitDecoder"
|
|
2163
|
+
return typeManifest({
|
|
2164
|
+
decoder: (0, import_visitors_core30.pipe)(
|
|
2165
|
+
fragment(`['${name}', getUnitDecoder()]`),
|
|
2166
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getUnitDecoder"])
|
|
1952
2167
|
),
|
|
1953
|
-
encoder:
|
|
1954
|
-
|
|
1955
|
-
"getUnitEncoder"
|
|
2168
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2169
|
+
fragment(`['${name}', getUnitEncoder()]`),
|
|
2170
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getUnitEncoder"])
|
|
1956
2171
|
),
|
|
1957
|
-
isEnum: false,
|
|
1958
2172
|
looseType: fragment(`{ ${kindAttribute} }`),
|
|
1959
|
-
strictType: fragment(`{ ${kindAttribute} }`)
|
|
1960
|
-
|
|
1961
|
-
};
|
|
2173
|
+
strictType: fragment(`{ ${kindAttribute} }`)
|
|
2174
|
+
});
|
|
1962
2175
|
},
|
|
1963
2176
|
visitEnumStructVariantType(enumStructVariantType, { self }) {
|
|
1964
2177
|
const currentParentName = parentName;
|
|
@@ -1968,13 +2181,21 @@ function getTypeManifestVisitor(input) {
|
|
|
1968
2181
|
const name = nameApi.discriminatedUnionVariant(enumStructVariantType.name);
|
|
1969
2182
|
const kindAttribute = `${discriminator}: "${name}"`;
|
|
1970
2183
|
parentName = null;
|
|
1971
|
-
const structManifest = (0,
|
|
2184
|
+
const structManifest = (0, import_visitors_core30.visit)(enumStructVariantType.struct, self);
|
|
1972
2185
|
parentName = currentParentName;
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
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
|
+
});
|
|
1978
2199
|
},
|
|
1979
2200
|
visitEnumTupleVariantType(enumTupleVariantType, { self }) {
|
|
1980
2201
|
const currentParentName = parentName;
|
|
@@ -1990,13 +2211,21 @@ function getTypeManifestVisitor(input) {
|
|
|
1990
2211
|
})
|
|
1991
2212
|
]);
|
|
1992
2213
|
parentName = null;
|
|
1993
|
-
const structManifest = (0,
|
|
2214
|
+
const structManifest = (0, import_visitors_core30.visit)(struct, self);
|
|
1994
2215
|
parentName = currentParentName;
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
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
|
+
});
|
|
2000
2229
|
},
|
|
2001
2230
|
visitEnumType(enumType, { self }) {
|
|
2002
2231
|
const currentParentName = parentName;
|
|
@@ -2006,11 +2235,11 @@ function getTypeManifestVisitor(input) {
|
|
|
2006
2235
|
const decoderOptions = [];
|
|
2007
2236
|
const enumSize = (0, import_nodes24.resolveNestedTypeNode)(enumType.size);
|
|
2008
2237
|
if (enumSize.format !== "u8" || enumSize.endian !== "le") {
|
|
2009
|
-
const sizeManifest = (0,
|
|
2238
|
+
const sizeManifest = (0, import_visitors_core30.visit)(enumType.size, self);
|
|
2010
2239
|
encoderImports.mergeWith(sizeManifest.encoder);
|
|
2011
2240
|
decoderImports.mergeWith(sizeManifest.decoder);
|
|
2012
|
-
encoderOptions.push(`size: ${sizeManifest.encoder.
|
|
2013
|
-
decoderOptions.push(`size: ${sizeManifest.decoder.
|
|
2241
|
+
encoderOptions.push(`size: ${sizeManifest.encoder.content}`);
|
|
2242
|
+
decoderOptions.push(`size: ${sizeManifest.decoder.content}`);
|
|
2014
2243
|
}
|
|
2015
2244
|
const discriminator = nameApi.discriminatedUnionDiscriminator(
|
|
2016
2245
|
(0, import_nodes24.camelCase)(currentParentName?.strict ?? "")
|
|
@@ -2028,31 +2257,50 @@ function getTypeManifestVisitor(input) {
|
|
|
2028
2257
|
);
|
|
2029
2258
|
}
|
|
2030
2259
|
const variantNames = enumType.variants.map(({ name }) => nameApi.enumVariant(name));
|
|
2031
|
-
return {
|
|
2032
|
-
decoder:
|
|
2033
|
-
`getEnumDecoder(${currentParentName.strict + decoderOptionsAsString})
|
|
2034
|
-
|
|
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"])
|
|
2035
2265
|
),
|
|
2036
|
-
encoder:
|
|
2037
|
-
`getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})
|
|
2038
|
-
|
|
2266
|
+
encoder: (0, import_visitors_core30.pipe)(
|
|
2267
|
+
fragment(`getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})`),
|
|
2268
|
+
(f) => mergeFragmentImports(f, [encoderImports]),
|
|
2269
|
+
(f) => addFragmentImports(f, "solanaCodecsDataStructures", ["getEnumEncoder"])
|
|
2039
2270
|
),
|
|
2040
2271
|
isEnum: true,
|
|
2041
2272
|
looseType: fragment(`{ ${variantNames.join(", ")} }`),
|
|
2042
|
-
strictType: fragment(`{ ${variantNames.join(", ")} }`)
|
|
2043
|
-
|
|
2044
|
-
};
|
|
2273
|
+
strictType: fragment(`{ ${variantNames.join(", ")} }`)
|
|
2274
|
+
});
|
|
2045
2275
|
}
|
|
2046
|
-
const mergedManifest =
|
|
2047
|
-
enumType.variants.map((variant) => (0,
|
|
2276
|
+
const mergedManifest = mergeTypeManifests(
|
|
2277
|
+
enumType.variants.map((variant) => (0, import_visitors_core30.visit)(variant, self)),
|
|
2048
2278
|
{
|
|
2049
2279
|
mergeCodecs: (renders) => renders.join(", "),
|
|
2050
2280
|
mergeTypes: (renders) => renders.join(" | ")
|
|
2051
2281
|
}
|
|
2052
2282
|
);
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
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
|
+
});
|
|
2056
2304
|
},
|
|
2057
2305
|
visitEnumValue(node, { self }) {
|
|
2058
2306
|
const manifest = typeManifest();
|
|
@@ -2063,40 +2311,108 @@ function getTypeManifestVisitor(input) {
|
|
|
2063
2311
|
const isScalar = enumNode && (0, import_nodes24.isNode)(enumNode, "enumTypeNode") ? (0, import_nodes24.isScalarEnum)(enumNode) : !nonScalarEnums.includes(node.enum.name);
|
|
2064
2312
|
if (!node.value && isScalar) {
|
|
2065
2313
|
const variantName2 = nameApi.enumVariant(node.variant);
|
|
2066
|
-
|
|
2067
|
-
|
|
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
|
+
});
|
|
2068
2322
|
}
|
|
2069
2323
|
const variantName = nameApi.discriminatedUnionVariant(node.variant);
|
|
2070
2324
|
if (!node.value) {
|
|
2071
|
-
|
|
2072
|
-
|
|
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
|
+
});
|
|
2073
2333
|
}
|
|
2074
|
-
|
|
2075
|
-
|
|
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
|
+
});
|
|
2076
2342
|
},
|
|
2077
2343
|
visitFixedSizeType(node, { self }) {
|
|
2078
|
-
const manifest = (0,
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
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
|
+
});
|
|
2082
2358
|
},
|
|
2083
2359
|
visitHiddenPrefixType(node, { self }) {
|
|
2084
|
-
const manifest = (0,
|
|
2085
|
-
const prefixes = node.prefix.map((c) => (0,
|
|
2086
|
-
const prefixEncoders =
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
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
|
+
});
|
|
2091
2387
|
},
|
|
2092
2388
|
visitHiddenSuffixType(node, { self }) {
|
|
2093
|
-
const manifest = (0,
|
|
2094
|
-
const suffixes = node.suffix.map((c) => (0,
|
|
2095
|
-
const suffixEncoders =
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
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
|
+
});
|
|
2100
2416
|
},
|
|
2101
2417
|
visitInstruction(instruction, { self }) {
|
|
2102
2418
|
const instructionDataName = nameApi.instructionDataType(instruction.name);
|
|
@@ -2106,39 +2422,49 @@ function getTypeManifestVisitor(input) {
|
|
|
2106
2422
|
};
|
|
2107
2423
|
const link = customInstructionData.get(instruction.name)?.linkNode;
|
|
2108
2424
|
const struct = (0, import_nodes24.structTypeNodeFromInstructionArgumentNodes)(instruction.arguments);
|
|
2109
|
-
const manifest = link ? (0,
|
|
2425
|
+
const manifest = link ? (0, import_visitors_core30.visit)(link, self) : (0, import_visitors_core30.visit)(struct, self);
|
|
2110
2426
|
parentName = null;
|
|
2111
2427
|
return manifest;
|
|
2112
2428
|
},
|
|
2113
2429
|
visitMapEntryValue(node, { self }) {
|
|
2114
|
-
return
|
|
2430
|
+
return mergeTypeManifests([(0, import_visitors_core30.visit)(node.key, self), (0, import_visitors_core30.visit)(node.value, self)], {
|
|
2115
2431
|
mergeValues: (renders) => `[${renders.join(", ")}]`
|
|
2116
2432
|
});
|
|
2117
2433
|
},
|
|
2118
2434
|
visitMapType(mapType, { self }) {
|
|
2119
|
-
const key = (0,
|
|
2120
|
-
const value = (0,
|
|
2121
|
-
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], {
|
|
2122
2438
|
mergeCodecs: ([k, v]) => `${k}, ${v}`,
|
|
2123
2439
|
mergeTypes: ([k, v]) => `Map<${k}, ${v}>`
|
|
2124
2440
|
});
|
|
2125
2441
|
const sizeManifest = getArrayLikeSizeOption(mapType.count, self);
|
|
2126
|
-
const encoderOptions = sizeManifest.encoder.
|
|
2127
|
-
const decoderOptions = sizeManifest.decoder.
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
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
|
+
});
|
|
2131
2457
|
},
|
|
2132
2458
|
visitMapValue(node, { self }) {
|
|
2133
|
-
const entryFragments = node.entries.map((entry) => (0,
|
|
2134
|
-
return
|
|
2459
|
+
const entryFragments = node.entries.map((entry) => (0, import_visitors_core30.visit)(entry, self));
|
|
2460
|
+
return mergeTypeManifests(entryFragments, {
|
|
2135
2461
|
mergeValues: (renders) => `new Map([${renders.join(", ")}])`
|
|
2136
2462
|
});
|
|
2137
2463
|
},
|
|
2138
2464
|
visitNoneValue() {
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2465
|
+
return typeManifest({
|
|
2466
|
+
value: (0, import_visitors_core30.pipe)(fragment("none()"), (f) => addFragmentImports(f, "solanaOptions", ["none"]))
|
|
2467
|
+
});
|
|
2142
2468
|
},
|
|
2143
2469
|
visitNumberType(numberType) {
|
|
2144
2470
|
const encoderFunction = nameApi.encoderFunction(numberType.format);
|
|
@@ -2152,33 +2478,37 @@ function getTypeManifestVisitor(input) {
|
|
|
2152
2478
|
decoderImports.add("solanaCodecsNumbers", "Endian");
|
|
2153
2479
|
endianness = "{ endian: Endian.Big }";
|
|
2154
2480
|
}
|
|
2155
|
-
return {
|
|
2156
|
-
decoder:
|
|
2157
|
-
|
|
2158
|
-
|
|
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
|
+
),
|
|
2159
2490
|
looseType: fragment(isBigNumber ? "number | bigint" : "number"),
|
|
2160
|
-
strictType: fragment(isBigNumber ? "bigint" : "number")
|
|
2161
|
-
|
|
2162
|
-
};
|
|
2491
|
+
strictType: fragment(isBigNumber ? "bigint" : "number")
|
|
2492
|
+
});
|
|
2163
2493
|
},
|
|
2164
2494
|
visitNumberValue(node) {
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2495
|
+
return typeManifest({
|
|
2496
|
+
value: fragment(JSON.stringify(node.number))
|
|
2497
|
+
});
|
|
2168
2498
|
},
|
|
2169
2499
|
visitOptionType(optionType, { self }) {
|
|
2170
|
-
const childManifest = (0,
|
|
2171
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2172
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2500
|
+
const childManifest = (0, import_visitors_core30.visit)(optionType.item, self);
|
|
2173
2501
|
const encoderOptions = [];
|
|
2174
2502
|
const decoderOptions = [];
|
|
2503
|
+
const encoderImports = new ImportMap();
|
|
2504
|
+
const decoderImports = new ImportMap();
|
|
2175
2505
|
const optionPrefix = (0, import_nodes24.resolveNestedTypeNode)(optionType.prefix);
|
|
2176
2506
|
if (optionPrefix.format !== "u8" || optionPrefix.endian !== "le") {
|
|
2177
|
-
const prefixManifest = (0,
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
encoderOptions.push(`prefix: ${prefixManifest.encoder.
|
|
2181
|
-
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}`);
|
|
2182
2512
|
}
|
|
2183
2513
|
if (optionType.fixed) {
|
|
2184
2514
|
encoderOptions.push(`noneValue: "zeroes"`);
|
|
@@ -2186,16 +2516,48 @@ function getTypeManifestVisitor(input) {
|
|
|
2186
2516
|
}
|
|
2187
2517
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2188
2518
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
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
|
+
});
|
|
2192
2544
|
},
|
|
2193
2545
|
visitPostOffsetType(node, { self }) {
|
|
2194
|
-
const manifest = (0,
|
|
2546
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2195
2547
|
if (node.strategy === "padded") {
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
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
|
+
});
|
|
2199
2561
|
}
|
|
2200
2562
|
const fn = (() => {
|
|
2201
2563
|
switch (node.strategy) {
|
|
@@ -2208,16 +2570,36 @@ function getTypeManifestVisitor(input) {
|
|
|
2208
2570
|
return node.offset < 0 ? `({ postOffset }) => postOffset ${node.offset}` : `({ postOffset }) => postOffset + ${node.offset}`;
|
|
2209
2571
|
}
|
|
2210
2572
|
})();
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
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
|
+
});
|
|
2214
2586
|
},
|
|
2215
2587
|
visitPreOffsetType(node, { self }) {
|
|
2216
|
-
const manifest = (0,
|
|
2588
|
+
const manifest = (0, import_visitors_core30.visit)(node.type, self);
|
|
2217
2589
|
if (node.strategy === "padded") {
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
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
|
+
});
|
|
2221
2603
|
}
|
|
2222
2604
|
const fn = (() => {
|
|
2223
2605
|
switch (node.strategy) {
|
|
@@ -2228,85 +2610,177 @@ function getTypeManifestVisitor(input) {
|
|
|
2228
2610
|
return node.offset < 0 ? `({ preOffset }) => preOffset ${node.offset}` : `({ preOffset }) => preOffset + ${node.offset}`;
|
|
2229
2611
|
}
|
|
2230
2612
|
})();
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
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
|
+
});
|
|
2234
2626
|
},
|
|
2235
2627
|
visitPublicKeyType() {
|
|
2236
|
-
const
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
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
|
+
});
|
|
2245
2644
|
},
|
|
2246
2645
|
visitPublicKeyValue(node) {
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2646
|
+
return typeManifest({
|
|
2647
|
+
value: (0, import_visitors_core30.pipe)(
|
|
2648
|
+
fragment(`address("${node.publicKey}")`),
|
|
2649
|
+
(f) => addFragmentImports(f, "solanaAddresses", ["address"])
|
|
2650
|
+
)
|
|
2651
|
+
});
|
|
2250
2652
|
},
|
|
2251
2653
|
visitRemainderOptionType(node, { self }) {
|
|
2252
|
-
const childManifest = (0,
|
|
2253
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2254
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2654
|
+
const childManifest = (0, import_visitors_core30.visit)(node.item, self);
|
|
2255
2655
|
const encoderOptions = ["prefix: null"];
|
|
2256
2656
|
const decoderOptions = ["prefix: null"];
|
|
2257
2657
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2258
2658
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
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
|
+
});
|
|
2262
2682
|
},
|
|
2263
2683
|
visitSentinelType(node, { self }) {
|
|
2264
|
-
const manifest = (0,
|
|
2265
|
-
const sentinel = (0,
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
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
|
+
});
|
|
2269
2703
|
},
|
|
2270
2704
|
visitSetType(setType, { self }) {
|
|
2271
|
-
const childManifest = (0,
|
|
2272
|
-
childManifest.strictType.mapRender((r) => `Set<${r}>`);
|
|
2273
|
-
childManifest.looseType.mapRender((r) => `Set<${r}>`);
|
|
2705
|
+
const childManifest = (0, import_visitors_core30.visit)(setType.item, self);
|
|
2274
2706
|
const sizeManifest = getArrayLikeSizeOption(setType.count, self);
|
|
2275
|
-
const encoderOptions = sizeManifest.encoder.
|
|
2276
|
-
const decoderOptions = sizeManifest.decoder.
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
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
|
+
});
|
|
2280
2726
|
},
|
|
2281
2727
|
visitSetValue(node, { self }) {
|
|
2282
|
-
return
|
|
2283
|
-
node.items.map((v) => (0,
|
|
2728
|
+
return mergeTypeManifests(
|
|
2729
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
2284
2730
|
{ mergeValues: (renders) => `new Set([${renders.join(", ")}])` }
|
|
2285
2731
|
);
|
|
2286
2732
|
},
|
|
2287
2733
|
visitSizePrefixType(node, { self }) {
|
|
2288
|
-
const manifest = (0,
|
|
2289
|
-
const prefix = (0,
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
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
|
+
});
|
|
2293
2753
|
},
|
|
2294
2754
|
visitSolAmountType({ number }, { self }) {
|
|
2295
|
-
const numberManifest = (0,
|
|
2296
|
-
const
|
|
2297
|
-
|
|
2298
|
-
|
|
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({
|
|
2299
2761
|
...numberManifest,
|
|
2300
|
-
decoder:
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
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
|
+
});
|
|
2305
2775
|
},
|
|
2306
2776
|
visitSomeValue(node, { self }) {
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
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
|
+
});
|
|
2310
2784
|
},
|
|
2311
2785
|
visitStringType(stringType) {
|
|
2312
2786
|
const [encoder, decoder] = (() => {
|
|
@@ -2323,66 +2797,109 @@ function getTypeManifestVisitor(input) {
|
|
|
2323
2797
|
throw new Error(`Unsupported string encoding: ${stringType.encoding}`);
|
|
2324
2798
|
}
|
|
2325
2799
|
})();
|
|
2326
|
-
return {
|
|
2327
|
-
decoder:
|
|
2328
|
-
|
|
2329
|
-
|
|
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
|
+
),
|
|
2330
2809
|
looseType: fragment("string"),
|
|
2331
|
-
strictType: fragment("string")
|
|
2332
|
-
|
|
2333
|
-
};
|
|
2810
|
+
strictType: fragment("string")
|
|
2811
|
+
});
|
|
2334
2812
|
},
|
|
2335
2813
|
visitStringValue(node) {
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2814
|
+
return typeManifest({
|
|
2815
|
+
value: fragment(JSON.stringify(node.string))
|
|
2816
|
+
});
|
|
2339
2817
|
},
|
|
2340
2818
|
visitStructFieldType(structFieldType, { self }) {
|
|
2341
2819
|
const name = (0, import_nodes24.camelCase)(structFieldType.name);
|
|
2342
|
-
const
|
|
2820
|
+
const originalChildManifest = (0, import_visitors_core30.visit)(structFieldType.type, self);
|
|
2343
2821
|
const structFieldDocs = (0, import_nodes24.parseDocs)(structFieldType.docs);
|
|
2344
2822
|
const docblock = structFieldDocs.length > 0 ? `
|
|
2345
2823
|
${jsDocblock(structFieldDocs)}` : "";
|
|
2346
|
-
const originalLooseType =
|
|
2347
|
-
childManifest
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
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
|
+
});
|
|
2351
2844
|
if (!structFieldType.defaultValue) {
|
|
2352
2845
|
return childManifest;
|
|
2353
2846
|
}
|
|
2354
2847
|
if (structFieldType.defaultValueStrategy !== "omitted") {
|
|
2355
|
-
|
|
2356
|
-
|
|
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
|
+
});
|
|
2357
2855
|
}
|
|
2358
|
-
|
|
2359
|
-
|
|
2856
|
+
return typeManifest({
|
|
2857
|
+
...childManifest,
|
|
2858
|
+
looseType: fragment("")
|
|
2859
|
+
});
|
|
2360
2860
|
},
|
|
2361
2861
|
visitStructFieldValue(node, { self }) {
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
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
|
+
});
|
|
2365
2868
|
},
|
|
2366
2869
|
visitStructType(structType, { self }) {
|
|
2367
2870
|
const optionalFields = structType.fields.filter((f) => !!f.defaultValue);
|
|
2368
|
-
const mergedManifest =
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
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
|
+
})
|
|
2374
2892
|
);
|
|
2375
|
-
mergedManifest.encoder.mapRender((r) => `getStructEncoder${r}`).addImports("solanaCodecsDataStructures", "getStructEncoder");
|
|
2376
|
-
mergedManifest.decoder.mapRender((r) => `getStructDecoder${r}`).addImports("solanaCodecsDataStructures", "getStructDecoder");
|
|
2377
2893
|
if (optionalFields.length === 0) {
|
|
2378
2894
|
return mergedManifest;
|
|
2379
2895
|
}
|
|
2380
2896
|
const parentPath = stack.getPath();
|
|
2381
|
-
const instructionNode = (0,
|
|
2382
|
-
const accountNode = (0,
|
|
2897
|
+
const instructionNode = (0, import_visitors_core30.findLastNodeFromPath)(parentPath, "instructionNode");
|
|
2898
|
+
const accountNode = (0, import_visitors_core30.findLastNodeFromPath)(parentPath, "accountNode");
|
|
2383
2899
|
const discriminatorPrefix = instructionNode ? instructionNode.name : accountNode?.name;
|
|
2384
2900
|
const discriminators = (instructionNode ? instructionNode.discriminators : accountNode?.discriminators) ?? [];
|
|
2385
2901
|
const fieldDiscriminators = discriminators.filter((0, import_nodes24.isNodeFilter)("fieldDiscriminatorNode"));
|
|
2902
|
+
const encoderImports = new ImportMap();
|
|
2386
2903
|
const defaultValues = optionalFields.map((f) => {
|
|
2387
2904
|
const key = (0, import_nodes24.camelCase)(f.name);
|
|
2388
2905
|
if (fieldDiscriminators.some((d) => d.name === f.name)) {
|
|
@@ -2390,59 +2907,101 @@ ${jsDocblock(structFieldDocs)}` : "";
|
|
|
2390
2907
|
return f.defaultValueStrategy === "omitted" ? `${key}: ${constantName}` : `${key}: value.${key} ?? ${constantName}`;
|
|
2391
2908
|
}
|
|
2392
2909
|
const defaultValue = f.defaultValue;
|
|
2393
|
-
const {
|
|
2394
|
-
|
|
2910
|
+
const { content: renderedValue, imports } = (0, import_visitors_core30.visit)(defaultValue, self).value;
|
|
2911
|
+
encoderImports.mergeWith(imports);
|
|
2395
2912
|
return f.defaultValueStrategy === "omitted" ? `${key}: ${renderedValue}` : `${key}: value.${key} ?? ${renderedValue}`;
|
|
2396
2913
|
}).join(", ");
|
|
2397
|
-
|
|
2398
|
-
|
|
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
|
+
});
|
|
2399
2926
|
},
|
|
2400
2927
|
visitStructValue(node, { self }) {
|
|
2401
|
-
return
|
|
2402
|
-
node.fields.map((field) => (0,
|
|
2928
|
+
return mergeTypeManifests(
|
|
2929
|
+
node.fields.map((field) => (0, import_visitors_core30.visit)(field, self)),
|
|
2403
2930
|
{ mergeValues: (renders) => `{ ${renders.join(", ")} }` }
|
|
2404
2931
|
);
|
|
2405
2932
|
},
|
|
2406
2933
|
visitTupleType(tupleType, { self }) {
|
|
2407
|
-
const items = tupleType.items.map((item) => (0,
|
|
2408
|
-
const mergedManifest =
|
|
2934
|
+
const items = tupleType.items.map((item) => (0, import_visitors_core30.visit)(item, self));
|
|
2935
|
+
const mergedManifest = mergeTypeManifests(items, {
|
|
2409
2936
|
mergeCodecs: (codecs) => `[${codecs.join(", ")}]`,
|
|
2410
2937
|
mergeTypes: (types) => `readonly [${types.join(", ")}]`
|
|
2411
2938
|
});
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
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
|
+
});
|
|
2415
2952
|
},
|
|
2416
2953
|
visitTupleValue(node, { self }) {
|
|
2417
|
-
return
|
|
2418
|
-
node.items.map((v) => (0,
|
|
2954
|
+
return mergeTypeManifests(
|
|
2955
|
+
node.items.map((v) => (0, import_visitors_core30.visit)(v, self)),
|
|
2419
2956
|
{ mergeValues: (renders) => `[${renders.join(", ")}]` }
|
|
2420
2957
|
);
|
|
2421
2958
|
},
|
|
2422
2959
|
visitZeroableOptionType(node, { self }) {
|
|
2423
|
-
const childManifest = (0,
|
|
2424
|
-
childManifest.strictType.mapRender((r) => `Option<${r}>`).addImports("solanaOptions", "type Option");
|
|
2425
|
-
childManifest.looseType.mapRender((r) => `OptionOrNullable<${r}>`).addImports("solanaOptions", "type OptionOrNullable");
|
|
2960
|
+
const childManifest = (0, import_visitors_core30.visit)(node.item, self);
|
|
2426
2961
|
const encoderOptions = ["prefix: null"];
|
|
2427
2962
|
const decoderOptions = ["prefix: null"];
|
|
2963
|
+
const encoderImports = new ImportMap();
|
|
2964
|
+
const decoderImports = new ImportMap();
|
|
2428
2965
|
if (node.zeroValue) {
|
|
2429
|
-
const zeroValueManifest = (0,
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
encoderOptions.push(`noneValue: ${zeroValueManifest.value.
|
|
2433
|
-
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}`);
|
|
2434
2971
|
} else {
|
|
2435
2972
|
encoderOptions.push(`noneValue: "zeroes"`);
|
|
2436
2973
|
decoderOptions.push(`noneValue: "zeroes"`);
|
|
2437
2974
|
}
|
|
2438
2975
|
const encoderOptionsAsString = encoderOptions.length > 0 ? `, { ${encoderOptions.join(", ")} }` : "";
|
|
2439
2976
|
const decoderOptionsAsString = decoderOptions.length > 0 ? `, { ${decoderOptions.join(", ")} }` : "";
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
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
|
+
});
|
|
2443
3002
|
}
|
|
2444
3003
|
}),
|
|
2445
|
-
(visitor) => (0,
|
|
3004
|
+
(visitor) => (0, import_visitors_core30.recordNodeStackVisitor)(visitor, stack)
|
|
2446
3005
|
);
|
|
2447
3006
|
}
|
|
2448
3007
|
function getArrayLikeSizeOption(count, visitor) {
|
|
@@ -2462,10 +3021,11 @@ function getArrayLikeSizeOption(count, visitor) {
|
|
|
2462
3021
|
if (prefix.format === "u32" && prefix.endian === "le") {
|
|
2463
3022
|
return { decoder: fragment(""), encoder: fragment("") };
|
|
2464
3023
|
}
|
|
2465
|
-
const prefixManifest = (0,
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
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
|
+
};
|
|
2469
3029
|
}
|
|
2470
3030
|
|
|
2471
3031
|
// src/nameTransformers.ts
|
|
@@ -2534,8 +3094,8 @@ var DEFAULT_NAME_TRANSFORMERS = {
|
|
|
2534
3094
|
|
|
2535
3095
|
// src/getRenderMapVisitor.ts
|
|
2536
3096
|
function getRenderMapVisitor(options = {}) {
|
|
2537
|
-
const linkables = new
|
|
2538
|
-
const stack = new
|
|
3097
|
+
const linkables = new import_visitors_core31.LinkableDictionary();
|
|
3098
|
+
const stack = new import_visitors_core31.NodeStack();
|
|
2539
3099
|
const nameTransformers = {
|
|
2540
3100
|
...DEFAULT_NAME_TRANSFORMERS,
|
|
2541
3101
|
...options.nameTransformers
|
|
@@ -2559,8 +3119,8 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2559
3119
|
nonScalarEnums,
|
|
2560
3120
|
stack
|
|
2561
3121
|
});
|
|
2562
|
-
const resolvedInstructionInputVisitor = (0,
|
|
2563
|
-
const byteSizeVisitor = (0,
|
|
3122
|
+
const resolvedInstructionInputVisitor = (0, import_visitors_core31.getResolvedInstructionInputsVisitor)();
|
|
3123
|
+
const byteSizeVisitor = (0, import_visitors_core31.getByteSizeVisitor)(linkables, { stack });
|
|
2564
3124
|
const globalScope = {
|
|
2565
3125
|
asyncResolvers,
|
|
2566
3126
|
customAccountData,
|
|
@@ -2573,23 +3133,23 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2573
3133
|
typeManifestVisitor
|
|
2574
3134
|
};
|
|
2575
3135
|
const render2 = (template, context, renderOptions) => {
|
|
2576
|
-
return render((0,
|
|
3136
|
+
return render((0, import_node_path2.join)("pages", template), context, renderOptions);
|
|
2577
3137
|
};
|
|
2578
|
-
return (0,
|
|
2579
|
-
(0,
|
|
3138
|
+
return (0, import_visitors_core31.pipe)(
|
|
3139
|
+
(0, import_visitors_core31.staticVisitor)(() => (0, import_renderers_core13.renderMap)(), {
|
|
2580
3140
|
keys: ["rootNode", "programNode", "pdaNode", "accountNode", "definedTypeNode", "instructionNode"]
|
|
2581
3141
|
}),
|
|
2582
|
-
(v) => (0,
|
|
3142
|
+
(v) => (0, import_visitors_core31.extendVisitor)(v, {
|
|
2583
3143
|
visitAccount(node) {
|
|
2584
3144
|
const accountPath = stack.getPath("accountNode");
|
|
2585
|
-
if (!(0,
|
|
3145
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(accountPath)) {
|
|
2586
3146
|
throw new Error("Account must be visited inside a program.");
|
|
2587
3147
|
}
|
|
2588
3148
|
const scope = {
|
|
2589
3149
|
...globalScope,
|
|
2590
3150
|
accountPath,
|
|
2591
|
-
size: (0,
|
|
2592
|
-
typeManifest: (0,
|
|
3151
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor),
|
|
3152
|
+
typeManifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor)
|
|
2593
3153
|
};
|
|
2594
3154
|
const fields = (0, import_nodes26.resolveNestedTypeNode)(node.data).fields;
|
|
2595
3155
|
const accountDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({
|
|
@@ -2609,14 +3169,15 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2609
3169
|
accountSizeHelpersFragment,
|
|
2610
3170
|
accountPdaHelpersFragment
|
|
2611
3171
|
);
|
|
2612
|
-
return
|
|
3172
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3173
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2613
3174
|
`accounts/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2614
3175
|
render2("accountsPage.njk", {
|
|
2615
|
-
accountDiscriminatorConstantsFragment,
|
|
2616
|
-
accountFetchHelpersFragment,
|
|
2617
|
-
accountPdaHelpersFragment,
|
|
2618
|
-
accountSizeHelpersFragment,
|
|
2619
|
-
accountTypeFragment,
|
|
3176
|
+
accountDiscriminatorConstantsFragment: accountDiscriminatorConstantsFragment.content,
|
|
3177
|
+
accountFetchHelpersFragment: accountFetchHelpersFragment.content,
|
|
3178
|
+
accountPdaHelpersFragment: accountPdaHelpersFragment.content,
|
|
3179
|
+
accountSizeHelpersFragment: accountSizeHelpersFragment.content,
|
|
3180
|
+
accountTypeFragment: accountTypeFragment.content,
|
|
2620
3181
|
imports: imports.toString(dependencyMap, useGranularImports)
|
|
2621
3182
|
})
|
|
2622
3183
|
);
|
|
@@ -2627,10 +3188,10 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2627
3188
|
codecDocs: [],
|
|
2628
3189
|
decoderDocs: [],
|
|
2629
3190
|
encoderDocs: [],
|
|
2630
|
-
manifest: (0,
|
|
3191
|
+
manifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor),
|
|
2631
3192
|
name: node.name,
|
|
2632
3193
|
node: node.type,
|
|
2633
|
-
size: (0,
|
|
3194
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor),
|
|
2634
3195
|
typeDocs: node.docs,
|
|
2635
3196
|
typeNode: node.type
|
|
2636
3197
|
};
|
|
@@ -2643,28 +3204,26 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2643
3204
|
nameApi.decoderFunction(node.name),
|
|
2644
3205
|
nameApi.codecFunction(node.name)
|
|
2645
3206
|
]);
|
|
2646
|
-
return
|
|
3207
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3208
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2647
3209
|
`types/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2648
3210
|
render2("definedTypesPage.njk", {
|
|
2649
|
-
imports: imports.toString({
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
}),
|
|
2653
|
-
typeDiscriminatedUnionHelpersFragment,
|
|
2654
|
-
typeWithCodecFragment
|
|
3211
|
+
imports: imports.toString({ ...dependencyMap, generatedTypes: "." }),
|
|
3212
|
+
typeDiscriminatedUnionHelpersFragment: typeDiscriminatedUnionHelpersFragment.content,
|
|
3213
|
+
typeWithCodecFragment: typeWithCodecFragment.content
|
|
2655
3214
|
})
|
|
2656
3215
|
);
|
|
2657
3216
|
},
|
|
2658
3217
|
visitInstruction(node) {
|
|
2659
3218
|
const instructionPath = stack.getPath("instructionNode");
|
|
2660
|
-
if (!(0,
|
|
3219
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(instructionPath)) {
|
|
2661
3220
|
throw new Error("Instruction must be visited inside a program.");
|
|
2662
3221
|
}
|
|
2663
3222
|
const instructionExtraName = nameApi.instructionExtraType(node.name);
|
|
2664
3223
|
const scope = {
|
|
2665
3224
|
...globalScope,
|
|
2666
|
-
dataArgsManifest: (0,
|
|
2667
|
-
extraArgsManifest: (0,
|
|
3225
|
+
dataArgsManifest: (0, import_visitors_core31.visit)(node, typeManifestVisitor),
|
|
3226
|
+
extraArgsManifest: (0, import_visitors_core31.visit)(
|
|
2668
3227
|
(0, import_nodes26.definedTypeNode)({
|
|
2669
3228
|
name: instructionExtraName,
|
|
2670
3229
|
type: (0, import_nodes26.structTypeNodeFromInstructionArgumentNodes)(node.extraArguments ?? [])
|
|
@@ -2673,8 +3232,8 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2673
3232
|
),
|
|
2674
3233
|
instructionPath,
|
|
2675
3234
|
renamedArgs: getRenamedArgsMap(node),
|
|
2676
|
-
resolvedInputs: (0,
|
|
2677
|
-
size: (0,
|
|
3235
|
+
resolvedInputs: (0, import_visitors_core31.visit)(node, resolvedInstructionInputVisitor),
|
|
3236
|
+
size: (0, import_visitors_core31.visit)(node, byteSizeVisitor)
|
|
2678
3237
|
};
|
|
2679
3238
|
const instructionDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({
|
|
2680
3239
|
...scope,
|
|
@@ -2703,34 +3262,36 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2703
3262
|
instructionFunctionSyncFragment,
|
|
2704
3263
|
instructionParseFunctionFragment
|
|
2705
3264
|
);
|
|
2706
|
-
return
|
|
3265
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3266
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2707
3267
|
`instructions/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2708
3268
|
render2("instructionsPage.njk", {
|
|
2709
3269
|
imports: imports.toString(dependencyMap, useGranularImports),
|
|
2710
3270
|
instruction: node,
|
|
2711
|
-
instructionDataFragment,
|
|
2712
|
-
instructionDiscriminatorConstantsFragment,
|
|
2713
|
-
instructionExtraArgsFragment,
|
|
2714
|
-
instructionFunctionAsyncFragment,
|
|
2715
|
-
instructionFunctionSyncFragment,
|
|
2716
|
-
instructionParseFunctionFragment,
|
|
2717
|
-
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
|
|
2718
3278
|
})
|
|
2719
3279
|
);
|
|
2720
3280
|
},
|
|
2721
3281
|
visitPda(node) {
|
|
2722
3282
|
const pdaPath = stack.getPath("pdaNode");
|
|
2723
|
-
if (!(0,
|
|
2724
|
-
throw new Error("
|
|
3283
|
+
if (!(0, import_visitors_core31.findProgramNodeFromPath)(pdaPath)) {
|
|
3284
|
+
throw new Error("PDA must be visited inside a program.");
|
|
2725
3285
|
}
|
|
2726
3286
|
const scope = { ...globalScope, pdaPath };
|
|
2727
3287
|
const pdaFunctionFragment = getPdaFunctionFragment(scope);
|
|
2728
3288
|
const imports = new ImportMap().mergeWith(pdaFunctionFragment);
|
|
2729
|
-
return
|
|
3289
|
+
return (0, import_renderers_core13.addToRenderMap)(
|
|
3290
|
+
(0, import_renderers_core13.renderMap)(),
|
|
2730
3291
|
`pdas/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2731
3292
|
render2("pdasPage.njk", {
|
|
2732
3293
|
imports: imports.toString(dependencyMap, useGranularImports),
|
|
2733
|
-
pdaFunctionFragment
|
|
3294
|
+
pdaFunctionFragment: pdaFunctionFragment.content
|
|
2734
3295
|
})
|
|
2735
3296
|
);
|
|
2736
3297
|
},
|
|
@@ -2740,35 +3301,42 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2740
3301
|
...getDefinedTypeNodesToExtract(node.instructions, customInstructionData)
|
|
2741
3302
|
];
|
|
2742
3303
|
const scope = { ...globalScope, programNode: node };
|
|
2743
|
-
|
|
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
|
+
]);
|
|
2744
3310
|
if (node.errors.length > 0) {
|
|
2745
3311
|
const programErrorsFragment = getProgramErrorsFragment(scope);
|
|
2746
|
-
|
|
3312
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3313
|
+
renders,
|
|
2747
3314
|
`errors/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2748
3315
|
render2("errorsPage.njk", {
|
|
2749
3316
|
imports: new ImportMap().mergeWith(programErrorsFragment).toString(dependencyMap, useGranularImports),
|
|
2750
|
-
programErrorsFragment
|
|
3317
|
+
programErrorsFragment: programErrorsFragment.content
|
|
2751
3318
|
})
|
|
2752
3319
|
);
|
|
2753
3320
|
}
|
|
2754
3321
|
const programFragment = getProgramFragment(scope);
|
|
2755
3322
|
const programAccountsFragment = getProgramAccountsFragment(scope);
|
|
2756
3323
|
const programInstructionsFragment = getProgramInstructionsFragment(scope);
|
|
2757
|
-
|
|
3324
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3325
|
+
renders,
|
|
2758
3326
|
`programs/${(0, import_nodes26.camelCase)(node.name)}.ts`,
|
|
2759
3327
|
render2("programsPage.njk", {
|
|
2760
3328
|
imports: new ImportMap().mergeWith(programFragment, programAccountsFragment, programInstructionsFragment).toString(dependencyMap, useGranularImports),
|
|
2761
|
-
programAccountsFragment,
|
|
2762
|
-
programFragment,
|
|
2763
|
-
programInstructionsFragment
|
|
3329
|
+
programAccountsFragment: programAccountsFragment.content,
|
|
3330
|
+
programFragment: programFragment.content,
|
|
3331
|
+
programInstructionsFragment: programInstructionsFragment.content
|
|
2764
3332
|
})
|
|
2765
3333
|
);
|
|
2766
|
-
|
|
3334
|
+
return (0, import_renderers_core13.mergeRenderMaps)([
|
|
3335
|
+
renders,
|
|
2767
3336
|
...(0, import_nodes26.getAllInstructionsWithSubs)(node, {
|
|
2768
3337
|
leavesOnly: !renderParentInstructions
|
|
2769
|
-
}).map((ix) => (0,
|
|
2770
|
-
);
|
|
2771
|
-
return renderMap;
|
|
3338
|
+
}).map((ix) => (0, import_visitors_core31.visit)(ix, self))
|
|
3339
|
+
]);
|
|
2772
3340
|
},
|
|
2773
3341
|
visitRoot(node, { self }) {
|
|
2774
3342
|
const isNotInternal = (n) => !internalNodes.includes(n.name);
|
|
@@ -2791,9 +3359,10 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2791
3359
|
programsWithErrorsToExport,
|
|
2792
3360
|
root: node
|
|
2793
3361
|
};
|
|
2794
|
-
|
|
3362
|
+
let renders = (0, import_renderers_core13.renderMap)();
|
|
2795
3363
|
if (hasAnythingToExport) {
|
|
2796
|
-
|
|
3364
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3365
|
+
renders,
|
|
2797
3366
|
"shared/index.ts",
|
|
2798
3367
|
render2("sharedPage.njk", {
|
|
2799
3368
|
...ctx,
|
|
@@ -2814,28 +3383,36 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2814
3383
|
);
|
|
2815
3384
|
}
|
|
2816
3385
|
if (programsToExport.length > 0) {
|
|
2817
|
-
|
|
3386
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "programs/index.ts", render2("programsIndex.njk", ctx));
|
|
2818
3387
|
}
|
|
2819
3388
|
if (programsWithErrorsToExport.length > 0) {
|
|
2820
|
-
|
|
3389
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "errors/index.ts", render2("errorsIndex.njk", ctx));
|
|
2821
3390
|
}
|
|
2822
3391
|
if (accountsToExport.length > 0) {
|
|
2823
|
-
|
|
3392
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "accounts/index.ts", render2("accountsIndex.njk", ctx));
|
|
2824
3393
|
}
|
|
2825
3394
|
if (pdasToExport.length > 0) {
|
|
2826
|
-
|
|
3395
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "pdas/index.ts", render2("pdasIndex.njk", ctx));
|
|
2827
3396
|
}
|
|
2828
3397
|
if (instructionsToExport.length > 0) {
|
|
2829
|
-
|
|
3398
|
+
renders = (0, import_renderers_core13.addToRenderMap)(
|
|
3399
|
+
renders,
|
|
3400
|
+
"instructions/index.ts",
|
|
3401
|
+
render2("instructionsIndex.njk", ctx)
|
|
3402
|
+
);
|
|
2830
3403
|
}
|
|
2831
3404
|
if (definedTypesToExport.length > 0) {
|
|
2832
|
-
|
|
3405
|
+
renders = (0, import_renderers_core13.addToRenderMap)(renders, "types/index.ts", render2("definedTypesIndex.njk", ctx));
|
|
2833
3406
|
}
|
|
2834
|
-
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
|
+
);
|
|
2835
3412
|
}
|
|
2836
3413
|
}),
|
|
2837
|
-
(v) => (0,
|
|
2838
|
-
(v) => (0,
|
|
3414
|
+
(v) => (0, import_visitors_core31.recordNodeStackVisitor)(v, stack),
|
|
3415
|
+
(v) => (0, import_visitors_core31.recordLinkablesOnFirstVisitVisitor)(v, linkables)
|
|
2839
3416
|
);
|
|
2840
3417
|
}
|
|
2841
3418
|
function getRenamedArgsMap(instruction) {
|
|
@@ -2857,8 +3434,8 @@ function getRenamedArgsMap(instruction) {
|
|
|
2857
3434
|
}
|
|
2858
3435
|
|
|
2859
3436
|
// src/renderVisitor.ts
|
|
2860
|
-
var
|
|
2861
|
-
var
|
|
3437
|
+
var import_renderers_core14 = require("@codama/renderers-core");
|
|
3438
|
+
var import_visitors_core32 = require("@codama/visitors-core");
|
|
2862
3439
|
var estreePlugin = __toESM(require("prettier/plugins/estree"));
|
|
2863
3440
|
var typeScriptPlugin = __toESM(require("prettier/plugins/typescript"));
|
|
2864
3441
|
var import_standalone = require("prettier/standalone");
|
|
@@ -2874,16 +3451,16 @@ var DEFAULT_PRETTIER_OPTIONS = {
|
|
|
2874
3451
|
useTabs: false
|
|
2875
3452
|
};
|
|
2876
3453
|
function renderVisitor(path, options = {}) {
|
|
2877
|
-
return (0,
|
|
3454
|
+
return (0, import_visitors_core32.rootNodeVisitor)(async (root) => {
|
|
2878
3455
|
if (options.deleteFolderBeforeRendering ?? true) {
|
|
2879
|
-
(0,
|
|
3456
|
+
(0, import_renderers_core14.deleteDirectory)(path);
|
|
2880
3457
|
}
|
|
2881
|
-
|
|
3458
|
+
let renderMap2 = (0, import_visitors_core32.visit)(root, getRenderMapVisitor(options));
|
|
2882
3459
|
if (options.formatCode ?? true) {
|
|
2883
3460
|
const prettierOptions = { ...DEFAULT_PRETTIER_OPTIONS, ...options.prettierOptions };
|
|
2884
|
-
await
|
|
3461
|
+
renderMap2 = await (0, import_renderers_core14.mapRenderMapContentAsync)(renderMap2, (code) => (0, import_standalone.format)(code, prettierOptions));
|
|
2885
3462
|
}
|
|
2886
|
-
|
|
3463
|
+
(0, import_renderers_core14.writeRenderMap)(renderMap2, path);
|
|
2887
3464
|
});
|
|
2888
3465
|
}
|
|
2889
3466
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -2893,7 +3470,7 @@ function renderVisitor(path, options = {}) {
|
|
|
2893
3470
|
getNameApi,
|
|
2894
3471
|
getRenderMapVisitor,
|
|
2895
3472
|
getTypeManifestVisitor,
|
|
2896
|
-
|
|
3473
|
+
mergeTypeManifests,
|
|
2897
3474
|
renderVisitor,
|
|
2898
3475
|
typeManifest
|
|
2899
3476
|
});
|