├── .rustfmt.toml ├── js ├── node │ ├── shims │ │ └── url.js │ ├── types.d.ts │ ├── tsconfig.json │ ├── package.json │ └── main.ts └── main.js ├── .gitignore ├── rust-toolchain.toml ├── plugin ├── src │ ├── lib.rs │ ├── main.rs │ ├── handler.rs │ ├── formatter.rs │ └── config.rs ├── tests │ ├── specs │ │ ├── Config.txt │ │ ├── Css.txt │ │ ├── override_config │ │ │ ├── OverrideConfig.txt │ │ │ └── OverrideConfig2.txt │ │ ├── TypeScript.txt │ │ ├── JavaScript.txt │ │ ├── JavaScript_JsDocPlugin.txt │ │ └── Svelte.txt │ └── tests.rs ├── Cargo.toml └── build.rs ├── base ├── src │ ├── lib.rs │ ├── snapshot.rs │ ├── util.rs │ ├── build.rs │ ├── runtime.rs │ └── channel.rs └── Cargo.toml ├── deno.json ├── .gitattributes ├── scripts ├── output_prettier_version.ts ├── local_test.ts ├── create_plugin_file.ts ├── create_for_testing.ts └── update.ts ├── dprint.json ├── Cargo.toml ├── .github └── workflows │ ├── release.yml │ ├── check_updates.yml │ ├── ci.generate.ts │ └── ci.yml ├── LICENSE ├── README.md ├── deno.lock └── Cargo.lock /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 2 | edition = "2021" 3 | -------------------------------------------------------------------------------- /js/node/shims/url.js: -------------------------------------------------------------------------------- 1 | module.export.URL = URL; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | js/node/dist/ 2 | target 3 | node_modules 4 | .parcel-cache 5 | .vscode -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "1.83.0" 3 | components = ["clippy", "rustfmt"] 4 | -------------------------------------------------------------------------------- /js/node/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module "prettier-plugin-svelte"; 2 | declare module "prettier-plugin-astro"; 3 | -------------------------------------------------------------------------------- /plugin/src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate dprint_core; 2 | 3 | pub mod config; 4 | mod formatter; 5 | mod handler; 6 | 7 | pub use handler::*; 8 | -------------------------------------------------------------------------------- /base/src/lib.rs: -------------------------------------------------------------------------------- 1 | #[cfg(feature = "build")] 2 | pub mod build; 3 | pub mod channel; 4 | pub mod runtime; 5 | pub mod snapshot; 6 | pub mod util; 7 | -------------------------------------------------------------------------------- /plugin/tests/specs/Config.txt: -------------------------------------------------------------------------------- 1 | ~~ indentWidth: 4 ~~ 2 | == should respect indentation == 3 | function test() { 4 | test; 5 | } 6 | 7 | [expect] 8 | function test() { 9 | test; 10 | } 11 | -------------------------------------------------------------------------------- /plugin/tests/specs/Css.txt: -------------------------------------------------------------------------------- 1 | -- file.css -- 2 | == should format == 3 | .selector { 4 | 5 | display : none 6 | 7 | } 8 | 9 | [expect] 10 | .selector { 11 | display: none; 12 | } 13 | -------------------------------------------------------------------------------- /plugin/tests/specs/override_config/OverrideConfig.txt: -------------------------------------------------------------------------------- 1 | -- file.js -- 2 | ~~ singleQuote: true, js.singleQuote: false, ts.singleQuote: true ~~ 3 | == should format with double quotes == 4 | 'test'; 5 | 6 | [expect] 7 | "test"; 8 | -------------------------------------------------------------------------------- /plugin/tests/specs/override_config/OverrideConfig2.txt: -------------------------------------------------------------------------------- 1 | -- file.d.TS -- 2 | ~~ singleQuote: false, js.singleQuote: false, ts.singleQuote: true ~~ 3 | == should format with double quotes == 4 | 'test'; 5 | 6 | [expect] 7 | 'test'; 8 | -------------------------------------------------------------------------------- /deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": { 3 | "setup": "cd js/node && npm ci" 4 | }, 5 | "imports": { 6 | "dax": "jsr:@david/dax@0.42", 7 | "@std/semver": "jsr:@std/semver@1", 8 | "@std/yaml": "jsr:@std/yaml@1" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /plugin/tests/specs/TypeScript.txt: -------------------------------------------------------------------------------- 1 | -- file.ts -- 2 | == should format == 3 | function test ( t : any, u = 5, 4 | v = 'text' ) 5 | { console .log ( 5 )} 6 | 7 | [expect] 8 | function test(t: any, u = 5, v = "text") { 9 | console.log(5); 10 | } 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # force lf newlines 2 | * text=auto eol=lf 3 | 4 | *.rs text eol=lf 5 | *.ts text eol=lf 6 | *.js text eol=lf 7 | *.json text eol=lf 8 | *.toml text eol=lf 9 | *.md text eol=lf 10 | *.sh text eol=lf 11 | *.yml text eol=lf 12 | 13 | *.jpg binary 14 | *.png binary 15 | -------------------------------------------------------------------------------- /scripts/output_prettier_version.ts: -------------------------------------------------------------------------------- 1 | import $ from "dax"; 2 | 3 | const rootDir = $.path(import.meta.dirname!).parentOrThrow(); 4 | const packageJson = rootDir.join("js/node/package.json").readJsonSync<{ dependencies: Record }>(); 5 | console.log(packageJson.dependencies["prettier"].replace("^", "")); 6 | -------------------------------------------------------------------------------- /plugin/tests/specs/JavaScript.txt: -------------------------------------------------------------------------------- 1 | -- file.js -- 2 | == should format == 3 | class Test { 4 | /** js doc 5 | for method 6 | */ 7 | method ( ) { console .log ( 5 )} 8 | } 9 | 10 | [expect] 11 | class Test { 12 | /** js doc 13 | for method 14 | */ 15 | method() { 16 | console.log(5); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugin/tests/specs/JavaScript_JsDocPlugin.txt: -------------------------------------------------------------------------------- 1 | -- file.js -- 2 | ~~ plugin.jsDoc: true ~~ 3 | == should format == 4 | class Test { 5 | /** js doc 6 | for method 7 | */ 8 | method ( ) { console .log ( 5 )} 9 | } 10 | 11 | [expect] 12 | class Test { 13 | /** Js doc for method */ 14 | method() { 15 | console.log(5); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /js/node/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "esModuleInterop": true, 8 | "removeComments": true, 9 | "importHelpers": false 10 | }, 11 | "include": [ 12 | "./src", 13 | "main.ts", 14 | "types.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /plugin/tests/specs/Svelte.txt: -------------------------------------------------------------------------------- 1 | -- file.svelte -- 2 | == should format == 3 | 6 | 7 | {#if files && files[0]} 8 |

9 | {files[0].name} 10 |

