UNPKG

eslint-plugin-jsdoc

Version:
1 lines 20.6 kB
{"version":3,"file":"validTypes.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","inlineTags","Set","jsdocTypePrattKeywords","asExpression","suppressTypes","tryParsePathIgnoreError","path","tryParse","_default","exports","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","has","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parsedTypes","parse","traverse","node","_node$right","_node$right2","typ","right","meta","position","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","value","undefined","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","inlineTag","text","namepathOrURL","iterateAllJsdocs","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\n\nconst inlineTags = new Set([\n 'link', 'linkcode', 'linkplain',\n 'tutorial',\n]);\n\nconst jsdocTypePrattKeywords = new Set([\n 'typeof',\n 'readonly',\n 'import',\n 'is',\n]);\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkEs5InheritanceCorrectnessConditions',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureClassChecks',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'dangerousUnrecognizedTypeError',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'lintVarDeclarations',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingReturn',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'msgDescriptions',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictCheckTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n\n // Not documented?\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\n/**\n * @param {string} path\n * @returns {boolean}\n */\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n /**\n * @param {string} namepath\n * @param {string} [tagName]\n * @returns {boolean}\n */\n const validNamepathParsing = function (namepath, tagName) {\n if (\n tryParsePathIgnoreError(namepath) ||\n jsdocTypePrattKeywords.has(namepath)\n ) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt(0);\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n /**\n * @param {string} type\n * @returns {boolean}\n */\n const validTypeParsing = function (type) {\n let parsedTypes;\n try {\n if (mode === 'permissive') {\n parsedTypes = tryParse(type);\n } else {\n parsedTypes = parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n if (mode === 'closure' || mode === 'typescript') {\n traverse(parsedTypes, (node) => {\n const {\n type: typ,\n } = node;\n\n if (\n (typ === 'JsdocTypeObjectField' || typ === 'JsdocTypeKeyValue') &&\n node.right?.type === 'JsdocTypeNullable' &&\n node.right?.meta?.position === 'suffix'\n ) {\n report(`Syntax error in type: ${node.right.type}`, null, tag);\n }\n });\n }\n\n return true;\n };\n\n if (tag.problems.length) {\n const msg = tag.problems.reduce((str, {\n message,\n }) => {\n return str + '; ' + message;\n }, '').slice(2);\n report(`Invalid name: ${msg}`, null, tag);\n continue;\n }\n\n if (tag.tag === 'import') {\n // A named import will look like a type, but not be valid; we also don't\n // need to check the name/namepath\n continue;\n }\n\n if (tag.tag === 'borrows') {\n const thisNamepath = /** @type {string} */ (\n utils.getTagDescription(tag)\n ).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(/** @type {string} */ (\n utils.getTagDescription(tag)\n )) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n let type;\n if ('value' in node && typeof node.value === 'string') {\n type = node.value;\n }\n\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in suppress type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = /** @type {import('../jsdocUtils.js').ParserMode[]} */ ([\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ]).filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n\n for (const inlineTag of tag.inlineTags) {\n if (inlineTags.has(inlineTag.tag) && !inlineTag.text && !inlineTag.namepathOrURL) {\n report(`Inline tag \"${inlineTag.tag}\" missing content`, null, tag);\n }\n }\n }\n\n for (const inlineTag of jsdoc.inlineTags) {\n if (inlineTags.has(inlineTag.tag) && !inlineTag.text && !inlineTag.namepathOrURL) {\n report(`Inline tag \"${inlineTag.tag}\" missing content`);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/valid-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAI8B,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9B,MAAMG,UAAU,GAAG,IAAIC,GAAG,CAAC,CACzB,MAAM,EAAE,UAAU,EAAE,WAAW,EAC/B,UAAU,CACX,CAAC;AAEF,MAAMC,sBAAsB,GAAG,IAAID,GAAG,CAAC,CACrC,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,IAAI,CACL,CAAC;AAEF,MAAME,YAAY,GAAG,QAAQ;AAE7B,MAAMC,aAAa,GAAG,IAAIH,GAAG,CAAC;AAC5B;AACA;AACA,gBAAgB,EAChB,wBAAwB,EACxB,0CAA0C,EAC1C,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,6BAA6B,EAC7B,OAAO,EACP,kBAAkB,EAClB,gCAAgC,EAChC,YAAY,EACZ,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB;AAEhB;AACA,QAAQ,EACR,oCAAoC,EACpC,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB;AAEtB;AACA,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,MAAM,CACP,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMI,uBAAuB,GAAIC,IAAI,IAAK;EACxC,IAAI;IACF,IAAAC,sBAAQ,EAACD,IAAI,CAAC;IAEd,OAAO,IAAI;EACb,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,OAAO,KAAK;AACd,CAAC;;AAED;AAAA,IAAAE,QAAA,GAAAC,OAAA,CAAAV,OAAA,GACe,IAAAW,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,MAAM;EACNC,KAAK;EACLC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,mBAAmB,GAAG;EACxB,CAAC,GAAGF,OAAO,CAACG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5B,MAAM;IACJC;EACF,CAAC,GAAGH,QAAQ;EAEZ,KAAK,MAAMI,GAAG,IAAIR,KAAK,CAACS,IAAI,EAAE;IAC5B;AACJ;AACA;AACA;AACA;IACI,MAAMC,oBAAoB,GAAG,SAAAA,CAAUC,QAAQ,EAAEC,OAAO,EAAE;MACxD,IACElB,uBAAuB,CAACiB,QAAQ,CAAC,IACjCpB,sBAAsB,CAACsB,GAAG,CAACF,QAAQ,CAAC,EACpC;QACA,OAAO,IAAI;MACb;MAEA,IAAIG,OAAO,GAAG,KAAK;MAEnB,IAAIF,OAAO,EAAE;QACX,QAAQA,OAAO;UACf,KAAK,UAAU;UACf,KAAK,QAAQ;YAAE;cACb,IAAI,CAACD,QAAQ,CAACI,UAAU,CAAC,SAAS,CAAC,EAAE;gBACnCD,OAAO,GAAGpB,uBAAuB,CAAC,UAAUiB,QAAQ,EAAE,CAAC;cACzD;cAEA;YACF;UAEA,KAAK,UAAU;UAAE,KAAK,WAAW;YAAE;cACjC,MAAMK,OAAO,GAAGL,QAAQ,CAACM,KAAK,CAAC,CAAC,CAAC,CAAC;cAClC,IAAI,CACF,GAAG,EAAE,GAAG,EAAE,GAAG,CACd,CAACC,QAAQ,CAACF,OAAO,CAAC,EAAE;gBACnBF,OAAO,GAAGpB,uBAAuB,CAACiB,QAAQ,CAACM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;cAC1D;cAEA;YACF;UAEA,KAAK,SAAS;YAAE;cACd,MAAME,SAAS,GAAGR,QAAQ,CAACS,MAAM,CAAC,CAAC,CAAC;cACpC,IAAI,CACF,GAAG,EAAE,GAAG,EAAE,GAAG,CACd,CAACF,QAAQ,CAACC,SAAS,CAAC,EAAE;gBACrBL,OAAO,GAAGpB,uBAAuB,CAACiB,QAAQ,CAACM,KAAK,CAAC,CAAC,CAAC,CAAC;cACtD;YACF;QACA;MACF;MAEA,IAAI,CAACH,OAAO,EAAE;QACZb,MAAM,CAAC,6BAA6BU,QAAQ,EAAE,EAAE,IAAI,EAAEH,GAAG,CAAC;QAE1D,OAAO,KAAK;MACd;MAEA,OAAO,IAAI;IACb,CAAC;;IAED;AACJ;AACA;AACA;IACI,MAAMa,gBAAgB,GAAG,SAAAA,CAAUC,IAAI,EAAE;MACvC,IAAIC,WAAW;MACf,IAAI;QACF,IAAIhB,IAAI,KAAK,YAAY,EAAE;UACzBgB,WAAW,GAAG,IAAA3B,sBAAQ,EAAC0B,IAAI,CAAC;QAC9B,CAAC,MAAM;UACLC,WAAW,GAAG,IAAAC,mBAAK,EAACF,IAAI,EAAEf,IAAI,CAAC;QACjC;MACF,CAAC,CAAC,MAAM;QACNN,MAAM,CAAC,yBAAyBqB,IAAI,EAAE,EAAE,IAAI,EAAEd,GAAG,CAAC;QAElD,OAAO,KAAK;MACd;MAEA,IAAID,IAAI,KAAK,SAAS,IAAIA,IAAI,KAAK,YAAY,EAAE;QAC/C,IAAAkB,sBAAQ,EAACF,WAAW,EAAGG,IAAI,IAAK;UAAA,IAAAC,WAAA,EAAAC,YAAA;UAC9B,MAAM;YACJN,IAAI,EAAEO;UACR,CAAC,GAAGH,IAAI;UAER,IACE,CAACG,GAAG,KAAK,sBAAsB,IAAIA,GAAG,KAAK,mBAAmB,KAC9D,EAAAF,WAAA,GAAAD,IAAI,CAACI,KAAK,cAAAH,WAAA,uBAAVA,WAAA,CAAYL,IAAI,MAAK,mBAAmB,IACxC,EAAAM,YAAA,GAAAF,IAAI,CAACI,KAAK,cAAAF,YAAA,gBAAAA,YAAA,GAAVA,YAAA,CAAYG,IAAI,cAAAH,YAAA,uBAAhBA,YAAA,CAAkBI,QAAQ,MAAK,QAAQ,EACvC;YACA/B,MAAM,CAAC,yBAAyByB,IAAI,CAACI,KAAK,CAACR,IAAI,EAAE,EAAE,IAAI,EAAEd,GAAG,CAAC;UAC/D;QACF,CAAC,CAAC;MACJ;MAEA,OAAO,IAAI;IACb,CAAC;IAED,IAAIA,GAAG,CAACyB,QAAQ,CAACC,MAAM,EAAE;MACvB,MAAMC,GAAG,GAAG3B,GAAG,CAACyB,QAAQ,CAACG,MAAM,CAAC,CAACC,GAAG,EAAE;QACpCC;MACF,CAAC,KAAK;QACJ,OAAOD,GAAG,GAAG,IAAI,GAAGC,OAAO;MAC7B,CAAC,EAAE,EAAE,CAAC,CAACrB,KAAK,CAAC,CAAC,CAAC;MACfhB,MAAM,CAAC,iBAAiBkC,GAAG,EAAE,EAAE,IAAI,EAAE3B,GAAG,CAAC;MACzC;IACF;IAEA,IAAIA,GAAG,CAACA,GAAG,KAAK,QAAQ,EAAE;MACxB;MACA;MACA;IACF;IAEA,IAAIA,GAAG,CAACA,GAAG,KAAK,SAAS,EAAE;MACzB,MAAM+B,YAAY,GAAG,qBACnBrC,KAAK,CAACsC,iBAAiB,CAAChC,GAAG,CAAC,CAC5BiC,OAAO,CAACjD,YAAY,EAAE,EAAE,CAAC,CACxBkD,IAAI,CAAC,CAAC;MAET,IAAI,CAAClD,YAAY,CAACmD,IAAI,EAAC;MACrBzC,KAAK,CAACsC,iBAAiB,CAAChC,GAAG,CAC5B,CAAC,IAAI,CAAC+B,YAAY,EAAE;QACnBtC,MAAM,CAAC,iDAAiDC,KAAK,CAACsC,iBAAiB,CAAChC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAEA,GAAG,CAAC;QAEnG;MACF;MAEA,IAAIE,oBAAoB,CAAC6B,YAAY,EAAE,SAAS,CAAC,EAAE;QACjD,MAAMK,YAAY,GAAGpC,GAAG,CAACqC,IAAI;QAE7BnC,oBAAoB,CAACkC,YAAY,CAAC;MACpC;MAEA;IACF;IAEA,IAAIpC,GAAG,CAACA,GAAG,KAAK,UAAU,IAAID,IAAI,KAAK,SAAS,EAAE;MAChD,IAAIgB,WAAW;MAEf,IAAI;QACFA,WAAW,GAAG,IAAA3B,sBAAQ,EAACY,GAAG,CAACc,IAAI,CAAC;MAClC,CAAC,CAAC,MAAM;QACN;MAAA;MAGF,IAAIC,WAAW,EAAE;QACf,IAAAE,sBAAQ,EAACF,WAAW,EAAGG,IAAI,IAAK;UAC9B,IAAIJ,IAAI;UACR,IAAI,OAAO,IAAII,IAAI,IAAI,OAAOA,IAAI,CAACoB,KAAK,KAAK,QAAQ,EAAE;YACrDxB,IAAI,GAAGI,IAAI,CAACoB,KAAK;UACnB;UAEA,IAAIxB,IAAI,KAAKyB,SAAS,IAAI,CAACtD,aAAa,CAACoB,GAAG,CAACS,IAAI,CAAC,EAAE;YAClDrB,MAAM,CAAC,kCAAkCqB,IAAI,EAAE,EAAE,IAAI,EAAEd,GAAG,CAAC;UAC7D;QACF,CAAC,CAAC;MACJ;IACF;IAEA,MAAMwC,aAAa,GAAG,sDAAwD,CAC5E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAC/C,CAAEC,MAAM,CACNC,GAAG,IAAK;MACP,OAAOA,GAAG,KAAK3C,IAAI;IACrB,CACF,CAAC,CAAC4C,GAAG,CAAED,GAAG,IAAK;MACb,OAAOhD,KAAK,CAACkD,sBAAsB,CAACF,GAAG,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAMG,wBAAwB,GAAGnD,KAAK,CAACmD,wBAAwB,CAAC7C,GAAG,CAACA,GAAG,EAAEwC,aAAa,CAAC;IACvF,IAAIK,wBAAwB,KAAK,IAAI,IAAI7C,GAAG,CAACqC,IAAI,EAAE;MACjD,MAAMS,QAAQ,GAAGD,wBAAwB,KAAK,KAAK,GAAG,EAAE,GAAG,QAAQ9C,IAAI,QAAQ;MAC/EN,MAAM,CAAC,IAAIO,GAAG,CAACA,GAAG,0BAA0B8C,QAAQ,GAAG,EAAE,IAAI,EAAE9C,GAAG,CAAC;MAEnE;IACF;IAEA,MAAM+C,qBAAqB,GAAGrD,KAAK,CAACsD,wBAAwB,CAAChD,GAAG,CAACA,GAAG,EAAEwC,aAAa,CAAC;IACpF,IAAIO,qBAAqB,KAAK,IAAI,IAAI/C,GAAG,CAACc,IAAI,EAAE;MAC9C,MAAMgC,QAAQ,GAAGC,qBAAqB,KAAK,KAAK,GAAG,EAAE,GAAG,QAAQhD,IAAI,QAAQ;MAC5EN,MAAM,CAAC,IAAIO,GAAG,CAACA,GAAG,oCAAoC8C,QAAQ,GAAG,EAAE,IAAI,EAAE9C,GAAG,CAAC;MAE7E;IACF;;IAEA;IACA,MAAMiD,uBAAuB,GAAGvD,KAAK,CAACuD,uBAAuB,CAACjD,GAAG,CAACA,GAAG,EAAEwC,aAAa,CAAC;;IAErF;IACA;IACA;IACA,IAAIS,uBAAuB,KAAK,KAAK,IAAI,CAACjD,GAAG,CAACqC,IAAI,IAAI,CAACxC,mBAAmB,IAAI,CAAC,CAC7E,OAAO,EAAE,KAAK,EAAE,UAAU,EAC1B,UAAU,EAAE,MAAM,CACnB,CAACa,QAAQ,CAACV,GAAG,CAACA,GAAG,CAAC,KAChBA,GAAG,CAACA,GAAG,KAAK,KAAK,IAAI,CAACN,KAAK,CAACsC,iBAAiB,CAAChC,GAAG,CAAC,CAACU,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACvE;MACA,MAAMoC,QAAQ,GAAGG,uBAAuB,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQlD,IAAI,QAAQ;MAC7EN,MAAM,CAAC,QAAQO,GAAG,CAACA,GAAG,6BAA6B8C,QAAQ,GAAG,EAAE,IAAI,EAAE9C,GAAG,CAAC;MAE1E;IACF;;IAEA;IACA,MAAMkD,oBAAoB,GAAGxD,KAAK,CAACyD,uBAAuB,CAACnD,GAAG,CAACA,GAAG,EAAEwC,aAAa,CAAC;IAClF,IAAIU,oBAAoB,KAAK,KAAK,IAAI,CAAClD,GAAG,CAACc,IAAI,EAAE;MAC/C,MAAMgC,QAAQ,GAAGI,oBAAoB,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQnD,IAAI,QAAQ;MAC1EN,MAAM,CAAC,QAAQO,GAAG,CAACA,GAAG,oBAAoB8C,QAAQ,GAAG,EAAE,IAAI,EAAE9C,GAAG,CAAC;MAEjE;IACF;;IAEA;IACA,MAAMoD,gCAAgC,GAAG1D,KAAK,CAAC0D,gCAAgC,CAACpD,GAAG,EAAEwC,aAAa,CAAC;IACnG,IAAIY,gCAAgC,KAAK,KAAK,IAAI,CAACvD,mBAAmB,EAAE;MACtE,MAAMiD,QAAQ,GAAGM,gCAAgC,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQrD,IAAI,QAAQ;MACtFN,MAAM,CAAC,QAAQO,GAAG,CAACA,GAAG,uCAAuC8C,QAAQ,GAAG,EAAE,IAAI,EAAE9C,GAAG,CAAC;MAEpF;IACF;;IAEA;IACA,MAAMqD,eAAe,GAAGN,qBAAqB,KAAK,IAAI,IAAIO,OAAO,CAACtD,GAAG,CAACc,IAAI,CAAC;IAC3E,IAAIuC,eAAe,EAAE;MACnBxC,gBAAgB,CAACb,GAAG,CAACc,IAAI,CAAC;IAC5B;;IAEA;IACA,MAAMyC,yBAAyB,GAAG,CAChCN,uBAAuB,KAAK,KAAK,IACjCvD,KAAK,CAAC8D,oBAAoB,CAACxD,GAAG,CAACA,GAAG,CAAC,KAChCsD,OAAO,CAACtD,GAAG,CAACqC,IAAI,CAAC;IAEtB,IAAIkB,yBAAyB,EAAE;MAC7B,IAAIxD,IAAI,KAAK,OAAO,IAAIC,GAAG,CAACA,GAAG,KAAK,UAAU,EAAE;QAC9C,KAAK,MAAMG,QAAQ,IAAIT,KAAK,CAAC+D,uBAAuB,CAACzD,GAAG,CAAC,EAAE;UACzDE,oBAAoB,CAACC,QAAQ,CAAC;QAChC;MACF,CAAC,MAAM;QACLD,oBAAoB,CAACF,GAAG,CAACqC,IAAI,EAAErC,GAAG,CAACA,GAAG,CAAC;MACzC;IACF;IAEA,KAAK,MAAM0D,SAAS,IAAI1D,GAAG,CAACnB,UAAU,EAAE;MACtC,IAAIA,UAAU,CAACwB,GAAG,CAACqD,SAAS,CAAC1D,GAAG,CAAC,IAAI,CAAC0D,SAAS,CAACC,IAAI,IAAI,CAACD,SAAS,CAACE,aAAa,EAAE;QAChFnE,MAAM,CAAC,eAAeiE,SAAS,CAAC1D,GAAG,mBAAmB,EAAE,IAAI,EAAEA,GAAG,CAAC;MACpE;IACF;EACF;EAEA,KAAK,MAAM0D,SAAS,IAAIlE,KAAK,CAACX,UAAU,EAAE;IACxC,IAAIA,UAAU,CAACwB,GAAG,CAACqD,SAAS,CAAC1D,GAAG,CAAC,IAAI,CAAC0D,SAAS,CAACC,IAAI,IAAI,CAACD,SAAS,CAACE,aAAa,EAAE;MAChFnE,MAAM,CAAC,eAAeiE,SAAS,CAAC1D,GAAG,mBAAmB,CAAC;IACzD;EACF;AACF,CAAC,EAAE;EACD6D,gBAAgB,EAAE,IAAI;EACtBtC,IAAI,EAAE;IACJuC,IAAI,EAAE;MACJC,WAAW,EAAE,uFAAuF;MACpGC,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVtE,mBAAmB,EAAE;UACnBjB,OAAO,EAAE,KAAK;UACdkC,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAsD,MAAA,CAAA9E,OAAA,GAAAA,OAAA,CAAAV,OAAA","ignoreList":[]}