@codama/renderers-js 2.0.0 → 2.0.1

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.
@@ -2319,10 +2319,14 @@ function getProgramPluginInstructionsTypeFragment(scope) {
2319
2319
  programNode.instructions.map((instruction) => {
2320
2320
  const name = nameApi.programPluginInstructionKey(instruction.name);
2321
2321
  const isAsync = asyncInstructions.includes(instruction.name);
2322
- const instructionType = use("type " + nameApi.instructionType(instruction.name), "generatedInstructions");
2323
- const instructionInputType = isAsync ? use("type " + nameApi.instructionAsyncInputType(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncInputType(instruction.name), "generatedInstructions");
2324
- const instructionTypeWithPromise = isAsync ? fragment`Promise<${instructionType}>` : instructionType;
2325
- return fragment`${name}: (input: ${instructionInputType}) => ${instructionTypeWithPromise} & ${selfPlanAndSendFunctions};`;
2322
+ let instructionInputType = isAsync ? use("type " + nameApi.instructionAsyncInputType(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncInputType(instruction.name), "generatedInstructions");
2323
+ const instructionFunction = isAsync ? use("type " + nameApi.instructionAsyncFunction(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncFunction(instruction.name), "generatedInstructions");
2324
+ const payerDefaultValues = getPayerDefaultValues(instruction);
2325
+ if (payerDefaultValues.length > 0) {
2326
+ const fieldStringUnion = payerDefaultValues.map(({ name: name2 }) => `"${name2}"`).join(" | ");
2327
+ instructionInputType = fragment`MakeOptional<${instructionInputType}, ${fieldStringUnion}>`;
2328
+ }
2329
+ return fragment`${name}: (input: ${instructionInputType}) => ReturnType<typeof ${instructionFunction}> & ${selfPlanAndSendFunctions};`;
2326
2330
  }),
2327
2331
  (c) => c.join(" ")
2328
2332
  );
@@ -2340,7 +2344,7 @@ function getProgramPluginRequirementsTypeFragment(scope) {
2340
2344
  const requirements = mergeFragments(
2341
2345
  [
2342
2346
  hasAccounts ? clientWithRpc : void 0,
2343
- hasNonOptionalPayerDefaultValueInputs(programNode) ? clientWithPayer : void 0,
2347
+ hasPayerDefaultValues(programNode) ? clientWithPayer : void 0,
2344
2348
  hasInstructions ? clientWithTransactionPlanning : void 0,
2345
2349
  hasInstructions ? clientWithTransactionSending : void 0
2346
2350
  ],
@@ -2360,7 +2364,7 @@ function getProgramPluginFunctionFragment(scope) {
2360
2364
  );
2361
2365
  return fragment`export function ${programPluginFunction}() {
2362
2366
  return <T extends ${programPluginRequirementsType}>(client: T) => {
2363
- return { ...client, ${programPluginKey}: { ${fields}} as ${programPluginType} };
2367
+ return { ...client, ${programPluginKey}: <${programPluginType}>{ ${fields} } };
2364
2368
  };
2365
2369
  }`;
2366
2370
  }
@@ -2385,40 +2389,40 @@ function getProgramPluginInstructionsObjectFragment(scope) {
2385
2389
  programNode.instructions.map((instruction) => {
2386
2390
  const name = nameApi.programPluginInstructionKey(instruction.name);
2387
2391
  const isAsync = asyncInstructions.includes(instruction.name);
2388
- const instructionInputType = isAsync ? use("type " + nameApi.instructionAsyncInputType(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncInputType(instruction.name), "generatedInstructions");
2389
2392
  const instructionFunction = isAsync ? use(nameApi.instructionAsyncFunction(instruction.name), "generatedInstructions") : use(nameApi.instructionSyncFunction(instruction.name), "generatedInstructions");
2390
2393
  const addSelfPlanAndSendFunctions = use("addSelfPlanAndSendFunctions", "solanaProgramClientCore");
2391
- const inputWithDefaultPayerValues = getNonOptionalPayerDefaultValueInputs(instruction);
2392
- if (inputWithDefaultPayerValues.length === 0) {
2393
- return fragment`${name}: (input: ${instructionInputType}) => ${addSelfPlanAndSendFunctions}(client, ${instructionFunction}(input))`;
2394
+ const payerDefaultValues = getPayerDefaultValues(instruction);
2395
+ let input = fragment`input`;
2396
+ if (payerDefaultValues.length > 0) {
2397
+ const fieldOverrides = mergeFragments(
2398
+ payerDefaultValues.map(({ name: name2, signer }) => {
2399
+ const signerDefault = signer ? "client.payer" : "client.payer.address";
2400
+ return fragment`${name2}: input.${name2} ?? ${signerDefault}`;
2401
+ }),
2402
+ (c) => c.join(", ")
2403
+ );
2404
+ input = fragment`{ ...input, ${fieldOverrides} }`;
2394
2405
  }
2395
- const renamedArgs = getRenamedArgsMap(instruction);
2396
- const processedInputWithDefaultPayerValues = inputWithDefaultPayerValues.map((inputNode) => {
2397
- return nodes.isNode(inputNode, "instructionAccountNode") ? { name: inputNode.name, signer: inputNode.isSigner !== false } : { name: renamedArgs.get(inputNode.name) ?? inputNode.name, signer: false };
2398
- });
2399
- const fieldStringUnion = processedInputWithDefaultPayerValues.map(({ name: name2 }) => `"${name2}"`).join(" | ");
2400
- const instructionInputTypeWithPayer = fragment`MakeOptional<${instructionInputType}, ${fieldStringUnion}>`;
2401
- const fieldOverrides = mergeFragments(
2402
- processedInputWithDefaultPayerValues.map(
2403
- ({ name: name2, signer }) => fragment`${name2}: input.${name2} ?? ${signer ? "client.payer" : "client.payer.address"}`
2404
- ),
2405
- (c) => c.join(", ")
2406
- );
2407
- const inputWithPayer = fragment`{ ...input, ${fieldOverrides} }`;
2408
- return fragment`${name}: (input: ${instructionInputTypeWithPayer}) => ${addSelfPlanAndSendFunctions}(client, ${instructionFunction}(${inputWithPayer}))`;
2406
+ return fragment`${name}: input => ${addSelfPlanAndSendFunctions}(client, ${instructionFunction}(${input}))`;
2409
2407
  }),
2410
2408
  (c) => c.join(", ")
2411
2409
  );
2412
2410
  return fragment`instructions: { ${fields} }`;
2413
2411
  }
2414
2412
  function getMakeOptionalHelperTypeFragment(scope) {
2415
- if (!hasNonOptionalPayerDefaultValueInputs(scope.programNode)) return;
2413
+ if (!hasPayerDefaultValues(scope.programNode)) return;
2416
2414
  return fragment`type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;`;
2417
2415
  }
2418
- function hasNonOptionalPayerDefaultValueInputs(programNode) {
2419
- return programNode.instructions.some((instruction) => getNonOptionalPayerDefaultValueInputs(instruction).length > 0);
2416
+ function hasPayerDefaultValues(programNode) {
2417
+ return programNode.instructions.some((instruction) => getPayerDefaultValueNodes(instruction).length > 0);
2418
+ }
2419
+ function getPayerDefaultValues(instructionNode) {
2420
+ const renamedArgs = getRenamedArgsMap(instructionNode);
2421
+ return getPayerDefaultValueNodes(instructionNode).map((inputNode) => {
2422
+ return nodes.isNode(inputNode, "instructionAccountNode") ? { name: inputNode.name, signer: inputNode.isSigner !== false } : { name: renamedArgs.get(inputNode.name) ?? inputNode.name, signer: false };
2423
+ });
2420
2424
  }
2421
- function getNonOptionalPayerDefaultValueInputs(instructionNode) {
2425
+ function getPayerDefaultValueNodes(instructionNode) {
2422
2426
  return [
2423
2427
  ...instructionNode.accounts.filter((a) => !a.isOptional && nodes.isNode(a.defaultValue, "payerValueNode")),
2424
2428
  ...instructionNode.arguments.filter((a) => nodes.isNode(a.defaultValue, "payerValueNode"))