@codama/renderers-js 2.0.0 → 2.0.2

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.
@@ -341,15 +341,20 @@ var DEFAULT_NAME_TRANSFORMERS = {
341
341
  // src/utils/options.ts
342
342
  var DEFAULT_KIT_IMPORT_STRATEGY = "preferRoot";
343
343
  var DEFAULT_DEPENDENCY_VERSIONS = {
344
- "@solana/accounts": "^6.0.0",
345
- "@solana/addresses": "^6.0.0",
346
- "@solana/codecs": "^6.0.0",
347
- "@solana/errors": "^6.0.0",
348
- "@solana/instructions": "^6.0.0",
349
- "@solana/kit": "^6.0.0",
350
- "@solana/programs": "^6.0.0",
351
- "@solana/rpc-types": "^6.0.0",
352
- "@solana/signers": "^6.0.0"
344
+ "@solana/accounts": "^6.1.0",
345
+ "@solana/addresses": "^6.1.0",
346
+ "@solana/codecs": "^6.1.0",
347
+ "@solana/errors": "^6.1.0",
348
+ "@solana/instruction-plans": "^6.1.0",
349
+ "@solana/instructions": "^6.1.0",
350
+ "@solana/kit": "^6.1.0",
351
+ "@solana/plugin-core": "^6.1.0",
352
+ "@solana/plugin-interfaces": "^6.1.0",
353
+ "@solana/program-client-core": "^6.1.0",
354
+ "@solana/programs": "^6.1.0",
355
+ "@solana/rpc-api": "^6.1.0",
356
+ "@solana/rpc-types": "^6.1.0",
357
+ "@solana/signers": "^6.1.0"
353
358
  };
354
359
  async function syncPackageJson(renderMap, formatCode, packageFolder, options) {
355
360
  const shouldSyncPackageJson = options.syncPackageJson ?? true;
@@ -2319,10 +2324,14 @@ function getProgramPluginInstructionsTypeFragment(scope) {
2319
2324
  programNode.instructions.map((instruction) => {
2320
2325
  const name = nameApi.programPluginInstructionKey(instruction.name);
2321
2326
  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};`;
2327
+ let instructionInputType = isAsync ? use("type " + nameApi.instructionAsyncInputType(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncInputType(instruction.name), "generatedInstructions");
2328
+ const instructionFunction = isAsync ? use("type " + nameApi.instructionAsyncFunction(instruction.name), "generatedInstructions") : use("type " + nameApi.instructionSyncFunction(instruction.name), "generatedInstructions");
2329
+ const payerDefaultValues = getPayerDefaultValues(instruction);
2330
+ if (payerDefaultValues.length > 0) {
2331
+ const fieldStringUnion = payerDefaultValues.map(({ name: name2 }) => `"${name2}"`).join(" | ");
2332
+ instructionInputType = fragment`MakeOptional<${instructionInputType}, ${fieldStringUnion}>`;
2333
+ }
2334
+ return fragment`${name}: (input: ${instructionInputType}) => ReturnType<typeof ${instructionFunction}> & ${selfPlanAndSendFunctions};`;
2326
2335
  }),
2327
2336
  (c) => c.join(" ")
2328
2337
  );
@@ -2340,7 +2349,7 @@ function getProgramPluginRequirementsTypeFragment(scope) {
2340
2349
  const requirements = mergeFragments(
2341
2350
  [
2342
2351
  hasAccounts ? clientWithRpc : void 0,
2343
- hasNonOptionalPayerDefaultValueInputs(programNode) ? clientWithPayer : void 0,
2352
+ hasPayerDefaultValues(programNode) ? clientWithPayer : void 0,
2344
2353
  hasInstructions ? clientWithTransactionPlanning : void 0,
2345
2354
  hasInstructions ? clientWithTransactionSending : void 0
2346
2355
  ],
@@ -2360,7 +2369,7 @@ function getProgramPluginFunctionFragment(scope) {
2360
2369
  );
2361
2370
  return fragment`export function ${programPluginFunction}() {
2362
2371
  return <T extends ${programPluginRequirementsType}>(client: T) => {
2363
- return { ...client, ${programPluginKey}: { ${fields}} as ${programPluginType} };
2372
+ return { ...client, ${programPluginKey}: <${programPluginType}>{ ${fields} } };
2364
2373
  };
2365
2374
  }`;
2366
2375
  }
@@ -2385,40 +2394,40 @@ function getProgramPluginInstructionsObjectFragment(scope) {
2385
2394
  programNode.instructions.map((instruction) => {
2386
2395
  const name = nameApi.programPluginInstructionKey(instruction.name);
2387
2396
  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
2397
  const instructionFunction = isAsync ? use(nameApi.instructionAsyncFunction(instruction.name), "generatedInstructions") : use(nameApi.instructionSyncFunction(instruction.name), "generatedInstructions");
2390
2398
  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))`;
2399
+ const payerDefaultValues = getPayerDefaultValues(instruction);
2400
+ let input = fragment`input`;
2401
+ if (payerDefaultValues.length > 0) {
2402
+ const fieldOverrides = mergeFragments(
2403
+ payerDefaultValues.map(({ name: name2, signer }) => {
2404
+ const signerDefault = signer ? "client.payer" : "client.payer.address";
2405
+ return fragment`${name2}: input.${name2} ?? ${signerDefault}`;
2406
+ }),
2407
+ (c) => c.join(", ")
2408
+ );
2409
+ input = fragment`{ ...input, ${fieldOverrides} }`;
2394
2410
  }
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}))`;
2411
+ return fragment`${name}: input => ${addSelfPlanAndSendFunctions}(client, ${instructionFunction}(${input}))`;
2409
2412
  }),
2410
2413
  (c) => c.join(", ")
2411
2414
  );
2412
2415
  return fragment`instructions: { ${fields} }`;
2413
2416
  }
2414
2417
  function getMakeOptionalHelperTypeFragment(scope) {
2415
- if (!hasNonOptionalPayerDefaultValueInputs(scope.programNode)) return;
2418
+ if (!hasPayerDefaultValues(scope.programNode)) return;
2416
2419
  return fragment`type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;`;
2417
2420
  }
2418
- function hasNonOptionalPayerDefaultValueInputs(programNode) {
2419
- return programNode.instructions.some((instruction) => getNonOptionalPayerDefaultValueInputs(instruction).length > 0);
2421
+ function hasPayerDefaultValues(programNode) {
2422
+ return programNode.instructions.some((instruction) => getPayerDefaultValueNodes(instruction).length > 0);
2423
+ }
2424
+ function getPayerDefaultValues(instructionNode) {
2425
+ const renamedArgs = getRenamedArgsMap(instructionNode);
2426
+ return getPayerDefaultValueNodes(instructionNode).map((inputNode) => {
2427
+ return nodes.isNode(inputNode, "instructionAccountNode") ? { name: inputNode.name, signer: inputNode.isSigner !== false } : { name: renamedArgs.get(inputNode.name) ?? inputNode.name, signer: false };
2428
+ });
2420
2429
  }
2421
- function getNonOptionalPayerDefaultValueInputs(instructionNode) {
2430
+ function getPayerDefaultValueNodes(instructionNode) {
2422
2431
  return [
2423
2432
  ...instructionNode.accounts.filter((a) => !a.isOptional && nodes.isNode(a.defaultValue, "payerValueNode")),
2424
2433
  ...instructionNode.arguments.filter((a) => nodes.isNode(a.defaultValue, "payerValueNode"))