Merge branch 'main' into next
# Conflicts: # package.json # scripts/build/bundler.mjs # scripts/build/config.mjs # scripts/vendors/vendor-meta.json # scripts/vendors/vendors.mjs # src/cli/format.js # src/cli/logger.js # src/cli/options/get-options-for-file.js # src/cli/options/parse-cli-arguments.js # src/main/core.js # tests/config/install-prettier.js # vendors/execa.js # vendors/mem.js # vendors/string-width.js # vendors/tempy.js # yarn.lock
This commit is contained in:
commit
c95c899b6f
64 files changed
+2076
-1214
No files matched your search
@@ -5,6 +5,8 @@
|
|||||||
# See https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt
|
# See https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt
|
||||||
|
|
||||||
# Prettier bump after release
|
# Prettier bump after release
|
||||||
|
# 2.6.0
|
||||||
|
f7c44237331348c001c2907e844cd0d1530b23ff
|
||||||
# 2.5.1
|
# 2.5.1
|
||||||
4683a6284d53b913f129694a5be666fc55b06982
|
4683a6284d53b913f129694a5be666fc55b06982
|
||||||
# 2.5.0
|
# 2.5.0
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Don't fill the form below manually! Let a program create a report for you:
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
**Prettier 2.5.1**
|
**Prettier 2.6.0**
|
||||||
[Playground link](https://prettier.io/playground/#.....)
|
[Playground link](https://prettier.io/playground/#.....)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ BEFORE SUBMITTING AN ISSUE:
|
|||||||
|
|
||||||
**Environments:**
|
**Environments:**
|
||||||
|
|
||||||
- Prettier Version: 2.5.1
|
- Prettier Version: 2.6.0
|
||||||
- Running Prettier via: <!-- CLI, Node.js API, Browser API, etc. -->
|
- Running Prettier via: <!-- CLI, Node.js API, Browser API, etc. -->
|
||||||
- Runtime: <!-- Node.js v14, Chrome v83, etc. -->
|
- Runtime: <!-- Node.js v14, Chrome v83, etc. -->
|
||||||
- Operating System: <!-- Windows, Linux, macOS, etc. -->
|
- Operating System: <!-- Windows, Linux, macOS, etc. -->
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
# 2.6.0
|
||||||
|
|
||||||
|
[diff](https://github.com/prettier/prettier/compare/2.5.1...2.6.0)
|
||||||
|
|
||||||
|
🔗 [Release Notes](https://prettier.io/blog/2022/03/16/2.6.0.html)
|
||||||
|
|
||||||
# 2.5.1
|
# 2.5.1
|
||||||
|
|
||||||
[diff](https://github.com/prettier/prettier/compare/2.5.0...2.5.1)
|
[diff](https://github.com/prettier/prettier/compare/2.5.0...2.5.1)
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
#### Add `--no-plugin-search` to turn off plugin autoloading (#10274 by @fisker)
|
|
||||||
|
|
||||||
To turn off plugin autoloading, use `--no-plugin-search` when using Prettier CLI or add `{ pluginSearchDirs: false }` to options in `prettier.format()` or to the config file.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```cli
|
|
||||||
// Prettier stable
|
|
||||||
$ prettier . --plugin-search-dir=a-dir-without-plugins
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
$ prettier . --no-plugin-search
|
|
||||||
```
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#### Infer parser for `.swcrc` (#12320 by @sosukesuzuki)
|
|
||||||
|
|
||||||
A [`.swcrc`](https://swc.rs/docs/configuration/swcrc) is handled using `json` parser.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
#### Preserve empty line in CSS paren groups (#12210 by @duailibe)
|
|
||||||
|
|
||||||
<!-- Optional description if it makes sense. -->
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```css
|
|
||||||
/* Input */
|
|
||||||
$colours: (
|
|
||||||
"text": $light-100,
|
|
||||||
|
|
||||||
"background-primary": $dark-300,
|
|
||||||
"background-secondary": $dark-200,
|
|
||||||
"background-tertiary": $dark-100
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Prettier stable */
|
|
||||||
$colours: (
|
|
||||||
"text": $light-100,
|
|
||||||
"background-primary": $dark-300,
|
|
||||||
"background-secondary": $dark-200,
|
|
||||||
"background-tertiary": $dark-100
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Prettier main */
|
|
||||||
$colours: (
|
|
||||||
"text": $light-100,
|
|
||||||
|
|
||||||
"background-primary": $dark-300,
|
|
||||||
"background-secondary": $dark-200,
|
|
||||||
"background-tertiary": $dark-100
|
|
||||||
);
|
|
||||||
```
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#### Fix lowercasing postcss values (#12393 by @niklasvatn)
|
|
||||||
|
|
||||||
PostCSS values can start with digits. Prettier interprets this as a number followed by a unit in the example below.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```css
|
|
||||||
// Input
|
|
||||||
@value 4XLarge 28/36px;
|
|
||||||
|
|
||||||
.test {
|
|
||||||
font: 4XLarge Helvetica;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
@value 4XLarge 28/36px;
|
|
||||||
|
|
||||||
.test {
|
|
||||||
font: 4xlarge Helvetica;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
@value 4XLarge 28/36px;
|
|
||||||
|
|
||||||
.test {
|
|
||||||
font: 4XLarge Helvetica;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#### Fix Flow's class declaration's `static` indexer formatting (#12009 by @gkz)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
declare class A {
|
|
||||||
static [string]: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
declare class A {
|
|
||||||
[string]: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
declare class A {
|
|
||||||
static [string]: boolean;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#### Print descriptions on graphql schema definition nodes (#11901 by @trevor-scheer)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```graphql
|
|
||||||
# Input
|
|
||||||
"""SchemaDefinition description is lost"""
|
|
||||||
schema {
|
|
||||||
query: Query
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prettier stable
|
|
||||||
schema {
|
|
||||||
query: Query
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prettier main
|
|
||||||
"""
|
|
||||||
SchemaDefinition description is lost
|
|
||||||
"""
|
|
||||||
schema {
|
|
||||||
query: Query
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#### Correctly identify which backslashes are removed by glimmer (#12302 by @MattTheNub)
|
|
||||||
|
|
||||||
This caused Prettier to unnecessarily add backslashes every time a file was formatted.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```hbs
|
|
||||||
{{! Input }}
|
|
||||||
<p>\</p>
|
|
||||||
<p>\\</p>
|
|
||||||
<p>\\\</p>
|
|
||||||
|
|
||||||
{{! Prettier stable }}
|
|
||||||
<p>\\</p>
|
|
||||||
<p>\\\</p>
|
|
||||||
<p>\\\\</p>
|
|
||||||
|
|
||||||
{{! Prettier main }}
|
|
||||||
<p>\</p>
|
|
||||||
<p>\\</p>
|
|
||||||
<p>\\\</p>
|
|
||||||
```
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#### Enforce Single Attribute Per Line (#6644 by @kankje)
|
|
||||||
|
|
||||||
Added the `singleAttributePerLine` option for specifying if Prettier should enforce single attribute per line in HTML, Vue and JSX.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```html
|
|
||||||
<!-- Input -->
|
|
||||||
<div data-a="1">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
<div data-a="1" data-b="2" data-c="3">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Prettier stable -->
|
|
||||||
<div data-a="1">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
<div data-a="1" data-b="2" data-c="3">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Prettier main, with `{"singleAttributePerLine": false}` -->
|
|
||||||
<div data-a="1">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
<div data-a="1" data-b="2" data-c="3">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Prettier main, with `{"singleAttributePerLine": true}` -->
|
|
||||||
<div data-a="1">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
data-a="1"
|
|
||||||
data-b="2"
|
|
||||||
data-c="3"
|
|
||||||
>
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
||||||
</div>
|
|
||||||
```
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
#### Recognize waitForAsync as test-statement in Angular (#11992 by @HendrikN)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```js
|
|
||||||
// Input
|
|
||||||
test("foo bar", waitForAsync(() => {
|
|
||||||
const foo = "bar";
|
|
||||||
expect(foo).toEqual("bar")
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
test(
|
|
||||||
"foo bar",
|
|
||||||
waitForAsync(() => {
|
|
||||||
const foo = "bar";
|
|
||||||
expect(foo).toEqual("bar");
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
test("foo bar", waitForAsync(() => {
|
|
||||||
const foo = "bar";
|
|
||||||
expect(foo).toEqual("bar");
|
|
||||||
}));
|
|
||||||
```
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#### Preserve end-of-line comment for if statements without blocks (#12017 by @sosukesuzuki)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
if (condition1) expression1; // comment A
|
|
||||||
else if (condition2) expression2; // comment B
|
|
||||||
else expression3; // comment C
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
if (condition1) expression1;
|
|
||||||
// comment A
|
|
||||||
else if (condition2) expression2;
|
|
||||||
// comment B
|
|
||||||
else expression3; // comment C
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
if (condition1) expression1; // comment A
|
|
||||||
else if (condition2) expression2; // comment B
|
|
||||||
else expression3; // comment C
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#### Print comments for parenthesized TS keyword types with `babel-ts` parser (#12070 by @sosukesuzuki)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```ts
|
|
||||||
// Input
|
|
||||||
let foo: (
|
|
||||||
// comment
|
|
||||||
never
|
|
||||||
);
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
Error: Comment "comment" was not printed. Please report this error!
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
let foo: // comment
|
|
||||||
never;
|
|
||||||
```
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#### Print end-of-line comment for `continue`/`break` statements (#12075 by @sosukesuzuki)
|
|
||||||
|
|
||||||
<!-- Optional description if it makes sense. -->
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
for (;;) continue // comment
|
|
||||||
;
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
Error: Comment "comment" was not printed. Please report this error!
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
for (;;)
|
|
||||||
continue; // comment
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#### Inline `await` expressions in JSX (#12088 & #12109 by @j-f1)
|
|
||||||
|
|
||||||
`await` expressions in JSX are now inlined if their argument would be inlined.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
{await Promise.all(
|
|
||||||
someVeryLongExpression
|
|
||||||
)}
|
|
||||||
|
|
||||||
{await (
|
|
||||||
<div>Lorem ipsum ...</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
{
|
|
||||||
await Promise.all(
|
|
||||||
someVeryLongExpression
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
await (
|
|
||||||
<div>Lorem ipsum ...</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
{await Promise.all(
|
|
||||||
someVeryLongExpression
|
|
||||||
)}
|
|
||||||
|
|
||||||
{await (
|
|
||||||
<div>Lorem ipsum ...</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#### Add `acorn` parser (#12172 by @fisker)
|
|
||||||
|
|
||||||
A new value for the `parser` option has been added: [`acorn`](https://github.com/acornjs/acorn) - A small, fast, JavaScript-based JavaScript parser.
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#### Keep comments after `default` cases in the same line (#12177 by @duailibe)
|
|
||||||
|
|
||||||
Keep comments right after `default` cases (in switch statements) in the same line, when possible.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
function read_statement() {
|
|
||||||
switch (peek_keyword()) {
|
|
||||||
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
|
||||||
return ImplDeclaration.read();
|
|
||||||
|
|
||||||
default: // expression;
|
|
||||||
return ExpressionStatement.read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
function read_statement() {
|
|
||||||
switch (peek_keyword()) {
|
|
||||||
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
|
||||||
return ImplDeclaration.read();
|
|
||||||
|
|
||||||
default:
|
|
||||||
// expression;
|
|
||||||
return ExpressionStatement.read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
function read_statement() {
|
|
||||||
switch (peek_keyword()) {
|
|
||||||
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
|
||||||
return ImplDeclaration.read();
|
|
||||||
|
|
||||||
default: // expression;
|
|
||||||
return ExpressionStatement.read();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#### Fix misplaced argument comment in abstract methods (#12185 by @duailibe)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```ts
|
|
||||||
// Input
|
|
||||||
abstract class Foo {
|
|
||||||
abstract bar(
|
|
||||||
/** comment explaining userId param */
|
|
||||||
userId
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
abstract class Foo {
|
|
||||||
abstract bar(userId);
|
|
||||||
/** comment explaining userId param */
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
abstract class Foo {
|
|
||||||
abstract bar(
|
|
||||||
/** comment explaining userId param */
|
|
||||||
userId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#### Fix typecast of superclass in class declarations (#12222 & #12226 by @duailibe)
|
|
||||||
|
|
||||||
This was a combination of two separate bugs: moving the comments before the superclass and adding multiple parenthesis around the superclass.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```js
|
|
||||||
// Input
|
|
||||||
class Foo extends /** @type {Type} */ (Bar) {}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
class Foo /** @type {Type} */ extends ((Bar)) {}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
class Foo extends /** @type {Type} */ (Bar) {}
|
|
||||||
```
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#### Support Unicode Set Notation proposal (#12241 by @fisker)
|
|
||||||
|
|
||||||
Support [Stage 3 proposal Unicode Set Notation](https://github.com/tc39/proposal-regexp-set-notation/) via [Babel 7.17.0](https://babeljs.io/blog/2022/02/02/7.17.0).
|
|
||||||
|
|
||||||
See [the release blog post of Babel v7.17.0](https://babeljs.io/blog/2022/02/02/7.17.0#regexp-set-notation-and-properties-of-strings-14125httpsgithubcombabelbabelpull14125) and [the README of this proposal](https://github.com/tc39/proposal-regexp-set-notation/) for details.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Examples
|
|
||||||
|
|
||||||
/[\p{Decimal_Number}--[0-9]]/v; // Non-ASCII decimal digits
|
|
||||||
|
|
||||||
"Did you see the 👩🏿❤️💋👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿❤️💋👩🏾"]
|
|
||||||
|
|
||||||
/[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE
|
|
||||||
```
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#### Add parens to `ClassExpression` with decorators (#12260 by @fisker)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```js
|
|
||||||
// Input
|
|
||||||
(@f() class {});
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
@f()
|
|
||||||
class {};
|
|
||||||
|
|
||||||
// Prettier stable (Second format)
|
|
||||||
SyntaxError: A class name is required. (2:7)
|
|
||||||
1 | @f()
|
|
||||||
> 2 | class {};
|
|
||||||
| ^
|
|
||||||
3 |
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
(
|
|
||||||
@f()
|
|
||||||
class {}
|
|
||||||
);
|
|
||||||
```
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#### Improve printing of comments in type aliases in Flow & TS (#12268 by @duailibe)
|
|
||||||
|
|
||||||
For Flow, the comments will now be more aligned to how we print comments in assignments where the right-hand side is an object expression:
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```js
|
|
||||||
// Input
|
|
||||||
type Props = // comment explaining the props
|
|
||||||
{
|
|
||||||
isPlaying: boolean
|
|
||||||
};
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
// comment explaining the props
|
|
||||||
type Props = {
|
|
||||||
isPlaying: boolean,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
type Props =
|
|
||||||
// comment explaining the props
|
|
||||||
{
|
|
||||||
isPlaying: boolean,
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
And for TS that comment would not be stable with a second format:
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```ts
|
|
||||||
// Input
|
|
||||||
type Props = // comment explaining the props
|
|
||||||
{
|
|
||||||
isPlaying: boolean
|
|
||||||
};
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
type Props = { // comment explaining the props
|
|
||||||
isPlaying: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Prettier stable (2nd format)
|
|
||||||
type Props = {
|
|
||||||
// comment explaining the props
|
|
||||||
isPlaying: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
type Props =
|
|
||||||
// comment explaining the props
|
|
||||||
{
|
|
||||||
isPlaying: boolean,
|
|
||||||
};
|
|
||||||
```
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#### Support destructuring private proposal (#12276 by @sosukesuzuki)
|
|
||||||
|
|
||||||
Support [Stage 2 TC39 proposal destructuring private fields](https://github.com/tc39/proposal-destructuring-private) via [Babel 7.17](https://babeljs.io/blog/2022/02/02/7.17.0).
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Example
|
|
||||||
class Foo {
|
|
||||||
constructor() {
|
|
||||||
console.log(this.#x); // => 1
|
|
||||||
const { #x: x } = this;
|
|
||||||
console.log(x); // => 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#### Support decorator auto accessors syntax (#12299 by @sosukesuzuki)
|
|
||||||
|
|
||||||
Support auto accessors syntax that is introduced in [new decorators proposal](https://github.com/tc39/proposal-decorators).
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Example
|
|
||||||
@defineElement("my-class")
|
|
||||||
class C extends HTMLElement {
|
|
||||||
@reactive accessor clicked = false;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#### Fix idempotence issues caused by line comments after `=` in assignments (#12349 by @thorn0)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
const kochabCooieGameOnOboleUnweave = // !!!
|
|
||||||
rhubarbRhubarb(annularCooeedSplicesWalksWayWay);
|
|
||||||
|
|
||||||
// Prettier stable, first format
|
|
||||||
const kochabCooieGameOnOboleUnweave = rhubarbRhubarb( // !!!
|
|
||||||
annularCooeedSplicesWalksWayWay
|
|
||||||
);
|
|
||||||
|
|
||||||
// Prettier stable, second format
|
|
||||||
const kochabCooieGameOnOboleUnweave = rhubarbRhubarb(
|
|
||||||
// !!!
|
|
||||||
annularCooeedSplicesWalksWayWay
|
|
||||||
);
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
const kochabCooieGameOnOboleUnweave = // !!!
|
|
||||||
rhubarbRhubarb(annularCooeedSplicesWalksWayWay);
|
|
||||||
```
|
|
||||||
Whitespace-only changes.
@@ -1,36 +0,0 @@
|
|||||||
#### Fix comments inside map (#11920 by @fisker)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```scss
|
|
||||||
// Input
|
|
||||||
.ag-theme-balham {
|
|
||||||
@include ag-theme-balham(
|
|
||||||
(
|
|
||||||
foreground-color: $custom-foreground-color,
|
|
||||||
disabled-foreground-color: null, // TODO some comment
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
.ag-theme-balham {
|
|
||||||
@include ag-theme-balham(
|
|
||||||
(
|
|
||||||
foreground-color: $custom-foreground-color,
|
|
||||||
disabled-foreground-color: null,
|
|
||||||
r: null, // TODO som
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
.ag-theme-balham {
|
|
||||||
@include ag-theme-balham(
|
|
||||||
(
|
|
||||||
foreground-color: $custom-foreground-color,
|
|
||||||
disabled-foreground-color: null,
|
|
||||||
// TODO some comment
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#### Fixes printing parameters of a mixin named `selector()` (#12213 by @duailibe)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```css
|
|
||||||
/* Input */
|
|
||||||
@mixin selector($param: 'value') {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prettier stable */
|
|
||||||
@mixin selector($param: 'value) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prettier main */
|
|
||||||
@mixin selector($param: 'value') {
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#### Refactor printing definite assignment assertions (#12351 by @thorn0)
|
|
||||||
|
|
||||||
Also now definite assignment assertions are printed even when they aren't followed by type annotations, which is an error in TS but not a parse error.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```ts
|
|
||||||
// Input
|
|
||||||
let a!;
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
let a;
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
let a!;
|
|
||||||
```
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#### Print trailing comma for rest elements in tuple types (#12390 by @sosukesuzuki)
|
|
||||||
|
|
||||||
TypeScript allows to put rest elements in places other than the end of tuple types since [4.2](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-2.html#leadingmiddle-rest-elements-in-tuple-types).
|
|
||||||
Prettier now prints a trailing comma for the trailing rest element as the it may be followed by the next element.
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```tsx
|
|
||||||
// { trailingCommma: "all" }
|
|
||||||
|
|
||||||
// Input
|
|
||||||
type Foo = [
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
...RestElement,
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
type Foo = [
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
...RestElement
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
type Foo = [
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
Element,
|
|
||||||
...RestElement,
|
|
||||||
];
|
|
||||||
|
|
||||||
```
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#### Fix hangs on invalid `v-for` (#12113 by @fisker)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```jsx
|
|
||||||
// Input
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<div v-for=" a in ">aaaaa</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
// Prettier stable
|
|
||||||
// Hangs
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<div v-for=" a in ">aaaaa</div>
|
|
||||||
</div>
|
|
||||||
</template>;
|
|
||||||
```
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#### Allow `lang` attribute of `<template>` to be empty (#12394 by @HallvardMM)
|
|
||||||
|
|
||||||
Template tag should allow empty string lang="" or undefined lang
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```vue
|
|
||||||
<!-- Input -->
|
|
||||||
<template lang="">
|
|
||||||
<v-app-bar>
|
|
||||||
<v-menu offset-y>
|
|
||||||
<template></template>
|
|
||||||
</v-menu>
|
|
||||||
</v-app-bar>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template lang>
|
|
||||||
<v-app-bar>
|
|
||||||
<v-menu offset-y>
|
|
||||||
<template></template>
|
|
||||||
</v-menu>
|
|
||||||
</v-app-bar>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Prettier stable -->
|
|
||||||
SyntaxError: Unexpected closing tag "v-menu". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags (5:5)
|
|
||||||
[error] 3 | <v-menu offset-y>
|
|
||||||
[error] 4 | <template></template>
|
|
||||||
[error] > 5 | </v-menu>
|
|
||||||
[error] | ^^^^^^^^^
|
|
||||||
[error] 6 | </v-app-bar>
|
|
||||||
[error] 7 | </template>
|
|
||||||
|
|
||||||
<!-- Prettier main -->
|
|
||||||
<template lang="">
|
|
||||||
<v-app-bar>
|
|
||||||
<v-menu offset-y>
|
|
||||||
<template></template>
|
|
||||||
</v-menu>
|
|
||||||
</v-app-bar>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template lang>
|
|
||||||
<v-app-bar>
|
|
||||||
<v-menu offset-y>
|
|
||||||
<template></template>
|
|
||||||
</v-menu>
|
|
||||||
</v-app-bar>
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#### Fix unexpected deletion of block-literal lines which starts with U+3000 (#12305 by @Quramy)
|
|
||||||
|
|
||||||
<!-- prettier-ignore -->
|
|
||||||
```yaml
|
|
||||||
# Input
|
|
||||||
block_with_ideographic_space: |
|
|
||||||
line-content # This line starts with U+3000
|
|
||||||
|
|
||||||
# Prettier stable
|
|
||||||
block_with_ideographic_space: |
|
|
||||||
|
|
||||||
// Prettier main
|
|
||||||
block_with_ideographic_space: |
|
|
||||||
line-content # This line starts with U+3000
|
|
||||||
```
|
|
||||||
@@ -80,6 +80,7 @@
|
|||||||
"doctag",
|
"doctag",
|
||||||
"Dodds",
|
"Dodds",
|
||||||
"Dolzhykov",
|
"Dolzhykov",
|
||||||
|
"Doshi",
|
||||||
"dotfile",
|
"dotfile",
|
||||||
"dotfiles",
|
"dotfiles",
|
||||||
"duailibe",
|
"duailibe",
|
||||||
@@ -308,6 +309,7 @@
|
|||||||
"Stylesheet",
|
"Stylesheet",
|
||||||
"subvalue",
|
"subvalue",
|
||||||
"suchipi",
|
"suchipi",
|
||||||
|
"Suhail",
|
||||||
"supertypes",
|
"supertypes",
|
||||||
"Supprimer",
|
"Supprimer",
|
||||||
"swcrc",
|
"swcrc",
|
||||||
@@ -326,6 +328,7 @@
|
|||||||
"typecasted",
|
"typecasted",
|
||||||
"typecheck",
|
"typecheck",
|
||||||
"typeof",
|
"typeof",
|
||||||
|
"Ubie",
|
||||||
"Umidbek",
|
"Umidbek",
|
||||||
"unaries",
|
"unaries",
|
||||||
"uncook",
|
"uncook",
|
||||||
|
|||||||
+13
-13
@@ -32,8 +32,8 @@ See below for examples.
|
|||||||
### Global
|
### Global
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src="https://unpkg.com/prettier@2.5.1/standalone.js"></script>
|
<script src="https://unpkg.com/prettier@2.6.0/standalone.js"></script>
|
||||||
<script src="https://unpkg.com/prettier@2.5.1/parser-graphql.js"></script>
|
<script src="https://unpkg.com/prettier@2.6.0/parser-graphql.js"></script>
|
||||||
<script>
|
<script>
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -48,8 +48,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserGraphql from "https://unpkg.com/prettier@2.5.1/esm/parser-graphql.mjs";
|
import parserGraphql from "https://unpkg.com/prettier@2.6.0/esm/parser-graphql.mjs";
|
||||||
|
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -62,8 +62,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
define([
|
define([
|
||||||
"https://unpkg.com/prettier@2.5.1/standalone.js",
|
"https://unpkg.com/prettier@2.6.0/standalone.js",
|
||||||
"https://unpkg.com/prettier@2.5.1/parser-graphql.js",
|
"https://unpkg.com/prettier@2.6.0/parser-graphql.js",
|
||||||
], (prettier, ...plugins) => {
|
], (prettier, ...plugins) => {
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -88,8 +88,8 @@ This syntax doesn’t necessarily work in the browser, but it can be used when b
|
|||||||
### Worker
|
### Worker
|
||||||
|
|
||||||
```js
|
```js
|
||||||
importScripts("https://unpkg.com/prettier@2.5.1/standalone.js");
|
importScripts("https://unpkg.com/prettier@2.6.0/standalone.js");
|
||||||
importScripts("https://unpkg.com/prettier@2.5.1/parser-graphql.js");
|
importScripts("https://unpkg.com/prettier@2.6.0/parser-graphql.js");
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
plugins: prettierPlugins,
|
plugins: prettierPlugins,
|
||||||
@@ -102,8 +102,8 @@ If you want to format [embedded code](options.md#embedded-language-formatting),
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserBabel from "https://unpkg.com/prettier@2.5.1/esm/parser-babel.mjs";
|
import parserBabel from "https://unpkg.com/prettier@2.6.0/esm/parser-babel.mjs";
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
||||||
@@ -119,9 +119,9 @@ The HTML code embedded in JavaScript stays unformatted because the `html` parser
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserBabel from "https://unpkg.com/prettier@2.5.1/esm/parser-babel.mjs";
|
import parserBabel from "https://unpkg.com/prettier@2.6.0/esm/parser-babel.mjs";
|
||||||
import parserHtml from "https://unpkg.com/prettier@2.5.1/esm/parser-html.mjs";
|
import parserHtml from "https://unpkg.com/prettier@2.6.0/esm/parser-html.mjs";
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
||||||
|
|||||||
+11
-12
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "prettier",
|
"name": "prettier",
|
||||||
"version": "2.6.0-dev",
|
"version": "2.7.0-dev",
|
||||||
"description": "Prettier is an opinionated code formatter",
|
"description": "Prettier is an opinionated code formatter",
|
||||||
"bin": "./bin/prettier.js",
|
"bin": "./bin/prettier.js",
|
||||||
"repository": "prettier/prettier",
|
"repository": "prettier/prettier",
|
||||||
@@ -25,16 +25,16 @@
|
|||||||
"@angular/compiler": "12.2.16",
|
"@angular/compiler": "12.2.16",
|
||||||
"@babel/code-frame": "7.16.7",
|
"@babel/code-frame": "7.16.7",
|
||||||
"@babel/parser": "7.17.3",
|
"@babel/parser": "7.17.3",
|
||||||
"@glimmer/syntax": "0.84.0",
|
"@glimmer/syntax": "0.84.1",
|
||||||
"@iarna/toml": "2.2.5",
|
"@iarna/toml": "2.2.5",
|
||||||
"@typescript-eslint/typescript-estree": "5.14.0",
|
"@typescript-eslint/typescript-estree": "5.15.0",
|
||||||
"acorn": "8.7.0",
|
"acorn": "8.7.0",
|
||||||
"acorn-jsx": "5.3.2",
|
"acorn-jsx": "5.3.2",
|
||||||
"angular-estree-parser": "2.5.0",
|
"angular-estree-parser": "2.5.0",
|
||||||
"angular-html-parser": "1.8.0",
|
"angular-html-parser": "1.8.0",
|
||||||
"c8": "7.10.0",
|
"c8": "7.10.0",
|
||||||
"camelcase": "6.3.0",
|
"camelcase": "6.3.0",
|
||||||
"chalk": "5.0.0",
|
"chalk": "5.0.1",
|
||||||
"ci-info": "3.3.0",
|
"ci-info": "3.3.0",
|
||||||
"cjk-regex": "2.0.1",
|
"cjk-regex": "2.0.1",
|
||||||
"cosmiconfig": "7.0.1",
|
"cosmiconfig": "7.0.1",
|
||||||
@@ -93,24 +93,23 @@
|
|||||||
"yaml-unist-parser": "1.3.1"
|
"yaml-unist-parser": "1.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "7.17.5",
|
"@babel/core": "7.17.7",
|
||||||
"@babel/preset-env": "7.16.11",
|
"@babel/preset-env": "7.16.11",
|
||||||
"@babel/types": "7.17.0",
|
"@babel/types": "7.17.0",
|
||||||
"@esbuild-plugins/node-modules-polyfill": "0.1.4",
|
"@esbuild-plugins/node-modules-polyfill": "0.1.4",
|
||||||
"@glimmer/reference": "0.84.0",
|
"@glimmer/reference": "0.84.1",
|
||||||
"@jest/globals": "27.4.2",
|
"@jest/globals": "27.4.2",
|
||||||
"@prettier/jest-light-runner": "file:./tests/config/jest-light-runner",
|
"@prettier/jest-light-runner": "file:./tests/config/jest-light-runner",
|
||||||
"@types/estree": "0.0.51",
|
"@types/estree": "0.0.51",
|
||||||
"@types/jest": "27.4.1",
|
"@types/jest": "27.4.1",
|
||||||
"@typescript-eslint/eslint-plugin": "5.14.0",
|
"@typescript-eslint/eslint-plugin": "5.15.0",
|
||||||
"babel-jest": "27.5.1",
|
"babel-jest": "27.5.1",
|
||||||
"benchmark": "2.1.4",
|
"benchmark": "2.1.4",
|
||||||
"browserslist-to-esbuild": "1.1.1",
|
"browserslist-to-esbuild": "1.1.1",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cspell": "5.19.0",
|
"cspell": "5.19.2",
|
||||||
"enquirer": "2.3.6",
|
"enquirer": "2.3.6",
|
||||||
"esbuild": "0.14.25",
|
"esbuild": "0.14.27",
|
||||||
"esbuild-plugin-text-replace": "1.2.0",
|
|
||||||
"esbuild-visualizer": "0.3.1",
|
"esbuild-visualizer": "0.3.1",
|
||||||
"eslint": "8.11.0",
|
"eslint": "8.11.0",
|
||||||
"eslint-config-prettier": "8.5.0",
|
"eslint-config-prettier": "8.5.0",
|
||||||
@@ -119,7 +118,7 @@
|
|||||||
"eslint-plugin-import": "2.25.4",
|
"eslint-plugin-import": "2.25.4",
|
||||||
"eslint-plugin-jest": "26.1.1",
|
"eslint-plugin-jest": "26.1.1",
|
||||||
"eslint-plugin-prettier-internal-rules": "2.0.1",
|
"eslint-plugin-prettier-internal-rules": "2.0.1",
|
||||||
"eslint-plugin-react": "7.29.3",
|
"eslint-plugin-react": "7.29.4",
|
||||||
"eslint-plugin-regexp": "1.5.1",
|
"eslint-plugin-regexp": "1.5.1",
|
||||||
"eslint-plugin-unicorn": "41.0.0",
|
"eslint-plugin-unicorn": "41.0.0",
|
||||||
"esm-utils": "3.0.0",
|
"esm-utils": "3.0.0",
|
||||||
@@ -132,7 +131,7 @@
|
|||||||
"node-fetch": "3.2.3",
|
"node-fetch": "3.2.3",
|
||||||
"npm-run-all": "4.1.5",
|
"npm-run-all": "4.1.5",
|
||||||
"path-browserify": "1.0.1",
|
"path-browserify": "1.0.1",
|
||||||
"prettier": "2.5.1",
|
"prettier": "2.6.0",
|
||||||
"pretty-bytes": "5.6.0",
|
"pretty-bytes": "5.6.0",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"rollup-plugin-license": "2.6.1",
|
"rollup-plugin-license": "2.6.1",
|
||||||
|
|||||||
+65
-12
@@ -2,16 +2,17 @@ import path from "node:path";
|
|||||||
import createEsmUtils from "esm-utils";
|
import createEsmUtils from "esm-utils";
|
||||||
import esbuild from "esbuild";
|
import esbuild from "esbuild";
|
||||||
import { NodeModulesPolyfillPlugin as esbuildPluginNodeModulePolyfills } from "@esbuild-plugins/node-modules-polyfill";
|
import { NodeModulesPolyfillPlugin as esbuildPluginNodeModulePolyfills } from "@esbuild-plugins/node-modules-polyfill";
|
||||||
import esbuildPluginTextReplace from "esbuild-plugin-text-replace";
|
|
||||||
import browserslistToEsbuild from "browserslist-to-esbuild";
|
import browserslistToEsbuild from "browserslist-to-esbuild";
|
||||||
import { PROJECT_ROOT, DIST_DIR } from "../utils/index.mjs";
|
import { PROJECT_ROOT, DIST_DIR } from "../utils/index.mjs";
|
||||||
import esbuildPluginEvaluate from "./esbuild-plugins/evaluate.mjs";
|
import esbuildPluginEvaluate from "./esbuild-plugins/evaluate.mjs";
|
||||||
import esbuildPluginReplaceModule from "./esbuild-plugins/replace-module.mjs";
|
import esbuildPluginReplaceModule from "./esbuild-plugins/replace-module.mjs";
|
||||||
|
import esbuildPluginReplaceText from "./esbuild-plugins/replace-text.mjs";
|
||||||
import esbuildPluginLicense from "./esbuild-plugins/license.mjs";
|
import esbuildPluginLicense from "./esbuild-plugins/license.mjs";
|
||||||
import esbuildPluginUmd from "./esbuild-plugins/umd.mjs";
|
import esbuildPluginUmd from "./esbuild-plugins/umd.mjs";
|
||||||
import esbuildPluginInteropDefault from "./esbuild-plugins/interop-default.mjs";
|
import esbuildPluginInteropDefault from "./esbuild-plugins/interop-default.mjs";
|
||||||
import esbuildPluginVisualizer from "./esbuild-plugins/visualizer.mjs";
|
import esbuildPluginVisualizer from "./esbuild-plugins/visualizer.mjs";
|
||||||
import esbuildPluginStripNodeProtocol from "./esbuild-plugins/strip-node-protocol.mjs";
|
import esbuildPluginStripNodeProtocol from "./esbuild-plugins/strip-node-protocol.mjs";
|
||||||
|
import esbuildPluginThrowWarnings from "./esbuild-plugins/throw-warnings.mjs";
|
||||||
import bundles from "./config.mjs";
|
import bundles from "./config.mjs";
|
||||||
|
|
||||||
const { __dirname, readJsonSync, require } = createEsmUtils(import.meta);
|
const { __dirname, readJsonSync, require } = createEsmUtils(import.meta);
|
||||||
@@ -32,13 +33,21 @@ const bundledFiles = [
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
function* getEsbuildOptions(bundle, buildOptions) {
|
function* getEsbuildOptions(bundle, buildOptions) {
|
||||||
const replaceStrings = {
|
const replaceText = [
|
||||||
// `tslib` exports global variables
|
|
||||||
"createExporter(root": "createExporter({}",
|
|
||||||
|
|
||||||
// Use `require` directly
|
// Use `require` directly
|
||||||
"const require = createRequire(import.meta.url);": "",
|
{
|
||||||
};
|
file: '*',
|
||||||
|
find: "const require = createRequire(import.meta.url);",
|
||||||
|
replacement: "",
|
||||||
|
},
|
||||||
|
// Use `require` directly
|
||||||
|
// `tslib` exports global variables
|
||||||
|
{
|
||||||
|
file: require.resolve("tslib"),
|
||||||
|
find: "factory(createExporter(root",
|
||||||
|
replacement: "factory(createExporter({}",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
const define = {
|
const define = {
|
||||||
"process.env.PRETTIER_TARGET": JSON.stringify(bundle.target),
|
"process.env.PRETTIER_TARGET": JSON.stringify(bundle.target),
|
||||||
@@ -48,7 +57,11 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
|||||||
if (bundle.target === "universal") {
|
if (bundle.target === "universal") {
|
||||||
// We can't reference `process` in UMD bundles and this is
|
// We can't reference `process` in UMD bundles and this is
|
||||||
// an undocumented "feature"
|
// an undocumented "feature"
|
||||||
replaceStrings["process.env.PRETTIER_DEBUG"] = "globalThis.PRETTIER_DEBUG";
|
replaceText.push({
|
||||||
|
file: "*",
|
||||||
|
find: "process.env.PRETTIER_DEBUG",
|
||||||
|
replacement: "globalThis.PRETTIER_DEBUG",
|
||||||
|
});
|
||||||
|
|
||||||
define.process = JSON.stringify({ env: {}, argv: [] });
|
define.process = JSON.stringify({ env: {}, argv: [] });
|
||||||
|
|
||||||
@@ -119,10 +132,9 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
|||||||
esbuildPluginStripNodeProtocol(),
|
esbuildPluginStripNodeProtocol(),
|
||||||
esbuildPluginReplaceModule({ ...replaceModule, ...bundle.replaceModule }),
|
esbuildPluginReplaceModule({ ...replaceModule, ...bundle.replaceModule }),
|
||||||
bundle.target === "universal" && esbuildPluginNodeModulePolyfills(),
|
bundle.target === "universal" && esbuildPluginNodeModulePolyfills(),
|
||||||
esbuildPluginTextReplace({
|
esbuildPluginReplaceText({
|
||||||
include: /\.[cm]?js$/,
|
filter: /\.[cm]?js$/,
|
||||||
// TODO[@fisker]: Use RegExp when possible
|
replacements: [...replaceText, ...(bundle.replaceText ?? [])],
|
||||||
pattern: Object.entries({ ...replaceStrings, ...bundle.replace }),
|
|
||||||
}),
|
}),
|
||||||
buildOptions.onLicenseFound &&
|
buildOptions.onLicenseFound &&
|
||||||
esbuildPluginLicense({
|
esbuildPluginLicense({
|
||||||
@@ -134,14 +146,19 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
|||||||
}),
|
}),
|
||||||
buildOptions.reports &&
|
buildOptions.reports &&
|
||||||
esbuildPluginVisualizer({ formats: buildOptions.reports }),
|
esbuildPluginVisualizer({ formats: buildOptions.reports }),
|
||||||
|
esbuildPluginThrowWarnings(),
|
||||||
].filter(Boolean),
|
].filter(Boolean),
|
||||||
minify: shouldMinify,
|
minify: shouldMinify,
|
||||||
legalComments: "none",
|
legalComments: "none",
|
||||||
external: [...(bundle.external ?? [])],
|
external: [...(bundle.external ?? [])],
|
||||||
// Disable esbuild auto discover `tsconfig.json` file
|
// Disable esbuild auto discover `tsconfig.json` file
|
||||||
tsconfig: path.join(__dirname, "empty-tsconfig.json"),
|
tsconfig: path.join(__dirname, "empty-tsconfig.json"),
|
||||||
|
<<<<<<< HEAD
|
||||||
mainFields: ["module", "main"],
|
mainFields: ["module", "main"],
|
||||||
target: [...(bundle.esbuildTarget ?? ["node12"])],
|
target: [...(bundle.esbuildTarget ?? ["node12"])],
|
||||||
|
=======
|
||||||
|
target: [...(bundle.esbuildTarget ?? ["node10"])],
|
||||||
|
>>>>>>> main
|
||||||
logLevel: "error",
|
logLevel: "error",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -186,8 +203,44 @@ function* getEsbuildOptions(bundle, buildOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
async function runBuild(bundle, esbuildOptions) {
|
async function runBuild(bundle, esbuildOptions) {
|
||||||
await esbuild.build(esbuildOptions);
|
await esbuild.build(esbuildOptions);
|
||||||
|
=======
|
||||||
|
async function runBuild(bundle, esbuildOptions, buildOptions) {
|
||||||
|
if (!buildOptions.babel || bundle.skipBabel) {
|
||||||
|
await esbuild.build(esbuildOptions);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { format, plugins, outfile } = esbuildOptions;
|
||||||
|
|
||||||
|
await esbuild.build({
|
||||||
|
...esbuildOptions,
|
||||||
|
plugins: plugins.filter(({ name }) => name !== "umd"),
|
||||||
|
format: format === "umd" ? "cjs" : format,
|
||||||
|
minify: false,
|
||||||
|
target: undefined,
|
||||||
|
});
|
||||||
|
|
||||||
|
const text = await fs.readFile(outfile);
|
||||||
|
|
||||||
|
const { code } = await babel.transformAsync(text, {
|
||||||
|
filename: outfile,
|
||||||
|
...getBabelConfig(bundle),
|
||||||
|
});
|
||||||
|
await fs.writeFile(outfile, code);
|
||||||
|
|
||||||
|
await esbuild.build({
|
||||||
|
...esbuildOptions,
|
||||||
|
define: {},
|
||||||
|
plugins: plugins.filter(
|
||||||
|
({ name }) => name === "umd" || name === "throw-warnings"
|
||||||
|
),
|
||||||
|
entryPoints: [outfile],
|
||||||
|
allowOverwrite: true,
|
||||||
|
});
|
||||||
|
>>>>>>> main
|
||||||
}
|
}
|
||||||
|
|
||||||
async function* createBundle(bundle, buildOptions) {
|
async function* createBundle(bundle, buildOptions) {
|
||||||
|
|||||||
+153
-79
@@ -13,7 +13,7 @@ const { require } = createEsmUtils(import.meta);
|
|||||||
* @property {'core' | 'plugin'} type - it's a plugin bundle or core part of prettier
|
* @property {'core' | 'plugin'} type - it's a plugin bundle or core part of prettier
|
||||||
* @property {string[]} external - array of paths that should not be included in the final bundle
|
* @property {string[]} external - array of paths that should not be included in the final bundle
|
||||||
* @property {Object.<string, string | {code?: string, file?: string | URL}>} replaceModule - module replacement path or code
|
* @property {Object.<string, string | {code?: string, file?: string | URL}>} replaceModule - module replacement path or code
|
||||||
* @property {Object.<string, string>} replace - map of strings to replace when processing the bundle
|
* @property {{file: string, find: string, replacement: string}[]} replaceText - Text replacements
|
||||||
* @property {string[]} babelPlugins - babel plugins
|
* @property {string[]} babelPlugins - babel plugins
|
||||||
* @property {boolean?} minify - minify
|
* @property {boolean?} minify - minify
|
||||||
* @property {string[]?} esbuildTarget - ESBuild target
|
* @property {string[]?} esbuildTarget - ESBuild target
|
||||||
@@ -23,6 +23,20 @@ const { require } = createEsmUtils(import.meta);
|
|||||||
* @property {string[]} ignore - paths of CJS modules to ignore
|
* @property {string[]} ignore - paths of CJS modules to ignore
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
`diff` use deprecated folder mapping "./" in the "exports" field,
|
||||||
|
so we can't `require("diff/lib/diff/array.js")` directly.
|
||||||
|
To reduce the bundle size, replace the entry with smaller files.
|
||||||
|
|
||||||
|
We can switch to deep require once https://github.com/kpdecker/jsdiff/pull/351 get merged
|
||||||
|
*/
|
||||||
|
const replaceDiffPackageEntry = (file) => ({
|
||||||
|
[require.resolve("diff")]: path.join(
|
||||||
|
path.dirname(require.resolve("diff/package.json")),
|
||||||
|
file
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
/** @type {Bundle[]} */
|
/** @type {Bundle[]} */
|
||||||
const parsers = [
|
const parsers = [
|
||||||
{
|
{
|
||||||
@@ -30,70 +44,107 @@ const parsers = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-js/parse/flow.js",
|
input: "src/language-js/parse/flow.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
// `flow-parser` use this for `globalThis`, can't work in strictMode
|
// `flow-parser` use this for `globalThis`, can't work in strictMode
|
||||||
"(function(){return this}())": "(globalThis)",
|
{
|
||||||
},
|
file: require.resolve("flow-parser"),
|
||||||
|
find: "(function(){return this}())",
|
||||||
|
replacement: "(globalThis)",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-js/parse/typescript.js",
|
input: "src/language-js/parse/typescript.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
// `typescript/lib/typescript.js` expose extra global objects
|
|
||||||
// `TypeScript`, `toolsVersion`, `globalThis`
|
|
||||||
'typeof process === "undefined" || process.browser': "false",
|
|
||||||
'typeof globalThis === "object"': "true",
|
|
||||||
// `@typescript-eslint/typescript-estree` v4
|
// `@typescript-eslint/typescript-estree` v4
|
||||||
'require("globby")': "{}",
|
{
|
||||||
"extra.projects = prepareAndTransformProjects(":
|
file: "*",
|
||||||
"extra.projects = [] || prepareAndTransformProjects(",
|
find: 'require("globby")',
|
||||||
"process.versions.node": JSON.stringify("999.999.999"),
|
replacement: "{}",
|
||||||
"process.cwd()": JSON.stringify("/prettier-security-dirname-placeholder"),
|
},
|
||||||
// `rollup-plugin-polyfill-node` don't have polyfill for these modules
|
{
|
||||||
'require("perf_hooks")': "{}",
|
file: "*",
|
||||||
'require("inspector")': "{}",
|
find: "extra.projects = prepareAndTransformProjects(",
|
||||||
"_fs.realpathSync.native": "_fs.realpathSync && _fs.realpathSync.native",
|
replacement: "extra.projects = [] || prepareAndTransformProjects(",
|
||||||
// Remove useless `ts.sys`
|
},
|
||||||
"ts.sys = ": "ts.sys = undefined && ",
|
{
|
||||||
|
file: "*",
|
||||||
|
find: "process.versions.node",
|
||||||
|
replacement: JSON.stringify("999.999.999"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "*",
|
||||||
|
find: "process.cwd()",
|
||||||
|
replacement: JSON.stringify("/prettier-security-dirname-placeholder"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "*",
|
||||||
|
find: 'require("perf_hooks")',
|
||||||
|
replacement: "{}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "*",
|
||||||
|
find: 'require("inspector")',
|
||||||
|
replacement: "{}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "*",
|
||||||
|
find: "typescriptVersionIsAtLeast[version] = semverCheck(version);",
|
||||||
|
replacement: "typescriptVersionIsAtLeast[version] = true;",
|
||||||
|
},
|
||||||
|
|
||||||
// Remove useless language service
|
...Object.entries({
|
||||||
"ts.realizeDiagnostics = ": "ts.realizeDiagnostics = undefined && ",
|
// `typescript/lib/typescript.js` expose extra global objects
|
||||||
"ts.TypeScriptServicesFactory = ":
|
// `TypeScript`, `toolsVersion`, `globalThis`
|
||||||
"ts.TypeScriptServicesFactory = undefined && ",
|
'typeof process === "undefined" || process.browser': "false",
|
||||||
"var ShimBase = ": "var ShimBase = undefined && ",
|
'typeof globalThis === "object"': "true",
|
||||||
"var TypeScriptServicesFactory = ":
|
|
||||||
"var TypeScriptServicesFactory = undefined && ",
|
|
||||||
"var LanguageServiceShimObject = ":
|
|
||||||
"var LanguageServiceShimObject = undefined && ",
|
|
||||||
"var CoreServicesShimHostAdapter = ":
|
|
||||||
"var CoreServicesShimHostAdapter = undefined && ",
|
|
||||||
"var LanguageServiceShimHostAdapter = ":
|
|
||||||
"var LanguageServiceShimHostAdapter = undefined && ",
|
|
||||||
"var ScriptSnapshotShimAdapter = ":
|
|
||||||
"var ScriptSnapshotShimAdapter = undefined && ",
|
|
||||||
"var ClassifierShimObject = ": "var ClassifierShimObject = undefined && ",
|
|
||||||
"var CoreServicesShimObject = ":
|
|
||||||
"var CoreServicesShimObject = undefined && ",
|
|
||||||
"function simpleForwardCall(": "0 && function simpleForwardCall(",
|
|
||||||
"function forwardJSONCall(": "0 && function forwardJSONCall(",
|
|
||||||
"function forwardCall(": "0 && function forwardCall(",
|
|
||||||
"function realizeDiagnostics(": "0 && function realizeDiagnostics(",
|
|
||||||
"function realizeDiagnostic(": "0 && function realizeDiagnostic(",
|
|
||||||
"function convertClassifications(":
|
|
||||||
"0 && function convertClassifications(",
|
|
||||||
|
|
||||||
// Dynamic `require()`s
|
"_fs.realpathSync.native":
|
||||||
"ts.sys && ts.sys.require": "false",
|
"_fs.realpathSync && _fs.realpathSync.native",
|
||||||
"require(etwModulePath)": "undefined",
|
// Remove useless `ts.sys`
|
||||||
'require("source-map-support").install()': "",
|
"ts.sys = ": "ts.sys = undefined && ",
|
||||||
"require(modulePath)": "undefined",
|
|
||||||
// `node-semver` can't work with `@rollup/plugin-commonjs>=19.0.0`
|
// Remove useless language service
|
||||||
// https://github.com/rollup/plugins/issues/879
|
"ts.realizeDiagnostics = ": "ts.realizeDiagnostics = undefined && ",
|
||||||
// https://github.com/npm/node-semver/issues/381
|
"ts.TypeScriptServicesFactory = ":
|
||||||
"typescriptVersionIsAtLeast[version] = semverCheck(version);":
|
"ts.TypeScriptServicesFactory = undefined && ",
|
||||||
"typescriptVersionIsAtLeast[version] = true;",
|
"var ShimBase = ": "var ShimBase = undefined && ",
|
||||||
},
|
"var TypeScriptServicesFactory = ":
|
||||||
|
"var TypeScriptServicesFactory = undefined && ",
|
||||||
|
"var LanguageServiceShimObject = ":
|
||||||
|
"var LanguageServiceShimObject = undefined && ",
|
||||||
|
"var CoreServicesShimHostAdapter = ":
|
||||||
|
"var CoreServicesShimHostAdapter = undefined && ",
|
||||||
|
"var LanguageServiceShimHostAdapter = ":
|
||||||
|
"var LanguageServiceShimHostAdapter = undefined && ",
|
||||||
|
"var ScriptSnapshotShimAdapter = ":
|
||||||
|
"var ScriptSnapshotShimAdapter = undefined && ",
|
||||||
|
"var ClassifierShimObject = ":
|
||||||
|
"var ClassifierShimObject = undefined && ",
|
||||||
|
"var CoreServicesShimObject = ":
|
||||||
|
"var CoreServicesShimObject = undefined && ",
|
||||||
|
"function simpleForwardCall(": "0 && function simpleForwardCall(",
|
||||||
|
"function forwardJSONCall(": "0 && function forwardJSONCall(",
|
||||||
|
"function forwardCall(": "0 && function forwardCall(",
|
||||||
|
"function realizeDiagnostics(": "0 && function realizeDiagnostics(",
|
||||||
|
"function realizeDiagnostic(": "0 && function realizeDiagnostic(",
|
||||||
|
"function convertClassifications(":
|
||||||
|
"0 && function convertClassifications(",
|
||||||
|
|
||||||
|
// Dynamic `require()`s
|
||||||
|
"ts.sys && ts.sys.require": "false",
|
||||||
|
"require(etwModulePath)": "undefined",
|
||||||
|
'require("source-map-support").install()': "",
|
||||||
|
"require(modulePath)": "undefined",
|
||||||
|
}).map(([find, replacement]) => ({
|
||||||
|
file: require.resolve("typescript"),
|
||||||
|
find,
|
||||||
|
replacement,
|
||||||
|
})),
|
||||||
|
],
|
||||||
replaceModule: {
|
replaceModule: {
|
||||||
[require.resolve("debug")]: require.resolve("./shims/debug.cjs"),
|
[require.resolve("debug/src/browser.js")]:
|
||||||
|
require.resolve("./shims/debug.cjs"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -101,27 +152,43 @@ const parsers = [
|
|||||||
name: "prettierPlugins.espree",
|
name: "prettierPlugins.espree",
|
||||||
// TODO: Rename this file to `parser-acorn-and-espree.js` or find a better way
|
// TODO: Rename this file to `parser-acorn-and-espree.js` or find a better way
|
||||||
output: "parser-espree.js",
|
output: "parser-espree.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
"const Syntax = ": "const Syntax = undefined && ",
|
{
|
||||||
"var visitorKeys = ": "var visitorKeys = undefined && ",
|
file: require.resolve("espree"),
|
||||||
},
|
find: "const Syntax = (function() {",
|
||||||
|
replacement: "const Syntax = undefined && (function() {",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: require.resolve("espree"),
|
||||||
|
find: "var visitorKeys = require('eslint-visitor-keys');",
|
||||||
|
replacement: "var visitorKeys;",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-js/parse/meriyah.js",
|
input: "src/language-js/parse/meriyah.js",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-js/parse/angular.js",
|
input: "src/language-js/parse/angular.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
"@angular/compiler/src": "@angular/compiler/esm2015/src",
|
{
|
||||||
},
|
file: "*",
|
||||||
|
find: 'require("@angular/compiler/src/',
|
||||||
|
replacement: 'require("@angular/compiler/esm2015/src/',
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-css/parser-postcss.js",
|
input: "src/language-css/parser-postcss.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
// `postcss-values-parser` uses constructor.name, it will be changed by rollup or terser
|
{
|
||||||
// https://github.com/shellscape/postcss-values-parser/blob/c00f858ab8c86ce9f06fdb702e8f26376f467248/lib/parser.js#L499
|
// `postcss-values-parser` uses constructor.name, it will be changed by bundler
|
||||||
"node.constructor.name === 'Word'": "node.type === 'word'",
|
// https://github.com/shellscape/postcss-values-parser/blob/c00f858ab8c86ce9f06fdb702e8f26376f467248/lib/parser.js#L499
|
||||||
},
|
file: require.resolve("postcss-values-parser/lib/parser.js"),
|
||||||
|
find: "node.constructor.name === 'Word'",
|
||||||
|
replacement: "node.type === 'word'",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/language-graphql/parser-graphql.js",
|
input: "src/language-graphql/parser-graphql.js",
|
||||||
@@ -131,10 +198,6 @@ const parsers = [
|
|||||||
replaceModule: {
|
replaceModule: {
|
||||||
[require.resolve("parse-entities/decode-entity.browser.js")]:
|
[require.resolve("parse-entities/decode-entity.browser.js")]:
|
||||||
require.resolve("parse-entities/decode-entity.js"),
|
require.resolve("parse-entities/decode-entity.js"),
|
||||||
// Avoid `node:util` shim
|
|
||||||
[require.resolve("inherits")]: require.resolve(
|
|
||||||
"inherits/inherits_browser.js"
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -170,10 +233,14 @@ const parsers = [
|
|||||||
const coreBundles = [
|
const coreBundles = [
|
||||||
{
|
{
|
||||||
input: "src/index.js",
|
input: "src/index.js",
|
||||||
replace: {
|
replaceText: [
|
||||||
// from @iarna/toml/parse-string
|
{
|
||||||
"eval(\"require('util').inspect\")": "require('util').inspect",
|
file: require.resolve("@iarna/toml/lib/toml-parser.js"),
|
||||||
},
|
find: "const utilInspect = eval(\"require('util').inspect\")",
|
||||||
|
replacement: "const utilInspect = require('util').inspect",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
replaceModule: replaceDiffPackageEntry("lib/diff/array.js"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "src/document/index.js",
|
input: "src/document/index.js",
|
||||||
@@ -193,6 +260,7 @@ const coreBundles = [
|
|||||||
),
|
),
|
||||||
[createRequire(require.resolve("vnopts")).resolve("chalk")]:
|
[createRequire(require.resolve("vnopts")).resolve("chalk")]:
|
||||||
require.resolve("./shims/chalk.cjs"),
|
require.resolve("./shims/chalk.cjs"),
|
||||||
|
...replaceDiffPackageEntry("lib/diff/array.js"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -211,9 +279,15 @@ const coreBundles = [
|
|||||||
{
|
{
|
||||||
input: "src/common/third-party.cjs",
|
input: "src/common/third-party.cjs",
|
||||||
output: "third-party.js",
|
output: "third-party.js",
|
||||||
replace: {
|
replaceModule: replaceDiffPackageEntry("lib/patch/create.js"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "src/common/third-party.js",
|
||||||
|
replaceModule: {
|
||||||
// cosmiconfig@6 -> import-fresh can't find parentModule, since module is bundled
|
// cosmiconfig@6 -> import-fresh can't find parentModule, since module is bundled
|
||||||
"parentModule(__filename)": "__filename",
|
[require.resolve("parent-module")]: require.resolve(
|
||||||
|
"./shims/parent-module.cjs"
|
||||||
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
].map((bundle) => ({
|
].map((bundle) => ({
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import fs from "node:fs/promises";
|
||||||
|
|
||||||
|
function replaceText(text, options) {
|
||||||
|
return text.replaceAll(options.find, options.replacement);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function esbuildPluginReplaceText({
|
||||||
|
filter = /./,
|
||||||
|
replacements,
|
||||||
|
}) {
|
||||||
|
for (const replacement of replacements) {
|
||||||
|
if (!replacement.file) {
|
||||||
|
throw new Error("'file' option is required.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: "replace-text",
|
||||||
|
setup(build) {
|
||||||
|
build.onLoad({ filter }, async ({ path: file }) => {
|
||||||
|
let text = await fs.readFile(file, "utf8");
|
||||||
|
|
||||||
|
for (const replacement of replacements) {
|
||||||
|
if (replacement.file !== "*" && replacement.file !== file) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
text = replaceText(text, replacement);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { contents: text };
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
const ignoredWarnings = new Set([
|
||||||
|
// Duplicated case clause
|
||||||
|
"This case clause will never be evaluated because it duplicates an earlier case clause",
|
||||||
|
]);
|
||||||
|
|
||||||
|
export default function esbuildPluginThrowWarnings() {
|
||||||
|
return {
|
||||||
|
name: "throw-warnings",
|
||||||
|
setup(build) {
|
||||||
|
build.onEnd(({ warnings }) => {
|
||||||
|
for (const warning of warnings) {
|
||||||
|
if (ignoredWarnings.has(warning.text)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(warning);
|
||||||
|
throw new Error(warning.text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
module.exports = (file) => file;
|
||||||
@@ -49,6 +49,7 @@ const categories = [
|
|||||||
{ dir: "yaml", title: "YAML" },
|
{ dir: "yaml", title: "YAML" },
|
||||||
{ dir: "api", title: "API" },
|
{ dir: "api", title: "API" },
|
||||||
{ dir: "cli", title: "CLI" },
|
{ dir: "cli", title: "CLI" },
|
||||||
|
{ dir: "misc", title: "Miscellaneous" },
|
||||||
];
|
];
|
||||||
|
|
||||||
const categoriesByDir = new Map(
|
const categoriesByDir = new Map(
|
||||||
@@ -68,12 +69,17 @@ for (const dir of changelogUnreleasedDirs) {
|
|||||||
|
|
||||||
rimraf.sync(postGlob);
|
rimraf.sync(postGlob);
|
||||||
|
|
||||||
|
const introFileData = fs.readFileSync(introFile, "utf8").trim();
|
||||||
|
|
||||||
|
const TRUNCATE_COMMENT = "<!--truncate-->";
|
||||||
|
const shouldPrintTruncate = introFileData.includes(TRUNCATE_COMMENT);
|
||||||
|
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
postFile,
|
postFile,
|
||||||
replaceVersions(
|
replaceVersions(
|
||||||
[
|
[
|
||||||
fs.readFileSync(introFile, "utf8").trim(),
|
introFileData,
|
||||||
"<!--truncate-->",
|
shouldPrintTruncate ? TRUNCATE_COMMENT : "",
|
||||||
...printEntriesWithTitle({
|
...printEntriesWithTitle({
|
||||||
title: "Highlights",
|
title: "Highlights",
|
||||||
filter: (entry) => entry.section === "highlight",
|
filter: (entry) => entry.section === "highlight",
|
||||||
@@ -90,7 +96,9 @@ fs.writeFileSync(
|
|||||||
title: "Other Changes",
|
title: "Other Changes",
|
||||||
filter: (entry) => !entry.section,
|
filter: (entry) => !entry.section,
|
||||||
}),
|
}),
|
||||||
].join("\n\n") + "\n",
|
]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join("\n\n") + "\n",
|
||||||
previousVersion,
|
previousVersion,
|
||||||
version
|
version
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ async function run() {
|
|||||||
"./steps/update-changelog.js",
|
"./steps/update-changelog.js",
|
||||||
"./steps/push-to-git.js",
|
"./steps/push-to-git.js",
|
||||||
"./steps/publish-to-npm.js",
|
"./steps/publish-to-npm.js",
|
||||||
"./steps/bump-prettier.js",
|
|
||||||
"./steps/update-dependents-count.js",
|
"./steps/update-dependents-count.js",
|
||||||
|
"./steps/bump-prettier.js",
|
||||||
"./steps/post-publish-steps.js",
|
"./steps/post-publish-steps.js",
|
||||||
].map((step) => importDefault(step))
|
].map((step) => importDefault(step))
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -17,4 +17,5 @@ export const CHANGELOG_CATEGORIES = [
|
|||||||
"typescript",
|
"typescript",
|
||||||
"vue",
|
"vue",
|
||||||
"yaml",
|
"yaml",
|
||||||
|
"misc",
|
||||||
];
|
];
|
||||||
+1
-2
@@ -14,8 +14,7 @@ const { createIgnorer, errors } = prettierInternal;
|
|||||||
let diffModule;
|
let diffModule;
|
||||||
async function diff(a, b) {
|
async function diff(a, b) {
|
||||||
if (!diffModule) {
|
if (!diffModule) {
|
||||||
// Use `diff/lib/patch/create.js` instead of `diff` to reduce bundle size
|
({ default: diffModule } = await import("diff"));
|
||||||
({ default: diffModule } = await import("diff/lib/patch/create.js"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return diffModule.createTwoFilesPatch("", "", a, b, "", "", { context: 2 });
|
return diffModule.createTwoFilesPatch("", "", a, b, "", "", { context: 2 });
|
||||||
|
|||||||
+1
-2
@@ -1,5 +1,4 @@
|
|||||||
// Use `diff/lib/diff/array.js` instead of `diff` to reduce bundle size
|
import { diffArrays } from "diff";
|
||||||
import { diffArrays } from "diff/lib/diff/array.js";
|
|
||||||
|
|
||||||
import doc from "../document/index.js";
|
import doc from "../document/index.js";
|
||||||
import { getAlignmentSize } from "../common/util.js";
|
import { getAlignmentSize } from "../common/util.js";
|
||||||
|
|||||||
@@ -269,8 +269,14 @@ function normalizeApiOptions(options, optionInfos, opts) {
|
|||||||
|
|
||||||
function normalizeCliOptions(options, optionInfos, opts) {
|
function normalizeCliOptions(options, optionInfos, opts) {
|
||||||
/* istanbul ignore next */
|
/* istanbul ignore next */
|
||||||
if (process.env.NODE_ENV !== "production" && !opts.colorsModule) {
|
if (process.env.NODE_ENV !== "production") {
|
||||||
throw new Error("'colorsModule' option is required.");
|
if (!opts.colorsModule) {
|
||||||
|
throw new Error("'colorsModule' option is required.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!opts.levenshteinDistance) {
|
||||||
|
throw new Error("'levenshteinDistance' option is required.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return normalizeOptions(options, optionInfos, { isCLI: true, ...opts });
|
return normalizeOptions(options, optionInfos, { isCLI: true, ...opts });
|
||||||
|
|||||||
@@ -229,6 +229,8 @@ function runSpec(fixtures, parsers, options) {
|
|||||||
describe(title, () => {
|
describe(title, () => {
|
||||||
const formatOptions = {
|
const formatOptions = {
|
||||||
printWidth: 80,
|
printWidth: 80,
|
||||||
|
// Should not search plugins by default
|
||||||
|
pluginSearchDirs: false,
|
||||||
...options,
|
...options,
|
||||||
filepath: filename,
|
filepath: filename,
|
||||||
parser,
|
parser,
|
||||||
|
|||||||
@@ -23,10 +23,15 @@ function printOptions(options) {
|
|||||||
filepath,
|
filepath,
|
||||||
errors,
|
errors,
|
||||||
parser,
|
parser,
|
||||||
|
pluginSearchDirs,
|
||||||
|
|
||||||
...snapshotOptions
|
...snapshotOptions
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
|
if (pluginSearchDirs !== false) {
|
||||||
|
snapshotOptions.pluginSearchDirs = pluginSearchDirs;
|
||||||
|
}
|
||||||
|
|
||||||
const keys = Object.keys(snapshotOptions).sort();
|
const keys = Object.keys(snapshotOptions).sort();
|
||||||
return keys
|
return keys
|
||||||
.map((key) => `${key}: ${stringify(snapshotOptions[key])}`)
|
.map((key) => `${key}: ${stringify(snapshotOptions[key])}`)
|
||||||
|
|||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
// This file is generated automatically.
|
||||||
|
export {default} from "chalk";
|
||||||
|
export * from "chalk";
|
||||||
Vendored
+528
@@ -0,0 +1,528 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
// This file is generated automatically
|
||||||
|
var __create = Object.create;
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __defProps = Object.defineProperties;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
||||||
|
var __getProtoOf = Object.getPrototypeOf;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
||||||
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||||
|
var __spreadValues = (a, b) => {
|
||||||
|
for (var prop in b || (b = {}))
|
||||||
|
if (__hasOwnProp.call(b, prop))
|
||||||
|
__defNormalProp(a, prop, b[prop]);
|
||||||
|
if (__getOwnPropSymbols)
|
||||||
|
for (var prop of __getOwnPropSymbols(b)) {
|
||||||
|
if (__propIsEnum.call(b, prop))
|
||||||
|
__defNormalProp(a, prop, b[prop]);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
};
|
||||||
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// node_modules/chalk/source/index.js
|
||||||
|
var source_exports = {};
|
||||||
|
__export(source_exports, {
|
||||||
|
Chalk: () => Chalk,
|
||||||
|
chalkStderr: () => chalkStderr,
|
||||||
|
default: () => source_default,
|
||||||
|
supportsColor: () => stdoutColor,
|
||||||
|
supportsColorStderr: () => stderrColor
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(source_exports);
|
||||||
|
|
||||||
|
// node_modules/chalk/source/vendor/ansi-styles/index.js
|
||||||
|
var ANSI_BACKGROUND_OFFSET = 10;
|
||||||
|
var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
|
||||||
|
var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
|
||||||
|
var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
|
||||||
|
function assembleStyles() {
|
||||||
|
const codes = /* @__PURE__ */ new Map();
|
||||||
|
const styles2 = {
|
||||||
|
modifier: {
|
||||||
|
reset: [0, 0],
|
||||||
|
bold: [1, 22],
|
||||||
|
dim: [2, 22],
|
||||||
|
italic: [3, 23],
|
||||||
|
underline: [4, 24],
|
||||||
|
overline: [53, 55],
|
||||||
|
inverse: [7, 27],
|
||||||
|
hidden: [8, 28],
|
||||||
|
strikethrough: [9, 29]
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
black: [30, 39],
|
||||||
|
red: [31, 39],
|
||||||
|
green: [32, 39],
|
||||||
|
yellow: [33, 39],
|
||||||
|
blue: [34, 39],
|
||||||
|
magenta: [35, 39],
|
||||||
|
cyan: [36, 39],
|
||||||
|
white: [37, 39],
|
||||||
|
blackBright: [90, 39],
|
||||||
|
redBright: [91, 39],
|
||||||
|
greenBright: [92, 39],
|
||||||
|
yellowBright: [93, 39],
|
||||||
|
blueBright: [94, 39],
|
||||||
|
magentaBright: [95, 39],
|
||||||
|
cyanBright: [96, 39],
|
||||||
|
whiteBright: [97, 39]
|
||||||
|
},
|
||||||
|
bgColor: {
|
||||||
|
bgBlack: [40, 49],
|
||||||
|
bgRed: [41, 49],
|
||||||
|
bgGreen: [42, 49],
|
||||||
|
bgYellow: [43, 49],
|
||||||
|
bgBlue: [44, 49],
|
||||||
|
bgMagenta: [45, 49],
|
||||||
|
bgCyan: [46, 49],
|
||||||
|
bgWhite: [47, 49],
|
||||||
|
bgBlackBright: [100, 49],
|
||||||
|
bgRedBright: [101, 49],
|
||||||
|
bgGreenBright: [102, 49],
|
||||||
|
bgYellowBright: [103, 49],
|
||||||
|
bgBlueBright: [104, 49],
|
||||||
|
bgMagentaBright: [105, 49],
|
||||||
|
bgCyanBright: [106, 49],
|
||||||
|
bgWhiteBright: [107, 49]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
styles2.color.gray = styles2.color.blackBright;
|
||||||
|
styles2.bgColor.bgGray = styles2.bgColor.bgBlackBright;
|
||||||
|
styles2.color.grey = styles2.color.blackBright;
|
||||||
|
styles2.bgColor.bgGrey = styles2.bgColor.bgBlackBright;
|
||||||
|
for (const [groupName, group] of Object.entries(styles2)) {
|
||||||
|
for (const [styleName, style] of Object.entries(group)) {
|
||||||
|
styles2[styleName] = {
|
||||||
|
open: `\x1B[${style[0]}m`,
|
||||||
|
close: `\x1B[${style[1]}m`
|
||||||
|
};
|
||||||
|
group[styleName] = styles2[styleName];
|
||||||
|
codes.set(style[0], style[1]);
|
||||||
|
}
|
||||||
|
Object.defineProperty(styles2, groupName, {
|
||||||
|
value: group,
|
||||||
|
enumerable: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Object.defineProperty(styles2, "codes", {
|
||||||
|
value: codes,
|
||||||
|
enumerable: false
|
||||||
|
});
|
||||||
|
styles2.color.close = "\x1B[39m";
|
||||||
|
styles2.bgColor.close = "\x1B[49m";
|
||||||
|
styles2.color.ansi = wrapAnsi16();
|
||||||
|
styles2.color.ansi256 = wrapAnsi256();
|
||||||
|
styles2.color.ansi16m = wrapAnsi16m();
|
||||||
|
styles2.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
|
||||||
|
styles2.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
||||||
|
styles2.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
||||||
|
Object.defineProperties(styles2, {
|
||||||
|
rgbToAnsi256: {
|
||||||
|
value: (red, green, blue) => {
|
||||||
|
if (red === green && green === blue) {
|
||||||
|
if (red < 8) {
|
||||||
|
return 16;
|
||||||
|
}
|
||||||
|
if (red > 248) {
|
||||||
|
return 231;
|
||||||
|
}
|
||||||
|
return Math.round((red - 8) / 247 * 24) + 232;
|
||||||
|
}
|
||||||
|
return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
|
||||||
|
},
|
||||||
|
enumerable: false
|
||||||
|
},
|
||||||
|
hexToRgb: {
|
||||||
|
value: (hex) => {
|
||||||
|
const matches = /(?<colorString>[a-f\d]{6}|[a-f\d]{3})/i.exec(hex.toString(16));
|
||||||
|
if (!matches) {
|
||||||
|
return [0, 0, 0];
|
||||||
|
}
|
||||||
|
let { colorString } = matches.groups;
|
||||||
|
if (colorString.length === 3) {
|
||||||
|
colorString = [...colorString].map((character) => character + character).join("");
|
||||||
|
}
|
||||||
|
const integer = Number.parseInt(colorString, 16);
|
||||||
|
return [
|
||||||
|
integer >> 16 & 255,
|
||||||
|
integer >> 8 & 255,
|
||||||
|
integer & 255
|
||||||
|
];
|
||||||
|
},
|
||||||
|
enumerable: false
|
||||||
|
},
|
||||||
|
hexToAnsi256: {
|
||||||
|
value: (hex) => styles2.rgbToAnsi256(...styles2.hexToRgb(hex)),
|
||||||
|
enumerable: false
|
||||||
|
},
|
||||||
|
ansi256ToAnsi: {
|
||||||
|
value: (code) => {
|
||||||
|
if (code < 8) {
|
||||||
|
return 30 + code;
|
||||||
|
}
|
||||||
|
if (code < 16) {
|
||||||
|
return 90 + (code - 8);
|
||||||
|
}
|
||||||
|
let red;
|
||||||
|
let green;
|
||||||
|
let blue;
|
||||||
|
if (code >= 232) {
|
||||||
|
red = ((code - 232) * 10 + 8) / 255;
|
||||||
|
green = red;
|
||||||
|
blue = red;
|
||||||
|
} else {
|
||||||
|
code -= 16;
|
||||||
|
const remainder = code % 36;
|
||||||
|
red = Math.floor(code / 36) / 5;
|
||||||
|
green = Math.floor(remainder / 6) / 5;
|
||||||
|
blue = remainder % 6 / 5;
|
||||||
|
}
|
||||||
|
const value = Math.max(red, green, blue) * 2;
|
||||||
|
if (value === 0) {
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
|
||||||
|
if (value === 2) {
|
||||||
|
result += 60;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
enumerable: false
|
||||||
|
},
|
||||||
|
rgbToAnsi: {
|
||||||
|
value: (red, green, blue) => styles2.ansi256ToAnsi(styles2.rgbToAnsi256(red, green, blue)),
|
||||||
|
enumerable: false
|
||||||
|
},
|
||||||
|
hexToAnsi: {
|
||||||
|
value: (hex) => styles2.ansi256ToAnsi(styles2.hexToAnsi256(hex)),
|
||||||
|
enumerable: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return styles2;
|
||||||
|
}
|
||||||
|
var ansiStyles = assembleStyles();
|
||||||
|
var ansi_styles_default = ansiStyles;
|
||||||
|
|
||||||
|
// node_modules/chalk/source/vendor/supports-color/index.js
|
||||||
|
var import_node_process = __toESM(require("process"), 1);
|
||||||
|
var import_node_os = __toESM(require("os"), 1);
|
||||||
|
var import_node_tty = __toESM(require("tty"), 1);
|
||||||
|
function hasFlag(flag, argv = import_node_process.default.argv) {
|
||||||
|
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
||||||
|
const position = argv.indexOf(prefix + flag);
|
||||||
|
const terminatorPosition = argv.indexOf("--");
|
||||||
|
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
||||||
|
}
|
||||||
|
var { env } = import_node_process.default;
|
||||||
|
var flagForceColor;
|
||||||
|
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
|
||||||
|
flagForceColor = 0;
|
||||||
|
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
|
||||||
|
flagForceColor = 1;
|
||||||
|
}
|
||||||
|
function envForceColor() {
|
||||||
|
if ("FORCE_COLOR" in env) {
|
||||||
|
if (env.FORCE_COLOR === "true") {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (env.FORCE_COLOR === "false") {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function translateLevel(level) {
|
||||||
|
if (level === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
level,
|
||||||
|
hasBasic: true,
|
||||||
|
has256: level >= 2,
|
||||||
|
has16m: level >= 3
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
||||||
|
const noFlagForceColor = envForceColor();
|
||||||
|
if (noFlagForceColor !== void 0) {
|
||||||
|
flagForceColor = noFlagForceColor;
|
||||||
|
}
|
||||||
|
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
||||||
|
if (forceColor === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (sniffFlags) {
|
||||||
|
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if (hasFlag("color=256")) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (haveStream && !streamIsTTY && forceColor === void 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
const min = forceColor || 0;
|
||||||
|
if (env.TERM === "dumb") {
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
if (import_node_process.default.platform === "win32") {
|
||||||
|
const osRelease = import_node_os.default.release().split(".");
|
||||||
|
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
|
||||||
|
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ("CI" in env) {
|
||||||
|
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
if ("TEAMCITY_VERSION" in env) {
|
||||||
|
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
||||||
|
}
|
||||||
|
if ("TF_BUILD" in env && "AGENT_NAME" in env) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (env.COLORTERM === "truecolor") {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if ("TERM_PROGRAM" in env) {
|
||||||
|
const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
||||||
|
switch (env.TERM_PROGRAM) {
|
||||||
|
case "iTerm.app":
|
||||||
|
return version >= 3 ? 3 : 2;
|
||||||
|
case "Apple_Terminal":
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (/-256(color)?$/i.test(env.TERM)) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ("COLORTERM" in env) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
function createSupportsColor(stream, options = {}) {
|
||||||
|
const level = _supportsColor(stream, __spreadValues({
|
||||||
|
streamIsTTY: stream && stream.isTTY
|
||||||
|
}, options));
|
||||||
|
return translateLevel(level);
|
||||||
|
}
|
||||||
|
var supportsColor = {
|
||||||
|
stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
|
||||||
|
stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
|
||||||
|
};
|
||||||
|
var supports_color_default = supportsColor;
|
||||||
|
|
||||||
|
// node_modules/chalk/source/utilities.js
|
||||||
|
function stringReplaceAll(string, substring, replacer) {
|
||||||
|
let index = string.indexOf(substring);
|
||||||
|
if (index === -1) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
const substringLength = substring.length;
|
||||||
|
let endIndex = 0;
|
||||||
|
let returnValue = "";
|
||||||
|
do {
|
||||||
|
returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
|
||||||
|
endIndex = index + substringLength;
|
||||||
|
index = string.indexOf(substring, endIndex);
|
||||||
|
} while (index !== -1);
|
||||||
|
returnValue += string.slice(endIndex);
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
|
||||||
|
let endIndex = 0;
|
||||||
|
let returnValue = "";
|
||||||
|
do {
|
||||||
|
const gotCR = string[index - 1] === "\r";
|
||||||
|
returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
|
||||||
|
endIndex = index + 1;
|
||||||
|
index = string.indexOf("\n", endIndex);
|
||||||
|
} while (index !== -1);
|
||||||
|
returnValue += string.slice(endIndex);
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/chalk/source/index.js
|
||||||
|
var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
|
||||||
|
var GENERATOR = Symbol("GENERATOR");
|
||||||
|
var STYLER = Symbol("STYLER");
|
||||||
|
var IS_EMPTY = Symbol("IS_EMPTY");
|
||||||
|
var levelMapping = [
|
||||||
|
"ansi",
|
||||||
|
"ansi",
|
||||||
|
"ansi256",
|
||||||
|
"ansi16m"
|
||||||
|
];
|
||||||
|
var styles = /* @__PURE__ */ Object.create(null);
|
||||||
|
var applyOptions = (object, options = {}) => {
|
||||||
|
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
||||||
|
throw new Error("The `level` option should be an integer from 0 to 3");
|
||||||
|
}
|
||||||
|
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
||||||
|
object.level = options.level === void 0 ? colorLevel : options.level;
|
||||||
|
};
|
||||||
|
var Chalk = class {
|
||||||
|
constructor(options) {
|
||||||
|
return chalkFactory(options);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var chalkFactory = (options) => {
|
||||||
|
const chalk2 = (...strings) => strings.join(" ");
|
||||||
|
applyOptions(chalk2, options);
|
||||||
|
Object.setPrototypeOf(chalk2, createChalk.prototype);
|
||||||
|
return chalk2;
|
||||||
|
};
|
||||||
|
function createChalk(options) {
|
||||||
|
return chalkFactory(options);
|
||||||
|
}
|
||||||
|
Object.setPrototypeOf(createChalk.prototype, Function.prototype);
|
||||||
|
for (const [styleName, style] of Object.entries(ansi_styles_default)) {
|
||||||
|
styles[styleName] = {
|
||||||
|
get() {
|
||||||
|
const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
|
||||||
|
Object.defineProperty(this, styleName, { value: builder });
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
styles.visible = {
|
||||||
|
get() {
|
||||||
|
const builder = createBuilder(this, this[STYLER], true);
|
||||||
|
Object.defineProperty(this, "visible", { value: builder });
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var getModelAnsi = (model, level, type, ...arguments_) => {
|
||||||
|
if (model === "rgb") {
|
||||||
|
if (level === "ansi16m") {
|
||||||
|
return ansi_styles_default[type].ansi16m(...arguments_);
|
||||||
|
}
|
||||||
|
if (level === "ansi256") {
|
||||||
|
return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
|
||||||
|
}
|
||||||
|
return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
|
||||||
|
}
|
||||||
|
if (model === "hex") {
|
||||||
|
return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
|
||||||
|
}
|
||||||
|
return ansi_styles_default[type][model](...arguments_);
|
||||||
|
};
|
||||||
|
var usedModels = ["rgb", "hex", "ansi256"];
|
||||||
|
for (const model of usedModels) {
|
||||||
|
styles[model] = {
|
||||||
|
get() {
|
||||||
|
const { level } = this;
|
||||||
|
return function(...arguments_) {
|
||||||
|
const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
|
||||||
|
return createBuilder(this, styler, this[IS_EMPTY]);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
|
||||||
|
styles[bgModel] = {
|
||||||
|
get() {
|
||||||
|
const { level } = this;
|
||||||
|
return function(...arguments_) {
|
||||||
|
const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
|
||||||
|
return createBuilder(this, styler, this[IS_EMPTY]);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var proto = Object.defineProperties(() => {
|
||||||
|
}, __spreadProps(__spreadValues({}, styles), {
|
||||||
|
level: {
|
||||||
|
enumerable: true,
|
||||||
|
get() {
|
||||||
|
return this[GENERATOR].level;
|
||||||
|
},
|
||||||
|
set(level) {
|
||||||
|
this[GENERATOR].level = level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
var createStyler = (open, close, parent) => {
|
||||||
|
let openAll;
|
||||||
|
let closeAll;
|
||||||
|
if (parent === void 0) {
|
||||||
|
openAll = open;
|
||||||
|
closeAll = close;
|
||||||
|
} else {
|
||||||
|
openAll = parent.openAll + open;
|
||||||
|
closeAll = close + parent.closeAll;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
open,
|
||||||
|
close,
|
||||||
|
openAll,
|
||||||
|
closeAll,
|
||||||
|
parent
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var createBuilder = (self, _styler, _isEmpty) => {
|
||||||
|
const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
|
||||||
|
Object.setPrototypeOf(builder, proto);
|
||||||
|
builder[GENERATOR] = self;
|
||||||
|
builder[STYLER] = _styler;
|
||||||
|
builder[IS_EMPTY] = _isEmpty;
|
||||||
|
return builder;
|
||||||
|
};
|
||||||
|
var applyStyle = (self, string) => {
|
||||||
|
if (self.level <= 0 || !string) {
|
||||||
|
return self[IS_EMPTY] ? "" : string;
|
||||||
|
}
|
||||||
|
let styler = self[STYLER];
|
||||||
|
if (styler === void 0) {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
const { openAll, closeAll } = styler;
|
||||||
|
if (string.includes("\x1B")) {
|
||||||
|
while (styler !== void 0) {
|
||||||
|
string = stringReplaceAll(string, styler.close, styler.open);
|
||||||
|
styler = styler.parent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const lfIndex = string.indexOf("\n");
|
||||||
|
if (lfIndex !== -1) {
|
||||||
|
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
||||||
|
}
|
||||||
|
return openAll + string + closeAll;
|
||||||
|
};
|
||||||
|
Object.defineProperties(createChalk.prototype, styles);
|
||||||
|
var chalk = createChalk();
|
||||||
|
var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
||||||
|
var source_default = chalk;
|
||||||
|
// Annotate the CommonJS export names for ESM import in node:
|
||||||
|
0 && (module.exports = {
|
||||||
|
Chalk,
|
||||||
|
chalkStderr,
|
||||||
|
supportsColor,
|
||||||
|
supportsColorStderr
|
||||||
|
});
|
||||||
@@ -0,0 +1,826 @@
|
|||||||
|
---
|
||||||
|
author: "Sosuke Suzuki (@sosukesuzuki)"
|
||||||
|
authorURL: "https://github.com/sosukesuzuki"
|
||||||
|
title: "Prettier 2.6: new singleAttributePerLine option and new JavaScript features!"
|
||||||
|
---
|
||||||
|
|
||||||
|
This release includes a new `singleAttributePerLine` option. This is an option to print only one attribute per line in Vue SFC templates, HTML, and JSX. Per our [Option Philosophy](https://prettier.io/docs/en/option-philosophy.html), we would prefer not to add such an option. However, there are many users who want this feature, and major style guides like [Airbnb’s JavaScript Style Guide](https://github.com/airbnb/javascript/blob/274c8d570155a05b016980294d4204c5711bce86/packages/eslint-config-airbnb/rules/react.js#L97-L99) and [Vue’s style guide](https://vuejs.org/style-guide/rules-strongly-recommended.html#multi-attribute-elements) recommend the single attribute per line style. A [PR](https://github.com/prettier/prettier/pull/6644) to add this feature was opened in October 2019, and both it and the [corresponding issue](https://github.com/prettier/prettier/issues/5501) have received a significant amount of support from users. For us it was a hard decision to add this option. We hope the addition of this option will benefit many users without significantly harming our principles.
|
||||||
|
|
||||||
|
We've also added support formatting for some new JavaScript syntax proposals via Babel.
|
||||||
|
|
||||||
|
<!--truncate-->
|
||||||
|
|
||||||
|
## Thanks to our sponsors!
|
||||||
|
|
||||||
|
As discussed in [a blog post from earlier this year](https://prettier.io/blog/2022/01/06/prettier-begins-paying-maintainers.html), we have begun paying our maintainers from funds received from our sponsors. We would like to thank our many sponsors who have made this possible! We’re especially grateful to the following companies and individuals, who have donated over $1,000 to us:
|
||||||
|
|
||||||
|
- [Frontend Masters](https://frontendmasters.com/)
|
||||||
|
- [Salesforce](https://www.salesforce.com/)
|
||||||
|
- [Indeed](https://indeed.com/)
|
||||||
|
- [Sentry](https://sentry.io/welcome/)
|
||||||
|
- [Airbnb](https://www.airbnb.com/)
|
||||||
|
- [LINE](https://engineering.linecorp.com/en/)
|
||||||
|
- [AMP Project](https://www.ampproject.org/)
|
||||||
|
- [InVision AG](https://www.ivx.com/)
|
||||||
|
- [Ubie](https://ubiehealth.com/)
|
||||||
|
- [Shogun Labs, Inc](https://getshogun.com/)
|
||||||
|
- [Underbelly](https://www.underbelly.is/)
|
||||||
|
- [Principal Financial Group](https://www.principal.com/about-us)
|
||||||
|
- [Suhail Doshi](https://twitter.com/suhail)
|
||||||
|
|
||||||
|
If you enjoy Prettier and would like to support our work, consider sponsoring us directly via [our OpenCollective](https://opencollective.com/prettier) or by sponsoring the projects we depend on, including [typescript-eslint](https://opencollective.com/typescript-eslint), [remark](https://opencollective.com/unified), and [Babel](https://opencollective.com/babel).
|
||||||
|
|
||||||
|
<!--truncate-->
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
#### TypeScript 4.6 support ([#12400](https://github.com/prettier/prettier/pull/12400) by [@dependabot](https://github.com/dependabot))
|
||||||
|
|
||||||
|
We’ve updated the version of TypeScript that we use to parse TS code to [TypeScript 4.6](https://devblogs.microsoft.com/typescript/announcing-typescript-4-6/). However, no new syntax was added in this release of TypeScript so we have not had to make any other changes.
|
||||||
|
|
||||||
|
### HTML
|
||||||
|
|
||||||
|
#### Enforce Single Attribute Per Line ([#6644](https://github.com/prettier/prettier/pull/6644) by [@kankje](https://github.com/kankje))
|
||||||
|
|
||||||
|
Added the `singleAttributePerLine` option for specifying if Prettier should enforce single attribute per line in HTML, Vue and JSX.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```html
|
||||||
|
<!-- Input -->
|
||||||
|
<div data-a="1">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
<div data-a="1" data-b="2" data-c="3">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Prettier 2.5 -->
|
||||||
|
<div data-a="1">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
<div data-a="1" data-b="2" data-c="3">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Prettier 2.6, with `{"singleAttributePerLine": false}` -->
|
||||||
|
<div data-a="1">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
<div data-a="1" data-b="2" data-c="3">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Prettier 2.6, with `{"singleAttributePerLine": true}` -->
|
||||||
|
<div data-a="1">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
data-a="1"
|
||||||
|
data-b="2"
|
||||||
|
data-c="3"
|
||||||
|
>
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Other Changes
|
||||||
|
|
||||||
|
### JavaScript
|
||||||
|
|
||||||
|
#### Recognize waitForAsync as test-statement in Angular ([#11992](https://github.com/prettier/prettier/pull/11992) by [@HendrikN](https://github.com/HendrikN))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```js
|
||||||
|
// Input
|
||||||
|
test("foo bar", waitForAsync(() => {
|
||||||
|
const foo = "bar";
|
||||||
|
expect(foo).toEqual("bar")
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
test(
|
||||||
|
"foo bar",
|
||||||
|
waitForAsync(() => {
|
||||||
|
const foo = "bar";
|
||||||
|
expect(foo).toEqual("bar");
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
test("foo bar", waitForAsync(() => {
|
||||||
|
const foo = "bar";
|
||||||
|
expect(foo).toEqual("bar");
|
||||||
|
}));
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Preserve end-of-line comments after if statements without blocks ([#12017](https://github.com/prettier/prettier/pull/12017) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
if (condition1) expression1; // comment A
|
||||||
|
else if (condition2) expression2; // comment B
|
||||||
|
else expression3; // comment C
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
if (condition1) expression1;
|
||||||
|
// comment A
|
||||||
|
else if (condition2) expression2;
|
||||||
|
// comment B
|
||||||
|
else expression3; // comment C
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
if (condition1) expression1; // comment A
|
||||||
|
else if (condition2) expression2; // comment B
|
||||||
|
else expression3; // comment C
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Print comments for parenthesized TS keyword types with `babel-ts` parser ([#12070](https://github.com/prettier/prettier/pull/12070) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```ts
|
||||||
|
// Input
|
||||||
|
let foo: (
|
||||||
|
// comment
|
||||||
|
never
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
Error: Comment "comment" was not printed. Please report this error!
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
let foo: // comment
|
||||||
|
never;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Print end-of-line comments for `continue`/`break` statements ([#12075](https://github.com/prettier/prettier/pull/12075) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
for (;;) continue // comment
|
||||||
|
;
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
Error: Comment "comment" was not printed. Please report this error!
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
for (;;)
|
||||||
|
continue; // comment
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Inline `await` expressions in JSX ([#12088](https://github.com/prettier/prettier/pull/12088) & [#12109](https://github.com/prettier/prettier/pull/12109) by [@j-f1](https://github.com/j-f1))
|
||||||
|
|
||||||
|
`await` expressions in JSX are now inlined if their argument would be inlined.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
{await Promise.all(
|
||||||
|
someVeryLongExpression
|
||||||
|
)}
|
||||||
|
|
||||||
|
{await (
|
||||||
|
<div>Lorem ipsum ...</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
{
|
||||||
|
await Promise.all(
|
||||||
|
someVeryLongExpression
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
await (
|
||||||
|
<div>Lorem ipsum ...</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
{await Promise.all(
|
||||||
|
someVeryLongExpression
|
||||||
|
)}
|
||||||
|
|
||||||
|
{await (
|
||||||
|
<div>Lorem ipsum ...</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add `acorn` parser ([#12172](https://github.com/prettier/prettier/pull/12172) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
A new value for the `parser` option has been added: [`acorn`](https://github.com/acornjs/acorn) - A small, fast, JavaScript-based JavaScript parser.
|
||||||
|
|
||||||
|
#### Keep comments after `default` cases in the same line ([#12177](https://github.com/prettier/prettier/pull/12177) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
Keep comments right after `default` cases (in switch statements) in the same line, when possible.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
function read_statement() {
|
||||||
|
switch (peek_keyword()) {
|
||||||
|
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
||||||
|
return ImplDeclaration.read();
|
||||||
|
|
||||||
|
default: // expression;
|
||||||
|
return ExpressionStatement.read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
function read_statement() {
|
||||||
|
switch (peek_keyword()) {
|
||||||
|
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
||||||
|
return ImplDeclaration.read();
|
||||||
|
|
||||||
|
default:
|
||||||
|
// expression;
|
||||||
|
return ExpressionStatement.read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
function read_statement() {
|
||||||
|
switch (peek_keyword()) {
|
||||||
|
case Keyword.impl: // impl<T> Growling<T> for Wolf {}
|
||||||
|
return ImplDeclaration.read();
|
||||||
|
|
||||||
|
default: // expression;
|
||||||
|
return ExpressionStatement.read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Fix misplaced argument comment in abstract methods ([#12185](https://github.com/prettier/prettier/pull/12185) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```ts
|
||||||
|
// Input
|
||||||
|
abstract class Foo {
|
||||||
|
abstract bar(
|
||||||
|
/** comment explaining userId param */
|
||||||
|
userId
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
abstract class Foo {
|
||||||
|
abstract bar(userId);
|
||||||
|
/** comment explaining userId param */
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
abstract class Foo {
|
||||||
|
abstract bar(
|
||||||
|
/** comment explaining userId param */
|
||||||
|
userId
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Fix typecast of superclass in class declarations ([#12222](https://github.com/prettier/prettier/pull/12222) & [#12226](https://github.com/prettier/prettier/pull/12226) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
This was a combination of two separate bugs: moving the comments before the superclass and adding multiple parenthesis around the superclass.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```js
|
||||||
|
// Input
|
||||||
|
class Foo extends /** @type {Type} */ (Bar) {}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
class Foo /** @type {Type} */ extends ((Bar)) {}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
class Foo extends /** @type {Type} */ (Bar) {}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add support for Unicode Set Notation in regular expressions ([#12241](https://github.com/prettier/prettier/pull/12241) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
The Stage 3 proposal for [Unicode Set Notation](https://github.com/tc39/proposal-regexp-set-notation/) in regular expressions is now supported via [Babel 7.17.0](https://babeljs.io/blog/2022/02/02/7.17.0).
|
||||||
|
|
||||||
|
See [the release blog post of Babel v7.17.0](https://babeljs.io/blog/2022/02/02/7.17.0#regexp-set-notation-and-properties-of-strings-14125httpsgithubcombabelbabelpull14125) and [the README of this proposal](https://github.com/tc39/proposal-regexp-set-notation/) for details. Also keep in mind our [policy on non-standardized syntax](https://prettier.io/docs/en/rationale.html#disclaimer-about-non-standard-syntax) before using this proposed syntax feature with Prettier.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Examples
|
||||||
|
|
||||||
|
/[\p{Decimal_Number}--[0-9]]/v; // Non-ASCII decimal digits
|
||||||
|
|
||||||
|
"Did you see the 👩🏿❤️💋👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿❤️💋👩🏾"]
|
||||||
|
|
||||||
|
/[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add parens to `ClassExpression` with decorators ([#12260](https://github.com/prettier/prettier/pull/12260) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```js
|
||||||
|
// Input
|
||||||
|
(@f() class {});
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
@f()
|
||||||
|
class {};
|
||||||
|
|
||||||
|
// Prettier 2.5 (Second format)
|
||||||
|
SyntaxError: A class name is required. (2:7)
|
||||||
|
1 | @f()
|
||||||
|
> 2 | class {};
|
||||||
|
| ^
|
||||||
|
3 |
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
(
|
||||||
|
@f()
|
||||||
|
class {}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Improve printing of comments in type aliases in Flow & TS ([#12268](https://github.com/prettier/prettier/pull/12268) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
For Flow, the comments will now be more aligned to how we print comments in assignments where the right-hand side is an object expression:
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```js
|
||||||
|
// Input
|
||||||
|
type Props = // comment explaining the props
|
||||||
|
{
|
||||||
|
isPlaying: boolean
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
// comment explaining the props
|
||||||
|
type Props = {
|
||||||
|
isPlaying: boolean,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
type Props =
|
||||||
|
// comment explaining the props
|
||||||
|
{
|
||||||
|
isPlaying: boolean,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
This change also fixes an issue where a similarly-placed comment in TypeScript would be moved again after a second formatting operation:
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```ts
|
||||||
|
// Input
|
||||||
|
type Props = // comment explaining the props
|
||||||
|
{
|
||||||
|
isPlaying: boolean
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
type Props = { // comment explaining the props
|
||||||
|
isPlaying: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prettier 2.5 (2nd format)
|
||||||
|
type Props = {
|
||||||
|
// comment explaining the props
|
||||||
|
isPlaying: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
type Props =
|
||||||
|
// comment explaining the props
|
||||||
|
{
|
||||||
|
isPlaying: boolean,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add support for destructuring of private fields ([#12276](https://github.com/prettier/prettier/pull/12276) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
The Stage 2 TC39 proposal for [destructuring of private fields](https://github.com/tc39/proposal-destructuring-private) is now supported via [Babel 7.17](https://babeljs.io/blog/2022/02/02/7.17.0). Please read our [policy on non-standardized syntax](https://prettier.io/docs/en/rationale.html#disclaimer-about-non-standard-syntax) before you decide to use this proposed syntax feature with Prettier.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Example
|
||||||
|
class Foo {
|
||||||
|
constructor() {
|
||||||
|
console.log(this.#x); // => 1
|
||||||
|
const { #x: x } = this;
|
||||||
|
console.log(x); // => 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Support decorator auto accessors syntax ([#12299](https://github.com/prettier/prettier/pull/12299) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
Support auto accessors syntax that is introduced in [new decorators proposal](https://github.com/tc39/proposal-decorators). Please read our [policy on non-standardized syntax](https://prettier.io/docs/en/rationale.html#disclaimer-about-non-standard-syntax) before you decide to use this proposed syntax feature with Prettier.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Example
|
||||||
|
@defineElement("my-class")
|
||||||
|
class C extends HTMLElement {
|
||||||
|
@reactive accessor clicked = false;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Fix idempotence issues caused by line comments after `=` in assignments ([#12349](https://github.com/prettier/prettier/pull/12349) by [@thorn0](https://github.com/thorn0))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
const kochabCooieGameOnOboleUnweave = // !!!
|
||||||
|
rhubarbRhubarb(annularCooeedSplicesWalksWayWay);
|
||||||
|
|
||||||
|
// Prettier 2.5, first format
|
||||||
|
const kochabCooieGameOnOboleUnweave = rhubarbRhubarb( // !!!
|
||||||
|
annularCooeedSplicesWalksWayWay
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prettier 2.5, second format
|
||||||
|
const kochabCooieGameOnOboleUnweave = rhubarbRhubarb(
|
||||||
|
// !!!
|
||||||
|
annularCooeedSplicesWalksWayWay
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
const kochabCooieGameOnOboleUnweave = // !!!
|
||||||
|
rhubarbRhubarb(annularCooeedSplicesWalksWayWay);
|
||||||
|
```
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
#### Refactor printing definite assignment assertions ([#12351](https://github.com/prettier/prettier/pull/12351) by [@thorn0](https://github.com/thorn0))
|
||||||
|
|
||||||
|
Definite assignment assertions are now printed even when they aren't followed by type annotations. This is an error in TypeScript, but TS is still able to parse the file.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```ts
|
||||||
|
// Input
|
||||||
|
let a!;
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
let a;
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
let a!;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Print trailing comma for rest elements in tuple types ([#12390](https://github.com/prettier/prettier/pull/12390) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
TypeScript has allowed rest elements in tuple types (`...T`) to have normal elements come after them since [TypeScript 4.2](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-2.html#leadingmiddle-rest-elements-in-tuple-types).
|
||||||
|
Prettier now prints a trailing comma for the trailing rest element (when trailing commas are enabled) for consistency and to reduce diffs if you decide to add more elements after the final element in the future.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```tsx
|
||||||
|
// { trailingCommma: "all" }
|
||||||
|
|
||||||
|
// Input
|
||||||
|
type Foo = [
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
...RestElement,
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
type Foo = [
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
...RestElement
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
type Foo = [
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
Element,
|
||||||
|
...RestElement,
|
||||||
|
];
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flow
|
||||||
|
|
||||||
|
#### Fix Flow's class declaration's `static` indexer formatting ([#12009](https://github.com/prettier/prettier/pull/12009) by [@gkz](https://github.com/gkz))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
declare class A {
|
||||||
|
static [string]: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
declare class A {
|
||||||
|
[string]: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
declare class A {
|
||||||
|
static [string]: boolean;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### CSS
|
||||||
|
|
||||||
|
#### Preserve blank lines in SCSS maps ([#12210](https://github.com/prettier/prettier/pull/12210) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
This change also applies to some PostCSS features with similar syntax.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```css
|
||||||
|
/* Input */
|
||||||
|
$colours: (
|
||||||
|
"text": $light-100,
|
||||||
|
|
||||||
|
"background-primary": $dark-300,
|
||||||
|
"background-secondary": $dark-200,
|
||||||
|
"background-tertiary": $dark-100
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Prettier 2.5 */
|
||||||
|
$colours: (
|
||||||
|
"text": $light-100,
|
||||||
|
"background-primary": $dark-300,
|
||||||
|
"background-secondary": $dark-200,
|
||||||
|
"background-tertiary": $dark-100
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Prettier 2.6 */
|
||||||
|
$colours: (
|
||||||
|
"text": $light-100,
|
||||||
|
|
||||||
|
"background-primary": $dark-300,
|
||||||
|
"background-secondary": $dark-200,
|
||||||
|
"background-tertiary": $dark-100
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Fix lowercasing postcss values ([#12393](https://github.com/prettier/prettier/pull/12393) by [@niklasvatn](https://github.com/niklasvatn))
|
||||||
|
|
||||||
|
PostCSS values can start with digits. Prettier interprets this as a number followed by a unit in the example below.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```css
|
||||||
|
// Input
|
||||||
|
@value 4XLarge 28/36px;
|
||||||
|
|
||||||
|
.test {
|
||||||
|
font: 4XLarge Helvetica;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
@value 4XLarge 28/36px;
|
||||||
|
|
||||||
|
.test {
|
||||||
|
font: 4xlarge Helvetica;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
@value 4XLarge 28/36px;
|
||||||
|
|
||||||
|
.test {
|
||||||
|
font: 4XLarge Helvetica;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### SCSS
|
||||||
|
|
||||||
|
#### Fix comments inside map ([#11920](https://github.com/prettier/prettier/pull/11920) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```scss
|
||||||
|
// Input
|
||||||
|
.ag-theme-balham {
|
||||||
|
@include ag-theme-balham(
|
||||||
|
(
|
||||||
|
foreground-color: $custom-foreground-color,
|
||||||
|
disabled-foreground-color: null, // TODO some comment
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
.ag-theme-balham {
|
||||||
|
@include ag-theme-balham(
|
||||||
|
(
|
||||||
|
foreground-color: $custom-foreground-color,
|
||||||
|
disabled-foreground-color: null,
|
||||||
|
r: null, // TODO som
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
.ag-theme-balham {
|
||||||
|
@include ag-theme-balham(
|
||||||
|
(
|
||||||
|
foreground-color: $custom-foreground-color,
|
||||||
|
disabled-foreground-color: null,
|
||||||
|
// TODO some comment
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Fixes printing parameters of a mixin named `selector()` ([#12213](https://github.com/prettier/prettier/pull/12213) by [@duailibe](https://github.com/duailibe))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```css
|
||||||
|
/* Input */
|
||||||
|
@mixin selector($param: 'value') {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prettier 2.5 */
|
||||||
|
@mixin selector($param: 'value) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prettier 2.6 */
|
||||||
|
@mixin selector($param: 'value') {
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Vue
|
||||||
|
|
||||||
|
#### Fix hangs on invalid `v-for` ([#12113](https://github.com/prettier/prettier/pull/12113) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```jsx
|
||||||
|
// Input
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div v-for=" a in ">aaaaa</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
// Prettier 2.5
|
||||||
|
// Hangs
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div v-for=" a in ">aaaaa</div>
|
||||||
|
</div>
|
||||||
|
</template>;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Allow `lang` attribute of `<template>` to be empty ([#12394](https://github.com/prettier/prettier/pull/12394) by [@HallvardMM](https://github.com/HallvardMM))
|
||||||
|
|
||||||
|
Template tag should allow empty string lang="" or undefined lang
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```vue
|
||||||
|
<!-- Input -->
|
||||||
|
<template lang="">
|
||||||
|
<v-app-bar>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template></template>
|
||||||
|
</v-menu>
|
||||||
|
</v-app-bar>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template lang>
|
||||||
|
<v-app-bar>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template></template>
|
||||||
|
</v-menu>
|
||||||
|
</v-app-bar>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- Prettier 2.5 -->
|
||||||
|
SyntaxError: Unexpected closing tag "v-menu". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags (5:5)
|
||||||
|
[error] 3 | <v-menu offset-y>
|
||||||
|
[error] 4 | <template></template>
|
||||||
|
[error] > 5 | </v-menu>
|
||||||
|
[error] | ^^^^^^^^^
|
||||||
|
[error] 6 | </v-app-bar>
|
||||||
|
[error] 7 | </template>
|
||||||
|
|
||||||
|
<!-- Prettier 2.6 -->
|
||||||
|
<template lang="">
|
||||||
|
<v-app-bar>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template></template>
|
||||||
|
</v-menu>
|
||||||
|
</v-app-bar>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template lang>
|
||||||
|
<v-app-bar>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template></template>
|
||||||
|
</v-menu>
|
||||||
|
</v-app-bar>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ember / Handlebars
|
||||||
|
|
||||||
|
#### Correctly identify which backslashes are removed by glimmer ([#12302](https://github.com/prettier/prettier/pull/12302) by [@MattTheNub](https://github.com/MattTheNub))
|
||||||
|
|
||||||
|
This caused Prettier to unnecessarily add backslashes every time a file was formatted.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```hbs
|
||||||
|
{{! Input }}
|
||||||
|
<p>\</p>
|
||||||
|
<p>\\</p>
|
||||||
|
<p>\\\</p>
|
||||||
|
|
||||||
|
{{! Prettier 2.5 }}
|
||||||
|
<p>\\</p>
|
||||||
|
<p>\\\</p>
|
||||||
|
<p>\\\\</p>
|
||||||
|
|
||||||
|
{{! Prettier 2.6 }}
|
||||||
|
<p>\</p>
|
||||||
|
<p>\\</p>
|
||||||
|
<p>\\\</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
### GraphQL
|
||||||
|
|
||||||
|
#### Print descriptions on graphql schema definition nodes ([#11901](https://github.com/prettier/prettier/pull/11901) by [@trevor-scheer](https://github.com/trevor-scheer))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```graphql
|
||||||
|
# Input
|
||||||
|
"""SchemaDefinition description is lost"""
|
||||||
|
schema {
|
||||||
|
query: Query
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prettier 2.5
|
||||||
|
schema {
|
||||||
|
query: Query
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prettier 2.6
|
||||||
|
"""
|
||||||
|
SchemaDefinition description is lost
|
||||||
|
"""
|
||||||
|
schema {
|
||||||
|
query: Query
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### YAML
|
||||||
|
|
||||||
|
#### Fix unexpected deletion of block-literal lines which starts with U+3000 ([#12305](https://github.com/prettier/prettier/pull/12305) by [@Quramy](https://github.com/Quramy))
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```yaml
|
||||||
|
# Input
|
||||||
|
block_with_ideographic_space: |
|
||||||
|
line-content # This line starts with U+3000
|
||||||
|
|
||||||
|
# Prettier 2.5
|
||||||
|
block_with_ideographic_space: |
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
block_with_ideographic_space: |
|
||||||
|
line-content # This line starts with U+3000
|
||||||
|
```
|
||||||
|
|
||||||
|
### CLI
|
||||||
|
|
||||||
|
#### Add `--no-plugin-search` option to turn off plugin autoloading ([#10274](https://github.com/prettier/prettier/pull/10274) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
To turn off plugin autoloading, use `--no-plugin-search` when using Prettier CLI or add `{ pluginSearchDirs: false }` to options in `prettier.format()` or to the config file.
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
```cli
|
||||||
|
// Prettier 2.5
|
||||||
|
$ prettier . --plugin-search-dir=a-dir-without-plugins
|
||||||
|
|
||||||
|
// Prettier 2.6
|
||||||
|
$ prettier . --no-plugin-search
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Infer parser for `.swcrc` ([#12320](https://github.com/prettier/prettier/pull/12320) by [@sosukesuzuki](https://github.com/sosukesuzuki))
|
||||||
|
|
||||||
|
A [`.swcrc`](https://swc.rs/docs/configuration/swcrc) is handled using `json` parser.
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
|
||||||
|
#### Switch to `esbuild` ([#12055](https://github.com/prettier/prettier/pull/12055) by [@fisker](https://github.com/fisker))
|
||||||
|
|
||||||
|
We've switched our build process from Rollup to [esbuild](https://esbuild.github.io). esbuild is much faster and has improved our development experience. This is an internal change and should not affect users. If something isn’t working for you after upgrading, please [open an issue](https://github.com/prettier/prettier/issues/new?assignees=&labels=&template=integration.md)!
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
image: /images/languages/tools_yaml.svg
|
image: /images/languages/tools_yaml.svg
|
||||||
variants: []
|
variants: []
|
||||||
- name: Community Plugins
|
- name: Community Plugins
|
||||||
|
nameLink: ./docs/en/plugins.html#community-plugins
|
||||||
showName: true
|
showName: true
|
||||||
image: /images/languages/tools_wip.svg
|
image: /images/languages/tools_wip.svg
|
||||||
variants:
|
variants:
|
||||||
@@ -50,3 +51,4 @@
|
|||||||
- "[Ruby](https://github.com/prettier/plugin-ruby)"
|
- "[Ruby](https://github.com/prettier/plugin-ruby)"
|
||||||
- "[TOML](https://github.com/bd82/toml-tools/tree/master/packages/prettier-plugin-toml)"
|
- "[TOML](https://github.com/bd82/toml-tools/tree/master/packages/prettier-plugin-toml)"
|
||||||
- "[XML](https://github.com/prettier/plugin-xml)"
|
- "[XML](https://github.com/prettier/plugin-xml)"
|
||||||
|
- "[And more...](./docs/en/plugins.html#community-plugins)"
|
||||||
@@ -312,7 +312,7 @@ const UsersSection = ({ language }) => {
|
|||||||
<div style={{ marginLeft: ".7em", width: "260px" }}>
|
<div style={{ marginLeft: ".7em", width: "260px" }}>
|
||||||
<p>
|
<p>
|
||||||
More than{" "}
|
More than{" "}
|
||||||
<strong data-placeholder="dependent-github">3.5 million</strong>{" "}
|
<strong data-placeholder="dependent-github">3.9 million</strong>{" "}
|
||||||
dependent repositories on GitHub
|
dependent repositories on GitHub
|
||||||
</p>
|
</p>
|
||||||
<Button href="https://github.com/prettier/prettier/network/dependents">
|
<Button href="https://github.com/prettier/prettier/network/dependents">
|
||||||
@@ -330,7 +330,8 @@ const UsersSection = ({ language }) => {
|
|||||||
</a>
|
</a>
|
||||||
<div style={{ marginLeft: ".7em", width: "260px" }}>
|
<div style={{ marginLeft: ".7em", width: "260px" }}>
|
||||||
<p>
|
<p>
|
||||||
More than <strong data-placeholder="dependent-npm">10k</strong>{" "}
|
More than{" "}
|
||||||
|
<strong data-placeholder="dependent-npm">10.4k</strong>{" "}
|
||||||
dependent packages on npm
|
dependent packages on npm
|
||||||
</p>
|
</p>
|
||||||
<Button href="https://www.npmjs.com/browse/depended/prettier">
|
<Button href="https://www.npmjs.com/browse/depended/prettier">
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ See below for examples.
|
|||||||
### Global
|
### Global
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src="https://unpkg.com/prettier@2.5.1/standalone.js"></script>
|
<script src="https://unpkg.com/prettier@2.6.0/standalone.js"></script>
|
||||||
<script src="https://unpkg.com/prettier@2.5.1/parser-graphql.js"></script>
|
<script src="https://unpkg.com/prettier@2.6.0/parser-graphql.js"></script>
|
||||||
<script>
|
<script>
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -49,8 +49,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserGraphql from "https://unpkg.com/prettier@2.5.1/esm/parser-graphql.mjs";
|
import parserGraphql from "https://unpkg.com/prettier@2.6.0/esm/parser-graphql.mjs";
|
||||||
|
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -63,8 +63,8 @@ Note that the [`unpkg` field](https://unpkg.com/#examples) in Prettier’s `pack
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
define([
|
define([
|
||||||
"https://unpkg.com/prettier@2.5.1/standalone.js",
|
"https://unpkg.com/prettier@2.6.0/standalone.js",
|
||||||
"https://unpkg.com/prettier@2.5.1/parser-graphql.js",
|
"https://unpkg.com/prettier@2.6.0/parser-graphql.js",
|
||||||
], (prettier, ...plugins) => {
|
], (prettier, ...plugins) => {
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
@@ -89,8 +89,8 @@ This syntax doesn’t necessarily work in the browser, but it can be used when b
|
|||||||
### Worker
|
### Worker
|
||||||
|
|
||||||
```js
|
```js
|
||||||
importScripts("https://unpkg.com/prettier@2.5.1/standalone.js");
|
importScripts("https://unpkg.com/prettier@2.6.0/standalone.js");
|
||||||
importScripts("https://unpkg.com/prettier@2.5.1/parser-graphql.js");
|
importScripts("https://unpkg.com/prettier@2.6.0/parser-graphql.js");
|
||||||
prettier.format("type Query { hello: String }", {
|
prettier.format("type Query { hello: String }", {
|
||||||
parser: "graphql",
|
parser: "graphql",
|
||||||
plugins: prettierPlugins,
|
plugins: prettierPlugins,
|
||||||
@@ -103,8 +103,8 @@ If you want to format [embedded code](options.md#embedded-language-formatting),
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserBabel from "https://unpkg.com/prettier@2.5.1/esm/parser-babel.mjs";
|
import parserBabel from "https://unpkg.com/prettier@2.6.0/esm/parser-babel.mjs";
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
||||||
@@ -120,9 +120,9 @@ The HTML code embedded in JavaScript stays unformatted because the `html` parser
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import prettier from "https://unpkg.com/prettier@2.5.1/esm/standalone.mjs";
|
import prettier from "https://unpkg.com/prettier@2.6.0/esm/standalone.mjs";
|
||||||
import parserBabel from "https://unpkg.com/prettier@2.5.1/esm/parser-babel.mjs";
|
import parserBabel from "https://unpkg.com/prettier@2.6.0/esm/parser-babel.mjs";
|
||||||
import parserHtml from "https://unpkg.com/prettier@2.5.1/esm/parser-html.mjs";
|
import parserHtml from "https://unpkg.com/prettier@2.6.0/esm/parser-html.mjs";
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
prettier.format("const html=/* HTML */ `<DIV> </DIV>`", {
|
||||||
|
|||||||
@@ -201,3 +201,7 @@ $ prettier "**/*" --write --ignore-unknown
|
|||||||
## `--no-error-on-unmatched-pattern`
|
## `--no-error-on-unmatched-pattern`
|
||||||
|
|
||||||
Prevent errors when pattern is unmatched.
|
Prevent errors when pattern is unmatched.
|
||||||
|
|
||||||
|
## `--no-plugin-search`
|
||||||
|
|
||||||
|
Disable plugin autoloading.
|
||||||
@@ -174,3 +174,12 @@ You can also switch to the `flow` parser instead of the default `babel` for .js
|
|||||||
## Configuration Schema
|
## Configuration Schema
|
||||||
|
|
||||||
If you’d like a JSON schema to validate your configuration, one is available here: http://json.schemastore.org/prettierrc.
|
If you’d like a JSON schema to validate your configuration, one is available here: http://json.schemastore.org/prettierrc.
|
||||||
|
|
||||||
|
## EditorConfig
|
||||||
|
|
||||||
|
If `options.editorconfig` is `true` and an [`.editorconfig` file](https://editorconfig.org/) is in your project, Prettier will parse it and convert its properties to the corresponding Prettier configuration. This configuration will be overridden by `.prettierrc`, etc. Currently, the following EditorConfig properties are supported:
|
||||||
|
|
||||||
|
- `end_of_line`
|
||||||
|
- `indent_style`
|
||||||
|
- `indent_size`/`tab_width`
|
||||||
|
- `max_line_length`
|
||||||
@@ -14,6 +14,7 @@ Prettier is an opinionated code formatter with support for:
|
|||||||
- [TypeScript](https://www.typescriptlang.org/)
|
- [TypeScript](https://www.typescriptlang.org/)
|
||||||
- CSS, [Less](http://lesscss.org/), and [SCSS](https://sass-lang.com)
|
- CSS, [Less](http://lesscss.org/), and [SCSS](https://sass-lang.com)
|
||||||
- [HTML](https://en.wikipedia.org/wiki/HTML)
|
- [HTML](https://en.wikipedia.org/wiki/HTML)
|
||||||
|
- [Ember/Handlebars](https://handlebarsjs.com/)
|
||||||
- [JSON](https://json.org/)
|
- [JSON](https://json.org/)
|
||||||
- [GraphQL](https://graphql.org/)
|
- [GraphQL](https://graphql.org/)
|
||||||
- [Markdown](https://commonmark.org/), including [GFM](https://github.github.com/gfm/) and [MDX](https://mdxjs.com/)
|
- [Markdown](https://commonmark.org/), including [GFM](https://github.github.com/gfm/) and [MDX](https://mdxjs.com/)
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ Specify the line length that the printer will wrap on.
|
|||||||
| ------- | --------------------- | ------------------- |
|
| ------- | --------------------- | ------------------- |
|
||||||
| `80` | `--print-width <int>` | `printWidth: <int>` |
|
| `80` | `--print-width <int>` | `printWidth: <int>` |
|
||||||
|
|
||||||
|
Setting `max_line_length` in an [`.editorconfig` file](https://editorconfig.org/) will configure Prettier’s print width, unless overridden.
|
||||||
|
|
||||||
(If you don’t want line wrapping when formatting Markdown, you can set the [Prose Wrap](#prose-wrap) option to disable it.)
|
(If you don’t want line wrapping when formatting Markdown, you can set the [Prose Wrap](#prose-wrap) option to disable it.)
|
||||||
|
|
||||||
## Tab Width
|
## Tab Width
|
||||||
@@ -38,6 +40,8 @@ Specify the number of spaces per indentation-level.
|
|||||||
| ------- | ------------------- | ----------------- |
|
| ------- | ------------------- | ----------------- |
|
||||||
| `2` | `--tab-width <int>` | `tabWidth: <int>` |
|
| `2` | `--tab-width <int>` | `tabWidth: <int>` |
|
||||||
|
|
||||||
|
Setting `indent_size` or `tab_width` in an [`.editorconfig` file](https://editorconfig.org/) will configure Prettier’s tab width, unless overridden.
|
||||||
|
|
||||||
## Tabs
|
## Tabs
|
||||||
|
|
||||||
Indent lines with tabs instead of spaces.
|
Indent lines with tabs instead of spaces.
|
||||||
@@ -46,6 +50,8 @@ Indent lines with tabs instead of spaces.
|
|||||||
| ------- | ------------ | ----------------- |
|
| ------- | ------------ | ----------------- |
|
||||||
| `false` | `--use-tabs` | `useTabs: <bool>` |
|
| `false` | `--use-tabs` | `useTabs: <bool>` |
|
||||||
|
|
||||||
|
Setting `indent_style` in an [`.editorconfig` file](https://editorconfig.org/) will configure Prettier’s tab usage, unless overridden.
|
||||||
|
|
||||||
(Tabs will be used for _indentation_ but Prettier uses spaces to _align_ things, such as in ternaries.)
|
(Tabs will be used for _indentation_ but Prettier uses spaces to _align_ things, such as in ternaries.)
|
||||||
|
|
||||||
## Semicolons
|
## Semicolons
|
||||||
@@ -260,6 +266,7 @@ Valid options:
|
|||||||
- `"typescript"` (via [@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint)) _First available in v1.4.0_
|
- `"typescript"` (via [@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint)) _First available in v1.4.0_
|
||||||
- `"espree"` (via [espree](https://github.com/eslint/espree)) _First available in v2.2.0_
|
- `"espree"` (via [espree](https://github.com/eslint/espree)) _First available in v2.2.0_
|
||||||
- `"meriyah"` (via [meriyah](https://github.com/meriyah/meriyah)) _First available in v2.2.0_
|
- `"meriyah"` (via [meriyah](https://github.com/meriyah/meriyah)) _First available in v2.2.0_
|
||||||
|
- `"acorn"` (via [acorn](https://github.com/acornjs/acorn)) _First available in v2.6.0_
|
||||||
- `"css"` (via [postcss-scss](https://github.com/postcss/postcss-scss) and [postcss-less](https://github.com/shellscape/postcss-less), autodetects which to use) _First available in v1.7.1_
|
- `"css"` (via [postcss-scss](https://github.com/postcss/postcss-scss) and [postcss-less](https://github.com/shellscape/postcss-less), autodetects which to use) _First available in v1.7.1_
|
||||||
- `"scss"` (same parsers as `"css"`, prefers postcss-scss) _First available in v1.7.1_
|
- `"scss"` (same parsers as `"css"`, prefers postcss-scss) _First available in v1.7.1_
|
||||||
- `"less"` (same parsers as `"css"`, prefers postcss-less) _First available in v1.7.1_
|
- `"less"` (same parsers as `"css"`, prefers postcss-less) _First available in v1.7.1_
|
||||||
@@ -383,8 +390,8 @@ Whether or not to indent the code inside `<script>` and `<style>` tags in Vue fi
|
|||||||
|
|
||||||
Valid options:
|
Valid options:
|
||||||
|
|
||||||
- `"false"` - Do not indent script and style tags in Vue files.
|
- `false` - Do not indent script and style tags in Vue files.
|
||||||
- `"true"` - Indent script and style tags in Vue files.
|
- `true` - Indent script and style tags in Vue files.
|
||||||
|
|
||||||
| Default | CLI Override | API Override |
|
| Default | CLI Override | API Override |
|
||||||
| ------- | ------------------------------- | --------------------------------- |
|
| ------- | ------------------------------- | --------------------------------- |
|
||||||
@@ -426,6 +433,8 @@ Valid options:
|
|||||||
| ------- | ----------------------------------------------------------- | ---------------------------------------------------------- |
|
| ------- | ----------------------------------------------------------- | ---------------------------------------------------------- |
|
||||||
| `"lf"` | <code>--end-of-line <lf|crlf|cr|auto></code> | <code>endOfLine: "<lf|crlf|cr|auto>"</code> |
|
| `"lf"` | <code>--end-of-line <lf|crlf|cr|auto></code> | <code>endOfLine: "<lf|crlf|cr|auto>"</code> |
|
||||||
|
|
||||||
|
Setting `end_of_line` in an [`.editorconfig` file](https://editorconfig.org/) will configure Prettier’s end of line usage, unless overridden.
|
||||||
|
|
||||||
## Embedded Language Formatting
|
## Embedded Language Formatting
|
||||||
|
|
||||||
_First available in v2.1.0_
|
_First available in v2.1.0_
|
||||||
@@ -444,3 +453,18 @@ Valid options:
|
|||||||
| Default | CLI Override | API Override |
|
| Default | CLI Override | API Override |
|
||||||
| -------- | ------------------------------------ | ----------------------------------- |
|
| -------- | ------------------------------------ | ----------------------------------- |
|
||||||
| `"auto"` | `--embedded-language-formatting=off` | `embeddedLanguageFormatting: "off"` |
|
| `"auto"` | `--embedded-language-formatting=off` | `embeddedLanguageFormatting: "off"` |
|
||||||
|
|
||||||
|
## Single Attribute Per Line
|
||||||
|
|
||||||
|
_First available in v2.6.0_
|
||||||
|
|
||||||
|
Enforce single attribute per line in HTML, Vue and JSX.
|
||||||
|
|
||||||
|
Valid options:
|
||||||
|
|
||||||
|
- `false` - Do not enforce single attribute per line.
|
||||||
|
- `true` - Enforce single attribute per line.
|
||||||
|
|
||||||
|
| Default | CLI Override | API Override |
|
||||||
|
| ------- | ----------------------------- | -------------------------------- |
|
||||||
|
| `false` | `--single-attribute-per-line` | `singleAttributePerLine: <bool>` |
|
||||||
@@ -4,7 +4,7 @@ title: Plugins
|
|||||||
original_id: plugins
|
original_id: plugins
|
||||||
---
|
---
|
||||||
|
|
||||||
Plugins are ways of adding new languages to Prettier. Prettier’s own implementations of all languages are expressed using the plugin API. The core `prettier` package contains JavaScript and other web-focused languages built in. For additional languages you’ll need to install a plugin.
|
Plugins are ways of adding new languages or formatting rules to Prettier. Prettier’s own implementations of all languages are expressed using the plugin API. The core `prettier` package contains JavaScript and other web-focused languages built in. For additional languages you’ll need to install a plugin.
|
||||||
|
|
||||||
## Using Plugins
|
## Using Plugins
|
||||||
|
|
||||||
@@ -14,27 +14,40 @@ Plugins are automatically loaded if you have them installed in the same `node_mo
|
|||||||
|
|
||||||
When plugins cannot be found automatically, you can load them with:
|
When plugins cannot be found automatically, you can load them with:
|
||||||
|
|
||||||
- The [CLI](cli.md), via the `--plugin` and `--plugin-search-dir`:
|
- The [CLI](cli.md), via `--plugin-search-dir` and `--plugin`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
prettier --write main.foo --plugin-search-dir=./dir-with-plugins --plugin=./foo-plugin
|
prettier --write main.foo --plugin-search-dir=./dir-with-plugins --plugin=prettier-plugin-foo
|
||||||
```
|
```
|
||||||
|
|
||||||
> Tip: You can set `--plugin` or `--plugin-search-dir` options multiple times.
|
> Tip: You can set `--plugin-search-dir` or `--plugin` options multiple times.
|
||||||
|
|
||||||
- Or the [API](api.md), via the `plugins` and `pluginSearchDirs` options:
|
- The [API](api.md), via the `pluginSearchDirs` and `plugins` options:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
prettier.format("code", {
|
prettier.format("code", {
|
||||||
parser: "foo",
|
parser: "foo",
|
||||||
pluginSearchDirs: ["./dir-with-plugins"],
|
pluginSearchDirs: ["./dir-with-plugins"],
|
||||||
plugins: ["./foo-plugin"],
|
plugins: ["prettier-plugin-foo"],
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Prettier expects each of `pluginSearchDirs` to contain `node_modules` subdirectory, where `@prettier/plugin-*`, `@*/prettier-plugin-*` and `prettier-plugin-*` will be searched. For instance, this can be your project directory or the location of global npm modules.
|
- The [Configuration File](configuration.md):
|
||||||
|
|
||||||
Providing at least one path to `--plugin-search-dir`/`pluginSearchDirs` turns off plugin autoloading in the default directory (i.e. `node_modules` above `prettier` binary).
|
```json
|
||||||
|
{
|
||||||
|
"pluginSearchDirs": ["./dir-with-plugins"],
|
||||||
|
"plugins": ["prettier-plugin-foo"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`pluginSearchDirs` and `plugins` are independent and one does not require the other.
|
||||||
|
|
||||||
|
The paths that are provided to `pluginSearchDirs` will be searched for `@prettier/plugin-*`, `prettier-plugin-*`, and `@*/prettier-plugin-*`. For instance, these can be your project directory, a `node_modules` directory, the location of global npm modules, or any arbitrary directory that contains plugins.
|
||||||
|
|
||||||
|
Strings provided to `plugins` are ultimately passed to `require()`, so you can provide a module/package name, a path, or anything else `require()` takes. (`pluginSearchDirs` works the same way. That is, valid plugin paths that it finds are passed to `require()`.)
|
||||||
|
|
||||||
|
To turn off plugin autoloading, use `--no-plugin-search` when using Prettier CLI or add `{ pluginSearchDirs: false }` to options in `prettier.format()` or to the config file.
|
||||||
|
|
||||||
## Official Plugins
|
## Official Plugins
|
||||||
|
|
||||||
@@ -50,12 +63,13 @@ Providing at least one path to `--plugin-search-dir`/`pluginSearchDirs` turns of
|
|||||||
- [`prettier-plugin-erb`](https://github.com/adamzapasnik/prettier-plugin-erb) by [**@adamzapasnik**](https://github.com/adamzapasnik)
|
- [`prettier-plugin-erb`](https://github.com/adamzapasnik/prettier-plugin-erb) by [**@adamzapasnik**](https://github.com/adamzapasnik)
|
||||||
- [`prettier-plugin-go-template`](https://github.com/NiklasPor/prettier-plugin-go-template) by [**@NiklasPor**](https://github.com/NiklasPor)
|
- [`prettier-plugin-go-template`](https://github.com/NiklasPor/prettier-plugin-go-template) by [**@NiklasPor**](https://github.com/NiklasPor)
|
||||||
- [`prettier-plugin-java`](https://github.com/jhipster/prettier-java) by [**@JHipster**](https://github.com/jhipster)
|
- [`prettier-plugin-java`](https://github.com/jhipster/prettier-java) by [**@JHipster**](https://github.com/jhipster)
|
||||||
|
- [`prettier-plugin-jsonata`](https://github.com/Stedi/prettier-plugin-jsonata) by [**@Stedi**](https://github.com/Stedi)
|
||||||
- [`prettier-plugin-kotlin`](https://github.com/Angry-Potato/prettier-plugin-kotlin) by [**@Angry-Potato**](https://github.com/Angry-Potato)
|
- [`prettier-plugin-kotlin`](https://github.com/Angry-Potato/prettier-plugin-kotlin) by [**@Angry-Potato**](https://github.com/Angry-Potato)
|
||||||
- [`prettier-plugin-properties`](https://github.com/eemeli/prettier-plugin-properties) by [**@eemeli**](https://github.com/eemeli)
|
- [`prettier-plugin-properties`](https://github.com/eemeli/prettier-plugin-properties) by [**@eemeli**](https://github.com/eemeli)
|
||||||
|
- [`prettier-plugin-sh`](https://github.com/rx-ts/prettier/tree/master/packages/sh) by [**@JounQin**](https://github.com/JounQin)
|
||||||
- [`prettier-plugin-solidity`](https://github.com/prettier-solidity/prettier-plugin-solidity) by [**@mattiaerre**](https://github.com/mattiaerre)
|
- [`prettier-plugin-solidity`](https://github.com/prettier-solidity/prettier-plugin-solidity) by [**@mattiaerre**](https://github.com/mattiaerre)
|
||||||
- [`prettier-plugin-svelte`](https://github.com/UnwrittenFun/prettier-plugin-svelte) by [**@UnwrittenFun**](https://github.com/UnwrittenFun)
|
- [`prettier-plugin-svelte`](https://github.com/UnwrittenFun/prettier-plugin-svelte) by [**@UnwrittenFun**](https://github.com/UnwrittenFun)
|
||||||
- [`prettier-plugin-toml`](https://github.com/bd82/toml-tools/tree/master/packages/prettier-plugin-toml) by [**@bd82**](https://github.com/bd82)
|
- [`prettier-plugin-toml`](https://github.com/bd82/toml-tools/tree/master/packages/prettier-plugin-toml) by [**@bd82**](https://github.com/bd82)
|
||||||
- [`prettier-plugin-sh`](https://github.com/rx-ts/prettier/tree/master/packages/sh) by [**@JounQin**](https://github.com/JounQin)
|
|
||||||
|
|
||||||
## Developing Plugins
|
## Developing Plugins
|
||||||
|
|
||||||
|
|||||||
@@ -4,60 +4,18 @@ title: WebStorm Setup
|
|||||||
original_id: webstorm
|
original_id: webstorm
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using Prettier in WebStorm
|
## JetBrains IDEs (WebStorm, IntelliJ IDEA, PyCharm, etc.)
|
||||||
|
|
||||||
Use the `Reformat with Prettier` action (`Opt-Shift-Cmd-P` on macOS or `Alt-Shift-Ctrl-P` on Windows and Linux) to format the selected code, a file, or a whole directory.
|
WebStorm comes with built-in support for Prettier. If you’re using other JetBrains IDE like IntelliJ IDEA, PhpStorm, or PyCharm, make sure you have this [plugin](https://plugins.jetbrains.com/plugin/10456-prettier) installed and enabled in _Preferences / Settings | Plugins_.
|
||||||
|
|
||||||
To run Prettier on save in WebStorm 2020.1 or above, open _Preferences | Languages & Frameworks | JavaScript | Prettier_ and enable the option `Run on save for files`.
|
First, you need to install and configure Prettier. You can find instructions on how to do it [here](https://www.jetbrains.com/help/webstorm/prettier.html#ws_prettier_install).
|
||||||
|
|
||||||
By default, only JavaScript and TypeScript files will be formatted automatically. You can further configure what files will be updated using the [glob pattern](https://github.com/isaacs/node-glob#glob-primer).
|
Once it’s done, you can do a few things in your IDE. You can use the **Reformat with Prettier** action (_Opt+Shift+Cmd+P_ on macOS or _Alt+Shift+Ctrl+P_ on Windows and Linux) to format the selected code, a file, or a whole directory.
|
||||||
|
|
||||||
Don’t forget to install Prettier first.
|
You can also configure WebStorm to run Prettier on save (_Cmd+S/Ctrl+S_) or use it as the default formatter (_Opt+Cmd+L/Ctrl+Alt+L_). For this, open _Preferences / Settings | Languages & Frameworks | JavaScript | Prettier_ and tick the corresponding checkbox: **On save** and/or **On ‘Reformat Code’** action.
|
||||||
|
|
||||||
To use Prettier in IntelliJ IDEA, PhpStorm, PyCharm, and other JetBrains IDEs, please install this [plugin](https://plugins.jetbrains.com/plugin/10456-prettier).
|

|
||||||
|
|
||||||
To run Prettier on save in older IDE versions, you can set up a file watcher following the instructions below.
|
By default, WebStorm will apply formatting to all _.js, .ts, .jsx_, and _.tsx_ files that you’ve edited in your project. To apply the formatting to other file types, or to limit formatting to files located only in specific directories, you can customize the default configuration by using [glob patterns](https://github.com/isaacs/node-glob).
|
||||||
|
|
||||||
## Running Prettier on save using File Watcher
|
For more information, see [WebStorm online help](https://www.jetbrains.com/help/webstorm/prettier.html).
|
||||||
|
|
||||||
To automatically format your files using Prettier on save in WebStorm 2019.\* or earlier, you can use a [File Watcher](https://plugins.jetbrains.com/plugin/7177-file-watchers).
|
|
||||||
|
|
||||||
Go to _Preferences | Tools | File Watchers_ and click **+** to add a new watcher.
|
|
||||||
|
|
||||||
In Webstorm 2018.2, select Prettier from the list, review the configuration, add any additional arguments if needed, and click OK.
|
|
||||||
|
|
||||||
In older IDE versions, select Custom and do the following configuration:
|
|
||||||
|
|
||||||
- **Name**: _Prettier_ or any other name
|
|
||||||
- **File Type**: _JavaScript_ (or _Any_ if you want to run Prettier on all files)
|
|
||||||
- **Scope**: _Project Files_
|
|
||||||
- **Program**: full path to `.bin/prettier` or `.bin\prettier.cmd` in the project’s `node_module` folder. Or, if Prettier is installed globally, select `prettier` on macOS and Linux or `C:\Users\user_name\AppData\Roaming\npm\prettier.cmd` on Windows (or whatever `npm prefix -g` returns).
|
|
||||||
- **Arguments**: `--write [other options] $FilePath$`
|
|
||||||
- **Output paths to refresh**: `$FilePathRelativeToProjectRoot$`
|
|
||||||
- **Working directory**: `$ProjectFileDir$`
|
|
||||||
- **Environment variables**: add `COMPILE_PARTIAL=true` if you want to run Prettier on partials (like `_component.scss`)
|
|
||||||
- **Auto-save edited files to trigger the watcher**: Uncheck to reformat on Save only.
|
|
||||||
|
|
||||||
## Using Prettier with ESLint
|
|
||||||
|
|
||||||
If you are using ESLint with [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier), use the `Fix ESLint Problems` action to reformat the current file – find it using _Find Action_ (`Cmd/Ctrl-Shift-A`) or [add a keyboard shortcut](https://www.jetbrains.com/help/webstorm/configuring-keyboard-shortcuts.html) to it in _Preferences | Keymap_ and then use it.
|
|
||||||
|
|
||||||
Make sure that the ESLint integration is enabled in _Preferences | Languages & Frameworks | JavaScript | Code Quality Tools | ESLint_.
|
|
||||||
|
|
||||||
## Using Prettier as External Tool
|
|
||||||
|
|
||||||
Go to _Preferences | Tools | External Tools_ and click **+** to add a new tool. Let’s name it **Prettier**.
|
|
||||||
|
|
||||||
- **Program**: `prettier` on macOS and Linux or `C:\Users\user_name\AppData\Roaming\npm\prettier.cmd` on Windows (or whatever `npm prefix -g` returns), if Prettier is installed globally
|
|
||||||
- **Parameters**: `--write [other options] $FilePath$`
|
|
||||||
- **Working directory**: `$ProjectFileDir$`
|
|
||||||
|
|
||||||
> If Prettier is installed locally in your project, replace the path in **Program** with `$ProjectFileDir$/node_modules/.bin/prettier` on macOS and Linux or `$ProjectFileDir$\node_modules\.bin\prettier.cmd` on Windows.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Press `Cmd/Ctrl-Shift-A` (_Find Action_), search for _Prettier_, and then hit `Enter`.
|
|
||||||
|
|
||||||
It will run Prettier for the current file.
|
|
||||||
|
|
||||||
You can [add a keyboard shortcut](https://www.jetbrains.com/help/webstorm/configuring-keyboard-shortcuts.html) to run this External tool configuration in _Preferences | Keymap_.
|
|
||||||
@@ -40,18 +40,23 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34"
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34"
|
||||||
integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==
|
integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==
|
||||||
|
|
||||||
"@babel/core@7.17.5", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
|
"@babel/compat-data@^7.17.7":
|
||||||
version "7.17.5"
|
version "7.17.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225"
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2"
|
||||||
integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==
|
integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==
|
||||||
|
|
||||||
|
"@babel/core@7.17.7", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
|
||||||
|
version "7.17.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.7.tgz#f7c28228c83cdf2dbd1b9baa06eaf9df07f0c2f9"
|
||||||
|
integrity sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ampproject/remapping" "^2.1.0"
|
"@ampproject/remapping" "^2.1.0"
|
||||||
"@babel/code-frame" "^7.16.7"
|
"@babel/code-frame" "^7.16.7"
|
||||||
"@babel/generator" "^7.17.3"
|
"@babel/generator" "^7.17.7"
|
||||||
"@babel/helper-compilation-targets" "^7.16.7"
|
"@babel/helper-compilation-targets" "^7.17.7"
|
||||||
"@babel/helper-module-transforms" "^7.16.7"
|
"@babel/helper-module-transforms" "^7.17.7"
|
||||||
"@babel/helpers" "^7.17.2"
|
"@babel/helpers" "^7.17.7"
|
||||||
"@babel/parser" "^7.17.3"
|
"@babel/parser" "^7.17.7"
|
||||||
"@babel/template" "^7.16.7"
|
"@babel/template" "^7.16.7"
|
||||||
"@babel/traverse" "^7.17.3"
|
"@babel/traverse" "^7.17.3"
|
||||||
"@babel/types" "^7.17.0"
|
"@babel/types" "^7.17.0"
|
||||||
@@ -61,10 +66,10 @@
|
|||||||
json5 "^2.1.2"
|
json5 "^2.1.2"
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
|
|
||||||
"@babel/generator@^7.17.3", "@babel/generator@^7.7.2":
|
"@babel/generator@^7.17.3", "@babel/generator@^7.17.7", "@babel/generator@^7.7.2":
|
||||||
version "7.17.3"
|
version "7.17.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200"
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad"
|
||||||
integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==
|
integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.17.0"
|
"@babel/types" "^7.17.0"
|
||||||
jsesc "^2.5.1"
|
jsesc "^2.5.1"
|
||||||
@@ -85,12 +90,12 @@
|
|||||||
"@babel/helper-explode-assignable-expression" "^7.16.7"
|
"@babel/helper-explode-assignable-expression" "^7.16.7"
|
||||||
"@babel/types" "^7.16.7"
|
"@babel/types" "^7.16.7"
|
||||||
|
|
||||||
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7":
|
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7":
|
||||||
version "7.16.7"
|
version "7.17.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b"
|
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46"
|
||||||
integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==
|
integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/compat-data" "^7.16.4"
|
"@babel/compat-data" "^7.17.7"
|
||||||
"@babel/helper-validator-option" "^7.16.7"
|
"@babel/helper-validator-option" "^7.16.7"
|
||||||
browserslist "^4.17.5"
|
browserslist "^4.17.5"
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
@@ -181,19 +186,19 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.16.7"
|
"@babel/types" "^7.16.7"
|
||||||
|
|
||||||
"@babel/helper-module-transforms@^7.16.7":
|
"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7":
|
||||||
version "7.16.7"
|
version "7.17.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd"
|
||||||
integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==
|
integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-environment-visitor" "^7.16.7"
|
"@babel/helper-environment-visitor" "^7.16.7"
|
||||||
"@babel/helper-module-imports" "^7.16.7"
|
"@babel/helper-module-imports" "^7.16.7"
|
||||||
"@babel/helper-simple-access" "^7.16.7"
|
"@babel/helper-simple-access" "^7.17.7"
|
||||||
"@babel/helper-split-export-declaration" "^7.16.7"
|
"@babel/helper-split-export-declaration" "^7.16.7"
|
||||||
"@babel/helper-validator-identifier" "^7.16.7"
|
"@babel/helper-validator-identifier" "^7.16.7"
|
||||||
"@babel/template" "^7.16.7"
|
"@babel/template" "^7.16.7"
|
||||||
"@babel/traverse" "^7.16.7"
|
"@babel/traverse" "^7.17.3"
|
||||||
"@babel/types" "^7.16.7"
|
"@babel/types" "^7.17.0"
|
||||||
|
|
||||||
"@babel/helper-optimise-call-expression@^7.16.7":
|
"@babel/helper-optimise-call-expression@^7.16.7":
|
||||||
version "7.16.7"
|
version "7.16.7"
|
||||||
@@ -234,6 +239,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.16.7"
|
"@babel/types" "^7.16.7"
|
||||||
|
|
||||||
|
"@babel/helper-simple-access@^7.17.7":
|
||||||
|
version "7.17.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367"
|
||||||
|
integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.17.0"
|
||||||
|
|
||||||
"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
|
"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
|
||||||
version "7.16.0"
|
version "7.16.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
|
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
|
||||||
@@ -268,13 +280,13 @@
|
|||||||
"@babel/traverse" "^7.16.8"
|
"@babel/traverse" "^7.16.8"
|
||||||
"@babel/types" "^7.16.8"
|
"@babel/types" "^7.16.8"
|
||||||
|
|
||||||
"@babel/helpers@^7.17.2":
|
"@babel/helpers@^7.17.7":
|
||||||
version "7.17.2"
|
version "7.17.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417"
|
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.7.tgz#6fc0a24280fd00026e85424bbfed4650e76d7127"
|
||||||
integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==
|
integrity sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/template" "^7.16.7"
|
"@babel/template" "^7.16.7"
|
||||||
"@babel/traverse" "^7.17.0"
|
"@babel/traverse" "^7.17.3"
|
||||||
"@babel/types" "^7.17.0"
|
"@babel/types" "^7.17.0"
|
||||||
|
|
||||||
"@babel/highlight@^7.0.0", "@babel/highlight@^7.16.7":
|
"@babel/highlight@^7.0.0", "@babel/highlight@^7.16.7":
|
||||||
@@ -286,11 +298,16 @@
|
|||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/parser@7.17.3", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3":
|
"@babel/parser@7.17.3":
|
||||||
version "7.17.3"
|
version "7.17.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0"
|
||||||
integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==
|
integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==
|
||||||
|
|
||||||
|
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.7":
|
||||||
|
version "7.17.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.7.tgz#fc19b645a5456c8d6fdb6cecd3c66c0173902800"
|
||||||
|
integrity sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==
|
||||||
|
|
||||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
|
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7":
|
||||||
version "7.16.7"
|
version "7.16.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050"
|
||||||
@@ -911,7 +928,7 @@
|
|||||||
"@babel/parser" "^7.16.7"
|
"@babel/parser" "^7.16.7"
|
||||||
"@babel/types" "^7.16.7"
|
"@babel/types" "^7.16.7"
|
||||||
|
|
||||||
"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.2":
|
"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.2":
|
||||||
version "7.17.3"
|
version "7.17.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57"
|
||||||
integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==
|
integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==
|
||||||
@@ -940,10 +957,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||||
|
|
||||||
"@cspell/cspell-bundled-dicts@^5.19.0":
|
"@cspell/cspell-bundled-dicts@^5.19.2":
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.19.0.tgz#5c0670bae042efccaec94766eb600c47db9fedda"
|
resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.19.2.tgz#c20d05d0ff5f3850bb62a32a95e05abd94673936"
|
||||||
integrity sha512-0wgsBcxsJXgkei+aW4OgqEeuGFCk0KOa9VufNmVUTS9fO2zzkXu/0oeROjUFQSp+vwPjhatEpRGNehM69PbxdQ==
|
integrity sha512-R+12xDw5iLCJH3O0n8t1D7acZrO/bjuULU3rs3CEt+i84/85b27shywc3E/vOiOt9613bpFNOL52J27Tu52YPQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@cspell/dict-ada" "^2.0.0"
|
"@cspell/dict-ada" "^2.0.0"
|
||||||
"@cspell/dict-aws" "^2.0.0"
|
"@cspell/dict-aws" "^2.0.0"
|
||||||
@@ -985,15 +1002,15 @@
|
|||||||
"@cspell/dict-typescript" "^2.0.0"
|
"@cspell/dict-typescript" "^2.0.0"
|
||||||
"@cspell/dict-vue" "^2.0.2"
|
"@cspell/dict-vue" "^2.0.2"
|
||||||
|
|
||||||
"@cspell/cspell-pipe@^5.19.0":
|
"@cspell/cspell-pipe@^5.19.2":
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-5.19.0.tgz#a6cc4b7c47ed17ea5ccb4ca57cc534905fb09972"
|
resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-5.19.2.tgz#40bf46fae7aa0697f9ab9e36d165fe149b9b5f36"
|
||||||
integrity sha512-vHSGQxHfY1VjFnRB481DSNgOkbA/x59kpfCe6XQq3CzzmR7kiaUs3p478WU5JHNoTKdesoDFyct36VZT58/oWQ==
|
integrity sha512-mFFSn4ZgNgIOM0iBT0+xKBhRTQd/ecrWVvPfJpHxXIFwTt0neD19hqK54RDedLf8Hjds5cBHvS1EjMNARju/bQ==
|
||||||
|
|
||||||
"@cspell/cspell-types@^5.19.0":
|
"@cspell/cspell-types@^5.19.2":
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.19.0.tgz#ad127703481850d17368750723a6dfb33acf7d96"
|
resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-5.19.2.tgz#faae04c918dca53d6a266d86d00c3bd1682ebe16"
|
||||||
integrity sha512-AoQu0lNNoyWVSSBgjzozg9wso8dlVwiLrEcFqtT4mGPgxg6vD5AyBuGmkoP8qPfYC/YU28mIhDFOJ8qNuuOtHw==
|
integrity sha512-IkMQpa7IzoFm9NXzRz8Gp38f3aoMZf6xjT7J3FvWtIntPvkIFaY53R1/I9U/gujH/zflf2VmZGxoDuFg1VcD0g==
|
||||||
|
|
||||||
"@cspell/dict-ada@^2.0.0":
|
"@cspell/dict-ada@^2.0.0":
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@@ -1218,57 +1235,57 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07"
|
resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07"
|
||||||
integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc=
|
integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc=
|
||||||
|
|
||||||
"@glimmer/global-context@0.84.0":
|
"@glimmer/global-context@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.84.0.tgz#48c58e3f28572bef5972d61dd69ed78b7b23558a"
|
resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.84.1.tgz#2126f5dcf9b36e972e970df43c4068c470b275bf"
|
||||||
integrity sha512-xfq8CwHYifqP6ZfpYwIrBAZt1y6waObQHguWs1GfwLj9njoFaq29/9Ri42srq67ge/qGm3cIlXCvrEhk4AovmA==
|
integrity sha512-8/BxRRNJ3L//4A4KyMSGu4F0qz2z1D6KCzrenuxg5G4NDtd7NALTH4F28FXBkRstDfg4ic5yg/OqdyjDVyUyOQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@glimmer/env" "^0.1.7"
|
"@glimmer/env" "^0.1.7"
|
||||||
|
|
||||||
"@glimmer/interfaces@0.84.0":
|
"@glimmer/interfaces@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.84.0.tgz#fa5cb7189910c853d473db19133d2180d813c0b7"
|
resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.84.1.tgz#ab7afe6212469639e1f1b7eb75e712c193414df1"
|
||||||
integrity sha512-+2clm2821gP+LiA4w1GOQtjgLDoqFOYVw3uwTvmzKGislR5lzC9s0la3W7NCqYwApv2aeZry4CJ6um6/Q46mYw==
|
integrity sha512-157vdjSe7ts6LO3iltz2OckDIt7BbDnOP6PfxopJOrIQuqUEHUvwtDipgBjibm/2ejM+UP35i6YgrMj8O8V09Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@simple-dom/interface" "^1.4.0"
|
"@simple-dom/interface" "^1.4.0"
|
||||||
|
|
||||||
"@glimmer/reference@0.84.0":
|
"@glimmer/reference@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.84.0.tgz#ac5239b311a8c55624c4df729cb55a881ba4a14c"
|
resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.84.1.tgz#27a78b6c99bb3e9d89b16b2bed53ee4be68e56f6"
|
||||||
integrity sha512-2alJE+iZQC9daqVAho9sTapP6nnCMsKhOWkm5owqDIPlieUrLXn6r4SGo4YUfT6oTfhYmRPL8QjVnhk+FhAVHQ==
|
integrity sha512-X0XHH2xgDWiY4DuW1fxtGWi4D2aMPj5UEE6vRNhMQ/rsPi1R3wEGRKujFrIzttYdYhZXi7N7ETrBzCGRN0/HFA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@glimmer/env" "^0.1.7"
|
"@glimmer/env" "^0.1.7"
|
||||||
"@glimmer/global-context" "0.84.0"
|
"@glimmer/global-context" "0.84.1"
|
||||||
"@glimmer/interfaces" "0.84.0"
|
"@glimmer/interfaces" "0.84.1"
|
||||||
"@glimmer/util" "0.84.0"
|
"@glimmer/util" "0.84.1"
|
||||||
"@glimmer/validator" "0.84.0"
|
"@glimmer/validator" "0.84.1"
|
||||||
|
|
||||||
"@glimmer/syntax@0.84.0":
|
"@glimmer/syntax@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.84.0.tgz#bf5104fc2be7c853f1e3897dda16a655f6fd7d5f"
|
resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.84.1.tgz#6140b42180f45a6824c1d0813e2e9bfe1b4e13e1"
|
||||||
integrity sha512-TAo1vaO5SPWtstU3XOAeiG5izhlw2v2ASns7f5dwe0hzGPRHPGuatmsVCtw/CS6FH86weboLrOGz0KQwjMaKfQ==
|
integrity sha512-Gbq5a2joOgQPSuiGgDhlymV3rhmgP8Z8stdmoSZHfGq2e5k7sv0if6/9+9/IQO3WPncL8i3aSKX6IBN3lOn/EA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@glimmer/interfaces" "0.84.0"
|
"@glimmer/interfaces" "0.84.1"
|
||||||
"@glimmer/util" "0.84.0"
|
"@glimmer/util" "0.84.1"
|
||||||
"@handlebars/parser" "~2.0.0"
|
"@handlebars/parser" "~2.0.0"
|
||||||
simple-html-tokenizer "^0.5.11"
|
simple-html-tokenizer "^0.5.11"
|
||||||
|
|
||||||
"@glimmer/util@0.84.0":
|
"@glimmer/util@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.84.0.tgz#a9d3a9471678e5c80470646a70ea54c2cf1f8e2c"
|
resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.84.1.tgz#62ff98f5a3c9bc5a31af2d9d9c4c8c9708b90e69"
|
||||||
integrity sha512-H5OjZXaroV821TLVHXox4t2GICwUA8HdijyAf+wouSfINmm+y4GbbEwoZM9ns8YSZGX7/gG0Z4Znwti0oFbHPw==
|
integrity sha512-6cEGBo/NienZAO3nZTQfj57LBtABtlYLDjRuivIhSws3SkIFJsmLp2GcHuQw4vpuZfClyWAz1/W04B5xFX3C8w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@glimmer/env" "0.1.7"
|
"@glimmer/env" "0.1.7"
|
||||||
"@glimmer/interfaces" "0.84.0"
|
"@glimmer/interfaces" "0.84.1"
|
||||||
"@simple-dom/interface" "^1.4.0"
|
"@simple-dom/interface" "^1.4.0"
|
||||||
|
|
||||||
"@glimmer/validator@0.84.0":
|
"@glimmer/validator@0.84.1":
|
||||||
version "0.84.0"
|
version "0.84.1"
|
||||||
resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.84.0.tgz#d2bd9bcdb2685f91abc521e0f18517f7f789f02f"
|
resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.84.1.tgz#648c9e84f0cfe72de295c8b1a3f588aa35ac5afb"
|
||||||
integrity sha512-8kNz2FIxX8HWS1RvqHCIGcUK2w+t0/TJgZdhCP7ZNTLpS2QpDMoA4TnTRPk/wMxrgBOtrhFXODk3jk8ko+bTVw==
|
integrity sha512-ihgVtv0Sot7rm3AJvOH01tKFW/y2Ou2WDfuS3K8Sas2xPd6HLGSc7elNlzux6QXUjUVX6ICyFiS0jL12uoUIdw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@glimmer/env" "^0.1.7"
|
"@glimmer/env" "^0.1.7"
|
||||||
"@glimmer/global-context" "0.84.0"
|
"@glimmer/global-context" "0.84.1"
|
||||||
|
|
||||||
"@handlebars/parser@~2.0.0":
|
"@handlebars/parser@~2.0.0":
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@@ -1718,14 +1735,14 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/yargs-parser" "*"
|
"@types/yargs-parser" "*"
|
||||||
|
|
||||||
"@typescript-eslint/eslint-plugin@5.14.0":
|
"@typescript-eslint/eslint-plugin@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.14.0.tgz#5119b67152356231a0e24b998035288a9cd21335"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz#c28ef7f2e688066db0b6a9d95fb74185c114fb9a"
|
||||||
integrity sha512-ir0wYI4FfFUDfLcuwKzIH7sMVA+db7WYen47iRSaCGl+HMAZI9fpBwfDo45ZALD3A45ZGyHWDNLhbg8tZrMX4w==
|
integrity sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/scope-manager" "5.14.0"
|
"@typescript-eslint/scope-manager" "5.15.0"
|
||||||
"@typescript-eslint/type-utils" "5.14.0"
|
"@typescript-eslint/type-utils" "5.15.0"
|
||||||
"@typescript-eslint/utils" "5.14.0"
|
"@typescript-eslint/utils" "5.15.0"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
functional-red-black-tree "^1.0.1"
|
functional-red-black-tree "^1.0.1"
|
||||||
ignore "^5.1.8"
|
ignore "^5.1.8"
|
||||||
@@ -1733,59 +1750,59 @@
|
|||||||
semver "^7.3.5"
|
semver "^7.3.5"
|
||||||
tsutils "^3.21.0"
|
tsutils "^3.21.0"
|
||||||
|
|
||||||
"@typescript-eslint/scope-manager@5.14.0":
|
"@typescript-eslint/scope-manager@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.14.0.tgz#ea518962b42db8ed0a55152ea959c218cb53ca7b"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz#d97afab5e0abf4018d1289bd711be21676cdd0ee"
|
||||||
integrity sha512-LazdcMlGnv+xUc5R4qIlqH0OWARyl2kaP8pVCS39qSL3Pd1F7mI10DbdXeARcE62sVQE4fHNvEqMWsypWO+yEw==
|
integrity sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "5.14.0"
|
"@typescript-eslint/types" "5.15.0"
|
||||||
"@typescript-eslint/visitor-keys" "5.14.0"
|
"@typescript-eslint/visitor-keys" "5.15.0"
|
||||||
|
|
||||||
"@typescript-eslint/type-utils@5.14.0":
|
"@typescript-eslint/type-utils@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.14.0.tgz#711f08105860b12988454e91df433567205a8f0b"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz#d2c02eb2bdf54d0a645ba3a173ceda78346cf248"
|
||||||
integrity sha512-d4PTJxsqaUpv8iERTDSQBKUCV7Q5yyXjqXUl3XF7Sd9ogNLuKLkxz82qxokqQ4jXdTPZudWpmNtr/JjbbvUixw==
|
integrity sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/utils" "5.14.0"
|
"@typescript-eslint/utils" "5.15.0"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
tsutils "^3.21.0"
|
tsutils "^3.21.0"
|
||||||
|
|
||||||
"@typescript-eslint/types@5.14.0":
|
"@typescript-eslint/types@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.14.0.tgz#96317cf116cea4befabc0defef371a1013f8ab11"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.15.0.tgz#c7bdd103843b1abae97b5518219d3e2a0d79a501"
|
||||||
integrity sha512-BR6Y9eE9360LNnW3eEUqAg6HxS9Q35kSIs4rp4vNHRdfg0s+/PgHgskvu5DFTM7G5VKAVjuyaN476LCPrdA7Mw==
|
integrity sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@5.14.0":
|
"@typescript-eslint/typescript-estree@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.14.0.tgz#78b7f7385d5b6f2748aacea5c9b7f6ae62058314"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz#81513a742a9c657587ad1ddbca88e76c6efb0aac"
|
||||||
integrity sha512-QGnxvROrCVtLQ1724GLTHBTR0lZVu13izOp9njRvMkCBgWX26PKvmMP8k82nmXBRD3DQcFFq2oj3cKDwr0FaUA==
|
integrity sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "5.14.0"
|
"@typescript-eslint/types" "5.15.0"
|
||||||
"@typescript-eslint/visitor-keys" "5.14.0"
|
"@typescript-eslint/visitor-keys" "5.15.0"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
globby "^11.0.4"
|
globby "^11.0.4"
|
||||||
is-glob "^4.0.3"
|
is-glob "^4.0.3"
|
||||||
semver "^7.3.5"
|
semver "^7.3.5"
|
||||||
tsutils "^3.21.0"
|
tsutils "^3.21.0"
|
||||||
|
|
||||||
"@typescript-eslint/utils@5.14.0", "@typescript-eslint/utils@^5.10.0":
|
"@typescript-eslint/utils@5.15.0", "@typescript-eslint/utils@^5.10.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.14.0.tgz#6c8bc4f384298cbbb32b3629ba7415f9f80dc8c4"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.15.0.tgz#468510a0974d3ced8342f37e6c662778c277f136"
|
||||||
integrity sha512-EHwlII5mvUA0UsKYnVzySb/5EE/t03duUTweVy8Zqt3UQXBrpEVY144OTceFKaOe4xQXZJrkptCf7PjEBeGK4w==
|
integrity sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/json-schema" "^7.0.9"
|
"@types/json-schema" "^7.0.9"
|
||||||
"@typescript-eslint/scope-manager" "5.14.0"
|
"@typescript-eslint/scope-manager" "5.15.0"
|
||||||
"@typescript-eslint/types" "5.14.0"
|
"@typescript-eslint/types" "5.15.0"
|
||||||
"@typescript-eslint/typescript-estree" "5.14.0"
|
"@typescript-eslint/typescript-estree" "5.15.0"
|
||||||
eslint-scope "^5.1.1"
|
eslint-scope "^5.1.1"
|
||||||
eslint-utils "^3.0.0"
|
eslint-utils "^3.0.0"
|
||||||
|
|
||||||
"@typescript-eslint/visitor-keys@5.14.0":
|
"@typescript-eslint/visitor-keys@5.15.0":
|
||||||
version "5.14.0"
|
version "5.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.14.0.tgz#1927005b3434ccd0d3ae1b2ecf60e65943c36986"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz#5669739fbf516df060f978be6a6dce75855a8027"
|
||||||
integrity sha512-yL0XxfzR94UEkjBqyymMLgCBdojzEuy/eim7N9/RIcTNxpJudAcqsU8eRyfzBbcEzGoPWfdM3AGak3cN08WOIw==
|
integrity sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "5.14.0"
|
"@typescript-eslint/types" "5.15.0"
|
||||||
eslint-visitor-keys "^3.0.0"
|
eslint-visitor-keys "^3.0.0"
|
||||||
|
|
||||||
abab@^2.0.3, abab@^2.0.5:
|
abab@^2.0.3, abab@^2.0.5:
|
||||||
@@ -2218,10 +2235,10 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1:
|
|||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
chalk@5.0.0:
|
chalk@5.0.1:
|
||||||
version "5.0.0"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832"
|
resolved "https://registry.npmmirror.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6"
|
||||||
integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==
|
integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==
|
||||||
|
|
||||||
chalk@^4.0.0, chalk@^4.1.1, chalk@^4.1.2:
|
chalk@^4.0.0, chalk@^4.1.1, chalk@^4.1.2:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
@@ -2417,7 +2434,7 @@ core-js-compat@^3.20.2, core-js-compat@^3.21.0:
|
|||||||
browserslist "^4.19.1"
|
browserslist "^4.19.1"
|
||||||
semver "7.0.0"
|
semver "7.0.0"
|
||||||
|
|
||||||
core-js@^3.16.2, core-js@^3.4.1:
|
core-js@^3.16.2:
|
||||||
version "3.21.1"
|
version "3.21.1"
|
||||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94"
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94"
|
||||||
integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==
|
integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==
|
||||||
@@ -2477,41 +2494,41 @@ crypto-random-string@^4.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
type-fest "^1.0.1"
|
type-fest "^1.0.1"
|
||||||
|
|
||||||
cspell-gitignore@^5.19.0:
|
cspell-gitignore@^5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-5.19.0.tgz#f431f66b15a6fcda74a99cade067cdb317f4dadc"
|
resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-5.19.2.tgz#8a364a18fbeef7b35356f2537933ea4fc1761063"
|
||||||
integrity sha512-pNKubcQLmx7MabfbaiSymXR0pIf22J6IZv7ftXpVnNONe1oef6P5Os+/uPN9ieHAIYITFjdNvVqIr1EjDqJBwA==
|
integrity sha512-j0iMQoLmq4J/19hM0j0rNUQoHsw1b9Yg1AZMus8WJgABPUPGgk4fRKJChUQu0+ys3wwWT/4vhKt7hU89ScphJQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
cspell-glob "^5.19.0"
|
cspell-glob "^5.19.2"
|
||||||
find-up "^5.0.0"
|
find-up "^5.0.0"
|
||||||
|
|
||||||
cspell-glob@^5.19.0:
|
cspell-glob@^5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.19.0.tgz#42efcc6415d035039a56461ade313860160db434"
|
resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-5.19.2.tgz#57a208bbb583d8385403d35fa2f1a1351b50e883"
|
||||||
integrity sha512-LyU4CL/5tRC/9KmyK/L2fO8lTmJO7L1c2ouAJXx7ehlj26n2v4ZFzUQCHrW5/ba2eiyhuRHq43QHpLFyO/ORaw==
|
integrity sha512-23pgM0KzWsnNv6zwC/xnxdE86MfLU7NWbBqDmn1KixhJjezOhg/LiSjnJuRVUuLR+4qApzjrBRpk+Rj1jzYi6A==
|
||||||
dependencies:
|
dependencies:
|
||||||
micromatch "^4.0.4"
|
micromatch "^4.0.4"
|
||||||
|
|
||||||
cspell-io@^5.19.0:
|
cspell-io@^5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.19.0.tgz#a192cbae02ea565ecb26d76a310daf3b6439eb30"
|
resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-5.19.2.tgz#32ae634cccc73c8a0b8f1c83038301fbe137c85f"
|
||||||
integrity sha512-hNiHPrixk2XDRlC/Gf+yMk1lBjrQJZS8/BLyvxHkE7RJ4cO77NbmHZrPP7oIhwicKQIEhEisqC1NtXrGxLyD8g==
|
integrity sha512-TLlXMmDdZQold3ZsbHEpwKjUIRtYksp7Qr9Z0Rt9JpII6riliUPdB0SMFgtrqAvV1+bhJEPPmSxts8SdtLkdnA==
|
||||||
|
|
||||||
cspell-lib@^5.19.0:
|
cspell-lib@^5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.19.0.tgz#40f7b74906e678adf8b6bea571d9a9b76b5e2ee9"
|
resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-5.19.2.tgz#678ade6f3217e0ca3bb12efca55871912d90d2ff"
|
||||||
integrity sha512-s6V1jBn9RbveUMj/5PJOois0BcTvurbhwR+xMpK5j6M9hLAuTiLZZJPHygfQbCE/GJCXDCb7nn1ABHceEn3BVQ==
|
integrity sha512-x8NhOiXKRj6PHQty9RmaujE8dywzX0ZJr6AlPE/0N8IHmOg0Y8gAs7aN45l3PjFz+vaWfCghPbCIyxE/fdXNaw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@cspell/cspell-bundled-dicts" "^5.19.0"
|
"@cspell/cspell-bundled-dicts" "^5.19.2"
|
||||||
"@cspell/cspell-pipe" "^5.19.0"
|
"@cspell/cspell-pipe" "^5.19.2"
|
||||||
"@cspell/cspell-types" "^5.19.0"
|
"@cspell/cspell-types" "^5.19.2"
|
||||||
clear-module "^4.1.2"
|
clear-module "^4.1.2"
|
||||||
comment-json "^4.2.2"
|
comment-json "^4.2.2"
|
||||||
configstore "^5.0.1"
|
configstore "^5.0.1"
|
||||||
cosmiconfig "^7.0.1"
|
cosmiconfig "^7.0.1"
|
||||||
cspell-glob "^5.19.0"
|
cspell-glob "^5.19.2"
|
||||||
cspell-io "^5.19.0"
|
cspell-io "^5.19.2"
|
||||||
cspell-trie-lib "^5.19.0"
|
cspell-trie-lib "^5.19.2"
|
||||||
fast-equals "^3.0.0"
|
fast-equals "^3.0.0"
|
||||||
find-up "^5.0.0"
|
find-up "^5.0.0"
|
||||||
fs-extra "^10.0.1"
|
fs-extra "^10.0.1"
|
||||||
@@ -2522,27 +2539,27 @@ cspell-lib@^5.19.0:
|
|||||||
vscode-languageserver-textdocument "^1.0.4"
|
vscode-languageserver-textdocument "^1.0.4"
|
||||||
vscode-uri "^3.0.3"
|
vscode-uri "^3.0.3"
|
||||||
|
|
||||||
cspell-trie-lib@^5.19.0:
|
cspell-trie-lib@^5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.19.0.tgz#50b4943b677ddbc824e94935f4edc81aa6bb2e05"
|
resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-5.19.2.tgz#4573f897de9ad1200390c14b73d43066acdf8746"
|
||||||
integrity sha512-GyViUJj35u3MY3R2YF/n4yc48Irem4DHpANSEbweNtxVtYM+SJpAxZZ8YLkneOgsqhp8I90zmRZpNHrqo/TaxA==
|
integrity sha512-JCPBuA6XtIRuMZtIzRAV/nk/NmTQwxcQA4GEAkdxYZ9aUPTpMDItxQkrKrlEvAuqt8hKZkOpE6ZpChdLW7aKsg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@cspell/cspell-pipe" "^5.19.0"
|
"@cspell/cspell-pipe" "^5.19.2"
|
||||||
fs-extra "^10.0.1"
|
fs-extra "^10.0.1"
|
||||||
gensequence "^3.1.1"
|
gensequence "^3.1.1"
|
||||||
|
|
||||||
cspell@5.19.0:
|
cspell@5.19.2:
|
||||||
version "5.19.0"
|
version "5.19.2"
|
||||||
resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.19.0.tgz#6db14ecb8ec61604335db39ede4c3ba97163ecf7"
|
resolved "https://registry.yarnpkg.com/cspell/-/cspell-5.19.2.tgz#79de5ab9335b089058fb9765fbdf39aebade3aa7"
|
||||||
integrity sha512-13dB2WHkWYVh322dk3hmBiLTG93BOTkGFw/l5oCM6dKJgNmBFjnSmIVi0prGY3rSR6SKYHkKfIWK9RG0WouXsQ==
|
integrity sha512-HqjwOZ5iJ4WBfl6TfQkGXax0uYVL3SI9XAsstFs7yQW+6/DwjgvR7GFTkGH+rZgN5hdGZPk81NYbfNLm0uyKCQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@cspell/cspell-pipe" "^5.19.0"
|
"@cspell/cspell-pipe" "^5.19.2"
|
||||||
chalk "^4.1.2"
|
chalk "^4.1.2"
|
||||||
commander "^9.0.0"
|
commander "^9.0.0"
|
||||||
comment-json "^4.2.2"
|
comment-json "^4.2.2"
|
||||||
cspell-gitignore "^5.19.0"
|
cspell-gitignore "^5.19.2"
|
||||||
cspell-glob "^5.19.0"
|
cspell-glob "^5.19.2"
|
||||||
cspell-lib "^5.19.0"
|
cspell-lib "^5.19.2"
|
||||||
fast-json-stable-stringify "^2.1.0"
|
fast-json-stable-stringify "^2.1.0"
|
||||||
file-entry-cache "^6.0.1"
|
file-entry-cache "^6.0.1"
|
||||||
fs-extra "^10.0.1"
|
fs-extra "^10.0.1"
|
||||||
@@ -2807,97 +2824,90 @@ es-to-primitive@^1.2.1:
|
|||||||
is-date-object "^1.0.1"
|
is-date-object "^1.0.1"
|
||||||
is-symbol "^1.0.2"
|
is-symbol "^1.0.2"
|
||||||
|
|
||||||
esbuild-android-64@0.14.25:
|
esbuild-android-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz#d532d38cb5fe0ae45167ce35f4bbc784c636be40"
|
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz#b868bbd9955a92309c69df628d8dd1945478b45c"
|
||||||
integrity sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==
|
integrity sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==
|
||||||
|
|
||||||
esbuild-android-arm64@0.14.25:
|
esbuild-android-arm64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz#9c5bb3366aabfd14a1c726d36978b79441dfcb6e"
|
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz#e7d6430555e8e9c505fd87266bbc709f25f1825c"
|
||||||
integrity sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw==
|
integrity sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==
|
||||||
|
|
||||||
esbuild-darwin-64@0.14.25:
|
esbuild-darwin-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz#05dcdb6d884f427039ffee5e92ff97527e56c26d"
|
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz#4dc7484127564e89b4445c0a560a3cb50b3d68e1"
|
||||||
integrity sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA==
|
integrity sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==
|
||||||
|
|
||||||
esbuild-darwin-arm64@0.14.25:
|
esbuild-darwin-arm64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz#28e080da4ea0cfe9498071e7f8060498caee1a95"
|
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz#469e59c665f84a8ed323166624c5e7b9b2d22ac1"
|
||||||
integrity sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw==
|
integrity sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==
|
||||||
|
|
||||||
esbuild-freebsd-64@0.14.25:
|
esbuild-freebsd-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz#200d3664a3b945bc9fdcba73614b49a11ebd1cfa"
|
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz#895df03bf5f87094a56c9a5815bf92e591903d70"
|
||||||
integrity sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ==
|
integrity sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==
|
||||||
|
|
||||||
esbuild-freebsd-arm64@0.14.25:
|
esbuild-freebsd-arm64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz#624b08c5da6013bdc312aaa23c4ff409580f5c3c"
|
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz#0b72a41a6b8655e9a8c5608f2ec1afdcf6958441"
|
||||||
integrity sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug==
|
integrity sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==
|
||||||
|
|
||||||
esbuild-linux-32@0.14.25:
|
esbuild-linux-32@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz#0238e597eb0b60aa06c7e98fccbbfd6bb9a0d6c5"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz#43b8ba3803b0bbe7f051869c6a8bf6de1e95de28"
|
||||||
integrity sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw==
|
integrity sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==
|
||||||
|
|
||||||
esbuild-linux-64@0.14.25:
|
esbuild-linux-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz#8a8b8cf47dfce127c858e71229d9a385a82c62e8"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz#dc8072097327ecfadba1735562824ce8c05dd0bd"
|
||||||
integrity sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug==
|
integrity sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==
|
||||||
|
|
||||||
esbuild-linux-arm64@0.14.25:
|
esbuild-linux-arm64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz#7ac94371418a2640ba413bc1700aaedeb2794e52"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz#c52b58cbe948426b1559910f521b0a3f396f10b8"
|
||||||
integrity sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw==
|
integrity sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==
|
||||||
|
|
||||||
esbuild-linux-arm@0.14.25:
|
esbuild-linux-arm@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz#034bd18e9310b9f010c89f90ef7f05706689600b"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz#df869dbd67d4ee3a04b3c7273b6bd2b233e78a18"
|
||||||
integrity sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw==
|
integrity sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==
|
||||||
|
|
||||||
esbuild-linux-mips64le@0.14.25:
|
esbuild-linux-mips64le@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz#05f98a8cf6b578eab6b4e6b0ab094f37530934f4"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz#a2b646d9df368b01aa970a7b8968be6dd6b01d19"
|
||||||
integrity sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ==
|
integrity sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==
|
||||||
|
|
||||||
esbuild-linux-ppc64le@0.14.25:
|
esbuild-linux-ppc64le@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz#46fd0add8d8535678439d7a9c2876ad20042d952"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz#9a21af766a0292578a3009c7408b8509cac7cefd"
|
||||||
integrity sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw==
|
integrity sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==
|
||||||
|
|
||||||
esbuild-linux-riscv64@0.14.25:
|
esbuild-linux-riscv64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz#ea2e986f0f3e5df73c635135dd778051734fc605"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz#344a27f91568056a5903ad5841b447e00e78d740"
|
||||||
integrity sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w==
|
integrity sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==
|
||||||
|
|
||||||
esbuild-linux-s390x@0.14.25:
|
esbuild-linux-s390x@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz#efe89486e9a1b1508925048076e3f3a6698aa6a3"
|
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz#73a7309bd648a07ef58f069658f989a5096130db"
|
||||||
integrity sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ==
|
integrity sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==
|
||||||
|
|
||||||
esbuild-netbsd-64@0.14.25:
|
esbuild-netbsd-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz#439fe27d8ee3b5887501ee63988e85f920107db6"
|
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz#482a587cdbd18a6c264a05136596927deb46c30a"
|
||||||
integrity sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA==
|
integrity sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==
|
||||||
|
|
||||||
esbuild-openbsd-64@0.14.25:
|
esbuild-openbsd-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz#31ebf616aadf6e60674469f2b92cec92280d9930"
|
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz#e99f8cdc63f1628747b63edd124d53cf7796468d"
|
||||||
integrity sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A==
|
integrity sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==
|
||||||
|
|
||||||
esbuild-plugin-text-replace@1.2.0:
|
esbuild-sunos-64@0.14.27:
|
||||||
version "1.2.0"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-plugin-text-replace/-/esbuild-plugin-text-replace-1.2.0.tgz#43d87d88c5c1314151d8046d490aa21605fe1feb"
|
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz#8611d825bcb8239c78d57452e83253a71942f45c"
|
||||||
integrity sha512-04kdAMjxqGG+TEV/F+uGQVMFZlh65Eb11xo8b532io8FjOg5x2faoCXGicJo97BovXYARCPUhiZEECKZrFQq7Q==
|
integrity sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==
|
||||||
dependencies:
|
|
||||||
ts-replace-all "^1.0.0"
|
|
||||||
|
|
||||||
esbuild-sunos-64@0.14.25:
|
|
||||||
version "0.14.25"
|
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz#815e4f936d74970292a63ccfd5791fe5e3569f5f"
|
|
||||||
integrity sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw==
|
|
||||||
|
|
||||||
esbuild-visualizer@0.3.1:
|
esbuild-visualizer@0.3.1:
|
||||||
version "0.3.1"
|
version "0.3.1"
|
||||||
@@ -2908,46 +2918,46 @@ esbuild-visualizer@0.3.1:
|
|||||||
open "^7.4.2"
|
open "^7.4.2"
|
||||||
yargs "^16.2.0"
|
yargs "^16.2.0"
|
||||||
|
|
||||||
esbuild-windows-32@0.14.25:
|
esbuild-windows-32@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz#189e14df2478f2c193c86968ab1fb54e1ceaafd2"
|
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz#c06374206d4d92dd31d4fda299b09f51a35e82f6"
|
||||||
integrity sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA==
|
integrity sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==
|
||||||
|
|
||||||
esbuild-windows-64@0.14.25:
|
esbuild-windows-64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz#3d5fbfdc3856850bb47439299e3b60dd18be111f"
|
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz#756631c1d301dfc0d1a887deed2459ce4079582f"
|
||||||
integrity sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA==
|
integrity sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==
|
||||||
|
|
||||||
esbuild-windows-arm64@0.14.25:
|
esbuild-windows-arm64@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz#8b243cbbad8a86cf98697da9ccb88c05df2ef458"
|
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz#ad7e187193dcd18768b16065a950f4441d7173f4"
|
||||||
integrity sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA==
|
integrity sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==
|
||||||
|
|
||||||
esbuild@0.14.25:
|
esbuild@0.14.27:
|
||||||
version "0.14.25"
|
version "0.14.27"
|
||||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.25.tgz#ddb9d47b91ca76abb7d850ce3dfed0bc3dc88d16"
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.27.tgz#41fe0f1b6b68b9f77cac025009bc54bb96e616f1"
|
||||||
integrity sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q==
|
integrity sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
esbuild-android-64 "0.14.25"
|
esbuild-android-64 "0.14.27"
|
||||||
esbuild-android-arm64 "0.14.25"
|
esbuild-android-arm64 "0.14.27"
|
||||||
esbuild-darwin-64 "0.14.25"
|
esbuild-darwin-64 "0.14.27"
|
||||||
esbuild-darwin-arm64 "0.14.25"
|
esbuild-darwin-arm64 "0.14.27"
|
||||||
esbuild-freebsd-64 "0.14.25"
|
esbuild-freebsd-64 "0.14.27"
|
||||||
esbuild-freebsd-arm64 "0.14.25"
|
esbuild-freebsd-arm64 "0.14.27"
|
||||||
esbuild-linux-32 "0.14.25"
|
esbuild-linux-32 "0.14.27"
|
||||||
esbuild-linux-64 "0.14.25"
|
esbuild-linux-64 "0.14.27"
|
||||||
esbuild-linux-arm "0.14.25"
|
esbuild-linux-arm "0.14.27"
|
||||||
esbuild-linux-arm64 "0.14.25"
|
esbuild-linux-arm64 "0.14.27"
|
||||||
esbuild-linux-mips64le "0.14.25"
|
esbuild-linux-mips64le "0.14.27"
|
||||||
esbuild-linux-ppc64le "0.14.25"
|
esbuild-linux-ppc64le "0.14.27"
|
||||||
esbuild-linux-riscv64 "0.14.25"
|
esbuild-linux-riscv64 "0.14.27"
|
||||||
esbuild-linux-s390x "0.14.25"
|
esbuild-linux-s390x "0.14.27"
|
||||||
esbuild-netbsd-64 "0.14.25"
|
esbuild-netbsd-64 "0.14.27"
|
||||||
esbuild-openbsd-64 "0.14.25"
|
esbuild-openbsd-64 "0.14.27"
|
||||||
esbuild-sunos-64 "0.14.25"
|
esbuild-sunos-64 "0.14.27"
|
||||||
esbuild-windows-32 "0.14.25"
|
esbuild-windows-32 "0.14.27"
|
||||||
esbuild-windows-64 "0.14.25"
|
esbuild-windows-64 "0.14.27"
|
||||||
esbuild-windows-arm64 "0.14.25"
|
esbuild-windows-arm64 "0.14.27"
|
||||||
|
|
||||||
escalade@^3.1.1:
|
escalade@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
@@ -3063,10 +3073,10 @@ eslint-plugin-prettier-internal-rules@2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier-internal-rules/-/eslint-plugin-prettier-internal-rules-2.0.1.tgz#ee6f5b4d663fd16d406f66a0d52775d05be1bd6e"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier-internal-rules/-/eslint-plugin-prettier-internal-rules-2.0.1.tgz#ee6f5b4d663fd16d406f66a0d52775d05be1bd6e"
|
||||||
integrity sha512-6mLlbq4xl86c66Smulq2a/bIpTzXDL3LcoYQd/C+kSbjLl8L7G+3wNJs6lWsZZ5v8fyirundQBH6PP/PSAzDMw==
|
integrity sha512-6mLlbq4xl86c66Smulq2a/bIpTzXDL3LcoYQd/C+kSbjLl8L7G+3wNJs6lWsZZ5v8fyirundQBH6PP/PSAzDMw==
|
||||||
|
|
||||||
eslint-plugin-react@7.29.3:
|
eslint-plugin-react@7.29.4:
|
||||||
version "7.29.3"
|
version "7.29.4"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.3.tgz#f4eab757f2756d25d6d4c2a58a9e20b004791f05"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2"
|
||||||
integrity sha512-MzW6TuCnDOcta67CkpDyRfRsEVx9FNMDV8wZsDqe1luHPdGTrQIUaUXD27Ja3gHsdOIs/cXzNchWGlqm+qRVRg==
|
integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
array-includes "^3.1.4"
|
array-includes "^3.1.4"
|
||||||
array.prototype.flatmap "^1.2.5"
|
array.prototype.flatmap "^1.2.5"
|
||||||
@@ -5528,10 +5538,10 @@ prelude-ls@~1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
||||||
|
|
||||||
prettier@2.5.1:
|
prettier@2.6.0:
|
||||||
version "2.5.1"
|
version "2.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4"
|
||||||
integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
|
integrity sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==
|
||||||
|
|
||||||
pretty-bytes@5.6.0:
|
pretty-bytes@5.6.0:
|
||||||
version "5.6.0"
|
version "5.6.0"
|
||||||
@@ -6374,13 +6384,6 @@ trough@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
|
resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
|
||||||
integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
|
integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
|
||||||
|
|
||||||
ts-replace-all@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/ts-replace-all/-/ts-replace-all-1.0.0.tgz#ef28283ccdb4da7d69fb03cf543e09e51711659b"
|
|
||||||
integrity sha512-6uBtdkw3jHXkPtx/e9xB/5vcngMm17CyJYsS2YZeQ+9FdRnt6Ev5g931Sg2p+dxbtMGoCm13m3ax/obicTZIkQ==
|
|
||||||
dependencies:
|
|
||||||
core-js "^3.4.1"
|
|
||||||
|
|
||||||
tsconfig-paths@^3.12.0:
|
tsconfig-paths@^3.12.0:
|
||||||
version "3.12.0"
|
version "3.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
|
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
|
||||||
|
|||||||
Reference in new issue
Block a user