pake-cli 3.2.0-beta15 → 3.2.12

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/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sources":["../bin/defaults.ts","../bin/options/logger.ts","../bin/utils/dir.ts","../bin/utils/platform.ts","../bin/utils/info.ts","../bin/utils/url.ts","../bin/options/icon.ts","../bin/options/index.ts","../bin/helpers/tauriConfig.ts","../bin/utils/shell.ts","../bin/utils/ip.ts","../bin/helpers/rust.ts","../bin/utils/combine.ts","../bin/helpers/merge.ts","../bin/builders/BaseBuilder.ts","../bin/builders/MacBuilder.ts","../bin/builders/WinBuilder.ts","../bin/builders/LinuxBuilder.ts","../bin/builders/BuilderProvider.ts","../bin/dev.ts"],"sourcesContent":["import { PakeCliOptions } from './types.js';\n\nexport const DEFAULT_PAKE_OPTIONS: PakeCliOptions = {\n icon: '',\n height: 780,\n width: 1200,\n fullscreen: false,\n resizable: true,\n hideTitleBar: false,\n alwaysOnTop: false,\n appVersion: '1.0.0',\n darkMode: false,\n disabledWebShortcuts: false,\n activationShortcut: '',\n userAgent: '',\n showSystemTray: false,\n multiArch: false,\n targets: 'deb',\n useLocalFile: false,\n systemTrayIcon: '',\n proxyUrl: '',\n debug: false,\n inject: [],\n installerLanguage: 'en-US',\n hideOnClose: true,\n incognito: false,\n};\n\n// Just for cli development\nexport const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & { url: string } = {\n ...DEFAULT_PAKE_OPTIONS,\n url: 'https://weekly.tw93.fun/',\n name: 'Weekly',\n hideTitleBar: true,\n};\n","import chalk from 'chalk';\nimport log from 'loglevel';\n\nconst logger = {\n info(...msg: any[]) {\n log.info(...msg.map((m) => chalk.white(m)));\n },\n debug(...msg: any[]) {\n log.debug(...msg);\n },\n error(...msg: any[]) {\n log.error(...msg.map((m) => chalk.red(m)));\n },\n warn(...msg: any[]) {\n log.info(...msg.map((m) => chalk.yellow(m)));\n },\n success(...msg: any[]) {\n log.info(...msg.map((m) => chalk.green(m)));\n },\n};\n\nexport default logger;\n","import path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Convert the current module URL to a file path\nconst currentModulePath = fileURLToPath(import.meta.url);\n\n// Resolve the parent directory of the current module\nexport const npmDirectory = path.join(path.dirname(currentModulePath), '..');\n\nexport const tauriConfigDirectory = path.join(\n npmDirectory,\n 'src-tauri',\n '.pake',\n);\n","const { platform } = process;\n\nexport const IS_MAC = platform === 'darwin';\nexport const IS_WIN = platform === 'win32';\nexport const IS_LINUX = platform === 'linux';\n","import crypto from 'crypto';\nimport prompts from 'prompts';\nimport ora from 'ora';\nimport chalk from 'chalk';\n\n// Generates an identifier based on the given URL.\nexport function getIdentifier(url: string) {\n const postFixHash = crypto\n .createHash('md5')\n .update(url)\n .digest('hex')\n .substring(0, 6);\n return `com.pake.${postFixHash}`;\n}\n\nexport async function promptText(\n message: string,\n initial?: string,\n): Promise<string> {\n const response = await prompts({\n type: 'text',\n name: 'content',\n message,\n initial,\n });\n return response.content;\n}\n\nexport function capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getSpinner(text: string) {\n const loadingType = {\n interval: 80,\n frames: ['✦', '✶', '✺', '✵', '✸', '✹', '✺'],\n };\n return ora({\n text: `${chalk.cyan(text)}\\n`,\n spinner: loadingType,\n color: 'cyan',\n }).start();\n}\n","import * as psl from 'psl';\n\n// Extracts the domain from a given URL.\nexport function getDomain(inputUrl: string): string | null {\n try {\n const url = new URL(inputUrl);\n // Use PSL to parse domain names.\n const parsed = psl.parse(url.hostname);\n\n // If domain is available, split it and return the SLD.\n if ('domain' in parsed && parsed.domain) {\n return parsed.domain.split('.')[0];\n } else {\n return null;\n }\n } catch (error) {\n return null;\n }\n}\n\n// Appends 'https://' protocol to the URL if not present.\nexport function appendProtocol(inputUrl: string): string {\n try {\n new URL(inputUrl);\n return inputUrl;\n } catch {\n return `https://${inputUrl}`;\n }\n}\n\n// Normalizes the URL by ensuring it has a protocol and is valid.\nexport function normalizeUrl(urlToNormalize: string): string {\n const urlWithProtocol = appendProtocol(urlToNormalize);\n try {\n new URL(urlWithProtocol);\n return urlWithProtocol;\n } catch (err) {\n throw new Error(\n `Your url \"${urlWithProtocol}\" is invalid: ${(err as Error).message}`,\n );\n }\n}\n","import path from 'path';\nimport axios from 'axios';\nimport fsExtra from 'fs-extra';\nimport chalk from 'chalk';\nimport { dir } from 'tmp-promise';\n\nimport logger from './logger';\nimport { npmDirectory } from '@/utils/dir';\nimport { IS_LINUX, IS_WIN } from '@/utils/platform';\nimport { getSpinner } from '@/utils/info';\nimport { fileTypeFromBuffer } from 'file-type';\nimport { PakeAppOptions } from '@/types';\nimport { getDomain } from '@/utils/url';\nimport icongen from 'icon-gen';\n\n// Helper function to convert icon to required platform format\nasync function convertIconFormat(inputPath: string, appName: string): Promise<string | null> {\n try {\n const { path: outputDir } = await dir();\n const platformOutputDir = path.join(outputDir, 'converted-icons');\n await fsExtra.ensureDir(platformOutputDir);\n\n // Get the required format based on current platform\n const requiredFormat = IS_WIN ? 'ico' : IS_LINUX ? 'png' : 'icns';\n const outputFileName = IS_WIN \n ? `${appName.toLowerCase()}_256.ico`\n : IS_LINUX \n ? `${appName.toLowerCase()}_512.png`\n : `${appName.toLowerCase()}.icns`;\n\n const outputPath = path.join(platformOutputDir, outputFileName);\n\n // Convert using icon-gen\n if (requiredFormat === 'icns') {\n await icongen(inputPath, platformOutputDir, {\n report: false,\n icns: {\n name: appName.toLowerCase(),\n sizes: [16, 32, 64, 128, 256, 512, 1024]\n }\n });\n } else if (requiredFormat === 'ico') {\n await icongen(inputPath, platformOutputDir, {\n report: false,\n ico: {\n name: `${appName.toLowerCase()}_256`,\n sizes: [16, 24, 32, 48, 64, 128, 256]\n }\n });\n } else {\n // For Linux, just copy the PNG file\n await fsExtra.copy(inputPath, outputPath);\n }\n\n return outputPath;\n } catch (error) {\n logger.warn(`✼ Icon format conversion failed: ${error.message}`);\n return null;\n }\n}\n\nexport async function handleIcon(options: PakeAppOptions, url?: string) {\n if (options.icon) {\n if (options.icon.startsWith('http')) {\n return downloadIcon(options.icon);\n } else {\n return path.resolve(options.icon);\n }\n } else {\n // Try to get favicon from website if URL is provided and it's a web URL\n if (url && url.startsWith('http') && options.name) {\n const faviconPath = await tryGetFavicon(url, options.name);\n if (faviconPath) {\n return faviconPath;\n }\n }\n \n logger.warn(\n '✼ No icon given, default in use. For a custom icon, use --icon option.',\n );\n const iconPath = IS_WIN\n ? 'src-tauri/png/icon_256.ico'\n : IS_LINUX\n ? 'src-tauri/png/icon_512.png'\n : 'src-tauri/icons/icon.icns';\n return path.join(npmDirectory, iconPath);\n }\n}\n\nasync function tryGetFavicon(url: string, appName: string): Promise<string | null> {\n const domain = getDomain(url);\n if (!domain) {\n return null;\n }\n\n const spinner = getSpinner('Fetching website favicon...');\n \n // List of logo/favicon services to try in order of preference\n const logoServices = [\n // Professional Logo APIs (free tier, higher quality)\n `https://logo.clearbit.com/${domain}?size=256`,\n `https://logo.uplead.com/${domain}`,\n \n // Google's reliable service with larger size\n `https://www.google.com/s2/favicons?domain=${domain}&sz=256`,\n \n // Other favicon services\n `https://favicon.is/${domain}`,\n `https://icons.duckduckgo.com/ip3/${domain}.ico`,\n `https://icon.horse/icon/${domain}`,\n \n // Direct favicon checks\n `https://${domain}/favicon.ico`,\n `https://www.${domain}/favicon.ico`,\n `https://${domain}/apple-touch-icon.png`,\n `https://${domain}/apple-touch-icon-precomposed.png`,\n ];\n\n for (const logoUrl of logoServices) {\n try {\n const faviconPath = await downloadIcon(logoUrl, false);\n if (faviconPath) {\n spinner.text = 'Converting favicon to platform format...';\n \n // Convert to the correct format for the current platform\n const convertedPath = await convertIconFormat(faviconPath, appName);\n if (convertedPath) {\n spinner.succeed(chalk.green(`Favicon downloaded and converted for ${domain}!`));\n return convertedPath;\n } else {\n // If conversion fails, try the next service\n continue;\n }\n }\n } catch (error) {\n // Continue to next service\n continue;\n }\n }\n\n spinner.fail(chalk.yellow(`No favicon found for ${domain}, using default icon.`));\n return null;\n}\n\nexport async function downloadIcon(iconUrl: string, showSpinner: boolean = true) {\n const spinner = showSpinner ? getSpinner('Downloading icon...') : null;\n try {\n const iconResponse = await axios.get(iconUrl, {\n responseType: 'arraybuffer',\n timeout: 10000, // 10 second timeout\n });\n const iconData = await iconResponse.data;\n\n if (!iconData || iconData.byteLength < 100) {\n // Skip very small responses (likely error pages)\n return null;\n }\n\n const fileDetails = await fileTypeFromBuffer(iconData);\n if (!fileDetails || !['png', 'ico', 'jpeg', 'jpg', 'gif', 'webp'].includes(fileDetails.ext)) {\n // Only accept common image formats\n return null;\n }\n\n const { path: tempPath } = await dir();\n let iconPath = `${tempPath}/icon.${fileDetails.ext}`;\n // Fix this for linux\n if (IS_LINUX) {\n iconPath = 'png/linux_temp.png';\n await fsExtra.outputFile(\n `${npmDirectory}/src-tauri/${iconPath}`,\n iconData,\n );\n } else {\n await fsExtra.outputFile(iconPath, iconData);\n }\n await fsExtra.outputFile(iconPath, iconData);\n \n if (spinner) {\n spinner.succeed(chalk.green('Icon downloaded successfully!'));\n }\n return iconPath;\n } catch (error) {\n if (spinner) {\n spinner.fail(chalk.red('Icon download failed!'));\n }\n if (error.response && error.response.status === 404) {\n return null;\n }\n if (showSpinner) {\n throw error;\n }\n return null;\n }\n}\n","import fsExtra from 'fs-extra';\nimport logger from '@/options/logger';\n\nimport { handleIcon } from './icon';\nimport { getDomain } from '@/utils/url';\nimport { getIdentifier, promptText, capitalizeFirstLetter } from '@/utils/info';\nimport { PakeAppOptions, PakeCliOptions, PlatformMap } from '@/types';\n\nfunction resolveAppName(name: string, platform: NodeJS.Platform): string {\n const domain = getDomain(name) || 'pake';\n return platform !== 'linux' ? capitalizeFirstLetter(domain) : domain;\n}\n\nfunction isValidName(name: string, platform: NodeJS.Platform): boolean {\n const platformRegexMapping: PlatformMap = {\n linux: /^[a-z0-9][a-z0-9-]*$/,\n default: /^[a-zA-Z0-9][a-zA-Z0-9- ]*$/,\n };\n const reg = platformRegexMapping[platform] || platformRegexMapping.default;\n return !!name && reg.test(name);\n}\n\nexport default async function handleOptions(\n options: PakeCliOptions,\n url: string,\n): Promise<PakeAppOptions> {\n const { platform } = process;\n const isActions = process.env.GITHUB_ACTIONS;\n let name = options.name;\n\n const pathExists = await fsExtra.pathExists(url);\n if (!options.name) {\n const defaultName = pathExists ? '' : resolveAppName(url, platform);\n const promptMessage = 'Enter your application name';\n const namePrompt = await promptText(promptMessage, defaultName);\n name = namePrompt || defaultName;\n }\n\n // Handle platform-specific name formatting\n if (name && platform === 'linux') {\n // Convert to lowercase and replace spaces with dashes for Linux\n name = name.toLowerCase().replace(/\\s+/g, '-');\n }\n\n if (!isValidName(name, platform)) {\n const LINUX_NAME_ERROR = `✕ Name should only include lowercase letters, numbers, and dashes (not leading dashes). Examples: com-123-xxx, 123pan, pan123, weread, we-read, 123.`;\n const DEFAULT_NAME_ERROR = `✕ Name should only include letters, numbers, dashes, and spaces (not leading dashes and spaces). Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read, We Read, 123.`;\n const errorMsg =\n platform === 'linux' ? LINUX_NAME_ERROR : DEFAULT_NAME_ERROR;\n logger.error(errorMsg);\n if (isActions) {\n name = resolveAppName(url, platform);\n logger.warn(`✼ Inside github actions, use the default name: ${name}`);\n } else {\n process.exit(1);\n }\n }\n\n const appOptions: PakeAppOptions = {\n ...options,\n name,\n identifier: getIdentifier(url),\n };\n\n appOptions.icon = await handleIcon(appOptions, url);\n\n return appOptions;\n}\n","import pakeConf from '../../src-tauri/pake.json';\nimport CommonConf from '../../src-tauri/tauri.conf.json';\nimport WinConf from '../../src-tauri/tauri.windows.conf.json';\nimport MacConf from '../../src-tauri/tauri.macos.conf.json';\nimport LinuxConf from '../../src-tauri/tauri.linux.conf.json';\n\nconst platformConfigs = {\n win32: WinConf,\n darwin: MacConf,\n linux: LinuxConf,\n};\n\nconst { platform } = process;\n// @ts-ignore\nconst platformConfig = platformConfigs[platform];\n\nlet tauriConfig = {\n ...CommonConf,\n bundle: platformConfig.bundle,\n app: {\n ...CommonConf.app,\n trayIcon: {\n ...(platformConfig?.app?.trayIcon ?? {}),\n },\n },\n build: CommonConf.build,\n pake: pakeConf,\n};\n\nexport default tauriConfig;\n","import { execa } from 'execa';\nimport { npmDirectory } from './dir';\n\nexport async function shellExec(command: string, timeout: number = 300000) {\n try {\n const { exitCode } = await execa(command, {\n cwd: npmDirectory,\n stdio: 'inherit',\n shell: true,\n timeout,\n });\n return exitCode;\n } catch (error: any) {\n const exitCode = error.exitCode ?? 'unknown';\n const errorMessage = error.message || 'Unknown error occurred';\n\n if (error.timedOut) {\n throw new Error(\n `Command timed out after ${timeout}ms: \"${command}\". Try increasing timeout or check network connectivity.`,\n );\n }\n\n throw new Error(\n `Error occurred while executing command \"${command}\". Exit code: ${exitCode}. Details: ${errorMessage}`,\n );\n }\n}\n","import dns from 'dns';\nimport http from 'http';\nimport { promisify } from 'util';\n\nimport logger from '@/options/logger';\n\nconst resolve = promisify(dns.resolve);\n\nconst ping = async (host: string) => {\n const lookup = promisify(dns.lookup);\n const ip = await lookup(host);\n const start = new Date();\n\n // Prevent timeouts from affecting user experience.\n const requestPromise = new Promise<number>((resolve, reject) => {\n const req = http.get(`http://${ip.address}`, (res) => {\n const delay = new Date().getTime() - start.getTime();\n res.resume();\n resolve(delay);\n });\n\n req.on('error', (err) => {\n reject(err);\n });\n });\n\n const timeoutPromise = new Promise<number>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Request timed out after 3 seconds'));\n }, 1000);\n });\n\n return Promise.race([requestPromise, timeoutPromise]);\n};\n\nasync function isChinaDomain(domain: string): Promise<boolean> {\n try {\n const [ip] = await resolve(domain);\n return await isChinaIP(ip, domain);\n } catch (error) {\n logger.debug(`${domain} can't be parse!`);\n return true;\n }\n}\n\nasync function isChinaIP(ip: string, domain: string): Promise<boolean> {\n try {\n const delay = await ping(ip);\n logger.debug(`${domain} latency is ${delay} ms`);\n return delay > 1000;\n } catch (error) {\n logger.debug(`ping ${domain} failed!`);\n return true;\n }\n}\n\nexport { isChinaDomain, isChinaIP };\n","import chalk from 'chalk';\nimport { execaSync } from 'execa';\n\nimport { getSpinner } from '@/utils/info';\nimport { IS_WIN } from '@/utils/platform';\nimport { shellExec } from '@/utils/shell';\nimport { isChinaDomain } from '@/utils/ip';\n\nexport async function installRust() {\n const isActions = process.env.GITHUB_ACTIONS;\n const isInChina = await isChinaDomain('sh.rustup.rs');\n const rustInstallScriptForMac =\n isInChina && !isActions\n ? 'export RUSTUP_DIST_SERVER=\"https://rsproxy.cn\" && export RUSTUP_UPDATE_ROOT=\"https://rsproxy.cn/rustup\" && curl --proto \"=https\" --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh'\n : \"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y\";\n const rustInstallScriptForWindows = 'winget install --id Rustlang.Rustup';\n\n const spinner = getSpinner('Downloading Rust...');\n\n try {\n await shellExec(\n IS_WIN ? rustInstallScriptForWindows : rustInstallScriptForMac,\n );\n spinner.succeed(chalk.green('Rust installed successfully!'));\n } catch (error) {\n console.error('Error installing Rust:', error.message);\n spinner.fail(chalk.red('Rust installation failed!'));\n process.exit(1);\n }\n}\n\nexport function checkRustInstalled() {\n try {\n execaSync('rustc', ['--version']);\n return true;\n } catch {\n return false;\n }\n}\n","import fs from 'fs';\n\nexport default async function combineFiles(files: string[], output: string) {\n const contents = files.map((file) => {\n const fileContent = fs.readFileSync(file);\n if (file.endsWith('.css')) {\n return (\n \"window.addEventListener('DOMContentLoaded', (_event) => { const css = `\" +\n fileContent +\n \"`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });\"\n );\n }\n\n return (\n \"window.addEventListener('DOMContentLoaded', (_event) => { \" +\n fileContent +\n ' });'\n );\n });\n fs.writeFileSync(output, contents.join('\\n'));\n return files;\n}\n","import path from 'path';\nimport fsExtra from 'fs-extra';\n\nimport combineFiles from '@/utils/combine';\nimport logger from '@/options/logger';\nimport { PakeAppOptions, PlatformMap } from '@/types';\nimport { tauriConfigDirectory, npmDirectory } from '@/utils/dir';\n\nexport async function mergeConfig(\n url: string,\n options: PakeAppOptions,\n tauriConf: any,\n) {\n // Ensure .pake directory exists and copy source templates if needed\n const srcTauriDir = path.join(npmDirectory, 'src-tauri');\n await fsExtra.ensureDir(tauriConfigDirectory);\n\n // Copy source config files to .pake directory (as templates)\n const sourceFiles = [\n 'tauri.conf.json',\n 'tauri.macos.conf.json',\n 'tauri.windows.conf.json',\n 'tauri.linux.conf.json',\n 'pake.json',\n ];\n\n await Promise.all(\n sourceFiles.map(async (file) => {\n const sourcePath = path.join(srcTauriDir, file);\n const destPath = path.join(tauriConfigDirectory, file);\n\n if (\n (await fsExtra.pathExists(sourcePath)) &&\n !(await fsExtra.pathExists(destPath))\n ) {\n await fsExtra.copy(sourcePath, destPath);\n }\n }),\n );\n const {\n width,\n height,\n fullscreen,\n hideTitleBar,\n alwaysOnTop,\n appVersion,\n darkMode,\n disabledWebShortcuts,\n activationShortcut,\n userAgent,\n showSystemTray,\n systemTrayIcon,\n useLocalFile,\n identifier,\n name,\n resizable = true,\n inject,\n proxyUrl,\n installerLanguage,\n hideOnClose,\n incognito,\n title,\n } = options;\n\n const { platform } = process;\n\n // Set Windows parameters.\n const tauriConfWindowOptions = {\n width,\n height,\n fullscreen,\n resizable,\n hide_title_bar: hideTitleBar,\n activation_shortcut: activationShortcut,\n always_on_top: alwaysOnTop,\n dark_mode: darkMode,\n disabled_web_shortcuts: disabledWebShortcuts,\n hide_on_close: hideOnClose,\n incognito: incognito,\n title: title || null,\n };\n Object.assign(tauriConf.pake.windows[0], { url, ...tauriConfWindowOptions });\n\n tauriConf.productName = name;\n tauriConf.identifier = identifier;\n tauriConf.version = appVersion;\n\n if (platform == 'win32') {\n tauriConf.bundle.windows.wix.language[0] = installerLanguage;\n }\n\n //Judge the type of URL, whether it is a file or a website.\n const pathExists = await fsExtra.pathExists(url);\n if (pathExists) {\n logger.warn('✼ Your input might be a local file.');\n tauriConf.pake.windows[0].url_type = 'local';\n\n const fileName = path.basename(url);\n const dirName = path.dirname(url);\n\n const distDir = path.join(npmDirectory, 'dist');\n const distBakDir = path.join(npmDirectory, 'dist_bak');\n\n if (!useLocalFile) {\n const urlPath = path.join(distDir, fileName);\n await fsExtra.copy(url, urlPath);\n } else {\n fsExtra.moveSync(distDir, distBakDir, { overwrite: true });\n fsExtra.copySync(dirName, distDir, { overwrite: true });\n\n // ignore it, because about_pake.html have be erased.\n // const filesToCopyBack = ['cli.js', 'about_pake.html'];\n const filesToCopyBack = ['cli.js'];\n await Promise.all(\n filesToCopyBack.map((file) =>\n fsExtra.copy(path.join(distBakDir, file), path.join(distDir, file)),\n ),\n );\n }\n\n tauriConf.pake.windows[0].url = fileName;\n tauriConf.pake.windows[0].url_type = 'local';\n } else {\n tauriConf.pake.windows[0].url_type = 'web';\n }\n\n const platformMap: PlatformMap = {\n win32: 'windows',\n linux: 'linux',\n darwin: 'macos',\n };\n const currentPlatform = platformMap[platform];\n\n if (userAgent.length > 0) {\n tauriConf.pake.user_agent[currentPlatform] = userAgent;\n }\n\n tauriConf.pake.system_tray[currentPlatform] = showSystemTray;\n\n // Processing targets are currently only open to Linux.\n if (platform === 'linux') {\n delete tauriConf.bundle.linux.deb.files;\n const validTargets = ['deb', 'appimage', 'rpm'];\n if (validTargets.includes(options.targets)) {\n tauriConf.bundle.targets = [options.targets];\n } else {\n logger.warn(\n `✼ The target must be one of ${validTargets.join(', ')}, the default 'deb' will be used.`,\n );\n }\n }\n\n // Set icon.\n const platformIconMap: PlatformMap = {\n win32: {\n fileExt: '.ico',\n path: `png/${name.toLowerCase()}_256.ico`,\n defaultIcon: 'png/icon_256.ico',\n message: 'Windows icon must be .ico and 256x256px.',\n },\n linux: {\n fileExt: '.png',\n path: `png/${name.toLowerCase()}_512.png`,\n defaultIcon: 'png/icon_512.png',\n message: 'Linux icon must be .png and 512x512px.',\n },\n darwin: {\n fileExt: '.icns',\n path: `icons/${name.toLowerCase()}.icns`,\n defaultIcon: 'icons/icon.icns',\n message: 'macOS icon must be .icns type.',\n },\n };\n const iconInfo = platformIconMap[platform];\n const exists = await fsExtra.pathExists(options.icon);\n if (exists) {\n let updateIconPath = true;\n let customIconExt = path.extname(options.icon).toLowerCase();\n\n if (customIconExt !== iconInfo.fileExt) {\n updateIconPath = false;\n logger.warn(`✼ ${iconInfo.message}, but you give ${customIconExt}`);\n tauriConf.bundle.icon = [iconInfo.defaultIcon];\n } else {\n const iconPath = path.join(npmDirectory, 'src-tauri/', iconInfo.path);\n tauriConf.bundle.resources = [iconInfo.path];\n await fsExtra.copy(options.icon, iconPath);\n }\n\n if (updateIconPath) {\n tauriConf.bundle.icon = [options.icon];\n } else {\n logger.warn(`✼ Icon will remain as default.`);\n }\n } else {\n logger.warn(\n '✼ Custom icon path may be invalid, default icon will be used instead.',\n );\n tauriConf.bundle.icon = [iconInfo.defaultIcon];\n }\n\n // Set tray icon path.\n let trayIconPath =\n platform === 'darwin' ? 'png/icon_512.png' : tauriConf.bundle.icon[0];\n if (systemTrayIcon.length > 0) {\n try {\n await fsExtra.pathExists(systemTrayIcon);\n // 需要判断图标格式,默认只支持ico和png两种\n let iconExt = path.extname(systemTrayIcon).toLowerCase();\n if (iconExt == '.png' || iconExt == '.ico') {\n const trayIcoPath = path.join(\n npmDirectory,\n `src-tauri/png/${name.toLowerCase()}${iconExt}`,\n );\n trayIconPath = `png/${name.toLowerCase()}${iconExt}`;\n await fsExtra.copy(systemTrayIcon, trayIcoPath);\n } else {\n logger.warn(\n `✼ System tray icon must be .ico or .png, but you provided ${iconExt}.`,\n );\n logger.warn(`✼ Default system tray icon will be used.`);\n }\n } catch {\n logger.warn(`✼ ${systemTrayIcon} not exists!`);\n logger.warn(`✼ Default system tray icon will remain unchanged.`);\n }\n }\n\n tauriConf.app.trayIcon.iconPath = trayIconPath;\n tauriConf.pake.system_tray_path = trayIconPath;\n\n delete tauriConf.app.trayIcon;\n\n const injectFilePath = path.join(\n npmDirectory,\n `src-tauri/src/inject/custom.js`,\n );\n\n // inject js or css files\n if (inject?.length > 0) {\n if (\n !inject.every((item) => item.endsWith('.css') || item.endsWith('.js'))\n ) {\n logger.error('The injected file must be in either CSS or JS format.');\n return;\n }\n const files = inject.map((filepath) =>\n path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath),\n );\n tauriConf.pake.inject = files;\n await combineFiles(files, injectFilePath);\n } else {\n tauriConf.pake.inject = [];\n await fsExtra.writeFile(injectFilePath, '');\n }\n tauriConf.pake.proxy_url = proxyUrl || '';\n\n // Save config file.\n const platformConfigPaths: PlatformMap = {\n win32: 'tauri.windows.conf.json',\n darwin: 'tauri.macos.conf.json',\n linux: 'tauri.linux.conf.json',\n };\n\n const configPath = path.join(\n tauriConfigDirectory,\n platformConfigPaths[platform],\n );\n\n const bundleConf = { bundle: tauriConf.bundle };\n console.log('pakeConfig', tauriConf.pake);\n await fsExtra.outputJSON(configPath, bundleConf, { spaces: 4 });\n const pakeConfigPath = path.join(tauriConfigDirectory, 'pake.json');\n await fsExtra.outputJSON(pakeConfigPath, tauriConf.pake, { spaces: 4 });\n\n let tauriConf2 = JSON.parse(JSON.stringify(tauriConf));\n delete tauriConf2.pake;\n\n // delete tauriConf2.bundle;\n if (process.env.NODE_ENV === 'development') {\n tauriConf2.bundle = bundleConf.bundle;\n }\n const configJsonPath = path.join(tauriConfigDirectory, 'tauri.conf.json');\n await fsExtra.outputJSON(configJsonPath, tauriConf2, { spaces: 4 });\n}\n","import path from 'path';\nimport fsExtra from 'fs-extra';\nimport chalk from 'chalk';\nimport prompts from 'prompts';\n\nimport { PakeAppOptions } from '@/types';\nimport { checkRustInstalled, installRust } from '@/helpers/rust';\nimport { mergeConfig } from '@/helpers/merge';\nimport tauriConfig from '@/helpers/tauriConfig';\nimport { npmDirectory } from '@/utils/dir';\nimport { getSpinner } from '@/utils/info';\nimport { shellExec } from '@/utils/shell';\nimport { isChinaDomain } from '@/utils/ip';\nimport { IS_MAC } from '@/utils/platform';\nimport logger from '@/options/logger';\n\nexport default abstract class BaseBuilder {\n protected options: PakeAppOptions;\n\n protected constructor(options: PakeAppOptions) {\n this.options = options;\n }\n\n async prepare() {\n const tauriSrcPath = path.join(npmDirectory, 'src-tauri');\n const tauriTargetPath = path.join(tauriSrcPath, 'target');\n const tauriTargetPathExists = await fsExtra.pathExists(tauriTargetPath);\n\n if (!IS_MAC && !tauriTargetPathExists) {\n logger.warn('✼ The first use requires installing system dependencies.');\n logger.warn('✼ See more in https://tauri.app/start/prerequisites/.');\n }\n\n if (!checkRustInstalled()) {\n const res = await prompts({\n type: 'confirm',\n message: 'Rust not detected. Install now?',\n name: 'value',\n });\n\n if (res.value) {\n await installRust();\n } else {\n logger.error('✕ Rust required to package your webapp.');\n process.exit(0);\n }\n }\n\n const isChina = await isChinaDomain('www.npmjs.com');\n const spinner = getSpinner('Installing package...');\n const rustProjectDir = path.join(tauriSrcPath, '.cargo');\n const projectConf = path.join(rustProjectDir, 'config.toml');\n await fsExtra.ensureDir(rustProjectDir);\n\n // For global CLI installation, always use npm\n const packageManager = 'npm';\n const registryOption = isChina\n ? ' --registry=https://registry.npmmirror.com'\n : '';\n\n // Windows环境下需要更长的超时时间\n const timeout = process.platform === 'win32' ? 600000 : 300000;\n\n if (isChina) {\n logger.info('✺ Located in China, using npm/rsProxy CN mirror.');\n const projectCnConf = path.join(tauriSrcPath, 'rust_proxy.toml');\n await fsExtra.copy(projectCnConf, projectConf);\n await shellExec(\n `cd \"${npmDirectory}\" && ${packageManager} install${registryOption}`,\n timeout,\n );\n } else {\n await shellExec(\n `cd \"${npmDirectory}\" && ${packageManager} install`,\n timeout,\n );\n }\n spinner.succeed(chalk.green('Package installed!'));\n if (!tauriTargetPathExists) {\n logger.warn(\n '✼ The first packaging may be slow, please be patient and wait, it will be faster afterwards.',\n );\n }\n }\n\n async build(url: string) {\n await this.buildAndCopy(url, this.options.targets);\n }\n\n async start(url: string) {\n await mergeConfig(url, this.options, tauriConfig);\n }\n\n async buildAndCopy(url: string, target: string) {\n const { name } = this.options;\n await mergeConfig(url, this.options, tauriConfig);\n\n // Build app\n const spinner = getSpinner('Building app...');\n setTimeout(() => spinner.stop(), 3000);\n await shellExec(`cd \"${npmDirectory}\" && ${this.getBuildCommand()}`);\n\n // Copy app\n const fileName = this.getFileName();\n const fileType = this.getFileType(target);\n const appPath = this.getBuildAppPath(npmDirectory, fileName, fileType);\n const distPath = path.resolve(`${name}.${fileType}`);\n await fsExtra.copy(appPath, distPath);\n await fsExtra.remove(appPath);\n logger.success('✔ Build success!');\n logger.success('✔ App installer located in', distPath);\n }\n\n protected getFileType(target: string): string {\n return target;\n }\n\n abstract getFileName(): string;\n\n protected getBuildCommand(): string {\n const baseCommand = this.options.debug\n ? 'npm run build:debug'\n : 'npm run build';\n\n // Use temporary config directory to avoid modifying source files\n const configPath = path.join(\n npmDirectory,\n 'src-tauri',\n '.pake',\n 'tauri.conf.json',\n );\n let fullCommand = `${baseCommand} -- -c \"${configPath}\"`;\n\n // For macOS, use app bundles by default unless DMG is explicitly requested\n if (IS_MAC && this.options.targets === 'app') {\n fullCommand += ' --bundles app';\n }\n\n // Add macos-proxy feature for modern macOS (Darwin 23+ = macOS 14+)\n if (IS_MAC) {\n const macOSVersion = this.getMacOSMajorVersion();\n if (macOSVersion >= 23) {\n fullCommand += ' --features macos-proxy';\n }\n }\n\n return fullCommand;\n }\n\n private getMacOSMajorVersion(): number {\n try {\n const os = require('os');\n const release = os.release();\n const majorVersion = parseInt(release.split('.')[0], 10);\n return majorVersion;\n } catch (error) {\n return 0; // Disable proxy feature if version detection fails\n }\n }\n\n protected getBasePath(): string {\n const basePath = this.options.debug ? 'debug' : 'release';\n return `src-tauri/target/${basePath}/bundle/`;\n }\n\n protected getBuildAppPath(\n npmDirectory: string,\n fileName: string,\n fileType: string,\n ): string {\n // For app bundles on macOS, the directory is 'macos', not 'app'\n const bundleDir =\n fileType.toLowerCase() === 'app' ? 'macos' : fileType.toLowerCase();\n return path.join(\n npmDirectory,\n this.getBasePath(),\n bundleDir,\n `${fileName}.${fileType}`,\n );\n }\n}\n","import tauriConfig from '@/helpers/tauriConfig';\nimport { PakeAppOptions } from '@/types';\nimport BaseBuilder from './BaseBuilder';\n\nexport default class MacBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n // Use DMG by default for distribution\n // Only create app bundles for testing to avoid user interaction\n if (process.env.PAKE_CREATE_APP === '1') {\n this.options.targets = 'app';\n } else {\n this.options.targets = 'dmg';\n }\n }\n\n getFileName(): string {\n const { name } = this.options;\n\n // For app bundles, use simple name without version/arch\n if (this.options.targets === 'app') {\n return name;\n }\n\n // For DMG files, use versioned filename\n let arch: string;\n if (this.options.multiArch) {\n arch = 'universal';\n } else {\n arch = process.arch === 'arm64' ? 'aarch64' : process.arch;\n }\n return `${name}_${tauriConfig.version}_${arch}`;\n }\n\n protected getBuildCommand(): string {\n return this.options.multiArch\n ? 'npm run build:mac'\n : super.getBuildCommand();\n }\n\n protected getBasePath(): string {\n return this.options.multiArch\n ? 'src-tauri/target/universal-apple-darwin/release/bundle'\n : super.getBasePath();\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport { PakeAppOptions } from '@/types';\nimport tauriConfig from '@/helpers/tauriConfig';\n\nexport default class WinBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n this.options.targets = 'msi';\n }\n\n getFileName(): string {\n const { name } = this.options;\n const { arch } = process;\n const language = tauriConfig.bundle.windows.wix.language[0];\n return `${name}_${tauriConfig.version}_${arch}_${language}`;\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport { PakeAppOptions } from '@/types';\nimport tauriConfig from '@/helpers/tauriConfig';\n\nexport default class LinuxBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n }\n\n getFileName() {\n const { name, targets } = this.options;\n const version = tauriConfig.version;\n\n let arch = process.arch === 'x64' ? 'amd64' : process.arch;\n if (arch === 'arm64' && (targets === 'rpm' || targets === 'appimage')) {\n arch = 'aarch64';\n }\n\n // The RPM format uses different separators and version number formats\n if (targets === 'rpm') {\n return `${name}-${version}-1.${arch}`;\n }\n\n return `${name}_${version}_${arch}`;\n }\n\n // Customize it, considering that there are all targets.\n async build(url: string) {\n const targetTypes = ['deb', 'appimage', 'rpm'];\n for (const target of targetTypes) {\n if (this.options.targets === target) {\n await this.buildAndCopy(url, target);\n }\n }\n }\n\n protected getFileType(target: string): string {\n if (target === 'appimage') {\n return 'AppImage';\n }\n return super.getFileType(target);\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport MacBuilder from './MacBuilder';\nimport WinBuilder from './WinBuilder';\nimport LinuxBuilder from './LinuxBuilder';\nimport { PakeAppOptions } from '@/types';\n\nconst { platform } = process;\n\nconst buildersMap: Record<\n string,\n new (options: PakeAppOptions) => BaseBuilder\n> = {\n darwin: MacBuilder,\n win32: WinBuilder,\n linux: LinuxBuilder,\n};\n\nexport default class BuilderProvider {\n static create(options: PakeAppOptions): BaseBuilder {\n const Builder = buildersMap[platform];\n if (!Builder) {\n throw new Error('The current system is not supported!');\n }\n return new Builder(options);\n }\n}\n","import log from 'loglevel';\nimport { DEFAULT_DEV_PAKE_OPTIONS } from './defaults';\nimport handleInputOptions from './options/index';\nimport BuilderProvider from './builders/BuilderProvider';\n\nasync function startBuild() {\n log.setDefaultLevel('debug');\n\n const appOptions = await handleInputOptions(\n DEFAULT_DEV_PAKE_OPTIONS,\n DEFAULT_DEV_PAKE_OPTIONS.url,\n );\n log.debug('PakeAppOptions', appOptions);\n\n const builder = BuilderProvider.create(appOptions);\n await builder.prepare();\n await builder.start(DEFAULT_DEV_PAKE_OPTIONS.url);\n}\n\nstartBuild();\n"],"names":["platform","handleInputOptions"],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sources":["../bin/defaults.ts","../bin/options/logger.ts","../bin/utils/info.ts","../bin/utils/dir.ts","../bin/utils/platform.ts","../bin/options/icon.ts","../bin/utils/url.ts","../bin/options/index.ts","../bin/helpers/tauriConfig.ts","../bin/utils/shell.ts","../bin/utils/ip.ts","../bin/helpers/rust.ts","../bin/utils/combine.ts","../bin/helpers/merge.ts","../bin/builders/BaseBuilder.ts","../bin/builders/MacBuilder.ts","../bin/builders/WinBuilder.ts","../bin/builders/LinuxBuilder.ts","../bin/builders/BuilderProvider.ts","../bin/dev.ts"],"sourcesContent":["import { PakeCliOptions } from './types.js';\n\nexport const DEFAULT_PAKE_OPTIONS: PakeCliOptions = {\n icon: '',\n height: 780,\n width: 1200,\n fullscreen: false,\n resizable: true,\n hideTitleBar: false,\n alwaysOnTop: false,\n appVersion: '1.0.0',\n darkMode: false,\n disabledWebShortcuts: false,\n activationShortcut: '',\n userAgent: '',\n showSystemTray: false,\n multiArch: false,\n targets: 'deb',\n useLocalFile: false,\n systemTrayIcon: '',\n proxyUrl: '',\n debug: false,\n inject: [],\n installerLanguage: 'en-US',\n hideOnClose: true,\n incognito: false,\n};\n\n// Just for cli development\nexport const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & { url: string } = {\n ...DEFAULT_PAKE_OPTIONS,\n url: 'https://weekly.tw93.fun/',\n name: 'Weekly',\n hideTitleBar: true,\n};\n","import chalk from 'chalk';\nimport log from 'loglevel';\n\nconst logger = {\n info(...msg: any[]) {\n log.info(...msg.map((m) => chalk.white(m)));\n },\n debug(...msg: any[]) {\n log.debug(...msg);\n },\n error(...msg: any[]) {\n log.error(...msg.map((m) => chalk.red(m)));\n },\n warn(...msg: any[]) {\n log.info(...msg.map((m) => chalk.yellow(m)));\n },\n success(...msg: any[]) {\n log.info(...msg.map((m) => chalk.green(m)));\n },\n};\n\nexport default logger;\n","import crypto from 'crypto';\nimport prompts from 'prompts';\nimport ora from 'ora';\nimport chalk from 'chalk';\n\n// Generates an identifier based on the given URL.\nexport function getIdentifier(url: string) {\n const postFixHash = crypto\n .createHash('md5')\n .update(url)\n .digest('hex')\n .substring(0, 6);\n return `com.pake.${postFixHash}`;\n}\n\nexport async function promptText(\n message: string,\n initial?: string,\n): Promise<string> {\n const response = await prompts({\n type: 'text',\n name: 'content',\n message,\n initial,\n });\n return response.content;\n}\n\nexport function capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getSpinner(text: string) {\n const loadingType = {\n interval: 80,\n frames: ['✦', '✶', '✺', '✵', '✸', '✹', '✺'],\n };\n return ora({\n text: `${chalk.cyan(text)}\\n`,\n spinner: loadingType,\n color: 'cyan',\n }).start();\n}\n","import path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Convert the current module URL to a file path\nconst currentModulePath = fileURLToPath(import.meta.url);\n\n// Resolve the parent directory of the current module\nexport const npmDirectory = path.join(path.dirname(currentModulePath), '..');\n\nexport const tauriConfigDirectory = path.join(\n npmDirectory,\n 'src-tauri',\n '.pake',\n);\n","const { platform } = process;\n\nexport const IS_MAC = platform === 'darwin';\nexport const IS_WIN = platform === 'win32';\nexport const IS_LINUX = platform === 'linux';\n","import path from 'path';\nimport axios from 'axios';\nimport fsExtra from 'fs-extra';\nimport chalk from 'chalk';\nimport { dir } from 'tmp-promise';\nimport { fileTypeFromBuffer } from 'file-type';\nimport icongen from 'icon-gen';\nimport sharp from 'sharp';\n\nimport logger from './logger';\nimport { getSpinner } from '@/utils/info';\nimport { npmDirectory } from '@/utils/dir';\nimport { IS_LINUX, IS_WIN } from '@/utils/platform';\nimport { PakeAppOptions } from '@/types';\n\n// Constants\nconst ICON_CONFIG = {\n minFileSize: 100,\n downloadTimeout: 10000,\n supportedFormats: ['png', 'ico', 'jpeg', 'jpg', 'webp'] as const,\n whiteBackground: { r: 255, g: 255, b: 255 },\n};\n\n// API Configuration\nconst API_TOKENS = {\n // cspell:disable-next-line\n logoDev: ['pk_JLLMUKGZRpaG5YclhXaTkg', 'pk_Ph745P8mQSeYFfW2Wk039A'],\n // cspell:disable-next-line\n brandfetch: ['1idqvJC0CeFSeyp3Yf7', '1idej-yhU_ThggIHFyG'],\n};\n\n/**\n * Adds white background to transparent icons only\n */\nasync function preprocessIcon(inputPath: string): Promise<string> {\n try {\n const metadata = await sharp(inputPath).metadata();\n if (metadata.channels !== 4) return inputPath; // No transparency\n\n const { path: tempDir } = await dir();\n const outputPath = path.join(tempDir, 'icon-with-background.png');\n\n await sharp({\n create: {\n width: metadata.width || 512,\n height: metadata.height || 512,\n channels: 3,\n background: ICON_CONFIG.whiteBackground,\n },\n })\n .composite([{ input: inputPath }])\n .png()\n .toFile(outputPath);\n\n return outputPath;\n } catch (error) {\n logger.warn(`Failed to add background to icon: ${error.message}`);\n return inputPath;\n }\n}\n\n/**\n * Converts icon to platform-specific format\n */\nasync function convertIconFormat(\n inputPath: string,\n appName: string,\n): Promise<string | null> {\n try {\n if (!(await fsExtra.pathExists(inputPath))) return null;\n\n const { path: outputDir } = await dir();\n const platformOutputDir = path.join(outputDir, 'converted-icons');\n await fsExtra.ensureDir(platformOutputDir);\n\n const processedInputPath = await preprocessIcon(inputPath);\n const iconName = appName.toLowerCase();\n\n // Generate platform-specific format\n if (IS_WIN) {\n await icongen(processedInputPath, platformOutputDir, {\n report: false,\n ico: { name: `${iconName}_256`, sizes: [256] },\n });\n return path.join(platformOutputDir, `${iconName}_256.ico`);\n }\n\n if (IS_LINUX) {\n const outputPath = path.join(platformOutputDir, `${iconName}_512.png`);\n await fsExtra.copy(processedInputPath, outputPath);\n return outputPath;\n }\n\n // macOS\n await icongen(processedInputPath, platformOutputDir, {\n report: false,\n icns: { name: iconName, sizes: [16, 32, 64, 128, 256, 512, 1024] },\n });\n const outputPath = path.join(platformOutputDir, `${iconName}.icns`);\n return (await fsExtra.pathExists(outputPath)) ? outputPath : null;\n } catch (error) {\n logger.warn(`Icon format conversion failed: ${error.message}`);\n return null;\n }\n}\n\nexport async function handleIcon(options: PakeAppOptions, url?: string) {\n if (options.icon) {\n if (options.icon.startsWith('http')) {\n return downloadIcon(options.icon);\n }\n return path.resolve(options.icon);\n }\n\n // Try to get favicon from website if URL is provided\n if (url && url.startsWith('http') && options.name) {\n const faviconPath = await tryGetFavicon(url, options.name);\n if (faviconPath) return faviconPath;\n }\n\n logger.info('✼ No icon provided, using default icon.');\n\n // For Windows, ensure we have proper fallback handling\n if (IS_WIN) {\n const defaultIcoPath = path.join(\n npmDirectory,\n 'src-tauri/png/icon_256.ico',\n );\n const defaultPngPath = path.join(\n npmDirectory,\n 'src-tauri/png/icon_512.png',\n );\n\n // First try default ico\n if (await fsExtra.pathExists(defaultIcoPath)) {\n return defaultIcoPath;\n }\n\n // If ico doesn't exist, try to convert from png\n if (await fsExtra.pathExists(defaultPngPath)) {\n logger.info('✼ Default ico not found, converting from png...');\n try {\n const convertedPath = await convertIconFormat(defaultPngPath, 'icon');\n if (convertedPath && (await fsExtra.pathExists(convertedPath))) {\n return convertedPath;\n }\n } catch (error) {\n logger.warn(`Failed to convert default png to ico: ${error.message}`);\n }\n }\n\n // Last resort: return png path if it exists (Windows can handle png in some cases)\n if (await fsExtra.pathExists(defaultPngPath)) {\n logger.warn('✼ Using png as fallback for Windows (may cause issues).');\n return defaultPngPath;\n }\n\n // If nothing exists, let the error bubble up\n throw new Error('No default icon found for Windows build');\n }\n\n const iconPath = IS_LINUX\n ? 'src-tauri/png/icon_512.png'\n : 'src-tauri/icons/icon.icns';\n return path.join(npmDirectory, iconPath);\n}\n\n/**\n * Generates icon service URLs for a domain\n */\nfunction generateIconServiceUrls(domain: string): string[] {\n const logoDevUrls = API_TOKENS.logoDev\n .sort(() => Math.random() - 0.5)\n .map(\n (token) =>\n `https://img.logo.dev/${domain}?token=${token}&format=png&size=256`,\n );\n\n const brandfetchUrls = API_TOKENS.brandfetch\n .sort(() => Math.random() - 0.5)\n .map((key) => `https://cdn.brandfetch.io/${domain}/w/400/h/400?c=${key}`);\n\n return [\n ...logoDevUrls,\n ...brandfetchUrls,\n `https://logo.clearbit.com/${domain}?size=256`,\n `https://logo.uplead.com/${domain}`,\n `https://www.google.com/s2/favicons?domain=${domain}&sz=256`,\n `https://favicon.is/${domain}`,\n `https://icons.duckduckgo.com/ip3/${domain}.ico`,\n `https://icon.horse/icon/${domain}`,\n `https://${domain}/favicon.ico`,\n `https://www.${domain}/favicon.ico`,\n `https://${domain}/apple-touch-icon.png`,\n `https://${domain}/apple-touch-icon-precomposed.png`,\n ];\n}\n\n/**\n * Attempts to fetch favicon from website\n */\nasync function tryGetFavicon(\n url: string,\n appName: string,\n): Promise<string | null> {\n try {\n const domain = new URL(url).hostname;\n const spinner = getSpinner(`Fetching icon from ${domain}...`);\n\n const serviceUrls = generateIconServiceUrls(domain);\n\n // Use shorter timeout for CI environments\n const isCI =\n process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';\n const downloadTimeout = isCI ? 5000 : ICON_CONFIG.downloadTimeout;\n\n for (const serviceUrl of serviceUrls) {\n try {\n const faviconPath = await downloadIcon(\n serviceUrl,\n false,\n downloadTimeout,\n );\n if (!faviconPath) continue;\n\n const convertedPath = await convertIconFormat(faviconPath, appName);\n if (convertedPath) {\n spinner.succeed(\n chalk.green('Icon fetched and converted successfully!'),\n );\n return convertedPath;\n }\n } catch (error) {\n // Log specific errors in CI for debugging\n if (isCI) {\n logger.debug(`Icon service ${serviceUrl} failed: ${error.message}`);\n }\n continue;\n }\n }\n\n spinner.warn(`✼ No favicon found for ${domain}. Using default.`);\n return null;\n } catch (error) {\n logger.warn(`Failed to fetch favicon: ${error.message}`);\n return null;\n }\n}\n\n/**\n * Downloads icon from URL\n */\nexport async function downloadIcon(\n iconUrl: string,\n showSpinner = true,\n customTimeout?: number,\n): Promise<string | null> {\n try {\n const response = await axios.get(iconUrl, {\n responseType: 'arraybuffer',\n timeout: customTimeout || ICON_CONFIG.downloadTimeout,\n });\n\n const iconData = response.data;\n if (!iconData || iconData.byteLength < ICON_CONFIG.minFileSize) return null;\n\n const fileDetails = await fileTypeFromBuffer(iconData);\n if (\n !fileDetails ||\n !ICON_CONFIG.supportedFormats.includes(fileDetails.ext as any)\n ) {\n return null;\n }\n\n return await saveIconFile(iconData, fileDetails.ext);\n } catch (error) {\n if (showSpinner && !(error.response?.status === 404)) {\n throw error;\n }\n return null;\n }\n}\n\n/**\n * Saves icon file to temporary location\n */\nasync function saveIconFile(\n iconData: ArrayBuffer,\n extension: string,\n): Promise<string> {\n const buffer = Buffer.from(iconData);\n\n if (IS_LINUX) {\n const iconPath = 'png/linux_temp.png';\n await fsExtra.outputFile(`${npmDirectory}/src-tauri/${iconPath}`, buffer);\n return iconPath;\n }\n\n const { path: tempPath } = await dir();\n const iconPath = `${tempPath}/icon.${extension}`;\n await fsExtra.outputFile(iconPath, buffer);\n return iconPath;\n}\n","import * as psl from 'psl';\n\n// Extracts the domain from a given URL.\nexport function getDomain(inputUrl: string): string | null {\n try {\n const url = new URL(inputUrl);\n // Use PSL to parse domain names.\n const parsed = psl.parse(url.hostname);\n\n // If domain is available, split it and return the SLD.\n if ('domain' in parsed && parsed.domain) {\n return parsed.domain.split('.')[0];\n } else {\n return null;\n }\n } catch (error) {\n return null;\n }\n}\n\n// Appends 'https://' protocol to the URL if not present.\nexport function appendProtocol(inputUrl: string): string {\n try {\n new URL(inputUrl);\n return inputUrl;\n } catch {\n return `https://${inputUrl}`;\n }\n}\n\n// Normalizes the URL by ensuring it has a protocol and is valid.\nexport function normalizeUrl(urlToNormalize: string): string {\n const urlWithProtocol = appendProtocol(urlToNormalize);\n try {\n new URL(urlWithProtocol);\n return urlWithProtocol;\n } catch (err) {\n throw new Error(\n `Your url \"${urlWithProtocol}\" is invalid: ${(err as Error).message}`,\n );\n }\n}\n","import fsExtra from 'fs-extra';\nimport logger from '@/options/logger';\n\nimport { handleIcon } from './icon';\nimport { getDomain } from '@/utils/url';\nimport { getIdentifier, promptText, capitalizeFirstLetter } from '@/utils/info';\nimport { PakeAppOptions, PakeCliOptions, PlatformMap } from '@/types';\n\nfunction resolveAppName(name: string, platform: NodeJS.Platform): string {\n const domain = getDomain(name) || 'pake';\n return platform !== 'linux' ? capitalizeFirstLetter(domain) : domain;\n}\n\nfunction isValidName(name: string, platform: NodeJS.Platform): boolean {\n const platformRegexMapping: PlatformMap = {\n linux: /^[a-z0-9][a-z0-9-]*$/,\n default: /^[a-zA-Z0-9][a-zA-Z0-9- ]*$/,\n };\n const reg = platformRegexMapping[platform] || platformRegexMapping.default;\n return !!name && reg.test(name);\n}\n\nexport default async function handleOptions(\n options: PakeCliOptions,\n url: string,\n): Promise<PakeAppOptions> {\n const { platform } = process;\n const isActions = process.env.GITHUB_ACTIONS;\n let name = options.name;\n\n const pathExists = await fsExtra.pathExists(url);\n if (!options.name) {\n const defaultName = pathExists ? '' : resolveAppName(url, platform);\n const promptMessage = 'Enter your application name';\n const namePrompt = await promptText(promptMessage, defaultName);\n name = namePrompt || defaultName;\n }\n\n // Handle platform-specific name formatting\n if (name && platform === 'linux') {\n // Convert to lowercase and replace spaces with dashes for Linux\n name = name.toLowerCase().replace(/\\s+/g, '-');\n }\n\n if (!isValidName(name, platform)) {\n const LINUX_NAME_ERROR = `✕ Name should only include lowercase letters, numbers, and dashes (not leading dashes). Examples: com-123-xxx, 123pan, pan123, weread, we-read, 123.`;\n const DEFAULT_NAME_ERROR = `✕ Name should only include letters, numbers, dashes, and spaces (not leading dashes and spaces). Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read, We Read, 123.`;\n const errorMsg =\n platform === 'linux' ? LINUX_NAME_ERROR : DEFAULT_NAME_ERROR;\n logger.error(errorMsg);\n if (isActions) {\n name = resolveAppName(url, platform);\n logger.warn(`✼ Inside github actions, use the default name: ${name}`);\n } else {\n process.exit(1);\n }\n }\n\n const appOptions: PakeAppOptions = {\n ...options,\n name,\n identifier: getIdentifier(url),\n };\n\n appOptions.icon = await handleIcon(appOptions, url);\n\n return appOptions;\n}\n","import path from 'path';\nimport fsExtra from 'fs-extra';\nimport { npmDirectory } from '@/utils/dir';\n\n// Load configs from npm package directory, not from project source\nconst tauriSrcDir = path.join(npmDirectory, 'src-tauri');\nconst pakeConf = fsExtra.readJSONSync(path.join(tauriSrcDir, 'pake.json'));\nconst CommonConf = fsExtra.readJSONSync(path.join(tauriSrcDir, 'tauri.conf.json'));\nconst WinConf = fsExtra.readJSONSync(path.join(tauriSrcDir, 'tauri.windows.conf.json'));\nconst MacConf = fsExtra.readJSONSync(path.join(tauriSrcDir, 'tauri.macos.conf.json'));\nconst LinuxConf = fsExtra.readJSONSync(path.join(tauriSrcDir, 'tauri.linux.conf.json'));\n\nconst platformConfigs = {\n win32: WinConf,\n darwin: MacConf,\n linux: LinuxConf,\n};\n\nconst { platform } = process;\n// @ts-ignore\nconst platformConfig = platformConfigs[platform];\n\nlet tauriConfig = {\n ...CommonConf,\n bundle: platformConfig.bundle,\n app: {\n ...CommonConf.app,\n trayIcon: {\n ...(platformConfig?.app?.trayIcon ?? {}),\n },\n },\n build: CommonConf.build,\n pake: pakeConf,\n};\n\nexport default tauriConfig;\n","import { execa } from 'execa';\nimport { npmDirectory } from './dir';\n\nexport async function shellExec(\n command: string,\n timeout: number = 300000,\n env?: Record<string, string>,\n) {\n try {\n const { exitCode } = await execa(command, {\n cwd: npmDirectory,\n stdio: ['inherit', 'pipe', 'inherit'], // Hide stdout verbose, keep stderr\n shell: true,\n timeout,\n env: env ? { ...process.env, ...env } : process.env,\n });\n return exitCode;\n } catch (error: any) {\n const exitCode = error.exitCode ?? 'unknown';\n const errorMessage = error.message || 'Unknown error occurred';\n\n if (error.timedOut) {\n throw new Error(\n `Command timed out after ${timeout}ms: \"${command}\". Try increasing timeout or check network connectivity.`,\n );\n }\n\n throw new Error(\n `Error occurred while executing command \"${command}\". Exit code: ${exitCode}. Details: ${errorMessage}`,\n );\n }\n}\n","import dns from 'dns';\nimport http from 'http';\nimport { promisify } from 'util';\n\nimport logger from '@/options/logger';\n\nconst resolve = promisify(dns.resolve);\n\nconst ping = async (host: string) => {\n const lookup = promisify(dns.lookup);\n const ip = await lookup(host);\n const start = new Date();\n\n // Prevent timeouts from affecting user experience.\n const requestPromise = new Promise<number>((resolve, reject) => {\n const req = http.get(`http://${ip.address}`, (res) => {\n const delay = new Date().getTime() - start.getTime();\n res.resume();\n resolve(delay);\n });\n\n req.on('error', (err) => {\n reject(err);\n });\n });\n\n const timeoutPromise = new Promise<number>((_, reject) => {\n setTimeout(() => {\n reject(new Error('Request timed out after 3 seconds'));\n }, 1000);\n });\n\n return Promise.race([requestPromise, timeoutPromise]);\n};\n\nasync function isChinaDomain(domain: string): Promise<boolean> {\n try {\n const [ip] = await resolve(domain);\n return await isChinaIP(ip, domain);\n } catch (error) {\n logger.debug(`${domain} can't be parse!`);\n return true;\n }\n}\n\nasync function isChinaIP(ip: string, domain: string): Promise<boolean> {\n try {\n const delay = await ping(ip);\n logger.debug(`${domain} latency is ${delay} ms`);\n return delay > 1000;\n } catch (error) {\n logger.debug(`ping ${domain} failed!`);\n return true;\n }\n}\n\nexport { isChinaDomain, isChinaIP };\n","import chalk from 'chalk';\nimport { execaSync } from 'execa';\n\nimport { getSpinner } from '@/utils/info';\nimport { IS_WIN } from '@/utils/platform';\nimport { shellExec } from '@/utils/shell';\nimport { isChinaDomain } from '@/utils/ip';\n\nexport async function installRust() {\n const isActions = process.env.GITHUB_ACTIONS;\n const isInChina = await isChinaDomain('sh.rustup.rs');\n const rustInstallScriptForMac =\n isInChina && !isActions\n ? 'export RUSTUP_DIST_SERVER=\"https://rsproxy.cn\" && export RUSTUP_UPDATE_ROOT=\"https://rsproxy.cn/rustup\" && curl --proto \"=https\" --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh'\n : \"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y\";\n const rustInstallScriptForWindows = 'winget install --id Rustlang.Rustup';\n\n const spinner = getSpinner('Downloading Rust...');\n\n try {\n await shellExec(\n IS_WIN ? rustInstallScriptForWindows : rustInstallScriptForMac,\n );\n spinner.succeed(chalk.green('✔ Rust installed successfully!'));\n } catch (error) {\n spinner.fail(chalk.red('✕ Rust installation failed!'));\n console.error(error.message);\n process.exit(1);\n }\n}\n\nexport function checkRustInstalled() {\n try {\n execaSync('rustc', ['--version']);\n return true;\n } catch {\n return false;\n }\n}\n","import fs from 'fs';\n\nexport default async function combineFiles(files: string[], output: string) {\n const contents = files.map((file) => {\n const fileContent = fs.readFileSync(file);\n if (file.endsWith('.css')) {\n return (\n \"window.addEventListener('DOMContentLoaded', (_event) => { const css = `\" +\n fileContent +\n \"`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });\"\n );\n }\n\n return (\n \"window.addEventListener('DOMContentLoaded', (_event) => { \" +\n fileContent +\n ' });'\n );\n });\n fs.writeFileSync(output, contents.join('\\n'));\n return files;\n}\n","import path from 'path';\nimport fsExtra from 'fs-extra';\n\nimport combineFiles from '@/utils/combine';\nimport logger from '@/options/logger';\nimport { PakeAppOptions, PlatformMap } from '@/types';\nimport { tauriConfigDirectory, npmDirectory } from '@/utils/dir';\n\nexport async function mergeConfig(\n url: string,\n options: PakeAppOptions,\n tauriConf: any,\n) {\n // Ensure .pake directory exists and copy source templates if needed\n const srcTauriDir = path.join(npmDirectory, 'src-tauri');\n await fsExtra.ensureDir(tauriConfigDirectory);\n\n // Copy source config files to .pake directory (as templates)\n const sourceFiles = [\n 'tauri.conf.json',\n 'tauri.macos.conf.json',\n 'tauri.windows.conf.json',\n 'tauri.linux.conf.json',\n 'pake.json',\n ];\n\n await Promise.all(\n sourceFiles.map(async (file) => {\n const sourcePath = path.join(srcTauriDir, file);\n const destPath = path.join(tauriConfigDirectory, file);\n\n if (\n (await fsExtra.pathExists(sourcePath)) &&\n !(await fsExtra.pathExists(destPath))\n ) {\n await fsExtra.copy(sourcePath, destPath);\n }\n }),\n );\n const {\n width,\n height,\n fullscreen,\n hideTitleBar,\n alwaysOnTop,\n appVersion,\n darkMode,\n disabledWebShortcuts,\n activationShortcut,\n userAgent,\n showSystemTray,\n systemTrayIcon,\n useLocalFile,\n identifier,\n name,\n resizable = true,\n inject,\n proxyUrl,\n installerLanguage,\n hideOnClose,\n incognito,\n title,\n } = options;\n\n const { platform } = process;\n\n // Set Windows parameters.\n const tauriConfWindowOptions = {\n width,\n height,\n fullscreen,\n resizable,\n hide_title_bar: hideTitleBar,\n activation_shortcut: activationShortcut,\n always_on_top: alwaysOnTop,\n dark_mode: darkMode,\n disabled_web_shortcuts: disabledWebShortcuts,\n hide_on_close: hideOnClose,\n incognito: incognito,\n title: title || null,\n };\n Object.assign(tauriConf.pake.windows[0], { url, ...tauriConfWindowOptions });\n\n tauriConf.productName = name;\n tauriConf.identifier = identifier;\n tauriConf.version = appVersion;\n\n if (platform == 'win32') {\n tauriConf.bundle.windows.wix.language[0] = installerLanguage;\n }\n\n //Judge the type of URL, whether it is a file or a website.\n const pathExists = await fsExtra.pathExists(url);\n if (pathExists) {\n logger.warn('✼ Your input might be a local file.');\n tauriConf.pake.windows[0].url_type = 'local';\n\n const fileName = path.basename(url);\n const dirName = path.dirname(url);\n\n const distDir = path.join(npmDirectory, 'dist');\n const distBakDir = path.join(npmDirectory, 'dist_bak');\n\n if (!useLocalFile) {\n const urlPath = path.join(distDir, fileName);\n await fsExtra.copy(url, urlPath);\n } else {\n fsExtra.moveSync(distDir, distBakDir, { overwrite: true });\n fsExtra.copySync(dirName, distDir, { overwrite: true });\n\n // ignore it, because about_pake.html have be erased.\n // const filesToCopyBack = ['cli.js', 'about_pake.html'];\n const filesToCopyBack = ['cli.js'];\n await Promise.all(\n filesToCopyBack.map((file) =>\n fsExtra.copy(path.join(distBakDir, file), path.join(distDir, file)),\n ),\n );\n }\n\n tauriConf.pake.windows[0].url = fileName;\n tauriConf.pake.windows[0].url_type = 'local';\n } else {\n tauriConf.pake.windows[0].url_type = 'web';\n }\n\n const platformMap: PlatformMap = {\n win32: 'windows',\n linux: 'linux',\n darwin: 'macos',\n };\n const currentPlatform = platformMap[platform];\n\n if (userAgent.length > 0) {\n tauriConf.pake.user_agent[currentPlatform] = userAgent;\n }\n\n tauriConf.pake.system_tray[currentPlatform] = showSystemTray;\n\n // Processing targets are currently only open to Linux.\n if (platform === 'linux') {\n // Remove hardcoded desktop files and regenerate with correct app name\n delete tauriConf.bundle.linux.deb.files;\n\n // Generate correct desktop file configuration\n const appNameLower = name.toLowerCase();\n const identifier = `com.pake.${appNameLower}`;\n const desktopFileName = `${identifier}.desktop`;\n\n // Create desktop file content\n const desktopContent = `[Desktop Entry]\nVersion=1.0\nType=Application\nName=${name}\nComment=${name}\nExec=${appNameLower}\nIcon=${appNameLower}\nCategories=Network;WebBrowser;\nMimeType=text/html;text/xml;application/xhtml_xml;\nStartupNotify=true\n`;\n\n // Write desktop file to assets directory\n const assetsDir = path.join(npmDirectory, 'src-tauri/assets');\n const desktopFilePath = path.join(assetsDir, desktopFileName);\n await fsExtra.ensureDir(assetsDir);\n await fsExtra.writeFile(desktopFilePath, desktopContent);\n\n // Set up desktop file in bundle configuration\n tauriConf.bundle.linux.deb.files = {\n [`/usr/share/applications/${desktopFileName}`]: `assets/${desktopFileName}`,\n };\n\n const validTargets = ['deb', 'appimage', 'rpm'];\n if (validTargets.includes(options.targets)) {\n tauriConf.bundle.targets = [options.targets];\n } else {\n logger.warn(\n `✼ The target must be one of ${validTargets.join(', ')}, the default 'deb' will be used.`,\n );\n }\n }\n\n // Set icon.\n const platformIconMap: PlatformMap = {\n win32: {\n fileExt: '.ico',\n path: `png/${name.toLowerCase()}_256.ico`,\n defaultIcon: 'png/icon_256.ico',\n message: 'Windows icon must be .ico and 256x256px.',\n },\n linux: {\n fileExt: '.png',\n path: `png/${name.toLowerCase()}_512.png`,\n defaultIcon: 'png/icon_512.png',\n message: 'Linux icon must be .png and 512x512px.',\n },\n darwin: {\n fileExt: '.icns',\n path: `icons/${name.toLowerCase()}.icns`,\n defaultIcon: 'icons/icon.icns',\n message: 'macOS icon must be .icns type.',\n },\n };\n const iconInfo = platformIconMap[platform];\n const exists = await fsExtra.pathExists(options.icon);\n if (exists) {\n let updateIconPath = true;\n let customIconExt = path.extname(options.icon).toLowerCase();\n\n if (customIconExt !== iconInfo.fileExt) {\n updateIconPath = false;\n logger.warn(`✼ ${iconInfo.message}, but you give ${customIconExt}`);\n tauriConf.bundle.icon = [iconInfo.defaultIcon];\n } else {\n const iconPath = path.join(npmDirectory, 'src-tauri/', iconInfo.path);\n tauriConf.bundle.resources = [iconInfo.path];\n await fsExtra.copy(options.icon, iconPath);\n }\n\n if (updateIconPath) {\n tauriConf.bundle.icon = [options.icon];\n } else {\n logger.warn(`✼ Icon will remain as default.`);\n }\n } else {\n logger.warn(\n '✼ Custom icon path may be invalid, default icon will be used instead.',\n );\n tauriConf.bundle.icon = [iconInfo.defaultIcon];\n }\n\n // Set tray icon path.\n let trayIconPath =\n platform === 'darwin' ? 'png/icon_512.png' : tauriConf.bundle.icon[0];\n if (systemTrayIcon.length > 0) {\n try {\n await fsExtra.pathExists(systemTrayIcon);\n // 需要判断图标格式,默认只支持ico和png两种\n let iconExt = path.extname(systemTrayIcon).toLowerCase();\n if (iconExt == '.png' || iconExt == '.ico') {\n const trayIcoPath = path.join(\n npmDirectory,\n `src-tauri/png/${name.toLowerCase()}${iconExt}`,\n );\n trayIconPath = `png/${name.toLowerCase()}${iconExt}`;\n await fsExtra.copy(systemTrayIcon, trayIcoPath);\n } else {\n logger.warn(\n `✼ System tray icon must be .ico or .png, but you provided ${iconExt}.`,\n );\n logger.warn(`✼ Default system tray icon will be used.`);\n }\n } catch {\n logger.warn(`✼ ${systemTrayIcon} not exists!`);\n logger.warn(`✼ Default system tray icon will remain unchanged.`);\n }\n }\n\n tauriConf.app.trayIcon.iconPath = trayIconPath;\n tauriConf.pake.system_tray_path = trayIconPath;\n\n delete tauriConf.app.trayIcon;\n\n const injectFilePath = path.join(\n npmDirectory,\n `src-tauri/src/inject/custom.js`,\n );\n\n // inject js or css files\n if (inject?.length > 0) {\n if (\n !inject.every((item) => item.endsWith('.css') || item.endsWith('.js'))\n ) {\n logger.error('The injected file must be in either CSS or JS format.');\n return;\n }\n const files = inject.map((filepath) =>\n path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath),\n );\n tauriConf.pake.inject = files;\n await combineFiles(files, injectFilePath);\n } else {\n tauriConf.pake.inject = [];\n await fsExtra.writeFile(injectFilePath, '');\n }\n tauriConf.pake.proxy_url = proxyUrl || '';\n\n // Save config file.\n const platformConfigPaths: PlatformMap = {\n win32: 'tauri.windows.conf.json',\n darwin: 'tauri.macos.conf.json',\n linux: 'tauri.linux.conf.json',\n };\n\n const configPath = path.join(\n tauriConfigDirectory,\n platformConfigPaths[platform],\n );\n\n const bundleConf = { bundle: tauriConf.bundle };\n await fsExtra.outputJSON(configPath, bundleConf, { spaces: 4 });\n const pakeConfigPath = path.join(tauriConfigDirectory, 'pake.json');\n await fsExtra.outputJSON(pakeConfigPath, tauriConf.pake, { spaces: 4 });\n\n let tauriConf2 = JSON.parse(JSON.stringify(tauriConf));\n delete tauriConf2.pake;\n\n // delete tauriConf2.bundle;\n if (process.env.NODE_ENV === 'development') {\n tauriConf2.bundle = bundleConf.bundle;\n }\n const configJsonPath = path.join(tauriConfigDirectory, 'tauri.conf.json');\n await fsExtra.outputJSON(configJsonPath, tauriConf2, { spaces: 4 });\n}\n","import path from 'path';\nimport fsExtra from 'fs-extra';\nimport chalk from 'chalk';\nimport prompts from 'prompts';\n\nimport { PakeAppOptions } from '@/types';\nimport { checkRustInstalled, installRust } from '@/helpers/rust';\nimport { mergeConfig } from '@/helpers/merge';\nimport tauriConfig from '@/helpers/tauriConfig';\nimport { npmDirectory } from '@/utils/dir';\nimport { getSpinner } from '@/utils/info';\nimport { shellExec } from '@/utils/shell';\nimport { isChinaDomain } from '@/utils/ip';\nimport { IS_MAC } from '@/utils/platform';\nimport logger from '@/options/logger';\n\nexport default abstract class BaseBuilder {\n protected options: PakeAppOptions;\n\n protected constructor(options: PakeAppOptions) {\n this.options = options;\n }\n\n private getBuildEnvironment() {\n return IS_MAC\n ? {\n CFLAGS: '-fno-modules',\n CXXFLAGS: '-fno-modules',\n MACOSX_DEPLOYMENT_TARGET: '14.0',\n }\n : undefined;\n }\n\n private getInstallTimeout(): number {\n return process.platform === 'win32' ? 600000 : 300000;\n }\n\n private getBuildTimeout(): number {\n return 900000; // 15 minutes for all builds\n }\n\n async prepare() {\n const tauriSrcPath = path.join(npmDirectory, 'src-tauri');\n const tauriTargetPath = path.join(tauriSrcPath, 'target');\n const tauriTargetPathExists = await fsExtra.pathExists(tauriTargetPath);\n\n if (!IS_MAC && !tauriTargetPathExists) {\n logger.warn('✼ The first use requires installing system dependencies.');\n logger.warn('✼ See more in https://tauri.app/start/prerequisites/.');\n }\n\n if (!checkRustInstalled()) {\n const res = await prompts({\n type: 'confirm',\n message: 'Rust not detected. Install now?',\n name: 'value',\n });\n\n if (res.value) {\n await installRust();\n } else {\n logger.error('✕ Rust required to package your webapp.');\n process.exit(0);\n }\n }\n\n const isChina = await isChinaDomain('www.npmjs.com');\n const spinner = getSpinner('Installing package...');\n const rustProjectDir = path.join(tauriSrcPath, '.cargo');\n const projectConf = path.join(rustProjectDir, 'config.toml');\n await fsExtra.ensureDir(rustProjectDir);\n\n // 统一使用npm,简单可靠\n const packageManager = 'npm';\n const registryOption = isChina\n ? ' --registry=https://registry.npmmirror.com'\n : '';\n const legacyPeerDeps = ' --legacy-peer-deps'; // 解决dependency conflicts\n\n const timeout = this.getInstallTimeout();\n\n const buildEnv = this.getBuildEnvironment();\n\n if (isChina) {\n logger.info('✺ Located in China, using npm/rsProxy CN mirror.');\n const projectCnConf = path.join(tauriSrcPath, 'rust_proxy.toml');\n await fsExtra.copy(projectCnConf, projectConf);\n await shellExec(\n `cd \"${npmDirectory}\" && ${packageManager} install${registryOption}${legacyPeerDeps} --silent`,\n timeout,\n buildEnv,\n );\n } else {\n await shellExec(\n `cd \"${npmDirectory}\" && ${packageManager} install${legacyPeerDeps} --silent`,\n timeout,\n buildEnv,\n );\n }\n spinner.succeed(chalk.green('Package installed!'));\n if (!tauriTargetPathExists) {\n logger.warn(\n '✼ The first packaging may be slow, please be patient and wait, it will be faster afterwards.',\n );\n }\n }\n\n async build(url: string) {\n await this.buildAndCopy(url, this.options.targets);\n }\n\n async start(url: string) {\n await mergeConfig(url, this.options, tauriConfig);\n }\n\n async buildAndCopy(url: string, target: string) {\n const { name } = this.options;\n await mergeConfig(url, this.options, tauriConfig);\n\n // Build app\n const buildSpinner = getSpinner('Building app...');\n // Let spinner run for a moment so user can see it, then stop before npm command\n await new Promise((resolve) => setTimeout(resolve, 500));\n buildSpinner.stop();\n // Show static message to keep the status visible\n logger.warn('✸ Building app...');\n\n const buildEnv = this.getBuildEnvironment();\n\n await shellExec(\n `cd \"${npmDirectory}\" && ${this.getBuildCommand()}`,\n this.getBuildTimeout(),\n buildEnv,\n );\n\n // Copy app\n const fileName = this.getFileName();\n const fileType = this.getFileType(target);\n const appPath = this.getBuildAppPath(npmDirectory, fileName, fileType);\n const distPath = path.resolve(`${name}.${fileType}`);\n await fsExtra.copy(appPath, distPath);\n await fsExtra.remove(appPath);\n logger.success('✔ Build success!');\n logger.success('✔ App installer located in', distPath);\n }\n\n protected getFileType(target: string): string {\n return target;\n }\n\n abstract getFileName(): string;\n\n protected getBuildCommand(): string {\n const baseCommand = this.options.debug\n ? 'npm run build:debug'\n : 'npm run build';\n\n // Use temporary config directory to avoid modifying source files\n const configPath = path.join(\n npmDirectory,\n 'src-tauri',\n '.pake',\n 'tauri.conf.json',\n );\n let fullCommand = `${baseCommand} -- -c \"${configPath}\"`;\n\n // For macOS, use app bundles by default unless DMG is explicitly requested\n if (IS_MAC && this.options.targets === 'app') {\n fullCommand += ' --bundles app';\n }\n\n // Add features\n const features = ['cli-build'];\n \n // Add macos-proxy feature for modern macOS (Darwin 23+ = macOS 14+)\n if (IS_MAC) {\n const macOSVersion = this.getMacOSMajorVersion();\n if (macOSVersion >= 23) {\n features.push('macos-proxy');\n }\n }\n \n if (features.length > 0) {\n fullCommand += ` --features ${features.join(',')}`;\n }\n\n return fullCommand;\n }\n\n protected getMacOSMajorVersion(): number {\n try {\n const os = require('os');\n const release = os.release();\n const majorVersion = parseInt(release.split('.')[0], 10);\n return majorVersion;\n } catch (error) {\n return 0; // Disable proxy feature if version detection fails\n }\n }\n\n protected getBasePath(): string {\n const basePath = this.options.debug ? 'debug' : 'release';\n return `src-tauri/target/${basePath}/bundle/`;\n }\n\n protected getBuildAppPath(\n npmDirectory: string,\n fileName: string,\n fileType: string,\n ): string {\n // For app bundles on macOS, the directory is 'macos', not 'app'\n const bundleDir =\n fileType.toLowerCase() === 'app' ? 'macos' : fileType.toLowerCase();\n return path.join(\n npmDirectory,\n this.getBasePath(),\n bundleDir,\n `${fileName}.${fileType}`,\n );\n }\n}\n","import path from 'path';\nimport tauriConfig from '@/helpers/tauriConfig';\nimport { PakeAppOptions } from '@/types';\nimport BaseBuilder from './BaseBuilder';\n\nexport default class MacBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n // Use DMG by default for distribution\n // Only create app bundles for testing to avoid user interaction\n if (process.env.PAKE_CREATE_APP === '1') {\n this.options.targets = 'app';\n } else {\n this.options.targets = 'dmg';\n }\n }\n\n getFileName(): string {\n const { name } = this.options;\n\n // For app bundles, use simple name without version/arch\n if (this.options.targets === 'app') {\n return name;\n }\n\n // For DMG files, use versioned filename\n let arch: string;\n if (this.options.multiArch) {\n arch = 'universal';\n } else {\n arch = process.arch === 'arm64' ? 'aarch64' : process.arch;\n }\n return `${name}_${tauriConfig.version}_${arch}`;\n }\n\n protected getBuildCommand(): string {\n if (this.options.multiArch) {\n const baseCommand = this.options.debug\n ? 'npm run tauri build -- --debug'\n : 'npm run tauri build --';\n \n // Use temporary config directory to avoid modifying source files\n const configPath = path.join(\n 'src-tauri',\n '.pake',\n 'tauri.conf.json',\n );\n let fullCommand = `${baseCommand} --target universal-apple-darwin -c \"${configPath}\"`;\n\n // Add features\n const features = ['cli-build'];\n \n // Add macos-proxy feature for modern macOS (Darwin 23+ = macOS 14+)\n const macOSVersion = this.getMacOSMajorVersion();\n if (macOSVersion >= 23) {\n features.push('macos-proxy');\n }\n \n if (features.length > 0) {\n fullCommand += ` --features ${features.join(',')}`;\n }\n\n return fullCommand;\n }\n return super.getBuildCommand();\n }\n\n protected getBasePath(): string {\n return this.options.multiArch\n ? 'src-tauri/target/universal-apple-darwin/release/bundle'\n : super.getBasePath();\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport { PakeAppOptions } from '@/types';\nimport tauriConfig from '@/helpers/tauriConfig';\n\nexport default class WinBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n this.options.targets = 'msi';\n }\n\n getFileName(): string {\n const { name } = this.options;\n const { arch } = process;\n const language = tauriConfig.bundle.windows.wix.language[0];\n return `${name}_${tauriConfig.version}_${arch}_${language}`;\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport { PakeAppOptions } from '@/types';\nimport tauriConfig from '@/helpers/tauriConfig';\n\nexport default class LinuxBuilder extends BaseBuilder {\n constructor(options: PakeAppOptions) {\n super(options);\n }\n\n getFileName() {\n const { name, targets } = this.options;\n const version = tauriConfig.version;\n\n let arch = process.arch === 'x64' ? 'amd64' : process.arch;\n if (arch === 'arm64' && (targets === 'rpm' || targets === 'appimage')) {\n arch = 'aarch64';\n }\n\n // The RPM format uses different separators and version number formats\n if (targets === 'rpm') {\n return `${name}-${version}-1.${arch}`;\n }\n\n return `${name}_${version}_${arch}`;\n }\n\n // Customize it, considering that there are all targets.\n async build(url: string) {\n const targetTypes = ['deb', 'appimage', 'rpm'];\n for (const target of targetTypes) {\n if (this.options.targets === target) {\n await this.buildAndCopy(url, target);\n }\n }\n }\n\n protected getFileType(target: string): string {\n if (target === 'appimage') {\n return 'AppImage';\n }\n return super.getFileType(target);\n }\n}\n","import BaseBuilder from './BaseBuilder';\nimport MacBuilder from './MacBuilder';\nimport WinBuilder from './WinBuilder';\nimport LinuxBuilder from './LinuxBuilder';\nimport { PakeAppOptions } from '@/types';\n\nconst { platform } = process;\n\nconst buildersMap: Record<\n string,\n new (options: PakeAppOptions) => BaseBuilder\n> = {\n darwin: MacBuilder,\n win32: WinBuilder,\n linux: LinuxBuilder,\n};\n\nexport default class BuilderProvider {\n static create(options: PakeAppOptions): BaseBuilder {\n const Builder = buildersMap[platform];\n if (!Builder) {\n throw new Error('The current system is not supported!');\n }\n return new Builder(options);\n }\n}\n","import log from 'loglevel';\nimport { DEFAULT_DEV_PAKE_OPTIONS } from './defaults';\nimport handleInputOptions from './options/index';\nimport BuilderProvider from './builders/BuilderProvider';\n\nasync function startBuild() {\n log.setDefaultLevel('debug');\n\n const appOptions = await handleInputOptions(\n DEFAULT_DEV_PAKE_OPTIONS,\n DEFAULT_DEV_PAKE_OPTIONS.url,\n );\n log.debug('PakeAppOptions', appOptions);\n\n const builder = BuilderProvider.create(appOptions);\n await builder.prepare();\n await builder.start(DEFAULT_DEV_PAKE_OPTIONS.url);\n}\n\nstartBuild();\n"],"names":["platform","handleInputOptions"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pake-cli",
3
- "version": "3.2.0-beta15",
3
+ "version": "3.2.12",
4
4
  "description": "🤱🏻 Turn any webpage into a desktop app with Rust. 🤱🏻 利用 Rust 轻松构建轻量级多端桌面应用。",
