From d513c79034eb36b390f713f966a73ed42398f056 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Fri, 14 Jul 2023 08:10:50 -0700 Subject: [PATCH] Bump Prettier from 2.8.8 to 3.0.0 (#9304) * Account for issues caused by Prettier v3.0 API changes * Bump Prettier from 2.8.8 to 3.0.0 * Fix playground * Set trailingComma: es5 (for now) * Bump stylelint-prettier from 3.0.0 to 4.0.0 * Format files with Prettier * Add comment stating why we're using one .mjs import --------- Co-authored-by: Leo McArdle --- .prettierrc | 1 + build/blog.ts | 8 ++--- build/cli.ts | 5 +-- build/flaws/index.ts | 2 +- build/index.ts | 8 ++--- client/public/index.html | 2 +- client/public/runner.html | 2 +- .../document/mathml-polyfill/mathml-font.scss | 3 +- .../document/organisms/sidebar/filter.scss | 4 ++- .../src/document/organisms/sidebar/index.tsx | 9 +++--- client/src/playground/index.tsx | 32 ++++++++++++++----- client/src/playground/loader.scss | 12 +++++-- client/src/plus/ai-help/index.scss | 3 +- client/src/plus/index.scss | 6 ++-- client/src/search.tsx | 2 +- client/src/site-search/search-results.tsx | 6 ++-- client/src/ui/base/_typography.scss | 3 +- client/src/ui/molecules/search/index.scss | 4 ++- content/document.ts | 23 +++++++------ content/utils.ts | 4 +-- package.json | 4 +-- server/document.ts | 8 ++--- tool/cli.ts | 14 ++++---- tool/sync-translated-content.ts | 15 +++++---- yarn.lock | 16 +++++----- 25 files changed, 115 insertions(+), 81 deletions(-) diff --git a/.prettierrc b/.prettierrc index 54d61d35f13d..1db08dcc99db 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { + "trailingComma": "es5", "overrides": [ { "files": ["**/package.json"], diff --git a/build/blog.ts b/build/blog.ts index 17fb51b35a44..708cd599084f 100644 --- a/build/blog.ts +++ b/build/blog.ts @@ -217,13 +217,9 @@ export const allPostFrontmatter = memoize( }: { includeUnpublished?: boolean } = {}): Promise => { return ( await Promise.all( - ( - await allPostFiles() - ).map( + (await allPostFiles()).map( async (file) => - ( - await readPost(file, { previousNext: false }) - ).blogMeta + (await readPost(file, { previousNext: false })).blogMeta ) ) ) diff --git a/build/cli.ts b/build/cli.ts index 460ea407c7b2..d02e77ccf6a9 100644 --- a/build/cli.ts +++ b/build/cli.ts @@ -315,8 +315,9 @@ async function buildDocuments( const allBrowserCompat = new Set(); Object.values(metadata).forEach((localeMeta) => - localeMeta.forEach((doc) => - doc.browserCompat?.forEach((query) => allBrowserCompat.add(query)) + localeMeta.forEach( + (doc) => + doc.browserCompat?.forEach((query) => allBrowserCompat.add(query)) ) ); fs.writeFileSync( diff --git a/build/flaws/index.ts b/build/flaws/index.ts index 5fdf93fd4b1a..73078752f6c4 100644 --- a/build/flaws/index.ts +++ b/build/flaws/index.ts @@ -315,7 +315,7 @@ export async function fixFixableFlaws(doc: Partial, options, document) { ) ); } else { - Document.update(document.url, newRawBody, document.metadata); + await Document.update(document.url, newRawBody, document.metadata); if (options.fixFlawsVerbose) { console.log( chalk.green( diff --git a/build/index.ts b/build/index.ts index 9ec0007eeb64..02d1585ce949 100644 --- a/build/index.ts +++ b/build/index.ts @@ -537,8 +537,8 @@ function addBaseline(doc: Partial): WebFeatureStatus | undefined { for (const feature of Object.values(webFeatures)) { if ( feature.status && - feature.compat_features?.some((query) => - doc.browserCompat?.includes(query) + feature.compat_features?.some( + (query) => doc.browserCompat?.includes(query) ) ) { return feature.status; @@ -570,9 +570,7 @@ export async function buildLiveSamplePageFromURL(url: string) { (await kumascript.buildLiveSamplePages( document.url, document.metadata.title, - ( - await kumascript.render(document.url) - )[0], + (await kumascript.render(document.url))[0], document.rawBody )) as BuiltLiveSamplePage[] ).find((page) => page.id.toLowerCase() == decodedSampleID); diff --git a/client/public/index.html b/client/public/index.html index 92a7b6d02754..def2f16ba351 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -1,4 +1,4 @@ - + diff --git a/client/public/runner.html b/client/public/runner.html index 3fd40539d930..99be4ec6b33c 100644 --- a/client/public/runner.html +++ b/client/public/runner.html @@ -1,4 +1,4 @@ - + diff --git a/client/src/document/mathml-polyfill/mathml-font.scss b/client/src/document/mathml-polyfill/mathml-font.scss index bec15ac71eb6..f617d5b1fd7e 100644 --- a/client/src/document/mathml-polyfill/mathml-font.scss +++ b/client/src/document/mathml-polyfill/mathml-font.scss @@ -1,7 +1,8 @@ @font-face { font-family: "STIXTwoMath-Regular"; font-weight: normal; - src: local("STIXTwoMath-Regular"), + src: + local("STIXTwoMath-Regular"), url("./font/STIXTwoMath-Regular.woff2") format("woff2"); } diff --git a/client/src/document/organisms/sidebar/filter.scss b/client/src/document/organisms/sidebar/filter.scss index 3ee22cf7e42d..2f016bd0397a 100644 --- a/client/src/document/organisms/sidebar/filter.scss +++ b/client/src/document/organisms/sidebar/filter.scss @@ -53,7 +53,9 @@ &:focus { border-color: var(--category-color); - box-shadow: 0 0 0 3px var(--blend-color), 0 0 0 3px var(--category-color); + box-shadow: + 0 0 0 3px var(--blend-color), + 0 0 0 3px var(--category-color); outline: 0 none; } diff --git a/client/src/document/organisms/sidebar/index.tsx b/client/src/document/organisms/sidebar/index.tsx index c908134b2ea1..c9103f399540 100644 --- a/client/src/document/organisms/sidebar/index.tsx +++ b/client/src/document/organisms/sidebar/index.tsx @@ -43,10 +43,11 @@ export function SidebarContainer({ const sidebar = document.querySelector("#sidebar-quicklinks"); const currentSidebarItem = sidebar?.querySelector("em"); if (sidebar && currentSidebarItem) { - [sidebar, sidebar.querySelector(".sidebar-inner-nav")].forEach((n) => - n?.scrollTo({ - top: currentSidebarItem.offsetTop - window.innerHeight / 4, - }) + [sidebar, sidebar.querySelector(".sidebar-inner-nav")].forEach( + (n) => + n?.scrollTo({ + top: currentSidebarItem.offsetTop - window.innerHeight / 4, + }) ); } }, []); diff --git a/client/src/playground/index.tsx b/client/src/playground/index.tsx index 6c7a03c52ea1..847c466ab740 100644 --- a/client/src/playground/index.tsx +++ b/client/src/playground/index.tsx @@ -1,10 +1,12 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { useSearchParams } from "react-router-dom"; import useSWRImmutable from "swr/immutable"; -import prettier from "prettier/esm/standalone.mjs"; -import parserBabel from "prettier/esm/parser-babel.mjs"; -import parserCSS from "prettier/esm/parser-postcss.mjs"; -import parserHTML from "prettier/esm/parser-html.mjs"; +import prettier from "prettier/standalone"; +import prettierPluginBabel from "prettier/plugins/babel"; +import prettierPluginCSS from "prettier/plugins/postcss"; +// XXX Using .mjs until https://github.com/prettier/prettier/pull/15018 is deployed +import prettierPluginESTree from "prettier/plugins/estree.mjs"; +import prettierPluginHTML from "prettier/plugins/html"; import { Button } from "../ui/atoms/button"; import Editor, { EditorHandle } from "./editor"; @@ -190,14 +192,28 @@ export default function Playground() { ); }; - const format = () => { + const format = async () => { const { html, css, js } = getEditorContent(); try { const formatted = { - html: prettier.format(html, { parser: "html", plugins: [parserHTML] }), - css: prettier.format(css, { parser: "css", plugins: [parserCSS] }), - js: prettier.format(js, { parser: "babel", plugins: [parserBabel] }), + html: await prettier.format(html, { + parser: "html", + plugins: [ + prettierPluginHTML, + prettierPluginCSS, + prettierPluginBabel, + prettierPluginESTree, + ], + }), + css: await prettier.format(css, { + parser: "css", + plugins: [prettierPluginCSS], + }), + js: await prettier.format(js, { + parser: "babel", + plugins: [prettierPluginBabel, prettierPluginESTree], + }), }; htmlRef.current?.setContent(formatted.html); cssRef.current?.setContent(formatted.css); diff --git a/client/src/playground/loader.scss b/client/src/playground/loader.scss index f59f50287404..f545e741dfe9 100644 --- a/client/src/playground/loader.scss +++ b/client/src/playground/loader.scss @@ -14,9 +14,15 @@ animation: rotate 2s linear infinite; border-radius: 50%; - box-shadow: inset 0 0 50px #fff, inset 20px 0 80px #f0f, - inset -20px 0 80px #0ff, inset 20px 0 300px #f0f, inset -20px 0 300px #0ff, - 0 0 50px #fff, -10px 0 80px #f0f, 10px 0 80px #0ff; + box-shadow: + inset 0 0 50px #fff, + inset 20px 0 80px #f0f, + inset -20px 0 80px #0ff, + inset 20px 0 300px #f0f, + inset -20px 0 300px #0ff, + 0 0 50px #fff, + -10px 0 80px #f0f, + 10px 0 80px #0ff; height: 100px; width: 100px; } diff --git a/client/src/plus/ai-help/index.scss b/client/src/plus/ai-help/index.scss index d6182c1c7619..4cdc4a69c807 100644 --- a/client/src/plus/ai-help/index.scss +++ b/client/src/plus/ai-help/index.scss @@ -87,7 +87,8 @@ &:focus { border-color: var(--category-color); - box-shadow: 0 0 0 3px var(--blend-color), + box-shadow: + 0 0 0 3px var(--blend-color), 0 0 0 3px var(--category-color); outline: 0 none; } diff --git a/client/src/plus/index.scss b/client/src/plus/index.scss index 27bf51647e79..f574a02c2491 100644 --- a/client/src/plus/index.scss +++ b/client/src/plus/index.scss @@ -66,8 +66,10 @@ h1 span, p { // improve text contrast against mandala - text-shadow: 2px 2px 3px var(--plus-header), - 2px -2px 3px var(--plus-header), -2px -2px 3px var(--plus-header), + text-shadow: + 2px 2px 3px var(--plus-header), + 2px -2px 3px var(--plus-header), + -2px -2px 3px var(--plus-header), -2px 2px 3px var(--plus-header); } diff --git a/client/src/search.tsx b/client/src/search.tsx index 2aa42ffb21f4..4f5209528ac3 100644 --- a/client/src/search.tsx +++ b/client/src/search.tsx @@ -39,7 +39,7 @@ function quicksearchPing(input: string) { function useSearchIndex(): readonly [ null | SearchIndex, null | Error, - () => void + () => void, ] { const [shouldInitialize, setShouldInitialize] = useState(false); const [searchIndex, setSearchIndex] = useState(null); diff --git a/client/src/site-search/search-results.tsx b/client/src/site-search/search-results.tsx index e13b466f342a..bbd0858fa7fb 100644 --- a/client/src/site-search/search-results.tsx +++ b/client/src/site-search/search-results.tsx @@ -358,9 +358,9 @@ function Results({ LANGUAGES.has(document.locale) && ( {LANGUAGES.get(document.locale)?.English} diff --git a/client/src/ui/base/_typography.scss b/client/src/ui/base/_typography.scss index c9ec2178a89e..ca6c8e787301 100644 --- a/client/src/ui/base/_typography.scss +++ b/client/src/ui/base/_typography.scss @@ -4,7 +4,8 @@ font-stretch: 75% 100%; font-style: oblique 0deg 20deg; font-weight: 1 999; - src: url("../../assets/fonts/Inter.var.woff2") + src: + url("../../assets/fonts/Inter.var.woff2") format("woff2 supports variations"), url("../../assets/fonts/Inter.var.woff2") format("woff2-variations"); } diff --git a/client/src/ui/molecules/search/index.scss b/client/src/ui/molecules/search/index.scss index c79f794b69db..72cf3331ede8 100644 --- a/client/src/ui/molecules/search/index.scss +++ b/client/src/ui/molecules/search/index.scss @@ -93,7 +93,9 @@ &:focus { border-color: var(--category-color); - box-shadow: 0 0 0 3px var(--blend-color), 0 0 0 3px var(--category-color); + box-shadow: + 0 0 0 3px var(--blend-color), + 0 0 0 3px var(--category-color); outline: 0 none; } diff --git a/content/document.ts b/content/document.ts index c449fa46b441..18cd235ec63a 100644 --- a/content/document.ts +++ b/content/document.ts @@ -46,7 +46,7 @@ const getHTMLPath = (folder: string) => path.join(folder, HTML_FILENAME); const getMarkdownPath = (folder: string) => path.join(folder, MARKDOWN_FILENAME); -export function updateWikiHistory( +export async function updateWikiHistory( localeContentRoot: string, oldSlug: string, newSlug: string | null = null @@ -81,7 +81,7 @@ export function updateWikiHistory( // trailing newline character. So always doing in automation removes // the risk of a conflict at the last line from two independent PRs // that edit this file. - toPrettyJSON(sorted) + await toPrettyJSON(sorted) ); } } @@ -355,7 +355,7 @@ export const read = memoize((folderOrFilePath: string, ...roots: string[]) => { }; }); -export function update(url: string, rawBody: string, metadata) { +export async function update(url: string, rawBody: string, metadata) { const folder = urlToFolderPath(url); const document = read(folder); const locale = document.metadata.locale; @@ -385,7 +385,7 @@ export function update(url: string, rawBody: string, metadata) { frontMatterKeys ); if (isNewSlug) { - updateWikiHistory( + await updateWikiHistory( path.join(root, metadata.locale.toLowerCase()), oldSlug, newSlug @@ -402,7 +402,7 @@ export function update(url: string, rawBody: string, metadata) { const oldChildSlug = metadata.slug; const newChildSlug = oldChildSlug.replace(oldSlug, newSlug); metadata.slug = newChildSlug; - updateWikiHistory( + await updateWikiHistory( path.join(root, metadata.locale.toLowerCase()), oldChildSlug, newChildSlug @@ -543,7 +543,7 @@ export function findChildren(url: string, recursive = false) { return childPaths.map((folder) => read(folder)); } -export function move( +export async function move( oldSlug: string, newSlug: string, locale: string, @@ -573,7 +573,7 @@ export function move( } doc.metadata.slug = newSlug; - update(oldUrl, doc.rawBody, doc.metadata); + await update(oldUrl, doc.rawBody, doc.metadata); return pairs; } @@ -606,7 +606,7 @@ export function validate(slug: string, locale: string) { } } -export function remove( +export async function remove( slug: string, locale: string, { recursive = false, dry = false, redirect = "" } = {} @@ -639,7 +639,10 @@ export function remove( const removed = []; for (const { metadata } of children) { const slug = metadata.slug; - updateWikiHistory(path.join(root, metadata.locale.toLowerCase()), slug); + await updateWikiHistory( + path.join(root, metadata.locale.toLowerCase()), + slug + ); removed.push(buildURL(locale, slug)); } @@ -656,7 +659,7 @@ export function remove( Redirect.remove(locale, [url, ...removed]); } - updateWikiHistory( + await updateWikiHistory( path.join(root, metadata.locale.toLowerCase()), metadata.slug ); diff --git a/content/utils.ts b/content/utils.ts index ebd69eec5b0f..fc359f1c20a8 100644 --- a/content/utils.ts +++ b/content/utils.ts @@ -108,11 +108,11 @@ export function execGit(args, opts: { cwd?: string } = {}, root = null) { return stdout.toString().trim(); } -export function toPrettyJSON(value: unknown) { +export async function toPrettyJSON(value: unknown) { const json = JSON.stringify(value, null, 2) + "\n"; if (prettier) { try { - return prettier.format(json, { parser: "json" }); + return await prettier.format(json, { parser: "json" }); } catch (e) { // If Prettier formatting failed, don't worry } diff --git a/package.json b/package.json index 07d697045f54..c65577401e81 100644 --- a/package.json +++ b/package.json @@ -214,7 +214,7 @@ "postcss-loader": "^7.3.3", "postcss-normalize": "^10.0.1", "postcss-preset-env": "^8.5.1", - "prettier": "^2.8.8", + "prettier": "^3.0.0", "prettier-plugin-packagejson": "^2.4.5", "prompts": "^2.4.2", "react": "^18.2.0", @@ -242,7 +242,7 @@ "stylelint-config-recommended": "^12.0.0", "stylelint-config-sass-guidelines": "^10.0.0", "stylelint-order": "^6.0.3", - "stylelint-prettier": "^3.0.0", + "stylelint-prettier": "^4.0.0", "stylelint-scss": "^5.0.1", "swr": "^2.2.0", "tailwindcss": "^3.3.3", diff --git a/server/document.ts b/server/document.ts index d855081742b3..cfbef3f1c847 100644 --- a/server/document.ts +++ b/server/document.ts @@ -73,19 +73,19 @@ router.get("/", withDocument, (req: RequestWithDocument, res) => { router.put("/", withDocument, async (req: RequestWithDocument, res) => { const { rawBody, metadata } = req.body; if (metadata.title && rawBody) { - Document.update(req.document.url, `${rawBody.trim()}\n`, metadata); + await Document.update(req.document.url, `${rawBody.trim()}\n`, metadata); } res.sendStatus(200); }); // XXX deprecated anyway and doesn't work with Markdown // router.put("/move", async (req, res) => { -// Document.move(req.query.slug, req.query.newSlug, req.query.locale); +// await Document.move(req.query.slug, req.query.newSlug, req.query.locale); // res.sendStatus(200); // }); -router.delete("/", (req, res) => { - Document.remove(req.query.slug as string, req.query.locale as string, { +router.delete("/", async (req, res) => { + await Document.remove(req.query.slug as string, req.query.locale as string, { recursive: true, }); res.sendStatus(200); diff --git a/tool/cli.ts b/tool/cli.ts index 2f0379e1f3d0..ead3e0622a6a 100644 --- a/tool/cli.ts +++ b/tool/cli.ts @@ -349,7 +349,7 @@ program tryOrExit(async ({ args, options }: DeleteActionParameters) => { const { slug, locale } = args; const { recursive, redirect, yes } = options; - const changes = Document.remove(slug, locale, { + const changes = await Document.remove(slug, locale, { recursive, redirect, dry: true, @@ -380,7 +380,7 @@ program default: true, }); if (run) { - const deletedDocs = Document.remove(slug, locale, { + const deletedDocs = await Document.remove(slug, locale, { recursive, redirect, }); @@ -437,7 +437,7 @@ program tryOrExit(async ({ args, options }: MoveActionParameters) => { const { oldSlug, newSlug, locale } = args; const { yes } = options; - const changes = Document.move(oldSlug, newSlug, locale, { + const changes = await Document.move(oldSlug, newSlug, locale, { dry: true, }); console.log( @@ -459,7 +459,7 @@ program default: true, }); if (run) { - const moved = Document.move(oldSlug, newSlug, locale); + const moved = await Document.move(oldSlug, newSlug, locale); console.log(chalk.green(`Moved ${moved.length} documents.`)); } }) @@ -718,7 +718,7 @@ program redirectedDocs, renamedDocs, totalDocs, - } = syncAllTranslatedContent(locale); + } = await syncAllTranslatedContent(locale); console.log(chalk.green(`Syncing ${locale}:`)); console.log(chalk.green(`Total of ${totalDocs} documents`)); console.log(chalk.green(`Moved ${movedDocs} documents`)); @@ -1117,7 +1117,7 @@ if (Mozilla && !Mozilla.dntEnabled()) { console.log(`${flaw.macroSource} --> ${suggestion}`); } console.groupEnd(); - Document.update( + await Document.update( document.url, document.rawBody, document.metadata @@ -1138,7 +1138,7 @@ if (Mozilla && !Mozilla.dntEnabled()) { } const newRawHTML = $("body").html(); if (newRawHTML !== originalRawBody) { - Document.update(document.url, newRawHTML, document.metadata); + await Document.update(document.url, newRawHTML, document.metadata); console.log(`modified`); countModified++; } else { diff --git a/tool/sync-translated-content.ts b/tool/sync-translated-content.ts index eb97378eb0bd..a85cac0d1379 100644 --- a/tool/sync-translated-content.ts +++ b/tool/sync-translated-content.ts @@ -28,7 +28,7 @@ const ORPHANED = "orphaned"; const DEFAULT_LOCALE_LC = DEFAULT_LOCALE.toLowerCase(); -export function syncAllTranslatedContent(locale: string) { +export async function syncAllTranslatedContent(locale: string) { if (!CONTENT_TRANSLATED_ROOT) { throw new Error( "CONTENT_TRANSLATED_ROOT must be set to sync translated content!" @@ -56,7 +56,7 @@ export function syncAllTranslatedContent(locale: string) { for (const f of files) { const { conflicting, moved, followed, orphaned, redirect, renamed } = - syncTranslatedContent(f, locale); + await syncTranslatedContent(f, locale); if (conflicting) { stats.conflictingDocs += 1; } @@ -101,7 +101,10 @@ function mdOrHtmlExists(folderPath: string) { ); } -export function syncTranslatedContent(inFilePath: string, locale: string) { +export async function syncTranslatedContent( + inFilePath: string, + locale: string +) { if (!CONTENT_TRANSLATED_ROOT) { throw new Error( "CONTENT_TRANSLATED_ROOT must be set to sync translated content!" @@ -206,7 +209,7 @@ export function syncTranslatedContent(inFilePath: string, locale: string) { const filePath = path.join(folderPath, fileName); log.log(`${inFilePath} → ${filePath}`); - Document.updateWikiHistory( + await Document.updateWikiHistory( path.join(CONTENT_TRANSLATED_ROOT, locale.toLowerCase()), oldMetadata.slug, metadata.slug @@ -247,13 +250,13 @@ function moveContent(inFileDir: string, outFileDir: string) { } } -export function syncTranslatedContentForAllLocales() { +export async function syncTranslatedContentForAllLocales() { let moved = 0; for (const locale of VALID_LOCALES.keys()) { if (locale === DEFAULT_LOCALE_LC) { continue; } - const { movedDocs } = syncAllTranslatedContent(locale); + const { movedDocs } = await syncAllTranslatedContent(locale); moved += movedDocs; } return moved; diff --git a/yarn.lock b/yarn.lock index 8753d8571518..a62e15666d59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11608,10 +11608,10 @@ prettier-plugin-packagejson@^2.4.5: sort-package-json "2.5.1" synckit "0.8.5" -prettier@^2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" + integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: version "5.6.0" @@ -13374,10 +13374,10 @@ stylelint-order@^6.0.3: postcss "^8.4.21" postcss-sorting "^8.0.2" -stylelint-prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-3.0.0.tgz#57028b99866ed4c3ae045ddd891bf9a77d274726" - integrity sha512-kIks1xw6np0zElokMT2kP6ar3S4MBoj6vUtPJuND1pFELMpZxVS/0uHPR4HDAVn0WAD3I5oF0IA3qBFxBpMkLg== +stylelint-prettier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-4.0.0.tgz#e04f33bf9968a5d5478d2d11b20bdc5a7de2dc35" + integrity sha512-hYlObunQiSzc5XRttNiDyaY1W7ytW/AJtEbaDxy0rr4ioQvko+cjAgSGrRbz0iRB+yc6jiMrUmHcGkvFb+zDqw== dependencies: prettier-linter-helpers "^1.0.0"