@codama/renderers-js 1.5.4 → 1.6.0

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.
@@ -6,9 +6,11 @@ var nodes = require('@codama/nodes');
6
6
  var renderersCore = require('@codama/renderers-core');
7
7
  var visitorsCore = require('@codama/visitors-core');
8
8
  var codecsStrings = require('@solana/codecs-strings');
9
- var prettier = require('prettier');
9
+ require('prettier');
10
+ var babelPlugin = require('prettier/plugins/babel');
10
11
  var estreePlugin = require('prettier/plugins/estree');
11
12
  var typeScriptPlugin = require('prettier/plugins/typescript');
13
+ var standalone = require('prettier/standalone');
12
14
  var errors = require('@codama/errors');
13
15
  var semver = require('semver');
14
16
 
@@ -30,6 +32,7 @@ function _interopNamespace(e) {
30
32
  return Object.freeze(n);
31
33
  }
32
34
 
35
+ var babelPlugin__namespace = /*#__PURE__*/_interopNamespace(babelPlugin);
33
36
  var estreePlugin__namespace = /*#__PURE__*/_interopNamespace(estreePlugin);
34
37
  var typeScriptPlugin__namespace = /*#__PURE__*/_interopNamespace(typeScriptPlugin);
35
38
 
@@ -213,6 +216,7 @@ var DEFAULT_NAME_TRANSFORMERS = {
213
216
  programInstructionsEnum: (name) => `${nodes.pascalCase(name)}Instruction`,
214
217
  programInstructionsEnumVariant: (name) => `${nodes.pascalCase(name)}`,
215
218
  programInstructionsIdentifierFunction: (name) => `identify${nodes.pascalCase(name)}Instruction`,
219
+ programInstructionsParseFunction: (name) => `parse${nodes.pascalCase(name)}Instruction`,
216
220
  programInstructionsParsedUnionType: (name) => `Parsed${nodes.pascalCase(name)}Instruction`,
217
221
  programIsErrorFunction: (name) => `is${nodes.pascalCase(name)}Error`,
218
222
  resolverFunction: (name) => `${nodes.camelCase(name)}`
@@ -409,25 +413,17 @@ var getDefinedTypeNodesToExtract = (nodes$1, parsedCustomDataOptions) => nodes$1
409
413
  ];
410
414
  });
411
415
  var DEFAULT_PRETTIER_OPTIONS = {
412
- arrowParens: "always",
413
- parser: "typescript",
414
- plugins: [estreePlugin__namespace, typeScriptPlugin__namespace],
415
- printWidth: 80,
416
- semi: true,
417
- singleQuote: true,
418
- tabWidth: 2,
419
- trailingComma: "es5",
420
- useTabs: false
416
+ plugins: [estreePlugin__namespace, typeScriptPlugin__namespace, babelPlugin__namespace]
421
417
  };
