diff options
author | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
commit | ae187b6d75c8079da0be1dc288613bad8466fe61 (patch) | |
tree | 5ea0d34185a2270f29ffaa65e1f5258028d7d5d0 /desktop/node_modules/rcedit/lib | |
download | mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.gz mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.bz2 mist-ae187b6d75c8079da0be1dc288613bad8466fe61.zip |
Initial commit
Diffstat (limited to 'desktop/node_modules/rcedit/lib')
-rw-r--r-- | desktop/node_modules/rcedit/lib/index.d.ts | 79 | ||||
-rw-r--r-- | desktop/node_modules/rcedit/lib/rcedit.js | 43 |
2 files changed, 122 insertions, 0 deletions
diff --git a/desktop/node_modules/rcedit/lib/index.d.ts b/desktop/node_modules/rcedit/lib/index.d.ts new file mode 100644 index 0000000..bc657ad --- /dev/null +++ b/desktop/node_modules/rcedit/lib/index.d.ts @@ -0,0 +1,79 @@ +/** + * Runs the `rcedit` Windows binary (via Wine on macOS/Linux) to modify the metadata of a + * Windows executable. + * + * @param exePath - the path to the Windows executable to be modified + * @param options - metadata used to update the Windows executable + */ +declare function rcedit (exePath: string, options: rcedit.Options): Promise<void> + +/* eslint-disable-next-line no-redeclare */ +declare namespace rcedit { + /** See [MSDN](https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/deployment/trustinfo-element-clickonce-application?view=vs-2015#requestedexecutionlevel) for details. */ + type RequestedExecutionLevel = 'asInvoker' | 'highestAvailable' | 'requireAdministrator' + /** + * Basic user-supplied metadata embedded in the application. Docstrings are copied from MSDN. + * + * See [MSDN](https://docs.microsoft.com/en-us/windows/win32/menurc/stringfileinfo-block) for details. + */ + interface VersionStringOptions { + /** Additional information that should be displayed for diagnostic purposes. */ + Comments?: string + /** Company that produced the executable. */ + CompanyName?: string + /** File description to be presented to users. */ + FileDescription?: string + /** Internal name of the file. Usually, this string should be the original filename, without the extension. */ + InternalFilename?: string + /** Copyright notices that apply, including the full text of all notices, legal symbols, copyright dates, etc. */ + LegalCopyright?: string + /** Trademarks and registered trademarks, including the full text of all notices, legal symbols, trademark numbers, etc. */ + LegalTrademarks1?: string + /** Trademarks and registered trademarks, including the full text of all notices, legal symbols, trademark numbers, etc. */ + LegalTrademarks2?: string + /** Original name of the file, not including a path. */ + OriginalFilename?: string + /** Name of the product with which the file is distributed. */ + ProductName?: string + } + /** + * Resource strings. See [string table](https://docs.microsoft.com/en-us/windows/win32/menurc/stringtable-resource) + * for details. + */ + interface ResourceStrings { + [n: number]: string + } + /** + * EXE metadata that can be changed. + */ + interface Options { + /** The metadata within a version-information resource. */ + 'version-string'?: VersionStringOptions + /** + * See [MSDN](https://docs.microsoft.com/en-us/windows/win32/msi/version) for the version format. + */ + 'file-version'?: string + /** + * See [MSDN](https://docs.microsoft.com/en-us/windows/win32/msi/version) for the version format. + */ + 'product-version'?: string + /** + * Absolute path to the [ICO-formatted icon](https://en.wikipedia.org/wiki/ICO_(file_format)) + * to set as the application's icon. + */ + icon?: string + /** See [MSDN](https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/deployment/trustinfo-element-clickonce-application?view=vs-2015#requestedexecutionlevel) for details. */ + 'requested-execution-level'?: RequestedExecutionLevel + /** + * The path to the [application manifest](https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests) + * XML that is to be embedded in the EXE. + */ + 'application-manifest'?: string + /** + * Set resource strings. + */ + 'resource-string'?: ResourceStrings + } +} + +export = rcedit diff --git a/desktop/node_modules/rcedit/lib/rcedit.js b/desktop/node_modules/rcedit/lib/rcedit.js new file mode 100644 index 0000000..a7b0a72 --- /dev/null +++ b/desktop/node_modules/rcedit/lib/rcedit.js @@ -0,0 +1,43 @@ +const { canRunWindowsExeNatively, is64BitArch, spawnExe } = require('cross-spawn-windows-exe') +const path = require('path') + +const pairSettings = ['version-string', 'resource-string'] +const singleSettings = ['file-version', 'product-version', 'icon', 'requested-execution-level'] +const noPrefixSettings = ['application-manifest'] + +module.exports = async (exe, options) => { + const rceditExe = is64BitArch(process.arch) ? 'rcedit-x64.exe' : 'rcedit.exe' + const rcedit = path.resolve(__dirname, '..', 'bin', rceditExe) + const args = [exe] + + for (const name of pairSettings) { + if (options[name]) { + for (const [key, value] of Object.entries(options[name])) { + args.push(`--set-${name}`, key, value) + } + } + } + + for (const name of singleSettings) { + if (options[name]) { + args.push(`--set-${name}`, options[name]) + } + } + + for (const name of noPrefixSettings) { + if (options[name]) { + args.push(`--${name}`, options[name]) + } + } + + const spawnOptions = { + env: { ...process.env } + } + + if (!canRunWindowsExeNatively()) { + // Suppress "fixme:" stderr log messages + spawnOptions.env.WINEDEBUG = '-all' + } + + await spawnExe(rcedit, args, spawnOptions) +} |