Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/great-trams-notice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@codama/renderers-js-umi': patch
---

Use latest RenderMap type from renderers-core
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@
"test:unit": "vitest run"
},
"dependencies": {
"@codama/errors": "^1.3.7",
"@codama/nodes": "^1.3.7",
"@codama/renderers-core": "^1.2.2",
"@codama/validators": "^1.3.7",
"@codama/visitors-core": "^1.3.7",
"@codama/errors": "^1.4.1",
"@codama/nodes": "^1.4.1",
"@codama/renderers-core": "^1.3.0",
"@codama/validators": "^1.4.1",
"@codama/visitors-core": "^1.4.1",
"@solana/codecs-strings": "^5.0.0",
"nunjucks": "^3.2.4",
"prettier": "^3.6.2"
Expand Down
18 changes: 9 additions & 9 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

61 changes: 30 additions & 31 deletions src/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
structTypeNodeFromInstructionArgumentNodes,
VALUE_NODES,
} from '@codama/nodes';
import { addToRenderMap, createRenderMap, mergeRenderMaps, RenderMap } from '@codama/renderers-core';
import { addToRenderMap, BaseFragment, createRenderMap, mergeRenderMaps, RenderMap } from '@codama/renderers-core';
import {
extendVisitor,
getByteSizeVisitor,
Expand Down Expand Up @@ -62,7 +62,7 @@ export type GetRenderMapOptions = {
renderParentInstructions?: boolean;
};

export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<RenderMap> {
export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<RenderMap<BaseFragment>> {
const linkables = new LinkableDictionary();
const stack = new NodeStack();
let program: ProgramNode | null = null;
Expand Down Expand Up @@ -229,9 +229,8 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
}
const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;

return createRenderMap(
`accounts/${camelCase(node.name)}.ts`,
render('accountsPage.njk', {
return createRenderMap(`accounts/${camelCase(node.name)}.ts`, {
content: render('accountsPage.njk', {
account: node,
customData,
discriminator: resolvedDiscriminator,
Expand All @@ -242,7 +241,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
seeds,
typeManifest,
}),
);
});
},

visitDefinedType(node) {
Expand All @@ -257,9 +256,8 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
`get${pascalCaseName}Serializer`,
]);

return createRenderMap(
`types/${camelCase(node.name)}.ts`,
render('definedTypesPage.njk', {
return createRenderMap(`types/${camelCase(node.name)}.ts`, {
content: render('definedTypesPage.njk', {
definedType: node,
imports: imports.toString({
...dependencyMap,
Expand All @@ -268,7 +266,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
isDataEnum: isNode(node.type, 'enumTypeNode') && isDataEnum(node.type),
typeManifest,
}),
);
});
},

visitInstruction(node) {
Expand Down Expand Up @@ -418,9 +416,8 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
imports.add(getImportFrom(remainingAccounts.value), camelCase(remainingAccounts.value.name));
}

return createRenderMap(
`instructions/${camelCase(node.name)}.ts`,
render('instructionsPage.njk', {
return createRenderMap(`instructions/${camelCase(node.name)}.ts`, {
content: render('instructionsPage.njk', {
accounts,
argsWithDefaults,
byteDelta,
Expand Down Expand Up @@ -448,7 +445,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
resolvedInputs,
resolvedInputsWithDefaults,
}),
);
});
},

visitProgram(node, { self }) {
Expand All @@ -468,22 +465,18 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
}).map(ix => visit(ix, self)),
]),
r =>
addToRenderMap(
r,
`errors/${camelCase(node.name)}.ts`,
render('errorsPage.njk', {
addToRenderMap(r, `errors/${camelCase(node.name)}.ts`, {
content: render('errorsPage.njk', {
errors: node.errors,
imports: new ImportMap()
.add('umi', ['ProgramError', 'Program'])
.toString(dependencyMap),
program: node,
}),
),
}),
r =>
addToRenderMap(
r,
`programs/${camelCase(node.name)}.ts`,
render('programsPage.njk', {
addToRenderMap(r, `programs/${camelCase(node.name)}.ts`, {
content: render('programsPage.njk', {
imports: new ImportMap()
.add('umi', ['ClusterFilter', 'Context', 'Program', 'PublicKey'])
.add('errors', [
Expand All @@ -493,7 +486,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
.toString(dependencyMap),
program: node,
}),
),
}),
);
program = null;
return renders;
Expand Down Expand Up @@ -525,17 +518,23 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
return mergeRenderMaps([
createRenderMap({
['accounts/index.ts']:
accountsToExport.length > 0 ? render('accountsIndex.njk', ctx) : undefined,
accountsToExport.length > 0 ? { content: render('accountsIndex.njk', ctx) } : undefined,
['errors/index.ts']:
programsToExport.length > 0 ? render('errorsIndex.njk', ctx) : undefined,
['index.ts']: render('rootIndex.njk', ctx),
programsToExport.length > 0 ? { content: render('errorsIndex.njk', ctx) } : undefined,
['index.ts']: { content: render('rootIndex.njk', ctx) },
['instructions/index.ts']:
instructionsToExport.length > 0 ? render('instructionsIndex.njk', ctx) : undefined,
instructionsToExport.length > 0
? { content: render('instructionsIndex.njk', ctx) }
: undefined,
['programs/index.ts']:
programsToExport.length > 0 ? render('programsIndex.njk', ctx) : undefined,
['shared/index.ts']: hasAnythingToExport ? render('sharedPage.njk', ctx) : undefined,
programsToExport.length > 0 ? { content: render('programsIndex.njk', ctx) } : undefined,
['shared/index.ts']: hasAnythingToExport
? { content: render('sharedPage.njk', ctx) }
: undefined,
['types/index.ts']:
definedTypesToExport.length > 0 ? render('definedTypesIndex.njk', ctx) : undefined,
definedTypesToExport.length > 0
? { content: render('definedTypesIndex.njk', ctx) }
: undefined,
}),
...getAllPrograms(node).map(p => visit(p, self)),
]);
Expand Down
18 changes: 13 additions & 5 deletions test/_setup.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getFromRenderMap, RenderMap } from '@codama/renderers-core';
import { BaseFragment, getFromRenderMap, RenderMap } from '@codama/renderers-core';
import { Plugin } from 'prettier';
import * as estreePlugin from 'prettier/plugins/estree';
import * as typeScriptPlugin from 'prettier/plugins/typescript';
Expand All @@ -17,9 +17,13 @@ const PRETTIER_OPTIONS: Parameters<typeof format>[1] = {
useTabs: false,
};

export function renderMapContains(renderMap: RenderMap, key: string, expected: (RegExp | string)[] | RegExp | string) {
export function renderMapContains(
renderMap: RenderMap<BaseFragment>,
key: string,
expected: (RegExp | string)[] | RegExp | string,
) {
expect(renderMap.has(key), `RenderMap is missing key "${key}".`).toBe(true);
return codeContains(getFromRenderMap(renderMap, key), expected);
return codeContains(getFromRenderMap(renderMap, key).content, expected);
}

export async function codeContains(actual: string, expected: (RegExp | string)[] | RegExp | string) {
Expand All @@ -46,9 +50,13 @@ export async function codeDoesNotContain(actual: string, expected: (RegExp | str
});
}

export function renderMapContainsImports(renderMap: RenderMap, key: string, expectedImports: Record<string, string[]>) {
export function renderMapContainsImports(
renderMap: RenderMap<BaseFragment>,
key: string,
expectedImports: Record<string, string[]>,
) {
expect(renderMap.has(key), `RenderMap is missing key "${key}".`).toBe(true);
return codeContainsImports(getFromRenderMap(renderMap, key), expectedImports);
return codeContainsImports(getFromRenderMap(renderMap, key).content, expectedImports);
}

export async function codeContainsImports(actual: string, expectedImports: Record<string, string[]>) {
Expand Down