422
- async function formatCode(renderMap, options) {
418
+ async function getCodeFormatter(options) {
423
419
  const shouldFormatCode = options.formatCode ?? true;
424
- if (!shouldFormatCode) return renderMap;
420
+ if (!shouldFormatCode) return (code) => Promise.resolve(code);
425
421
  const prettierOptions = {
426
422
  ...DEFAULT_PRETTIER_OPTIONS,
427
423
  ...await resolvePrettierOptions(options.packageFolder),
428
424
  ...options.prettierOptions
429
425
  };
430
- return await renderersCore.mapRenderMapContentAsync(renderMap, (code) => prettier.format(code, prettierOptions));
426
+ return (code, filepath) => standalone.format(code, { ...prettierOptions, filepath });
431
427
  }
432
428
  async function resolvePrettierOptions(packageFolder) {
433
429
  {
@@ -491,7 +487,7 @@ var DEFAULT_DEPENDENCY_VERSIONS = {
491
487
  "@solana/rpc-types": "^5.0.0",
492
488
  "@solana/signers": "^5.0.0"
493
489
  };
494
- function syncPackageJson(renderMap, options) {
490
+ async function syncPackageJson(renderMap, formatCode, options) {
495
491
  const shouldSyncPackageJson = options.syncPackageJson ?? false;
496
492
  const packageFolder = options.packageFolder;
497
493
  if (!packageFolder) {
@@ -515,10 +511,10 @@ function syncPackageJson(renderMap, options) {
515
511
  }
516
512
  if (renderersCore.fileExists(packageJsonPath)) {
517
513
  const packageJson = updateExistingPackageJson(renderersCore.readJson(packageJsonPath), usedDependencies);
518
- renderersCore.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
514
+ await writePackageJson(packageJson, packageJsonPath, formatCode);
519
515
  } else {
520
516
  const packageJson = createNewPackageJson(usedDependencies);
521
- renderersCore.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n");
517
+ await writePackageJson(packageJson, packageJsonPath, formatCode);
522
518
  }
523
519
  }
524
520
  function createNewPackageJson(dependencyVersions) {
@@ -646,6 +642,11 @@ function updateDependency(dependencyGroup, dependency, requiredRange) {
646
642
  if (!shouldUpdateRange(dependency, currentRange, requiredRange)) return;
647
643
  dependencyGroup[dependency] = requiredRange;
648
644
  }
645
+ async function writePackageJson(packageJson, packageJsonPath, formatCode) {
646
+ const packageJsonContent = JSON.stringify(packageJson, null, 2) + "\n";
647
+ const formattedContent = await formatCode(packageJsonContent, packageJsonPath);
648
+ renderersCore.writeFile(packageJsonPath, formattedContent);
649
+ }
649
650
 
650
651
  // src/fragments/accountFetchHelpers.ts
651
652
  function getAccountFetchHelpersFragment(scope) {
@@ -2113,7 +2114,8 @@ function getProgramInstructionsFragment(scope) {
2113
2114
  [
2114
2115
  getProgramInstructionsEnumFragment(scopeWithInstructions),
2115
2116
  getProgramInstructionsIdentifierFunctionFragment(scopeWithInstructions),
2116
- getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions)
2117
+ getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions),
2118
+ getProgramInstructionsParseFunctionFragment(scopeWithInstructions)
2117
2119
  ],
2118
2120
  (c) => c.join("\n\n")
2119
2121
  );
@@ -2182,6 +2184,39 @@ function getProgramInstructionsParsedUnionTypeFragment(scope) {
2182
2184
  (c) => c.join("\n")
2183
2185
  );
2184
2186
  }
2187
+ function getProgramInstructionsParseFunctionFragment(scope) {
2188
+ const { programNode, nameApi, allInstructions } = scope;
2189
+ const instructionsWithDiscriminators = allInstructions.filter(
2190
+ (instruction) => (instruction.discriminators ?? []).length > 0
2191
+ );
2192
+ if (instructionsWithDiscriminators.length === 0) return;
2193
+ const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);
2194
+ const programInstructionsIdentifierFunction = nameApi.programInstructionsIdentifierFunction(programNode.name);
2195
+ const programInstructionsParsedUnionType = nameApi.programInstructionsParsedUnionType(programNode.name);
2196
+ const parseFunction = nameApi.programInstructionsParseFunction(programNode.name);
2197
+ const switchCases = mergeFragments(
2198
+ allInstructions.map((instruction) => {
2199
+ const enumVariant = nameApi.programInstructionsEnumVariant(instruction.name);
2200
+ const parseFunction2 = use(nameApi.instructionParseFunction(instruction.name), "generatedInstructions");
2201
+ const assertIsInstructionWithAccounts = use("assertIsInstructionWithAccounts", "solanaInstructions");
2202
+ const hasAccounts = instruction.accounts.length > 0;
2203
+ const assertionsCode = hasAccounts ? fragment`${assertIsInstructionWithAccounts}(instruction);\n` : fragment``;
2204
+ return fragment`case ${programInstructionsEnum}.${enumVariant}: { ${assertionsCode}return { instructionType: ${programInstructionsEnum}.${enumVariant}, ...${parseFunction2}(instruction) }; }`;
2205
+ }),
2206
+ (c) => c.join("\n")
2207
+ );
2208
+ return fragment`
2209
+ export function ${parseFunction}<TProgram extends string>(
2210
+ instruction: ${use("type Instruction", "solanaInstructions")}<TProgram>
2211
+ & ${use("type InstructionWithData", "solanaInstructions")}<${use("type ReadonlyUint8Array", "solanaCodecsCore")}>
2212
+ ): ${programInstructionsParsedUnionType}<TProgram> {
2213
+ const instructionType = ${programInstructionsIdentifierFunction}(instruction);
2214
+ switch (instructionType) {
2215
+ ${switchCases}
2216
+ default: throw new Error("Unrecognized instruction type: " + instructionType);
2217
+ }
2218
+ }`;
2219
+ }
2185
2220
 
2186
2221
  // src/fragments/programPage.ts
2187
2222
  function getProgramPageFragment(scope) {
@@ -3227,8 +3262,9 @@ function renderVisitor(path, options = {}) {
3227
3262
  renderersCore.deleteDirectory(path);
3228
3263
  }
3229
3264
  let renderMap = visitorsCore.visit(root, getRenderMapVisitor(options));
3230
- renderMap = await formatCode(renderMap, options);
3231
- syncPackageJson(renderMap, options);
3265
+ const formatCode = await getCodeFormatter(options);
3266
+ renderMap = await renderersCore.mapRenderMapContentAsync(renderMap, formatCode);
3267
+ await syncPackageJson(renderMap, formatCode, options);
3232
3268
  renderersCore.writeRenderMap(renderMap, path);
3233
3269
  });
3234
3270
  }