5
5
  "engines": {
6
6
  "node": ">=16.0.0"
@@ -34,15 +34,13 @@
34
34
  "build": "npm run tauri build --",
35
35
  "build:debug": "npm run tauri build -- --debug",
36
36
  "build:mac": "npm run tauri build -- --target universal-apple-darwin",
37
- "build:config": "chmod +x script/app_config.mjs && node script/app_config.mjs",
37
+ "build:config": "chmod +x scripts/configure-tauri.mjs && node scripts/configure-tauri.mjs",
38
38
  "analyze": "cd src-tauri && cargo bloat --release --crates",
39
39
  "tauri": "tauri",
40
- "cli": "rollup -c rollup.config.js --watch",
41
- "cli:dev": "cross-env NODE_ENV=development rollup -c rollup.config.js -w",
42
- "cli:build": "cross-env NODE_ENV=production rollup -c rollup.config.js",
43
- "test": "npm run cli:build && PAKE_CREATE_APP=1 node tests/index.js",
44
- "format": "prettier --write . --ignore-unknown && cd src-tauri && cargo fmt --verbose",
45
- "hooks:setup": "bash .githooks/setup.sh",
40
+ "cli": "cross-env NODE_ENV=development rollup -c -w",
41
+ "cli:build": "cross-env NODE_ENV=production rollup -c",
42
+ "test": "npm run cli:build && cross-env PAKE_CREATE_APP=1 node tests/index.js",
43
+ "format": "prettier --write . --ignore-unknown && find tests -name '*.js' -exec sed -i '' 's/[[:space:]]*$//' {} \\; && cd src-tauri && cargo fmt --verbose",
46
44
  "prepublishOnly": "npm run cli:build"
47
45
  },
