@electron-forge/publisher-electron-release-server 6.0.0-beta.9 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,21 +1,24 @@
1
- # Electron Release Server
1
+ ## publisher-electron-release-server
2
2
 
3
- The Electron Release Server target publishes all your artifacts to a hosted instance of [Electron Release Server](https://github.com/ArekSredzki/electron-release-server).
3
+ `@electron-forge/publisher-electron-release-server` publishes all your artifacts to a hosted instance of [Electron Release Server](https://github.com/ArekSredzki/electron-release-server) where users will be able to download them.
4
4
 
5
5
  Please note that Electron Release Server is a community powered project and is not associated with Electron Forge or the Electron project directly.
6
6
 
7
- Configuration options are documented in [`PublisherERSConfig`](https://js.electronforge.io/publisher/electron-release-server/interfaces/publisherersconfig.html)
7
+ Configuration options are documented in [`PublisherERSConfig`](https://js.electronforge.io/interfaces/_electron_forge_publisher_electron_release_server.PublisherERSConfig.html).
8
8
 
9
- ### Usage
10
9
 
11
- ```javascript
12
- {
13
- name: '@electron-forge/publisher-electron-release-server',
14
- config: {
15
- baseUrl: 'https://update.server.com',
16
- username: 'admin',
17
- password: 'admin'
18
- }
10
+ ```javascript title=forge.config.js
11
+ module.exports = {
12
+ // ...
13
+ publishers: [
14
+ {
15
+ name: '@electron-forge/publisher-electron-release-server',
16
+ config: {
17
+ baseUrl: 'https://update.server.com',
18
+ username: 'admin',
19
+ password: 'admin'
20
+ }
21
+ }
22
+ ]
19
23
  }
20
- ```
21
-
24
+ ```
package/dist/Config.d.ts CHANGED
@@ -23,4 +23,12 @@ export interface PublisherERSConfig {
23
23
  * Default: stable
24
24
  */
25
25
  channel?: string;
26
+ /**
27
+ * The "flavor" of the binary that you want to release to.
28
+ * This is useful if you want to provide multiple versions
29
+ * of the same application version (e.g. full and lite)
30
+ * to end users.
31
+ */
32
+ flavor?: string;
26
33
  }
34
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
package/dist/Config.js CHANGED
@@ -1,4 +1,6 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
2
5
 
3
- require("source-map-support/register");
4
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,8 +1,10 @@
1
- import PublisherBase, { PublisherOptions } from '@electron-forge/publisher-base';
2
- import { ForgePlatform, ForgeArch } from '@electron-forge/shared-types';
1
+ import { PublisherBase, PublisherOptions } from '@electron-forge/publisher-base';
2
+ import { ForgeArch, ForgePlatform } from '@electron-forge/shared-types';
3
3
  import { PublisherERSConfig } from './Config';
4
- export declare const ersPlatform: (platform: ForgePlatform, arch: ForgeArch) => "mas" | "osx_64" | "linux_32" | "linux_64" | "windows_32" | "windows_64";
4
+ export declare const ersPlatform: (platform: ForgePlatform, arch: ForgeArch) => string;
5
5
  export default class PublisherERS extends PublisherBase<PublisherERSConfig> {
6
6
  name: string;
7
- publish({makeResults}: PublisherOptions): Promise<void>;
7
+ publish({ makeResults, setStatusLine }: PublisherOptions): Promise<void>;
8
8
  }
9
+ export { PublisherERS, PublisherERSConfig };
10
+ //# sourceMappingURL=PublisherERS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublisherERS.d.ts","sourceRoot":"","sources":["../src/PublisherERS.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAMxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAmB9C,eAAO,MAAM,WAAW,aAAc,aAAa,QAAQ,SAAS,KAAG,MAWtE,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACzE,IAAI,SAA6B;IAE3B,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0G/E;AAED,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,210 +1,150 @@
1
1
  "use strict";
2
-
3
2
  Object.defineProperty(exports, "__esModule", {
4
- value: true
3
+ value: true
5
4
  });
6
- exports.default = exports.ersPlatform = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _publisherBase = _interopRequireDefault(require("@electron-forge/publisher-base"));
11
-
12
- var _asyncOra = require("@electron-forge/async-ora");
13
-
5
+ Object.defineProperty(exports, "PublisherERSConfig", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _config.PublisherERSConfig;
9
+ }
10
+ });
11
+ exports.PublisherERS = exports.default = exports.ersPlatform = void 0;
12
+ var _path = _interopRequireDefault(require("path"));
13
+ var _publisherBase = require("@electron-forge/publisher-base");
14
14
  var _debug = _interopRequireDefault(require("debug"));
15
-
16
- var _nodeFetch = _interopRequireDefault(require("node-fetch"));
17
-
18
15
  var _formData = _interopRequireDefault(require("form-data"));
19
-
20
16
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
21
-
22
- var _path = _interopRequireDefault(require("path"));
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _next(value) { step("next", value); } function _throw(err) { step("throw", err); } _next(); }); }; }
27
-
28
- const d = (0, _debug.default)('electron-forge:publish:ers');
29
-
30
- const ersPlatform = (platform, arch) => {
31
- switch (platform) {
32
- case 'darwin':
33
- return 'osx_64';
34
-
35
- case 'linux':
36
- return arch === 'ia32' ? 'linux_32' : 'linux_64';
37
-
38
- case 'win32':
39
- return arch === 'ia32' ? 'windows_32' : 'windows_64';
40
-
41
- default:
42
- return platform;
43
- }
17
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
18
+ var _config = require("./Config");
19
+ function _interopRequireDefault(obj) {
20
+ return obj && obj.__esModule ? obj : {
21
+ default: obj
22
+ };
23
+ }
24
+ const d = (0, _debug).default('electron-forge:publish:ers');
25
+ const fetchAndCheckStatus = async (url, init)=>{
26
+ const result = await (0, _nodeFetch).default(url, init);
27
+ if (result.ok) {
28
+ // res.status >= 200 && res.status < 300
29
+ return result;
30
+ }
31
+ throw new Error(`ERS publish failed with status code: ${result.status} (${result.url})`);
32
+ };
33
+ const ersPlatform = (platform, arch)=>{
34
+ switch(platform){
35
+ case 'darwin':
36
+ return 'osx_64';
37
+ case 'linux':
38
+ return arch === 'ia32' ? 'linux_32' : 'linux_64';
39
+ case 'win32':
40
+ return arch === 'ia32' ? 'windows_32' : 'windows_64';
41
+ default:
42
+ return platform;
43
+ }
44
44
  };
45
-
46
45
  exports.ersPlatform = ersPlatform;
47
-
48
- class PublisherERS extends _publisherBase.default {
49
- constructor(...args) {
50
- var _temp;
51
-
52
- return _temp = super(...args), Object.defineProperty(this, "name", {
53
- configurable: true,
54
- enumerable: true,
55
- writable: true,
56
- value: 'electron-release-server'
57
- }), _temp;
58
- }
59
-
60
- publish({
61
- makeResults
62
- }) {
63
- var _this = this;
64
-
65
- return _asyncToGenerator(function* () {
66
- const config = _this.config;
67
-
68
- if (!(config.baseUrl && config.username && config.password)) {
69
- throw 'In order to publish to ERS you must set the "electronReleaseServer.baseUrl", "electronReleaseServer.username" and "electronReleaseServer.password" properties in your forge config. See the docs for more info'; // eslint-disable-line
70
- }
71
-
72
- d('attempting to authenticate to ERS');
73
-
74
- const api = apiPath => `${config.baseUrl}/${apiPath}`;
75
-
76
- const _ref = yield (yield (0, _nodeFetch.default)(api('api/auth/login'), {
77
- method: 'POST',
78
- body: JSON.stringify({
79
- username: config.username,
80
- password: config.password
81
- }),
82
- headers: {
83
- 'Content-Type': 'application/json'
46
+ class PublisherERS extends _publisherBase.PublisherBase {
47
+ async publish({ makeResults , setStatusLine }) {
48
+ const { config } = this;
49
+ if (!(config.baseUrl && config.username && config.password)) {
50
+ throw new Error('In order to publish to ERS you must set the "electronReleaseServer.baseUrl", "electronReleaseServer.username" and "electronReleaseServer.password" properties in your Forge config. See the docs for more info');
84
51
  }
85
- })).json(),
86
- token = _ref.token;
87
-
88
- const authFetch = (apiPath, options) => (0, _nodeFetch.default)(api(apiPath), Object.assign({}, options || {}, {
89
- headers: Object.assign({}, (options || {}).headers, {
90
- Authorization: `Bearer ${token}`
91
- })
92
- }));
93
-
94
- const versions = yield (yield authFetch('api/version')).json();
95
- var _iteratorNormalCompletion = true;
96
- var _didIteratorError = false;
97
- var _iteratorError = undefined;
98
-
99
- try {
100
- for (var _iterator = makeResults[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
101
- const makeResult = _step.value;
102
- const artifacts = makeResult.artifacts,
103
- packageJSON = makeResult.packageJSON;
104
- const existingVersion = versions.find(version => version.name === packageJSON.version);
105
- let channel = 'stable';
106
-
107
- if (config.channel) {
108
- channel = config.channel;
109
- } else if (packageJSON.version.includes('beta')) {
110
- channel = 'beta';
111
- } else if (packageJSON.version.includes('alpha')) {
112
- channel = 'alpha';
113
- }
114
-
115
- if (!existingVersion) {
116
- yield authFetch('api/version', {
117
- method: 'POST',
118
- body: JSON.stringify({
119
- channel: {
120
- name: channel
121
- },
122
- name: packageJSON.version,
123
- notes: ''
124
- }),
125
- headers: {
52
+ d('attempting to authenticate to ERS');
53
+ const api = (apiPath)=>`${config.baseUrl}/${apiPath}`
54
+ ;
55
+ const { token } = await (await fetchAndCheckStatus(api('api/auth/login'), {
56
+ method: 'POST',
57
+ body: JSON.stringify({
58
+ username: config.username,
59
+ password: config.password
60
+ }),
61
+ headers: {
126
62
  'Content-Type': 'application/json'
127
- }
63
+ }
64
+ })).json();
65
+ const authFetch = (apiPath, options)=>fetchAndCheckStatus(api(apiPath), {
66
+ ...options || {},
67
+ headers: {
68
+ ...(options || {}).headers,
69
+ Authorization: `Bearer ${token}`
70
+ }
71
+ })
72
+ ;
73
+ const versions = await (await authFetch('api/version')).json();
74
+ const flavor = config.flavor || 'default';
75
+ for (const makeResult of makeResults){
76
+ const { packageJSON } = makeResult;
77
+ const artifacts = makeResult.artifacts.filter((artifactPath)=>_path.default.basename(artifactPath).toLowerCase() !== 'releases'
78
+ );
79
+ const existingVersion = versions.find((version)=>{
80
+ return version.name === packageJSON.version && (!version.flavor || version.flavor === flavor);
128
81
  });
129
- }
130
-
131
- let uploaded = 0;
132
-
133
- const getText = () => `Uploading Artifacts ${uploaded}/${artifacts.length}`;
134
-
135
- yield (0, _asyncOra.asyncOra)(getText(),
136
- /*#__PURE__*/
137
- function () {
138
- var _ref2 = _asyncToGenerator(function* (uploadSpinner) {
139
- const updateSpinner = () => {
140
- uploadSpinner.text = getText();
141
- };
142
-
143
- yield Promise.all(artifacts.map(artifactPath => new Promise(
144
- /*#__PURE__*/
145
- function () {
146
- var _ref3 = _asyncToGenerator(function* (resolve, reject) {
147
- if (existingVersion) {
148
- const existingAsset = existingVersion.assets.find(asset => asset.name === _path.default.basename(artifactPath));
149
-
150
- if (existingAsset) {
151
- d('asset at path:', artifactPath, 'already exists on server');
152
- uploaded += 1;
153
- updateSpinner();
154
- return;
82
+ let channel = 'stable';
83
+ if (config.channel) {
84
+ channel = config.channel;
85
+ } else if (packageJSON.version.includes('beta')) {
86
+ channel = 'beta';
87
+ } else if (packageJSON.version.includes('alpha')) {
88
+ channel = 'alpha';
89
+ }
90
+ if (!existingVersion) {
91
+ await authFetch('api/version', {
92
+ method: 'POST',
93
+ body: JSON.stringify({
94
+ channel: {
95
+ name: channel
96
+ },
97
+ flavor: config.flavor,
98
+ name: packageJSON.version,
99
+ notes: ''
100
+ }),
101
+ headers: {
102
+ 'Content-Type': 'application/json'
155
103
  }
156
- }
157
-
158
- try {
159
- d('attempting to upload asset:', artifactPath);
160
- const artifactForm = new _formData.default();
161
- artifactForm.append('token', token);
162
- artifactForm.append('version', packageJSON.version);
163
- artifactForm.append('platform', ersPlatform(makeResult.platform, makeResult.arch));
164
- artifactForm.append('file', _fsExtra.default.createReadStream(artifactPath));
165
- yield authFetch('api/asset', {
166
- method: 'POST',
167
- body: artifactForm,
168
- headers: artifactForm.getHeaders()
169
- });
170
- d('upload successful for asset:', artifactPath);
171
- uploaded += 1;
172
- updateSpinner();
173
- resolve();
174
- } catch (err) {
175
- reject(err);
176
- }
177
104
  });
178
-
179
- return function (_x2, _x3) {
180
- return _ref3.apply(this, arguments);
105
+ }
106
+ let uploaded = 0;
107
+ const updateStatusLine = ()=>setStatusLine(`Uploading distributable (${uploaded}/${artifacts.length})`)
108
+ ;
109
+ updateStatusLine();
110
+ await Promise.all(artifacts.map(async (artifactPath)=>{
111
+ if (existingVersion) {
112
+ const existingAsset = existingVersion.assets.find((asset)=>asset.name === _path.default.basename(artifactPath)
113
+ );
114
+ if (existingAsset) {
115
+ d('asset at path:', artifactPath, 'already exists on server');
116
+ uploaded += 1;
117
+ updateStatusLine();
118
+ return;
119
+ }
120
+ }
121
+ d('attempting to upload asset:', artifactPath);
122
+ const artifactForm = new _formData.default();
123
+ artifactForm.append('token', token);
124
+ artifactForm.append('version', packageJSON.version);
125
+ artifactForm.append('platform', ersPlatform(makeResult.platform, makeResult.arch));
126
+ // see https://github.com/form-data/form-data/issues/426
127
+ const fileOptions = {
128
+ knownLength: _fsExtra.default.statSync(artifactPath).size
181
129
  };
182
- }())));
183
- });
184
-
185
- return function (_x) {
186
- return _ref2.apply(this, arguments);
187
- };
188
- }());
189
- }
190
- } catch (err) {
191
- _didIteratorError = true;
192
- _iteratorError = err;
193
- } finally {
194
- try {
195
- if (!_iteratorNormalCompletion && _iterator.return != null) {
196
- _iterator.return();
197
- }
198
- } finally {
199
- if (_didIteratorError) {
200
- throw _iteratorError;
201
- }
130
+ artifactForm.append('file', _fsExtra.default.createReadStream(artifactPath), fileOptions);
131
+ await authFetch('api/asset', {
132
+ method: 'POST',
133
+ body: artifactForm,
134
+ headers: artifactForm.getHeaders()
135
+ });
136
+ d('upload successful for asset:', artifactPath);
137
+ uploaded += 1;
138
+ updateStatusLine();
139
+ }));
202
140
  }
203
- }
204
- })();
205
- }
206
-
141
+ }
142
+ constructor(...args){
143
+ super(...args);
144
+ this.name = 'electron-release-server';
145
+ }
207
146
  }
208
-
209
147
  exports.default = PublisherERS;
210
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJFUlMudHMiXSwibmFtZXMiOlsiZCIsImVyc1BsYXRmb3JtIiwicGxhdGZvcm0iLCJhcmNoIiwiUHVibGlzaGVyRVJTIiwiUHVibGlzaGVyQmFzZSIsInB1Ymxpc2giLCJtYWtlUmVzdWx0cyIsImNvbmZpZyIsImJhc2VVcmwiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXBpIiwiYXBpUGF0aCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiaGVhZGVycyIsImpzb24iLCJ0b2tlbiIsImF1dGhGZXRjaCIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJBdXRob3JpemF0aW9uIiwidmVyc2lvbnMiLCJtYWtlUmVzdWx0IiwiYXJ0aWZhY3RzIiwicGFja2FnZUpTT04iLCJleGlzdGluZ1ZlcnNpb24iLCJmaW5kIiwidmVyc2lvbiIsIm5hbWUiLCJjaGFubmVsIiwiaW5jbHVkZXMiLCJub3RlcyIsInVwbG9hZGVkIiwiZ2V0VGV4dCIsImxlbmd0aCIsInVwbG9hZFNwaW5uZXIiLCJ1cGRhdGVTcGlubmVyIiwidGV4dCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJhcnRpZmFjdFBhdGgiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXhpc3RpbmdBc3NldCIsImFzc2V0cyIsImFzc2V0IiwicGF0aCIsImJhc2VuYW1lIiwiYXJ0aWZhY3RGb3JtIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJmcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXRIZWFkZXJzIiwiZXJyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBSUEsTUFBTUEsSUFBSSxvQkFBTSw0QkFBTixDQUFWOztBQU9PLE1BQU1DLGNBQWMsQ0FBQ0MsUUFBRCxFQUEwQkMsSUFBMUIsS0FBOEM7QUFDdkUsVUFBUUQsUUFBUjtBQUNFLFNBQUssUUFBTDtBQUNFLGFBQU8sUUFBUDs7QUFDRixT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Q0FBYUUsTUFBYixDQUFvQixNQUFwQixFQUE0QkMsaUJBQUdDLGdCQUFILENBQW9CWixZQUFwQixDQUE1QjtBQUNBLDBCQUFNekIsVUFBVSxXQUFWLEVBQXVCO0FBQzNCUCw4QkFBUSxNQURtQjtBQUUzQkMsNEJBQU11QyxZQUZxQjtBQUczQnBDLCtCQUFTb0MsYUFBYUssVUFBYjtBQUhrQixxQkFBdkIsQ0FBTjtBQUtBM0Qsc0JBQUUsOEJBQUYsRUFBa0M4QyxZQUFsQztBQUNBVCxnQ0FBWSxDQUFaO0FBQ0FJO0FBQ0FNO0FBQ0QsbUJBaEJELENBZ0JFLE9BQU9hLEdBQVAsRUFBWTtBQUNaWiwyQkFBT1ksR0FBUDtBQUNEO0FBQ0YsaUJBaENEOztBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQURnQixDQUFaLENBQU47QUFtQ0QsYUF4Q0s7O0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBTjtBQXlDRDtBQXZHOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0doRDs7QUEzR3lFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFB1Ymxpc2hlckJhc2UsIHsgUHVibGlzaGVyT3B0aW9ucyB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9wdWJsaXNoZXItYmFzZSc7XG5pbXBvcnQgeyBhc3luY09yYSB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9hc3luYy1vcmEnO1xuaW1wb3J0IHsgRm9yZ2VQbGF0Zm9ybSwgRm9yZ2VBcmNoIH0gZnJvbSAnQGVsZWN0cm9uLWZvcmdlL3NoYXJlZC10eXBlcyc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZmV0Y2ggZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgUHVibGlzaGVyRVJTQ29uZmlnIH0gZnJvbSAnLi9Db25maWcnO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnB1Ymxpc2g6ZXJzJyk7XG5cbmludGVyZmFjZSBFUlNWZXJzaW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhc3NldHM6IHsgbmFtZTogc3RyaW5nOyB9W107XG59XG5cbmV4cG9ydCBjb25zdCBlcnNQbGF0Zm9ybSA9IChwbGF0Zm9ybTogRm9yZ2VQbGF0Zm9ybSwgYXJjaDogRm9yZ2VBcmNoKSA9PiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgcmV0dXJuICdvc3hfNjQnO1xuICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgIHJldHVybiBhcmNoID09PSAnaWEzMicgPyAnbGludXhfMzInIDogJ2xpbnV4XzY0JztcbiAgICBjYXNlICd3aW4zMic6XG4gICAgICByZXR1cm4gYXJjaCA9PT0gJ2lhMzInID8gJ3dpbmRvd3NfMzInIDogJ3dpbmRvd3NfNjQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGxhdGZvcm07XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlckVSUyBleHRlbmRzIFB1Ymxpc2hlckJhc2U8UHVibGlzaGVyRVJTQ29uZmlnPiB7XG4gIG5hbWUgPSAnZWxlY3Ryb24tcmVsZWFzZS1zZXJ2ZXInO1xuXG4gIGFzeW5jIHB1Ymxpc2goeyBtYWtlUmVzdWx0cyB9OiBQdWJsaXNoZXJPcHRpb25zKSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICBpZiAoIShjb25maWcuYmFzZVVybCAmJiBjb25maWcudXNlcm5hbWUgJiYgY29uZmlnLnBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgJ0luIG9yZGVyIHRvIHB1Ymxpc2ggdG8gRVJTIHlvdSBtdXN0IHNldCB0aGUgXCJlbGVjdHJvblJlbGVhc2VTZXJ2ZXIuYmFzZVVybFwiLCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci51c2VybmFtZVwiIGFuZCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci5wYXNzd29yZFwiIHByb3BlcnRpZXMgaW4geW91ciBmb3JnZSBjb25maWcuIFNlZSB0aGUgZG9jcyBmb3IgbW9yZSBpbmZvJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cblxuICAgIGQoJ2F0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIHRvIEVSUycpO1xuXG4gICAgY29uc3QgYXBpID0gKGFwaVBhdGg6IHN0cmluZykgPT4gYCR7Y29uZmlnLmJhc2VVcmx9LyR7YXBpUGF0aH1gO1xuXG4gICAgY29uc3QgeyB0b2tlbiB9ID0gYXdhaXQgKGF3YWl0IGZldGNoKGFwaSgnYXBpL2F1dGgvbG9naW4nKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVzZXJuYW1lOiBjb25maWcudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSkpLmpzb24oKTtcblxuICAgIGNvbnN0IGF1dGhGZXRjaCA9IChhcGlQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpID0+XG4gICAgICBmZXRjaChhcGkoYXBpUGF0aCksIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgfHwge30sIHtcbiAgICAgICAgaGVhZGVyczogT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMgfHwge30pLmhlYWRlcnMsIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSksXG4gICAgICB9KSk7XG5cbiAgICBjb25zdCB2ZXJzaW9uczogRVJTVmVyc2lvbltdID0gYXdhaXQgKGF3YWl0IGF1dGhGZXRjaCgnYXBpL3ZlcnNpb24nKSkuanNvbigpO1xuXG4gICAgZm9yIChjb25zdCBtYWtlUmVzdWx0IG9mIG1ha2VSZXN1bHRzKSB7XG4gICAgICBjb25zdCB7IGFydGlmYWN0cywgcGFja2FnZUpTT04gfSA9IG1ha2VSZXN1bHQ7XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nVmVyc2lvbiA9IHZlcnNpb25zLmZpbmQodmVyc2lvbiA9PiB2ZXJzaW9uLm5hbWUgPT09IHBhY2thZ2VKU09OLnZlcnNpb24pO1xuXG4gICAgICBsZXQgY2hhbm5lbCA9ICdzdGFibGUnO1xuICAgICAgaWYgKGNvbmZpZy5jaGFubmVsKSB7XG4gICAgICAgIGNoYW5uZWwgPSBjb25maWcuY2hhbm5lbDtcbiAgICAgIH0gZWxzZSBpZiAocGFja2FnZUpTT04udmVyc2lvbi5pbmNsdWRlcygnYmV0YScpKSB7XG4gICAgICAgIGNoYW5uZWwgPSAnYmV0YSc7XG4gICAgICB9IGVsc2UgaWYgKHBhY2thZ2VKU09OLnZlcnNpb24uaW5jbHVkZXMoJ2FscGhhJykpIHtcbiAgICAgICAgY2hhbm5lbCA9ICdhbHBoYSc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RpbmdWZXJzaW9uKSB7XG4gICAgICAgIGF3YWl0IGF1dGhGZXRjaCgnYXBpL3ZlcnNpb24nLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2hhbm5lbDoge1xuICAgICAgICAgICAgICBuYW1lOiBjaGFubmVsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLnZlcnNpb24sXG4gICAgICAgICAgICBub3RlczogJycsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwbG9hZGVkID0gMDtcbiAgICAgIGNvbnN0IGdldFRleHQgPSAoKSA9PiBgVXBsb2FkaW5nIEFydGlmYWN0cyAke3VwbG9hZGVkfS8ke2FydGlmYWN0cy5sZW5ndGh9YDtcblxuICAgICAgYXdhaXQgYXN5bmNPcmEoZ2V0VGV4dCgpLCBhc3luYyAodXBsb2FkU3Bpbm5lcikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVTcGlubmVyID0gKCkgPT4ge1xuICAgICAgICAgIHVwbG9hZFNwaW5uZXIudGV4dCA9IGdldFRleHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhcnRpZmFjdHMubWFwKGFydGlmYWN0UGF0aCA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBc3NldCA9IGV4aXN0aW5nVmVyc2lvbi5hc3NldHMuZmluZChcbiAgICAgICAgICAgICAgICBhc3NldCA9PiBhc3NldC5uYW1lID09PSBwYXRoLmJhc2VuYW1lKGFydGlmYWN0UGF0aCksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXNzZXQpIHtcbiAgICAgICAgICAgICAgICBkKCdhc3NldCBhdCBwYXRoOicsIGFydGlmYWN0UGF0aCwgJ2FscmVhZHkgZXhpc3RzIG9uIHNlcnZlcicpO1xuICAgICAgICAgICAgICAgIHVwbG9hZGVkICs9IDE7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZCgnYXR0ZW1wdGluZyB0byB1cGxvYWQgYXNzZXQ6JywgYXJ0aWZhY3RQYXRoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgICAgICAgICAgICBhcnRpZmFjdEZvcm0uYXBwZW5kKCd2ZXJzaW9uJywgcGFja2FnZUpTT04udmVyc2lvbik7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3BsYXRmb3JtJywgZXJzUGxhdGZvcm0obWFrZVJlc3VsdC5wbGF0Zm9ybSwgbWFrZVJlc3VsdC5hcmNoKSk7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGFydGlmYWN0UGF0aCkpO1xuICAgICAgICAgICAgICBhd2FpdCBhdXRoRmV0Y2goJ2FwaS9hc3NldCcsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBhcnRpZmFjdEZvcm0sXG4gICAgICAgICAgICAgICAgaGVhZGVyczogYXJ0aWZhY3RGb3JtLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGQoJ3VwbG9hZCBzdWNjZXNzZnVsIGZvciBhc3NldDonLCBhcnRpZmFjdFBhdGgpO1xuICAgICAgICAgICAgICB1cGxvYWRlZCArPSAxO1xuICAgICAgICAgICAgICB1cGRhdGVTcGlubmVyKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
148
+ exports.PublisherERS = PublisherERS;
149
+
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJFUlMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IFB1Ymxpc2hlckJhc2UsIFB1Ymxpc2hlck9wdGlvbnMgfSBmcm9tICdAZWxlY3Ryb24tZm9yZ2UvcHVibGlzaGVyLWJhc2UnO1xuaW1wb3J0IHsgRm9yZ2VBcmNoLCBGb3JnZVBsYXRmb3JtIH0gZnJvbSAnQGVsZWN0cm9uLWZvcmdlL3NoYXJlZC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IGZldGNoLCB7IFJlcXVlc3RJbmZvLCBSZXF1ZXN0SW5pdCwgUmVzcG9uc2UgfSBmcm9tICdub2RlLWZldGNoJztcblxuaW1wb3J0IHsgUHVibGlzaGVyRVJTQ29uZmlnIH0gZnJvbSAnLi9Db25maWcnO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnB1Ymxpc2g6ZXJzJyk7XG5cbmludGVyZmFjZSBFUlNWZXJzaW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhc3NldHM6IHsgbmFtZTogc3RyaW5nIH1bXTtcbiAgZmxhdm9yPzogc3RyaW5nO1xufVxuXG5jb25zdCBmZXRjaEFuZENoZWNrU3RhdHVzID0gYXN5bmMgKHVybDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2godXJsLCBpbml0KTtcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIC8vIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgRVJTIHB1Ymxpc2ggZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzdWx0LnN0YXR1c30gKCR7cmVzdWx0LnVybH0pYCk7XG59O1xuXG5leHBvcnQgY29uc3QgZXJzUGxhdGZvcm0gPSAocGxhdGZvcm06IEZvcmdlUGxhdGZvcm0sIGFyY2g6IEZvcmdlQXJjaCk6IHN0cmluZyA9PiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgcmV0dXJuICdvc3hfNjQnO1xuICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgIHJldHVybiBhcmNoID09PSAnaWEzMicgPyAnbGludXhfMzInIDogJ2xpbnV4XzY0JztcbiAgICBjYXNlICd3aW4zMic6XG4gICAgICByZXR1cm4gYXJjaCA9PT0gJ2lhMzInID8gJ3dpbmRvd3NfMzInIDogJ3dpbmRvd3NfNjQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGxhdGZvcm07XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlckVSUyBleHRlbmRzIFB1Ymxpc2hlckJhc2U8UHVibGlzaGVyRVJTQ29uZmlnPiB7XG4gIG5hbWUgPSAnZWxlY3Ryb24tcmVsZWFzZS1zZXJ2ZXInO1xuXG4gIGFzeW5jIHB1Ymxpc2goeyBtYWtlUmVzdWx0cywgc2V0U3RhdHVzTGluZSB9OiBQdWJsaXNoZXJPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICBpZiAoIShjb25maWcuYmFzZVVybCAmJiBjb25maWcudXNlcm5hbWUgJiYgY29uZmlnLnBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW4gb3JkZXIgdG8gcHVibGlzaCB0byBFUlMgeW91IG11c3Qgc2V0IHRoZSBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci5iYXNlVXJsXCIsIFwiZWxlY3Ryb25SZWxlYXNlU2VydmVyLnVzZXJuYW1lXCIgYW5kIFwiZWxlY3Ryb25SZWxlYXNlU2VydmVyLnBhc3N3b3JkXCIgcHJvcGVydGllcyBpbiB5b3VyIEZvcmdlIGNvbmZpZy4gU2VlIHRoZSBkb2NzIGZvciBtb3JlIGluZm8nXG4gICAgICApO1xuICAgIH1cblxuICAgIGQoJ2F0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIHRvIEVSUycpO1xuXG4gICAgY29uc3QgYXBpID0gKGFwaVBhdGg6IHN0cmluZykgPT4gYCR7Y29uZmlnLmJhc2VVcmx9LyR7YXBpUGF0aH1gO1xuXG4gICAgY29uc3QgeyB0b2tlbiB9ID0gYXdhaXQgKFxuICAgICAgYXdhaXQgZmV0Y2hBbmRDaGVja1N0YXR1cyhhcGkoJ2FwaS9hdXRoL2xvZ2luJyksIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgICAgIH0pLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5qc29uKCk7XG5cbiAgICBjb25zdCBhdXRoRmV0Y2ggPSAoYXBpUGF0aDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdEluaXQpID0+XG4gICAgICBmZXRjaEFuZENoZWNrU3RhdHVzKGFwaShhcGlQYXRoKSwgeyAuLi4ob3B0aW9ucyB8fCB7fSksIGhlYWRlcnM6IHsgLi4uKG9wdGlvbnMgfHwge30pLmhlYWRlcnMsIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSk7XG5cbiAgICBjb25zdCB2ZXJzaW9uczogRVJTVmVyc2lvbltdID0gYXdhaXQgKGF3YWl0IGF1dGhGZXRjaCgnYXBpL3ZlcnNpb24nKSkuanNvbigpO1xuICAgIGNvbnN0IGZsYXZvciA9IGNvbmZpZy5mbGF2b3IgfHwgJ2RlZmF1bHQnO1xuXG4gICAgZm9yIChjb25zdCBtYWtlUmVzdWx0IG9mIG1ha2VSZXN1bHRzKSB7XG4gICAgICBjb25zdCB7IHBhY2thZ2VKU09OIH0gPSBtYWtlUmVzdWx0O1xuICAgICAgY29uc3QgYXJ0aWZhY3RzID0gbWFrZVJlc3VsdC5hcnRpZmFjdHMuZmlsdGVyKChhcnRpZmFjdFBhdGgpID0+IHBhdGguYmFzZW5hbWUoYXJ0aWZhY3RQYXRoKS50b0xvd2VyQ2FzZSgpICE9PSAncmVsZWFzZXMnKTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdWZXJzaW9uID0gdmVyc2lvbnMuZmluZCgodmVyc2lvbikgPT4ge1xuICAgICAgICByZXR1cm4gdmVyc2lvbi5uYW1lID09PSBwYWNrYWdlSlNPTi52ZXJzaW9uICYmICghdmVyc2lvbi5mbGF2b3IgfHwgdmVyc2lvbi5mbGF2b3IgPT09IGZsYXZvcik7XG4gICAgICB9KTtcblxuICAgICAgbGV0IGNoYW5uZWwgPSAnc3RhYmxlJztcbiAgICAgIGlmIChjb25maWcuY2hhbm5lbCkge1xuICAgICAgICBjaGFubmVsID0gY29uZmlnLmNoYW5uZWw7XG4gICAgICB9IGVsc2UgaWYgKHBhY2thZ2VKU09OLnZlcnNpb24uaW5jbHVkZXMoJ2JldGEnKSkge1xuICAgICAgICBjaGFubmVsID0gJ2JldGEnO1xuICAgICAgfSBlbHNlIGlmIChwYWNrYWdlSlNPTi52ZXJzaW9uLmluY2x1ZGVzKCdhbHBoYScpKSB7XG4gICAgICAgIGNoYW5uZWwgPSAnYWxwaGEnO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV4aXN0aW5nVmVyc2lvbikge1xuICAgICAgICBhd2FpdCBhdXRoRmV0Y2goJ2FwaS92ZXJzaW9uJywge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNoYW5uZWw6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2hhbm5lbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmbGF2b3I6IGNvbmZpZy5mbGF2b3IsXG4gICAgICAgICAgICBuYW1lOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxuICAgICAgICAgICAgbm90ZXM6ICcnLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB1cGxvYWRlZCA9IDA7XG4gICAgICBjb25zdCB1cGRhdGVTdGF0dXNMaW5lID0gKCkgPT4gc2V0U3RhdHVzTGluZShgVXBsb2FkaW5nIGRpc3RyaWJ1dGFibGUgKCR7dXBsb2FkZWR9LyR7YXJ0aWZhY3RzLmxlbmd0aH0pYCk7XG4gICAgICB1cGRhdGVTdGF0dXNMaW5lKCk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhcnRpZmFjdHMubWFwKGFzeW5jIChhcnRpZmFjdFBhdGgpID0+IHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdWZXJzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0Fzc2V0ID0gZXhpc3RpbmdWZXJzaW9uLmFzc2V0cy5maW5kKChhc3NldCkgPT4gYXNzZXQubmFtZSA9PT0gcGF0aC5iYXNlbmFtZShhcnRpZmFjdFBhdGgpKTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXNzZXQpIHtcbiAgICAgICAgICAgICAgZCgnYXNzZXQgYXQgcGF0aDonLCBhcnRpZmFjdFBhdGgsICdhbHJlYWR5IGV4aXN0cyBvbiBzZXJ2ZXInKTtcbiAgICAgICAgICAgICAgdXBsb2FkZWQgKz0gMTtcbiAgICAgICAgICAgICAgdXBkYXRlU3RhdHVzTGluZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGQoJ2F0dGVtcHRpbmcgdG8gdXBsb2FkIGFzc2V0OicsIGFydGlmYWN0UGF0aCk7XG4gICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgYXJ0aWZhY3RGb3JtLmFwcGVuZCgndG9rZW4nLCB0b2tlbik7XG4gICAgICAgICAgYXJ0aWZhY3RGb3JtLmFwcGVuZCgndmVyc2lvbicsIHBhY2thZ2VKU09OLnZlcnNpb24pO1xuICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3BsYXRmb3JtJywgZXJzUGxhdGZvcm0obWFrZVJlc3VsdC5wbGF0Zm9ybSwgbWFrZVJlc3VsdC5hcmNoKSk7XG5cbiAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Zvcm0tZGF0YS9mb3JtLWRhdGEvaXNzdWVzLzQyNlxuICAgICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgICAga25vd25MZW5ndGg6IGZzLnN0YXRTeW5jKGFydGlmYWN0UGF0aCkuc2l6ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGFydGlmYWN0UGF0aCksIGZpbGVPcHRpb25zKTtcblxuICAgICAgICAgIGF3YWl0IGF1dGhGZXRjaCgnYXBpL2Fzc2V0Jywge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBib2R5OiBhcnRpZmFjdEZvcm0sXG4gICAgICAgICAgICBoZWFkZXJzOiBhcnRpZmFjdEZvcm0uZ2V0SGVhZGVycygpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGQoJ3VwbG9hZCBzdWNjZXNzZnVsIGZvciBhc3NldDonLCBhcnRpZmFjdFBhdGgpO1xuICAgICAgICAgIHVwbG9hZGVkICs9IDE7XG4gICAgICAgICAgdXBkYXRlU3RhdHVzTGluZSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgUHVibGlzaGVyRVJTLCBQdWJsaXNoZXJFUlNDb25maWcgfTtcbiJdLCJuYW1lcyI6WyJQdWJsaXNoZXJFUlNDb25maWciLCJkIiwiZGVidWciLCJmZXRjaEFuZENoZWNrU3RhdHVzIiwidXJsIiwiaW5pdCIsInJlc3VsdCIsImZldGNoIiwib2siLCJFcnJvciIsInN0YXR1cyIsImVyc1BsYXRmb3JtIiwicGxhdGZvcm0iLCJhcmNoIiwiUHVibGlzaGVyRVJTIiwiUHVibGlzaGVyQmFzZSIsInB1Ymxpc2giLCJtYWtlUmVzdWx0cyIsInNldFN0YXR1c0xpbmUiLCJjb25maWciLCJiYXNlVXJsIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImFwaSIsImFwaVBhdGgiLCJ0b2tlbiIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiaGVhZGVycyIsImpzb24iLCJhdXRoRmV0Y2giLCJvcHRpb25zIiwiQXV0aG9yaXphdGlvbiIsInZlcnNpb25zIiwiZmxhdm9yIiwibWFrZVJlc3VsdCIsInBhY2thZ2VKU09OIiwiYXJ0aWZhY3RzIiwiZmlsdGVyIiwiYXJ0aWZhY3RQYXRoIiwicGF0aCIsImJhc2VuYW1lIiwidG9Mb3dlckNhc2UiLCJleGlzdGluZ1ZlcnNpb24iLCJmaW5kIiwidmVyc2lvbiIsIm5hbWUiLCJjaGFubmVsIiwiaW5jbHVkZXMiLCJub3RlcyIsInVwbG9hZGVkIiwidXBkYXRlU3RhdHVzTGluZSIsImxlbmd0aCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJleGlzdGluZ0Fzc2V0IiwiYXNzZXRzIiwiYXNzZXQiLCJhcnRpZmFjdEZvcm0iLCJGb3JtRGF0YSIsImFwcGVuZCIsImZpbGVPcHRpb25zIiwia25vd25MZW5ndGgiLCJmcyIsInN0YXRTeW5jIiwic2l6ZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXRIZWFkZXJzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXdKdUJBLENBQWtCOzs7ZUFBbEJBLE9BQWtCOzs7O0FBeEp4QixHQUFNLENBQU4sS0FBTTtBQUV5QixHQUFnQyxDQUFoQyxjQUFnQztBQUU5RCxHQUFPLENBQVAsTUFBTztBQUNKLEdBQVcsQ0FBWCxTQUFXO0FBQ2pCLEdBQVUsQ0FBVixRQUFVO0FBQ2lDLEdBQVksQ0FB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
package/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ // ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️
2
+ // This file was automatically generated by `tools/gen-ts-glue.ts`. Do not modify directly if you want to keep your changes.
3
+ export * from "./src/PublisherERS";
4
+ import defaultExport from "./src/PublisherERS";
5
+ export default defaultExport;
package/package.json CHANGED
@@ -1,29 +1,28 @@
1
1
  {
2
2
  "name": "@electron-forge/publisher-electron-release-server",
3
- "version": "6.0.0-beta.9",
3
+ "version": "6.0.1",
4
4
  "description": "Electron release server publisher for Electron Forge",
5
- "repository": "https://github.com/electron-userland/electron-forge",
5
+ "repository": "https://github.com/electron/forge",
6
6
  "author": "Samuel Attard",
7
7
  "license": "MIT",
8
8
  "main": "dist/PublisherERS.js",
9
9
  "typings": "dist/PublisherERS.d.ts",
10
- "scripts": {
11
- "test": "exit 0"
12
- },
13
10
  "devDependencies": {
14
- "chai": "^4.0.0",
15
- "mocha": "^5.0.0"
11
+ "chai": "^4.3.3",
12
+ "fetch-mock": "^9.10.7",
13
+ "mocha": "^9.0.1",
14
+ "proxyquire": "^2.1.3",
15
+ "sinon": "^13.0.1"
16
16
  },
17
17
  "engines": {
18
- "node": ">= 6.0"
18
+ "node": ">= 14.17.5"
19
19
  },
20
20
  "dependencies": {
21
- "@electron-forge/async-ora": "6.0.0-beta.9",
22
- "@electron-forge/publisher-base": "6.0.0-beta.9",
23
- "@electron-forge/shared-types": "6.0.0-beta.9",
24
- "debug": "^3.0.0",
25
- "form-data": "^2.1.4",
26
- "fs-extra": "^5.0.0",
27
- "node-fetch": "^2.0.0"
21
+ "@electron-forge/publisher-base": "6.0.1",
22
+ "@electron-forge/shared-types": "6.0.1",
23
+ "debug": "^4.3.1",
24
+ "form-data": "^4.0.0",
25
+ "fs-extra": "^10.0.0",
26
+ "node-fetch": "^2.6.7"
28
27
  }
29
28
  }
package/tsconfig.json CHANGED
@@ -1,23 +1,39 @@
1
1
  {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "es6",
5
- "outDir": "dist",
6
- "lib": [
7
- "es6",
8
- "dom",
9
- "es7"
10
- ],
11
- "sourceMap": true,
12
- "rootDir": "src",
13
- "experimentalDecorators": true,
14
- "strict": true,
15
- "esModuleInterop": true,
16
- "declaration": true
17
- },
18
- "exclude": [
19
- "node_modules",
20
- "dist",
21
- "test"
22
- ]
2
+ "//": "⚠️ AUTOGENERATED ⚠️ This file was automatically generated by tools/gen-tsconfigs.ts, do not edit manually.",
3
+ "compilerOptions": {
4
+ "module": "commonjs",
5
+ "target": "es2019",
6
+ "outDir": "dist",
7
+ "lib": [
8
+ "dom",
9
+ "es2019"
10
+ ],
11
+ "sourceMap": true,
12
+ "rootDir": "src",
13
+ "experimentalDecorators": true,
14
+ "strict": true,
15
+ "esModuleInterop": true,
16
+ "declaration": true,
17
+ "composite": true,
18
+ "declarationMap": true,
19
+ "typeRoots": [
20
+ "../../../typings",
21
+ "../../../node_modules/@types"
22
+ ]
23
+ },
24
+ "exclude": [
25
+ "node_modules",
26
+ "dist",
27
+ "test",
28
+ "index.ts",
29
+ "tmpl"
30
+ ],
31
+ "references": [
32
+ {
33
+ "path": "../base"
34
+ },
35
+ {
36
+ "path": "../../utils/types"
37
+ }
38
+ ]
23
39
  }