* refactor: replace afterPack script with beforePack and remove after-pack.js file - Updated electron-builder configuration to use beforePack instead of afterPack. - Removed the after-pack.js script as its functionality is no longer needed. * refactor: streamline filter logic for architecture-specific packages in before-pack script - Consolidated platform-specific filter conditions for arm64 and x64 architectures. - Improved readability and maintainability by using arrays to manage filters for different architectures. - Ensured that the correct filters are applied based on the architecture during the packaging process. * chore: remove npm build commands from CI workflows - Eliminated unnecessary `yarn build:npm` commands from the nightly build and release workflows for Linux, macOS, and Windows. - Streamlined the build process by focusing on platform-specific build commands. * delete build npm * refactor: enhance architecture-specific package management in before-pack script - Updated the before-pack script to include additional architecture-specific packages for arm64 and x64. - Improved the organization of package filters and streamlined the logic for handling different architectures during the packaging process. - Ensured that the correct filters are applied based on the architecture, enhancing the build process for various platforms. * docs: clarify comment on prebuild binaries in before-pack script * format code * chore: add afterPack script to electron-builder configuration - Included afterPack script in electron-builder.yml to enhance the packaging process. - This addition allows for post-packaging tasks to be executed, improving build automation. * chore: update macOS entitlements to disable library validation - Added the key `com.apple.security.cs.disable-library-validation` to the entitlements file to enhance security settings for macOS builds. * chore: remove unused package for win32 arm64 architecture - Deleted the `@strongtz/win32-arm64-msvc` package from `package.json` and `yarn.lock` as it is no longer needed. - Updated the `before-pack.js` script to improve architecture-specific package management by refining filter logic and ensuring correct package downloads based on architecture. - Enhanced the `downloadNpmPackage` function to use Node.js streams for downloading and extracting packages, improving efficiency and error handling.
65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const os = require('os')
|
|
const zlib = require('zlib')
|
|
const tar = require('tar')
|
|
const { pipeline } = require('stream/promises')
|
|
|
|
async function downloadNpmPackage(packageName, url) {
|
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'npm-download-'))
|
|
const targetDir = path.join('./node_modules/', packageName)
|
|
const filename = path.join(tempDir, packageName.replace('/', '-') + '.tgz')
|
|
const extractDir = path.join(tempDir, 'extract')
|
|
|
|
// Skip if directory already exists
|
|
if (fs.existsSync(targetDir)) {
|
|
console.log(`${targetDir} already exists, skipping download...`)
|
|
return
|
|
}
|
|
|
|
try {
|
|
console.log(`Downloading ${packageName}...`, url)
|
|
|
|
// Download file using fetch API
|
|
const response = await fetch(url)
|
|
if (!response.ok) {
|
|
throw new Error(`HTTP error! status: ${response.status}`)
|
|
}
|
|
|
|
const fileStream = fs.createWriteStream(filename)
|
|
await pipeline(response.body, fileStream)
|
|
|
|
console.log(`Extracting ${filename}...`)
|
|
|
|
// Create extraction directory
|
|
fs.mkdirSync(extractDir, { recursive: true })
|
|
|
|
// Extract tar.gz file using Node.js streams
|
|
await pipeline(fs.createReadStream(filename), zlib.createGunzip(), tar.extract({ cwd: extractDir }))
|
|
|
|
// Remove the downloaded file
|
|
fs.rmSync(filename, { force: true })
|
|
|
|
// Create target directory
|
|
fs.mkdirSync(targetDir, { recursive: true })
|
|
|
|
// Move extracted package contents to target directory
|
|
const packageDir = path.join(extractDir, 'package')
|
|
if (fs.existsSync(packageDir)) {
|
|
fs.cpSync(packageDir, targetDir, { recursive: true })
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error processing ${packageName}: ${error.message}`)
|
|
throw error
|
|
} finally {
|
|
// Clean up temp directory
|
|
if (fs.existsSync(tempDir)) {
|
|
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
downloadNpmPackage
|
|
}
|