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
6 changes: 3 additions & 3 deletions apps/oxfmt/src/core/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub enum ResolvedOptions {
#[cfg(feature = "napi")]
ExternalFormatterPackageJson {
external_options: Value,
sort_package_json: bool,
sort_package_json: Option<sort_package_json::SortOptions>,
insert_final_newline: bool,
},
}
Expand Down Expand Up @@ -194,7 +194,7 @@ impl ConfigResolver {
.expect("`build_and_validate()` must be called before `resolve()`")
};

let insert_final_newline = oxfmt_options.insert_final_newline;
let OxfmtOptions { sort_package_json, insert_final_newline, .. } = oxfmt_options;

match strategy {
FormatFileStrategy::OxcFormatter { .. } => ResolvedOptions::OxcFormatter {
Expand All @@ -214,7 +214,7 @@ impl ConfigResolver {
FormatFileStrategy::ExternalFormatterPackageJson { .. } => {
ResolvedOptions::ExternalFormatterPackageJson {
external_options,
sort_package_json: oxfmt_options.sort_package_json.is_some(),
sort_package_json,
insert_final_newline,
}
}
Expand Down
9 changes: 4 additions & 5 deletions apps/oxfmt/src/core/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ impl SourceFormatter {
path,
parser_name,
external_options,
sort_package_json,
sort_package_json.as_ref(),
),
insert_final_newline,
),
Expand Down Expand Up @@ -221,12 +221,11 @@ impl SourceFormatter {
path: &Path,
parser_name: &str,
external_options: Value,
sort_package_json: bool,
sort_options: Option<&sort_package_json::SortOptions>,
) -> Result<String, OxcDiagnostic> {
let source_text: Cow<'_, str> = if sort_package_json {
let options = sort_package_json::SortOptions { sort_scripts: false, pretty: false };
let source_text: Cow<'_, str> = if let Some(options) = sort_options {
Cow::Owned(
sort_package_json::sort_package_json_with_options(source_text, &options).map_err(
sort_package_json::sort_package_json_with_options(source_text, options).map_err(
|err| {
OxcDiagnostic::error(format!(
"Failed to sort package.json: {}\n{err}",
Expand Down
127 changes: 127 additions & 0 deletions apps/oxfmt/test/__snapshots__/sort_package_json.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`sort_package_json > should not sort package.json when disabled 1`] = `
"--- FILE -----------
package.json
--- BEFORE ---------
{
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"name": "fixture",
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
},
"version": "1.0.0",
"dependencies": {
"react": "18.0.0"
}
}

--- AFTER ----------
{
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"name": "fixture",
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
},
"version": "1.0.0",
"dependencies": {
"react": "18.0.0"
}
}

--------------------"
`;

exports[`sort_package_json > should sort package.json by default 1`] = `
"--- FILE -----------
package.json
--- BEFORE ---------
{
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"name": "fixture",
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
},
"version": "1.0.0",
"dependencies": {
"react": "18.0.0"
}
}

--- AFTER ----------
{
"name": "fixture",
"version": "1.0.0",
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"dependencies": {
"react": "18.0.0"
},
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
}
}

--------------------"
`;

exports[`sort_package_json > should sort scripts when sortScripts is enabled 1`] = `
"--- FILE -----------
package.json
--- BEFORE ---------
{
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"name": "fixture",
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
},
"version": "1.0.0",
"dependencies": {
"react": "18.0.0"
}
}

--- AFTER ----------
{
"name": "fixture",
"version": "1.0.0",
"scripts": {
"build": "tsc",
"dev": "vite",
"test": "vitest"
},
"dependencies": {
"react": "18.0.0"
},
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
}
}

--------------------"
`;
3 changes: 3 additions & 0 deletions apps/oxfmt/test/fixtures/sort_package_json/disabled.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"experimentalSortPackageJson": false
}
16 changes: 16 additions & 0 deletions apps/oxfmt/test/fixtures/sort_package_json/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"scripts": {
"test": "vitest",
"build": "tsc",
"dev": "vite"
},
"name": "fixture",
"devDependencies": {
"typescript": "5.0.0",
"vitest": "1.0.0"
},
"version": "1.0.0",
"dependencies": {
"react": "18.0.0"
}
}
5 changes: 5 additions & 0 deletions apps/oxfmt/test/fixtures/sort_package_json/sort_scripts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"experimentalSortPackageJson": {
"sortScripts": true
}
}
30 changes: 30 additions & 0 deletions apps/oxfmt/test/sort_package_json.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { describe, expect, it } from "vitest";
import { join } from "node:path";
import { runWriteModeAndSnapshot } from "./utils";

const fixtureDir = join(__dirname, "fixtures", "sort_package_json");

describe("sort_package_json", () => {
it("should sort package.json by default", async () => {
const snapshot = await runWriteModeAndSnapshot(fixtureDir, ["package.json"]);
expect(snapshot).toMatchSnapshot();
});

it("should not sort package.json when disabled", async () => {
const snapshot = await runWriteModeAndSnapshot(
fixtureDir,
["package.json"],
["-c", "disabled.json"],
);
expect(snapshot).toMatchSnapshot();
});

it("should sort scripts when sortScripts is enabled", async () => {
const snapshot = await runWriteModeAndSnapshot(
fixtureDir,
["package.json"],
["-c", "sort_scripts.json"],
);
expect(snapshot).toMatchSnapshot();
});
});
Loading