codama-renderers-dart 0.5.5 → 0.5.6

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.
@@ -382,7 +382,8 @@ var WELL_KNOWN_ADDRESSES = /* @__PURE__ */ new Map([
382
382
  ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "tokenProgramAddress"],
383
383
  ["TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "token2022ProgramAddress"],
384
384
  ["ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", "associatedTokenProgramAddress"],
385
- ["MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr", "memoProgramAddress"],
385
+ ["Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH", "memoProgramAddress"],
386
+ ["MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr", "memoLegacyProgramAddressV3"],
386
387
  ["Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo", "memoLegacyProgramAddress"],
387
388
  // Metaplex programs
388
389
  ["metaqbxxU9qX8rZXkmUJ7haCrXXz2W1PSUq1Rn3E1od", "tokenMetadataProgramAddress"],
@@ -501,7 +502,8 @@ function getDiscriminatorValidationFragment(node, scope) {
501
502
  `Discriminator size must be a non-negative safe integer, got ${discriminator.size}.`
502
503
  );
503
504
  }
504
- return fragment`if (bytes.length - offset != ${fragmentFromString(String(discriminator.size))}) {
505
+ const comparison = node.kind === "accountNode" ? "<" : "!=";
506
+ return fragment`if (bytes.length - offset ${fragmentFromString(comparison)} ${fragmentFromString(String(discriminator.size))}) {
505
507
  throw ${use("SolanaError", "solanaErrors")}(
506
508
  ${use("SolanaErrorCode", "solanaErrors")}.codecsInvalidByteLength,
507
509
  {
@@ -615,7 +617,12 @@ function emptyTypeManifest() {
615
617
 
616
618
  // src/visitors/getTypeManifestVisitor.ts
617
619
  function getTypeManifestVisitor(input) {
618
- const { nameApi, linkables, nonScalarEnums = [] } = input;
620
+ const {
621
+ nameApi,
622
+ linkables,
623
+ nonScalarEnums = [],
624
+ linkOverrides = {}
625
+ } = input;
619
626
  const baseVisitor = staticVisitor(
620
627
  (node) => {
621
628
  throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {
@@ -1096,6 +1103,17 @@ function getTypeManifestVisitor(input) {
1096
1103
  },
1097
1104
  visitDefinedTypeLink(node, { self }) {
1098
1105
  const name = node.name;
1106
+ const override = linkOverrides[name];
1107
+ if (override != null) {
1108
+ const moduleKey2 = `linkOverride:${override.path}`;
1109
+ return {
1110
+ type: use(override.type, moduleKey2),
1111
+ encoder: use(override.encoder, moduleKey2),
1112
+ decoder: use(override.decoder, moduleKey2),
1113
+ value: emptyTypeManifest().value,
1114
+ isEnum: false
1115
+ };
1116
+ }
1099
1117
  const typeName = nameApi.dataType(name);
1100
1118
  const isNonScalar = nonScalarEnums.includes(node.name);
1101
1119
  const moduleKey = `definedType:${snakeCase(name)}`;
@@ -2715,7 +2733,9 @@ function getRenderMapVisitor(options = {}) {
2715
2733
  const linkables = new LinkableDictionary();
2716
2734
  const typeManifestVisitor = getTypeManifestVisitor({
2717
2735
  nameApi,
2718
- linkables});
2736
+ linkables,
2737
+ linkOverrides: options.linkOverrides
2738
+ });
2719
2739
  const scope = {
2720
2740
  nameApi,
2721
2741
  typeManifestVisitor};
@@ -2894,13 +2914,14 @@ function renderVisitor(outputDir, options = {}) {
2894
2914
  deleteFolderBeforeRendering = true,
2895
2915
  formatCode = false,
2896
2916
  nameApi,
2897
- dependencyMap
2917
+ dependencyMap,
2918
+ linkOverrides
2898
2919
  } = options;
2899
2920
  return rootNodeVisitor((root) => {
2900
2921
  const normalizedRoot = normalizeRootNode(root);
2901
2922
  const renderMap = visit(
2902
2923
  normalizedRoot,
2903
- getRenderMapVisitor({ nameApi, dependencyMap })
2924
+ getRenderMapVisitor({ nameApi, dependencyMap, linkOverrides })
2904
2925
  );
2905
2926
  const typePathMap = {};
2906
2927
  for (const renderPath of renderMap.keys()) {
@@ -2925,7 +2946,14 @@ function renderVisitor(outputDir, options = {}) {
2925
2946
  }
2926
2947
  internalMap[key] = rel;
2927
2948
  }
2928
- const content = resolveFragmentContent(frag, dependencyMap ?? {}, internalMap);
2949
+ const content = resolveFragmentContent(
2950
+ frag,
2951
+ {
2952
+ ...dependencyMap ?? {},
2953
+ ...linkOverrideImports(outputDir, filePath, options.linkOverrides ?? {})
2954
+ },
2955
+ internalMap
2956
+ );
2929
2957
  files.push([fullPath, content]);
2930
2958
  }
2931
2959
  if (deleteFolderBeforeRendering && existsSync(outputDir)) {
@@ -2940,6 +2968,35 @@ function renderVisitor(outputDir, options = {}) {
2940
2968
  }
2941
2969
  });
2942
2970
  }
2971
+ function linkOverrideImports(outputDir, generatedFilePath, overrides) {
2972
+ const resolved = {};
2973
+ if (Object.keys(overrides).length === 0) return resolved;
2974
+ const libRoot = findLibRoot(outputDir);
2975
+ if (libRoot == null) {
2976
+ throw new Error(
2977
+ `Cannot resolve linkOverrides because the render output directory "${outputDir}" has no "lib" ancestor.`
2978
+ );
2979
+ }
2980
+ const generatedAbsolute = posix.join(
2981
+ posix.resolve(outputDir),
2982
+ generatedFilePath
2983
+ );
2984
+ for (const override of Object.values(overrides)) {
2985
+ const overrideAbsolute = posix.join(libRoot, override.path);
2986
+ let rel = posix.relative(posix.dirname(generatedAbsolute), overrideAbsolute);
2987
+ if (!rel.startsWith(".")) {
2988
+ rel = `./${rel}`;
2989
+ }
2990
+ resolved[`linkOverride:${override.path}`] = rel;
2991
+ }
2992
+ return resolved;
2993
+ }
2994
+ function findLibRoot(outputDir) {
2995
+ const segments = posix.resolve(outputDir).split("/");
2996
+ const libIndex = segments.lastIndexOf("lib");
2997
+ if (libIndex < 0) return null;
2998
+ return segments.slice(0, libIndex + 1).join("/");
2999
+ }
2943
3000
  function resolveFragmentContent(frag, dependencyMap, internalMap = {}) {
2944
3001
  const { content, imports } = frag;
2945
3002
  const importStr = imports.toString({