eslint-plugin-jsdoc 63.0.11 → 63.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/WarnSettings.cjs +8 -1
  2. package/dist/WarnSettings.cjs.map +1 -1
  3. package/dist/alignTransform.cjs +10 -6
  4. package/dist/alignTransform.cjs.map +1 -1
  5. package/dist/buildForbidRuleDefinition.cjs +10 -3
  6. package/dist/buildForbidRuleDefinition.cjs.map +1 -1
  7. package/dist/buildRejectOrPreferRuleDefinition.cjs +14 -7
  8. package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
  9. package/dist/defaultTagOrder.cjs +8 -1
  10. package/dist/defaultTagOrder.cjs.map +1 -1
  11. package/dist/exportParser.cjs +14 -6
  12. package/dist/exportParser.cjs.map +1 -1
  13. package/dist/generateDocs.cjs +44 -36
  14. package/dist/generateDocs.cjs.map +1 -1
  15. package/dist/generateOptions.cjs +18 -15
  16. package/dist/generateOptions.cjs.map +1 -1
  17. package/dist/generateRule.cjs +24 -24
  18. package/dist/generateRule.cjs.map +1 -1
  19. package/dist/generateRuleTypes.cjs +9 -6
  20. package/dist/generateRuleTypes.cjs.map +1 -1
  21. package/dist/getDefaultTagStructureForMode.cjs +8 -1
  22. package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
  23. package/dist/getJsdocProcessorPlugin.cjs +28 -20
  24. package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
  25. package/dist/index-cjs.cjs +159 -152
  26. package/dist/index-cjs.cjs.map +1 -1
  27. package/dist/index-esm.cjs +27 -16
  28. package/dist/index-esm.cjs.map +1 -1
  29. package/dist/index.cjs +172 -159
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/iterateJsdoc.cjs +32 -22
  32. package/dist/iterateJsdoc.cjs.map +1 -1
  33. package/dist/jsdocUtils.cjs +86 -18
  34. package/dist/jsdocUtils.cjs.map +1 -1
  35. package/dist/rules/checkAccess.cjs +10 -2
  36. package/dist/rules/checkAccess.cjs.map +1 -1
  37. package/dist/rules/checkAlignment.cjs +10 -2
  38. package/dist/rules/checkAlignment.cjs.map +1 -1
  39. package/dist/rules/checkExamples.cjs +15 -6
  40. package/dist/rules/checkExamples.cjs.map +1 -1
  41. package/dist/rules/checkIndentation.cjs +9 -2
  42. package/dist/rules/checkIndentation.cjs.map +1 -1
  43. package/dist/rules/checkLineAlignment.cjs +14 -6
  44. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  45. package/dist/rules/checkParamNames.cjs +9 -2
  46. package/dist/rules/checkParamNames.cjs.map +1 -1
  47. package/dist/rules/checkPropertyNames.cjs +9 -2
  48. package/dist/rules/checkPropertyNames.cjs.map +1 -1
  49. package/dist/rules/checkSyntax.cjs +10 -2
  50. package/dist/rules/checkSyntax.cjs.map +1 -1
  51. package/dist/rules/checkTagNames.cjs +11 -4
  52. package/dist/rules/checkTagNames.cjs.map +1 -1
  53. package/dist/rules/checkTemplateNames.cjs +20 -12
  54. package/dist/rules/checkTemplateNames.cjs.map +1 -1
  55. package/dist/rules/checkTypes.cjs +10 -4
  56. package/dist/rules/checkTypes.cjs.map +1 -1
  57. package/dist/rules/checkValues.cjs +17 -9
  58. package/dist/rules/checkValues.cjs.map +1 -1
  59. package/dist/rules/convertToJsdocComments.cjs +19 -13
  60. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  61. package/dist/rules/emptyTags.cjs +10 -2
  62. package/dist/rules/emptyTags.cjs.map +1 -1
  63. package/dist/rules/escapeInlineTags.cjs +10 -2
  64. package/dist/rules/escapeInlineTags.cjs.map +1 -1
  65. package/dist/rules/implementsOnClasses.cjs +10 -2
  66. package/dist/rules/implementsOnClasses.cjs.map +1 -1
  67. package/dist/rules/importsAsDependencies.cjs +20 -12
  68. package/dist/rules/importsAsDependencies.cjs.map +1 -1
  69. package/dist/rules/informativeDocs.cjs +12 -4
  70. package/dist/rules/informativeDocs.cjs.map +1 -1
  71. package/dist/rules/linesBeforeBlock.cjs +9 -2
  72. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  73. package/dist/rules/matchDescription.cjs +9 -2
  74. package/dist/rules/matchDescription.cjs.map +1 -1
  75. package/dist/rules/matchName.cjs +10 -2
  76. package/dist/rules/matchName.cjs.map +1 -1
  77. package/dist/rules/multilineBlocks.cjs +9 -2
  78. package/dist/rules/multilineBlocks.cjs.map +1 -1
  79. package/dist/rules/noBadBlocks.cjs +11 -4
  80. package/dist/rules/noBadBlocks.cjs.map +1 -1
  81. package/dist/rules/noBlankBlockDescriptions.cjs +10 -2
  82. package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
  83. package/dist/rules/noBlankBlocks.cjs +10 -2
  84. package/dist/rules/noBlankBlocks.cjs.map +1 -1
  85. package/dist/rules/noDefaults.cjs +10 -2
  86. package/dist/rules/noDefaults.cjs.map +1 -1
  87. package/dist/rules/noMissingSyntax.cjs +9 -2
  88. package/dist/rules/noMissingSyntax.cjs.map +1 -1
  89. package/dist/rules/noMultiAsterisks.cjs +10 -2
  90. package/dist/rules/noMultiAsterisks.cjs.map +1 -1
  91. package/dist/rules/noRestrictedSyntax.cjs +9 -2
  92. package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
  93. package/dist/rules/noTypes.cjs +9 -2
  94. package/dist/rules/noTypes.cjs.map +1 -1
  95. package/dist/rules/noUndefinedTypes.cjs +21 -13
  96. package/dist/rules/noUndefinedTypes.cjs.map +1 -1
  97. package/dist/rules/preferImportTag.cjs +28 -21
  98. package/dist/rules/preferImportTag.cjs.map +1 -1
  99. package/dist/rules/requireAsteriskPrefix.cjs +10 -2
  100. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  101. package/dist/rules/requireDescription.cjs +9 -2
  102. package/dist/rules/requireDescription.cjs.map +1 -1
  103. package/dist/rules/requireDescriptionCompleteSentence.cjs +15 -7
  104. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  105. package/dist/rules/requireExample.cjs +10 -2
  106. package/dist/rules/requireExample.cjs.map +1 -1
  107. package/dist/rules/requireFileOverview.cjs +10 -2
  108. package/dist/rules/requireFileOverview.cjs.map +1 -1
  109. package/dist/rules/requireHyphenBeforeParamDescription.cjs +10 -2
  110. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  111. package/dist/rules/requireJsdoc.cjs +24 -17
  112. package/dist/rules/requireJsdoc.cjs.map +1 -1
  113. package/dist/rules/requireParam.cjs +9 -2
  114. package/dist/rules/requireParam.cjs.map +1 -1
  115. package/dist/rules/requireParamDescription.cjs +10 -2
  116. package/dist/rules/requireParamDescription.cjs.map +1 -1
  117. package/dist/rules/requireParamName.cjs +10 -2
  118. package/dist/rules/requireParamName.cjs.map +1 -1
  119. package/dist/rules/requireParamType.cjs +10 -2
  120. package/dist/rules/requireParamType.cjs.map +1 -1
  121. package/dist/rules/requireProperty.cjs +10 -2
  122. package/dist/rules/requireProperty.cjs.map +1 -1
  123. package/dist/rules/requirePropertyDescription.cjs +10 -2
  124. package/dist/rules/requirePropertyDescription.cjs.map +1 -1
  125. package/dist/rules/requirePropertyName.cjs +10 -2
  126. package/dist/rules/requirePropertyName.cjs.map +1 -1
  127. package/dist/rules/requirePropertyType.cjs +10 -2
  128. package/dist/rules/requirePropertyType.cjs.map +1 -1
  129. package/dist/rules/requireRejects.cjs +9 -2
  130. package/dist/rules/requireRejects.cjs.map +1 -1
  131. package/dist/rules/requireReturns.cjs +11 -4
  132. package/dist/rules/requireReturns.cjs.map +1 -1
  133. package/dist/rules/requireReturnsCheck.cjs +15 -8
  134. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  135. package/dist/rules/requireReturnsDescription.cjs +10 -2
  136. package/dist/rules/requireReturnsDescription.cjs.map +1 -1
  137. package/dist/rules/requireReturnsType.cjs +10 -2
  138. package/dist/rules/requireReturnsType.cjs.map +1 -1
  139. package/dist/rules/requireTags.cjs +9 -2
  140. package/dist/rules/requireTags.cjs.map +1 -1
  141. package/dist/rules/requireTemplate.cjs +13 -5
  142. package/dist/rules/requireTemplate.cjs.map +1 -1
  143. package/dist/rules/requireThrows.cjs +9 -2
  144. package/dist/rules/requireThrows.cjs.map +1 -1
  145. package/dist/rules/requireYields.cjs +9 -2
  146. package/dist/rules/requireYields.cjs.map +1 -1
  147. package/dist/rules/requireYieldsCheck.cjs +9 -2
  148. package/dist/rules/requireYieldsCheck.cjs.map +1 -1
  149. package/dist/rules/sortTags.cjs +12 -4
  150. package/dist/rules/sortTags.cjs.map +1 -1
  151. package/dist/rules/tagLines.cjs +9 -2
  152. package/dist/rules/tagLines.cjs.map +1 -1
  153. package/dist/rules/textEscaping.cjs +9 -2
  154. package/dist/rules/textEscaping.cjs.map +1 -1
  155. package/dist/rules/tsMethodSignatureStyle.cjs +18 -10
  156. package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
  157. package/dist/rules/tsNoEmptyObjectType.cjs +13 -5
  158. package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
  159. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +16 -8
  160. package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
  161. package/dist/rules/tsPreferFunctionType.cjs +16 -8
  162. package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
  163. package/dist/rules/typeFormatting.cjs +17 -9
  164. package/dist/rules/typeFormatting.cjs.map +1 -1
  165. package/dist/rules/validTypes.cjs +18 -10
  166. package/dist/rules/validTypes.cjs.map +1 -1
  167. package/dist/tagNames.cjs +9 -4
  168. package/dist/tagNames.cjs.map +1 -1
  169. package/dist/utils/hasReturnValue.cjs +8 -1
  170. package/dist/utils/hasReturnValue.cjs.map +1 -1
  171. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"exportParser.cjs","names":[],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* c8 ignore next 3 */\n if (!symbol) {\n return null;\n }\n\n /* c8 ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* c8 ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* c8 ignore next 3 */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n /* c8 ignore next 4 -- No longer needed? */\n case 'ArrowFunctionExpression':\n\n // Fallthrough\n case 'ClassDeclaration':\n\n case 'FunctionDeclaration':\n\n case 'FunctionExpression':\n case 'TSEnumDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n // StaticBlock\n if (!('key' in method)) {\n continue;\n }\n\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* c8 ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n /* c8 ignore next 11 */\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n /* c8 ignore next 2 */\n return null;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n\n // typescript-eslint, espree, acorn, etc.\n 'SpreadElement',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* c8 ignore next 8 */\n if (propVal) {\n val.props[\n /** @type {import('estree').Identifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* c8 ignore next 3 */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'FunctionDeclaration': case 'TSEnumDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* c8 ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* c8 ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n }\n};\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* c8 ignore next */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n /* c8 ignore next 6 */\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'FunctionDeclaration':\n\n case 'TSTypeAliasDeclaration': {\n /* c8 ignore next 10 */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n default: {\n /* c8 ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* c8 ignore next 5 */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n /** @type {import('eslint').Rule.Node|null} */\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'ClassProperty',\n 'Method',\n 'PropertyDefinition',\n 'TSMethodSignature',\n 'TSPropertySignature',\n]);\n\nconst canExportChildrenType = new Set([\n 'ClassBody',\n 'ClassDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeAliasDeclaration',\n 'TSTypeLiteral',\n 'TSTypeParameterInstantiation',\n 'TSTypeReference',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* c8 ignore next 3 */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* c8 ignore next 6 */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'MethodDefinition',\n 'PropertyDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst isPrivate = (node) => {\n return accessibilityNodes.has(node.type) &&\n (\n 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined\n ) ||\n 'key' in node &&\n node.key.type === 'PrivateIdentifier';\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (isPrivate(node) ||\n node.parent && isPrivate(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"exportParser.cjs","names":["debugModule","findJSDocComment"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* c8 ignore next 3 */\n if (!symbol) {\n return null;\n }\n\n /* c8 ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* c8 ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* c8 ignore next 3 */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n /* c8 ignore next 4 -- No longer needed? */\n case 'ArrowFunctionExpression':\n\n // Fallthrough\n case 'ClassDeclaration':\n\n case 'FunctionDeclaration':\n\n case 'FunctionExpression':\n case 'TSEnumDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n // StaticBlock\n if (!('key' in method)) {\n continue;\n }\n\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* c8 ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n /* c8 ignore next 11 */\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n /* c8 ignore next 2 */\n return null;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n\n // typescript-eslint, espree, acorn, etc.\n 'SpreadElement',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* c8 ignore next 8 */\n if (propVal) {\n val.props[\n /** @type {import('estree').Identifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* c8 ignore next 3 */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'ClassDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'FunctionDeclaration': case 'TSEnumDeclaration':\n /* c8 ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSInterfaceDeclaration': case 'TSTypeAliasDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* c8 ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* c8 ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n /* c8 ignore next 3 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n }\n};\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* c8 ignore next */\n const opts = opt || {};\n /* c8 ignore next */\n switch (node.type) {\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n /* c8 ignore next 6 */\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* c8 ignore next 3 */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'FunctionDeclaration':\n\n case 'TSTypeAliasDeclaration': {\n /* c8 ignore next 10 */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n default: {\n /* c8 ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* c8 ignore next 5 */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n /** @type {import('eslint').Rule.Node|null} */\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'ClassProperty',\n 'Method',\n 'PropertyDefinition',\n 'TSMethodSignature',\n 'TSPropertySignature',\n]);\n\nconst canExportChildrenType = new Set([\n 'ClassBody',\n 'ClassDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeAliasDeclaration',\n 'TSTypeLiteral',\n 'TSTypeParameterInstantiation',\n 'TSTypeReference',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* c8 ignore next 3 */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* c8 ignore next 6 */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'MethodDefinition',\n 'PropertyDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst isPrivate = (node) => {\n return accessibilityNodes.has(node.type) &&\n (\n 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined\n ) ||\n 'key' in node &&\n node.key.type === 'PrivateIdentifier';\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (isPrivate(node) ||\n node.parent && isPrivate(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,19 @@
