{"version":3,"file":"index.mjs","names":["babelParsers","estreePrinters"],"sources":["../src/index.ts"],"sourcesContent":["import type { Parser, ParserOptions, Plugin } from 'prettier';\nimport type { ParserName, PluginWithParsers } from './types/index.d.ts';\nimport { parsers as babelParsers } from 'prettier/plugins/babel';\nimport { printers as estreePrinters } from 'prettier/plugins/estree';\n\nfunction createParser(name: ParserName): Parser {\n\tconst parse: Parser['parse'] = async (\n\t\ttext: string,\n\t\toptions: ParserOptions\n\t) => {\n\t\tconst priorParser = findPriorParser(name, options, parse);\n\n\t\t// Force the JSONC printer to wrap all lines\n\t\tif (name === 'jsonc') {\n\t\t\toptions.printWidth = 1;\n\t\t}\n\n\t\t/* oxlint-disable-next-line typescript/no-unsafe-return */\n\t\treturn typeof priorParser?.parse === 'function'\n\t\t\t? await priorParser.parse(\n\t\t\t\t\ttext,\n\t\t\t\t\tomitCurrentParser(name, options, parse)\n\t\t\t\t)\n\t\t\t: babelParsers[name].parse(text, options);\n\t};\n\n\tconst preprocess: NonNullable<Parser['preprocess']> = async (\n\t\ttext: string,\n\t\toptions: ParserOptions\n\t) => {\n\t\tconst priorParser = findPriorParser(name, options, parse);\n\n\t\tif (typeof priorParser?.preprocess === 'function') {\n\t\t\treturn priorParser.preprocess(\n\t\t\t\ttext,\n\t\t\t\tomitCurrentParser(name, options, parse)\n\t\t\t);\n\t\t}\n\n\t\treturn text;\n\t};\n\n\treturn {\n\t\t...babelParsers[name],\n\t\tastFormat: name === 'jsonc' ? 'estree' : 'estree-json',\n\t\tparse,\n\t\tpreprocess,\n\t};\n}\n\nfunction findPriorParser(\n\tname: ParserName,\n\toptions: ParserOptions,\n\tcurrentParse: Parser['parse']\n): Parser | undefined {\n\tfor (const plugin of options.plugins.toReversed()) {\n\t\tif (!hasParsers(plugin)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parser = plugin.parsers[name];\n\n\t\tif (parser && parser.parse !== currentParse) {\n\t\t\treturn parser;\n\t\t}\n\t}\n\n\t/* v8 ignore next -- @preserve */\n\treturn undefined;\n}\n\nfunction hasParsers(plugin: unknown): plugin is PluginWithParsers {\n\t/* v8 ignore if -- @preserve */\n\tif (!plugin) {\n\t\treturn false;\n\t}\n\n\treturn typeof plugin === 'object' && Object.hasOwn(plugin, 'parsers');\n}\n\nfunction omitCurrentParser(\n\tname: ParserName,\n\toptions: ParserOptions,\n\tcurrentParse: Parser['parse']\n): ParserOptions {\n\treturn {\n\t\t...options,\n\t\tplugins: options.plugins.filter((plugin) => {\n\t\t\tif (!hasParsers(plugin)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst parser = plugin.parsers[name];\n\t\t\treturn !(parser && parser.parse === currentParse);\n\t\t}),\n\t};\n}\n\nexport const parsers: Plugin['parsers'] = {\n\t'json': createParser('json'),\n\t'json-stringify': createParser('json-stringify'),\n\t'jsonc': createParser('jsonc'),\n};\n\nexport const printers: Plugin['printers'] = {\n\t'estree': estreePrinters.estree,\n\t'estree-json': estreePrinters['estree-json'],\n};\n"],"mappings":";;;AAKA,SAAS,aAAa,MAA0B;CAC/C,MAAM,QAAyB,OAC9B,MACA,YACI;EACJ,MAAM,cAAc,gBAAgB,MAAM,SAAS,MAAM;EAGzD,IAAI,SAAS,SACZ,QAAQ,aAAa;EAItB,OAAO,OAAO,aAAa,UAAU,aAClC,MAAM,YAAY,MAClB,MACA,kBAAkB,MAAM,SAAS,MAAM,CACvC,GACAA,UAAa,MAAM,MAAM,MAAM,QAAQ;;CAG3C,MAAM,aAAgD,OACrD,MACA,YACI;EACJ,MAAM,cAAc,gBAAgB,MAAM,SAAS,MAAM;EAEzD,IAAI,OAAO,aAAa,eAAe,YACtC,OAAO,YAAY,WAClB,MACA,kBAAkB,MAAM,SAAS,MAAM,CACvC;EAGF,OAAO;;CAGR,OAAO;EACN,GAAGA,UAAa;EAChB,WAAW,SAAS,UAAU,WAAW;EACzC;EACA;EACA;;AAGF,SAAS,gBACR,MACA,SACA,cACqB;CACrB,KAAK,MAAM,UAAU,QAAQ,QAAQ,YAAY,EAAE;EAClD,IAAI,CAAC,WAAW,OAAO,EACtB;EAGD,MAAM,SAAS,OAAO,QAAQ;EAE9B,IAAI,UAAU,OAAO,UAAU,cAC9B,OAAO;;;AAQV,SAAS,WAAW,QAA8C;;CAEjE,IAAI,CAAC,QACJ,OAAO;CAGR,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,QAAQ,UAAU;;AAGtE,SAAS,kBACR,MACA,SACA,cACgB;CAChB,OAAO;EACN,GAAG;EACH,SAAS,QAAQ,QAAQ,QAAQ,WAAW;GAC3C,IAAI,CAAC,WAAW,OAAO,EACtB,OAAO;GAGR,MAAM,SAAS,OAAO,QAAQ;GAC9B,OAAO,EAAE,UAAU,OAAO,UAAU;IACnC;EACF;;AAGF,MAAa,UAA6B;CACzC,QAAQ,aAAa,OAAO;CAC5B,kBAAkB,aAAa,iBAAiB;CAChD,SAAS,aAAa,QAAQ;CAC9B;AAED,MAAa,WAA+B;CAC3C,UAAUC,WAAe;CACzB,eAAeA,WAAe;CAC9B"}