pake-cli 2.3.8 → 2.4.0-beta
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/cli.js +23 -12
- package/dist/dev.js +644 -639
- package/dist/dev.js.map +1 -1
- package/package.json +1 -1
- package/src-tauri/.pake/pake.json +29 -0
- package/src-tauri/.pake/tauri.conf.json +75 -0
- package/src-tauri/.pake/tauri.macos.conf.json +29 -0
- package/src-tauri/pake.json +4 -1
- package/src-tauri/rust_proxy.toml +1 -5
- package/src-tauri/src/app/config.rs +7 -4
- package/src-tauri/src/app/menu.rs +1 -1
- package/src-tauri/src/app/window.rs +7 -6
- package/src-tauri/src/inject/event.js +11 -9
- package/src-tauri/src/inject/style.js +1 -1
- package/src-tauri/src/main.rs +26 -4
- package/src-tauri/src/util.rs +3 -0
- package/src-tauri/.cargo/config.toml +0 -10
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/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 transparent: false,\n userAgent: '',\n showMenu: false,\n showSystemTray: true,\n multiArch: false,\n targets: 'deb',\n iterCopyFile: false,\n systemTrayIcon: '',\n debug: false,\n inject: [],\n safeDomain: [],\n};\n\n// Just for cli development\nexport const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & {url: string} = {\n ...DEFAULT_PAKE_OPTIONS,\n url: 'https://weread.qq.com',\n name: 'WeRead',\n safeDomain:['weread.qq.com'],\n transparent: 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 = process.env.NODE_ENV === 'development' ? path.join(npmDirectory, 'src-tauri', '.pake') : path.join(npmDirectory, 'src-tauri');","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.createHash('md5').update(url).digest('hex').substring(0, 6);\n return `com.pake.${postFixHash}`;\n}\n\nexport async function promptText(message: string, initial?: string): 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 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';\n\nexport async function handleIcon(options: PakeAppOptions) {\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 logger.warn('✼ No icon given, default in use. For a custom icon, use --icon option.');\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\nexport async function downloadIcon(iconUrl: string) {\n const spinner = getSpinner('Downloading icon...');\n try {\n const iconResponse = await axios.get(iconUrl, { responseType: 'arraybuffer' });\n const iconData = await iconResponse.data;\n\n if (!iconData) {\n return null;\n }\n\n const fileDetails = await fileTypeFromBuffer(iconData);\n if (!fileDetails) {\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(`${npmDirectory}/src-tauri/${iconPath}`, iconData);\n } else {\n await fsExtra.outputFile(iconPath, iconData);\n }\n await fsExtra.outputFile(iconPath, iconData);\n spinner.succeed(chalk.green('Icon downloaded successfully!'));\n return iconPath;\n } catch (error) {\n spinner.fail(chalk.red('Icon download failed!'));\n if (error.response && error.response.status === 404) {\n return null;\n }\n throw error;\n }\n}\n","import psl from 'psl';\nimport isUrl from 'is-url';\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\n if (isUrl(urlWithProtocol)) {\n return urlWithProtocol;\n } else {\n throw new Error(`Your url \"${urlWithProtocol}\" is invalid`);\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]+$/,\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 if (!isValidName(name, platform)) {\n const LINUX_NAME_ERROR = `✕ name should only include lowercase letters, numbers, and dashes, and must contain at least one lowercase letter. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;\n const DEFAULT_NAME_ERROR = `✕ Name should only include letters and numbers, and must contain at least one letter. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead.`;\n const errorMsg = 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);\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 tauri: {\n ...CommonConf.tauri,\n bundle: platformConfig.tauri.bundle,\n },\n package: CommonConf.package,\n build: CommonConf.build,\n pake: pakeConf,\n};\n\nexport default tauriConfig;\n","import shelljs from 'shelljs';\nimport { npmDirectory } from './dir';\n\nexport function shellExec(command: string) {\n return new Promise<number>((resolve, reject) => {\n shelljs.exec(command, { async: true, silent: false, cwd: npmDirectory }, code => {\n if (code === 0) {\n resolve(0);\n } else {\n reject(new Error(`${code}`));\n }\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 shelljs from 'shelljs';\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 = 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(IS_WIN ? rustInstallScriptForWindows : rustInstallScriptForMac);\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 return shelljs.exec('rustc --version', { silent: true }).code === 0;\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 \"window.addEventListener('DOMContentLoaded', (_event) => { const css = `\" + fileContent + \"`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });\";\n }\n \n return \"window.addEventListener('DOMContentLoaded', (_event) => { \" + fileContent + \" });\";\n });\n fs.writeFileSync(output, contents.join('\\n'));\n return files;\n}","import path from 'path';\nimport fsExtra from 'fs-extra';\n\nimport { npmDirectory } from '@/utils/dir';\nimport combineFiles from '@/utils/combine';\nimport logger from '@/options/logger';\nimport { PakeAppOptions, PlatformMap } from '@/types';\nimport { tauriConfigDirectory } from '@/utils/dir';\n\nexport async function mergeConfig(url: string, options: PakeAppOptions, tauriConf: any) {\n const {\n width,\n height,\n fullscreen,\n transparent,\n userAgent,\n showMenu,\n showSystemTray,\n systemTrayIcon,\n iterCopyFile,\n identifier,\n name,\n resizable = true,\n inject,\n safeDomain,\n } = options;\n\n const { platform } = process;\n\n // Set Windows parameters.\n const tauriConfWindowOptions = {\n width,\n height,\n fullscreen,\n transparent,\n resizable,\n };\n Object.assign(tauriConf.pake.windows[0], { url, ...tauriConfWindowOptions });\n\n tauriConf.package.productName = name;\n tauriConf.tauri.bundle.identifier = identifier;\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 (!iterCopyFile) {\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 const filesToCopyBack = ['cli.js', 'about_pake.html'];\n await Promise.all(\n filesToCopyBack.map(file => fsExtra.copy(path.join(distBakDir, file), path.join(distDir, file))),\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 // Set the secure domain for calling window.__TAURI__ to the application domain that has been set.\n tauriConf.tauri.security.dangerousRemoteDomainIpcAccess = [\n {\n domain: new URL(url).hostname,\n windows: ['pake'],\n enableTauriAPI: true,\n },\n ];\n }\n\n if (safeDomain.length > 0) {\n tauriConf.tauri.security.dangerousRemoteDomainIpcAccess = [\n ...tauriConf.tauri.security.dangerousRemoteDomainIpcAccess,\n ...safeDomain.map(domain => ({\n domain,\n windows: ['pake'],\n enableTauriAPI: true,\n })),\n ];\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.menu[currentPlatform] = showMenu;\n tauriConf.pake.system_tray[currentPlatform] = showSystemTray;\n\n // Processing targets are currently only open to Linux.\n if (platform === 'linux') {\n delete tauriConf.tauri.bundle.deb.files;\n const validTargets = ['all', 'deb', 'appimage'];\n if (validTargets.includes(options.targets)) {\n tauriConf.tauri.bundle.targets = options.targets === 'all' ? ['deb', 'appimage'] : [options.targets];\n } else {\n logger.warn(`✼ The target must be one of ${validTargets.join(', ')}, the default 'deb' will be used.`);\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.tauri.bundle.icon = [iconInfo.defaultIcon];\n } else {\n const iconPath = path.join(npmDirectory, 'src-tauri/', iconInfo.path);\n tauriConf.tauri.bundle.resources = [iconInfo.path];\n await fsExtra.copy(options.icon, iconPath);\n }\n\n if (updateIconPath) {\n tauriConf.tauri.bundle.icon = [options.icon];\n } else {\n logger.warn(`✼ Icon will remain as default.`);\n }\n } else {\n logger.warn('✼ Custom icon path may be invalid, default icon will be used instead.');\n tauriConf.tauri.bundle.icon = [iconInfo.defaultIcon];\n }\n\n // Set tray icon path.\n let trayIconPath = platform === 'darwin' ? 'png/icon_512.png' : tauriConf.tauri.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(npmDirectory, `src-tauri/png/${name.toLowerCase()}${iconExt}`);\n trayIconPath = `png/${name.toLowerCase()}${iconExt}`;\n await fsExtra.copy(systemTrayIcon, trayIcoPath);\n } else {\n logger.warn(`✼ System tray icon must be .ico or .png, but you provided ${iconExt}.`);\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.tauri.systemTray.iconPath = trayIconPath;\n const injectFilePath = path.join(npmDirectory, `src-tauri/src/inject/custom.js`);\n // inject js or css files\n if (inject?.length > 0) {\n if (!inject.every(item => item.endsWith('.css') || item.endsWith('.js'))) {\n logger.error('The injected file must be in either CSS or JS format.');\n return;\n }\n const files = inject.map(filepath => path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath));\n tauriConf.pake.inject = files;\n await combineFiles(files, injectFilePath);\n } else {\n tauriConf.pake.inject = [];\n await fsExtra.writeFile(injectFilePath, '');\n }\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 const configPath = path.join(tauriConfigDirectory, platformConfigPaths[platform]);\n\n const bundleConf = { tauri: { bundle: tauriConf.tauri.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 delete tauriConf2.tauri.bundle;\n if (process.env.NODE_ENV === 'development') {\n tauriConf2.tauri.bundle = bundleConf.tauri.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/v1/guides/getting-started/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');\n await fsExtra.ensureDir(rustProjectDir);\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(`cd \"${npmDirectory}\" && npm install --registry=https://registry.npmmirror.com`);\n } else {\n await shellExec(`cd \"${npmDirectory}\" && npm install`);\n }\n spinner.succeed(chalk.green('Package installed!'));\n if (!tauriTargetPathExists) {\n logger.warn('✼ 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 // the debug option should support `--debug` and `--release`\n return this.options.debug ? 'npm run build:debug' : 'npm run build';\n }\n\n protected getBasePath(): string {\n return 'src-tauri/target/release/bundle/';\n }\n\n protected getBuildAppPath(npmDirectory: string, fileName: string, fileType: string): string {\n return path.join(npmDirectory, this.getBasePath(), fileType.toLowerCase(), `${fileName}.${fileType}`);\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 this.options.targets = 'dmg';\n }\n\n getFileName(): string {\n const { name } = this.options;\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.package.version}_${arch}`;\n }\n\n protected getBuildCommand(): string {\n return this.options.multiArch ? 'npm run build:mac' : 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.tauri.bundle.windows.wix.language[0];\n return `${name}_${tauriConfig.package.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(): string {\n const { name } = this.options;\n const arch = process.arch === 'x64' ? 'amd64' : process.arch;\n return `${name}_${tauriConfig.package.version}_${arch}`;\n }\n\n // Customize it, considering that there are all targets.\n async build(url: string) {\n const targetTypes = ['deb', 'appimage'];\n for (const target of targetTypes) {\n if (this.options.targets === target || this.options.targets === 'all') {\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<string, new (options: PakeAppOptions) => BaseBuilder> = {\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(DEFAULT_DEV_PAKE_OPTIONS, DEFAULT_DEV_PAKE_OPTIONS.url);\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();"],"names":["platform","handleInputOptions"],"mappings":"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"}
|
|
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/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 transparent: false,\n alwaysOnTop: false,\n disabledWebShortcuts: false,\n activationShortcut: '',\n userAgent: '',\n showSystemTray: false,\n multiArch: false,\n targets: 'deb',\n iterCopyFile: false,\n systemTrayIcon: '',\n debug: false,\n inject: [],\n safeDomain: [],\n};\n\n// Just for cli development\nexport const DEFAULT_DEV_PAKE_OPTIONS: PakeCliOptions & {url: string} = {\n ...DEFAULT_PAKE_OPTIONS,\n url: 'https://weread.qq.com',\n name: 'WeRead',\n safeDomain:['weread.qq.com'],\n transparent: 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 = process.env.NODE_ENV === 'development' ? path.join(npmDirectory, 'src-tauri', '.pake') : path.join(npmDirectory, 'src-tauri');","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.createHash('md5').update(url).digest('hex').substring(0, 6);\n return `com.pake.${postFixHash}`;\n}\n\nexport async function promptText(message: string, initial?: string): 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 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';\n\nexport async function handleIcon(options: PakeAppOptions) {\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 logger.warn('✼ No icon given, default in use. For a custom icon, use --icon option.');\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\nexport async function downloadIcon(iconUrl: string) {\n const spinner = getSpinner('Downloading icon...');\n try {\n const iconResponse = await axios.get(iconUrl, { responseType: 'arraybuffer' });\n const iconData = await iconResponse.data;\n\n if (!iconData) {\n return null;\n }\n\n const fileDetails = await fileTypeFromBuffer(iconData);\n if (!fileDetails) {\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(`${npmDirectory}/src-tauri/${iconPath}`, iconData);\n } else {\n await fsExtra.outputFile(iconPath, iconData);\n }\n await fsExtra.outputFile(iconPath, iconData);\n spinner.succeed(chalk.green('Icon downloaded successfully!'));\n return iconPath;\n } catch (error) {\n spinner.fail(chalk.red('Icon download failed!'));\n if (error.response && error.response.status === 404) {\n return null;\n }\n throw error;\n }\n}\n","import psl from 'psl';\nimport isUrl from 'is-url';\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\n if (isUrl(urlWithProtocol)) {\n return urlWithProtocol;\n } else {\n throw new Error(`Your url \"${urlWithProtocol}\" is invalid`);\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 if (!isValidName(name, platform)) {\n const LINUX_NAME_ERROR = `✕ name should only include lowercase letters, numbers, and dashes, and must contain at least one lowercase letter. Examples: com-123-xxx, 123pan, pan123, weread, we-read.`;\n const DEFAULT_NAME_ERROR = `✕ Name should only include letters and numbers, and dashes (dashes must not at the beginning), and must contain at least one letter. Examples: 123pan, 123Pan, Pan123, weread, WeRead, WERead, we-read.`;\n const errorMsg = 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);\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 tauri: {\n ...CommonConf.tauri,\n bundle: platformConfig.tauri.bundle,\n },\n package: CommonConf.package,\n build: CommonConf.build,\n pake: pakeConf,\n};\n\nexport default tauriConfig;\n","import shelljs from 'shelljs';\nimport { npmDirectory } from './dir';\n\nexport function shellExec(command: string) {\n return new Promise<number>((resolve, reject) => {\n shelljs.exec(command, { async: true, silent: false, cwd: npmDirectory }, code => {\n if (code === 0) {\n resolve(0);\n } else {\n reject(new Error(`${code}`));\n }\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 > 500;\n } catch (error) {\n logger.debug(`ping ${domain} failed!`);\n return true;\n }\n}\n\nexport { isChinaDomain, isChinaIP };\n","import chalk from 'chalk';\nimport shelljs from 'shelljs';\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 = 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(IS_WIN ? rustInstallScriptForWindows : rustInstallScriptForMac);\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 return shelljs.exec('rustc --version', { silent: true }).code === 0;\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 \"window.addEventListener('DOMContentLoaded', (_event) => { const css = `\" + fileContent + \"`; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); });\";\n }\n \n return \"window.addEventListener('DOMContentLoaded', (_event) => { \" + fileContent + \" });\";\n });\n fs.writeFileSync(output, contents.join('\\n'));\n return files;\n}","import path from 'path';\nimport fsExtra from 'fs-extra';\n\nimport { npmDirectory } from '@/utils/dir';\nimport combineFiles from '@/utils/combine';\nimport logger from '@/options/logger';\nimport { PakeAppOptions, PlatformMap } from '@/types';\nimport { tauriConfigDirectory } from '@/utils/dir';\n\nexport async function mergeConfig(url: string, options: PakeAppOptions, tauriConf: any) {\n const {\n width,\n height,\n fullscreen,\n transparent,\n alwaysOnTop,\n disabledWebShortcuts,\n userAgent,\n showSystemTray,\n systemTrayIcon,\n iterCopyFile,\n identifier,\n name,\n resizable = true,\n inject,\n safeDomain,\n } = options;\n\n const { platform } = process;\n\n // Set Windows parameters.\n const tauriConfWindowOptions = {\n width,\n height,\n fullscreen,\n transparent,\n alwaysOnTop,\n disabledWebShortcuts,\n resizable,\n };\n Object.assign(tauriConf.pake.windows[0], { url, ...tauriConfWindowOptions });\n\n tauriConf.package.productName = name;\n tauriConf.tauri.bundle.identifier = identifier;\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 (!iterCopyFile) {\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 => fsExtra.copy(path.join(distBakDir, file), path.join(distDir, file))),\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 // Set the secure domain for calling window.__TAURI__ to the application domain that has been set.\n tauriConf.tauri.security.dangerousRemoteDomainIpcAccess = [\n {\n domain: new URL(url).hostname,\n windows: ['pake'],\n enableTauriAPI: true,\n },\n ];\n }\n\n if (safeDomain.length > 0) {\n tauriConf.tauri.security.dangerousRemoteDomainIpcAccess = [\n ...tauriConf.tauri.security.dangerousRemoteDomainIpcAccess,\n ...safeDomain.map(domain => ({\n domain,\n windows: ['pake'],\n enableTauriAPI: true,\n })),\n ];\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.tauri.bundle.deb.files;\n const validTargets = ['all', 'deb', 'appimage'];\n if (validTargets.includes(options.targets)) {\n tauriConf.tauri.bundle.targets = options.targets === 'all' ? ['deb', 'appimage'] : [options.targets];\n } else {\n logger.warn(`✼ The target must be one of ${validTargets.join(', ')}, the default 'deb' will be used.`);\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.tauri.bundle.icon = [iconInfo.defaultIcon];\n } else {\n const iconPath = path.join(npmDirectory, 'src-tauri/', iconInfo.path);\n tauriConf.tauri.bundle.resources = [iconInfo.path];\n await fsExtra.copy(options.icon, iconPath);\n }\n\n if (updateIconPath) {\n tauriConf.tauri.bundle.icon = [options.icon];\n } else {\n logger.warn(`✼ Icon will remain as default.`);\n }\n } else {\n logger.warn('✼ Custom icon path may be invalid, default icon will be used instead.');\n tauriConf.tauri.bundle.icon = [iconInfo.defaultIcon];\n }\n\n // Set tray icon path.\n let trayIconPath = platform === 'darwin' ? 'png/icon_512.png' : tauriConf.tauri.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(npmDirectory, `src-tauri/png/${name.toLowerCase()}${iconExt}`);\n trayIconPath = `png/${name.toLowerCase()}${iconExt}`;\n await fsExtra.copy(systemTrayIcon, trayIcoPath);\n } else {\n logger.warn(`✼ System tray icon must be .ico or .png, but you provided ${iconExt}.`);\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.tauri.systemTray.iconPath = trayIconPath;\n const injectFilePath = path.join(npmDirectory, `src-tauri/src/inject/custom.js`);\n // inject js or css files\n if (inject?.length > 0) {\n if (!inject.every(item => item.endsWith('.css') || item.endsWith('.js'))) {\n logger.error('The injected file must be in either CSS or JS format.');\n return;\n }\n const files = inject.map(filepath => path.isAbsolute(filepath) ? filepath : path.join(process.cwd(), filepath));\n tauriConf.pake.inject = files;\n await combineFiles(files, injectFilePath);\n } else {\n tauriConf.pake.inject = [];\n await fsExtra.writeFile(injectFilePath, '');\n }\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 const configPath = path.join(tauriConfigDirectory, platformConfigPaths[platform]);\n\n const bundleConf = { tauri: { bundle: tauriConf.tauri.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 delete tauriConf2.tauri.bundle;\n if (process.env.NODE_ENV === 'development') {\n tauriConf2.tauri.bundle = bundleConf.tauri.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/v1/guides/getting-started/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 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(`cd \"${npmDirectory}\" && npm install --registry=https://registry.npmmirror.com`);\n } else {\n await shellExec(`cd \"${npmDirectory}\" && npm install`);\n }\n spinner.succeed(chalk.green('Package installed!'));\n if (!tauriTargetPathExists) {\n logger.warn('✼ 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 // the debug option should support `--debug` and `--release`\n return this.options.debug ? 'npm run build:debug' : 'npm run build';\n }\n\n protected getBasePath(): string {\n return 'src-tauri/target/release/bundle/';\n }\n\n protected getBuildAppPath(npmDirectory: string, fileName: string, fileType: string): string {\n return path.join(npmDirectory, this.getBasePath(), fileType.toLowerCase(), `${fileName}.${fileType}`);\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 this.options.targets = 'dmg';\n }\n\n getFileName(): string {\n const { name } = this.options;\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.package.version}_${arch}`;\n }\n\n protected getBuildCommand(): string {\n return this.options.multiArch ? 'npm run build:mac' : 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.tauri.bundle.windows.wix.language[0];\n return `${name}_${tauriConfig.package.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(): string {\n const { name } = this.options;\n const arch = process.arch === 'x64' ? 'amd64' : process.arch;\n return `${name}_${tauriConfig.package.version}_${arch}`;\n }\n\n // Customize it, considering that there are all targets.\n async build(url: string) {\n const targetTypes = ['deb', 'appimage'];\n for (const target of targetTypes) {\n if (this.options.targets === target || this.options.targets === 'all') {\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<string, new (options: PakeAppOptions) => BaseBuilder> = {\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(DEFAULT_DEV_PAKE_OPTIONS, DEFAULT_DEV_PAKE_OPTIONS.url);\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();"],"names":["platform","handleInputOptions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"windows": [
|
|
3
|
+
{
|
|
4
|
+
"url": "https://weread.qq.com",
|
|
5
|
+
"url_type": "web",
|
|
6
|
+
"transparent": true,
|
|
7
|
+
"fullscreen": false,
|
|
8
|
+
"width": 1200,
|
|
9
|
+
"height": 780,
|
|
10
|
+
"resizable": true,
|
|
11
|
+
"always_on_top": false,
|
|
12
|
+
"activation_shortcut": "",
|
|
13
|
+
"disabled_web_shortcuts": false,
|
|
14
|
+
"alwaysOnTop": false,
|
|
15
|
+
"disabledWebShortcuts": false
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"user_agent": {
|
|
19
|
+
"macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
|
|
20
|
+
"linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
|
|
21
|
+
"windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
|
|
22
|
+
},
|
|
23
|
+
"system_tray": {
|
|
24
|
+
"macos": false,
|
|
25
|
+
"linux": true,
|
|
26
|
+
"windows": true
|
|
27
|
+
},
|
|
28
|
+
"inject": []
|
|
29
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tauri": {
|
|
3
|
+
"security": {
|
|
4
|
+
"csp": null,
|
|
5
|
+
"dangerousRemoteDomainIpcAccess": [
|
|
6
|
+
{
|
|
7
|
+
"domain": "weread.qq.com",
|
|
8
|
+
"windows": [
|
|
9
|
+
"pake"
|
|
10
|
+
],
|
|
11
|
+
"enableTauriAPI": true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"domain": "weread.qq.com",
|
|
15
|
+
"windows": [
|
|
16
|
+
"pake"
|
|
17
|
+
],
|
|
18
|
+
"enableTauriAPI": true
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"updater": {
|
|
23
|
+
"active": false
|
|
24
|
+
},
|
|
25
|
+
"systemTray": {
|
|
26
|
+
"iconPath": "png/icon_512.png",
|
|
27
|
+
"iconAsTemplate": false
|
|
28
|
+
},
|
|
29
|
+
"allowlist": {
|
|
30
|
+
"all": true,
|
|
31
|
+
"fs": {
|
|
32
|
+
"all": true,
|
|
33
|
+
"scope": [
|
|
34
|
+
"$DOWNLOAD/*"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"bundle": {
|
|
39
|
+
"icon": [
|
|
40
|
+
"/Users/tw93/www/Pake/src-tauri/icons/icon.icns"
|
|
41
|
+
],
|
|
42
|
+
"identifier": "com.pake.bfde08",
|
|
43
|
+
"active": true,
|
|
44
|
+
"category": "DeveloperTool",
|
|
45
|
+
"copyright": "",
|
|
46
|
+
"externalBin": [],
|
|
47
|
+
"longDescription": "",
|
|
48
|
+
"macOS": {
|
|
49
|
+
"entitlements": null,
|
|
50
|
+
"exceptionDomain": "",
|
|
51
|
+
"frameworks": [],
|
|
52
|
+
"providerShortName": null,
|
|
53
|
+
"signingIdentity": null
|
|
54
|
+
},
|
|
55
|
+
"resources": [
|
|
56
|
+
"icons/weread.icns"
|
|
57
|
+
],
|
|
58
|
+
"shortDescription": "",
|
|
59
|
+
"targets": [
|
|
60
|
+
"dmg"
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"package": {
|
|
65
|
+
"productName": "WeRead",
|
|
66
|
+
"version": "1.0.0"
|
|
67
|
+
},
|
|
68
|
+
"build": {
|
|
69
|
+
"withGlobalTauri": true,
|
|
70
|
+
"devPath": "../dist",
|
|
71
|
+
"distDir": "../dist",
|
|
72
|
+
"beforeBuildCommand": "",
|
|
73
|
+
"beforeDevCommand": ""
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tauri": {
|
|
3
|
+
"bundle": {
|
|
4
|
+
"icon": [
|
|
5
|
+
"/Users/tw93/www/Pake/src-tauri/icons/icon.icns"
|
|
6
|
+
],
|
|
7
|
+
"identifier": "com.pake.bfde08",
|
|
8
|
+
"active": true,
|
|
9
|
+
"category": "DeveloperTool",
|
|
10
|
+
"copyright": "",
|
|
11
|
+
"externalBin": [],
|
|
12
|
+
"longDescription": "",
|
|
13
|
+
"macOS": {
|
|
14
|
+
"entitlements": null,
|
|
15
|
+
"exceptionDomain": "",
|
|
16
|
+
"frameworks": [],
|
|
17
|
+
"providerShortName": null,
|
|
18
|
+
"signingIdentity": null
|
|
19
|
+
},
|
|
20
|
+
"resources": [
|
|
21
|
+
"icons/weread.icns"
|
|
22
|
+
],
|
|
23
|
+
"shortDescription": "",
|
|
24
|
+
"targets": [
|
|
25
|
+
"dmg"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
package/src-tauri/pake.json
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
"windows": [
|
|
3
3
|
{
|
|
4
4
|
"url": "https://weread.qq.com",
|
|
5
|
+
"url_type": "web",
|
|
5
6
|
"transparent": true,
|
|
6
7
|
"fullscreen": false,
|
|
7
8
|
"width": 1200,
|
|
8
9
|
"height": 780,
|
|
9
10
|
"resizable": true,
|
|
10
|
-
"
|
|
11
|
+
"always_on_top": false,
|
|
12
|
+
"activation_shortcut": "",
|
|
13
|
+
"disabled_web_shortcuts": false
|
|
11
14
|
}
|
|
12
15
|
],
|
|
13
16
|
"user_agent": {
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
[source.crates-io]
|
|
2
|
-
|
|
3
|
-
replace-with = 'rsproxy'
|
|
4
|
-
|
|
2
|
+
replace-with = 'rsproxy-sparse'
|
|
5
3
|
[source.rsproxy]
|
|
6
4
|
registry = "https://rsproxy.cn/crates.io-index"
|
|
7
5
|
[source.rsproxy-sparse]
|
|
8
6
|
registry = "sparse+https://rsproxy.cn/index/"
|
|
9
|
-
|
|
10
7
|
[registries.rsproxy]
|
|
11
8
|
index = "https://rsproxy.cn/crates.io-index"
|
|
12
|
-
|
|
13
9
|
[net]
|
|
14
10
|
git-fetch-with-cli = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
use serde::Deserialize;
|
|
1
|
+
use serde::{Deserialize, Serialize};
|
|
2
2
|
|
|
3
|
-
#[derive(Debug, Deserialize)]
|
|
3
|
+
#[derive(Debug, Serialize, Deserialize)]
|
|
4
4
|
pub struct WindowConfig {
|
|
5
5
|
pub url: String,
|
|
6
6
|
pub transparent: bool,
|
|
@@ -9,9 +9,12 @@ pub struct WindowConfig {
|
|
|
9
9
|
pub height: f64,
|
|
10
10
|
pub resizable: bool,
|
|
11
11
|
pub url_type: String,
|
|
12
|
+
pub always_on_top: bool,
|
|
13
|
+
pub disabled_web_shortcuts: bool,
|
|
14
|
+
pub activation_shortcut: String,
|
|
12
15
|
}
|
|
13
16
|
|
|
14
|
-
#[derive(Debug, Deserialize)]
|
|
17
|
+
#[derive(Debug, Serialize, Deserialize)]
|
|
15
18
|
pub struct PlatformSpecific<T> {
|
|
16
19
|
pub macos: T,
|
|
17
20
|
pub linux: T,
|
|
@@ -43,7 +46,7 @@ where
|
|
|
43
46
|
pub type UserAgent = PlatformSpecific<String>;
|
|
44
47
|
pub type FunctionON = PlatformSpecific<bool>;
|
|
45
48
|
|
|
46
|
-
#[derive(Debug, Deserialize)]
|
|
49
|
+
#[derive(Debug, Serialize, Deserialize)]
|
|
47
50
|
pub struct PakeConfig {
|
|
48
51
|
pub windows: Vec<WindowConfig>,
|
|
49
52
|
pub user_agent: UserAgent,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
use tauri::{CustomMenuItem,Manager, SystemTray, SystemTrayEvent, SystemTrayMenu};
|
|
1
|
+
use tauri::{CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu};
|
|
2
2
|
use tauri_plugin_window_state::{AppHandleExt, StateFlags};
|
|
3
3
|
|
|
4
4
|
pub fn get_system_tray() -> SystemTray {
|
|
@@ -19,6 +19,11 @@ pub fn get_window(app: &mut App, config: PakeConfig, _data_dir: PathBuf) -> Wind
|
|
|
19
19
|
_ => panic!("url type can only be web or local"),
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
+
let config_script = format!(
|
|
23
|
+
"window.pakeConfig = {}",
|
|
24
|
+
serde_json::to_string(&window_config).unwrap()
|
|
25
|
+
);
|
|
26
|
+
|
|
22
27
|
let mut window_builder = WindowBuilder::new(app, "pake", url)
|
|
23
28
|
.title("")
|
|
24
29
|
.user_agent(user_agent)
|
|
@@ -27,18 +32,14 @@ pub fn get_window(app: &mut App, config: PakeConfig, _data_dir: PathBuf) -> Wind
|
|
|
27
32
|
.fullscreen(window_config.fullscreen)
|
|
28
33
|
.inner_size(window_config.width, window_config.height)
|
|
29
34
|
.disable_file_drop_handler()
|
|
35
|
+
.always_on_top(window_config.always_on_top)
|
|
36
|
+
.initialization_script(&config_script)
|
|
30
37
|
.initialization_script(include_str!("../inject/component.js"))
|
|
31
38
|
.initialization_script(include_str!("../inject/event.js"))
|
|
32
39
|
.initialization_script(include_str!("../inject/style.js"))
|
|
33
40
|
//This is necessary to allow for file injection by external developers for customization purposes.
|
|
34
41
|
.initialization_script(include_str!("../inject/custom.js"));
|
|
35
42
|
|
|
36
|
-
// For dynamic display of header styles
|
|
37
|
-
if window_config.transparent {
|
|
38
|
-
let transparent_script = "window.pakeWindowTitleTransparent = true;";
|
|
39
|
-
window_builder = window_builder.initialization_script(transparent_script);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
43
|
#[cfg(target_os = "macos")]
|
|
43
44
|
{
|
|
44
45
|
let title_bar_style = if window_config.transparent {
|
|
@@ -63,7 +63,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
63
63
|
const appWindow = tauri.window.appWindow;
|
|
64
64
|
const invoke = tauri.tauri.invoke;
|
|
65
65
|
|
|
66
|
-
if(!document.getElementById('pake-top-dom')){
|
|
66
|
+
if (!document.getElementById('pake-top-dom')) {
|
|
67
67
|
const topDom = document.createElement('div');
|
|
68
68
|
topDom.id = 'pake-top-dom';
|
|
69
69
|
document.body.appendChild(topDom);
|
|
@@ -88,14 +88,16 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
88
88
|
});
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
if (window['pakeConfig']?.disabled_web_shortcuts !== true) {
|
|
92
|
+
document.addEventListener('keyup', (event) => {
|
|
93
|
+
if (/windows|linux/i.test(navigator.userAgent) && event.ctrlKey) {
|
|
94
|
+
handleShortcut(event);
|
|
95
|
+
}
|
|
96
|
+
if (/macintosh|mac os x/i.test(navigator.userAgent) && event.metaKey) {
|
|
97
|
+
handleShortcut(event);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
99
101
|
|
|
100
102
|
// Collect blob urls to blob by overriding window.URL.createObjectURL
|
|
101
103
|
function collectUrlToBlobs() {
|
|
@@ -412,7 +412,7 @@ window.addEventListener('DOMContentLoaded', _event => {
|
|
|
412
412
|
}
|
|
413
413
|
`;
|
|
414
414
|
const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
|
|
415
|
-
if (window
|
|
415
|
+
if (window['pakeConfig']?.transparent && isMac) {
|
|
416
416
|
const topPaddingStyleElement = document.createElement('style');
|
|
417
417
|
topPaddingStyleElement.innerHTML = topPaddingCSS;
|
|
418
418
|
document.head.appendChild(topPaddingStyleElement);
|
package/src-tauri/src/main.rs
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#![cfg_attr(
|
|
2
|
-
all(not(debug_assertions), target_os = "windows"),
|
|
3
|
-
windows_subsystem = "windows"
|
|
2
|
+
all(not(debug_assertions), target_os = "windows"),
|
|
3
|
+
windows_subsystem = "windows"
|
|
4
4
|
)]
|
|
5
5
|
|
|
6
6
|
mod app;
|
|
7
7
|
mod util;
|
|
8
8
|
|
|
9
|
-
use app::{invoke,
|
|
9
|
+
use app::{invoke, menu, window};
|
|
10
10
|
use invoke::{download_file, download_file_by_binary};
|
|
11
11
|
use menu::{get_system_tray, system_tray_handle};
|
|
12
|
+
use tauri::{GlobalShortcutManager, Manager};
|
|
12
13
|
use tauri_plugin_window_state::Builder as windowStatePlugin;
|
|
13
14
|
use util::{get_data_dir, get_pake_config};
|
|
14
15
|
use window::get_window;
|
|
@@ -28,6 +29,9 @@ pub fn run_app() {
|
|
|
28
29
|
.on_system_tray_event(system_tray_handle);
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
// Save the value of toggle_app_shortcut before pake_config is moved
|
|
33
|
+
let activation_shortcut = pake_config.windows[0].activation_shortcut.clone();
|
|
34
|
+
|
|
31
35
|
tauri_app
|
|
32
36
|
.plugin(windowStatePlugin::default().build())
|
|
33
37
|
.plugin(tauri_plugin_oauth::init())
|
|
@@ -35,10 +39,28 @@ pub fn run_app() {
|
|
|
35
39
|
download_file,
|
|
36
40
|
download_file_by_binary
|
|
37
41
|
])
|
|
38
|
-
.setup(|app| {
|
|
42
|
+
.setup(move |app| {
|
|
39
43
|
let _window = get_window(app, pake_config, data_dir);
|
|
40
44
|
// Prevent initial shaking
|
|
41
45
|
_window.show().unwrap();
|
|
46
|
+
|
|
47
|
+
if !activation_shortcut.is_empty() {
|
|
48
|
+
let app_handle = app.app_handle().clone();
|
|
49
|
+
app_handle
|
|
50
|
+
.global_shortcut_manager()
|
|
51
|
+
.register(activation_shortcut.as_str(), move || {
|
|
52
|
+
let window = app_handle.get_window("pake").unwrap();
|
|
53
|
+
match window.is_visible().unwrap() {
|
|
54
|
+
true => window.hide().unwrap(),
|
|
55
|
+
false => {
|
|
56
|
+
window.show().unwrap();
|
|
57
|
+
window.set_focus().unwrap();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
.expect("Error registering global evoke shortcuts!");
|
|
62
|
+
}
|
|
63
|
+
|
|
42
64
|
Ok(())
|
|
43
65
|
})
|
|
44
66
|
.on_window_event(|event| {
|