{
  "version": 3,
  "sources": ["../plugin/lib/util.ts", "../plugin/lib/constant.ts", "../plugin/mkcert/index.ts", "../plugin/lib/logger.ts", "../plugin/mkcert/config.ts", "../plugin/lib/request.ts", "../plugin/mkcert/downloader.ts", "../plugin/mkcert/record.ts", "../plugin/mkcert/source.ts", "../plugin/mkcert/version.ts", "../plugin/index.ts"],
  "sourcesContent": ["import child_process, { ExecOptions } from 'child_process'\nimport crypto from 'crypto'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport util from 'util'\n\nimport { PLUGIN_DATA_DIR } from './constant'\n\n/**\n * Check if file exists\n *\n * @param filePath file path\n * @returns does the file exist\n */\nexport const exists = async (filePath: string) => {\n  try {\n    await fs.promises.access(filePath)\n    return true\n  } catch (error) {\n    return false\n  }\n}\n\n/**\n * Resolve file path with `PLUGIN_DATA_DIR`\n *\n * @param fileName file name\n * @returns absolute path\n */\nexport const resolvePath = (fileName: string) => {\n  return path.resolve(PLUGIN_DATA_DIR, fileName)\n}\n\nexport const mkdir = async (dirname: string) => {\n  const isExist = await exists(dirname)\n\n  if (!isExist) {\n    await fs.promises.mkdir(dirname, { recursive: true })\n  }\n}\n\nexport const ensureDirExist = async (filePath: string) => {\n  const dirname = path.dirname(filePath)\n  await mkdir(dirname)\n}\n\nexport const readFile = async (filePath: string) => {\n  const isExist = await exists(filePath)\n  return isExist ? (await fs.promises.readFile(filePath)).toString() : undefined\n}\n\nexport const writeFile = async (\n  filePath: string,\n  data: string | Uint8Array\n) => {\n  await ensureDirExist(filePath)\n  await fs.promises.writeFile(filePath, data)\n  await fs.promises.chmod(filePath, 0o777)\n}\n\nexport const exec = async (cmd: string, options?: ExecOptions) => {\n  return await util.promisify(child_process.exec)(cmd, options)\n}\n\n/**\n * http://nodejs.cn/api/os/os_networkinterfaces.html\n */\nconst isIPV4 = (family: string | number) => {\n  return family === 'IPv4' || family === 4\n}\n\nexport const getLocalV4Ips = () => {\n  const interfaceDict = os.networkInterfaces()\n  const addresses: string[] = []\n  for (const key in interfaceDict) {\n    const interfaces = interfaceDict[key]\n    if (interfaces) {\n      for (const item of interfaces) {\n        if (isIPV4(item.family)) {\n          addresses.push(item.address)\n        }\n      }\n    }\n  }\n\n  return addresses\n}\n\nexport const getDefaultHosts = () => {\n  return ['localhost', ...getLocalV4Ips()]\n}\n\nexport const getHash = async (filePath: string) => {\n  const content = await readFile(filePath)\n\n  if (content) {\n    const hash = crypto.createHash('sha256')\n    hash.update(content)\n    return hash.digest('hex')\n  }\n\n  return undefined\n}\n\nconst isObj = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]'\n\nconst mergeObj = (target: any, source: any) => {\n  if (!(isObj(target) && isObj(source))) {\n    return target\n  }\n\n  for (const key in source) {\n    if (Object.prototype.hasOwnProperty.call(source, key)) {\n      const targetValue = target[key]\n      const sourceValue = source[key]\n\n      if (isObj(targetValue) && isObj(sourceValue)) {\n        mergeObj(targetValue, sourceValue)\n      } else {\n        target[key] = sourceValue\n      }\n    }\n  }\n}\n\nexport const deepMerge = (target: any, ...source: any[]) => {\n  return source.reduce((a, b) => mergeObj(a, b), target)\n}\n\nexport const prettyLog = (obj?: Record<string, any>) => {\n  return JSON.stringify(obj, null, 2)\n}\n\nexport const escape = (path?: string) => {\n  return `\"${path}\"`\n}\n", "import os from 'os'\nimport path from 'path'\n\nexport const PKG_NAME = 'vite-plugin-mkcert'\n\nexport const PLUGIN_NAME = PKG_NAME.replace(/-/g, ':')\n\nexport const PLUGIN_DATA_DIR = path.join(os.homedir(), `.${PKG_NAME}`)\n", "import fs from 'fs'\nimport process from 'process'\n\nimport pc from 'picocolors'\n// import { Logger } from 'vite'\n\nimport { debug } from '../lib/logger'\nimport {\n  ensureDirExist,\n  escape,\n  exec,\n  exists,\n  getHash,\n  prettyLog,\n  resolvePath\n} from '../lib/util'\n\nimport Config from './config'\nimport Downloader from './downloader'\nimport Record from './record'\nimport { BaseSource, GithubSource, CodingSource } from './source'\nimport VersionManger from './version'\n\nexport type SourceType = 'github' | 'coding' | BaseSource\nexport type Logger = typeof console\nexport type MkcertOptions = {\n  /**\n   * Whether to force generate\n   */\n  force?: boolean\n\n  /**\n   * Automatically upgrade mkcert\n   *\n   * @default false\n   */\n  autoUpgrade?: boolean\n\n  /**\n   * Specify mkcert download source\n   *\n   * @default github\n   */\n  source?: SourceType\n\n  /**\n   * If your network is restricted, you can specify a local binary file instead of downloading\n   *\n   * @description it should be absolute path\n   * @default none\n   */\n  mkcertPath?: string\n}\n\nexport type MkcertProps = MkcertOptions & {\n  logger: Logger\n}\n\nconst KEY_FILE_PATH = resolvePath('certs/dev.key')\nconst CERT_FILE_PATH = resolvePath('certs/dev.pem')\n\nclass Mkcert {\n  private force?: boolean\n  private autoUpgrade?: boolean\n  private mkcertLocalPath?: string\n  private source: BaseSource\n  private logger: Logger\n\n  private mkcertSavedPath: string\n  private sourceType: SourceType\n\n  private config: Config\n\n  public static create(options: MkcertProps) {\n    return new Mkcert(options)\n  }\n\n  private constructor(options: MkcertProps) {\n    const { force, autoUpgrade, source, mkcertPath, logger } = options\n\n    this.force = force\n    this.logger = logger\n    this.autoUpgrade = autoUpgrade\n    this.mkcertLocalPath = mkcertPath\n    this.sourceType = source || 'github'\n\n    if (this.sourceType === 'github') {\n      this.source = GithubSource.create()\n    } else if (this.sourceType === 'coding') {\n      this.source = CodingSource.create()\n    } else {\n      this.source = this.sourceType\n    }\n\n    this.mkcertSavedPath = resolvePath(\n      process.platform === 'win32' ? 'mkcert.exe' : 'mkcert'\n    )\n\n    this.config = new Config()\n  }\n\n  private async getMkcertBinnary() {\n    return (await this.checkMkcert())\n      ? this.mkcertLocalPath || this.mkcertSavedPath\n      : undefined\n  }\n\n  /**\n   * Check if mkcert exists\n   */\n  private async checkMkcert() {\n    let exist: boolean\n    if (this.mkcertLocalPath) {\n      exist = await exists(this.mkcertLocalPath)\n      if (!exists) {\n        this.logger.error(\n          pc.red(\n            `${this.mkcertLocalPath} does not exist, please check the mkcertPath paramter`\n          )\n        )\n      }\n    } else {\n      exist = await exists(this.mkcertSavedPath)\n    }\n    return exist\n  }\n\n  private async getCertificate() {\n    const key = await fs.promises.readFile(KEY_FILE_PATH)\n    const cert = await fs.promises.readFile(CERT_FILE_PATH)\n\n    return {\n      key,\n      cert\n    }\n  }\n\n  private async createCertificate(hosts: string[]) {\n    const names = hosts.join(' ')\n\n    const mkcertBinnary = await this.getMkcertBinnary()\n\n    if (!mkcertBinnary) {\n      debug(\n        `Mkcert does not exist, unable to generate certificate for ${names}`\n      )\n    }\n\n    await ensureDirExist(KEY_FILE_PATH)\n    await ensureDirExist(CERT_FILE_PATH)\n\n    const cmd = `${escape(mkcertBinnary)} -install -key-file ${escape(\n      KEY_FILE_PATH\n    )} -cert-file ${escape(CERT_FILE_PATH)} ${names}`\n\n    await exec(cmd, {\n      env: {\n        ...process.env,\n        JAVA_HOME: undefined\n      }\n    })\n\n    this.logger.info(\n      `The certificate is saved in:\\n${KEY_FILE_PATH}\\n${CERT_FILE_PATH}`\n    )\n  }\n\n  private getLatestHash = async () => {\n    return {\n      key: await getHash(KEY_FILE_PATH),\n      cert: await getHash(CERT_FILE_PATH)\n    }\n  }\n\n  private async regenerate(record: Record, hosts: string[]) {\n    await this.createCertificate(hosts)\n\n    const hash = await this.getLatestHash()\n\n    record.update({ hosts, hash })\n  }\n\n  public async init() {\n    await this.config.init()\n\n    const exist = await this.checkMkcert()\n\n    if (!exist) {\n      await this.initMkcert()\n    } else if (this.autoUpgrade) {\n      await this.upgradeMkcert()\n    }\n  }\n\n  private async getSourceInfo() {\n    const sourceInfo = await this.source.getSourceInfo()\n\n    if (!sourceInfo) {\n      if (typeof this.sourceType === 'string') {\n        this.logger.error(\n          'Failed to request mkcert information, please check your network'\n        )\n        if (this.sourceType === 'github') {\n          this.logger.info(\n            'If you are a user in china, maybe you should set \"source\" paramter to \"coding\"'\n          )\n        }\n      } else {\n        this.logger.info(\n          'Please check your custom \"source\", it seems to return invalid result'\n        )\n      }\n      return undefined\n    }\n\n    return sourceInfo\n  }\n  private async initMkcert() {\n    const sourceInfo = await this.getSourceInfo()\n\n    debug('The mkcert does not exist, download it now')\n\n    if (!sourceInfo) {\n      this.logger.error(\n        'Can not obtain download information of mkcert, init skipped'\n      )\n      return\n    }\n\n    await this.downloadMkcert(sourceInfo.downloadUrl, this.mkcertSavedPath)\n  }\n\n  private async upgradeMkcert() {\n    const versionManger = new VersionManger({ config: this.config })\n    const sourceInfo = await this.getSourceInfo()\n\n    if (!sourceInfo) {\n      this.logger.error(\n        'Can not obtain download information of mkcert, update skipped'\n      )\n      return\n    }\n\n    const versionInfo = versionManger.compare(sourceInfo.version)\n\n    if (!versionInfo.shouldUpdate) {\n      debug('Mkcert is kept latest version, update skipped')\n      return\n    }\n\n    if (versionInfo.breakingChange) {\n      debug(\n        'The current version of mkcert is %s, and the latest version is %s, there may be some breaking changes, update skipped',\n        versionInfo.currentVersion,\n        versionInfo.nextVersion\n      )\n      return\n    }\n\n    debug(\n      'The current version of mkcert is %s, and the latest version is %s, mkcert will be updated',\n      versionInfo.currentVersion,\n      versionInfo.nextVersion\n    )\n\n    await this.downloadMkcert(sourceInfo.downloadUrl, this.mkcertSavedPath)\n    versionManger.update(versionInfo.nextVersion)\n  }\n\n  private async downloadMkcert(sourceUrl: string, distPath: string) {\n    const downloader = Downloader.create()\n    await downloader.download(sourceUrl, distPath)\n  }\n\n  public async renew(hosts: string[]) {\n    const record = new Record({ config: this.config })\n\n    if (this.force) {\n      debug(`Certificate is forced to regenerate`)\n\n      await this.regenerate(record, hosts)\n    }\n\n    if (!record.contains(hosts)) {\n      debug(\n        `The hosts changed from [${record.getHosts()}] to [${hosts}], start regenerate certificate`\n      )\n\n      await this.regenerate(record, hosts)\n      return\n    }\n\n    const hash = await this.getLatestHash()\n\n    if (record.tamper(hash)) {\n      debug(\n        `The hash changed from ${prettyLog(record.getHash())} to ${prettyLog(\n          hash\n        )}, start regenerate certificate`\n      )\n\n      await this.regenerate(record, hosts)\n      return\n    }\n\n    debug('Neither hosts nor hash has changed, skip regenerate certificate')\n  }\n\n  /**\n   * Get certificates\n   *\n   * @param hosts host collection\n   * @returns cretificates\n   */\n  public async install(hosts: string[]) {\n    if (hosts.length) {\n      await this.renew(hosts)\n    }\n\n    return await this.getCertificate()\n  }\n}\n\nexport default Mkcert\n", "import Debug from 'debug'\n\nimport { PLUGIN_NAME } from './constant'\n\nexport const debug = Debug(PLUGIN_NAME)\n", "import { debug } from '../lib/logger'\nimport {\n  resolvePath,\n  readFile,\n  writeFile,\n  prettyLog,\n  deepMerge\n} from '../lib/util'\n\nexport type RecordMate = {\n  /**\n   * The hosts that have generated certificate\n   */\n  hosts: string[]\n\n  /**\n   * file hash\n   */\n  hash?: RecordHash\n}\n\nexport type RecordHash = {\n  key?: string\n  cert?: string\n}\n\nconst CONFIG_FILE_NAME = 'config.json'\nconst CONFIG_FILE_PATH = resolvePath(CONFIG_FILE_NAME)\n\nclass Config {\n  /**\n   * The mkcert version\n   */\n  private version: string | undefined\n\n  private record: RecordMate | undefined\n\n  public async init() {\n    const str = await readFile(CONFIG_FILE_PATH)\n    const options = str ? JSON.parse(str) : undefined\n\n    if (options) {\n      this.version = options.version\n      this.record = options.record\n    }\n  }\n\n  private async serialize() {\n    await writeFile(CONFIG_FILE_PATH, prettyLog(this))\n  }\n\n  // deep merge\n  public async merge(obj: Record<string, any>) {\n    const currentStr = prettyLog(this)\n\n    deepMerge(this, obj)\n\n    const nextStr = prettyLog(this)\n\n    debug(\n      `Receive parameter ${prettyLog(\n        obj\n      )}, then update config from ${currentStr} to ${nextStr}`\n    )\n\n    await this.serialize()\n  }\n\n  public getRecord() {\n    return this.record\n  }\n\n  public getVersion() {\n    return this.version\n  }\n}\n\nexport default Config\n", "import axios from 'axios'\n\nimport { debug } from './logger'\n\nconst request = axios.create()\n\nrequest.interceptors.response.use(\n  res => {\n    return res\n  },\n  error => {\n    debug('Request error: %o', error)\n    return Promise.reject(error)\n  }\n)\n\nexport default request\n", "import { debug } from '../lib/logger'\nimport request from '../lib/request'\nimport { writeFile } from '../lib/util'\n\nclass Downloader {\n  public static create() {\n    return new Downloader()\n  }\n\n  private constructor() {}\n\n  public async download(downloadUrl: string, savedPath: string) {\n    debug('Downloading the mkcert executable from %s', downloadUrl)\n\n    const { data } = await request.get(downloadUrl, {\n      responseType: 'arraybuffer'\n    })\n\n    await writeFile(savedPath, data)\n\n    debug('The mkcert has been saved to %s', savedPath)\n  }\n}\n\nexport default Downloader\n", "import Config, { RecordHash, RecordMate } from './config'\n\nexport type RecordProps = {\n  config: Config\n}\nclass Record {\n  private config: Config\n\n  constructor(options: RecordProps) {\n    this.config = options.config\n  }\n\n  public getHosts() {\n    return this.config.getRecord()?.hosts\n  }\n\n  public getHash() {\n    return this.config.getRecord()?.hash\n  }\n\n  public contains(hosts: string[]) {\n    const oldHosts = this.getHosts()\n\n    if (!oldHosts) {\n      return false\n    }\n\n    // require hosts is subset of oldHosts\n    for (const host of hosts) {\n      if (!oldHosts.includes(host)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  // whether the files has been tampered with\n  public tamper(hash: RecordHash) {\n    const oldHash = this.getHash()\n\n    if (!oldHash) {\n      return false\n    }\n\n    if (oldHash.key === hash.key && oldHash.cert === hash.cert) {\n      return false\n    }\n\n    return true\n  }\n\n  public async update(record: RecordMate) {\n    await this.config.merge({ record })\n  }\n}\n\nexport default Record\n", "import { Octokit } from '@octokit/rest'\n\nimport request from '../lib/request'\n\nexport type SourceInfo = {\n  version: string\n  downloadUrl: string\n}\n\nexport abstract class BaseSource {\n  abstract getSourceInfo(): Promise<SourceInfo | undefined>\n\n  protected getPlatformIdentifier() {\n    switch (process.platform) {\n      case 'win32':\n        return 'windows-amd64.exe'\n      case 'linux':\n        return process.arch === 'arm64'\n          ? 'linux-arm64'\n          : process.arch === 'arm'\n          ? 'linux-arm'\n          : 'linux-amd64'\n      case 'darwin':\n        return 'darwin-amd64'\n      default:\n        throw new Error('Unsupported platform')\n    }\n  }\n}\n\n/**\n * Download mkcert from github.com\n */\nexport class GithubSource extends BaseSource {\n  public static create() {\n    return new GithubSource()\n  }\n\n  private constructor() {\n    super()\n  }\n\n  public async getSourceInfo(): Promise<SourceInfo | undefined> {\n    const octokit = new Octokit()\n    const { data } = await octokit.repos.getLatestRelease({\n      owner: 'FiloSottile',\n      repo: 'mkcert'\n    })\n    const platformIdentifier = this.getPlatformIdentifier()\n\n    const version = data.tag_name\n    const downloadUrl = data.assets.find(item =>\n      item.name.includes(platformIdentifier)\n    )?.browser_download_url\n\n    if (!(version && downloadUrl)) {\n      return undefined\n    }\n\n    return {\n      downloadUrl,\n      version\n    }\n  }\n}\n\n/**\n * Download mkcert from coding.net\n *\n * @see {https://help.coding.net/openapi}\n */\nexport class CodingSource extends BaseSource {\n  public static CODING_API = 'https://e.coding.net/open-api'\n  public static CODING_AUTHORIZATION =\n    'token 000f7831ec425079439b0f55f55c729c9280d66e'\n  public static CODING_PROJECT_ID = 8524617\n  public static REPOSITORY = 'mkcert'\n\n  public static create() {\n    return new CodingSource()\n  }\n\n  private constructor() {\n    super()\n  }\n\n  private async request(data: any) {\n    return request({\n      data,\n      method: 'POST',\n      url: CodingSource.CODING_API,\n      headers: {\n        Authorization: CodingSource.CODING_AUTHORIZATION\n      }\n    })\n  }\n\n  /**\n   * Get filename of Coding.net artifacts\n   *\n   * @see https://liuweigl.coding.net/p/github/artifacts/885241/generic/packages\n   *\n   * @returns name\n   */\n  private getPackageName() {\n    return `mkcert-${this.getPlatformIdentifier()}`\n  }\n\n  async getSourceInfo(): Promise<SourceInfo | undefined> {\n    /**\n     * @see https://help.coding.net/openapi#e2106ec64e75af66f188463b1bb7e165\n     */\n    const { data: VersionData } = await this.request({\n      Action: 'DescribeArtifactVersionList',\n      ProjectId: CodingSource.CODING_PROJECT_ID,\n      Repository: CodingSource.REPOSITORY,\n      Package: this.getPackageName(),\n      PageSize: 1\n    })\n\n    const version = VersionData.Response.Data.InstanceSet[0]?.Version\n\n    if (!version) {\n      return undefined\n    }\n\n    /**\n     * @see https://help.coding.net/openapi#63ad6bc7469373cef575e92bb92be71e\n     */\n    const { data: FileData } = await this.request({\n      Action: 'DescribeArtifactFileDownloadUrl',\n      ProjectId: CodingSource.CODING_PROJECT_ID,\n      Repository: CodingSource.REPOSITORY,\n      Package: this.getPackageName(),\n      PackageVersion: version\n    })\n\n    const downloadUrl = FileData.Response.Url\n\n    if (!downloadUrl) {\n      return undefined\n    }\n\n    return {\n      downloadUrl,\n      version\n    }\n  }\n}\n", "import { debug } from '../lib/logger'\n\nimport Config from './config'\n\nexport type VersionMangerProps = {\n  config: Config\n}\n\nconst parseVersion = (version: string) => {\n  const str = version.trim().replace(/v/i, '')\n\n  return str.split('.')\n}\n\nclass VersionManger {\n  private config: Config\n\n  public constructor(props: VersionMangerProps) {\n    this.config = props.config\n  }\n\n  public async update(version: string) {\n    try {\n      await this.config.merge({ version })\n    } catch (err) {\n      debug('Failed to record mkcert version info: %o', err)\n    }\n  }\n\n  public compare(version: string) {\n    const currentVersion = this.config.getVersion()\n\n    if (!currentVersion) {\n      return {\n        currentVersion,\n        nextVersion: version,\n        breakingChange: false,\n        shouldUpdate: true\n      }\n    }\n\n    let breakingChange = false\n    let shouldUpdate = false\n\n    const newVersion = parseVersion(version)\n    const oldVersion = parseVersion(currentVersion)\n\n    for (let i = 0; i < newVersion.length; i++) {\n      if (newVersion[i] > oldVersion[i]) {\n        shouldUpdate = true\n        breakingChange = i === 0\n        break\n      }\n    }\n    return {\n      breakingChange,\n      shouldUpdate,\n      currentVersion,\n      nextVersion: version\n    }\n  }\n}\n\nexport default VersionManger\n", "import { getDefaultHosts } from './lib/util'\nimport Mkcert, { MkcertOptions } from './mkcert'\n\nexport { BaseSource, type SourceInfo } from './mkcert/source'\n\nexport type ViteCertificateOptions = MkcertOptions & {\n  /**\n   * The hosts that needs to generate the certificate.\n   */\n  hosts?: string[]\n}\n\nconst webpackPlugin = async function (\n  options: MkcertOptions & { hosts: any[] }\n) {\n  const logger = console\n  const mkcert = Mkcert.create({\n    logger,\n    ...options\n  })\n\n  await mkcert.init()\n\n  const allHosts = [...getDefaultHosts(), ...options.hosts]\n\n  const uniqueHosts = Array.from(new Set(allHosts)).filter(item => !!item)\n\n  const certificate = await mkcert.install(uniqueHosts)\n\n  return {\n    ...certificate\n  }\n}\n\nexport default webpackPlugin\n"],
  "mappings": "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",
  "names": ["os", "path", "path", "os", "fs", "process", "process", "fs"]
}
