@electron-forge/publisher-electron-release-server 6.0.0-beta.7 → 6.0.0-beta.70

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 }: 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":"AAGA,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,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CA+GhE;AAED,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,210 +1,155 @@
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
-
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"));
12
13
  var _asyncOra = require("@electron-forge/async-ora");
13
-
14
+ var _publisherBase = require("@electron-forge/publisher-base");
14
15
  var _debug = _interopRequireDefault(require("debug"));
15
-
16
- var _nodeFetch = _interopRequireDefault(require("node-fetch"));
17
-
18
16
  var _formData = _interopRequireDefault(require("form-data"));
19
-
20
17
  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
- }
18
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
19
+ var _config = require("./Config");
20
+ function _interopRequireDefault(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
25
+ const d = (0, _debug).default('electron-forge:publish:ers');
26
+ const fetchAndCheckStatus = async (url, init)=>{
27
+ const result = await (0, _nodeFetch).default(url, init);
28
+ if (result.ok) {
29
+ // res.status >= 200 && res.status < 300
30
+ return result;
31
+ }
32
+ throw new Error(`ERS publish failed with status code: ${result.status} (${result.url})`);
33
+ };
34
+ const ersPlatform = (platform, arch)=>{
35
+ switch(platform){
36
+ case 'darwin':
37
+ return 'osx_64';
38
+ case 'linux':
39
+ return arch === 'ia32' ? 'linux_32' : 'linux_64';
40
+ case 'win32':
41
+ return arch === 'ia32' ? 'windows_32' : 'windows_64';
42
+ default:
43
+ return platform;
44
+ }
44
45
  };
45
-
46
46
  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'
47
+ class PublisherERS extends _publisherBase.PublisherBase {
48
+ async publish({ makeResults }) {
49
+ const { config } = this;
50
+ if (!(config.baseUrl && config.username && config.password)) {
51
+ 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
52
  }
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: {
53
+ d('attempting to authenticate to ERS');
54
+ const api = (apiPath)=>`${config.baseUrl}/${apiPath}`
55
+ ;
56
+ const { token } = await (await fetchAndCheckStatus(api('api/auth/login'), {
57
+ method: 'POST',
58
+ body: JSON.stringify({
59
+ username: config.username,
60
+ password: config.password
61
+ }),
62
+ headers: {
126
63
  'Content-Type': 'application/json'
127
- }
64
+ }
65
+ })).json();
66
+ const authFetch = (apiPath, options)=>fetchAndCheckStatus(api(apiPath), {
67
+ ...options || {},
68
+ headers: {
69
+ ...(options || {}).headers,
70
+ Authorization: `Bearer ${token}`
71
+ }
72
+ })
73
+ ;
74
+ const versions = await (await authFetch('api/version')).json();
75
+ const flavor = config.flavor || 'default';
76
+ for (const makeResult of makeResults){
77
+ const { packageJSON } = makeResult;
78
+ const artifacts = makeResult.artifacts.filter((artifactPath)=>_path.default.basename(artifactPath).toLowerCase() !== 'releases'
79
+ );
80
+ const existingVersion = versions.find((version)=>{
81
+ return version.name === packageJSON.version && (!version.flavor || version.flavor === flavor);
128
82
  });
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;
83
+ let channel = 'stable';
84
+ if (config.channel) {
85
+ channel = config.channel;
86
+ } else if (packageJSON.version.includes('beta')) {
87
+ channel = 'beta';
88
+ } else if (packageJSON.version.includes('alpha')) {
89
+ channel = 'alpha';
90
+ }
91
+ if (!existingVersion) {
92
+ await authFetch('api/version', {
93
+ method: 'POST',
94
+ body: JSON.stringify({
95
+ channel: {
96
+ name: channel
97
+ },
98
+ flavor: config.flavor,
99
+ name: packageJSON.version,
100
+ notes: ''
101
+ }),
102
+ headers: {
103
+ 'Content-Type': 'application/json'
104
+ }
105
+ });
106
+ }
107
+ let uploaded = 0;
108
+ const getText = ()=>`Uploading Artifacts ${uploaded}/${artifacts.length}`
109
+ ;
110
+ await (0, _asyncOra).asyncOra(getText(), async (uploadSpinner)=>{
111
+ const updateSpinner = ()=>{
112
+ uploadSpinner.text = getText();
113
+ };
114
+ await Promise.all(artifacts.map(async (artifactPath)=>{
115
+ if (existingVersion) {
116
+ const existingAsset = existingVersion.assets.find((asset)=>asset.name === _path.default.basename(artifactPath)
117
+ );
118
+ if (existingAsset) {
119
+ d('asset at path:', artifactPath, 'already exists on server');
120
+ uploaded += 1;
121
+ updateSpinner();
122
+ return;
123
+ }
155
124
  }
156
- }
157
-
158
- try {
159
125
  d('attempting to upload asset:', artifactPath);
160
126
  const artifactForm = new _formData.default();
161
127
  artifactForm.append('token', token);
162
128
  artifactForm.append('version', packageJSON.version);
163
129
  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()
130
+ // see https://github.com/form-data/form-data/issues/426
131
+ const fileOptions = {
132
+ knownLength: _fsExtra.default.statSync(artifactPath).size
133
+ };
134
+ artifactForm.append('file', _fsExtra.default.createReadStream(artifactPath), fileOptions);
135
+ await authFetch('api/asset', {
136
+ method: 'POST',
137
+ body: artifactForm,
138
+ headers: artifactForm.getHeaders()
169
139
  });
170
140
  d('upload successful for asset:', artifactPath);
171
141
  uploaded += 1;
172
142
  updateSpinner();
173
- resolve();
174
- } catch (err) {
175
- reject(err);
176
- }
177
- });
178
-
179
- return function (_x2, _x3) {
180
- return _ref3.apply(this, arguments);
181
- };
182
- }())));
143
+ }));
183
144
  });
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
- }
202
145
  }
