From 6fff44cecd9f09d9a64e5ec75921b3bea4365520 Mon Sep 17 00:00:00 2001 From: Tushar Sharma Date: Sat, 24 Dec 2022 22:00:11 +0530 Subject: [PATCH] feat: make vue as optional peer dependency (#3) Upstream change from https://github.com/IanVS/prettier-plugin-sort-imports/pull/45 --- docs/TROUBLESHOOTING.md | 4 ++++ package.json | 12 +++++++++--- src/preprocessors/vue-preprocessor.ts | 19 ++++++++++++++----- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 8d7bf64..7045509 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -110,3 +110,7 @@ module.exports = { plugins: [require('@serverless-guru/prettier-plugin-import-order')], }; ``` + +#### Q. Why are my .vue sfc files not being formatted? + +Be sure that you have `@vue/compiler-sfc` installed in your project, (run `npm ls @vue/compiler-sfc` to double-check). If it's not there, install it and try formatting again. diff --git a/package.json b/package.json index c802ce1..d4ce2b7 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,7 @@ "@babel/types": "~7.19.4", "javascript-natural-sort": "0.7.1", "lodash.clone": "~4.5.0", - "lodash.isequal": "~4.5.0", - "@vue/compiler-sfc": "3.2.40" + "lodash.isequal": "~4.5.0" }, "devDependencies": { "@babel/preset-typescript": "7.18.6", @@ -51,11 +50,18 @@ "jest": "29.2.1", "prettier": "2.7.1", "ts-jest": "29.0.3", - "typescript": "4.8.4" + "typescript": "4.8.4", + "@vue/compiler-sfc": "3.2.40" }, "peerDependencies": { + "@vue/compiler-sfc": ">=3.0.0", "prettier": "2.x" }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + }, "publishConfig": { "access": "public" } diff --git a/src/preprocessors/vue-preprocessor.ts b/src/preprocessors/vue-preprocessor.ts index aa51cf1..35cf402 100644 --- a/src/preprocessors/vue-preprocessor.ts +++ b/src/preprocessors/vue-preprocessor.ts @@ -1,11 +1,20 @@ -import { parse } from '@vue/compiler-sfc'; +import type { PrettierOptions } from '../types'; -import { PrettierOptions } from '../types'; import { preprocessor } from './preprocessor'; export function vuePreprocessor(code: string, options: PrettierOptions) { - const { descriptor } = parse(code); - const content = (descriptor.script ?? descriptor.scriptSetup)?.content ?? code; + try { + const { parse } = require('@vue/compiler-sfc'); + const { descriptor } = parse(code); + const content = (descriptor.script ?? descriptor.scriptSetup)?.content ?? code; - return code.replace(content, `\n${preprocessor(content, options)}\n`); + return code.replace(content, `\n${preprocessor(content, options)}\n`); + } catch (err) { + if ((err as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND') { + console.warn( + '[@serverless-guru/prettier-plugin-import-order]: Could not process .vue file. Please be sure that "@vue/compiler-sfc" is installed in your project.', + ); + throw err; + } + } }