Provider.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.findFile = findFile;
  6. exports.parseUpdateInfo = parseUpdateInfo;
  7. exports.getFileList = getFileList;
  8. exports.resolveFiles = resolveFiles;
  9. exports.Provider = void 0;
  10. function _builderUtilRuntime() {
  11. const data = require("builder-util-runtime");
  12. _builderUtilRuntime = function () {
  13. return data;
  14. };
  15. return data;
  16. }
  17. function _jsYaml() {
  18. const data = require("js-yaml");
  19. _jsYaml = function () {
  20. return data;
  21. };
  22. return data;
  23. }
  24. function _main() {
  25. const data = require("./main");
  26. _main = function () {
  27. return data;
  28. };
  29. return data;
  30. }
  31. class Provider {
  32. constructor(executor, useMultipleRangeRequest = true) {
  33. this.executor = executor;
  34. this.useMultipleRangeRequest = useMultipleRangeRequest;
  35. this.requestHeaders = null;
  36. }
  37. get fileExtraDownloadHeaders() {
  38. return null;
  39. }
  40. setRequestHeaders(value) {
  41. this.requestHeaders = value;
  42. }
  43. httpRequest(url, headers, cancellationToken) {
  44. return this.executor.request(this.createRequestOptions(url, headers), cancellationToken);
  45. }
  46. createRequestOptions(url, headers) {
  47. const result = {};
  48. if (this.requestHeaders == null) {
  49. if (headers != null) {
  50. result.headers = headers;
  51. }
  52. } else {
  53. result.headers = headers == null ? this.requestHeaders : Object.assign({}, this.requestHeaders, headers);
  54. }
  55. result.protocol = url.protocol;
  56. result.hostname = url.hostname;
  57. if (url.port) {
  58. result.port = url.port;
  59. }
  60. result.path = url.pathname + url.search;
  61. return result;
  62. }
  63. }
  64. exports.Provider = Provider;
  65. function findFile(files, extension, not) {
  66. if (files.length === 0) {
  67. throw (0, _builderUtilRuntime().newError)("No files provided", "ERR_UPDATER_NO_FILES_PROVIDED");
  68. }
  69. const result = files.find(it => it.url.pathname.toLowerCase().endsWith(`.${extension}`));
  70. if (result != null) {
  71. return result;
  72. } else if (not == null) {
  73. return files[0];
  74. } else {
  75. return files.find(fileInfo => !not.some(ext => fileInfo.url.pathname.toLowerCase().endsWith(`.${ext}`)));
  76. }
  77. }
  78. function parseUpdateInfo(rawData, channelFile, channelFileUrl) {
  79. if (rawData == null) {
  80. throw (0, _builderUtilRuntime().newError)(`Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): rawData: null`, "ERR_UPDATER_INVALID_UPDATE_INFO");
  81. }
  82. let result;
  83. try {
  84. result = (0, _jsYaml().safeLoad)(rawData);
  85. } catch (e) {
  86. throw (0, _builderUtilRuntime().newError)(`Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}, rawData: ${rawData}`, "ERR_UPDATER_INVALID_UPDATE_INFO");
  87. }
  88. return result;
  89. }
  90. function getFileList(updateInfo) {
  91. const files = updateInfo.files;
  92. if (files != null && files.length > 0) {
  93. return files;
  94. }
  95. if (updateInfo.path != null) {
  96. return [{
  97. url: updateInfo.path,
  98. sha512: updateInfo.sha512
  99. }];
  100. } else {
  101. throw (0, _builderUtilRuntime().newError)(`No files provided: ${(0, _builderUtilRuntime().safeStringifyJson)(updateInfo)}`, "ERR_UPDATER_NO_FILES_PROVIDED");
  102. }
  103. }
  104. function resolveFiles(updateInfo, baseUrl, pathTransformer = p => p) {
  105. const files = getFileList(updateInfo);
  106. const result = files.map(fileInfo => {
  107. if (fileInfo.sha2 == null && fileInfo.sha512 == null) {
  108. throw (0, _builderUtilRuntime().newError)(`Update info doesn't contain nor sha256 neither sha512 checksum: ${(0, _builderUtilRuntime().safeStringifyJson)(fileInfo)}`, "ERR_UPDATER_NO_CHECKSUM");
  109. }
  110. return {
  111. url: (0, _main().newUrlFromBase)(pathTransformer(fileInfo.url), baseUrl),
  112. info: fileInfo
  113. };
  114. });
  115. const packages = updateInfo.packages;
  116. const packageInfo = packages == null ? null : packages[process.arch] || packages.ia32;
  117. if (packageInfo != null) {
  118. result[0].packageInfo = Object.assign({}, packageInfo, {
  119. path: (0, _main().newUrlFromBase)(pathTransformer(packageInfo.path), baseUrl).href
  120. });
  121. }
  122. return result;
  123. }
  124. //# sourceMappingURL=Provider.js.map