@codama/renderers-js 1.5.1 → 1.5.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.
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  addToImportMap: () => addToImportMap,
35
35
  createImportMap: () => createImportMap,
36
36
  default: () => renderVisitor,
37
+ getExternalDependencies: () => getExternalDependencies,
37
38
  getNameApi: () => getNameApi,
38
39
  getRenderMapVisitor: () => getRenderMapVisitor,
39
40
  getTypeManifestVisitor: () => getTypeManifestVisitor,
@@ -149,6 +150,10 @@ function importMapToString(importMap, dependencyMap = {}, useGranularImports = f
149
150
  return `import { ${innerImports} } from '${module2}';`;
150
151
  }).join("\n");
151
152
  }
153
+ function getExternalDependencies(importMap, dependencyMap, useGranularImports) {
154
+ const resolvedImports = resolveImportMapModules(importMap, dependencyMap, useGranularImports);
155
+ return new Set([...resolvedImports.keys()].filter((module2) => !module2.startsWith(".")));
156
+ }
152
157
  function resolveImportMapModules(importMap, dependencyMap, useGranularImports) {
153
158
  const dependencyMapWithDefaults = {
154
159
  ...useGranularImports ? DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP : DEFAULT_EXTERNAL_MODULE_MAP,
@@ -315,7 +320,7 @@ function mergeTypeManifests(manifests, options = {}) {
315
320
 
316
321
  // src/visitors/getRenderMapVisitor.ts
317
322
  var import_nodes29 = require("@codama/nodes");
318
- var import_renderers_core13 = require("@codama/renderers-core");
323
+ var import_renderers_core14 = require("@codama/renderers-core");
319
324
  var import_visitors_core29 = require("@codama/visitors-core");
320
325
 
321
326
  // src/fragments/accountFetchHelpers.ts
@@ -492,6 +497,177 @@ function getImportFromFactory(overrides, customAccountData, customInstructionDat
492
497
  };
493
498
  }
494
499
 
500
+ // src/utils/packageJson.ts
501
+ var import_errors2 = require("@codama/errors");
502
+ var import_renderers_core2 = require("@codama/renderers-core");
503
+ var import_semver = require("semver");
504
+ var DEFAULT_DEPENDENCY_VERSIONS = {
505
+ "@solana/accounts": "^5.0.0",
506
+ "@solana/addresses": "^5.0.0",
507
+ "@solana/codecs": "^5.0.0",
508
+ "@solana/errors": "^5.0.0",
509
+ "@solana/instructions": "^5.0.0",
510
+ "@solana/kit": "^5.0.0",
511
+ "@solana/programs": "^5.0.0",
512
+ "@solana/rpc-types": "^5.0.0",
513
+ "@solana/signers": "^5.0.0"
514
+ };
515
+ function syncPackageJson(renderMap, options) {
516
+ const shouldSyncPackageJson = options.syncPackageJson ?? false;
517
+ const packageFolder = options.packageFolder;
518
+ if (!packageFolder) {
519
+ if (shouldSyncPackageJson) {
520
+ (0, import_errors2.logWarn)("Cannot sync package.json. Please provide the 'packageFolder' option.");
521
+ }
522
+ return;
523
+ }
524
+ const packageJsonPath = (0, import_renderers_core2.joinPath)(packageFolder, "package.json");
525
+ const usedDependencies = getUsedDependencyVersions(
526
+ renderMap,
527
+ options.dependencyMap ?? {},
528
+ options.dependencyVersions ?? {},
529
+ options.useGranularImports ?? false
530
+ );
531
+ if (!shouldSyncPackageJson) {
532
+ if ((0, import_renderers_core2.fileExists)(packageJsonPath)) {
533
+ checkExistingPackageJson((0, import_renderers_core2.readJson)(packageJsonPath), usedDependencies);
534
+ }
535
+ return;
536
+ }
537
+ if ((0, import_renderers_core2.fileExists)(packageJsonPath)) {
538
+ const packageJson = updateExistingPackageJson((0, import_renderers_core2.readJson)(packageJsonPath), usedDependencies);
539
+ (0, import_renderers_core2.writeFile)(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
540
+ } else {
541
+ const packageJson = createNewPackageJson(usedDependencies);
542
+ (0, import_renderers_core2.writeFile)(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
543
+ }
544
+ }
545
+ function createNewPackageJson(dependencyVersions) {
546
+ return updateExistingPackageJson(
547
+ {
548
+ name: "js-client",
549
+ version: "1.0.0",
550
+ // eslint-disable-next-line sort-keys-fix/sort-keys-fix
551
+ description: "",
552
+ main: "src/index.ts",
553
+ scripts: { test: 'echo "Error: no test specified" && exit 1' },
554
+ // eslint-disable-next-line sort-keys-fix/sort-keys-fix
555
+ keywords: [],
556
+ // eslint-disable-next-line sort-keys-fix/sort-keys-fix
557
+ author: ""
558
+ },
559
+ dependencyVersions
560
+ );
561
+ }
562
+ function updateExistingPackageJson(packageJson, dependencyVersions) {
563
+ const updatedDependencies = { ...packageJson.dependencies };
564
+ const updatedPeerDependencies = { ...packageJson.peerDependencies };
565
+ const updatedDevDependencies = { ...packageJson.devDependencies };
566
+ for (const [dependency, requiredRange] of Object.entries(dependencyVersions)) {
567
+ let found = false;
568
+ if (updatedDependencies[dependency]) {
569
+ updateDependency(updatedDependencies, dependency, requiredRange);
570
+ found = true;
571
+ }
572
+ if (updatedPeerDependencies[dependency]) {
573
+ updateDependency(updatedPeerDependencies, dependency, requiredRange);
574
+ found = true;
575
+ }
576
+ if (updatedDevDependencies[dependency]) {
577
+ updateDependency(updatedDevDependencies, dependency, requiredRange);
578
+ found = true;
579
+ }
580
+ if (!found) {
581
+ const dependencyGroupToAdd = dependency === "@solana/kit" ? updatedPeerDependencies : updatedDependencies;
582
+ dependencyGroupToAdd[dependency] = requiredRange;
583
+ }
584
+ }
585
+ return {
586
+ ...packageJson,
587
+ ...Object.entries(updatedPeerDependencies).length > 0 ? { peerDependencies: updatedPeerDependencies } : {},
588
+ ...Object.entries(updatedDependencies).length > 0 ? { dependencies: updatedDependencies } : {},
589
+ ...Object.entries(updatedDevDependencies).length > 0 ? { devDependencies: updatedDevDependencies } : {}
590
+ };
591
+ }
592
+ function checkExistingPackageJson(packageJson, dependencyVersions) {
593
+ const missingDependencies = [];
594
+ const dependenciesToUpdate = [];
595
+ const existingDependencies = {
596
+ ...packageJson.devDependencies,
597
+ ...packageJson.peerDependencies,
598
+ ...packageJson.dependencies
599
+ };
600
+ for (const [dependency, requiredRange] of Object.entries(dependencyVersions)) {
601
+ if (!existingDependencies[dependency]) {
602
+ missingDependencies.push(dependency);
603
+ } else if (shouldUpdateRange(dependency, existingDependencies[dependency], requiredRange)) {
604
+ dependenciesToUpdate.push(dependency);
605
+ }
606
+ }
607
+ if (missingDependencies.length === 0 && dependenciesToUpdate.length === 0) return;
608
+ const missingList = missingDependencies.map((d) => `- ${d} missing: ${dependencyVersions[d]}
609
+ `).join("");
610
+ const outdatedList = dependenciesToUpdate.map((d) => `- ${d} outdated: ${existingDependencies[d]} -> ${dependencyVersions[d]}
611
+ `).join("");
612
+ (0, import_errors2.logWarn)(
613
+ `The following dependencies in your \`package.json\` are out-of-date or missing:
614
+ ${missingList}${outdatedList}`
615
+ );
616
+ }
617
+ function getUsedDependencyVersions(renderMap, dependencyMap, dependencyVersions, useGranularImports) {
618
+ const dependencyVersionsWithDefaults = {
619
+ ...DEFAULT_DEPENDENCY_VERSIONS,
620
+ ...dependencyVersions
621
+ };
622
+ const fragment2 = mergeFragments([...renderMap.values()], () => "");
623
+ const usedDependencies = getExternalDependencies(fragment2.imports, dependencyMap, useGranularImports);
624
+ const [usedDependencyVersion, missingDependencies] = [...usedDependencies].reduce(
625
+ ([acc, missingDependencies2], dependency) => {
626
+ const version = dependencyVersionsWithDefaults[dependency];
627
+ if (version) {
628
+ acc[dependency] = version;
629
+ } else {
630
+ missingDependencies2.add(dependency);
631
+ }
632
+ return [acc, missingDependencies2];
633
+ },
634
+ [{}, /* @__PURE__ */ new Set()]
635
+ );
636
+ if (missingDependencies.size > 0) {
637
+ throw new import_errors2.CodamaError(import_errors2.CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS, {
638
+ dependencies: [...missingDependencies],
639
+ message: "Please add these dependencies to the `dependencyVersions` option."
640
+ });
641
+ }
642
+ return usedDependencyVersion;
643
+ }
644
+ function shouldUpdateRange(dependency, currentRange, requiredRange) {
645
+ try {
646
+ if ((0, import_semver.subset)(currentRange, requiredRange)) {
647
+ return false;
648
+ }
649
+ const minRequiredVersion = (0, import_semver.minVersion)(requiredRange);
650
+ const minCurrentVersion = (0, import_semver.minVersion)(currentRange);
651
+ if (!minCurrentVersion || !minRequiredVersion) {
652
+ throw new Error("Could not determine minimum versions.");
653
+ }
654
+ if ((0, import_semver.lt)(minCurrentVersion, minRequiredVersion)) {
655
+ return true;
656
+ }
657
+ return false;
658
+ } catch (error) {
659
+ console.warn(
660
+ `Could not parse the following ranges for dependency "${dependency}": [${currentRange}] and/or [${requiredRange}]. Caused by: ${error.message}`
661
+ );
662
+ return false;
663
+ }
664
+ }
665
+ function updateDependency(dependencyGroup, dependency, requiredRange) {
666
+ const currentRange = dependencyGroup[dependency];
667
+ if (!shouldUpdateRange(dependency, currentRange, requiredRange)) return;
668
+ dependencyGroup[dependency] = requiredRange;
669
+ }
670
+
495
671
  // src/fragments/accountFetchHelpers.ts
496
672
  function getAccountFetchHelpersFragment(scope) {
497
673
  const { accountPath, typeManifest: typeManifest2, nameApi, customAccountData } = scope;
@@ -801,7 +977,7 @@ function getAccountPageFragment(scope) {
801
977
 
802
978
  // src/fragments/discriminatorCondition.ts
803
979
  var import_nodes10 = require("@codama/nodes");
804
- var import_renderers_core2 = require("@codama/renderers-core");
980
+ var import_renderers_core3 = require("@codama/renderers-core");
805
981
  var import_visitors_core8 = require("@codama/visitors-core");
806
982
  var import_codecs_strings2 = require("@solana/codecs-strings");
807
983
  function getDiscriminatorConditionFragment(scope) {
@@ -821,7 +997,7 @@ function getDiscriminatorConditionFragment(scope) {
821
997
  }),
822
998
  (c) => c.join(" && ")
823
999
  ),
824
- (f) => (0, import_renderers_core2.mapFragmentContent)(f, (c) => `if (${c}) { ${scope.ifTrue} }`)
1000
+ (f) => (0, import_renderers_core3.mapFragmentContent)(f, (c) => `if (${c}) { ${scope.ifTrue} }`)
825
1001
  );
826
1002
  }
827
1003
  function getSizeConditionFragment(discriminator, scope) {
@@ -987,7 +1163,7 @@ function getDefaultAddress(defaultValue, programId, linkables) {
987
1163
 
988
1164
  // src/fragments/instructionByteDelta.ts
989
1165
  var import_nodes14 = require("@codama/nodes");
990
- var import_renderers_core3 = require("@codama/renderers-core");
1166
+ var import_renderers_core4 = require("@codama/renderers-core");
991
1167
  var import_visitors_core10 = require("@codama/visitors-core");
992
1168
  function getInstructionByteDeltaFragment(scope) {
993
1169
  const { byteDeltas } = (0, import_visitors_core10.getLastNodeFromPath)(scope.instructionPath);
@@ -1020,7 +1196,7 @@ function getByteDeltaFragment(byteDelta, scope) {
1020
1196
  bytesFragment = fragment`${bytesFragment} + ${use("BASE_ACCOUNT_SIZE", "solanaAccounts")}`;
1021
1197
  }
1022
1198
  if (byteDelta.subtract) {
1023
- bytesFragment = (0, import_visitors_core10.pipe)(bytesFragment, (f) => (0, import_renderers_core3.mapFragmentContent)(f, (c) => `- (${c})`));
1199
+ bytesFragment = (0, import_visitors_core10.pipe)(bytesFragment, (f) => (0, import_renderers_core4.mapFragmentContent)(f, (c) => `- (${c})`));
1024
1200
  }
1025
1201
  return [bytesFragment];
1026
1202
  }
@@ -1074,7 +1250,7 @@ function getInstructionDataFragment(scope) {
1074
1250
  }
1075
1251
 
1076
1252
  // src/fragments/instructionExtraArgs.ts
1077
- var import_renderers_core4 = require("@codama/renderers-core");
1253
+ var import_renderers_core5 = require("@codama/renderers-core");
1078
1254
  var import_visitors_core12 = require("@codama/visitors-core");
1079
1255
  function getInstructionExtraArgsFragment(scope) {
1080
1256
  const { instructionPath, extraArgsManifest, nameApi } = scope;
@@ -1082,22 +1258,22 @@ function getInstructionExtraArgsFragment(scope) {
1082
1258
  if ((instructionNode.extraArguments ?? []).length === 0) return;
1083
1259
  const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);
1084
1260
  const looseName = nameApi.dataArgsType(instructionExtraName);
1085
- return (0, import_renderers_core4.mapFragmentContent)(extraArgsManifest.looseType, (c) => `export type ${looseName} = ${c};`);
1261
+ return (0, import_renderers_core5.mapFragmentContent)(extraArgsManifest.looseType, (c) => `export type ${looseName} = ${c};`);
1086
1262
  }
1087
1263
 
1088
1264
  // src/fragments/instructionFunction.ts
1089
1265
  var import_nodes20 = require("@codama/nodes");
1090
- var import_renderers_core8 = require("@codama/renderers-core");
1266
+ var import_renderers_core9 = require("@codama/renderers-core");
1091
1267
  var import_visitors_core17 = require("@codama/visitors-core");
1092
1268
 
1093
1269
  // src/fragments/instructionInputResolved.ts
1094
1270
  var import_nodes17 = require("@codama/nodes");
1095
- var import_renderers_core6 = require("@codama/renderers-core");
1271
+ var import_renderers_core7 = require("@codama/renderers-core");
1096
1272
  var import_visitors_core14 = require("@codama/visitors-core");
1097
1273
 
1098
1274
  // src/fragments/instructionInputDefault.ts
1099
1275
  var import_nodes16 = require("@codama/nodes");
1100
- var import_renderers_core5 = require("@codama/renderers-core");
1276
+ var import_renderers_core6 = require("@codama/renderers-core");
1101
1277
  var import_visitors_core13 = require("@codama/visitors-core");
1102
1278
  function getInstructionInputDefaultFragment(scope) {
1103
1279
  const { input, optionalAccountStrategy, asyncResolvers, useAsync, nameApi, typeManifestVisitor, getImportFrom } = scope;
@@ -1197,12 +1373,12 @@ function getInstructionInputDefaultFragment(scope) {
1197
1373
  }
1198
1374
  return (0, import_visitors_core13.pipe)(
1199
1375
  (0, import_visitors_core13.visit)(seed.value, typeManifestVisitor).value,
1200
- (f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => `${seed.name}: ${c}`)
1376
+ (f) => (0, import_renderers_core6.mapFragmentContent)(f, (c) => `${seed.name}: ${c}`)
1201
1377
  );
1202
1378
  });
1203
1379
  const pdaSeedsFragment = (0, import_visitors_core13.pipe)(
1204
1380
  mergeFragments(pdaSeeds, (renders) => renders.join(", ")),
1205
- (f) => (0, import_renderers_core5.mapFragmentContent)(f, (c) => `{ ${c} }`)
1381
+ (f) => (0, import_renderers_core6.mapFragmentContent)(f, (c) => `{ ${c} }`)
1206
1382
  );
1207
1383
  if (pdaSeeds.length > 0) {
1208
1384
  pdaArgs.push(pdaSeedsFragment);
@@ -1283,7 +1459,7 @@ function getInstructionInputDefaultFragment(scope) {
1283
1459
  }
1284
1460
  }
1285
1461
  if (ifTrueRenderer && ifFalseRenderer) {
1286
- return (0, import_renderers_core5.setFragmentContent)(
1462
+ return (0, import_renderers_core6.setFragmentContent)(
1287
1463
  conditionalFragment,
1288
1464
  `if (${condition}) {
1289
1465
  ${ifTrueRenderer.content}
@@ -1292,7 +1468,7 @@ ${ifFalseRenderer.content}
1292
1468
  }`
1293
1469
  );
1294
1470
  }
1295
- return (0, import_renderers_core5.setFragmentContent)(
1471
+ return (0, import_renderers_core6.setFragmentContent)(
1296
1472
  conditionalFragment,
1297
1473
  `if (${condition}) {
1298
1474
  ${ifTrueRenderer ? ifTrueRenderer.content : ifFalseRenderer?.content}
@@ -1324,7 +1500,7 @@ function getInstructionInputResolvedFragment(scope) {
1324
1500
  if (!inputFragment.content) return [];
1325
1501
  const camelName = (0, import_nodes17.camelCase)(input.name);
1326
1502
  return [
1327
- (0, import_renderers_core6.mapFragmentContent)(
1503
+ (0, import_renderers_core7.mapFragmentContent)(
1328
1504
  inputFragment,
1329
1505
  (c) => (0, import_nodes17.isNode)(input, "instructionArgumentNode") ? `if (!args.${camelName}) {
1330
1506
  ${c}
@@ -1342,7 +1518,7 @@ ${c}
1342
1518
 
1343
1519
  // src/fragments/instructionInputType.ts
1344
1520
  var import_nodes18 = require("@codama/nodes");
1345
- var import_renderers_core7 = require("@codama/renderers-core");
1521
+ var import_renderers_core8 = require("@codama/renderers-core");
1346
1522
  var import_visitors_core15 = require("@codama/visitors-core");
1347
1523
  function getInstructionInputTypeFragment(scope) {
1348
1524
  const { instructionPath, useAsync, nameApi } = scope;
@@ -1402,7 +1578,7 @@ function getDataArgumentsFragments(scope) {
1402
1578
  (0, import_visitors_core15.pipe)(
1403
1579
  fragment`${nameApi.dataArgsType(customData.importAs)}`,
1404
1580
  (f) => mergeFragmentImports(f, [scope.dataArgsManifest.looseType.imports]),
1405
- (f) => (0, import_renderers_core7.mapFragmentContent)(f, (c) => `${c} & `)
1581
+ (f) => (0, import_renderers_core8.mapFragmentContent)(f, (c) => `${c} & `)
1406
1582
  )
1407
1583
  ];
1408
1584
  }
@@ -1563,7 +1739,7 @@ function getInstructionFunctionFragment(scope) {
1563
1739
  const typeParams = getTypeParamsFragment(instructionNode, programAddressConstant);
1564
1740
  const returnType = getReturnTypeFragment(instructionTypeFragment, hasByteDeltas, useAsync);
1565
1741
  const inputType = getInstructionInputTypeFragment(scope);
1566
- const inputArg = (0, import_renderers_core8.mapFragmentContent)(getInputTypeCallFragment(scope), (c) => hasInput ? `input: ${c}, ` : "");
1742
+ const inputArg = (0, import_renderers_core9.mapFragmentContent)(getInputTypeCallFragment(scope), (c) => hasInput ? `input: ${c}, ` : "");
1567
1743
  const functionBody = mergeFragments(
1568
1744
  [
1569
1745
  getProgramAddressInitializationFragment(programAddressConstant),
@@ -1694,7 +1870,7 @@ function getInstructionTypeFragment(scope) {
1694
1870
  });
1695
1871
  return (0, import_visitors_core17.pipe)(
1696
1872
  mergeFragments([fragment`TProgramAddress`, ...accountTypeParamsFragments], (c) => c.join(", ")),
1697
- (f) => (0, import_renderers_core8.mapFragmentContent)(f, (c) => `${instructionTypeName}<${c}>`)
1873
+ (f) => (0, import_renderers_core9.mapFragmentContent)(f, (c) => `${instructionTypeName}<${c}>`)
1698
1874
  );
1699
1875
  }
1700
1876
  function getInputTypeCallFragment(scope) {
@@ -1707,7 +1883,7 @@ function getInputTypeCallFragment(scope) {
1707
1883
  }
1708
1884
 
1709
1885
  // src/fragments/instructionPage.ts
1710
- var import_errors2 = require("@codama/errors");
1886
+ var import_errors3 = require("@codama/errors");
1711
1887
  var import_nodes23 = require("@codama/nodes");
1712
1888
  var import_visitors_core20 = require("@codama/visitors-core");
1713
1889
 
@@ -1822,7 +1998,7 @@ const getNextOptionalAccount = () => {
1822
1998
 
1823
1999
  // src/fragments/instructionType.ts
1824
2000
  var import_nodes22 = require("@codama/nodes");
1825
- var import_renderers_core9 = require("@codama/renderers-core");
2001
+ var import_renderers_core10 = require("@codama/renderers-core");
1826
2002
  var import_visitors_core19 = require("@codama/visitors-core");
1827
2003
  function getInstructionTypeFragment2(scope) {
1828
2004
  const { instructionPath, nameApi, customInstructionData } = scope;
@@ -1847,7 +2023,7 @@ function getInstructionTypeFragment2(scope) {
1847
2023
  const usesLegacyOptionalAccounts = instructionNode.optionalAccountStrategy === "omitted";
1848
2024
  const accountMetasFragment = mergeFragments(
1849
2025
  instructionNode.accounts.map(
1850
- (account) => (0, import_renderers_core9.mapFragmentContent)(getInstructionAccountMetaFragment(account), (c) => {
2026
+ (account) => (0, import_renderers_core10.mapFragmentContent)(getInstructionAccountMetaFragment(account), (c) => {
1851
2027
  const typeParam = `TAccount${(0, import_nodes22.pascalCase)(account.name)}`;
1852
2028
  const isLegacyOptional = account.isOptional && usesLegacyOptionalAccounts;
1853
2029
  const type = `${typeParam} extends string ? ${c} : ${typeParam}`;
@@ -1911,7 +2087,7 @@ function getRenamedArgsMap(instruction) {
1911
2087
  const allNames = [...instruction.accounts.map((account) => account.name), ...argNames];
1912
2088
  const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);
1913
2089
  if (duplicates.length === 0) return /* @__PURE__ */ new Map();
1914
- (0, import_errors2.logWarn)(
2090
+ (0, import_errors3.logWarn)(
1915
2091
  `[JavaScript] Accounts and args of instruction [${instruction.name}] have the following conflicting attributes [${duplicates.join(", ")}]. Thus, the arguments have been renamed to avoid conflicts in the input type.`
1916
2092
  );
1917
2093
  return new Map(duplicates.map((name) => [(0, import_nodes23.camelCase)(name), (0, import_nodes23.camelCase)(`${name}Arg`)]));
@@ -1993,7 +2169,7 @@ function getPdaPageFragment(scope) {
1993
2169
 
1994
2170
  // src/fragments/programAccounts.ts
1995
2171
  var import_nodes25 = require("@codama/nodes");
1996
- var import_renderers_core10 = require("@codama/renderers-core");
2172
+ var import_renderers_core11 = require("@codama/renderers-core");
1997
2173
  var import_visitors_core23 = require("@codama/visitors-core");
1998
2174
  function getProgramAccountsFragment(scope) {
1999
2175
  if (scope.programNode.accounts.length === 0) return;
@@ -2033,7 +2209,7 @@ function getProgramAccountsIdentifierFunctionFragment(scope) {
2033
2209
  }),
2034
2210
  (c) => c.join("\n")
2035
2211
  ),
2036
- (f) => (0, import_renderers_core10.mapFragmentContent)(
2212
+ (f) => (0, import_renderers_core11.mapFragmentContent)(
2037
2213
  f,
2038
2214
  (discriminators) => `export function ${programAccountsIdentifierFunction}(account: { data: ReadonlyUint8Array } | ReadonlyUint8Array): ${programAccountsEnum} {
2039
2215
  const data = 'data' in account ? account.data : account;
@@ -2058,7 +2234,7 @@ function getProgramConstantFragment(scope) {
2058
2234
 
2059
2235
  // src/fragments/programInstructions.ts
2060
2236
  var import_nodes26 = require("@codama/nodes");
2061
- var import_renderers_core11 = require("@codama/renderers-core");
2237
+ var import_renderers_core12 = require("@codama/renderers-core");
2062
2238
  var import_visitors_core25 = require("@codama/visitors-core");
2063
2239
  function getProgramInstructionsFragment(scope) {
2064
2240
  if (scope.programNode.instructions.length === 0) return;
@@ -2108,7 +2284,7 @@ function getProgramInstructionsIdentifierFunctionFragment(scope) {
2108
2284
  );
2109
2285
  return (0, import_visitors_core25.pipe)(
2110
2286
  discriminatorsFragment,
2111
- (f) => (0, import_renderers_core11.mapFragmentContent)(
2287
+ (f) => (0, import_renderers_core12.mapFragmentContent)(
2112
2288
  f,
2113
2289
  (discriminators) => `export function ${programInstructionsIdentifierFunction}(instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array): ${programInstructionsEnum} {
2114
2290
  const data = 'data' in instruction ? instruction.data : instruction;
@@ -2350,7 +2526,7 @@ function getTypePageFragment(scope) {
2350
2526
 
2351
2527
  // src/visitors/getTypeManifestVisitor.ts
2352
2528
  var import_nodes28 = require("@codama/nodes");
2353
- var import_renderers_core12 = require("@codama/renderers-core");
2529
+ var import_renderers_core13 = require("@codama/renderers-core");
2354
2530
  var import_visitors_core28 = require("@codama/visitors-core");
2355
2531
  function getTypeManifestVisitor(input) {
2356
2532
  const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;
@@ -2492,11 +2668,11 @@ function getTypeManifestVisitor(input) {
2492
2668
  encoder: fragment`['${name}', ${structManifest.encoder}]`,
2493
2669
  looseType: (0, import_visitors_core28.pipe)(
2494
2670
  structManifest.looseType,
2495
- (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2671
+ (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2496
2672
  ),
2497
2673
  strictType: (0, import_visitors_core28.pipe)(
2498
2674
  structManifest.strictType,
2499
- (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2675
+ (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2500
2676
  )
2501
2677
  });
2502
2678
  },
@@ -2522,11 +2698,11 @@ function getTypeManifestVisitor(input) {
2522
2698
  encoder: fragment`['${name}', ${structManifest.encoder}]`,
2523
2699
  looseType: (0, import_visitors_core28.pipe)(
2524
2700
  structManifest.looseType,
2525
- (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2701
+ (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2526
2702
  ),
2527
2703
  strictType: (0, import_visitors_core28.pipe)(
2528
2704
  structManifest.strictType,
2529
- (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2705
+ (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `{ ${kindAttribute},${c.slice(1, -1)}}`)
2530
2706
  )
2531
2707
  });
2532
2708
  },
@@ -2596,7 +2772,7 @@ function getTypeManifestVisitor(input) {
2596
2772
  ...manifest,
2597
2773
  value: (0, import_visitors_core28.pipe)(
2598
2774
  manifest.value,
2599
- (f) => (0, import_renderers_core12.setFragmentContent)(f, `${enumName}.${variantName2}`),
2775
+ (f) => (0, import_renderers_core13.setFragmentContent)(f, `${enumName}.${variantName2}`),
2600
2776
  (f) => addFragmentImports(f, importFrom, [enumName])
2601
2777
  )
2602
2778
  });
@@ -2607,7 +2783,7 @@ function getTypeManifestVisitor(input) {
2607
2783
  ...manifest,
2608
2784
  value: (0, import_visitors_core28.pipe)(
2609
2785
  manifest.value,
2610
- (f) => (0, import_renderers_core12.setFragmentContent)(f, `${enumFunction}('${variantName}')`),
2786
+ (f) => (0, import_renderers_core13.setFragmentContent)(f, `${enumFunction}('${variantName}')`),
2611
2787
  (f) => addFragmentImports(f, importFrom, [enumFunction])
2612
2788
  )
2613
2789
  });
@@ -2616,7 +2792,7 @@ function getTypeManifestVisitor(input) {
2616
2792
  ...manifest,
2617
2793
  value: (0, import_visitors_core28.pipe)(
2618
2794
  (0, import_visitors_core28.visit)(node.value, self).value,
2619
- (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `${enumFunction}('${variantName}', ${c})`),
2795
+ (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `${enumFunction}('${variantName}', ${c})`),
2620
2796
  (f) => addFragmentImports(f, importFrom, [enumFunction])
2621
2797
  )
2622
2798
  });
@@ -3056,8 +3232,8 @@ function getArrayLikeSizeOption(count, visitor) {
3056
3232
  }
3057
3233
  const prefixManifest = (0, import_visitors_core28.visit)(count.prefix, visitor);
3058
3234
  return {
3059
- decoder: (0, import_visitors_core28.pipe)(prefixManifest.decoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `size: ${c}`)),
3060
- encoder: (0, import_visitors_core28.pipe)(prefixManifest.encoder, (f) => (0, import_renderers_core12.mapFragmentContent)(f, (c) => `size: ${c}`))
3235
+ decoder: (0, import_visitors_core28.pipe)(prefixManifest.decoder, (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `size: ${c}`)),
3236
+ encoder: (0, import_visitors_core28.pipe)(prefixManifest.encoder, (f) => (0, import_renderers_core13.mapFragmentContent)(f, (c) => `size: ${c}`))
3061
3237
  };
3062
3238
  }
3063
3239
 
@@ -3072,6 +3248,7 @@ function getRenderMapVisitor(options = {}) {
3072
3248
  customAccountData,
3073
3249
  customInstructionData,
3074
3250
  dependencyMap: options.dependencyMap ?? {},
3251
+ dependencyVersions: options.dependencyVersions ?? {},
3075
3252
  getImportFrom: getImportFromFactory(options.linkOverrides ?? {}, customAccountData, customInstructionData),
3076
3253
  linkables,
3077
3254
  nameApi: getNameApi({ ...DEFAULT_NAME_TRANSFORMERS, ...options.nameTransformers }),
@@ -3092,12 +3269,12 @@ function getRenderMapVisitor(options = {}) {
3092
3269
  });
3093
3270
  };
3094
3271
  return (0, import_visitors_core29.pipe)(
3095
- (0, import_visitors_core29.staticVisitor)(() => (0, import_renderers_core13.createRenderMap)(), {
3272
+ (0, import_visitors_core29.staticVisitor)(() => (0, import_renderers_core14.createRenderMap)(), {
3096
3273
  keys: ["rootNode", "programNode", "pdaNode", "accountNode", "definedTypeNode", "instructionNode"]
3097
3274
  }),
3098
3275
  (v) => (0, import_visitors_core29.extendVisitor)(v, {
3099
3276
  visitAccount(node) {
3100
- return (0, import_renderers_core13.createRenderMap)(
3277
+ return (0, import_renderers_core14.createRenderMap)(
3101
3278
  `accounts/${(0, import_nodes29.camelCase)(node.name)}.ts`,
3102
3279
  asPage(
3103
3280
  getAccountPageFragment({
@@ -3109,7 +3286,7 @@ function getRenderMapVisitor(options = {}) {
3109
3286
  );
3110
3287
  },
3111
3288
  visitDefinedType(node) {
3112
- return (0, import_renderers_core13.createRenderMap)(
3289
+ return (0, import_renderers_core14.createRenderMap)(
3113
3290
  `types/${(0, import_nodes29.camelCase)(node.name)}.ts`,
3114
3291
  asPage(getTypePageFragment({ ...renderScope, node, size: (0, import_visitors_core29.visit)(node, byteSizeVisitor) }), {
3115
3292
  generatedTypes: "."
@@ -3117,7 +3294,7 @@ function getRenderMapVisitor(options = {}) {
3117
3294
  );
3118
3295
  },
3119
3296
  visitInstruction(node) {
3120
- return (0, import_renderers_core13.createRenderMap)(
3297
+ return (0, import_renderers_core14.createRenderMap)(
3121
3298
  `instructions/${(0, import_nodes29.camelCase)(node.name)}.ts`,
3122
3299
  asPage(
3123
3300
  getInstructionPageFragment({
@@ -3130,7 +3307,7 @@ function getRenderMapVisitor(options = {}) {
3130
3307
  );
3131
3308
  },
3132
3309
  visitPda(node) {
3133
- return (0, import_renderers_core13.createRenderMap)(
3310
+ return (0, import_renderers_core14.createRenderMap)(
3134
3311
  `pdas/${(0, import_nodes29.camelCase)(node.name)}.ts`,
3135
3312
  asPage(getPdaPageFragment({ ...renderScope, pdaPath: stack.getPath("pdaNode") }))
3136
3313
  );
@@ -3141,8 +3318,8 @@ function getRenderMapVisitor(options = {}) {
3141
3318
  ...getDefinedTypeNodesToExtract(node.instructions, customInstructionData)
3142
3319
  ];
3143
3320
  const scope = { ...renderScope, programNode: node };
3144
- return (0, import_renderers_core13.mergeRenderMaps)([
3145
- (0, import_renderers_core13.createRenderMap)({
3321
+ return (0, import_renderers_core14.mergeRenderMaps)([
3322
+ (0, import_renderers_core14.createRenderMap)({
3146
3323
  [`programs/${(0, import_nodes29.camelCase)(node.name)}.ts`]: asPage(getProgramPageFragment(scope)),
3147
3324
  [`errors/${(0, import_nodes29.camelCase)(node.name)}.ts`]: node.errors.length > 0 ? asPage(getErrorPageFragment(scope)) : void 0
3148
3325
  }),
@@ -3174,8 +3351,8 @@ function getRenderMapVisitor(options = {}) {
3174
3351
  pdasToExport,
3175
3352
  programsToExport
3176
3353
  };
3177
- return (0, import_renderers_core13.mergeRenderMaps)([
3178
- (0, import_renderers_core13.createRenderMap)({
3354
+ return (0, import_renderers_core14.mergeRenderMaps)([
3355
+ (0, import_renderers_core14.createRenderMap)({
3179
3356
  ["accounts/index.ts"]: asPage(getIndexPageFragment(accountsToExport)),
3180
3357
  ["errors/index.ts"]: asPage(getIndexPageFragment(programsWithErrorsToExport)),
3181
3358
  ["index.ts"]: asPage(getRootIndexPageFragment(scope)),
@@ -3195,7 +3372,7 @@ function getRenderMapVisitor(options = {}) {
3195
3372
  }
3196
3373
 
3197
3374
  // src/visitors/renderVisitor.ts
3198
- var import_renderers_core14 = require("@codama/renderers-core");
3375
+ var import_renderers_core15 = require("@codama/renderers-core");
3199
3376
  var import_visitors_core30 = require("@codama/visitors-core");
3200
3377
  var estreePlugin = __toESM(require("prettier/plugins/estree"));
3201
3378
  var typeScriptPlugin = __toESM(require("prettier/plugins/typescript"));
@@ -3214,14 +3391,15 @@ var DEFAULT_PRETTIER_OPTIONS = {
3214
3391
  function renderVisitor(path, options = {}) {
3215
3392
  return (0, import_visitors_core30.rootNodeVisitor)(async (root) => {
3216
3393
  if (options.deleteFolderBeforeRendering ?? true) {
3217
- (0, import_renderers_core14.deleteDirectory)(path);
3394
+ (0, import_renderers_core15.deleteDirectory)(path);
3218
3395
  }
3219
3396
  let renderMap = (0, import_visitors_core30.visit)(root, getRenderMapVisitor(options));
3220
3397
  if (options.formatCode ?? true) {
3221
3398
  const prettierOptions = { ...DEFAULT_PRETTIER_OPTIONS, ...options.prettierOptions };
3222
- renderMap = await (0, import_renderers_core14.mapRenderMapContentAsync)(renderMap, (code) => (0, import_standalone.format)(code, prettierOptions));
3399
+ renderMap = await (0, import_renderers_core15.mapRenderMapContentAsync)(renderMap, (code) => (0, import_standalone.format)(code, prettierOptions));
3223
3400
  }
3224
- (0, import_renderers_core14.writeRenderMap)(renderMap, path);
3401
+ syncPackageJson(renderMap, options);
3402
+ (0, import_renderers_core15.writeRenderMap)(renderMap, path);
3225
3403
  });
3226
3404
  }
3227
3405
  // Annotate the CommonJS export names for ESM import in node:
@@ -3229,6 +3407,7 @@ function renderVisitor(path, options = {}) {
3229
3407
  DEFAULT_NAME_TRANSFORMERS,
3230
3408
  addToImportMap,
3231
3409
  createImportMap,
3410
+ getExternalDependencies,
3232
3411
  getNameApi,
3233
3412
  getRenderMapVisitor,
3234
3413
  getTypeManifestVisitor,