Provider.js 4.4 KB

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