artifact-utils.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { ensureIsTruthyString, normalizeVersion } from './utils';
  2. const BASE_URL = 'https://github.com/electron/electron/releases/download/';
  3. const NIGHTLY_BASE_URL = 'https://github.com/electron/nightlies/releases/download/';
  4. export function getArtifactFileName(details) {
  5. ensureIsTruthyString(details, 'artifactName');
  6. if (details.isGeneric) {
  7. return details.artifactName;
  8. }
  9. ensureIsTruthyString(details, 'arch');
  10. ensureIsTruthyString(details, 'platform');
  11. ensureIsTruthyString(details, 'version');
  12. return `${[
  13. details.artifactName,
  14. details.version,
  15. details.platform,
  16. details.arch,
  17. ...(details.artifactSuffix ? [details.artifactSuffix] : []),
  18. ].join('-')}.zip`;
  19. }
  20. function mirrorVar(name, options, defaultValue) {
  21. // Convert camelCase to camel_case for env var reading
  22. const snakeName = name.replace(/([a-z])([A-Z])/g, (_, a, b) => `${a}_${b}`).toLowerCase();
  23. return (
  24. // .npmrc
  25. process.env[`npm_config_electron_${name.toLowerCase()}`] ||
  26. process.env[`NPM_CONFIG_ELECTRON_${snakeName.toUpperCase()}`] ||
  27. process.env[`npm_config_electron_${snakeName}`] ||
  28. // package.json
  29. process.env[`npm_package_config_electron_${name}`] ||
  30. process.env[`npm_package_config_electron_${snakeName.toLowerCase()}`] ||
  31. // env
  32. process.env[`ELECTRON_${snakeName.toUpperCase()}`] ||
  33. options[name] ||
  34. defaultValue);
  35. }
  36. export async function getArtifactRemoteURL(details) {
  37. const opts = details.mirrorOptions || {};
  38. let base = mirrorVar('mirror', opts, BASE_URL);
  39. if (details.version.includes('nightly')) {
  40. const nightlyDeprecated = mirrorVar('nightly_mirror', opts, '');
  41. if (nightlyDeprecated) {
  42. base = nightlyDeprecated;
  43. console.warn(`nightly_mirror is deprecated, please use nightlyMirror`);
  44. }
  45. else {
  46. base = mirrorVar('nightlyMirror', opts, NIGHTLY_BASE_URL);
  47. }
  48. }
  49. const path = mirrorVar('customDir', opts, details.version).replace('{{ version }}', details.version.replace(/^v/, ''));
  50. const file = mirrorVar('customFilename', opts, getArtifactFileName(details));
  51. // Allow customized download URL resolution.
  52. if (opts.resolveAssetURL) {
  53. const url = await opts.resolveAssetURL(details);
  54. return url;
  55. }
  56. return `${base}${path}/${file}`;
  57. }
  58. export function getArtifactVersion(details) {
  59. return normalizeVersion(mirrorVar('customVersion', details.mirrorOptions || {}, details.version));
  60. }
  61. //# sourceMappingURL=artifact-utils.js.map