You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.4 KiB
122 lines
4.4 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.nodePlatformToDartPlatform = nodePlatformToDartPlatform; |
|
exports.nodeArchToDartArch = nodeArchToDartArch; |
|
const extractZip = require("extract-zip"); |
|
const fs_1 = require("fs"); |
|
const p = require("path"); |
|
const tar_1 = require("tar"); |
|
const yargs_1 = require("yargs"); |
|
const pkg = require("../package.json"); |
|
const utils = require("./utils"); |
|
const argv = (0, yargs_1.default)(process.argv.slice(2)) |
|
.option('package', { |
|
type: 'string', |
|
description: 'Directory name under `npm` directory that contains optional dependencies.', |
|
demandOption: true, |
|
choices: Object.keys(pkg.optionalDependencies).map(name => name.split('sass-embedded-')[1]), |
|
}) |
|
.parseSync(); |
|
// Converts a Node-style platform name as returned by `process.platform` into a |
|
// name used by Dart Sass. Throws if the operating system is not supported by |
|
// Dart Sass Embedded. |
|
function nodePlatformToDartPlatform(platform) { |
|
switch (platform) { |
|
case 'android': |
|
return 'android'; |
|
case 'linux': |
|
case 'linux-musl': |
|
return 'linux'; |
|
case 'darwin': |
|
return 'macos'; |
|
case 'win32': |
|
return 'windows'; |
|
default: |
|
throw Error(`Platform ${platform} is not supported.`); |
|
} |
|
} |
|
// Converts a Node-style architecture name as returned by `process.arch` into a |
|
// name used by Dart Sass. Throws if the architecture is not supported by Dart |
|
// Sass Embedded. |
|
function nodeArchToDartArch(arch) { |
|
switch (arch) { |
|
case 'ia32': |
|
return 'ia32'; |
|
case 'x86': |
|
return 'ia32'; |
|
case 'x64': |
|
return 'x64'; |
|
case 'arm': |
|
return 'arm'; |
|
case 'arm64': |
|
return 'arm64'; |
|
case 'riscv64': |
|
return 'riscv64'; |
|
default: |
|
throw Error(`Architecture ${arch} is not supported.`); |
|
} |
|
} |
|
// Get the platform's file extension for archives. |
|
function getArchiveExtension(platform) { |
|
return platform === 'windows' ? '.zip' : '.tar.gz'; |
|
} |
|
// Downloads the release for `repo` located at `assetUrl`, then unzips it into |
|
// `outPath`. |
|
async function downloadRelease(options) { |
|
console.log(`Downloading ${options.repo} release asset.`); |
|
const response = await fetch(options.assetUrl, { |
|
redirect: 'follow', |
|
}); |
|
if (!response.ok) { |
|
throw Error(`Failed to download ${options.repo} release asset: ${response.statusText}`); |
|
} |
|
const releaseAsset = Buffer.from(await response.arrayBuffer()); |
|
console.log(`Unzipping ${options.repo} release asset to ${options.outPath}.`); |
|
await utils.cleanDir(p.join(options.outPath, options.repo)); |
|
const archiveExtension = options.assetUrl.endsWith('.zip') |
|
? '.zip' |
|
: '.tar.gz'; |
|
const zippedAssetPath = options.outPath + '/' + options.repo + archiveExtension; |
|
await fs_1.promises.writeFile(zippedAssetPath, releaseAsset); |
|
if (archiveExtension === '.zip') { |
|
await extractZip(zippedAssetPath, { |
|
dir: p.join(process.cwd(), options.outPath), |
|
}); |
|
} |
|
else { |
|
(0, tar_1.extract)({ |
|
file: zippedAssetPath, |
|
cwd: options.outPath, |
|
sync: true, |
|
}); |
|
} |
|
await fs_1.promises.unlink(zippedAssetPath); |
|
} |
|
void (async () => { |
|
try { |
|
const version = pkg['compiler-version']; |
|
if (version.endsWith('-dev')) { |
|
throw Error("Can't release optional packages for a -dev compiler version."); |
|
} |
|
const index = argv.package.lastIndexOf('-'); |
|
const nodePlatform = argv.package.substring(0, index); |
|
const nodeArch = argv.package.substring(index + 1); |
|
const dartPlatform = nodePlatformToDartPlatform(nodePlatform); |
|
const dartArch = nodeArchToDartArch(nodeArch); |
|
const isMusl = nodePlatform === 'linux-musl'; |
|
const outPath = p.join('npm', argv.package); |
|
await downloadRelease({ |
|
repo: 'dart-sass', |
|
assetUrl: 'https://github.com/sass/dart-sass/releases/download/' + |
|
`${version}/dart-sass-${version}-` + |
|
`${dartPlatform}-${dartArch}${isMusl ? '-musl' : ''}` + |
|
`${getArchiveExtension(dartPlatform)}`, |
|
outPath, |
|
}); |
|
} |
|
catch (error) { |
|
console.error(error); |
|
process.exitCode = 1; |
|
} |
|
})(); |
|
//# sourceMappingURL=prepare-optional-release.js.map
|