{
  "version": 3,
  "sources": ["../src/main.ts", "../src/errors/formatError.ts", "../src/formatter.ts", "../src/comment.ts", "../src/constants.ts", "../src/indent.ts", "../src/regex.ts", "../src/space.ts", "../src/util.ts", "../src/vsctm.ts", "../src/runtimeConfig.ts"],
  "sourcesContent": ["import ignore from 'ignore';\n\nimport chalk from 'chalk';\nimport findConfig from 'find-config';\nimport fs from 'fs';\nimport glob from 'glob';\nimport _ from 'lodash';\nimport nodepath from 'path';\nimport process from 'process';\nimport { Config as TailwindConfig } from 'tailwindcss/types/config';\nimport nodeutil from 'util';\nimport FormatError from './errors/formatError';\nimport Formatter from './formatter';\nimport {\n  EndOfLine,\n  RuntimeConfig,\n  SortHtmlAttributes,\n  WrapAttributes,\n  findRuntimeConfig,\n  readRuntimeConfig,\n} from './runtimeConfig';\nimport * as util from './util';\n\nexport type CLIOption = {\n  write?: boolean;\n  diff?: boolean;\n  checkFormatted?: boolean;\n  progress?: boolean;\n  ignoreFilePath?: string;\n  runtimeConfigPath?: string;\n};\n\nexport type FormatterOption = {\n  indentSize?: number;\n  wrapLineLength?: number;\n  wrapAttributes?: WrapAttributes;\n  wrapAttributesMinAttrs?: number;\n  indentInnerHtml?: boolean;\n  endWithNewline?: boolean;\n  endOfLine?: EndOfLine;\n  useTabs?: boolean;\n  sortTailwindcssClasses?: true;\n  tailwindcssConfigPath?: string;\n  tailwindcssConfig?: TailwindConfig;\n  sortHtmlAttributes?: SortHtmlAttributes;\n  customHtmlAttributesOrder?: string[] | string;\n  noMultipleEmptyLines?: boolean;\n  noPhpSyntaxCheck?: boolean;\n  noSingleQuote?: boolean;\n  noTrailingCommaPhp?: boolean;\n  extraLiners?: string[];\n};\n\nexport type BladeFormatterOption = CLIOption & FormatterOption;\n\nclass BladeFormatter {\n  diffs: any;\n\n  errors: any;\n\n  formattedFiles: any;\n\n  ignoreFile: any;\n\n  options: FormatterOption & CLIOption;\n\n  outputs: any;\n\n  currentTargetPath: string;\n\n  paths: any;\n\n  targetFiles: any;\n\n  fulFillFiles: any;\n\n  static targetFiles: any;\n\n  runtimeConfigPath: string | null;\n\n  runtimeConfigCache: RuntimeConfig;\n\n  constructor(options: BladeFormatterOption = {}, paths: any = []) {\n    this.currentTargetPath = '.';\n    this.paths = paths;\n    this.options = options;\n    this.targetFiles = [];\n    this.errors = [];\n    this.diffs = [];\n    this.outputs = [];\n    this.formattedFiles = [];\n    this.ignoreFile = '';\n    this.fulFillFiles = [];\n    this.targetFiles = [];\n    this.runtimeConfigPath = options.runtimeConfigPath ?? null;\n    this.runtimeConfigCache = {};\n  }\n\n  async format(content: any, opts: BladeFormatterOption = {}) {\n    this.options = this.options || opts;\n    const target = nodepath.resolve(process.cwd(), 'target');\n    await this.readIgnoreFile(target);\n    await this.findTailwindConfig(target);\n    await this.readRuntimeConfig(target);\n    return new Formatter(this.options).formatContent(content).catch((err) => {\n      throw new FormatError(err);\n    });\n  }\n\n  async formatFromCLI() {\n    try {\n      this.printPreamble();\n      await this.readIgnoreFile(process.cwd());\n      await this.processPaths();\n      this.printResults();\n    } catch (error) {\n      // do nothing\n    }\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  fileExists(filepath: string) {\n    return fs.promises\n      .access(filepath, fs.constants.F_OK)\n      .then(() => true)\n      .catch(() => false);\n  }\n\n  async readIgnoreFile(filePath: string) {\n    const configFilename = '.bladeignore';\n\n    let configFilePath: string | null;\n    const worakingDir = nodepath.dirname(filePath);\n\n    if (this.options.ignoreFilePath) {\n      configFilePath = this.options.ignoreFilePath;\n    } else {\n      configFilePath = findConfig(configFilename, { cwd: worakingDir });\n    }\n\n    if (!configFilePath) {\n      return;\n    }\n\n    try {\n      this.ignoreFile = (await fs.promises.readFile(configFilePath)).toString();\n    } catch (err) {\n      // do nothing\n    }\n  }\n\n  async findTailwindConfig(filePath: string) {\n    if (!this.options.sortTailwindcssClasses) {\n      return;\n    }\n\n    const configFilename = 'tailwind.config.js';\n\n    let configFilePath: string | null | undefined;\n\n    if (this.options.tailwindcssConfigPath) {\n      if (this.runtimeConfigPath) {\n        const workingDir = nodepath.dirname(this.runtimeConfigPath);\n        configFilePath = nodepath.resolve(workingDir, this.options.tailwindcssConfigPath);\n      } else if (nodepath.isAbsolute(this.options.tailwindcssConfigPath)) {\n        configFilePath = nodepath.resolve(this.options.tailwindcssConfigPath);\n      } else {\n        configFilePath = nodepath.resolve(this.options.tailwindcssConfigPath);\n      }\n    } else {\n      // lookup tailwind config\n      const workingDir = nodepath.dirname(filePath);\n      configFilePath = findConfig(configFilename, { cwd: workingDir });\n    }\n\n    if (!configFilePath) {\n      return;\n    }\n\n    this.options.tailwindcssConfigPath = configFilePath;\n  }\n\n  async readRuntimeConfig(filePath: string): Promise<RuntimeConfig | undefined> {\n    if (_.isEmpty(this.runtimeConfigCache)) {\n      this.options = _.merge(this.options, this.runtimeConfigCache);\n    }\n\n    let configFile: string | null;\n\n    if (this.options.runtimeConfigPath) {\n      configFile = this.options.runtimeConfigPath;\n    } else {\n      configFile = findRuntimeConfig(filePath);\n    }\n\n    if (_.isNull(configFile)) {\n      return;\n    }\n\n    this.runtimeConfigPath = configFile;\n\n    try {\n      const options = await readRuntimeConfig(configFile);\n\n      this.options = _.mergeWith(this.options, options, (obj, src) => {\n        if (!_.isNil(src)) {\n          return src;\n        }\n\n        return obj;\n      });\n\n      this.runtimeConfigCache = this.options;\n\n      if (this.options.sortTailwindcssClasses) {\n        await this.findTailwindConfig(filePath);\n      }\n    } catch (error: any) {\n      if (error instanceof SyntaxError) {\n        process.stdout.write(chalk.red.bold('\\nBlade Formatter JSON Syntax Error: \\n\\n'));\n        process.stdout.write(nodeutil.format(error));\n        process.exit(1);\n      }\n\n      process.stdout.write(chalk.red.bold(`\\nBlade Formatter Config Error: ${nodepath.basename(configFile)}\\n\\n`));\n      process.stdout.write(`\\`${error.errors[0].instancePath.replace('/', '')}\\` ${error.errors[0].message}\\n\\n`);\n      if (error.errors[0].params?.allowedValues) {\n        console.log(error.errors[0].params?.allowedValues);\n      }\n      process.exit(1);\n    }\n  }\n\n  async processPaths() {\n    await Promise.all(_.map(this.paths, async (path: any) => this.processPath(path)));\n  }\n\n  async processPath(path: any) {\n    await BladeFormatter.globFiles(path)\n      .then((paths: any) => _.map(paths, (target: any) => nodepath.relative('.', target)))\n      .then((paths) => this.filterFiles(paths))\n      .then(this.fulFillFiles)\n      .then((paths) => this.formatFiles(paths));\n  }\n\n  static globFiles(path: any) {\n    return new Promise((resolve, reject) => {\n      glob(path, (error: any, matches: any) => (error ? reject(error) : resolve(matches)));\n    });\n  }\n\n  async filterFiles(paths: any) {\n    if (this.ignoreFile === '') {\n      return paths;\n    }\n\n    const REGEX_FILES_NOT_IN_CURRENT_DIR = /^\\.\\.*/;\n    const filesOutsideTargetDir = _.filter(paths, (path: any) =>\n      REGEX_FILES_NOT_IN_CURRENT_DIR.test(nodepath.relative('.', path)),\n    );\n\n    const filesUnderTargetDir = _.xor(paths, filesOutsideTargetDir);\n\n    const filteredFiles = ignore().add(this.ignoreFile).filter(filesUnderTargetDir);\n\n    return _.concat(filesOutsideTargetDir, filteredFiles);\n  }\n\n  static fulFillFiles(paths: any) {\n    this.targetFiles.push(paths);\n\n    return Promise.resolve(paths);\n  }\n\n  async formatFiles(paths: any) {\n    await Promise.all(_.map(paths, async (path: any) => this.formatFile(path)));\n  }\n\n  async formatFile(path: any) {\n    await this.findTailwindConfig(path);\n    await this.readRuntimeConfig(path);\n\n    await util\n      .readFile(path)\n      .then((data: any) => Promise.resolve(data.toString('utf-8')))\n      .then((content) => new Formatter(this.options).formatContent(content))\n      .then((formatted) => this.checkFormatted(path, formatted))\n      .then((formatted) => this.writeToFile(path, formatted))\n      .catch((err) => {\n        this.handleError(path, err);\n      });\n  }\n\n  async checkFormatted(path: any, formatted: any) {\n    this.printFormattedOutput(path, formatted);\n\n    const originalContent = fs.readFileSync(path, 'utf-8');\n\n    const originalLines = util.splitByLines(originalContent);\n    const formattedLines = util.splitByLines(formatted);\n\n    const diff = util.generateDiff(path, originalLines, formattedLines);\n    this.diffs.push(diff);\n    this.outputs.push(formatted);\n\n    if (diff.length > 0) {\n      if (this.options.progress || this.options.write) {\n        process.stdout.write(chalk.green('F'));\n      }\n\n      if (this.options.checkFormatted) {\n        process.stdout.write(`${path}\\n`);\n        process.exitCode = 1;\n      }\n\n      this.formattedFiles.push(path);\n    }\n\n    if (diff.length === 0) {\n      if (this.options.progress || this.options.write) {\n        process.stdout.write(chalk.green('.'));\n      }\n    }\n\n    return Promise.resolve(formatted);\n  }\n\n  printFormattedOutput(path: any, formatted: any) {\n    if (this.options.write || this.options.checkFormatted) {\n      return;\n    }\n\n    process.stdout.write(`${formatted}`);\n\n    const isLastFile = _.last(this.paths) === path || _.last(this.targetFiles) === path;\n\n    if (isLastFile) {\n      return;\n    }\n\n    // write divider to stdout\n    if (this.paths.length > 1 || this.targetFiles.length > 1) {\n      process.stdout.write('\\n');\n    }\n  }\n\n  writeToFile(path: any, content: any) {\n    if (!this.options.write) {\n      return;\n    }\n\n    if (this.options.checkFormatted) {\n      return;\n    }\n\n    // preserve original content\n    if (content.length === 0 || _.isNull(content) || _.isEmpty(content)) {\n      return;\n    }\n\n    fs.writeFile(path, content, (err: any) => {\n      if (err) {\n        process.stdout.write(`${chalk.red(err.message)}\\n`);\n        process.exit(1);\n      }\n    });\n  }\n\n  handleError(path: any, error: any) {\n    if (this.options.progress || this.options.write) {\n      process.stdout.write(chalk.red('E'));\n    }\n\n    process.exitCode = 1;\n    this.errors.push({ path, message: error.message, error });\n  }\n\n  printPreamble() {\n    if (this.options.checkFormatted) {\n      process.stdout.write('Check formatting... \\n');\n    }\n  }\n\n  async printResults() {\n    this.printDescription();\n    this.printDifferences();\n    this.printFormattedFiles();\n    this.printErrors();\n  }\n\n  printDescription() {\n    if (!this.options.write) {\n      return;\n    }\n\n    const returnLine = '\\n\\n';\n    process.stdout.write(returnLine);\n    process.stdout.write(chalk.bold.green('Fixed: F\\n'));\n    process.stdout.write(chalk.bold.red('Errors: E\\n'));\n    process.stdout.write(chalk.bold('Not Changed: ') + chalk.bold.green('.\\n'));\n  }\n\n  printFormattedFiles() {\n    if (this.formattedFiles.length === 0) {\n      if (this.options.checkFormatted) {\n        process.stdout.write(chalk.bold('\\nAll matched files are formatted! \\n'));\n      }\n\n      return;\n    }\n\n    if (!this.options.write) {\n      if (this.options.checkFormatted) {\n        process.stdout.write(\n          '\\nAbove file(s) are formattable. Forgot to run formatter? ' +\n            `Use ${chalk.bold('--write')} option to overwrite.\\n`,\n        );\n      }\n\n      return;\n    }\n\n    process.stdout.write(chalk.bold('\\nFormatted Files: \\n'));\n    _.each(this.formattedFiles, (path: any) => process.stdout.write(`${chalk.bold(path)}\\n`));\n  }\n\n  printDifferences() {\n    if (!this.options.diff) {\n      return;\n    }\n\n    process.stdout.write(chalk.bold('\\nDifferences: \\n\\n'));\n\n    if (_.filter(this.diffs, (diff: any) => diff.length > 0).length === 0) {\n      process.stdout.write(chalk('No changes found. \\n\\n'));\n\n      return;\n    }\n\n    _.each(this.diffs, (diff: any) => util.printDiffs(diff));\n  }\n\n  printErrors() {\n    if (_.isEmpty(this.errors)) {\n      return;\n    }\n\n    process.stdout.write(chalk.red.bold('\\nErrors: \\n\\n'));\n\n    _.each(this.errors, (error: any) => process.stdout.write(`${nodeutil.format(error)}\\n`));\n  }\n}\n\nexport { BladeFormatter, Formatter };\n", "export default class FormatError extends Error {}\n", "/* eslint-disable class-methods-use-this */\n\nimport { sortClasses } from '@shufo/tailwindcss-class-sorter';\nimport Aigle from 'aigle';\nimport detectIndent from 'detect-indent';\nimport { sortAttributes } from 'html-attribute-sorter';\nimport beautify, { JSBeautifyOptions } from 'js-beautify';\nimport _ from 'lodash';\nimport * as vscodeTmModule from 'vscode-textmate';\nimport xregexp from 'xregexp';\nimport replaceAsync from 'string-replace-async';\nimport { formatPhpComment } from './comment';\nimport constants from './constants';\nimport {\n  conditionalTokens,\n  cssAtRuleTokens,\n  directivePrefix,\n  hasStartAndEndToken,\n  indentElseTokens,\n  indentEndTokens,\n  indentStartAndEndTokens,\n  indentStartOrElseTokens,\n  indentStartTokens,\n  indentStartTokensWithoutPrefix,\n  inlineFunctionTokens,\n  inlinePhpDirectives,\n  optionalStartWithoutEndTokens,\n  phpKeywordEndTokens,\n  phpKeywordStartTokens,\n  tokenForIndentStartOrElseTokens,\n  unbalancedStartTokens,\n} from './indent';\nimport { BladeFormatterOption, CLIOption, FormatterOption } from './main';\nimport { nestedParenthesisRegex } from './regex';\nimport { SortHtmlAttributes } from './runtimeConfig';\nimport { adjustSpaces } from './space';\nimport * as util from './util';\nimport * as vsctm from './vsctm';\n\nexport default class Formatter {\n  argumentCheck: any;\n\n  bladeBraces: any;\n\n  bladeComments: any;\n\n  bladeDirectives: any;\n\n  htmlAttributes: Array<string>;\n\n  currentIndentLevel: number;\n\n  diffs: any;\n\n  indentCharacter: any;\n\n  indentSize: any;\n\n  inlineDirectives: any;\n\n  conditions: any;\n\n  inlinePhpDirectives: any;\n\n  isInsideCommentBlock: any;\n\n  oniguruma: any;\n\n  options: FormatterOption & CLIOption;\n\n  rawBladeBraces: any;\n\n  ignoredLines: any;\n\n  curlyBracesWithJSs: any;\n\n  rawBlocks: any;\n\n  rawPhpTags: any;\n\n  rawPropsBlocks: any;\n\n  result: any;\n\n  nonnativeScripts: Array<string>;\n\n  scripts: any;\n\n  xData: Array<string>;\n\n  xInit: Array<string>;\n\n  xSlot: Array<string>;\n\n  htmlTags: Array<string>;\n\n  shouldBeIndent: any;\n\n  stack: any;\n\n  templatingStrings: any;\n\n  stringLiteralInPhp: Array<string>;\n\n  shorthandBindings: Array<string>;\n\n  componentAttributes: Array<string>;\n\n  customDirectives: Array<string>;\n\n  directivesInScript: Array<string>;\n\n  unbalancedDirectives: Array<string>;\n\n  escapedBladeDirectives: Array<string>;\n\n  phpComments: Array<string>;\n\n  vsctm: any;\n\n  wrapAttributes: any;\n\n  wrapLineLength: any;\n\n  defaultPhpFormatOption: util.FormatPhpOption;\n\n  endOfLine: string;\n\n  bladeDirectivesInStyle: Array<string>;\n\n  constructor(options: BladeFormatterOption) {\n    this.options = {\n      ...{\n        noPhpSyntaxCheck: false,\n        trailingCommaPHP: !options.noTrailingCommaPhp,\n        printWidth: options.wrapLineLength || constants.defaultPrintWidth,\n      },\n      ...options,\n    };\n    this.vsctm = util.optional(this.options).vsctm || vscodeTmModule;\n    this.oniguruma = util.optional(this.options).oniguruma;\n    this.indentCharacter = util.optional(this.options).useTabs ? '\\t' : ' ';\n    this.indentSize = util.optional(this.options).indentSize || 4;\n    this.wrapLineLength = util.optional(this.options).wrapLineLength || constants.defaultPrintWidth;\n    this.wrapAttributes = util.optional(this.options).wrapAttributes || 'auto';\n    this.currentIndentLevel = 0;\n    this.shouldBeIndent = false;\n    this.isInsideCommentBlock = false;\n    this.stack = [];\n    this.ignoredLines = [];\n    this.curlyBracesWithJSs = [];\n    this.rawBlocks = [];\n    this.rawPhpTags = [];\n    this.inlineDirectives = [];\n    this.conditions = [];\n    this.inlinePhpDirectives = [];\n    this.rawPropsBlocks = [];\n    this.bladeDirectives = [];\n    this.bladeDirectivesInStyle = [];\n    this.bladeComments = [];\n    this.phpComments = [];\n    this.bladeBraces = [];\n    this.rawBladeBraces = [];\n    this.nonnativeScripts = [];\n    this.scripts = [];\n    this.htmlAttributes = [];\n    this.xData = [];\n    this.xInit = [];\n    this.htmlTags = [];\n    this.templatingStrings = [];\n    this.stringLiteralInPhp = [];\n    this.shorthandBindings = [];\n    this.componentAttributes = [];\n    this.customDirectives = [];\n    this.directivesInScript = [];\n    this.unbalancedDirectives = [];\n    this.escapedBladeDirectives = [];\n    this.xSlot = [];\n    this.result = [];\n    this.diffs = [];\n    this.defaultPhpFormatOption = { noPhpSyntaxCheck: this.options.noPhpSyntaxCheck, printWidth: this.wrapLineLength };\n    this.endOfLine = util.getEndOfLine(util.optional(this.options).endOfLine);\n  }\n\n  formatContent(content: any) {\n    return new Promise((resolve) => resolve(content))\n      .then((target) => this.preserveIgnoredLines(target))\n      .then((target) => this.preserveNonnativeScripts(target))\n      .then((target) => this.preserveCurlyBraceForJS(target))\n      .then((target) => this.preserveRawPhpTags(target))\n      .then((target) => this.preserveEscapedBladeDirective(target))\n      .then((target) => util.formatAsPhp(target, this.options))\n      .then((target) => this.preserveBladeComment(target))\n      .then((target) => this.preserveBladeBrace(target))\n      .then((target) => this.preserveRawBladeBrace(target))\n      .then((target) => this.preserveConditions(target))\n      .then((target) => this.preservePropsBlock(target))\n      .then((target) => this.preserveInlinePhpDirective(target))\n      .then((target) => this.preserveInlineDirective(target))\n      .then((target) => this.preserveBladeDirectivesInScripts(target))\n      .then((target) => this.preserveBladeDirectivesInStyles(target))\n      .then((target) => this.preserveCustomDirective(target))\n      .then((target) => this.preserveUnbalancedDirective(target))\n      .then((target) => this.breakLineBeforeAndAfterDirective(target))\n      .then(async (target) => {\n        this.bladeDirectives = await this.formatPreservedBladeDirectives(this.bladeDirectives);\n        return target;\n      })\n      .then((target) => this.preserveScripts(target))\n      .then((target) => this.sortTailwindcssClasses(target))\n      .then((target) => this.formatXInit(target))\n      .then((target) => this.formatXData(target))\n      .then((target) => this.preservePhpBlock(target))\n      .then((target) => this.sortHtmlAttributes(target))\n      .then((target) => this.preserveHtmlAttributes(target))\n      .then((target) => this.preserveComponentAttribute(target))\n      .then((target) => this.preserveShorthandBinding(target))\n      .then((target) => this.preserveXslot(target))\n      .then((target) => this.preserveHtmlTags(target))\n      .then((target) => this.formatAsHtml(target))\n      .then((target) => this.formatAsBlade(target))\n      .then((target) => this.restoreHtmlTags(target))\n      .then((target) => this.restoreXslot(target))\n      .then((target) => this.restoreShorthandBinding(target))\n      .then((target) => this.restoreComponentAttribute(target))\n      .then((target) => this.restoreHtmlAttributes(target))\n      .then((target) => this.restorePhpBlock(target))\n      .then((target) => this.restoreXData(target))\n      .then((target) => this.restoreXInit(target))\n      .then((target) => this.restoreScripts(target))\n      .then((target) => this.restoreUnbalancedDirective(target))\n      .then((target) => this.restoreCustomDirective(target))\n      .then((target) => this.restoreBladeDirectivesInStyles(target))\n      .then((target) => this.restoreBladeDirectivesInScripts(target))\n      .then((target) => this.restoreInlineDirective(target))\n      .then((target) => this.restoreInlinePhpDirective(target))\n      .then((target) => this.restoreConditions(target))\n      .then((target) => this.restoreRawBladeBrace(target))\n      .then((target) => this.restoreBladeBrace(target))\n      .then((target) => this.restoreBladeComment(target))\n      .then((target) => this.restoreEscapedBladeDirective(target))\n      .then((target) => this.restoreRawPhpTags(target))\n      .then((target) => this.restoreCurlyBraceForJS(target))\n      .then((target) => this.restoreNonnativeScripts(target))\n      .then((target) => this.restoreIgnoredLines(target))\n      .then((target) => adjustSpaces(target))\n      .then((formattedResult) => util.checkResult(formattedResult));\n  }\n\n  formatAsHtml(data: any) {\n    const options = {\n      indent_size: util.optional(this.options).indentSize || 4,\n      wrap_line_length: util.optional(this.options).wrapLineLength || 120,\n      wrap_attributes: util.optional(this.options).wrapAttributes || 'auto',\n      wrap_attributes_min_attrs: util.optional(this.options).wrapAttributesMinAttrs,\n      indent_inner_html: util.optional(this.options).indentInnerHtml || false,\n      end_with_newline: util.optional(this.options).endWithNewline || true,\n      max_preserve_newlines: util.optional(this.options).noMultipleEmptyLines ? 1 : undefined,\n      extra_liners: util.optional(this.options).extraLiners,\n      css: {\n        end_with_newline: false,\n      },\n      eol: this.endOfLine,\n    };\n\n    const promise = new Promise((resolve) => resolve(data))\n      .then((content) => util.preserveDirectives(content))\n      .then((preserved) => beautify.html_beautify(preserved, options))\n      .then((content) => util.revertDirectives(content));\n\n    return Promise.resolve(promise);\n  }\n\n  async sortTailwindcssClasses(content: any) {\n    if (!this.options.sortTailwindcssClasses) {\n      return content;\n    }\n\n    return _.replace(content, /(?<=\\s+(?!:)class\\s*=\\s*([\\\"\\']))(.*?)(?=\\1)/gis, (_match, p1, p2) => {\n      if (_.isEmpty(p2)) {\n        return p2;\n      }\n\n      if (this.options.tailwindcssConfigPath) {\n        const options = { tailwindConfigPath: this.options.tailwindcssConfigPath };\n        return sortClasses(p2, options);\n      }\n\n      if (this.options.tailwindcssConfig) {\n        const options: any = { tailwindConfig: this.options.tailwindcssConfig };\n        return sortClasses(p2, options);\n      }\n\n      return sortClasses(p2);\n    });\n  }\n\n  async preserveIgnoredLines(content: any) {\n    return (\n      _.chain(content)\n        // ignore entire file\n        .replace(\n          /(^(?<!.+)^{{--\\s*blade-formatter-disable\\s*--}}.*?)([\\r\\n]*)$(?![\\r\\n])/gis,\n          (_match: any, p1: any, p2: any) => this.storeIgnoredLines(`${p1}${p2.replace(/^\\n/, '')}`),\n        )\n        // range ignore\n        .replace(\n          /(?:({{--\\s*?blade-formatter-disable\\s*?--}}|<!--\\s*?prettier-ignore-start\\s*?-->|{{--\\s*?prettier-ignore-start\\s*?--}})).*?(?:({{--\\s*?blade-formatter-enable\\s*?--}}|<!--\\s*?prettier-ignore-end\\s*?-->|{{--\\s*?prettier-ignore-end\\s*?--}}))/gis,\n          (match: any) => this.storeIgnoredLines(match),\n        )\n        // line ignore\n        .replace(\n          /(?:{{--\\s*?blade-formatter-disable-next-line\\s*?--}}|{{--\\s*?prettier-ignore\\s*?--}}|<!--\\s*?prettier-ignore\\s*?-->)[\\r\\n]+[^\\r\\n]+/gis,\n          (match: any) => this.storeIgnoredLines(match),\n        )\n        .value()\n    );\n  }\n\n  async preserveCurlyBraceForJS(content: any) {\n    return _.replace(content, /@{{(.*?)}}/gs, (match: any, p1: any) => this.storeCurlyBraceForJS(p1));\n  }\n\n  async preservePhpBlock(content: any) {\n    return this.preserveRawPhpBlock(content);\n  }\n\n  async preservePropsBlock(content: any) {\n    return _.replace(content, /@props\\(((?:[^\\\\(\\\\)]|\\([^\\\\(\\\\)]*\\))*)\\)/gs, (match: any, p1: any) =>\n      this.storeRawPropsBlock(p1),\n    );\n  }\n\n  async preserveRawPhpBlock(content: any) {\n    return _.replace(content, /(?<!@)@php(.*?)@endphp/gs, (match: any, p1: any) => this.storeRawBlock(p1));\n  }\n\n  async preserveHtmlTags(content: string) {\n    const contentUnformatted = ['textarea', 'pre'];\n\n    return _.replace(\n      content,\n      new RegExp(`<(${contentUnformatted.join('|')})\\\\s{0,1}.*?>.*?<\\\\/(${contentUnformatted.join('|')})>`, 'gis'),\n      (match: string) => this.storeHtmlTag(match),\n    );\n  }\n\n  /**\n   * preserve custom directives\n   * @param content\n   * @returns\n   */\n  preserveCustomDirective(content: string) {\n    const negativeLookAhead = [\n      ..._.without(indentStartTokens, '@unless'),\n      ...indentEndTokens,\n      ...indentElseTokens,\n      ...['@unless\\\\(.*?\\\\)'],\n    ].join('|');\n\n    const inlineNegativeLookAhead = _.chain([\n      ..._.without(indentStartTokens, '@unless', '@for'),\n      ...indentEndTokens,\n      ...indentElseTokens,\n      ...inlineFunctionTokens,\n      ..._.without(phpKeywordStartTokens, '@for'),\n      ...['@unless[a-z]*\\\\(.*?\\\\)', '@for\\\\(.*?\\\\)'],\n      ...unbalancedStartTokens,\n      ...cssAtRuleTokens,\n    ])\n      .uniq()\n      .join('|')\n      .value();\n\n    const inlineRegex = new RegExp(\n      `(?!(${inlineNegativeLookAhead}))(@([a-zA-Z1-9_\\\\-]+))(?!.*?@end\\\\3)${nestedParenthesisRegex}.*?(?<!@end\\\\5)`,\n      'gis',\n    );\n\n    const regex = new RegExp(\n      `(?!(${negativeLookAhead}))(@(unless)*([a-zA-Z1-9_\\\\-]+))(?!.*?\\\\2)(\\\\s|\\\\(.*?\\\\))+(.*?)(@end\\\\4)`,\n      'gis',\n    );\n\n    let formatted: string;\n\n    // preserve inline directives\n    formatted = _.replace(content, inlineRegex, (match: string) => this.storeInlineCustomDirective(match));\n\n    // preserve begin~else~end directives\n    formatted = _.replace(\n      formatted,\n      regex,\n      (match: string, p1: string, p2: string, p3: string, p4: string, p5: string, p6: string, p7: string) => {\n        if (indentStartTokens.includes(p2)) {\n          return match;\n        }\n\n        let result: string = match;\n\n        // begin directive\n        result = _.replace(result, new RegExp(`${p2}(${nestedParenthesisRegex})*`, 'gim'), (beginStr: string) =>\n          this.storeBeginCustomDirective(beginStr),\n        );\n        // end directive\n        result = _.replace(result, p7, this.storeEndCustomDirective(p7));\n        // else directive\n        result = _.replace(result, new RegExp(`@else${p4}(${nestedParenthesisRegex})*`, 'gim'), (elseStr: string) =>\n          this.storeElseCustomDirective(elseStr),\n        );\n\n        return result;\n      },\n    );\n\n    // replace directives recursively\n    if (regex.test(formatted)) {\n      formatted = this.preserveCustomDirective(formatted);\n    }\n\n    return formatted;\n  }\n\n  preserveInlineDirective(content: string): string {\n    // preserve inline directives inside html tag\n    const regex = new RegExp(\n      `(<[\\\\w\\\\-\\\\_]+?[^>]*?)${directivePrefix}(${indentStartTokensWithoutPrefix.join(\n        '|',\n      )})(\\\\s*?)?(\\\\([^)]*?\\\\))?((?:(?!@end\\\\2).)+)(@end\\\\2|@endif)(.*?/*>)`,\n      'gims',\n    );\n    const replaced = _.replace(\n      content,\n      regex,\n      (_match: string, p1: string, p2: string, p3: string, p4: string, p5: string, p6: string, p7: string) => {\n        if (p3 === undefined && p4 === undefined) {\n          return `${p1}${this.storeInlineDirective(`${directivePrefix}${p2.trim()}${p5.trim()} ${p6.trim()}`)}${p7}`;\n        }\n        if (p3 === undefined) {\n          return `${p1}${this.storeInlineDirective(\n            `${directivePrefix}${p2.trim()}${p4.trim()}${p5}${p6.trim()}`,\n          )}${p7}`;\n        }\n        if (p4 === undefined) {\n          return `${p1}${this.storeInlineDirective(\n            `${directivePrefix}${p2.trim()}${p3}${p5.trim()} ${p6.trim()}`,\n          )}${p7}`;\n        }\n\n        return `${p1}${this.storeInlineDirective(\n          `${directivePrefix}${p2.trim()}${p3}${p4.trim()} ${p5.trim()} ${p6.trim()}`,\n        )}${p7}`;\n      },\n    );\n\n    if (regex.test(replaced)) {\n      return this.preserveInlineDirective(replaced);\n    }\n\n    return replaced;\n  }\n\n  async preserveInlinePhpDirective(content: any) {\n    return _.replace(\n      content,\n      // eslint-disable-next-line max-len\n      new RegExp(`(?!\\\\/\\\\*.*?\\\\*\\\\/)(${inlineFunctionTokens.join('|')})(\\\\s*?)${nestedParenthesisRegex}`, 'gmsi'),\n      (match: any) => this.storeInlinePhpDirective(match),\n    );\n  }\n\n  preserveBladeDirectivesInScripts(content: any) {\n    return _.replace(content, /(?<=<script[^>]*?(?<!=)>)(.*?)(?=<\\/script>)/gis, (match: string) => {\n      const targetTokens = [...indentStartTokens, ...inlineFunctionTokens];\n\n      if (new RegExp(targetTokens.join('|'), 'gmi').test(match) === false) {\n        if (/^[\\s\\n]+$/.test(match)) {\n          return match.trim();\n        }\n\n        return match;\n      }\n\n      const inlineFunctionDirectives = inlineFunctionTokens.join('|');\n      const inlineFunctionRegex = new RegExp(\n        // eslint-disable-next-line max-len\n        `(?!\\\\/\\\\*.*?\\\\*\\\\/)(${inlineFunctionDirectives})(\\\\s*?)${nestedParenthesisRegex}`,\n        'gmi',\n      );\n      const endTokens = _.chain(indentEndTokens).without('@endphp');\n\n      let formatted: string = match;\n\n      formatted = _.replace(formatted, inlineFunctionRegex, (matched: any) =>\n        this.storeBladeDirective(\n          util.formatRawStringAsPhp(matched, { ...this.options, printWidth: util.printWidthForInline }),\n        ),\n      );\n\n      formatted = _.replace(\n        formatted,\n        new RegExp(`(${indentStartTokens.join('|')})\\\\s*?${nestedParenthesisRegex}`, 'gis'),\n        (matched) => `if ( /*${this.storeBladeDirectiveInScript(matched)}*/ ) {`,\n      );\n\n      formatted = _.replace(\n        formatted,\n        new RegExp(`(${[...indentElseTokens, ...indentStartOrElseTokens].join('|')})(?!\\\\w+?\\\\s*?\\\\(.*?\\\\))`, 'gis'),\n        (matched) => `/***script_placeholder***/} /* ${this.storeBladeDirectiveInScript(matched)} */ {`,\n      );\n\n      formatted = _.replace(\n        formatted,\n        new RegExp(`(${endTokens.join('|')})`, 'gis'),\n        (matched) => `/***script_placeholder***/} /*${this.storeBladeDirectiveInScript(matched)}*/`,\n      );\n\n      formatted = _.replace(formatted, /(?<!@)@php(.*?)@endphp/gis, (_matched: any, p1: any) => this.storeRawBlock(p1));\n\n      // custom directive\n      formatted = this.preserveCustomDirectiveInScript(formatted);\n\n      return formatted;\n    });\n  }\n\n  preserveBladeDirectivesInStyles(content: string) {\n    return _.replace(content, /(?<=<style[^>]*?(?<!=)>)(.*?)(?=<\\/style>)/gis, (inside: string) => {\n      let result: string = inside;\n\n      const inlineRegex = new RegExp(\n        `(?!${['@end', '@else', ...cssAtRuleTokens].join('|')})@(\\\\w+)\\\\s*?(?![^\\\\1]*@end\\\\1)${nestedParenthesisRegex}`,\n        'gmi',\n      );\n\n      result = _.replace(\n        result,\n        inlineRegex,\n        (match: string) => `${this.storeBladeDirectiveInStyle(match)} {/* inline_directive */}`,\n      );\n\n      const customStartRegex = new RegExp(\n        `(?!${['@end', '@else', ...cssAtRuleTokens].join('|')})@(\\\\w+)\\\\s*?(${nestedParenthesisRegex})`,\n        'gmi',\n      );\n\n      result = _.replace(\n        result,\n        customStartRegex,\n        (match: string) => `${this.storeBladeDirectiveInStyle(match)} { /*start*/`,\n      );\n\n      const startRegex = new RegExp(`(${indentStartTokens.join('|')})\\\\s*?(${nestedParenthesisRegex})`, 'gmi');\n\n      result = _.replace(\n        result,\n        startRegex,\n        (match: string) => `${this.storeBladeDirectiveInStyle(match)} { /*start*/`,\n      );\n\n      const elseRegex = new RegExp(\n        `(${['@else\\\\w+', ...indentElseTokens].join('|')})\\\\s*?(${nestedParenthesisRegex})?`,\n        'gmi',\n      );\n\n      result = _.replace(\n        result,\n        elseRegex,\n        (match: string) => `} ${this.storeBladeDirectiveInStyle(match)} { /*else*/`,\n      );\n\n      const endRegex = new RegExp(`${['@end\\\\w+', ...indentEndTokens].join('|')}`, 'gmi');\n\n      result = _.replace(result, endRegex, (match: string) => `} /* ${this.storeBladeDirectiveInStyle(match)} */`);\n\n      return result;\n    });\n  }\n\n  /**\n   *\n   * @param content string between <script>~</script>\n   * @returns string\n   */\n  preserveCustomDirectiveInScript(content: string): string {\n    const negativeLookAhead = [\n      ..._.without(indentStartTokens, '@unless'),\n      ...indentEndTokens,\n      ...indentElseTokens,\n      ...['@unless\\\\(.*?\\\\)'],\n    ].join('|');\n\n    const inlineNegativeLookAhead = [\n      ..._.without(indentStartTokens, '@unless'),\n      ...indentEndTokens,\n      ...indentElseTokens,\n      ...inlineFunctionTokens,\n      ...phpKeywordStartTokens,\n      ...['@unless[a-z]*\\\\(.*?\\\\)'],\n      ...unbalancedStartTokens,\n    ].join('|');\n\n    const inlineRegex = new RegExp(\n      `(?!(${inlineNegativeLookAhead}))(@([a-zA-Z1-9_\\\\-]+))(?!.*?@end\\\\3)${nestedParenthesisRegex}.*?(?<!@end\\\\5)`,\n      'gis',\n    );\n\n    const regex = new RegExp(\n      `(?!(${negativeLookAhead}))(@(unless)*([a-zA-Z1-9_\\\\-]+))(?!.*?\\\\2)(\\\\s|\\\\(.*?\\\\))+(.*?)(@end\\\\4)`,\n      'gis',\n    );\n\n    let formatted: string;\n\n    // preserve inline directives\n    formatted = _.replace(content, inlineRegex, (match: string) => this.storeInlineCustomDirective(match));\n\n    // preserve begin~else~end directives\n    formatted = _.replace(\n      formatted,\n      regex,\n      (match: string, p1: string, p2: string, p3: string, p4: string, p5: string, p6: string, p7: string) => {\n        if (indentStartTokens.includes(p2)) {\n          return match;\n        }\n\n        let result: string = match;\n\n        result = _.replace(\n          result,\n          new RegExp(`${p2}(${nestedParenthesisRegex})*`, 'gim'),\n          (beginStr: string) => `if ( /*${this.storeBladeDirectiveInScript(beginStr)}*/ ) {`,\n        );\n\n        result = _.replace(\n          result,\n          new RegExp(`@else${p4}(${nestedParenthesisRegex})*`, 'gim'),\n          (elseStr: string) => `/***script_placeholder***/} /* ${this.storeBladeDirectiveInScript(elseStr)} */ {`,\n        );\n        result = _.replace(\n          result,\n          p7,\n          (endStr: string) => `/***script_placeholder***/} /*${this.storeBladeDirectiveInScript(endStr)}*/`,\n        );\n\n        return result;\n      },\n    );\n\n    // replace directives recursively\n    if (regex.test(formatted)) {\n      formatted = this.preserveCustomDirectiveInScript(formatted);\n    }\n\n    return formatted;\n  }\n\n  /**\n   * Recursively insert line break before and after directives\n   * @param content string\n   * @returns\n   */\n  breakLineBeforeAndAfterDirective(content: string): string {\n    // handle directive around html tags\n    // eslint-disable-next-line\n    content = _.replace(\n      content,\n      new RegExp(\n        `(?<=<.*?(?<!=)>)(${_.without(indentStartTokens, '@php').join(\n          '|',\n        )})(\\\\s*)${nestedParenthesisRegex}.*?(?=<.*?>)`,\n        'gmis',\n      ),\n      (match) => `\\n${match.trim()}\\n`,\n    );\n\n    // eslint-disable-next-line\n    content = _.replace(\n      content,\n      new RegExp(`(?<=<.*?(?<!=)>).*?(${_.without(indentEndTokens, '@endphp').join('|')})(?=<.*?>)`, 'gmis'),\n      (match) => `\\n${match.trim()}\\n`,\n    );\n\n    const unbalancedConditions = ['@case', ...indentElseTokens];\n\n    // eslint-disable-next-line\n    content = _.replace(\n      content,\n      new RegExp(`(\\\\s*?)(${unbalancedConditions.join('|')})(\\\\s*?)${nestedParenthesisRegex}(\\\\s*)`, 'gmi'),\n      (match) => `\\n${match.trim()}\\n`,\n      // handle else directive\n    );\n\n    // eslint-disable-next-line\n    content = _.replace(\n      content,\n      new RegExp(`\\\\s*?(?!(${_.without(indentElseTokens, '@else').join('|')}))@else\\\\s+`, 'gim'),\n      (match) => `\\n${match.trim()}\\n`,\n      // handle case directive\n    );\n\n    // eslint-disable-next-line\n    content = _.replace(content, /@case\\S*?\\s*?@case/gim, (match) => {\n      // handle unbalanced echos\n      return `${match.replace('\\n', '')}`;\n    });\n\n    const unbalancedEchos = ['@break'];\n\n    _.forEach(unbalancedEchos, (directive) => {\n      // eslint-disable-next-line\n      content = _.replace(content, new RegExp(`(\\\\s*?)${directive}\\\\s+`, 'gmi'), (match) => {\n        return `\\n${match.trim()}\\n\\n`;\n      });\n    });\n\n    // other directives\n    _.forEach(['@default'], (directive) => {\n      // eslint-disable-next-line\n      content = _.replace(content, new RegExp(`(\\\\s*?)${directive}\\\\s*`, 'gmi'), (match) => {\n        return `\\n\\n${match.trim()}\\n`;\n      });\n    });\n\n    // add line break around balanced directives\n    const directives = _.chain(indentStartTokens)\n      .map((x: any) => _.replace(x, /@/, ''))\n      .value();\n\n    _.forEach(directives, (directive: any) => {\n      try {\n        const recursivelyMatched = xregexp.matchRecursive(content, `\\\\@${directive}`, `\\\\@end${directive}`, 'gmi', {\n          valueNames: [null, 'left', 'match', 'right'],\n        });\n\n        if (_.isEmpty(recursivelyMatched)) {\n          return;\n        }\n\n        // eslint-disable-next-line\n        for (const matched of recursivelyMatched) {\n          if (matched.name === 'match') {\n            if (new RegExp(indentStartTokens.join('|')).test(matched.value)) {\n              // eslint-disable-next-line\n              content = _.replace(\n                content,\n                matched.value,\n                this.breakLineBeforeAndAfterDirective(util.escapeReplacementString(matched.value)),\n              );\n            }\n\n            const innerRegex = new RegExp(`^(\\\\s*?)${nestedParenthesisRegex}(.*)`, 'gmis');\n\n            const replaced = _.replace(\n              `${matched.value}`,\n              innerRegex,\n              (_match: string, p1: string, p2: string, p3: string) => {\n                if (p3.trim() === '') {\n                  return `${p1}(${p2.trim()})\\n${p3.trim()}`;\n                }\n\n                return `${p1}(${p2.trim()})\\n${p3.trim()}\\n`;\n              },\n            );\n\n            // eslint-disable-next-line\n            content = _.replace(content, matched.value, util.escapeReplacementString(replaced));\n          }\n        }\n      } catch (error) {\n        // do nothing to ignore unmatched directive pair\n      }\n    });\n\n    return content;\n  }\n\n  async preserveEscapedBladeDirective(content: string) {\n    return _.replace(content, /@@\\w*/gim, (match: string) => this.storeEscapedBladeDirective(match));\n  }\n\n  async preserveXslot(content: string) {\n    return _.replace(content, /(?<=<\\/?)(x-slot:[\\w_\\\\-]+)(?=(?:[^>]*?[^?])?>)/gm, (match: string) =>\n      this.storeXslot(match),\n    );\n  }\n\n  async preserveBladeComment(content: any) {\n    return _.replace(content, /\\{\\{--(.*?)--\\}\\}/gs, (match: string) => this.storeBladeComment(match));\n  }\n\n  preservePhpComment(content: string) {\n    return _.replace(content, /\\/\\*(?:[^*]|[\\r\\n]|(?:\\*+(?:[^*\\/]|[\\r\\n])))*\\*+\\//gi, (match: string) =>\n      this.storePhpComment(match),\n    );\n  }\n\n  async preserveBladeBrace(content: any) {\n    return _.replace(content, /\\{\\{(.*?)\\}\\}/gs, (_match: any, p1: any) => {\n      // if content is blank\n      if (p1 === '') {\n        return this.storeBladeBrace(p1, p1.length);\n      }\n\n      // preserve a space if content contains only space, tab, or new line character\n      if (!/\\S/.test(p1)) {\n        return this.storeBladeBrace(' ', ' '.length);\n      }\n\n      // any other content\n      return this.storeBladeBrace(p1.trim(), p1.trim().length);\n    });\n  }\n\n  async preserveRawBladeBrace(content: any) {\n    return _.replace(content, /\\{!!(.*?)!!\\}/gs, (_match: any, p1: any) => {\n      // if content is blank\n      if (p1 === '') {\n        return this.storeRawBladeBrace(p1);\n      }\n\n      // preserve a space if content contains only space, tab, or new line character\n      if (!/\\S/.test(p1)) {\n        return this.storeRawBladeBrace(' ');\n      }\n\n      // any other content\n      return this.storeRawBladeBrace(p1.trim());\n    });\n  }\n\n  async preserveConditions(content: any) {\n    const regex = new RegExp(\n      `(${conditionalTokens.join(\n        '|',\n        // eslint-disable-next-line max-len\n      )})(\\\\s*?)${nestedParenthesisRegex}`,\n      'gi',\n    );\n    return _.replace(\n      content,\n      regex,\n      (match: any, p1: any, p2: any, p3: any) => `${p1}${p2}(${this.storeConditions(p3)})`,\n    );\n  }\n\n  /**\n   * preserve unbalanced directive like @hasSection\n   */\n  preserveUnbalancedDirective(content: any) {\n    const regex = new RegExp(`((${unbalancedStartTokens.join('|')})(?!.*?\\\\2)(?:\\\\s|\\\\(.*?\\\\)))+(?=.*?@endif)`, 'gis');\n\n    let replaced: string = _.replace(\n      content,\n      regex,\n      (_match: string, p1: string) => `${this.storeUnbalancedDirective(p1)}`,\n    );\n\n    if (regex.test(replaced)) {\n      replaced = this.preserveUnbalancedDirective(replaced);\n    }\n\n    return replaced;\n  }\n\n  async preserveRawPhpTags(content: any) {\n    return _.replace(content, /<\\?php(.*?)\\?>/gms, (match: any) => this.storeRawPhpTags(match));\n  }\n\n  async preserveNonnativeScripts(content: string) {\n    return _.replace(\n      content,\n      /<script[^>]*?type=([\"'])(?!(text\\/javascript|module))[^\\1]*?\\1[^>]*?>.*?<\\/script>/gis,\n      (match: string) => this.storeNonnativeScripts(match),\n    );\n  }\n\n  async preserveScripts(content: any) {\n    return _.replace(content, /<script.*?>.*?<\\/script>/gis, (match: any) => this.storeScripts(match));\n  }\n\n  async preserveHtmlAttributes(content: any) {\n    return _.replace(\n      content,\n      /(?<=<[\\w\\-\\.\\:\\_]+[^]*\\s)(?!x-bind)([^\\s\\:][^\\s\\'\\\"]+\\s*=\\s*([\"'])(?<!\\\\)[^\\2]*?(?<!\\\\)\\2)(?=[^]*(?<!=)\\/?>)/gms,\n      (match: string) => `${this.storeHtmlAttribute(match)}`,\n    );\n  }\n\n  async sortHtmlAttributes(content: string) {\n    const strategy: SortHtmlAttributes = this.options.sortHtmlAttributes ?? 'none';\n\n    if (!_.isEmpty(strategy) && strategy !== 'none') {\n      const regexes = this.options.customHtmlAttributesOrder;\n\n      if (_.isArray(regexes)) {\n        return sortAttributes(content, { order: strategy, customRegexes: regexes });\n      }\n\n      // when option is string\n      const customRegexes = _.chain(regexes).split(',').map(_.trim).value();\n\n      return sortAttributes(content, { order: strategy, customRegexes });\n    }\n\n    return content;\n  }\n\n  async preserveShorthandBinding(content: string) {\n    return _.replace(\n      content,\n      /(?<=<(?!livewire:)[^<]*?(\\s|x-bind)):{1}(?<!=>)[\\w\\-_.]*?=([\"'])(?!=>)[^\\2]*?\\2(?=[^>]*?\\/*?>)/gim,\n      (match: any) => `${this.storeShorthandBinding(match)}`,\n    );\n  }\n\n  async preserveComponentAttribute(content: string) {\n    return _.replace(\n      content,\n      /(?<=<(x-|livewire:)[^<]*?\\s):{1,2}(?<!=>)[\\w\\-_.]*?=([\"'])(?!=>)[^\\2]*?\\2(?=[^>]*?\\/*?>)/gim,\n      (match: any) => `${this.storeComponentAttribute(match)}`,\n    );\n  }\n\n  async formatXData(content: any) {\n    return _.replace(\n      content,\n      /(\\s*)x-data=\"(.*?)\"(\\s*)/gs,\n      (_match: any, p1: any, p2: any, p3: any) => `${p1}x-data=\"${this.storeXData(p2)}\"${p3}`,\n    );\n  }\n\n  async formatXInit(content: any) {\n    return _.replace(\n      content,\n      /(\\s*)x-init=\"(.*?)\"(\\s*)/gs,\n      (_match: any, p1: any, p2: any, p3: any) => `${p1}x-init=\"${this.storeXInit(p2)}\"${p3}`,\n    );\n  }\n\n  preserveStringLiteralInPhp(content: any) {\n    return _.replace(\n      content,\n      /(\\\"([^\\\\]|\\\\.)*?\\\"|\\'([^\\\\]|\\\\.)*?\\')/gm,\n      (match: string) => `${this.storeStringLiteralInPhp(match)}`,\n    );\n  }\n\n  storeIgnoredLines(value: any) {\n    return this.getIgnoredLinePlaceholder(this.ignoredLines.push(value) - 1);\n  }\n\n  storeCurlyBraceForJS(value: any) {\n    return this.getCurlyBraceForJSPlaceholder(this.curlyBracesWithJSs.push(value) - 1);\n  }\n\n  storeRawBlock(value: any) {\n    return this.getRawPlaceholder(this.rawBlocks.push(value) - 1);\n  }\n\n  storeInlineDirective(value: any) {\n    return this.getInlinePlaceholder(this.inlineDirectives.push(value) - 1, value.length);\n  }\n\n  storeConditions(value: any) {\n    return this.getConditionPlaceholder(this.conditions.push(value) - 1);\n  }\n\n  storeInlinePhpDirective(value: any) {\n    return this.getInlinePhpPlaceholder(this.inlinePhpDirectives.push(value) - 1);\n  }\n\n  storeRawPropsBlock(value: any) {\n    return this.getRawPropsPlaceholder(this.rawPropsBlocks.push(value) - 1);\n  }\n\n  storeBladeDirective(value: any) {\n    return this.getBladeDirectivePlaceholder(this.bladeDirectives.push(value) - 1);\n  }\n\n  storeBladeDirectiveInStyle(value: string) {\n    return this.getBladeDirectiveInStylePlaceholder((this.bladeDirectivesInStyle.push(value) - 1).toString());\n  }\n\n  storeEscapedBladeDirective(value: string) {\n    return this.getEscapedBladeDirectivePlaceholder((this.escapedBladeDirectives.push(value) - 1).toString());\n  }\n\n  storeXslot(value: string) {\n    return this.getXslotPlaceholder((this.xSlot.push(value) - 1).toString());\n  }\n\n  storeBladeComment(value: any) {\n    return this.getBladeCommentPlaceholder(this.bladeComments.push(value) - 1);\n  }\n\n  storePhpComment(value: string) {\n    return this.getPhpCommentPlaceholder((this.phpComments.push(value) - 1).toString());\n  }\n\n  storeHtmlTag(value: string) {\n    return this.getHtmlTagPlaceholder((this.htmlTags.push(value) - 1).toString());\n  }\n\n  storeInlineCustomDirective(value: string) {\n    return this.getInlineCustomDirectivePlaceholder((this.customDirectives.push(value) - 1).toString());\n  }\n\n  storeBeginCustomDirective(value: string) {\n    return this.getBeginCustomDirectivePlaceholder((this.customDirectives.push(value) - 1).toString());\n  }\n\n  storeElseCustomDirective(value: string) {\n    return this.getElseCustomDirectivePlaceholder((this.customDirectives.push(value) - 1).toString());\n  }\n\n  storeEndCustomDirective(value: string) {\n    return this.getEndCustomDirectivePlaceholder((this.customDirectives.push(value) - 1).toString());\n  }\n\n  storeUnbalancedDirective(value: string) {\n    return this.getUnbalancedDirectivePlaceholder((this.unbalancedDirectives.push(value) - 1).toString());\n  }\n\n  storeBladeBrace(value: any, length: any) {\n    const index = this.bladeBraces.push(value) - 1;\n    const brace = '{{  }}';\n    return this.getBladeBracePlaceholder(index, length + brace.length);\n  }\n\n  storeRawBladeBrace(value: any) {\n    const index = this.rawBladeBraces.push(value) - 1;\n    return this.getRawBladeBracePlaceholder(index);\n  }\n\n  storeRawPhpTags(value: any) {\n    const index = this.rawPhpTags.push(value) - 1;\n    return this.getRawPhpTagPlaceholder(index);\n  }\n\n  storeNonnativeScripts(value: string) {\n    const index = this.nonnativeScripts.push(value) - 1;\n    return this.getNonnativeScriptPlaceholder(index.toString());\n  }\n\n  storeScripts(value: any) {\n    const index = this.scripts.push(value) - 1;\n    return this.getScriptPlaceholder(index);\n  }\n\n  storeHtmlAttribute(value: string) {\n    const index = this.htmlAttributes.push(value) - 1;\n\n    if (value.length > 0) {\n      return this.getHtmlAttributePlaceholder(index.toString(), value.length);\n    }\n\n    return this.getHtmlAttributePlaceholder(index.toString(), 0);\n  }\n\n  storeShorthandBinding(value: any) {\n    const index = this.shorthandBindings.push(value) - 1;\n\n    return this.getShorthandBindingPlaceholder(index.toString(), value.length);\n  }\n\n  storeComponentAttribute(value: any) {\n    const index = this.componentAttributes.push(value) - 1;\n\n    return this.getComponentAttributePlaceholder(index.toString());\n  }\n\n  storeXData(value: any) {\n    const index = this.xData.push(value) - 1;\n    return this.getXDataPlaceholder(index);\n  }\n\n  storeXInit(value: any) {\n    const index = this.xInit.push(value) - 1;\n    return this.getXInitPlaceholder(index);\n  }\n\n  storeTemplatingString(value: any) {\n    const index = this.templatingStrings.push(value) - 1;\n    return this.getTemplatingStringPlaceholder(index);\n  }\n\n  storeStringLiteralInPhp(value: any) {\n    const index = this.stringLiteralInPhp.push(value) - 1;\n    return this.getStringLiteralInPhpPlaceholder(index);\n  }\n\n  storeBladeDirectiveInScript(value: string) {\n    return this.getBladeDirectiveInScriptPlaceholder((this.directivesInScript.push(value) - 1).toString());\n  }\n\n  getIgnoredLinePlaceholder(replace: any) {\n    return _.replace('___ignored_line_#___', '#', replace);\n  }\n\n  getCurlyBraceForJSPlaceholder(replace: any) {\n    return _.replace('___js_curly_brace_#___', '#', replace);\n  }\n\n  getRawPlaceholder(replace: any) {\n    return _.replace('___raw_block_#___', '#', replace);\n  }\n\n  getInlinePlaceholder(replace: any, length = 0) {\n    if (length > 0) {\n      const template = '___inline_directive_#___';\n      const gap = length - template.length;\n      return _.replace(`___inline_directive_${_.repeat('_', gap > 0 ? gap : 0)}#___`, '#', replace);\n    }\n\n    return _.replace('___inline_directive_+?#___', '#', replace);\n  }\n\n  getConditionPlaceholder(replace: any) {\n    return _.replace('___directive_condition_#___', '#', replace);\n  }\n\n  getInlinePhpPlaceholder(replace: any) {\n    return _.replace('___inline_php_directive_#___', '#', replace);\n  }\n\n  getRawPropsPlaceholder(replace: any) {\n    return _.replace('@__raw_props_block_#__@', '#', replace);\n  }\n\n  getBladeDirectivePlaceholder(replace: any) {\n    return _.replace('___blade_directive_#___', '#', replace);\n  }\n\n  getBladeDirectiveInStylePlaceholder(replace: string) {\n    return _.replace('.___blade_directive_in_style_#__', '#', replace);\n  }\n\n  getEscapedBladeDirectivePlaceholder(replace: string) {\n    return _.replace('___escaped_directive_#___', '#', replace);\n  }\n\n  getXslotPlaceholder(replace: string) {\n    return _.replace('x-slot --___#___--', '#', replace);\n  }\n\n  getBladeCommentPlaceholder(replace: any) {\n    return _.replace('___blade_comment_#___', '#', replace);\n  }\n\n  getPhpCommentPlaceholder(replace: string) {\n    return _.replace('___php_comment_#___', '#', replace);\n  }\n\n  getBladeBracePlaceholder(replace: any, length = 0) {\n    if (length > 0) {\n      const template = '___blade_brace_#___';\n      const gap = length - template.length;\n      return _.replace(`___blade_brace_${_.repeat('_', gap > 0 ? gap : 0)}#___`, '#', replace);\n    }\n\n    return _.replace('___blade_brace_+?#___', '#', replace);\n  }\n\n  getRawBladeBracePlaceholder(replace: any) {\n    return _.replace('___raw_blade_brace_#___', '#', replace);\n  }\n\n  getRawPhpTagPlaceholder(replace: any) {\n    return _.replace('___raw_php_tag_#___', '#', replace);\n  }\n\n  getNonnativeScriptPlaceholder(replace: string) {\n    return _.replace('<blade___non_native_scripts_#___ />', '#', replace);\n  }\n\n  getScriptPlaceholder(replace: any) {\n    return _.replace('<blade___scripts_#___ />', '#', replace);\n  }\n\n  getHtmlTagPlaceholder(replace: string) {\n    return _.replace('<blade___html_tags_#___ />', '#', replace);\n  }\n\n  getInlineCustomDirectivePlaceholder(replace: string) {\n    return _.replace('___inline_cd_#___', '#', replace);\n  }\n\n  getBeginCustomDirectivePlaceholder(replace: string) {\n    return _.replace('@customdirective(___#___)', '#', replace);\n  }\n\n  getElseCustomDirectivePlaceholder(replace: string) {\n    return _.replace('@else(___#___)', '#', replace);\n  }\n\n  getEndCustomDirectivePlaceholder(replace: string) {\n    return _.replace('@endcustomdirective(___#___)', '#', replace);\n  }\n\n  getUnbalancedDirectivePlaceholder(replace: string) {\n    return _.replace('@if (unbalanced___#___)', '#', replace);\n  }\n\n  getHtmlAttributePlaceholder(replace: string, length: any) {\n    if (length && length > 0) {\n      const template = '___attrs_#___';\n      const gap = length - template.length;\n      return _.replace(`___attrs${_.repeat('_', gap > 0 ? gap : 1)}#___`, '#', replace);\n    }\n\n    if (_.isNull(length)) {\n      return _.replace('___attrs_#___', '#', replace);\n    }\n\n    return _.replace('___attrs_+?#___', '#', replace);\n  }\n\n  getShorthandBindingPlaceholder(replace: string, length: any = 0) {\n    if (length && length > 0) {\n      const template = '___short_binding_#___';\n      const gap = length - template.length;\n      return _.replace(`___short_binding_${_.repeat('_', gap > 0 ? gap : 1)}#___`, '#', replace);\n    }\n    return _.replace('___short_binding_+?#___', '#', replace);\n  }\n\n  getComponentAttributePlaceholder(replace: string) {\n    return _.replace('___attribute_#___', '#', replace);\n  }\n\n  getXInitPlaceholder(replace: any) {\n    return _.replace('___x_init_#___', '#', replace);\n  }\n\n  getPlaceholder(attribute: string, replace: any, length: any = null) {\n    if (length && length > 0) {\n      const template = `___${attribute}_#___`;\n      const gap = length - template.length;\n      return _.replace(`___${attribute}${_.repeat('_', gap > 0 ? gap : 1)}#___`, '#', replace);\n    }\n\n    if (_.isNull(length)) {\n      return _.replace(`___${attribute}_#___`, '#', replace);\n    }\n\n    return _.replace(`s___${attribute}_+?#___`, '#', replace);\n  }\n\n  getXDataPlaceholder(replace: any) {\n    return _.replace('___x_data_#___', '#', replace);\n  }\n\n  getTemplatingStringPlaceholder(replace: any) {\n    return _.replace('___templating_str_#___', '#', replace);\n  }\n\n  getStringLiteralInPhpPlaceholder(replace: any) {\n    return _.replace(\"'___php_content_#___'\", '#', replace);\n  }\n\n  getBladeDirectiveInScriptPlaceholder(replace: any) {\n    return _.replace('___directives_script_#___', '#', replace);\n  }\n\n  restoreIgnoredLines(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getIgnoredLinePlaceholder('(\\\\d+)')}`, 'gm'),\n      (_match: any, p1: any) => this.ignoredLines[p1],\n    );\n  }\n\n  restoreCurlyBraceForJS(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getCurlyBraceForJSPlaceholder('(\\\\d+)')}`, 'gm'),\n      (_match: any, p1: any) => `@{{ ${beautify.js_beautify(this.curlyBracesWithJSs[p1].trim())} }}`,\n    );\n  }\n\n  restorePhpBlock(content: any) {\n    return this.restoreRawPhpBlock(content).then((target) => this.restoreRawPropsBlock(target));\n  }\n\n  async restoreRawPhpBlock(content: any) {\n    return replaceAsync(\n      content,\n      new RegExp(`${this.getRawPlaceholder('(\\\\d+)')}`, 'gm'),\n      async (match: any, p1: number) => {\n        let rawBlock = this.rawBlocks[p1];\n        const placeholder = this.getRawPlaceholder(p1.toString());\n        const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n\n        const isOnSingleLine = this.isInline(rawBlock);\n        const isMultipleStatements = await this.isMultilineStatement(rawBlock);\n        if (isOnSingleLine && isMultipleStatements) {\n          // multiple statements on a single line\n          rawBlock = (await util.formatStringAsPhp(`<?php\\n${rawBlock}\\n?>`, this.options)).trim();\n        } else if (isMultipleStatements) {\n          // multiple statments on mult lines\n\n          const indentLevel = indent.amount + this.indentSize;\n          rawBlock = (\n            await util.formatStringAsPhp(`<?php${rawBlock}?>`, {\n              ...this.options,\n              useProjectPrintWidth: true,\n              adjustPrintWidthBy: indentLevel,\n            })\n          ).trimEnd();\n        } else if (!isOnSingleLine) {\n          // single statement on mult lines\n          rawBlock = (await util.formatStringAsPhp(`<?php${rawBlock}?>`, this.options)).trimEnd();\n        } else {\n          // single statement on single line\n          rawBlock = `<?php${rawBlock}?>`;\n        }\n\n        return _.replace(rawBlock, /^(\\s*)?<\\?php(.*?)\\?>/gms, (_matched: any, _q1: any, q2: any) => {\n          if (this.isInline(rawBlock)) {\n            return `@php${q2}@endphp`;\n          }\n\n          let preserved = this.preserveStringLiteralInPhp(q2);\n          preserved = this.preservePhpComment(preserved);\n          let indented = this.indentRawBlock(indent, preserved);\n          indented = this.restorePhpComment(indented);\n          const restored = this.restoreStringLiteralInPhp(indented);\n\n          return `@php${restored}@endphp`;\n        });\n      },\n    );\n  }\n\n  async restoreRawPropsBlock(content: any) {\n    const regex = this.getRawPropsPlaceholder('(\\\\d+)');\n    return replaceAsync(content, new RegExp(regex, 'gms'), async (_match: any, p1: any) => {\n      const placeholder = this.getRawPropsPlaceholder(p1.toString());\n      const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n      const indent = detectIndent(matchedLine[0]);\n\n      const formatted = `@props(${(\n        await util.formatRawStringAsPhp(this.rawPropsBlocks[p1], {\n          ...this.options,\n        })\n      ).trim()})`;\n\n      return this.indentRawPhpBlock(indent, formatted);\n    });\n  }\n\n  isInline(content: any) {\n    return _.split(content, '\\n').length === 1;\n  }\n\n  async isMultilineStatement(rawBlock: any) {\n    return (await util.formatStringAsPhp(`<?php${rawBlock}?>`, this.options)).trimRight().split('\\n').length > 1;\n  }\n\n  indentRawBlock(indent: detectIndent.Indent, content: any) {\n    if (this.isInline(content)) {\n      return `${indent.indent}${content}`;\n    }\n\n    const leftIndentAmount = indent.amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefix = this.indentCharacter.repeat(indentLevel < 0 ? 0 : (indentLevel + 1) * this.indentSize);\n    const prefixForEnd = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const lines = content.split('\\n');\n\n    return _.chain(lines)\n      .map((line: any, index: any) => {\n        if (index === 0) {\n          return line.trim();\n        }\n\n        if (index === lines.length - 1) {\n          return prefixForEnd + line;\n        }\n\n        if (line.length === 0) {\n          return line;\n        }\n\n        return prefix + line;\n      })\n      .join('\\n')\n      .value();\n  }\n\n  indentBladeDirectiveBlock(indent: detectIndent.Indent, content: any) {\n    if (_.isEmpty(indent.indent)) {\n      return content;\n    }\n\n    if (this.isInline(content)) {\n      return `${indent.indent}${content}`;\n    }\n\n    const leftIndentAmount = indent.amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefixSpaces = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n    const prefixForEnd = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const lines = content.split('\\n');\n\n    return _.chain(lines)\n      .map((line: any, index: any) => {\n        if (index === lines.length - 1) {\n          return prefixForEnd + line;\n        }\n\n        return prefixSpaces + line;\n      })\n      .value()\n      .join('\\n');\n  }\n\n  indentScriptBlock(indent: detectIndent.Indent, content: any) {\n    if (_.isEmpty(indent.indent)) {\n      return content;\n    }\n\n    if (this.isInline(content)) {\n      return `${content}`;\n    }\n\n    const leftIndentAmount = indent.amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefixSpaces = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n    const prefixForEnd = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const preserved = _.replace(content, /`.*?`/gs, (match: any) => this.storeTemplatingString(match));\n\n    const lines = preserved.split('\\n');\n\n    const indented = _.chain(lines)\n      .map((line: any, index: any) => {\n        if (index === 0) {\n          return line;\n        }\n\n        if (index === lines.length - 1) {\n          return prefixForEnd + line;\n        }\n\n        if (_.isEmpty(line)) {\n          return line;\n        }\n\n        return prefixSpaces + line;\n      })\n      .value()\n      .join('\\n');\n\n    return this.restoreTemplatingString(`${indented}`);\n  }\n\n  indentRawPhpBlock(indent: detectIndent.Indent, content: any) {\n    if (_.isEmpty(indent.indent)) {\n      return content;\n    }\n\n    if (this.isInline(content)) {\n      return `${content}`;\n    }\n\n    const leftIndentAmount = indent.amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefixSpaces = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const lines = content.split('\\n');\n\n    return _.chain(lines)\n      .map((line: any, index: any) => {\n        if (index === 0) {\n          return line.trim();\n        }\n\n        return prefixSpaces + line;\n      })\n      .value()\n      .join('\\n');\n  }\n\n  indentComponentAttribute(prefix: string, content: string) {\n    if (_.isEmpty(prefix)) {\n      return content;\n    }\n\n    if (this.isInline(content)) {\n      return `${content}`;\n    }\n\n    if (this.isInline(content) && /\\S/.test(prefix)) {\n      return `${content}`;\n    }\n\n    const leftIndentAmount = detectIndent(prefix).amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefixSpaces = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const lines = content.split('\\n');\n\n    return _.chain(lines)\n      .map((line: any, index: any) => {\n        if (index === 0) {\n          return line.trim();\n        }\n\n        return prefixSpaces + line;\n      })\n      .value()\n      .join('\\n');\n  }\n\n  indentPhpComment(indent: detectIndent.Indent, content: string) {\n    if (_.isEmpty(indent.indent)) {\n      return content;\n    }\n\n    if (this.isInline(content)) {\n      return `${content}`;\n    }\n\n    const leftIndentAmount = indent.amount;\n    const indentLevel = leftIndentAmount / this.indentSize;\n    const prefixSpaces = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel * this.indentSize);\n\n    const lines = content.split('\\n');\n    let withoutCommentLine = false;\n\n    return _.chain(lines)\n      .map((line: string, index: number) => {\n        if (index === 0) {\n          return line.trim();\n        }\n\n        if (!line.trim().startsWith('*')) {\n          withoutCommentLine = true;\n          return line;\n        }\n\n        if (line.trim().endsWith('*/') && withoutCommentLine) {\n          return line;\n        }\n\n        return prefixSpaces + line;\n      })\n      .join('\\n')\n      .value();\n  }\n\n  restoreBladeDirectivesInStyles(content: string) {\n    return _.replace(content, /(?<=<style[^>]*?(?<!=)>)(.*?)(?=<\\/style>)/gis, (inside: string) => {\n      let result: string = inside;\n\n      const inlineRegex = new RegExp(\n        `${this.getBladeDirectiveInStylePlaceholder('(\\\\d+)')} {\\\\s*?\\/\\\\* inline_directive \\\\*\\/\\\\s*?}`,\n        'gmi',\n      );\n\n      result = _.replace(result, inlineRegex, (match: string, p1: number) => this.bladeDirectivesInStyle[p1]);\n\n      const elseRegex = new RegExp(\n        `}\\\\s*?${this.getBladeDirectiveInStylePlaceholder('(\\\\d+)')} {\\\\s*?\\/\\\\*else\\\\*\\/`,\n        'gmi',\n      );\n\n      result = _.replace(result, elseRegex, (match: string, p1: number) => `${this.bladeDirectivesInStyle[p1]}`);\n\n      const startRegex = new RegExp(\n        `${this.getBladeDirectiveInStylePlaceholder('(\\\\d+)')} {\\\\s*?\\/\\\\*start\\\\*\\/`,\n        'gmi',\n      );\n\n      result = _.replace(result, startRegex, (match: string, p1: number) => `${this.bladeDirectivesInStyle[p1]}`);\n\n      const endRegex = new RegExp(`}\\\\s*?\\/\\\\* ${this.getBladeDirectiveInStylePlaceholder('(\\\\d+)')} \\\\*\\/`, 'gmi');\n\n      result = _.replace(result, endRegex, (match: string, p1: number) => `${this.bladeDirectivesInStyle[p1]}`);\n\n      return result;\n    });\n  }\n\n  async restoreBladeDirectivesInScripts(content: any) {\n    const regex = new RegExp(`${this.getBladeDirectivePlaceholder('(\\\\d+)')}`, 'gm');\n\n    // restore inline blade directive\n    let result = _.replace(content, regex, (_match: any, p1: number) => {\n      const placeholder = this.getBladeDirectivePlaceholder(p1.toString());\n      const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n      const indent = detectIndent(matchedLine[0]);\n\n      return this.indentBladeDirectiveBlock(indent, this.bladeDirectives[p1]);\n    });\n\n    result = await replaceAsync(result, /(?<=<script[^>]*?(?<!=)>)(.*?)(?=<\\/script>)/gis, async (match: string) => {\n      let formatted: string = match;\n\n      // restore begin\n      formatted = _.replace(\n        formatted,\n        new RegExp(\n          `if \\\\( \\\\/\\\\*(?:(?:${this.getBladeDirectiveInScriptPlaceholder('(\\\\d+)')}).*?)\\\\*\\\\/ \\\\) \\\\{`,\n          'gis',\n        ),\n        (_match: any, p1: any) => `${this.directivesInScript[p1]}`,\n      );\n\n      // restore else\n      formatted = _.replace(\n        formatted,\n        new RegExp(\n          `} \\\\/\\\\* (?:${this.getBladeDirectiveInScriptPlaceholder(\n            '(\\\\d+)',\n          )}) \\\\*\\\\/ {(\\\\s*?\\\\(___directive_condition_\\\\d+___\\\\))?`,\n          'gim',\n        ),\n        (_match: any, p1: number, p2: string) => {\n          if (_.isUndefined(p2)) {\n            return `${this.directivesInScript[p1].trim()}`;\n          }\n\n          return `${this.directivesInScript[p1].trim()} ${(p2 ?? '').trim()}`;\n        },\n      );\n\n      // restore end\n      formatted = _.replace(\n        formatted,\n        new RegExp(`} \\\\/\\\\*(?:${this.getBladeDirectiveInScriptPlaceholder('(\\\\d+)')})\\\\*\\\\/`, 'gis'),\n        (_match: any, p1: any) => `${this.directivesInScript[p1]}`,\n      );\n\n      // restore php block\n      formatted = await replaceAsync(\n        formatted,\n        new RegExp(`${this.getRawPlaceholder('(\\\\d+)')}`, 'gm'),\n        // eslint-disable-next-line no-shadow\n        async (match: any, p1: number) => {\n          let rawBlock = this.rawBlocks[p1];\n          const placeholder = this.getRawPlaceholder(p1.toString());\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n\n          if (this.isInline(rawBlock) && (await this.isMultilineStatement(rawBlock))) {\n            rawBlock = (await util.formatStringAsPhp(`<?php\\n${rawBlock}\\n?>`, this.options)).trim();\n          } else if (rawBlock.split('\\n').length > 1) {\n            rawBlock = (await util.formatStringAsPhp(`<?php${rawBlock}?>`, this.options)).trim();\n          } else {\n            rawBlock = `<?php${rawBlock}?>`;\n          }\n\n          return _.replace(rawBlock, /^(\\s*)?<\\?php(.*?)\\?>/gms, (_matched: any, _q1: any, q2: any) => {\n            if (this.isInline(rawBlock)) {\n              return `@php${q2}@endphp`;\n            }\n\n            const preserved = this.preserveStringLiteralInPhp(q2);\n            const indented = this.indentRawBlock(indent, preserved);\n            const restored = this.restoreStringLiteralInPhp(indented);\n\n            return `@php${restored}@endphp`;\n          });\n        },\n      );\n\n      // delete place holder\n      formatted = _.replace(\n        formatted,\n        /(?<=[\\S]+)(\\s*?)\\/\\*\\*\\*script_placeholder\\*\\*\\*\\/(\\s)?/gim,\n        (_match: any, p1: string, p2: string) => {\n          if (p2 !== undefined) {\n            return p2;\n          }\n\n          const group1 = p1 ?? '';\n          const group2 = p2 ?? '';\n\n          return group1 + group2;\n        },\n      );\n\n      return formatted;\n    });\n\n    if (regex.test(result)) {\n      result = await this.restoreBladeDirectivesInScripts(result);\n    }\n\n    return result;\n  }\n\n  async formatPreservedBladeDirectives(directives: any) {\n    return Aigle.map(directives, async (content: any) => {\n      const formattedAsHtml = await this.formatAsHtml(content);\n      const formatted = await this.formatAsBlade(formattedAsHtml);\n      return formatted.trimRight('\\n');\n    });\n  }\n\n  restoreBladeComment(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res: any) =>\n      _.replace(res, new RegExp(`${this.getBladeCommentPlaceholder('(\\\\d+)')}`, 'gms'), (_match: any, p1: any) =>\n        this.bladeComments[p1].replace(/{{--(?=\\S)/g, '{{-- ').replace(/(?<=\\S)--}}/g, ' --}}'),\n      ),\n    );\n  }\n\n  restoreXslot(content: string) {\n    return _.replace(content, /x-slot\\s*--___(\\d+)___--/gms, (_match: string, p1: number) => this.xSlot[p1]).replace(\n      /(?<=<x-slot:[\\w\\_\\-]*)\\s+(?=\\/?>)/gm,\n      () => '',\n    );\n  }\n\n  restorePhpComment(content: string) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getPhpCommentPlaceholder('(\\\\d+)')};{0,1}`, 'gms'),\n      (_match: string, p1: number) => {\n        const placeholder = this.getPhpCommentPlaceholder(p1.toString());\n        const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n        const formatted = formatPhpComment(this.phpComments[p1]);\n\n        return this.indentPhpComment(indent, formatted);\n      },\n    );\n  }\n\n  async restoreEscapedBladeDirective(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res: any) =>\n      _.replace(\n        res,\n        new RegExp(`${this.getEscapedBladeDirectivePlaceholder('(\\\\d+)')}`, 'gms'),\n        (_match: string, p1: number) => this.escapedBladeDirectives[p1],\n      ),\n    );\n  }\n\n  async restoreBladeBrace(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res: any) =>\n      replaceAsync(\n        res,\n        new RegExp(`${this.getBladeBracePlaceholder('(\\\\d+)')}`, 'gm'),\n        async (_match: string, p1: number) => {\n          const placeholder = this.getBladeBracePlaceholder(p1.toString());\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n          const bladeBrace = this.bladeBraces[p1];\n\n          if (bladeBrace.trim() === '') {\n            return `{{${bladeBrace}}}`;\n          }\n\n          if (this.isInline(bladeBrace)) {\n            return `{{ ${(\n              await util.formatRawStringAsPhp(bladeBrace, {\n                ...this.options,\n                trailingCommaPHP: false,\n                printWidth: util.printWidthForInline,\n              })\n            )\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .split('\\n')\n              .map((line) => line.trim())\n              .join('')\n              // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.\n              .trimRight('\\n')} }}`;\n          }\n\n          return `{{ ${this.indentRawPhpBlock(\n            indent,\n            (await util.formatRawStringAsPhp(bladeBrace, this.options))\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .trim()\n              .trimEnd(),\n          )} }}`;\n        },\n      ),\n    );\n  }\n\n  async restoreRawBladeBrace(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res) =>\n      replaceAsync(\n        // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message\n        res,\n        new RegExp(`${this.getRawBladeBracePlaceholder('(\\\\d+)')}`, 'gms'),\n        async (_match: any, p1: any) => {\n          const placeholder = this.getRawBladeBracePlaceholder(p1);\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n          const bladeBrace = this.rawBladeBraces[p1];\n\n          if (bladeBrace.trim() === '') {\n            return `{!!${bladeBrace}!!}`;\n          }\n\n          return this.indentRawPhpBlock(\n            indent,\n            `{!! ${(await util.formatRawStringAsPhp(bladeBrace, this.options))\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .trim()} !!}`,\n          );\n        },\n      ),\n    );\n  }\n\n  restoreInlineDirective(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res) =>\n      _.replace(\n        // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message\n        res,\n        new RegExp(`${this.getInlinePlaceholder('(\\\\d+)')}`, 'gms'),\n        (_match: any, p1: any) => {\n          const matched = this.inlineDirectives[p1];\n          return matched;\n        },\n      ),\n    );\n  }\n\n  async restoreConditions(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res: any) =>\n      replaceAsync(\n        res,\n        new RegExp(`${this.getConditionPlaceholder('(\\\\d+)')}`, 'gms'),\n        async (_match: any, p1: any) => {\n          const placeholder = this.getConditionPlaceholder(p1);\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n\n          const matched = this.conditions[p1];\n\n          return this.formatExpressionInsideBladeDirective(matched, indent);\n        },\n      ),\n    );\n  }\n\n  restoreUnbalancedDirective(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res: any) =>\n      _.replace(res, /@if \\(unbalanced___(\\d+)___\\)/gms, (_match: any, p1: any) => {\n        const matched = this.unbalancedDirectives[p1];\n        return matched;\n      }),\n    );\n  }\n\n  async restoreInlinePhpDirective(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res) =>\n      replaceAsync(\n        // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message\n        res,\n        new RegExp(`${this.getInlinePhpPlaceholder('(\\\\d+)')}`, 'gm'),\n        async (_match: any, p1: any) => {\n          const matched = this.inlinePhpDirectives[p1];\n          const placeholder = this.getInlinePhpPlaceholder(p1);\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n\n          if (matched.includes('@php')) {\n            return `${(\n              await util.formatRawStringAsPhp(matched, { ...this.options, printWidth: util.printWidthForInline })\n            )\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .trim()\n              // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.\n              .trimRight('\\n')}`;\n          }\n\n          if (new RegExp(inlinePhpDirectives.join('|'), 'gi').test(matched)) {\n            const formatted = replaceAsync(\n              matched,\n              new RegExp(\n                `(?<=@(${_.map(inlinePhpDirectives, (token) => token.substring(1)).join('|')}).*?\\\\()(.*)(?=\\\\))`,\n                'gis',\n              ),\n              async (match2: any, p3: any, p4: any) => {\n                let wrapLength = this.wrapLineLength;\n\n                if (['button', 'class'].includes(p3)) {\n                  wrapLength = 80;\n                }\n\n                if (p3 === 'include') {\n                  wrapLength = this.wrapLineLength - `func`.length - p1.length - indent.amount;\n                }\n\n                return this.formatExpressionInsideBladeDirective(p4, indent, wrapLength);\n              },\n            );\n\n            return formatted;\n          }\n\n          return `${(\n            await util.formatRawStringAsPhp(matched, { ...this.options, printWidth: util.printWidthForInline })\n          ).trimEnd()}`;\n        },\n      ),\n    );\n  }\n\n  async restoreRawPhpTags(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res) =>\n      replaceAsync(\n        // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message\n        res,\n        new RegExp(`${this.getRawPhpTagPlaceholder('(\\\\d+)')}`, 'gms'),\n        async (_match: any, p1: any) => {\n          // const result= this.rawPhpTags[p1];\n          try {\n            const matched = this.rawPhpTags[p1];\n            const commentBlockExists = /(?<=<\\?php\\s*?)\\/\\*.*?\\*\\/(?=\\s*?\\?>)/gim.test(matched);\n            const inlinedComment = commentBlockExists && this.isInline(matched);\n            const placeholder = this.getRawPhpTagPlaceholder(p1);\n            const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n            const indent = detectIndent(matchedLine[0]);\n\n            if (inlinedComment) {\n              return matched;\n            }\n\n            const result = (await util.formatStringAsPhp(this.rawPhpTags[p1], this.options)).trim().trimEnd();\n\n            if (this.isInline(result)) {\n              return result;\n            }\n\n            let preserved = this.preservePhpComment(result);\n\n            if (indent.indent) {\n              preserved = this.indentRawPhpBlock(indent, preserved);\n            }\n\n            const restored = this.restorePhpComment(preserved);\n\n            return restored;\n          } catch (e) {\n            return `${this.rawPhpTags[p1]}`;\n          }\n        },\n      ),\n    );\n  }\n\n  restoreNonnativeScripts(content: string) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getNonnativeScriptPlaceholder('(\\\\d+)')}`, 'gmi'),\n      (_match: any, p1: number) => `${this.nonnativeScripts[p1]}`,\n    );\n  }\n\n  restoreScripts(content: any) {\n    return new Promise((resolve) => resolve(content)).then((res) =>\n      _.replace(\n        // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'unknown' is not assignable to pa... Remove this comment to see the full error message\n        res,\n        new RegExp(`${this.getScriptPlaceholder('(\\\\d+)')}`, 'gim'),\n        (_match: any, p1: number) => {\n          const script = this.scripts[p1];\n\n          const placeholder = this.getScriptPlaceholder(p1);\n          const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n          const indent = detectIndent(matchedLine[0]);\n          const useTabs = util.optional(this.options).useTabs || false;\n\n          const options = {\n            indent_size: util.optional(this.options).indentSize || 4,\n            wrap_line_length: util.optional(this.options).wrapLineLength || 120,\n            wrap_attributes: util.optional(this.options).wrapAttributes || 'auto',\n            wrap_attributes_min_attrs: util.optional(this.options).wrapAttributesMinAttrs,\n            indent_inner_html: util.optional(this.options).indentInnerHtml || false,\n            extra_liners: util.optional(this.options).extraLiners,\n            indent_with_tabs: useTabs,\n            end_with_newline: false,\n            templating: ['php'],\n          };\n\n          if (useTabs) {\n            return this.indentScriptBlock(\n              indent,\n              _.replace(beautify.html_beautify(script, options), /\\t/g, '\\t'.repeat(this.indentSize)),\n            );\n          }\n\n          return this.indentScriptBlock(indent, beautify.html_beautify(script, options));\n        },\n      ),\n    );\n  }\n\n  async restoreCustomDirective(content: string) {\n    return this.restoreInlineCustomDirective(content)\n      .then((data: string) => this.restoreBeginCustomDirective(data))\n      .then((data: string) => this.restoreElseCustomDirective(data))\n      .then((data: string) => this.restoreEndCustomDirective(data));\n  }\n\n  async restoreInlineCustomDirective(content: string) {\n    return replaceAsync(\n      content,\n      new RegExp(`${this.getInlineCustomDirectivePlaceholder('(\\\\d+)')}`, 'gim'),\n      async (_match: any, p1: number) => {\n        const placeholder = this.getInlineCustomDirectivePlaceholder(p1.toString());\n        const matchedLine = content.match(new RegExp(`^(.*?)${_.escapeRegExp(placeholder)}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n\n        const matched = `${this.customDirectives[p1]}`;\n\n        return replaceAsync(matched, /(@[a-zA-z0-9\\-_]+)(.*)/gis, async (match2: string, p2: string, p3: string) => {\n          try {\n            const formatted = (\n              await util.formatRawStringAsPhp(`func${p3}`, {\n                ...this.options,\n                printWidth: util.printWidthForInline,\n              })\n            )\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .replace(/,(\\s*?\\))$/gm, (_m, p4) => p4)\n              .trim()\n              .substring(4);\n            return `${p2}${this.indentComponentAttribute(indent.indent, formatted)}`;\n          } catch (error) {\n            return `${match2}`;\n          }\n        });\n      },\n    );\n  }\n\n  async restoreBeginCustomDirective(content: string) {\n    return replaceAsync(\n      content,\n      new RegExp(`@customdirective\\\\(___(\\\\d+)___\\\\)\\\\s*?(${nestedParenthesisRegex})*`, 'gim'),\n      async (_match: any, p1: number) => {\n        const placeholder = this.getBeginCustomDirectivePlaceholder(p1.toString());\n        const matchedLine = content.match(new RegExp(`^(.*?)${_.escapeRegExp(placeholder)}`, 'gmi')) ?? [''];\n\n        const indent = detectIndent(matchedLine[0]);\n        const matched = `${this.customDirectives[p1]}`;\n\n        return replaceAsync(matched, /(@[a-zA-z0-9\\-_]+)(.*)/gis, async (match2: string, p3: string, p4: string) => {\n          try {\n            const formatted = (\n              await util.formatRawStringAsPhp(`func${p4}`, { ...this.options, trailingCommaPHP: false })\n            )\n              .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n              .trim()\n              .substring(4);\n            return `${p3}${this.indentComponentAttribute(indent.indent, formatted)}`;\n          } catch (error) {\n            return `${match2}`;\n          }\n        });\n      },\n    );\n  }\n\n  async restoreElseCustomDirective(content: string) {\n    return _.replace(content, /@else\\(___(\\d+)___\\)/gim, (_match: any, p1: number) => `${this.customDirectives[p1]}`);\n  }\n\n  async restoreEndCustomDirective(content: string) {\n    return _.replace(\n      content,\n      /@endcustomdirective\\(___(\\d+)___\\)/gim,\n      (_match: any, p1: number) => `${this.customDirectives[p1]}`,\n    );\n  }\n\n  async restoreHtmlTags(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getHtmlTagPlaceholder('(\\\\d+)')}`, 'gim'),\n      (_match: any, p1: number) => {\n        const placeholder = this.getHtmlTagPlaceholder(p1.toString());\n        const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n\n        const options = {\n          indent_size: util.optional(this.options).indentSize || 4,\n          wrap_line_length: util.optional(this.options).wrapLineLength || 120,\n          wrap_attributes: util.optional(this.options).wrapAttributes || 'auto',\n          wrap_attributes_min_attrs: util.optional(this.options).wrapAttributesMinAttrs,\n          indent_inner_html: util.optional(this.options).indentInnerHtml || false,\n          extra_liners: util.optional(this.options).extraLiners,\n          end_with_newline: false,\n          templating: ['php'],\n        };\n\n        const matched = this.htmlTags[p1];\n        const openingTag = _.first(matched.match(/(<(textarea|pre).*?(?<!=)>)(?=.*?<\\/\\2>)/gis));\n\n        if (openingTag === undefined) {\n          return `${this.indentScriptBlock(indent, beautify.html_beautify(matched, options))}`;\n        }\n\n        const restofTag = matched.substring(openingTag.length, matched.length);\n\n        return `${this.indentScriptBlock(indent, beautify.html_beautify(openingTag, options))}${restofTag}`;\n      },\n    );\n  }\n\n  restoreHtmlAttributes(content: string) {\n    return _.replace(\n      content,\n      // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.\n      new RegExp(`${this.getHtmlAttributePlaceholder('(\\\\d+)')}`, 'gms'),\n      (_match: string, p1: number) => this.htmlAttributes[p1],\n    );\n  }\n\n  restoreXData(content: any) {\n    return _.replace(content, new RegExp(`${this.getXDataPlaceholder('(\\\\d+)')}`, 'gm'), (_match: any, p1: any) => {\n      const placeholder = this.getXDataPlaceholder(p1.toString());\n      const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n      const indent = detectIndent(matchedLine[0]);\n\n      const lines = this.formatJS(this.xData[p1]).split('\\n');\n\n      const indentLevel = indent.amount / (this.indentCharacter === '\\t' ? 4 : 1);\n\n      const firstLine = lines[0];\n      const prefix = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel);\n      const offsettedLines = lines.map((line) => prefix + line);\n      offsettedLines[0] = firstLine;\n      return `${offsettedLines.join('\\n')}`;\n    });\n  }\n\n  restoreXInit(content: any) {\n    return _.replace(content, new RegExp(`${this.getXInitPlaceholder('(\\\\d+)')}`, 'gm'), (_match: any, p1: number) => {\n      const placeholder = this.getXInitPlaceholder(p1.toString());\n      const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n      const indent = detectIndent(matchedLine[0]);\n\n      const lines = this.formatJS(this.xInit[p1]).split('\\n');\n\n      const indentLevel = indent.amount / (this.indentCharacter === '\\t' ? 4 : 1);\n\n      const firstLine = lines[0];\n      const prefix = this.indentCharacter.repeat(indentLevel < 0 ? 0 : indentLevel);\n      const offsettedLines = lines.map((line) => prefix + line);\n      offsettedLines[0] = firstLine;\n      return `${offsettedLines.join('\\n')}`;\n    });\n  }\n\n  restoreTemplatingString(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getTemplatingStringPlaceholder('(\\\\d+)')}`, 'gms'),\n      (_match: any, p1: any) => this.templatingStrings[p1],\n    );\n  }\n\n  restoreStringLiteralInPhp(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getStringLiteralInPhpPlaceholder('(\\\\d+)')}`, 'gms'),\n      (_match: any, p1: any) => this.stringLiteralInPhp[p1],\n    );\n  }\n\n  async restoreComponentAttribute(content: string) {\n    return replaceAsync(\n      content,\n      new RegExp(`${this.getComponentAttributePlaceholder('(\\\\d+)')}`, 'gim'),\n      async (_match: any, p1: any) => {\n        const placeholder = this.getComponentAttributePlaceholder(p1);\n        const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n\n        const matched = this.componentAttributes[p1];\n        const formatted = await replaceAsync(\n          matched,\n          /(:{1,2}.*?=)([\"'])(.*?)(?=\\2)/gis,\n          async (match, p2: string, p3: string, p4: string) => {\n            if (p4 === '') {\n              return match;\n            }\n\n            if (matchedLine[0].startsWith('<livewire')) {\n              return `${p2}${p3}${p4}`;\n            }\n\n            if (p2.startsWith('::')) {\n              return `${p2}${p3}${beautify\n                .js_beautify(p4, {\n                  wrap_line_length: this.wrapLineLength - indent.amount,\n                  brace_style: 'preserve-inline',\n                })\n                .trim()}`;\n            }\n\n            if (this.isInline(p4)) {\n              try {\n                return `${p2}${p3}${(\n                  await util.formatRawStringAsPhp(p4, {\n                    ...this.options,\n                    printWidth: this.wrapLineLength - indent.amount,\n                  })\n                ).trimEnd()}`;\n              } catch (error) {\n                return `${p2}${p3}${p4}`;\n              }\n            }\n\n            return `${p2}${p3}${(\n              await util.formatRawStringAsPhp(p4, {\n                ...this.options,\n                printWidth: this.wrapLineLength - indent.amount,\n              })\n            ).trimEnd()}`;\n          },\n        );\n\n        return `${this.indentComponentAttribute(indent.indent, formatted)}`;\n      },\n    );\n  }\n\n  restoreShorthandBinding(content: any) {\n    return _.replace(\n      content,\n      new RegExp(`${this.getShorthandBindingPlaceholder('(\\\\d+)')}`, 'gms'),\n      (_match: any, p1: any) => {\n        const placeholder = this.getShorthandBindingPlaceholder(p1);\n        const matchedLine = content.match(new RegExp(`^(.*?)${placeholder}`, 'gmi')) ?? [''];\n        const indent = detectIndent(matchedLine[0]);\n\n        const matched = this.shorthandBindings[p1];\n\n        const formatted = _.replace(\n          matched,\n          /(:{1,2}.*?=)([\"'])(.*?)(?=\\2)/gis,\n          (match, p2: string, p3: string, p4: string) => {\n            const beautifyOpts: JSBeautifyOptions = {\n              wrap_line_length: this.wrapLineLength - indent.amount,\n              brace_style: 'preserve-inline',\n            };\n\n            if (p4 === '') {\n              return match;\n            }\n\n            if (this.isInline(p4)) {\n              try {\n                return `${p2}${p3}${beautify.js_beautify(p4.trim(), beautifyOpts).trim()}`;\n              } catch (error) {\n                return `${p2}${p3}${p4.trim()}`;\n              }\n            }\n\n            return `${p2}${p3}${beautify.js_beautify(p4.trim(), beautifyOpts).trim()}`;\n          },\n        );\n\n        return `${this.indentComponentAttribute(indent.indent, formatted)}`;\n      },\n    );\n  }\n\n  async formatAsBlade(content: any) {\n    // init parameters\n    this.currentIndentLevel = 0;\n    this.shouldBeIndent = false;\n\n    const splittedLines = util.splitByLines(content);\n\n    const vsctmModule = await new vsctm.VscodeTextmate(this.vsctm, this.oniguruma);\n    const registry = vsctmModule.createRegistry();\n\n    const formatted = registry\n      .loadGrammar('text.html.php.blade')\n      .then((grammar: any) => vsctmModule.tokenizeLines(splittedLines, grammar))\n      .then((tokenizedLines: any) => this.formatTokenizedLines(splittedLines, tokenizedLines))\n      .catch((err: any) => {\n        throw err;\n      });\n\n    return formatted;\n  }\n\n  async formatTokenizedLines(splittedLines: any, tokenizedLines: any) {\n    this.result = [];\n    this.stack = [];\n    for (let i = 0; i < splittedLines.length; i += 1) {\n      const originalLine = splittedLines[i];\n      const tokenizeLineResult = tokenizedLines[i];\n      // eslint-disable-next-line no-await-in-loop\n      await this.processLine(tokenizeLineResult, originalLine);\n    }\n\n    return this.result.join(this.endOfLine);\n  }\n\n  async processLine(tokenizeLineResult: any, originalLine: any) {\n    await this.processTokenizeResult(tokenizeLineResult, originalLine);\n  }\n\n  async processKeyword(token: string) {\n    if (_.includes(phpKeywordStartTokens, token)) {\n      if (_.last(this.stack) === '@case' && token === '@case') {\n        this.decrementIndentLevel();\n      }\n\n      if (token === '@case') {\n        this.shouldBeIndent = true;\n      }\n\n      this.stack.push(token);\n      return;\n    }\n\n    if (_.includes(phpKeywordEndTokens, token)) {\n      if (token === '@break') {\n        this.decrementIndentLevel();\n        this.stack.pop();\n        this.stack.push(token);\n        return;\n      }\n\n      if (_.last(this.stack) !== '@hassection') {\n        this.stack.pop();\n        return;\n      }\n    }\n\n    if (_.includes(indentStartAndEndTokens, token)) {\n      this.shouldBeIndent = true;\n      this.stack.push(token);\n    }\n\n    if (_.includes(indentStartOrElseTokens, token)) {\n      if (_.includes(tokenForIndentStartOrElseTokens, _.last(this.stack))) {\n        this.decrementIndentLevel();\n        this.shouldBeIndent = true;\n      }\n    }\n\n    if (_.includes(indentStartTokens, token)) {\n      if (_.last(this.stack) === '@section' && token === '@section') {\n        if (this.currentIndentLevel > 0) this.decrementIndentLevel();\n        this.shouldBeIndent = true;\n        this.stack.push(token);\n      } else {\n        this.shouldBeIndent = true;\n        this.stack.push(token);\n      }\n    }\n\n    if (_.includes(indentEndTokens, token)) {\n      if (token === '@endswitch' && _.last(this.stack) === '@default') {\n        this.decrementIndentLevel(2);\n        this.shouldBeIndent = false;\n        return;\n      }\n\n      this.decrementIndentLevel();\n      this.shouldBeIndent = false;\n      this.stack.pop();\n    }\n\n    if (_.includes(indentElseTokens, token)) {\n      this.decrementIndentLevel();\n      this.shouldBeIndent = true;\n    }\n  }\n\n  async processToken(tokenStruct: any, token: string) {\n    if (_.includes(tokenStruct.scopes, 'punctuation.definition.comment.begin.blade')) {\n      this.isInsideCommentBlock = true;\n    }\n\n    if (this.argumentCheck) {\n      const { count, inString, stack, unindentOn } = this.argumentCheck;\n      if (!inString && token === ')') {\n        stack.push(token);\n        count[token] += 1;\n        if (count['('] === count[token]) {\n          // finished\n          const expression = stack.join('');\n          const argumentCount = await util.getArgumentsCount(expression);\n\n          if (argumentCount >= unindentOn) {\n            this.shouldBeIndent = false;\n          }\n\n          this.argumentCheck = false;\n        }\n        return;\n      }\n\n      stack.push(token);\n\n      if (inString === token) {\n        this.argumentCheck.inString = false;\n      } else if (!inString && (token === '\"' || token === \"'\")) {\n        this.argumentCheck.inString = token;\n      }\n\n      if (token === '(' && !inString) {\n        count[token] += 1;\n      }\n    }\n\n    if (_.includes(tokenStruct.scopes, 'punctuation.definition.comment.end.blade')) {\n      this.isInsideCommentBlock = false;\n    }\n    if (token === '{{--' || token.includes('{{--')) {\n      this.isInsideCommentBlock = true;\n    }\n\n    if (token === '--}}' || token.includes('--}}')) {\n      this.isInsideCommentBlock = false;\n    }\n\n    if (!_.includes(tokenStruct.scopes, 'keyword.blade')) {\n      return;\n    }\n\n    if (this.isInsideCommentBlock) {\n      return;\n    }\n\n    await this.processKeyword(token.toLowerCase());\n\n    if (_.includes(Object.keys(optionalStartWithoutEndTokens), token.toLowerCase())) {\n      this.argumentCheck = {\n        // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message\n        unindentOn: optionalStartWithoutEndTokens[token.toLowerCase()],\n        stack: [],\n        inString: false,\n        count: { '(': 0, ')': 0 },\n      };\n    }\n  }\n\n  async processTokenizeResult(tokenizeLineResult: any, originalLine: any) {\n    if (this.shouldBeIndent) {\n      this.incrementIndentLevel();\n      this.shouldBeIndent = false;\n    }\n\n    if (hasStartAndEndToken(tokenizeLineResult, originalLine)) {\n      this.insertFormattedLineToResult(originalLine);\n      return;\n    }\n\n    for (let j = 0; j < tokenizeLineResult.tokens.length; j += 1) {\n      const tokenStruct = tokenizeLineResult.tokens[j];\n\n      const token = originalLine.substring(tokenStruct.startIndex, tokenStruct.endIndex).trim();\n\n      // eslint-disable-next-line no-await-in-loop\n      await this.processToken(tokenStruct, token);\n    }\n\n    this.insertFormattedLineToResult(originalLine);\n  }\n\n  insertFormattedLineToResult(originalLine: any) {\n    const originalLineWhitespaces = detectIndent(originalLine).amount;\n    const whitespaces = originalLineWhitespaces + this.indentSize * this.currentIndentLevel;\n    const formattedLine = this.indentCharacter.repeat(whitespaces < 0 ? 0 : whitespaces) + originalLine.trim();\n\n    // blankline\n    if (originalLine.length === 0) {\n      this.result.push(originalLine);\n    }\n\n    // formatted line\n    if (originalLine.length !== 0 && formattedLine.length > 0) {\n      this.result.push(formattedLine);\n    }\n\n    if (formattedLine !== originalLine) {\n      this.diffs.push({\n        original: originalLine,\n        formatted: formattedLine,\n      });\n    }\n  }\n\n  incrementIndentLevel(level = 1) {\n    this.currentIndentLevel += level;\n  }\n\n  decrementIndentLevel(level = 1) {\n    this.currentIndentLevel -= level;\n  }\n\n  async formatExpressionInsideBladeDirective(\n    matchedExpression: string,\n    indent: detectIndent.Indent,\n    wrapLength: number | undefined = undefined,\n  ) {\n    const formatTarget = `func(${matchedExpression})`;\n    const formattedExpression = await util.formatRawStringAsPhp(formatTarget, {\n      ...this.options,\n      printWidth: wrapLength ?? this.defaultPhpFormatOption.printWidth,\n    });\n\n    if (formattedExpression === formatTarget) {\n      return matchedExpression;\n    }\n\n    let inside = formattedExpression\n      .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n      .replace(/(?<!(['\"]).*)(?<=\\()[\\n\\s]+?(?=\\w)/gm, '')\n      .replace(/([^]*)],[\\n\\s]*?\\)$/gm, (match: string, p1: string) => `${p1}]\\n)`)\n      .replace(/,[\\n\\s]*?\\)/gs, ')')\n      .replace(/,(\\s*?\\))$/gm, (match, p1) => p1)\n      .trim();\n\n    if (this.options.useTabs || false) {\n      inside = _.replace(inside, /(?<=^ *) {4}/gm, '\\t'.repeat(this.indentSize));\n    }\n\n    inside = inside.replace(/func\\((.*)\\)/gis, (match: string, p1: string) => p1);\n    if (this.isInline(inside.trim())) {\n      inside = inside.trim();\n    }\n\n    return this.indentRawPhpBlock(indent, inside);\n  }\n\n  formatJS(jsCode: string): string {\n    let code: string = jsCode;\n    const tempVarStore: any = {\n      js: [],\n      entangle: [],\n    };\n    Object.keys(tempVarStore).forEach((directive) => {\n      code = code.replace(\n        new RegExp(`@${directive}\\\\((?:[^)(]+|\\\\((?:[^)(]+|\\\\([^)(]*\\\\))*\\\\))*\\\\)`, 'gs'),\n        (m: any) => {\n          const index = tempVarStore[directive].push(m) - 1;\n          return this.getPlaceholder(directive, index, m.length);\n        },\n      );\n    });\n    code = beautify.js_beautify(code, { brace_style: 'preserve-inline' });\n\n    Object.keys(tempVarStore).forEach((directive) => {\n      code = code.replace(\n        new RegExp(this.getPlaceholder(directive, '_*(\\\\d+)'), 'gms'),\n        (_match: any, p1: any) => tempVarStore[directive][p1],\n      );\n    });\n\n    return code;\n  }\n}\n", "function splitByLines(content: string): Array<string> {\n  return content.split('\\n');\n}\n\nfunction isCommentedLine(line: string): boolean {\n  return line.trim().startsWith('*');\n}\n\nfunction isMultiline(lines: Array<string>): boolean {\n  return lines.length > 1;\n}\n\nfunction addPrefixToLine(line: string): string {\n  const prefix = ' ';\n\n  return `${prefix}${line}`;\n}\n\n/**\n * Formats php comment\n *\n * @param comment\n * @returns string\n */\nexport function formatPhpComment(comment: string): string {\n  const lines = splitByLines(comment);\n\n  if (!isMultiline(lines)) {\n    return comment;\n  }\n\n  let nonCommentLineExists = false;\n\n  const mapped = lines.map((line: string, row: number) => {\n    if (row === 0) {\n      return line;\n    }\n\n    if (nonCommentLineExists) {\n      return line;\n    }\n\n    if (!isCommentedLine(line)) {\n      nonCommentLineExists = true;\n      return line;\n    }\n\n    const trimmedLine = line.trim();\n\n    return addPrefixToLine(trimmedLine);\n  });\n\n  return mapped.join('\\n');\n}\n\nexport default {\n  formatPhpComment,\n};\n", "const constants = {\n  defaultPrintWidth: 120,\n};\n\nexport default constants;\n", "import _ from 'lodash';\n\nexport const directivePrefix = '@';\n\nexport const indentStartTokens = [\n  '@alert',\n  '@pushonce',\n  '@push',\n  '@slot',\n  '@switch',\n  '@unless',\n  '@verbatim',\n  '@prependonce',\n  '@prepend',\n  '@once',\n  '@error',\n  '@empty',\n  '@guest',\n  '@isset',\n  '@permission',\n  '@permissions',\n  '@canany',\n  '@cannot',\n  '@can',\n  '@role',\n  '@hasrole',\n  '@hasanyrole',\n  '@hasallroles',\n  '@unlessrole',\n  '@hasexactroles',\n  '@if',\n  '@production',\n  '@env',\n  '@while',\n  '@auth',\n  '@forelse',\n  '@for',\n  '@foreach',\n  '@php',\n  '@component',\n  '@section',\n  '@customdirective',\n];\n\nexport const indentStartTokensWithoutPrefix = _.map(indentStartTokens, (token) => token.substring(1));\n\nexport const indentEndTokens = [\n  '@endalert',\n  '@endpushonce',\n  '@endpush',\n  '@endslot',\n  '@endswitch',\n  '@endunless',\n  '@endverbatim',\n  '@show',\n  '@stop',\n  '@endprependonce',\n  '@endprepend',\n  '@endonce',\n  '@enderror',\n  '@append',\n  '@overwrite',\n  '@endempty',\n  '@endguest',\n  '@endisset',\n  '@endpermission',\n  '@endpermissions',\n  '@endcanany',\n  '@endcannot',\n  '@endcan',\n  '@endrole',\n  '@endhasrole',\n  '@endhasanyrole',\n  '@endhasallroles',\n  '@endunlessrole',\n  '@endhasexactroles',\n  '@endif',\n  '@endproduction',\n  '@endenv',\n  '@endwhile',\n  '@endauth',\n  '@endforelse',\n  '@endforeach',\n  '@endfor',\n  '@endphp',\n  '@endcomponent',\n  '@endsection',\n  '@endcustomdirective',\n];\n\nexport const indentElseTokens = [\n  '@elseenv',\n  '@elseif',\n  '@elsecanany',\n  '@elsecannot',\n  '@elsecan',\n  '@else',\n  '@elsecustomdirective',\n];\n\n// Directives which do not need an end token if a parameter is present\nexport const optionalStartWithoutEndTokens = {\n  '@section': 2,\n  '@push': 2,\n  '@prepend': 2,\n  '@slot': 2,\n};\n\nexport const tokenForIndentStartOrElseTokens = ['@forelse', '@if'];\n\nexport const indentStartOrElseTokens = ['@empty'];\n\nexport const indentStartAndEndTokens = ['@default'];\n\nexport const phpKeywordStartTokens = ['@forelse', '@if', '@for', '@foreach', '@while', '@sectionmissing', '@case'];\n\nexport const phpKeywordEndTokens = ['@endforelse', '@endif', '@endforeach', '@endfor', '@endwhile', '@break'];\n\nexport const inlinePhpDirectives = ['@button', '@class', '@include', '@disabled', '@checked', '@json'];\n\nexport const inlineFunctionTokens = [\n  '@set',\n  '@json',\n  '@selected',\n  '@checked',\n  '@disabled',\n  '@php',\n  '@include',\n  '@includeif',\n  '@includewhen',\n  '@includeunless',\n  '@includefirst',\n  '@button',\n  '@class',\n  '@props',\n  '@aware',\n];\n\nexport const conditionalTokens = [\n  '@if',\n  '@while',\n  '@case',\n  '@isset',\n  '@empty',\n  '@elseif',\n  '@component',\n  '@hassection',\n  '@unless',\n];\n\nexport const unbalancedStartTokens = ['@hassection'];\n\nexport const cssAtRuleTokens = [\n  '@charset',\n  '@color-profile',\n  '@counter-style',\n  '@font-face',\n  '@font-feature-values',\n  '@import',\n  '@keyframes',\n  '@media',\n  '@namespace',\n  '@page',\n  '@property',\n  '@supports',\n];\n\nexport function hasStartAndEndToken(tokenizeLineResult: any, originalLine: any) {\n  return (\n    _.filter(tokenizeLineResult.tokens, (tokenStruct: any) => {\n      const token = originalLine.substring(tokenStruct.startIndex, tokenStruct.endIndex).trim();\n\n      return _.includes(indentStartTokens, token) || _.includes(indentEndTokens, token);\n    }).length >= 2\n  );\n}\n", "// eslint-disable-next-line import/prefer-default-export\nexport const nestedParenthesisRegex = `\\\\(((?:[^)(]+|\\\\((?:[^)(]+|\\\\((?:[^)(]+|\\\\((?:[^)(]+|\\\\([^)(]*\\\\))*\\\\))*\\\\))*\\\\))*)\\\\)?`;\n", "import _ from 'lodash';\nimport { nestedParenthesisRegex } from './regex';\n\n/**\n * Adjust spaces in blade directives\n * @param content\n * @returns\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function adjustSpaces(content: string): string {\n  const directivesRequiredSpace = ['@unless'];\n\n  return _.replace(\n    content,\n    new RegExp(`(?<!@)(${directivesRequiredSpace.join('|')})\\\\s*${nestedParenthesisRegex}`, 'gi'),\n    (_matched: string, p1: string, p2: string) => `${p1} (${p2})`,\n  );\n}\n", "/* eslint-disable max-len */\nimport _ from 'lodash';\nimport fs from 'fs';\nimport os from 'os';\nimport chalk from 'chalk';\nimport * as prettier from 'prettier/standalone';\n// @ts-ignore\n// eslint-disable-next-line\nimport phpPlugin from '@prettier/plugin-php/standalone';\nimport detectIndent from 'detect-indent';\nimport replaceAsync from 'string-replace-async';\nimport { indentStartTokens, phpKeywordEndTokens, phpKeywordStartTokens } from './indent';\nimport { nestedParenthesisRegex } from './regex';\nimport { EndOfLine } from './runtimeConfig';\n\nexport const optional = (obj: any) => {\n  const chain = {\n    get() {\n      return null;\n    },\n  };\n\n  if (_.isUndefined(obj) || _.isNull(obj)) {\n    return chain;\n  }\n\n  return obj;\n};\n\nexport async function readFile(path: any) {\n  return new Promise((resolve, reject) => {\n    fs.readFile(path, (error: any, data: any) => (error ? reject(error) : resolve(data)));\n  });\n}\n\nexport function splitByLines(content: any) {\n  if (!content) {\n    return '';\n  }\n\n  return content.split(/\\r\\n|\\n|\\r/);\n}\n\nexport type FormatPhpOption = {\n  noPhpSyntaxCheck?: boolean;\n  printWidth?: number;\n  trailingCommaPHP?: boolean;\n  phpVersion?: string;\n  noSingleQuote?: boolean;\n};\n\nexport const printWidthForInline = 1000;\n\nconst defaultFormatPhpOption = {\n  noPhpSyntaxCheck: false,\n  printWidth: printWidthForInline,\n  trailingCommaPHP: true,\n  phpVersion: '8.1',\n  noSingleQuote: false,\n};\n\nexport async function formatStringAsPhp(content: any, params: FormatPhpOption = {}): Promise<string> {\n  const options = {\n    ...defaultFormatPhpOption,\n    ...params,\n  };\n\n  const adjust = params.adjustPrintWidthBy ?? 0;\n  const printWidth = params.useProjectPrintWidth ? options.printWidth - adjust : printWidthForInline;\n  try {\n    return await prettier.format(content.replace(/\\n$/, ''), {\n      parser: 'php',\n      printWidth,\n      singleQuote: !options.noSingleQuote,\n      // @ts-ignore\n      phpVersion: options.phpVersion,\n      trailingCommaPHP: options.trailingCommaPHP,\n      plugins: [phpPlugin],\n    });\n  } catch (error) {\n    if (options.noPhpSyntaxCheck === false) {\n      throw error;\n    }\n    return content;\n  }\n}\n\nexport async function formatRawStringAsPhp(content: string, params: FormatPhpOption = {}) {\n  const options = {\n    ...defaultFormatPhpOption,\n    ...params,\n  };\n\n  try {\n    return (\n      await prettier.format(`<?php echo ${content} ?>`, {\n        parser: 'php',\n        printWidth: options.printWidth,\n        singleQuote: !options.noSingleQuote,\n        // @ts-ignore\n        phpVersion: options.phpVersion,\n        trailingCommaPHP: options.trailingCommaPHP,\n        plugins: [phpPlugin],\n      })\n    ).replace(/<\\?php echo (.*)?\\?>/gs, (match: any, p1: any) => p1.trim().replace(/;\\s*$/, ''));\n  } catch (error) {\n    if (options.noPhpSyntaxCheck === false) {\n      throw error;\n    }\n\n    return content;\n  }\n}\n\nexport async function getArgumentsCount(expression: string) {\n  const code = `<?php tmp_func${expression}; ?>`;\n\n  try {\n    // @ts-ignore\n    // eslint-disable-next-line no-underscore-dangle\n    const { ast } = await prettier.__debug.parse(code, {\n      parser: 'php',\n      phpVersion: '8.1',\n      plugins: [phpPlugin],\n    });\n\n    return ast.children[0].expression.arguments.length || 0;\n  } catch (e) {\n    return 0;\n  }\n}\n\nexport function normalizeIndentLevel(length: any) {\n  if (length < 0) {\n    return 0;\n  }\n\n  return length;\n}\n\nexport function printDiffs(diffs: any) {\n  return Promise.all(\n    _.map(diffs, async (diff: any) => {\n      process.stdout.write(`path: ${chalk.bold(diff.path)}:${diff.line}\\n`);\n      process.stdout.write(chalk.red(`--${diff.original}\\n`));\n      process.stdout.write(chalk.green(`++${diff.formatted}\\n`));\n    }),\n  );\n}\n\nexport function generateDiff(path: any, originalLines: any, formattedLines: any) {\n  const diff = _.map(originalLines, (originalLine: any, index: any) => {\n    if (_.isEmpty(originalLine)) {\n      return null;\n    }\n\n    if (originalLine === formattedLines[index]) {\n      return null;\n    }\n\n    return {\n      path,\n      line: index + 1,\n      original: originalLine,\n      formatted: formattedLines[index],\n    };\n  });\n\n  return _.without(diff, null);\n}\n\nexport async function prettifyPhpContentWithUnescapedTags(content: string, options: FormatPhpOption) {\n  const directives = _.without(indentStartTokens, '@switch', '@forelse', '@php').join('|');\n\n  const directiveRegexes = new RegExp(\n    // eslint-disable-next-line max-len\n    `(?!\\\\/\\\\*.*?\\\\*\\\\/)(${directives})(\\\\s*?)${nestedParenthesisRegex}`,\n    'gmi',\n  );\n\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) =>\n      replaceAsync(res, directiveRegexes, async (match: any, p1: any, p2: any, p3: any) =>\n        (await formatStringAsPhp(`<?php ${p1.substr('1')}${p2}(${p3}) ?>`, options))\n          .replace(\n            /<\\?php\\s(.*?)(\\s*?)\\((.*?)\\);*\\s\\?>\\n/gs,\n            (match2: any, j1: any, j2: any, j3: any) => `@${j1.trim()}${j2}(${j3.trim()})`,\n          )\n          .replace(/([\\n\\s]*)->([\\n\\s]*)/gs, '->')\n          .replace(/,\\)$/, ')')\n          .replace(/(?:\\n\\s*)* as(?= (?:&{0,1}\\$[\\w]+|list|\\[\\$[\\w]+))/g, ' as'),\n      ),\n    )\n    .then((res) => formatStringAsPhp(res, options));\n}\n\nexport async function prettifyPhpContentWithEscapedTags(content: string, options: FormatPhpOption) {\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) => _.replace(res, /{!!/g, '<?php /*escaped*/'))\n    .then((res) => _.replace(res, /!!}/g, '/*escaped*/ ?>\\n'))\n    .then((res) => formatStringAsPhp(res, options))\n    .then((res) => _.replace(res, /<\\?php\\s\\/\\*escaped\\*\\//g, '{!! '))\n    .then((res) => _.replace(res, /\\/\\*escaped\\*\\/\\s\\?>\\n/g, ' !!}'));\n}\n\nexport async function removeSemicolon(content: any) {\n  return new Promise((resolve) => {\n    resolve(content);\n  })\n    .then((res: any) => _.replace(res, /;[\\n\\s]*!!\\}/g, ' !!}'))\n    .then((res) => _.replace(res, /;[\\s\\n]*!!}/g, ' !!}'))\n    .then((res) => _.replace(res, /;[\\n\\s]*}}/g, ' }}'))\n    .then((res) => _.replace(res, /; }}/g, ' }}'))\n    .then((res) => _.replace(res, /; --}}/g, ' --}}'));\n}\n\nexport async function formatAsPhp(content: string, options: FormatPhpOption) {\n  return prettifyPhpContentWithUnescapedTags(content, options);\n}\n\nexport async function preserveOriginalPhpTagInHtml(content: any) {\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) => _.replace(res, /<\\?php/g, '/** phptag_start **/'))\n    .then((res) => _.replace(res, /\\?>/g, '/** end_phptag **/'));\n}\n\nexport function revertOriginalPhpTagInHtml(content: any) {\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) => _.replace(res, /\\/\\*\\*[\\s\\n]*?phptag_start[\\s\\n]*?\\*\\*\\//gs, '<?php'))\n    .then((res) => _.replace(res, /\\/\\*\\*[\\s\\n]*?end_phptag[\\s\\n]*?\\*\\*\\/[\\s];\\n/g, '?>;'))\n    .then((res) => _.replace(res, /\\/\\*\\*[\\s\\n]*?end_phptag[\\s\\n]*?\\*\\*\\//g, '?>'));\n}\n\nexport function indent(content: any, level: any, options: any) {\n  const lines = content.split('\\n');\n  return _.map(lines, (line: any, index: any) => {\n    if (!line.match(/\\w/)) {\n      return line;\n    }\n\n    const ignoreFirstLine = optional(options).ignoreFirstLine || false;\n\n    if (ignoreFirstLine && index === 0) {\n      return line;\n    }\n\n    const originalLineWhitespaces = detectIndent(line).amount;\n    const indentChar = optional(options).useTabs ? '\\t' : ' ';\n    const indentSize = optional(options).indentSize || 4;\n    const whitespaces = originalLineWhitespaces + indentSize * level;\n\n    if (whitespaces < 0) {\n      return line;\n    }\n\n    return indentChar.repeat(whitespaces) + line.trimLeft();\n  }).join('\\n');\n}\n\nexport function unindent(directive: any, content: any, level: any, options: any) {\n  const lines = content.split('\\n');\n  return _.map(lines, (line: any) => {\n    if (!line.match(/\\w/)) {\n      return line;\n    }\n\n    const originalLineWhitespaces = detectIndent(line).amount;\n    const indentChar = optional(options).useTabs ? '\\t' : ' ';\n    const indentSize = optional(options).indentSize || 4;\n    const whitespaces = originalLineWhitespaces - indentSize * level;\n\n    if (whitespaces < 0) {\n      return line;\n    }\n\n    return indentChar.repeat(whitespaces) + line.trimLeft();\n  }).join('\\n');\n}\n\nexport function preserveDirectives(content: any) {\n  const startTokens = _.without(phpKeywordStartTokens, '@case');\n  const endTokens = _.without(phpKeywordEndTokens, '@break');\n\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) => {\n      const regex = new RegExp(`(${startTokens.join('|')})([\\\\s]*?)${nestedParenthesisRegex}`, 'gis');\n      return _.replace(\n        res,\n        regex,\n        (match: any, p1: any, p2: any, p3: any) => `<beautifyTag start=\"${p1}${p2}\" exp=\"^^^${_.escape(p3)}^^^\">`,\n      );\n    })\n    .then((res: any) => {\n      const regex = new RegExp(`(?!end=\".*)(${endTokens.join('|')})(?!.*\")`, 'gi');\n      return _.replace(res, regex, (match: any, p1: any) => `</beautifyTag end=\"${p1}\">`);\n    });\n}\n\nexport function preserveDirectivesInTag(content: any) {\n  return new Promise((resolve) => {\n    const regex = new RegExp(\n      `(<[^>]*?)(${phpKeywordStartTokens.join('|')})([\\\\s]*?)${nestedParenthesisRegex}(.*?)(${phpKeywordEndTokens.join(\n        '|',\n      )})([^>]*?>)`,\n      'gis',\n    );\n    resolve(\n      _.replace(\n        content,\n        regex,\n        (match: any, p1: any, p2: any, p3: any, p4: any, p5: any, p6: any, p7: any) =>\n          `${p1}|-- start=\"${p2}${p3}\" exp=\"^^^${p4}^^^\" body=\"^^^${_.escape(_.trim(p5))}^^^\" end=\"${p6}\" --|${p7}`,\n      ),\n    );\n  });\n}\n\nexport function revertDirectives(content: any) {\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) =>\n      _.replace(\n        res,\n        /<beautifyTag.*?start=\"(.*?)\".*?exp=\".*?\\^\\^\\^(.*?)\\^\\^\\^.*?\"\\s*>/gs,\n        (match: any, p1: any, p2: any) => `${p1}(${_.unescape(p2)})`,\n      ),\n    )\n    .then((res) => _.replace(res, /<\\/beautifyTag.*?end=\"(.*?)\"\\s*>/gs, (match: any, p1: any) => `${p1}`));\n}\n\nexport function revertDirectivesInTag(content: any) {\n  return new Promise((resolve) => resolve(content))\n    .then((res: any) =>\n      _.replace(\n        res,\n        /\\|--.*?start=\"(.*?)\".*?exp=\".*?\\^\\^\\^(.*?)\\^\\^\\^.*?\"(.*?)body=\".*?\\^\\^\\^(.*?)\\^\\^\\^.*?\".*?end=\"(.*?)\".*?--\\|/gs,\n        (match: any, p1: any, p2: any, p3: any, p4: any, p5: any) =>\n          `${_.trimStart(p1)}(${p2}) ${_.unescape(p4)} ${p5}`,\n      ),\n    )\n    .then((res) => _.replace(res, /\\/-- end=\"(.*?)\"--\\//gs, (match: any, p1: any) => `${p1}`));\n}\nexport function printDescription() {\n  const returnLine = '\\n\\n';\n  process.stdout.write(returnLine);\n  process.stdout.write(chalk.bold.green('Fixed: F\\n'));\n  process.stdout.write(chalk.bold.red('Errors: E\\n'));\n  process.stdout.write(chalk.bold('Not Changed: ') + chalk.bold.green('.\\n'));\n}\n\nconst escapeTags = [\n  '/\\\\*\\\\* phptag_start \\\\*\\\\*/',\n  '/\\\\*\\\\* end_phptag \\\\*\\\\*/',\n  '/\\\\*escaped\\\\*/',\n  '__BLADE__;',\n  '/\\\\* blade_comment_start \\\\*/',\n  '/\\\\* blade_comment_end \\\\*/',\n  '/\\\\*\\\\*\\\\*script_placeholder\\\\*\\\\*\\\\*/',\n  'blade___non_native_scripts_',\n  'blade___scripts_',\n  'blade___html_tags_',\n  'beautifyTag',\n  '@customdirective',\n  '@elsecustomdirective',\n  '@endcustomdirective',\n  'x-slot --___\\\\d+___--',\n  '___attrs_+\\\\d+___',\n];\n\nexport function checkResult(formatted: any) {\n  if (new RegExp(escapeTags.join('|')).test(formatted)) {\n    throw new Error(\n      [\n        \"Can't format blade: something goes wrong.\",\n        // eslint-disable-next-line max-len\n        'Please check if template is too complicated or not. Or simplify template might solves issue.',\n      ].join('\\n'),\n    );\n  }\n\n  return formatted;\n}\n\nexport function escapeReplacementString(string: string) {\n  return string.replace(/\\$/g, '$$$$');\n}\n\nexport function debugLog(...content: any) {\n  _.each(content, (item) => {\n    console.log('------------------- content start -------------------');\n    console.log(item);\n    console.log('------------------- content end   -------------------');\n  });\n\n  return content;\n}\n\nexport function getEndOfLine(endOfLine?: EndOfLine): string {\n  switch (endOfLine) {\n    case 'LF':\n      return '\\n';\n    case 'CRLF':\n      return '\\r\\n';\n    default:\n      return os.EOL;\n  }\n}\n", "import { promises as fs } from 'fs';\nimport _ from 'lodash';\nimport * as vscodeOniguruma from 'vscode-oniguruma';\nimport path from 'path';\nimport { readFile } from './util';\n\nexport class VscodeTextmate {\n  oniguruma: any;\n\n  registry: any;\n\n  vsctm: any;\n\n  initCalled: any;\n\n  constructor(vsctm: any, oniguruma: any) {\n    // @ts-ignore\n    return (async () => {\n      this.vsctm = vsctm.default ?? vsctm;\n      // @ts-ignore\n      this.oniguruma = oniguruma || vscodeOniguruma?.default || vscodeOniguruma;\n      await this.loadWasm();\n      return this;\n    })();\n  }\n\n  async loadWasm() {\n    const wasm = await fs.readFile(\n      // @ts-ignore\n      // eslint-disable-next-line\n      require.resolve('vscode-oniguruma/release/onig.wasm'),\n    );\n    await this.oniguruma?.loadWASM(wasm.buffer);\n\n    if (!this.initCalled) {\n      try {\n        this.oniguruma.loadWASM(wasm.buffer);\n      } catch (error) {\n        this.initCalled = true;\n      }\n\n      this.initCalled = true;\n    }\n  }\n\n  createRegistry() {\n    this.registry = new this.vsctm.Registry({\n      loadGrammar: (scopeName: any) => {\n        if (scopeName === 'text.html.php.blade') {\n          // https://github.com/onecentlin/\n          // laravel-blade-snippets-vscode/\n          // blob/master/syntaxes/blade.tmLanguage.json\n          return readFile(path.resolve(__dirname, `../syntaxes/blade.tmLanguage.json`)).then((content: any) =>\n            this.vsctm.parseRawGrammar(content.toString(), './blade.tmLanguage.json'),\n          );\n        }\n        return null;\n      },\n      onigLib: Promise.resolve({\n        createOnigScanner: (sources: any) => new this.oniguruma.OnigScanner(sources),\n        createOnigString: (str: any) => new this.oniguruma.OnigString(str),\n      }),\n    });\n\n    return this.registry;\n  }\n\n  tokenizeLines(splitedLines: any, grammar: any) {\n    return _.map(splitedLines, (line: any) => grammar.tokenizeLine(line, this.vsctm?.INITIAL));\n  }\n}\n\nexport default {\n  VscodeTextmate,\n};\n", "import Ajv, { JSONSchemaType } from 'ajv';\nimport findConfig from 'find-config';\nimport fs from 'fs';\nimport path from 'path';\n\nconst ajv = new Ajv();\n\nexport type WrapAttributes =\n  | 'auto'\n  | 'force'\n  | 'force-aligned'\n  | 'force-expand-multiline'\n  | 'aligned-multiple'\n  | 'preserve'\n  | 'preserve-aligned';\n\nexport type SortHtmlAttributes = 'none' | 'alphabetical' | 'code-guide' | 'idiomatic' | 'vuejs' | 'custom';\n\nexport type EndOfLine = 'LF' | 'CRLF';\n\nexport interface RuntimeConfig {\n  indentSize?: number;\n  wrapLineLength?: number;\n  wrapAttributes?: WrapAttributes;\n  wrapAttributesMinAttrs?: number;\n  indentInnerHtml?: boolean;\n  endWithNewline?: boolean;\n  endOfLine?: EndOfLine;\n  useTabs?: boolean;\n  sortTailwindcssClasses?: boolean;\n  tailwindcssConfigPath?: string;\n  sortHtmlAttributes?: SortHtmlAttributes;\n  customHtmlAttributesOrder?: string[] | string;\n  noMultipleEmptyLines?: boolean;\n  noPhpSyntaxCheck?: boolean;\n  noSingleQuote?: boolean;\n  noTrailingCommaPhp?: boolean;\n  extraLiners?: string[];\n}\n\nconst defaultConfigNames = ['.bladeformatterrc.json', '.bladeformatterrc'];\n\nexport function findRuntimeConfig(filePath: string): string | null {\n  for (let i = 0; i < defaultConfigNames.length; i += 1) {\n    const result: string | null = findConfig(defaultConfigNames[i], {\n      cwd: path.dirname(filePath),\n      home: false,\n    });\n\n    if (result) {\n      return result;\n    }\n  }\n\n  return null;\n}\n\nexport async function readRuntimeConfig(filePath: string | null): Promise<RuntimeConfig | undefined> {\n  if (filePath === null) {\n    return undefined;\n  }\n\n  const options = JSON.parse((await fs.promises.readFile(filePath)).toString());\n\n  const schema: JSONSchemaType<RuntimeConfig> = {\n    type: 'object',\n    properties: {\n      indentSize: { type: 'integer', nullable: true },\n      wrapLineLength: { type: 'integer', nullable: true },\n      wrapAttributes: {\n        type: 'string',\n        enum: [\n          'auto',\n          'force',\n          'force-aligned',\n          'force-expand-multiline',\n          'aligned-multiple',\n          'preserve',\n          'preserve-aligned',\n        ],\n        nullable: true,\n      },\n      wrapAttributesMinAttrs: { type: 'integer', nullable: true, default: 2 },\n      indentInnerHtml: { type: 'boolean', nullable: true },\n      endWithNewline: { type: 'boolean', nullable: true },\n      endOfLine: { type: 'string', enum: ['LF', 'CRLF'], nullable: true },\n      useTabs: { type: 'boolean', nullable: true },\n      sortTailwindcssClasses: { type: 'boolean', nullable: true },\n      tailwindcssConfigPath: { type: 'string', nullable: true },\n      sortHtmlAttributes: {\n        type: 'string',\n        enum: ['none', 'alphabetical', 'code-guide', 'idiomatic', 'vuejs', 'custom'],\n        nullable: true,\n      },\n      customHtmlAttributesOrder: { type: 'array', nullable: true, items: { type: 'string' }, default: [] },\n      noMultipleEmptyLines: { type: 'boolean', nullable: true },\n      noPhpSyntaxCheck: { type: 'boolean', nullable: true },\n      noSingleQuote: { type: 'boolean', nullable: true },\n      noTrailingCommaPhp: { type: 'boolean', nullable: true },\n      extraLiners: { type: 'array', nullable: true, items: { type: 'string' }, default: ['head', 'body', '/html'] },\n    },\n    additionalProperties: true,\n  };\n  const validate = ajv.compile(schema);\n\n  if (!validate(options)) {\n    throw validate;\n  }\n\n  return options;\n}\n"],
  "mappings": "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",
  "names": ["main_exports", "__export", "BladeFormatter", "Formatter", "__toCommonJS", "import_ignore", "import_chalk", "import_find_config", "import_fs", "import_glob", "import_lodash", "import_path", "import_process", "import_util", "FormatError", "import_tailwindcss_class_sorter", "import_aigle", "import_detect_indent", "import_html_attribute_sorter", "import_js_beautify", "import_lodash", "vscodeTmModule", "import_xregexp", "import_string_replace_async", "splitByLines", "content", "isCommentedLine", "line", "isMultiline", "lines", "addPrefixToLine", "formatPhpComment", "comment", "nonCommentLineExists", "row", "trimmedLine", "constants", "constants_default", "import_lodash", "directivePrefix", "indentStartTokens", "indentStartTokensWithoutPrefix", "_", "token", "indentEndTokens", "indentElseTokens", "optionalStartWithoutEndTokens", "tokenForIndentStartOrElseTokens", "indentStartOrElseTokens", "indentStartAndEndTokens", "phpKeywordStartTokens", "phpKeywordEndTokens", "inlinePhpDirectives", "inlineFunctionTokens", "conditionalTokens", "unbalancedStartTokens", "cssAtRuleTokens", "hasStartAndEndToken", "tokenizeLineResult", "originalLine", "tokenStruct", "nestedParenthesisRegex", "import_lodash", "adjustSpaces", "content", "directivesRequiredSpace", "_", "nestedParenthesisRegex", "_matched", "p1", "p2", "import_lodash", "import_fs", "import_os", "import_chalk", "prettier", "import_standalone", "import_detect_indent", "import_string_replace_async", "optional", "obj", "chain", "_", "readFile", "path", "resolve", "reject", "fs", "error", "data", "splitByLines", "content", "printWidthForInline", "defaultFormatPhpOption", "formatStringAsPhp", "params", "_a", "options", "adjust", "printWidth", "phpPlugin", "formatRawStringAsPhp", "match", "p1", "getArgumentsCount", "expression", "code", "ast", "printDiffs", "diffs", "_", "diff", "chalk", "generateDiff", "path", "originalLines", "formattedLines", "originalLine", "index", "prettifyPhpContentWithUnescapedTags", "content", "options", "directives", "indentStartTokens", "directiveRegexes", "nestedParenthesisRegex", "resolve", "res", "replaceAsync", "match", "p1", "p2", "p3", "formatStringAsPhp", "match2", "j1", "j2", "j3", "formatAsPhp", "content", "options", "prettifyPhpContentWithUnescapedTags", "preserveDirectives", "content", "startTokens", "_", "phpKeywordStartTokens", "endTokens", "phpKeywordEndTokens", "resolve", "res", "regex", "nestedParenthesisRegex", "match", "p1", "p2", "p3", "revertDirectives", "content", "resolve", "res", "_", "match", "p1", "p2", "escapeTags", "checkResult", "formatted", "escapeReplacementString", "string", "getEndOfLine", "endOfLine", "os", "import_fs", "import_lodash", "vscodeOniguruma", "import_path", "VscodeTextmate", "vsctm", "oniguruma", "_a", "vscodeOniguruma", "wasm", "fs", "scopeName", "readFile", "path", "content", "sources", "str", "splitedLines", "grammar", "_", "line", "Formatter", "options", "constants_default", "optional", "vscodeTmModule", "getEndOfLine", "content", "resolve", "target", "formatAsPhp", "adjustSpaces", "formattedResult", "checkResult", "data", "promise", "preserveDirectives", "preserved", "beautify", "revertDirectives", "_", "_match", "p1", "p2", "match", "contentUnformatted", "negativeLookAhead", "indentStartTokens", "indentEndTokens", "indentElseTokens", "inlineNegativeLookAhead", "inlineFunctionTokens", "phpKeywordStartTokens", "unbalancedStartTokens", "cssAtRuleTokens", "inlineRegex", "nestedParenthesisRegex", "regex", "formatted", "p3", "p4", "p5", "p6", "p7", "result", "beginStr", "elseStr", "directivePrefix", "indentStartTokensWithoutPrefix", "replaced", "targetTokens", "inlineFunctionDirectives", "inlineFunctionRegex", "endTokens", "matched", "formatRawStringAsPhp", "printWidthForInline", "indentStartOrElseTokens", "_matched", "inside", "customStartRegex", "startRegex", "elseRegex", "endRegex", "endStr", "unbalancedConditions", "unbalancedEchos", "directive", "directives", "x", "recursivelyMatched", "xregexp", "escapeReplacementString", "innerRegex", "conditionalTokens", "_a", "strategy", "regexes", "customRegexes", "value", "length", "index", "brace", "replace", "gap", "attribute", "template", "replaceAsync", "rawBlock", "placeholder", "matchedLine", "indent", "detectIndent", "isOnSingleLine", "isMultipleStatements", "formatStringAsPhp", "indentLevel", "_q1", "q2", "indented", "prefix", "prefixForEnd", "lines", "line", "prefixSpaces", "withoutCommentLine", "group1", "group2", "Aigle", "formattedAsHtml", "res", "formatPhpComment", "bladeBrace", "inlinePhpDirectives", "token", "match2", "wrapLength", "inlinedComment", "script", "useTabs", "_m", "openingTag", "restofTag", "firstLine", "offsettedLines", "beautifyOpts", "splittedLines", "splitByLines", "vsctmModule", "VscodeTextmate", "grammar", "tokenizedLines", "err", "i", "originalLine", "tokenizeLineResult", "phpKeywordEndTokens", "indentStartAndEndTokens", "tokenForIndentStartOrElseTokens", "tokenStruct", "count", "inString", "stack", "unindentOn", "expression", "getArgumentsCount", "optionalStartWithoutEndTokens", "hasStartAndEndToken", "j", "whitespaces", "formattedLine", "level", "matchedExpression", "formatTarget", "formattedExpression", "jsCode", "code", "tempVarStore", "m", "import_ajv", "import_find_config", "import_fs", "import_path", "ajv", "Ajv", "defaultConfigNames", "findRuntimeConfig", "filePath", "i", "result", "findConfig", "path", "readRuntimeConfig", "options", "fs", "schema", "validate", "BladeFormatter", "_BladeFormatter", "options", "paths", "_a", "content", "opts", "target", "nodepath", "process", "Formatter", "err", "FormatError", "filepath", "fs", "filePath", "configFilename", "configFilePath", "worakingDir", "findConfig", "workingDir", "_b", "_", "configFile", "findRuntimeConfig", "readRuntimeConfig", "obj", "src", "error", "chalk", "nodeutil", "path", "resolve", "reject", "glob", "matches", "REGEX_FILES_NOT_IN_CURRENT_DIR", "filesOutsideTargetDir", "filesUnderTargetDir", "filteredFiles", "ignore", "readFile", "data", "formatted", "originalContent", "originalLines", "splitByLines", "formattedLines", "diff", "generateDiff", "returnLine", "printDiffs"]
}
