{"id":31364484,"url":"https://github.com/jaywcjlove/prettier","last_synced_at":"2025-09-27T07:53:47.408Z","repository":{"id":311065223,"uuid":"1042336258","full_name":"jaywcjlove/Prettier","owner":"jaywcjlove","description":"A Swift code formatting library based on JavaScriptCore and Prettier","archived":false,"fork":false,"pushed_at":"2025-09-18T14:48:57.000Z","size":3250,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-18T17:28:45.985Z","etag":null,"topics":["formatter","prettier","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaywcjlove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"jaywcjlove","buy_me_a_coffee":"jaywcjlove","custom":["https://www.paypal.me/kennyiseeyou","https://jaywcjlove.github.io/#/sponsor"]}},"created_at":"2025-08-21T21:17:58.000Z","updated_at":"2025-09-18T14:49:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"9caddd57-5d89-4eec-9636-06da5602fd6a","html_url":"https://github.com/jaywcjlove/Prettier","commit_stats":null,"previous_names":["jaywcjlove/prettier"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/jaywcjlove/Prettier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2FPrettier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2FPrettier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2FPrettier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2FPrettier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaywcjlove","download_url":"https://codeload.github.com/jaywcjlove/Prettier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaywcjlove%2FPrettier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277200293,"owners_count":25778129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-27T02:00:08.978Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["formatter","prettier","swift"],"created_at":"2025-09-27T07:53:46.078Z","updated_at":"2025-09-27T07:53:47.403Z","avatar_url":"https://github.com/jaywcjlove.png","language":"Swift","funding_links":["https://ko-fi.com/jaywcjlove","https://buymeacoffee.com/jaywcjlove","https://www.paypal.me/kennyiseeyou","https://jaywcjlove.github.io/#/sponsor"],"categories":[],"sub_categories":[],"readme":"\u003cdiv markdown=\"1\"\u003e\n  \u003csup\u003eUsing \u003ca href=\"https://wangchujiang.com/#/app\" target=\"_blank\"\u003emy app\u003c/a\u003e is also a way to \u003ca href=\"https://wangchujiang.com/#/sponsor\" target=\"_blank\"\u003esupport\u003c/a\u003e me:\u003c/sup\u003e\n  \u003cbr\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/VidCrop/6752624705\" title=\"VidCrop for macOS\"\u003e\u003cimg align=\"center\" alt=\"VidCrop\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/91d2b281-271a-4107-9ef6-f3b11bd6dbac\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/Vidwall/6747587746\" title=\"Vidwall for macOS\"\u003e\u003cimg align=\"center\" alt=\"Vidwall\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/7b5df70a-ed91-4d4b-85be-f00e60a09ce9\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://wangchujiang.com/mousio-hint/\" title=\"Mousio Hint for macOS\"\u003e\u003cimg align=\"center\" alt=\"Mousio Hint\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/3c0af128-0cef-44e5-a8db-4741dc5a6690\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6746747327\" title=\"Mousio for macOS\"\u003e\u003cimg align=\"center\" alt=\"Mousio\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/9edf61ff-5a6c-4676-9cc2-8fd3c1ad0dfb\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6745227444\" title=\"Musicer for macOS\"\u003e\u003cimg align=\"center\" alt=\"Musicer\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/b7abfba8-88ff-4c86-a125-43073d5aef22\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6743841447\" title=\"Audioer for macOS\"\u003e\u003cimg align=\"center\" alt=\"Audioer\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/7a836865-8c90-4119-87bc-19e06a76c957\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6744690194\" title=\"FileSentinel for macOS\"\u003e\u003cimg align=\"center\" alt=\"FileSentinel\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/28bce2cc-290e-45bf-9068-585ff6ecafe9\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6743495172\" title=\"FocusCursor for macOS\"\u003e\u003cimg align=\"center\" alt=\"FocusCursor\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/d543668a-737b-4853-a6bb-eaa269e69836\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6742680573\" title=\"Videoer for macOS\"\u003e\u003cimg align=\"center\" alt=\"Videoer\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/10ffb0f1-0625-40d6-93f1-2c2496592595\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6740425504\" title=\"KeyClicker for macOS\"\u003e\u003cimg align=\"center\" alt=\"KeyClicker\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/5a19fcb9-cb81-4855-b4ea-31c604d9612a\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6739052447\" title=\"DayBar for macOS\"\u003e\u003cimg align=\"center\" alt=\"DayBar\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/771b608d-594c-492d-8532-d9231e383f5b\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6739444407\" title=\"Iconed for macOS\"\u003e\u003cimg align=\"center\" alt=\"Iconed\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/8a35dc7b-4faf-4e2a-9311-f66d6844a896\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6737160756\" title=\"RightMenu Master for macOS\"\u003e\u003cimg align=\"center\" alt=\"RightMenu Master\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/39a76541-71bf-4de7-a01c-c62f0557dff5\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6723903021\" title=\"Paste Quick for macOS\"\u003e\u003cimg align=\"center\" alt=\"Quick RSS\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/bdaad5b7-9810-44ce-8f17-8410864465d2\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6670696072\" title=\"Quick RSS for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"Quick RSS\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/374106b5-a448-4d1d-9ccb-b04b6bc681ed\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6670167443\" title=\"Web Serve for macOS\"\u003e\u003cimg align=\"center\" alt=\"Web Serve\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/e1d9f76f-0f3d-4ba5-8a15-253ee173bb1c\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6503953628\" title=\"Copybook Generator for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"Copybook Generator\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/b90e42ff-158b-4534-82ca-5898fd0e8d73\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6471227008\" title=\"DevTutor for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"DevTutor for SwiftUI\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/f15c154d-0192-48eb-8e0e-9e245ffd974a\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6479819388\" title=\"RegexMate for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"RegexMate\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/aabe5aa9-9a96-4390-8bed-c3e4023d0dea\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6479194014\" title=\"Time Passage for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"Time Passage\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/time-passage/assets/1680273/6f30e429-e6f3-4dbe-9921-a5effe2a05e9\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6478772538\" title=\"IconizeFolder for macOS\"\u003e\u003cimg align=\"center\" alt=\"Iconize Folder\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/fa9d8b9c-1e51-4ded-877c-fa5b21c47220\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6478511402\" title=\"Textsound Saver for macOS/iOS\"\u003e\u003cimg align=\"center\" alt=\"Textsound Saver\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/0595e842-980b-4574-8891-a8ba853a08be\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6476924627\" title=\"Create Custom Symbols for macOS\"\u003e\u003cimg align=\"center\" alt=\"Create Custom Symbols\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/8cd022ce-a3f1-4e89-b7c6-6fbd0d4db77c\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6476452351\" title=\"DevHub for macOS\"\u003e\u003cimg align=\"center\" alt=\"DevHub\" height=\"52\" width=\"52\" src=\"https://github.com/user-attachments/assets/4a44a4fd-67ce-430b-af0a-72f18feaa47d\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6476400184\" title=\"Resume Revise for macOS\"\u003e\u003cimg align=\"center\" alt=\"Resume Revise\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/c9954a20-1905-48de-bdf8-d71837974aa2\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6472593276\" title=\"Palette Genius for macOS\"\u003e\u003cimg align=\"center\" alt=\"Palette Genius\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/27340413-d355-45b2-8f6f-6ac37682d957\"\u003e\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://apps.apple.com/app/6470879005\" title=\"Symbol Scribe for macOS\"\u003e\u003cimg align=\"center\" alt=\"Symbol Scribe\" height=\"52\" width=\"52\" src=\"https://github.com/jaywcjlove/jaywcjlove/assets/1680273/c7249f05-fa70-4def-a1e9-571d5f171fc9\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\nPrettier\n===\n\nA Swift code formatting library based on JavaScriptCore and [Prettier](https://github.com/prettier/prettier).\n\n## Features\n\n- 🚀 Support for multiple language formatting: JavaScript, TypeScript, CSS, JSON, HTML\n- 🎛️ Fully configurable formatting options\n- 📦 Built-in Prettier bundle, no external dependencies required\n- 🔧 Based on JavaScriptCore, excellent performance\n- 🎯 Clean Swift API\n\n## Installation\n\n### Swift Package Manager\n\nAdd CodeMirror to your project using Xcode:\n\n1. In Xcode, go to `File` → `Add Package Dependencies...`\n2. Enter the repository URL: `https://github.com/jaywcjlove/Prettier.git`\n3. Click `Add Package`\n\nOr add it to your `Package.swift` file:\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/jaywcjlove/Prettier.git\", from: \"1.0.0\")\n]\n```\n\n## Quick Start\n\n```swift\nimport Prettier\n\n// 1. Create a formatter instance\nlet formatter = try PrettierFormatter()\n\n// 2. Format code\nlet uglifiedJS = \"const user={name:'John',age:30};function greet(){console.log('Hello '+user.name);}\"\nlet beautifiedJS = try formatter.format(uglifiedJS, parser: .babel)\n\nprint(beautifiedJS)\n// Output:\n// const user = { name: \"John\", age: 30 };\n// function greet() {\n//   console.log(\"Hello \" + user.name);\n// }\n```\n\n## Usage\n\n### Basic Usage\n\n```swift\nimport Prettier\n\n// Create a PrettierFormatter instance\nlet formatter = try PrettierFormatter()\n\n// Format JavaScript code\nlet jsCode = \"const x={a:1,b:2};\"\nlet formatted = try formatter.format(jsCode, parser: .babel)\nprint(formatted)\n// Output:\n// const x = { a: 1, b: 2 };\n```\n\n### Formatting Different Types of Code\n\n#### JavaScript/TypeScript\n\n```swift\n// JavaScript (using babel parser)\nlet jsFormatted = try formatter.format(\"const x={a:1,b:2};\", parser: .babel)\n\n// TypeScript\nlet tsCode = \"interface User{name:string;age:number;}\"\nlet tsFormatted = try formatter.format(tsCode, parser: .typescript)\n\n// Flow\nlet flowCode = \"// @flow\\ntype User = {name: string, age: number};\"\nlet flowFormatted = try formatter.format(flowCode, parser: .flow)\n```\n\n#### CSS/SCSS/Less\n\n```swift\n// CSS\nlet cssCode = \"body{margin:0;padding:0;font-family:Arial,sans-serif;}\"\nlet cssFormatted = try formatter.format(cssCode, parser: .css)\n\n// SCSS\nlet scssCode = \"$primary: #333; body { color: $primary; }\"\nlet scssFormatted = try formatter.format(scssCode, parser: .scss)\n\n// Less\nlet lessCode = \"@primary: #333; body { color: @primary; }\"\nlet lessFormatted = try formatter.format(lessCode, parser: .less)\n```\n\n#### JSON\n\n```swift\nlet jsonCode = #\"{\"name\":\"John\",\"age\":30}\"#\nlet jsonFormatted = try formatter.format(jsonCode, parser: .json)\n\n// JSON5\nlet json5Code = \"{name:'John',age:30,}\"\nlet json5Formatted = try formatter.format(json5Code, parser: .json5)\n```\n\n#### HTML/Vue/Angular\n\n```swift\n// HTML\nlet htmlCode = \"\u003cdiv\u003e\u003cp\u003eHello World\u003c/p\u003e\u003c/div\u003e\"\nlet htmlFormatted = try formatter.format(htmlCode, parser: .html)\n\n// Vue\nlet vueCode = \"\u003ctemplate\u003e\u003cdiv\u003e{{ message }}\u003c/div\u003e\u003c/template\u003e\"\nlet vueFormatted = try formatter.format(vueCode, parser: .vue)\n\n// Angular\nlet angularCode = \"\u003cdiv *ngFor=\\\"let item of items\\\"\u003e{{ item }}\u003c/div\u003e\"\nlet angularFormatted = try formatter.format(angularCode, parser: .angular)\n```\n\n#### Markdown/GraphQL/YAML\n\n```swift\n// Markdown\nlet markdownCode = \"# Title\\n\\nSome **bold** text.\"\nlet markdownFormatted = try formatter.format(markdownCode, parser: .markdown)\n\n// GraphQL\nlet graphqlCode = \"query{user{name age}}\"\nlet graphqlFormatted = try formatter.format(graphqlCode, parser: .graphql)\n\n// YAML\nlet yamlCode = \"name: John\\nage: 30\\naddress:\\n  city: NYC\"\nlet yamlFormatted = try formatter.format(yamlCode, parser: .yaml)\n```\n\n### Custom Formatting Options\n\n```swift\nlet options = PrettierOptions(\n    printWidth: 100,\n    tabWidth: 4,\n    useTabs: false,\n    semi: false,\n    singleQuote: true,\n    quoteProps: .asNeeded,\n    jsxSingleQuote: false,\n    trailingComma: .none,\n    bracketSpacing: true,\n    bracketSameLine: false,\n    arrowParens: .avoid,\n    endOfLine: .lf,\n    rangeStart: 0,\n    rangeEnd: Int.max,\n    requirePragma: false,\n    insertPragma: false,\n    proseWrap: .preserve,\n    htmlWhitespaceSensitivity: .css,\n    vueIndentScriptAndStyle: false,\n    singleAttributePerLine: false,\n    embeddedLanguageFormatting: .auto\n)\n\nlet formatted = try formatter.format(code, parser: .babel, options: options)\n```\n\n### Supported Parsers\n\n```swift\n// JavaScript related\n.babel           // JavaScript (ES6+)\n.babelFlow       // JavaScript with Flow types\n.babelTs         // TypeScript via Babel\n.flow            // Flow\n.typescript      // TypeScript\n.acorn           // JavaScript (Acorn parser)\n.espree          // JavaScript (ESTree parser)\n.meriyah         // JavaScript (Meriyah parser)\n\n// Stylesheets\n.css             // CSS\n.less            // Less\n.scss            // SCSS/Sass\n\n// Data formats\n.json            // JSON\n.json5           // JSON5\n.jsonStringify   // JSON (stringify format)\n.yaml            // YAML\n\n// Markup languages\n.html            // HTML\n.vue             // Vue SFC\n.angular         // Angular templates\n.lwc             // Lightning Web Components\n.markdown        // Markdown\n.mdx             // MDX\n\n// Others\n.graphql         // GraphQL\n.glimmer         // Glimmer templates\n```\n\n### Formatting Options\n\n- `printWidth`: Maximum characters per line (default: 80)\n- `tabWidth`: Tab width (default: 2)\n- `useTabs`: Whether to use tabs instead of spaces (default: false)\n- `semi`: Whether to add semicolons (default: true)\n- `singleQuote`: Whether to use single quotes (default: false)\n- `quoteProps`: Object property quote strategy (.asNeeded, .consistent, .preserve)\n- `jsxSingleQuote`: Whether to use single quotes in JSX (default: false)\n- `trailingComma`: Trailing comma strategy (.none, .es5, .all)\n- `bracketSpacing`: Whether to add spaces inside object literal brackets (default: true)\n- `bracketSameLine`: Whether to put the \u003e of multi-line JSX elements at the end of the last line (default: false)\n- `arrowParens`: Arrow function parentheses strategy (.always, .avoid)\n- `endOfLine`: Line ending character (.auto, .lf, .crlf, .cr)\n- `rangeStart/rangeEnd`: Formatting range (default: entire file)\n- `requirePragma`: Whether to require a format comment at the top of the file (default: false)\n- `insertPragma`: Whether to insert a format comment (default: false)\n- `proseWrap`: Text wrapping strategy (.always, .never, .preserve)\n- `htmlWhitespaceSensitivity`: HTML whitespace sensitivity (.css, .strict, .ignore)\n- `vueIndentScriptAndStyle`: Whether to indent script and style tags in Vue files (default: false)\n- `singleAttributePerLine`: Whether to put only one HTML attribute per line (default: false)\n- `embeddedLanguageFormatting`: Embedded language formatting (.auto, .off)\n\n## Error Handling\n\n```swift\ndo {\n    let formatter = try PrettierFormatter()\n    let formatted = try formatter.format(code, parser: .babel)\n    print(formatted)\n} catch PrettierError.resourceNotFound {\n    print(\"prettier.bundle.min.js resource file not found\")\n} catch PrettierError.jsContextInitializationFailed {\n    print(\"JavaScript context initialization failed\")\n} catch PrettierError.prettierObjectNotFound {\n    print(\"Prettier object not found in JavaScript context\")\n} catch PrettierError.formattingFailed(let message) {\n    print(\"Formatting failed: \\(message)\")\n} catch {\n    print(\"Other error: \\(error)\")\n}\n```\n\n## Error Types\n\n- `PrettierError.resourceNotFound`: prettier.bundle.min.js resource file not found\n- `PrettierError.jsContextInitializationFailed`: JavaScript context initialization failed\n- `PrettierError.prettierObjectNotFound`: Prettier object not found in JavaScript context\n- `PrettierError.formattingFailed(String)`: Formatting failed with detailed error message\n\n## Development\n\n```bash\n# Build Prettier JS bundle\ncd scripts \u0026\u0026 npm start\n# Run tests\nswift test\n```\n\n## License\n\nLicensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaywcjlove%2Fprettier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaywcjlove%2Fprettier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaywcjlove%2Fprettier/lists"}