{"version":3,"file":"index.mjs","sources":["../../src/core/_lib/_fileExists.ts","../../src/core/_printExtractMessages.ts","../../src/core/config/_findConfigFile.ts","../../src/core/config/_loadConfig.ts","../../src/core/config/defineConfig.ts","../../src/core/extract/defaults.ts","../../src/core/extract/apiExtractorConfig.ts","../../src/core/extract/helpers.ts","../../src/core/extract/tsDocConfig.ts","../../src/core/extract/extract.ts","../../src/core/load/helpers.ts","../../src/core/load/load.ts","../../src/core/transform/helpers.ts","../../src/core/transform/_classIsReactComponentType.ts","../../src/core/transform/_transformTokens.ts","../../src/core/transform/constants.ts","../../src/core/transform/transformDocComment.ts","../../src/core/transform/_transformParameter.ts","../../src/core/transform/_transformTypeParameter.ts","../../src/core/transform/transformClass.ts","../../src/core/transform/transformEnum.ts","../../src/core/transform/_functionIsReactComponentType.ts","../../src/core/transform/_functionIsReactHook.ts","../../src/core/transform/_functionReactComponentPropsType.ts","../../src/core/transform/transformFunction.ts","../../src/core/transform/transformInterface.ts","../../src/core/transform/transformTypeAlias.ts","../../src/core/transform/transformVariable.ts","../../src/core/transform/transformNamespace.ts","../../src/core/transform/transformExportMember.ts","../../src/core/transform/transformPackage.ts","../../src/core/transform/transform.ts"],"sourcesContent":["import {accessSync} from 'fs'\n\n/** @internal */\nexport function _fileExists(file: string): boolean {\n  try {\n    accessSync(file)\n\n    return true\n  } catch (_) {\n    return false\n  }\n}\n","/* eslint-disable no-console */\n\nimport {ExtractorMessage} from '@microsoft/api-extractor'\nimport chalk from 'chalk'\nimport path from 'path'\n\n/** @internal */\nexport function _printExtractMessages(cwd: string, messages: ExtractorMessage[]): void {\n  const warnings = messages.filter((msg) => msg.logLevel === 'warning')\n\n  for (const msg of warnings) {\n    const sourceFilePath = msg.sourceFilePath && path.relative(cwd, msg.sourceFilePath)\n\n    if (msg.messageId === 'TS6307') {\n      continue\n    }\n\n    console.log('')\n\n    console.log(\n      [\n        `${chalk.cyan(sourceFilePath || '?')}`,\n        `:${chalk.yellow(msg.sourceFileLine)}:${chalk.yellow(msg.sourceFileColumn)}`,\n        ` - ${chalk.yellow('warning')} ${chalk.gray(msg.messageId)}\\n`,\n        msg.text,\n      ].join(''),\n    )\n  }\n\n  const errors: ExtractorMessage[] = messages.filter((msg) => msg.logLevel === 'error')\n\n  for (const msg of errors) {\n    const sourceFilePath = msg.sourceFilePath && path.relative(cwd, msg.sourceFilePath)\n\n    console.log('')\n\n    console.log(\n      [\n        `${chalk.cyan(sourceFilePath || '?')}`,\n        `:${chalk.yellow(msg.sourceFileLine)}:${chalk.yellow(msg.sourceFileColumn)}`,\n        ` - ${chalk.red('error')} ${chalk.gray(msg.messageId)}\\n`,\n        msg.text,\n      ].join(''),\n    )\n  }\n}\n","import path from 'path'\n\nimport {_fileExists} from '../_lib/_fileExists'\n\nconst CONFIG_FILE_NAMES = [\n  'tsdoc.config.js',\n  'tsdoc.config.jsx',\n  'tsdoc.config.mjs',\n  'tsdoc.config.cjs',\n  'tsdoc.config.ts',\n  'tsdoc.config.tsx',\n]\n\n/** @internal */\nexport function _findConfigFile(options: {packagePath: string}): string | undefined {\n  const {packagePath} = options\n\n  for (const f of CONFIG_FILE_NAMES) {\n    const file = path.resolve(packagePath, f)\n\n    if (_fileExists(file)) return file\n  }\n\n  return undefined\n}\n","import {register} from 'esbuild-register/dist/node'\n\nimport {_findConfigFile} from './_findConfigFile'\nimport type {SanityTSDocConfigOptions} from './types'\n\ntype RegisterOptions = Exclude<Parameters<typeof register>[0], undefined>\n\n/** @internal */\nexport async function _loadConfig(options: {\n  packagePath: string\n}): Promise<SanityTSDocConfigOptions | undefined> {\n  const {packagePath} = options\n\n  const configPath = _findConfigFile({packagePath})\n\n  if (!configPath) {\n    return undefined\n  }\n\n  const esbuildOptions = {\n    jsx: 'automatic',\n    jsxFactory: 'createElement',\n    jsxFragment: 'Fragment',\n    jsxImportSource: 'react',\n    logLevel: 'silent',\n  } satisfies RegisterOptions\n\n  const {unregister} = globalThis.__DEV__ ? {unregister: () => undefined} : register(esbuildOptions)\n\n  // eslint-disable-next-line @typescript-eslint/no-var-requires\n  const config = require(configPath)\n\n  // Unregister the require hook as we don't need it anymore\n  unregister()\n\n  return config?.default || config\n}\n","import {SanityTSDocConfigOptions} from './types'\n\n/** @public */\nexport function defineConfig(config: SanityTSDocConfigOptions): SanityTSDocConfigOptions {\n  return config\n}\n","import {ExtractorLogLevel, IExtractorMessagesConfig} from '@microsoft/api-extractor'\n\nexport const DEFAULT_MESSAGES_CONFIG: IExtractorMessagesConfig = {\n  /**\n   * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing\n   * the input .d.ts files.\n   *\n   * TypeScript message identifiers start with \"TS\" followed by an integer.  For example: \"TS2551\"\n   *\n   * DEFAULT VALUE:  A single \"default\" entry with logLevel=warning.\n   */\n  compilerMessageReporting: {\n    /**\n     * Configures the default routing for messages that don't match an explicit rule in this table.\n     */\n    default: {\n      /**\n       * Specifies whether the message should be written to the the tool's output log.  Note that\n       * the \"addToApiReportFile\" property may supersede this option.\n       *\n       * Possible values: \"error\", \"warning\", \"none\"\n       *\n       * Errors cause the build to fail and return a nonzero exit code.  Warnings cause a production build fail\n       * and return a nonzero exit code.  For a non-production build (e.g. when \"api-extractor run\" includes\n       * the \"--local\" option), the warning is displayed but the build will not fail.\n       *\n       * DEFAULT VALUE: \"warning\"\n       */\n      logLevel: 'warning' as ExtractorLogLevel,\n\n      /**\n       * When addToApiReportFile is true:  If API Extractor is configured to write an API report file (.api.md),\n       * then the message will be written inside that file; otherwise, the message is instead logged according to\n       * the \"logLevel\" option.\n       *\n       * DEFAULT VALUE: false\n       */\n      addToApiReportFile: false,\n    },\n\n    // \"TS2551\": {\n    //   \"logLevel\": \"warning\",\n    //   \"addToApiReportFile\": true\n    // },\n    //\n    // . . .\n  },\n\n  /**\n   * Configures handling of messages reported by API Extractor during its analysis.\n   *\n   * API Extractor message identifiers start with \"ae-\".  For example: \"ae-extra-release-tag\"\n   *\n   * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings\n   */\n  extractorMessageReporting: {\n    default: {\n      logLevel: 'warning' as ExtractorLogLevel,\n      addToApiReportFile: false,\n    },\n\n    // 'ae-extra-release-tag': {\n    //   logLevel: 'warning' as ExtractorLogLevel,\n    //   addToApiReportFile: false,\n    // },\n\n    // 'ae-forgotten-export': {\n    //   logLevel: 'error' as ExtractorLogLevel,\n    //   addToApiReportFile: false,\n    // },\n\n    'ae-incompatible-release-tags': {\n      logLevel: 'none' as ExtractorLogLevel,\n      addToApiReportFile: false,\n    },\n\n    'ae-internal-missing-underscore': {\n      logLevel: 'none' as ExtractorLogLevel,\n      addToApiReportFile: false,\n    },\n\n    'ae-missing-release-tag': {\n      logLevel: 'none' as ExtractorLogLevel,\n      addToApiReportFile: false,\n    },\n  },\n\n  /**\n   * Configures handling of messages reported by the TSDoc parser when analyzing code comments.\n   *\n   * TSDoc message identifiers start with \"tsdoc-\".  For example: \"tsdoc-link-tag-unescaped-text\"\n   *\n   * DEFAULT VALUE:  A single \"default\" entry with logLevel=warning.\n   */\n  tsdocMessageReporting: {\n    default: {\n      logLevel: 'warning' as ExtractorLogLevel,\n      addToApiReportFile: false,\n    },\n\n    // 'tsdoc-link-tag-unescaped-text': {\n    //   logLevel: 'warning' as ExtractorLogLevel,\n    //   addToApiReportFile: false,\n    // },\n\n    // 'tsdoc-unsupported-tag': {\n    //   logLevel: 'warning' as ExtractorLogLevel,\n    //   addToApiReportFile: false,\n    // },\n\n    // 'tsdoc-undefined-tag': {\n    //   logLevel: 'warning' as ExtractorLogLevel,\n    //   addToApiReportFile: false,\n    // },\n  },\n}\n","import type {IConfigFile, IExtractorMessagesConfig} from '@microsoft/api-extractor'\nimport path from 'path'\n\nimport {DEFAULT_MESSAGES_CONFIG} from './defaults'\n\nexport function createApiExtractorConfig(opts: {\n  mainEntryPointFilePath: string\n  messagesConfig: IExtractorMessagesConfig\n  packagePath: string\n  tempDirPath: string\n  tsconfigPath: string\n  bundledPackages: string[]\n}): IConfigFile {\n  /**\n   * Config file for API Extractor.  For more info, please visit: https://api-extractor.com\n   */\n  return {\n    /**\n     * Optionally specifies another JSON config file that this file extends from.  This provides a way for\n     * standard settings to be shared across multiple projects.\n     *\n     * If the path starts with \"./\" or \"../\", the path is resolved relative to the folder of the file that contains\n     * the \"extends\" field.  Otherwise, the first path segment is interpreted as an NPM package name, and will be\n     * resolved using NodeJS require().\n     *\n     * SUPPORTED TOKENS: none\n     * DEFAULT VALUE: \"\"\n     */\n    // \"extends\": \"./shared/api-extractor-base.json\"\n    // \"extends\": \"my-package/include/api-extractor-base.json\"\n\n    /**\n     * Determines the \"<projectFolder>\" token that can be used with other config file settings.  The project folder\n     * typically contains the tsconfig.json and package.json config files, but the path is user-defined.\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting.\n     *\n     * The default value for \"projectFolder\" is the token \"<lookup>\", which means the folder is determined by traversing\n     * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder\n     * that contains a tsconfig.json file.  If a tsconfig.json file cannot be found in this way, then an error\n     * will be reported.\n     *\n     * SUPPORTED TOKENS: <lookup>\n     * DEFAULT VALUE: \"<lookup>\"\n     */\n    projectFolder: opts.packagePath,\n\n    /**\n     * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis.  API Extractor\n     * analyzes the symbols exported by this module.\n     *\n     * The file extension must be \".d.ts\" and not \".ts\".\n     *\n     * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n     * prepend a folder token such as \"<projectFolder>\".\n     *\n     * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n     */\n    mainEntryPointFilePath: path.resolve(opts.packagePath, opts.mainEntryPointFilePath),\n\n    /**\n     * A list of NPM package names whose exports should be treated as part of this package.\n     *\n     * For example, suppose that Webpack is used to generate a distributed bundle for the project \"library1\",\n     * and another NPM package \"library2\" is embedded in this bundle.  Some types from library2 may become part\n     * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly\n     * imports library2.  To avoid this, we can specify:\n     *\n     *   \"bundledPackages\": [ \"library2\" ],\n     *\n     * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been\n     * local files for library1.\n     */\n    bundledPackages: opts.bundledPackages,\n\n    /**\n     * Determines how the TypeScript compiler engine will be invoked by API Extractor.\n     */\n    compiler: {\n      /**\n       * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * Note: This setting will be ignored if \"overrideTsconfig\" is used.\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<projectFolder>/tsconfig.json\"\n       */\n      // tsconfigFilePath: path.resolve(opts.packagePath, opts.tsconfigPath || 'tsconfig.json'),\n      tsconfigFilePath: `<projectFolder>/${opts.tsconfigPath}`,\n\n      /**\n       * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk.\n       * The object must conform to the TypeScript tsconfig schema:\n       *\n       * http://json.schemastore.org/tsconfig\n       *\n       * If omitted, then the tsconfig.json file will be read from the \"projectFolder\".\n       *\n       * DEFAULT VALUE: no overrideTsconfig section\n       */\n      // overrideTsconfig: {\n      //   // . . .\n      // },\n\n      /**\n       * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended\n       * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when\n       * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses\n       * for its analysis.  Where possible, the underlying issue should be fixed rather than relying on skipLibCheck.\n       *\n       * DEFAULT VALUE: false\n       */\n      // \"skipLibCheck\": true,\n    },\n\n    /**\n     * Configures how the API report file (*.api.md) will be generated.\n     */\n    apiReport: {\n      /**\n       * (REQUIRED) Whether to generate an API report.\n       */\n      enabled: false,\n\n      /**\n       * The filename for the API report files.  It will be combined with \"reportFolder\" or \"reportTempFolder\" to produce\n       * a full file path.\n       *\n       * The file extension should be \".api.md\", and the string should not contain a path separator such as \"\\\" or \"/\".\n       *\n       * SUPPORTED TOKENS: <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<unscopedPackageName>.api.md\"\n       */\n      reportFileName: '<unscopedPackageName>.api.md',\n\n      /**\n       * Specifies the folder where the API report file is written.  The file name portion is determined by\n       * the \"reportFileName\" setting.\n       *\n       * The API report file is normally tracked by Git.  Changes to it can be used to trigger a branch policy,\n       * e.g. for an API review.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<projectFolder>/etc/\"\n       */\n      // \"reportFolder\": \"<projectFolder>/etc/\",\n\n      /**\n       * Specifies the folder where the temporary report file is written.  The file name portion is determined by\n       * the \"reportFileName\" setting.\n       *\n       * After the temporary file is written to disk, it is compared with the file in the \"reportFolder\".\n       * If they are different, a production build will fail.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<projectFolder>/temp/\"\n       */\n      // \"reportTempFolder\": \"<projectFolder>/temp/\"\n    },\n\n    /**\n     * Configures how the doc model file (*.api.json) will be generated.\n     */\n    docModel: {\n      /**\n       * (REQUIRED) Whether to generate a doc model file.\n       */\n      enabled: true,\n\n      /**\n       * The output path for the doc model file.  The file extension should be \".api.json\".\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<projectFolder>/temp/<unscopedPackageName>.api.json\"\n       */\n      apiJsonFilePath: path.resolve(opts.tempDirPath, 'api.json'),\n    },\n\n    /**\n     * Configures how the .d.ts rollup file will be generated.\n     */\n    dtsRollup: {\n      /**\n       * (REQUIRED) Whether to generate the .d.ts rollup file.\n       */\n      enabled: false,\n\n      /**\n       * Specifies the output path for a .d.ts rollup file to be generated without any trimming.\n       * This file will include all declarations that are exported by the main entry point.\n       *\n       * If the path is an empty string, then this file will not be written.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<projectFolder>/dist/<unscopedPackageName>.d.ts\"\n       */\n      // untrimmedFilePath: '<projectFolder>/dist/es/<unscopedPackageName>.d.ts',\n\n      /**\n       * Specifies the output path for a .d.ts rollup file to be generated with trimming for a \"beta\" release.\n       * This file will include only declarations that are marked as \"@public\" or \"@beta\".\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"\"\n       */\n      // betaTrimmedFilePath: '<projectFolder>/dist/es/<unscopedPackageName>-beta.d.ts',\n\n      /**\n       * Specifies the output path for a .d.ts rollup file to be generated with trimming for a \"public\" release.\n       * This file will include only declarations that are marked as \"@public\".\n       *\n       * If the path is an empty string, then this file will not be written.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"\"\n       */\n      // publicTrimmedFilePath: '<projectFolder>/dist/es/<unscopedPackageName>-public.d.ts',\n\n      /**\n       * When a declaration is trimmed, by default it will be replaced by a code comment such as\n       * \"Excluded from this release type: exampleMember\".  Set \"omitTrimmingComments\" to true to remove the\n       * declaration completely.\n       *\n       * DEFAULT VALUE: false\n       */\n      // \"omitTrimmingComments\": true\n    },\n\n    /**\n     * Configures how the tsdoc-metadata.json file will be generated.\n     */\n    tsdocMetadata: {\n      /**\n       * Whether to generate the tsdoc-metadata.json file.\n       *\n       * DEFAULT VALUE: true\n       */\n      enabled: false,\n      /**\n       * Specifies where the TSDoc metadata file should be written.\n       *\n       * The path is resolved relative to the folder of the config file that contains the setting; to change this,\n       * prepend a folder token such as \"<projectFolder>\".\n       *\n       * The default value is \"<lookup>\", which causes the path to be automatically inferred from the \"tsdocMetadata\",\n       * \"typings\" or \"main\" fields of the project's package.json.  If none of these fields are set, the lookup\n       * falls back to \"tsdoc-metadata.json\" in the package folder.\n       *\n       * SUPPORTED TOKENS: <projectFolder>, <packageName>, <unscopedPackageName>\n       * DEFAULT VALUE: \"<lookup>\"\n       */\n      // tsdocMetadataFilePath: '<projectFolder>/dist/es/tsdoc-metadata.json',\n    },\n\n    /**\n     * Specifies what type of newlines API Extractor should use when writing output files.  By default, the output files\n     * will be written with Windows-style newlines.  To use POSIX-style newlines, specify \"lf\" instead.\n     * To use the OS's default newline kind, specify \"os\".\n     *\n     * DEFAULT VALUE: \"crlf\"\n     */\n    // \"newlineKind\": \"crlf\",\n\n    /**\n     * Configures how API Extractor reports error and warning messages produced during analysis.\n     *\n     * There are three sources of messages:  compiler messages, API Extractor messages, and TSDoc messages.\n     */\n    messages: opts.messagesConfig || DEFAULT_MESSAGES_CONFIG,\n  }\n}\n","import tmp from 'tmp'\n\nexport function createTempDir(): Promise<{path: string; cleanup: () => void}> {\n  return new Promise((resolve, reject) => {\n    tmp.dir((err, dirPath, cleanupCallback) => {\n      if (err) {\n        reject(err)\n\n        return\n      }\n\n      resolve({path: dirPath, cleanup: cleanupCallback})\n    })\n  })\n}\n","import {TSDocConfigFile} from '@microsoft/tsdoc-config'\nimport {readFile} from 'fs/promises'\nimport {parse} from 'jsonc-parser'\n\nimport {TSDocCustomTag} from './types'\n\nexport async function createTSDocConfig(opts: {\n  customTags: TSDocCustomTag[]\n}): Promise<TSDocConfigFile | undefined> {\n  const {customTags} = opts\n\n  if (customTags.length === 0) {\n    return undefined\n  }\n\n  const tsDocBaseBuf = await readFile(\n    require.resolve('@microsoft/api-extractor/extends/tsdoc-base.json'),\n  )\n\n  // Include the definitions that are required for API Extractor\n  // extends: ['@microsoft/api-extractor/extends/tsdoc-base.json'],\n  const tsDocBaseConfig = parse(tsDocBaseBuf.toString())\n\n  // Define custom tags and specify how they should be parsed\n  const tagDefinitions = (tsDocBaseConfig.tagDefinitions || []).concat(\n    customTags.map((t) => ({\n      tagName: `@${t.name}`,\n      syntaxKind: t.syntaxKind,\n      allowMultiple: t.allowMultiple,\n    })),\n  )\n\n  // Indicate that custom tags are supported by your tooling.\n  // (Without this, warnings may be reported saying that a tag is unsupported.)\n  const supportForTags = {...tsDocBaseConfig.supportForTags}\n\n  for (const customTag of customTags) {\n    supportForTags[`@${customTag.name}`] = true\n  }\n\n  const tsDocConfig = {\n    ...tsDocBaseConfig,\n    noStandardTags: false,\n    tagDefinitions,\n    supportForTags,\n  }\n\n  return TSDocConfigFile.loadFromObject(tsDocConfig)\n}\n","import {Extractor, ExtractorConfig, type ExtractorMessage} from '@microsoft/api-extractor'\nimport {ApiPackage} from '@microsoft/api-extractor-model'\nimport {\n  createLogger,\n  getExtractMessagesConfig,\n  loadConfig,\n  loadPkgWithReporting,\n  type PackageJSON,\n  parseExports,\n  parseStrictOptions,\n  type PkgConfigOptions,\n} from '@sanity/pkg-utils'\nimport path from 'path'\n\nimport {createApiExtractorConfig} from './apiExtractorConfig'\nimport {createTempDir} from './helpers'\nimport {createTSDocConfig} from './tsDocConfig'\nimport type {TSDocCustomTag} from './types'\n\n/**\n * @public\n */\nexport interface ExtractResult {\n  apiPackage?: ApiPackage\n  exportPath: string\n  messages: ExtractorMessage[]\n  succeeded: boolean\n  tempDirPath: string\n  typesPath: string\n}\n\n/**\n * Extract API information\n *\n * @public\n */\nexport async function extract(options: {\n  customTags?: TSDocCustomTag[]\n  packagePath: string\n  rules?: NonNullable<PkgConfigOptions['extract']>['rules']\n  strict: boolean\n  tsconfig?: string\n  bundledPackages?: string[]\n}): Promise<{pkg: PackageJSON; results: ExtractResult[]}> {\n  const {\n    customTags,\n    packagePath,\n    rules,\n    strict,\n    tsconfig: tsconfigPath = 'tsconfig.json',\n    bundledPackages = [],\n  } = options\n  const tempDir = await createTempDir()\n  const tempDirPath = tempDir.path\n  const packageJsonFullPath = path.resolve(packagePath, 'package.json')\n\n  // pkg utils\n  const cwd = packagePath\n  const config = await loadConfig({cwd})\n  const strictOptions = parseStrictOptions(config?.strictOptions ?? {})\n  const logger = createLogger()\n  const pkg = await loadPkgWithReporting({cwd, logger, strict})\n\n  logger.info('Using tsconfig: ', path.resolve(packagePath, tsconfigPath))\n\n  // const exports = _resolveExports({pkg})\n  const exports = parseExports({\n    cwd,\n    pkg,\n    strict,\n    logger,\n    strictOptions,\n  })\n\n  try {\n    const results: ExtractResult[] = []\n\n    for (const exp of exports) {\n      if (!exp.source || !exp.default) {\n        continue\n      }\n\n      const typesPath = exp.default.replace(/\\.[mc]?js$/, '.d.ts')\n      const result = await _doExtract({\n        customTags,\n        rules: rules ?? config?.extract?.rules,\n        mainEntryPointFilePath: typesPath,\n        packagePath,\n        tempDirPath,\n        tsconfigPath,\n        packageJsonFullPath,\n        bundledPackages,\n      })\n\n      results.push({\n        exportPath: exp._path,\n        tempDirPath,\n        typesPath: typesPath,\n        ...result,\n      })\n    }\n\n    // Clean up temporary directory\n    tempDir.cleanup()\n\n    return {pkg, results}\n  } catch (err) {\n    // Clean up temporary directory\n    tempDir.cleanup()\n\n    throw err\n  }\n}\n\nasync function _doExtract(options: {\n  customTags: NonNullable<PkgConfigOptions['extract']>['customTags']\n  rules: NonNullable<PkgConfigOptions['extract']>['rules']\n  mainEntryPointFilePath: string\n  packagePath: string\n  tempDirPath: string\n  tsconfigPath: string\n  packageJsonFullPath: string\n  bundledPackages: string[]\n}) {\n  const {\n    customTags,\n    rules,\n    mainEntryPointFilePath,\n    packagePath,\n    tempDirPath,\n    tsconfigPath,\n    packageJsonFullPath,\n    bundledPackages,\n  } = options\n\n  const tsdocConfigFile = await createTSDocConfig({customTags: customTags || []})\n\n  // Load the API Extractor configuration\n  const extractorConfig: ExtractorConfig = ExtractorConfig.prepare({\n    configObject: createApiExtractorConfig({\n      mainEntryPointFilePath,\n      messagesConfig: getExtractMessagesConfig({rules}),\n      packagePath,\n      tempDirPath,\n      tsconfigPath,\n      bundledPackages,\n    }),\n    configObjectFullPath: undefined,\n    packageJson: undefined,\n    packageJsonFullPath,\n    tsdocConfigFile,\n  })\n\n  const messages: ExtractorMessage[] = []\n\n  // Invoke API Extractor\n  const extractorResult = Extractor.invoke(extractorConfig, {\n    // Equivalent to the \"--local\" command-line parameter\n    localBuild: true,\n    // Equivalent to the \"--verbose\" command-line parameter\n    showVerboseMessages: true,\n    // handle messages\n    messageCallback(message: ExtractorMessage) {\n      messages.push(message)\n      message.handled = true\n    },\n  })\n\n  const apiPackage = ApiPackage.loadFromJsonFile(path.resolve(tempDirPath, 'api.json'))\n\n  return {\n    apiPackage,\n    messages,\n    succeeded: extractorResult.succeeded,\n  }\n}\n","import fs from 'fs'\nimport util from 'util'\n\nexport const writeFile = util.promisify(fs.writeFile)\n","import {createClient, SanityDocument} from '@sanity/client'\nimport mkdirp from 'mkdirp'\nimport path from 'path'\n\nimport {APIDocument} from '../types'\nimport {writeFile} from './helpers'\n\n/**\n * @public\n */\nexport async function load(\n  transformed: APIDocument[],\n  opts: {\n    cwd: string\n    fs?: {path: string}\n    sanity?: {projectId?: string; dataset?: string; token?: string}\n  },\n): Promise<void> {\n  // Write to file system\n  if (opts.fs) {\n    const dirPath = path.dirname(opts.fs.path)\n\n    await mkdirp(dirPath)\n    await writeFile(opts.fs.path, JSON.stringify(transformed, null, 2) + '\\n')\n  }\n\n  // Write to Sanity\n  if (opts.sanity && opts.sanity.token) {\n    await _loadToSanity(opts.sanity, transformed)\n  }\n}\n\nasync function _loadToSanity(\n  sanity: {projectId?: string; dataset?: string; token?: string},\n  docs: APIDocument[],\n): Promise<void> {\n  const client = createClient({\n    ...sanity,\n    apiVersion: '2022-10-01',\n    token: sanity.token,\n    useCdn: false,\n  })\n\n  let tx = client.transaction()\n\n  for (const doc of docs) {\n    tx = tx.createOrReplace(doc as SanityDocument)\n  }\n\n  await tx.commit()\n}\n","import crypto from 'crypto'\nimport slugify from 'slugify'\n\nimport {TransformContext} from './types'\n\nexport function _hash(key: string): string {\n  return crypto.createHash('md5').update(key).digest('hex')\n}\n\nexport function _createExportMemberId(_ctx: TransformContext, key: string): string {\n  return _hash(key)\n}\n\nexport function _isArray(val: unknown): val is unknown[] {\n  return Array.isArray(val)\n}\n\nexport function _isRecord(val: unknown): val is Record<string, unknown> {\n  return typeof val === 'object' && Boolean(val)\n}\n\nexport function _sanitizeName(str: string): string {\n  // Since `Text` is part of the default browser scope, API extractor will append `_2` to other\n  // implementations. So we need to replace it for the case of readable docs.\n  if (str === 'Text_2') {\n    return 'Text'\n  }\n\n  return str\n}\n\nexport function _slugify(str: string): string {\n  return slugify(str)\n}\n\nexport function _parsePackageName(nameStr: string): [string | undefined, string] {\n  const p = nameStr.split('/')\n\n  const packageScope = p.length > 1 ? p[0] : undefined\n  const packageName = p.length > 1 ? p[1] : p[0]\n\n  if (!packageName) {\n    throw new Error(`Invalid package name: ${nameStr}`)\n  }\n\n  return [packageScope, packageName]\n}\n","import {ApiClass} from '@microsoft/api-extractor-model'\n\nexport function _classIsReactComponentType(node: ApiClass): boolean {\n  const extendsTypeTokens = node.extendsType?.excerpt.tokens\n\n  const extendedName = extendsTypeTokens?.[1]?.text || ''\n\n  if (\n    extendedName.startsWith('React.Component') ||\n    extendedName.startsWith('React_2.Component') ||\n    extendedName.startsWith('Component') ||\n    extendedName.startsWith('React.PureComponent') ||\n    extendedName.startsWith('React_2.PureComponent') ||\n    extendedName.startsWith('PureComponent')\n  ) {\n    return true\n  }\n\n  return false\n}\n","import {ExcerptToken} from '@microsoft/api-extractor-model'\n\nimport {SanityArrayItem} from '../_lib/sanity'\nimport {SerializedAPIToken} from '../types'\nimport {_hash} from './helpers'\nimport {TransformContext} from './types'\n\nexport function _transformTokens(\n  ctx: TransformContext,\n  tokens: ExcerptToken[],\n): SanityArrayItem<SerializedAPIToken>[] {\n  const pkg = ctx.package\n\n  if (!pkg) {\n    throw new Error('transformTokens: missing package document')\n  }\n\n  return tokens.map((t, idx) => {\n    if (t.kind === 'Content') {\n      return {\n        _type: 'api.token',\n        _key: `token${idx}`,\n        text: t.text,\n      }\n    }\n\n    if (t.kind === 'Reference') {\n      if (!t.canonicalReference || !t.canonicalReference.source) {\n        return {\n          _type: 'api.token',\n          _key: `token${idx}`,\n          text: t.text,\n        }\n      }\n\n      return {\n        _type: 'api.token',\n        _key: `token${idx}`,\n        text: t.text,\n        member: {\n          _type: 'reference',\n          _ref: _getTokenId(t),\n        },\n      }\n    }\n\n    throw new Error(`tokens: unknown type: ${t.kind}`)\n  })\n}\n\nfunction _getTokenId(t: ExcerptToken) {\n  const _ref = t.canonicalReference?.toString()\n\n  if (_ref === '!unknown') {\n    return '$$unknown$$'\n  }\n\n  return `tsdoc-${_hash(_ref?.replace('~', '') || '')}`\n}\n","export const RELEASE_TAGS: Record<number, 'internal' | 'alpha' | 'beta' | 'public' | undefined> = {\n  0: undefined,\n  1: 'internal',\n  2: 'alpha',\n  3: 'beta',\n  4: 'public',\n}\n","import {\n  DocBlockTag,\n  DocCodeSpan,\n  DocComment,\n  DocErrorText,\n  DocEscapedText,\n  DocFencedCode,\n  DocLinkTag,\n  DocMemberIdentifier,\n  DocMemberReference,\n  DocNode,\n  DocNodeTransforms,\n  DocParagraph,\n  DocPlainText,\n  DocSection,\n  StandardTags,\n} from '@microsoft/tsdoc'\n\nimport {PortableTextNode, PortableTextSpanNode} from '../_lib/portable-text'\nimport {SanityArrayItem} from '../_lib/sanity'\nimport {\n  TSDocComment,\n  TSDocCustomBlock,\n  TSDocDeprecatedBlock,\n  TSDocExampleBlock,\n  TSDocModifierTag,\n  TSDocParamBlock,\n  TSDocRemarksBlock,\n  TSDocReturnsBlock,\n  TSDocSeeBlock,\n} from '../types'\nimport {_isArray, _isRecord} from './helpers'\n\n/** Regex pattern that matches Markdown headers: h1 - h6 */\nconst RE_MARKDOWN_HEADER = /^([#]{1,6})\\s(.*)$/\n\n/**\n * @internal\n */\nfunction _transformDocNode(docNode: DocNode): PortableTextNode | undefined {\n  // Block = \"Block\",\n  // BlockTag = \"BlockTag\",\n  // Excerpt = \"Excerpt\",\n  // FencedCode = \"FencedCode\",\n  // CodeSpan = \"CodeSpan\",\n  // Comment = \"Comment\",\n  // DeclarationReference = \"DeclarationReference\",\n  // ErrorText = \"ErrorText\",\n  // EscapedText = \"EscapedText\",\n  // HtmlAttribute = \"HtmlAttribute\",\n  // HtmlEndTag = \"HtmlEndTag\",\n  // HtmlStartTag = \"HtmlStartTag\",\n  // InheritDocTag = \"InheritDocTag\",\n  // InlineTag = \"InlineTag\",\n  // LinkTag = \"LinkTag\",\n  // MemberIdentifier = \"MemberIdentifier\",\n  // MemberReference = \"MemberReference\",\n  // MemberSelector = \"MemberSelector\",\n  // MemberSymbol = \"MemberSymbol\",\n  // Paragraph = \"Paragraph\",\n  // ParamBlock = \"ParamBlock\",\n  // ParamCollection = \"ParamCollection\",\n  // PlainText = \"PlainText\",\n  // Section = \"Section\",\n  // SoftBreak = \"SoftBreak\"\n\n  if (docNode.kind === 'CodeSpan') {\n    return {\n      _type: 'span',\n      marks: ['code'],\n      text: (docNode as DocCodeSpan).code,\n    }\n  }\n\n  if (docNode.kind === 'ErrorText') {\n    return {\n      _type: 'span',\n      marks: [],\n      text: (docNode as DocErrorText).text,\n    }\n  }\n\n  if (docNode.kind === 'EscapedText') {\n    return {\n      _type: 'span',\n      marks: [],\n      text: (docNode as DocEscapedText).decodedText,\n    }\n  }\n\n  if (docNode.kind === 'FencedCode') {\n    const node = docNode as DocFencedCode\n\n    return {\n      _type: 'code',\n      code: node.code,\n      language: node.language,\n    }\n  }\n\n  if (docNode.kind === 'LinkTag') {\n    const linkTag: DocLinkTag = docNode as DocLinkTag\n\n    if (linkTag.urlDestination) {\n      const linkText: string = linkTag.linkText || linkTag.urlDestination\n\n      return {\n        _type: 'span',\n        _markDef: {\n          _type: 'link',\n          href: linkTag.urlDestination,\n        },\n        marks: [],\n        text: linkText,\n      }\n    } else {\n      let identifier = ''\n      let fullReferenceURL = ''\n\n      if (linkTag.codeDestination) {\n        // @todo: the library should provide a default rendering for this\n        const memberReferences: ReadonlyArray<DocMemberReference> =\n          linkTag.codeDestination.memberReferences\n\n        if (memberReferences.length > 0) {\n          const memberIdentifier: DocMemberIdentifier | undefined =\n            memberReferences[memberReferences.length - 1]?.memberIdentifier\n\n          fullReferenceURL = memberReferences\n            .map((memberReference) => memberReference.memberIdentifier?.identifier)\n            .filter((identifier) => Boolean(identifier))\n            .join('/')\n\n          if (memberIdentifier) {\n            identifier = memberIdentifier.identifier\n          }\n        }\n      }\n\n      const linkText: string = linkTag.linkText || identifier || '???'\n\n      return {\n        _type: 'span',\n        _markDef: {\n          _type: 'link',\n          href: fullReferenceURL,\n        },\n        marks: [],\n        text: linkText,\n      }\n    }\n  }\n\n  if (docNode.kind === 'Paragraph') {\n    const transformedParagraph: DocParagraph = DocNodeTransforms.trimSpacesInParagraph(\n      docNode as DocParagraph,\n    )\n\n    if (\n      transformedParagraph.nodes.length === 1 &&\n      transformedParagraph.nodes[0]?.kind === 'SoftBreak'\n    ) {\n      return undefined\n    }\n\n    const children = _transformDocCommentContent(transformedParagraph)\n\n    if (!children) return undefined\n\n    // Find mark defs\n    const markDefs: SanityArrayItem<PortableTextSpanNode['_markDef']>[] = []\n\n    let style = 'normal'\n\n    // Check if the first span starts with a Markdown header prefix (#)\n    if (children[0]?._type === 'span') {\n      const headerMatch = RE_MARKDOWN_HEADER.exec(children[0].text)\n\n      if (headerMatch) {\n        const child: SanityArrayItem<PortableTextNode> = {\n          ...children[0],\n          text: headerMatch[2]!,\n        }\n\n        style = `h${headerMatch[1]?.length}`\n\n        children[0] = child\n      }\n    }\n\n    for (const child of children) {\n      if (child._type === 'span' && _isRecord(child._markDef)) {\n        const markDefKey = `${child._markDef._type}${markDefs.length}`\n\n        child._markDef._key = markDefKey\n\n        if (_isArray(child.marks)) {\n          child.marks.push(markDefKey)\n        }\n\n        markDefs.push({_key: markDefKey, ...child._markDef})\n\n        delete child._markDef\n      }\n    }\n\n    if (children.length === 0) {\n      children.push({\n        _type: 'span',\n        _key: '0',\n        marks: [],\n        text: '',\n      })\n    }\n\n    return {\n      _type: 'block',\n      style,\n      children,\n      markDefs,\n    }\n  }\n\n  if (docNode.kind === 'PlainText') {\n    return {\n      _type: 'span',\n      marks: [],\n      text: (docNode as DocPlainText).text,\n    }\n  }\n\n  if (docNode.kind === 'SoftBreak') {\n    return {\n      _type: 'span',\n      text: '\\n',\n    }\n  }\n\n  if (docNode.kind === 'BlockTag') {\n    const node = docNode as DocBlockTag\n\n    return {\n      _type: 'span',\n      marks: [],\n      text: node.tagName,\n    }\n  }\n\n  throw new Error(`unknown doc node type: ${docNode.kind}`)\n}\n\nexport function _transformDocCommentContent(\n  section: DocSection | DocParagraph,\n): SanityArrayItem<PortableTextNode>[] | undefined {\n  if (!section.nodes.length) return undefined\n\n  const nodes: SanityArrayItem<PortableTextNode>[] = section.nodes\n    .map((node, idx) => {\n      if (idx === 0 && node.kind === 'SoftBreak') {\n        return undefined\n      }\n\n      const transformedNode = _transformDocNode(node)\n\n      return transformedNode && {_key: `node${idx}`, ...transformedNode}\n    })\n    .filter(Boolean) as SanityArrayItem<PortableTextNode>[]\n\n  return nodes.length ? nodes : undefined\n}\n\nexport function _transformDocComment(docComment: DocComment): TSDocComment {\n  // Summary\n  const summary = _transformDocCommentContent(docComment.summarySection)\n\n  // Parameters\n  const parameters: SanityArrayItem<TSDocParamBlock>[] | undefined = docComment.params.blocks.length\n    ? docComment.params.blocks.map((paramBlock, idx) => ({\n        _type: 'tsdoc.paramBlock',\n        _key: `paramBlock${idx}`,\n        name: paramBlock.parameterName,\n        content: _transformDocCommentContent(paramBlock.content),\n      }))\n    : undefined\n\n  // Returns\n  const returns: TSDocReturnsBlock | undefined = docComment.returnsBlock && {\n    _type: 'tsdoc.returnsBlock',\n    content: _transformDocCommentContent(docComment.returnsBlock.content),\n  }\n\n  // `@remarks` block\n  const remarks: TSDocRemarksBlock | undefined = docComment.remarksBlock && {\n    _type: 'tsdoc.remarksBlock',\n    content: _transformDocCommentContent(docComment.remarksBlock.content),\n  }\n\n  const exampleBlocks: SanityArrayItem<TSDocExampleBlock>[] = []\n  const customBlocks: SanityArrayItem<TSDocCustomBlock>[] = []\n\n  // Custom blocks\n  for (let i = 0; i < docComment.customBlocks.length; i += 1) {\n    const customBlock = docComment.customBlocks[i]!\n\n    // This is a `@example` block\n    if (customBlock.blockTag.tagNameWithUpperCase === StandardTags.example.tagNameWithUpperCase) {\n      exampleBlocks.push({\n        _type: 'tsdoc.exampleBlock',\n        _key: `exampleBlock${i}`,\n        content: _transformDocCommentContent(customBlock.content),\n      })\n    } else {\n      customBlocks.push({\n        _type: 'tsdoc.customBlock',\n        _key: `customBlock${i}`,\n        tag: customBlock.blockTag.tagName,\n        content: _transformDocCommentContent(customBlock.content),\n      })\n    }\n  }\n\n  // `@see` blocks\n  const seeBlocks: SanityArrayItem<TSDocSeeBlock>[] | undefined = docComment.seeBlocks.length\n    ? docComment.seeBlocks.map((seeBlock, idx) => ({\n        _type: 'tsdoc.seeBlock',\n        _key: `seeBlock${idx}`,\n        content: _transformDocCommentContent(seeBlock.content),\n      }))\n    : undefined\n\n  // `@deprecated` block\n  const deprecated: TSDocDeprecatedBlock | undefined = docComment.deprecatedBlock && {\n    _type: 'tsdoc.deprecatedBlock',\n    content: _transformDocCommentContent(docComment.deprecatedBlock.content),\n  }\n\n  // Modifiers\n  const modifierTags: SanityArrayItem<TSDocModifierTag>[] | undefined = docComment.modifierTagSet\n    .nodes.length\n    ? docComment.modifierTagSet.nodes.map((modifierTag, idx) => ({\n        _type: 'tsdoc.modifierTag',\n        _key: `modifierTag${idx}`,\n        name: modifierTag.tagName,\n      }))\n    : undefined\n\n  return {\n    _type: 'tsdoc.docComment',\n    customBlocks: customBlocks.length > 0 ? customBlocks : undefined,\n    deprecated,\n    exampleBlocks: exampleBlocks.length > 0 ? exampleBlocks : undefined,\n    modifierTags,\n    parameters,\n    remarks,\n    returns,\n    seeBlocks,\n    summary,\n  }\n}\n","import {\n  ApiCallSignature,\n  ApiConstructor,\n  ApiFunction,\n  ApiIndexSignature,\n  Parameter,\n} from '@microsoft/api-extractor-model'\nimport {DocSection} from '@microsoft/tsdoc'\n\nimport {SanityArrayItem} from '../_lib/sanity'\nimport {SerializedAPIParameter} from '../types'\nimport {_transformTokens} from './_transformTokens'\nimport {RELEASE_TAGS} from './constants'\nimport {_transformDocCommentContent} from './transformDocComment'\nimport {TransformContext} from './types'\n\nexport function _transformParameter(\n  ctx: TransformContext,\n  node: ApiCallSignature | ApiConstructor | ApiFunction | ApiIndexSignature,\n  param: Parameter,\n  idx: number,\n): SanityArrayItem<SerializedAPIParameter> {\n  const tsDocComment = param.tsdocParamBlock?.content\n\n  return {\n    _type: 'api.parameter',\n    _key: `param${idx}`,\n    comment: tsDocComment\n      ? {\n          _type: 'tsdoc.docComment',\n          summary: _transformDocCommentContent(tsDocComment as unknown as DocSection),\n        }\n      : undefined,\n    name: param.name,\n    isOptional: param.isOptional,\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    type: _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        param.parameterTypeExcerpt.tokenRange.startIndex,\n        param.parameterTypeExcerpt.tokenRange.endIndex,\n      ),\n    ),\n  }\n}\n","import {\n  ApiCallSignature,\n  ApiClass,\n  ApiFunction,\n  ApiInterface,\n  ApiTypeAlias,\n  TypeParameter,\n} from '@microsoft/api-extractor-model'\n\nimport {SanityArrayItem} from '../_lib/sanity'\nimport {SerializedAPITypeParameter} from '../types'\nimport {_transformTokens} from './_transformTokens'\nimport {TransformContext} from './types'\n\nexport function _transformTypeParameter(\n  ctx: TransformContext,\n  node: ApiCallSignature | ApiClass | ApiFunction | ApiInterface | ApiTypeAlias,\n  p: TypeParameter,\n  idx: number,\n): SanityArrayItem<SerializedAPITypeParameter> {\n  return {\n    _type: 'api.typeParameter',\n    _key: `typeParameter${idx}`,\n    name: p.name,\n    constraintType: _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        p.constraintExcerpt.tokenRange.startIndex,\n        p.constraintExcerpt.tokenRange.endIndex,\n      ),\n    ),\n    defaultType: _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        p.defaultTypeExcerpt.tokenRange.startIndex,\n        p.defaultTypeExcerpt.tokenRange.endIndex,\n      ),\n    ),\n  }\n}\n","import {\n  ApiClass,\n  ApiConstructor,\n  ApiItem,\n  ApiMethod,\n  ApiProperty,\n} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPIClass, SerializedAPIClassMember} from '../types'\nimport {_classIsReactComponentType} from './_classIsReactComponentType'\nimport {_transformParameter} from './_transformParameter'\nimport {_transformTokens} from './_transformTokens'\nimport {_transformTypeParameter} from './_transformTypeParameter'\nimport {RELEASE_TAGS} from './constants'\nimport {_sanitizeName, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformClass(ctx: TransformContext, node: ApiClass): SerializedAPIClass {\n  if (!ctx.export) {\n    throw new Error('transformClass: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformClass: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformClass: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n  const name = _sanitizeName(node.name)\n  const isReactComponentType = _classIsReactComponentType(node)\n\n  return {\n    _type: 'api.class',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    isReactComponentType,\n    members: node.members.map((m, idx) => ({\n      _key: `member${idx}`,\n      ..._transformClassMember(ctx, m),\n    })),\n    name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(name)},\n    typeParameters: node.typeParameters.map((p, idx) => _transformTypeParameter(ctx, node, p, idx)),\n  }\n}\n\nfunction _transformClassMember(ctx: TransformContext, m: ApiItem): SerializedAPIClassMember {\n  if (m.kind === 'Constructor') {\n    const mem = m as ApiConstructor\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.constructor',\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n    }\n  }\n\n  if (m.kind === 'Method') {\n    const mem = m as ApiMethod\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.method',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      name: mem.name,\n      isOptional: mem.isOptional,\n      isStatic: mem.isStatic,\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      returnType: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.returnTypeExcerpt.tokenRange.startIndex,\n          mem.returnTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n      typeParameters: mem.typeParameters.map((p, idx) => _transformTypeParameter(ctx, mem, p, idx)),\n    }\n  }\n\n  if (m.kind === 'Property') {\n    const mem = m as ApiProperty\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.property',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      name: mem.name,\n      isEventProperty: mem.isEventProperty,\n      isOptional: mem.isOptional,\n      isStatic: mem.isStatic,\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      type: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.propertyTypeExcerpt.tokenRange.startIndex,\n          mem.propertyTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n    }\n  }\n\n  throw new Error(`Unknown class member kind: ${m.kind}`)\n}\n","import {ApiEnum, ApiEnumMember, ApiItem} from '@microsoft/api-extractor-model'\n\nimport {SanityArrayItem} from '../_lib/sanity'\nimport {APIEnumMember, SerializedAPIEnum} from '../types'\nimport {RELEASE_TAGS} from './constants'\nimport {_hash, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformEnum(ctx: TransformContext, node: ApiEnum): SerializedAPIEnum {\n  if (!ctx.export) {\n    throw new Error('transformEnum: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformEnum: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformEnum: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n\n  return {\n    _type: 'api.enum',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    members: node.members.map((m) => _transformEnumMember(ctx, m)),\n    name: node.name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(node.name)},\n  }\n}\n\nfunction _transformEnumMember(_ctx: TransformContext, m: ApiItem): SanityArrayItem<APIEnumMember> {\n  if (m.kind === 'EnumMember') {\n    const node = m as ApiEnumMember\n\n    return {\n      _type: 'api.enumMember',\n      _key: _hash(node.canonicalReference.toString()),\n      name: node.name,\n      releaseTag: RELEASE_TAGS[node.releaseTag],\n    }\n  }\n\n  throw new Error(`Unknown enum member kind: ${m.kind}`)\n}\n","import {ApiFunction} from '@microsoft/api-extractor-model'\n\nfunction _isUpperCase(char: string) {\n  return char === char.toUpperCase()\n}\n\nexport function _functionIsReactComponentType(node: ApiFunction): boolean {\n  const firstChar = node.name.slice(0, 1)\n\n  if (!_isUpperCase(firstChar) || firstChar === '_' || firstChar === '$') {\n    return false\n  }\n\n  const returnTypeTokens = node.excerptTokens.slice(\n    node.returnTypeExcerpt.tokenRange.startIndex,\n    node.returnTypeExcerpt.tokenRange.endIndex,\n  )\n\n  const returnTypeCode = returnTypeTokens\n    .map((t) => t.text)\n    .join('')\n    .trim()\n\n  const returnsReactElement =\n    returnTypeCode === 'React.ReactElement' ||\n    returnTypeCode === 'React_2.ReactElement' ||\n    returnTypeCode === 'ReactElement'\n  const returnsReactNode =\n    returnTypeCode === 'React.ReactNode' || 'React_2.ReactNode' || returnTypeCode === 'ReactNode'\n\n  const returnsReactPortal =\n    returnTypeCode === 'React.ReactPortal' ||\n    returnTypeCode === 'React_2.ReactPortal' ||\n    returnTypeCode === 'ReactPortal' ||\n    returnTypeCode.startsWith('React.ReactPortal |') ||\n    returnTypeCode.startsWith('React_2.ReactPortal |') ||\n    returnTypeCode.startsWith('ReactPortal |')\n\n  if (returnsReactElement || returnsReactNode || returnsReactPortal) {\n    return true\n  }\n\n  return false\n}\n","import {ApiFunction} from '@microsoft/api-extractor-model'\n\nconst hookRegex = /^use[A-Z0-9].*$/\n\nexport function _functionIsReactHook(node: ApiFunction): boolean {\n  return hookRegex.test(node.name)\n}\n","import {ApiFunction} from '@microsoft/api-extractor-model'\n\nimport {SanityReferenceValue} from '../_lib/sanity'\nimport {_transformTokens} from './_transformTokens'\nimport {TransformContext} from './types'\n\nexport function _functionPropsType(\n  ctx: TransformContext,\n  node: ApiFunction,\n): SanityReferenceValue | undefined {\n  const propsParam = node.parameters[0] && node.parameters[0].name === 'props' && node.parameters[0]\n\n  if (propsParam) {\n    const propsTokens = _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        propsParam.parameterTypeExcerpt.tokenRange.startIndex,\n        propsParam.parameterTypeExcerpt.tokenRange.endIndex,\n      ),\n    )\n\n    if (propsTokens.length) {\n      return propsTokens[0]?.member\n    }\n  }\n\n  return undefined\n}\n","import {ApiFunction} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPIFunction} from '../types'\nimport {_functionIsReactComponentType} from './_functionIsReactComponentType'\nimport {_functionIsReactHook} from './_functionIsReactHook'\nimport {_functionPropsType} from './_functionReactComponentPropsType'\nimport {_transformParameter} from './_transformParameter'\nimport {_transformTokens} from './_transformTokens'\nimport {_transformTypeParameter} from './_transformTypeParameter'\nimport {RELEASE_TAGS} from './constants'\nimport {_sanitizeName, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformFunction(\n  ctx: TransformContext,\n  node: ApiFunction,\n): SerializedAPIFunction {\n  if (!ctx.export) {\n    throw new Error('transformFunction: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformFunction: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformFunction: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n  const name = _sanitizeName(node.name)\n  const isReactComponentType = _functionIsReactComponentType(node)\n  const isReactHook = _functionIsReactHook(node)\n  const propsType = isReactComponentType ? _functionPropsType(ctx, node) : undefined\n\n  return {\n    _type: 'api.function',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    isReactComponentType,\n    isReactHook,\n    name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    parameters: node.parameters.map((p, idx) => _transformParameter(ctx, node, p, idx)),\n    propsType,\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(name)},\n    returnType: _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        node.returnTypeExcerpt.tokenRange.startIndex,\n        node.returnTypeExcerpt.tokenRange.endIndex,\n      ),\n    ),\n    typeParameters: node.typeParameters.map((p, idx) => _transformTypeParameter(ctx, node, p, idx)),\n    isOverloading: node.overloadIndex > 1,\n  }\n}\n","import {\n  ApiCallSignature,\n  ApiConstructSignature,\n  ApiIndexSignature,\n  ApiInterface,\n  ApiItem,\n  ApiMethodSignature,\n  ApiPropertySignature,\n} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPIInterface, SerializedAPIInterfaceMember} from '../types'\nimport {_transformParameter} from './_transformParameter'\nimport {_transformTokens} from './_transformTokens'\nimport {_transformTypeParameter} from './_transformTypeParameter'\nimport {RELEASE_TAGS} from './constants'\nimport {_sanitizeName, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformInterface(\n  ctx: TransformContext,\n  node: ApiInterface,\n): SerializedAPIInterface {\n  if (!ctx.export) {\n    throw new Error('transformEnum: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformEnum: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformEnum: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n  const name = _sanitizeName(node.name)\n\n  return {\n    _type: 'api.interface',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    extends: node.extendsTypes.map((t, idx) => {\n      return {\n        _type: 'api.extend',\n        _key: `extend${idx}`,\n        type: _transformTokens(\n          ctx,\n          t.excerpt.tokens.slice(t.excerpt.tokenRange.startIndex, t.excerpt.tokenRange.endIndex),\n        ),\n      }\n    }),\n    members: node.members.map((m, idx) => ({\n      _key: `member${idx}`,\n      ..._transformInterfaceMember(ctx, m),\n    })),\n    name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(name)},\n    typeParameters: node.typeParameters.map((p, idx: number) => {\n      return _transformTypeParameter(ctx, node, p, idx)\n    }),\n  }\n}\n\nfunction _transformInterfaceMember(\n  ctx: TransformContext,\n  m: ApiItem,\n): SerializedAPIInterfaceMember {\n  if (m.kind === 'CallSignature') {\n    const mem = m as ApiCallSignature\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.callSignature',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      // members: mem.members.map((m) => _transformInterfaceMember(ctx, m)),\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      returnType: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.returnTypeExcerpt.tokenRange.startIndex,\n          mem.returnTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n      typeParameters: mem.typeParameters.map((p, idx) => _transformTypeParameter(ctx, mem, p, idx)),\n    }\n  }\n\n  if (m.kind === 'ConstructSignature') {\n    const mem = m as ApiConstructSignature\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.constructSignature',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      // members: mem.members.map((m) => _transformInterfaceMember(ctx, m)),\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      returnType: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.returnTypeExcerpt.tokenRange.startIndex,\n          mem.returnTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n      typeParameters: mem.typeParameters.map((p, idx) => _transformTypeParameter(ctx, mem, p, idx)),\n    }\n  }\n\n  if (m.kind === 'MethodSignature') {\n    const mem = m as ApiMethodSignature\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.methodSignature',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      isOptional: mem.isOptional,\n      // members: mem.members.map((m) => _transformInterfaceMember(ctx, m)),\n      name: mem.name,\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      returnType: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.returnTypeExcerpt.tokenRange.startIndex,\n          mem.returnTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n      typeParameters: mem.typeParameters.map((p, idx) => _transformTypeParameter(ctx, mem, p, idx)),\n    }\n  }\n\n  if (m.kind === 'PropertySignature') {\n    const mem = m as ApiPropertySignature\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.propertySignature',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      isOptional: mem.isOptional,\n      name: mem.name,\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      type: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.propertyTypeExcerpt.tokenRange.startIndex,\n          mem.propertyTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n    }\n  }\n\n  if (m.kind === 'IndexSignature') {\n    const mem = m as ApiIndexSignature\n    const docComment = mem.tsdocComment\n\n    return {\n      _type: 'api.indexSignature',\n      comment: docComment ? _transformDocComment(docComment) : undefined,\n      parameters: mem.parameters.map((p, idx) => _transformParameter(ctx, mem, p, idx)),\n      releaseTag: RELEASE_TAGS[mem.releaseTag],\n      returnType: _transformTokens(\n        ctx,\n        mem.excerptTokens.slice(\n          mem.returnTypeExcerpt.tokenRange.startIndex,\n          mem.returnTypeExcerpt.tokenRange.endIndex,\n        ),\n      ),\n    }\n  }\n\n  throw new Error(`Unknown interface member kind: ${m.kind}`)\n}\n","import {ApiTypeAlias} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPITypeAlias} from '../types'\nimport {_transformTokens} from './_transformTokens'\nimport {_transformTypeParameter} from './_transformTypeParameter'\nimport {RELEASE_TAGS} from './constants'\nimport {_sanitizeName, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformTypeAlias(\n  ctx: TransformContext,\n  node: ApiTypeAlias,\n): SerializedAPITypeAlias {\n  if (!ctx.export) {\n    throw new Error('transformTypeAlias: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformTypeAlias: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformTypeAlias: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n  const name = _sanitizeName(node.name)\n\n  return {\n    _type: 'api.typeAlias',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(name)},\n    type: _transformTokens(\n      ctx,\n      node.excerptTokens.slice(\n        node.typeExcerpt.tokenRange.startIndex,\n        node.typeExcerpt.tokenRange.endIndex,\n      ),\n    ),\n    typeParameters: node.typeParameters.map((param, idx) =>\n      _transformTypeParameter(ctx, node, param, idx),\n    ),\n  }\n}\n","import {ApiVariable} from '@microsoft/api-extractor-model'\n\nimport {SanityReferenceValue} from '../_lib/sanity'\nimport {SerializedAPIVariable} from '../types'\nimport {_transformTokens} from './_transformTokens'\nimport {RELEASE_TAGS} from './constants'\nimport {_createExportMemberId, _sanitizeName, _slugify} from './helpers'\nimport {_transformDocComment} from './transformDocComment'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformVariable(\n  ctx: TransformContext,\n  node: ApiVariable,\n): SerializedAPIVariable {\n  if (!ctx.export) {\n    throw new Error('transformVariable: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformVariable: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformVariable: missing `release` document')\n  }\n\n  const name = _sanitizeName(node.name)\n  const docComment = node.tsdocComment\n  const comment = docComment ? _transformDocComment(docComment) : undefined\n  const type = _transformTokens(\n    ctx,\n    node.excerptTokens.slice(\n      node.variableTypeExcerpt.tokenRange.startIndex,\n      node.variableTypeExcerpt.tokenRange.endIndex,\n    ),\n  )\n  const isReactComponentType = _variableIsReactComponentType(node)\n  const propsType = isReactComponentType ? _variablePropsType(ctx, node) : undefined\n\n  return {\n    _type: 'api.variable',\n    comment,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    isReactComponentType,\n    name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    propsType,\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(name)},\n    type,\n  }\n}\n\nfunction _variableIsReactComponentType(node: ApiVariable) {\n  const typeTokens = node.excerptTokens.slice(\n    node.variableTypeExcerpt.tokenRange.startIndex,\n    node.variableTypeExcerpt.tokenRange.endIndex,\n  )\n\n  const typeCode = typeTokens\n    .map((t) => t.text)\n    .join('')\n    .trim()\n\n  const isNamedExoticComponent =\n    typeCode.startsWith('React.NamedExoticComponent<') ||\n    typeCode.startsWith('React_2.NamedExoticComponent<') ||\n    typeCode.startsWith('NamedExoticComponent<')\n  const isForwardRefExoticComponent =\n    typeCode.startsWith('React.ForwardRefExoticComponent<') ||\n    typeCode.startsWith('React_2.ForwardRefExoticComponent<') ||\n    typeCode.startsWith('ForwardRefExoticComponent<')\n  const isMemoExoticComponent =\n    typeCode.startsWith('React.MemoExoticComponent<') ||\n    typeCode.startsWith('React_2.MemoExoticComponent<') ||\n    typeCode.startsWith('MemoExoticComponent<')\n  const isStyledComponent = typeCode.startsWith('StyledComponent<')\n  const returnsReactElement =\n    typeCode.endsWith('=> React.ReactElement') ||\n    typeCode.endsWith('=> React_2.ReactElement') ||\n    typeCode.endsWith('=> ReactElement') ||\n    typeCode.endsWith('=> JSX.Element')\n\n  if (\n    isNamedExoticComponent ||\n    isForwardRefExoticComponent ||\n    isMemoExoticComponent ||\n    isStyledComponent ||\n    returnsReactElement\n  ) {\n    return true\n  }\n\n  return false\n}\n\nfunction _variablePropsType(\n  ctx: TransformContext,\n  node: ApiVariable,\n): SanityReferenceValue | undefined {\n  const typeTokens = node.excerptTokens.slice(\n    node.variableTypeExcerpt.tokenRange.startIndex,\n    node.variableTypeExcerpt.tokenRange.endIndex,\n  )\n\n  const componentRef = typeTokens.find((t) => t.kind === 'Reference' && t.text.endsWith('Props'))\n\n  if (componentRef && componentRef.canonicalReference) {\n    return {\n      _type: 'reference',\n      _ref: _createExportMemberId(ctx, componentRef.canonicalReference.toString()),\n    }\n\n    // console.log({\n    //   refString: sanityUIRef.canonicalReference.toString(),\n    //   ref: {\n    //     _type: 'reference',\n    //     _ref: _createExportMemberId(ctx, sanityUIRef.canonicalReference.toString()),\n    //   },\n    // })\n\n    // return undefined\n  }\n\n  return undefined\n}\n","import {\n  ApiClass,\n  ApiEnum,\n  ApiFunction,\n  ApiInterface,\n  ApiItem,\n  ApiNamespace,\n  ApiTypeAlias,\n  ApiVariable,\n} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPIMember, SerializedAPINamespace} from '../types'\nimport {RELEASE_TAGS} from './constants'\nimport {_slugify} from './helpers'\nimport {_transformClass} from './transformClass'\nimport {_transformDocComment} from './transformDocComment'\nimport {_transformEnum} from './transformEnum'\nimport {_transformFunction} from './transformFunction'\nimport {_transformInterface} from './transformInterface'\nimport {_transformTypeAlias} from './transformTypeAlias'\nimport {_transformVariable} from './transformVariable'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformNamespace(\n  ctx: TransformContext,\n  node: ApiNamespace,\n): SerializedAPINamespace {\n  if (!ctx.export) {\n    throw new Error('transformNamespace: missing `export` document')\n  }\n\n  if (!ctx.package) {\n    throw new Error('transformNamespace: missing `package` document')\n  }\n\n  if (!ctx.release) {\n    throw new Error('transformNamespace: missing `release` document')\n  }\n\n  const docComment = node.tsdocComment\n\n  return {\n    _type: 'api.namespace',\n    comment: docComment ? _transformDocComment(docComment) : undefined,\n    export: {_type: 'reference', _ref: ctx.export._id},\n    members: node.members.map((m, idx) => ({\n      _key: `member${idx}`,\n      ..._transformNamespaceMember(ctx, m),\n    })),\n    name: node.name,\n    package: {_type: 'reference', _ref: ctx.package._id},\n    release: {_type: 'reference', _ref: ctx.release._id},\n    releaseTag: RELEASE_TAGS[node.releaseTag],\n    slug: {_type: 'slug', current: _slugify(node.name)},\n  }\n}\n\nfunction _transformNamespaceMember(ctx: TransformContext, m: ApiItem): SerializedAPIMember {\n  if (m.kind === 'Class') {\n    return _transformClass(ctx, m as ApiClass)\n  }\n\n  if (m.kind === 'Enum') {\n    return _transformEnum(ctx, m as ApiEnum)\n  }\n\n  if (m.kind === 'Function') {\n    return _transformFunction(ctx, m as ApiFunction)\n  }\n\n  if (m.kind === 'Interface') {\n    return _transformInterface(ctx, m as ApiInterface)\n  }\n\n  if (m.kind === 'Namespace') {\n    return _transformNamespace(ctx, m as ApiNamespace)\n  }\n\n  if (m.kind === 'TypeAlias') {\n    return _transformTypeAlias(ctx, m as ApiTypeAlias)\n  }\n\n  if (m.kind === 'Variable') {\n    return _transformVariable(ctx, m as ApiVariable)\n  }\n\n  throw new Error(`Unknown namespace  kind: ${m.kind}`)\n}\n","import {\n  ApiClass,\n  ApiEnum,\n  ApiFunction,\n  ApiInterface,\n  ApiItem,\n  ApiNamespace,\n  ApiTypeAlias,\n  ApiVariable,\n} from '@microsoft/api-extractor-model'\n\nimport {SerializedAPIMember} from '../types'\nimport {_hash} from './helpers'\nimport {_transformClass} from './transformClass'\nimport {_transformEnum} from './transformEnum'\nimport {_transformFunction} from './transformFunction'\nimport {_transformInterface} from './transformInterface'\nimport {_transformNamespace} from './transformNamespace'\nimport {_transformTypeAlias} from './transformTypeAlias'\nimport {_transformVariable} from './transformVariable'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function transformExportMember(\n  ctx: TransformContext,\n  item: ApiItem,\n): SerializedAPIMember & {_id: string} {\n  if (item.kind === 'Class') {\n    return {_id: _getItemId(item), ..._transformClass(ctx, item as ApiClass)}\n  }\n\n  if (item.kind === 'Enum') {\n    return {_id: _getItemId(item), ..._transformEnum(ctx, item as ApiEnum)}\n  }\n\n  if (item.kind === 'Function') {\n    return {_id: _getItemId(item), ..._transformFunction(ctx, item as ApiFunction)}\n  }\n\n  if (item.kind === 'Interface') {\n    return {_id: _getItemId(item), ..._transformInterface(ctx, item as ApiInterface)}\n  }\n\n  if (item.kind === 'Namespace') {\n    return {_id: _getItemId(item), ..._transformNamespace(ctx, item as ApiNamespace)}\n  }\n\n  if (item.kind === 'TypeAlias') {\n    return {_id: _getItemId(item), ..._transformTypeAlias(ctx, item as ApiTypeAlias)}\n  }\n\n  if (item.kind === 'Variable') {\n    return {_id: _getItemId(item), ..._transformVariable(ctx, item as ApiVariable)}\n  }\n\n  throw new Error(`package: unknown member type: ${item.kind}`)\n}\n\nfunction _getItemId(item: ApiItem): string {\n  return `tsdoc-${_hash(item.canonicalReference.toString())}`\n}\n","import {ApiPackage} from '@microsoft/api-extractor-model'\n\nimport {SanityReferenceValue} from '../_lib/sanity'\nimport {APIPackageDocument} from '../types'\nimport {TransformContext} from './types'\n\n/**\n * @internal\n */\nexport function _transformPackage(ctx: TransformContext, node: ApiPackage): APIPackageDocument {\n  const _id = node.name.replace(/@/g, '').replace(/\\./g, '-').replace(/\\//g, '_')\n\n  return {\n    _type: 'api.package',\n    _id: `tsdoc-${_id}`,\n    latestRelease: ctx.package?.latestRelease as SanityReferenceValue,\n    name: ctx.name,\n    releases: [],\n    scope: ctx.scope,\n  }\n}\n","import path from 'path'\n\nimport type {ExtractResult} from '../extract'\nimport type {\n  APIDocument,\n  APIExportDocument,\n  APIPackageDocument,\n  APIReleaseDocument,\n  APISymbolDocument,\n  SerializedAPIMember,\n} from '../types'\nimport {_isRecord, _parsePackageName} from './helpers'\nimport {transformExportMember} from './transformExportMember'\nimport {_transformPackage} from './transformPackage'\nimport type {TransformContext, TransformOpts} from './types'\n\nfunction formatReleaseId(\n  packageScope: string | undefined,\n  packageName: string,\n  releaseVersion: string,\n) {\n  return [packageScope, packageName, releaseVersion]\n    .filter(Boolean)\n    .join('_')\n    .replace(/@/g, '')\n    .replace(/\\./g, '-')\n    .replace(/\\//g, '_')\n}\n\nfunction formatExportId(\n  packageScope: string | undefined,\n  packageName: string,\n  releaseVersion: string,\n  exportPath: string,\n) {\n  const prefix = [packageScope, packageName, releaseVersion].filter(Boolean).join('_')\n\n  return path\n    .join(prefix, exportPath === '.' ? './_main' : exportPath)\n    .replace(/@/g, '')\n    .replace(/\\./g, '-')\n    .replace(/\\//g, '_')\n}\n\n/** @public */\nexport function transform(extractResults: ExtractResult[], opts: TransformOpts): APIDocument[] {\n  const {version: releaseVersion} = opts.package\n\n  const state: {\n    exports: APIExportDocument[]\n    members: (SerializedAPIMember & {_id: string})[]\n    package?: APIPackageDocument\n    release?: APIReleaseDocument\n    memberNames: string[]\n    symbols: APISymbolDocument[]\n  } = {\n    exports: [],\n    members: [],\n    package: opts.currPackageDoc || undefined,\n    release: undefined,\n    memberNames: [],\n    symbols: [],\n  }\n\n  for (const extractResult of extractResults) {\n    const {apiPackage, exportPath} = extractResult\n\n    if (!apiPackage) {\n      // skip failed\n      continue\n    }\n\n    const [packageScope, packageName] = _parsePackageName(apiPackage.name)\n\n    const releaseId = formatReleaseId(packageScope, packageName, releaseVersion)\n\n    const exportId = formatExportId(packageScope, packageName, releaseVersion, exportPath)\n\n    const exportDoc: APIExportDocument = {\n      _id: `tsdoc-${exportId}`,\n      _type: 'api.export',\n      package: {_type: 'reference', _ref: ''},\n      release: {_type: 'reference', _ref: ''},\n      members: [],\n      name: resolveExportId(packageScope, packageName, exportPath),\n      path: exportPath || '.',\n    }\n\n    const ctx: TransformContext = {\n      apiPackage,\n      scope: packageScope,\n      name: packageName,\n      version: releaseVersion,\n      package: state.package,\n      release: state.release,\n      export: exportDoc,\n    }\n\n    const packageDoc = _transformPackage(ctx, apiPackage)\n\n    exportDoc.package._ref = packageDoc._id\n\n    ctx.package = packageDoc\n\n    ctx.release = {\n      exports: [],\n      memberNames: [],\n      ...ctx.release,\n      _type: 'api.release',\n      _id: `tsdoc-${releaseId}`,\n      package: {_type: 'reference', _ref: ctx.package._id},\n      version: releaseVersion,\n    }\n\n    exportDoc.release._ref = ctx.release._id\n\n    state.exports.push(exportDoc)\n\n    ctx.release.exports.push({\n      _type: 'reference',\n      _key: exportDoc._id,\n      _ref: exportDoc._id,\n    })\n\n    ctx.package.latestRelease = {_type: 'reference', _ref: ctx.release._id}\n\n    ctx.package.releases.push({\n      _key: ctx.release._id,\n      _type: 'reference',\n      _ref: ctx.release._id,\n    })\n\n    for (const member of apiPackage.members[0]?.members || []) {\n      const memberDoc = transformExportMember(ctx, member)\n\n      state.members.push(memberDoc)\n\n      exportDoc.members.push({\n        _key: memberDoc._id,\n        _type: 'reference',\n        _ref: memberDoc._id,\n      })\n\n      const symbolDoc: APISymbolDocument = {\n        _type: 'api.symbol',\n        _id: `tsdoc-${packageDoc._id}_${member.displayName}`,\n        name: member.displayName,\n        package: {_type: 'reference', _ref: packageDoc._id},\n      }\n\n      const hasSymbol = state.symbols.some((s) => s.name === symbolDoc.name)\n\n      if (!hasSymbol) state.symbols.push(symbolDoc)\n\n      if (!ctx.release.memberNames.includes(symbolDoc.name)) {\n        ctx.release.memberNames.push(symbolDoc.name)\n      }\n    }\n\n    // keep these references\n    state.package = ctx.package\n    state.release = ctx.release\n  }\n\n  const result: APIDocument[] = []\n\n  if (state.package) result.push(state.package)\n  if (state.release) result.push(state.release)\n\n  result.push(...state.exports, ...state.members, ...state.symbols)\n\n  // Remove references to non-existing documents\n  for (const doc of result) {\n    _removeNonExistingRefs(doc as unknown as Record<string, unknown>, result)\n  }\n\n  return result\n}\n\nfunction resolveExportId(\n  packageScope: string | undefined,\n  packageName: string,\n  exportPath: string | undefined,\n) {\n  const packageId = [packageScope, packageName].filter(Boolean).join('/')\n\n  return path.join(packageId, exportPath || '.')\n}\n\nfunction _removeNonExistingRefs(source: Record<string, unknown>, docs: APIDocument[]) {\n  for (const [key, value] of Object.entries(source)) {\n    if (_isRecord(value)) {\n      if (value['_ref'] === '$$unknown$$') {\n        const doc = docs.find((d) => {\n          return 'name' in d && d.name === source['text']\n        })\n\n        if (!doc) {\n          delete source[key]\n        }\n\n        value['_ref'] = doc?._id\n\n        continue\n      }\n\n      if (value['_type'] === 'reference') {\n        const exists = docs.some((d) => d._id === value['_ref'])\n\n        if (!exists) {\n          delete source[key]\n        }\n      } else {\n        _removeNonExistingRefs(value, docs)\n      }\n    }\n  }\n}\n"],"names":["identifier"],"mappings":"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"}