codama-renderers-dart 0.5.4 → 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.
- package/dist/index.browser.cjs +86 -29
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +86 -29
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +86 -29
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +86 -29
- package/dist/index.node.js.map +1 -1
- package/dist/index.react-native.js +86 -29
- package/dist/index.react-native.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/discriminators.d.ts.map +1 -1
- package/dist/types/utils/importMap.d.ts.map +1 -1
- package/dist/types/utils/options.d.ts +29 -0
- package/dist/types/utils/options.d.ts.map +1 -1
- package/dist/types/utils/wellKnownAddresses.d.ts.map +1 -1
- package/dist/types/visitors/getRenderMapVisitor.d.ts.map +1 -1
- package/dist/types/visitors/getTypeManifestVisitor.d.ts +3 -1
- package/dist/types/visitors/getTypeManifestVisitor.d.ts.map +1 -1
- package/dist/types/visitors/renderVisitor.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/utils/discriminators.ts +8 -1
- package/src/utils/options.ts +30 -0
- package/src/utils/wellKnownAddresses.ts +2 -1
- package/src/visitors/getRenderMapVisitor.ts +1 -0
- package/src/visitors/getTypeManifestVisitor.ts +55 -16
- package/src/visitors/renderVisitor.ts +67 -3
package/dist/index.node.cjs
CHANGED
|
@@ -386,7 +386,8 @@ var WELL_KNOWN_ADDRESSES = /* @__PURE__ */ new Map([
|
|
|
386
386
|
["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "tokenProgramAddress"],
|
|
387
387
|
["TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "token2022ProgramAddress"],
|
|
388
388
|
["ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", "associatedTokenProgramAddress"],
|
|
389
|
-
["
|
|
389
|
+
["Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH", "memoProgramAddress"],
|
|
390
|
+
["MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr", "memoLegacyProgramAddressV3"],
|
|
390
391
|
["Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo", "memoLegacyProgramAddress"],
|
|
391
392
|
// Metaplex programs
|
|
392
393
|
["metaqbxxU9qX8rZXkmUJ7haCrXXz2W1PSUq1Rn3E1od", "tokenMetadataProgramAddress"],
|
|
@@ -505,7 +506,8 @@ function getDiscriminatorValidationFragment(node, scope) {
|
|
|
505
506
|
`Discriminator size must be a non-negative safe integer, got ${discriminator.size}.`
|
|
506
507
|
);
|
|
507
508
|
}
|
|
508
|
-
|
|
509
|
+
const comparison = node.kind === "accountNode" ? "<" : "!=";
|
|
510
|
+
return fragment`if (bytes.length - offset ${fragmentFromString(comparison)} ${fragmentFromString(String(discriminator.size))}) {
|
|
509
511
|
throw ${use("SolanaError", "solanaErrors")}(
|
|
510
512
|
${use("SolanaErrorCode", "solanaErrors")}.codecsInvalidByteLength,
|
|
511
513
|
{
|
|
@@ -619,7 +621,12 @@ function emptyTypeManifest() {
|
|
|
619
621
|
|
|
620
622
|
// src/visitors/getTypeManifestVisitor.ts
|
|
621
623
|
function getTypeManifestVisitor(input) {
|
|
622
|
-
const {
|
|
624
|
+
const {
|
|
625
|
+
nameApi,
|
|
626
|
+
linkables,
|
|
627
|
+
nonScalarEnums = [],
|
|
628
|
+
linkOverrides = {}
|
|
629
|
+
} = input;
|
|
623
630
|
const baseVisitor = visitorsCore.staticVisitor(
|
|
624
631
|
(node) => {
|
|
625
632
|
throw new errors.CodamaError(errors.CODAMA_ERROR__UNEXPECTED_NODE_KIND, {
|
|
@@ -747,8 +754,8 @@ function getTypeManifestVisitor(input) {
|
|
|
747
754
|
},
|
|
748
755
|
visitArrayType(node, { self }) {
|
|
749
756
|
const itemManifest = visitorsCore.visit(node.item, self);
|
|
750
|
-
const encoderSizeExpr = getArraySizeExpression(node, "Encoder");
|
|
751
|
-
const decoderSizeExpr = getArraySizeExpression(node, "Decoder");
|
|
757
|
+
const encoderSizeExpr = getArraySizeExpression(node, "Encoder", self);
|
|
758
|
+
const decoderSizeExpr = getArraySizeExpression(node, "Decoder", self);
|
|
752
759
|
const itemType = fragmentFromString(itemManifest.type.content);
|
|
753
760
|
const itemEncoder = fragment`${use(
|
|
754
761
|
"transformEncoder",
|
|
@@ -771,8 +778,8 @@ function getTypeManifestVisitor(input) {
|
|
|
771
778
|
visitMapType(node, { self }) {
|
|
772
779
|
const keyManifest = visitorsCore.visit(node.key, self);
|
|
773
780
|
const valueManifest = visitorsCore.visit(node.value, self);
|
|
774
|
-
const encoderSizeExpr = getMapSizeExpression(node, "Encoder");
|
|
775
|
-
const decoderSizeExpr = getMapSizeExpression(node, "Decoder");
|
|
781
|
+
const encoderSizeExpr = getMapSizeExpression(node, "Encoder", self);
|
|
782
|
+
const decoderSizeExpr = getMapSizeExpression(node, "Decoder", self);
|
|
776
783
|
return {
|
|
777
784
|
type: fragment`Map<${keyManifest.type}, ${valueManifest.type}>`,
|
|
778
785
|
encoder: fragment`${use(
|
|
@@ -789,8 +796,8 @@ function getTypeManifestVisitor(input) {
|
|
|
789
796
|
},
|
|
790
797
|
visitSetType(node, { self }) {
|
|
791
798
|
const itemManifest = visitorsCore.visit(node.item, self);
|
|
792
|
-
const encoderSizeExpr = getSetSizeExpression(node, "Encoder");
|
|
793
|
-
const decoderSizeExpr = getSetSizeExpression(node, "Decoder");
|
|
799
|
+
const encoderSizeExpr = getSetSizeExpression(node, "Encoder", self);
|
|
800
|
+
const decoderSizeExpr = getSetSizeExpression(node, "Decoder", self);
|
|
794
801
|
return {
|
|
795
802
|
type: fragment`Set<${itemManifest.type}>`,
|
|
796
803
|
encoder: fragment`${use(
|
|
@@ -1100,6 +1107,17 @@ function getTypeManifestVisitor(input) {
|
|
|
1100
1107
|
},
|
|
1101
1108
|
visitDefinedTypeLink(node, { self }) {
|
|
1102
1109
|
const name = node.name;
|
|
1110
|
+
const override = linkOverrides[name];
|
|
1111
|
+
if (override != null) {
|
|
1112
|
+
const moduleKey2 = `linkOverride:${override.path}`;
|
|
1113
|
+
return {
|
|
1114
|
+
type: use(override.type, moduleKey2),
|
|
1115
|
+
encoder: use(override.encoder, moduleKey2),
|
|
1116
|
+
decoder: use(override.decoder, moduleKey2),
|
|
1117
|
+
value: emptyTypeManifest().value,
|
|
1118
|
+
isEnum: false
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1103
1121
|
const typeName = nameApi.dataType(name);
|
|
1104
1122
|
const isNonScalar = nonScalarEnums.includes(node.name);
|
|
1105
1123
|
const moduleKey = `definedType:${snakeCase(name)}`;
|
|
@@ -1181,7 +1199,7 @@ function getNumberCodecExpression(node, codecType) {
|
|
|
1181
1199
|
const config = node.endian === "be" ? fragment`${use("NumberCodecConfig", "solanaCodecsNumbers")}(endian: ${use("Endian", "dartTypedData")}.big)` : "";
|
|
1182
1200
|
return fragment`${use(`get${name}${codecType}`, "solanaCodecsNumbers")}(${config})`;
|
|
1183
1201
|
}
|
|
1184
|
-
function getArraySizeExpression(node, codecType) {
|
|
1202
|
+
function getArraySizeExpression(node, codecType, self) {
|
|
1185
1203
|
if (!("count" in node) || !node.count) return "";
|
|
1186
1204
|
const count = node.count;
|
|
1187
1205
|
switch (count.kind) {
|
|
@@ -1190,17 +1208,17 @@ function getArraySizeExpression(node, codecType) {
|
|
|
1190
1208
|
case "remainderCountNode":
|
|
1191
1209
|
return ", size: RemainderArraySize()";
|
|
1192
1210
|
case "prefixedCountNode": {
|
|
1193
|
-
|
|
1194
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1211
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1195
1212
|
return "";
|
|
1196
1213
|
}
|
|
1197
|
-
|
|
1214
|
+
const prefix = visitorsCore.visit(count.prefix, self);
|
|
1215
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1198
1216
|
}
|
|
1199
1217
|
default:
|
|
1200
1218
|
return "";
|
|
1201
1219
|
}
|
|
1202
1220
|
}
|
|
1203
|
-
function getMapSizeExpression(node, codecType) {
|
|
1221
|
+
function getMapSizeExpression(node, codecType, self) {
|
|
1204
1222
|
if (!("count" in node) || !node.count) return "";
|
|
1205
1223
|
const count = node.count;
|
|
1206
1224
|
switch (count.kind) {
|
|
@@ -1209,17 +1227,17 @@ function getMapSizeExpression(node, codecType) {
|
|
|
1209
1227
|
case "remainderCountNode":
|
|
1210
1228
|
return ", size: RemainderArraySize()";
|
|
1211
1229
|
case "prefixedCountNode": {
|
|
1212
|
-
|
|
1213
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1230
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1214
1231
|
return "";
|
|
1215
1232
|
}
|
|
1216
|
-
|
|
1233
|
+
const prefix = visitorsCore.visit(count.prefix, self);
|
|
1234
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1217
1235
|
}
|
|
1218
1236
|
default:
|
|
1219
1237
|
return "";
|
|
1220
1238
|
}
|
|
1221
1239
|
}
|
|
1222
|
-
function getSetSizeExpression(node, codecType) {
|
|
1240
|
+
function getSetSizeExpression(node, codecType, self) {
|
|
1223
1241
|
if (!("count" in node) || !node.count) return "";
|
|
1224
1242
|
const count = node.count;
|
|
1225
1243
|
switch (count.kind) {
|
|
@@ -1228,11 +1246,11 @@ function getSetSizeExpression(node, codecType) {
|
|
|
1228
1246
|
case "remainderCountNode":
|
|
1229
1247
|
return ", size: RemainderArraySize()";
|
|
1230
1248
|
case "prefixedCountNode": {
|
|
1231
|
-
|
|
1232
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1249
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1233
1250
|
return "";
|
|
1234
1251
|
}
|
|
1235
|
-
|
|
1252
|
+
const prefix = visitorsCore.visit(count.prefix, self);
|
|
1253
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1236
1254
|
}
|
|
1237
1255
|
default:
|
|
1238
1256
|
return "";
|
|
@@ -1594,7 +1612,7 @@ function getIndexPageFragment(fileNames, relativePath = "") {
|
|
|
1594
1612
|
"// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n"
|
|
1595
1613
|
);
|
|
1596
1614
|
}
|
|
1597
|
-
const exports = fileNames.sort().map((f) => {
|
|
1615
|
+
const exports$1 = fileNames.sort().map((f) => {
|
|
1598
1616
|
const path = relativePath ? `${relativePath}/${f}` : f;
|
|
1599
1617
|
return `export '${path}';`;
|
|
1600
1618
|
}).join("\n");
|
|
@@ -1602,17 +1620,17 @@ function getIndexPageFragment(fileNames, relativePath = "") {
|
|
|
1602
1620
|
`// Auto-generated. Do not edit.
|
|
1603
1621
|
// ignore_for_file: type=lint
|
|
1604
1622
|
|
|
1605
|
-
${exports}
|
|
1623
|
+
${exports$1}
|
|
1606
1624
|
`
|
|
1607
1625
|
);
|
|
1608
1626
|
}
|
|
1609
1627
|
function getRootIndexPageFragment(categories) {
|
|
1610
|
-
const exports = categories.sort().map((cat) => `export '${cat}/${cat}.dart';`).join("\n");
|
|
1628
|
+
const exports$1 = categories.sort().map((cat) => `export '${cat}/${cat}.dart';`).join("\n");
|
|
1611
1629
|
return fragmentFromString(
|
|
1612
1630
|
`// Auto-generated. Do not edit.
|
|
1613
1631
|
// ignore_for_file: type=lint
|
|
1614
1632
|
|
|
1615
|
-
${exports}
|
|
1633
|
+
${exports$1}
|
|
1616
1634
|
`
|
|
1617
1635
|
);
|
|
1618
1636
|
}
|
|
@@ -2719,7 +2737,9 @@ function getRenderMapVisitor(options = {}) {
|
|
|
2719
2737
|
const linkables = new visitorsCore.LinkableDictionary();
|
|
2720
2738
|
const typeManifestVisitor = getTypeManifestVisitor({
|
|
2721
2739
|
nameApi,
|
|
2722
|
-
linkables
|
|
2740
|
+
linkables,
|
|
2741
|
+
linkOverrides: options.linkOverrides
|
|
2742
|
+
});
|
|
2723
2743
|
const scope = {
|
|
2724
2744
|
nameApi,
|
|
2725
2745
|
typeManifestVisitor};
|
|
@@ -2898,13 +2918,14 @@ function renderVisitor(outputDir, options = {}) {
|
|
|
2898
2918
|
deleteFolderBeforeRendering = true,
|
|
2899
2919
|
formatCode = false,
|
|
2900
2920
|
nameApi,
|
|
2901
|
-
dependencyMap
|
|
2921
|
+
dependencyMap,
|
|
2922
|
+
linkOverrides
|
|
2902
2923
|
} = options;
|
|
2903
2924
|
return visitorsCore.rootNodeVisitor((root) => {
|
|
2904
2925
|
const normalizedRoot = normalizeRootNode(root);
|
|
2905
2926
|
const renderMap = visitorsCore.visit(
|
|
2906
2927
|
normalizedRoot,
|
|
2907
|
-
getRenderMapVisitor({ nameApi, dependencyMap })
|
|
2928
|
+
getRenderMapVisitor({ nameApi, dependencyMap, linkOverrides })
|
|
2908
2929
|
);
|
|
2909
2930
|
const typePathMap = {};
|
|
2910
2931
|
for (const renderPath of renderMap.keys()) {
|
|
@@ -2929,7 +2950,14 @@ function renderVisitor(outputDir, options = {}) {
|
|
|
2929
2950
|
}
|
|
2930
2951
|
internalMap[key] = rel;
|
|
2931
2952
|
}
|
|
2932
|
-
const content = resolveFragmentContent(
|
|
2953
|
+
const content = resolveFragmentContent(
|
|
2954
|
+
frag,
|
|
2955
|
+
{
|
|
2956
|
+
...dependencyMap ?? {},
|
|
2957
|
+
...linkOverrideImports(outputDir, filePath, options.linkOverrides ?? {})
|
|
2958
|
+
},
|
|
2959
|
+
internalMap
|
|
2960
|
+
);
|
|
2933
2961
|
files.push([fullPath, content]);
|
|
2934
2962
|
}
|
|
2935
2963
|
if (deleteFolderBeforeRendering && fs.existsSync(outputDir)) {
|
|
@@ -2944,6 +2972,35 @@ function renderVisitor(outputDir, options = {}) {
|
|
|
2944
2972
|
}
|
|
2945
2973
|
});
|
|
2946
2974
|
}
|
|
2975
|
+
function linkOverrideImports(outputDir, generatedFilePath, overrides) {
|
|
2976
|
+
const resolved = {};
|
|
2977
|
+
if (Object.keys(overrides).length === 0) return resolved;
|
|
2978
|
+
const libRoot = findLibRoot(outputDir);
|
|
2979
|
+
if (libRoot == null) {
|
|
2980
|
+
throw new Error(
|
|
2981
|
+
`Cannot resolve linkOverrides because the render output directory "${outputDir}" has no "lib" ancestor.`
|
|
2982
|
+
);
|
|
2983
|
+
}
|
|
2984
|
+
const generatedAbsolute = path.posix.join(
|
|
2985
|
+
path.posix.resolve(outputDir),
|
|
2986
|
+
generatedFilePath
|
|
2987
|
+
);
|
|
2988
|
+
for (const override of Object.values(overrides)) {
|
|
2989
|
+
const overrideAbsolute = path.posix.join(libRoot, override.path);
|
|
2990
|
+
let rel = path.posix.relative(path.posix.dirname(generatedAbsolute), overrideAbsolute);
|
|
2991
|
+
if (!rel.startsWith(".")) {
|
|
2992
|
+
rel = `./${rel}`;
|
|
2993
|
+
}
|
|
2994
|
+
resolved[`linkOverride:${override.path}`] = rel;
|
|
2995
|
+
}
|
|
2996
|
+
return resolved;
|
|
2997
|
+
}
|
|
2998
|
+
function findLibRoot(outputDir) {
|
|
2999
|
+
const segments = path.posix.resolve(outputDir).split("/");
|
|
3000
|
+
const libIndex = segments.lastIndexOf("lib");
|
|
3001
|
+
if (libIndex < 0) return null;
|
|
3002
|
+
return segments.slice(0, libIndex + 1).join("/");
|
|
3003
|
+
}
|
|
2947
3004
|
function resolveFragmentContent(frag, dependencyMap, internalMap = {}) {
|
|
2948
3005
|
const { content, imports } = frag;
|
|
2949
3006
|
const importStr = imports.toString({
|