203
- }
204
- })();
205
- }
206
-
146
+ }
147
+ constructor(...args){
148
+ super(...args);
149
+ this.name = 'electron-release-server';
150
+ }
207
151
  }
208
-
209
152
  exports.default = PublisherERS;
210
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJFUlMudHMiXSwibmFtZXMiOlsiZCIsImVyc1BsYXRmb3JtIiwicGxhdGZvcm0iLCJhcmNoIiwiUHVibGlzaGVyRVJTIiwiUHVibGlzaGVyQmFzZSIsInB1Ymxpc2giLCJtYWtlUmVzdWx0cyIsImNvbmZpZyIsImJhc2VVcmwiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXBpIiwiYXBpUGF0aCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiaGVhZGVycyIsImpzb24iLCJ0b2tlbiIsImF1dGhGZXRjaCIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJBdXRob3JpemF0aW9uIiwidmVyc2lvbnMiLCJtYWtlUmVzdWx0IiwiYXJ0aWZhY3RzIiwicGFja2FnZUpTT04iLCJleGlzdGluZ1ZlcnNpb24iLCJmaW5kIiwidmVyc2lvbiIsIm5hbWUiLCJjaGFubmVsIiwiaW5jbHVkZXMiLCJub3RlcyIsInVwbG9hZGVkIiwiZ2V0VGV4dCIsImxlbmd0aCIsInVwbG9hZFNwaW5uZXIiLCJ1cGRhdGVTcGlubmVyIiwidGV4dCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJhcnRpZmFjdFBhdGgiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXhpc3RpbmdBc3NldCIsImFzc2V0cyIsImFzc2V0IiwicGF0aCIsImJhc2VuYW1lIiwiYXJ0aWZhY3RGb3JtIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJmcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXRIZWFkZXJzIiwiZXJyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBSUEsTUFBTUEsSUFBSSxvQkFBTSw0QkFBTixDQUFWOztBQU9PLE1BQU1DLGNBQWMsQ0FBQ0MsUUFBRCxFQUEwQkMsSUFBMUIsS0FBOEM7QUFDdkUsVUFBUUQsUUFBUjtBQUNFLFNBQUssUUFBTDtBQUNFLGFBQU8sUUFBUDs7QUFDRixT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Q0FBYUUsTUFBYixDQUFvQixNQUFwQixFQUE0QkMsaUJBQUdDLGdCQUFILENBQW9CWixZQUFwQixDQUE1QjtBQUNBLDBCQUFNekIsVUFBVSxXQUFWLEVBQXVCO0FBQzNCUCw4QkFBUSxNQURtQjtBQUUzQkMsNEJBQU11QyxZQUZxQjtBQUczQnBDLCtCQUFTb0MsYUFBYUssVUFBYjtBQUhrQixxQkFBdkIsQ0FBTjtBQUtBM0Qsc0JBQUUsOEJBQUYsRUFBa0M4QyxZQUFsQztBQUNBVCxnQ0FBWSxDQUFaO0FBQ0FJO0FBQ0FNO0FBQ0QsbUJBaEJELENBZ0JFLE9BQU9hLEdBQVAsRUFBWTtBQUNaWiwyQkFBT1ksR0FBUDtBQUNEO0FBQ0YsaUJBaENEOztBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQURnQixDQUFaLENBQU47QUFtQ0QsYUF4Q0s7O0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBTjtBQXlDRDtBQXZHOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0doRDs7QUEzR3lFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFB1Ymxpc2hlckJhc2UsIHsgUHVibGlzaGVyT3B0aW9ucyB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9wdWJsaXNoZXItYmFzZSc7XG5pbXBvcnQgeyBhc3luY09yYSB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9hc3luYy1vcmEnO1xuaW1wb3J0IHsgRm9yZ2VQbGF0Zm9ybSwgRm9yZ2VBcmNoIH0gZnJvbSAnQGVsZWN0cm9uLWZvcmdlL3NoYXJlZC10eXBlcyc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZmV0Y2ggZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgUHVibGlzaGVyRVJTQ29uZmlnIH0gZnJvbSAnLi9Db25maWcnO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnB1Ymxpc2g6ZXJzJyk7XG5cbmludGVyZmFjZSBFUlNWZXJzaW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhc3NldHM6IHsgbmFtZTogc3RyaW5nOyB9W107XG59XG5cbmV4cG9ydCBjb25zdCBlcnNQbGF0Zm9ybSA9IChwbGF0Zm9ybTogRm9yZ2VQbGF0Zm9ybSwgYXJjaDogRm9yZ2VBcmNoKSA9PiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgcmV0dXJuICdvc3hfNjQnO1xuICAgIGNhc2UgJ2xpbnV4JzpcbiAgICAgIHJldHVybiBhcmNoID09PSAnaWEzMicgPyAnbGludXhfMzInIDogJ2xpbnV4XzY0JztcbiAgICBjYXNlICd3aW4zMic6XG4gICAgICByZXR1cm4gYXJjaCA9PT0gJ2lhMzInID8gJ3dpbmRvd3NfMzInIDogJ3dpbmRvd3NfNjQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGxhdGZvcm07XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlckVSUyBleHRlbmRzIFB1Ymxpc2hlckJhc2U8UHVibGlzaGVyRVJTQ29uZmlnPiB7XG4gIG5hbWUgPSAnZWxlY3Ryb24tcmVsZWFzZS1zZXJ2ZXInO1xuXG4gIGFzeW5jIHB1Ymxpc2goeyBtYWtlUmVzdWx0cyB9OiBQdWJsaXNoZXJPcHRpb25zKSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICBpZiAoIShjb25maWcuYmFzZVVybCAmJiBjb25maWcudXNlcm5hbWUgJiYgY29uZmlnLnBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgJ0luIG9yZGVyIHRvIHB1Ymxpc2ggdG8gRVJTIHlvdSBtdXN0IHNldCB0aGUgXCJlbGVjdHJvblJlbGVhc2VTZXJ2ZXIuYmFzZVVybFwiLCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci51c2VybmFtZVwiIGFuZCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci5wYXNzd29yZFwiIHByb3BlcnRpZXMgaW4geW91ciBmb3JnZSBjb25maWcuIFNlZSB0aGUgZG9jcyBmb3IgbW9yZSBpbmZvJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cblxuICAgIGQoJ2F0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIHRvIEVSUycpO1xuXG4gICAgY29uc3QgYXBpID0gKGFwaVBhdGg6IHN0cmluZykgPT4gYCR7Y29uZmlnLmJhc2VVcmx9LyR7YXBpUGF0aH1gO1xuXG4gICAgY29uc3QgeyB0b2tlbiB9ID0gYXdhaXQgKGF3YWl0IGZldGNoKGFwaSgnYXBpL2F1dGgvbG9naW4nKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHVzZXJuYW1lOiBjb25maWcudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgICB9KSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgfSkpLmpzb24oKTtcblxuICAgIGNvbnN0IGF1dGhGZXRjaCA9IChhcGlQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpID0+XG4gICAgICBmZXRjaChhcGkoYXBpUGF0aCksIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMgfHwge30sIHtcbiAgICAgICAgaGVhZGVyczogT2JqZWN0LmFzc2lnbih7fSwgKG9wdGlvbnMgfHwge30pLmhlYWRlcnMsIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSksXG4gICAgICB9KSk7XG5cbiAgICBjb25zdCB2ZXJzaW9uczogRVJTVmVyc2lvbltdID0gYXdhaXQgKGF3YWl0IGF1dGhGZXRjaCgnYXBpL3ZlcnNpb24nKSkuanNvbigpO1xuXG4gICAgZm9yIChjb25zdCBtYWtlUmVzdWx0IG9mIG1ha2VSZXN1bHRzKSB7XG4gICAgICBjb25zdCB7IGFydGlmYWN0cywgcGFja2FnZUpTT04gfSA9IG1ha2VSZXN1bHQ7XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nVmVyc2lvbiA9IHZlcnNpb25zLmZpbmQodmVyc2lvbiA9PiB2ZXJzaW9uLm5hbWUgPT09IHBhY2thZ2VKU09OLnZlcnNpb24pO1xuXG4gICAgICBsZXQgY2hhbm5lbCA9ICdzdGFibGUnO1xuICAgICAgaWYgKGNvbmZpZy5jaGFubmVsKSB7XG4gICAgICAgIGNoYW5uZWwgPSBjb25maWcuY2hhbm5lbDtcbiAgICAgIH0gZWxzZSBpZiAocGFja2FnZUpTT04udmVyc2lvbi5pbmNsdWRlcygnYmV0YScpKSB7XG4gICAgICAgIGNoYW5uZWwgPSAnYmV0YSc7XG4gICAgICB9IGVsc2UgaWYgKHBhY2thZ2VKU09OLnZlcnNpb24uaW5jbHVkZXMoJ2FscGhhJykpIHtcbiAgICAgICAgY2hhbm5lbCA9ICdhbHBoYSc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhpc3RpbmdWZXJzaW9uKSB7XG4gICAgICAgIGF3YWl0IGF1dGhGZXRjaCgnYXBpL3ZlcnNpb24nLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2hhbm5lbDoge1xuICAgICAgICAgICAgICBuYW1lOiBjaGFubmVsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLnZlcnNpb24sXG4gICAgICAgICAgICBub3RlczogJycsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwbG9hZGVkID0gMDtcbiAgICAgIGNvbnN0IGdldFRleHQgPSAoKSA9PiBgVXBsb2FkaW5nIEFydGlmYWN0cyAke3VwbG9hZGVkfS8ke2FydGlmYWN0cy5sZW5ndGh9YDtcblxuICAgICAgYXdhaXQgYXN5bmNPcmEoZ2V0VGV4dCgpLCBhc3luYyAodXBsb2FkU3Bpbm5lcikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVTcGlubmVyID0gKCkgPT4ge1xuICAgICAgICAgIHVwbG9hZFNwaW5uZXIudGV4dCA9IGdldFRleHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhcnRpZmFjdHMubWFwKGFydGlmYWN0UGF0aCA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBc3NldCA9IGV4aXN0aW5nVmVyc2lvbi5hc3NldHMuZmluZChcbiAgICAgICAgICAgICAgICBhc3NldCA9PiBhc3NldC5uYW1lID09PSBwYXRoLmJhc2VuYW1lKGFydGlmYWN0UGF0aCksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXNzZXQpIHtcbiAgICAgICAgICAgICAgICBkKCdhc3NldCBhdCBwYXRoOicsIGFydGlmYWN0UGF0aCwgJ2FscmVhZHkgZXhpc3RzIG9uIHNlcnZlcicpO1xuICAgICAgICAgICAgICAgIHVwbG9hZGVkICs9IDE7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3Bpbm5lcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZCgnYXR0ZW1wdGluZyB0byB1cGxvYWQgYXNzZXQ6JywgYXJ0aWZhY3RQYXRoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgICAgICAgICAgICBhcnRpZmFjdEZvcm0uYXBwZW5kKCd2ZXJzaW9uJywgcGFja2FnZUpTT04udmVyc2lvbik7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3BsYXRmb3JtJywgZXJzUGxhdGZvcm0obWFrZVJlc3VsdC5wbGF0Zm9ybSwgbWFrZVJlc3VsdC5hcmNoKSk7XG4gICAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGFydGlmYWN0UGF0aCkpO1xuICAgICAgICAgICAgICBhd2FpdCBhdXRoRmV0Y2goJ2FwaS9hc3NldCcsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBhcnRpZmFjdEZvcm0sXG4gICAgICAgICAgICAgICAgaGVhZGVyczogYXJ0aWZhY3RGb3JtLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGQoJ3VwbG9hZCBzdWNjZXNzZnVsIGZvciBhc3NldDonLCBhcnRpZmFjdFBhdGgpO1xuICAgICAgICAgICAgICB1cGxvYWRlZCArPSAxO1xuICAgICAgICAgICAgICB1cGRhdGVTcGlubmVyKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
153
+ exports.PublisherERS = PublisherERS;
154
+
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QdWJsaXNoZXJFUlMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IGFzeW5jT3JhIH0gZnJvbSAnQGVsZWN0cm9uLWZvcmdlL2FzeW5jLW9yYSc7XG5pbXBvcnQgeyBQdWJsaXNoZXJCYXNlLCBQdWJsaXNoZXJPcHRpb25zIH0gZnJvbSAnQGVsZWN0cm9uLWZvcmdlL3B1Ymxpc2hlci1iYXNlJztcbmltcG9ydCB7IEZvcmdlQXJjaCwgRm9yZ2VQbGF0Zm9ybSB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9zaGFyZWQtdHlwZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBmZXRjaCwgeyBSZXF1ZXN0SW5mbywgUmVxdWVzdEluaXQsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5cbmltcG9ydCB7IFB1Ymxpc2hlckVSU0NvbmZpZyB9IGZyb20gJy4vQ29uZmlnJztcblxuY29uc3QgZCA9IGRlYnVnKCdlbGVjdHJvbi1mb3JnZTpwdWJsaXNoOmVycycpO1xuXG5pbnRlcmZhY2UgRVJTVmVyc2lvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYXNzZXRzOiB7IG5hbWU6IHN0cmluZyB9W107XG4gIGZsYXZvcj86IHN0cmluZztcbn1cblxuY29uc3QgZmV0Y2hBbmRDaGVja1N0YXR1cyA9IGFzeW5jICh1cmw6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKHVybCwgaW5pdCk7XG4gIGlmIChyZXN1bHQub2spIHtcbiAgICAvLyByZXMuc3RhdHVzID49IDIwMCAmJiByZXMuc3RhdHVzIDwgMzAwXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEVSUyBwdWJsaXNoIGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3VsdC5zdGF0dXN9ICgke3Jlc3VsdC51cmx9KWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGVyc1BsYXRmb3JtID0gKHBsYXRmb3JtOiBGb3JnZVBsYXRmb3JtLCBhcmNoOiBGb3JnZUFyY2gpOiBzdHJpbmcgPT4ge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnZGFyd2luJzpcbiAgICAgIHJldHVybiAnb3N4XzY0JztcbiAgICBjYXNlICdsaW51eCc6XG4gICAgICByZXR1cm4gYXJjaCA9PT0gJ2lhMzInID8gJ2xpbnV4XzMyJyA6ICdsaW51eF82NCc7XG4gICAgY2FzZSAnd2luMzInOlxuICAgICAgcmV0dXJuIGFyY2ggPT09ICdpYTMyJyA/ICd3aW5kb3dzXzMyJyA6ICd3aW5kb3dzXzY0JztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBsYXRmb3JtO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJFUlMgZXh0ZW5kcyBQdWJsaXNoZXJCYXNlPFB1Ymxpc2hlckVSU0NvbmZpZz4ge1xuICBuYW1lID0gJ2VsZWN0cm9uLXJlbGVhc2Utc2VydmVyJztcblxuICBhc3luYyBwdWJsaXNoKHsgbWFrZVJlc3VsdHMgfTogUHVibGlzaGVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzO1xuXG4gICAgaWYgKCEoY29uZmlnLmJhc2VVcmwgJiYgY29uZmlnLnVzZXJuYW1lICYmIGNvbmZpZy5wYXNzd29yZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0luIG9yZGVyIHRvIHB1Ymxpc2ggdG8gRVJTIHlvdSBtdXN0IHNldCB0aGUgXCJlbGVjdHJvblJlbGVhc2VTZXJ2ZXIuYmFzZVVybFwiLCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci51c2VybmFtZVwiIGFuZCBcImVsZWN0cm9uUmVsZWFzZVNlcnZlci5wYXNzd29yZFwiIHByb3BlcnRpZXMgaW4geW91ciBGb3JnZSBjb25maWcuIFNlZSB0aGUgZG9jcyBmb3IgbW9yZSBpbmZvJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBkKCdhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSB0byBFUlMnKTtcblxuICAgIGNvbnN0IGFwaSA9IChhcGlQYXRoOiBzdHJpbmcpID0+IGAke2NvbmZpZy5iYXNlVXJsfS8ke2FwaVBhdGh9YDtcblxuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGF3YWl0IChcbiAgICAgIGF3YWl0IGZldGNoQW5kQ2hlY2tTdGF0dXMoYXBpKCdhcGkvYXV0aC9sb2dpbicpLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICB9KSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuanNvbigpO1xuXG4gICAgY29uc3QgYXV0aEZldGNoID0gKGFwaVBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RJbml0KSA9PlxuICAgICAgZmV0Y2hBbmRDaGVja1N0YXR1cyhhcGkoYXBpUGF0aCksIHsgLi4uKG9wdGlvbnMgfHwge30pLCBoZWFkZXJzOiB7IC4uLihvcHRpb25zIHx8IHt9KS5oZWFkZXJzLCBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pO1xuXG4gICAgY29uc3QgdmVyc2lvbnM6IEVSU1ZlcnNpb25bXSA9IGF3YWl0IChhd2FpdCBhdXRoRmV0Y2goJ2FwaS92ZXJzaW9uJykpLmpzb24oKTtcbiAgICBjb25zdCBmbGF2b3IgPSBjb25maWcuZmxhdm9yIHx8ICdkZWZhdWx0JztcblxuICAgIGZvciAoY29uc3QgbWFrZVJlc3VsdCBvZiBtYWtlUmVzdWx0cykge1xuICAgICAgY29uc3QgeyBwYWNrYWdlSlNPTiB9ID0gbWFrZVJlc3VsdDtcbiAgICAgIGNvbnN0IGFydGlmYWN0cyA9IG1ha2VSZXN1bHQuYXJ0aWZhY3RzLmZpbHRlcigoYXJ0aWZhY3RQYXRoKSA9PiBwYXRoLmJhc2VuYW1lKGFydGlmYWN0UGF0aCkudG9Mb3dlckNhc2UoKSAhPT0gJ3JlbGVhc2VzJyk7XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nVmVyc2lvbiA9IHZlcnNpb25zLmZpbmQoKHZlcnNpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb24ubmFtZSA9PT0gcGFja2FnZUpTT04udmVyc2lvbiAmJiAoIXZlcnNpb24uZmxhdm9yIHx8IHZlcnNpb24uZmxhdm9yID09PSBmbGF2b3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBjaGFubmVsID0gJ3N0YWJsZSc7XG4gICAgICBpZiAoY29uZmlnLmNoYW5uZWwpIHtcbiAgICAgICAgY2hhbm5lbCA9IGNvbmZpZy5jaGFubmVsO1xuICAgICAgfSBlbHNlIGlmIChwYWNrYWdlSlNPTi52ZXJzaW9uLmluY2x1ZGVzKCdiZXRhJykpIHtcbiAgICAgICAgY2hhbm5lbCA9ICdiZXRhJztcbiAgICAgIH0gZWxzZSBpZiAocGFja2FnZUpTT04udmVyc2lvbi5pbmNsdWRlcygnYWxwaGEnKSkge1xuICAgICAgICBjaGFubmVsID0gJ2FscGhhJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFleGlzdGluZ1ZlcnNpb24pIHtcbiAgICAgICAgYXdhaXQgYXV0aEZldGNoKCdhcGkvdmVyc2lvbicsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBjaGFubmVsOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNoYW5uZWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmxhdm9yOiBjb25maWcuZmxhdm9yLFxuICAgICAgICAgICAgbmFtZTogcGFja2FnZUpTT04udmVyc2lvbixcbiAgICAgICAgICAgIG5vdGVzOiAnJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgdXBsb2FkZWQgPSAwO1xuICAgICAgY29uc3QgZ2V0VGV4dCA9ICgpID0+IGBVcGxvYWRpbmcgQXJ0aWZhY3RzICR7dXBsb2FkZWR9LyR7YXJ0aWZhY3RzLmxlbmd0aH1gO1xuXG4gICAgICBhd2FpdCBhc3luY09yYShnZXRUZXh0KCksIGFzeW5jICh1cGxvYWRTcGlubmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVNwaW5uZXIgPSAoKSA9PiB7XG4gICAgICAgICAgdXBsb2FkU3Bpbm5lci50ZXh0ID0gZ2V0VGV4dCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGFydGlmYWN0cy5tYXAoYXN5bmMgKGFydGlmYWN0UGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nVmVyc2lvbikge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0Fzc2V0ID0gZXhpc3RpbmdWZXJzaW9uLmFzc2V0cy5maW5kKChhc3NldCkgPT4gYXNzZXQubmFtZSA9PT0gcGF0aC5iYXNlbmFtZShhcnRpZmFjdFBhdGgpKTtcblxuICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdBc3NldCkge1xuICAgICAgICAgICAgICAgIGQoJ2Fzc2V0IGF0IHBhdGg6JywgYXJ0aWZhY3RQYXRoLCAnYWxyZWFkeSBleGlzdHMgb24gc2VydmVyJyk7XG4gICAgICAgICAgICAgICAgdXBsb2FkZWQgKz0gMTtcbiAgICAgICAgICAgICAgICB1cGRhdGVTcGlubmVyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkKCdhdHRlbXB0aW5nIHRvIHVwbG9hZCBhc3NldDonLCBhcnRpZmFjdFBhdGgpO1xuICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBhcnRpZmFjdEZvcm0uYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3ZlcnNpb24nLCBwYWNrYWdlSlNPTi52ZXJzaW9uKTtcbiAgICAgICAgICAgIGFydGlmYWN0Rm9ybS5hcHBlbmQoJ3BsYXRmb3JtJywgZXJzUGxhdGZvcm0obWFrZVJlc3VsdC5wbGF0Zm9ybSwgbWFrZVJlc3VsdC5hcmNoKSk7XG5cbiAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvNDI2XG4gICAgICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAga25vd25MZW5ndGg6IGZzLnN0YXRTeW5jKGFydGlmYWN0UGF0aCkuc2l6ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhcnRpZmFjdEZvcm0uYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbShhcnRpZmFjdFBhdGgpLCBmaWxlT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGF3YWl0IGF1dGhGZXRjaCgnYXBpL2Fzc2V0Jywge1xuICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgYm9keTogYXJ0aWZhY3RGb3JtLFxuICAgICAgICAgICAgICBoZWFkZXJzOiBhcnRpZmFjdEZvcm0uZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkKCd1cGxvYWQgc3VjY2Vzc2Z1bCBmb3IgYXNzZXQ6JywgYXJ0aWZhY3RQYXRoKTtcbiAgICAgICAgICAgIHVwbG9hZGVkICs9IDE7XG4gICAgICAgICAgICB1cGRhdGVTcGlubmVyKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBQdWJsaXNoZXJFUlMsIFB1Ymxpc2hlckVSU0NvbmZpZyB9O1xuIl0sIm5hbWVzIjpbIlB1Ymxpc2hlckVSU0NvbmZpZyIsImQiLCJkZWJ1ZyIsImZldGNoQW5kQ2hlY2tTdGF0dXMiLCJ1cmwiLCJpbml0IiwicmVzdWx0IiwiZmV0Y2giLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZXJzUGxhdGZvcm0iLCJwbGF0Zm9ybSIsImFyY2giLCJQdWJsaXNoZXJFUlMiLCJQdWJsaXNoZXJCYXNlIiwicHVibGlzaCIsIm1ha2VSZXN1bHRzIiwiY29uZmlnIiwiYmFzZVVybCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJhcGkiLCJhcGlQYXRoIiwidG9rZW4iLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlcnMiLCJqc29uIiwiYXV0aEZldGNoIiwib3B0aW9ucyIsIkF1dGhvcml6YXRpb24iLCJ2ZXJzaW9ucyIsImZsYXZvciIsIm1ha2VSZXN1bHQiLCJwYWNrYWdlSlNPTiIsImFydGlmYWN0cyIsImZpbHRlciIsImFydGlmYWN0UGF0aCIsInBhdGgiLCJiYXNlbmFtZSIsInRvTG93ZXJDYXNlIiwiZXhpc3RpbmdWZXJzaW9uIiwiZmluZCIsInZlcnNpb24iLCJuYW1lIiwiY2hhbm5lbCIsImluY2x1ZGVzIiwibm90ZXMiLCJ1cGxvYWRlZCIsImdldFRleHQiLCJsZW5ndGgiLCJhc3luY09yYSIsInVwbG9hZFNwaW5uZXIiLCJ1cGRhdGVTcGlubmVyIiwidGV4dCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJleGlzdGluZ0Fzc2V0IiwiYXNzZXRzIiwiYXNzZXQiLCJhcnRpZmFjdEZvcm0iLCJGb3JtRGF0YSIsImFwcGVuZCIsImZpbGVPcHRpb25zIiwia25vd25MZW5n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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,29 @@
1
1
  {
2
2
  "name": "@electron-forge/publisher-electron-release-server",
3
- "version": "6.0.0-beta.7",
3
+ "version": "6.0.0-beta.70",
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.7",
22
- "@electron-forge/publisher-base": "6.0.0-beta.7",
23
- "@electron-forge/shared-types": "6.0.0-beta.7",
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/async-ora": "6.0.0-beta.70",
22
+ "@electron-forge/publisher-base": "6.0.0-beta.70",
23
+ "@electron-forge/shared-types": "6.0.0-beta.70",
24
+ "debug": "^4.3.1",
25
+ "form-data": "^4.0.0",
26
+ "fs-extra": "^10.0.0",
27
+ "node-fetch": "^2.6.7"
28
28
  }
29
29
  }
package/src/Config.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export interface PublisherERSConfig {
2
2
  /**
3
3
  * The base URL of your instance of ERS.
4
- *
4
+ *
5
5
  * E.g. https://my-update.server.com
6
6
  */
7
7
  baseUrl: string;
@@ -16,11 +16,19 @@ export interface PublisherERSConfig {
16
16
  /**
17
17
  * The release channel you want to send artifacts to, normally something like
18
18
  * "stable", "beta" or "alpha".
19
- *
19
+ *
20
20
  * If left unspecified we will try to infer the channel from your version
21
21
  * field in your package.json.
22
- *
22
+ *
23
23
  * Default: stable
24
24
  */
25
25
  channel?: string;
26
+
27
+ /**
28
+ * The "flavor" of the binary that you want to release to.
29
+ * This is useful if you want to provide multiple versions
30
+ * of the same application version (e.g. full and lite)
31
+ * to end users.
32
+ */
33
+ flavor?: string;
26
34
  }