Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update JS experimental renderer to tp3 and allow use of peerDependencies #225

Merged
merged 3 commits into from
Apr 26, 2024
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/bright-socks-retire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@metaplex-foundation/kinobi": minor
---

Import the whole web3.js library by default in JS experimental
5 changes: 5 additions & 0 deletions .changeset/strange-bags-melt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@metaplex-foundation/kinobi": minor
---

Stop exporting shared folder in JS experimental
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
"dependencies": {
"@noble/hashes": "^1.4.0",
"@prettier/sync": "^0.5.1",
"@solana/codecs-strings": "2.0.0-preview.1",
"@solana/codecs-strings": "tp3",
"chalk": "^4.0.0",
"json-stable-stringify": "^1.1.1",
"nunjucks": "^3.2.4",
Expand Down
32 changes: 16 additions & 16 deletions pnpm-lock.yaml

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

8 changes: 4 additions & 4 deletions src/nodes/valueNodes/BytesValueNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ export function bytesValueNode(
export function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {
switch (node.encoding) {
case 'utf8':
return getUtf8Encoder().encode(node.data);
return getUtf8Encoder().encode(node.data) as Uint8Array;
case 'base16':
return getBase16Encoder().encode(node.data);
return getBase16Encoder().encode(node.data) as Uint8Array;
case 'base58':
return getBase58Encoder().encode(node.data);
return getBase58Encoder().encode(node.data) as Uint8Array;
case 'base64':
default:
return getBase64Encoder().encode(node.data);
return getBase64Encoder().encode(node.data) as Uint8Array;
}
}
36 changes: 29 additions & 7 deletions src/renderers/js-experimental/ImportMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,19 @@ import type { ImportFrom } from '../../shared';
import { Fragment } from './fragments';
import { TypeManifest } from './TypeManifest';

const DEFAULT_MODULE_MAP: Record<string, string> = {
// External.
const DEFAULT_EXTERNAL_MODULE_MAP: Record<string, string> = {
solanaAccounts: '@solana/web3.js',
solanaAddresses: '@solana/web3.js',
solanaCodecsCore: '@solana/web3.js',
solanaCodecsNumbers: '@solana/web3.js',
solanaCodecsStrings: '@solana/web3.js',
solanaCodecsDataStructures: '@solana/web3.js',
solanaInstructions: '@solana/web3.js',
solanaOptions: '@solana/web3.js',
solanaSigners: '@solana/web3.js',
};

const DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP: Record<string, string> = {
solanaAccounts: '@solana/accounts',
solanaAddresses: '@solana/addresses',
solanaCodecsCore: '@solana/codecs',
Expand All @@ -13,8 +24,9 @@ const DEFAULT_MODULE_MAP: Record<string, string> = {
solanaInstructions: '@solana/instructions',
solanaOptions: '@solana/codecs',
solanaSigners: '@solana/signers',
};

// Internal.
const DEFAULT_INTERNAL_MODULE_MAP: Record<string, string> = {
types: '../types',
errors: '../errors',
shared: '../shared',
Expand Down Expand Up @@ -99,7 +111,8 @@ export class ImportMap {
}

resolve(
dependencies: Record<ImportFrom, string> = {}
dependencies: Record<ImportFrom, string> = {},
useGranularImports = false
): Map<ImportFrom, Set<string>> {
// Resolve aliases.
const aliasedMap = new Map<ImportFrom, Set<string>>(
Expand All @@ -113,7 +126,13 @@ export class ImportMap {
);

// Resolve dependency mappings.
const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };
const dependencyMap = {
...(useGranularImports
? DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP
: DEFAULT_EXTERNAL_MODULE_MAP),
...DEFAULT_INTERNAL_MODULE_MAP,
...dependencies,
};
const resolvedMap = new Map<ImportFrom, Set<string>>();
aliasedMap.forEach((imports, module) => {
const resolvedModule: string = dependencyMap[module] ?? module;
Expand All @@ -125,8 +144,11 @@ export class ImportMap {
return resolvedMap;
}

toString(dependencies: Record<ImportFrom, string> = {}): string {
return [...this.resolve(dependencies).entries()]
toString(
dependencies: Record<ImportFrom, string> = {},
useGranularImports = false
): string {
return [...this.resolve(dependencies, useGranularImports).entries()]
.sort(([a], [b]) => {
const aIsRelative = a.startsWith('.');
const bIsRelative = b.startsWith('.');
Expand Down
41 changes: 35 additions & 6 deletions src/renderers/js-experimental/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ export type GetRenderMapOptions = {
formatCode?: boolean;
prettierOptions?: PrettierOptions;
dependencyMap?: Record<ImportFrom, string>;
useGranularImports?: boolean;
asyncResolvers?: string[];
nameTransformers?: Partial<NameTransformers>;
nonScalarEnums?: string[];
Expand Down Expand Up @@ -116,6 +117,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
...options.prettierOptions,
};
const dependencyMap = options.dependencyMap ?? {};
const useGranularImports = options.useGranularImports ?? false;
const asyncResolvers = (options.asyncResolvers ?? []).map(mainCase);
const nonScalarEnums = (options.nonScalarEnums ?? []).map(mainCase);
const internalNodes = (options.internalNodes ?? []).map(mainCase);
Expand Down Expand Up @@ -215,7 +217,34 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {

const map = new RenderMap();
if (hasAnythingToExport) {
map.add('shared/index.ts', render('sharedPage.njk', ctx));
map.add(
'shared/index.ts',
render('sharedPage.njk', {
...ctx,
imports: new ImportMap()
.add('solanaAddresses', [
'Address',
'isProgramDerivedAddress',
'ProgramDerivedAddress',
])
.add('solanaInstructions', [
'AccountRole',
'IAccountMeta',
'upgradeRoleToSigner',
])
.add('solanaSigners', [
'IAccountSignerMeta',
'isTransactionSigner',
'TransactionSigner',
])
.addAlias(
'solanaSigners',
'isTransactionSigner',
'web3JsIsTransactionSigner'
)
.toString(dependencyMap, useGranularImports),
})
);
}
if (programsToExport.length > 0) {
map.add('programs/index.ts', render('programsIndex.njk', ctx));
Expand Down Expand Up @@ -268,7 +297,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
render('errorsPage.njk', {
imports: new ImportMap()
.mergeWith(programErrorsFragment)
.toString(dependencyMap),
.toString(dependencyMap, useGranularImports),
programErrorsFragment,
})
);
Expand All @@ -287,7 +316,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
programAccountsFragment,
programInstructionsFragment
)
.toString(dependencyMap),
.toString(dependencyMap, useGranularImports),
programFragment,
programAccountsFragment,
programInstructionsFragment,
Expand Down Expand Up @@ -315,7 +344,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
return new RenderMap().add(
`pdas/${camelCase(node.name)}.ts`,
render('pdasPage.njk', {
imports: imports.toString(dependencyMap),
imports: imports.toString(dependencyMap, useGranularImports),
pdaFunctionFragment,
})
);
Expand Down Expand Up @@ -349,7 +378,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
return new RenderMap().add(
`accounts/${camelCase(node.name)}.ts`,
render('accountsPage.njk', {
imports: imports.toString(dependencyMap),
imports: imports.toString(dependencyMap, useGranularImports),
accountTypeFragment,
accountFetchHelpersFragment,
accountSizeHelpersFragment,
Expand Down Expand Up @@ -414,7 +443,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
`instructions/${camelCase(node.name)}.ts`,
render('instructionsPage.njk', {
instruction: node,
imports: imports.toString(dependencyMap),
imports: imports.toString(dependencyMap, useGranularImports),
instructionTypeFragment,
instructionDataFragment,
instructionExtraArgsFragment,
Expand Down
1 change: 0 additions & 1 deletion src/renderers/js-experimental/templates/rootIndex.njk
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
{% if programsToExport.length > 0 %}
export * from './programs';
{% endif %}
export * from './shared';
{% if definedTypesToExport.length > 0 %}
export * from './types';
{% endif %}
Expand Down
4 changes: 1 addition & 3 deletions src/renderers/js-experimental/templates/sharedPage.njk
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
{% import "macros.njk" as macros %}

{% block main %}
import { Address, isProgramDerivedAddress, ProgramDerivedAddress } from '@solana/addresses';
import { AccountRole, IAccountMeta, upgradeRoleToSigner } from '@solana/instructions';
import { IAccountSignerMeta, isTransactionSigner as web3JsIsTransactionSigner, TransactionSigner } from '@solana/signers';
{{ imports }}

/**
* Asserts that the given value is not null or undefined.
Expand Down
9 changes: 3 additions & 6 deletions test/packages/js-experimental/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,12 @@
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@solana/accounts": "2.0.0-preview.1.20240412114257.1882615a63943d158ad8ee86231f39d6f31763f2",
"@solana/addresses": "2.0.0-preview.1.20240412114257.1882615a63943d158ad8ee86231f39d6f31763f2",
"@solana/codecs": "2.0.0-preview.1.20240412114257.1882615a63943d158ad8ee86231f39d6f31763f2",
"@solana/instructions": "2.0.0-preview.1.20240412114257.1882615a63943d158ad8ee86231f39d6f31763f2",
"@solana/signers": "2.0.0-preview.1.20240412114257.1882615a63943d158ad8ee86231f39d6f31763f2"
"peerDependencies": {
"@solana/web3.js": "tp3"
},
"devDependencies": {
"@solana/eslint-config-solana": "^3.0.3",
"@solana/web3.js": "tp3",
"typescript": "^5.3.0"
}
}
Loading
Loading