Skip to content

Commit e468f89

Browse files
authored
Use file path when formatting and format updated package.json (#87)
1 parent c781ee8 commit e468f89

File tree

11 files changed

+153
-135
lines changed

11 files changed

+153
-135
lines changed

.changeset/khaki-pans-film.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@codama/renderers-js': patch
3+
---
4+
5+
Use file path when formatting and format updated package.json

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"dependencies": {
5353
"@codama/errors": "^1.4.4",
5454
"@codama/nodes": "^1.4.4",
55-
"@codama/renderers-core": "^1.3.3",
55+
"@codama/renderers-core": "^1.3.4",
5656
"@codama/visitors-core": "^1.4.4",
5757
"@solana/codecs-strings": "^5.0.0",
5858
"prettier": "^3.6.2",

pnpm-lock.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utils/formatCode.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
import { joinPath, mapRenderMapContentAsync, RenderMap } from '@codama/renderers-core';
1+
import { joinPath, Path } from '@codama/renderers-core';
22
import { Plugin, resolveConfig } from 'prettier';
3+
import * as babelPlugin from 'prettier/plugins/babel';
34
import * as estreePlugin from 'prettier/plugins/estree';
45
import * as typeScriptPlugin from 'prettier/plugins/typescript';
56
import { format } from 'prettier/standalone';
67

7-
import { Fragment } from './fragment';
88
import { RenderOptions } from './options';
99

1010
export type PrettierOptions = Parameters<typeof format>[1];
1111

1212
const DEFAULT_PRETTIER_OPTIONS: PrettierOptions = {
13-
parser: 'typescript',
14-
plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],
13+
plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin, babelPlugin],
1514
};
1615

