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