@henrikvilhelmberglund/vite-plugin-monkey 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/client.d.ts +1085 -0
- package/dist/client/index.d.ts +802 -0
- package/dist/client/index.mjs +69 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/client/metafile-esm.json +1 -0
- package/dist/native/index.d.ts +29 -0
- package/dist/native/index.mjs +58 -0
- package/dist/native/index.mjs.map +1 -0
- package/dist/native/metafile-esm.json +1 -0
- package/dist/node/index.d.ts +845 -0
- package/dist/node/index.mjs +2487 -0
- package/dist/node/index.mjs.map +1 -0
- package/global.d.ts +1294 -0
- package/package.json +89 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/node/_logger.ts","../../src/node/_util.ts","../../src/node/unimport.ts","../../src/node/cdn.ts","../../src/node/inject_template.ts","../../src/node/option.ts","../../src/node/plugins/server.ts","../../src/node/open_browser.ts","../../src/node/userscript/greasemonkey.ts","../../src/node/userscript/tampermonkey.ts","../../src/node/userscript/violentmonkey.ts","../../src/node/userscript/index.ts","../../src/node/plugins/virtualHtml.ts","../../src/node/plugins/fixViteAsset.ts","../../src/node/plugins/fixViteClient.ts","../../src/node/plugins/externalGlobals.ts","../../src/node/plugins/externalLoader.ts","../../src/node/plugins/externalResource.ts","../../src/node/plugins/finalBundle.ts","../../src/node/_lazy.ts","../../src/node/systemjs.ts","../../src/node/util.ts","../../src/node/topLevelAwait.ts","../../src/node/plugins/perview.ts","../../src/node/plugins/redirectClient.ts","../../src/node/plugins/inlinesAsset.ts","../../src/node/plugins/index.ts","../../src/node/index.ts"],"sourcesContent":["import pc from 'picocolors';\n\nexport type Message = string | number | null | undefined;\ntype OutputOptions = {\n /**\n * @default false\n */\n time?: boolean;\n};\n\nconst log = (tag: string, message: Message, options?: OutputOptions) => {\n console.log(\n [\n (options?.time ?? false) === true\n ? pc.dim(new Date().toLocaleTimeString())\n : '',\n pc.bold(pc.blue(`[${tag}]`)),\n message,\n ]\n .filter((s) => s)\n .join('\\x20'),\n );\n};\nconst info = (tag: string, message: Message, options?: OutputOptions) => {\n log(tag, pc.white(message), options);\n};\nconst warn = (tag: string, message: Message, options?: OutputOptions) => {\n log(tag, pc.yellow(message), options);\n};\nconst error = (tag: string, message: Message, options?: OutputOptions) => {\n log(tag, pc.red(message), options);\n};\nexport const createLogger = (tag: string) => ({\n info: async (message: Message, options?: OutputOptions) => {\n info(tag, message, options);\n },\n warn: async (message: Message, options?: OutputOptions) => {\n warn(tag, message, options);\n },\n error: async (message: Message, options?: OutputOptions) => {\n error(tag, message, options);\n },\n});\n\n/**\n * default logger\n */\nexport const logger = createLogger('plugin-monkey');\n\nexport type Logger = ReturnType<typeof createLogger>;\n","import * as acornWalk from 'acorn-walk';\nimport { readFileSync } from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { OutputBundle, PluginContext } from 'rollup';\nimport { normalizePath, transformWithEsbuild } from 'vite';\nimport { logger } from './_logger';\nimport { FinalMonkeyOption } from './types';\nimport { resolve } from 'import-meta-resolve';\nimport { pathToFileURL } from 'node:url';\nimport { GmApiNames } from './unimport';\n\nexport const delay = async (n = 0) => {\n await new Promise<void>((res) => {\n setTimeout(res, n);\n });\n};\n\nconst get_vite_start_time = () => {\n // @see https://github.com/vitejs/vite/blob/c703a3348adeaad9dc92d805a381866917f2a03b/packages/vite/src/node/server/index.ts#L741\n const n: unknown = Reflect.get(globalThis, '__vite_start_time') ?? 0;\n if (typeof n != 'number') {\n return 0;\n } else {\n return n;\n }\n};\n\nexport const isFirstBoot = (n = 1000) => get_vite_start_time() < n;\n\nexport const GM_keywords = [\n 'GM.addElement',\n 'GM.addStyle',\n 'GM.deleteValue',\n 'GM.getResourceUrl',\n 'GM.getValue',\n 'GM.info',\n 'GM.listValues',\n 'GM.notification',\n 'GM.openInTab',\n 'GM.registerMenuCommand',\n 'GM.setClipboard',\n 'GM.setValue',\n 'GM.xmlHttpRequest',\n 'GM.cookie',\n ...GmApiNames.filter((s) => s.startsWith('GM_')),\n 'unsafeWindow',\n 'window.close',\n 'window.focus',\n 'window.onurlchange',\n];\ntype 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};\ntype 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 projectPkg = (() => {\n let rawTarget: RawPackageJson = {};\n try {\n rawTarget = JSON.parse(\n readFileSync(path.resolve(process.cwd(), 'package.json'), 'utf-8'),\n );\n } catch {\n rawTarget = {};\n }\n\n const target: PackageJson = {\n name: 'monkey',\n version: '1.0.0',\n };\n Object.entries(rawTarget).forEach(([k, v]) => {\n if (typeof v == 'string') {\n Reflect.set(target, k, v);\n }\n });\n if (\n rawTarget.author instanceof Object &&\n typeof rawTarget.author?.name == 'string'\n ) {\n target.author = rawTarget.author?.name;\n }\n if (\n rawTarget.bugs instanceof Object &&\n typeof rawTarget.bugs?.url == 'string'\n ) {\n target.bugs = rawTarget.bugs?.url;\n }\n if (\n rawTarget.repository instanceof Object &&\n typeof rawTarget.repository?.url == 'string'\n ) {\n const { url } = rawTarget.repository;\n if (url.startsWith('http')) {\n target.repository = url;\n } else if (url.startsWith('git+http')) {\n target.repository = url.slice(4);\n }\n }\n return target;\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\n/**\n * unstable\n */\nconst resolvePackageJsonFromPath = async (name: string) => {\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/${name}/package.json`;\n if (await existFile(p2)) {\n return p2;\n }\n }\n};\n\nexport const getModuleRealInfo = async (importName: string) => {\n const importName2 = normalizePath(importName.split('?')[0]);\n const resolveName = normalizePath(compatResolve(importName2)).replace(\n /.*\\/node_modules\\/[^/]+\\//,\n '',\n );\n let version: string | undefined = undefined;\n const nameList = importName2.split('/');\n let pkgName = importName2;\n while (nameList.length > 0) {\n pkgName = nameList.join('/');\n const filePath = await (async () => {\n const p = await resolvePackageJsonFromPath(pkgName);\n if (p) {\n return p;\n }\n try {\n return compatResolve(`${pkgName}/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 logger.warn(\n `not found module ${importName2} version, use ${importName2}@latest`,\n );\n pkgName = importName2;\n version = 'latest';\n }\n return { version, name: pkgName, resolveName };\n};\n\nexport const mergeObj = <T, S>(target: T | undefined, source: S) => {\n if (target === undefined) return { ...source } as T & S;\n const obj = { ...target };\n for (const k in source) {\n // @ts-ignore\n if (obj[k] === undefined) {\n // @ts-ignore\n obj[k] = source[k];\n }\n }\n return obj as T & S;\n};\n\nexport const miniCode = async (code: string, type: 'css' | 'js' = 'js') => {\n return (\n await transformWithEsbuild(code, 'any_name.' + type, {\n minify: true,\n sourcemap: false,\n legalComments: 'none',\n })\n ).code.trimEnd();\n};\n\nexport const toValidURL = (url: unknown) => {\n if (typeof url != 'string') return;\n try {\n return new URL(url);\n } catch {}\n};\n\nexport const isTopLevelAwaitAvailableTarget = async (\n target?: string | string[],\n) => {\n target = getFinalTarget(target);\n return transformWithEsbuild(`await 1`, 'any.js', {\n target,\n logLevel: 'silent',\n })\n .then(() => true)\n .catch(() => false);\n};\n\n// https://github.com/vitejs/vite/blob/b9511f1ed8e36a618214944c69e2de6504ebcb3c/packages/vite/src/node/constants.ts#L20\nexport const ESBUILD_MODULES_TARGET = [\n 'es2020',\n 'edge88',\n 'firefox78',\n 'chrome87',\n 'safari14',\n];\n\nexport const getFinalTarget = (target?: string | string[]) => {\n if (target === 'modules') {\n target = ESBUILD_MODULES_TARGET;\n }\n return target;\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\n// https://stackoverflow.com/questions/7616461\nexport const cyrb53hash = (str = ``, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (4294967296 * (2097151 & h2) + (h1 >>> 0))\n .toString(36)\n .substring(0, 8);\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 collectGrant = (\n context: PluginContext,\n bundleOrCode: OutputBundle | string | string[],\n): Set<string> => {\n const codes: string[] = [];\n if (typeof bundleOrCode == 'string') {\n codes.push(bundleOrCode);\n } else if (Array.isArray(bundleOrCode)) {\n codes.push(...bundleOrCode);\n } else {\n Object.values(bundleOrCode).forEach((chunk) => {\n if (chunk.type == 'chunk') {\n codes.push(chunk.code);\n }\n });\n }\n const unusedMembers = new Set(GM_keywords.filter((s) => s.includes(`.`)));\n const unusedIdentifiers = new Set(\n GM_keywords.filter((s) => !s.includes(`.`)),\n );\n const usedGm = new Set<string>();\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: any) {\n if (unusedMembers.size == 0) return;\n const memberName = node.object?.name + '.' + node.property?.name;\n for (const unusedName of unusedMembers.values()) {\n if (memberName.endsWith(unusedName)) {\n usedGm.add(unusedName);\n unusedMembers.delete(unusedName);\n break;\n }\n }\n },\n Identifier(node: any) {\n if (unusedIdentifiers.size == 0) return;\n const identifier = node.name;\n if (unusedIdentifiers.has(identifier)) {\n usedGm.add(identifier);\n unusedIdentifiers.delete(identifier);\n }\n },\n },\n { ...acornWalk.base },\n );\n if (unusedMembers.size == 0 && unusedIdentifiers.size == 0) {\n break;\n }\n }\n return usedGm;\n};\n\nexport const getInjectCssCode = async (\n finalOption: FinalMonkeyOption,\n rawBundle: OutputBundle,\n) => {\n const cssTexts: string[] = [];\n Object.entries(rawBundle).forEach(([k, v]) => {\n if (v.type == 'asset' && k.endsWith('.css')) {\n cssTexts.push(v.source.toString());\n delete rawBundle[k];\n }\n });\n const css = cssTexts.join('').trim();\n if (css) {\n // use \\x20 to compat unocss, see https://github.com/lisonge/vite-plugin-monkey/issues/45\n return await finalOption.cssSideEffects(`\\x20` + css + `\\x20`);\n }\n};\n","export const GmApiNames = [\n 'GM',\n 'GM_addElement',\n 'GM_addStyle',\n 'GM_addValueChangeListener',\n 'GM_cookie',\n 'GM_deleteValue',\n 'GM_download',\n 'GM_getResourceText',\n 'GM_getResourceURL',\n 'GM_getTab',\n 'GM_getTabs',\n 'GM_getValue',\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_unregisterMenuCommand',\n 'GM_xmlhttpRequest',\n 'GM_webRequest',\n];\n\nexport const preset = {\n from: 'vite-plugin-monkey/dist/client',\n imports: [...GmApiNames, 'unsafeWindow', 'monkeyWindow'],\n};\n","import type { ModuleToUrlFc } from './types';\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://lf9-cdn-tos.bytecdntp.com/cdn/expire-10-y/${name}/${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @see https://cdn.bytedance.com/\n */\nexport const bytecdntp = (\n exportVarName = '',\n pathname = '',\n): [string, ModuleToUrlFc] => {\n return [\n exportVarName,\n (version, name, _importName = '', resolveName = '') => {\n const p = pathname || resolveName;\n return `https://lf9-cdn-tos.bytecdntp.com/cdn/expire-10-y/${name}/${version}/${p}`;\n },\n ];\n};\n\n/**\n * `https://cdn.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 '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://lib.baomitu.com/${name}/${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @see https://cdn.baomitu.com/\n */\nexport const baomitu = (\n exportVarName = '',\n pathname = '',\n): [string, ModuleToUrlFc] => {\n return [\n exportVarName,\n (version, name, _importName = '', resolveName = '') => {\n const p = pathname || resolveName;\n return `https://lib.baomitu.com/${name}/${version}/${p}`;\n },\n ];\n};\n\n/**\n * `https://cdn.staticfile.org/${name}/${version}/${pathname}`\n * @param exportVarName cdn-exportVarName or resourceName\n * @see https://staticfile.org/\n */\nexport const staticfile = (\n exportVarName = '',\n pathname = '',\n): [string, ModuleToUrlFc] => {\n return [\n exportVarName,\n (version, name, _importName = '', resolveName = '') => {\n const p = pathname || resolveName;\n return `https://cdn.staticfile.org/${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","export const fn2string = <T extends (...args: any[]) => any>(\n fn: T,\n ...args: Parameters<T>\n) => {\n return `;(${fn})(...${JSON.stringify(args, undefined, 2)});`;\n};\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://vitejs.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(\n `__CODE__`,\n `;(${fn})(...${JSON.stringify(args, void 0, 2)});`,\n );\n};\n\nexport const serverInjectFn = ({ entrySrc = `` }) => {\n // @ts-ignore\n window.GM; // must exist, see https://github.com/Tampermonkey/tampermonkey/issues/1567\n\n const key = `__monkeyWindow-` + new URL(entrySrc).origin;\n // @ts-ignore\n document[key] = window;\n console.log(`[vite-plugin-monkey] mount monkeyWindow to document`);\n\n const entryScript = document.createElement('script');\n entryScript.type = 'module';\n entryScript.src = entrySrc;\n document.head.insertBefore(entryScript, document.head.firstChild);\n console.log(`[vite-plugin-monkey] mount entry module to document.head`);\n};\n\nexport const cssInjectFn = (css: string) => {\n const style = document.createElement('style');\n style.dataset.source = 'vite-plugin-monkey';\n style.textContent = css;\n document.head.append(style);\n};\n\nexport const mountGmApiFn = (meta: ImportMeta, apiNames: string[] = []) => {\n const key = `__monkeyWindow-` + new URL(meta.url).origin;\n // @ts-ignore\n const monkeyWindow: Window = document[key];\n if (!monkeyWindow) {\n console.log(`[vite-plugin-monkey] not found monkeyWindow`);\n return;\n }\n\n // @ts-ignore\n window.unsafeWindow = window;\n console.log(`[vite-plugin-monkey] mount unsafeWindow to unsafeWindow`);\n\n let mountedApiSize = 0;\n apiNames.forEach((apiName) => {\n // @ts-ignore\n const fn = monkeyWindow[apiName];\n if (fn) {\n // @ts-ignore\n window[apiName] = monkeyWindow[apiName];\n mountedApiSize++;\n }\n });\n console.log(\n `[vite-plugin-monkey] mount ${mountedApiSize}/${apiNames.length} GM_api to unsafeWindow`,\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 { logger } from './_logger';\nimport { miniCode, projectPkg } from './_util';\nimport { jsdelivr } from './cdn';\nimport { fn2string } from './inject_template';\nimport type {\n FinalMonkeyOption,\n IArray,\n IPromise,\n Mod2UrlFn,\n MonkeyOption,\n Pkg2UrlFn,\n PkgOptions,\n} from './types';\n\nexport const resolvedOption = (\n pluginOption: MonkeyOption,\n): FinalMonkeyOption => {\n const build = pluginOption.build ?? {};\n\n if (build.minifyCss !== undefined) {\n logger.warn(\n `monkeyConfig.build.minifyCss is deprecated, use viteConfig.build.cssMinify in vite>=4.2.0`,\n { time: false },\n );\n }\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) => IPromise<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 = () => k;\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) => IPromise<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 let {\n name = {},\n description = {},\n 'exclude-match': excludeMatch = [],\n match = [],\n exclude = [],\n include = [],\n antifeature = [],\n require = [],\n connect = [],\n grant = [],\n webRequest = [],\n $extra = [],\n } = pluginOption.userscript ?? {};\n if (typeof name == 'string') {\n name = { '': name };\n } else if (!('' in name)) {\n 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 = `vite-plugin-monkey`,\n version = projectPkg.version,\n author = projectPkg.author ?? 'monkey',\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 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 cssSideEffects =\n build.cssSideEffects ||\n (() => {\n return (e: string) => {\n // @ts-ignore\n if (typeof GM_addStyle == 'function') {\n // @ts-ignore\n GM_addStyle(e);\n return;\n }\n const o = document.createElement('style');\n o.textContent = e;\n document.head.append(o);\n };\n });\n\n const config: FinalMonkeyOption = {\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 unwrap,\n webRequest: webRequest.map((w) => JSON.stringify(w)),\n },\n clientAlias: pluginOption.clientAlias ?? '$',\n entry: pluginOption.entry,\n format: {\n align: pluginOption.format?.align ?? 2,\n generate: pluginOption.format?.generate ?? ((o) => o.userscript),\n },\n server: {\n mountGmApi: server.mountGmApi ?? false,\n open:\n server.open ??\n (process.platform == 'win32' || process.platform == 'darwin'),\n prefix: prefix2,\n closePreviewAutomatically: server.closePreviewAutomatically ?? false,\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: async (css) => {\n const codeOrFc = await cssSideEffects(css);\n if (typeof codeOrFc == 'string') {\n return codeOrFc;\n }\n return miniCode(fn2string(codeOrFc, css), 'js');\n },\n };\n\n return config;\n};\n","import { DomUtils, ElementType, parseDocument } from 'htmlparser2';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Plugin, ResolvedConfig, normalizePath } from 'vite';\nimport { logger } from '../_logger';\nimport { cyrb53hash, existFile, isFirstBoot, toValidURL } from '../_util';\nimport { fn2string, mountGmApiFn, serverInjectFn } from '../inject_template';\nimport { openBrowser } from '../open_browser';\nimport type { FinalMonkeyOption } from '../types';\nimport { GmApiNames, preset } from '../unimport';\nimport { finalMonkeyOptionToComment } from '../userscript';\n\nexport const installUserPath = '/__vite-plugin-monkey.install.user.js';\nconst gmApiPath = '/__vite-plugin-monkey.gm.api.js';\nconst entryPath = '/__vite-plugin-monkey.entry.js';\nconst pullPath = '/__vite-plugin-monkey.pull.js';\nconst restartStoreKey = '__vite_plugin_monkey_install_url';\n\nexport const serverPlugin = (finalOption: FinalMonkeyOption): Plugin => {\n let viteConfig: ResolvedConfig;\n return {\n name: 'monkey:server',\n apply: 'serve',\n async config(userConfig) {\n return {\n preview: {\n host: userConfig.preview?.host ?? '127.0.0.1',\n cors: true,\n },\n server: {\n host: userConfig.server?.host ?? '127.0.0.1',\n open: userConfig.server?.open ?? finalOption.server.open,\n cors: true,\n },\n };\n },\n async configResolved(resolvedConfig) {\n viteConfig = resolvedConfig;\n },\n async configureServer(server) {\n for (const [k, v] of Object.entries(finalOption.userscript.name)) {\n Reflect.set(\n finalOption.userscript.name,\n k,\n finalOption.server.prefix(v),\n );\n }\n\n // support dev env\n finalOption.userscript.grant.add('*');\n\n server.middlewares.use(async (req, res, next) => {\n const reqUrl = req.url;\n if (\n reqUrl &&\n [installUserPath, entryPath, pullPath, gmApiPath].some((u) =>\n reqUrl.startsWith(u),\n )\n ) {\n Object.entries({\n 'access-control-allow-origin': '*',\n 'content-type': 'application/javascript',\n }).forEach(([k, v]) => {\n res.setHeader(k, v);\n });\n const usp = new URLSearchParams(reqUrl.split('?', 2)[1]);\n\n if (reqUrl.startsWith(installUserPath)) {\n let origin = toValidURL(usp.get(`origin`))?.origin;\n if (!origin) {\n let { https, host, port } = viteConfig.server;\n if (host == '0.0.0.0') {\n host = '127.0.0.1';\n }\n origin = `${https ? 'https' : 'http'}://${host}:${port}`;\n logger.warn(\n `can not get origin from install url query parameter, use ${origin}`,\n {\n time: true,\n },\n );\n }\n Reflect.set(globalThis, restartStoreKey, origin);\n const u = new URL(entryPath, origin);\n res.end(\n [\n await finalMonkeyOptionToComment(\n finalOption,\n new Set(),\n 'serve',\n ),\n fn2string(serverInjectFn, {\n entrySrc: u.href,\n }),\n '',\n ].join('\\n\\n'),\n );\n } else if (reqUrl.startsWith(entryPath)) {\n const htmlText = await server.transformIndexHtml(\n '/',\n `<html><head></head></html>`,\n req.originalUrl,\n );\n\n const doc = parseDocument(htmlText);\n type Element =\n ReturnType<typeof DomUtils.findAll> extends Array<infer T>\n ? T\n : never;\n const scriptList = DomUtils.getElementsByTagType(\n ElementType.Script,\n doc,\n ) as Element[];\n\n const entryList: string[] = finalOption.server.mountGmApi\n ? [gmApiPath]\n : [];\n scriptList.forEach((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 entryList.push(src);\n } else {\n const usp = new URLSearchParams({\n text: Buffer.from(text, 'utf-8').toString('base64url'),\n });\n entryList.push(pullPath + `?` + usp.toString());\n }\n });\n\n let realEntry = finalOption.entry;\n if (path.isAbsolute(realEntry)) {\n realEntry = normalizePath(\n path.relative(viteConfig.root, realEntry),\n );\n }\n const entryUrl = new URL(realEntry, 'http://127.0.0.1');\n entryList.push(entryUrl.pathname + entryUrl.search);\n res.end(\n entryList.map((s) => `import ${JSON.stringify(s)};`).join('\\n'),\n );\n } else if (reqUrl.startsWith(pullPath)) {\n res.end(\n Buffer.from(usp.get('text') ?? '', 'base64url').toString('utf-8'),\n );\n } else if (reqUrl.startsWith(gmApiPath)) {\n if (finalOption.server.mountGmApi) {\n res.end(\n `;(${mountGmApiFn})(import.meta, ${JSON.stringify(GmApiNames)});`,\n );\n } else {\n res.end('');\n }\n }\n return;\n }\n\n next();\n });\n\n if (finalOption.server.open) {\n const cacheUserPath = `node_modules/.vite/__vite-plugin-monkey.cache.${cyrb53hash(\n viteConfig.configFile,\n )}.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 finalOption,\n new Set(),\n 'serve',\n );\n const installUrl = Reflect.get(globalThis, restartStoreKey);\n if (!isFirstBoot() && cacheComment != newComment && installUrl) {\n openBrowser(installUrl, true, logger);\n logger.info('reopen, config comment has changed', { time: true });\n }\n await fs.writeFile(cacheUserPath, newComment).catch(() => {});\n }\n },\n };\n};\n","import spawn from 'cross-spawn';\nimport { execSync } from 'node:child_process';\nimport path from 'node:path';\nimport type { Options } from 'open';\nimport colors from 'picocolors';\nimport type { Logger } from './_logger';\nimport { compatResolve } from './_util';\n\n// https://github.com/sindresorhus/open#app\nconst OSX_CHROME = 'google chrome';\n\n/**\n * Reads the BROWSER environment variable and decides what to do with it.\n * Returns true if it opened a browser or ran a node.js script, otherwise false.\n */\nexport function openBrowser(\n url: string,\n opt: string | true,\n logger: Logger,\n): boolean {\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 return executeNodeScript(browser, url, logger);\n } else if (browser.toLowerCase() !== 'none') {\n return startBrowserProcess(browser, url);\n }\n return false;\n}\n\nfunction executeNodeScript(scriptPath: string, url: string, logger: Logger) {\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: unknown) => {\n if (code !== 0) {\n logger.error(\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 { time: true },\n );\n }\n });\n return true;\n}\n\nfunction startBrowserProcess(browser: string | undefined, url: string) {\n // If we're on OS X, the user hasn't specifically\n // requested a different browser, we can try opening\n // Chrome with AppleScript. This lets us reuse an\n // existing tab when possible instead of creating a new one.\n const shouldTryOpenChromeWithAppleScript =\n process.platform === 'darwin' && (browser === '' || browser === OSX_CHROME);\n\n if (shouldTryOpenChromeWithAppleScript) {\n try {\n // Try our best to reuse existing tab\n // on OS X Google Chrome with AppleScript\n execSync('ps cax | grep \"Google Chrome\"');\n execSync('osascript openChrome.applescript \"' + encodeURI(url) + '\"', {\n cwd: path.dirname(compatResolve('vite/bin/openChrome.applescript')),\n stdio: 'ignore',\n });\n return true;\n } catch (err) {\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 ? { app: { name: browser } } : {};\n // open is esm only, cjs need\n import('open').then(({ default: open }) => {\n open(url, options).catch(() => {}); // Prevent `unhandledRejection` error.\n });\n return true;\n } catch (err) {\n return false;\n }\n}\n","import { IArray, LocaleType } from '../types';\n\nexport type GreaseRunAt = 'document-start' | 'document-end' | 'document-idle';\n\nexport type GreaseGrant =\n | 'GM.info'\n | 'GM.deleteValue'\n | 'GM.getValue'\n | 'GM.listValues'\n | 'GM.setValue'\n | 'GM.getResourceUrl'\n | 'GM.notification'\n | 'GM.openInTab'\n | 'GM.registerMenuCommand'\n | 'GM.setClipboard'\n | 'GM.xmlHttpRequest'\n | 'unsafeWindow';\n\nexport const GreaseGrantValueList: GreaseGrant[] = [\n 'GM.info',\n 'GM.deleteValue',\n 'GM.getValue',\n 'GM.listValues',\n 'GM.setValue',\n 'GM.getResourceUrl',\n 'GM.notification',\n 'GM.openInTab',\n 'GM.registerMenuCommand',\n 'GM.setClipboard',\n 'GM.xmlHttpRequest',\n 'unsafeWindow',\n];\n\n/**\n * @see https://wiki.greasespot.net/Metadata_Block\n */\nexport interface GreasemonkeyUserScript {\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40name\n *\n */\n name?: string | LocaleType<string>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40namespace\n */\n namespace?: string;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40version\n *\n */\n version?: string;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40description\n *\n */\n description?: string | LocaleType<string>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40icon\n */\n icon?: string;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40include\n */\n include?: IArray<string | RegExp>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40match\n */\n match?: IArray<string | RegExp>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40exclude\n */\n exclude?: IArray<string | RegExp>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40require\n */\n require?: IArray<string>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40resource\n */\n resource?: Record<string, string>;\n\n /**\n * @see https://wiki.greasespot.net/Metadata_Block#.40noframes\n */\n noframes?: boolean;\n}\n","import { WebRequestRule } from '../../shared/types';\nimport { IArray, LocaleType } from '../types';\n\nexport type TamperRunAt =\n | 'document-start'\n | 'document-body'\n | 'document-end'\n | 'document-idle'\n | 'context-menu';\n\nexport type TamperGrant =\n | 'unsafeWindow'\n | 'window.close'\n | 'window.focus'\n | 'window.onurlchange'\n | 'GM_addStyle'\n | 'GM_addElement'\n | 'GM_deleteValue'\n | 'GM_listValues'\n | 'GM_addValueChangeListener'\n | 'GM_removeValueChangeListener'\n | 'GM_setValue'\n | 'GM_getValue'\n | 'GM_log'\n | 'GM_getResourceText'\n | 'GM_getResourceURL'\n | 'GM_registerMenuCommand'\n | 'GM_unregisterMenuCommand'\n | 'GM_openInTab'\n | 'GM_xmlhttpRequest'\n | 'GM_download'\n | 'GM_getTab'\n | 'GM_saveTab'\n | 'GM_getTabs'\n | 'GM_notification'\n | 'GM_setClipboard'\n | 'GM_info'\n | 'GM_cookie'\n | 'GM_webRequest';\n\nexport const TamperGrantValueList: TamperGrant[] = [\n 'unsafeWindow',\n 'window.close',\n 'window.focus',\n 'window.onurlchange',\n 'GM_addStyle',\n 'GM_addElement',\n 'GM_deleteValue',\n 'GM_listValues',\n 'GM_addValueChangeListener',\n 'GM_removeValueChangeListener',\n 'GM_setValue',\n 'GM_getValue',\n 'GM_log',\n 'GM_getResourceText',\n 'GM_getResourceURL',\n 'GM_registerMenuCommand',\n 'GM_unregisterMenuCommand',\n 'GM_openInTab',\n 'GM_xmlhttpRequest',\n 'GM_download',\n 'GM_getTab',\n 'GM_saveTab',\n 'GM_getTabs',\n 'GM_notification',\n 'GM_setClipboard',\n 'GM_info',\n 'GM_cookie',\n 'GM_webRequest',\n];\n\nexport type AntifeatureType = {\n tag?: string;\n type: 'ads' | 'tracking' | 'miner';\n description: string;\n};\n\n/**\n * @see https://www.tampermonkey.net/documentation.php\n */\nexport interface TampermonkeyUserScript {\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:name\n *\n */\n name?: string | LocaleType<string>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:namespace\n */\n namespace?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:copyright\n */\n copyright?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:version\n *\n */\n version?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:author\n *\n */\n author?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:description\n *\n */\n description?: string | LocaleType<string>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:homepage\n *\n */\n homepage?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:homepage\n *\n */\n homepageURL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:homepage\n */\n website?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:homepage\n */\n source?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:icon\n */\n icon?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:icon\n */\n iconURL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:icon\n */\n defaulticon?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:icon64\n */\n icon64?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:icon64\n */\n icon64URL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:updateURL\n */\n updateURL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:downloadURL\n */\n downloadURL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:supportURL\n */\n supportURL?: string;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:include\n */\n include?: IArray<string | RegExp>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:match\n */\n match?: IArray<string | RegExp>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:exclude\n */\n exclude?: IArray<string | RegExp>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:require\n */\n require?: IArray<string>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:resource\n */\n resource?: Record<string, string>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:connect\n */\n connect?: IArray<string>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:sandbox\n */\n sandbox?: 'raw' | 'JavaScript' | 'DOM';\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:antifeature\n */\n antifeature?: IArray<AntifeatureType>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:noframes\n */\n noframes?: boolean;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:webRequest\n */\n webRequest?: IArray<WebRequestRule>;\n\n /**\n * @see https://www.tampermonkey.net/documentation.php#meta:unwrap\n */\n unwrap?: boolean;\n}\n","import { IArray, LocaleType } from '../types';\n\nexport type ViolentRunAt = 'document-end' | 'document-start' | 'document-idle';\nexport type ViolentInjectInto = 'page' | 'content' | 'auto';\n\nexport type ViolentGrant =\n | 'window.close'\n | 'window.focus'\n | 'GM_info'\n | 'GM_getValue'\n | 'GM_setValue'\n | 'GM_deleteValue'\n | 'GM_listValues'\n | 'GM_addValueChangeListener'\n | 'GM_removeValueChangeListener'\n | 'GM_getResourceText'\n | 'GM_getResourceURL'\n | 'GM_addElement'\n | 'GM_addStyle'\n | 'GM_openInTab'\n | 'GM_registerMenuCommand'\n | 'GM_unregisterMenuCommand'\n | 'GM_notification'\n | 'GM_setClipboard'\n | 'GM_xmlhttpRequest'\n | 'GM_download'\n | 'GM.addStyle'\n | 'GM.addElement'\n | 'GM.registerMenuCommand'\n | 'GM.deleteValue'\n | 'GM.getResourceUrl'\n | 'GM.getValue'\n | 'GM.info'\n | 'GM.listValues'\n | 'GM.notification'\n | 'GM.openInTab'\n | 'GM.setClipboard'\n | 'GM.setValue'\n | 'GM.xmlHttpRequest';\n\nexport const ViolentGrantValueList: ViolentGrant[] = [\n 'window.close',\n 'window.focus',\n 'GM_info',\n 'GM_getValue',\n 'GM_setValue',\n 'GM_deleteValue',\n 'GM_listValues',\n 'GM_addValueChangeListener',\n 'GM_removeValueChangeListener',\n 'GM_getResourceText',\n 'GM_getResourceURL',\n 'GM_addElement',\n 'GM_addStyle',\n 'GM_openInTab',\n 'GM_registerMenuCommand',\n 'GM_unregisterMenuCommand',\n 'GM_notification',\n 'GM_setClipboard',\n 'GM_xmlhttpRequest',\n 'GM_download',\n 'GM.addStyle',\n 'GM.addElement',\n 'GM.registerMenuCommand',\n 'GM.deleteValue',\n 'GM.getResourceUrl',\n 'GM.getValue',\n 'GM.info',\n 'GM.listValues',\n 'GM.notification',\n 'GM.openInTab',\n 'GM.setClipboard',\n 'GM.setValue',\n 'GM.xmlHttpRequest',\n];\n\n/**\n * @see https://violentmonkey.github.io/api/metadata-block/\n */\nexport interface ViolentmonkeyUserScript {\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#name\n *\n */\n name?: string | LocaleType<string>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#namespace\n */\n namespace?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#version\n *\n */\n version?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#description\n *\n */\n description?: string | LocaleType<string>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#icon\n */\n icon?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#downloadurl\n */\n downloadURL?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#supporturl\n */\n supportURL?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#homepageurl\n *\n */\n homepageURL?: string;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#include--exclude\n * @see https://violentmonkey.github.io/api/matching/#include--exclude\n */\n include?: IArray<string | RegExp>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#match--exclude-match\n * @see https://violentmonkey.github.io/api/matching/#match--exclude-match\n */\n match?: IArray<string | RegExp>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#match--exclude-match\n * @see https://violentmonkey.github.io/api/matching/#match--exclude-match\n */\n 'exclude-match'?: IArray<string | RegExp>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#include--exclude\n * @see https://violentmonkey.github.io/api/matching/#include--exclude\n */\n exclude?: IArray<string | RegExp>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#require\n */\n require?: IArray<string>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#resource\n */\n resource?: Record<string, string>;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#noframes\n */\n noframes?: boolean;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#inject-into\n */\n 'inject-into'?: ViolentInjectInto;\n\n /**\n * @see https://violentmonkey.github.io/api/metadata-block/#unwrap\n */\n unwrap?: boolean;\n}\n","import type { FinalMonkeyOption, IArray, LocaleType } from '../types';\nimport type { Format } from './common';\nimport type {\n GreaseGrant,\n GreasemonkeyUserScript,\n GreaseRunAt,\n} from './greasemonkey';\nimport { GreaseGrantValueList } from './greasemonkey';\nimport type {\n AntifeatureType,\n TamperGrant,\n TampermonkeyUserScript,\n TamperRunAt,\n} from './tampermonkey';\nimport { TamperGrantValueList } from './tampermonkey';\nimport type {\n ViolentGrant,\n ViolentmonkeyUserScript,\n ViolentRunAt,\n} from './violentmonkey';\nimport { ViolentGrantValueList, ViolentInjectInto } from './violentmonkey';\n\nexport type {\n GreasemonkeyUserScript,\n TampermonkeyUserScript,\n ViolentmonkeyUserScript,\n Format,\n};\n\n/**\n * @see https://greasyfork.org/help/meta-keys\n */\ntype 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\ntype 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 /**\n * @default 'vite-plugin-monkey'\n */\n namespace?: string;\n\n /**\n * @default package.json.version??'1.0.0'\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??'monkey'\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<GreaseGrant | TamperGrant | ViolentGrant> | '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 type FinalUserScript = {\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 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} & GreasyforkUserScript;\n\nexport const finalMonkeyOptionToComment = async (\n {\n userscript,\n format,\n collectRequireUrls,\n collectResource,\n }: FinalMonkeyOption,\n collectGrantSet: Set<string>,\n mode: `serve` | `build` | `meta`,\n): Promise<string> => {\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 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\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 new Set([\n ...GreaseGrantValueList,\n ...ViolentGrantValueList,\n ...TamperGrantValueList,\n ]).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 let { align = 2 } = format;\n\n if (align === true) {\n align = 2;\n }\n\n // format\n if (typeof align == 'number' && Number.isInteger(align) && align >= 1) {\n const alignN = align;\n\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(alignN + 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\n // format all\n const maxLen = Math.max(...attrList.map((s) => s[0].length));\n attrList.forEach((s) => {\n s[0] = s[0].padEnd(alignN + maxLen);\n });\n } else if (typeof align == 'function') {\n attrList = await align(attrList);\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 format.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\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 type { Plugin } from 'vite';\nimport { virtualHtmlTemplate, fcToHtml } from '../inject_template';\nimport type { FinalMonkeyOption } from '../types';\nimport { installUserPath } from './server';\n\n// https://github.com/vitejs/vite/blob/2401253b9aa487c50edb5ec571d5ba7adc949e27/packages/vite/src/node/server/middlewares/indexHtml.ts#L275\n\nexport const virtualHtmlPlugin = (finalOption: FinalMonkeyOption): 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 { Plugin, ResolvedConfig } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\n\n// should use import.meta['url'], becase vite will replace import.meta.url to self.location\nconst template = `\nexport default ((()=>{\n try{\n return new URL(__VALUE__, import.meta['url']).href\n }catch(_){\n return __VALUE__\n }\n})())\n`.trimStart();\n// https://github.com/vitejs/vite/blob/9c114c5c72a6af87e3330d5573362554b4511265/packages/vite/src/node/plugins/asset.ts#L172\n\n// TODO the relative path of the *.vue file template does not work\n\nexport const fixViteAssetPlugin = (finalOption: FinalMonkeyOption): Plugin => {\n let viteConfig: ResolvedConfig;\n return {\n name: 'monkey:fixViteAsset',\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: any = this.parse(code);\n if (ast.type == 'Program') {\n const defaultNode = ast.body?.[0];\n if (defaultNode?.type == 'ExportDefaultDeclaration') {\n const declarationNode = defaultNode?.declaration;\n const value = declarationNode?.value;\n if (\n declarationNode?.type == 'Literal' &&\n typeof value == 'string'\n ) {\n return template.replace(/__VALUE__/g, JSON.stringify(value));\n }\n }\n }\n }\n },\n };\n};\n","import type { Plugin } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\n\nexport const fixViteClientPlugin = (finalOption: FinalMonkeyOption): Plugin => {\n return {\n name: 'monkey:fixViteClient',\n apply: 'serve',\n async transform(code, id) {\n if (id.endsWith('node_modules/vite/dist/client/client.mjs')) {\n // use import.meta['url'] instead of import.meta.url, because vite will replace import.meta.url to file system path\n code = code.replace(\n /__HMR_PROTOCOL__/g,\n `(__HMR_PROTOCOL__ || ((()=>{const u = new URL(import.meta['url'], location.origin);return u.protocol === 'https:' ? 'wss' : 'ws'})()))`,\n );\n\n code = code.replace(\n /__BASE__/g,\n `((()=>{const b = __BASE__; const u = new URL(import.meta['url'], location.origin); return b !== '/' ? b : (u.origin+'/');})())`,\n );\n\n // work with vite@3\n // see https://github.com/vitejs/vite/blob/v3.0.0/packages/vite/src/client/client.ts#L302\n // vite@4 not need\n // see https://github.com/vitejs/vite/blob/v4.0.0/packages/vite/src/client/client.ts\n code = code.replace(\n '`${location.protocol}//${hostAndPath}`',\n \"`${new URL(import.meta['url'], location.origin).protocol}//${hostAndPath}`\",\n );\n return code;\n }\n },\n };\n};\n","import { normalizePath, Plugin } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\nimport { getModuleRealInfo } from '../_util';\n\n// const dynamicImportPrefix = '\\0monkey-dynamic-import:';\n\nexport const externalGlobalsPlugin = (\n finalOption: FinalMonkeyOption,\n): Plugin => {\n const { globalsPkg2VarName, requirePkgList } = finalOption;\n return {\n name: 'monkey:externalGlobals',\n enforce: 'pre',\n apply: 'build',\n async config() {\n for (const [moduleName, varName2LibUrl] of finalOption.build\n .externalGlobals) {\n const { name, version } = await getModuleRealInfo(moduleName);\n\n if (typeof varName2LibUrl == 'string') {\n globalsPkg2VarName[moduleName] = varName2LibUrl;\n } else if (typeof varName2LibUrl == 'function') {\n 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 globalsPkg2VarName[moduleName] = varName;\n } else if (typeof varName == 'function') {\n 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 requirePkgList.push({ url: libUrl, moduleName });\n } else if (typeof libUrl == 'function') {\n requirePkgList.push({\n url: await libUrl(version, name, moduleName),\n moduleName,\n });\n }\n }\n }\n }\n return {\n build: {\n rollupOptions: {\n external(source, _importer, _isResolved) {\n return source in globalsPkg2VarName;\n },\n // output: {\n // globals: globalsPkg2VarName,\n // inlineDynamicImports: true, // see https://rollupjs.org/guide/en/#outputinlinedynamicimports\n // },\n },\n },\n };\n },\n\n // async resolveDynamicImport(specifier, _importer) {\n // if (typeof specifier == 'string' && specifier in globalsPkg2VarName) {\n // return dynamicImportPrefix + specifier + '\\0';\n // }\n // },\n\n // async load(id) {\n // if (id.startsWith(dynamicImportPrefix) && id.endsWith('\\0')) {\n // const rawId = id.slice(dynamicImportPrefix.length, id.length - 1);\n // if (rawId in globalsPkg2VarName) {\n // return `export {default} from '${rawId}';export * from '${rawId}';`;\n // }\n // }\n // },\n\n async generateBundle() {\n const usedModIdSet = new Set(\n Array.from(this.getModuleIds()).map((s) => normalizePath(s)),\n );\n // Array.from(usedModIdSet).forEach((id) => {\n // if (id.startsWith(dynamicImportPrefix) && id.endsWith('\\0')) {\n // usedModIdSet.add(id.slice(dynamicImportPrefix.length, id.length - 1));\n // }\n // });\n finalOption.collectRequireUrls = requirePkgList\n .filter((p) => usedModIdSet.has(p.moduleName))\n .map((p) => p.url);\n },\n };\n};\n","import { Plugin, transformWithEsbuild } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\n\nconst cssLoader = (resourceName: string) => {\n // @ts-ignore\n const css = GM_getResourceText(resourceName);\n // @ts-ignore\n GM_addStyle(css);\n return css;\n};\n\nconst jsonLoader = (resourceName: string): unknown =>\n // @ts-ignore\n JSON.parse(GM_getResourceText(resourceName));\n\nconst urlLoader = (resourceName: string, mediaType: string) =>\n // @ts-ignore\n GM_getResourceURL(resourceName, false).replace(\n /^data:application;base64,/,\n `data:${mediaType};base64,`,\n );\n\nconst rawLoader = (resourceName: string) =>\n // @ts-ignore\n GM_getResourceText(resourceName);\n\nconst moduleSourceCode = [\n `export const cssLoader = ${cssLoader}`,\n `export const jsonLoader = ${jsonLoader}`,\n `export const urlLoader = ${urlLoader}`,\n `export const rawLoader = ${rawLoader}`,\n].join(';');\n\nexport const externalLoaderPlugin = (\n finalOption: FinalMonkeyOption,\n): Plugin => {\n return {\n name: 'monkey:externalLoader',\n enforce: 'pre',\n apply: 'build',\n async resolveId(id) {\n if (id == 'virtual:plugin-monkey-loader') {\n return '\\0' + id;\n }\n },\n async load(id) {\n if (id == '\\0virtual:plugin-monkey-loader') {\n return transformWithEsbuild(\n moduleSourceCode,\n '/virtual/plugin-monkey-loader/index.js',\n {\n minify: true,\n sourcemap: true,\n legalComments: 'none',\n },\n );\n }\n },\n };\n};\n","import { normalizePath, Plugin, ResolvedConfig } from 'vite';\nimport type { FinalMonkeyOption, PkgOptions } from '../types';\nimport { getModuleRealInfo, miniCode } from '../_util';\nimport { lookup, mimes } from 'mrmime';\nimport { URLSearchParams } from 'node:url';\n\nconst resourceImportPrefix = '\\0monkey-resource-import:';\n\nexport const externalResourcePlugin = (\n finalOption: FinalMonkeyOption,\n): Plugin => {\n const resourceRecord: Record<\n string,\n { resourceName: string; resourceUrl: string }\n > = {};\n let viteConfig: ResolvedConfig;\n return {\n name: 'monkey:externalResource',\n enforce: 'pre',\n apply: 'build',\n configResolved(config) {\n viteConfig = config;\n },\n async resolveId(id) {\n const { externalResource } = finalOption.build;\n if (id in externalResource) {\n return resourceImportPrefix + id + '\\0';\n }\n // see https://github.com/vitejs/vite/blob/5d56e421625b408879672a1dd4e774bae3df674f/packages/vite/src/node/plugins/css.ts#L431-L434\n const [resource, query] = id.split('?', 2);\n if (resource.endsWith('.css') && query) {\n const id2 = [\n resource,\n '?',\n query\n .split('&')\n .filter((e) => e != 'used')\n .join(`&`),\n ].join('');\n if (id2 in externalResource) {\n return resourceImportPrefix + id2 + '\\0';\n }\n }\n },\n async load(id) {\n if (id.startsWith(resourceImportPrefix) && id.endsWith('\\0')) {\n const { externalResource } = finalOption.build;\n const importName = id.substring(\n resourceImportPrefix.length,\n id.length - 1,\n );\n if (!(importName in externalResource)) {\n return;\n }\n const pkg = await getModuleRealInfo(importName);\n const {\n resourceName: resourceNameFn,\n resourceUrl: resourceUrlFn,\n loader,\n nodeLoader,\n } = externalResource[importName];\n const resourceName = await resourceNameFn({ ...pkg, importName });\n const resourceUrl = await resourceUrlFn({ ...pkg, importName });\n resourceRecord[importName] = {\n resourceName,\n resourceUrl,\n };\n\n if (nodeLoader) {\n return miniCode(\n await nodeLoader({\n ...pkg,\n resourceName,\n resourceUrl,\n importName,\n }),\n );\n } else if (loader) {\n let fnText: string;\n if (\n loader.prototype && // not arrow function\n loader.name.length > 0 &&\n loader.name != 'function' // not anonymous function\n ) {\n if (Reflect.get(loader, Symbol.toStringTag) == 'AsyncFunction') {\n fnText = loader\n .toString()\n .replace(/^[\\s\\S]+?\\(/, 'async function(');\n } else {\n fnText = loader.toString().replace(/^[\\s\\S]+?\\(/, 'function(');\n }\n } else {\n fnText = loader.toString();\n }\n return miniCode(\n `export default (${fnText})(${JSON.stringify({\n resourceUrl,\n importName,\n ...pkg,\n } as PkgOptions)})`,\n );\n }\n\n let moduleCode: string | undefined = undefined;\n const [resource, query] = importName.split('?', 2);\n const ext = resource.split('.').pop()!;\n const mimeType = lookup(ext) ?? 'application/octet-stream';\n const suffixSet = new URLSearchParams(query);\n if (suffixSet.has('url') || suffixSet.has('inline')) {\n moduleCode = [\n `import {urlLoader as loader} from 'virtual:plugin-monkey-loader'`,\n `export default loader(...${JSON.stringify([\n resourceName,\n mimeType,\n ])})`,\n ].join(';');\n } else if (suffixSet.has('raw')) {\n moduleCode = [\n `import {rawLoader as loader} from 'virtual:plugin-monkey-loader'`,\n `export default loader(...${JSON.stringify([resourceName])})`,\n ].join(';');\n } else if (ext == 'json') {\n // export name will bring side effect\n moduleCode = [\n `import {jsonLoader as loader} from 'virtual:plugin-monkey-loader'`,\n `export default loader(...${JSON.stringify([resourceName])})`,\n ].join(';');\n } else if (ext == 'css') {\n moduleCode = [\n `import {cssLoader as loader} from 'virtual:plugin-monkey-loader'`,\n `export default loader(...${JSON.stringify([resourceName])})`,\n ].join(';');\n } else if (viteConfig.assetsInclude(importName.split('?', 1)[0])) {\n const mediaType = mimes[ext];\n moduleCode = [\n `import {urlLoader as loader} from 'virtual:plugin-monkey-loader'`,\n `export default loader(...${JSON.stringify([\n resourceName,\n mediaType,\n ])})`,\n ].join(';');\n }\n if (moduleCode) {\n if (\n moduleCode.includes('rawLoader') ||\n moduleCode.includes('jsonLoader') ||\n moduleCode.includes('cssLoader')\n ) {\n finalOption.userscript.grant.add('GM_getResourceText');\n } else if (moduleCode.includes('urlLoader')) {\n finalOption.userscript.grant.add('GM_getResourceURL');\n }\n return miniCode(moduleCode);\n }\n\n throw new Error(`module: ${importName} not found loader`);\n }\n },\n generateBundle() {\n const usedModIdSet = new Set(\n Array.from(this.getModuleIds()).map((s) => normalizePath(s)),\n );\n Array.from(usedModIdSet).forEach((id) => {\n if (id.startsWith(resourceImportPrefix) && id.endsWith('\\0')) {\n usedModIdSet.add(\n id.substring(resourceImportPrefix.length, id.length - 1),\n );\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 finalOption.collectResource = collectResource;\n },\n };\n};\n","import type { OutputChunk, RollupOutput } from 'rollup';\nimport { Plugin, build } from 'vite';\nimport { lazyValue } from '../_lazy';\nimport {\n collectGrant,\n getInjectCssCode,\n moduleExportExpressionWrapper,\n} from '../_util';\nimport { getSystemjsRequireUrls, systemjsTexts } from '../systemjs';\nimport {\n findSafeTlaIdentifier,\n transformIdentifierToTla,\n transformTlaToIdentifier,\n} from '../topLevelAwait';\nimport type { FinalMonkeyOption } from '../types';\nimport { finalMonkeyOptionToComment } from '../userscript';\n\nconst __entry_name = `__monkey.entry.js`;\n\n// https://github.com/vitejs/vite/blob/1df2cfcbebd95a139da7dc30aad487c81b153b45/packages/plugin-legacy/src/index.ts#L718\nconst polyfillId = '\\0vite/legacy-polyfills';\n\nconst systemJsImportMapPrefix = `user`;\n\nexport const finalBundlePlugin = (finalOption: FinalMonkeyOption): Plugin => {\n return {\n name: 'monkey:finalBundle',\n apply: 'build',\n enforce: 'post',\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 hasDynamicImport = entryChunks.some(\n (e) => e.dynamicImports.length > 0,\n );\n\n const usedModules = new Set<string>();\n\n const tlaIdentifier = lazyValue(() => findSafeTlaIdentifier(rawBundle));\n\n const buildResult = (await build({\n logLevel: 'error',\n configFile: false,\n esbuild: false,\n plugins: [\n {\n name: 'mokey:mock',\n enforce: 'pre',\n resolveId(source, importer, options) {\n if (!importer && options.isEntry) {\n return '\\0' + source;\n }\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 async load(id) {\n if (!id.startsWith('\\0')) return;\n\n if (id.endsWith(__entry_name)) {\n return entryChunks\n .map((a) => `import ${JSON.stringify(`./${a.fileName}`)};`)\n .join('\\n');\n }\n const [k, chunk] =\n Object.entries(rawBundle).find(([k, 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(\n this,\n chunk,\n tlaIdentifier.value,\n );\n if (ch) return ch;\n }\n return {\n code: chunk.code,\n map: chunk.map,\n };\n }\n },\n generateBundle(_, iifeBundle) {\n if (hasDynamicImport) {\n return;\n }\n Object.entries(iifeBundle).forEach(([k, chunk]) => {\n transformIdentifierToTla(this, chunk, tlaIdentifier.value);\n });\n },\n },\n ],\n build: {\n write: false,\n minify: false,\n target: 'esnext',\n rollupOptions: {\n external(source) {\n return source in finalOption.globalsPkg2VarName;\n },\n output: {\n globals: finalOption.globalsPkg2VarName,\n },\n },\n lib: {\n entry: __entry_name,\n formats: [hasDynamicImport ? 'system' : 'iife'] as any,\n name: hasDynamicImport ? undefined : '__expose__',\n fileName: () => `__entry.js`,\n },\n },\n })) as RollupOutput[];\n usedModules.forEach((k) => {\n if (fristEntryChunk != rawBundle[k]) {\n delete rawBundle[k];\n }\n });\n\n const buildBundle = buildResult[0].output.flat();\n let finalJsCode = ``;\n if (hasDynamicImport) {\n const systemJsModules: string[] = [];\n let entryName = '';\n Object.entries(buildBundle).forEach(([k, 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.join('\\n');\n const usedModuleIds = Array.from(this.getModuleIds()).filter(\n (d) => d in finalOption.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 finalOption.globalsPkg2VarName[id],\n )});`,\n ),\n '\\n' + finalJsCode,\n ]\n .filter((s) => s)\n .join('\\n');\n\n if (typeof finalOption.systemjs == 'function') {\n finalOption.collectRequireUrls.push(\n ...getSystemjsRequireUrls(finalOption.systemjs),\n );\n } else {\n finalJsCode =\n (await systemjsTexts.value).join('\\n') + '\\n' + finalJsCode;\n }\n } else {\n // use iife\n Object.entries(buildBundle).forEach(([k, chunk]) => {\n if (chunk.type == 'chunk' && chunk.isEntry) {\n finalJsCode = chunk.code;\n }\n });\n }\n\n const injectCssCode = await getInjectCssCode(finalOption, rawBundle);\n\n let collectGrantSet: Set<string>;\n if (finalOption.build.autoGrant) {\n collectGrantSet = collectGrant(\n this,\n chunks.map((s) => s.code).concat(injectCssCode || ``),\n );\n } else {\n collectGrantSet = new Set<string>();\n }\n\n const comment = await finalMonkeyOptionToComment(\n finalOption,\n collectGrantSet,\n 'build',\n );\n\n const mergedCode = [comment, injectCssCode, finalJsCode]\n .filter((s) => s)\n .join(`\\n\\n`)\n .trimEnd();\n if (fristEntryChunk) {\n fristEntryChunk.fileName = finalOption.build.fileName;\n fristEntryChunk.code = mergedCode;\n } else {\n this.emitFile({\n type: 'asset',\n fileName: finalOption.build.fileName,\n source: mergedCode,\n });\n }\n\n if (finalOption.build.metaFileName) {\n this.emitFile({\n type: 'asset',\n fileName: finalOption.build.metaFileName(),\n source: await finalMonkeyOptionToComment(\n finalOption,\n collectGrantSet,\n 'meta',\n ),\n });\n }\n },\n };\n};\n","type AnyFunction = (...args: any[]) => any;\n\nconst lazyValuePlaceholder = {};\n\n/**\n * lazy side effect by `__PURE__` comment\n */\nexport const lazy = <T extends object>(fn: () => T) => {\n let temp: T | undefined = undefined;\n let o = {\n get k() {\n if (temp === undefined) {\n temp = fn();\n }\n return temp;\n },\n };\n const wm = lazyValue(() => new WeakMap<AnyFunction, AnyFunction>());\n return new Proxy(lazyValuePlaceholder as T, {\n get(_, p, receiver) {\n const v: unknown = Reflect.get(o.k, p, receiver);\n if (typeof v == 'function') {\n const f = v as AnyFunction;\n let fBind = wm.value.get(f);\n if (fBind === undefined) {\n fBind = f.bind(o.k);\n wm.value.set(f, fBind);\n }\n return fBind;\n }\n return v;\n },\n set(_, p, newValue, receiver) {\n return Reflect.set(o.k, p, newValue, receiver);\n },\n has(_, p) {\n return Reflect.has(o.k, p);\n },\n ownKeys() {\n return Reflect.ownKeys(o.k);\n },\n isExtensible() {\n return Reflect.isExtensible(o.k);\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(o.k, p);\n },\n setPrototypeOf(_, v) {\n return Reflect.setPrototypeOf(o.k, v);\n },\n getOwnPropertyDescriptor(_, p) {\n return Reflect.getOwnPropertyDescriptor(o.k, p);\n },\n defineProperty(_, property, attributes) {\n return Reflect.defineProperty(o.k, property, attributes);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(o.k);\n },\n preventExtensions() {\n return Reflect.preventExtensions(o.k);\n },\n apply(_, thisArg, argArray) {\n // @ts-ignore\n return Reflect.apply(o.k, thisArg, argArray);\n },\n construct(_, argArray, newTarget) {\n // @ts-ignore\n return Reflect.construct(o.k, argArray, newTarget);\n },\n });\n};\n\nexport const lazyValue = <T>(fn: () => T) => {\n let temp: T | typeof lazyValuePlaceholder = lazyValuePlaceholder;\n return {\n get value() {\n if (temp === lazyValuePlaceholder) {\n temp = fn();\n }\n return temp as T;\n },\n };\n};\n","import module from 'node:module';\nimport type systemjsPkgT from 'systemjs/package.json';\nimport { ModuleToUrlFc } from './types';\nimport fs from 'node:fs/promises';\nimport { lazyValue } from './_lazy';\nimport { dataUrl } from './util';\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 systemjsTexts = lazyValue(() => {\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 { InlinePreset } from 'unimport';\nimport { transformWithEsbuild } from 'vite';\nimport { preset } from './unimport';\n\n/**\n * transform function and parameter to iife code then mini code then transform code to data url string\n *\n * this tool function is used to make umd-cdn and iife-cdn work normally, such as element-plus and vue\n *\n * @example\n * // this example comes form https://github.com/lisonge/vite-plugin-monkey/blob/main/playground/ex-vue-demi/vite.config.ts\n * const externalGlobals = [\n * [\n * 'vue',\n * cdn\n * .jsdelivr('Vue', 'dist/vue.global.prod.js')\n * .concat('https://unpkg.com/vue-demi@latest/lib/index.iife.js')\n * .concat(\n * await util.fn2dataUrl(() => {\n * // \\@ts-ignore\n * window.Vue = Vue; // work with element-plus\n * }),\n * ),\n * ],\n * ['pinia', cdn.jsdelivr('Pinia', 'dist/pinia.iife.prod.js')],\n * ['element-plus', cdn.jsdelivr('ElementPlus', 'dist/index.full.min.js')],\n * ];\n */\nexport const fn2dataUrl = async <T extends (...args: any[]) => any>(\n fn: T,\n ...args: Parameters<T>\n) => {\n return (\n 'data:application/javascript,' +\n encodeURIComponent(\n (\n await transformWithEsbuild(\n `;(${fn})(...${JSON.stringify(args)})`,\n 'any_name.js',\n {\n minify: true,\n sourcemap: false,\n legalComments: 'none',\n },\n )\n ).code.trimEnd(),\n )\n );\n};\n\n/**\n * string -> javascript data url\n */\nexport function dataUrl(code: string): string;\n/**\n * function and it parameters -> iife -> mini_iife -> javascript data url\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 `data:application/javascript,` + encodeURIComponent(p0);\n }\n return fn2dataUrl(p0, ...args);\n}\n\n/**\n * GM api preset when you use unimport/unplugin-auto-import\n *\n * Note, there is not comment in unimport.d.ts/auto-imports.d.ts file\n */\nexport const unimportPreset: InlinePreset = preset;\n","import type { Node as AcornNode } 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 'rollup';\n\ntype CallAcornNode = AcornNode & {\n callee: AcornNode & { name: string };\n arguments: AcornNode[];\n};\n\nconst awaitOffset = `await`.length;\nconst initTlaIdentifier = `_TLA_`;\n\nexport const findSafeTlaIdentifier = (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\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: AcornNode[] = [];\n const tlaForOfNodes: AcornNode[] = [];\n acornWalk.simple(\n ast,\n {\n AwaitExpression(node) {\n // top level await\n tlaNodes.push(node);\n },\n // @ts-ignore\n ForOfStatement(node: AcornNode & { await: boolean }) {\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 base = Object.keys(acornWalk.base).reduce<\n Record<string, acornWalk.RecursiveWalkerFn<any>>\n >((p, key) => {\n if (key in p) return p;\n p[key] = (node, state, callback) => {\n if (chunk.code.substring(node.start, node.end).includes(identifier)) {\n return acornWalk.base[key](node, state, callback);\n }\n };\n return p;\n }, {});\n const ast = context.parse(chunk.code);\n const tlaCallNodes: CallAcornNode[] = [];\n const forTlaCallNodes: CallAcornNode[] = [];\n const topFnNodes: AcornNode[] = [];\n acornWalk.simple(\n ast,\n {\n // @ts-ignore\n CallExpression(node: CallAcornNode) {\n const { name, type } = node.callee ?? {};\n if (type === `Identifier`) {\n if (name === identifier) {\n // top level await\n tlaCallNodes.push(node);\n } else if (name === identifier + `FOR`) {\n // top level for await\n forTlaCallNodes.push(node);\n }\n }\n },\n },\n {\n ...base,\n Function: (node, state, callback) => {\n if (topFnNodes.length == 0) {\n topFnNodes.push(node);\n }\n if (chunk.code.substring(node.start, node.end).includes(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) => {\n const callee = node.callee;\n // __topLevelAwait__ (xxx) -> await (xxx)\n ms.update(callee.start, callee.end, 'await');\n });\n forTlaCallNodes.forEach((node) => {\n // __topLevelAwait_FOR ((async()=>{ /*start*/for await(const x of xxx){}/*end*/ })()); -> for await(const x of xxx){}\n // @ts-ignore\n const forOfNode = node.arguments?.[0]?.callee?.body\n ?.body?.[0] as AcornNode;\n ms.update(node.start, forOfNode.start, '');\n ms.update(forOfNode.end, node.end, '');\n });\n topFnNodes.forEach((node) => {\n ms.appendLeft(node.start, `async\\x20`);\n });\n chunk.code = ms.toString();\n // TODO sourcemap\n // https://github.com/keik/merge-source-map\n if (chunk.map) {\n chunk.map;\n }\n }\n }\n};\n","import path from 'node:path';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport { normalizePath } from 'vite';\nimport { walk } from '../_util';\nimport { fcToHtml, previewTemplate } from '../inject_template';\nimport type { FinalMonkeyOption } from '../types';\n\nexport const perviewPlugin = (finalOption: FinalMonkeyOption): 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 if (finalOption.server.closePreviewAutomatically) {\n setTimeout(() => {\n server.close();\n }, 3000);\n }\n });\n },\n };\n};\n","import type { Plugin } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\n\nexport const redirectClientPlugin = (\n finalOption: FinalMonkeyOption,\n): Plugin => {\n return {\n name: 'monkey:redirectClient',\n enforce: 'pre',\n apply: 'build',\n resolveId(source, importer, options) {\n if (source == 'vite-plugin-monkey/dist/client') {\n return this.resolve(\n 'vite-plugin-monkey/dist/native',\n importer,\n options,\n );\n }\n },\n };\n};\n","import fs from 'node:fs/promises';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport type { FinalMonkeyOption } from '../types';\n\n// https://github.com/vitejs/vite/blob/42e0d6af67743841bd38ed504cb8cbaaafb6313f/packages/vite/src/node/plugins/asset.ts#L327\n\nexport const inlinesAssetPlugin = (finalOption: FinalMonkeyOption): Plugin => {\n let viteConfig: ResolvedConfig;\n return {\n name: 'monkey:inlinesAsset',\n enforce: 'post',\n apply: 'build',\n async configResolved(resolvedConfig) {\n viteConfig = resolvedConfig;\n },\n async transform(code, id) {\n if (\n viteConfig.assetsInclude(id) &&\n [`.svg`, `.svg?inline`, `.svg?url`].some((s) => id.endsWith(s)) &&\n code.includes(`__VITE_ASSET__`)\n ) {\n const base64Text = (await fs.readFile(id.split('?')[0])).toString(\n 'base64',\n );\n return `export default ${JSON.stringify(\n `data:image/svg+xml;base64,` + base64Text,\n )}`;\n }\n },\n generateBundle(opts, bundle) {\n for (const key in bundle) {\n if ([`.svg`].some((s) => key.endsWith(s))) {\n delete bundle[key];\n }\n }\n },\n };\n};\n","import { virtualHtmlPlugin } from './virtualHtml';\nimport { fixViteAssetPlugin } from './fixViteAsset';\nimport { fixViteClientPlugin } from './fixViteClient';\nimport { serverPlugin } from './server';\nimport { externalGlobalsPlugin } from './externalGlobals';\nimport { externalLoaderPlugin } from './externalLoader';\nimport { externalResourcePlugin } from './externalResource';\nimport { finalBundlePlugin } from './finalBundle';\nimport { perviewPlugin } from './perview';\nimport { redirectClientPlugin } from './redirectClient';\nimport { inlinesAssetPlugin } from './inlinesAsset';\n\nconst monkeyPluginList = [\n // only serve\n virtualHtmlPlugin,\n fixViteAssetPlugin,\n fixViteClientPlugin,\n serverPlugin,\n\n // only build pre\n redirectClientPlugin,\n externalLoaderPlugin,\n externalResourcePlugin,\n externalGlobalsPlugin,\n\n // only build post\n inlinesAssetPlugin,\n\n // only build, final build\n finalBundlePlugin,\n\n // only preview\n perviewPlugin,\n];\nexport default monkeyPluginList;\n","import type { Plugin } from 'vite';\nimport { resolvedOption } from './option';\nimport monkeyPluginList from './plugins';\nimport type { MonkeyOption } from './types';\nimport type {\n Format,\n GreasemonkeyUserScript,\n MonkeyUserScript,\n TampermonkeyUserScript,\n ViolentmonkeyUserScript,\n} from './userscript';\n\nexport * as cdn from './cdn';\nexport * as util from './util';\nexport type {\n MonkeyUserScript,\n TampermonkeyUserScript,\n ViolentmonkeyUserScript,\n GreasemonkeyUserScript,\n Format,\n MonkeyOption,\n};\n\nexport default (pluginOption: MonkeyOption): Plugin[] => {\n const finalPluginOption = resolvedOption(pluginOption);\n\n const monkeyPlugin: Plugin = {\n name: 'monkey:entry',\n enforce: 'post',\n async config(userConfig, { command }) {\n const isServe = command == 'serve';\n\n return {\n resolve: {\n alias: {\n [finalPluginOption.clientAlias]: 'vite-plugin-monkey/dist/client',\n },\n },\n define: {\n 'process.env.NODE_ENV':\n userConfig.define?.['process.env.NODE_ENV'] ??\n JSON.stringify(\n userConfig.mode ?? (isServe ? 'development' : 'production'),\n ),\n },\n esbuild: {\n supported: {\n 'top-level-await': true,\n },\n },\n build: {\n assetsInlineLimit: Number.MAX_SAFE_INTEGER,\n chunkSizeWarningLimit: Number.MAX_SAFE_INTEGER,\n modulePreload: false,\n assetsDir: './',\n cssCodeSplit: false,\n minify: userConfig.build?.minify ?? false,\n cssMinify: userConfig.build?.cssMinify ?? true,\n rollupOptions: {\n // serve pre-bundling need\n input: finalPluginOption.entry,\n },\n sourcemap: false,\n\n // TODO\n // sourcemap: sourcemap,\n },\n };\n },\n };\n\n return [monkeyPlugin, ...monkeyPluginList.map((m) => m(finalPluginOption))];\n};\n"],"mappings":"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","names":["path","build","name","require","fs","path","normalizePath","path","logger","path","require","description","maxLen","htmlText","usp","path","normalizePath","fs","normalizePath","normalizePath","transformWithEsbuild","normalizePath","URLSearchParams","normalizePath","fs","transformWithEsbuild","transformWithEsbuild","fs","s","acornWalk","base","chunk","k","_","path","normalizePath","path","normalizePath","fs"]}
|