1
- /**
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _index = _interopRequireDefault(require("../index.cjs"));
8
+ var _decamelize = _interopRequireDefault(require("decamelize"));
9
+ var _gitdown = _interopRequireDefault(require("gitdown"));
10
+ var _glob = require("glob");
11
+ var _nodeFs = _interopRequireDefault(require("node:fs"));
12
+ var _nodePath = _interopRequireDefault(require("node:path"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /**
2
15
  * This script is used to inline assertions into the README.md documents.
3
16
  */
4
- import plugin from '../index.js';
5
- import decamelize from 'decamelize';
6
- import Gitdown from 'gitdown';
7
- import { glob } from 'glob';
8
- import fs from 'node:fs';
9
- import path from 'node:path';
10
17
  const dirname = __dirname;
11
18
 
12
19
  /**
@@ -53,11 +60,11 @@ const formatCodeSnippet = (setup, ruleName) => {
53
60
  return paragraphs.join('\n');
54
61
  };
55
62
  const getAssertions = async () => {
56
- const assertionFiles = (await glob(path.resolve(dirname, '../../test/rules/assertions/*.js'))).filter(file => {
63
+ const assertionFiles = (await (0, _glob.glob)(_nodePath.default.resolve(dirname, '../../test/rules/assertions/*.js'))).filter(file => {
57
64
  return !file.includes('flatConfig');
58
65
  }).toReversed();
59
66
  const assertionNames = assertionFiles.map(filePath => {
60
- return path.basename(filePath, '.js');
67
+ return _nodePath.default.basename(filePath, '.js');
61
68
  });
62
69
  const assertionCodes = await Promise.all(assertionFiles.map(async (filePath, idx) => {
63
70
  /**
@@ -66,8 +73,8 @@ const getAssertions = async () => {
66
73
  * valid: (import('eslint').RuleTester.ValidTestCase & {ignoreReadme?: true})[]
67
74
  * }}
68
75
  */
