Explorar el Código

Refactor JS type manifest visitors (#286)

This PR applies a small refactoring to the JavaScript `getTypeManifestVisitors` that enables them to use the same instead of the visitor.
Loris Leiva hace 1 año
padre
commit
274af2eef1

+ 14 - 17
packages/renderers-js-umi/src/getRenderMapVisitor.ts

@@ -2,6 +2,7 @@ import { logWarn } from '@codama/errors';
 import {
     camelCase,
     CamelCaseString,
+    definedTypeNode,
     FieldDiscriminatorNode,
     getAllAccounts,
     getAllDefinedTypes,
@@ -37,7 +38,7 @@ import {
 } from '@codama/visitors-core';
 
 import { ContextMap } from './ContextMap';
-import { getTypeManifestVisitor as baseGetTypeManifestVisitor } from './getTypeManifestVisitor';
+import { getTypeManifestVisitor } from './getTypeManifestVisitor';
 import { ImportMap } from './ImportMap';
 import { renderInstructionDefaults } from './renderInstructionDefaults';
 import {
@@ -88,17 +89,14 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
     const customInstructionData = parseCustomDataOptions(options.customInstructionData ?? [], 'InstructionData');
     const getImportFrom = getImportFromFactory(options.linkOverrides ?? {}, customAccountData, customInstructionData);
 
-    const getTypeManifestVisitor = (parentName?: { loose: string; strict: string }) =>
-        baseGetTypeManifestVisitor({
-            customAccountData,
-            customInstructionData,
-            getImportFrom,
-            linkables,
-            nonScalarEnums,
-            parentName,
-            stack,
-        });
-    const typeManifestVisitor = getTypeManifestVisitor();
+    const typeManifestVisitor = getTypeManifestVisitor({
+        customAccountData,
+        customInstructionData,
+        getImportFrom,
+        linkables,
+        nonScalarEnums,
+        stack,
+    });
     const resolvedInstructionInputVisitor = getResolvedInstructionInputsVisitor();
     const byteSizeVisitor = getByteSizeVisitor(linkables, { stack });
 
@@ -386,12 +384,11 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
                     }
 
                     // Extra args.
-                    const extraArgStruct = structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []);
-                    const visitor = getTypeManifestVisitor({
-                        loose: `${node.name}InstructionExtraArgs`,
-                        strict: `${node.name}InstructionExtra`,
+                    const extraArgStruct = definedTypeNode({
+                        name: `${node.name}InstructionExtra`,
+                        type: structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []),
                     });
-                    const extraArgManifest = visit(extraArgStruct, visitor);
+                    const extraArgManifest = visit(extraArgStruct, typeManifestVisitor);
                     imports.mergeWith(extraArgManifest.looseImports);
 
                     // Arg defaults.

+ 2 - 3
packages/renderers-js-umi/src/getTypeManifestVisitor.ts

@@ -63,13 +63,12 @@ export function getTypeManifestVisitor(input: {
     getImportFrom: GetImportFromFunction;
     linkables: LinkableDictionary;
     nonScalarEnums: CamelCaseString[];
-    parentName?: { loose: string; strict: string };
     stack?: NodeStack;
 }) {
     const { linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;
-    let parentName = input.parentName ?? null;
-    let parentSize: NumberTypeNode | number | null = null;
     const stack = input.stack ?? new NodeStack();
+    let parentName: { loose: string; strict: string } | null = null;
+    let parentSize: NumberTypeNode | number | null = null;
 
     return pipe(
         staticVisitor(

+ 15 - 17
packages/renderers-js/src/getRenderMapVisitor.ts

@@ -4,6 +4,7 @@ import { logWarn } from '@codama/errors';
 import {
     camelCase,
     CamelCaseString,
+    definedTypeNode,
     getAllAccounts,
     getAllDefinedTypes,
     getAllInstructionsWithSubs,
@@ -47,7 +48,7 @@ import {
     getTypeDiscriminatedUnionHelpersFragment,
     getTypeWithCodecFragment,
 } from './fragments';
-import { getTypeManifestVisitor as baseGetTypeManifestVisitor, TypeManifestVisitor } from './getTypeManifestVisitor';
+import { getTypeManifestVisitor, TypeManifestVisitor } from './getTypeManifestVisitor';
 import { ImportMap } from './ImportMap';
 import { DEFAULT_NAME_TRANSFORMERS, getNameApi, NameApi, NameTransformers } from './nameTransformers';
 import {
@@ -105,18 +106,15 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
     const customInstructionData = parseCustomDataOptions(options.customInstructionData ?? [], 'InstructionData');
     const getImportFrom = getImportFromFactory(options.linkOverrides ?? {}, customAccountData, customInstructionData);
 
-    const getTypeManifestVisitor = (parentName?: { loose: string; strict: string }) =>
-        baseGetTypeManifestVisitor({
-            customAccountData,
-            customInstructionData,
-            getImportFrom,
-            linkables,
-            nameApi,
-            nonScalarEnums,
-            parentName,
-            stack,
-        });
-    const typeManifestVisitor = getTypeManifestVisitor();
+    const typeManifestVisitor = getTypeManifestVisitor({
+        customAccountData,
+        customInstructionData,
+        getImportFrom,
+        linkables,
+        nameApi,
+        nonScalarEnums,
+        stack,
+    });
     const resolvedInstructionInputVisitor = getResolvedInstructionInputsVisitor();
 
     const globalScope: GlobalFragmentScope = {
@@ -233,11 +231,11 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
                         ...globalScope,
                         dataArgsManifest: visit(node, typeManifestVisitor),
                         extraArgsManifest: visit(
-                            structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []),
-                            getTypeManifestVisitor({
-                                loose: nameApi.dataArgsType(instructionExtraName),
-                                strict: nameApi.dataType(instructionExtraName),
+                            definedTypeNode({
+                                name: instructionExtraName,
+                                type: structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []),
                             }),
+                            typeManifestVisitor,
                         ),
                         instructionPath,
                         renamedArgs: getRenamedArgsMap(node),

+ 1 - 2
packages/renderers-js/src/getTypeManifestVisitor.ts

@@ -40,12 +40,11 @@ export function getTypeManifestVisitor(input: {
     linkables: LinkableDictionary;
     nameApi: NameApi;
     nonScalarEnums: CamelCaseString[];
-    parentName?: { loose: string; strict: string };
     stack?: NodeStack;
 }) {
     const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;
     const stack = input.stack ?? new NodeStack();
-    let parentName = input.parentName ?? null;
+    let parentName: { loose: string; strict: string } | null = null;
 
     return pipe(
         staticVisitor(