@kitschpatrol/prettier-config 6.0.2 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{cosmiconfig as e}from"cosmiconfig";import{TypeScriptLoader as t}from"cosmiconfig-typescript-loader";import{execa as n}from"execa";import r from"fs-extra";import i from"node:fs";import a from"node:path";import{PassThrough as o,Transform as s}from"node:stream";import{fileURLToPath as c}from"node:url";import{packageUp as l,packageUpSync as u}from"package-up";import d from"picocolors";import f from"yargs";import{hideBin as p}from"yargs/helpers";import m from"@pinojs/json-colorizer";import h from"decircular";import g from"deepmerge";import _ from"json-stringify-pretty-compact";import{findWorkspacesRoot as v}from"find-workspaces";import y from"node:fs/promises";var b=`6.0.2`;function x(e){return e instanceof Error&&`exitCode`in e&&typeof e.exitCode==`number`}function S(e){return m(_(h(e),{indent:2,replacer(e,t){return typeof t==`function`?t.name:t}}),{colors:{BRACKET:`gray`}})}const C=(e,t,n)=>{let r=[...e];for(let[i,a]of t.entries())r[i]===void 0?r[i]=n.cloneUnlessOtherwiseSpecified(a,n):n.isMergeableObject(a)?r[i]=w(e[i],a,n):e.includes(a)||r.push(a);return r};function w(e,t,n={arrayMerge:C}){return g(e,t,n)}function T(){let e=u();if(e===void 0)throw Error(`No package.json found.`);return a.dirname(e)}function E(){let e=v();return e===null?T():e.location}function D(e){let t=a.join(E(),e);if(r.existsSync(t))return t}function O(e){if(e===`workspace-root`)return E();if(e===`package-dir`)return T();if(typeof e==`string`){if(!r.pathExistsSync(e))throw Error(`Custom cwd directory does not exist: ${e}`);return e}return process.cwd()}async function k(e,t){try{let{default:n}=await import(`prettier`),r=await n.resolveConfig(e),i=await n.format(t,{filepath:e,...r});await y.writeFile(e,i,`utf8`)}catch{console.warn(`Skipped formatting ${e} since Prettier is not installed.`)}}async function A(e){try{await k(e,await y.readFile(e,`utf8`))}catch{}}function j(e,t){return new s({transform(n,r,i){let a=n.toString().split(/\r?\n/).filter(e=>e.trim().length>0).map(n=>`${e?t===void 0?e:d[t](e):``} ${n}\n`).join(``);this.push(a),i()}})}async function M(e){let t=[];return new Promise((n,r)=>{e.on(`data`,e=>t.push(e)),e.on(`error`,e=>{r(e)}),e.on(`end`,()=>{n(Buffer.concat(t).toString(`utf8`))})})}function N(e,t){return t===1?e:e+`s`}async function P(e,t,n,r,i){let a=1,o;if(r.logPrefix===void 0)o=e;else{let t=j(r.logPrefix,r.logColor);t.pipe(e),o=t}i&&o.write(d.bold(`Running: "${r.name}() with Positional arguments: ${String(t)} and Option flags: ${String(n)}"`));try{a=await r.execute(o,t,n)}catch(e){console.error(String(e)),a=1}return a}async function F(e,t,r,i,a){let s=1,c;if(i.logPrefix===void 0)c=e;else{let t=j(i.logPrefix,i.logColor);t.pipe(e),c=t}let l=i.subcommands??[],u=[...i.receivePositionalArguments?t:[],...i.positionalArguments??[]],d=[...i.receiveOptionFlags?r:[],...i.optionFlags??[]],f=[...l,...d,...u],p=O(i.cwdOverride);a&&c.write(`Running: "${i.name} ${f.join(` `)}"`);let m=i.prettyJsonOutput?new o:c;try{let e=n(i.name,f,{cwd:p,env:{...process.env.NO_COLOR===void 0?{FORCE_COLOR:`true`}:{}},preferLocal:!0,reject:!1,stdin:`inherit`});if(e.stdout.pipe(m,{end:!1}),e.stderr.pipe(m,{end:!1}),await e,i.prettyJsonOutput){m.end();let e=await M(m),t=S(JSON.parse(e)).split(`
2
+ import{cosmiconfig as e}from"cosmiconfig";import{TypeScriptLoader as t}from"cosmiconfig-typescript-loader";import{execa as n}from"execa";import r from"fs-extra";import i from"node:fs";import a from"node:path";import{PassThrough as o,Transform as s}from"node:stream";import{fileURLToPath as c}from"node:url";import{packageUp as l,packageUpSync as u}from"package-up";import d from"picocolors";import f from"yargs";import{hideBin as p}from"yargs/helpers";import m from"@pinojs/json-colorizer";import h from"decircular";import g from"deepmerge";import _ from"json-stringify-pretty-compact";import{findWorkspacesRoot as v}from"find-workspaces";import y from"node:fs/promises";var b=`6.1.0`;function x(e){return e instanceof Error&&`exitCode`in e&&typeof e.exitCode==`number`}function S(e){return m(_(h(e),{indent:2,replacer(e,t){return typeof t==`function`?t.name:t}}),{colors:{BRACKET:`gray`}})}const C=(e,t,n)=>{let r=[...e];for(let[i,a]of t.entries())r[i]===void 0?r[i]=n.cloneUnlessOtherwiseSpecified(a,n):n.isMergeableObject(a)?r[i]=w(e[i],a,n):e.includes(a)||r.push(a);return r};function w(e,t,n={arrayMerge:C}){return g(e,t,n)}function T(){let e=u();if(e===void 0)throw Error(`No package.json found.`);return a.dirname(e)}function E(){let e=v();return e===null?T():e.location}function D(e){let t=a.join(E(),e);if(r.existsSync(t))return t}function O(e){if(e===`workspace-root`)return E();if(e===`package-dir`)return T();if(typeof e==`string`){if(!r.pathExistsSync(e))throw Error(`Custom cwd directory does not exist: ${e}`);return e}return process.cwd()}async function k(e,t){try{let{default:n}=await import(`prettier`),r=await n.resolveConfig(e),i=await n.format(t,{filepath:e,...r});await y.writeFile(e,i,`utf8`)}catch{console.warn(`Skipped formatting ${e} since Prettier is not installed.`)}}async function A(e){try{await k(e,await y.readFile(e,`utf8`))}catch{}}function j(e,t){return new s({transform(n,r,i){let a=n.toString().split(/\r?\n/).filter(e=>e.trim().length>0).map(n=>`${e?t===void 0?e:d[t](e):``} ${n}\n`).join(``);this.push(a),i()}})}async function M(e){let t=[];return new Promise((n,r)=>{e.on(`data`,e=>t.push(e)),e.on(`error`,e=>{r(e)}),e.on(`end`,()=>{n(Buffer.concat(t).toString(`utf8`))})})}function N(e,t){return t===1?e:e+`s`}async function P(e,t,n,r,i){let a=1,o;if(r.logPrefix===void 0)o=e;else{let t=j(r.logPrefix,r.logColor);t.pipe(e),o=t}i&&o.write(d.bold(`Running: "${r.name}() with Positional arguments: ${String(t)} and Option flags: ${String(n)}"`));try{a=await r.execute(o,t,n)}catch(e){console.error(String(e)),a=1}return a}async function F(e,t,r,i,a){let s=1,c;if(i.logPrefix===void 0)c=e;else{let t=j(i.logPrefix,i.logColor);t.pipe(e),c=t}let l=i.subcommands??[],u=[...i.receivePositionalArguments?t:[],...i.positionalArguments??[]],d=[...i.receiveOptionFlags?r:[],...i.optionFlags??[]],f=[...l,...d,...u],p=O(i.cwdOverride);a&&c.write(`Running: "${i.name} ${f.join(` `)}"`);let m=i.prettyJsonOutput?new o:c;try{let e=n(i.name,f,{cwd:p,env:{...process.env.NO_COLOR===void 0?{FORCE_COLOR:`true`}:{}},preferLocal:!0,reject:!1,stdin:`inherit`});if(e.stdout.pipe(m,{end:!1}),e.stderr.pipe(m,{end:!1}),await e,i.prettyJsonOutput){m.end();let e=await M(m),t=S(JSON.parse(e)).split(`
3
3
  `);for(let e of t)c.write(`${e}\n`)}s=e.exitCode??1}catch(e){console.error(`${i.name} failed with error:`),console.error(e),x(e)&&(s=typeof e.exitCode==`number`?e.exitCode:1)}return s}function I(e){return`execute`in e}async function L(e,t,n,r,i,a){let o=[];for(let a of r){let r=await(I(a)?P(e,t,n,a,i):F(e,t,n,a,i));o.push({exitCode:r,name:a.name})}if(a){let t=o.filter(({exitCode:e})=>e===0).map(({name:e})=>e),n=o.filter(({exitCode:e})=>e!==0).map(({name:e})=>e),r=o.length;t.length>0&&e.write(`✅ ${d.green(d.bold(`${t.length} / ${r} ${N(`Command`,t.length)} Succeeded:`))} ${d.green(t.join(`, `))}\n`),n.length>0&&e.write(`❌ ${d.red(d.bold(`${n.length} / ${r} ${N(`Command`,n.length)} Failed:`))} ${d.red(n.join(`, `))}\n`)}return o.every(({exitCode:e})=>e===0)?0:1}async function R(e,t,n,o){let s=await l();if(s===void 0)throw Error("The `init` command must be used in a directory with a package.json file");let u=await l({cwd:c(import.meta.url)});if(u===void 0)return e.write(`Error: The script being called was not in a package, weird.
4
4
  `),1;let d=a.join(a.dirname(u),`init`),f=a.dirname(s),p=(t===`file`||t===`package`)&&n!==void 0&&o!==void 0;try{if(p){let n=Object.keys(o)[0];if(t===`package`){let t=r.readJsonSync(s);e.write(`Merging: \nPackage config key "${n}" → "${f}" (Because --location is set to "package")\n`);let i=w(t,o);r.writeJSONSync(s,i,{spaces:` `}),await A(s)}else{let t=r.readJsonSync(s);Object.keys(t).includes(n)&&(e.write(`Deleting: \nPackage config key "${n}" in "${f}" (Because --location is set to "file")\n`),delete t[n],r.writeJSONSync(s,t,{spaces:` `}),await A(s))}}if(!await r.pathExists(d))return 0;if((await r.readdir(d)).length===0)return e.write(`Source directory "${d}" is empty.\n`),0;e.write(`Adding initial configuration files from:\n"${d}" → "${f}"\n`),await r.copy(d,f,{async filter(o,s){let c=i.statSync(o).isFile(),l=i.existsSync(s);if(c){if(p&&t===`package`&&o.includes(n))return l?(e.write(`Deleting: \n"${o}" → "${s}" (Because --location is set to "package")\n`),r.removeSync(s)):e.write(`Skipping: \n"${o}" → "${s}" (Because --location is set to "package")\n`),!1;if(l&&(s.includes(`.vscode/`)||s.includes(`package.json`))&&a.extname(s)===`.json`){e.write(`Merging: \n"${o}" → "${s}"\n`);let t=r.readJSONSync(o),n=w(r.readJSONSync(s),t);return r.writeJSONSync(s,n,{spaces:` `}),await A(s),!1}return l?(e.write(`Overwriting: \n"${o}" → "${s}"\n`),await A(s),!0):(e.write(`Copying: \n"${o}" → "${s}"\n`),await A(s),!0)}return!0},overwrite:!0})}catch(e){return console.error(String(e)),1}return 0}async function z(e){let{commands:{fix:t,init:n,lint:r,printConfig:i},description:a,logColor:o,logPrefix:s,name:c,showSummary:l,verbose:u}=e,d=j(s,o);d.pipe(process.stdout);let m=f(p(process.argv)).scriptName(c).usage(`$0 <command>`,a);n!==void 0&&m.command({builder(e){return n.locationOptionFlag?e.option(`location`,{choices:[`file`,`package`],default:`file`,describe:`TK`,type:`string`}):e},command:`init`,describe:n.description??`Initialize by copying starter config files to your project root${n.locationOptionFlag?` or to your package.json file.`:`.`}`,async handler(e){let t=n.locationOptionFlag?e.location:void 0,r=await L(d,[],t===void 0?[]:[`--location`,t],[{async execute(e,t,r){return R(e,r.at(1),n.configFile,n.configPackageJson)},name:`copyAndMergeInitFiles`},...n.commands??[]]);process.exit(r)}}),r!==void 0&&m.command({builder(e){return r.positionalArgumentMode===`none`?e:e.positional(`files`,{array:!0,...r.positionalArgumentDefault===void 0?{}:{default:r.positionalArgumentDefault},describe:`Files or glob pattern to lint.`,type:`string`})},command:r.positionalArgumentMode===`none`?`lint`:r.positionalArgumentMode===`optional`?`lint [files..]`:`lint <files..>`,describe:r.description,async handler(e){let t=await L(d,e.files??[],[],r.commands,u,l);process.exit(t)}}),t!==void 0&&m.command({builder(e){return t.positionalArgumentMode===`none`?e:e.positional(`files`,{array:!0,...t.positionalArgumentDefault===void 0?{}:{default:t.positionalArgumentDefault},describe:`Files or glob pattern to fix.`,type:`string`})},command:t.positionalArgumentMode===`none`?`fix`:t.positionalArgumentMode===`optional`?`fix [files..]`:`fix <files..>`,describe:t.description,async handler(e){let n=await L(d,e.files??[],[],t.commands);process.exit(n)}}),i!==void 0&&m.command({builder(e){return i.positionalArgumentMode===`none`?e:e.positional(`file`,{...i.positionalArgumentDefault===void 0?{}:{default:i.positionalArgumentDefault},describe:`File or glob pattern to TK.`,type:`string`})},command:i.positionalArgumentMode===`none`?`print-config`:i.positionalArgumentMode===`optional`?`print-config [file]`:`print-config <file>`,describe:i.description,async handler(e){let t=e.file??void 0,n=await L(d,t===void 0?[]:[t],[],i.commands,u,l);process.exit(n)}}),m.alias(`h`,`help`),m.version(b),m.alias(`v`,`version`),m.help(),m.wrap(process.stdout.isTTY?Math.min(120,m.terminalWidth()):0),await m.parseAsync()}function B(e){return{async execute(t){let n=await V(e);if(n===void 0)return 1;let{config:r,filepath:i,isEmpty:a}=n;if(t.write(`Found ${e} configuration at "${i}"\n`),a)return t.write(`Configuration is empty.
5
5
  `),0;let o=S(r).split(`
@@ -2,7 +2,8 @@
2
2
  # Also respects .gitignore
3
3
 
4
4
  # @kitschpatrol/prettier-config boilerplate
5
- pnpm-lock.yaml
6
5
  package-lock.json
6
+ pnpm-lock.yaml
7
+ skills-lock.json
7
8
 
8
9
  # Customizations
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitschpatrol/prettier-config",
3
- "version": "6.0.2",
3
+ "version": "6.1.0",
4
4
  "description": "Prettier configuration for @kitschpatrol/shared-config.",
5
5
  "keywords": [
6
6
  "shared-config",
@@ -46,22 +46,22 @@
46
46
  "@prettier/plugin-php": "^0.24.0",
47
47
  "@prettier/plugin-ruby": "^4.0.4",
48
48
  "@prettier/plugin-xml": "^3.4.2",
49
- "cosmiconfig": "^9.0.0",
49
+ "cosmiconfig": "^9.0.1",
50
50
  "cosmiconfig-typescript-loader": "^6.2.0",
51
51
  "decircular": "^1.0.0",
52
52
  "deepmerge": "^4.3.1",
53
53
  "deepmerge-ts": "^7.1.5",
54
54
  "execa": "^9.6.1",
55
55
  "find-workspaces": "^0.3.1",
56
- "fs-extra": "^11.3.3",
56
+ "fs-extra": "^11.3.4",
57
57
  "json-stringify-pretty-compact": "^4.0.0",
58
58
  "package-up": "^5.0.0",
59
59
  "picocolors": "^1.1.1",
60
60
  "prettier": "^3.8.1",
61
61
  "prettier-plugin-astro": "^0.14.1",
62
- "prettier-plugin-packagejson": "^3.0.0",
62
+ "prettier-plugin-packagejson": "^3.0.2",
63
63
  "prettier-plugin-sh": "^0.18.0",
64
- "prettier-plugin-svelte": "^3.5.0",
64
+ "prettier-plugin-svelte": "^3.5.1",
65
65
  "prettier-plugin-tailwindcss": "^0.7.2",
66
66
  "prettier-plugin-toml": "^2.0.6",
67
67
  "sort-package-json": "^3.6.1",
@@ -70,6 +70,12 @@
70
70
  "engines": {
71
71
  "node": ">=20.19.0"
72
72
  },
73
+ "devEngines": {
74
+ "runtime": {
75
+ "name": "node",
76
+ "version": ">=22.18.0"
77
+ }
78
+ },
73
79
  "publishConfig": {
74
80
  "access": "public"
75
81
  },
package/readme.md CHANGED
@@ -227,6 +227,10 @@ Spaces are required by the [specification](https://yaml.org/spec/1.2.2/#61-inden
227
227
 
228
228
  Spaces are not technically required, but are specified in alignment with the [Remark project's conclusions](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-tabs#recommendation) and to prevent fragility in YAML frontmatter. _(TODO: Need 4 spaces instead of 2?)_
229
229
 
230
+ ## Shared plugins
231
+
232
+ See discussion in [this prettier issue](https://github.com/prettier/prettier/issues/15667). We set the `plugins` array in the shared config, and make sure that the plugin dependencies are hoisted by PNPM as specified in the `pnpm-workspace.yaml` file.
233
+
230
234
  <!-- license -->
231
235
 
232
236
  ## License