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.browser.js
CHANGED
|
@@ -382,7 +382,8 @@ var WELL_KNOWN_ADDRESSES = /* @__PURE__ */ new Map([
|
|
|
382
382
|
["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "tokenProgramAddress"],
|
|
383
383
|
["TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "token2022ProgramAddress"],
|
|
384
384
|
["ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", "associatedTokenProgramAddress"],
|
|
385
|
-
["
|
|
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
|
-
|
|
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 {
|
|
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, {
|
|
@@ -743,8 +750,8 @@ function getTypeManifestVisitor(input) {
|
|
|
743
750
|
},
|
|
744
751
|
visitArrayType(node, { self }) {
|
|
745
752
|
const itemManifest = visit(node.item, self);
|
|
746
|
-
const encoderSizeExpr = getArraySizeExpression(node, "Encoder");
|
|
747
|
-
const decoderSizeExpr = getArraySizeExpression(node, "Decoder");
|
|
753
|
+
const encoderSizeExpr = getArraySizeExpression(node, "Encoder", self);
|
|
754
|
+
const decoderSizeExpr = getArraySizeExpression(node, "Decoder", self);
|
|
748
755
|
const itemType = fragmentFromString(itemManifest.type.content);
|
|
749
756
|
const itemEncoder = fragment`${use(
|
|
750
757
|
"transformEncoder",
|
|
@@ -767,8 +774,8 @@ function getTypeManifestVisitor(input) {
|
|
|
767
774
|
visitMapType(node, { self }) {
|
|
768
775
|
const keyManifest = visit(node.key, self);
|
|
769
776
|
const valueManifest = visit(node.value, self);
|
|
770
|
-
const encoderSizeExpr = getMapSizeExpression(node, "Encoder");
|
|
771
|
-
const decoderSizeExpr = getMapSizeExpression(node, "Decoder");
|
|
777
|
+
const encoderSizeExpr = getMapSizeExpression(node, "Encoder", self);
|
|
778
|
+
const decoderSizeExpr = getMapSizeExpression(node, "Decoder", self);
|
|
772
779
|
return {
|
|
773
780
|
type: fragment`Map<${keyManifest.type}, ${valueManifest.type}>`,
|
|
774
781
|
encoder: fragment`${use(
|
|
@@ -785,8 +792,8 @@ function getTypeManifestVisitor(input) {
|
|
|
785
792
|
},
|
|
786
793
|
visitSetType(node, { self }) {
|
|
787
794
|
const itemManifest = visit(node.item, self);
|
|
788
|
-
const encoderSizeExpr = getSetSizeExpression(node, "Encoder");
|
|
789
|
-
const decoderSizeExpr = getSetSizeExpression(node, "Decoder");
|
|
795
|
+
const encoderSizeExpr = getSetSizeExpression(node, "Encoder", self);
|
|
796
|
+
const decoderSizeExpr = getSetSizeExpression(node, "Decoder", self);
|
|
790
797
|
return {
|
|
791
798
|
type: fragment`Set<${itemManifest.type}>`,
|
|
792
799
|
encoder: fragment`${use(
|
|
@@ -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)}`;
|
|
@@ -1177,7 +1195,7 @@ function getNumberCodecExpression(node, codecType) {
|
|
|
1177
1195
|
const config = node.endian === "be" ? fragment`${use("NumberCodecConfig", "solanaCodecsNumbers")}(endian: ${use("Endian", "dartTypedData")}.big)` : "";
|
|
1178
1196
|
return fragment`${use(`get${name}${codecType}`, "solanaCodecsNumbers")}(${config})`;
|
|
1179
1197
|
}
|
|
1180
|
-
function getArraySizeExpression(node, codecType) {
|
|
1198
|
+
function getArraySizeExpression(node, codecType, self) {
|
|
1181
1199
|
if (!("count" in node) || !node.count) return "";
|
|
1182
1200
|
const count = node.count;
|
|
1183
1201
|
switch (count.kind) {
|
|
@@ -1186,17 +1204,17 @@ function getArraySizeExpression(node, codecType) {
|
|
|
1186
1204
|
case "remainderCountNode":
|
|
1187
1205
|
return ", size: RemainderArraySize()";
|
|
1188
1206
|
case "prefixedCountNode": {
|
|
1189
|
-
|
|
1190
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1207
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1191
1208
|
return "";
|
|
1192
1209
|
}
|
|
1193
|
-
|
|
1210
|
+
const prefix = visit(count.prefix, self);
|
|
1211
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1194
1212
|
}
|
|
1195
1213
|
default:
|
|
1196
1214
|
return "";
|
|
1197
1215
|
}
|
|
1198
1216
|
}
|
|
1199
|
-
function getMapSizeExpression(node, codecType) {
|
|
1217
|
+
function getMapSizeExpression(node, codecType, self) {
|
|
1200
1218
|
if (!("count" in node) || !node.count) return "";
|
|
1201
1219
|
const count = node.count;
|
|
1202
1220
|
switch (count.kind) {
|
|
@@ -1205,17 +1223,17 @@ function getMapSizeExpression(node, codecType) {
|
|
|
1205
1223
|
case "remainderCountNode":
|
|
1206
1224
|
return ", size: RemainderArraySize()";
|
|
1207
1225
|
case "prefixedCountNode": {
|
|
1208
|
-
|
|
1209
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1226
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1210
1227
|
return "";
|
|
1211
1228
|
}
|
|
1212
|
-
|
|
1229
|
+
const prefix = visit(count.prefix, self);
|
|
1230
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1213
1231
|
}
|
|
1214
1232
|
default:
|
|
1215
1233
|
return "";
|
|
1216
1234
|
}
|
|
1217
1235
|
}
|
|
1218
|
-
function getSetSizeExpression(node, codecType) {
|
|
1236
|
+
function getSetSizeExpression(node, codecType, self) {
|
|
1219
1237
|
if (!("count" in node) || !node.count) return "";
|
|
1220
1238
|
const count = node.count;
|
|
1221
1239
|
switch (count.kind) {
|
|
@@ -1224,11 +1242,11 @@ function getSetSizeExpression(node, codecType) {
|
|
|
1224
1242
|
case "remainderCountNode":
|
|
1225
1243
|
return ", size: RemainderArraySize()";
|
|
1226
1244
|
case "prefixedCountNode": {
|
|
1227
|
-
|
|
1228
|
-
if (resolvedPrefix.format === "u32" && (!resolvedPrefix.endian || resolvedPrefix.endian === "le")) {
|
|
1245
|
+
if (count.prefix.kind === "numberTypeNode" && count.prefix.format === "u32" && (!count.prefix.endian || count.prefix.endian === "le")) {
|
|
1229
1246
|
return "";
|
|
1230
1247
|
}
|
|
1231
|
-
|
|
1248
|
+
const prefix = visit(count.prefix, self);
|
|
1249
|
+
return fragment`, size: PrefixedArraySize(${codecType === "Encoder" ? prefix.encoder : prefix.decoder})`;
|
|
1232
1250
|
}
|
|
1233
1251
|
default:
|
|
1234
1252
|
return "";
|
|
@@ -1590,7 +1608,7 @@ function getIndexPageFragment(fileNames, relativePath = "") {
|
|
|
1590
1608
|
"// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n"
|
|
1591
1609
|
);
|
|
1592
1610
|
}
|
|
1593
|
-
const exports = fileNames.sort().map((f) => {
|
|
1611
|
+
const exports$1 = fileNames.sort().map((f) => {
|
|
1594
1612
|
const path = relativePath ? `${relativePath}/${f}` : f;
|
|
1595
1613
|
return `export '${path}';`;
|
|
1596
1614
|
}).join("\n");
|
|
@@ -1598,17 +1616,17 @@ function getIndexPageFragment(fileNames, relativePath = "") {
|
|
|
1598
1616
|
`// Auto-generated. Do not edit.
|
|
1599
1617
|
// ignore_for_file: type=lint
|
|
1600
1618
|
|
|
1601
|
-
${exports}
|
|
1619
|
+
${exports$1}
|
|
1602
1620
|
`
|
|
1603
1621
|
);
|
|
1604
1622
|
}
|
|
1605
1623
|
function getRootIndexPageFragment(categories) {
|
|
1606
|
-
const exports = categories.sort().map((cat) => `export '${cat}/${cat}.dart';`).join("\n");
|
|
1624
|
+
const exports$1 = categories.sort().map((cat) => `export '${cat}/${cat}.dart';`).join("\n");
|
|
1607
1625
|
return fragmentFromString(
|
|
1608
1626
|
`// Auto-generated. Do not edit.
|
|
1609
1627
|
// ignore_for_file: type=lint
|
|
1610
1628
|
|
|
1611
|
-
${exports}
|
|
1629
|
+
${exports$1}
|
|
1612
1630
|
`
|
|
1613
1631
|
);
|
|
1614
1632
|
}
|
|
@@ -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(
|
|
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({
|