48
46
  "type": "module",
@@ -10,11 +10,7 @@ index = "https://rsproxy.cn/crates.io-index"
10
10
  git-fetch-with-cli = true
11
11
 
12
12
  [env]
13
- # Set deployment target for macOS compatibility with beta versions
14
- MACOSX_DEPLOYMENT_TARGET = "14.0"
15
-
16
- [target.'cfg(target_os = "macos")']
17
- # macOS specific configuration
18
- rustflags = [
19
- "-C", "link-arg=-mmacosx-version-min=14.0"
20
- ]
13
+ # Fix for macOS 26 Beta compatibility issues
14
+ # Forces use of compatible SDK when building on macOS 26 Beta
15
+ MACOSX_DEPLOYMENT_TARGET = "15.5"
16
+ SDKROOT = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "windows": [
3
3
  {
4
- "url": "https://tw93.fun",
4
+ "url": "https://github.com",
5
5
  "url_type": "web",
6
- "hide_title_bar": false,
6
+ "hide_title_bar": true,
7
7
  "fullscreen": false,
8
8
  "width": 1200,
9
- "height": 780,
9
+ "height": 800,
10
10
  "resizable": true,
11
11
  "always_on_top": false,
12
12
  "dark_mode": false,
@@ -23,7 +23,7 @@
23
23
  "windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
24
24
  },
25
25
  "system_tray": {
26
- "macos": true,
26
+ "macos": false,
27
27
  "linux": true,
28
28
  "windows": true
29
29
  },
@@ -1,6 +1,6 @@
1
1
  {
2
- "productName": "Twi",
3
- "identifier": "com.pake.bebe89",
2
+ "productName": "GitHubMultiArch",
3
+ "identifier": "com.pake.3097fc",
4
4
  "version": "1.0.0",
5
5
  "app": {
6
6
  "withGlobalTauri": true
@@ -10,15 +10,15 @@
10
10
  },
11
11
  "bundle": {
12
12
  "icon": [
13
- "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-99301-geMsHaoeoBvZ/converted-icons/twi.icns"
13
+ "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-59730-cMwk5THmpqtm/converted-icons/githubmultiarch.icns"
14
14
  ],
15
15
  "active": true,
16
16
  "macOS": {},
17
17
  "targets": [
18
- "dmg"
18
+ "app"
19
19
  ],
20
20
  "resources": [
21
- "icons/twi.icns"
21
+ "icons/githubmultiarch.icns"
22
22
  ]
23
23
  }
24
24
  }
@@ -5,10 +5,7 @@
5
5
  "active": true,
6
6
  "linux": {
7
7
  "deb": {
8
- "depends": ["curl", "wget"],
9
- "files": {
10
- "/usr/share/applications/com-pake-weekly.desktop": "assets/com-pake-weekly.desktop"
11
- }
8
+ "depends": ["curl", "wget"]
12
9
  }
13
10
  },
14
11
  "targets": ["deb", "appimage"]
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "bundle": {
3
3
  "icon": [
4
- "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-99301-geMsHaoeoBvZ/converted-icons/twi.icns"
4
+ "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-59730-cMwk5THmpqtm/converted-icons/githubmultiarch.icns"
5
5
  ],
6
6
  "active": true,
7
7
  "macOS": {},
8
8
  "targets": [
9
- "dmg"
9
+ "app"
10
10
  ],
11
11
  "resources": [
12
- "icons/twi.icns"
12
+ "icons/githubmultiarch.icns"
13
13
  ]
14
14
  }
15
15
  }
@@ -28,11 +28,7 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
28
28
  serde_json::to_string(&window_config).unwrap()
29
29
  );
30
30
 
31
- let window_title = window_config
32
- .title
33
- .as_ref()
34
- .map(|t| t.as_str())
35
- .unwrap_or("");
31
+ let window_title = window_config.title.as_deref().unwrap_or("");
36
32
 
37
33
  let mut window_builder = WebviewWindowBuilder::new(app, "pake", url)
38
34
  .title(window_title)
@@ -5,10 +5,7 @@
5
5
  "active": true,
6
6
  "linux": {
7
7
  "deb": {
8
- "depends": ["curl", "wget"],
9
- "files": {
10
- "/usr/share/applications/com-pake-weekly.desktop": "assets/com-pake-weekly.desktop"
11
- }
8
+ "depends": ["curl", "wget"]
12
9
  }
13
10
  },
14
11
  "targets": ["deb", "appimage"]