{"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":[]}