69
- const codes = (await import(filePath)).default;
70
- const ruleName = decamelize(assertionNames[idx], {
76
+ const codes = (await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(filePath)).default;
77
+ const ruleName = (0, _decamelize.default)(assertionNames[idx], {
71
78
  separator: '-'
72
79
  });
73
80
  return {
@@ -95,7 +102,7 @@ const getAssertions = async () => {
95
102
  };
96
103
  };
97
104
  const getSomeBranch = () => {
98
- const gitConfig = fs.readFileSync(path.join(dirname, '../../.git/config')).toString();
105
+ const gitConfig = _nodeFs.default.readFileSync(_nodePath.default.join(dirname, '../../.git/config')).toString();
99
106
  const [, branch] = /\[branch "([^"]+)"\]/v.exec(gitConfig) || [];
100
107
  return branch;
101
108
  };
@@ -103,7 +110,7 @@ const getSomeBranch = () => {
103
110
  // Scan the directory for these instead?
104
111
  const extraFiles = ['settings.md', 'advanced.md', 'processors.md', 'README.md'];
105
112
  const otherPaths = extraFiles.map(extraFile => {
106
- return path.join(dirname, '..', '..', '.README', extraFile);
113
+ return _nodePath.default.join(dirname, '..', '..', '.README', extraFile);
107
114
  });
108
115
  const generateDocs = async () => {
109
116
  const {
@@ -122,30 +129,30 @@ const generateDocs = async () => {
122
129
  */
123
130
  const tableRows = [];
124
131
  const docContents = await Promise.all([...assertionNames.map(assertionName => {
125
- const decamelized = decamelize(assertionName, {
132
+ const decamelized = (0, _decamelize.default)(assertionName, {
126
133
  separator: '-'
127
134
  });
128
135
  schemas.push(/** @type {import('json-schema').JSONSchema4[]} */
129
- plugin.rules?.[decamelized].meta?.schema);
130
- const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description;
136
+ _index.default.rules?.[decamelized].meta?.schema);
137
+ const ruleDescription = _index.default.rules?.[decamelized]?.meta?.docs?.description;
131
138
  if (ruleDescription === undefined) {
132
139
  throw new Error(`Rule ${assertionName} missing description`);
133
140
  }
134
- const fixable = plugin.rules?.[decamelized]?.meta?.fixable ?? null;
135
- const recommended = plugin.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off';
136
- const tsRecommended = plugin.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off';
137
- const tsRecommendedFlavor = plugin.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off';
141
+ const fixable = _index.default.rules?.[decamelized]?.meta?.fixable ?? null;
142
+ const recommended = _index.default.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off';
143
+ const tsRecommended = _index.default.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off';
144
+ const tsRecommendedFlavor = _index.default.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off';
138
145
  tableRows.push({
139
146
  decamelized,
140
147
  row: `|${recommended ? tsRecommended && tsRecommendedFlavor ? ':heavy_check_mark:' : ':heavy_check_mark: (' + (tsRecommended ? 'On in TS' : 'Off in TS') + '; ' + (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') + ')' : tsRecommended || tsRecommendedFlavor ? (tsRecommended ? 'On in TS' : 'Off in TS') + '; ' + (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') : ''}|${fixable ? ':wrench:' : ''}| [${decamelized}](./docs/rules/${decamelized}.md#readme) | ${ruleDescription} |`
141
148
  });
142
- return path.join(dirname, '..', '..', '.README', 'rules', decamelized + '.md');
149
+ return _nodePath.default.join(dirname, '..', '..', '.README', 'rules', decamelized + '.md');
143
150
  }), ...otherPaths].map(async (docPath, idx) => {
144
- const gitdown = await Gitdown.readFile(docPath);
151
+ const gitdown = await _gitdown.default.readFile(docPath);
145
152
  gitdown.setConfig({
146
153
  gitinfo: {
147
154
  defaultBranchName: getSomeBranch() || 'master',
148
- gitPath: path.join(dirname, '../../.git')
155
+ gitPath: _nodePath.default.join(dirname, '../../.git')
149
156
  }
150
157
  });
151
158
  gitdown.registerHelper('rules-table', {
@@ -266,9 +273,9 @@ ${type === 'object' && innerSchema.properties ? '' : escapeDescription(descripti
266
273
  * @returns {string[]}
267
274
  */
268
275
  const getDocPaths = () => {
269
- const basePath = path.join(dirname, '..', '..', '.README');
270
- const writeBasePath = path.join(dirname, '..', '..', 'docs');
271
- const docPaths = /** @type {string[]} */fs.readdirSync(basePath).flatMap(docFile => {
276
+ const basePath = _nodePath.default.join(dirname, '..', '..', '.README');
277
+ const writeBasePath = _nodePath.default.join(dirname, '..', '..', 'docs');
278
+ const docPaths = /** @type {string[]} */_nodeFs.default.readdirSync(basePath).flatMap(docFile => {
272
279
  if (extraFiles.includes(docFile)) {
273
280
  // Will get path separately below
274
281
  return null;
@@ -276,16 +283,16 @@ const getDocPaths = () => {
276
283
  if (docFile === '.DS_Store') {
277
284
  return null;
278
285
  }
279
- const innerBasePath = path.join(basePath, docFile);
280
- const writeInnerBasePath = path.join(writeBasePath, docFile);
281
- const stat = fs.statSync(innerBasePath);
286
+ const innerBasePath = _nodePath.default.join(basePath, docFile);
287
+ const writeInnerBasePath = _nodePath.default.join(writeBasePath, docFile);
288
+ const stat = _nodeFs.default.statSync(innerBasePath);
282
289
  if (stat.isFile()) {
283
290
  // Currently settings and advanced
284
291
  return writeInnerBasePath;
285
292
  }
286
293
  if (stat.isDirectory()) {
287
- return fs.readdirSync(innerBasePath).map(innerDocFile => {
288
- return path.join(writeInnerBasePath, innerDocFile);
294
+ return _nodeFs.default.readdirSync(innerBasePath).map(innerDocFile => {
295
+ return _nodePath.default.join(writeInnerBasePath, innerDocFile);
289
296
  }).toSorted((a, b) => {
290
297
  const newA = a.replace(/\.md/v, '');
291
298
  const newB = b.replace(/\.md/v, '');
@@ -295,21 +302,21 @@ const getDocPaths = () => {
295
302
  return null;
296
303
  }).filter(Boolean);
297
304
  return [...docPaths, ...extraFiles.slice(0, -1).map(extraFile => {
298
- return path.join(dirname, '..', '..', 'docs', extraFile);
299
- }), path.join(dirname, '..', '..', 'README.md')];
305
+ return _nodePath.default.join(dirname, '..', '..', 'docs', extraFile);
306
+ }), _nodePath.default.join(dirname, '..', '..', 'README.md')];
300
307
  };
301
308
  const generateDocsAndWriteToDisk = async () => {
302
309
  const [docContents, docPaths] = await Promise.all([generateDocs(), getDocPaths()]);
303
310
  for (const [idx, docContent] of docContents.entries()) {
304
311
  const destPath = docPaths[idx];
305
- fs.writeFileSync(destPath, docContent);
312
+ _nodeFs.default.writeFileSync(destPath, docContent);
306
313
  }
307
314
  };
308
315
  const assertDocsAreUpToDate = async () => {
309
316
  const [docContents, docPaths] = await Promise.all([generateDocs(), getDocPaths()]);
310
317
  for (const [idx, docContent] of docContents.entries()) {
311
318
  const docPath = docPaths[idx];
312
- const isUpToDate = fs.readFileSync(docPath, 'utf8') === docContent;
319
+ const isUpToDate = _nodeFs.default.readFileSync(docPath, 'utf8') === docContent;
313
320
  if (!isUpToDate) {
314
321
  throw new Error('Docs are not up to date, please run `pnpm run create-docs` to update it.');
315
322
  }
@@ -330,5 +337,6 @@ const main = async () => {
330
337
  }
331
338
  };
332
339
  main();
333
- export default generateDocs;
340
+ var _default = exports.default = generateDocs;
341
+ module.exports = exports.default;
334
342
  //# sourceMappingURL=generateDocs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateDocs.cjs","names":[],"sources":["../src/bin/generateDocs.js"],"sourcesContent":["/**\n * This script is used to inline assertions into the README.md documents.\n */\nimport plugin from '../index.js';\nimport decamelize from 'decamelize';\nimport Gitdown from 'gitdown';\nimport {\n glob,\n} from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst dirname = import.meta.dirname;\n\n/**\n * @param {string} str\n */\nconst escapeDescription = (str) => {\n return str.replaceAll(/(?<!`|\\* +|'|\\/\\/ )@\\w+/gv, '<code>$&</code>');\n};\n\n/**\n * @param {string} code\n * @returns {string}\n */\nconst trimCode = (code) => {\n let lines = code.replace(/^\\n/v, '').trimEnd().split('\\n');\n\n const firsLineIndentation = lines[0].match(/^\\s+/v);\n const lastLineIndentation = lines[lines.length - 1].match(/^\\s+/v);\n\n const firstIndentSize = firsLineIndentation ? firsLineIndentation[0].length : 0;\n const lastIndentSize = lastLineIndentation ? lastLineIndentation[0].length : 0;\n\n lines = lines.map((line, index) => {\n const lineIndentSize = firstIndentSize !== 0 || index === 0 ?\n Math.min(firstIndentSize, lastIndentSize) :\n lastIndentSize;\n\n return line.slice(lineIndentSize);\n });\n\n return lines.join('\\n').replaceAll('\\r', '\\\\r');\n};\n\n/**\n * @param {import('eslint').RuleTester.InvalidTestCase|import('eslint').RuleTester.ValidTestCase} setup\n * @param {string} ruleName\n * @returns {string}\n */\nconst formatCodeSnippet = (setup, ruleName) => {\n const paragraphs = [];\n\n paragraphs.push(trimCode(setup.code));\n\n if (setup.settings) {\n paragraphs.push(`// Settings: ${JSON.stringify(setup.settings)}`);\n }\n\n if (setup.options) {\n paragraphs.push(`// \"jsdoc/${ruleName}\": [\"error\"|\"warn\", ${JSON.stringify(setup.options).slice(1)}`);\n }\n\n if ('errors' in setup) {\n paragraphs.push(`// Message: ${\n /** @type {Array<import('eslint').RuleTester.TestCaseError>} */ (\n setup.errors\n )[0].message}`);\n }\n\n return paragraphs.join('\\n');\n};\n\nconst getAssertions = async () => {\n const assertionFiles = (await glob(path.resolve(dirname, '../../test/rules/assertions/*.js'))).filter((file) => {\n return !file.includes('flatConfig');\n }).toReversed();\n\n const assertionNames = assertionFiles.map((filePath) => {\n return path.basename(filePath, '.js');\n });\n\n const assertionCodes = await Promise.all(assertionFiles.map(async (filePath, idx) => {\n /**\n * @type {{\n * invalid: (import('eslint').RuleTester.InvalidTestCase & {ignoreReadme?: true})[],\n * valid: (import('eslint').RuleTester.ValidTestCase & {ignoreReadme?: true})[]\n * }}\n */\n const codes = (await import(filePath)).default;\n\n const ruleName = decamelize(assertionNames[idx], {\n separator: '-',\n });\n\n return {\n invalid: codes.invalid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n valid: codes.valid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n };\n }));\n\n return {\n assertionNames,\n assertions: Object.fromEntries(assertionNames.map((assertionName, index) => {\n return [\n assertionName, assertionCodes[index],\n ];\n })),\n };\n};\n\nconst getSomeBranch = () => {\n const gitConfig = fs.readFileSync(path.join(dirname, '../../.git/config')).toString();\n const [\n , branch,\n ] = /\\[branch \"([^\"]+)\"\\]/v.exec(gitConfig) || [];\n\n return branch;\n};\n\n// Scan the directory for these instead?\nconst extraFiles = [\n 'settings.md',\n 'advanced.md',\n 'processors.md',\n 'README.md',\n];\n\nconst otherPaths = extraFiles.map((extraFile) => {\n return path.join(dirname, '..', '..', '.README', extraFile);\n});\n\nconst generateDocs = async () => {\n const {\n assertionNames,\n assertions,\n } = await getAssertions();\n\n /** @type {import('json-schema').JSONSchema4[][]} */\n const schemas = [];\n\n /**\n * @type {{\n * decamelized: string,\n * row: string\n * }[]}\n */\n const tableRows = [];\n\n const docContents = await Promise.all([\n ...assertionNames.map((assertionName) => {\n const decamelized = decamelize(assertionName, {\n separator: '-',\n });\n schemas.push(\n /** @type {import('json-schema').JSONSchema4[]} */\n (plugin.rules?.[decamelized].meta?.schema),\n );\n const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description;\n if (ruleDescription === undefined) {\n throw new Error(`Rule ${assertionName} missing description`);\n }\n\n const fixable = plugin.rules?.[decamelized]?.meta?.fixable ?? null;\n\n const recommended = plugin.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommended = plugin.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommendedFlavor = plugin.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off';\n\n tableRows.push({\n decamelized,\n row: `|${\n recommended ?\n (tsRecommended && tsRecommendedFlavor ?\n ':heavy_check_mark:' :\n ':heavy_check_mark: (' + (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') +\n ')'\n ) :\n (tsRecommended || tsRecommendedFlavor ?\n (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') :\n '')\n }|${fixable ? ':wrench:' : ''}| [${decamelized}](./docs/rules/${decamelized}.md#readme) | ${ruleDescription} |`,\n });\n\n return path.join(\n dirname, '..', '..', '.README', 'rules', decamelized + '.md',\n );\n }),\n ...otherPaths,\n ].map(async (docPath, idx) => {\n const gitdown = await Gitdown.readFile(docPath);\n\n gitdown.setConfig({\n gitinfo: {\n defaultBranchName: getSomeBranch() || 'master',\n gitPath: path.join(dirname, '../../.git'),\n },\n });\n\n gitdown.registerHelper('rules-table', {\n compile () {\n return tableRows.toSorted(({\n decamelized,\n }, {\n decamelized: dc,\n }) => {\n return decamelized < dc ? -1 : (decamelized > dc ? 1 : 0);\n }).map(({\n row,\n }) => {\n return row;\n }).join('\\n');\n },\n });\n\n gitdown.registerHelper('options', {\n compile () {\n if (!schemas[idx]) {\n return '';\n }\n\n /**\n * @param {import('json-schema').JSONSchema4} schema\n * @param {number} jIdx\n * @param {import('json-schema').JSONSchema4[]} arr\n * @param {number} [nesting]\n */\n const convertFromSchema = (schema, jIdx, arr, nesting = 3) => {\n let ret = '';\n switch (schema.type) {\n case 'array':\n ret += convertFromSchema(\n /** @type {import('json-schema').JSONSchema4} */ (schema.items),\n 0,\n [],\n nesting + 1,\n );\n break;\n case 'object':\n if (!schema.properties) {\n break;\n }\n\n if (jIdx === 0) {\n ret += (nesting > 3 ? '\\n' : '') + (arr.length <= 1 ? 'A single' : 'An') +\n ' options object has the following properties.\\n';\n } else {\n ret += '\\n\\nThe next option is an object with the following properties.\\n';\n }\n\n if (schema.description) {\n ret += `\\n${escapeDescription(schema.description)}\\n`;\n }\n\n for (const [\n property,\n innerSchema,\n ] of Object.entries(schema.properties)) {\n const {\n description,\n type,\n } = innerSchema;\n if (!description) {\n throw new Error(\n 'Missing description for property ' + property + ' for rule ' + assertionNames[idx] + ' with schema ' + JSON.stringify(innerSchema),\n );\n }\n\n ret += '\\n' + '#'.repeat(nesting) + ` \\`${property}\\`\n\n${type === 'object' && innerSchema.properties ? '' : escapeDescription(description) + '\\n'}`;\n if (type === 'object' || type === 'array') {\n ret += convertFromSchema(innerSchema, 0, [], nesting + 1);\n }\n }\n\n break;\n case 'string':\n if (jIdx !== 0) {\n throw new Error('Unexpected string schema');\n }\n\n // If a simple string, should be documented by parent\n if (schema.enum) {\n ret += 'The first option is a string with the following possible values: ';\n ret += schema.enum?.map((val) => {\n return `\"${val}\"`;\n }).join(', ') + '.\\n';\n }\n\n if (schema.description) {\n ret += escapeDescription(schema.description);\n }\n\n break;\n default:\n // Describe on parent object\n if (schema.anyOf) {\n break;\n }\n\n throw new Error('Unrecognized type ' + schema.type + ' for schema: ' +\n JSON.stringify(schema));\n }\n\n return ret;\n };\n\n return schemas[idx].map((schema, jIdx, arr) => {\n return convertFromSchema(schema, jIdx, arr);\n }).join('');\n },\n });\n\n return gitdown.get();\n }));\n\n return docContents.map((docContent) => {\n return docContent.replaceAll(\n /<!-- assertions-(passing|failing) ([a-z]+?) -->/gvi,\n /**\n * @param {string} _assertionsBlock\n * @param {string} passingFailing\n * @param {string} ruleName\n * @returns {string}\n */\n (_assertionsBlock, passingFailing, ruleName) => {\n const ruleAssertions = assertions[ruleName];\n\n if (!ruleAssertions) {\n throw new Error(`No assertions available for rule \"${ruleName}\".`);\n }\n\n return passingFailing === 'failing' ?\n 'The following patterns are considered problems:\\n\\n````ts\\n' +\n ruleAssertions.invalid.join('\\n\\n') + '\\n````\\n\\n' :\n 'The following patterns are not considered problems:\\n\\n````ts\\n' +\n ruleAssertions.valid.join('\\n\\n') + '\\n````\\n';\n },\n // Allow relative paths in source for #902 but generate compiled file in\n // manner compatible with GitHub and npmjs.com\n ).replaceAll('(../#', '(#user-content-eslint-plugin-jsdoc-');\n });\n};\n\n/**\n * @returns {string[]}\n */\nconst getDocPaths = () => {\n const basePath = path.join(dirname, '..', '..', '.README');\n const writeBasePath = path.join(dirname, '..', '..', 'docs');\n const docPaths = /** @type {string[]} */ (fs.readdirSync(basePath).flatMap((docFile) => {\n if (extraFiles.includes(docFile)) {\n // Will get path separately below\n return null;\n }\n\n if (docFile === '.DS_Store') {\n return null;\n }\n\n const innerBasePath = path.join(basePath, docFile);\n const writeInnerBasePath = path.join(writeBasePath, docFile);\n const stat = fs.statSync(innerBasePath);\n if (stat.isFile()) {\n // Currently settings and advanced\n return writeInnerBasePath;\n }\n\n if (stat.isDirectory()) {\n return fs.readdirSync(innerBasePath).map((innerDocFile) => {\n return path.join(writeInnerBasePath, innerDocFile);\n }).toSorted((a, b) => {\n const newA = a.replace(/\\.md/v, '');\n const newB = b.replace(/\\.md/v, '');\n return newA < newB ? -1 : (newB > newA ? 1 : 0);\n });\n }\n\n return null;\n }).filter(Boolean));\n\n return [\n ...docPaths,\n ...extraFiles.slice(0, -1).map((extraFile) => {\n return path.join(dirname, '..', '..', 'docs', extraFile);\n }),\n path.join(dirname, '..', '..', 'README.md'),\n ];\n};\n\nconst generateDocsAndWriteToDisk = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const destPath = docPaths[idx];\n fs.writeFileSync(destPath, docContent);\n }\n};\n\nconst assertDocsAreUpToDate = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const docPath = docPaths[idx];\n const isUpToDate = fs.readFileSync(docPath, 'utf8') === docContent;\n\n if (!isUpToDate) {\n throw new Error('Docs are not up to date, please run `pnpm run create-docs` to update it.');\n }\n }\n};\n\nconst main = async () => {\n try {\n const hasCheckFlag = process.argv.includes('--check');\n\n if (hasCheckFlag) {\n await assertDocsAreUpToDate();\n } else {\n await generateDocsAndWriteToDisk();\n }\n } catch (error) {\n /* eslint-disable-next-line no-console */\n console.error(error);\n\n process.exit(1);\n }\n};\n\nmain();\n\nexport default generateDocs;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateDocs.cjs","names":["glob","path","decamelize","fs","plugin","Gitdown"],"sources":["../src/bin/generateDocs.js"],"sourcesContent":["/**\n * This script is used to inline assertions into the README.md documents.\n */\nimport plugin from '../index.js';\nimport decamelize from 'decamelize';\nimport Gitdown from 'gitdown';\nimport {\n glob,\n} from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst dirname = import.meta.dirname;\n\n/**\n * @param {string} str\n */\nconst escapeDescription = (str) => {\n return str.replaceAll(/(?<!`|\\* +|'|\\/\\/ )@\\w+/gv, '<code>$&</code>');\n};\n\n/**\n * @param {string} code\n * @returns {string}\n */\nconst trimCode = (code) => {\n let lines = code.replace(/^\\n/v, '').trimEnd().split('\\n');\n\n const firsLineIndentation = lines[0].match(/^\\s+/v);\n const lastLineIndentation = lines[lines.length - 1].match(/^\\s+/v);\n\n const firstIndentSize = firsLineIndentation ? firsLineIndentation[0].length : 0;\n const lastIndentSize = lastLineIndentation ? lastLineIndentation[0].length : 0;\n\n lines = lines.map((line, index) => {\n const lineIndentSize = firstIndentSize !== 0 || index === 0 ?\n Math.min(firstIndentSize, lastIndentSize) :\n lastIndentSize;\n\n return line.slice(lineIndentSize);\n });\n\n return lines.join('\\n').replaceAll('\\r', '\\\\r');\n};\n\n/**\n * @param {import('eslint').RuleTester.InvalidTestCase|import('eslint').RuleTester.ValidTestCase} setup\n * @param {string} ruleName\n * @returns {string}\n */\nconst formatCodeSnippet = (setup, ruleName) => {\n const paragraphs = [];\n\n paragraphs.push(trimCode(setup.code));\n\n if (setup.settings) {\n paragraphs.push(`// Settings: ${JSON.stringify(setup.settings)}`);\n }\n\n if (setup.options) {\n paragraphs.push(`// \"jsdoc/${ruleName}\": [\"error\"|\"warn\", ${JSON.stringify(setup.options).slice(1)}`);\n }\n\n if ('errors' in setup) {\n paragraphs.push(`// Message: ${\n /** @type {Array<import('eslint').RuleTester.TestCaseError>} */ (\n setup.errors\n )[0].message}`);\n }\n\n return paragraphs.join('\\n');\n};\n\nconst getAssertions = async () => {\n const assertionFiles = (await glob(path.resolve(dirname, '../../test/rules/assertions/*.js'))).filter((file) => {\n return !file.includes('flatConfig');\n }).toReversed();\n\n const assertionNames = assertionFiles.map((filePath) => {\n return path.basename(filePath, '.js');\n });\n\n const assertionCodes = await Promise.all(assertionFiles.map(async (filePath, idx) => {\n /**\n * @type {{\n * invalid: (import('eslint').RuleTester.InvalidTestCase & {ignoreReadme?: true})[],\n * valid: (import('eslint').RuleTester.ValidTestCase & {ignoreReadme?: true})[]\n * }}\n */\n const codes = (await import(filePath)).default;\n\n const ruleName = decamelize(assertionNames[idx], {\n separator: '-',\n });\n\n return {\n invalid: codes.invalid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n valid: codes.valid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n };\n }));\n\n return {\n assertionNames,\n assertions: Object.fromEntries(assertionNames.map((assertionName, index) => {\n return [\n assertionName, assertionCodes[index],\n ];\n })),\n };\n};\n\nconst getSomeBranch = () => {\n const gitConfig = fs.readFileSync(path.join(dirname, '../../.git/config')).toString();\n const [\n , branch,\n ] = /\\[branch \"([^\"]+)\"\\]/v.exec(gitConfig) || [];\n\n return branch;\n};\n\n// Scan the directory for these instead?\nconst extraFiles = [\n 'settings.md',\n 'advanced.md',\n 'processors.md',\n 'README.md',\n];\n\nconst otherPaths = extraFiles.map((extraFile) => {\n return path.join(dirname, '..', '..', '.README', extraFile);\n});\n\nconst generateDocs = async () => {\n const {\n assertionNames,\n assertions,\n } = await getAssertions();\n\n /** @type {import('json-schema').JSONSchema4[][]} */\n const schemas = [];\n\n /**\n * @type {{\n * decamelized: string,\n * row: string\n * }[]}\n */\n const tableRows = [];\n\n const docContents = await Promise.all([\n ...assertionNames.map((assertionName) => {\n const decamelized = decamelize(assertionName, {\n separator: '-',\n });\n schemas.push(\n /** @type {import('json-schema').JSONSchema4[]} */\n (plugin.rules?.[decamelized].meta?.schema),\n );\n const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description;\n if (ruleDescription === undefined) {\n throw new Error(`Rule ${assertionName} missing description`);\n }\n\n const fixable = plugin.rules?.[decamelized]?.meta?.fixable ?? null;\n\n const recommended = plugin.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommended = plugin.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommendedFlavor = plugin.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off';\n\n tableRows.push({\n decamelized,\n row: `|${\n recommended ?\n (tsRecommended && tsRecommendedFlavor ?\n ':heavy_check_mark:' :\n ':heavy_check_mark: (' + (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') +\n ')'\n ) :\n (tsRecommended || tsRecommendedFlavor ?\n (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') :\n '')\n }|${fixable ? ':wrench:' : ''}| [${decamelized}](./docs/rules/${decamelized}.md#readme) | ${ruleDescription} |`,\n });\n\n return path.join(\n dirname, '..', '..', '.README', 'rules', decamelized + '.md',\n );\n }),\n ...otherPaths,\n ].map(async (docPath, idx) => {\n const gitdown = await Gitdown.readFile(docPath);\n\n gitdown.setConfig({\n gitinfo: {\n defaultBranchName: getSomeBranch() || 'master',\n gitPath: path.join(dirname, '../../.git'),\n },\n });\n\n gitdown.registerHelper('rules-table', {\n compile () {\n return tableRows.toSorted(({\n decamelized,\n }, {\n decamelized: dc,\n }) => {\n return decamelized < dc ? -1 : (decamelized > dc ? 1 : 0);\n }).map(({\n row,\n }) => {\n return row;\n }).join('\\n');\n },\n });\n\n gitdown.registerHelper('options', {\n compile () {\n if (!schemas[idx]) {\n return '';\n }\n\n /**\n * @param {import('json-schema').JSONSchema4} schema\n * @param {number} jIdx\n * @param {import('json-schema').JSONSchema4[]} arr\n * @param {number} [nesting]\n */\n const convertFromSchema = (schema, jIdx, arr, nesting = 3) => {\n let ret = '';\n switch (schema.type) {\n case 'array':\n ret += convertFromSchema(\n /** @type {import('json-schema').JSONSchema4} */ (schema.items),\n 0,\n [],\n nesting + 1,\n );\n break;\n case 'object':\n if (!schema.properties) {\n break;\n }\n\n if (jIdx === 0) {\n ret += (nesting > 3 ? '\\n' : '') + (arr.length <= 1 ? 'A single' : 'An') +\n ' options object has the following properties.\\n';\n } else {\n ret += '\\n\\nThe next option is an object with the following properties.\\n';\n }\n\n if (schema.description) {\n ret += `\\n${escapeDescription(schema.description)}\\n`;\n }\n\n for (const [\n property,\n innerSchema,\n ] of Object.entries(schema.properties)) {\n const {\n description,\n type,\n } = innerSchema;\n if (!description) {\n throw new Error(\n 'Missing description for property ' + property + ' for rule ' + assertionNames[idx] + ' with schema ' + JSON.stringify(innerSchema),\n );\n }\n\n ret += '\\n' + '#'.repeat(nesting) + ` \\`${property}\\`\n\n${type === 'object' && innerSchema.properties ? '' : escapeDescription(description) + '\\n'}`;\n if (type === 'object' || type === 'array') {\n ret += convertFromSchema(innerSchema, 0, [], nesting + 1);\n }\n }\n\n break;\n case 'string':\n if (jIdx !== 0) {\n throw new Error('Unexpected string schema');\n }\n\n // If a simple string, should be documented by parent\n if (schema.enum) {\n ret += 'The first option is a string with the following possible values: ';\n ret += schema.enum?.map((val) => {\n return `\"${val}\"`;\n }).join(', ') + '.\\n';\n }\n\n if (schema.description) {\n ret += escapeDescription(schema.description);\n }\n\n break;\n default:\n // Describe on parent object\n if (schema.anyOf) {\n break;\n }\n\n throw new Error('Unrecognized type ' + schema.type + ' for schema: ' +\n JSON.stringify(schema));\n }\n\n return ret;\n };\n\n return schemas[idx].map((schema, jIdx, arr) => {\n return convertFromSchema(schema, jIdx, arr);\n }).join('');\n },\n });\n\n return gitdown.get();\n }));\n\n return docContents.map((docContent) => {\n return docContent.replaceAll(\n /<!-- assertions-(passing|failing) ([a-z]+?) -->/gvi,\n /**\n * @param {string} _assertionsBlock\n * @param {string} passingFailing\n * @param {string} ruleName\n * @returns {string}\n */\n (_assertionsBlock, passingFailing, ruleName) => {\n const ruleAssertions = assertions[ruleName];\n\n if (!ruleAssertions) {\n throw new Error(`No assertions available for rule \"${ruleName}\".`);\n }\n\n return passingFailing === 'failing' ?\n 'The following patterns are considered problems:\\n\\n````ts\\n' +\n ruleAssertions.invalid.join('\\n\\n') + '\\n````\\n\\n' :\n 'The following patterns are not considered problems:\\n\\n````ts\\n' +\n ruleAssertions.valid.join('\\n\\n') + '\\n````\\n';\n },\n // Allow relative paths in source for #902 but generate compiled file in\n // manner compatible with GitHub and npmjs.com\n ).replaceAll('(../#', '(#user-content-eslint-plugin-jsdoc-');\n });\n};\n\n/**\n * @returns {string[]}\n */\nconst getDocPaths = () => {\n const basePath = path.join(dirname, '..', '..', '.README');\n const writeBasePath = path.join(dirname, '..', '..', 'docs');\n const docPaths = /** @type {string[]} */ (fs.readdirSync(basePath).flatMap((docFile) => {\n if (extraFiles.includes(docFile)) {\n // Will get path separately below\n return null;\n }\n\n if (docFile === '.DS_Store') {\n return null;\n }\n\n const innerBasePath = path.join(basePath, docFile);\n const writeInnerBasePath = path.join(writeBasePath, docFile);\n const stat = fs.statSync(innerBasePath);\n if (stat.isFile()) {\n // Currently settings and advanced\n return writeInnerBasePath;\n }\n\n if (stat.isDirectory()) {\n return fs.readdirSync(innerBasePath).map((innerDocFile) => {\n return path.join(writeInnerBasePath, innerDocFile);\n }).toSorted((a, b) => {\n const newA = a.replace(/\\.md/v, '');\n const newB = b.replace(/\\.md/v, '');\n return newA < newB ? -1 : (newB > newA ? 1 : 0);\n });\n }\n\n return null;\n }).filter(Boolean));\n\n return [\n ...docPaths,\n ...extraFiles.slice(0, -1).map((extraFile) => {\n return path.join(dirname, '..', '..', 'docs', extraFile);\n }),\n path.join(dirname, '..', '..', 'README.md'),\n ];\n};\n\nconst generateDocsAndWriteToDisk = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const destPath = docPaths[idx];\n fs.writeFileSync(destPath, docContent);\n }\n};\n\nconst assertDocsAreUpToDate = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const docPath = docPaths[idx];\n const isUpToDate = fs.readFileSync(docPath, 'utf8') === docContent;\n\n if (!isUpToDate) {\n throw new Error('Docs are not up to date, please run `pnpm run create-docs` to update it.');\n }\n }\n};\n\nconst main = async () => {\n try {\n const hasCheckFlag = process.argv.includes('--check');\n\n if (hasCheckFlag) {\n await assertDocsAreUpToDate();\n } else {\n await generateDocsAndWriteToDisk();\n }\n } catch (error) {\n /* eslint-disable-next-line no-console */\n console.error(error);\n\n process.exit(1);\n }\n};\n\nmain();\n\nexport default generateDocs;\n"],"mappings":"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","ignoreList":[]}
@@ -1,24 +1,27 @@
1
- import { generate } from '@es-joy/escodegen';
2
- import decamelize from 'decamelize';
3
- import { parse } from 'espree';
4
- import esquery from 'esquery';
5
- import { readdir, readFile, writeFile } from 'node:fs/promises';
6
- import { join } from 'node:path';
1
+ "use strict";
2
+
3
+ var _escodegen = require("@es-joy/escodegen");
4
+ var _decamelize = _interopRequireDefault(require("decamelize"));
5
+ var _espree = require("espree");
6
+ var _esquery = _interopRequireDefault(require("esquery"));
7
+ var _promises = require("node:fs/promises");
8
+ var _nodePath = require("node:path");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
10
  const rulesDir = './src/rules';
8
- const dirContents = await readdir(rulesDir);
11
+ const dirContents = await (0, _promises.readdir)(rulesDir);
9
12
  for (const file of dirContents) {
10
13
  if (!file.endsWith('.js')) {
11
14
  continue;
12
15
  }
13
- const fileContents = await readFile(join(rulesDir, file), 'utf8');
16
+ const fileContents = await (0, _promises.readFile)((0, _nodePath.join)(rulesDir, file), 'utf8');
14
17
  // console.log('file', file);
15
- const ast = parse(fileContents, {
18
+ const ast = (0, _espree.parse)(fileContents, {
16
19
  ecmaVersion: 2_024,
17
20
  sourceType: 'module'
18
21
  });
19
- const results = esquery.query(ast, 'ExportDefaultDeclaration[declaration.callee.name="iterateJsdoc"]' + ' Property[key.name="meta"] Property[key.name="schema"]');
22
+ const results = _esquery.default.query(ast, 'ExportDefaultDeclaration[declaration.callee.name="iterateJsdoc"]' + ' Property[key.name="meta"] Property[key.name="schema"]');
20
23
  if (results[0]?.value) {
21
- const schema = generate(results[0]?.value, {
24
+ const schema = (0, _escodegen.generate)(results[0]?.value, {
22
25
  format: {
23
26
  json: true,
24
27
  quotes: 'double'
@@ -46,14 +49,14 @@ for (const file of dirContents) {
46
49
  }
47
50
  }
48
51
  const obj = Array.isArray(parsed) ? parsed[0] : parsed;
49
- const hyphenatedRule = decamelize(file, {
52
+ const hyphenatedRule = (0, _decamelize.default)(file, {
50
53
  separator: '-'
51
54
  }).replace(/\.js$/v, '.md');
52
- const docPath = join('.README/rules', hyphenatedRule);
53
- const ruleDocs = (await readFile(docPath, 'utf8')).replace(/(\|\s*Options\s*\|)([^\|]*)(\|)?/v, `$1${initial + Object.keys(obj.properties).map(key => {
55
+ const docPath = (0, _nodePath.join)('.README/rules', hyphenatedRule);
56
+ const ruleDocs = (await (0, _promises.readFile)(docPath, 'utf8')).replace(/(\|\s*Options\s*\|)([^\|]*)(\|)?/v, `$1${initial + Object.keys(obj.properties).map(key => {
54
57
  return `\`${key}\``;
55
58
  }).join(', ')}$3`);
56
- await writeFile(docPath, ruleDocs);
59
+ await (0, _promises.writeFile)(docPath, ruleDocs);
57
60
  }
58
61
  }
59
62
  //# sourceMappingURL=generateOptions.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateOptions.cjs","names":[],"sources":["../src/bin/generateOptions.js"],"sourcesContent":["import {\n generate,\n} from '@es-joy/escodegen';\nimport decamelize from 'decamelize';\nimport {\n parse,\n} from 'espree';\nimport esquery from 'esquery';\nimport {\n readdir,\n readFile,\n writeFile,\n} from 'node:fs/promises';\nimport {\n join,\n} from 'node:path';\n\nconst rulesDir = './src/rules';\n\nconst dirContents = await readdir(rulesDir);\n\nfor (const file of dirContents) {\n if (!file.endsWith('.js')) {\n continue;\n }\n\n const fileContents = await readFile(join(rulesDir, file), 'utf8');\n // console.log('file', file);\n const ast = parse(fileContents, {\n ecmaVersion: 2_024,\n sourceType: 'module',\n });\n const results = esquery.query(\n ast,\n 'ExportDefaultDeclaration[declaration.callee.name=\"iterateJsdoc\"]' +\n ' Property[key.name=\"meta\"] Property[key.name=\"schema\"]',\n );\n if (results[0]?.value) {\n const schema = generate(results[0]?.value, {\n format: {\n json: true,\n quotes: 'double',\n },\n });\n const parsed = JSON.parse(schema);\n\n let initial = '';\n if (Array.isArray(parsed)) {\n if (!parsed.length) {\n // eslint-disable-next-line no-console -- CLI\n console.log('skipping no options', file);\n continue;\n }\n\n if (parsed.length >= 2) {\n if (parsed.length >= 3 || parsed[0].type !== 'string') {\n // eslint-disable-next-line no-console -- CLI\n console.log('unexpectedly large schema', file);\n continue;\n // throw new Error('Unexpected long schema array');\n }\n\n initial = `string (${parsed[0].enum.map((item) => {\n return `\"${item}\"`;\n }).join(', ')}) followed by object with `;\n parsed.shift();\n }\n }\n\n const obj = Array.isArray(parsed) ? parsed[0] : parsed;\n\n const hyphenatedRule = decamelize(file, {\n separator: '-',\n }).replace(/\\.js$/v, '.md');\n const docPath = join('.README/rules', hyphenatedRule);\n\n const ruleDocs = (await readFile(docPath, 'utf8'))\n .replace(/(\\|\\s*Options\\s*\\|)([^\\|]*)(\\|)?/v, `$1${\n initial +\n Object.keys(obj.properties).map((key) => {\n return `\\`${key}\\``;\n }).join(', ')\n }$3`);\n\n await writeFile(docPath, ruleDocs);\n }\n}\n"],"mappings":"AAAA,SACE,QAAQ,QACH,mBAAmB;AAC1B,OAAO,UAAU,MAAM,YAAY;AACnC,SACE,KAAK,QACA,QAAQ;AACf,OAAO,OAAO,MAAM,SAAS;AAC7B,SACE,OAAO,EACP,QAAQ,EACR,SAAS,QACJ,kBAAkB;AACzB,SACE,IAAI,QACC,WAAW;AAElB,MAAM,QAAQ,GAAG,aAAa;AAE9B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;AAE3C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;EAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB;EACF;EAEA,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;EACjE;EACA,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE;IAC9B,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE;EACd,CAAC,CAAC;EACF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAC3B,GAAG,EACH,kEAAkE,GACjE,wDACH,CAAC;EACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;MACzC,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,MAAM,EAAE;MACV;IACF,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAEjC,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB;QACA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxC;MACF;MAEA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;QACtB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;UACrD;UACA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC;UAC9C;UACA;QACF;QAEA,OAAO,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,IAAK;UAChD,OAAO,IAAI,IAAI,GAAG;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC;MAChB;IACF;IAEA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;IAEtD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE;MACtC,SAAS,EAAE;IACb,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC;IAErD,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAC9C,OAAO,CAAC,mCAAmC,EAAE,KAC5C,OAAO,GACP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAE,GAAG,IAAK;MACvC,OAAO,KAAK,GAAG,IAAI;IACrB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IACX,CAAC;IAEP,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;EACpC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"generateOptions.cjs","names":["readdir","readFile","join","parse","esquery","generate","decamelize","writeFile"],"sources":["../src/bin/generateOptions.js"],"sourcesContent":["import {\n generate,\n} from '@es-joy/escodegen';\nimport decamelize from 'decamelize';\nimport {\n parse,\n} from 'espree';\nimport esquery from 'esquery';\nimport {\n readdir,\n readFile,\n writeFile,\n} from 'node:fs/promises';\nimport {\n join,\n} from 'node:path';\n\nconst rulesDir = './src/rules';\n\nconst dirContents = await readdir(rulesDir);\n\nfor (const file of dirContents) {\n if (!file.endsWith('.js')) {\n continue;\n }\n\n const fileContents = await readFile(join(rulesDir, file), 'utf8');\n // console.log('file', file);\n const ast = parse(fileContents, {\n ecmaVersion: 2_024,\n sourceType: 'module',\n });\n const results = esquery.query(\n ast,\n 'ExportDefaultDeclaration[declaration.callee.name=\"iterateJsdoc\"]' +\n ' Property[key.name=\"meta\"] Property[key.name=\"schema\"]',\n );\n if (results[0]?.value) {\n const schema = generate(results[0]?.value, {\n format: {\n json: true,\n quotes: 'double',\n },\n });\n const parsed = JSON.parse(schema);\n\n let initial = '';\n if (Array.isArray(parsed)) {\n if (!parsed.length) {\n // eslint-disable-next-line no-console -- CLI\n console.log('skipping no options', file);\n continue;\n }\n\n if (parsed.length >= 2) {\n if (parsed.length >= 3 || parsed[0].type !== 'string') {\n // eslint-disable-next-line no-console -- CLI\n console.log('unexpectedly large schema', file);\n continue;\n // throw new Error('Unexpected long schema array');\n }\n\n initial = `string (${parsed[0].enum.map((item) => {\n return `\"${item}\"`;\n }).join(', ')}) followed by object with `;\n parsed.shift();\n }\n }\n\n const obj = Array.isArray(parsed) ? parsed[0] : parsed;\n\n const hyphenatedRule = decamelize(file, {\n separator: '-',\n }).replace(/\\.js$/v, '.md');\n const docPath = join('.README/rules', hyphenatedRule);\n\n const ruleDocs = (await readFile(docPath, 'utf8'))\n .replace(/(\\|\\s*Options\\s*\\|)([^\\|]*)(\\|)?/v, `$1${\n initial +\n Object.keys(obj.properties).map((key) => {\n return `\\`${key}\\``;\n }).join(', ')\n }$3`);\n\n await writeFile(docPath, ruleDocs);\n }\n}\n"],"mappings":";;AAAA;AAGA;AACA;AAGA;AACA;AAKA;AAEmB;AAEnB,MAAM,QAAQ,GAAG,aAAa;AAE9B,MAAM,WAAW,GAAG,MAAM,IAAAA,UAAA,OAAO,EAAC,QAAQ,CAAC;AAE3C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;EAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB;EACF;EAEA,MAAM,YAAY,GAAG,MAAM,IAAAC,UAAA,QAAQ,EAAC,IAAAC,UAAA,IAAI,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;EACjE;EACA,MAAM,GAAG,GAAG,IAAAC,QAAA,KAAK,EAAC,YAAY,EAAE;IAC9B,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE;EACd,CAAC,CAAC;EACF,MAAM,OAAO,GAAGC,gBAAO,CAAC,KAAK,CAC3B,GAAG,EACH,kEAAkE,GACjE,wDACH,CAAC;EACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IACrB,MAAM,MAAM,GAAG,IAAAC,WAAA,QAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;MACzC,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,MAAM,EAAE;MACV;IACF,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAEjC,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB;QACA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxC;MACF;MAEA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;QACtB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;UACrD;UACA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC;UAC9C;UACA;QACF;QAEA,OAAO,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,IAAK;UAChD,OAAO,IAAI,IAAI,GAAG;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC;MAChB;IACF;IAEA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;IAEtD,MAAM,cAAc,GAAG,IAAAC,mBAAU,EAAC,IAAI,EAAE;MACtC,SAAS,EAAE;IACb,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAAJ,UAAA,IAAI,EAAC,eAAe,EAAE,cAAc,CAAC;IAErD,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAAD,UAAA,QAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,EAC9C,OAAO,CAAC,mCAAmC,EAAE,KAC5C,OAAO,GACP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAE,GAAG,IAAK;MACvC,OAAO,KAAK,GAAG,IAAI;IACrB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IACX,CAAC;IAEP,MAAM,IAAAM,UAAA,SAAS,EAAC,OAAO,EAAE,QAAQ,CAAC;EACpC;AACF","ignoreList":[]}