From e38636fc578334670ecc2288a85ee96a6233156d Mon Sep 17 00:00:00 2001 From: "Marcus R. Brown" Date: Tue, 19 Mar 2024 01:57:20 -0700 Subject: [PATCH] feat: add `prettier-config` (#154) --- .changeset/sweet-hairs-prove.md | 5 ++ .editorconfig | 1 + .prettierrc.yaml | 12 +--- package.json | 1 + packages/prettier-config/package.json | 50 ++++++++++++++ packages/prettier-config/prettier.config.d.ts | 6 ++ packages/prettier-config/prettier.config.js | 59 +++++++++++++++++ packages/prettier-config/prettier.config.ts | 65 +++++++++++++++++++ packages/prettier-config/readme.md | 35 ++++++++++ packages/prettier-config/tsconfig.json | 11 ++++ pnpm-lock.yaml | 13 +++- 11 files changed, 246 insertions(+), 12 deletions(-) create mode 100644 .changeset/sweet-hairs-prove.md create mode 100644 packages/prettier-config/package.json create mode 100644 packages/prettier-config/prettier.config.d.ts create mode 100644 packages/prettier-config/prettier.config.js create mode 100644 packages/prettier-config/prettier.config.ts create mode 100644 packages/prettier-config/readme.md create mode 100644 packages/prettier-config/tsconfig.json diff --git a/.changeset/sweet-hairs-prove.md b/.changeset/sweet-hairs-prove.md new file mode 100644 index 0000000..2a47f6e --- /dev/null +++ b/.changeset/sweet-hairs-prove.md @@ -0,0 +1,5 @@ +--- +"@bfra.me/prettier-config": minor +--- + +Add the `prettier-config` shareable Prettier configuration. diff --git a/.editorconfig b/.editorconfig index 2a2bcee..0221817 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,4 +7,5 @@ root = true charset = utf-8 end_of_line = lf insert_final_newline = true +max_line_length = 100 trim_trailing_whitespace = true diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 5e6392d..2ad8293 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -1,11 +1 @@ -arrowParens: avoid -bracketSpacing: false -overrides: - - files: - - '.vscode/*.json' - options: - tabWidth: 4 -singleQuote: true -semi: false -printWidth: 100 -tabWidth: 2 +'@bfra.me/prettier-config' diff --git a/package.json b/package.json index fe59464..099aebb 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ } }, "dependencies": { + "@bfra.me/prettier-config": "workspace:*", "@bfra.me/tsconfig": "workspace:*", "@changesets/cli": "2.27.1", "@manypkg/cli": "0.21.3", diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json new file mode 100644 index 0000000..1316dad --- /dev/null +++ b/packages/prettier-config/package.json @@ -0,0 +1,50 @@ +{ + "name": "@bfra.me/prettier-config", + "description": "Shared Prettier configuration for bfra.me", + "version": "0.0.0", + "author": "Marcus R. Brown ", + "license": "MIT", + "type": "module", + "main": "prettier.config.js", + "types": "prettier.config.d.ts", + "homepage": "https://github.com/bfra-me/works/tree/main/packages/prettier-config#readme", + "repository": { + "directory": "packages/prettier-config", + "type": "git", + "url": "https://github.com/bfra-me/works.git" + }, + "bugs": "https://github.com/bfra-me/works/issues", + "keywords": [ + "bfra.me", + "works", + "prettier", + "prettier-config", + "config", + "shared" + ], + "publishConfig": { + "access": "public", + "provenance": true + }, + "files": [ + "prettier.config.*", + "!*.map" + ], + "exports": { + ".": { + "import": "./prettier.config.js", + "types": "./prettier.config.d.ts" + }, + "./package.json": "./package.json" + }, + "devDependencies": { + "@bfra.me/tsconfig": "workspace:*", + "prettier": "3.2.5" + }, + "peerDependencies": { + "prettier": "^3.0.0" + }, + "scripts": { + "build": "tsc && prettier --log-level silent --write prettier.config.*" + } +} diff --git a/packages/prettier-config/prettier.config.d.ts b/packages/prettier-config/prettier.config.d.ts new file mode 100644 index 0000000..819efe3 --- /dev/null +++ b/packages/prettier-config/prettier.config.d.ts @@ -0,0 +1,6 @@ +import type {Config} from 'prettier' +/** + * Shared Prettier configuration for bfra.me projects. + */ +declare const config: Config +export default config diff --git a/packages/prettier-config/prettier.config.js b/packages/prettier-config/prettier.config.js new file mode 100644 index 0000000..a8916ec --- /dev/null +++ b/packages/prettier-config/prettier.config.js @@ -0,0 +1,59 @@ +/** + * Shared Prettier configuration for bfra.me projects. + */ +const config = { + arrowParens: 'avoid', + bracketSpacing: false, + endOfLine: 'auto', + printWidth: 100, + semi: false, + singleQuote: true, + overrides: [ + // VS Code configuration files: + // Use 4 spaces for indentation to match the default VS Code settings. + { + files: ['.vscode/*.json'], + options: { + tabWidth: 4, + }, + }, + // Markdown: + // - Disable single quotes for Markdown files. + // - Disable `proseWrap` to avoid wrapping prose. + { + files: ['*.md'], + options: { + proseWrap: 'never', + singleQuote: false, + }, + }, + // Adapted from https://github.com/sxzz/prettier-config/blob/1e5cc3021e5816aceebe0b90af1d530239442ecf/index.js. + // Require a pragma for paths typically not under version control or written by build tools. + { + files: [ + '**/node_modules/**', + '**/dist/**', + '**/lib/**', + '**/coverage/**', + '**/out/**', + '**/.changeset/**', + '**/.idea/**', + '**/.nuxt/**', + '**/.vercel/**', + '**/.vitepress/cache/**', + '**/.vite-inspect/**', + '**/__snapshots__/**', + '**/CHANGELOG*.md', + '**/changelog*.md', + '**/LICENSE*', + '**/license*', + '**/*.min.*', + ], + options: { + requirePragma: true, + }, + }, + ], +} +export default config +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZXIuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJldHRpZXIuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxNQUFNLEdBQVc7SUFDckIsV0FBVyxFQUFFLE9BQU87SUFDcEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsU0FBUyxFQUFFLE1BQU07SUFDakIsVUFBVSxFQUFFLEdBQUc7SUFDZixJQUFJLEVBQUUsS0FBSztJQUNYLFdBQVcsRUFBRSxJQUFJO0lBRWpCLFNBQVMsRUFBRTtRQUNULCtCQUErQjtRQUMvQixzRUFBc0U7UUFDdEU7WUFDRSxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLENBQUM7YUFDWjtTQUNGO1FBRUQsWUFBWTtRQUNaLDhDQUE4QztRQUM5QyxpREFBaUQ7UUFDakQ7WUFDRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDZixPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFdBQVcsRUFBRSxLQUFLO2FBQ25CO1NBQ0Y7UUFFRCwrR0FBK0c7UUFDL0csNEZBQTRGO1FBQzVGO1lBQ0UsS0FBSyxFQUFFO2dCQUNMLG9CQUFvQjtnQkFDcEIsWUFBWTtnQkFDWixXQUFXO2dCQUNYLGdCQUFnQjtnQkFDaEIsV0FBVztnQkFDWCxrQkFBa0I7Z0JBQ2xCLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixlQUFlO2dCQUNmLHdCQUF3QjtnQkFDeEIscUJBQXFCO2dCQUNyQixxQkFBcUI7Z0JBRXJCLGtCQUFrQjtnQkFDbEIsa0JBQWtCO2dCQUNsQixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsWUFBWTthQUNiO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxJQUFJO2FBQ3BCO1NBQ0Y7S0FDRjtDQUNGLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQSJ9 diff --git a/packages/prettier-config/prettier.config.ts b/packages/prettier-config/prettier.config.ts new file mode 100644 index 0000000..7dc12a1 --- /dev/null +++ b/packages/prettier-config/prettier.config.ts @@ -0,0 +1,65 @@ +import type {Config} from 'prettier' + +/** + * Shared Prettier configuration for bfra.me projects. + */ +const config: Config = { + arrowParens: 'avoid', + bracketSpacing: false, + endOfLine: 'auto', + printWidth: 100, + semi: false, + singleQuote: true, + + overrides: [ + // VS Code configuration files: + // Use 4 spaces for indentation to match the default VS Code settings. + { + files: ['.vscode/*.json'], + options: { + tabWidth: 4, + }, + }, + + // Markdown: + // - Disable single quotes for Markdown files. + // - Disable `proseWrap` to avoid wrapping prose. + { + files: ['*.md'], + options: { + proseWrap: 'never', + singleQuote: false, + }, + }, + + // Adapted from https://github.com/sxzz/prettier-config/blob/1e5cc3021e5816aceebe0b90af1d530239442ecf/index.js. + // Require a pragma for paths typically not under version control or written by build tools. + { + files: [ + '**/node_modules/**', + '**/dist/**', + '**/lib/**', + '**/coverage/**', + '**/out/**', + '**/.changeset/**', + '**/.idea/**', + '**/.nuxt/**', + '**/.vercel/**', + '**/.vitepress/cache/**', + '**/.vite-inspect/**', + '**/__snapshots__/**', + + '**/CHANGELOG*.md', + '**/changelog*.md', + '**/LICENSE*', + '**/license*', + '**/*.min.*', + ], + options: { + requirePragma: true, + }, + }, + ], +} + +export default config diff --git a/packages/prettier-config/readme.md b/packages/prettier-config/readme.md new file mode 100644 index 0000000..1db72b2 --- /dev/null +++ b/packages/prettier-config/readme.md @@ -0,0 +1,35 @@ +# @bfra.me/prettier-config + +> Shared Prettier configuration for bfra.me. + +## Install + +### NPM + +```sh +npm install --save-dev @bfra.me/prettier-config prettier +``` + +### PNPM + +```sh +pnpm add --save-dev @bfra.me/prettier-config prettier +``` + +### Yarn + +```sh +yarn add --dev @bfra.me/prettier-config prettier +``` + +## Usage + +Add the following entry to your `package.json` file: + +```json +"prettier": "@bfra.me/prettier-config" +``` + +## License + +[MIT](../../LICENSE.md) diff --git a/packages/prettier-config/tsconfig.json b/packages/prettier-config/tsconfig.json new file mode 100644 index 0000000..88a919b --- /dev/null +++ b/packages/prettier-config/tsconfig.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "@bfra.me/tsconfig", + "compilerOptions": { + "inlineSourceMap": true, + "sourceMap": false, + "outDir": ".", + "rootDir": "." + }, + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac7d13f..36aac2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: .: dependencies: + '@bfra.me/prettier-config': + specifier: workspace:* + version: link:packages/prettier-config '@bfra.me/tsconfig': specifier: workspace:* version: link:packages/tsconfig @@ -42,6 +45,15 @@ importers: specifier: 5.4.2 version: 5.4.2 + packages/prettier-config: + devDependencies: + '@bfra.me/tsconfig': + specifier: workspace:* + version: link:../tsconfig + prettier: + specifier: 3.2.5 + version: 3.2.5 + packages/tsconfig: devDependencies: '@bfra.me/tsconfig': @@ -2298,7 +2310,6 @@ packages: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true - dev: false /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}