11 | {/if} 12 | 13 | [expect] 14 | 17 | 18 | 19 | {#if files && files[0]} 20 |

21 | {files[0].name} 22 |

23 | {/if} 24 | -------------------------------------------------------------------------------- /base/src/snapshot.rs: -------------------------------------------------------------------------------- 1 | pub fn deserialize_snapshot(data: &[u8]) -> std::io::Result> { 2 | // compressing takes about a minute in debug, so only do it in release 3 | if cfg!(debug_assertions) { 4 | Ok(data.to_vec().into_boxed_slice()) 5 | } else { 6 | Ok( 7 | zstd::bulk::decompress( 8 | &data[4..], 9 | u32::from_le_bytes(data[0..4].try_into().unwrap()) as usize, 10 | )? 11 | .into_boxed_slice(), 12 | ) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | import * as console from "ext:deno_console/01_console.js"; 2 | import * as url from "ext:deno_url/00_url.js"; 3 | import * as urlPattern from "ext:deno_url/01_urlpattern.js"; 4 | 5 | globalThis.URL = url.URL; 6 | globalThis.URLPattern = urlPattern.URLPattern; 7 | globalThis.URLSearchParams = urlPattern.URLSearchParams; 8 | const core = globalThis.Deno.core; 9 | // always print to stderr because we use stdout for communication 10 | globalThis.console = new console.Console((msg, _level) => core.print(msg, true)); 11 | -------------------------------------------------------------------------------- /scripts/local_test.ts: -------------------------------------------------------------------------------- 1 | import $ from "dax"; 2 | import { getChecksum } from "https://raw.githubusercontent.com/dprint/automation/0.10.0/hash.ts"; 3 | 4 | await $`./scripts/create_for_testing.ts`; 5 | const checksum = await getChecksum($.path("./target/release/plugin.json").readBytesSync()); 6 | const dprintConfig = $.path("dprint.json"); 7 | const data = dprintConfig.readJsonSync<{ plugins: string[] }>(); 8 | const index = data.plugins.findIndex(d => d.startsWith("./target") || d.includes("prettier")); 9 | data.plugins[index] = `./target/release/plugin.json@${checksum}`; 10 | dprintConfig.writeJsonPrettySync(data); 11 | await $`dprint fmt`; 12 | -------------------------------------------------------------------------------- /scripts/create_plugin_file.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S deno run --allow-env --allow-read --allow-write --allow-net=deno.land 2 | import $ from "dax"; 3 | import { CargoToml, processPlugin } from "https://raw.githubusercontent.com/dprint/automation/0.10.0/mod.ts"; 4 | 5 | const rootDir = $.path(import.meta.dirname!).parentOrThrow(); 6 | const cargoFilePath = rootDir.join("plugin/Cargo.toml"); 7 | 8 | await processPlugin.createDprintOrgProcessPlugin({ 9 | pluginName: "dprint-plugin-prettier", 10 | version: new CargoToml(cargoFilePath).version(), 11 | platforms: [ 12 | "darwin-x86_64", 13 | "darwin-aarch64", 14 | "linux-x86_64", 15 | "linux-aarch64", 16 | "windows-x86_64", 17 | ], 18 | isTest: Deno.args.some(a => a == "--test"), 19 | }); 20 | -------------------------------------------------------------------------------- /dprint.json: -------------------------------------------------------------------------------- 1 | { 2 | "indentWidth": 2, 3 | "exec": { 4 | "commands": [{ 5 | "command": "rustfmt", 6 | "exts": ["rs"] 7 | }] 8 | }, 9 | "excludes": [ 10 | "js/node/startup.js", 11 | "**/dist", 12 | "**/node_modules", 13 | "**/*-lock.json", 14 | "**/target" 15 | ], 16 | "plugins": [ 17 | "https://plugins.dprint.dev/typescript-0.93.3.wasm", 18 | "https://plugins.dprint.dev/json-0.19.4.wasm", 19 | "https://plugins.dprint.dev/markdown-0.17.8.wasm", 20 | "https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf", 21 | "https://plugins.dprint.dev/prettier-0.52.1.json@53aeb0ec21d868dd53dcd081b5ea9e9c0dd02ffbc2d1a35c8e66b854d826b4e4", 22 | "https://plugins.dprint.dev/toml-0.6.4.wasm" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /plugin/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "dprint-plugin-prettier" 3 | version = "0.63.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | deno_console.workspace = true 8 | deno_core.workspace = true 9 | deno_url.workspace = true 10 | deno_webidl.workspace = true 11 | dprint-core = { workspace = true, features = ["process"] } 12 | dprint-plugin-deno-base = { version = "0.1.0", path = "../base" } 13 | serde.workspace = true 14 | serde_json.workspace = true 15 | 16 | [build-dependencies] 17 | deno_console.workspace = true 18 | deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } 19 | dprint-plugin-deno-base = { version = "0.1.0", features = ["build"], path = "../base" } 20 | deno_url.workspace = true 21 | deno_webidl.workspace = true 22 | sha256 = "1.5.0" 23 | zstd.workspace = true 24 | 25 | [dev-dependencies] 26 | dprint-development = "0.9.5" 27 | pretty_assertions = "1.4.0" 28 | -------------------------------------------------------------------------------- /base/src/util.rs: -------------------------------------------------------------------------------- 1 | use sysinfo::MemoryRefreshKind; 2 | use sysinfo::System; 3 | 4 | /// Creates a single threaded tokio runtime that can be used 5 | /// with deno_core. 6 | pub fn create_tokio_runtime() -> tokio::runtime::Runtime { 7 | create_tokio_runtime_builder().build().unwrap() 8 | } 9 | 10 | pub fn create_tokio_runtime_builder() -> tokio::runtime::Builder { 11 | // use a single thread for the communication and for 12 | // each of the isolates 13 | let mut builder = tokio::runtime::Builder::new_current_thread(); 14 | builder.enable_time(); 15 | builder 16 | } 17 | 18 | pub fn system_available_memory() -> u64 { 19 | let mut sys = System::new(); 20 | sys.refresh_memory_specifics(MemoryRefreshKind::nothing().with_ram()); 21 | sys.available_memory() 22 | } 23 | 24 | pub fn set_v8_max_memory(max_memory: usize) { 25 | deno_core::v8_set_flags(vec![format!("--max-old-space-size={}", max_memory)]); 26 | } 27 | -------------------------------------------------------------------------------- /plugin/src/main.rs: -------------------------------------------------------------------------------- 1 | use dprint_core::plugins::process::get_parent_process_id_from_cli_args; 2 | use dprint_core::plugins::process::handle_process_stdio_messages; 3 | use dprint_core::plugins::process::start_parent_process_checker_task; 4 | use dprint_plugin_deno_base::runtime::JsRuntime; 5 | use dprint_plugin_deno_base::util::create_tokio_runtime; 6 | use handler::PrettierPluginHandler; 7 | 8 | mod config; 9 | mod formatter; 10 | mod handler; 11 | 12 | fn main() { 13 | JsRuntime::initialize_main_thread(); 14 | let runtime = create_tokio_runtime(); 15 | let result = runtime.block_on(async { 16 | if let Some(parent_process_id) = get_parent_process_id_from_cli_args() { 17 | start_parent_process_checker_task(parent_process_id); 18 | } 19 | 20 | handle_process_stdio_messages(PrettierPluginHandler::default()).await 21 | }); 22 | 23 | if let Err(err) = result { 24 | eprintln!("Shutting down due to error: {}", err); 25 | std::process::exit(1); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /scripts/create_for_testing.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S deno run -A 2 | 3 | // Script for quickly creating the plugin for testing purposes on Windows 4 | // To run: 5 | // 1. Run `./scripts/create_plugin_file.ts` 6 | // 2. Update dprint.json to point at ./target/release/plugin.json then update checksum 7 | // as shown when initially run. 8 | 9 | import $ from "dax"; 10 | 11 | await $`npm run build:script`.cwd("js/node"); 12 | await $`cargo build --release`; 13 | if (Deno.build.os === "windows") { 14 | await $`powershell -Command ${"Compress-Archive -Force -Path target/release/dprint-plugin-prettier.exe -DestinationPath target/release/dprint-plugin-prettier-x86_64-pc-windows-msvc.zip"}`; 15 | } else if (Deno.build.os === "linux") { 16 | await $`zip -j target/release/dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip target/release/dprint-plugin-prettier`; 17 | } else { 18 | throw "TODO"; 19 | } 20 | 21 | await $`cd target/release && deno run -A ../../scripts/create_plugin_file.ts --test`; 22 | -------------------------------------------------------------------------------- /base/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "dprint-plugin-deno-base" 3 | version = "0.1.0" 4 | authors = ["David Sherret "] 5 | edition = "2021" 6 | homepage = "https://github.com/dprint/dprint-plugin-prettier" 7 | keywords = ["formatting", "formatter", "typescript", "javascript"] 8 | license = "MIT" 9 | repository = "https://github.com/dprint/dprint-plugin-prettier" 10 | description = "Helper code for creating a formatting plugin for dprint with deno_core." 11 | 12 | [features] 13 | build = [] 14 | 15 | [dependencies] 16 | async-channel = "2.3.1" 17 | deno_core = { workspace = true } 18 | dprint-core = { workspace = true, features = ["process"] } 19 | serde = { workspace = true } 20 | serde_json = { workspace = true } 21 | sysinfo = { version = "0.33", default-features = false, features = ["system"] } 22 | tokio = { version = "1", features = ["macros", "rt", "time"] } 23 | tokio-util = { version = "0.7.13" } 24 | zstd.workspace = true 25 | 26 | [dev-dependencies] 27 | pretty_assertions = "1.4.0" 28 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = [ 4 | "base", 5 | "plugin", 6 | ] 7 | 8 | [workspace.dependencies] 9 | deno_console = "0.184.0" 10 | deno_core = "0.326.0" 11 | deno_url = "0.184.0" 12 | deno_webidl = "0.184.0" 13 | dprint-core = "0.67.2" 14 | serde = { version = "1.0.217", features = ["derive"] } 15 | serde_json = { version = "1", features = ["preserve_order"] } 16 | zstd = "0.13.2" 17 | 18 | # rusty-v8 needs at least -O1 to not miscompile 19 | [profile.dev.package.v8] 20 | opt-level = 1 21 | 22 | [profile.release.package.deno_core] 23 | opt-level = 3 24 | [profile.release.package.deno_url] 25 | opt-level = 3 26 | [profile.release.package.deno_webidl] 27 | opt-level = 3 28 | [profile.release.package.serde] 29 | opt-level = 3 30 | [profile.release.package.serde_v8] 31 | opt-level = 3 32 | [profile.release.package.tokio] 33 | opt-level = 3 34 | [profile.release.package.url] 35 | opt-level = 3 36 | [profile.release.package.v8] 37 | opt-level = 3 38 | [profile.release.package.zstd] 39 | opt-level = 3 40 | [profile.release.package.zstd-sys] 41 | opt-level = 3 42 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | releaseKind: 7 | description: "Kind of release" 8 | default: "minor" 9 | type: choice 10 | options: 11 | - patch 12 | - minor 13 | required: true 14 | 15 | jobs: 16 | rust: 17 | name: release 18 | runs-on: ubuntu-latest 19 | timeout-minutes: 30 20 | 21 | steps: 22 | - name: Clone repository 23 | uses: actions/checkout@v3 24 | with: 25 | token: ${{ secrets.GH_DPRINTBOT_PAT }} 26 | 27 | - uses: denoland/setup-deno@v1 28 | - uses: dsherret/rust-toolchain-file@v1 29 | 30 | - name: Bump version and tag 31 | env: 32 | GITHUB_TOKEN: ${{ secrets.GH_DPRINTBOT_PAT }} 33 | GH_WORKFLOW_ACTOR: ${{ github.actor }} 34 | run: | 35 | git config user.email "${{ github.actor }}@users.noreply.github.com" 36 | git config user.name "${{ github.actor }}" 37 | deno run -A https://raw.githubusercontent.com/dprint/automation/0.10.0/tasks/publish_release.ts --${{github.event.inputs.releaseKind}} plugin/Cargo.toml 38 | -------------------------------------------------------------------------------- /.github/workflows/check_updates.yml: -------------------------------------------------------------------------------- 1 | name: check_updates 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | # do this three times a week 7 | - cron: "0 7 * * 1,3,5" 8 | 9 | jobs: 10 | build: 11 | name: check updates 12 | if: github.repository == 'dprint/dprint-plugin-prettier' 13 | runs-on: ubuntu-latest 14 | timeout-minutes: 30 15 | 16 | steps: 17 | - name: Clone repository 18 | uses: actions/checkout@v4 19 | with: 20 | token: ${{ secrets.GH_DPRINTBOT_PAT }} 21 | 22 | - uses: denoland/setup-deno@v2 23 | - uses: dsherret/rust-toolchain-file@v1 24 | 25 | - name: Run script 26 | run: | 27 | git config user.email "dprintbot@users.noreply.github.com" 28 | git config user.name "dprintbot" 29 | deno run -A ./scripts/update.ts 30 | 31 | # This is necessary to prevent GH automatically dsiabling this workflow after 60 days. 32 | workflow-keepalive: 33 | if: github.event_name == 'schedule' 34 | runs-on: ubuntu-latest 35 | permissions: 36 | actions: write 37 | steps: 38 | - uses: liskin/gh-workflow-keepalive@f72ff1a1336129f29bf0166c0fd0ca6cf1bcb38c 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | prettier: Copyright (c) James Long and contributors (MIT License) 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2020-2023 David Sherret 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /js/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dprint-plugin-prettier", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "build:script": "parcel build" 7 | }, 8 | "source": "./main.ts", 9 | "main": "./dist/startup.js", 10 | "type": "module", 11 | "targets": { 12 | "main": false, 13 | "default": { 14 | "context": "browser", 15 | "includeNodeModules": true, 16 | "optimize": false, 17 | "sourceMap": false, 18 | "outputFormat": "global", 19 | "distDir": "./dist" 20 | } 21 | }, 22 | "browser": { 23 | "url": "./shims/url.js", 24 | "process": "process/browser", 25 | "buffer": "./node_modules/buffer" 26 | }, 27 | "engines": { 28 | "chrome": "58" 29 | }, 30 | "repository": { 31 | "type": "git", 32 | "url": "git+https://github.com/dprint/dprint-plugin-prettier.git" 33 | }, 34 | "author": "", 35 | "license": "MIT", 36 | "bugs": { 37 | "url": "https://github.com/dprint/dprint-plugin-prettier/issues" 38 | }, 39 | "homepage": "https://github.com/dprint/dprint-plugin-prettier#readme", 40 | "dependencies": { 41 | "buffer": "^6.0.3", 42 | "prettier": "^3.7.4", 43 | "prettier-plugin-jsdoc": "^1.8.0", 44 | "prettier-plugin-svelte": "^3.4.1", 45 | "process": "^0.11.10", 46 | "url": "^0.11.4" 47 | }, 48 | "devDependencies": { 49 | "@types/node": "^22", 50 | "crypto-browserify": "^3.12.1", 51 | "events": "^3.3.0", 52 | "parcel": "^2.13.3", 53 | "stream-browserify": "^3.0.0", 54 | "typescript": "^5.7.2", 55 | "util": "^0.12.5" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /base/src/build.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use deno_core::Extension; 4 | use deno_core::JsRuntimeForSnapshot; 5 | 6 | pub type WithRuntimeCb = dyn Fn(&mut JsRuntimeForSnapshot); 7 | 8 | pub struct CreateSnapshotOptions { 9 | pub cargo_manifest_dir: &'static str, 10 | pub snapshot_path: PathBuf, 11 | pub extensions: Vec, 12 | pub with_runtime_cb: Option>, 13 | pub warmup_script: Option<&'static str>, 14 | } 15 | 16 | /// Creates a snapshot, returning the uncompressed bytes. 17 | pub fn create_snapshot(options: CreateSnapshotOptions) -> Box<[u8]> { 18 | let snapshot_output = deno_core::snapshot::create_snapshot( 19 | deno_core::snapshot::CreateSnapshotOptions { 20 | cargo_manifest_dir: options.cargo_manifest_dir, 21 | startup_snapshot: None, 22 | extensions: options.extensions, 23 | skip_op_registration: false, 24 | with_runtime_cb: options.with_runtime_cb, 25 | extension_transpiler: None, 26 | }, 27 | options.warmup_script, 28 | ) 29 | .unwrap(); 30 | 31 | let mut output = snapshot_output.output.clone(); 32 | if !cfg!(debug_assertions) { 33 | eprintln!("Compressing snapshot..."); 34 | let mut vec = Vec::with_capacity(output.len()); 35 | vec.extend((output.len() as u32).to_le_bytes()); 36 | vec.extend_from_slice(&zstd::bulk::compress(&output, 22).expect("snapshot compression failed")); 37 | output = vec.into(); 38 | } 39 | std::fs::write(&options.snapshot_path, output).unwrap(); 40 | 41 | for file in snapshot_output.files_loaded_during_snapshot { 42 | println!("cargo:rerun-if-changed={}", file.display()); 43 | } 44 | 45 | snapshot_output.output 46 | } 47 | -------------------------------------------------------------------------------- /scripts/update.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This script checks for any prettier updates and then automatically 3 | * publishes a new version of the plugin if so. 4 | */ 5 | import * as semver from "@std/semver"; 6 | import $ from "dax"; 7 | 8 | const rootDirPath = $.path(import.meta.dirname!).parentOrThrow(); 9 | 10 | $.logStep("Upgrading prettier..."); 11 | const jsNodePath = rootDirPath.join("./js/node"); 12 | await $`npm install`.cwd(jsNodePath); 13 | await $`npm install --save prettier`.cwd(jsNodePath); 14 | // await $`npm install --save prettier-plugin-astro`.cwd(jsNodePath); 15 | await $`npm install --save prettier-plugin-jsdoc`.cwd(jsNodePath); 16 | await $`npm install --save prettier-plugin-svelte`.cwd(jsNodePath); 17 | 18 | if (!await hasFileChanged("./js/node/package.json")) { 19 | $.log("No changes."); 20 | Deno.exit(0); 21 | } 22 | 23 | $.log("Found changes."); 24 | $.logStep("Bumping version..."); 25 | const newVersion = await bumpMinorVersion(); 26 | 27 | // run the tests 28 | $.logStep("Running tests..."); 29 | await $`cargo test`; 30 | 31 | // release 32 | $.logStep(`Committing and publishing ${newVersion}...`); 33 | await $`git add .`; 34 | await $`git commit -m ${newVersion}`; 35 | await $`git push origin main`; 36 | await $`git tag ${newVersion}`; 37 | await $`git push origin ${newVersion}`; 38 | 39 | async function bumpMinorVersion() { 40 | const projectFile = rootDirPath.join("./plugin/Cargo.toml"); 41 | const text = await projectFile.readText(); 42 | const versionRegex = /^version = "([0-9]+\.[0-9]+\.[0-9]+)"$/m; 43 | const currentVersion = text.match(versionRegex)?.[1]; 44 | if (currentVersion == null) { 45 | throw new Error("Could not find version."); 46 | } 47 | const newVersion = semver.format(semver.increment(semver.parse(currentVersion), "minor")); 48 | const newText = text.replace(versionRegex, `version = "${newVersion}"`); 49 | await projectFile.writeText(newText); 50 | return newVersion; 51 | } 52 | 53 | async function hasFileChanged(file: string) { 54 | try { 55 | await $`git diff --exit-code ${file}`; 56 | return false; 57 | } catch { 58 | return true; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dprint-plugin-prettier 2 | 3 | [![CI](https://github.com/dprint/dprint-plugin-prettier/workflows/CI/badge.svg)](https://github.com/dprint/dprint-plugin-prettier/actions?query=workflow%3ACI) 4 | 5 | Wrapper around [prettier](https://prettier.io/) in order to use it as a dprint plugin. 6 | 7 | ## Install 8 | 9 | 1. Install [dprint](https://dprint.dev/install/) 10 | 2. Follow instructions at https://github.com/dprint/dprint-plugin-prettier/releases/ 11 | 12 | ## Configuration 13 | 14 | See Prettier's configuration [here](https://prettier.io/docs/en/options.html). Specify using the "API Override" column. 15 | 16 | ```jsonc 17 | { 18 | // ...etc... 19 | "prettier": { 20 | "trailingComma": "all", 21 | "singleQuote": true, 22 | "proseWrap": "always", 23 | // enable prettier-plugin-jsdoc 24 | "plugin.jsDoc": true 25 | } 26 | } 27 | ``` 28 | 29 | ### File extension specific configuration 30 | 31 | Add the file extension to the start of the configuration option. For example: 32 | 33 | ```jsonc 34 | { 35 | // ...etc... 36 | "prettier": { 37 | "singleQuote": true, 38 | // use double quotes in js files 39 | "js.singleQuote": false, 40 | // use double quotes in ts files 41 | "ts.singleQuote": false 42 | } 43 | } 44 | ``` 45 | 46 | ## Included Prettier Plugins 47 | 48 | - [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte) 49 | - Enabled by default. 50 | - [prettier-plugin-jsdoc](https://github.com/hosseinmd/prettier-plugin-jsdoc) 51 | - Enable with `"plugin.jsDoc": true` configuration 52 | 53 | Temporarily removed, but will be added back soon: 54 | 55 | - [prettier-plugin-astro](https://github.com/withastro/prettier-plugin-astro) 56 | 57 | See [issue #55](https://github.com/dprint/dprint-plugin-prettier/issues/55) for the new plugin system. 58 | 59 | ## Why Does This Exist? 60 | 61 | The main reason this exists is to be able to use Prettier with dprint's CLI. That way, you can format with all the plugins that dprint supports, still use Prettier, and only have to run `dprint fmt`. 62 | 63 | Additionally it's much faster. This plugin will format files in parallel and you can take advantage of the speed of dprint's incremental formatting if enabled. 64 | -------------------------------------------------------------------------------- /js/node/main.ts: -------------------------------------------------------------------------------- 1 | import { format, getSupportInfo, type Options, type Plugin, type SupportLanguage } from "prettier"; 2 | import * as pluginJsDoc from "prettier-plugin-jsdoc"; 3 | import * as pluginSvelte from "prettier-plugin-svelte"; 4 | import * as pluginAcorn from "prettier/plugins/acorn"; 5 | import * as pluginAngular from "prettier/plugins/angular"; 6 | import * as pluginBabel from "prettier/plugins/babel"; 7 | import * as pluginEstree from "prettier/plugins/estree"; 8 | import * as pluginFlow from "prettier/plugins/flow"; 9 | import * as pluginGlimmer from "prettier/plugins/glimmer"; 10 | import * as pluginGraphQl from "prettier/plugins/graphql"; 11 | import * as pluginHtml from "prettier/plugins/html"; 12 | import * as pluginMarkdown from "prettier/plugins/markdown"; 13 | import * as pluginMeriyah from "prettier/plugins/meriyah"; 14 | import * as pluginPostCss from "prettier/plugins/postcss"; 15 | import * as pluginTypeScript from "prettier/plugins/typescript"; 16 | import * as pluginYaml from "prettier/plugins/yaml"; 17 | 18 | const plugins: Plugin[] = [ 19 | pluginTypeScript, 20 | pluginBabel, 21 | pluginAcorn, 22 | pluginAngular, 23 | pluginEstree, 24 | pluginFlow, 25 | pluginGlimmer, 26 | pluginGraphQl, 27 | pluginHtml, 28 | pluginMarkdown, 29 | pluginMeriyah, 30 | pluginPostCss, 31 | pluginYaml, 32 | pluginSvelte, 33 | ]; 34 | 35 | (globalThis as any).dprint = { 36 | getExtensions, 37 | formatText, 38 | }; 39 | 40 | async function getExtensions() { 41 | const set = new Set(); 42 | const supportInfo = await getSupportInfo(); 43 | for (const language of supportInfo.languages) { 44 | addForLanguage(language); 45 | } 46 | for (const plugin of plugins) { 47 | for (const language of plugin.languages ?? []) { 48 | addForLanguage(language); 49 | } 50 | } 51 | return Array.from(set.values()); 52 | 53 | function addForLanguage(language: SupportLanguage) { 54 | for (const ext of language.extensions ?? []) { 55 | set.add(ext.replace(/^\./, "")); 56 | } 57 | } 58 | } 59 | 60 | interface FormatTextOptions { 61 | filePath: string; 62 | fileText: string; 63 | config: Options; 64 | pluginsConfig: PluginsConfig; 65 | } 66 | 67 | interface PluginsConfig { 68 | js_doc: boolean; 69 | } 70 | 71 | async function formatText({ filePath, fileText, config, pluginsConfig }: FormatTextOptions) { 72 | const formattedText = await format(fileText, { 73 | filepath: filePath, 74 | plugins: getPlugins(pluginsConfig), 75 | ...config, 76 | }); 77 | if (formattedText === fileText) { 78 | return undefined; 79 | } else { 80 | return formattedText; 81 | } 82 | } 83 | 84 | function getPlugins(pluginsConfig: PluginsConfig) { 85 | if (pluginsConfig.js_doc) { 86 | return [...plugins, pluginJsDoc as Plugin]; 87 | } else { 88 | return plugins; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /base/src/runtime.rs: -------------------------------------------------------------------------------- 1 | use deno_core::anyhow::anyhow; 2 | use deno_core::anyhow::Error; 3 | use deno_core::anyhow::Result; 4 | use deno_core::serde_v8; 5 | use deno_core::v8; 6 | use deno_core::v8::Platform; 7 | use deno_core::v8::SharedRef; 8 | use deno_core::Extension; 9 | use deno_core::PollEventLoopOptions; 10 | use deno_core::RuntimeOptions; 11 | use serde::Deserialize; 12 | 13 | fn get_platform() -> SharedRef { 14 | static PLATFORM: std::sync::OnceLock> = std::sync::OnceLock::new(); 15 | 16 | PLATFORM 17 | .get_or_init(|| v8::new_default_platform(1, false).make_shared()) 18 | .clone() 19 | } 20 | 21 | pub struct CreateRuntimeOptions { 22 | pub extensions: Vec, 23 | pub startup_snapshot: Option<&'static [u8]>, 24 | } 25 | 26 | pub struct JsRuntime { 27 | inner: deno_core::JsRuntime, 28 | } 29 | 30 | impl JsRuntime { 31 | pub fn new(options: CreateRuntimeOptions) -> JsRuntime { 32 | JsRuntime { 33 | inner: deno_core::JsRuntime::new(RuntimeOptions { 34 | startup_snapshot: options.startup_snapshot, 35 | v8_platform: Some(get_platform()), 36 | extensions: options.extensions, 37 | ..Default::default() 38 | }), 39 | } 40 | } 41 | 42 | /// Call this once on the main thread. 43 | pub fn initialize_main_thread() { 44 | deno_core::JsRuntime::init_platform(Some(get_platform()), false) 45 | } 46 | 47 | pub async fn execute_format_script(&mut self, code: String) -> Result, Error> { 48 | let global = self.inner.execute_script("format.js", code)?; 49 | let resolve = self.inner.resolve(global); 50 | let global = self 51 | .inner 52 | .with_event_loop_promise(resolve, PollEventLoopOptions::default()) 53 | .await?; 54 | let scope = &mut self.inner.handle_scope(); 55 | let local = v8::Local::new(scope, global); 56 | if local.is_undefined() { 57 | Ok(None) 58 | } else { 59 | let deserialized_value = serde_v8::from_v8::(scope, local); 60 | match deserialized_value { 61 | Ok(value) => Ok(Some(value)), 62 | Err(err) => Err(anyhow!("Cannot deserialize serde_v8 value: {:#}", err)), 63 | } 64 | } 65 | } 66 | 67 | pub fn execute_script(&mut self, script_name: &'static str, code: String) -> Result<(), Error> { 68 | self.inner.execute_script(script_name, code).map(|_| ()) 69 | } 70 | 71 | pub async fn execute_async_fn<'de, T>( 72 | &mut self, 73 | script_name: &'static str, 74 | fn_name: String, 75 | ) -> Result 76 | where 77 | T: Deserialize<'de>, 78 | { 79 | let inner = &mut self.inner; 80 | let fn_value = inner.execute_script(script_name, fn_name)?; 81 | let fn_value = inner.resolve(fn_value).await?; 82 | let mut scope = inner.handle_scope(); 83 | let fn_func: v8::Local = v8::Local::new(&mut scope, fn_value).try_into()?; 84 | let fn_func = v8::Global::new(&mut scope, fn_func); 85 | drop(scope); 86 | let call = inner.call(&fn_func); 87 | let result = inner 88 | .with_event_loop_promise(call, PollEventLoopOptions::default()) 89 | .await?; 90 | let mut scope = inner.handle_scope(); 91 | let local = v8::Local::new(&mut scope, result); 92 | Ok(serde_v8::from_v8::(&mut scope, local)?) 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /plugin/src/handler.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | use std::sync::OnceLock; 3 | 4 | use dprint_core::async_runtime::async_trait; 5 | use dprint_core::async_runtime::LocalBoxFuture; 6 | use dprint_core::configuration::ConfigKeyMap; 7 | use dprint_core::configuration::GlobalConfiguration; 8 | use dprint_core::plugins::AsyncPluginHandler; 9 | use dprint_core::plugins::FileMatchingInfo; 10 | use dprint_core::plugins::FormatRequest; 11 | use dprint_core::plugins::FormatResult; 12 | use dprint_core::plugins::HostFormatRequest; 13 | use dprint_core::plugins::PluginInfo; 14 | use dprint_core::plugins::PluginResolveConfigurationResult; 15 | use dprint_plugin_deno_base::channel::Channel; 16 | use dprint_plugin_deno_base::channel::CreateChannelOptions; 17 | 18 | use crate::config::resolve_config; 19 | use crate::config::PrettierConfig; 20 | use crate::formatter::PrettierFormatter; 21 | 22 | fn get_supported_extensions() -> &'static Vec { 23 | static SUPPORTED_EXTENSIONS: OnceLock> = OnceLock::new(); 24 | SUPPORTED_EXTENSIONS.get_or_init(|| { 25 | let json_bytes = include_bytes!(concat!(env!("OUT_DIR"), "/SUPPORTED_EXTENSIONS.json")); 26 | 27 | deno_core::serde_json::from_slice(json_bytes).unwrap() 28 | }) 29 | } 30 | 31 | pub struct PrettierPluginHandler { 32 | channel: Arc>, 33 | } 34 | 35 | impl Default for PrettierPluginHandler { 36 | fn default() -> Self { 37 | Self { 38 | channel: Arc::new(Channel::new(CreateChannelOptions { 39 | avg_isolate_memory_usage: 600_000, // 600MB guess 40 | create_formatter_cb: Arc::new(|| Box::::default()), 41 | })), 42 | } 43 | } 44 | } 45 | 46 | #[async_trait(?Send)] 47 | impl AsyncPluginHandler for PrettierPluginHandler { 48 | type Configuration = PrettierConfig; 49 | 50 | fn plugin_info(&self) -> PluginInfo { 51 | PluginInfo { 52 | name: env!("CARGO_PKG_NAME").to_string(), 53 | version: env!("CARGO_PKG_VERSION").to_string(), 54 | config_key: "prettier".to_string(), 55 | help_url: "https://dprint.dev/plugins/prettier".to_string(), 56 | config_schema_url: "".to_string(), 57 | update_url: Some( 58 | "https://plugins.dprint.dev/dprint/dprint-plugin-prettier/latest.json".to_string(), 59 | ), 60 | } 61 | } 62 | 63 | fn license_text(&self) -> String { 64 | include_str!("../../LICENSE").to_string() 65 | } 66 | 67 | async fn resolve_config( 68 | &self, 69 | config: ConfigKeyMap, 70 | global_config: GlobalConfiguration, 71 | ) -> PluginResolveConfigurationResult { 72 | let result = resolve_config(config, global_config); 73 | PluginResolveConfigurationResult { 74 | config: result.config, 75 | diagnostics: result.diagnostics, 76 | file_matching: FileMatchingInfo { 77 | file_extensions: get_supported_extensions().clone(), 78 | file_names: vec![], 79 | }, 80 | } 81 | } 82 | 83 | async fn format( 84 | &self, 85 | request: FormatRequest, 86 | _format_with_host: impl FnMut(HostFormatRequest) -> LocalBoxFuture<'static, FormatResult> + 'static, 87 | ) -> FormatResult { 88 | if request.range.is_some() { 89 | // no support for range formatting 90 | return Ok(None); 91 | } 92 | 93 | self.channel.format(request).await 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /plugin/src/formatter.rs: -------------------------------------------------------------------------------- 1 | use std::borrow::Cow; 2 | use std::sync::OnceLock; 3 | 4 | use deno_core::anyhow::Error; 5 | use deno_core::serde_json; 6 | use dprint_core::async_runtime::async_trait; 7 | use dprint_core::plugins::FormatRequest; 8 | use dprint_plugin_deno_base::channel::Formatter; 9 | use dprint_plugin_deno_base::runtime::CreateRuntimeOptions; 10 | use dprint_plugin_deno_base::runtime::JsRuntime; 11 | use dprint_plugin_deno_base::snapshot::deserialize_snapshot; 12 | use dprint_plugin_deno_base::util::set_v8_max_memory; 13 | 14 | use crate::config::PrettierConfig; 15 | 16 | fn get_startup_snapshot() -> &'static [u8] { 17 | // Copied from Deno's codebase: 18 | // https://github.com/denoland/deno/blob/daa7c6d32ab5a4029f8084e174d621f5562256be/cli/tsc.rs#L55 19 | static STARTUP_SNAPSHOT: OnceLock> = OnceLock::new(); 20 | 21 | STARTUP_SNAPSHOT.get_or_init( 22 | #[cold] 23 | #[inline(never)] 24 | || { 25 | // Also set the v8 max memory at the same time. This was added because 26 | // on the DefinitelyTyped repo there would be some OOM errors after formatting 27 | // for a while and this solved that for some reason. 28 | set_v8_max_memory(512); 29 | 30 | static COMPRESSED_COMPILER_SNAPSHOT: &[u8] = 31 | include_bytes!(concat!(env!("OUT_DIR"), "/STARTUP_SNAPSHOT.bin")); 32 | 33 | deserialize_snapshot(COMPRESSED_COMPILER_SNAPSHOT).unwrap() 34 | }, 35 | ) 36 | } 37 | 38 | pub struct PrettierFormatter { 39 | runtime: JsRuntime, 40 | } 41 | 42 | impl Default for PrettierFormatter { 43 | fn default() -> Self { 44 | let runtime = JsRuntime::new(CreateRuntimeOptions { 45 | extensions: vec![ 46 | deno_webidl::deno_webidl::init_ops(), 47 | deno_console::deno_console::init_ops(), 48 | deno_url::deno_url::init_ops(), 49 | ], 50 | startup_snapshot: Some(&get_startup_snapshot()), 51 | }); 52 | Self { runtime } 53 | } 54 | } 55 | 56 | #[async_trait(?Send)] 57 | impl Formatter for PrettierFormatter { 58 | async fn format_text( 59 | &mut self, 60 | request: FormatRequest, 61 | ) -> Result>, Error> { 62 | // todo: implement cancellation and range formatting 63 | let request_value = serde_json::Value::Object({ 64 | let mut obj = serde_json::Map::new(); 65 | obj.insert( 66 | "filePath".to_string(), 67 | request.file_path.to_string_lossy().into(), 68 | ); 69 | obj.insert( 70 | "fileText".to_string(), 71 | String::from_utf8(request.file_bytes)?.into(), 72 | ); 73 | obj 74 | }); 75 | let file_path = request.file_path.to_string_lossy(); 76 | let config = &request.config; 77 | let code = format!( 78 | "(async () => {{ return await dprint.formatText({{ ...{}, config: {}, pluginsConfig: {} }}); }})()", 79 | request_value, 80 | serde_json::to_string(&resolve_config(&file_path, config)).unwrap(), 81 | serde_json::to_string(&config.plugins).unwrap(), 82 | ); 83 | self 84 | .runtime 85 | .execute_format_script(code) 86 | .await 87 | .map(|s| s.map(|s| s.into_bytes())) 88 | } 89 | } 90 | 91 | fn resolve_config<'a>( 92 | file_path: &str, 93 | config: &'a PrettierConfig, 94 | ) -> Cow<'a, serde_json::Map> { 95 | let ext = if let Some(index) = file_path.rfind('.') { 96 | file_path[index + 1..].to_lowercase() 97 | } else { 98 | return Cow::Borrowed(&config.main); 99 | }; 100 | if let Some(override_config) = config.extension_overrides.get(&ext) { 101 | let mut new_config = config.main.clone(); 102 | for (key, value) in override_config.as_object().unwrap().iter() { 103 | new_config.insert(key.to_string(), value.clone()); 104 | } 105 | Cow::Owned(new_config) 106 | } else { 107 | Cow::Borrowed(&config.main) 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /plugin/tests/tests.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | use std::sync::Arc; 3 | 4 | use deno_core::futures::FutureExt; 5 | use dprint_core::configuration::ConfigKeyMap; 6 | use dprint_core::plugins::AsyncPluginHandler; 7 | use dprint_core::plugins::FormatConfigId; 8 | use dprint_core::plugins::FormatRequest; 9 | use dprint_core::plugins::NullCancellationToken; 10 | use dprint_development::*; 11 | use dprint_plugin_deno_base::util::create_tokio_runtime; 12 | use dprint_plugin_prettier::config::resolve_config; 13 | use dprint_plugin_prettier::PrettierPluginHandler; 14 | 15 | use pretty_assertions::assert_eq; 16 | 17 | #[test] 18 | fn test_specs() { 19 | let runtime = create_tokio_runtime(); 20 | let handle = runtime.handle().clone(); 21 | 22 | let mut tests_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); 23 | tests_dir.push("tests"); 24 | run_specs( 25 | &PathBuf::from("./tests/specs"), 26 | &ParseSpecOptions { 27 | default_file_name: "default.ts", 28 | }, 29 | &RunSpecsOptions { 30 | fix_failures: false, 31 | format_twice: true, 32 | }, 33 | { 34 | let handler = PrettierPluginHandler::default(); 35 | move |file_name, file_text, spec_config| { 36 | let spec_config: ConfigKeyMap = serde_json::from_value(spec_config.clone().into()).unwrap(); 37 | let config_result = resolve_config(spec_config, Default::default()); 38 | ensure_no_diagnostics(&config_result.diagnostics); 39 | 40 | let result = handle.block_on(async { 41 | handler 42 | .format( 43 | FormatRequest { 44 | config_id: FormatConfigId::from_raw(0), 45 | file_path: file_name.to_path_buf(), 46 | file_bytes: file_text.to_string().into_bytes(), 47 | config: Arc::new(config_result.config), 48 | range: None, 49 | token: Arc::new(NullCancellationToken), 50 | }, 51 | |_| std::future::ready(Ok(None)).boxed_local(), 52 | ) 53 | .await 54 | }); 55 | result.map(|r| r.map(|r| String::from_utf8(r).unwrap())) 56 | } 57 | }, 58 | move |_file_name, _file_text, _spec_config| panic!("Not supported."), 59 | ); 60 | } 61 | 62 | #[test] 63 | fn handle_syntax_error() { 64 | let runtime = create_tokio_runtime(); 65 | 66 | runtime.block_on(async move { 67 | let handler = PrettierPluginHandler::default(); 68 | let err = handler 69 | .format( 70 | FormatRequest { 71 | config_id: FormatConfigId::from_raw(0), 72 | file_path: PathBuf::from("file.js"), 73 | file_bytes: "const v =".to_string().into_bytes(), 74 | config: Arc::new(Default::default()), 75 | range: None, 76 | token: Arc::new(NullCancellationToken), 77 | }, 78 | |_| std::future::ready(Ok(None)).boxed_local(), 79 | ) 80 | .await 81 | .err() 82 | .unwrap(); 83 | let expected = "SyntaxError: Unexpected token (1:10)"; 84 | assert_eq!(&err.to_string()[..expected.len()], expected); 85 | }); 86 | } 87 | 88 | #[test] 89 | fn handle_invalid_file() { 90 | let runtime = create_tokio_runtime(); 91 | 92 | runtime.block_on(async move { 93 | let handler = PrettierPluginHandler::default(); 94 | let err = handler 95 | .format( 96 | FormatRequest { 97 | config_id: FormatConfigId::from_raw(0), 98 | file_path: PathBuf::from("file.txt"), 99 | file_bytes: "const v =".to_string().into_bytes(), 100 | config: Arc::new(Default::default()), 101 | range: None, 102 | token: Arc::new(NullCancellationToken), 103 | }, 104 | |_| std::future::ready(Ok(None)).boxed_local(), 105 | ) 106 | .await 107 | .err() 108 | .unwrap(); 109 | let expected = "UndefinedParserError: No parser could be inferred for file \"file.txt\""; 110 | assert_eq!(&err.to_string()[..expected.len()], expected); 111 | }); 112 | } 113 | -------------------------------------------------------------------------------- /plugin/src/config.rs: -------------------------------------------------------------------------------- 1 | use dprint_core::configuration::get_nullable_value; 2 | use dprint_core::configuration::get_value; 3 | use dprint_core::configuration::ConfigKeyMap; 4 | use dprint_core::configuration::ConfigKeyValue; 5 | use dprint_core::configuration::GlobalConfiguration; 6 | use dprint_core::configuration::NewLineKind; 7 | use dprint_core::configuration::ResolveConfigurationResult; 8 | use serde::Serialize; 9 | 10 | #[derive(Clone, Serialize, Default)] 11 | pub struct PrettierPluginConfig { 12 | pub js_doc: bool, 13 | } 14 | 15 | #[derive(Clone, Serialize, Default)] 16 | pub struct PrettierConfig { 17 | pub main: serde_json::Map, 18 | pub extension_overrides: serde_json::Map, 19 | pub plugins: PrettierPluginConfig, 20 | } 21 | 22 | pub fn resolve_config( 23 | mut config: ConfigKeyMap, 24 | global_config: GlobalConfiguration, 25 | ) -> ResolveConfigurationResult { 26 | let mut diagnostics = Vec::new(); 27 | let mut main: serde_json::Map = Default::default(); 28 | let mut extension_overrides: serde_json::Map = Default::default(); 29 | 30 | let plugins = PrettierPluginConfig { 31 | js_doc: get_value(&mut config, "plugin.jsDoc", false, &mut diagnostics), 32 | }; 33 | 34 | let dprint_line_width = get_value( 35 | &mut config, 36 | "lineWidth", 37 | global_config.line_width.unwrap_or(80), 38 | &mut diagnostics, 39 | ); 40 | main.insert( 41 | "printWidth".to_string(), 42 | get_value( 43 | &mut config, 44 | "printWidth", 45 | dprint_line_width, 46 | &mut diagnostics, 47 | ) 48 | .into(), 49 | ); 50 | let dprint_tab_width = get_value( 51 | &mut config, 52 | "indentWidth", 53 | global_config.indent_width.unwrap_or(2), 54 | &mut diagnostics, 55 | ); 56 | main.insert( 57 | "tabWidth".to_string(), 58 | get_value(&mut config, "tabWidth", dprint_tab_width, &mut diagnostics).into(), 59 | ); 60 | main.insert( 61 | "useTabs".to_string(), 62 | get_value( 63 | &mut config, 64 | "useTabs", 65 | global_config.use_tabs.unwrap_or(false), 66 | &mut diagnostics, 67 | ) 68 | .into(), 69 | ); 70 | let dprint_newline_kind: NewLineKind = get_value( 71 | &mut config, 72 | "newLineKind", 73 | global_config.new_line_kind.unwrap_or(NewLineKind::LineFeed), 74 | &mut diagnostics, 75 | ); 76 | let prettier_end_of_line: Option = 77 | get_nullable_value(&mut config, "endOfLine", &mut diagnostics); 78 | if let Some(prettier_end_of_line) = prettier_end_of_line { 79 | main.insert("endOfLine".to_string(), prettier_end_of_line.into()); 80 | } else { 81 | main.insert( 82 | "endOfLine".to_string(), 83 | match dprint_newline_kind { 84 | NewLineKind::Auto => "auto", 85 | NewLineKind::CarriageReturnLineFeed => "crlf", 86 | NewLineKind::LineFeed => "lf", 87 | } 88 | .into(), 89 | ); 90 | } 91 | 92 | for (key, value) in config { 93 | let value = config_key_value_to_json(value); 94 | if let Some(index) = key.rfind('.') { 95 | let extension = key[..index].to_lowercase(); 96 | let key = &key[index + 1..]; 97 | extension_overrides 98 | .entry(extension) 99 | .or_insert_with(|| serde_json::Value::Object(Default::default())) 100 | .as_object_mut() 101 | .unwrap() 102 | .insert(key.to_string(), value); 103 | } else { 104 | main.insert(key, value); 105 | } 106 | } 107 | 108 | ResolveConfigurationResult { 109 | config: PrettierConfig { 110 | main, 111 | extension_overrides, 112 | plugins, 113 | }, 114 | diagnostics, 115 | } 116 | } 117 | 118 | fn config_key_value_to_json(value: ConfigKeyValue) -> serde_json::Value { 119 | match value { 120 | ConfigKeyValue::Bool(value) => value.into(), 121 | ConfigKeyValue::String(value) => value.into(), 122 | ConfigKeyValue::Number(value) => value.into(), 123 | ConfigKeyValue::Object(value) => { 124 | let mut values = serde_json::Map::new(); 125 | for (key, value) in value.into_iter() { 126 | values.insert(key, config_key_value_to_json(value)); 127 | } 128 | serde_json::Value::Object(values) 129 | } 130 | ConfigKeyValue::Array(value) => { 131 | serde_json::Value::Array(value.into_iter().map(config_key_value_to_json).collect()) 132 | } 133 | ConfigKeyValue::Null => serde_json::Value::Null, 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /plugin/build.rs: -------------------------------------------------------------------------------- 1 | // Code in this file is largely copy and pasted from Deno's codebase 2 | // https://github.com/denoland/deno/blob/main/cli/build.rs 3 | 4 | use std::env; 5 | use std::path::Path; 6 | use std::path::PathBuf; 7 | use std::process::Command; 8 | 9 | use deno_core::Extension; 10 | use dprint_plugin_deno_base::runtime::CreateRuntimeOptions; 11 | use dprint_plugin_deno_base::runtime::JsRuntime; 12 | use dprint_plugin_deno_base::util::create_tokio_runtime; 13 | 14 | fn main() { 15 | let crate_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); 16 | let root_dir = crate_dir.parent().unwrap(); 17 | let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); 18 | let startup_snapshot_path = out_dir.join("STARTUP_SNAPSHOT.bin"); 19 | let js_dir = root_dir.join("js"); 20 | let supported_extensions_path = out_dir.join("SUPPORTED_EXTENSIONS.json"); 21 | 22 | eprintln!("Running JS build..."); 23 | let build_result = Command::new(if cfg!(windows) { "npm.cmd" } else { "npm" }) 24 | .args(["run", "build:script"]) 25 | .current_dir(js_dir.join("node")) 26 | .status(); 27 | match build_result { 28 | Ok(status) => { 29 | if status.code() != Some(0) { 30 | panic!("Error building."); 31 | } 32 | } 33 | Err(err) if err.kind() == std::io::ErrorKind::NotFound => { 34 | eprintln!("Skipping build because npm executable not found."); 35 | } 36 | Err(err) => panic!("Error building to script: {}", err), 37 | } 38 | 39 | // ensure the build is invalidated if any of these files change 40 | println!( 41 | "cargo:rerun-if-changed={}", 42 | js_dir.join("node/main.ts").display() 43 | ); 44 | println!( 45 | "cargo:rerun-if-changed={}", 46 | js_dir.join("node/package.json").display() 47 | ); 48 | println!( 49 | "cargo:rerun-if-changed={}", 50 | js_dir.join("node/package-lock.json").display() 51 | ); 52 | println!( 53 | "cargo:rerun-if-changed={}", 54 | js_dir.join("node/shims/url.js").display() 55 | ); 56 | 57 | let startup_code_path = js_dir.join("node/dist/main.js"); 58 | if !startup_code_path.exists() { 59 | panic!("Run `cd js/node && npm run build:script` first."); 60 | } 61 | let snapshot = create_snapshot(startup_snapshot_path.clone(), &startup_code_path); 62 | let snapshot = Box::leak(snapshot); 63 | 64 | // serialize the supported extensions 65 | eprintln!("Creating runtime..."); 66 | let tokio_runtime = create_tokio_runtime(); 67 | JsRuntime::initialize_main_thread(); 68 | let mut runtime = JsRuntime::new(CreateRuntimeOptions { 69 | extensions: vec![ 70 | deno_webidl::deno_webidl::init_ops(), 71 | deno_console::deno_console::init_ops(), 72 | deno_url::deno_url::init_ops(), 73 | main::init_ops(), 74 | ], 75 | startup_snapshot: Some(snapshot), 76 | }); 77 | 78 | eprintln!("Getting extensions..."); 79 | let file_extensions: Vec = tokio_runtime.block_on(async move { 80 | let startup_text = get_startup_text(&startup_code_path); 81 | runtime 82 | .execute_script("dprint:prettier.js", startup_text.clone()) 83 | .unwrap(); 84 | runtime 85 | .execute_async_fn::>("deno:get_extensions.js", "dprint.getExtensions".to_string()) 86 | .await 87 | .unwrap() 88 | }); 89 | std::fs::write( 90 | supported_extensions_path, 91 | deno_core::serde_json::to_string(&file_extensions).unwrap(), 92 | ) 93 | .unwrap(); 94 | eprintln!("Done"); 95 | } 96 | 97 | fn create_snapshot(snapshot_path: PathBuf, startup_code_path: &Path) -> Box<[u8]> { 98 | let startup_text = get_startup_text(startup_code_path); 99 | dprint_plugin_deno_base::build::create_snapshot( 100 | dprint_plugin_deno_base::build::CreateSnapshotOptions { 101 | cargo_manifest_dir: env!("CARGO_MANIFEST_DIR"), 102 | snapshot_path, 103 | extensions: extensions(), 104 | with_runtime_cb: Some(Box::new(move |runtime| { 105 | runtime 106 | .execute_script("dprint:prettier.js", startup_text.clone()) 107 | .unwrap(); 108 | })), 109 | warmup_script: None, 110 | }, 111 | ) 112 | } 113 | 114 | fn get_startup_text(startup_code_path: &Path) -> String { 115 | std::fs::read_to_string(startup_code_path).unwrap() 116 | } 117 | 118 | deno_core::extension!( 119 | main, 120 | esm_entry_point = "ext:main/main.js", 121 | esm = [ 122 | dir "../js", 123 | "main.js", 124 | ] 125 | ); 126 | 127 | fn extensions() -> Vec { 128 | vec![ 129 | deno_webidl::deno_webidl::init_ops_and_esm(), 130 | deno_console::deno_console::init_ops_and_esm(), 131 | deno_url::deno_url::init_ops_and_esm(), 132 | main::init_ops_and_esm(), 133 | ] 134 | } 135 | -------------------------------------------------------------------------------- /base/src/channel.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | use std::time::Duration; 3 | 4 | use deno_core::anyhow::Error; 5 | use deno_core::parking_lot::Mutex; 6 | use dprint_core::async_runtime::async_trait; 7 | use dprint_core::plugins::FormatRequest; 8 | use dprint_core::plugins::FormatResult; 9 | use tokio::sync::oneshot; 10 | 11 | use crate::util::create_tokio_runtime; 12 | use crate::util::system_available_memory; 13 | 14 | #[async_trait(?Send)] 15 | pub trait Formatter { 16 | async fn format_text( 17 | &mut self, 18 | request: FormatRequest, 19 | ) -> Result>, Error>; 20 | } 21 | 22 | pub type CreateFormatterCb = 23 | dyn Fn() -> Box> + Send + Sync; 24 | 25 | pub struct CreateChannelOptions { 26 | /// The amount of memory that a single isolate might use. You can approximate 27 | /// this value out by launching the plugin with DPRINT_MAX_THREADS=1 and seeing 28 | /// how much memory is used when formatting some large files. 29 | /// 30 | /// This provides some protection against using too much memory on the system, 31 | /// but is not perfect. It is better than nothing. 32 | pub avg_isolate_memory_usage: usize, 33 | pub create_formatter_cb: Arc>, 34 | } 35 | 36 | type Request = (FormatRequest, oneshot::Sender); 37 | 38 | struct Stats { 39 | pending_runtimes: usize, 40 | total_runtimes: usize, 41 | } 42 | 43 | pub struct Channel { 44 | stats: Arc>, 45 | sender: async_channel::Sender>, 46 | receiver: async_channel::Receiver>, 47 | options: CreateChannelOptions, 48 | } 49 | 50 | impl Channel { 51 | pub fn new(options: CreateChannelOptions) -> Self { 52 | let (sender, receiver) = async_channel::unbounded(); 53 | Self { 54 | stats: Arc::new(Mutex::new(Stats { 55 | pending_runtimes: 0, 56 | total_runtimes: 0, 57 | })), 58 | sender, 59 | receiver, 60 | options, 61 | } 62 | } 63 | 64 | pub async fn format(&self, request: FormatRequest) -> FormatResult { 65 | let (send, recv) = oneshot::channel::(); 66 | let mut should_inc_pending_runtimes = false; 67 | { 68 | let mut stats = self.stats.lock(); 69 | if stats.pending_runtimes == 0 && (stats.total_runtimes == 0 || self.has_memory_available()) { 70 | stats.total_runtimes += 1; 71 | stats.pending_runtimes += 1; 72 | drop(stats); 73 | self.create_js_runtime(); 74 | } else if stats.pending_runtimes > 0 { 75 | stats.pending_runtimes -= 1; 76 | should_inc_pending_runtimes = true; 77 | } 78 | } 79 | 80 | self.sender.send((request, send)).await?; 81 | 82 | let result = recv.await?; 83 | if should_inc_pending_runtimes { 84 | self.stats.lock().pending_runtimes += 1; 85 | } 86 | result 87 | } 88 | 89 | fn has_memory_available(&self) -> bool { 90 | // Only allow creating another instance if the amount of available 91 | // memory on the system is greater than a comfortable amount 92 | let available_memory = system_available_memory(); 93 | // I chose 2x because that would maybe prevent at least two plugins 94 | // from potentially creating an isolate at the same time and going over the 95 | // memory limit. It's definitely not perfect. 96 | available_memory > (self.options.avg_isolate_memory_usage as f64 * 2.2) as u64 97 | } 98 | 99 | fn create_js_runtime(&self) { 100 | let stats = self.stats.clone(); 101 | let receiver = self.receiver.clone(); 102 | let create_formatter_cb = self.options.create_formatter_cb.clone(); 103 | std::thread::spawn(move || { 104 | let tokio_runtime = create_tokio_runtime(); 105 | tokio_runtime.block_on(async move { 106 | let mut formatter = (create_formatter_cb)(); 107 | loop { 108 | tokio::select! { 109 | // automatically shut down after a certain amount of time to save memory 110 | // in an editor scenario 111 | _ = tokio::time::sleep(Duration::from_secs(30)) => { 112 | // only shut down if we're not the last pending runtime 113 | let mut stats = stats.lock(); 114 | if stats.total_runtimes > 1 && stats.pending_runtimes > 1 { 115 | stats.total_runtimes -= 1; 116 | stats.pending_runtimes -= 1; 117 | return; 118 | } 119 | } 120 | request = receiver.recv() => { 121 | let (request, response) = match request { 122 | Ok(result) => result, 123 | Err(_) => { 124 | // receiver dropped, so exit 125 | return; 126 | } 127 | }; 128 | let result = formatter.format_text(request).await; 129 | let _ = response.send(result); 130 | } 131 | } 132 | } 133 | }); 134 | }); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /.github/workflows/ci.generate.ts: -------------------------------------------------------------------------------- 1 | import * as yaml from "@std/yaml"; 2 | import $ from "dax"; 3 | 4 | enum Runner { 5 | Mac13 = "macos-13", 6 | MacLatest = "macos-latest", 7 | Windows = "windows-latest", 8 | // uses an older version of ubuntu because of issue dprint/#483 9 | Linux = "ubuntu-22.04", 10 | LinuxArm = 11 | "${{ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-latest' }}", 12 | } 13 | 14 | interface ProfileData { 15 | runner: Runner; 16 | target: string; 17 | runTests?: boolean; 18 | // currently not used 19 | cross?: boolean; 20 | } 21 | 22 | function withCondition( 23 | step: Record, 24 | condition: string, 25 | ): Record { 26 | return { 27 | ...step, 28 | if: "if" in step ? `(${condition}) && (${step.if})` : condition, 29 | }; 30 | } 31 | 32 | const profileDataItems: ProfileData[] = [{ 33 | runner: Runner.Mac13, 34 | target: "x86_64-apple-darwin", 35 | runTests: true, 36 | }, { 37 | runner: Runner.MacLatest, 38 | target: "aarch64-apple-darwin", 39 | runTests: true, 40 | }, { 41 | runner: Runner.Windows, 42 | target: "x86_64-pc-windows-msvc", 43 | runTests: true, 44 | }, { 45 | runner: Runner.Linux, 46 | target: "x86_64-unknown-linux-gnu", 47 | runTests: true, 48 | }, { 49 | runner: Runner.LinuxArm, 50 | target: "aarch64-unknown-linux-gnu", 51 | runTests: true, 52 | }]; 53 | const profiles = profileDataItems.map((profile) => { 54 | return { 55 | ...profile, 56 | artifactsName: `${profile.target}-artifacts`, 57 | zipFileName: `dprint-plugin-prettier-${profile.target}.zip`, 58 | zipChecksumEnvVarName: `ZIP_CHECKSUM_${profile.target.toUpperCase().replaceAll("-", "_")}`, 59 | }; 60 | }); 61 | 62 | const ci = { 63 | name: "CI", 64 | on: { 65 | pull_request: { branches: ["main"] }, 66 | push: { branches: ["main"], tags: ["*"] }, 67 | }, 68 | concurrency: { 69 | // https://stackoverflow.com/a/72408109/188246 70 | group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}", 71 | "cancel-in-progress": true, 72 | }, 73 | jobs: { 74 | build: { 75 | name: "${{ matrix.config.target }}", 76 | "runs-on": "${{ matrix.config.os }}", 77 | strategy: { 78 | matrix: { 79 | config: profiles.map((profile) => ({ 80 | os: profile.runner, 81 | run_tests: (profile.runTests ?? false).toString(), 82 | cross: (profile.cross ?? false).toString(), 83 | target: profile.target, 84 | })), 85 | }, 86 | }, 87 | outputs: Object.fromEntries( 88 | profiles.map((profile) => [ 89 | profile.zipChecksumEnvVarName, 90 | "${{steps.pre_release_" + profile.target.replaceAll("-", "_") 91 | + ".outputs.ZIP_CHECKSUM}}", 92 | ]), 93 | ), 94 | env: { 95 | // disabled to reduce ./target size and generally it's slower enabled 96 | CARGO_INCREMENTAL: 0, 97 | RUST_BACKTRACE: "full", 98 | }, 99 | steps: [ 100 | { uses: "actions/checkout@v4" }, 101 | { uses: "dsherret/rust-toolchain-file@v1" }, 102 | { 103 | name: "Cache cargo", 104 | uses: "Swatinem/rust-cache@v2", 105 | with: { 106 | "prefix-key": "v3-${{matrix.config.target}}", 107 | "save-if": "${{ github.ref == 'refs/heads/main' }}", 108 | }, 109 | }, 110 | { 111 | name: "Setup Rust (aarch64-apple-darwin)", 112 | if: `matrix.config.target == 'aarch64-apple-darwin'`, 113 | run: "rustup target add aarch64-apple-darwin", 114 | }, 115 | { uses: "denoland/setup-deno@v2" }, 116 | { 117 | uses: "actions/setup-node@v4", 118 | with: { 119 | "node-version": 21, 120 | }, 121 | }, 122 | { 123 | name: "npm install", 124 | run: "cd js/node && npm ci", 125 | }, 126 | { 127 | name: "Setup cross", 128 | if: "matrix.config.cross == 'true'", 129 | run: [ 130 | "cd js/node && npm run build:script", 131 | "cargo install cross --locked --git https://github.com/cross-rs/cross --rev 4090beca3cfffa44371a5bba524de3a578aa46c3", 132 | ].join("\n"), 133 | }, 134 | { 135 | name: "Build (Debug)", 136 | if: "matrix.config.cross != 'true' && !startsWith(github.ref, 'refs/tags/')", 137 | run: "cargo build --locked --all-targets --target ${{matrix.config.target}}", 138 | }, 139 | { 140 | name: "Build release", 141 | if: "matrix.config.cross != 'true' && startsWith(github.ref, 'refs/tags/')", 142 | run: "cargo build --locked --all-targets --target ${{matrix.config.target}} --release", 143 | }, 144 | { 145 | name: "Build cross (Debug)", 146 | if: "matrix.config.cross == 'true' && !startsWith(github.ref, 'refs/tags/')", 147 | run: [ 148 | "cross build --locked --target ${{matrix.config.target}}", 149 | ].join("\n"), 150 | }, 151 | { 152 | name: "Build cross (Release)", 153 | if: "matrix.config.cross == 'true' && startsWith(github.ref, 'refs/tags/')", 154 | run: [ 155 | "cross build --locked --target ${{matrix.config.target}} --release", 156 | ].join("\n"), 157 | }, 158 | { 159 | name: "Lint", 160 | if: "!startsWith(github.ref, 'refs/tags/') && matrix.config.target == 'x86_64-unknown-linux-gnu'", 161 | run: "cargo clippy", 162 | }, 163 | { 164 | name: "Test (Debug)", 165 | if: "matrix.config.run_tests == 'true' && !startsWith(github.ref, 'refs/tags/')", 166 | run: "cargo test --locked --all-features", 167 | }, 168 | { 169 | name: "Test (Release)", 170 | if: "matrix.config.run_tests == 'true' && startsWith(github.ref, 'refs/tags/')", 171 | run: "cargo test --locked --all-features --release", 172 | }, 173 | // zip files 174 | ...profiles.map((profile) => { 175 | function getRunSteps() { 176 | switch (profile.runner) { 177 | case Runner.Mac13: 178 | case Runner.MacLatest: 179 | return [ 180 | `cd target/${profile.target}/release`, 181 | `zip -r ${profile.zipFileName} dprint-plugin-prettier`, 182 | `echo \"ZIP_CHECKSUM=$(shasum -a 256 ${profile.zipFileName} | awk '{print $1}')\" >> $GITHUB_OUTPUT`, 183 | ]; 184 | case Runner.Linux: 185 | case Runner.LinuxArm: 186 | return [ 187 | `cd target/${profile.target}/release`, 188 | `zip -r ${profile.zipFileName} dprint-plugin-prettier`, 189 | `echo \"ZIP_CHECKSUM=$(shasum -a 256 ${profile.zipFileName} | awk '{print $1}')\" >> $GITHUB_OUTPUT`, 190 | ]; 191 | case Runner.Windows: 192 | return [ 193 | `Compress-Archive -CompressionLevel Optimal -Force -Path target/${profile.target}/release/dprint-plugin-prettier.exe -DestinationPath target/${profile.target}/release/${profile.zipFileName}`, 194 | `echo "ZIP_CHECKSUM=$(shasum -a 256 target/${profile.target}/release/${profile.zipFileName} | awk '{print $1}')" >> $GITHUB_OUTPUT`, 195 | ]; 196 | } 197 | } 198 | return { 199 | name: `Pre-release (${profile.target})`, 200 | id: `pre_release_${profile.target.replaceAll("-", "_")}`, 201 | if: `matrix.config.target == '${profile.target}' && startsWith(github.ref, 'refs/tags/')`, 202 | run: getRunSteps().join("\n"), 203 | }; 204 | }), 205 | // upload artifacts 206 | ...profiles.map((profile) => { 207 | return { 208 | name: `Upload artifacts (${profile.target})`, 209 | if: `matrix.config.target == '${profile.target}' && startsWith(github.ref, 'refs/tags/')`, 210 | uses: "actions/upload-artifact@v4", 211 | with: { 212 | name: profile.artifactsName, 213 | path: `target/${profile.target}/release/${profile.zipFileName}`, 214 | }, 215 | }; 216 | }), 217 | ].map((step) => 218 | withCondition( 219 | step, 220 | // only run arm64 linux on main or tags 221 | "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')", 222 | ) 223 | ), 224 | }, 225 | draft_release: { 226 | name: "draft_release", 227 | if: "startsWith(github.ref, 'refs/tags/')", 228 | needs: "build", 229 | "runs-on": "ubuntu-latest", 230 | steps: [ 231 | { name: "Checkout", uses: "actions/checkout@v4" }, 232 | { name: "Download artifacts", uses: "actions/download-artifact@v4" }, 233 | { uses: "denoland/setup-deno@v2" }, 234 | { 235 | name: "Move downloaded artifacts to root directory", 236 | run: profiles.map((profile) => { 237 | return `mv ${profile.artifactsName}/${profile.zipFileName} .`; 238 | }).join("\n"), 239 | }, 240 | { 241 | name: "Output checksums", 242 | run: profiles.map((profile) => { 243 | return `echo "${profile.zipFileName}: \${{needs.build.outputs.${profile.zipChecksumEnvVarName}}}"`; 244 | }).join("\n"), 245 | }, 246 | { 247 | name: "Create plugin file", 248 | run: "deno run -A scripts/create_plugin_file.ts", 249 | }, 250 | { 251 | name: "Get prettier version", 252 | id: "get_prettier_version", 253 | run: "echo PRETTIER_VERSION=$(deno run --allow-read scripts/output_prettier_version.ts) >> $GITHUB_OUTPUT", 254 | }, 255 | { 256 | name: "Get tag version", 257 | id: "get_tag_version", 258 | run: "echo TAG_VERSION=${GITHUB_REF/refs\\/tags\\//} >> $GITHUB_OUTPUT", 259 | }, 260 | { 261 | name: "Get plugin file checksum", 262 | id: "get_plugin_file_checksum", 263 | run: "echo \"CHECKSUM=$(shasum -a 256 plugin.json | awk '{print $1}')\" >> $GITHUB_OUTPUT", 264 | }, 265 | // todo: implement this 266 | // { 267 | // name: "Update Config Schema Version", 268 | // run: 269 | // "sed -i 's/prettier\\/0.0.0/prettier\\/${{ steps.get_tag_version.outputs.TAG_VERSION }}/' deployment/schema.json", 270 | // }, 271 | { 272 | name: "Release", 273 | uses: "softprops/action-gh-release@v2", 274 | env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }, 275 | with: { 276 | files: [ 277 | ...profiles.map((profile) => profile.zipFileName), 278 | "plugin.json", 279 | // todo: add this 280 | // "deployment/schema.json", 281 | ].join("\n"), 282 | body: `Prettier \${{ steps.get_prettier_version.outputs.PRETTIER_VERSION }} 283 | ## Install 284 | 285 | Dependencies: 286 | 287 | - Install dprint's CLI >= 0.40.0 288 | 289 | In a dprint configuration file: 290 | 291 | 1. Specify the plugin url and checksum in the \`"plugins"\` array or run \`dprint config add prettier\`: 292 | 293 | \`\`\`jsonc 294 | { 295 | // etc... 296 | "plugins": [ 297 | // ...add other dprint plugins here that you want to take precedence over prettier... 298 | "https://plugins.dprint.dev/prettier-\${{ steps.get_tag_version.outputs.TAG_VERSION }}.json@\${{ steps.get_plugin_file_checksum.outputs.CHECKSUM }}" 299 | ] 300 | } 301 | \`\`\` 302 | 2. Add a \`"prettier"\` configuration property if desired. 303 | 304 | \`\`\`jsonc 305 | { 306 | // ...etc... 307 | "prettier": { 308 | "trailingComma": "all", 309 | "singleQuote": true, 310 | "proseWrap": "always" 311 | } 312 | } 313 | \`\`\` 314 | `, 315 | draft: false, 316 | }, 317 | }, 318 | ], 319 | }, 320 | }, 321 | }; 322 | 323 | let finalText = `# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT\n\n`; 324 | finalText += yaml.stringify(ci, { 325 | lineWidth: 10_000, 326 | compatMode: false, 327 | }); 328 | 329 | Deno.writeTextFileSync(new URL("./ci.yml", import.meta.url), finalText); 330 | await $`dprint fmt`; 331 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT 2 | 3 | name: CI 4 | on: 5 | pull_request: 6 | branches: 7 | - main 8 | push: 9 | branches: 10 | - main 11 | tags: 12 | - "*" 13 | concurrency: 14 | group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" 15 | cancel-in-progress: true 16 | jobs: 17 | build: 18 | name: "${{ matrix.config.target }}" 19 | runs-on: "${{ matrix.config.os }}" 20 | strategy: 21 | matrix: 22 | config: 23 | - os: macos-13 24 | run_tests: "true" 25 | cross: "false" 26 | target: x86_64-apple-darwin 27 | - os: macos-latest 28 | run_tests: "true" 29 | cross: "false" 30 | target: aarch64-apple-darwin 31 | - os: windows-latest 32 | run_tests: "true" 33 | cross: "false" 34 | target: x86_64-pc-windows-msvc 35 | - os: ubuntu-22.04 36 | run_tests: "true" 37 | cross: "false" 38 | target: x86_64-unknown-linux-gnu 39 | - os: "${{ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-latest' }}" 40 | run_tests: "true" 41 | cross: "false" 42 | target: aarch64-unknown-linux-gnu 43 | outputs: 44 | ZIP_CHECKSUM_X86_64_APPLE_DARWIN: "${{steps.pre_release_x86_64_apple_darwin.outputs.ZIP_CHECKSUM}}" 45 | ZIP_CHECKSUM_AARCH64_APPLE_DARWIN: "${{steps.pre_release_aarch64_apple_darwin.outputs.ZIP_CHECKSUM}}" 46 | ZIP_CHECKSUM_X86_64_PC_WINDOWS_MSVC: "${{steps.pre_release_x86_64_pc_windows_msvc.outputs.ZIP_CHECKSUM}}" 47 | ZIP_CHECKSUM_X86_64_UNKNOWN_LINUX_GNU: "${{steps.pre_release_x86_64_unknown_linux_gnu.outputs.ZIP_CHECKSUM}}" 48 | ZIP_CHECKSUM_AARCH64_UNKNOWN_LINUX_GNU: "${{steps.pre_release_aarch64_unknown_linux_gnu.outputs.ZIP_CHECKSUM}}" 49 | env: 50 | CARGO_INCREMENTAL: 0 51 | RUST_BACKTRACE: full 52 | steps: 53 | - uses: actions/checkout@v4 54 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 55 | - uses: dsherret/rust-toolchain-file@v1 56 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 57 | - name: Cache cargo 58 | uses: Swatinem/rust-cache@v2 59 | with: 60 | prefix-key: "v3-${{matrix.config.target}}" 61 | save-if: "${{ github.ref == 'refs/heads/main' }}" 62 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 63 | - name: Setup Rust (aarch64-apple-darwin) 64 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'aarch64-apple-darwin')" 65 | run: rustup target add aarch64-apple-darwin 66 | - uses: denoland/setup-deno@v2 67 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 68 | - uses: actions/setup-node@v4 69 | with: 70 | node-version: 21 71 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 72 | - name: npm install 73 | run: cd js/node && npm ci 74 | if: "matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')" 75 | - name: Setup cross 76 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.cross == 'true')" 77 | run: |- 78 | cd js/node && npm run build:script 79 | cargo install cross --locked --git https://github.com/cross-rs/cross --rev 4090beca3cfffa44371a5bba524de3a578aa46c3 80 | - name: Build (Debug) 81 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.cross != 'true' && !startsWith(github.ref, 'refs/tags/'))" 82 | run: "cargo build --locked --all-targets --target ${{matrix.config.target}}" 83 | - name: Build release 84 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.cross != 'true' && startsWith(github.ref, 'refs/tags/'))" 85 | run: "cargo build --locked --all-targets --target ${{matrix.config.target}} --release" 86 | - name: Build cross (Debug) 87 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.cross == 'true' && !startsWith(github.ref, 'refs/tags/'))" 88 | run: "cross build --locked --target ${{matrix.config.target}}" 89 | - name: Build cross (Release) 90 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.cross == 'true' && startsWith(github.ref, 'refs/tags/'))" 91 | run: "cross build --locked --target ${{matrix.config.target}} --release" 92 | - name: Lint 93 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (!startsWith(github.ref, 'refs/tags/') && matrix.config.target == 'x86_64-unknown-linux-gnu')" 94 | run: cargo clippy 95 | - name: Test (Debug) 96 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.run_tests == 'true' && !startsWith(github.ref, 'refs/tags/'))" 97 | run: cargo test --locked --all-features 98 | - name: Test (Release) 99 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.run_tests == 'true' && startsWith(github.ref, 'refs/tags/'))" 100 | run: cargo test --locked --all-features --release 101 | - name: Pre-release (x86_64-apple-darwin) 102 | id: pre_release_x86_64_apple_darwin 103 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-apple-darwin' && startsWith(github.ref, 'refs/tags/'))" 104 | run: |- 105 | cd target/x86_64-apple-darwin/release 106 | zip -r dprint-plugin-prettier-x86_64-apple-darwin.zip dprint-plugin-prettier 107 | echo "ZIP_CHECKSUM=$(shasum -a 256 dprint-plugin-prettier-x86_64-apple-darwin.zip | awk '{print $1}')" >> $GITHUB_OUTPUT 108 | - name: Pre-release (aarch64-apple-darwin) 109 | id: pre_release_aarch64_apple_darwin 110 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'aarch64-apple-darwin' && startsWith(github.ref, 'refs/tags/'))" 111 | run: |- 112 | cd target/aarch64-apple-darwin/release 113 | zip -r dprint-plugin-prettier-aarch64-apple-darwin.zip dprint-plugin-prettier 114 | echo "ZIP_CHECKSUM=$(shasum -a 256 dprint-plugin-prettier-aarch64-apple-darwin.zip | awk '{print $1}')" >> $GITHUB_OUTPUT 115 | - name: Pre-release (x86_64-pc-windows-msvc) 116 | id: pre_release_x86_64_pc_windows_msvc 117 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-pc-windows-msvc' && startsWith(github.ref, 'refs/tags/'))" 118 | run: |- 119 | Compress-Archive -CompressionLevel Optimal -Force -Path target/x86_64-pc-windows-msvc/release/dprint-plugin-prettier.exe -DestinationPath target/x86_64-pc-windows-msvc/release/dprint-plugin-prettier-x86_64-pc-windows-msvc.zip 120 | echo "ZIP_CHECKSUM=$(shasum -a 256 target/x86_64-pc-windows-msvc/release/dprint-plugin-prettier-x86_64-pc-windows-msvc.zip | awk '{print $1}')" >> $GITHUB_OUTPUT 121 | - name: Pre-release (x86_64-unknown-linux-gnu) 122 | id: pre_release_x86_64_unknown_linux_gnu 123 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-unknown-linux-gnu' && startsWith(github.ref, 'refs/tags/'))" 124 | run: |- 125 | cd target/x86_64-unknown-linux-gnu/release 126 | zip -r dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip dprint-plugin-prettier 127 | echo "ZIP_CHECKSUM=$(shasum -a 256 dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip | awk '{print $1}')" >> $GITHUB_OUTPUT 128 | - name: Pre-release (aarch64-unknown-linux-gnu) 129 | id: pre_release_aarch64_unknown_linux_gnu 130 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'aarch64-unknown-linux-gnu' && startsWith(github.ref, 'refs/tags/'))" 131 | run: |- 132 | cd target/aarch64-unknown-linux-gnu/release 133 | zip -r dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip dprint-plugin-prettier 134 | echo "ZIP_CHECKSUM=$(shasum -a 256 dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip | awk '{print $1}')" >> $GITHUB_OUTPUT 135 | - name: Upload artifacts (x86_64-apple-darwin) 136 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-apple-darwin' && startsWith(github.ref, 'refs/tags/'))" 137 | uses: actions/upload-artifact@v4 138 | with: 139 | name: x86_64-apple-darwin-artifacts 140 | path: target/x86_64-apple-darwin/release/dprint-plugin-prettier-x86_64-apple-darwin.zip 141 | - name: Upload artifacts (aarch64-apple-darwin) 142 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'aarch64-apple-darwin' && startsWith(github.ref, 'refs/tags/'))" 143 | uses: actions/upload-artifact@v4 144 | with: 145 | name: aarch64-apple-darwin-artifacts 146 | path: target/aarch64-apple-darwin/release/dprint-plugin-prettier-aarch64-apple-darwin.zip 147 | - name: Upload artifacts (x86_64-pc-windows-msvc) 148 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-pc-windows-msvc' && startsWith(github.ref, 'refs/tags/'))" 149 | uses: actions/upload-artifact@v4 150 | with: 151 | name: x86_64-pc-windows-msvc-artifacts 152 | path: target/x86_64-pc-windows-msvc/release/dprint-plugin-prettier-x86_64-pc-windows-msvc.zip 153 | - name: Upload artifacts (x86_64-unknown-linux-gnu) 154 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'x86_64-unknown-linux-gnu' && startsWith(github.ref, 'refs/tags/'))" 155 | uses: actions/upload-artifact@v4 156 | with: 157 | name: x86_64-unknown-linux-gnu-artifacts 158 | path: target/x86_64-unknown-linux-gnu/release/dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip 159 | - name: Upload artifacts (aarch64-unknown-linux-gnu) 160 | if: "(matrix.config.target != 'aarch64-unknown-linux-gnu' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && (matrix.config.target == 'aarch64-unknown-linux-gnu' && startsWith(github.ref, 'refs/tags/'))" 161 | uses: actions/upload-artifact@v4 162 | with: 163 | name: aarch64-unknown-linux-gnu-artifacts 164 | path: target/aarch64-unknown-linux-gnu/release/dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip 165 | draft_release: 166 | name: draft_release 167 | if: "startsWith(github.ref, 'refs/tags/')" 168 | needs: build 169 | runs-on: ubuntu-latest 170 | steps: 171 | - name: Checkout 172 | uses: actions/checkout@v4 173 | - name: Download artifacts 174 | uses: actions/download-artifact@v4 175 | - uses: denoland/setup-deno@v2 176 | - name: Move downloaded artifacts to root directory 177 | run: |- 178 | mv x86_64-apple-darwin-artifacts/dprint-plugin-prettier-x86_64-apple-darwin.zip . 179 | mv aarch64-apple-darwin-artifacts/dprint-plugin-prettier-aarch64-apple-darwin.zip . 180 | mv x86_64-pc-windows-msvc-artifacts/dprint-plugin-prettier-x86_64-pc-windows-msvc.zip . 181 | mv x86_64-unknown-linux-gnu-artifacts/dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip . 182 | mv aarch64-unknown-linux-gnu-artifacts/dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip . 183 | - name: Output checksums 184 | run: |- 185 | echo "dprint-plugin-prettier-x86_64-apple-darwin.zip: ${{needs.build.outputs.ZIP_CHECKSUM_X86_64_APPLE_DARWIN}}" 186 | echo "dprint-plugin-prettier-aarch64-apple-darwin.zip: ${{needs.build.outputs.ZIP_CHECKSUM_AARCH64_APPLE_DARWIN}}" 187 | echo "dprint-plugin-prettier-x86_64-pc-windows-msvc.zip: ${{needs.build.outputs.ZIP_CHECKSUM_X86_64_PC_WINDOWS_MSVC}}" 188 | echo "dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip: ${{needs.build.outputs.ZIP_CHECKSUM_X86_64_UNKNOWN_LINUX_GNU}}" 189 | echo "dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip: ${{needs.build.outputs.ZIP_CHECKSUM_AARCH64_UNKNOWN_LINUX_GNU}}" 190 | - name: Create plugin file 191 | run: deno run -A scripts/create_plugin_file.ts 192 | - name: Get prettier version 193 | id: get_prettier_version 194 | run: echo PRETTIER_VERSION=$(deno run --allow-read scripts/output_prettier_version.ts) >> $GITHUB_OUTPUT 195 | - name: Get tag version 196 | id: get_tag_version 197 | run: 'echo TAG_VERSION=${GITHUB_REF/refs\/tags\//} >> $GITHUB_OUTPUT' 198 | - name: Get plugin file checksum 199 | id: get_plugin_file_checksum 200 | run: 'echo "CHECKSUM=$(shasum -a 256 plugin.json | awk ''{print $1}'')" >> $GITHUB_OUTPUT' 201 | - name: Release 202 | uses: softprops/action-gh-release@v2 203 | env: 204 | GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" 205 | with: 206 | files: |- 207 | dprint-plugin-prettier-x86_64-apple-darwin.zip 208 | dprint-plugin-prettier-aarch64-apple-darwin.zip 209 | dprint-plugin-prettier-x86_64-pc-windows-msvc.zip 210 | dprint-plugin-prettier-x86_64-unknown-linux-gnu.zip 211 | dprint-plugin-prettier-aarch64-unknown-linux-gnu.zip 212 | plugin.json 213 | body: | 214 | Prettier ${{ steps.get_prettier_version.outputs.PRETTIER_VERSION }} 215 | ## Install 216 | 217 | Dependencies: 218 | 219 | - Install dprint's CLI >= 0.40.0 220 | 221 | In a dprint configuration file: 222 | 223 | 1. Specify the plugin url and checksum in the `"plugins"` array or run `dprint config add prettier`: 224 | 225 | ```jsonc 226 | { 227 | // etc... 228 | "plugins": [ 229 | // ...add other dprint plugins here that you want to take precedence over prettier... 230 | "https://plugins.dprint.dev/prettier-${{ steps.get_tag_version.outputs.TAG_VERSION }}.json@${{ steps.get_plugin_file_checksum.outputs.CHECKSUM }}" 231 | ] 232 | } 233 | ``` 234 | 2. Add a `"prettier"` configuration property if desired. 235 | 236 | ```jsonc 237 | { 238 | // ...etc... 239 | "prettier": { 240 | "trailingComma": "all", 241 | "singleQuote": true, 242 | "proseWrap": "always" 243 | } 244 | } 245 | ``` 246 | draft: false 247 | -------------------------------------------------------------------------------- /deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "4", 3 | "specifiers": { 4 | "jsr:@david/dax@0.42": "0.42.0", 5 | "jsr:@david/dax@0.42.0": "0.42.0", 6 | "jsr:@david/path@0.2": "0.2.0", 7 | "jsr:@david/which@~0.4.1": "0.4.1", 8 | "jsr:@std/assert@0.221": "0.221.0", 9 | "jsr:@std/bytes@0.221": "0.221.0", 10 | "jsr:@std/fmt@1": "1.0.3", 11 | "jsr:@std/fs@1": "1.0.8", 12 | "jsr:@std/io@0.221": "0.221.0", 13 | "jsr:@std/path@1": "1.0.8", 14 | "jsr:@std/path@^1.0.8": "1.0.8", 15 | "jsr:@std/semver@1": "1.0.3", 16 | "jsr:@std/streams@0.221": "0.221.0", 17 | "jsr:@std/yaml@1": "1.0.5" 18 | }, 19 | "jsr": { 20 | "@david/dax@0.42.0": { 21 | "integrity": "0c547c9a20577a6072b90def194c159c9ddab82280285ebfd8268a4ebefbd80b", 22 | "dependencies": [ 23 | "jsr:@david/path", 24 | "jsr:@david/which", 25 | "jsr:@std/fmt", 26 | "jsr:@std/fs", 27 | "jsr:@std/io", 28 | "jsr:@std/path@1", 29 | "jsr:@std/streams" 30 | ] 31 | }, 32 | "@david/path@0.2.0": { 33 | "integrity": "f2d7aa7f02ce5a55e27c09f9f1381794acb09d328f8d3c8a2e3ab3ffc294dccd", 34 | "dependencies": [ 35 | "jsr:@std/fs", 36 | "jsr:@std/path@1" 37 | ] 38 | }, 39 | "@david/which@0.4.1": { 40 | "integrity": "896a682b111f92ab866cc70c5b4afab2f5899d2f9bde31ed00203b9c250f225e" 41 | }, 42 | "@std/assert@0.221.0": { 43 | "integrity": "a5f1aa6e7909dbea271754fd4ab3f4e687aeff4873b4cef9a320af813adb489a" 44 | }, 45 | "@std/bytes@0.221.0": { 46 | "integrity": "64a047011cf833890a4a2ab7293ac55a1b4f5a050624ebc6a0159c357de91966" 47 | }, 48 | "@std/fmt@1.0.3": { 49 | "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" 50 | }, 51 | "@std/fs@1.0.8": { 52 | "integrity": "161c721b6f9400b8100a851b6f4061431c538b204bb76c501d02c508995cffe0", 53 | "dependencies": [ 54 | "jsr:@std/path@^1.0.8" 55 | ] 56 | }, 57 | "@std/io@0.221.0": { 58 | "integrity": "faf7f8700d46ab527fa05cc6167f4b97701a06c413024431c6b4d207caa010da", 59 | "dependencies": [ 60 | "jsr:@std/assert", 61 | "jsr:@std/bytes" 62 | ] 63 | }, 64 | "@std/path@1.0.8": { 65 | "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" 66 | }, 67 | "@std/semver@1.0.3": { 68 | "integrity": "7c139c6076a080eeaa4252c78b95ca5302818d7eafab0470d34cafd9930c13c8" 69 | }, 70 | "@std/streams@0.221.0": { 71 | "integrity": "47f2f74634b47449277c0ee79fe878da4424b66bd8975c032e3afdca88986e61", 72 | "dependencies": [ 73 | "jsr:@std/io" 74 | ] 75 | }, 76 | "@std/yaml@1.0.5": { 77 | "integrity": "71ba3d334305ee2149391931508b2c293a8490f94a337eef3a09cade1a2a2742" 78 | } 79 | }, 80 | "remote": { 81 | "https://deno.land/std@0.201.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", 82 | "https://deno.land/std@0.201.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", 83 | "https://deno.land/std@0.201.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", 84 | "https://deno.land/std@0.201.0/fmt/colors.ts": "87544aa2bc91087bb37f9c077970c85bfb041b48e4c37356129d7b450a415b6f", 85 | "https://deno.land/std@0.201.0/fs/_util.ts": "fbf57dcdc9f7bc8128d60301eece608246971a7836a3bb1e78da75314f08b978", 86 | "https://deno.land/std@0.201.0/fs/copy.ts": "23cc1c465babe5ca4d69778821e2f8addc44593e30a5ca0b902b3784eed75bb6", 87 | "https://deno.land/std@0.201.0/fs/empty_dir.ts": "2e52cd4674d18e2e007175c80449fc3d263786a1361e858d9dfa9360a6581b47", 88 | "https://deno.land/std@0.201.0/fs/ensure_dir.ts": "dc64c4c75c64721d4e3fb681f1382f803ff3d2868f08563ff923fdd20d071c40", 89 | "https://deno.land/std@0.201.0/fs/ensure_file.ts": "39ac83cc283a20ec2735e956adf5de3e8a3334e0b6820547b5772f71c49ae083", 90 | "https://deno.land/std@0.201.0/fs/ensure_link.ts": "c15e69c48556d78aae31b83e0c0ece04b7b8bc0951412f5b759aceb6fde7f0ac", 91 | "https://deno.land/std@0.201.0/fs/ensure_symlink.ts": "b389c8568f0656d145ac7ece472afe710815cccbb2ebfd19da7978379ae143fe", 92 | "https://deno.land/std@0.201.0/fs/eol.ts": "f1f2eb348a750c34500741987b21d65607f352cf7205f48f4319d417fff42842", 93 | "https://deno.land/std@0.201.0/fs/exists.ts": "cb59a853d84871d87acab0e7936a4dac11282957f8e195102c5a7acb42546bb8", 94 | "https://deno.land/std@0.201.0/fs/expand_glob.ts": "52b8b6f5b1fa585c348250da1c80ce5d820746cb4a75d874b3599646f677d3a7", 95 | "https://deno.land/std@0.201.0/fs/mod.ts": "bc3d0acd488cc7b42627044caf47d72019846d459279544e1934418955ba4898", 96 | "https://deno.land/std@0.201.0/fs/move.ts": "b4f8f46730b40c32ea3c0bc8eb0fd0e8139249a698883c7b3756424cf19785c9", 97 | "https://deno.land/std@0.201.0/fs/walk.ts": "a16146724a6aaf9efdb92023a74e9805195c3469900744ce5de4113b07b29779", 98 | "https://deno.land/std@0.201.0/io/buf_reader.ts": "0bd8ad26255945b5f418940db23db03bee0c160dbb5ae4627e2c0be3b361df6a", 99 | "https://deno.land/std@0.201.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793", 100 | "https://deno.land/std@0.201.0/path/_basename.ts": "057d420c9049821f983f784fd87fa73ac471901fb628920b67972b0f44319343", 101 | "https://deno.land/std@0.201.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", 102 | "https://deno.land/std@0.201.0/path/_dirname.ts": "355e297236b2218600aee7a5301b937204c62e12da9db4b0b044993d9e658395", 103 | "https://deno.land/std@0.201.0/path/_extname.ts": "eaaa5aae1acf1f03254d681bd6a8ce42a9cb5b7ff2213a9d4740e8ab31283664", 104 | "https://deno.land/std@0.201.0/path/_format.ts": "4a99270d6810f082e614309164fad75d6f1a483b68eed97c830a506cc589f8b4", 105 | "https://deno.land/std@0.201.0/path/_from_file_url.ts": "6eadfae2e6f63ad9ee46b26db4a1b16583055c0392acedfb50ed2fc694b6f581", 106 | "https://deno.land/std@0.201.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", 107 | "https://deno.land/std@0.201.0/path/_is_absolute.ts": "05dac10b5e93c63198b92e3687baa2be178df5321c527dc555266c0f4f51558c", 108 | "https://deno.land/std@0.201.0/path/_join.ts": "815f5e85b042285175b1492dd5781240ce126c23bd97bad6b8211fe7129c538e", 109 | "https://deno.land/std@0.201.0/path/_normalize.ts": "a19ec8706b2707f9dd974662a5cd89fad438e62ab1857e08b314a8eb49a34d81", 110 | "https://deno.land/std@0.201.0/path/_os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", 111 | "https://deno.land/std@0.201.0/path/_parse.ts": "0f9b0ff43682dd9964eb1c4398610c4e165d8db9d3ac9d594220217adf480cfa", 112 | "https://deno.land/std@0.201.0/path/_relative.ts": "27bdeffb5311a47d85be26d37ad1969979359f7636c5cd9fcf05dcd0d5099dc5", 113 | "https://deno.land/std@0.201.0/path/_resolve.ts": "7a3616f1093735ed327e758313b79c3c04ea921808ca5f19ddf240cb68d0adf6", 114 | "https://deno.land/std@0.201.0/path/_to_file_url.ts": "a141e4a525303e1a3a0c0571fd024552b5f3553a2af7d75d1ff3a503dcbb66d8", 115 | "https://deno.land/std@0.201.0/path/_to_namespaced_path.ts": "0d5f4caa2ed98ef7a8786286df6af804b50e38859ae897b5b5b4c8c5930a75c8", 116 | "https://deno.land/std@0.201.0/path/_util.ts": "4e191b1bac6b3bf0c31aab42e5ca2e01a86ab5a0d2e08b75acf8585047a86221", 117 | "https://deno.land/std@0.201.0/path/basename.ts": "bdfa5a624c6a45564dc6758ef2077f2822978a6dbe77b0a3514f7d1f81362930", 118 | "https://deno.land/std@0.201.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", 119 | "https://deno.land/std@0.201.0/path/dirname.ts": "b6533f4ee4174a526dec50c279534df5345836dfdc15318400b08c62a62a39dd", 120 | "https://deno.land/std@0.201.0/path/extname.ts": "62c4b376300795342fe1e4746c0de518b4dc9c4b0b4617bfee62a2973a9555cf", 121 | "https://deno.land/std@0.201.0/path/format.ts": "110270b238514dd68455a4c54956215a1aff7e37e22e4427b7771cefe1920aa5", 122 | "https://deno.land/std@0.201.0/path/from_file_url.ts": "9f5cb58d58be14c775ec2e57fc70029ac8b17ed3bd7fe93e475b07280adde0ac", 123 | "https://deno.land/std@0.201.0/path/glob.ts": "593e2c3573883225c25c5a21aaa8e9382a696b8e175ea20a3b6a1471ad17aaed", 124 | "https://deno.land/std@0.201.0/path/is_absolute.ts": "0b92eb35a0a8780e9f16f16bb23655b67dace6a8e0d92d42039e518ee38103c1", 125 | "https://deno.land/std@0.201.0/path/join.ts": "31c5419f23d91655b08ec7aec403f4e4cd1a63d39e28f6e42642ea207c2734f8", 126 | "https://deno.land/std@0.201.0/path/mod.ts": "6e1efb0b13121463aedb53ea51dabf5639a3172ab58c89900bbb72b486872532", 127 | "https://deno.land/std@0.201.0/path/normalize.ts": "6ea523e0040979dd7ae2f1be5bf2083941881a252554c0f32566a18b03021955", 128 | "https://deno.land/std@0.201.0/path/parse.ts": "be8de342bb9e1924d78dc4d93c45215c152db7bf738ec32475560424b119b394", 129 | "https://deno.land/std@0.201.0/path/posix.ts": "0a1c1952d132323a88736d03e92bd236f3ed5f9f079e5823fae07c8d978ee61b", 130 | "https://deno.land/std@0.201.0/path/relative.ts": "8bedac226afd360afc45d451a6c29fabceaf32978526bcb38e0c852661f66c61", 131 | "https://deno.land/std@0.201.0/path/resolve.ts": "133161e4949fc97f9ca67988d51376b0f5eef8968a6372325ab84d39d30b80dc", 132 | "https://deno.land/std@0.201.0/path/separator.ts": "40a3e9a4ad10bef23bc2cd6c610291b6c502a06237c2c4cd034a15ca78dedc1f", 133 | "https://deno.land/std@0.201.0/path/to_file_url.ts": "00e6322373dd51ad109956b775e4e72e5f9fa68ce2c6b04e4af2a6eed3825d31", 134 | "https://deno.land/std@0.201.0/path/to_namespaced_path.ts": "1b1db3055c343ab389901adfbda34e82b7386bcd1c744d54f9c1496ee0fd0c3d", 135 | "https://deno.land/std@0.201.0/path/win32.ts": "8b3f80ef7a462511d5e8020ff490edcaa0a0d118f1b1e9da50e2916bdd73f9dd", 136 | "https://deno.land/std@0.201.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be", 137 | "https://deno.land/std@0.201.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73", 138 | "https://deno.land/std@0.201.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998", 139 | "https://deno.land/std@0.207.0/semver/_shared.ts": "8547ccf91b36c30fb2a8a17d7081df13f4ae694c4aa44c39799eba69ad0dcb23", 140 | "https://deno.land/std@0.207.0/semver/cmp.ts": "12c30b5888afd9e414defef64f881a478ff9ab11bd329ed6c5844b74eea5c971", 141 | "https://deno.land/std@0.207.0/semver/comparator_format.ts": "329e05d914c064590ded4801fc601bf1c5d0f461c5524b1578e10f180551ef6f", 142 | "https://deno.land/std@0.207.0/semver/comparator_intersects.ts": "61920121a6c1600306dbcf8944c4cc55e45c3a1bdbefe41b79a0884bf02d9e1b", 143 | "https://deno.land/std@0.207.0/semver/comparator_max.ts": "f4cc5f528abd8aab68c66bbead732e3c59102b13a318cd8e4f8a47aa3debec76", 144 | "https://deno.land/std@0.207.0/semver/comparator_min.ts": "eea382428ebf0c50168f780898df8519c88da5a10d1f8babbfebdc89fb75942e", 145 | "https://deno.land/std@0.207.0/semver/compare.ts": "782e03b5107648bebaaebf0e33a9a7d6a0481eb88d2f7be8e857e4abbfdf42c0", 146 | "https://deno.land/std@0.207.0/semver/compare_build.ts": "5d6ebc0106f1ed46e391d6c234e071934ba30938fa818c9cc3da67c7c7494c02", 147 | "https://deno.land/std@0.207.0/semver/constants.ts": "bb0c7652c433c7ec1dad5bf18c7e7e1557efe9ddfd5e70aa6305153e76dc318c", 148 | "https://deno.land/std@0.207.0/semver/difference.ts": "966ef286f0bfde53ebfb74a727c607b05a7fdce623a678794d088166b9b9afdf", 149 | "https://deno.land/std@0.207.0/semver/eq.ts": "6ddb84ce8c95f18e9b7a46d8a63b1e6ca5f0c0f651f1f46f20db6543b390c3f3", 150 | "https://deno.land/std@0.207.0/semver/format.ts": "236cc8b5d2e8031258dcff3ca89e14ba926434d5b789730e2c781db172e76bd9", 151 | "https://deno.land/std@0.207.0/semver/gt.ts": "8529cf2ae1bca95c22801cf38f93620dc802c5dcbc02f863437571b970de3705", 152 | "https://deno.land/std@0.207.0/semver/gte.ts": "b54f7855ac37ff076d6df9a294e944356754171f94f5cb974af782480a9f1fd0", 153 | "https://deno.land/std@0.207.0/semver/gtr.ts": "d2ec1f02ce6a566b7df76a188af7315d802c6069892d460d631a3b0d9e2b1a45", 154 | "https://deno.land/std@0.207.0/semver/increment.ts": "a6e5ac018887244731a4b936743ae14476cc432ac874f1c9848711b4000c5991", 155 | "https://deno.land/std@0.207.0/semver/is_semver.ts": "666f4e1d8e41994150d4326d515046bc5fc72e59cbbd6e756a0b60548dcd00b5", 156 | "https://deno.land/std@0.207.0/semver/is_semver_comparator.ts": "035aa894415ad1c8f50a6b6f52ea49c62d6f3af62b5d6fca9c1f4cb84f1896fd", 157 | "https://deno.land/std@0.207.0/semver/is_semver_range.ts": "6f9b4f1c937a202750cae9444900d8abe4a68cc3bf5bb90f0d49c08cf85308cb", 158 | "https://deno.land/std@0.207.0/semver/lt.ts": "081614b5adbc5bc944649e09af946a90a4b4bdb3d65a67c005183994504f04c2", 159 | "https://deno.land/std@0.207.0/semver/lte.ts": "f8605c17d620bfb3aa57775643e3c560c04f7c20f2e431f64ca5b2ea39e36217", 160 | "https://deno.land/std@0.207.0/semver/ltr.ts": "975e672b5ca8aa67336660653f8c76e1db829c628fb08ea3e815a9a12fa7eb9c", 161 | "https://deno.land/std@0.207.0/semver/max_satisfying.ts": "75406901818cd1127a6332e007e96285474e833d0e40dbbfddc01b08ee6e51f2", 162 | "https://deno.land/std@0.207.0/semver/min_satisfying.ts": "58bd48033a00e63bea0709f78c33c66ea58bce2dbebda0d54d3fdc6db7d0d298", 163 | "https://deno.land/std@0.207.0/semver/mod.ts": "442702e8a57cbf02e68868c46ffe66ecf6efbde58d72cfdfbdaa51ad0c4af513", 164 | "https://deno.land/std@0.207.0/semver/neq.ts": "e91b699681c3b406fc3d661d4eac7aa36cd1cc8bf188f8e3c7b53cc340775b87", 165 | "https://deno.land/std@0.207.0/semver/outside.ts": "1d225fdb42172d946c382e144ce97c402812741741bbe299561aa164cc956ec4", 166 | "https://deno.land/std@0.207.0/semver/parse.ts": "5d24ec0c5f681db1742c31332f6007395c84696c88ff4b58287485ed3f6d8c84", 167 | "https://deno.land/std@0.207.0/semver/parse_comparator.ts": "f07f9be8322b1f61a36b94c3c65a0dc4124958ee54cf744c92ca4028bf156d5e", 168 | "https://deno.land/std@0.207.0/semver/parse_range.ts": "39a18608a8026004b218ef383e7ae624a9e663b82327948c1810f16d875113c2", 169 | "https://deno.land/std@0.207.0/semver/range_format.ts": "3de31fd0b74dd565e052840e73a8e9ee1d9d289ca60b85749167710b978cc078", 170 | "https://deno.land/std@0.207.0/semver/range_intersects.ts": "8672e603df1bb68a02452b634021c4913395f4d16d75c21b578d6f4175a2b2c1", 171 | "https://deno.land/std@0.207.0/semver/range_max.ts": "9c10c65bbc7796347ce6f765a77865cead88870d17481ac78259400a2378af2e", 172 | "https://deno.land/std@0.207.0/semver/range_min.ts": "b7849e70e0b0677b382eddaa822b6690521449a659c5b8ec84cbd438f6e6ca59", 173 | "https://deno.land/std@0.207.0/semver/rcompare.ts": "b8b9f5108d40c64cf50ffe455199aba7ad64995829a17110301ae3f8290374ee", 174 | "https://deno.land/std@0.207.0/semver/rsort.ts": "a9139a1fc37570f9d8b6517032d152cf69143cec89d4342f19174e48f06d8543", 175 | "https://deno.land/std@0.207.0/semver/sort.ts": "c058a5b2c8e866fa8e6ef25c9d228133357caf4c140f129bfc368334fcd0813b", 176 | "https://deno.land/std@0.207.0/semver/test_comparator.ts": "eff5394cb82d133ed18f96fe547de7e7264bf0d25d16cbc6126664aa06ef8f37", 177 | "https://deno.land/std@0.207.0/semver/test_range.ts": "b236c276268e92bbbc65e7c4b4b6b685ea6b4534a71b2525b53093d094f631c6", 178 | "https://deno.land/std@0.207.0/semver/types.ts": "d44f442c2f27dd89bd6695b369e310b80549746f03c38f241fe28a83b33dd429", 179 | "https://deno.land/x/dax@0.35.0/mod.ts": "3fc382546bf3c7b90aa458aa144be7c6e8aed3e8c2680289f9c8694d986b7247", 180 | "https://deno.land/x/dax@0.35.0/src/command.ts": "6e7db06015b4ad6decbf59cc5fcb6bd4b03a46276f7e3f3472204c11b2109e0e", 181 | "https://deno.land/x/dax@0.35.0/src/command_handler.ts": "841cee0ce12b19eea6c7fcaeaa40a9e3ef4bf50c36cf02afbe3ab7b41f8571eb", 182 | "https://deno.land/x/dax@0.35.0/src/commands/args.ts": "a138aef24294e3cbf13cef08f4836d018e8dd99fd06ad82e7e7f08ef680bbc1d", 183 | "https://deno.land/x/dax@0.35.0/src/commands/cat.ts": "229dc854f80ea8f1ebd811190fc31e5cf0fe39f76c2de1c27e256cb831237cb0", 184 | "https://deno.land/x/dax@0.35.0/src/commands/cd.ts": "239fee1606881dbc3f778a761d1d4557c21a63063c15ab58883a32e7466b7177", 185 | "https://deno.land/x/dax@0.35.0/src/commands/cp_mv.ts": "58205a82a9404e444c7c5caf98b5dd2b350c668c0b421546a038b76ea8b6a53d", 186 | "https://deno.land/x/dax@0.35.0/src/commands/echo.ts": "247909de5b8ea20218daab419f3aad37b69763052272aca3633fe8e7f83148cd", 187 | "https://deno.land/x/dax@0.35.0/src/commands/exit.ts": "c619e52d744dfa3e8fa954026f1c5302d8be991c775553efc85a0f224b77b6ff", 188 | "https://deno.land/x/dax@0.35.0/src/commands/export.ts": "b6ecad1203cfe606d69da6c16736f31acf211e864e6822484d85cea1cb7d5528", 189 | "https://deno.land/x/dax@0.35.0/src/commands/mkdir.ts": "9381ecdc0e0203d941f89027b6ef2865393bf0a66670bf5f5aaa6a49669244c7", 190 | "https://deno.land/x/dax@0.35.0/src/commands/printenv.ts": "473c39b457cae91e9ca029ad420642b9a410257fb699674660c886c6ebe72ebc", 191 | "https://deno.land/x/dax@0.35.0/src/commands/pwd.ts": "5438aea979027bfa5c64c2a7f1073389735ea986f6abe2174ec21bcb70a2156f", 192 | "https://deno.land/x/dax@0.35.0/src/commands/rm.ts": "d911ff4e2e0b3d3c5d426c7b735313741ad762d9e25a743f101a1b05447eecf8", 193 | "https://deno.land/x/dax@0.35.0/src/commands/sleep.ts": "d1183fa8e31ba85a7b88666e854c7aa6e53e1d4c65e39f20a05d8ea4b82efca3", 194 | "https://deno.land/x/dax@0.35.0/src/commands/test.ts": "a221f82c209fd53756e9c02c475b9d5833284513853e90fdaaf0c1e1d9cfbf30", 195 | "https://deno.land/x/dax@0.35.0/src/commands/touch.ts": "5953dbde8732da47ade9b7554a638ea06a8b67a59842e638fb79f7aebe392650", 196 | "https://deno.land/x/dax@0.35.0/src/commands/unset.ts": "8d4abb29f53c3de0c10ba6d51e3d55bce745160f7430396ede58156e8f2b747c", 197 | "https://deno.land/x/dax@0.35.0/src/common.ts": "c0e809c591400dbadb25197f2819c59fec6b897c94c1aba6a026d5d1eee9cb53", 198 | "https://deno.land/x/dax@0.35.0/src/console/confirm.ts": "d9128d10b77fcc0a8df2784f71c79df68f5c8e00a34b04547b9ba9ddf1c97f96", 199 | "https://deno.land/x/dax@0.35.0/src/console/logger.ts": "e0ab5025915cef70df03681c756e211f25bb2e4331f82ed4256b17ddd9e794ea", 200 | "https://deno.land/x/dax@0.35.0/src/console/mod.ts": "29ae1f8250b74a477e26a3b6ccf647badf5d8f8e2a9e6c4aa0d5df9e3bbbb273", 201 | "https://deno.land/x/dax@0.35.0/src/console/multiSelect.ts": "31003744e58f45f720271bd034d8cfba1055c954ba02d77a2f2eb21e4c1ed55a", 202 | "https://deno.land/x/dax@0.35.0/src/console/progress/format.ts": "15ddbb8051580f88ed499281e12ca6f881f875ab73268d7451d7113ee130bd7d", 203 | "https://deno.land/x/dax@0.35.0/src/console/progress/interval.ts": "80188d980a27c2eb07c31324365118af549641442f0752fe7c3b0c91832e5046", 204 | "https://deno.land/x/dax@0.35.0/src/console/progress/mod.ts": "70080a5d06ab2c58e948225e1e5144458fbc36fbfa61672ac82bb2f6c6991bad", 205 | "https://deno.land/x/dax@0.35.0/src/console/prompt.ts": "78c645b41a7562133d05a10901ae4d682cb22bfaf0b5a21cc8475ca2a946aee1", 206 | "https://deno.land/x/dax@0.35.0/src/console/select.ts": "c9d7124d975bf34d52ea1ac88fd610ed39db8ee6505b9bb53f371cef2f56c6ab", 207 | "https://deno.land/x/dax@0.35.0/src/console/utils.ts": "954c99397dcd2cb3f1ccf50055085f17c9ffb31b25b3c5719776de81e23935f4", 208 | "https://deno.land/x/dax@0.35.0/src/deps.ts": "709fcfef942331cbc97c1faf37dbff8b97c411fac1d142106027ca5bbe64df59", 209 | "https://deno.land/x/dax@0.35.0/src/lib/mod.ts": "c992db99c8259ae3bf2d35666585dfefda84cf7cf4e624e42ea2ac7367900fe0", 210 | "https://deno.land/x/dax@0.35.0/src/lib/rs_lib.generated.js": "381f2f60b458bcb0a6fec1310c2c3b6447339f6995df206b9a4d0c3747ee8c36", 211 | "https://deno.land/x/dax@0.35.0/src/path.ts": "5e1ea6139a975d31d6a5ca62c96c095ff7ddcf5c34ef8b75ab0ea04f87ac579b", 212 | "https://deno.land/x/dax@0.35.0/src/pipes.ts": "3aa984c0d031f4221953e228ba89452a86068a80d2811fddb9c60737cd4ab174", 213 | "https://deno.land/x/dax@0.35.0/src/request.ts": "a2b20859de7a0fbe10584a41de435942ee4726f0b637b1cb55d7f632f4efc74f", 214 | "https://deno.land/x/dax@0.35.0/src/result.ts": "0908b69c16b25c3b258f6b2ada12e124686df5f7ea2b98daa27a83973c7b118c", 215 | "https://deno.land/x/dax@0.35.0/src/shell.ts": "9475a015d5493197f9611b1259c5dd6d27c7c2ab9c3711606cd4b47412568ee1", 216 | "https://deno.land/x/outdent@v0.8.0/src/index.ts": "6dc3df4108d5d6fedcdb974844d321037ca81eaaa16be6073235ff3268841a22", 217 | "https://deno.land/x/which@0.3.0/mod.ts": "3e10d07953c14e4ddc809742a3447cef14202cdfe9be6678a1dfc8769c4487e6", 218 | "https://raw.githubusercontent.com/dprint/automation/0.10.0/cargo.ts": "09cde3f879a9363a6d47bd2eebe7a78ed337172be5a133c72ba975674157c17d", 219 | "https://raw.githubusercontent.com/dprint/automation/0.10.0/deps.ts": "4153d1d241c9d43b73bce43377b4e4ac828184e0dcef8d6c934c50c0dfaaefec", 220 | "https://raw.githubusercontent.com/dprint/automation/0.10.0/hash.ts": "b81cab5700a6d7b6a0a4ff5b60bf0e26a2827eafd747ddd4c10bc6a4887d8d94", 221 | "https://raw.githubusercontent.com/dprint/automation/0.10.0/mod.ts": "5f330d62cc675f3b6c464b186809d30df12830a1e4d4cbb64e1a494d058c6163", 222 | "https://raw.githubusercontent.com/dprint/automation/0.10.0/process_plugin.ts": "232420b223baf7f21d31cfc103407ae229ec82b6e38676949994310ea9396909" 223 | }, 224 | "workspace": { 225 | "dependencies": [ 226 | "jsr:@david/dax@0.42", 227 | "jsr:@std/semver@1", 228 | "jsr:@std/yaml@1" 229 | ] 230 | } 231 | } 232 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 25 | dependencies = [ 26 | "cfg-if", 27 | "once_cell", 28 | "version_check", 29 | "zerocopy", 30 | ] 31 | 32 | [[package]] 33 | name = "aho-corasick" 34 | version = "1.1.3" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 37 | dependencies = [ 38 | "memchr", 39 | ] 40 | 41 | [[package]] 42 | name = "allocator-api2" 43 | version = "0.2.18" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 46 | 47 | [[package]] 48 | name = "anyhow" 49 | version = "1.0.86" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 52 | 53 | [[package]] 54 | name = "async-channel" 55 | version = "2.3.1" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 58 | dependencies = [ 59 | "concurrent-queue", 60 | "event-listener-strategy", 61 | "futures-core", 62 | "pin-project-lite", 63 | ] 64 | 65 | [[package]] 66 | name = "async-trait" 67 | version = "0.1.81" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" 70 | dependencies = [ 71 | "proc-macro2", 72 | "quote", 73 | "syn", 74 | ] 75 | 76 | [[package]] 77 | name = "autocfg" 78 | version = "1.3.0" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 81 | 82 | [[package]] 83 | name = "az" 84 | version = "1.2.1" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" 87 | 88 | [[package]] 89 | name = "backtrace" 90 | version = "0.3.73" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" 93 | dependencies = [ 94 | "addr2line", 95 | "cc", 96 | "cfg-if", 97 | "libc", 98 | "miniz_oxide", 99 | "object", 100 | "rustc-demangle", 101 | ] 102 | 103 | [[package]] 104 | name = "base64-simd" 105 | version = "0.7.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" 108 | dependencies = [ 109 | "simd-abstraction", 110 | ] 111 | 112 | [[package]] 113 | name = "bincode" 114 | version = "1.3.3" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 117 | dependencies = [ 118 | "serde", 119 | ] 120 | 121 | [[package]] 122 | name = "bindgen" 123 | version = "0.70.1" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" 126 | dependencies = [ 127 | "bitflags", 128 | "cexpr", 129 | "clang-sys", 130 | "itertools", 131 | "log", 132 | "prettyplease", 133 | "proc-macro2", 134 | "quote", 135 | "regex", 136 | "rustc-hash", 137 | "shlex", 138 | "syn", 139 | ] 140 | 141 | [[package]] 142 | name = "bit-set" 143 | version = "0.5.3" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 146 | dependencies = [ 147 | "bit-vec", 148 | ] 149 | 150 | [[package]] 151 | name = "bit-vec" 152 | version = "0.6.3" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 155 | 156 | [[package]] 157 | name = "bitflags" 158 | version = "2.6.0" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 161 | 162 | [[package]] 163 | name = "bitvec" 164 | version = "1.0.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 167 | dependencies = [ 168 | "funty", 169 | "radium", 170 | "tap", 171 | "wyz", 172 | ] 173 | 174 | [[package]] 175 | name = "block-buffer" 176 | version = "0.10.4" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 179 | dependencies = [ 180 | "generic-array", 181 | ] 182 | 183 | [[package]] 184 | name = "bumpalo" 185 | version = "3.16.0" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 188 | dependencies = [ 189 | "allocator-api2", 190 | ] 191 | 192 | [[package]] 193 | name = "bytes" 194 | version = "1.6.1" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" 197 | 198 | [[package]] 199 | name = "capacity_builder" 200 | version = "0.1.3" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "58ec49028cb308564429cd8fac4ef21290067a0afe8f5955330a8d487d0d790c" 203 | dependencies = [ 204 | "itoa", 205 | ] 206 | 207 | [[package]] 208 | name = "cc" 209 | version = "1.1.6" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" 212 | dependencies = [ 213 | "jobserver", 214 | "libc", 215 | ] 216 | 217 | [[package]] 218 | name = "cexpr" 219 | version = "0.6.0" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 222 | dependencies = [ 223 | "nom", 224 | ] 225 | 226 | [[package]] 227 | name = "cfg-if" 228 | version = "1.0.0" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 231 | 232 | [[package]] 233 | name = "clang-sys" 234 | version = "1.8.1" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 237 | dependencies = [ 238 | "glob", 239 | "libc", 240 | "libloading", 241 | ] 242 | 243 | [[package]] 244 | name = "concurrent-queue" 245 | version = "2.5.0" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 248 | dependencies = [ 249 | "crossbeam-utils", 250 | ] 251 | 252 | [[package]] 253 | name = "console" 254 | version = "0.15.8" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" 257 | dependencies = [ 258 | "encode_unicode", 259 | "lazy_static", 260 | "libc", 261 | "unicode-width", 262 | "windows-sys", 263 | ] 264 | 265 | [[package]] 266 | name = "cooked-waker" 267 | version = "5.0.0" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" 270 | 271 | [[package]] 272 | name = "core-foundation-sys" 273 | version = "0.8.7" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 276 | 277 | [[package]] 278 | name = "cpufeatures" 279 | version = "0.2.12" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 282 | dependencies = [ 283 | "libc", 284 | ] 285 | 286 | [[package]] 287 | name = "crc32fast" 288 | version = "1.4.2" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 291 | dependencies = [ 292 | "cfg-if", 293 | ] 294 | 295 | [[package]] 296 | name = "crossbeam-channel" 297 | version = "0.5.13" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 300 | dependencies = [ 301 | "crossbeam-utils", 302 | ] 303 | 304 | [[package]] 305 | name = "crossbeam-utils" 306 | version = "0.8.20" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 309 | 310 | [[package]] 311 | name = "crypto-common" 312 | version = "0.1.6" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 315 | dependencies = [ 316 | "generic-array", 317 | "typenum", 318 | ] 319 | 320 | [[package]] 321 | name = "data-encoding" 322 | version = "2.6.0" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" 325 | 326 | [[package]] 327 | name = "debugid" 328 | version = "0.8.0" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" 331 | dependencies = [ 332 | "serde", 333 | "uuid", 334 | ] 335 | 336 | [[package]] 337 | name = "deno_console" 338 | version = "0.184.0" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "10f16c92ce3aeedf4cd57f70d2728174c5d6eb5491db4db6fce41c422a24cfc5" 341 | dependencies = [ 342 | "deno_core", 343 | ] 344 | 345 | [[package]] 346 | name = "deno_core" 347 | version = "0.326.0" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "ed157162dc5320a2b46ffeeaec24788339df0f2437cfaea78a8d82696715ad7f" 350 | dependencies = [ 351 | "anyhow", 352 | "az", 353 | "bincode", 354 | "bit-set", 355 | "bit-vec", 356 | "bytes", 357 | "capacity_builder", 358 | "cooked-waker", 359 | "deno_core_icudata", 360 | "deno_ops", 361 | "deno_unsync", 362 | "futures", 363 | "indexmap", 364 | "libc", 365 | "memoffset", 366 | "parking_lot", 367 | "percent-encoding", 368 | "pin-project", 369 | "serde", 370 | "serde_json", 371 | "serde_v8", 372 | "smallvec", 373 | "sourcemap", 374 | "static_assertions", 375 | "tokio", 376 | "url", 377 | "v8", 378 | "wasm_dep_analyzer", 379 | ] 380 | 381 | [[package]] 382 | name = "deno_core_icudata" 383 | version = "0.74.0" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "fe4dccb6147bb3f3ba0c7a48e993bfeb999d2c2e47a81badee80e2b370c8d695" 386 | 387 | [[package]] 388 | name = "deno_ops" 389 | version = "0.202.0" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "4dd8ac1af251e292388e516dd339b9a3b982a6d1e7f8644c08e34671ca39003c" 392 | dependencies = [ 393 | "proc-macro-rules", 394 | "proc-macro2", 395 | "quote", 396 | "stringcase", 397 | "strum", 398 | "strum_macros", 399 | "syn", 400 | "thiserror 1.0.63", 401 | ] 402 | 403 | [[package]] 404 | name = "deno_unsync" 405 | version = "0.4.2" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "d774fd83f26b24f0805a6ab8b26834a0d06ceac0db517b769b1e4633c96a2057" 408 | dependencies = [ 409 | "futures", 410 | "parking_lot", 411 | "tokio", 412 | ] 413 | 414 | [[package]] 415 | name = "deno_url" 416 | version = "0.184.0" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "a24ef55a0efe6c56fe861703d3848f0a832822dd44b3f368e1e9366a71e73ebe" 419 | dependencies = [ 420 | "deno_core", 421 | "thiserror 2.0.9", 422 | "urlpattern", 423 | ] 424 | 425 | [[package]] 426 | name = "deno_webidl" 427 | version = "0.184.0" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "308d49c1e74dd9959cbe9b9a0073974e17a6af5cbb1d11408a36773ff17b7402" 430 | dependencies = [ 431 | "deno_core", 432 | ] 433 | 434 | [[package]] 435 | name = "diff" 436 | version = "0.1.13" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" 439 | 440 | [[package]] 441 | name = "digest" 442 | version = "0.10.7" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 445 | dependencies = [ 446 | "block-buffer", 447 | "crypto-common", 448 | ] 449 | 450 | [[package]] 451 | name = "dprint-core" 452 | version = "0.67.2" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | checksum = "75e378a003bb27a90f39ed9f707735cdd3fc91619cfecd7225cb1c59964b60e5" 455 | dependencies = [ 456 | "anyhow", 457 | "async-trait", 458 | "bumpalo", 459 | "crossbeam-channel", 460 | "futures", 461 | "hashbrown", 462 | "indexmap", 463 | "libc", 464 | "parking_lot", 465 | "rustc-hash", 466 | "serde", 467 | "serde_json", 468 | "tokio", 469 | "tokio-util", 470 | "unicode-width", 471 | "winapi", 472 | ] 473 | 474 | [[package]] 475 | name = "dprint-development" 476 | version = "0.9.5" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "5e2502cba4299d334fc11a8a3357eb459f378dc285d7fbbb365c595a0ce48c73" 479 | dependencies = [ 480 | "anyhow", 481 | "console", 482 | "serde_json", 483 | "similar", 484 | ] 485 | 486 | [[package]] 487 | name = "dprint-plugin-deno-base" 488 | version = "0.1.0" 489 | dependencies = [ 490 | "async-channel", 491 | "deno_core", 492 | "dprint-core", 493 | "pretty_assertions", 494 | "serde", 495 | "serde_json", 496 | "sysinfo", 497 | "tokio", 498 | "tokio-util", 499 | "zstd", 500 | ] 501 | 502 | [[package]] 503 | name = "dprint-plugin-prettier" 504 | version = "0.63.0" 505 | dependencies = [ 506 | "deno_console", 507 | "deno_core", 508 | "deno_url", 509 | "deno_webidl", 510 | "dprint-core", 511 | "dprint-development", 512 | "dprint-plugin-deno-base", 513 | "pretty_assertions", 514 | "serde", 515 | "serde_json", 516 | "sha256", 517 | "zstd", 518 | ] 519 | 520 | [[package]] 521 | name = "either" 522 | version = "1.13.0" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 525 | 526 | [[package]] 527 | name = "encode_unicode" 528 | version = "0.3.6" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 531 | 532 | [[package]] 533 | name = "equivalent" 534 | version = "1.0.1" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 537 | 538 | [[package]] 539 | name = "errno" 540 | version = "0.3.9" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 543 | dependencies = [ 544 | "libc", 545 | "windows-sys", 546 | ] 547 | 548 | [[package]] 549 | name = "event-listener" 550 | version = "5.3.1" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" 553 | dependencies = [ 554 | "concurrent-queue", 555 | "parking", 556 | "pin-project-lite", 557 | ] 558 | 559 | [[package]] 560 | name = "event-listener-strategy" 561 | version = "0.5.3" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" 564 | dependencies = [ 565 | "event-listener", 566 | "pin-project-lite", 567 | ] 568 | 569 | [[package]] 570 | name = "form_urlencoded" 571 | version = "1.2.1" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 574 | dependencies = [ 575 | "percent-encoding", 576 | ] 577 | 578 | [[package]] 579 | name = "fslock" 580 | version = "0.2.1" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" 583 | dependencies = [ 584 | "libc", 585 | "winapi", 586 | ] 587 | 588 | [[package]] 589 | name = "funty" 590 | version = "2.0.0" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 593 | 594 | [[package]] 595 | name = "futures" 596 | version = "0.3.30" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 599 | dependencies = [ 600 | "futures-channel", 601 | "futures-core", 602 | "futures-executor", 603 | "futures-io", 604 | "futures-sink", 605 | "futures-task", 606 | "futures-util", 607 | ] 608 | 609 | [[package]] 610 | name = "futures-channel" 611 | version = "0.3.30" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 614 | dependencies = [ 615 | "futures-core", 616 | "futures-sink", 617 | ] 618 | 619 | [[package]] 620 | name = "futures-core" 621 | version = "0.3.30" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 624 | 625 | [[package]] 626 | name = "futures-executor" 627 | version = "0.3.30" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 630 | dependencies = [ 631 | "futures-core", 632 | "futures-task", 633 | "futures-util", 634 | ] 635 | 636 | [[package]] 637 | name = "futures-io" 638 | version = "0.3.30" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 641 | 642 | [[package]] 643 | name = "futures-macro" 644 | version = "0.3.30" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 647 | dependencies = [ 648 | "proc-macro2", 649 | "quote", 650 | "syn", 651 | ] 652 | 653 | [[package]] 654 | name = "futures-sink" 655 | version = "0.3.30" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 658 | 659 | [[package]] 660 | name = "futures-task" 661 | version = "0.3.30" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 664 | 665 | [[package]] 666 | name = "futures-util" 667 | version = "0.3.30" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 670 | dependencies = [ 671 | "futures-channel", 672 | "futures-core", 673 | "futures-io", 674 | "futures-macro", 675 | "futures-sink", 676 | "futures-task", 677 | "memchr", 678 | "pin-project-lite", 679 | "pin-utils", 680 | "slab", 681 | ] 682 | 683 | [[package]] 684 | name = "generic-array" 685 | version = "0.14.7" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 688 | dependencies = [ 689 | "typenum", 690 | "version_check", 691 | ] 692 | 693 | [[package]] 694 | name = "gimli" 695 | version = "0.29.0" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 698 | 699 | [[package]] 700 | name = "glob" 701 | version = "0.3.1" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 704 | 705 | [[package]] 706 | name = "gzip-header" 707 | version = "1.0.0" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" 710 | dependencies = [ 711 | "crc32fast", 712 | ] 713 | 714 | [[package]] 715 | name = "hashbrown" 716 | version = "0.14.5" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 719 | dependencies = [ 720 | "ahash", 721 | "allocator-api2", 722 | ] 723 | 724 | [[package]] 725 | name = "heck" 726 | version = "0.4.1" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 729 | 730 | [[package]] 731 | name = "hermit-abi" 732 | version = "0.3.9" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 735 | 736 | [[package]] 737 | name = "hex" 738 | version = "0.4.3" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 741 | 742 | [[package]] 743 | name = "home" 744 | version = "0.5.9" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 747 | dependencies = [ 748 | "windows-sys", 749 | ] 750 | 751 | [[package]] 752 | name = "idna" 753 | version = "0.5.0" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 756 | dependencies = [ 757 | "unicode-bidi", 758 | "unicode-normalization", 759 | ] 760 | 761 | [[package]] 762 | name = "if_chain" 763 | version = "1.0.2" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" 766 | 767 | [[package]] 768 | name = "indexmap" 769 | version = "2.2.6" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 772 | dependencies = [ 773 | "equivalent", 774 | "hashbrown", 775 | "serde", 776 | ] 777 | 778 | [[package]] 779 | name = "itertools" 780 | version = "0.12.1" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 783 | dependencies = [ 784 | "either", 785 | ] 786 | 787 | [[package]] 788 | name = "itoa" 789 | version = "1.0.14" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 792 | 793 | [[package]] 794 | name = "jobserver" 795 | version = "0.1.32" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 798 | dependencies = [ 799 | "libc", 800 | ] 801 | 802 | [[package]] 803 | name = "lazy_static" 804 | version = "1.5.0" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 807 | 808 | [[package]] 809 | name = "libc" 810 | version = "0.2.169" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 813 | 814 | [[package]] 815 | name = "libloading" 816 | version = "0.8.5" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" 819 | dependencies = [ 820 | "cfg-if", 821 | "windows-targets", 822 | ] 823 | 824 | [[package]] 825 | name = "linux-raw-sys" 826 | version = "0.4.14" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 829 | 830 | [[package]] 831 | name = "lock_api" 832 | version = "0.4.12" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 835 | dependencies = [ 836 | "autocfg", 837 | "scopeguard", 838 | ] 839 | 840 | [[package]] 841 | name = "log" 842 | version = "0.4.22" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 845 | 846 | [[package]] 847 | name = "memchr" 848 | version = "2.7.4" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 851 | 852 | [[package]] 853 | name = "memoffset" 854 | version = "0.9.1" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 857 | dependencies = [ 858 | "autocfg", 859 | ] 860 | 861 | [[package]] 862 | name = "minimal-lexical" 863 | version = "0.2.1" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 866 | 867 | [[package]] 868 | name = "miniz_oxide" 869 | version = "0.7.4" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 872 | dependencies = [ 873 | "adler", 874 | ] 875 | 876 | [[package]] 877 | name = "mio" 878 | version = "1.0.1" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" 881 | dependencies = [ 882 | "hermit-abi", 883 | "libc", 884 | "wasi", 885 | "windows-sys", 886 | ] 887 | 888 | [[package]] 889 | name = "nom" 890 | version = "7.1.3" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 893 | dependencies = [ 894 | "memchr", 895 | "minimal-lexical", 896 | ] 897 | 898 | [[package]] 899 | name = "ntapi" 900 | version = "0.4.1" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 903 | dependencies = [ 904 | "winapi", 905 | ] 906 | 907 | [[package]] 908 | name = "num-bigint" 909 | version = "0.4.6" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 912 | dependencies = [ 913 | "num-integer", 914 | "num-traits", 915 | "rand", 916 | ] 917 | 918 | [[package]] 919 | name = "num-integer" 920 | version = "0.1.46" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 923 | dependencies = [ 924 | "num-traits", 925 | ] 926 | 927 | [[package]] 928 | name = "num-traits" 929 | version = "0.2.19" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 932 | dependencies = [ 933 | "autocfg", 934 | ] 935 | 936 | [[package]] 937 | name = "object" 938 | version = "0.36.2" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" 941 | dependencies = [ 942 | "memchr", 943 | ] 944 | 945 | [[package]] 946 | name = "once_cell" 947 | version = "1.19.0" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 950 | 951 | [[package]] 952 | name = "outref" 953 | version = "0.1.0" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" 956 | 957 | [[package]] 958 | name = "parking" 959 | version = "2.2.1" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 962 | 963 | [[package]] 964 | name = "parking_lot" 965 | version = "0.12.3" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 968 | dependencies = [ 969 | "lock_api", 970 | "parking_lot_core", 971 | ] 972 | 973 | [[package]] 974 | name = "parking_lot_core" 975 | version = "0.9.10" 976 | source = "registry+https://github.com/rust-lang/crates.io-index" 977 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 978 | dependencies = [ 979 | "cfg-if", 980 | "libc", 981 | "redox_syscall", 982 | "smallvec", 983 | "windows-targets", 984 | ] 985 | 986 | [[package]] 987 | name = "paste" 988 | version = "1.0.15" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 991 | 992 | [[package]] 993 | name = "percent-encoding" 994 | version = "2.3.1" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 997 | 998 | [[package]] 999 | name = "pin-project" 1000 | version = "1.1.5" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 1003 | dependencies = [ 1004 | "pin-project-internal", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "pin-project-internal" 1009 | version = "1.1.5" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 1012 | dependencies = [ 1013 | "proc-macro2", 1014 | "quote", 1015 | "syn", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "pin-project-lite" 1020 | version = "0.2.14" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1023 | 1024 | [[package]] 1025 | name = "pin-utils" 1026 | version = "0.1.0" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1029 | 1030 | [[package]] 1031 | name = "pkg-config" 1032 | version = "0.3.30" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1035 | 1036 | [[package]] 1037 | name = "pretty_assertions" 1038 | version = "1.4.0" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" 1041 | dependencies = [ 1042 | "diff", 1043 | "yansi", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "prettyplease" 1048 | version = "0.2.20" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" 1051 | dependencies = [ 1052 | "proc-macro2", 1053 | "syn", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "proc-macro-rules" 1058 | version = "0.4.0" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | checksum = "07c277e4e643ef00c1233393c673f655e3672cf7eb3ba08a00bdd0ea59139b5f" 1061 | dependencies = [ 1062 | "proc-macro-rules-macros", 1063 | "proc-macro2", 1064 | "syn", 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "proc-macro-rules-macros" 1069 | version = "0.4.0" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "207fffb0fe655d1d47f6af98cc2793405e85929bdbc420d685554ff07be27ac7" 1072 | dependencies = [ 1073 | "once_cell", 1074 | "proc-macro2", 1075 | "quote", 1076 | "syn", 1077 | ] 1078 | 1079 | [[package]] 1080 | name = "proc-macro2" 1081 | version = "1.0.92" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 1084 | dependencies = [ 1085 | "unicode-ident", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "quote" 1090 | version = "1.0.36" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1093 | dependencies = [ 1094 | "proc-macro2", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "radium" 1099 | version = "0.7.0" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 1102 | 1103 | [[package]] 1104 | name = "rand" 1105 | version = "0.8.5" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1108 | dependencies = [ 1109 | "rand_core", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "rand_core" 1114 | version = "0.6.4" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1117 | 1118 | [[package]] 1119 | name = "redox_syscall" 1120 | version = "0.5.3" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" 1123 | dependencies = [ 1124 | "bitflags", 1125 | ] 1126 | 1127 | [[package]] 1128 | name = "regex" 1129 | version = "1.10.5" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" 1132 | dependencies = [ 1133 | "aho-corasick", 1134 | "memchr", 1135 | "regex-automata", 1136 | "regex-syntax", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "regex-automata" 1141 | version = "0.4.7" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 1144 | dependencies = [ 1145 | "aho-corasick", 1146 | "memchr", 1147 | "regex-syntax", 1148 | ] 1149 | 1150 | [[package]] 1151 | name = "regex-syntax" 1152 | version = "0.8.4" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 1155 | 1156 | [[package]] 1157 | name = "rustc-demangle" 1158 | version = "0.1.24" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1161 | 1162 | [[package]] 1163 | name = "rustc-hash" 1164 | version = "1.1.0" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1167 | 1168 | [[package]] 1169 | name = "rustc_version" 1170 | version = "0.2.3" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1173 | dependencies = [ 1174 | "semver", 1175 | ] 1176 | 1177 | [[package]] 1178 | name = "rustix" 1179 | version = "0.38.34" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 1182 | dependencies = [ 1183 | "bitflags", 1184 | "errno", 1185 | "libc", 1186 | "linux-raw-sys", 1187 | "windows-sys", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "rustversion" 1192 | version = "1.0.17" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 1195 | 1196 | [[package]] 1197 | name = "ryu" 1198 | version = "1.0.18" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1201 | 1202 | [[package]] 1203 | name = "scopeguard" 1204 | version = "1.2.0" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1207 | 1208 | [[package]] 1209 | name = "semver" 1210 | version = "0.9.0" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1213 | dependencies = [ 1214 | "semver-parser", 1215 | ] 1216 | 1217 | [[package]] 1218 | name = "semver-parser" 1219 | version = "0.7.0" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1222 | 1223 | [[package]] 1224 | name = "serde" 1225 | version = "1.0.217" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" 1228 | dependencies = [ 1229 | "serde_derive", 1230 | ] 1231 | 1232 | [[package]] 1233 | name = "serde_derive" 1234 | version = "1.0.217" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" 1237 | dependencies = [ 1238 | "proc-macro2", 1239 | "quote", 1240 | "syn", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "serde_json" 1245 | version = "1.0.120" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" 1248 | dependencies = [ 1249 | "indexmap", 1250 | "itoa", 1251 | "ryu", 1252 | "serde", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "serde_v8" 1257 | version = "0.235.0" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "d07afd8b67b4a442ecc2823038473ac0e9e5682de93c213323b60661afdd7eb4" 1260 | dependencies = [ 1261 | "num-bigint", 1262 | "serde", 1263 | "smallvec", 1264 | "thiserror 1.0.63", 1265 | "v8", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "sha2" 1270 | version = "0.10.8" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1273 | dependencies = [ 1274 | "cfg-if", 1275 | "cpufeatures", 1276 | "digest", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "sha256" 1281 | version = "1.5.0" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" 1284 | dependencies = [ 1285 | "async-trait", 1286 | "bytes", 1287 | "hex", 1288 | "sha2", 1289 | "tokio", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "shlex" 1294 | version = "1.3.0" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1297 | 1298 | [[package]] 1299 | name = "signal-hook-registry" 1300 | version = "1.4.2" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1303 | dependencies = [ 1304 | "libc", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "simd-abstraction" 1309 | version = "0.7.1" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" 1312 | dependencies = [ 1313 | "outref", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "similar" 1318 | version = "2.6.0" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" 1321 | 1322 | [[package]] 1323 | name = "slab" 1324 | version = "0.4.9" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1327 | dependencies = [ 1328 | "autocfg", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "smallvec" 1333 | version = "1.13.2" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1336 | 1337 | [[package]] 1338 | name = "socket2" 1339 | version = "0.5.7" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1342 | dependencies = [ 1343 | "libc", 1344 | "windows-sys", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "sourcemap" 1349 | version = "8.0.1" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" 1352 | dependencies = [ 1353 | "base64-simd", 1354 | "bitvec", 1355 | "data-encoding", 1356 | "debugid", 1357 | "if_chain", 1358 | "rustc-hash", 1359 | "rustc_version", 1360 | "serde", 1361 | "serde_json", 1362 | "unicode-id-start", 1363 | "url", 1364 | ] 1365 | 1366 | [[package]] 1367 | name = "static_assertions" 1368 | version = "1.1.0" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1371 | 1372 | [[package]] 1373 | name = "stringcase" 1374 | version = "0.3.0" 1375 | source = "registry+https://github.com/rust-lang/crates.io-index" 1376 | checksum = "04028eeb851ed08af6aba5caa29f2d59a13ed168cee4d6bd753aeefcf1d636b0" 1377 | 1378 | [[package]] 1379 | name = "strum" 1380 | version = "0.25.0" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" 1383 | dependencies = [ 1384 | "strum_macros", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "strum_macros" 1389 | version = "0.25.3" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" 1392 | dependencies = [ 1393 | "heck", 1394 | "proc-macro2", 1395 | "quote", 1396 | "rustversion", 1397 | "syn", 1398 | ] 1399 | 1400 | [[package]] 1401 | name = "syn" 1402 | version = "2.0.95" 1403 | source = "registry+https://github.com/rust-lang/crates.io-index" 1404 | checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" 1405 | dependencies = [ 1406 | "proc-macro2", 1407 | "quote", 1408 | "unicode-ident", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "sysinfo" 1413 | version = "0.33.1" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" 1416 | dependencies = [ 1417 | "core-foundation-sys", 1418 | "libc", 1419 | "memchr", 1420 | "ntapi", 1421 | "windows", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "tap" 1426 | version = "1.0.1" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 1429 | 1430 | [[package]] 1431 | name = "thiserror" 1432 | version = "1.0.63" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" 1435 | dependencies = [ 1436 | "thiserror-impl 1.0.63", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "thiserror" 1441 | version = "2.0.9" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" 1444 | dependencies = [ 1445 | "thiserror-impl 2.0.9", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "thiserror-impl" 1450 | version = "1.0.63" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" 1453 | dependencies = [ 1454 | "proc-macro2", 1455 | "quote", 1456 | "syn", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "thiserror-impl" 1461 | version = "2.0.9" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" 1464 | dependencies = [ 1465 | "proc-macro2", 1466 | "quote", 1467 | "syn", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "tinyvec" 1472 | version = "1.8.0" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 1475 | dependencies = [ 1476 | "tinyvec_macros", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "tinyvec_macros" 1481 | version = "0.1.1" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1484 | 1485 | [[package]] 1486 | name = "tokio" 1487 | version = "1.39.2" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" 1490 | dependencies = [ 1491 | "backtrace", 1492 | "bytes", 1493 | "libc", 1494 | "mio", 1495 | "parking_lot", 1496 | "pin-project-lite", 1497 | "signal-hook-registry", 1498 | "socket2", 1499 | "tokio-macros", 1500 | "windows-sys", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "tokio-macros" 1505 | version = "2.4.0" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 1508 | dependencies = [ 1509 | "proc-macro2", 1510 | "quote", 1511 | "syn", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "tokio-util" 1516 | version = "0.7.13" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 1519 | dependencies = [ 1520 | "bytes", 1521 | "futures-core", 1522 | "futures-sink", 1523 | "pin-project-lite", 1524 | "tokio", 1525 | ] 1526 | 1527 | [[package]] 1528 | name = "typenum" 1529 | version = "1.17.0" 1530 | source = "registry+https://github.com/rust-lang/crates.io-index" 1531 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1532 | 1533 | [[package]] 1534 | name = "unic-char-property" 1535 | version = "0.9.0" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" 1538 | dependencies = [ 1539 | "unic-char-range", 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "unic-char-range" 1544 | version = "0.9.0" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" 1547 | 1548 | [[package]] 1549 | name = "unic-common" 1550 | version = "0.9.0" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" 1553 | 1554 | [[package]] 1555 | name = "unic-ucd-ident" 1556 | version = "0.9.0" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" 1559 | dependencies = [ 1560 | "unic-char-property", 1561 | "unic-char-range", 1562 | "unic-ucd-version", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "unic-ucd-version" 1567 | version = "0.9.0" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" 1570 | dependencies = [ 1571 | "unic-common", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "unicode-bidi" 1576 | version = "0.3.15" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1579 | 1580 | [[package]] 1581 | name = "unicode-id-start" 1582 | version = "1.2.0" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea" 1585 | 1586 | [[package]] 1587 | name = "unicode-ident" 1588 | version = "1.0.12" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1591 | 1592 | [[package]] 1593 | name = "unicode-normalization" 1594 | version = "0.1.23" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1597 | dependencies = [ 1598 | "tinyvec", 1599 | ] 1600 | 1601 | [[package]] 1602 | name = "unicode-width" 1603 | version = "0.1.13" 1604 | source = "registry+https://github.com/rust-lang/crates.io-index" 1605 | checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" 1606 | 1607 | [[package]] 1608 | name = "url" 1609 | version = "2.5.2" 1610 | source = "registry+https://github.com/rust-lang/crates.io-index" 1611 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 1612 | dependencies = [ 1613 | "form_urlencoded", 1614 | "idna", 1615 | "percent-encoding", 1616 | "serde", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "urlpattern" 1621 | version = "0.3.0" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" 1624 | dependencies = [ 1625 | "regex", 1626 | "serde", 1627 | "unic-ucd-ident", 1628 | "url", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "uuid" 1633 | version = "1.10.0" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" 1636 | 1637 | [[package]] 1638 | name = "v8" 1639 | version = "130.0.5" 1640 | source = "registry+https://github.com/rust-lang/crates.io-index" 1641 | checksum = "eefb620efa1e8f2d0f4dd1b2a72b0924a0a0e8b710e27e7ce7da7fac95c7aae5" 1642 | dependencies = [ 1643 | "bindgen", 1644 | "bitflags", 1645 | "fslock", 1646 | "gzip-header", 1647 | "home", 1648 | "miniz_oxide", 1649 | "once_cell", 1650 | "paste", 1651 | "which", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "version_check" 1656 | version = "0.9.5" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1659 | 1660 | [[package]] 1661 | name = "wasi" 1662 | version = "0.11.0+wasi-snapshot-preview1" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1665 | 1666 | [[package]] 1667 | name = "wasm_dep_analyzer" 1668 | version = "0.1.0" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "7f270206a91783fd90625c8bb0d8fbd459d0b1d1bf209b656f713f01ae7c04b8" 1671 | dependencies = [ 1672 | "thiserror 1.0.63", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "which" 1677 | version = "6.0.1" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" 1680 | dependencies = [ 1681 | "either", 1682 | "home", 1683 | "rustix", 1684 | "winsafe", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "winapi" 1689 | version = "0.3.9" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1692 | dependencies = [ 1693 | "winapi-i686-pc-windows-gnu", 1694 | "winapi-x86_64-pc-windows-gnu", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "winapi-i686-pc-windows-gnu" 1699 | version = "0.4.0" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1702 | 1703 | [[package]] 1704 | name = "winapi-x86_64-pc-windows-gnu" 1705 | version = "0.4.0" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1708 | 1709 | [[package]] 1710 | name = "windows" 1711 | version = "0.57.0" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" 1714 | dependencies = [ 1715 | "windows-core", 1716 | "windows-targets", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "windows-core" 1721 | version = "0.57.0" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" 1724 | dependencies = [ 1725 | "windows-implement", 1726 | "windows-interface", 1727 | "windows-result", 1728 | "windows-targets", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "windows-implement" 1733 | version = "0.57.0" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" 1736 | dependencies = [ 1737 | "proc-macro2", 1738 | "quote", 1739 | "syn", 1740 | ] 1741 | 1742 | [[package]] 1743 | name = "windows-interface" 1744 | version = "0.57.0" 1745 | source = "registry+https://github.com/rust-lang/crates.io-index" 1746 | checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" 1747 | dependencies = [ 1748 | "proc-macro2", 1749 | "quote", 1750 | "syn", 1751 | ] 1752 | 1753 | [[package]] 1754 | name = "windows-result" 1755 | version = "0.1.2" 1756 | source = "registry+https://github.com/rust-lang/crates.io-index" 1757 | checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" 1758 | dependencies = [ 1759 | "windows-targets", 1760 | ] 1761 | 1762 | [[package]] 1763 | name = "windows-sys" 1764 | version = "0.52.0" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1767 | dependencies = [ 1768 | "windows-targets", 1769 | ] 1770 | 1771 | [[package]] 1772 | name = "windows-targets" 1773 | version = "0.52.6" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1776 | dependencies = [ 1777 | "windows_aarch64_gnullvm", 1778 | "windows_aarch64_msvc", 1779 | "windows_i686_gnu", 1780 | "windows_i686_gnullvm", 1781 | "windows_i686_msvc", 1782 | "windows_x86_64_gnu", 1783 | "windows_x86_64_gnullvm", 1784 | "windows_x86_64_msvc", 1785 | ] 1786 | 1787 | [[package]] 1788 | name = "windows_aarch64_gnullvm" 1789 | version = "0.52.6" 1790 | source = "registry+https://github.com/rust-lang/crates.io-index" 1791 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1792 | 1793 | [[package]] 1794 | name = "windows_aarch64_msvc" 1795 | version = "0.52.6" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1798 | 1799 | [[package]] 1800 | name = "windows_i686_gnu" 1801 | version = "0.52.6" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1804 | 1805 | [[package]] 1806 | name = "windows_i686_gnullvm" 1807 | version = "0.52.6" 1808 | source = "registry+https://github.com/rust-lang/crates.io-index" 1809 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1810 | 1811 | [[package]] 1812 | name = "windows_i686_msvc" 1813 | version = "0.52.6" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1816 | 1817 | [[package]] 1818 | name = "windows_x86_64_gnu" 1819 | version = "0.52.6" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1822 | 1823 | [[package]] 1824 | name = "windows_x86_64_gnullvm" 1825 | version = "0.52.6" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1828 | 1829 | [[package]] 1830 | name = "windows_x86_64_msvc" 1831 | version = "0.52.6" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1834 | 1835 | [[package]] 1836 | name = "winsafe" 1837 | version = "0.0.19" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" 1840 | 1841 | [[package]] 1842 | name = "wyz" 1843 | version = "0.5.1" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 1846 | dependencies = [ 1847 | "tap", 1848 | ] 1849 | 1850 | [[package]] 1851 | name = "yansi" 1852 | version = "0.5.1" 1853 | source = "registry+https://github.com/rust-lang/crates.io-index" 1854 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" 1855 | 1856 | [[package]] 1857 | name = "zerocopy" 1858 | version = "0.7.35" 1859 | source = "registry+https://github.com/rust-lang/crates.io-index" 1860 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 1861 | dependencies = [ 1862 | "zerocopy-derive", 1863 | ] 1864 | 1865 | [[package]] 1866 | name = "zerocopy-derive" 1867 | version = "0.7.35" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 1870 | dependencies = [ 1871 | "proc-macro2", 1872 | "quote", 1873 | "syn", 1874 | ] 1875 | 1876 | [[package]] 1877 | name = "zstd" 1878 | version = "0.13.2" 1879 | source = "registry+https://github.com/rust-lang/crates.io-index" 1880 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 1881 | dependencies = [ 1882 | "zstd-safe", 1883 | ] 1884 | 1885 | [[package]] 1886 | name = "zstd-safe" 1887 | version = "7.2.0" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" 1890 | dependencies = [ 1891 | "zstd-sys", 1892 | ] 1893 | 1894 | [[package]] 1895 | name = "zstd-sys" 1896 | version = "2.0.12+zstd.1.5.6" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" 1899 | dependencies = [ 1900 | "cc", 1901 | "pkg-config", 1902 | ] 1903 | --------------------------------------------------------------------------------