prettier-plugin-astro 0.5.0 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # prettier-plugin-astro
2
2
 
3
+ ## 0.5.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 1da195e: Update to latest version of the compiler
8
+
9
+ ## 0.5.2
10
+
11
+ ### Patch Changes
12
+
13
+ - 13810b7: End tag hugs text nodes not ending in whitespace
14
+ - 5b2177e: Correctly break self-closing tags
15
+
16
+ ## 0.5.1
17
+
18
+ ### Patch Changes
19
+
20
+ - d4afe5b: Fix TypeScript not working inside expressions
21
+
3
22
  ## 0.5.0
4
23
 
5
24
  ### Minor Changes
package/README.md CHANGED
@@ -96,7 +96,7 @@ Set if attributes with the same name as their expression should be formatted to
96
96
 
97
97
  Pull requests of any size and any skill level are welcome, no contribution is too small. Changes to the Astro Prettier Plugin are subject to [Astro Governance](https://github.com/withastro/.github/blob/main/GOVERNANCE.md) and should adhere to the [Astro Style Guide](https://github.com/withastro/astro/blob/main/STYLE_GUIDE.md)
98
98
 
99
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for instructions on how to setup your development environnement
99
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for instructions on how to set up your development environment.
100
100
 
101
101
  ## Sponsors
102
102
 
package/dist/index.js CHANGED
@@ -145,10 +145,13 @@ function endsWithLinebreak(text, nrLines = 1) {
145
145
  return new RegExp(`(\\n[\\t\\f\\r ]*){${nrLines}}$`).test(text);
146
146
  }
147
147
  function isTextNodeStartingWithWhitespace(node) {
148
- return node.type === 'text' && /^\s/.test(getUnencodedText(node));
148
+ return isTextNode(node) && /^\s/.test(getUnencodedText(node));
149
+ }
150
+ function endsWithWhitespace(text) {
151
+ return /\s$/.test(text);
149
152
  }
150
153
  function isTextNodeEndingWithWhitespace(node) {
151
- return node.type === 'text' && /\s$/.test(getUnencodedText(node));
154
+ return isTextNode(node) && endsWithWhitespace(getUnencodedText(node));
152
155
  }
153
156
  function shouldHugStart(node, opts) {
154
157
  if (isBlockElement(node, opts)) {
@@ -175,7 +178,10 @@ function shouldHugEnd(node, opts) {
175
178
  if (children.length === 0) {
176
179
  return true;
177
180
  }
178
- return false;
181
+ const lastChild = children[children.length - 1];
182
+ if (!isTextNode(lastChild))
183
+ return false;
184
+ return !endsWithWhitespace(getUnencodedText(lastChild));
179
185
  }
180
186
  function canOmitSoftlineBeforeClosingTag(path, opts) {
181
187
  return isLastChildWithinParentBlockElement(path, opts);
@@ -315,7 +321,7 @@ function print(path, opts, print) {
315
321
  const attributeLine = opts.singleAttributePerLine && node.attributes.length > 1 ? breakParent : '';
316
322
  const attributes = join$1(attributeLine, path.map(print, 'attributes'));
317
323
  if (isSelfClosingTag) {
318
- return group$1(['<', node.name, indent$1(group$1(attributes)), line$1, `/>`]);
324
+ return group$1(['<', node.name, indent$1(attributes), line$1, `/>`]);
319
325
  }
320
326
  if (node.children) {
321
327
  const children = node.children;
@@ -490,21 +496,19 @@ function embed(path, print, textToDoc, opts) {
490
496
  const jsxNode = makeNodeJSXCompatible(node);
491
497
  const textContent = printRaw(jsxNode);
492
498
  let content;
493
- try {
494
- content = textToDoc(textContent, {
495
- ...opts,
496
- parser: '__js_expression',
497
- });
498
- }
499
- catch (e) {
500
- content = wrapParserTryCatch(textToDoc, textContent, {
501
- ...opts,
502
- parser: 'babel-ts',
503
- });
504
- content = stripTrailingHardline(content);
505
- if (textContent.trimStart().startsWith('//') && /\n/.test(textContent)) {
506
- return group(['{', indent([hardline, content]), hardline, lineSuffixBoundary, '}']);
499
+ content = wrapParserTryCatch(textToDoc, forceIntoExpression(textContent), {
500
+ ...opts,
501
+ parser: expressionParser,
502
+ });
503
+ content = stripTrailingHardline(content);
504
+ const strings = [];
505
+ mapDoc(content, (doc) => {
506
+ if (typeof doc === 'string') {
507
+ strings.push(doc);
507
508
  }
509
+ });
510
+ if (strings.every((value) => value.startsWith('//'))) {
511
+ return group(['{', content, softline, lineSuffixBoundary, '}']);
508
512
  }
509
513
  const astroDoc = mapDoc(content, (doc) => {
510
514
  if (typeof doc === 'string') {
@@ -518,9 +522,9 @@ function embed(path, print, textToDoc, opts) {
518
522
  if (node.type === 'attribute' && node.kind === 'expression') {
519
523
  const value = node.value.trim();
520
524
  const name = node.name.trim();
521
- const attrNodeValue = wrapParserTryCatch(textToDoc, value, {
525
+ const attrNodeValue = wrapParserTryCatch(textToDoc, forceIntoExpression(value), {
522
526
  ...opts,
523
- parser: '__js_expression',
527
+ parser: expressionParser,
524
528
  });
525
529
  if (name === value && opts.astroAllowShorthand) {
526
530
  return [line, '{', attrNodeValue, '}'];
@@ -576,6 +580,16 @@ function wrapParserTryCatch(cb, text, options) {
576
580
  throw e;
577
581
  }
578
582
  }
583
+ function forceIntoExpression(statement) {
584
+ return `<>{${statement}\n}</>`;
585
+ }
586
+ function expressionParser(text, parsers, options) {
587
+ const ast = parsers['babel-ts'](text, options);
588
+ return {
589
+ ...ast,
590
+ program: ast.program.body[0].expression.children[0].expression,
591
+ };
592
+ }
579
593
  function makeNodeJSXCompatible(node) {
580
594
  const newNode = { ...node };
581
595
  if (isNodeWithChildren(newNode)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/options.ts","../src/printer/elements.ts","../src/printer/utils.ts","../src/printer/index.ts","../src/printer/embed.ts","../src/index.ts"],"sourcesContent":["import { SupportOption } from 'prettier';\n\ninterface PluginOptions {\n\tastroAllowShorthand: boolean;\n}\n\ndeclare module 'prettier' {\n\t// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\tinterface RequiredOptions extends PluginOptions {}\n}\n\n// https://prettier.io/docs/en/plugins.html#options\nexport const options: Record<keyof PluginOptions, SupportOption> = {\n\tastroAllowShorthand: {\n\t\tsince: '0.0.10',\n\t\tcategory: 'Astro',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription: 'Enable/disable attribute shorthand if attribute name and expression are the same',\n\t},\n};\n","export type TagName = keyof HTMLElementTagNameMap | 'svg';\n\n// https://github.com/prettier/prettier/blob/main/vendors/html-void-elements.json\nexport const selfClosingTags = [\n\t'area',\n\t'base',\n\t'basefont',\n\t'bgsound',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'frame',\n\t'hr',\n\t'image',\n\t'img',\n\t'input',\n\t'isindex',\n\t'keygen',\n\t'link',\n\t'menuitem',\n\t'meta',\n\t'nextid',\n\t'param',\n\t'slot',\n\t'source',\n\t'track',\n\t'wbr',\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements#Elements\nexport const blockElements: TagName[] = [\n\t'address',\n\t'article',\n\t'aside',\n\t'blockquote',\n\t'details',\n\t'dialog',\n\t'dd',\n\t'div',\n\t'dl',\n\t'dt',\n\t'fieldset',\n\t'figcaption',\n\t'figure',\n\t'footer',\n\t'form',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'header',\n\t'hgroup',\n\t'hr',\n\t'li',\n\t'main',\n\t'nav',\n\t'ol',\n\t'p',\n\t'pre',\n\t'section',\n\t'table',\n\t'ul',\n\t// TODO: WIP\n\t'title',\n\t'html',\n];\n\n/**\n * HTML attributes that we may safely reformat (trim whitespace, add or remove newlines)\n */\nexport const formattableAttributes: string[] = [\n\t// None at the moment\n\t// Prettier HTML does not format attributes at all\n\t// and to be consistent we leave this array empty for now\n];\n","import { createRequire } from 'node:module';\nimport { AstPath as AstP, Doc, ParserOptions as ParserOpts } from 'prettier';\nimport { createSyncFn } from 'synckit';\nimport { blockElements, formattableAttributes, TagName } from './elements';\nimport { anyNode, CommentNode, Node, ParentLikeNode, TagLikeNode, TextNode } from './nodes';\n\nexport type printFn = (path: AstPath) => Doc;\nexport type ParserOptions = ParserOpts<anyNode>;\nexport type AstPath = AstP<anyNode>;\n\nconst req = createRequire(import.meta.url);\nlet workerPath;\ntry {\n\tworkerPath = req.resolve('../workers/serialize-worker.js');\n} catch (e) {\n\tworkerPath = req.resolve('prettier-plugin-astro/workers/serialize-worker.js');\n}\nconst serialize = createSyncFn(req.resolve(workerPath));\n\nexport function isInlineElement(path: AstPath, opts: ParserOptions, node: anyNode): boolean {\n\treturn node && node.type === 'element' && !isBlockElement(node, opts) && !isPreTagContent(path);\n}\n\nexport function isBlockElement(node: anyNode, opts: ParserOptions): boolean {\n\treturn (\n\t\tnode &&\n\t\tnode.type === 'element' &&\n\t\topts.htmlWhitespaceSensitivity !== 'strict' &&\n\t\t(opts.htmlWhitespaceSensitivity === 'ignore' || blockElements.includes(node.name as TagName))\n\t);\n}\n\n/**\n * Returns the content of the node\n */\nexport function printRaw(node: anyNode, stripLeadingAndTrailingNewline = false): string {\n\tif (!isNodeWithChildren(node)) {\n\t\treturn '';\n\t}\n\n\tif (node.children.length === 0) {\n\t\treturn '';\n\t}\n\n\tlet raw = node.children.reduce((prev: string, curr: Node) => prev + serialize(curr), '');\n\n\tif (!stripLeadingAndTrailingNewline) {\n\t\treturn raw;\n\t}\n\n\tif (startsWithLinebreak(raw)) {\n\t\traw = raw.substring(raw.indexOf('\\n') + 1);\n\t}\n\tif (endsWithLinebreak(raw)) {\n\t\traw = raw.substring(0, raw.lastIndexOf('\\n'));\n\t\tif (raw.charAt(raw.length - 1) === '\\r') {\n\t\t\traw = raw.substring(0, raw.length - 1);\n\t\t}\n\t}\n\n\treturn raw;\n}\n\nexport function isNodeWithChildren(node: anyNode): node is anyNode & ParentLikeNode {\n\treturn node && 'children' in node && Array.isArray(node.children);\n}\n\nexport const isEmptyTextNode = (node: Node): boolean => {\n\treturn !!node && node.type === 'text' && getUnencodedText(node).trim() === '';\n};\n\nexport function getUnencodedText(node: TextNode | CommentNode): string {\n\treturn node.value;\n}\n\nexport function isTextNodeStartingWithLinebreak(node: TextNode, nrLines = 1): node is TextNode {\n\treturn startsWithLinebreak(getUnencodedText(node), nrLines);\n}\n\nexport function startsWithLinebreak(text: string, nrLines = 1): boolean {\n\treturn new RegExp(`^([\\\\t\\\\f\\\\r ]*\\\\n){${nrLines}}`).test(text);\n}\n\nexport function endsWithLinebreak(text: string, nrLines = 1): boolean {\n\treturn new RegExp(`(\\\\n[\\\\t\\\\f\\\\r ]*){${nrLines}}$`).test(text);\n}\n\nexport function isTextNodeStartingWithWhitespace(node: Node): node is TextNode {\n\treturn node.type === 'text' && /^\\s/.test(getUnencodedText(node));\n}\n\nexport function isTextNodeEndingWithWhitespace(node: Node): node is TextNode {\n\treturn node.type === 'text' && /\\s$/.test(getUnencodedText(node));\n}\n\n/**\n * Check if given node's start tag should hug its first child. This is the case for inline elements when there's\n * no whitespace between the `>` and the first child.\n */\nexport function shouldHugStart(node: anyNode, opts: ParserOptions): boolean {\n\tif (isBlockElement(node, opts)) {\n\t\treturn false;\n\t}\n\n\tif (!isNodeWithChildren(node)) {\n\t\treturn false;\n\t}\n\n\tconst children = node.children;\n\tif (children.length === 0) {\n\t\treturn true;\n\t}\n\n\tconst firstChild = children[0];\n\treturn !isTextNodeStartingWithWhitespace(firstChild);\n}\n\n/**\n * Check if given node's end tag should hug its last child. This is the case for inline elements when there's\n * no whitespace between the last child and the `</`.\n */\nexport function shouldHugEnd(node: anyNode, opts: ParserOptions): boolean {\n\tif (isBlockElement(node, opts)) {\n\t\treturn false;\n\t}\n\n\tif (!isNodeWithChildren(node)) {\n\t\treturn false;\n\t}\n\n\tconst children = node.children;\n\tif (children.length === 0) {\n\t\treturn true;\n\t}\n\n\treturn false;\n\n\t// TODO: WIP\n\t// const lastChild = children[children.length - 1];\n\t// return !isTextNodeEndingWithWhitespace(lastChild);\n}\n\n/**\n * Returns true if the softline between `</tagName` and `>` can be omitted.\n */\nexport function canOmitSoftlineBeforeClosingTag(path: AstPath, opts: ParserOptions): boolean {\n\treturn isLastChildWithinParentBlockElement(path, opts);\n}\n\nfunction getChildren(node: anyNode): Node[] {\n\treturn isNodeWithChildren(node) ? node.children : [];\n}\n\nfunction isLastChildWithinParentBlockElement(path: AstPath, opts: ParserOptions): boolean {\n\tconst parent = path.getParentNode();\n\tif (!parent || !isBlockElement(parent, opts)) {\n\t\treturn false;\n\t}\n\n\tconst children = getChildren(parent);\n\tconst lastChild = children[children.length - 1];\n\treturn lastChild === path.getNode();\n}\n\nexport function trimTextNodeLeft(node: TextNode): void {\n\tnode.value = node.value && node.value.trimStart();\n}\n\nexport function trimTextNodeRight(node: TextNode): void {\n\tnode.value = node.value && node.value.trimEnd();\n}\n\nexport function printClassNames(value: string) {\n\treturn value.trim().split(/\\s+/).join(' ');\n}\n\n/** dedent string & return tabSize (the last part is what we need) */\nexport function manualDedent(input: string): {\n\ttabSize: number;\n\tchar: string;\n\tresult: string;\n} {\n\tlet minTabSize = Infinity;\n\tlet result = input;\n\t// 1. normalize\n\tresult = result.replace(/\\r\\n/g, '\\n');\n\n\t// 2. count tabSize\n\tlet char = '';\n\tfor (const line of result.split('\\n')) {\n\t\tif (!line) continue;\n\t\t// if any line begins with a non-whitespace char, minTabSize is 0\n\t\tif (line[0] && /^[^\\s]/.test(line[0])) {\n\t\t\tminTabSize = 0;\n\t\t\tbreak;\n\t\t}\n\t\tconst match = line.match(/^(\\s+)\\S+/); // \\S ensures we don’t count lines of pure whitespace\n\t\tif (match) {\n\t\t\tif (match[1] && !char) char = match[1][0];\n\t\t\tif (match[1].length < minTabSize) minTabSize = match[1].length;\n\t\t}\n\t}\n\n\t// 3. reformat string\n\tif (minTabSize > 0 && Number.isFinite(minTabSize)) {\n\t\tresult = result.replace(new RegExp(`^${new Array(minTabSize + 1).join(char)}`, 'gm'), '');\n\t}\n\n\treturn {\n\t\ttabSize: minTabSize === Infinity ? 0 : minTabSize,\n\t\tchar,\n\t\tresult,\n\t};\n}\n\n/** True if the node is of type text */\nexport function isTextNode(node: anyNode): node is TextNode {\n\treturn node.type === 'text';\n}\n\n/** True if the node is TagLikeNode:\n *\n * ElementNode | ComponentNode | CustomElementNode | FragmentNode */\nexport function isTagLikeNode(node: anyNode): node is TagLikeNode {\n\treturn (\n\t\tnode.type === 'element' ||\n\t\tnode.type === 'component' ||\n\t\tnode.type === 'custom-element' ||\n\t\tnode.type === 'fragment'\n\t);\n}\n\n/**\n * Returns siblings, that is, the children of the parent.\n */\nexport function getSiblings(path: AstPath): anyNode[] {\n\tconst parent = path.getParentNode();\n\tif (!parent) return [];\n\n\treturn getChildren(parent);\n}\n\nexport function getNextNode(path: AstPath): anyNode | null {\n\tconst node = path.getNode();\n\tif (node) {\n\t\tconst siblings = getSiblings(path);\n\t\tif (node.position?.start === siblings[siblings.length - 1].position?.start) return null;\n\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\tconst sibling = siblings[i];\n\t\t\tif (sibling.position?.start === node.position?.start && i !== siblings.length - 1) {\n\t\t\t\treturn siblings[i + 1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport const isPreTagContent = (path: AstPath): boolean => {\n\tif (!path || !path.stack || !Array.isArray(path.stack)) return false;\n\treturn path.stack.some(\n\t\t(node: anyNode) =>\n\t\t\t(node.type === 'element' && node.name.toLowerCase() === 'pre') ||\n\t\t\t(node.type === 'attribute' && !formattableAttributes.includes(node.name))\n\t);\n};\n","import { Doc } from 'prettier';\nimport { selfClosingTags } from './elements';\nimport {\n\tAstPath,\n\tcanOmitSoftlineBeforeClosingTag,\n\tendsWithLinebreak,\n\tgetNextNode,\n\tgetUnencodedText,\n\tisEmptyTextNode,\n\tisInlineElement,\n\tisPreTagContent,\n\tisTagLikeNode,\n\tisTextNode,\n\tisTextNodeEndingWithWhitespace,\n\tisTextNodeStartingWithLinebreak,\n\tisTextNodeStartingWithWhitespace,\n\tParserOptions,\n\tprintClassNames,\n\tprintFn,\n\tprintRaw,\n\tshouldHugEnd,\n\tshouldHugStart,\n\tstartsWithLinebreak,\n\ttrimTextNodeLeft,\n\ttrimTextNodeRight,\n} from './utils';\nimport { TextNode } from './nodes';\n\nimport _doc from 'prettier/doc';\nconst {\n\tbuilders: { breakParent, dedent, fill, group, indent, join, line, softline, hardline },\n\tutils: { stripTrailingHardline },\n} = _doc;\n\n// https://prettier.io/docs/en/plugins.html#print\n// eslint-disable-next-line @typescript-eslint/no-shadow\nexport function print(path: AstPath, opts: ParserOptions, print: printFn): Doc {\n\tconst node = path.getValue();\n\n\t// 1. handle special node types\n\tif (!node) {\n\t\treturn '';\n\t}\n\n\tif (typeof node === 'string') {\n\t\treturn node;\n\t}\n\n\t// 2. handle printing\n\tswitch (node.type) {\n\t\tcase 'root': {\n\t\t\treturn [stripTrailingHardline(path.map(print, 'children')), hardline];\n\t\t}\n\n\t\tcase 'text': {\n\t\t\tconst rawText = getUnencodedText(node);\n\n\t\t\t// TODO: TEST PRE TAGS\n\t\t\t// if (isPreTagContent(path)) {\n\t\t\t// if (path.getParentNode()?.type === 'Attribute') {\n\t\t\t// // Direct child of attribute value -> add literallines at end of lines\n\t\t\t// // so that other things don't break in unexpected places\n\t\t\t// return replaceEndOfLineWith(rawText, literalline);\n\t\t\t// }\n\t\t\t// return rawText;\n\t\t\t// }\n\n\t\t\tif (isEmptyTextNode(node)) {\n\t\t\t\tconst hasWhiteSpace = rawText.trim().length < getUnencodedText(node).length;\n\t\t\t\tconst hasOneOrMoreNewlines = /\\n/.test(getUnencodedText(node));\n\t\t\t\tconst hasTwoOrMoreNewlines = /\\n\\r?\\s*\\n\\r?/.test(getUnencodedText(node));\n\t\t\t\tif (hasTwoOrMoreNewlines) {\n\t\t\t\t\treturn [hardline, hardline];\n\t\t\t\t}\n\t\t\t\tif (hasOneOrMoreNewlines) {\n\t\t\t\t\treturn hardline;\n\t\t\t\t}\n\t\t\t\tif (hasWhiteSpace) {\n\t\t\t\t\treturn line;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * For non-empty text nodes each sequence of non-whitespace characters (effectively,\n\t\t\t * each \"word\") is joined by a single `line`, which will be rendered as a single space\n\t\t\t * until this node's current line is out of room, at which `fill` will break at the\n\t\t\t * most convenient instance of `line`.\n\t\t\t */\n\t\t\treturn fill(splitTextToDocs(node));\n\t\t}\n\n\t\tcase 'component':\n\t\tcase 'fragment':\n\t\tcase 'custom-element':\n\t\tcase 'element': {\n\t\t\tlet isEmpty: boolean;\n\t\t\tif (!node.children) {\n\t\t\t\tisEmpty = true;\n\t\t\t} else {\n\t\t\t\tisEmpty = node.children.every((child) => isEmptyTextNode(child));\n\t\t\t}\n\t\t\tconst isSelfClosingTag =\n\t\t\t\tisEmpty && (node.type !== 'element' || selfClosingTags.includes(node.name));\n\n\t\t\tconst attributeLine =\n\t\t\t\topts.singleAttributePerLine && node.attributes.length > 1 ? breakParent : '';\n\t\t\tconst attributes = join(attributeLine, path.map(print, 'attributes'));\n\n\t\t\tif (isSelfClosingTag) {\n\t\t\t\treturn group(['<', node.name, indent(group(attributes)), line, `/>`]);\n\t\t\t}\n\n\t\t\tif (node.children) {\n\t\t\t\tconst children = node.children;\n\t\t\t\tconst firstChild = children[0];\n\t\t\t\tconst lastChild = children[children.length - 1];\n\n\t\t\t\t// No hugging of content means it's either a block element and/or there's whitespace at the start/end\n\t\t\t\tlet noHugSeparatorStart:\n\t\t\t\t\t| _doc.builders.Concat\n\t\t\t\t\t| _doc.builders.Line\n\t\t\t\t\t| _doc.builders.Softline\n\t\t\t\t\t| string = softline;\n\t\t\t\tlet noHugSeparatorEnd:\n\t\t\t\t\t| _doc.builders.Concat\n\t\t\t\t\t| _doc.builders.Line\n\t\t\t\t\t| _doc.builders.Softline\n\t\t\t\t\t| string = softline;\n\t\t\t\tconst hugStart = shouldHugStart(node, opts);\n\t\t\t\tconst hugEnd = shouldHugEnd(node, opts);\n\n\t\t\t\tlet body;\n\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\tbody =\n\t\t\t\t\t\tisInlineElement(path, opts, node) &&\n\t\t\t\t\t\tnode.children.length &&\n\t\t\t\t\t\tisTextNodeStartingWithWhitespace(node.children[0]) &&\n\t\t\t\t\t\t!isPreTagContent(path)\n\t\t\t\t\t\t\t? () => line\n\t\t\t\t\t\t\t: // () => (opts.jsxBracketNewLine ? '' : softline);\n\t\t\t\t\t\t\t () => softline;\n\t\t\t\t} else if (isPreTagContent(path)) {\n\t\t\t\t\tbody = () => printRaw(node);\n\t\t\t\t} else if (isInlineElement(path, opts, node) && !isPreTagContent(path)) {\n\t\t\t\t\tbody = () => path.map(print, 'children');\n\t\t\t\t} else {\n\t\t\t\t\tbody = () => path.map(print, 'children');\n\t\t\t\t}\n\n\t\t\t\tconst openingTag = [\n\t\t\t\t\t'<',\n\t\t\t\t\tnode.name,\n\t\t\t\t\tindent(\n\t\t\t\t\t\tgroup([\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\thugStart\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: !isPreTagContent(path) && !opts.bracketSameLine\n\t\t\t\t\t\t\t\t? dedent(softline)\n\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\tif (hugStart && hugEnd) {\n\t\t\t\t\tconst huggedContent = [softline, group(['>', body(), `</${node.name}`])];\n\n\t\t\t\t\tconst omitSoftlineBeforeClosingTag =\n\t\t\t\t\t\tisEmpty || canOmitSoftlineBeforeClosingTag(path, opts);\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\tisEmpty ? group(huggedContent) : group(indent(huggedContent)),\n\t\t\t\t\t\tomitSoftlineBeforeClosingTag ? '' : softline,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (isPreTagContent(path)) {\n\t\t\t\t\tnoHugSeparatorStart = '';\n\t\t\t\t\tnoHugSeparatorEnd = '';\n\t\t\t\t} else {\n\t\t\t\t\tlet didSetEndSeparator = false;\n\n\t\t\t\t\tif (!hugStart && firstChild && isTextNode(firstChild)) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisTextNodeStartingWithLinebreak(firstChild) &&\n\t\t\t\t\t\t\tfirstChild !== lastChild &&\n\t\t\t\t\t\t\t(!isInlineElement(path, opts, node) || isTextNodeEndingWithWhitespace(lastChild))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoHugSeparatorStart = hardline;\n\t\t\t\t\t\t\tnoHugSeparatorEnd = hardline;\n\t\t\t\t\t\t\tdidSetEndSeparator = true;\n\t\t\t\t\t\t} else if (isInlineElement(path, opts, node)) {\n\t\t\t\t\t\t\tnoHugSeparatorStart = line;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrimTextNodeLeft(firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif (!hugEnd && lastChild && isTextNode(lastChild)) {\n\t\t\t\t\t\tif (isInlineElement(path, opts, node) && !didSetEndSeparator) {\n\t\t\t\t\t\t\tnoHugSeparatorEnd = softline;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrimTextNodeRight(lastChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hugStart) {\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\tindent([softline, group(['>', body()])]),\n\t\t\t\t\t\tnoHugSeparatorEnd,\n\t\t\t\t\t\t`</${node.name}>`,\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (hugEnd) {\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t\tindent([noHugSeparatorStart, group([body(), `</${node.name}`])]),\n\t\t\t\t\t\tcanOmitSoftlineBeforeClosingTag(path, opts) ? '' : softline,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn group([...openingTag, '>', body(), `</${node.name}>`]);\n\t\t\t\t}\n\n\t\t\t\treturn group([\n\t\t\t\t\t...openingTag,\n\t\t\t\t\t'>',\n\t\t\t\t\tindent([noHugSeparatorStart, body()]),\n\t\t\t\t\tnoHugSeparatorEnd,\n\t\t\t\t\t`</${node.name}>`,\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// TODO: WIP\n\t\t\treturn '';\n\t\t}\n\n\t\tcase 'attribute': {\n\t\t\tconst name = node.name.trim();\n\t\t\tconst quote = opts.jsxSingleQuote ? \"'\" : '\"';\n\t\t\tswitch (node.kind) {\n\t\t\t\tcase 'empty':\n\t\t\t\t\treturn [line, name];\n\t\t\t\tcase 'expression':\n\t\t\t\t\t// Handled in the `embed` function\n\t\t\t\t\t// See embed.ts\n\t\t\t\t\treturn '';\n\t\t\t\tcase 'quoted':\n\t\t\t\t\tlet value = node.value;\n\n\t\t\t\t\tif (node.name === 'class') {\n\t\t\t\t\t\tvalue = printClassNames(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.name === 'style') {\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [line, name, '=', quote, value, quote];\n\t\t\t\tcase 'shorthand':\n\t\t\t\t\treturn [line, '{', name, '}'];\n\t\t\t\tcase 'spread':\n\t\t\t\t\treturn [line, '{...', name, '}'];\n\t\t\t\tcase 'template-literal':\n\t\t\t\t\treturn [line, name, '=', '`', node.value, '`'];\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\n\t\tcase 'doctype': {\n\t\t\t// https://www.w3.org/wiki/Doctypes_and_markup_styles\n\t\t\treturn ['<!DOCTYPE html>', hardline];\n\t\t}\n\n\t\tcase 'comment':\n\t\t\tconst nextNode = getNextNode(path);\n\t\t\tlet trailingLine: _doc.builders.Concat | string = '';\n\t\t\tif (nextNode && isTagLikeNode(nextNode)) {\n\t\t\t\ttrailingLine = hardline;\n\t\t\t}\n\t\t\treturn ['<!--', getUnencodedText(node), '-->', trailingLine];\n\n\t\tdefault: {\n\t\t\tthrow new Error(`Unhandled node type \"${node.type}\"!`);\n\t\t}\n\t}\n}\n\n/**\n * Split the text into words separated by whitespace. Replace the whitespaces by lines,\n * collapsing multiple whitespaces into a single line.\n *\n * If the text starts or ends with multiple newlines, two of those should be kept.\n */\nfunction splitTextToDocs(node: TextNode): Doc[] {\n\tconst text = getUnencodedText(node);\n\n\tconst textLines = text.split(/[\\t\\n\\f\\r ]+/);\n\n\tlet docs = join(line, textLines).parts.filter((s) => s !== '');\n\n\tif (startsWithLinebreak(text)) {\n\t\tdocs[0] = hardline;\n\t}\n\tif (startsWithLinebreak(text, 2)) {\n\t\tdocs = [hardline, ...docs];\n\t}\n\n\tif (endsWithLinebreak(text)) {\n\t\tdocs[docs.length - 1] = hardline;\n\t}\n\tif (endsWithLinebreak(text, 2)) {\n\t\tdocs = [...docs, hardline];\n\t}\n\n\treturn docs;\n}\n","import { Doc, ParserOptions } from 'prettier';\nimport _doc from 'prettier/doc';\nimport { SassFormatter, SassFormatterConfig } from 'sass-formatter';\nimport { ExpressionNode } from './nodes';\nimport {\n\tAstPath,\n\tisNodeWithChildren,\n\tisTagLikeNode,\n\tmanualDedent,\n\tprintFn,\n\tprintRaw,\n} from './utils';\n\nconst {\n\tbuilders: { group, indent, join, line, softline, hardline, lineSuffixBoundary },\n\tutils: { stripTrailingHardline, mapDoc },\n} = _doc;\n\ntype supportedStyleLang = 'css' | 'scss' | 'sass';\n\n// https://prettier.io/docs/en/plugins.html#optional-embed\nexport function embed(\n\tpath: AstPath,\n\tprint: printFn,\n\ttextToDoc: (text: string, options: object) => Doc,\n\topts: ParserOptions\n) {\n\tconst node = path.getValue();\n\n\tif (!node) return null;\n\n\tif (node.type === 'expression') {\n\t\tconst jsxNode = makeNodeJSXCompatible<ExpressionNode>(node);\n\t\tconst textContent = printRaw(jsxNode);\n\n\t\tlet content: Doc;\n\n\t\ttry {\n\t\t\tcontent = textToDoc(textContent, {\n\t\t\t\t...opts,\n\t\t\t\tparser: '__js_expression',\n\t\t\t});\n\t\t} catch (e) {\n\t\t\t// The `__js_expression` parser should be able to handle 99% of supported expressions, however there's some very rare cases\n\t\t\t// where we unfortunately need the full `babel-ts` parser. This happens notably with comments. In the future, what\n\t\t\t// we should probably attempt is to make the expression compatible with `__js_expression` through our `makeNodeJSXCompatible` function\n\t\t\tcontent = wrapParserTryCatch(textToDoc, textContent, {\n\t\t\t\t...opts,\n\t\t\t\tparser: 'babel-ts',\n\t\t\t});\n\n\t\t\tcontent = stripTrailingHardline(content);\n\n\t\t\t// HACK: We can't strip the trailing hardline if an expression starts with an inline comment or the ending curly\n\t\t\t// bracket will end on the same line as the comment, which breaks the expression\n\t\t\tif (textContent.trimStart().startsWith('//') && /\\n/.test(textContent)) {\n\t\t\t\treturn group(['{', indent([hardline, content]), hardline, lineSuffixBoundary, '}']);\n\t\t\t}\n\t\t}\n\n\t\t// Create a Doc without the things we had to add to make the expression compatible with Babel\n\t\tconst astroDoc = mapDoc(content, (doc) => {\n\t\t\tif (typeof doc === 'string') {\n\t\t\t\tdoc = doc.replace('_Pé', '{');\n\t\t\t\tdoc = doc.replace('èP_', '}');\n\t\t\t}\n\n\t\t\treturn doc;\n\t\t});\n\n\t\treturn group(['{', indent([softline, astroDoc]), softline, lineSuffixBoundary, '}']);\n\t}\n\n\t// Attribute using an expression as value\n\tif (node.type === 'attribute' && node.kind === 'expression') {\n\t\tconst value = node.value.trim();\n\t\tconst name = node.name.trim();\n\n\t\tconst attrNodeValue = wrapParserTryCatch(textToDoc, value, {\n\t\t\t...opts,\n\t\t\tparser: '__js_expression',\n\t\t});\n\n\t\tif (name === value && opts.astroAllowShorthand) {\n\t\t\treturn [line, '{', attrNodeValue, '}'];\n\t\t}\n\n\t\treturn [line, name, '=', '{', attrNodeValue, '}'];\n\t}\n\n\t// Frontmatter\n\tif (node.type === 'frontmatter') {\n\t\tconst frontmatterContent = wrapParserTryCatch(textToDoc, node.value, {\n\t\t\t...opts,\n\t\t\tparser: 'typescript',\n\t\t});\n\n\t\treturn [group(['---', hardline, frontmatterContent, '---', hardline]), hardline];\n\t}\n\n\t// Script tags\n\tif (node.type === 'element' && node.name === 'script') {\n\t\tconst scriptContent = printRaw(node);\n\t\tlet formattedScript = wrapParserTryCatch(textToDoc, scriptContent, {\n\t\t\t...opts,\n\t\t\tparser: 'typescript',\n\t\t});\n\n\t\tformattedScript = stripTrailingHardline(formattedScript);\n\t\tconst isEmpty = /^\\s*$/.test(scriptContent);\n\n\t\t// print\n\t\tconst attributes = path.map(print, 'attributes');\n\t\tconst openingTag = group(['<script', indent(group(attributes)), softline, '>']);\n\t\treturn [\n\t\t\topeningTag,\n\t\t\tindent([isEmpty ? '' : hardline, formattedScript]),\n\t\t\tisEmpty ? '' : hardline,\n\t\t\t'</script>',\n\t\t];\n\t}\n\n\t// Style tags\n\tif (node.type === 'element' && node.name === 'style') {\n\t\tconst content = printRaw(node);\n\t\tconst supportedStyleLangValues = ['css', 'scss', 'sass'];\n\t\tlet parserLang: supportedStyleLang = 'css';\n\n\t\tif (node.attributes) {\n\t\t\tconst langAttribute = node.attributes.filter((x) => x.name === 'lang');\n\t\t\tif (langAttribute.length) {\n\t\t\t\tconst styleLang = langAttribute[0].value.toLowerCase();\n\t\t\t\tif (supportedStyleLangValues.includes(styleLang))\n\t\t\t\t\tparserLang = styleLang as supportedStyleLang;\n\t\t\t}\n\t\t}\n\n\t\treturn embedStyle(parserLang, content, path, print, textToDoc, opts);\n\t}\n\n\treturn null;\n}\n\nfunction wrapParserTryCatch(\n\tcb: (text: string, options: object) => Doc,\n\ttext: string,\n\toptions: ParserOptions\n) {\n\ttry {\n\t\treturn cb(text, options);\n\t} catch (e) {\n\t\t// If we couldn't parse the expression (ex: syntax error) and we throw here, Prettier fallback to `print` and we'll\n\t\t// get a totally useless error message (ex: unhandled node type). An undocumented way to work around this is to set\n\t\t// `PRETTIER_DEBUG=1`, but nobody know that exists / want to do that just to get useful error messages. So we force it on\n\t\tprocess.env.PRETTIER_DEBUG = 'true';\n\t\tthrow e;\n\t}\n}\n\n/**\n * Due to the differences between Astro and JSX, Prettier's TypeScript parsers (be it `typescript`, `babel` or `babel-ts`)\n * are not able to parse all expressions. A list of the difference that matters here:\n * - Astro allows a shorthand syntax for props. ex: `<Component {props} />`\n * - Astro allows multiple root elements. ex: `<div></div><div></div>`\n */\nfunction makeNodeJSXCompatible<T>(node: any): T {\n\tconst newNode = { ...node };\n\n\tif (isNodeWithChildren(newNode)) {\n\t\tnewNode.children.forEach((child) => {\n\t\t\tif (isTagLikeNode(child)) {\n\t\t\t\tchild.attributes.forEach((attr) => {\n\t\t\t\t\t// Transform shorthand attributes into a form that is both compatible with JSX and that we can find back\n\t\t\t\t\tif (attr.kind === 'shorthand') {\n\t\t\t\t\t\tattr.kind = 'empty';\n\t\t\t\t\t\tattr.name = '_Pé' + attr.name + 'èP_';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (isNodeWithChildren(child)) {\n\t\t\t\t\tchild = makeNodeJSXCompatible(child);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn newNode;\n}\n\n/**\n * Format the content of a style tag and print the entire element\n */\nfunction embedStyle(\n\tlang: supportedStyleLang,\n\tcontent: string,\n\tpath: AstPath,\n\tprint: printFn,\n\ttextToDoc: (text: string, options: object) => Doc,\n\toptions: ParserOptions\n) {\n\tswitch (lang) {\n\t\tcase 'css':\n\t\tcase 'scss': {\n\t\t\tlet formattedStyles = wrapParserTryCatch(textToDoc, content, { ...options, parser: lang });\n\n\t\t\t// The css parser appends an extra indented hardline, which we want outside of the `indent()`,\n\t\t\t// so we remove the last element of the array\n\t\t\tformattedStyles = stripTrailingHardline(formattedStyles);\n\n\t\t\t// print\n\t\t\tconst attributes = path.map(print, 'attributes');\n\t\t\tconst openingTag = group(['<style', indent(group(attributes)), softline, '>']);\n\t\t\treturn [openingTag, indent([hardline, formattedStyles]), hardline, '</style>'];\n\t\t}\n\t\tcase 'sass': {\n\t\t\tconst lineEnding = options.endOfLine.toUpperCase() === 'CRLF' ? 'CRLF' : 'LF';\n\t\t\tconst sassOptions: Partial<SassFormatterConfig> = {\n\t\t\t\ttabSize: options.tabWidth,\n\t\t\t\tinsertSpaces: !options.useTabs,\n\t\t\t\tlineEnding,\n\t\t\t};\n\n\t\t\t// dedent the .sass, otherwise SassFormatter gets indentation wrong\n\t\t\tconst { result: raw } = manualDedent(content);\n\n\t\t\t// format\n\t\t\tconst formattedSassIndented = SassFormatter.Format(raw, sassOptions).trim();\n\n\t\t\t// print\n\t\t\tconst formattedSass = join(hardline, formattedSassIndented.split('\\n'));\n\t\t\tconst attributes = path.map(print, 'attributes');\n\t\t\tconst openingTag = group(['<style', indent(group(attributes)), softline, '>']);\n\t\t\treturn [openingTag, indent(group([hardline, formattedSass])), hardline, '</style>'];\n\t\t}\n\t}\n}\n","import { createRequire } from 'node:module';\nimport { Parser, Printer, SupportLanguage } from 'prettier';\nimport { createSyncFn } from 'synckit';\nimport { options } from './options';\nimport { print } from './printer';\nimport { embed } from './printer/embed';\n\nconst req = createRequire(import.meta.url);\nlet workerPath;\ntry {\n\tworkerPath = req.resolve('../workers/parse-worker.js');\n} catch (e) {\n\tworkerPath = req.resolve('prettier-plugin-astro/workers/parse-worker.js');\n}\nconst parse = createSyncFn(req.resolve(workerPath));\n\n// https://prettier.io/docs/en/plugins.html#languages\nexport const languages: Partial<SupportLanguage>[] = [\n\t{\n\t\tname: 'astro',\n\t\tparsers: ['astro'],\n\t\textensions: ['.astro'],\n\t\tvscodeLanguageIds: ['astro'],\n\t},\n];\n\n// https://prettier.io/docs/en/plugins.html#parsers\nexport const parsers: Record<string, Parser> = {\n\tastro: {\n\t\tparse: (source) => parse(source),\n\t\tastFormat: 'astro',\n\t\tlocStart: (node) => node.start,\n\t\tlocEnd: (node) => node.end,\n\t},\n};\n\n// https://prettier.io/docs/en/plugins.html#printers\nexport const printers: Record<string, Printer> = {\n\tastro: {\n\t\tprint,\n\t\tembed,\n\t},\n};\n\nconst defaultOptions = {\n\ttabWidth: 2,\n};\n\nexport { options, defaultOptions };\n"],"names":["req","createRequire","workerPath","createSyncFn","group","indent","join","line","softline","hardline","stripTrailingHardline","_doc","SassFormatter"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/options.ts","../src/printer/elements.ts","../src/printer/utils.ts","../src/printer/index.ts","../src/printer/embed.ts","../src/index.ts"],"sourcesContent":["import { SupportOption } from 'prettier';\n\ninterface PluginOptions {\n\tastroAllowShorthand: boolean;\n}\n\ndeclare module 'prettier' {\n\t// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\tinterface RequiredOptions extends PluginOptions {}\n}\n\n// https://prettier.io/docs/en/plugins.html#options\nexport const options: Record<keyof PluginOptions, SupportOption> = {\n\tastroAllowShorthand: {\n\t\tsince: '0.0.10',\n\t\tcategory: 'Astro',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription: 'Enable/disable attribute shorthand if attribute name and expression are the same',\n\t},\n};\n","export type TagName = keyof HTMLElementTagNameMap | 'svg';\n\n// https://github.com/prettier/prettier/blob/main/vendors/html-void-elements.json\nexport const selfClosingTags = [\n\t'area',\n\t'base',\n\t'basefont',\n\t'bgsound',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'frame',\n\t'hr',\n\t'image',\n\t'img',\n\t'input',\n\t'isindex',\n\t'keygen',\n\t'link',\n\t'menuitem',\n\t'meta',\n\t'nextid',\n\t'param',\n\t'slot',\n\t'source',\n\t'track',\n\t'wbr',\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements#Elements\nexport const blockElements: TagName[] = [\n\t'address',\n\t'article',\n\t'aside',\n\t'blockquote',\n\t'details',\n\t'dialog',\n\t'dd',\n\t'div',\n\t'dl',\n\t'dt',\n\t'fieldset',\n\t'figcaption',\n\t'figure',\n\t'footer',\n\t'form',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'header',\n\t'hgroup',\n\t'hr',\n\t'li',\n\t'main',\n\t'nav',\n\t'ol',\n\t'p',\n\t'pre',\n\t'section',\n\t'table',\n\t'ul',\n\t// TODO: WIP\n\t'title',\n\t'html',\n];\n\n/**\n * HTML attributes that we may safely reformat (trim whitespace, add or remove newlines)\n */\nexport const formattableAttributes: string[] = [\n\t// None at the moment\n\t// Prettier HTML does not format attributes at all\n\t// and to be consistent we leave this array empty for now\n];\n","import { createRequire } from 'node:module';\nimport { AstPath as AstP, Doc, ParserOptions as ParserOpts } from 'prettier';\nimport { createSyncFn } from 'synckit';\nimport { blockElements, formattableAttributes, TagName } from './elements';\nimport { anyNode, CommentNode, Node, ParentLikeNode, TagLikeNode, TextNode } from './nodes';\n\nexport type printFn = (path: AstPath) => Doc;\nexport type ParserOptions = ParserOpts<anyNode>;\nexport type AstPath = AstP<anyNode>;\n\nconst req = createRequire(import.meta.url);\nlet workerPath;\ntry {\n\tworkerPath = req.resolve('../workers/serialize-worker.js');\n} catch (e) {\n\tworkerPath = req.resolve('prettier-plugin-astro/workers/serialize-worker.js');\n}\nconst serialize = createSyncFn(req.resolve(workerPath));\n\nexport function isInlineElement(path: AstPath, opts: ParserOptions, node: anyNode): boolean {\n\treturn node && node.type === 'element' && !isBlockElement(node, opts) && !isPreTagContent(path);\n}\n\nexport function isBlockElement(node: anyNode, opts: ParserOptions): boolean {\n\treturn (\n\t\tnode &&\n\t\tnode.type === 'element' &&\n\t\topts.htmlWhitespaceSensitivity !== 'strict' &&\n\t\t(opts.htmlWhitespaceSensitivity === 'ignore' || blockElements.includes(node.name as TagName))\n\t);\n}\n\n/**\n * Returns the content of the node\n */\nexport function printRaw(node: anyNode, stripLeadingAndTrailingNewline = false): string {\n\tif (!isNodeWithChildren(node)) {\n\t\treturn '';\n\t}\n\n\tif (node.children.length === 0) {\n\t\treturn '';\n\t}\n\n\tlet raw = node.children.reduce((prev: string, curr: Node) => prev + serialize(curr), '');\n\n\tif (!stripLeadingAndTrailingNewline) {\n\t\treturn raw;\n\t}\n\n\tif (startsWithLinebreak(raw)) {\n\t\traw = raw.substring(raw.indexOf('\\n') + 1);\n\t}\n\tif (endsWithLinebreak(raw)) {\n\t\traw = raw.substring(0, raw.lastIndexOf('\\n'));\n\t\tif (raw.charAt(raw.length - 1) === '\\r') {\n\t\t\traw = raw.substring(0, raw.length - 1);\n\t\t}\n\t}\n\n\treturn raw;\n}\n\nexport function isNodeWithChildren(node: anyNode): node is anyNode & ParentLikeNode {\n\treturn node && 'children' in node && Array.isArray(node.children);\n}\n\nexport const isEmptyTextNode = (node: Node): boolean => {\n\treturn !!node && node.type === 'text' && getUnencodedText(node).trim() === '';\n};\n\nexport function getUnencodedText(node: TextNode | CommentNode): string {\n\treturn node.value;\n}\n\nexport function isTextNodeStartingWithLinebreak(node: TextNode, nrLines = 1): node is TextNode {\n\treturn startsWithLinebreak(getUnencodedText(node), nrLines);\n}\n\nexport function startsWithLinebreak(text: string, nrLines = 1): boolean {\n\treturn new RegExp(`^([\\\\t\\\\f\\\\r ]*\\\\n){${nrLines}}`).test(text);\n}\n\nexport function endsWithLinebreak(text: string, nrLines = 1): boolean {\n\treturn new RegExp(`(\\\\n[\\\\t\\\\f\\\\r ]*){${nrLines}}$`).test(text);\n}\n\nexport function isTextNodeStartingWithWhitespace(node: Node): node is TextNode {\n\treturn isTextNode(node) && /^\\s/.test(getUnencodedText(node));\n}\n\nfunction endsWithWhitespace(text: string) {\n\treturn /\\s$/.test(text);\n}\n\nexport function isTextNodeEndingWithWhitespace(node: Node): node is TextNode {\n\treturn isTextNode(node) && endsWithWhitespace(getUnencodedText(node));\n}\n\n/**\n * Check if given node's start tag should hug its first child. This is the case for inline elements when there's\n * no whitespace between the `>` and the first child.\n */\nexport function shouldHugStart(node: anyNode, opts: ParserOptions): boolean {\n\tif (isBlockElement(node, opts)) {\n\t\treturn false;\n\t}\n\n\tif (!isNodeWithChildren(node)) {\n\t\treturn false;\n\t}\n\n\tconst children = node.children;\n\tif (children.length === 0) {\n\t\treturn true;\n\t}\n\n\tconst firstChild = children[0];\n\treturn !isTextNodeStartingWithWhitespace(firstChild);\n}\n\n/**\n * Check if given node's end tag should hug its last child. This is the case for inline elements when there's\n * no whitespace between the last child and the `</`.\n */\nexport function shouldHugEnd(node: anyNode, opts: ParserOptions): boolean {\n\tif (isBlockElement(node, opts)) {\n\t\treturn false;\n\t}\n\n\tif (!isNodeWithChildren(node)) {\n\t\treturn false;\n\t}\n\n\tconst children = node.children;\n\tif (children.length === 0) {\n\t\treturn true;\n\t}\n\n\tconst lastChild = children[children.length - 1];\n\tif (!isTextNode(lastChild)) return false;\n\treturn !endsWithWhitespace(getUnencodedText(lastChild));\n}\n\n/**\n * Returns true if the softline between `</tagName` and `>` can be omitted.\n */\nexport function canOmitSoftlineBeforeClosingTag(path: AstPath, opts: ParserOptions): boolean {\n\treturn isLastChildWithinParentBlockElement(path, opts);\n}\n\nfunction getChildren(node: anyNode): Node[] {\n\treturn isNodeWithChildren(node) ? node.children : [];\n}\n\nfunction isLastChildWithinParentBlockElement(path: AstPath, opts: ParserOptions): boolean {\n\tconst parent = path.getParentNode();\n\tif (!parent || !isBlockElement(parent, opts)) {\n\t\treturn false;\n\t}\n\n\tconst children = getChildren(parent);\n\tconst lastChild = children[children.length - 1];\n\treturn lastChild === path.getNode();\n}\n\nexport function trimTextNodeLeft(node: TextNode): void {\n\tnode.value = node.value && node.value.trimStart();\n}\n\nexport function trimTextNodeRight(node: TextNode): void {\n\tnode.value = node.value && node.value.trimEnd();\n}\n\nexport function printClassNames(value: string) {\n\treturn value.trim().split(/\\s+/).join(' ');\n}\n\n/** dedent string & return tabSize (the last part is what we need) */\nexport function manualDedent(input: string): {\n\ttabSize: number;\n\tchar: string;\n\tresult: string;\n} {\n\tlet minTabSize = Infinity;\n\tlet result = input;\n\t// 1. normalize\n\tresult = result.replace(/\\r\\n/g, '\\n');\n\n\t// 2. count tabSize\n\tlet char = '';\n\tfor (const line of result.split('\\n')) {\n\t\tif (!line) continue;\n\t\t// if any line begins with a non-whitespace char, minTabSize is 0\n\t\tif (line[0] && /^[^\\s]/.test(line[0])) {\n\t\t\tminTabSize = 0;\n\t\t\tbreak;\n\t\t}\n\t\tconst match = line.match(/^(\\s+)\\S+/); // \\S ensures we don’t count lines of pure whitespace\n\t\tif (match) {\n\t\t\tif (match[1] && !char) char = match[1][0];\n\t\t\tif (match[1].length < minTabSize) minTabSize = match[1].length;\n\t\t}\n\t}\n\n\t// 3. reformat string\n\tif (minTabSize > 0 && Number.isFinite(minTabSize)) {\n\t\tresult = result.replace(new RegExp(`^${new Array(minTabSize + 1).join(char)}`, 'gm'), '');\n\t}\n\n\treturn {\n\t\ttabSize: minTabSize === Infinity ? 0 : minTabSize,\n\t\tchar,\n\t\tresult,\n\t};\n}\n\n/** True if the node is of type text */\nexport function isTextNode(node: anyNode): node is TextNode {\n\treturn node.type === 'text';\n}\n\n/** True if the node is TagLikeNode:\n *\n * ElementNode | ComponentNode | CustomElementNode | FragmentNode */\nexport function isTagLikeNode(node: anyNode): node is TagLikeNode {\n\treturn (\n\t\tnode.type === 'element' ||\n\t\tnode.type === 'component' ||\n\t\tnode.type === 'custom-element' ||\n\t\tnode.type === 'fragment'\n\t);\n}\n\n/**\n * Returns siblings, that is, the children of the parent.\n */\nexport function getSiblings(path: AstPath): anyNode[] {\n\tconst parent = path.getParentNode();\n\tif (!parent) return [];\n\n\treturn getChildren(parent);\n}\n\nexport function getNextNode(path: AstPath): anyNode | null {\n\tconst node = path.getNode();\n\tif (node) {\n\t\tconst siblings = getSiblings(path);\n\t\tif (node.position?.start === siblings[siblings.length - 1].position?.start) return null;\n\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\tconst sibling = siblings[i];\n\t\t\tif (sibling.position?.start === node.position?.start && i !== siblings.length - 1) {\n\t\t\t\treturn siblings[i + 1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport const isPreTagContent = (path: AstPath): boolean => {\n\tif (!path || !path.stack || !Array.isArray(path.stack)) return false;\n\treturn path.stack.some(\n\t\t(node: anyNode) =>\n\t\t\t(node.type === 'element' && node.name.toLowerCase() === 'pre') ||\n\t\t\t(node.type === 'attribute' && !formattableAttributes.includes(node.name))\n\t);\n};\n","import { Doc } from 'prettier';\nimport { selfClosingTags } from './elements';\nimport {\n\tAstPath,\n\tcanOmitSoftlineBeforeClosingTag,\n\tendsWithLinebreak,\n\tgetNextNode,\n\tgetUnencodedText,\n\tisEmptyTextNode,\n\tisInlineElement,\n\tisPreTagContent,\n\tisTagLikeNode,\n\tisTextNode,\n\tisTextNodeEndingWithWhitespace,\n\tisTextNodeStartingWithLinebreak,\n\tisTextNodeStartingWithWhitespace,\n\tParserOptions,\n\tprintClassNames,\n\tprintFn,\n\tprintRaw,\n\tshouldHugEnd,\n\tshouldHugStart,\n\tstartsWithLinebreak,\n\ttrimTextNodeLeft,\n\ttrimTextNodeRight,\n} from './utils';\nimport { TextNode } from './nodes';\n\nimport _doc from 'prettier/doc';\nconst {\n\tbuilders: { breakParent, dedent, fill, group, indent, join, line, softline, hardline },\n\tutils: { stripTrailingHardline },\n} = _doc;\n\n// https://prettier.io/docs/en/plugins.html#print\n// eslint-disable-next-line @typescript-eslint/no-shadow\nexport function print(path: AstPath, opts: ParserOptions, print: printFn): Doc {\n\tconst node = path.getValue();\n\n\t// 1. handle special node types\n\tif (!node) {\n\t\treturn '';\n\t}\n\n\tif (typeof node === 'string') {\n\t\treturn node;\n\t}\n\n\t// 2. handle printing\n\tswitch (node.type) {\n\t\tcase 'root': {\n\t\t\treturn [stripTrailingHardline(path.map(print, 'children')), hardline];\n\t\t}\n\n\t\tcase 'text': {\n\t\t\tconst rawText = getUnencodedText(node);\n\n\t\t\t// TODO: TEST PRE TAGS\n\t\t\t// if (isPreTagContent(path)) {\n\t\t\t// if (path.getParentNode()?.type === 'Attribute') {\n\t\t\t// // Direct child of attribute value -> add literallines at end of lines\n\t\t\t// // so that other things don't break in unexpected places\n\t\t\t// return replaceEndOfLineWith(rawText, literalline);\n\t\t\t// }\n\t\t\t// return rawText;\n\t\t\t// }\n\n\t\t\tif (isEmptyTextNode(node)) {\n\t\t\t\tconst hasWhiteSpace = rawText.trim().length < getUnencodedText(node).length;\n\t\t\t\tconst hasOneOrMoreNewlines = /\\n/.test(getUnencodedText(node));\n\t\t\t\tconst hasTwoOrMoreNewlines = /\\n\\r?\\s*\\n\\r?/.test(getUnencodedText(node));\n\t\t\t\tif (hasTwoOrMoreNewlines) {\n\t\t\t\t\treturn [hardline, hardline];\n\t\t\t\t}\n\t\t\t\tif (hasOneOrMoreNewlines) {\n\t\t\t\t\treturn hardline;\n\t\t\t\t}\n\t\t\t\tif (hasWhiteSpace) {\n\t\t\t\t\treturn line;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * For non-empty text nodes each sequence of non-whitespace characters (effectively,\n\t\t\t * each \"word\") is joined by a single `line`, which will be rendered as a single space\n\t\t\t * until this node's current line is out of room, at which `fill` will break at the\n\t\t\t * most convenient instance of `line`.\n\t\t\t */\n\t\t\treturn fill(splitTextToDocs(node));\n\t\t}\n\n\t\tcase 'component':\n\t\tcase 'fragment':\n\t\tcase 'custom-element':\n\t\tcase 'element': {\n\t\t\tlet isEmpty: boolean;\n\t\t\tif (!node.children) {\n\t\t\t\tisEmpty = true;\n\t\t\t} else {\n\t\t\t\tisEmpty = node.children.every((child) => isEmptyTextNode(child));\n\t\t\t}\n\t\t\tconst isSelfClosingTag =\n\t\t\t\tisEmpty && (node.type !== 'element' || selfClosingTags.includes(node.name));\n\n\t\t\tconst attributeLine =\n\t\t\t\topts.singleAttributePerLine && node.attributes.length > 1 ? breakParent : '';\n\t\t\tconst attributes = join(attributeLine, path.map(print, 'attributes'));\n\n\t\t\tif (isSelfClosingTag) {\n\t\t\t\treturn group(['<', node.name, indent(attributes), line, `/>`]);\n\t\t\t}\n\n\t\t\tif (node.children) {\n\t\t\t\tconst children = node.children;\n\t\t\t\tconst firstChild = children[0];\n\t\t\t\tconst lastChild = children[children.length - 1];\n\n\t\t\t\t// No hugging of content means it's either a block element and/or there's whitespace at the start/end\n\t\t\t\tlet noHugSeparatorStart:\n\t\t\t\t\t| _doc.builders.Concat\n\t\t\t\t\t| _doc.builders.Line\n\t\t\t\t\t| _doc.builders.Softline\n\t\t\t\t\t| string = softline;\n\t\t\t\tlet noHugSeparatorEnd:\n\t\t\t\t\t| _doc.builders.Concat\n\t\t\t\t\t| _doc.builders.Line\n\t\t\t\t\t| _doc.builders.Softline\n\t\t\t\t\t| string = softline;\n\t\t\t\tconst hugStart = shouldHugStart(node, opts);\n\t\t\t\tconst hugEnd = shouldHugEnd(node, opts);\n\n\t\t\t\tlet body;\n\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\tbody =\n\t\t\t\t\t\tisInlineElement(path, opts, node) &&\n\t\t\t\t\t\tnode.children.length &&\n\t\t\t\t\t\tisTextNodeStartingWithWhitespace(node.children[0]) &&\n\t\t\t\t\t\t!isPreTagContent(path)\n\t\t\t\t\t\t\t? () => line\n\t\t\t\t\t\t\t: // () => (opts.jsxBracketNewLine ? '' : softline);\n\t\t\t\t\t\t\t () => softline;\n\t\t\t\t} else if (isPreTagContent(path)) {\n\t\t\t\t\tbody = () => printRaw(node);\n\t\t\t\t} else if (isInlineElement(path, opts, node) && !isPreTagContent(path)) {\n\t\t\t\t\tbody = () => path.map(print, 'children');\n\t\t\t\t} else {\n\t\t\t\t\tbody = () => path.map(print, 'children');\n\t\t\t\t}\n\n\t\t\t\tconst openingTag = [\n\t\t\t\t\t'<',\n\t\t\t\t\tnode.name,\n\t\t\t\t\tindent(\n\t\t\t\t\t\tgroup([\n\t\t\t\t\t\t\tattributes,\n\t\t\t\t\t\t\thugStart\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: !isPreTagContent(path) && !opts.bracketSameLine\n\t\t\t\t\t\t\t\t? dedent(softline)\n\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t])\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\tif (hugStart && hugEnd) {\n\t\t\t\t\tconst huggedContent = [softline, group(['>', body(), `</${node.name}`])];\n\n\t\t\t\t\tconst omitSoftlineBeforeClosingTag =\n\t\t\t\t\t\tisEmpty || canOmitSoftlineBeforeClosingTag(path, opts);\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\tisEmpty ? group(huggedContent) : group(indent(huggedContent)),\n\t\t\t\t\t\tomitSoftlineBeforeClosingTag ? '' : softline,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (isPreTagContent(path)) {\n\t\t\t\t\tnoHugSeparatorStart = '';\n\t\t\t\t\tnoHugSeparatorEnd = '';\n\t\t\t\t} else {\n\t\t\t\t\tlet didSetEndSeparator = false;\n\n\t\t\t\t\tif (!hugStart && firstChild && isTextNode(firstChild)) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tisTextNodeStartingWithLinebreak(firstChild) &&\n\t\t\t\t\t\t\tfirstChild !== lastChild &&\n\t\t\t\t\t\t\t(!isInlineElement(path, opts, node) || isTextNodeEndingWithWhitespace(lastChild))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoHugSeparatorStart = hardline;\n\t\t\t\t\t\t\tnoHugSeparatorEnd = hardline;\n\t\t\t\t\t\t\tdidSetEndSeparator = true;\n\t\t\t\t\t\t} else if (isInlineElement(path, opts, node)) {\n\t\t\t\t\t\t\tnoHugSeparatorStart = line;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrimTextNodeLeft(firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif (!hugEnd && lastChild && isTextNode(lastChild)) {\n\t\t\t\t\t\tif (isInlineElement(path, opts, node) && !didSetEndSeparator) {\n\t\t\t\t\t\t\tnoHugSeparatorEnd = softline;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrimTextNodeRight(lastChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hugStart) {\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\tindent([softline, group(['>', body()])]),\n\t\t\t\t\t\tnoHugSeparatorEnd,\n\t\t\t\t\t\t`</${node.name}>`,\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (hugEnd) {\n\t\t\t\t\treturn group([\n\t\t\t\t\t\t...openingTag,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t\tindent([noHugSeparatorStart, group([body(), `</${node.name}`])]),\n\t\t\t\t\t\tcanOmitSoftlineBeforeClosingTag(path, opts) ? '' : softline,\n\t\t\t\t\t\t'>',\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn group([...openingTag, '>', body(), `</${node.name}>`]);\n\t\t\t\t}\n\n\t\t\t\treturn group([\n\t\t\t\t\t...openingTag,\n\t\t\t\t\t'>',\n\t\t\t\t\tindent([noHugSeparatorStart, body()]),\n\t\t\t\t\tnoHugSeparatorEnd,\n\t\t\t\t\t`</${node.name}>`,\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\t// TODO: WIP\n\t\t\treturn '';\n\t\t}\n\n\t\tcase 'attribute': {\n\t\t\tconst name = node.name.trim();\n\t\t\tconst quote = opts.jsxSingleQuote ? \"'\" : '\"';\n\t\t\tswitch (node.kind) {\n\t\t\t\tcase 'empty':\n\t\t\t\t\treturn [line, name];\n\t\t\t\tcase 'expression':\n\t\t\t\t\t// Handled in the `embed` function\n\t\t\t\t\t// See embed.ts\n\t\t\t\t\treturn '';\n\t\t\t\tcase 'quoted':\n\t\t\t\t\tlet value = node.value;\n\n\t\t\t\t\tif (node.name === 'class') {\n\t\t\t\t\t\tvalue = printClassNames(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.name === 'style') {\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [line, name, '=', quote, value, quote];\n\t\t\t\tcase 'shorthand':\n\t\t\t\t\treturn [line, '{', name, '}'];\n\t\t\t\tcase 'spread':\n\t\t\t\t\treturn [line, '{...', name, '}'];\n\t\t\t\tcase 'template-literal':\n\t\t\t\t\treturn [line, name, '=', '`', node.value, '`'];\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\n\t\tcase 'doctype': {\n\t\t\t// https://www.w3.org/wiki/Doctypes_and_markup_styles\n\t\t\treturn ['<!DOCTYPE html>', hardline];\n\t\t}\n\n\t\tcase 'comment':\n\t\t\tconst nextNode = getNextNode(path);\n\t\t\tlet trailingLine: _doc.builders.Concat | string = '';\n\t\t\tif (nextNode && isTagLikeNode(nextNode)) {\n\t\t\t\ttrailingLine = hardline;\n\t\t\t}\n\t\t\treturn ['<!--', getUnencodedText(node), '-->', trailingLine];\n\n\t\tdefault: {\n\t\t\tthrow new Error(`Unhandled node type \"${node.type}\"!`);\n\t\t}\n\t}\n}\n\n/**\n * Split the text into words separated by whitespace. Replace the whitespaces by lines,\n * collapsing multiple whitespaces into a single line.\n *\n * If the text starts or ends with multiple newlines, two of those should be kept.\n */\nfunction splitTextToDocs(node: TextNode): Doc[] {\n\tconst text = getUnencodedText(node);\n\n\tconst textLines = text.split(/[\\t\\n\\f\\r ]+/);\n\n\tlet docs = join(line, textLines).parts.filter((s) => s !== '');\n\n\tif (startsWithLinebreak(text)) {\n\t\tdocs[0] = hardline;\n\t}\n\tif (startsWithLinebreak(text, 2)) {\n\t\tdocs = [hardline, ...docs];\n\t}\n\n\tif (endsWithLinebreak(text)) {\n\t\tdocs[docs.length - 1] = hardline;\n\t}\n\tif (endsWithLinebreak(text, 2)) {\n\t\tdocs = [...docs, hardline];\n\t}\n\n\treturn docs;\n}\n","import { BuiltInParsers, Doc, ParserOptions } from 'prettier';\nimport _doc from 'prettier/doc';\nimport { SassFormatter, SassFormatterConfig } from 'sass-formatter';\nimport { ExpressionNode } from './nodes';\nimport {\n\tAstPath,\n\tisNodeWithChildren,\n\tisTagLikeNode,\n\tmanualDedent,\n\tprintFn,\n\tprintRaw,\n} from './utils';\n\nconst {\n\tbuilders: { group, indent, join, line, softline, hardline, lineSuffixBoundary },\n\tutils: { stripTrailingHardline, mapDoc },\n} = _doc;\n\ntype supportedStyleLang = 'css' | 'scss' | 'sass';\n\n// https://prettier.io/docs/en/plugins.html#optional-embed\nexport function embed(\n\tpath: AstPath,\n\tprint: printFn,\n\ttextToDoc: (text: string, options: object) => Doc,\n\topts: ParserOptions\n) {\n\tconst node = path.getValue();\n\n\tif (!node) return null;\n\n\tif (node.type === 'expression') {\n\t\tconst jsxNode = makeNodeJSXCompatible<ExpressionNode>(node);\n\t\tconst textContent = printRaw(jsxNode);\n\n\t\tlet content: Doc;\n\n\t\tcontent = wrapParserTryCatch(textToDoc, forceIntoExpression(textContent), {\n\t\t\t...opts,\n\t\t\tparser: expressionParser,\n\t\t});\n\n\t\tcontent = stripTrailingHardline(content);\n\n\t\t// HACK: Bit of a weird hack to get if a document is exclusively comments\n\t\t// Using `mapDoc` directly to build the array for some reason caused it to always be undefined? Not sure why\n\t\tconst strings: string[] = [];\n\t\tmapDoc(content, (doc) => {\n\t\t\tif (typeof doc === 'string') {\n\t\t\t\tstrings.push(doc);\n\t\t\t}\n\t\t});\n\n\t\tif (strings.every((value) => value.startsWith('//'))) {\n\t\t\treturn group(['{', content, softline, lineSuffixBoundary, '}']);\n\t\t}\n\n\t\t// Create a Doc without the things we had to add to make the expression compatible with Babel\n\t\tconst astroDoc = mapDoc(content, (doc) => {\n\t\t\tif (typeof doc === 'string') {\n\t\t\t\tdoc = doc.replace('_Pé', '{');\n\t\t\t\tdoc = doc.replace('èP_', '}');\n\t\t\t}\n\n\t\t\treturn doc;\n\t\t});\n\n\t\treturn group(['{', indent([softline, astroDoc]), softline, lineSuffixBoundary, '}']);\n\t}\n\n\t// Attribute using an expression as value\n\tif (node.type === 'attribute' && node.kind === 'expression') {\n\t\tconst value = node.value.trim();\n\t\tconst name = node.name.trim();\n\n\t\tconst attrNodeValue = wrapParserTryCatch(textToDoc, forceIntoExpression(value), {\n\t\t\t...opts,\n\t\t\tparser: expressionParser,\n\t\t});\n\n\t\tif (name === value && opts.astroAllowShorthand) {\n\t\t\treturn [line, '{', attrNodeValue, '}'];\n\t\t}\n\n\t\treturn [line, name, '=', '{', attrNodeValue, '}'];\n\t}\n\n\t// Frontmatter\n\tif (node.type === 'frontmatter') {\n\t\tconst frontmatterContent = wrapParserTryCatch(textToDoc, node.value, {\n\t\t\t...opts,\n\t\t\tparser: 'typescript',\n\t\t});\n\n\t\treturn [group(['---', hardline, frontmatterContent, '---', hardline]), hardline];\n\t}\n\n\t// Script tags\n\tif (node.type === 'element' && node.name === 'script') {\n\t\tconst scriptContent = printRaw(node);\n\t\tlet formattedScript = wrapParserTryCatch(textToDoc, scriptContent, {\n\t\t\t...opts,\n\t\t\tparser: 'typescript',\n\t\t});\n\n\t\tformattedScript = stripTrailingHardline(formattedScript);\n\t\tconst isEmpty = /^\\s*$/.test(scriptContent);\n\n\t\t// print\n\t\tconst attributes = path.map(print, 'attributes');\n\t\tconst openingTag = group(['<script', indent(group(attributes)), softline, '>']);\n\t\treturn [\n\t\t\topeningTag,\n\t\t\tindent([isEmpty ? '' : hardline, formattedScript]),\n\t\t\tisEmpty ? '' : hardline,\n\t\t\t'</script>',\n\t\t];\n\t}\n\n\t// Style tags\n\tif (node.type === 'element' && node.name === 'style') {\n\t\tconst content = printRaw(node);\n\t\tconst supportedStyleLangValues = ['css', 'scss', 'sass'];\n\t\tlet parserLang: supportedStyleLang = 'css';\n\n\t\tif (node.attributes) {\n\t\t\tconst langAttribute = node.attributes.filter((x) => x.name === 'lang');\n\t\t\tif (langAttribute.length) {\n\t\t\t\tconst styleLang = langAttribute[0].value.toLowerCase();\n\t\t\t\tif (supportedStyleLangValues.includes(styleLang))\n\t\t\t\t\tparserLang = styleLang as supportedStyleLang;\n\t\t\t}\n\t\t}\n\n\t\treturn embedStyle(parserLang, content, path, print, textToDoc, opts);\n\t}\n\n\treturn null;\n}\n\nfunction wrapParserTryCatch(\n\tcb: (text: string, options: object) => Doc,\n\ttext: string,\n\toptions: ParserOptions\n) {\n\ttry {\n\t\treturn cb(text, options);\n\t} catch (e) {\n\t\t// If we couldn't parse the expression (ex: syntax error) and we throw here, Prettier fallback to `print` and we'll\n\t\t// get a totally useless error message (ex: unhandled node type). An undocumented way to work around this is to set\n\t\t// `PRETTIER_DEBUG=1`, but nobody know that exists / want to do that just to get useful error messages. So we force it on\n\t\tprocess.env.PRETTIER_DEBUG = 'true';\n\t\tthrow e;\n\t}\n}\n\nfunction forceIntoExpression(statement: string) {\n\t// note the trailing newline: if the statement ends in a // comment,\n\t// we can't add the closing bracket right afterwards\n\treturn `<>{${statement}\\n}</>`;\n}\n\nfunction expressionParser(text: string, parsers: BuiltInParsers, options: ParserOptions) {\n\tconst ast = parsers['babel-ts'](text, options);\n\n\treturn {\n\t\t...ast,\n\t\tprogram: ast.program.body[0].expression.children[0].expression,\n\t};\n}\n\n/**\n * Due to the differences between Astro and JSX, Prettier's TypeScript parsers (be it `typescript`, `babel` or `babel-ts`)\n * are not able to parse all expressions. A list of the difference that matters here:\n * - Astro allows a shorthand syntax for props. ex: `<Component {props} />`\n * - Astro allows multiple root elements. ex: `<div></div><div></div>`\n */\nfunction makeNodeJSXCompatible<T>(node: any): T {\n\tconst newNode = { ...node };\n\n\tif (isNodeWithChildren(newNode)) {\n\t\tnewNode.children.forEach((child) => {\n\t\t\tif (isTagLikeNode(child)) {\n\t\t\t\tchild.attributes.forEach((attr) => {\n\t\t\t\t\t// Transform shorthand attributes into a form that is both compatible with JSX and that we can find back\n\t\t\t\t\tif (attr.kind === 'shorthand') {\n\t\t\t\t\t\tattr.kind = 'empty';\n\t\t\t\t\t\tattr.name = '_Pé' + attr.name + 'èP_';\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (isNodeWithChildren(child)) {\n\t\t\t\t\tchild = makeNodeJSXCompatible(child);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn newNode;\n}\n\n/**\n * Format the content of a style tag and print the entire element\n */\nfunction embedStyle(\n\tlang: supportedStyleLang,\n\tcontent: string,\n\tpath: AstPath,\n\tprint: printFn,\n\ttextToDoc: (text: string, options: object) => Doc,\n\toptions: ParserOptions\n) {\n\tswitch (lang) {\n\t\tcase 'css':\n\t\tcase 'scss': {\n\t\t\tlet formattedStyles = wrapParserTryCatch(textToDoc, content, { ...options, parser: lang });\n\n\t\t\t// The css parser appends an extra indented hardline, which we want outside of the `indent()`,\n\t\t\t// so we remove the last element of the array\n\t\t\tformattedStyles = stripTrailingHardline(formattedStyles);\n\n\t\t\t// print\n\t\t\tconst attributes = path.map(print, 'attributes');\n\t\t\tconst openingTag = group(['<style', indent(group(attributes)), softline, '>']);\n\t\t\treturn [openingTag, indent([hardline, formattedStyles]), hardline, '</style>'];\n\t\t}\n\t\tcase 'sass': {\n\t\t\tconst lineEnding = options.endOfLine.toUpperCase() === 'CRLF' ? 'CRLF' : 'LF';\n\t\t\tconst sassOptions: Partial<SassFormatterConfig> = {\n\t\t\t\ttabSize: options.tabWidth,\n\t\t\t\tinsertSpaces: !options.useTabs,\n\t\t\t\tlineEnding,\n\t\t\t};\n\n\t\t\t// dedent the .sass, otherwise SassFormatter gets indentation wrong\n\t\t\tconst { result: raw } = manualDedent(content);\n\n\t\t\t// format\n\t\t\tconst formattedSassIndented = SassFormatter.Format(raw, sassOptions).trim();\n\n\t\t\t// print\n\t\t\tconst formattedSass = join(hardline, formattedSassIndented.split('\\n'));\n\t\t\tconst attributes = path.map(print, 'attributes');\n\t\t\tconst openingTag = group(['<style', indent(group(attributes)), softline, '>']);\n\t\t\treturn [openingTag, indent(group([hardline, formattedSass])), hardline, '</style>'];\n\t\t}\n\t}\n}\n","import { createRequire } from 'node:module';\nimport { Parser, Printer, SupportLanguage } from 'prettier';\nimport { createSyncFn } from 'synckit';\nimport { options } from './options';\nimport { print } from './printer';\nimport { embed } from './printer/embed';\n\nconst req = createRequire(import.meta.url);\nlet workerPath;\ntry {\n\tworkerPath = req.resolve('../workers/parse-worker.js');\n} catch (e) {\n\tworkerPath = req.resolve('prettier-plugin-astro/workers/parse-worker.js');\n}\nconst parse = createSyncFn(req.resolve(workerPath));\n\n// https://prettier.io/docs/en/plugins.html#languages\nexport const languages: Partial<SupportLanguage>[] = [\n\t{\n\t\tname: 'astro',\n\t\tparsers: ['astro'],\n\t\textensions: ['.astro'],\n\t\tvscodeLanguageIds: ['astro'],\n\t},\n];\n\n// https://prettier.io/docs/en/plugins.html#parsers\nexport const parsers: Record<string, Parser> = {\n\tastro: {\n\t\tparse: (source) => parse(source),\n\t\tastFormat: 'astro',\n\t\tlocStart: (node) => node.start,\n\t\tlocEnd: (node) => node.end,\n\t},\n};\n\n// https://prettier.io/docs/en/plugins.html#printers\nexport const printers: Record<string, Printer> = {\n\tastro: {\n\t\tprint,\n\t\tembed,\n\t},\n};\n\nconst defaultOptions = {\n\ttabWidth: 2,\n};\n\nexport { options, defaultOptions };\n"],"names":["req","createRequire","workerPath","createSyncFn","group","indent","join","line","softline","hardline","stripTrailingHardline","_doc","SassFormatter"],"mappings":";;;;;;;;;;;;;AAYa,MAAA,OAAO,GAA+C;AAClE,IAAA,mBAAmB,EAAE;AACpB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,WAAW,EAAE,kFAAkF;AAC/F,KAAA;;;AChBK,MAAM,eAAe,GAAG;IAC9B,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,IAAI;IACJ,KAAK;IACL,SAAS;IACT,OAAO;IACP,OAAO;IACP,IAAI;IACJ,OAAO;IACP,KAAK;IACL,OAAO;IACP,SAAS;IACT,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,OAAO;IACP,KAAK;CACL,CAAC;AAGK,MAAM,aAAa,GAAc;IACvC,SAAS;IACT,SAAS;IACT,OAAO;IACP,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,GAAG;IACH,KAAK;IACL,SAAS;IACT,OAAO;IACP,IAAI;IAEJ,OAAO;IACP,MAAM;CACN,CAAC;AAKK,MAAM,qBAAqB,GAAa,EAI9C;;ACnED,MAAMA,KAAG,GAAGC,yBAAa,CAAC,mMAAe,CAAC,CAAC;AAC3C,IAAIC,YAAU,CAAC;AACf,IAAI;AACH,IAAAA,YAAU,GAAGF,KAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC3D,CAAA;AAAC,OAAO,CAAC,EAAE;AACX,IAAAE,YAAU,GAAGF,KAAG,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;AAC9E,CAAA;AACD,MAAM,SAAS,GAAGG,oBAAY,CAACH,KAAG,CAAC,OAAO,CAACE,YAAU,CAAC,CAAC,CAAC;SAExC,eAAe,CAAC,IAAa,EAAE,IAAmB,EAAE,IAAa,EAAA;IAChF,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC;AAEe,SAAA,cAAc,CAAC,IAAa,EAAE,IAAmB,EAAA;AAChE,IAAA,QACC,IAAI;QACJ,IAAI,CAAC,IAAI,KAAK,SAAS;QACvB,IAAI,CAAC,yBAAyB,KAAK,QAAQ;AAC3C,SAAC,IAAI,CAAC,yBAAyB,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAe,CAAC,CAAC,EAC5F;AACH,CAAC;SAKe,QAAQ,CAAC,IAAa,EAAE,8BAA8B,GAAG,KAAK,EAAA;AAC7E,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,EAAE,CAAC;AACV,KAAA;AAED,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,EAAE,CAAC;AACV,KAAA;IAED,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,IAAU,KAAK,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzF,IAAI,CAAC,8BAA8B,EAAE;AACpC,QAAA,OAAO,GAAG,CAAC;AACX,KAAA;AAED,IAAA,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE;AAC7B,QAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,KAAA;AACD,IAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC3B,QAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;AACxC,YAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,SAAA;AACD,KAAA;AAED,IAAA,OAAO,GAAG,CAAC;AACZ,CAAC;AAEK,SAAU,kBAAkB,CAAC,IAAa,EAAA;AAC/C,IAAA,OAAO,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnE,CAAC;AAEM,MAAM,eAAe,GAAG,CAAC,IAAU,KAAa;AACtD,IAAA,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC,CAAC;AAEI,SAAU,gBAAgB,CAAC,IAA4B,EAAA;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;SAEe,+BAA+B,CAAC,IAAc,EAAE,OAAO,GAAG,CAAC,EAAA;IAC1E,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;SAEe,mBAAmB,CAAC,IAAY,EAAE,OAAO,GAAG,CAAC,EAAA;AAC5D,IAAA,OAAO,IAAI,MAAM,CAAC,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;SAEe,iBAAiB,CAAC,IAAY,EAAE,OAAO,GAAG,CAAC,EAAA;AAC1D,IAAA,OAAO,IAAI,MAAM,CAAC,CAAA,mBAAA,EAAsB,OAAO,CAAA,EAAA,CAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAEK,SAAU,gCAAgC,CAAC,IAAU,EAAA;AAC1D,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAA;AACvC,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAEK,SAAU,8BAA8B,CAAC,IAAU,EAAA;AACxD,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAMe,SAAA,cAAc,CAAC,IAAa,EAAE,IAAmB,EAAA;AAChE,IAAA,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC/B,QAAA,OAAO,KAAK,CAAC;AACb,KAAA;AAED,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,KAAK,CAAC;AACb,KAAA;AAED,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC;AACZ,KAAA;AAED,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAA,OAAO,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC;AAMe,SAAA,YAAY,CAAC,IAAa,EAAE,IAAmB,EAAA;AAC9D,IAAA,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC/B,QAAA,OAAO,KAAK,CAAC;AACb,KAAA;AAED,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,KAAK,CAAC;AACb,KAAA;AAED,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC;AACZ,KAAA;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,IAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;IACzC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,CAAC;AAKe,SAAA,+BAA+B,CAAC,IAAa,EAAE,IAAmB,EAAA;AACjF,IAAA,OAAO,mCAAmC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAA;AACjC,IAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,mCAAmC,CAAC,IAAa,EAAE,IAAmB,EAAA;AAC9E,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAC7C,QAAA,OAAO,KAAK,CAAC;AACb,KAAA;AAED,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,IAAA,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAc,EAAA;AAC9C,IAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AACnD,CAAC;AAEK,SAAU,iBAAiB,CAAC,IAAc,EAAA;AAC/C,IAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACjD,CAAC;AAEK,SAAU,eAAe,CAAC,KAAa,EAAA;AAC5C,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAGK,SAAU,YAAY,CAAC,KAAa,EAAA;IAKzC,IAAI,UAAU,GAAG,QAAQ,CAAC;IAC1B,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAGvC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE,SAAS;AAEpB,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACtC,UAAU,GAAG,CAAC,CAAC;YACf,MAAM;AACN,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACtC,QAAA,IAAI,KAAK,EAAE;AACV,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;gBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU;AAAE,gBAAA,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,SAAA;AACD,KAAA;IAGD,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClD,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1F,KAAA;IAED,OAAO;QACN,OAAO,EAAE,UAAU,KAAK,QAAQ,GAAG,CAAC,GAAG,UAAU;QACjD,IAAI;QACJ,MAAM;KACN,CAAC;AACH,CAAC;AAGK,SAAU,UAAU,CAAC,IAAa,EAAA;AACvC,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAC7B,CAAC;AAKK,SAAU,aAAa,CAAC,IAAa,EAAA;AAC1C,IAAA,QACC,IAAI,CAAC,IAAI,KAAK,SAAS;QACvB,IAAI,CAAC,IAAI,KAAK,WAAW;QACzB,IAAI,CAAC,IAAI,KAAK,gBAAgB;AAC9B,QAAA,IAAI,CAAC,IAAI,KAAK,UAAU,EACvB;AACH,CAAC;AAKK,SAAU,WAAW,CAAC,IAAa,EAAA;AACxC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACpC,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE,CAAC;AAEvB,IAAA,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAEK,SAAU,WAAW,CAAC,IAAa,EAAA;;AACxC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAA,IAAI,IAAI,EAAE;AACT,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,OAAK,CAAA,EAAA,GAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAA;AAAE,YAAA,OAAO,IAAI,CAAC;AACxF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAA,MAAA,OAAO,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,OAAK,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAA,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAClF,gBAAA,OAAO,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvB,aAAA;AACD,SAAA;AACD,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;AAEM,MAAM,eAAe,GAAG,CAAC,IAAa,KAAa;AACzD,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;IACrE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACrB,CAAC,IAAa,KACb,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK;AAC7D,SAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;AACH,CAAC;;AC7OD,MAAM,EACL,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,SAAEE,OAAK,UAAEC,QAAM,QAAEC,MAAI,QAAEC,MAAI,YAAEC,UAAQ,YAAEC,UAAQ,EAAE,EACtF,KAAK,EAAE,yBAAEC,uBAAqB,EAAE,GAChC,GAAGC,wBAAI,CAAC;SAIO,KAAK,CAAC,IAAa,EAAE,IAAmB,EAAE,KAAc,EAAA;AACvE,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAG7B,IAAI,CAAC,IAAI,EAAE;AACV,QAAA,OAAO,EAAE,CAAC;AACV,KAAA;AAED,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,IAAI,CAAC;AACZ,KAAA;IAGD,QAAQ,IAAI,CAAC,IAAI;QAChB,KAAK,MAAM,EAAE;AACZ,YAAA,OAAO,CAACD,uBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,EAAED,UAAQ,CAAC,CAAC;AACtE,SAAA;QAED,KAAK,MAAM,EAAE;AACZ,YAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAYvC,YAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;AAC1B,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAC5E,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/D,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,gBAAA,IAAI,oBAAoB,EAAE;AACzB,oBAAA,OAAO,CAACA,UAAQ,EAAEA,UAAQ,CAAC,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAI,oBAAoB,EAAE;AACzB,oBAAA,OAAOA,UAAQ,CAAC;AAChB,iBAAA;AACD,gBAAA,IAAI,aAAa,EAAE;AAClB,oBAAA,OAAOF,MAAI,CAAC;AACZ,iBAAA;AACD,gBAAA,OAAO,EAAE,CAAC;AACV,aAAA;AAQD,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,SAAA;AAED,QAAA,KAAK,WAAW,CAAC;AACjB,QAAA,KAAK,UAAU,CAAC;AAChB,QAAA,KAAK,gBAAgB,CAAC;QACtB,KAAK,SAAS,EAAE;AACf,YAAA,IAAI,OAAgB,CAAC;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACnB,OAAO,GAAG,IAAI,CAAC;AACf,aAAA;AAAM,iBAAA;AACN,gBAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,aAAA;YACD,MAAM,gBAAgB,GACrB,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE7E,MAAM,aAAa,GAClB,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,EAAE,CAAC;AAC9E,YAAA,MAAM,UAAU,GAAGD,MAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AAEtE,YAAA,IAAI,gBAAgB,EAAE;AACrB,gBAAA,OAAOF,OAAK,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAEC,QAAM,CAAC,UAAU,CAAC,EAAEE,MAAI,EAAE,CAAI,EAAA,CAAA,CAAC,CAAC,CAAC;AAC/D,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAGhD,IAAI,mBAAmB,GAIXC,UAAQ,CAAC;gBACrB,IAAI,iBAAiB,GAITA,UAAQ,CAAC;gBACrB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAExC,gBAAA,IAAI,IAAI,CAAC;AAET,gBAAA,IAAI,OAAO,EAAE;oBACZ,IAAI;AACH,wBAAA,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;4BACjC,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpB,4BAAA,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAClD,CAAC,eAAe,CAAC,IAAI,CAAC;AACrB,8BAAE,MAAMD,MAAI;;gCAEV,MAAMC,UAAQ,CAAC;AACnB,iBAAA;AAAM,qBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;oBACjC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,iBAAA;AAAM,qBAAA,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AACvE,oBAAA,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,iBAAA;AAAM,qBAAA;AACN,oBAAA,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzC,iBAAA;AAED,gBAAA,MAAM,UAAU,GAAG;oBAClB,GAAG;AACH,oBAAA,IAAI,CAAC,IAAI;oBACTH,QAAM,CACLD,OAAK,CAAC;wBACL,UAAU;wBACV,QAAQ;AACP,8BAAE,EAAE;8BACF,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;AACjD,kCAAE,MAAM,CAACI,UAAQ,CAAC;AAClB,kCAAE,EAAE;AACL,qBAAA,CAAC,CACF;iBACD,CAAC;gBAEF,IAAI,QAAQ,IAAI,MAAM,EAAE;oBACvB,MAAM,aAAa,GAAG,CAACA,UAAQ,EAAEJ,OAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC,CAAC,CAAC;oBAEzE,MAAM,4BAA4B,GACjC,OAAO,IAAI,+BAA+B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,oBAAA,OAAOA,OAAK,CAAC;AACZ,wBAAA,GAAG,UAAU;AACb,wBAAA,OAAO,GAAGA,OAAK,CAAC,aAAa,CAAC,GAAGA,OAAK,CAACC,QAAM,CAAC,aAAa,CAAC,CAAC;AAC7D,wBAAA,4BAA4B,GAAG,EAAE,GAAGG,UAAQ;wBAC5C,GAAG;AACH,qBAAA,CAAC,CAAC;AACH,iBAAA;AAED,gBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;oBAC1B,mBAAmB,GAAG,EAAE,CAAC;oBACzB,iBAAiB,GAAG,EAAE,CAAC;AACvB,iBAAA;AAAM,qBAAA;oBACN,IAAI,kBAAkB,GAAG,KAAK,CAAC;oBAE/B,IAAI,CAAC,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;wBACtD,IACC,+BAA+B,CAAC,UAAU,CAAC;AAC3C,4BAAA,UAAU,KAAK,SAAS;AACxB,6BAAC,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,8BAA8B,CAAC,SAAS,CAAC,CAAC,EAChF;4BACD,mBAAmB,GAAGC,UAAQ,CAAC;4BAC/B,iBAAiB,GAAGA,UAAQ,CAAC;4BAC7B,kBAAkB,GAAG,IAAI,CAAC;AAC1B,yBAAA;6BAAM,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;4BAC7C,mBAAmB,GAAGF,MAAI,CAAC;AAC3B,yBAAA;wBACD,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC7B,qBAAA;oBACD,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;wBAClD,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;4BAC7D,iBAAiB,GAAGC,UAAQ,CAAC;AAC7B,yBAAA;wBACD,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC7B,qBAAA;AACD,iBAAA;AAED,gBAAA,IAAI,QAAQ,EAAE;AACb,oBAAA,OAAOJ,OAAK,CAAC;AACZ,wBAAA,GAAG,UAAU;AACb,wBAAAC,QAAM,CAAC,CAACG,UAAQ,EAAEJ,OAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBACxC,iBAAiB;wBACjB,CAAK,EAAA,EAAA,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA;AACjB,qBAAA,CAAC,CAAC;AACH,iBAAA;AAED,gBAAA,IAAI,MAAM,EAAE;AACX,oBAAA,OAAOA,OAAK,CAAC;AACZ,wBAAA,GAAG,UAAU;wBACb,GAAG;AACH,wBAAAC,QAAM,CAAC,CAAC,mBAAmB,EAAED,OAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,wBAAA,+BAA+B,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAGI,UAAQ;wBAC3D,GAAG;AACH,qBAAA,CAAC,CAAC;AACH,iBAAA;AAED,gBAAA,IAAI,OAAO,EAAE;AACZ,oBAAA,OAAOJ,OAAK,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC,CAAC;AAC9D,iBAAA;AAED,gBAAA,OAAOA,OAAK,CAAC;AACZ,oBAAA,GAAG,UAAU;oBACb,GAAG;AACH,oBAAAC,QAAM,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrC,iBAAiB;oBACjB,CAAK,EAAA,EAAA,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA;AACjB,iBAAA,CAAC,CAAC;AACH,aAAA;AAGD,YAAA,OAAO,EAAE,CAAC;AACV,SAAA;QAED,KAAK,WAAW,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,GAAG,CAAC;YAC9C,QAAQ,IAAI,CAAC,IAAI;AAChB,gBAAA,KAAK,OAAO;AACX,oBAAA,OAAO,CAACE,MAAI,EAAE,IAAI,CAAC,CAAC;AACrB,gBAAA,KAAK,YAAY;AAGhB,oBAAA,OAAO,EAAE,CAAC;AACX,gBAAA,KAAK,QAAQ;AACZ,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAEvB,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,wBAAA,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AAC/B,qBAAA;AAED,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAC1B;AAED,oBAAA,OAAO,CAACA,MAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/C,gBAAA,KAAK,WAAW;oBACf,OAAO,CAACA,MAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,gBAAA,KAAK,QAAQ;oBACZ,OAAO,CAACA,MAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAClC,gBAAA,KAAK,kBAAkB;AACtB,oBAAA,OAAO,CAACA,MAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAGhD,aAAA;AACD,YAAA,OAAO,EAAE,CAAC;AACV,SAAA;QAED,KAAK,SAAS,EAAE;AAEf,YAAA,OAAO,CAAC,iBAAiB,EAAEE,UAAQ,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,KAAK,SAAS;AACb,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,YAAY,GAAkC,EAAE,CAAC;AACrD,YAAA,IAAI,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;gBACxC,YAAY,GAAGA,UAAQ,CAAC;AACxB,aAAA;AACD,YAAA,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAE9D,QAAA,SAAS;YACR,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;AACvD,SAAA;AACD,KAAA;AACF,CAAC;AAQD,SAAS,eAAe,CAAC,IAAc,EAAA;AACtC,IAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE7C,IAAI,IAAI,GAAGH,MAAI,CAACC,MAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAE/D,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,IAAI,CAAC,CAAC,CAAC,GAAGE,UAAQ,CAAC;AACnB,KAAA;AACD,IAAA,IAAI,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;AACjC,QAAA,IAAI,GAAG,CAACA,UAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAC3B,KAAA;AAED,IAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAGA,UAAQ,CAAC;AACjC,KAAA;AACD,IAAA,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;AAC/B,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,EAAEA,UAAQ,CAAC,CAAC;AAC3B,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACb;;ACtTA,MAAM,EACL,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAC/E,KAAK,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,GACxC,GAAGE,wBAAI,CAAC;AAKH,SAAU,KAAK,CACpB,IAAa,EACb,KAAc,EACd,SAAiD,EACjD,IAAmB,EAAA;AAEnB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAE7B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC;AAEvB,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,qBAAqB,CAAiB,IAAI,CAAC,CAAC;AAC5D,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAEtC,QAAA,IAAI,OAAY,CAAC;QAEjB,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAAE;AACzE,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,gBAAgB;AACxB,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAIzC,MAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAA,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AACvB,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC5B,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,aAAA;AACF,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE;AACrD,YAAA,OAAO,KAAK,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,SAAA;QAGD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;AACxC,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9B,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;AACZ,SAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrF,KAAA;IAGD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAE9B,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC/E,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,gBAAgB;AACxB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC/C,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;AACvC,SAAA;AAED,QAAA,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;AAClD,KAAA;AAGD,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;QAChC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE;AACpE,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,YAAY;AACpB,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjF,KAAA;IAGD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtD,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,eAAe,GAAG,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE;AAClE,YAAA,GAAG,IAAI;AACP,YAAA,MAAM,EAAE,YAAY;AACpB,SAAA,CAAC,CAAC;AAEH,QAAA,eAAe,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAG5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO;YACN,UAAU;AACV,YAAA,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,eAAe,CAAC,CAAC;AAClD,YAAA,OAAO,GAAG,EAAE,GAAG,QAAQ;YACvB,WAAW;SACX,CAAC;AACF,KAAA;IAGD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACrD,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,UAAU,GAAuB,KAAK,CAAC;QAE3C,IAAI,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACvE,IAAI,aAAa,CAAC,MAAM,EAAE;gBACzB,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACvD,gBAAA,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC/C,UAAU,GAAG,SAA+B,CAAC;AAC9C,aAAA;AACD,SAAA;AAED,QAAA,OAAO,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACrE,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAC1B,EAA0C,EAC1C,IAAY,EACZ,OAAsB,EAAA;IAEtB,IAAI;AACH,QAAA,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,KAAA;AAAC,IAAA,OAAO,CAAC,EAAE;AAIX,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;AACpC,QAAA,MAAM,CAAC,CAAC;AACR,KAAA;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAA;IAG7C,OAAO,CAAA,GAAA,EAAM,SAAS,CAAA,MAAA,CAAQ,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAAuB,EAAE,OAAsB,EAAA;IACtF,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE/C,OAAO;AACN,QAAA,GAAG,GAAG;AACN,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU;KAC9D,CAAC;AACH,CAAC;AAQD,SAAS,qBAAqB,CAAI,IAAS,EAAA;AAC1C,IAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AAE5B,IAAA,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAClC,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;gBACzB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAEjC,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC9B,wBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;wBACpB,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACtC,qBAAA;AACF,iBAAC,CAAC,CAAC;AAEH,gBAAA,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;AAC9B,oBAAA,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACrC,iBAAA;AACD,aAAA;AACF,SAAC,CAAC,CAAC;AACH,KAAA;AAED,IAAA,OAAO,OAAO,CAAC;AAChB,CAAC;AAKD,SAAS,UAAU,CAClB,IAAwB,EACxB,OAAe,EACf,IAAa,EACb,KAAc,EACd,SAAiD,EACjD,OAAsB,EAAA;AAEtB,IAAA,QAAQ,IAAI;AACX,QAAA,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,EAAE;AACZ,YAAA,IAAI,eAAe,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAI3F,YAAA,eAAe,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAGzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E,YAAA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC/E,SAAA;QACD,KAAK,MAAM,EAAE;AACZ,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9E,YAAA,MAAM,WAAW,GAAiC;gBACjD,OAAO,EAAE,OAAO,CAAC,QAAQ;AACzB,gBAAA,YAAY,EAAE,CAAC,OAAO,CAAC,OAAO;gBAC9B,UAAU;aACV,CAAC;YAGF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAG9C,YAAA,MAAM,qBAAqB,GAAGC,2BAAa,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AAG5E,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E,YAAA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACpF,SAAA;AACD,KAAA;AACF;;AChPA,MAAM,GAAG,GAAGX,yBAAa,CAAC,mMAAe,CAAC,CAAC;AAC3C,IAAI,UAAU,CAAC;AACf,IAAI;AACH,IAAA,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACvD,CAAA;AAAC,OAAO,CAAC,EAAE;AACX,IAAA,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;AAC1E,CAAA;AACD,MAAM,KAAK,GAAGE,oBAAY,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAGvC,MAAA,SAAS,GAA+B;AACpD,IAAA;AACC,QAAA,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,UAAU,EAAE,CAAC,QAAQ,CAAC;QACtB,iBAAiB,EAAE,CAAC,OAAO,CAAC;AAC5B,KAAA;EACA;AAGW,MAAA,OAAO,GAA2B;AAC9C,IAAA,KAAK,EAAE;QACN,KAAK,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;AAChC,QAAA,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;QAC9B,MAAM,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG;AAC1B,KAAA;EACA;AAGW,MAAA,QAAQ,GAA4B;AAChD,IAAA,KAAK,EAAE;QACN,KAAK;QACL,KAAK;AACL,KAAA;EACA;AAEF,MAAM,cAAc,GAAG;AACtB,IAAA,QAAQ,EAAE,CAAC;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prettier-plugin-astro",
3
- "version": "0.5.0",
3
+ "version": "0.5.3",
4
4
  "type": "commonjs",
5
5
  "description": "A Prettier Plugin for formatting Astro files",
6
6
  "main": "dist/index.js",
@@ -39,7 +39,7 @@
39
39
  "release": "yarn build && changeset publish"
40
40
  },
41
41
  "dependencies": {
42
- "@astrojs/compiler": "^0.19.0",
42
+ "@astrojs/compiler": "^0.23.3",
43
43
  "prettier": "^2.7.1",
44
44
  "sass-formatter": "^0.7.2",
45
45
  "synckit": "^0.7.0"
@@ -49,7 +49,7 @@
49
49
  "@rollup/plugin-commonjs": "^22.0.1",
50
50
  "@rollup/plugin-typescript": "^8.3.3",
51
51
  "@types/node": "^14.15.0",
52
- "@types/prettier": "^2.6.3",
52
+ "@types/prettier": "^2.7.0",
53
53
  "@typescript-eslint/eslint-plugin": "^5.29.0",
54
54
  "@typescript-eslint/parser": "^5.29.0",
55
55
  "@vitest/ui": "^0.16.0",