{"version":3,"file":"index.mjs","names":[],"sources":["../../src/node/utils/gmApi.ts","../../src/node/userscript/index.ts","../../src/node/utils/grant.ts","../../src/node/utils/others.ts","../../src/node/utils/systemjs.ts","../../src/node/utils/topLevelAwait.ts","../../src/node/plugins/css.ts","../../src/node/plugins/buildBundle.ts","../../src/node/plugins/config.ts","../../src/node/utils/pkg.ts","../../src/node/plugins/externalGlobals.ts","../../src/node/plugins/externalResource.ts","../../src/node/plugins/fixAssetUrl.ts","../../src/node/plugins/fixClient.ts","../../src/node/plugins/fixCssUrl.ts","../../src/node/plugins/fixWorker.ts","../../src/node/utils/template.ts","../../src/node/plugins/perview.ts","../../src/node/plugins/removePreload.ts","../../src/node/plugins/redirectClient.ts","../../src/node/utils/openBrowser.ts","../../src/node/plugins/server.ts","../../src/node/plugins/style.ts","../../src/node/plugins/virtualHtml.ts","../../src/node/plugins/index.ts","../../src/node/cdn.ts","../../src/node/utils/option.ts","../../src/node/index.ts"],"sourcesContent":["export const gmIdentifiers = [\n  'GM_addElement',\n  'GM_addStyle',\n  'GM_addValueChangeListener',\n  'GM_cookie',\n  'GM_deleteValue',\n  'GM_deleteValues',\n  'GM_download',\n  'GM_getResourceText',\n  'GM_getResourceURL',\n  'GM_getTab',\n  'GM_getTabs',\n  'GM_getValue',\n  'GM_getValues',\n  'GM_info',\n  'GM_listValues',\n  'GM_log',\n  'GM_notification',\n  'GM_openInTab',\n  'GM_registerMenuCommand',\n  'GM_removeValueChangeListener',\n  'GM_saveTab',\n  'GM_setClipboard',\n  'GM_setValue',\n  'GM_setValues',\n  'GM_unregisterMenuCommand',\n  'GM_webRequest',\n  'GM_xmlhttpRequest',\n  'GM_audio',\n] as const;\n\nconst gmMembers = [\n  'GM.addElement',\n  'GM.addStyle',\n  'GM.addValueChangeListener',\n  'GM.cookie',\n  'GM.deleteValue',\n  'GM.deleteValues',\n  'GM.download',\n  'GM.getResourceText',\n  // https://www.tampermonkey.net/documentation.php#api:GM_getResourceURL\n  'GM.getResourceUrl',\n  'GM.getTab',\n  'GM.getTabs',\n  'GM.getValue',\n  'GM.getValues',\n  'GM.info',\n  'GM.listValues',\n  'GM.log',\n  'GM.notification',\n  'GM.openInTab',\n  'GM.registerMenuCommand',\n  'GM.removeValueChangeListener',\n  'GM.saveTab',\n  'GM.setClipboard',\n  'GM.setValue',\n  'GM.setValues',\n  'GM.unregisterMenuCommand',\n  'GM.webRequest',\n  'GM.xmlHttpRequest',\n  'GM.audio',\n] as const;\n\nconst othersGrantNames = [\n  'unsafeWindow',\n  'window.close',\n  'window.focus',\n  'window.onurlchange',\n] as const;\n\nexport type GrantType =\n  | (typeof gmIdentifiers)[number]\n  | (typeof gmMembers)[number]\n  | (typeof othersGrantNames)[number];\n\nexport const grantNames = [...gmMembers, ...gmIdentifiers, ...othersGrantNames];\n","import { grantNames, type GrantType } from '../utils/gmApi.ts';\nimport type {\n  ResolvedMonkeyOption,\n  IArray,\n  LocaleType,\n} from '../utils/types.ts';\nimport type { GreasemonkeyUserScript, GreaseRunAt } from './greasemonkey.ts';\nimport type {\n  AntifeatureType,\n  TampermonkeyUserScript,\n  TamperRunAt,\n} from './tampermonkey.ts';\nimport type { ViolentmonkeyUserScript, ViolentRunAt } from './violentmonkey.ts';\nimport type { ViolentInjectInto } from './violentmonkey.ts';\n\nexport type {\n  GreasemonkeyUserScript,\n  TampermonkeyUserScript,\n  ViolentmonkeyUserScript,\n};\n\n/**\n * @see https://greasyfork.org/help/meta-keys\n */\ninterface GreasyforkUserScript {\n  /**\n   * @see https://greasyfork.org/help/meta-keys\n   * @default package.json.license\n   */\n  license?: string;\n\n  /**\n   * @see https://greasyfork.org/help/meta-keys\n   */\n  contributionURL?: string;\n\n  /**\n   * @see https://greasyfork.org/help/meta-keys\n   */\n  contributionAmount?: string;\n\n  /**\n   * @see https://greasyfork.org/help/meta-keys\n   */\n  compatible?: string;\n\n  /**\n   * @see https://greasyfork.org/help/meta-keys\n   */\n  incompatible?: string;\n}\n\ninterface MergemonkeyUserScript {\n  /**\n   * @default package.json.name??'monkey'\n   * @default {...{'':package.json.name??'monkey'},...name} // if name is object\n   */\n  name?: string | LocaleType<string>;\n\n  namespace?: string;\n\n  /**\n   * @default package.json.version\n   */\n  version?: string;\n\n  /**\n   * @default package.json.description\n   * @default {...{'':package.json.description},...description} // if description is object\n   */\n  description?: string | LocaleType<string>;\n\n  /**\n   * @default package.json.author\n   */\n  author?: string;\n\n  /**\n   * @default package.json.homepage\n   */\n  homepage?: string;\n\n  /**\n   * @default package.json.homepage\n   */\n  homepageURL?: string;\n\n  /**\n   * @default package.json.repository\n   */\n  source?: string;\n\n  /**\n   * @default package.json.bugs\n   */\n  supportURL?: string;\n\n  /**\n   * @see https://wiki.greasespot.net/Metadata_Block#.40run-at\n   *\n   * @see https://www.tampermonkey.net/documentation.php#meta:run_at\n   *\n   * @see https://violentmonkey.github.io/api/metadata-block/#run-at\n   *\n   */\n  'run-at'?: GreaseRunAt | TamperRunAt | ViolentRunAt;\n\n  /**\n   * @see https://wiki.greasespot.net/Metadata_Block#.40grant\n   *\n   * @see https://www.tampermonkey.net/documentation.php#meta:grant\n   *\n   * @see https://violentmonkey.github.io/api/metadata-block/#grant\n   *\n   * if set '\\*', will add all GM_* to UserScript\n   */\n  grant?: IArray<GrantType> | 'none' | '*';\n\n  /**\n   * custom extra meta\n   * @example\n   * [['antifeature', ['miner', 'hello233']]]\n   * // -->\n   * // \\@antifeature  miner     hello233\n   */\n  $extra?: [string, IArray<string>][] | Record<string, IArray<string>>;\n}\n\n/**\n * UserScript, merge metadata from Greasemonkey, Tampermonkey, Violentmonkey, Greasyfork\n */\nexport type MonkeyUserScript = GreasemonkeyUserScript &\n  TampermonkeyUserScript &\n  ViolentmonkeyUserScript &\n  GreasyforkUserScript &\n  MergemonkeyUserScript;\n\nexport interface FinalUserScript extends GreasyforkUserScript {\n  name: LocaleType<string>;\n  namespace?: string;\n  version?: string;\n  description: LocaleType<string>;\n  icon?: string;\n  include: string[];\n  match: string[];\n  exclude: string[];\n  require: string[];\n  resource: Record<string, string>;\n  noframes: boolean;\n  unwrap: boolean;\n  webRequest: string[];\n\n  author?: string;\n  copyright?: string;\n  homepage?: string;\n  homepageURL?: string;\n  website?: string;\n  source?: string;\n  iconURL?: string;\n  defaulticon?: string;\n  icon64?: string;\n  icon64URL?: string;\n  updateURL?: string;\n  downloadURL?: string;\n  supportURL?: string;\n  connect: string[];\n  sandbox?: string;\n  tag: string[];\n  antifeature: AntifeatureType[];\n\n  'exclude-match': string[];\n  'inject-into'?: ViolentInjectInto;\n  'run-at'?: GreaseRunAt | TamperRunAt | ViolentRunAt;\n  grant: Set<string>;\n  $extra: [string, ...string[]][];\n}\n\nexport const finalMonkeyOptionToComment = async (\n  option: ResolvedMonkeyOption,\n  collectGrantSet: Set<string>,\n  mode: `serve` | `build` | `meta`,\n): Promise<string> => {\n  const { userscript, collectRequireUrls, collectResource } = option;\n  let attrList: [string, ...string[]][] = [];\n  const {\n    name,\n    namespace,\n    version,\n    author,\n    description,\n    license,\n    copyright,\n\n    icon,\n    iconURL,\n    icon64,\n    icon64URL,\n    defaulticon,\n\n    homepage,\n    homepageURL,\n    website,\n    source,\n\n    supportURL,\n    downloadURL,\n    updateURL,\n\n    include,\n    match,\n    exclude,\n    require,\n    'exclude-match': excludeMatch,\n\n    'inject-into': injectInto,\n    'run-at': runAt,\n\n    compatible,\n    incompatible,\n\n    antifeature,\n    contributionAmount,\n    contributionURL,\n\n    connect,\n    sandbox,\n    tag,\n    resource,\n    grant,\n    noframes,\n    unwrap,\n    webRequest,\n    $extra,\n  } = userscript;\n  Object.entries({\n    namespace,\n    version,\n    author,\n    license,\n    copyright,\n    icon,\n    iconURL,\n    icon64,\n    icon64URL,\n    defaulticon,\n    homepage,\n    homepageURL,\n    website,\n    source,\n    supportURL,\n    downloadURL,\n    updateURL,\n    'inject-into': injectInto,\n    'run-at': runAt,\n    compatible,\n    incompatible,\n    contributionAmount,\n    contributionURL,\n    sandbox,\n  }).forEach(([k, v]) => {\n    if (typeof v == 'string') {\n      attrList.push([k, v]);\n    }\n  });\n  Object.entries(name).forEach(([k, v]) => {\n    if (k == '') {\n      attrList.push(['name', v]);\n    } else {\n      attrList.push(['name:' + k, v]);\n    }\n  });\n  Object.entries(description).forEach(([k, v]) => {\n    if (k == '') {\n      attrList.push(['description', v]);\n    } else {\n      attrList.push(['description:' + k, v]);\n    }\n  });\n\n  Object.entries({\n    include,\n    match,\n    exclude,\n    'exclude-match': excludeMatch,\n  }).forEach(([k, v]) => {\n    v.forEach((v2) => {\n      attrList.push([k, v2]);\n    });\n  });\n\n  [...require, ...collectRequireUrls].forEach((s) => {\n    attrList.push(['require', s]);\n  });\n\n  Object.entries({ ...resource, ...collectResource }).forEach(([k, v]) => {\n    attrList.push(['resource', k, v]);\n  });\n\n  connect.forEach((s) => {\n    attrList.push(['connect', s]);\n  });\n  tag.forEach((s) => {\n    attrList.push(['tag', s]);\n  });\n\n  webRequest.forEach((s) => {\n    attrList.push(['webRequest', s]);\n  });\n\n  if (grant.has('none')) {\n    attrList.push(['grant', 'none']);\n  } else if (grant.has('*')) {\n    grantNames.forEach((s) => {\n      attrList.push(['grant', s]);\n    });\n  } else {\n    new Set([...Array.from(collectGrantSet.values()).flat(), ...grant]).forEach(\n      (s) => {\n        if (!s.trim()) return;\n        attrList.push(['grant', s]);\n      },\n    );\n  }\n  antifeature.forEach(({ description, type, tag }) => {\n    attrList.push([\n      tag ? `antifeature:${tag}` : 'antifeature',\n      type,\n      description,\n    ]);\n  });\n  if (noframes) {\n    attrList.push(['noframes']);\n  }\n  if (unwrap) {\n    attrList.push(['unwrap']);\n  }\n  attrList.push(...$extra);\n\n  attrList = defaultSortFormat(attrList);\n\n  // format\n  if (option.align >= 1) {\n    const formatKey = (subAttrList: [string, ...string[]][]) => {\n      if (subAttrList.length == 0) return;\n      const maxLen = Math.max(...subAttrList.map((s) => s[1].length));\n      subAttrList.forEach((s) => {\n        s[1] = s[1].padEnd(option.align + maxLen);\n      });\n    };\n\n    formatKey(attrList.filter((s) => s[0] == 'resource'));\n    formatKey(\n      attrList.filter(\n        (s) => s[0] == 'antifeature' || s[0].startsWith('antifeature:'),\n      ),\n    );\n    // format all\n    const maxLen = Math.max(...attrList.map((s) => s[0].length));\n    attrList.forEach((s) => {\n      s[0] = s[0].padEnd(option.align + maxLen);\n    });\n  }\n\n  const uString = [\n    '==UserScript==',\n    ...attrList.map(\n      (attr) =>\n        '@' +\n        attr\n          .map((v) => {\n            return v.endsWith('\\x20') ? v : v + '\\x20';\n          })\n          .join('')\n          .trimEnd(),\n    ),\n    '==/UserScript==',\n  ]\n    .map((s) => '//\\x20' + s)\n    .join('\\n');\n\n  return option.generate({ userscript: uString, mode });\n};\n\nconst stringSort = (a: [string, ...string[]], b: [string, ...string[]]) => {\n  const minLen = Math.min(a.length, b.length);\n  for (let i = 0; i < minLen; i++) {\n    if (a[i] > b[i]) {\n      return 1;\n    } else if (a[i] < b[i]) {\n      return -1;\n    }\n  }\n  if (a.length > b.length) {\n    return 1;\n  } else if (a.length < b.length) {\n    return -1;\n  }\n  return 0;\n};\n\nconst defaultSortFormat = (p0: [string, ...string[]][]) => {\n  const filter = (\n    predicate: (value: [string, ...string[]], index: number) => boolean,\n  ): [string, ...string[]][] => {\n    const notMatchList: [string, ...string[]][] = [];\n    const matchList: [string, ...string[]][] = [];\n    p0.forEach((value, index) => {\n      if (!predicate(value, index)) {\n        notMatchList.push(value);\n      } else {\n        matchList.push(value);\n      }\n    });\n    p0 = notMatchList;\n    return matchList;\n  };\n  return [\n    filter(([k]) => k == 'name'),\n    filter(([k]) => k.startsWith('name:')),\n    filter(([k]) => k == 'namespace'),\n    filter(([k]) => k == 'version'),\n    filter(([k]) => k == 'author'),\n    filter(([k]) => k == 'description'),\n    filter(([k]) => k.startsWith('description:')),\n    filter(([k]) => k == 'license'),\n    filter(([k]) => k == 'copyright'),\n\n    filter(([k]) => k == 'icon'),\n    filter(([k]) => k == 'iconURL'),\n    filter(([k]) => k == 'icon64'),\n    filter(([k]) => k == 'icon64URL'),\n    filter(([k]) => k == 'defaulticon'),\n\n    filter(([k]) => k == 'homepage'),\n    filter(([k]) => k == 'homepageURL'),\n    filter(([k]) => k == 'website'),\n    filter(([k]) => k == 'source'),\n\n    filter(([k]) => k == 'supportURL'),\n    filter(([k]) => k == 'downloadURL'),\n    filter(([k]) => k == 'updateURL'),\n\n    filter(([k]) => k == 'include'),\n    filter(([k]) => k == 'match'),\n    filter(([k]) => k == 'exclude'),\n    filter(([k]) => k == 'exclude-match'),\n    filter(([k]) => k == 'webRequest'),\n\n    filter(([k]) => k == 'require'),\n\n    filter(([k]) => k == 'resource').sort(stringSort),\n\n    filter(([k]) => k == 'sandbox'),\n    filter(([k]) => k == 'tag'),\n\n    filter(([k]) => k == 'connect'),\n\n    filter(([k]) => k == 'grant').sort(stringSort),\n\n    filter(([k]) => k == 'inject-into'),\n    filter(([k]) => k == 'run-at'),\n\n    filter(([k]) => k == 'compatible'),\n    filter(([k]) => k == 'incompatible'),\n    filter(([k]) => k == 'antifeature').sort(stringSort),\n    filter(([k]) => k.startsWith('antifeature:')).sort(stringSort),\n    filter(([k]) => k == 'contributionAmount'),\n    filter(([k]) => k == 'contributionURL'),\n    filter(([k]) => k == 'noframes'),\n    filter(([k]) => k == 'unwrap'),\n    p0,\n  ].flat(1);\n};\n","import * as acornWalk from 'acorn-walk';\nimport type { OutputChunk, PluginContext } from 'rolldown';\nimport { grantNames } from './gmApi.ts';\n\nexport const collectGrant = (\n  context: PluginContext,\n  chunks: OutputChunk[],\n  injectCssCode: string | undefined,\n  minify: boolean,\n): Set<string> => {\n  const codes = new Set<string>();\n  if (injectCssCode) {\n    codes.add(injectCssCode);\n  }\n  for (const chunk of chunks) {\n    if (minify) {\n      // https://github.com/lisonge/vite-plugin-monkey/issues/166\n      const modules = Object.values(chunk.modules);\n      modules.forEach((m) => {\n        const code = m.code;\n        if (code) {\n          codes.add(code);\n        }\n      });\n    }\n    codes.add(chunk.code);\n  }\n  const unusedMembers = new Set<string>(\n    grantNames.filter((s) => s.includes(`.`)),\n  );\n  const endsWithWin = (a: string, b: string): boolean => {\n    if (a.endsWith(b)) {\n      return a === 'monkeyWindow.' + b || a === '_monkeyWindow.' + b;\n    }\n    return false;\n  };\n  const memberHandleMap = Object.fromEntries(\n    grantNames\n      .filter((s) => s.startsWith('window.'))\n      .map((name) => [name, (v: string) => endsWithWin(v, name.split('.')[1])]),\n  );\n  const unusedIdentifiers = new Set<string>(\n    grantNames.filter((s) => !s.includes(`.`)),\n  );\n  const usedGm = new Set<string>();\n  const matchIdentifier = (name: string): boolean => {\n    if (unusedIdentifiers.has(name)) {\n      usedGm.add(name);\n      unusedIdentifiers.delete(name);\n      return true;\n    }\n    return false;\n  };\n  const matchMember = (name: string): boolean => {\n    for (const unusedName of unusedMembers.values()) {\n      if (name.endsWith(unusedName) || memberHandleMap[unusedName]?.(name)) {\n        usedGm.add(unusedName);\n        unusedMembers.delete(unusedName);\n        return true;\n      }\n    }\n    return false;\n  };\n  for (const code of codes) {\n    if (!code.trim()) continue;\n    const ast = context.parse(code);\n    acornWalk.simple(\n      ast,\n      {\n        MemberExpression(node) {\n          if (unusedMembers.size === 0) return;\n          if (\n            node.computed ||\n            node.object.type !== 'Identifier' ||\n            node.property.type !== 'Identifier'\n          ) {\n            return;\n          }\n          if (\n            node.object.name === 'monkeyWindow' ||\n            node.object.name === '_monkeyWindow'\n          ) {\n            if (matchIdentifier(node.property.name)) {\n              return;\n            }\n          }\n          const name = node.object.name + '.' + node.property.name;\n          matchMember(name);\n        },\n        Identifier(node) {\n          // only one layer\n          matchIdentifier(node.name);\n        },\n      },\n      { ...acornWalk.base },\n    );\n    if (unusedMembers.size == 0 && unusedIdentifiers.size == 0) {\n      break;\n    }\n  }\n  return usedGm;\n};\n","import type { Program } from '@oxc-project/types';\nimport * as acornWalk from 'acorn-walk';\nimport { resolve } from 'import-meta-resolve';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nexport const isFirstBoot = (): boolean => {\n  return (Reflect.get(globalThis, '__vite_start_time') ?? 0) < 1000;\n};\n\nexport const compatResolve = (id: string) => {\n  return resolve(id, pathToFileURL(process.cwd() + '/any.js').href);\n};\n\nexport const existFile = async (path: string) => {\n  try {\n    return (await fs.stat(path)).isFile();\n  } catch {\n    return false;\n  }\n};\n\nexport const moduleExportExpressionWrapper = (expression: string) => {\n  let n = 0;\n  let identifier = ``;\n  while (expression.includes(identifier)) {\n    identifier = `_${(n || ``).toString(16)}`;\n    n++;\n  }\n  // https://github.com/lisonge/vite-plugin-monkey/issues/70\n  return `(()=>{const ${identifier}=${expression};('default' in ${identifier})||(${identifier}.default=${identifier});return ${identifier}})()`;\n};\n\nexport async function* walk(dirPath: string) {\n  const pathnames = (await fs.readdir(dirPath)).map((s) =>\n    path.join(dirPath, s),\n  );\n  while (pathnames.length > 0) {\n    const pathname = pathnames.pop()!;\n    const state = await fs.lstat(pathname);\n    if (state.isFile()) {\n      yield pathname;\n    } else if (state.isDirectory()) {\n      pathnames.push(\n        ...(await fs.readdir(pathname)).map((s) => path.join(pathname, s)),\n      );\n    }\n  }\n}\n\nexport const stringifyFunction = <T extends (...args: any[]) => any>(\n  fn: T,\n  ...args: Parameters<T>\n) => {\n  return `;(${fn})(${args.map((v) => JSON.stringify(v)).join(',')});`;\n};\n\nexport const dataJsUrl = (code: string): string => {\n  return 'data:application/javascript,' + encodeURIComponent(code);\n};\n\n/**\n * string -> javascript data url\n * @example\n * dataUrl('console.log(\"hello world\")')\n * // => data:application/javascript,console.log(%22hello%20world%22)\n */\nexport function dataUrl(code: string): string;\n/**\n * function and it parameters -> iife -> mini_iife -> javascript data url\n *\n * @example\n * dataUrl((a)=>{console.log(a)}, 'world')\n * // => data:application/javascript,((z)%3D%3E%7Bconsole.log(a)%7D)('world')\n */\nexport function dataUrl<T extends (...args: any[]) => any>(\n  fn: T,\n  ...args: Parameters<T>\n): Promise<string>;\nexport function dataUrl(p0: any, ...args: any[]): string | Promise<string> {\n  if (typeof p0 == 'string') {\n    return dataJsUrl(p0);\n  }\n  return dataJsUrl(stringifyFunction(p0, ...args));\n}\n\nimport { DomUtils, ElementType, parseDocument } from 'htmlparser2';\n\ninterface ScriptResult {\n  src: string;\n  text: string;\n}\n\nexport const parserHtmlScriptResult = (html: string): ScriptResult[] => {\n  const doc = parseDocument(html);\n  type Element =\n    ReturnType<typeof DomUtils.findAll> extends Array<infer T> ? T : never;\n  const scripts = DomUtils.getElementsByTagType(\n    ElementType.Script,\n    doc,\n  ) as Element[];\n  return scripts.map<ScriptResult>((p) => {\n    const src = p.attribs.src ?? '';\n    const textNode = p.firstChild;\n    let text = '';\n    if (textNode?.type == ElementType.Text) {\n      text = textNode.data ?? '';\n    }\n    if (src) {\n      return { src, text };\n    } else {\n      return {\n        src: '',\n        text,\n      };\n    }\n  });\n};\n\nimport type { ImportDeclaration, ImportExpression } from 'acorn';\nimport crypto from 'node:crypto';\n\nexport const simpleHash = (str: string | undefined): string => {\n  return crypto\n    .createHash('md5')\n    .update(str || '')\n    .digest('base64url')\n    .substring(0, 16);\n};\n\nexport const safeURL = (\n  url: string | URL | undefined | null,\n  base?: string | URL,\n): URL | undefined => {\n  if (!url) return undefined;\n  try {\n    return new URL(url, base);\n  } catch {}\n};\n\nexport const getSafeIdentifier = (\n  prefix: string,\n  code: string,\n  others?: string[],\n): string => {\n  let n = 0;\n  let identifier = prefix;\n  while (\n    code.includes(identifier) ||\n    (others && others.some((c) => c.includes(identifier)))\n  ) {\n    n++;\n    identifier = `${prefix}${n.toString(16)}`;\n  }\n  return identifier;\n};\n\nexport interface ImportNodeItem {\n  node: ImportExpression | ImportDeclaration;\n  value: string;\n}\n\nexport const getProgramImportNodes = (program: Program): ImportNodeItem[] => {\n  const nodes: ImportNodeItem[] = [];\n  acornWalk.simple(program, {\n    ImportDeclaration(node) {\n      const s = node.source;\n      if (s.type === 'Literal') {\n        const value = s.value;\n        if (!value) return;\n        if (typeof value !== 'string') return;\n        nodes.push({\n          node,\n          value,\n        });\n      }\n    },\n    ImportExpression(node) {\n      const s = node.source;\n      if (s.type === 'Literal') {\n        const value = s.value;\n        if (!value) return;\n        if (typeof value !== 'string') return;\n        nodes.push({\n          node,\n          value,\n        });\n      } else if (s.type === 'TemplateLiteral') {\n        if (s.expressions.length) return;\n        if (s.quasis.length !== 1) return;\n        const value = s.quasis[0].value.cooked;\n        if (!value) return;\n        if (typeof value !== 'string') return;\n        nodes.push({\n          node,\n          value,\n        });\n      }\n    },\n  });\n  return nodes;\n};\n\nconst nameReg = /[0-9a-zA-Z_]+/g;\nconst autoPreUnderline = (v: string): string => {\n  if (!v) return '_';\n  return Number.isInteger(Number(v[0])) ? `_${v}` : v;\n};\n\nexport const getUpperCaseName = (\n  value: string | undefined,\n): string | undefined => {\n  if (!value) return;\n  const list = value.match(nameReg);\n  if (!list?.length) return;\n  return list\n    .map((v, i) => {\n      if (i === 0) return autoPreUnderline(v);\n      return v[0].toUpperCase() + v.substring(1);\n    })\n    .join('');\n};\n\nconst defaultCssSideEffects = (c: string) => {\n  // @ts-ignore\n  if (typeof GM_addStyle === 'function') {\n    // @ts-ignore\n    GM_addStyle(c);\n  } else {\n    // see #262\n    (document.head || document.documentElement)\n      .appendChild(document.createElement('style'))\n      .append(c);\n  }\n};\n\nexport const getCssModuleCode = (\n  f: string | ((css: string) => void) | undefined,\n): string => {\n  f ??= defaultCssSideEffects;\n  return `\nconst s = new Set;\nexport const _css = async (t) => {\n  if (s.has(t)) return;\n  s.add(t);\n  ${`(${f})(t);`}\n};\n`.trimStart();\n};\n","import fs from 'node:fs/promises';\nimport module from 'node:module';\nimport type systemjsPkgT from 'systemjs/package.json';\nimport { dataUrl } from './others.ts';\nimport type { ModuleToUrlFc } from './types.ts';\n\nconst _require = module.createRequire(import.meta.url);\n\nconst systemjsPkg: typeof systemjsPkgT = _require(`systemjs/package.json`);\n\nconst systemjsSubPaths = [\n  'dist/system.min.js',\n  'dist/extras/named-register.min.js',\n];\n\n// https://github.com/systemjs/systemjs/blob/main/docs/api.md#systemconstructor\nconst customSystemInstanceCode = `;(typeof System!='undefined')&&(System=new System.constructor());`;\n\nconst systemjsAbsolutePaths = systemjsSubPaths.map((s) => {\n  return _require.resolve(`systemjs/` + s);\n});\n\nexport const getSystemjsTexts = async (): Promise<string[]> => {\n  return Promise.all(\n    systemjsAbsolutePaths\n      .map((s) =>\n        fs.readFile(s, 'utf-8').then((s) =>\n          s\n            .trim()\n            .replace(/^\\/\\*[\\s\\S]*?\\*\\//, '')\n            .replace(/\\/\\/.*map$/, '')\n            .trim(),\n        ),\n      )\n      .concat([Promise.resolve(customSystemInstanceCode)]),\n  );\n};\n\nexport const getSystemjsRequireUrls = (fn: ModuleToUrlFc) => {\n  return systemjsSubPaths\n    .map((p) => {\n      return fn(systemjsPkg.version, systemjsPkg.name, p, p);\n    })\n    .concat([dataUrl(customSystemInstanceCode)]);\n};\n","import type * as acorn from 'acorn';\nimport * as acornWalk from 'acorn-walk';\nimport MagicString from 'magic-string';\nimport type {\n  OutputAsset,\n  OutputBundle,\n  OutputChunk,\n  PluginContext,\n} from 'rolldown';\n\ninterface AwaitCallExpression extends acorn.CallExpression {\n  callee: acorn.Identifier;\n}\n\nconst awaitOffset = `await`.length;\nconst initTlaIdentifier = `_TLA_`;\n\nexport const getSafeTlaIdentifier = (rawBundle: OutputBundle) => {\n  const codes: string[] = [];\n  for (const chunk of Object.values(rawBundle)) {\n    if (chunk.type == 'chunk') {\n      codes.push(chunk.code);\n    }\n  }\n  let x = 0;\n  let identifier = initTlaIdentifier;\n  while (codes.some((code) => code.includes(identifier))) {\n    x++;\n    identifier = initTlaIdentifier + x.toString(36);\n  }\n  return identifier;\n};\n\nconst startWith = (\n  text: string,\n  searchString: string,\n  position = 0,\n  ignoreString: string,\n) => {\n  for (let i = position; i < text.length; i++) {\n    if (ignoreString.includes(text[i])) {\n      continue;\n    }\n    return text.startsWith(searchString, i);\n  }\n  return false;\n};\n\nconst includes = (\n  str: string,\n  start: number,\n  end: number,\n  substr: string,\n): boolean => {\n  const i = str.indexOf(substr, start);\n  return i >= 0 && i + substr.length < end;\n};\n\nexport const transformTlaToIdentifier = (\n  context: PluginContext,\n  chunk: OutputAsset | OutputChunk,\n  identifier: string,\n) => {\n  if (chunk.type == 'chunk') {\n    const code = chunk.code;\n    if (!code.includes(`await`)) {\n      return;\n    }\n    const ast = context.parse(code);\n    const tlaNodes: acorn.AwaitExpression[] = [];\n    const tlaForOfNodes: acorn.ForOfStatement[] = [];\n    acornWalk.simple(\n      ast,\n      {\n        AwaitExpression(node) {\n          // top level await\n          tlaNodes.push(node);\n        },\n        ForOfStatement(node) {\n          if (node.await === true) {\n            tlaForOfNodes.push(node);\n          }\n        },\n      },\n      { ...acornWalk.base, Function: () => {} },\n    );\n    if (tlaNodes.length > 0 || tlaForOfNodes.length > 0) {\n      const ms = new MagicString(code);\n      tlaNodes.forEach((node) => {\n        if (\n          !startWith(chunk.code, '(', node.start + awaitOffset, '\\x20\\t\\r\\n')\n        ) {\n          // await xxx -> await (xxx)\n          ms.appendLeft(node.start + awaitOffset, `(`);\n          ms.appendRight(node.end, `)`);\n        }\n\n        // await (xxx) -> __topLevelAwait__ (xxx)\n        ms.update(node.start, node.start + awaitOffset, identifier);\n      });\n      tlaForOfNodes.forEach((node) => {\n        // for await(const x of xxx){} -> __topLevelAwait_FOR ((async()=>{ /*start*/for await(const x of xxx){}/*end*/  })());\n        ms.appendLeft(node.start, `${identifier + `FOR`}((async()=>{`);\n        ms.appendRight(node.end, `})());`);\n      });\n      return {\n        code: ms.toString(),\n        map: ms.generateMap(),\n      };\n    }\n  }\n};\n\nexport const transformIdentifierToTla = (\n  context: PluginContext,\n  chunk: OutputAsset | OutputChunk,\n  identifier: string,\n) => {\n  if (chunk.type == 'chunk') {\n    if (!chunk.code.includes(identifier)) {\n      return;\n    }\n\n    const forIdentifier = identifier + `FOR`;\n\n    const ast = context.parse(chunk.code);\n    const tlaCallNodes: { node: AwaitCallExpression; needsParens: boolean }[] =\n      [];\n    const forTlaCallNodes: AwaitCallExpression[] = [];\n    const topFnNodes: acorn.Function[] = [];\n    acornWalk.ancestor(\n      ast,\n      {\n        CallExpression(node, _state, ancestors) {\n          if ('name' in node.callee) {\n            const { name, type } = node.callee;\n            if (type === `Identifier`) {\n              if (name === identifier) {\n                // `await` has lower precedence than member access / call / tagged template,\n                // so we need parens when the parent consumes this node in those positions:\n                //   _TLA_(x()).y   -> (await(x())).y    (MemberExpression.object)\n                //   _TLA_(x())()   -> (await(x()))()    (CallExpression.callee)\n                //   _TLA_(x())`t`  -> (await(x()))`t`   (TaggedTemplateExpression.tag)\n                // Optional chaining (?.  ?.[  ?.() ) is also covered because acorn\n                // represents it with the same parent node types inside ChainExpression.\n                let needsParens = false;\n                if (ancestors.length >= 2) {\n                  const parent = ancestors[ancestors.length - 2];\n                  needsParens =\n                    (parent.type === 'MemberExpression' &&\n                      (parent as acorn.MemberExpression).object === node) ||\n                    (parent.type === 'CallExpression' &&\n                      (parent as acorn.CallExpression).callee === node) ||\n                    (parent.type === 'TaggedTemplateExpression' &&\n                      (parent as acorn.TaggedTemplateExpression).tag === node);\n                }\n                tlaCallNodes.push({\n                  node: { ...node, callee: node.callee },\n                  needsParens,\n                });\n              } else if (name === forIdentifier) {\n                forTlaCallNodes.push({ ...node, callee: node.callee });\n              }\n            }\n          }\n        },\n      },\n      {\n        ...acornWalk.base,\n        Function: (node, state, callback) => {\n          if (topFnNodes.length == 0) {\n            topFnNodes.push(node);\n          }\n          if (includes(chunk.code, node.start, node.end, identifier)) {\n            return acornWalk.base.Function?.(node, state, callback);\n          }\n        },\n      },\n    );\n    if (tlaCallNodes.length > 0 || forTlaCallNodes.length > 0) {\n      const ms = new MagicString(chunk.code, {});\n      tlaCallNodes.forEach(({ node, needsParens }) => {\n        const callee = node.callee;\n        // __topLevelAwait__(xxx) -> await(xxx)  or  (await(xxx)) when parens needed\n        ms.update(callee.start, callee.end, 'await');\n        if (needsParens) {\n          ms.appendLeft(node.start, '(');\n          ms.appendRight(node.end, ')');\n        }\n      });\n      forTlaCallNodes.forEach((node) => {\n        // if vite minify is true, the parant expression will be a comma expression, so we need to keep it as an expression\n        const arg0 = node.arguments[0];\n        ms.update(node.start, arg0.start, 'await');\n        ms.update(arg0.end, node.end, '');\n      });\n      topFnNodes.forEach((node) => {\n        ms.appendLeft(node.start, `async\\x20`);\n      });\n      chunk.code = ms.toString();\n    }\n  }\n};\n","import MagicString from 'magic-string';\nimport fs from 'node:fs/promises';\nimport type { TransformPluginContext } from 'rolldown';\nimport type { Plugin } from 'vite';\nimport {\n  getProgramImportNodes,\n  getSafeIdentifier,\n  getUpperCaseName,\n} from '../utils/others.ts';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\n\nexport const cssModuleId = 'virtual:monkey-css';\nexport const virtualCssModuleId = '\\0' + cssModuleId;\n\n// https://github.com/vitejs/vite/blob/main/packages/vite/src/node/constants.ts\nconst styleExts = [\n  '.css',\n  '.less',\n  '.sass',\n  '.scss',\n  '.styl',\n  '.stylus',\n  '.pcss',\n  '.postcss',\n  '.sss',\n];\nconst exludeModuleCssExts = styleExts.map((v) => '.module' + v);\n\nconst appendInline = (value: string): string => {\n  return value + '?inline';\n};\nconst exlcudeChars = ['\\0', '?', '&'];\nconst exlcudeModuleNames = [\n  // context.resolve() -> [plugin unocss:global:build:scan] [unocss] \"uno.css\" is being imported multiple times in different files\n  'uno.css',\n];\n\nconst filterAsync = async <T>(\n  arr: T[],\n  predicate: (value: T, index: number, array: T[]) => Promise<unknown>,\n): Promise<T[]> => {\n  const results = await Promise.all(arr.map(predicate));\n  return arr.filter((_, index) => results[index]);\n};\n\nconst staticCssIdSuffix = '__monkey-css';\n// https://github.com/lisonge/vite-plugin-monkey/issues/249\nconst staticCssTemplate = `\nimport {0} from '{1}';\nimport { _css } from '${cssModuleId}';\n{0} && _css({0});\nexport default undefined;\n`.trimStart();\n\nexport const cssFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  const isCssImport = async (\n    context: TransformPluginContext,\n    importer: string,\n    value: string,\n  ): Promise<boolean> => {\n    if (!value) return false;\n    // exclude virtual modules, such as virtual:uno.css\n    if (value.startsWith('virtual:')) return false;\n    if (exlcudeModuleNames.includes(value)) return false;\n    if (exlcudeChars.some((c) => value.includes(c))) return false;\n    if (exludeModuleCssExts.some((c) => value.endsWith(c))) return false;\n    if (option.build.externalResource[value]) return false;\n    const resolvedId = (await context.resolve(value, importer))?.id;\n    if (!resolvedId) return false;\n    if (exlcudeChars.some((c) => resolvedId.includes(c))) return false;\n    if (exludeModuleCssExts.some((c) => resolvedId.endsWith(c))) return false;\n    if (!styleExts.some((e) => resolvedId.endsWith(e))) return false;\n    // exclude not exist file, such as /project/src/__unocss.css\n    return fs\n      .access(resolvedId)\n      .then(() => true)\n      .catch(() => false);\n  };\n  return {\n    name: 'monkey:css',\n    apply: 'build',\n    enforce: 'post',\n    async config() {\n      option = await getOption();\n      return {\n        build: {\n          rolldownOptions: {\n            external: [cssModuleId],\n          },\n        },\n      };\n    },\n    resolveId(source) {\n      if (source.endsWith(staticCssIdSuffix)) return source;\n    },\n    load(id) {\n      // handle static css\n      if (!id.endsWith(staticCssIdSuffix)) return;\n      const staticId = id.slice(0, -staticCssIdSuffix.length);\n      return staticCssTemplate\n        .replaceAll(\n          '{0}',\n          getUpperCaseName(staticId.split('/').at(-1)) || 'css',\n        )\n        .replaceAll('{1}', appendInline(staticId));\n    },\n    async transform(code, id) {\n      if (new URLSearchParams(id.split('?')[1] || '').has('inline')) return;\n      if (!code.includes('import')) return;\n      if (!styleExts.some((e) => code.includes(e))) return;\n      const importedCssNodes = await filterAsync(\n        getProgramImportNodes(this.parse(code)).filter((n) => {\n          if (n.node.type === 'ImportDeclaration' && n.node.specifiers.length) {\n            return false;\n          }\n          return true;\n        }),\n        async (n) => isCssImport(this, id, n.value),\n      );\n      if (!importedCssNodes.length) return;\n      const ms = new MagicString(code);\n      const loadName = getSafeIdentifier('_css', code);\n      const importList: string[] = [\n        `import {_css as ${loadName}} from '${cssModuleId}';`,\n      ];\n      const nameCache: Record<string, string> = {};\n      for (const n of importedCssNodes) {\n        if (n.node.type === 'ImportExpression') {\n          const inlineCssId = appendInline(n.value);\n          if (!nameCache[inlineCssId]) {\n            const cssName = getSafeIdentifier(\n              getUpperCaseName(n.value) || 'css',\n              code,\n              importList,\n            );\n            nameCache[inlineCssId] = cssName;\n            importList.push(`import ${cssName} from '${inlineCssId}';`);\n          }\n          ms.update(\n            n.node.start,\n            n.node.end,\n            `${loadName}(${nameCache[inlineCssId]})`,\n          );\n        } else {\n          const resolved = (await this.resolve(n.value, id))?.id;\n          if (!resolved) continue;\n          const staticCssId = resolved + staticCssIdSuffix;\n          ms.update(n.node.start, n.node.end, `import '${staticCssId}';`);\n        }\n      }\n      ms.prepend(importList.join('\\n'));\n      return {\n        code: ms.toString(),\n        map: ms.generateMap(),\n      };\n    },\n  };\n};\n","import * as acornWalk from 'acorn-walk';\nimport type { OutputChunk, RolldownOutput } from 'rolldown';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport { build } from 'vite';\nimport { finalMonkeyOptionToComment } from '../userscript/index.ts';\nimport { collectGrant } from '../utils/grant.ts';\nimport {\n  getCssModuleCode,\n  moduleExportExpressionWrapper,\n} from '../utils/others.ts';\nimport { getSystemjsRequireUrls, getSystemjsTexts } from '../utils/systemjs.ts';\nimport {\n  getSafeTlaIdentifier,\n  transformIdentifierToTla,\n  transformTlaToIdentifier,\n} from '../utils/topLevelAwait.ts';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\nimport { cssModuleId, virtualCssModuleId } from './css.ts';\n\nconst __entry_name = `__monkey.entry.js`;\nconst cssModuleEntryId = cssModuleId + `-entry`;\nconst virtualCssModuleEntryId = '\\0' + cssModuleEntryId;\n\n// https://github.com/vitejs/vite/blob/main/packages/plugin-legacy/src/index.ts\nconst polyfillId = '\\0vite/legacy-polyfills';\n\nconst systemJsImportMapPrefix = `user`;\n\nexport const buildBundleFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  let viteConfig: ResolvedConfig;\n  return {\n    name: 'monkey:buildBundle',\n    apply: 'build',\n    enforce: 'post',\n    async config() {\n      option = await getOption();\n    },\n    async configResolved(resolvedConfig) {\n      viteConfig = resolvedConfig;\n    },\n    async generateBundle(_, rawBundle) {\n      const entryChunks: OutputChunk[] = [];\n      const chunks: OutputChunk[] = [];\n      Object.values(rawBundle).forEach((chunk) => {\n        if (chunk.type == 'chunk') {\n          if (chunk.facadeModuleId != polyfillId) {\n            chunks.push(chunk);\n          }\n          if (chunk.isEntry) {\n            if (chunk.facadeModuleId == polyfillId) {\n              entryChunks.unshift(chunk);\n            } else {\n              entryChunks.push(chunk);\n            }\n          }\n        }\n      });\n\n      const fristEntryChunk = entryChunks.find(\n        (s) => s.facadeModuleId != polyfillId,\n      );\n\n      const cssCode = Object.entries(rawBundle)\n        .map(([k, v]) => {\n          if (v.type == 'asset' && k.endsWith('.css')) {\n            delete rawBundle[k];\n            return v.source.toString();\n          }\n        })\n        .filter(Boolean)\n        .join('')\n        .trim();\n\n      let cssJsCode = '';\n      const entryCode = (() => {\n        const e = Array.from(entryChunks);\n        const codes: string[] = [];\n        if (cssCode) {\n          if (e[0].facadeModuleId === polyfillId) {\n            codes.push(`import ${JSON.stringify(`./${e[0].fileName}`)};`);\n            e.shift();\n          }\n          codes.push(`import '${cssModuleEntryId}';`);\n        }\n        codes.push(...e.map((c) => `import './${c.fileName}';`));\n        return codes.join('\\n');\n      })();\n\n      const hasDynamicImport = entryChunks.some((e) => {\n        // check has import('./a')\n        if (e.dynamicImports.length) return true;\n        if (!e.code.includes('import')) return false;\n        // check has import('vue')\n        let a = Boolean(false);\n        const ast = this.parse(e.code);\n        try {\n          acornWalk.simple(ast, {\n            ImportExpression() {\n              a = true;\n              throw new Error('stop');\n            },\n          });\n        } catch {}\n        return a;\n      });\n\n      const usedModules = new Set<string>();\n\n      const tlaIdentifier = getSafeTlaIdentifier(rawBundle);\n\n      let finalJsCode = ``;\n\n      const mockPlugin = {\n        name: 'monkey:mock',\n        resolveId: {\n          order: 'pre' as const,\n          handler: (\n            source: string,\n            importer: string | undefined,\n            options: { isEntry: boolean },\n          ): string | undefined => {\n            if (!importer && options.isEntry) {\n              return '\\0' + source;\n            }\n            if (source === cssModuleEntryId) return virtualCssModuleEntryId;\n            if (source === cssModuleId) return virtualCssModuleId;\n            const chunk = Object.values(rawBundle).find(\n              (chunk) =>\n                chunk.type == 'chunk' && source.endsWith(chunk.fileName),\n            ) as OutputChunk | undefined;\n            if (chunk) {\n              return '\\0' + source;\n            }\n          },\n        },\n        load: {\n          order: 'pre' as const,\n          handler: (id: string): string | undefined => {\n            if (!id.startsWith('\\0')) return;\n            if (id === virtualCssModuleEntryId) {\n              // use \\x20 compat unocss\n              return `import { _css } from '${cssModuleId}'; _css(${JSON.stringify('\\x20' + cssCode + '\\x20')});`;\n            }\n            if (id === virtualCssModuleId) {\n              cssJsCode = getCssModuleCode(option.cssSideEffects);\n              return cssJsCode;\n            }\n            if (id.endsWith(__entry_name)) {\n              return entryCode;\n            }\n            const [k, chunk] =\n              Object.entries(rawBundle).find(([_, chunk]) =>\n                id.endsWith(chunk.fileName),\n              ) ?? [];\n            if (chunk && chunk.type == 'chunk' && k) {\n              usedModules.add(k);\n              if (!hasDynamicImport) {\n                const ch = transformTlaToIdentifier(this, chunk, tlaIdentifier);\n                if (ch) return ch.code;\n              }\n              return chunk.code;\n            }\n          },\n        },\n      };\n\n      const minify = viteConfig.build.minify ?? false;\n      if (hasDynamicImport) {\n        // use rollup build systemjs\n        const { rollup } = await import('rollup');\n        const buildResult = await (\n          await rollup({\n            logLevel: 'silent',\n            external: Object.keys(option.globalsPkg2VarName),\n            input: __entry_name,\n            plugins: [mockPlugin],\n          })\n        ).generate({\n          globals: option.globalsPkg2VarName,\n          format: 'systemjs',\n          sourcemap: false,\n          strict: true,\n          compact: true,\n        });\n        const chunks = buildResult.output.flat();\n        const systemJsModules: string[] = [];\n        let entryName = '';\n        chunks.forEach((chunk) => {\n          if (chunk.type == 'chunk') {\n            const name = JSON.stringify(`./` + chunk.fileName);\n            systemJsModules.push(\n              chunk.code\n                .trimStart()\n                .replace(/^System\\.register\\(/, `System.register(${name}, `),\n            );\n            if (chunk.isEntry) {\n              entryName = name;\n            }\n          }\n        });\n        systemJsModules.push(`System.import(${entryName}, \"./\");`);\n        finalJsCode = systemJsModules.map((v) => v.trim()).join('\\n');\n        const usedModuleIds = Array.from(this.getModuleIds()).filter(\n          (d) => d in option.globalsPkg2VarName,\n        );\n        // {vue:'xxx:vue'}\n        const importsMap = usedModuleIds.reduce(\n          (p: Record<string, string>, c) => {\n            p[c] = `${systemJsImportMapPrefix}:${c}`;\n            return p;\n          },\n          {},\n        );\n        // inject SystemJs external globals\n        finalJsCode = [\n          Object.keys(importsMap).length > 0\n            ? `System.addImportMap({ imports: ${JSON.stringify(importsMap)} });`\n            : ``,\n          ...usedModuleIds.map(\n            (id) =>\n              `System.set(${JSON.stringify(\n                `${systemJsImportMapPrefix}:${id}`,\n              )}, ${moduleExportExpressionWrapper(\n                option.globalsPkg2VarName[id],\n              )});`,\n          ),\n          finalJsCode,\n        ]\n          .filter((s) => s.trim())\n          .join('\\n');\n\n        if (typeof option.systemjs == 'function') {\n          option.collectRequireUrls.push(\n            ...getSystemjsRequireUrls(option.systemjs),\n          );\n        } else {\n          finalJsCode =\n            (await getSystemjsTexts()).join('\\n') + '\\n' + finalJsCode;\n        }\n      } else {\n        const rolldownMinify =\n          (viteConfig.build.minify === undefined ||\n            viteConfig.build.minify === 'oxc') &&\n          !Array.isArray(viteConfig.build.rolldownOptions?.output)\n            ? viteConfig.build.rolldownOptions.output?.minify\n            : undefined;\n        // use vite(rolldown) build iife\n        const buildResult = (await build({\n          logLevel: 'error',\n          configFile: false,\n          build: {\n            write: false,\n            minify,\n            terserOptions: viteConfig.build.terserOptions,\n            target: 'esnext',\n            modulePreload: false,\n            rolldownOptions: {\n              external: Object.keys(option.globalsPkg2VarName),\n              output: {\n                // set some default values which may be overridden by custom viteConfig\n                comments: false,\n                strict: false, // rolldown will add 'use strict' to the file top instead of the wrapper function next line\n                intro: `'use strict'`,\n\n                // preserve output options set in viteConfig, allow overriding values set above\n                ...viteConfig.build.rolldownOptions.output,\n                // disable rolldown minify when using terser or esbuild, see #280\n                ...(rolldownMinify !== undefined\n                  ? { minify: rolldownMinify }\n                  : {}),\n                globals: option.globalsPkg2VarName,\n              },\n              experimental: {\n                attachDebugInfo: 'none',\n              },\n            },\n            lib: {\n              entry: __entry_name,\n              formats: ['iife'],\n              name: '__expose__',\n              fileName: () => '__entry.js',\n            },\n          },\n          plugins: [\n            {\n              ...mockPlugin,\n              generateBundle: {\n                order: 'pre',\n                handler(_, iifeBundle) {\n                  Object.entries(iifeBundle).forEach(([_, chunk]) => {\n                    transformIdentifierToTla(this, chunk, tlaIdentifier);\n                  });\n                },\n              },\n            },\n          ],\n        })) as RolldownOutput[];\n        const chunks = buildResult[0].output.flat();\n        chunks.forEach((chunk) => {\n          if (chunk.type == 'chunk' && chunk.isEntry) {\n            finalJsCode = chunk.code;\n          }\n        });\n      }\n\n      usedModules.forEach((k) => {\n        if (fristEntryChunk != rawBundle[k]) {\n          delete rawBundle[k];\n        }\n      });\n\n      let collectGrantSet: Set<string>;\n      if (option.build.autoGrant) {\n        collectGrantSet = collectGrant(\n          this,\n          chunks,\n          cssJsCode,\n          viteConfig.build.minify !== false,\n        );\n      } else {\n        collectGrantSet = new Set<string>();\n      }\n\n      const comment = await finalMonkeyOptionToComment(\n        option,\n        collectGrantSet,\n        'build',\n      );\n\n      const mergedCode =\n        [comment, finalJsCode]\n          .filter((s) => s)\n          .join(`\\n\\n`)\n          .trimEnd() + '\\n';\n      if (fristEntryChunk) {\n        fristEntryChunk.fileName = option.build.fileName;\n        fristEntryChunk.code = mergedCode;\n      } else {\n        this.emitFile({\n          type: 'asset',\n          fileName: option.build.fileName,\n          source: mergedCode,\n        });\n      }\n\n      if (option.build.metaFileName) {\n        this.emitFile({\n          type: 'asset',\n          fileName: option.build.metaFileName(),\n          source: await finalMonkeyOptionToComment(\n            option,\n            collectGrantSet,\n            'meta',\n          ),\n        });\n      }\n    },\n  };\n};\n","import type { Plugin } from 'vite';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\n\nexport const configFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  return {\n    name: 'monkey:config',\n    async config(userConfig) {\n      option = await getOption();\n      return {\n        resolve: {\n          alias: {\n            [option.clientAlias]: 'vite-plugin-monkey/dist/client',\n          },\n        },\n        build: {\n          assetsInlineLimit: Number.MAX_SAFE_INTEGER,\n          chunkSizeWarningLimit: Number.MAX_SAFE_INTEGER,\n          assetsDir: './',\n          cssCodeSplit: false,\n          minify: userConfig.build?.minify ?? false,\n          cssMinify: userConfig.build?.cssMinify ?? true,\n          sourcemap: false,\n          rolldownOptions: {\n            input: option.entry,\n            onLog(level, log, defaultHandler) {\n              // ignore top-level await warning\n              if (\n                level === 'warn' &&\n                log.code === 'TOLERATED_TRANSFORM' &&\n                log.message.includes('Top-level await is not available')\n              ) {\n                return;\n              }\n              defaultHandler(level, log);\n            },\n            experimental: {\n              // https://github.com/rolldown/rolldown/issues/9006\n              attachDebugInfo: 'none',\n            },\n          },\n        },\n      };\n    },\n  };\n};\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { normalizePath } from 'vite';\nimport { compatResolve, existFile } from './others.ts';\n\ninterface RawPackageJson {\n  name?: string;\n  version?: string;\n  description?: string;\n  license?: string;\n  author?: string | { name: string };\n  homepage?: string;\n  repository?: string | { url?: string };\n  bugs?: string | { url?: string };\n}\n\ninterface PackageJson {\n  name?: string;\n  version?: string;\n  description?: string;\n  license?: string;\n  author?: string;\n  homepage?: string;\n  repository?: string;\n  bugs?: string;\n}\n\nexport const getProjectPkg = async (): Promise<PackageJson> => {\n  const rawPkg: RawPackageJson | undefined = await fs\n    .readFile(path.resolve(process.cwd(), 'package.json'), 'utf-8')\n    .then(JSON.parse)\n    .catch(() => {});\n\n  const pkg: PackageJson = {};\n  if (!rawPkg) return pkg;\n  Object.entries(rawPkg).forEach(([k, v]) => {\n    if (typeof v == 'string') {\n      Reflect.set(pkg, k, v);\n    }\n  });\n  if (\n    typeof rawPkg.author === 'object' &&\n    typeof rawPkg.author?.name == 'string'\n  ) {\n    pkg.author = rawPkg.author.name;\n  }\n  if (typeof rawPkg.bugs === 'object' && typeof rawPkg.bugs?.url == 'string') {\n    pkg.bugs = rawPkg.bugs.url;\n  }\n  if (\n    typeof rawPkg.repository === 'object' &&\n    typeof rawPkg.repository?.url == 'string'\n  ) {\n    const { url } = rawPkg.repository;\n    if (url.startsWith('http')) {\n      pkg.repository = url;\n    } else if (url.startsWith('git+http')) {\n      pkg.repository = url.substring(4);\n    }\n  }\n  return pkg;\n};\n\nconst isScopePkg = (name: string): boolean => name.startsWith('@');\nconst resolveModuleFromPath = async (\n  subpath: string,\n): Promise<string | undefined> => {\n  const p = normalizePath(process.cwd()).split('/');\n  for (let i = p.length; i > 0; i--) {\n    const p2 = `${p.slice(0, i).join('/')}/node_modules/${subpath}`;\n    if (await existFile(p2)) {\n      return p2;\n    }\n  }\n};\n\nconst compatResolveModulePath = async (id: string): Promise<string> => {\n  try {\n    return compatResolve(id);\n  } catch (e) {\n    // not defined in pkg/package.json but exist in pkg/subpath\n    // https://github.com/lisonge/vite-plugin-monkey/issues/169\n    const r = await resolveModuleFromPath(id);\n    if (!r) {\n      throw e;\n    }\n    return r;\n  }\n};\n\nexport const getModuleRealInfo = async (importName: string) => {\n  const nameNoQuery = normalizePath(importName.split('?')[0]);\n  const resolveName = await (async () => {\n    const n = normalizePath(await compatResolveModulePath(nameNoQuery)).replace(\n      /.*\\/node_modules\\/[^/]+\\//,\n      '',\n    );\n    if (isScopePkg(importName)) {\n      return n.split('/').slice(1).join('/');\n    }\n    return n;\n  })();\n  let version: string | undefined = undefined;\n  const nameList = nameNoQuery.split('/');\n  let name = nameNoQuery;\n  while (nameList.length > 0) {\n    name = nameList.join('/');\n    const filePath = await (async () => {\n      const p = await resolveModuleFromPath(`${name}/package.json`);\n      if (p) {\n        return p;\n      }\n      try {\n        return compatResolve(`${name}/package.json`);\n      } catch {\n        return undefined;\n      }\n    })();\n    if (filePath === undefined || !(await existFile(filePath))) {\n      nameList.pop();\n      continue;\n    }\n    const modulePack: PackageJson = JSON.parse(\n      await fs.readFile(filePath, 'utf-8'),\n    );\n    version = modulePack.version;\n    break;\n  }\n  if (version === undefined) {\n    console.warn(\n      `[plugin-monkey] not found module ${nameNoQuery} version, use ${nameNoQuery}@latest`,\n    );\n    name = nameNoQuery;\n    version = 'latest';\n  }\n  return { version, name, resolveName };\n};\n","import { normalizePath } from 'vite';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\nimport { getModuleRealInfo } from '../utils/pkg.ts';\nimport type { Plugin } from 'vite';\n\nexport const externalGlobalsFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  return {\n    name: 'monkey:externalGlobals',\n    enforce: 'pre',\n    apply: 'build',\n    async config() {\n      option = await getOption();\n      for (const [moduleName, varName2LibUrl] of option.build.externalGlobals) {\n        const { name, version } = await getModuleRealInfo(moduleName);\n        if (typeof varName2LibUrl == 'string') {\n          option.globalsPkg2VarName[moduleName] = varName2LibUrl;\n        } else if (typeof varName2LibUrl == 'function') {\n          option.globalsPkg2VarName[moduleName] = await varName2LibUrl(\n            version,\n            name,\n            moduleName,\n          );\n        } else if (varName2LibUrl instanceof Array) {\n          const [varName, ...libUrlList] = varName2LibUrl;\n          if (typeof varName == 'string') {\n            option.globalsPkg2VarName[moduleName] = varName;\n          } else if (typeof varName == 'function') {\n            option.globalsPkg2VarName[moduleName] = await varName(\n              version,\n              name,\n              moduleName,\n            );\n          }\n          for (const libUrl of libUrlList) {\n            // keep add order\n            if (typeof libUrl == 'string') {\n              option.requirePkgList.push({ url: libUrl, moduleName });\n            } else if (typeof libUrl == 'function') {\n              option.requirePkgList.push({\n                url: await libUrl(version, name, moduleName),\n                moduleName,\n              });\n            }\n          }\n        }\n      }\n      return {\n        build: {\n          rolldownOptions: {\n            external: Object.keys(option.globalsPkg2VarName),\n          },\n        },\n      };\n    },\n    async generateBundle() {\n      const usedModIdSet = new Set(\n        Array.from(this.getModuleIds()).map((s) => normalizePath(s)),\n      );\n      option.collectRequireUrls = option.requirePkgList\n        .filter((p) => usedModIdSet.has(p.moduleName))\n        .map((p) => p.url);\n    },\n  };\n};\n","import MagicString from 'magic-string';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport {\n  getProgramImportNodes,\n  getSafeIdentifier,\n  getUpperCaseName,\n} from '../utils/others.ts';\nimport { getModuleRealInfo } from '../utils/pkg.ts';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\n\nconst loaderModuleCode = `\nimport { GM_addStyle, GM_getResourceText, GM_getResourceURL } from 'vite-plugin-monkey/dist/client';\nexport const cssLoader = (name) => GM_addStyle(GM_getResourceText(name));\nexport const jsonLoader = (name) => JSON.parse(GM_getResourceText(name));\nexport const rawLoader = (name) => GM_getResourceText(name);\nexport const urlLoader = (name, type) => {\n  return GM_getResourceURL(name, false).replace(\n    /^data:application;base64,/,\n    'data:' + type + ';base64',\n  );\n};\n`;\nconst loaderModId = 'virtual:monkey-loader';\nconst virtualloaderModId = '\\0' + loaderModId;\n\nconst getExportModuleCode = (\n  name: string,\n  dynamic: boolean,\n  params: unknown[],\n): string => {\n  const valueLiteral = `(${name}(${params.map((v) => JSON.stringify(v)).join(',')}))`;\n  return [\n    `import {${name}} from '${loaderModId}'`,\n    dynamic\n      ? `let cache; export const _ = () => cache ?? (cache = ${valueLiteral})`\n      : `export const _ = ${valueLiteral}`,\n    `export default _`,\n  ].join(';');\n};\n\nconst resPrefix = 'virtual:monkey-resource-';\nconst resDynamicPrefix = 'virtual:monkey-resource-dynamic-';\nconst isRawResId = (id: string): boolean => {\n  return id.startsWith(resPrefix) || id.startsWith(resDynamicPrefix);\n};\nconst getValueResId = (value: string, dynamic = false): string => {\n  return (dynamic ? resDynamicPrefix : resPrefix) + encodeURIComponent(value);\n};\nconst getVirtualResId = (id: string): string => {\n  // append end \\0 or encodeURIComponent to prevent handler that other plugin, such as css plugin\n  return '\\0' + id + '\\0';\n};\n\nconst getResNameTuple = (\n  id: string,\n): [name: string, dynamic: boolean] | undefined => {\n  if (id.startsWith('\\0') && id.endsWith('\\0')) {\n    if (id.startsWith(resDynamicPrefix, 1)) {\n      return [\n        decodeURIComponent(id.slice(resDynamicPrefix.length + 1, -1)),\n        true,\n      ];\n    } else if (id.startsWith(resPrefix, 1)) {\n      return [decodeURIComponent(id.slice(resPrefix.length + 1, -1)), false];\n    }\n  }\n};\n\nexport const externalResourceFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  let viteConfig: ResolvedConfig;\n  let mrmime: typeof import('mrmime');\n  const resourceRecord: Record<\n    string,\n    { resourceName: string; resourceUrl: string }\n  > = {};\n  let resKeys: string[];\n  return {\n    name: 'monkey:externalResource',\n    enforce: 'post',\n    apply: 'build',\n    async config() {\n      option = await getOption();\n      mrmime = await import('mrmime');\n      resKeys = Object.keys(option.build.externalResource);\n    },\n    configResolved(config) {\n      viteConfig = config;\n    },\n    resolveId(id) {\n      if (id === loaderModId) return virtualloaderModId;\n      if (isRawResId(id)) return getVirtualResId(id);\n    },\n    async transform(code) {\n      if (!code.includes('import')) return;\n      if (!resKeys.some((k) => code.includes(k))) return;\n      const nodes = getProgramImportNodes(this.parse(code)).filter((n) =>\n        resKeys.includes(n.value),\n      );\n      if (!nodes.length) return;\n      const ms = new MagicString(code);\n      const importCodes: string[] = [];\n      for (const { node, value } of nodes) {\n        if (node.type === 'ImportDeclaration') {\n          ms.update(\n            node.source.start,\n            node.source.end,\n            JSON.stringify(getValueResId(value)),\n          );\n        } else {\n          const loadName = getSafeIdentifier(\n            getUpperCaseName(value) || 'r',\n            code,\n            importCodes,\n          );\n          importCodes.push(\n            `import { _ as ${loadName}} from ${JSON.stringify(getValueResId(value, true))};`,\n          );\n          ms.update(node.start, node.end, `${loadName}()`);\n        }\n      }\n      ms.prepend(importCodes.join('\\n'));\n      return {\n        code: ms.toString(),\n        map: ms.generateMap(),\n      };\n    },\n    async load(id) {\n      if (id === virtualloaderModId) return loaderModuleCode;\n      const [importName, dynamic] = getResNameTuple(id) || [];\n      if (dynamic === undefined) return;\n      if (!importName) return;\n      const pkg = await getModuleRealInfo(importName);\n      const resOption = option.build.externalResource[importName];\n      const resourceName = await resOption.resourceName({ ...pkg, importName });\n      const resourceUrl = await resOption.resourceUrl({ ...pkg, importName });\n      resourceRecord[importName] = {\n        resourceName,\n        resourceUrl,\n      };\n      const loaderParam = {\n        ...pkg,\n        resourceName,\n        resourceUrl,\n        importName,\n        dynamic,\n      };\n      if (resOption.nodeLoader) {\n        return resOption.nodeLoader(loaderParam);\n      } else if (resOption.loader) {\n        const valueLiteral = `((${resOption.loader})(${JSON.stringify(loaderParam)}))`;\n        return (\n          (dynamic\n            ? `let cache; export const _ async()=>cache??(cache=${valueLiteral})`\n            : `export const _ ${valueLiteral}`) + `\\nexport default _`\n        );\n      }\n      const [resourcePath, query] = importName.split('?', 2);\n      const ext = resourcePath.split('.').at(-1) ?? '';\n      const mimeType = mrmime.lookup(ext) ?? 'application/octet-stream';\n      const suffixSet = new URLSearchParams(query);\n      const moduleCode = (() => {\n        if (suffixSet.has('inline') && ext === 'css') {\n          // css?inline -> string content\n          return getExportModuleCode('rawLoader', dynamic, [resourceName]);\n        } else if (suffixSet.has('url') || suffixSet.has('inline')) {\n          return getExportModuleCode('urlLoader', dynamic, [\n            resourceName,\n            mimeType,\n          ]);\n        } else if (suffixSet.has('raw')) {\n          return getExportModuleCode('rawLoader', dynamic, [resourceName]);\n        } else if (ext == 'json') {\n          return getExportModuleCode('jsonLoader', dynamic, [resourceName]);\n        } else if (ext == 'css') {\n          return getExportModuleCode('cssLoader', dynamic, [resourceName]);\n        } else if (viteConfig.assetsInclude(resourcePath)) {\n          return getExportModuleCode('urlLoader', dynamic, [\n            resourceName,\n            mimeType,\n          ]);\n        } else {\n          throw new Error(`module: ${importName} not found loader`);\n        }\n      })();\n      return moduleCode;\n    },\n    generateBundle() {\n      const usedModIdSet = new Set<string>();\n      Array.from(this.getModuleIds()).forEach((id) => {\n        const name = getResNameTuple(id)?.[0];\n        if (name) {\n          usedModIdSet.add(name);\n        }\n      });\n      const collectResource: Record<string, string> = {};\n      Object.entries(resourceRecord).forEach(\n        ([importName, { resourceName, resourceUrl }]) => {\n          if (usedModIdSet.has(importName)) {\n            collectResource[resourceName] = resourceUrl;\n          }\n        },\n      );\n      option.collectResource = collectResource;\n    },\n  };\n};\n","import type { Plugin, ResolvedConfig } from 'vite';\n\n/**\n * convert `export default \"/src/assets/a.png\"` to `export default new URL(\"/src/assets/a.png\", import.meta['url']).href`\n */\nexport const fixAssetUrlFactory = (): Plugin => {\n  let viteConfig: ResolvedConfig;\n  return {\n    name: 'monkey:fixAssetUrl',\n    apply: 'serve',\n    async configResolved(resolvedConfig) {\n      viteConfig = resolvedConfig;\n    },\n    async transform(code, id) {\n      const [_, query = 'url'] = id.split('?', 2);\n      if (\n        (query.split('&').includes('url') || viteConfig.assetsInclude(id)) &&\n        code.match(/^\\s*export\\s+default/)\n      ) {\n        const ast = this.parse(code);\n        const defaultNode = ast.body[0];\n        if (defaultNode?.type == 'ExportDefaultDeclaration') {\n          const childNode = defaultNode?.declaration;\n          if (\n            childNode?.type == 'Literal' &&\n            typeof childNode.value == 'string' &&\n            childNode.value[0] === '/'\n          ) {\n            const p0 = JSON.stringify(childNode.value);\n            return `export default new URL(${p0}, import.meta['url']).href`;\n          }\n        }\n      }\n    },\n  };\n};\n","import type { Plugin } from 'vite';\n\nexport const fixClientFactory = (): Plugin => {\n  return {\n    name: 'monkey:fixClient',\n    apply: 'serve',\n    async transform(code, id) {\n      if (id.endsWith('node_modules/vite/dist/client/client.mjs')) {\n        // https://github.com/vitejs/vite/blob/main/packages/vite/src/client/client.ts\n        // https://cdn.jsdelivr.net/npm/vite@latest/dist/client/client.mjs\n        return code.replaceAll(\n          '__BASE__',\n          `new URL(__BASE__ || '/', import.meta['url']).href`,\n        );\n      }\n    },\n  };\n};\n","import type { Plugin } from 'vite';\n\nexport const fixCssUrlFactory = (): Plugin => {\n  // https://github.com/lisonge/vite-plugin-monkey/issues/214\n  return {\n    name: 'monkey:fixCssUrl',\n    apply: 'serve',\n    async config() {\n      const postUrl = (await import('postcss-url')).default;\n      return {\n        css: {\n          postcss: {\n            plugins: [postUrl({ url: 'inline' }) as any],\n          },\n        },\n      };\n    },\n  };\n};\n","import type { Plugin } from 'vite';\n\nconst isWorkerRequest = (id: string): boolean => {\n  const queryIndex = id.indexOf('?');\n  if (queryIndex === -1) return false;\n  const query = new URLSearchParams(id.slice(queryIndex + 1));\n  return query.has('worker') && !query.has('url');\n};\n\nconst workerWrapper = `\nconst dataUri = \\`data:text/javascript;charset=utf-8,\\${encodeURIComponent(\n  \\`import \\${JSON.stringify(\n    new URL('?worker_file&type=module', import.meta['url']).href,\n  )};\\`,\n)}\\`;\n\nexport default function WorkerWrapper(options) {\n  return new Worker(dataUri, {\n    type: 'module',\n    name: options?.name,\n  });\n}\n`.trimStart();\n\nexport const fixWorkerFactory = (): Plugin => {\n  // https://github.com/lisonge/vite-plugin-monkey/issues/217\n  return {\n    name: 'monkey:fixWorker',\n    enforce: 'pre',\n    apply: 'serve',\n    load(id) {\n      if (isWorkerRequest(id)) return workerWrapper;\n    },\n  };\n};\n","import { stringifyFunction } from './others.ts';\n\nconst htmlText = /* html */ `\n<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"https://vite.dev/logo.svg\" />\n    <title>Vite</title>\n  </head>\n  <script type=\"module\" data-source=\"vite-plugin-monkey\">\n  __CODE__\n  </script>\n</html>\n`.trimStart();\n\nexport const fcToHtml = <T extends (...args: any[]) => any>(\n  fn: T,\n  ...args: Parameters<T>\n) => {\n  return htmlText.replace(`__CODE__`, stringifyFunction(fn, ...args));\n};\n\nexport const serverInjectFn = (entrySrc: string, key: string) => {\n  // @ts-ignore\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  window.GM; // must exist, see Tampermonkey/tampermonkey#1567\n\n  // @ts-ignore\n  document[key] = window;\n\n  // GM_addElement is not wokring, see #254\n  const script = document.createElement('script');\n  script.type = 'module';\n  // @ts-ignore use chrome trustedTypes, see #205\n  if (window.trustedTypes) {\n    // @ts-ignore\n    const policy = window.trustedTypes.createPolicy(key, {\n      createScriptURL: (input: unknown) => input,\n    });\n    script.src = policy.createScriptURL(entrySrc);\n  } else {\n    script.src = entrySrc;\n  }\n  // see #262\n  // document.head may be null when run-at document-start\n  (document.head || document.documentElement).append(script);\n};\n\nexport const mountGmApiFn = (key: string, apiNames: string[]) => {\n  // @ts-ignore\n  const monkeyWindow: Window = document[key];\n  if (!monkeyWindow) {\n    console.warn(`[vite-plugin-monkey] not found monkeyWindow`);\n    return;\n  }\n  // @ts-ignore\n  window.unsafeWindow = window;\n  apiNames.push('GM');\n  apiNames.forEach((apiName) => {\n    // @ts-ignore\n    const fn = monkeyWindow[apiName];\n    if (fn) {\n      // @ts-ignore\n      window[apiName] = monkeyWindow[apiName];\n    }\n  });\n};\n\nexport const virtualHtmlTemplate = async (url: string) => {\n  const delay = (n = 0) => new Promise<void>((res) => setTimeout(res, n));\n  await delay();\n  const u = new URL(url, location.origin);\n  u.searchParams.set('origin', u.origin);\n  if (window == window.parent) {\n    location.href = u.href;\n    await delay(500);\n    window.close();\n    return;\n  }\n  // if in iframe, like codesandbox\n  const style = document.createElement('style');\n  document.head.append(style);\n  style.innerText = /* css */ `\n  body {\n    font-family: Arial, sans-serif;\n    margin: 0;\n  }\n  .App {\n    margin: 25px;\n  }\n  p {\n    font-size: 1.5em;\n  }\n  a {\n    color: blue;\n    text-decoration: none;\n    font-size: 1.5em;\n  }\n  a:hover {\n    text-decoration: underline;\n  }\n`.trim();\n  document.body.innerHTML = /* html */ `\n  <div class=\"App\">\n    <h1>PREVIEW PAGE</h1>\n    <p>Click the links below to install userscripts:</p>\n    <a target=\"_blank\"></a></th>\n  </div>\n  `.trim();\n  await delay();\n  const a = document.querySelector('a')!;\n  a.href = location.href;\n  a.text = location.href;\n};\n\nexport const previewTemplate = async (urls: string[]) => {\n  const delay = (n = 0) => new Promise<void>((res) => setTimeout(res, n));\n  await delay();\n  const style = document.createElement('style');\n  document.head.append(style);\n  style.innerText = /* css */ `\n  body {\n    font-family: Arial, sans-serif;\n    margin: 0;\n  }\n  .App {\n    margin: 25px;\n  }\n  p {\n    font-size: 1.5em;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 1.5em;\n  }\n  th, td {\n    border: 1px solid black;\n    padding: 8px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n  }\n  a {\n    color: blue;\n    text-decoration: none;\n  }\n  a:hover {\n    text-decoration: underline;\n  }\n`.trim();\n  if (window == window.parent && urls.length == 1) {\n    const u = new URL(urls[0], location.origin);\n    location.href = u.href;\n    await delay(500);\n    window.close();\n    return;\n  } else if (urls.length == 0) {\n    document.body.innerHTML = /* html */ `\n    <div class=\"App\">\n      <h1> There is no script to install </h1>\n    </div>\n    `.trim();\n    return;\n  } else {\n    document.body.innerHTML = /* html */ `\n    <div class=\"App\">\n      <h1>PREVIEW PAGE</h1>\n      <p>Click the links below to install userscripts:</p>\n      <table>\n        <tr>\n          <th>No.</th>\n          <th>Install Link</th>\n        </tr>\n      </table>\n    </div>\n    `.trim();\n    await delay();\n    const table = document.querySelector<HTMLElement>(`table`)!;\n    urls.sort().forEach((u, index) => {\n      const tr = document.createElement('tr');\n      const td1 = document.createElement('td');\n      const td2 = document.createElement('td');\n      const a = document.createElement('a');\n      td1.innerText = `${index + 1}`;\n      if (window != window.parent) {\n        a.target = '_blank';\n      }\n      a.href = u;\n      a.textContent = new URL(u, location.origin).href;\n      td2.append(a);\n      tr.append(td1);\n      tr.append(td2);\n      table.append(tr);\n    });\n  }\n};\n","import path from 'node:path';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport { normalizePath } from 'vite';\nimport { walk } from '../utils/others.ts';\nimport { fcToHtml, previewTemplate } from '../utils/template.ts';\n\nexport const perviewFactory = (): Plugin => {\n  let viteConfig: ResolvedConfig;\n  return {\n    name: 'monkey:perview',\n    apply: 'serve',\n    configResolved(config) {\n      viteConfig = config;\n    },\n    async configurePreviewServer(server) {\n      server.middlewares.use(async (req, res, next) => {\n        if (['/', '/index.html'].includes((req.url ?? '').split('?')[0])) {\n          const distDirPath = path.join(process.cwd(), viteConfig.build.outDir);\n          const urls: string[] = [];\n          for await (const pathname of walk(distDirPath)) {\n            if (pathname.endsWith('.user.js')) {\n              const fileName = normalizePath(\n                path.relative(distDirPath, pathname),\n              );\n              urls.push(`/` + fileName);\n            }\n          }\n          res.setHeader('content-type', 'text/html; charset=utf-8');\n          res.end(fcToHtml(previewTemplate, urls));\n          return;\n        }\n        next();\n      });\n    },\n  };\n};\n","import type { Plugin } from 'vite';\n\nexport const removePreloadFactory = (): Plugin => {\n  // https://github.com/vitejs/vite/blob/main/packages/vite/src/node/plugins/importAnalysisBuild.ts#L561\n  // vite will replace import('id') to __vitePreload(()=> import('id'), [])\n  // this plugin will disable this behavior\n  return {\n    name: 'monkey:removeVitePreload',\n    apply: 'build',\n    config() {\n      return {\n        build: {\n          modulePreload: false,\n        },\n      };\n    },\n    configResolved(config) {\n      const plugin = config.plugins.find(\n        (p) => p.name === 'native:import-analysis-build',\n      );\n      if (plugin) {\n        plugin.applyToEnvironment = undefined;\n      }\n    },\n  };\n};\n","import type { Plugin } from 'vite';\nimport { gmIdentifiers } from '../utils/gmApi.ts';\n\n// https://github.com/Tampermonkey/tampermonkey/issues/1567\nconst clientSourceId = 'vite-plugin-monkey/dist/client';\nconst clientId = '\\0' + clientSourceId;\nexport const redirectClientFactory = (): Plugin => {\n  return {\n    name: 'monkey:redirectClient',\n    enforce: 'pre',\n    apply: 'build',\n    resolveId(source) {\n      if (source === clientSourceId) {\n        return clientId;\n      }\n    },\n    load(id) {\n      if (id == clientId) {\n        const identifiers = ['GM', ...gmIdentifiers, 'unsafeWindow'];\n        // https://github.com/evanw/esbuild/issues/2267#issuecomment-1138445856\n        const declarations = identifiers\n          .map((v) => {\n            return `var _${v} = /* @__PURE__ */ (() => typeof ${v} != \"undefined\" ? ${v} : undefined)();`;\n          })\n          .concat('var _monkeyWindow = /* @__PURE__ */ (() => window)();');\n        const exportIdentifiers = identifiers.concat('monkeyWindow');\n        return (\n          declarations.join('\\n') +\n          `\\nexport {${exportIdentifiers\n            .map((v) => `  _${v} as ${v},`)\n            .join('\\n')}};`\n        );\n      }\n    },\n  };\n};\n","import path, { join } from 'node:path';\nimport { exec } from 'node:child_process';\nimport type { ExecOptions } from 'node:child_process';\nimport open from 'open';\nimport type { Options } from 'open';\nimport spawn from 'cross-spawn';\nimport colors from 'picocolors';\nimport { compatResolve } from './others.ts';\n\nconst VITE_PACKAGE_DIR = path.dirname(compatResolve('vite/package.json'));\n\n// copy from https://github.com/vitejs/vite/blob/main/packages/vite/src/node/server/openBrowser.ts\n\n/**\n * Reads the BROWSER environment variable and decides what to do with it.\n */\nexport function openBrowser(url: string, opt?: string): void {\n  // The browser executable to open.\n  // See https://github.com/sindresorhus/open#app for documentation.\n  const browser = typeof opt === 'string' ? opt : process.env.BROWSER || '';\n  if (browser.toLowerCase().endsWith('.js')) {\n    executeNodeScript(browser, url);\n  } else if (browser.toLowerCase() !== 'none') {\n    const browserArgs = process.env.BROWSER_ARGS\n      ? process.env.BROWSER_ARGS.split(' ')\n      : [];\n    startBrowserProcess(browser, browserArgs, url);\n  }\n}\n\nfunction executeNodeScript(scriptPath: string, url: string) {\n  const extraArgs = process.argv.slice(2);\n  const child = spawn(process.execPath, [scriptPath, ...extraArgs, url], {\n    stdio: 'inherit',\n  });\n  child.on('close', (code) => {\n    if (code !== 0) {\n      console.error(\n        '[plugin-monkey] ' +\n          colors.red(\n            `\\nThe script specified as BROWSER environment variable failed.\\n\\n${colors.cyan(\n              scriptPath,\n            )} exited with code ${code}.`,\n          ),\n        { error: null },\n      );\n    }\n  });\n}\n\nconst supportedChromiumBrowsers = [\n  'Google Chrome Canary',\n  'Google Chrome Dev',\n  'Google Chrome Beta',\n  'Google Chrome',\n  'Microsoft Edge',\n  'Brave Browser',\n  'Vivaldi',\n  'Chromium',\n];\n\nasync function startBrowserProcess(\n  browser: string | undefined,\n  browserArgs: string[],\n  url: string,\n) {\n  // If we're on OS X, the user hasn't specifically\n  // requested a different browser, we can try opening\n  // a Chromium browser with AppleScript. This lets us reuse an\n  // existing tab when possible instead of creating a new one.\n  const preferredOSXBrowser =\n    browser === 'google chrome' ? 'Google Chrome' : browser;\n  const shouldTryOpenChromeWithAppleScript =\n    process.platform === 'darwin' &&\n    (!preferredOSXBrowser ||\n      supportedChromiumBrowsers.includes(preferredOSXBrowser));\n\n  if (shouldTryOpenChromeWithAppleScript) {\n    try {\n      const ps = await execAsync('ps cax');\n      const openedBrowser =\n        preferredOSXBrowser && ps.includes(preferredOSXBrowser)\n          ? preferredOSXBrowser\n          : supportedChromiumBrowsers.find((b) => ps.includes(b));\n      if (openedBrowser) {\n        // Try our best to reuse existing tab with AppleScript\n        await execAsync(\n          `osascript openChrome.applescript \"${url}\" \"${openedBrowser}\"`,\n          {\n            cwd: join(VITE_PACKAGE_DIR, 'bin'),\n          },\n        );\n        return true;\n      }\n    } catch {\n      // Ignore errors\n    }\n  }\n\n  // Another special case: on OS X, check if BROWSER has been set to \"open\".\n  // In this case, instead of passing the string `open` to `open` function (which won't work),\n  // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser):\n  // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768\n  if (process.platform === 'darwin' && browser === 'open') {\n    browser = undefined;\n  }\n\n  // Fallback to open\n  // (It will always open new tab)\n  try {\n    const options: Options = browser\n      ? { app: { name: browser, arguments: browserArgs } }\n      : {};\n\n    new Promise((_, reject) => {\n      open(url, options)\n        .then((subprocess) => {\n          subprocess.on('error', reject);\n        })\n        .catch(reject);\n    }).catch((err) => {\n      console.error('[plugin-monkey] ' + (err.stack || err.message));\n    });\n\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nfunction execAsync(command: string, options?: ExecOptions): Promise<string> {\n  return new Promise((resolve, reject) => {\n    exec(command, options, (error, stdout) => {\n      if (error) {\n        reject(error);\n      } else {\n        resolve(stdout.toString());\n      }\n    });\n  });\n}\n","import fs from 'node:fs/promises';\nimport type { ServerResponse } from 'node:http';\nimport path from 'node:path';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport { normalizePath } from 'vite';\nimport { finalMonkeyOptionToComment } from '../userscript/index.ts';\nimport { gmIdentifiers } from '../utils/gmApi.ts';\nimport { openBrowser } from '../utils/openBrowser.ts';\nimport {\n  existFile,\n  isFirstBoot,\n  parserHtmlScriptResult,\n  safeURL,\n  simpleHash,\n  stringifyFunction,\n} from '../utils/others.ts';\nimport { mountGmApiFn, serverInjectFn } from '../utils/template.ts';\nimport type { ResolvedMonkeyOption } from '../utils/types.ts';\n\nconst urlPrefix = '/__vite-plugin-monkey.';\nexport const installUserPath = urlPrefix + 'install.user.js';\nconst gmApiPath = urlPrefix + 'gm.api.js';\nconst entryPath = urlPrefix + 'entry.js';\nconst pullPath = urlPrefix + 'pull.js';\n\nconst restartStoreKey = '__vite_plugin_monkey_install_url';\nconst localHost = '127.0.0.1';\nconst localOrigin = `http://${localHost}`;\nconst htmlPlaceholder = '<html><head></head><body></body></html>';\n\nexport const serverFactory = (\n  getOption: () => Promise<ResolvedMonkeyOption>,\n): Plugin => {\n  let option: ResolvedMonkeyOption;\n  let viteConfig: ResolvedConfig;\n  let monkeyWindowKey = '';\n  return {\n    name: 'monkey:server',\n    apply: 'serve',\n    async config(userConfig) {\n      option = await getOption();\n      for (const [k, v] of Object.entries(option.userscript.name)) {\n        Reflect.set(option.userscript.name, k, option.server.prefix(v));\n      }\n      option.userscript.grant.add('*');\n      // see #270\n      monkeyWindowKey =\n        `__monkeyWindow-` +\n        simpleHash(\n          await finalMonkeyOptionToComment(option, new Set(), 'serve'),\n        );\n      return {\n        preview: {\n          host: userConfig.preview?.host ?? localHost,\n          cors: true,\n        },\n        server: {\n          host: userConfig.server?.host ?? localHost,\n          open: userConfig.server?.open ?? option.server.open,\n          cors: true,\n        },\n      };\n    },\n    async configResolved(resolvedConfig) {\n      viteConfig = resolvedConfig;\n    },\n    transform(code, id) {\n      // pnpm workspace -> /vite-plugin-monkey/dist/client/index.mjs\n      // vite -> /node_modules/.vite/deps/vite-plugin-monkey_dist_client.js?v=337b7f78\n      // vite -> https://github.com/lisonge/vite-plugin-monkey/issues/271#issuecomment-3656136669\n      if (\n        (id.includes('vite-plugin-monkey') || id.includes('/node_modules/')) &&\n        code.includes('__MONKEY_WINDOW_KEY__')\n      ) {\n        return code.replaceAll(\n          '__MONKEY_WINDOW_KEY__',\n          JSON.stringify(monkeyWindowKey),\n        );\n      }\n    },\n    async configureServer(server) {\n      // https://github.com/lisonge/vite-plugin-monkey/issues/205\n      server.middlewares.use((_, res, next) => {\n        const name = 'access-control-allow-private-network';\n        if (!res.hasHeader(name)) {\n          res.setHeader(name, 'true');\n        }\n        next();\n      });\n\n      const setScriptHeader = (res: ServerResponse) => {\n        res.setHeader('access-control-allow-origin', '*');\n        res.setHeader('content-type', 'application/javascript');\n      };\n\n      server.middlewares.use(async (req, res, next) => {\n        if (!(req.method === 'GET' && req.url && req.url.startsWith(urlPrefix)))\n          return next();\n        const url = new URL(req.url, localOrigin);\n        if (url.pathname === installUserPath) {\n          setScriptHeader(res);\n          const origin =\n            safeURL(url.searchParams.get('origin'))?.origin ||\n            (() => {\n              const host = ((h) => {\n                return typeof h === 'string'\n                  ? h !== '0.0.0.0'\n                    ? h\n                    : localHost\n                  : localHost;\n              })(viteConfig.server.host);\n              return `${viteConfig.server.https ? 'https' : 'http'}://${host}:${viteConfig.server.port}`;\n            })();\n          Reflect.set(globalThis, restartStoreKey, origin);\n          res.end(\n            [\n              await finalMonkeyOptionToComment(option, new Set(), 'serve'),\n              stringifyFunction(\n                serverInjectFn,\n                new URL(entryPath, origin).href,\n                monkeyWindowKey,\n              ),\n              '',\n            ].join('\\n\\n'),\n          );\n        } else if (url.pathname === entryPath) {\n          setScriptHeader(res);\n          const results = await server\n            .transformIndexHtml('/', htmlPlaceholder, req.originalUrl)\n            .then(parserHtmlScriptResult);\n          const entryUrls: string[] = (\n            option.server.mountGmApi ? [gmApiPath] : []\n          ).concat(\n            results.map((v) => {\n              return (\n                v.src ||\n                `${pullPath}?text=${Buffer.from(v.text, 'utf-8').toString('base64url')}`\n              );\n            }),\n          );\n          const realEntry = path.isAbsolute(option.entry)\n            ? normalizePath(path.relative(viteConfig.root, option.entry))\n            : option.entry;\n          const entryUrl = new URL(realEntry, localOrigin);\n          entryUrls.push(entryUrl.pathname + entryUrl.search);\n          res.end(\n            entryUrls.map((s) => `import ${JSON.stringify(s)};`).join('\\n'),\n          );\n        } else if (url.pathname === pullPath) {\n          setScriptHeader(res);\n          res.end(\n            Buffer.from(\n              url.searchParams.get('text') ?? '',\n              'base64url',\n            ).toString('utf-8'),\n          );\n        } else if (url.pathname === gmApiPath) {\n          setScriptHeader(res);\n          if (option.server.mountGmApi) {\n            res.end(\n              stringifyFunction(\n                mountGmApiFn,\n                monkeyWindowKey,\n                gmIdentifiers.concat(),\n              ),\n            );\n          } else {\n            res.end('');\n          }\n        } else {\n          next();\n        }\n      });\n\n      if (option.server.open) {\n        const hash = simpleHash(viteConfig.configFile);\n        const cacheUserPath = `node_modules/.vite/__vite-plugin-monkey.cache.${hash}.user.js`;\n        let cacheComment = '';\n        if (await existFile(cacheUserPath)) {\n          cacheComment = (await fs.readFile(cacheUserPath)).toString('utf-8');\n        } else {\n          await fs.mkdir(path.dirname(cacheUserPath)).catch(() => {});\n        }\n        const newComment = await finalMonkeyOptionToComment(\n          option,\n          new Set(),\n          'serve',\n        );\n        const installUrl = Reflect.get(globalThis, restartStoreKey);\n        if (!isFirstBoot() && cacheComment != newComment && installUrl) {\n          openBrowser(installUrl);\n          setTimeout(() => {\n            console.log('[plugin-monkey] reopen, config comment has changed');\n          });\n        }\n        await fs.writeFile(cacheUserPath, newComment).catch(() => {});\n      }\n    },\n  };\n};\n","import { getUpperCaseName } from '../utils/others.ts';\nimport type { MonkeyPluginFactory } from '../utils/types.ts';\n\nexport const styleFactory: MonkeyPluginFactory = (_getOption, pluginOption) => {\n  if (pluginOption.styleImport === false) return;\n  let isServe: boolean;\n  return {\n    name: 'monkey:style',\n    enforce: 'pre',\n    async config(_, env) {\n      isServe = env.command === 'serve';\n    },\n    async resolveId(source, importer, options) {\n      if (source === toolsModId) return resolvedToolsModId;\n      if (source.endsWith(styleQuery)) {\n        const cssId = source.slice(0, -styleQuery.length);\n        const resolveId = (await this.resolve(cssId, importer, options))?.id;\n        if (!resolveId) return;\n        return resolveId + cssIdSuffix;\n      }\n    },\n    load(id) {\n      if (id === resolvedToolsModId) return toolsTemplate;\n      if (id.endsWith(cssIdSuffix)) {\n        const cssId = id.substring(0, id.length - cssIdSuffix.length);\n        return getStyleModule(cssId, isServe);\n      }\n    },\n  };\n};\n\nconst styleQuery = '?style';\n\nconst cssIdSuffix = '.plugin-monkey-style';\n\nconst getStyleModule = (cssId: string, isServe: boolean): string => {\n  const name = getUpperCaseName(cssId.split('/').at(-1));\n  return (isServe ? styleDevTemplate : styleBuildTemplate)\n    .replaceAll('{0}', JSON.stringify(cssId + '?inline'))\n    .replaceAll('{1}', name || '_');\n};\n\nconst toolsModId = 'virtual:monkey-style-tools';\nconst resolvedToolsModId = '\\0' + toolsModId;\nconst toolsTemplate = `\nexport const _style = (b, a = document.createElement('style')) => (a.append(b), a);\n`.trimStart();\n\nconst styleBuildTemplate = `\nimport {1} from {0};\nimport {_style} from '${toolsModId}';\nexport default _style({1});\n`.trimStart();\n\nconst styleDevTemplate = `\nimport css from {0};\nimport {_style} from '${toolsModId}';\nconst style = _style(css);\nexport default style;\nif (import.meta.hot) {\n  style.setAttribute('data-vite-dev-id', {0});\n  const nodes = [style];\n  const fakeCloneNode = function (...args) {\n    const s = Node.prototype.cloneNode.call(this, ...args);\n    if (args[0] === true) {\n      s.cloneNode = fakeCloneNode;\n      nodes.push(s);\n    }\n    return s;\n  };\n  style.cloneNode = fakeCloneNode;\n  import.meta.hot.accept({0}, (v) => {\n    const t = String(v.default || '');\n    nodes.forEach((s) => {\n      s.textContent = t;\n    });\n  });\n}`.trimStart();\n","import type { Plugin } from 'vite';\nimport { virtualHtmlTemplate, fcToHtml } from '../utils/template.ts';\nimport { installUserPath } from './server.ts';\n\nexport const virtualHtmlFactory = (): Plugin => {\n  return {\n    name: 'monkey:virtualHtml',\n    apply: 'serve',\n    configureServer(server) {\n      server.middlewares.use(async (req, res, next) => {\n        const url = req.url || '/';\n        if (['/', '/index.html'].includes(url)) {\n          res.setHeader('content-type', 'text/html');\n          res.setHeader('cache-control', 'no-cache');\n          res.setHeader('access-control-allow-origin', '*');\n          return res.end(fcToHtml(virtualHtmlTemplate, installUserPath));\n        }\n        next();\n      });\n    },\n  };\n};\n","import type { MonkeyPluginFactory } from '../utils/types.ts';\nimport { buildBundleFactory } from './buildBundle.ts';\nimport { configFactory } from './config.ts';\nimport { cssFactory } from './css.ts';\nimport { externalGlobalsFactory } from './externalGlobals.ts';\nimport { externalResourceFactory } from './externalResource.ts';\nimport { fixAssetUrlFactory } from './fixAssetUrl.ts';\nimport { fixClientFactory } from './fixClient.ts';\nimport { fixCssUrlFactory } from './fixCssUrl.ts';\nimport { fixWorkerFactory } from './fixWorker.ts';\nimport { perviewFactory } from './perview.ts';\nimport { removePreloadFactory } from './removePreload.ts';\nimport { redirectClientFactory } from './redirectClient.ts';\nimport { serverFactory } from './server.ts';\nimport { styleFactory } from './style.ts';\nimport { virtualHtmlFactory } from './virtualHtml.ts';\n\nconst factorys: MonkeyPluginFactory[] = [\n  configFactory,\n\n  virtualHtmlFactory,\n  fixClientFactory,\n  fixAssetUrlFactory,\n  fixCssUrlFactory,\n  fixWorkerFactory,\n  serverFactory,\n  perviewFactory,\n\n  removePreloadFactory,\n  styleFactory,\n  redirectClientFactory,\n  externalGlobalsFactory,\n  externalResourceFactory,\n  cssFactory,\n  buildBundleFactory,\n];\n\nexport default factorys;\n","import type { ModuleToUrlFc } from './utils/types.ts';\n\n/**\n * `https://cdn.jsdelivr.net/npm/${name}@${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @param pathname jsdelivr support file combine, normally you don't need set pathname\n * @see https://www.jsdelivr.com/features\n */\nexport const jsdelivr = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      if (p) {\n        return `https://cdn.jsdelivr.net/npm/${name}@${version}/${p}`;\n      } else {\n        return `https://cdn.jsdelivr.net/npm/${name}@${version}`;\n      }\n    },\n  ];\n};\n\n/**\n * `https://fastly.jsdelivr.net/npm/${name}@${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @param pathname jsdelivr support file combine, normally you don't need set pathname\n * @see https://www.jsdelivr.com/features\n */\nexport const jsdelivrFastly = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      if (p) {\n        return `https://fastly.jsdelivr.net/npm/${name}@${version}/${p}`;\n      } else {\n        return `https://fastly.jsdelivr.net/npm/${name}@${version}`;\n      }\n    },\n  ];\n};\n\n/**\n * `https://unpkg.com/${name}@${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @see https://unpkg.com/\n */\nexport const unpkg = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      if (p) {\n        return `https://unpkg.com/${name}@${version}/${p}`;\n      } else {\n        return `https://unpkg.com/${name}@${version}`;\n      }\n    },\n  ];\n};\n\n/**\n * `https://fastly.jsdelivr.net/npm/${name}@${version}/${pathname}`\n * @deprecated bootcdn will return virus-infected code. Please stop using it and switch to other sources\n */\nexport const bootcdn = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  console.warn(\n    '[plugin-monkey] bootcdn will return virus-infected code. Please stop using it and switch to other sources. now it will return jsdelivr url.',\n  );\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://fastly.jsdelivr.net/npm/${name}@${version}/${p}`;\n    },\n  ];\n};\n\n/**\n * `https://fastly.jsdelivr.net/npm/${name}@${version}/${pathname}`\n * @deprecated staticfile will return virus-infected code. Please stop using it and switch to other sources\n */\nexport const staticfile = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  console.warn(\n    '[plugin-monkey] staticfile will return virus-infected code. Please stop using it and switch to other sources. now it will return jsdelivr url.',\n  );\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://fastly.jsdelivr.net/npm/${name}@${version}/${p}`;\n    },\n  ];\n};\n/**\n * `https://cdnjs.cloudflare.com/ajax/libs/${name}/${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @see https://cdnjs.com/libraries\n */\nexport const cdnjs = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://cdnjs.cloudflare.com/ajax/libs/${name}/${version}/${p}`;\n    },\n  ];\n};\n\n/**\n * `https://unpkg.zhimg.com/${name}/${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @link https://unpkg.zhimg.com/\n */\nexport const zhimg = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://unpkg.zhimg.com/${name}@${version}/${p}`;\n    },\n  ];\n};\n\n/**\n * `https://npm.elemecdn.com/${name}@${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n */\nexport const elemecdn = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://npm.elemecdn.com/${name}@${version}/${p}`;\n    },\n  ];\n};\n\n/**\n * `https://code.bdstatic.com/npm/${name}@${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n */\nexport const bdstatic = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      return `https://code.bdstatic.com/npm/${name}@${version}/${p}`;\n    },\n  ];\n};\n\n/**\n * `https://registry.npmmirror.com/${name}/${version}/files/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n */\nexport const npmmirror = (\n  exportVarName = '',\n  pathname = '',\n): [string, ModuleToUrlFc] => {\n  return [\n    exportVarName,\n    (version, name, _importName = '', resolveName = '') => {\n      const p = pathname || resolveName;\n      if (p) {\n        return `https://registry.npmmirror.com/${name}/${version}/files/${p}`;\n      } else {\n        return `https://registry.npmmirror.com/${name}/${version}/files`;\n      }\n    },\n  ];\n};\n","import { jsdelivr } from '../cdn.ts';\nimport { getProjectPkg } from './pkg.ts';\nimport type {\n  IArray,\n  Mod2UrlFn,\n  MonkeyOption,\n  Pkg2UrlFn,\n  PkgOptions,\n  ResolvedMonkeyOption,\n  Thenable,\n} from './types.ts';\n\nexport const resolvedOption = async (\n  pluginOption: MonkeyOption,\n): Promise<ResolvedMonkeyOption> => {\n  if (pluginOption.format) {\n    setTimeout(() => {\n      console.log(\n        '[vite-plugin] `format` option is deprecated, use `align` and `generate` instead',\n      );\n    });\n  }\n\n  const build = pluginOption.build ?? {};\n\n  const { externalResource = {} } = build;\n  const externalResource2: Record<\n    string,\n    {\n      resourceUrl: Pkg2UrlFn;\n      resourceName: Pkg2UrlFn;\n      loader?: (pkgOptions: PkgOptions) => unknown;\n      nodeLoader?: (pkgOptions: PkgOptions) => Thenable<string>;\n    }\n  > = {};\n\n  for (const [k, v] of Object.entries(externalResource)) {\n    if (typeof v == 'string') {\n      externalResource2[k] = {\n        resourceName: () => k,\n        resourceUrl: () => v,\n      };\n    } else if (typeof v == 'function') {\n      externalResource2[k] = {\n        resourceName: () => k,\n        resourceUrl: v,\n      };\n    } else if (v instanceof Array) {\n      let resourceUrl2: Pkg2UrlFn;\n      let resourceName2: Pkg2UrlFn;\n      const [resourceName, resourceUrl] = v;\n      if (typeof resourceName == 'string') {\n        resourceName2 = (pkg) => resourceName || pkg.importName;\n      } else {\n        resourceName2 = (pkg) =>\n          resourceName(pkg.version, pkg.name, pkg.importName, pkg.resolveName);\n      }\n      if (typeof resourceUrl == 'string') {\n        resourceUrl2 = () => resourceUrl;\n      } else {\n        resourceUrl2 = (pkg) =>\n          resourceUrl(pkg.version, pkg.name, pkg.importName, pkg.resolveName);\n      }\n      externalResource2[k] = {\n        resourceName: resourceName2,\n        resourceUrl: resourceUrl2,\n      };\n    } else {\n      const { resourceUrl, loader, nodeLoader, resourceName } = v;\n      let resourceUrl2: Pkg2UrlFn;\n      let resourceName2: Pkg2UrlFn = () => k;\n      let nodeLoader2:\n        | undefined\n        | ((pkgOptions: PkgOptions) => Thenable<string>) = undefined;\n      if (typeof resourceUrl == 'string') {\n        resourceUrl2 = () => resourceUrl;\n      } else {\n        resourceUrl2 = resourceUrl;\n      }\n      if (typeof resourceName == 'string') {\n        resourceName2 = () => resourceName;\n      } else if (typeof resourceName == 'function') {\n        resourceName2 = resourceName;\n      }\n      if (typeof nodeLoader == 'function') {\n        nodeLoader2 = nodeLoader;\n      } else if (typeof nodeLoader == 'string') {\n        nodeLoader2 = () => nodeLoader;\n      }\n      externalResource2[k] = {\n        resourceName: resourceName2,\n        resourceUrl: resourceUrl2,\n        loader,\n        nodeLoader: nodeLoader2,\n      };\n    }\n  }\n\n  const server = pluginOption.server ?? {};\n\n  const { prefix } = server;\n  let prefix2: (name: string) => string = (s) => 'server:' + s;\n  if (typeof prefix == 'function') {\n    prefix2 = prefix;\n  } else if (typeof prefix == 'string') {\n    prefix2 = () => prefix;\n  } else if (prefix === false) {\n    prefix2 = (name: string) => name;\n  }\n  const externalGlobals2 = build?.externalGlobals ?? {};\n  const externalGlobals: [string, IArray<string | Mod2UrlFn>][] = [];\n  if (externalGlobals2 instanceof Array) {\n    externalGlobals2.forEach((s) => externalGlobals.push(s));\n  } else {\n    Object.entries(externalGlobals2).forEach((s) => externalGlobals.push(s));\n  }\n\n  const projectPkg = await getProjectPkg();\n\n  const { grant = [], $extra = [] } = pluginOption.userscript ?? {};\n  let {\n    name = {},\n    description = {},\n    'exclude-match': excludeMatch = [],\n    match = [],\n    exclude = [],\n    include = [],\n    antifeature = [],\n    require = [],\n    connect = [],\n    webRequest = [],\n  } = pluginOption.userscript ?? {};\n  if (typeof name == 'string') {\n    name = { '': name };\n  } else if (!('' in name)) {\n    name = { ...(projectPkg.name ? { '': projectPkg.name } : {}), ...name };\n  }\n  if (typeof description == 'string') {\n    description = {\n      '': description,\n    };\n  } else if (!('' in description) && projectPkg.description) {\n    description = { '': projectPkg.description, ...description };\n  }\n  if (!(excludeMatch instanceof Array)) {\n    excludeMatch = [excludeMatch];\n  }\n  if (!(match instanceof Array)) {\n    match = [match];\n  }\n  if (!(exclude instanceof Array)) {\n    exclude = [exclude];\n  }\n  if (!(include instanceof Array)) {\n    include = [include];\n  }\n  if (!(antifeature instanceof Array)) {\n    antifeature = [antifeature];\n  }\n  if (!(require instanceof Array)) {\n    require = [require];\n  }\n  if (!(connect instanceof Array)) {\n    connect = [connect];\n  }\n  if (!(webRequest instanceof Array)) {\n    webRequest = [webRequest];\n  }\n\n  const grantSet = new Set<string>();\n  if (typeof grant == 'string') {\n    grantSet.add(grant);\n  } else if (grant instanceof Array) {\n    grant.forEach((s) => grantSet.add(s));\n  }\n\n  const extra: [string, ...string[]][] = [];\n  ($extra instanceof Array ? $extra : Object.entries($extra)).forEach(\n    ([k, v]) => {\n      extra.push([k, ...(v instanceof Array ? v : [v])]);\n    },\n  );\n\n  const {\n    icon64,\n    icon64URL,\n    icon,\n    iconURL,\n    namespace,\n    version = projectPkg.version,\n    author = projectPkg.author,\n    copyright,\n    downloadURL,\n    defaulticon,\n    contributionURL,\n    updateURL,\n    supportURL = projectPkg.bugs,\n    homepageURL = projectPkg.homepage,\n    homepage = projectPkg.homepage,\n    website,\n    license = projectPkg.license,\n    incompatible,\n    source = projectPkg.repository,\n    resource = {},\n    noframes = false,\n    'run-at': runAt,\n    'inject-into': injectInto,\n    contributionAmount,\n    compatible,\n    sandbox,\n    tag,\n    unwrap = false,\n  } = pluginOption.userscript ?? {};\n\n  const { fileName = projectPkg.name + '.user.js' } = build;\n  let { metaFileName } = build;\n  if (typeof metaFileName == 'string') {\n    const t = metaFileName;\n    metaFileName = () => t;\n  } else if (metaFileName === true) {\n    metaFileName = () => fileName.replace(/\\.user\\.js$/, '.meta.js');\n  } else if (metaFileName === false) {\n    metaFileName = undefined;\n  }\n\n  const metaFileFc = metaFileName;\n\n  const config: ResolvedMonkeyOption = {\n    userscript: {\n      name,\n      namespace,\n      version,\n      icon64,\n      icon64URL,\n      icon,\n      iconURL,\n      author,\n      copyright,\n      downloadURL,\n      defaulticon,\n      contributionURL,\n      updateURL,\n      supportURL,\n      homepageURL,\n      homepage,\n      website,\n      license,\n      incompatible,\n      source,\n      resource,\n      noframes,\n      'run-at': runAt,\n      'inject-into': injectInto,\n      contributionAmount,\n      compatible,\n      'exclude-match': excludeMatch.map((s) => String(s)),\n      match: match.map((s) => String(s)),\n      include: include.map((s) => String(s)),\n      exclude: exclude.map((s) => String(s)),\n      antifeature,\n      require,\n      connect,\n      description,\n      $extra: extra,\n      grant: grantSet,\n      sandbox,\n      tag: tag ? (tag instanceof Array ? tag : [tag]) : [],\n      unwrap,\n      webRequest: webRequest.map((w) => JSON.stringify(w)),\n    },\n    clientAlias: pluginOption.clientAlias ?? '$',\n    entry: pluginOption.entry,\n    align: pluginOption.align === false ? 0 : (pluginOption.align ?? 2),\n    generate: pluginOption.generate ?? ((uOptions) => uOptions.userscript),\n    server: {\n      mountGmApi: server.mountGmApi ?? false,\n      open:\n        server.open ??\n        (process.platform == 'win32' || process.platform == 'darwin'),\n      prefix: prefix2,\n    },\n    build: {\n      fileName,\n      metaFileName: metaFileFc ? () => metaFileFc(fileName) : undefined,\n      autoGrant: build.autoGrant ?? true,\n      externalGlobals: externalGlobals,\n      externalResource: externalResource2,\n    },\n    collectRequireUrls: [],\n    collectResource: {},\n    globalsPkg2VarName: {},\n    requirePkgList: [],\n    systemjs: build.systemjs ?? jsdelivr()[1],\n    cssSideEffects: build.cssSideEffects,\n  };\n\n  return config;\n};\n","import type { Plugin } from 'vite';\nimport factorys from './plugins/index.ts';\nimport { resolvedOption } from './utils/option.ts';\nimport type { MonkeyOption, ResolvedMonkeyOption } from './utils/types.ts';\nimport { dataUrl } from './utils/others.ts';\nimport type { InlinePreset } from 'unimport';\nimport { gmIdentifiers } from './utils/gmApi.ts';\n\nexport type * from './types.ts';\nexport * as cdn from './cdn.ts';\n\nexport default (pluginOption: MonkeyOption): Plugin[] => {\n  let option: Promise<ResolvedMonkeyOption>;\n  const getOption = () => {\n    return (option ??= resolvedOption(pluginOption));\n  };\n  return factorys\n    .map((f) => f(getOption, pluginOption))\n    .filter(Boolean) as Plugin[];\n};\n\n/**\n * GM api preset when you use unimport or unplugin-auto-import\n *\n * Note, there is not comment in automatically generated unimport.d.ts/auto-imports.d.ts file\n */\nconst unimportPreset = {\n  from: 'vite-plugin-monkey/dist/client',\n  imports: ['GM', ...gmIdentifiers, 'unsafeWindow', 'monkeyWindow'],\n} satisfies InlinePreset;\n\nexport const util = {\n  dataUrl,\n  unimportPreset,\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,MAAa,gBAAgB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACD;AAOD,MAAa,aAAa;CAAC,GAAG;CAAW,GAAG;CAAe,GAAG;CAAiB;;;ACsG/E,MAAa,6BAA6B,OACxC,QACA,iBACA,SACoB;CACpB,MAAM,EAAE,YAAY,oBAAoB,oBAAoB;CAC5D,IAAI,WAAoC,EAAE;CAC1C,MAAM,EACJ,MACA,WACA,SACA,QACA,aACA,SACA,WAEA,MACA,SACA,QACA,WACA,aAEA,UACA,aACA,SACA,QAEA,YACA,aACA,WAEA,SACA,OACA,SACA,SACA,iBAAiB,cAEjB,eAAe,YACf,UAAU,OAEV,YACA,cAEA,aACA,oBACA,iBAEA,SACA,SACA,KACA,UACA,OACA,UACA,QACA,YACA,WACE;AACJ,QAAO,QAAQ;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,eAAe;EACf,UAAU;EACV;EACA;EACA;EACA;EACA;EACD,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO;AACrB,MAAI,OAAO,KAAK,SACd,UAAS,KAAK,CAAC,GAAG,EAAE,CAAC;GAEvB;AACF,QAAO,QAAQ,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO;AACvC,MAAI,KAAK,GACP,UAAS,KAAK,CAAC,QAAQ,EAAE,CAAC;MAE1B,UAAS,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;GAEjC;AACF,QAAO,QAAQ,YAAY,CAAC,SAAS,CAAC,GAAG,OAAO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"}