17-
export async function formatCode(
18-
renderMap: RenderMap<Fragment>,
16+
export type CodeFormatter = (code: string, path: Path) => Promise<string>;
17+
18+
export async function getCodeFormatter(
1919
options: Pick<RenderOptions, 'formatCode' | 'packageFolder' | 'prettierOptions'>,
20-
): Promise<RenderMap<Fragment>> {
20+
): Promise<CodeFormatter> {
2121
const shouldFormatCode = options.formatCode ?? true;
22-
if (!shouldFormatCode) return renderMap;
22+
if (!shouldFormatCode) return code => Promise.resolve(code);
2323

2424
const prettierOptions: PrettierOptions = {
2525
...DEFAULT_PRETTIER_OPTIONS,
2626
...(await resolvePrettierOptions(options.packageFolder)),
2727
...options.prettierOptions,
2828
};
2929

30-
return await mapRenderMapContentAsync(renderMap, code => format(code, prettierOptions));
30+
return (code, filepath) => format(code, { ...prettierOptions, filepath });
3131
}
3232

3333
async function resolvePrettierOptions(packageFolder: string | undefined): Promise<PrettierOptions | null> {

src/utils/packageJson.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS, CodamaError, logW
22
import { fileExists, joinPath, readJson, RenderMap, writeFile } from '@codama/renderers-core';
33
import { lt as ltVersion, minVersion, subset } from 'semver';
44

5+
import type { CodeFormatter } from './formatCode';
56
import { Fragment, mergeFragments } from './fragment';
67
import { getExternalDependencies } from './importMap';
78
import { RenderOptions } from './options';
@@ -33,13 +34,14 @@ export const DEFAULT_DEPENDENCY_VERSIONS: DependencyVersions = {
3334
'@solana/signers': '^5.0.0',
3435
};
3536

36-
export function syncPackageJson(
37+
export async function syncPackageJson(
3738
renderMap: RenderMap<Fragment>,
39+
formatCode: CodeFormatter,
3840
options: Pick<
3941
RenderOptions,
4042
'dependencyMap' | 'dependencyVersions' | 'packageFolder' | 'syncPackageJson' | 'useGranularImports'
4143
>,
42-
): void {
44+
): Promise<void> {
4345
const shouldSyncPackageJson = options.syncPackageJson ?? false;
4446
const packageFolder = options.packageFolder;
4547

@@ -72,10 +74,10 @@ export function syncPackageJson(
7274

7375
if (fileExists(packageJsonPath)) {
7476
const packageJson = updateExistingPackageJson(readJson(packageJsonPath), usedDependencies);
75-
writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
77+
await writePackageJson(packageJson, packageJsonPath, formatCode);
7678
} else {
7779
const packageJson = createNewPackageJson(usedDependencies);
78-
writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
80+
await writePackageJson(packageJson, packageJsonPath, formatCode);
7981
}
8082
}
8183

@@ -235,3 +237,13 @@ function updateDependency(dependencyGroup: Record<string, string>, dependency: s
235237
if (!shouldUpdateRange(dependency, currentRange, requiredRange)) return;
236238
dependencyGroup[dependency] = requiredRange;
237239
}
240+
241+
async function writePackageJson(
242+
packageJson: PackageJson,
243+
packageJsonPath: string,
244+
formatCode: CodeFormatter,
245+
): Promise<void> {
246+
const packageJsonContent = JSON.stringify(packageJson, null, 2) + '\n';
247+
const formattedContent = await formatCode(packageJsonContent, packageJsonPath);
248+
writeFile(packageJsonPath, formattedContent);
249+
}

src/visitors/renderVisitor.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { deleteDirectory, writeRenderMap } from '@codama/renderers-core';
1+
import { deleteDirectory, mapRenderMapContentAsync, writeRenderMap } from '@codama/renderers-core';
22
import { rootNodeVisitor, visit } from '@codama/visitors-core';
33

4-
import { formatCode, RenderOptions, syncPackageJson } from '../utils';
4+
import { getCodeFormatter, RenderOptions, syncPackageJson } from '../utils';
55
import { getRenderMapVisitor } from './getRenderMapVisitor';
66

77
export function renderVisitor(path: string, options: RenderOptions = {}) {
@@ -15,10 +15,11 @@ export function renderVisitor(path: string, options: RenderOptions = {}) {
1515
let renderMap = visit(root, getRenderMapVisitor(options));
1616

1717
// Format the code, if requested.
18-
renderMap = await formatCode(renderMap, options);
18+
const formatCode = await getCodeFormatter(options);
19+
renderMap = await mapRenderMapContentAsync(renderMap, formatCode);
1920

2021
// Create or update package.json dependencies, if requested.
21-
syncPackageJson(renderMap, options);
22+
await syncPackageJson(renderMap, formatCode, options);
2223

2324
// Write the rendered files to the output directory.
2425
writeRenderMap(renderMap, path);

test/e2e/anchor/package.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
2-
"name": "@codama/renderers-js-e2e-anchor",
3-
"private": true,
4-
"version": "0.0.0",
5-
"type": "commonjs",
6-
"sideEffects": false,
7-
"scripts": {
8-
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9-
"test": "ava",
10-
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11-
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12-
},
13-
"dependencies": {
14-
"@solana/kit": "^5.0.0"
15-
},
16-
"license": "MIT",
17-
"ava": {
18-
"typescript": {
19-
"compile": false,
20-
"rewritePaths": {
21-
"test/": "dist/test/"
22-
}
2+
"name": "@codama/renderers-js-e2e-anchor",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "commonjs",
6+
"sideEffects": false,
7+
"scripts": {
8+
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9+
"test": "ava",
10+
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11+
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12+
},
13+
"dependencies": {
14+
"@solana/kit": "^5.0.0"
15+
},
16+
"license": "MIT",
17+
"ava": {
18+
"typescript": {
19+
"compile": false,
20+
"rewritePaths": {
21+
"test/": "dist/test/"
22+
}
23+
}
2324
}
24-
}
2525
}

test/e2e/dummy/package.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
2-
"name": "@codama/renderers-js-e2e-dummy",
3-
"private": true,
4-
"version": "0.0.0",
5-
"type": "commonjs",
6-
"sideEffects": false,
7-
"scripts": {
8-
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9-
"test": "ava",
10-
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11-
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12-
},
13-
"dependencies": {
14-
"@solana/kit": "^5.0.0"
15-
},
16-
"license": "MIT",
17-
"ava": {
18-
"typescript": {
19-
"compile": false,
20-
"rewritePaths": {
21-
"test/": "dist/test/"
22-
}
2+
"name": "@codama/renderers-js-e2e-dummy",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "commonjs",
6+
"sideEffects": false,
7+
"scripts": {
8+
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9+
"test": "ava",
10+
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11+
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12+
},
13+
"dependencies": {
14+
"@solana/kit": "^5.0.0"
15+
},
16+
"license": "MIT",
17+
"ava": {
18+
"typescript": {
19+
"compile": false,
20+
"rewritePaths": {
21+
"test/": "dist/test/"
22+
}
23+
}
2324
}
24-
}
2525
}

test/e2e/memo/package.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
2-
"name": "@codama/renderers-js-e2e-memo",
3-
"private": true,
4-
"version": "0.0.0",
5-
"type": "commonjs",
6-
"sideEffects": false,
7-
"scripts": {
8-
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9-
"test": "ava",
10-
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11-
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12-
},
13-
"dependencies": {
14-
"@solana/kit": "^5.0.0"
15-
},
16-
"license": "MIT",
17-
"ava": {
18-
"typescript": {
19-
"compile": false,
20-
"rewritePaths": {
21-
"test/": "dist/test/"
22-
}
2+
"name": "@codama/renderers-js-e2e-memo",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "commonjs",
6+
"sideEffects": false,
7+
"scripts": {
8+
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9+
"test": "ava",
10+
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11+
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12+
},
13+
"dependencies": {
14+
"@solana/kit": "^5.0.0"
15+
},
16+
"license": "MIT",
17+
"ava": {
18+
"typescript": {
19+
"compile": false,
20+
"rewritePaths": {
21+
"test/": "dist/test/"
22+
}
23+
}
2324
}
24-
}
2525
}

test/e2e/system/package.json

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
2-
"name": "@codama/renderers-js-e2e-system",
3-
"private": true,
4-
"version": "0.0.0",
5-
"type": "commonjs",
6-
"sideEffects": false,
7-
"scripts": {
8-
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9-
"test": "ava",
10-
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11-
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12-
},
13-
"dependencies": {
14-
"@solana/kit": "^5.0.0"
15-
},
16-
"license": "MIT",
17-
"ava": {
18-
"typescript": {
19-
"compile": false,
20-
"rewritePaths": {
21-
"test/": "dist/test/"
22-
}
2+
"name": "@codama/renderers-js-e2e-system",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "commonjs",
6+
"sideEffects": false,
7+
"scripts": {
8+
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
9+
"test": "ava",
10+
"lint": "eslint --ext js,ts,tsx src && prettier --check src test",
11+
"lint:fix": "eslint --fix --ext js,ts,tsx src && prettier --write src test"
12+
},
13+
"dependencies": {
14+
"@solana/kit": "^5.0.0"
15+
},
16+
"license": "MIT",
17+
"ava": {
18+
"typescript": {
19+
"compile": false,
20+
"rewritePaths": {
21+
"test/": "dist/test/"
22+
}
23+
}
2324
}
24-
}
2525
}

0 commit comments

Comments
 (0)