@todesktop/cli 1.1.1 → 1.1.4

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.
@@ -1,4225 +1,110 @@
1
- // modules are defined as an array
2
- // [ module function, map of requires ]
3
- //
4
- // map of requires is short require name -> numeric require
5
- //
6
- // anything defined in a previous bundle is accessed via the
7
- // orig method which is the require for previous bundles
8
- parcelRequire = (function (modules, cache, entry, globalName) {
9
- // Save the require from previous bundle to this closure if any
10
- var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
11
- var nodeRequire = typeof require === 'function' && require;
12
-
13
- function newRequire(name, jumped) {
14
- if (!cache[name]) {
15
- if (!modules[name]) {
16
- // if we cannot find the module within our internal map or
17
- // cache jump to the current global require ie. the last bundle
18
- // that was added to the page.
19
- var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
20
- if (!jumped && currentRequire) {
21
- return currentRequire(name, true);
22
- }
23
-
24
- // If there are other bundles on this page the require from the
25
- // previous one is saved to 'previousRequire'. Repeat this as
26
- // many times as there are bundles until the module is found or
27
- // we exhaust the require chain.
28
- if (previousRequire) {
29
- return previousRequire(name, true);
30
- }
31
-
32
- // Try the node require function if it exists.
33
- if (nodeRequire && typeof name === 'string') {
34
- return nodeRequire(name);
35
- }
36
-
37
- var err = new Error('Cannot find module \'' + name + '\'');
38
- err.code = 'MODULE_NOT_FOUND';
39
- throw err;
40
- }
41
-
42
- localRequire.resolve = resolve;
43
- localRequire.cache = {};
44
-
45
- var module = cache[name] = new newRequire.Module(name);
46
-
47
- modules[name][0].call(module.exports, localRequire, module, module.exports, this);
48
- }
49
-
50
- return cache[name].exports;
51
-
52
- function localRequire(x){
53
- return newRequire(localRequire.resolve(x));
54
- }
55
-
56
- function resolve(x){
57
- return modules[name][1][x] || x;
58
- }
59
- }
60
-
61
- function Module(moduleName) {
62
- this.id = moduleName;
63
- this.bundle = newRequire;
64
- this.exports = {};
65
- }
66
-
67
- newRequire.isParcelRequire = true;
68
- newRequire.Module = Module;
69
- newRequire.modules = modules;
70
- newRequire.cache = cache;
71
- newRequire.parent = previousRequire;
72
- newRequire.register = function (id, exports) {
73
- modules[id] = [function (require, module) {
74
- module.exports = exports;
75
- }, {}];
76
- };
77
-
78
- var error;
79
- for (var i = 0; i < entry.length; i++) {
80
- try {
81
- newRequire(entry[i]);
82
- } catch (e) {
83
- // Save first error but execute all entries
84
- if (!error) {
85
- error = e;
86
- }
87
- }
88
- }
89
-
90
- if (entry.length) {
91
- // Expose entry point to Node, AMD or browser globals
92
- // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
93
- var mainExports = newRequire(entry[entry.length - 1]);
94
-
95
- // CommonJS
96
- if (typeof exports === "object" && typeof module !== "undefined") {
97
- module.exports = mainExports;
98
-
99
- // RequireJS
100
- } else if (typeof define === "function" && define.amd) {
101
- define(function () {
102
- return mainExports;
103
- });
104
-
105
- // <script>
106
- } else if (globalName) {
107
- this[globalName] = mainExports;
108
- }
109
- }
110
-
111
- // Override the current require with this new one
112
- parcelRequire = newRequire;
113
-
114
- if (error) {
115
- // throw error from earlier, _after updating parcelRequire_
116
- throw error;
117
- }
118
-
119
- return newRequire;
120
- })({"../lib/utilities/checkIfReactIsUsable.js":[function(require,module,exports) {
121
- "use strict";
122
-
123
- Object.defineProperty(exports, "__esModule", {
124
- value: true
125
- });
126
- exports.default = void 0;
127
-
128
- var _react = require("react");
129
-
130
- /*
131
- This should be called at the top of all commands to test if React
132
- is OK and if not, to exit cleanly.
133
-
134
- If React throws an error (e.g. when there are multiple versions of
135
- React in the customer's dependency tree), then we need to exit with
136
- a non-zero error code and not with an uncaught exception somewhere.
137
-
138
- These parameters exist only to make things more testable
139
- */
140
- var _default = ({
141
- cons = console,
142
- proc = process
143
- } = {}) => {
144
- try {
145
- (0, _react.useState)(null);
146
- } catch (e) {
147
- cons.error(e);
148
- proc.exit(1);
149
- }
150
- };
151
-
152
- exports.default = _default;
153
- },{}],"../lib/components/TextInput.js":[function(require,module,exports) {
154
- "use strict";
155
-
156
- Object.defineProperty(exports, "__esModule", {
157
- value: true
158
- });
159
- exports.default = void 0;
160
-
161
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
162
-
163
- var _inkTextInput = _interopRequireDefault(require("ink-text-input"));
164
-
165
- var _react = _interopRequireDefault(require("react"));
166
-
167
- var _propTypes = _interopRequireDefault(require("prop-types"));
168
-
169
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
170
-
171
- const TextInput = ({
172
- onBlur,
173
- onFocus,
174
- ...props
175
- }) => {
176
- _react.default.useEffect(() => {
177
- onFocus();
178
- return onBlur;
179
- }, [onFocus, onBlur]);
180
-
181
- return /*#__PURE__*/_react.default.createElement(_inkTextInput.default, (0, _extends2.default)({}, props, {
182
- showCursor: true
183
- }));
184
- };
185
-
186
- TextInput.propTypes = {
187
- onBlur: _propTypes.default.func,
188
- onFocus: _propTypes.default.func
189
- };
190
- var _default = TextInput;
191
- exports.default = _default;
192
- },{}],"../lib/utilities/getCliVersion.js":[function(require,module,exports) {
193
- "use strict";
194
-
195
- Object.defineProperty(exports, "__esModule", {
196
- value: true
197
- });
198
- exports.default = void 0;
199
-
200
- var _pkgUp = _interopRequireDefault(require("pkg-up"));
201
-
202
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
203
-
204
- const cliVersion = require(_pkgUp.default.sync({
205
- cwd: __dirname
206
- })).version;
207
-
208
- var _default = () => cliVersion;
209
-
210
- exports.default = _default;
211
- },{}],"../lib/utilities/logger.js":[function(require,module,exports) {
212
- "use strict";
213
-
214
- Object.defineProperty(exports, "__esModule", {
215
- value: true
216
- });
217
- exports.default = void 0;
218
-
219
- var _bunyan = _interopRequireDefault(require("bunyan"));
220
-
221
- var fs = _interopRequireWildcard(require("fs"));
222
-
223
- var os = _interopRequireWildcard(require("os"));
224
-
225
- var path = _interopRequireWildcard(require("path"));
226
-
227
- var Sentry = _interopRequireWildcard(require("@sentry/node"));
228
-
229
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
230
-
231
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
232
-
233
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
234
-
235
- let logger;
236
-
237
- try {
238
- const name = "todesktop-cli";
239
- let parentDirectory;
240
- const homePath = os.homedir();
241
-
242
- if (process.platform === "darwin") {
243
- parentDirectory = path.join(homePath, "Library", "Logs", name);
244
- } else if (process.platform === "win32") {
245
- parentDirectory = path.join(process.env.APPDATA || path.join(homePath, "AppData", "Roaming"), name, "logs");
246
- } else {
247
- parentDirectory = path.join(process.env.XDG_CONFIG_HOME || path.join(homePath, ".config"), name, "logs");
248
- }
249
-
250
- fs.mkdirSync(parentDirectory, {
251
- recursive: true
252
- });
253
- logger = _bunyan.default.createLogger({
254
- name,
255
- src: true,
256
- streams: [{
257
- level: "debug",
258
- path: path.join(parentDirectory, "main.log")
259
- }]
260
- });
261
- } catch (e) {
262
- // Ignore
263
- const noOp = () => {};
264
-
265
- logger = {
266
- debug: noOp,
267
- error: noOp,
268
- fatal: noOp,
269
- info: noOp,
270
- trace: noOp,
271
- warn: noOp
272
- };
273
-
274
- try {
275
- Sentry.captureException(e);
276
- } catch (err) {// Ignore
277
- }
278
- }
279
-
280
- var _default = logger;
281
- exports.default = _default;
282
- },{}],"../lib/utilities/getEnvironmentVariables.js":[function(require,module,exports) {
283
- "use strict";
284
-
285
- Object.defineProperty(exports, "__esModule", {
286
- value: true
287
- });
288
- exports.default = void 0;
289
-
290
- var _dotenv = _interopRequireDefault(require("dotenv"));
291
-
292
- var path = _interopRequireWildcard(require("path"));
293
-
294
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
295
-
296
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
297
-
298
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
299
-
300
- let hasInitialized = false;
301
-
302
- const init = () => {
303
- if (hasInitialized) {
304
- return;
305
- }
306
-
307
- _dotenv.default.config({
308
- path: path.resolve(__dirname, "..", "..", ".env")
309
- });
310
-
311
- hasInitialized = true;
312
- };
313
-
314
- var _default = () => {
315
- init();
316
- return process.env;
317
- };
318
-
319
- exports.default = _default;
320
- },{}],"../lib/utilities/firestore.js":[function(require,module,exports) {
321
- "use strict";
322
-
323
- Object.defineProperty(exports, "__esModule", {
324
- value: true
325
- });
326
- exports.signInWithCustomToken = exports.onUserAuth = exports.default = exports.currentUser = void 0;
327
-
328
- var firebase = _interopRequireWildcard(require("firebase/app"));
329
-
330
- require("firebase/firestore");
331
-
332
- require("firebase/auth");
333
-
334
- var _getEnvironmentVariables = _interopRequireDefault(require("./getEnvironmentVariables"));
335
-
336
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
337
-
338
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
339
-
340
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
341
-
342
- const environmentVariables = (0, _getEnvironmentVariables.default)(); // if (environmentVariables.NODE_ENV === "development") {
343
- // if (true) {
344
- // firebase.firestore.setLogLevel("debug");
345
- // }
346
-
347
- const firebaseDB = firebase.initializeApp({
348
- apiKey: environmentVariables.TODESKTOP_CLI_FIREBASE_API_KEY,
349
- authDomain: environmentVariables.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,
350
- databaseURL: environmentVariables.TODESKTOP_CLI_FIREBASE_DATABASE_URL,
351
- projectId: environmentVariables.TODESKTOP_CLI_FIREBASE_PROJECT_ID,
352
- storageBucket: environmentVariables.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,
353
- messagingSenderId: environmentVariables.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,
354
- appId: environmentVariables.TODESKTOP_CLI_FIREBASE_ID
355
- });
356
-
357
- const currentUser = () => firebase.auth().currentUser;
358
-
359
- exports.currentUser = currentUser;
360
-
361
- const signInWithCustomToken = async token => {
362
- return firebase.auth().signInWithCustomToken(token);
363
- };
364
- /**
365
- * onUserAuth is only triggered on sign-in. This
366
- * happens once signInWithCustomToken is successful.
367
- *
368
- * It technically also triggers on sign-out but there's
369
- * no concept of signing out of firebase with the CLI app.
370
- * (See logout command which just deletes a local file)
371
- */
372
-
373
-
374
- exports.signInWithCustomToken = signInWithCustomToken;
375
-
376
- const onUserAuth = handler => firebase.auth().onAuthStateChanged(user => {
377
- handler(user || {});
378
- });
379
-
380
- exports.onUserAuth = onUserAuth;
381
-
382
- var _default = firebaseDB.firestore();
383
-
384
- exports.default = _default;
385
- },{"./getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js"}],"../lib/utilities/configStore.js":[function(require,module,exports) {
386
- "use strict";
387
-
388
- Object.defineProperty(exports, "__esModule", {
389
- value: true
390
- });
391
- exports.setConfig = exports.setAuthConfig = exports.jwtTokenConfigKey = exports.getConfig = exports.getAuthConfig = exports.emailConfigKey = exports.deleteAuthConfig = exports.accessTokenConfigKey = void 0;
392
-
393
- var fs = _interopRequireWildcard(require("fs"));
394
-
395
- var _del = _interopRequireDefault(require("del"));
396
-
397
- var _conf = _interopRequireDefault(require("conf"));
398
-
399
- var _xdgBasedir = _interopRequireDefault(require("xdg-basedir"));
400
-
401
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
402
-
403
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
404
-
405
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
406
-
407
- const config = new _conf.default({
408
- configName: "todesktop-cli"
409
- });
410
- const accessTokenConfigKey = "accessToken";
411
- exports.accessTokenConfigKey = accessTokenConfigKey;
412
- const emailConfigKey = "email";
413
- exports.emailConfigKey = emailConfigKey;
414
- const jwtTokenConfigKey = "jwtToken";
415
- exports.jwtTokenConfigKey = jwtTokenConfigKey;
416
-
417
- const setConfig = (key, value) => config.set(key, value);
418
-
419
- exports.setConfig = setConfig;
420
-
421
- const getConfig = key => config.get(key);
422
-
423
- exports.getConfig = getConfig;
424
-
425
- const setAuthConfig = (email, accessToken, jwtToken) => {
426
- setConfig(emailConfigKey, email);
427
- setConfig(accessTokenConfigKey, accessToken);
428
- setConfig(jwtTokenConfigKey, jwtToken);
429
- };
430
-
431
- exports.setAuthConfig = setAuthConfig;
432
-
433
- const getAuthConfig = () => {
434
- const accessToken = getConfig(accessTokenConfigKey);
435
- const jwtToken = getConfig(jwtTokenConfigKey);
436
- const email = getConfig(emailConfigKey);
437
- return {
438
- accessToken,
439
- jwtToken,
440
- email
441
- };
442
- };
443
-
444
- exports.getAuthConfig = getAuthConfig;
445
-
446
- const deleteAuthConfig = () => {
447
- config.delete(emailConfigKey);
448
- config.delete(accessTokenConfigKey);
449
- config.delete(jwtTokenConfigKey);
450
- }; // TODO - Delete by end of April: backwards compatibility for old configstore
451
-
452
-
453
- exports.deleteAuthConfig = deleteAuthConfig;
454
- const oldConfigPath = `${_xdgBasedir.default.config}/configstore/config.json.json`;
455
-
456
- if (fs.existsSync(oldConfigPath)) {
457
- try {
458
- // copy config from old json file to new json file, delete old file
459
- const {
460
- email,
461
- accessToken,
462
- jwtToken
463
- } = require(oldConfigPath);
464
-
465
- setAuthConfig(email, accessToken, jwtToken);
466
- (0, _del.default)(oldConfigPath, {
467
- force: true
468
- });
469
- } catch (err) {
470
- // if invalid json, delete file to prompt new login
471
- (0, _del.default)(oldConfigPath, {
472
- force: true
473
- });
474
- }
475
- }
476
- },{}],"../lib/utilities/analytics.js":[function(require,module,exports) {
477
- "use strict";
478
-
479
- Object.defineProperty(exports, "__esModule", {
480
- value: true
481
- });
482
- exports.track = exports.identify = exports.flush = exports.ANALYTICS_EVENT = void 0;
483
-
484
- var _os = _interopRequireDefault(require("os"));
485
-
486
- var _uuid = require("uuid");
487
-
488
- var _analyticsNode = _interopRequireDefault(require("analytics-node"));
489
-
490
- var _getEnvironmentVariables = _interopRequireDefault(require("./getEnvironmentVariables"));
491
-
492
- var _firestore = require("./firestore");
493
-
494
- var _configStore = require("./configStore");
495
-
496
- var _getCliVersion = _interopRequireDefault(require("./getCliVersion"));
497
-
498
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
499
-
500
- const environmentVariables = (0, _getEnvironmentVariables.default)();
501
- const analytics = new _analyticsNode.default(environmentVariables.SEGMENT_WRITE_KEY, {
502
- flushAt: 1,
503
- flushInterval: 1
504
- });
505
- const ANALYTICS_EVENT = {
506
- CLI_COMMAND: "CLI Command"
507
- };
508
- exports.ANALYTICS_EVENT = ANALYTICS_EVENT;
509
-
510
- function getAnalyticsBaseProperties() {
511
- let baseProps = {
512
- client: "cli"
513
- };
514
-
515
- try {
516
- baseProps.os = {
517
- name: _os.default.platform(),
518
- version: _os.default.release()
519
- };
520
- } catch (err) {}
521
-
522
- try {
523
- baseProps.user = {
524
- email: (0, _configStore.getAuthConfig)().email
525
- };
526
- } catch (err) {}
527
-
528
- try {
529
- baseProps.app = {
530
- cliVersion: (0, _getCliVersion.default)()
531
- };
532
- } catch (err) {}
533
-
534
- try {
535
- baseProps.runtime = {
536
- name: "Node.js",
537
- version: process.version
538
- };
539
- } catch (err) {}
540
-
541
- return baseProps;
542
- }
543
-
544
- const anonymousId = (0, _uuid.v4)();
545
-
546
- const track = (event, properties = {}, callback = () => {}) => {
547
- try {
548
- const user = (0, _firestore.currentUser)();
549
- analytics.track({
550
- event,
551
- userId: user ? user.uid : undefined,
552
- anonymousId,
553
- properties: { ...properties,
554
- ...getAnalyticsBaseProperties()
555
- }
556
- }, callback);
557
- } catch (err) {}
558
- };
559
-
560
- exports.track = track;
561
-
562
- const identify = (id, traits = {}, callback = () => {}) => {
563
- try {
564
- analytics.identify({
565
- userId: id,
566
- anonymousId,
567
- traits
568
- }, callback);
569
- } catch (err) {}
570
- };
571
-
572
- exports.identify = identify;
573
-
574
- const flush = (callback = () => {}) => analytics.flush(callback);
575
-
576
- exports.flush = flush;
577
- },{"./getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js","./firestore":"../lib/utilities/firestore.js","./configStore":"../lib/utilities/configStore.js","./getCliVersion":"../lib/utilities/getCliVersion.js"}],"../lib/utilities/useExit.js":[function(require,module,exports) {
578
- "use strict";
579
-
580
- Object.defineProperty(exports, "__esModule", {
581
- value: true
582
- });
583
- exports.default = void 0;
584
-
585
- var _ink = require("ink");
586
-
587
- var _analytics = require("./analytics");
588
-
589
- var _firestore = _interopRequireDefault(require("./firestore"));
590
-
591
- var _logger = _interopRequireDefault(require("./logger"));
592
-
593
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
594
-
595
- var _default = () => {
596
- const {
597
- exit
598
- } = (0, _ink.useApp)();
599
- return error => {
600
- _logger.default.debug({
601
- error
602
- }, "Exit called");
603
- /*
604
- First, destroy connections.
605
- Why do we need to do this if we're going to call process.exit
606
- below anyway? Just to be safe in case a Firestore subscription
607
- triggers a state update after the React app is exited.
608
- */
609
-
610
-
611
- _firestore.default.terminate().catch(e => // Ignore
612
- _logger.default.error(e));
613
-
614
- let timeoutId;
615
- Promise.race([// flush the analytics to make sure all outstanding events are pushed to segment
616
- new Promise(resolve => (0, _analytics.flush)(() => resolve())), // If it takes longer than 1 second, resolve early to proceed with program exit
617
- new Promise(resolve => timeoutId = setTimeout(() => resolve(), 1000))]).catch(() => {}).finally(() => {
618
- clearTimeout(timeoutId);
619
- /*
620
- Then, exit the React app. We don't pass the error because:
621
- 1. We don't want it displayed. We could give it a dummy error but
622
- that will output an empty line.
623
- 2. It doesn't exit with the correct code anyway, see
624
- https://github.com/vadimdemedes/pastel/issues/39.
625
- Side note: your component must not perform state updates after
626
- calling this, it will error.
627
- The try-catch shouldn't be needed here, but let's be safe
628
- */
629
-
630
- try {
631
- exit();
632
- } catch (e) {
633
- _logger.default.error(e); // Ignore
634
-
635
- }
636
- /*
637
- Then exit the process.
638
- It should happen if all connections, etc. are destroyed. We manually
639
- exit with a code because:
640
- 1. We might not clean up properly, it could fail or take a long time.
641
- 2. The exit function above doesn't exit the CLI with the correct
642
- code anyway.
643
- If we had a way to detect when the app exits, we would use that
644
- and then call process.exit / destroy connections appropriately
645
- (https://github.com/vadimdemedes/pastel/issues/38).
646
- */
647
-
648
-
649
- setTimeout(() => process.exit(error ? 1 : 0), 10);
650
- });
651
- };
652
- };
653
-
654
- exports.default = _default;
655
- },{"./analytics":"../lib/utilities/analytics.js","./firestore":"../lib/utilities/firestore.js","./logger":"../lib/utilities/logger.js"}],"../lib/components/ErrorDisplay.js":[function(require,module,exports) {
656
- "use strict";
657
-
658
- Object.defineProperty(exports, "__esModule", {
659
- value: true
660
- });
661
- exports.default = void 0;
662
-
663
- var _ink = require("ink");
664
-
665
- var _propTypes = _interopRequireDefault(require("prop-types"));
666
-
667
- var _react = _interopRequireWildcard(require("react"));
668
-
669
- var _getCliVersion = _interopRequireDefault(require("../utilities/getCliVersion"));
670
-
671
- var _logger = _interopRequireDefault(require("../utilities/logger"));
672
-
673
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
674
-
675
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
676
-
677
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
678
-
679
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
680
-
681
- const ErrorDisplay = ({
682
- commandUsed,
683
- error
684
- }) => {
685
- const exit = (0, _useExit.default)();
686
-
687
- _logger.default.error({
688
- error
689
- }); // After an error is set, exit
690
-
691
-
692
- (0, _react.useEffect)(() => {
693
- if (!error) {
694
- return;
695
- } // Just to avoid updating state after exiting the React app
696
-
697
-
698
- setTimeout(() => exit(error), 10);
699
- }, [exit, error]);
700
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
701
- backgroundColor: "red",
702
- color: "white"
703
- }, " ", "ERROR", " "), /*#__PURE__*/_react.default.createElement(_ink.Text, null, error.message || error.stack || error.toString()), /*#__PURE__*/_react.default.createElement(_ink.Box, {
704
- flexDirection: "column",
705
- marginTop: 1
706
- }, commandUsed ? /*#__PURE__*/_react.default.createElement(_ink.Text, {
707
- dimColor: true,
708
- color: "gray"
709
- }, "Command: ", commandUsed) : null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
710
- dimColor: true,
711
- color: "gray"
712
- }, "@todesktop/cli: ", (0, _getCliVersion.default)()), /*#__PURE__*/_react.default.createElement(_ink.Text, {
713
- dimColor: true,
714
- color: "gray"
715
- }, "Node: ", process.version), /*#__PURE__*/_react.default.createElement(_ink.Text, {
716
- dimColor: true,
717
- color: "gray"
718
- }, "cwd: ", process.cwd())));
719
- };
720
-
721
- ErrorDisplay.propTypes = {
722
- commandUsed: _propTypes.default.string,
723
- error: _propTypes.default.object.isRequired
724
- };
725
- var _default = ErrorDisplay;
726
- exports.default = _default;
727
- },{"../utilities/getCliVersion":"../lib/utilities/getCliVersion.js","../utilities/logger":"../lib/utilities/logger.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/utilities/postToFirebaseFunction.js":[function(require,module,exports) {
728
- "use strict";
729
-
730
- Object.defineProperty(exports, "__esModule", {
731
- value: true
732
- });
733
- exports.default = _default;
734
-
735
- var _axios = _interopRequireDefault(require("axios"));
736
-
737
- var _getEnvironmentVariables = _interopRequireDefault(require("./getEnvironmentVariables"));
738
-
739
- var _logger = _interopRequireDefault(require("./logger"));
740
-
741
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
742
-
743
- const {
744
- TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE
745
- } = (0, _getEnvironmentVariables.default)();
746
-
747
- async function _default(functionName, body = {}, config = {}) {
748
- _logger.default.debug({
749
- functionName,
750
- body,
751
- config
752
- }, "postToFirebaseFunction");
753
-
754
- try {
755
- const response = await _axios.default.post(`${TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE}${functionName}`, body, config);
756
-
757
- _logger.default.debug({
758
- responseData: response.data
759
- }, "postToFirebaseFunction: success");
760
-
761
- return response.data;
762
- } catch (e) {
763
- _logger.default.error({
764
- error: e
765
- }, "postToFirebaseFunction: error");
766
-
767
- throw e;
768
- }
769
- }
770
- },{"./getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js","./logger":"../lib/utilities/logger.js"}],"../lib/components/Login.js":[function(require,module,exports) {
771
- "use strict";
772
-
773
- Object.defineProperty(exports, "__esModule", {
774
- value: true
775
- });
776
- exports.default = void 0;
777
-
778
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
779
-
780
- var _ink = require("ink");
781
-
782
- var _propTypes = _interopRequireDefault(require("prop-types"));
783
-
784
- var _react = _interopRequireWildcard(require("react"));
785
-
786
- var _reactFinalForm = require("react-final-form");
787
-
788
- var _TextInput = _interopRequireDefault(require("../components/TextInput"));
789
-
790
- var _ErrorDisplay = _interopRequireDefault(require("./ErrorDisplay"));
791
-
792
- var _postToFirebaseFunction = _interopRequireDefault(require("../utilities/postToFirebaseFunction"));
793
-
794
- var _firestore = require("../utilities/firestore");
795
-
796
- var _configStore = require("../utilities/configStore");
797
-
798
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
799
-
800
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
801
-
802
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
803
-
804
- // modules
805
- // components
806
- // logic
807
- const loginFields = [{
808
- name: "email",
809
- label: "Your email",
810
- placeholder: "name@email.com",
811
- Input: _TextInput.default,
812
- validate: value => {
813
- if (!value) return "Required";
814
- }
815
- }, {
816
- name: "accessToken",
817
- label: "Your access token",
818
- placeholder: "********",
819
- Input: _TextInput.default,
820
- validate: value => {
821
- if (!value) return "Required";
822
- },
823
- mask: "*"
824
- }];
825
-
826
- const Login = ({
827
- setIsLoggedIn
828
- }) => {
829
- const [activeField, setActiveField] = (0, _react.useState)(0);
830
- const [error, setError] = (0, _react.useState)(null);
831
- const [failureMessage, setFailureMessage] = (0, _react.useState)(null);
832
- const [isSubmittingForm, setIsSubmittingForm] = (0, _react.useState)(false);
833
-
834
- const onFailure = message => {
835
- setIsSubmittingForm(false);
836
- setFailureMessage(message);
837
- setActiveField(0);
838
- }; // login handler that verifies accessToken and email with that in firebase
839
-
840
-
841
- const onSubmitLogin = async ({
842
- email,
843
- accessToken
844
- }) => {
845
- setFailureMessage(null);
846
- setIsSubmittingForm(true);
847
-
848
- try {
849
- const jwtToken = await (0, _postToFirebaseFunction.default)("loginWithAccessToken", {
850
- email,
851
- accessToken
852
- });
853
-
854
- if (jwtToken) {
855
- await (0, _firestore.signInWithCustomToken)(jwtToken);
856
- (0, _configStore.setAuthConfig)(email, accessToken, jwtToken);
857
- setIsLoggedIn(true);
858
- } else {
859
- onFailure("Incorrrect credentials. Try again");
860
- }
861
- } catch (err) {
862
- if (err.code === 500) {
863
- setError(err);
864
- } else {
865
- onFailure(`Login unsuccessful: ${err.message}`);
866
- }
867
- }
868
- };
869
-
870
- if (error) return /*#__PURE__*/_react.default.createElement(_ErrorDisplay.default, {
871
- error: error
872
- });
873
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Text, null, "You are not currently logged in."), /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Log in below:"), /*#__PURE__*/_react.default.createElement(_ink.Box, {
874
- marginBottom: 1
875
- }), /*#__PURE__*/_react.default.createElement(_reactFinalForm.Form, {
876
- onSubmit: onSubmitLogin
877
- }, ({
878
- handleSubmit,
879
- validating,
880
- form
881
- }) => /*#__PURE__*/_react.default.createElement(_ink.Box, {
882
- flexDirection: "column"
883
- }, loginFields.map(({
884
- name,
885
- label,
886
- placeholder,
887
- validate,
888
- Input,
889
- mask
890
- }, index) => /*#__PURE__*/_react.default.createElement(_reactFinalForm.Field, {
891
- name: name,
892
- key: name,
893
- validate: validate
894
- }, ({
895
- input,
896
- meta
897
- }) => /*#__PURE__*/_react.default.createElement(_ink.Box, {
898
- flexDirection: "column"
899
- }, activeField >= index ? /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
900
- bold: activeField === index
901
- }, label, ": "), activeField === index ? /*#__PURE__*/_react.default.createElement(Input, (0, _extends2.default)({}, input, {
902
- mask: mask,
903
- placeholder: placeholder,
904
- onSubmit: () => {
905
- if (meta.valid && !validating) {
906
- setActiveField(value => value + 1); // go to next field
907
-
908
- if (activeField === loginFields.length - 1) {
909
- // last field, so submit
910
- handleSubmit();
911
- }
912
- } else {
913
- input.onBlur(); // mark as touched to show error
914
- }
915
- }
916
- })) : input.value && /*#__PURE__*/_react.default.createElement(_ink.Text, null, name === "accessToken" ? input.value.replace(/./gi, "*") : input.value) || placeholder && /*#__PURE__*/_react.default.createElement(_ink.Text, {
917
- color: "gray"
918
- }, placeholder), meta.invalid && meta.touched && /*#__PURE__*/_react.default.createElement(_ink.Box, {
919
- marginLeft: 2,
920
- marginRight: 1
921
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
922
- color: "red"
923
- }, "\u2716")), meta.error && meta.touched && /*#__PURE__*/_react.default.createElement(Error, {
924
- errorMessage: meta.error
925
- })) : null))))), isSubmittingForm && /*#__PURE__*/_react.default.createElement(_ink.Box, {
926
- marginTop: 1
927
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Logging in...")), failureMessage && /*#__PURE__*/_react.default.createElement(Error, {
928
- errorMessage: failureMessage,
929
- marginTop: true
930
- }));
931
- };
932
-
933
- const Error = ({
934
- errorMessage,
935
- marginTop
936
- }) => /*#__PURE__*/_react.default.createElement(_ink.Box, {
937
- marginTop: marginTop ? 1 : 0
938
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
939
- color: "red"
940
- }, errorMessage));
941
-
942
- Error.propTypes = {
943
- errorMessage: _propTypes.default.string.isRequired,
944
- marginTop: _propTypes.default.bool
945
- };
946
- Login.propTypes = {
947
- setIsLoggedIn: _propTypes.default.func.isRequired
948
- };
949
- var _default = Login;
950
- exports.default = _default;
951
- },{"../components/TextInput":"../lib/components/TextInput.js","./ErrorDisplay":"../lib/components/ErrorDisplay.js","../utilities/postToFirebaseFunction":"../lib/utilities/postToFirebaseFunction.js","../utilities/firestore":"../lib/utilities/firestore.js","../utilities/configStore":"../lib/utilities/configStore.js"}],"../lib/components/LoginHOC.js":[function(require,module,exports) {
952
- "use strict";
953
-
954
- Object.defineProperty(exports, "__esModule", {
955
- value: true
956
- });
957
- exports.default = void 0;
958
-
959
- var _ink = require("ink");
960
-
961
- var _react = _interopRequireWildcard(require("react"));
962
-
963
- var _propTypes = _interopRequireDefault(require("prop-types"));
964
-
965
- var _isCi = _interopRequireDefault(require("is-ci"));
966
-
967
- var _Login = _interopRequireDefault(require("./Login"));
968
-
969
- var _firestore = require("../utilities/firestore");
970
-
971
- var _configStore = require("../utilities/configStore");
972
-
973
- var _postToFirebaseFunction = _interopRequireDefault(require("../utilities/postToFirebaseFunction"));
974
-
975
- var _getEnvironmentVariables = _interopRequireDefault(require("../utilities/getEnvironmentVariables"));
976
-
977
- var _ErrorDisplay = _interopRequireDefault(require("./ErrorDisplay"));
978
-
979
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
980
-
981
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
982
-
983
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
984
-
985
- // components
986
- // logic
987
- const LoginHOC = ({
988
- children,
989
- isInteractive = true
990
- }) => {
991
- const [isLoggedIn, setIsLoggedIn] = (0, _react.useState)(false);
992
- const [isEffectDone, setEffectDone] = (0, _react.useState)(false);
993
- const [error, setError] = (0, _react.useState)(null);
994
- const {
995
- isRawModeSupported
996
- } = (0, _ink.useStdin)();
997
-
998
- const onFailure = (message, err = {}) => {
999
- setError({ ...err,
1000
- message
1001
- });
1002
- }; // use effect for determining if tokens exist and are valid
1003
-
1004
-
1005
- (0, _react.useEffect)(() => {
1006
- async function isAccessTokenValid() {
1007
- const {
1008
- accessToken,
1009
- email,
1010
- jwtToken
1011
- } = (0, _configStore.getAuthConfig)();
1012
- let userCreds = null;
1013
- const {
1014
- TODESKTOP_ACCESS_TOKEN,
1015
- TODESKTOP_EMAIL
1016
- } = (0, _getEnvironmentVariables.default)(); // 1. attempt log in with environment variables if present
1017
-
1018
- try {
1019
- if (TODESKTOP_ACCESS_TOKEN && TODESKTOP_EMAIL) {
1020
- const newJwtToken = await (0, _postToFirebaseFunction.default)("loginWithAccessToken", {
1021
- email: TODESKTOP_EMAIL,
1022
- accessToken: TODESKTOP_ACCESS_TOKEN
1023
- });
1024
-
1025
- if (newJwtToken) {
1026
- userCreds = await (0, _firestore.signInWithCustomToken)(newJwtToken);
1027
- if (userCreds.user) setIsLoggedIn(true);
1028
- } // if no environment variables set and is in a CI, set alert message and exit
1029
-
1030
- } else if (!isRawModeSupported || _isCi.default) {
1031
- onFailure("ToDesktop environment variables not found. When automating builds with your CI provider, you need to specify environment variables for TODESKTOP_EMAIL and TODESKTOP_ACCESS_TOKEN.");
1032
- }
1033
- } catch (err) {
1034
- // print error and stop the app execution if env variables attempted
1035
- onFailure("Log in with environment variables failed.", err);
1036
- } // 2. attempt log in with jwtToken if present
1037
-
1038
-
1039
- try {
1040
- if (!userCreds && jwtToken) {
1041
- userCreds = await (0, _firestore.signInWithCustomToken)(jwtToken);
1042
- if (userCreds.user) setIsLoggedIn(true);
1043
- }
1044
- } catch (err) {// do nothing, attempt login with accessToken and email
1045
- } // 3. attempt log in with accessToken and email on disk
1046
-
1047
-
1048
- try {
1049
- if (!userCreds && accessToken && email) {
1050
- const newJwtToken = await (0, _postToFirebaseFunction.default)("loginWithAccessToken", {
1051
- email,
1052
- accessToken
1053
- });
1054
-
1055
- if (newJwtToken) {
1056
- userCreds = await (0, _firestore.signInWithCustomToken)(newJwtToken);
1057
- (0, _configStore.setAuthConfig)(email, accessToken, newJwtToken);
1058
- if (userCreds.user) setIsLoggedIn(true);
1059
- }
1060
- }
1061
- } catch (err) {// do nothing: no error state and not logged in state means render login
1062
- }
1063
-
1064
- setEffectDone(true);
1065
- }
1066
-
1067
- isAccessTokenValid();
1068
- }, []);
1069
-
1070
- if (error && isInteractive) {
1071
- return /*#__PURE__*/_react.default.createElement(_ErrorDisplay.default, {
1072
- error: error
1073
- });
1074
- }
1075
-
1076
- if (!isEffectDone) {
1077
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "...");
1078
- }
1079
-
1080
- if (!isLoggedIn && isInteractive) {
1081
- return /*#__PURE__*/_react.default.createElement(_Login.default, {
1082
- setIsLoggedIn: setIsLoggedIn
1083
- });
1084
- }
1085
-
1086
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, children);
1087
- };
1088
-
1089
- LoginHOC.propTypes = {
1090
- children: _propTypes.default.object,
1091
- isInteractive: _propTypes.default.bool
1092
- };
1093
- var _default = LoginHOC;
1094
- exports.default = _default;
1095
- },{"./Login":"../lib/components/Login.js","../utilities/firestore":"../lib/utilities/firestore.js","../utilities/configStore":"../lib/utilities/configStore.js","../utilities/postToFirebaseFunction":"../lib/utilities/postToFirebaseFunction.js","../utilities/getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js","./ErrorDisplay":"../lib/components/ErrorDisplay.js"}],"../lib/components/ErrorBoundary.js":[function(require,module,exports) {
1096
- "use strict";
1097
-
1098
- Object.defineProperty(exports, "__esModule", {
1099
- value: true
1100
- });
1101
- exports.default = void 0;
1102
-
1103
- var _react = _interopRequireDefault(require("react"));
1104
-
1105
- var Sentry = _interopRequireWildcard(require("@sentry/node"));
1106
-
1107
- var _propTypes = _interopRequireDefault(require("prop-types"));
1108
-
1109
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1110
-
1111
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1112
-
1113
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1114
-
1115
- class ErrorBoundary extends _react.default.Component {
1116
- constructor(props) {
1117
- super(props);
1118
- this.state = {
1119
- eventId: null,
1120
- error: null
1121
- };
1122
- }
1123
-
1124
- static getDerivedStateFromError(error) {
1125
- return {
1126
- error
1127
- };
1128
- }
1129
-
1130
- componentDidCatch(error, errorInfo) {
1131
- Sentry.withScope(scope => {
1132
- scope.setExtras(errorInfo);
1133
- const eventId = Sentry.captureException(error);
1134
- this.setState({
1135
- eventId
1136
- });
1137
- });
1138
- }
1139
-
1140
- render() {
1141
- if (this.state.error) {
1142
- throw this.state.error;
1143
- }
1144
-
1145
- return this.props.children;
1146
- }
1147
-
1148
- }
1149
-
1150
- ErrorBoundary.propTypes = {
1151
- children: _propTypes.default.object
1152
- };
1153
- var _default = ErrorBoundary;
1154
- exports.default = _default;
1155
- },{}],"../lib/utilities/logForCI.js":[function(require,module,exports) {
1156
- "use strict";
1157
-
1158
- Object.defineProperty(exports, "__esModule", {
1159
- value: true
1160
- });
1161
- exports.default = void 0;
1162
-
1163
- var _isCi = _interopRequireDefault(require("is-ci"));
1164
-
1165
- var _logger = _interopRequireDefault(require("./logger"));
1166
-
1167
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1168
-
1169
- var _default = (...args) => {
1170
- _logger.default.info({
1171
- args
1172
- }, "logForCI");
1173
-
1174
- if (!_isCi.default) {
1175
- return;
1176
- }
1177
-
1178
- console.log(...args);
1179
- };
1180
-
1181
- exports.default = _default;
1182
- },{"./logger":"../lib/utilities/logger.js"}],"../lib/components/BuildCompleteMessage.js":[function(require,module,exports) {
1183
- "use strict";
1184
-
1185
- Object.defineProperty(exports, "__esModule", {
1186
- value: true
1187
- });
1188
- exports.default = void 0;
1189
-
1190
- var _ink = require("ink");
1191
-
1192
- var _inkLink = _interopRequireDefault(require("ink-link"));
1193
-
1194
- var _propTypes = _interopRequireDefault(require("prop-types"));
1195
-
1196
- var _react = _interopRequireWildcard(require("react"));
1197
-
1198
- var _logForCI = _interopRequireDefault(require("../utilities/logForCI"));
1199
-
1200
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
1201
-
1202
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1203
-
1204
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1205
-
1206
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1207
-
1208
- const BuildCompleteMessage = ({
1209
- build
1210
- }) => {
1211
- const exit = (0, _useExit.default)();
1212
- const url = build.standardUniversalDownloadUrl;
1213
- (0, _logForCI.default)(`Build complete! ${url}`); // On build completion, exit with non-error code
1214
-
1215
- (0, _react.useEffect)(() => {
1216
- if (url) {
1217
- // Just to avoid updating state after exiting the React app
1218
- setTimeout(exit, 10);
1219
- }
1220
- }, [exit, url]);
1221
- return /*#__PURE__*/_react.default.createElement(_ink.Box, {
1222
- marginBottom: 1
1223
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1224
- bold: true
1225
- }, "Build complete!"), " ", /*#__PURE__*/_react.default.createElement(_inkLink.default, {
1226
- fallback: false,
1227
- url: url
1228
- }, url || "")));
1229
- };
1230
-
1231
- BuildCompleteMessage.propTypes = {
1232
- build: _propTypes.default.object.isRequired
1233
- };
1234
- var _default = BuildCompleteMessage;
1235
- exports.default = _default;
1236
- },{"../utilities/logForCI":"../lib/utilities/logForCI.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/components/PlatformProgress.js":[function(require,module,exports) {
1237
- "use strict";
1238
-
1239
- Object.defineProperty(exports, "__esModule", {
1240
- value: true
1241
- });
1242
- exports.default = void 0;
1243
-
1244
- var _react = _interopRequireWildcard(require("react"));
1245
-
1246
- var _propTypes = _interopRequireDefault(require("prop-types"));
1247
-
1248
- var _ink = require("ink");
1249
-
1250
- var _inkLink = _interopRequireDefault(require("ink-link"));
1251
-
1252
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1253
-
1254
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1255
-
1256
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1257
-
1258
- const preLabelMaxWidth = "More info: ".length;
1259
-
1260
- const getProgressPercentageLabel = (percentage, activityType) => {
1261
- let backgroundColor = "white";
1262
- let color = "black";
1263
-
1264
- if (activityType === "error") {
1265
- backgroundColor = "red";
1266
- } else if (percentage === 100) {
1267
- backgroundColor = "green";
1268
- color = "black";
1269
- }
1270
-
1271
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1272
- backgroundColor: backgroundColor,
1273
- color: color
1274
- }, " ", Math.round(percentage).toString().padStart(2, "0"), "%", " "), /*#__PURE__*/_react.default.createElement(_ink.Text, null, " "));
1275
- };
1276
-
1277
- const PlatformProgress = ({
1278
- activityName,
1279
- activityType,
1280
- downloadUrl,
1281
- percent,
1282
- platform,
1283
- shouldShowReadyPrefix
1284
- }) => {
1285
- let progressIndicator;
1286
-
1287
- if (activityType === "done") {
1288
- progressIndicator = /*#__PURE__*/_react.default.createElement(_ink.Box, {
1289
- flexDirection: "column",
1290
- marginBottom: 1
1291
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, getProgressPercentageLabel(100), shouldShowReadyPrefix ? "Ready!" : ""), /*#__PURE__*/_react.default.createElement(_inkLink.default, {
1292
- fallback: false,
1293
- url: downloadUrl
1294
- }, downloadUrl));
1295
- } else {
1296
- let activityNameToDisplay = activityName.replace(/(?:\r\n|\r|\n)\s*/g, "↵ ");
1297
-
1298
- if (activityNameToDisplay.length > 64) {
1299
- activityNameToDisplay = `${activityNameToDisplay.substr(0, 61)}...`;
1300
- }
1301
-
1302
- progressIndicator = /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
1303
- flexDirection: "column",
1304
- marginBottom: 1
1305
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, ["preparation", "queue"].includes(activityType) ? undefined : getProgressPercentageLabel(percent, activityType), activityNameToDisplay, activityType === "error" ? "" : /*#__PURE__*/_react.default.createElement(_ink.Text, null, "..."))));
1306
- }
1307
-
1308
- return /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
1309
- width: preLabelMaxWidth
1310
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, platform[0].toUpperCase() + platform.substr(1), ": ")), progressIndicator);
1311
- };
1312
-
1313
- PlatformProgress.propTypes = {
1314
- activityName: _propTypes.default.string.isRequired,
1315
- activityType: _propTypes.default.string.isRequired,
1316
- downloadUrl: _propTypes.default.string,
1317
- percent: _propTypes.default.number.isRequired,
1318
- platform: _propTypes.default.string.isRequired,
1319
- shouldShowReadyPrefix: _propTypes.default.bool
1320
- };
1321
- var _default = PlatformProgress;
1322
- exports.default = _default;
1323
- },{}],"../lib/utilities/buildStatus.js":[function(require,module,exports) {
1324
- "use strict";
1325
-
1326
- Object.defineProperty(exports, "__esModule", {
1327
- value: true
1328
- });
1329
- exports.isPlatformBuildRunning = exports.isBuildRunning = exports.isBuildCancellable = exports.hasBuildKickedOff = void 0;
1330
-
1331
- const hasBuildKickedOff = build => {
1332
- if (!build) {
1333
- return false;
1334
- }
1335
-
1336
- return build.status && build.status !== "preparation";
1337
- }; // NOTE: this relies on Firestore solely
1338
-
1339
-
1340
- exports.hasBuildKickedOff = hasBuildKickedOff;
1341
-
1342
- const isBuildCancellable = build => hasBuildKickedOff(build) && isBuildRunning(build);
1343
-
1344
- exports.isBuildCancellable = isBuildCancellable;
1345
-
1346
- const isBuildRunning = build => {
1347
- if (!build) {
1348
- return false;
1349
- }
1350
-
1351
- return !["cancelled", "succeeded"].includes(build.status) && ["linux", "mac", "windows"].some(platform => isPlatformBuildRunning(build[platform]));
1352
- };
1353
-
1354
- exports.isBuildRunning = isBuildRunning;
1355
-
1356
- const isPlatformBuildRunning = platformBuild => {
1357
- if (!platformBuild) {
1358
- return false;
1359
- }
1360
-
1361
- return !platformBuild.shouldSkip && // <-- Noteworthy
1362
- !["cancelled", "succeeded"].includes(platformBuild.status) && ("failed" !== platformBuild.status || platformBuild.numberOfAttemptedBuilds < 2);
1363
- };
1364
-
1365
- exports.isPlatformBuildRunning = isPlatformBuildRunning;
1366
- },{}],"../lib/components/BuildProgress.js":[function(require,module,exports) {
1367
- "use strict";
1368
-
1369
- Object.defineProperty(exports, "__esModule", {
1370
- value: true
1371
- });
1372
- exports.default = void 0;
1373
-
1374
- var _ink = require("ink");
1375
-
1376
- var _propTypes = _interopRequireDefault(require("prop-types"));
1377
-
1378
- var _react = _interopRequireWildcard(require("react"));
1379
-
1380
- var _lodash = _interopRequireDefault(require("lodash.throttle"));
1381
-
1382
- var _BuildCompleteMessage = _interopRequireDefault(require("./BuildCompleteMessage"));
1383
-
1384
- var _PlatformProgress = _interopRequireDefault(require("./PlatformProgress"));
1385
-
1386
- var _buildStatus = require("../utilities/buildStatus");
1387
-
1388
- var _logger = _interopRequireDefault(require("../utilities/logger"));
1389
-
1390
- var _logForCI = _interopRequireDefault(require("../utilities/logForCI"));
1391
-
1392
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
1393
-
1394
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1395
-
1396
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1397
-
1398
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1399
-
1400
- const logForCIThrottled = (0, _lodash.default)(_logForCI.default, 60 * 1000, {
1401
- trailing: true
1402
- });
1403
-
1404
- const BuildProgress = ({
1405
- build,
1406
- onBuildFailure
1407
- }) => {
1408
- _logger.default.debug("BuildProgress component: render");
1409
-
1410
- const exit = (0, _useExit.default)();
1411
- const [{
1412
- hasKickedOff
1413
- }, setState] = (0, _react.useState)({
1414
- hasKickedOff: false
1415
- });
1416
- const platformsNotSkipped = ["windows", "mac", "linux"].filter(platform => !build[platform].shouldSkip);
1417
- (0, _react.useEffect)(() => {
1418
- setState(previousState => ({ ...previousState,
1419
- hasKickedOff: (0, _buildStatus.hasBuildKickedOff)(build)
1420
- }));
1421
- }, [build]);
1422
- (0, _react.useEffect)(() => {
1423
- if (build.status === "failed") {
1424
- onBuildFailure(build.errorMessage);
1425
- } else if (build.status === "cancelled") {
1426
- setTimeout(exit, 10);
1427
- } else {
1428
- const ciPlatformProgress = platformsNotSkipped.map(platform => `${platform.charAt(0).toUpperCase() + platform.slice(1)}: ${build[platform].progressActivityName} (${build[platform].progressPercentage}%)`);
1429
- logForCIThrottled(ciPlatformProgress.join(", "));
1430
- }
1431
- }, [build, exit, onBuildFailure, platformsNotSkipped]);
1432
-
1433
- if (build.status === "succeeded") {
1434
- return /*#__PURE__*/_react.default.createElement(_BuildCompleteMessage.default, {
1435
- build: build
1436
- });
1437
- }
1438
-
1439
- if (build.status === "cancelled") {
1440
- return /*#__PURE__*/_react.default.createElement(_ink.Box, {
1441
- flexDirection: "column",
1442
- marginBottom: 1
1443
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Build cancelled"));
1444
- }
1445
-
1446
- if (!hasKickedOff) {
1447
- return null;
1448
- }
1449
-
1450
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
1451
- flexDirection: "column"
1452
- }, platformsNotSkipped.map(platform => /*#__PURE__*/_react.default.createElement(_ink.Box, {
1453
- flexDirection: "column",
1454
- key: platform
1455
- }, /*#__PURE__*/_react.default.createElement(_PlatformProgress.default, {
1456
- activityName: build[platform].status === "failed" ? build[platform].errorMessage : build[platform].progressActivityName,
1457
- activityType: build[platform].status === "failed" ? "error" : build[platform].progressActivityType,
1458
- downloadUrl: build[platform].standardDownloadUrl,
1459
- percent: build[platform].progressPercentage,
1460
- platform: platform,
1461
- shouldShowReadyPrefix: !(build && ["failed", "succeeded"].includes(build.status))
1462
- })))));
1463
- };
1464
-
1465
- BuildProgress.propTypes = {
1466
- build: _propTypes.default.object.isRequired,
1467
- onBuildFailure: _propTypes.default.func.isRequired
1468
- };
1469
- var _default = BuildProgress;
1470
- exports.default = _default;
1471
- },{"./BuildCompleteMessage":"../lib/components/BuildCompleteMessage.js","./PlatformProgress":"../lib/components/PlatformProgress.js","../utilities/buildStatus":"../lib/utilities/buildStatus.js","../utilities/logger":"../lib/utilities/logger.js","../utilities/logForCI":"../lib/utilities/logForCI.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/utilities/getCallableFirebaseFunction.js":[function(require,module,exports) {
1472
- "use strict";
1473
-
1474
- Object.defineProperty(exports, "__esModule", {
1475
- value: true
1476
- });
1477
- exports.default = void 0;
1478
-
1479
- var firebase = _interopRequireWildcard(require("firebase/app"));
1480
-
1481
- require("firebase/functions");
1482
-
1483
- var _getEnvironmentVariables = _interopRequireDefault(require("./getEnvironmentVariables"));
1484
-
1485
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1486
-
1487
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1488
-
1489
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1490
-
1491
- if ((0, _getEnvironmentVariables.default)().TODESKTOP_CLI_ENV === "development") {
1492
- firebase.functions().useFunctionsEmulator("http://localhost:5000");
1493
- }
1494
-
1495
- var _default = functionName => firebase.functions().httpsCallable(functionName);
1496
-
1497
- exports.default = _default;
1498
- },{"./getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js"}],"../lib/components/CancelBuild.js":[function(require,module,exports) {
1499
- "use strict";
1500
-
1501
- Object.defineProperty(exports, "__esModule", {
1502
- value: true
1503
- });
1504
- exports.default = void 0;
1505
-
1506
- var _ink = require("ink");
1507
-
1508
- var _propTypes = _interopRequireDefault(require("prop-types"));
1509
-
1510
- var _react = _interopRequireWildcard(require("react"));
1511
-
1512
- var _ErrorDisplay = _interopRequireDefault(require("./ErrorDisplay"));
1513
-
1514
- var _getCallableFirebaseFunction = _interopRequireDefault(require("../utilities/getCallableFirebaseFunction"));
1515
-
1516
- var _logForCI = _interopRequireDefault(require("../utilities/logForCI"));
1517
-
1518
- var _logger = _interopRequireDefault(require("../utilities/logger"));
1519
-
1520
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
1521
-
1522
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1523
-
1524
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1525
-
1526
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1527
-
1528
- // libs
1529
- // components
1530
- // utils
1531
- const cancelBuild = (0, _getCallableFirebaseFunction.default)("cancelBuild");
1532
-
1533
- const CancelBuild = ({
1534
- appId,
1535
- children: postCancelContents,
1536
- commandUsed,
1537
- id
1538
- }) => {
1539
- _logger.default.debug({
1540
- appId,
1541
- buildId: id
1542
- }, "CancelBuild component: render");
1543
-
1544
- const exit = (0, _useExit.default)();
1545
- const [{
1546
- arbitraryMessageComponent,
1547
- error,
1548
- hasCompleted,
1549
- hasStarted
1550
- }, setState] = (0, _react.useState)({
1551
- arbitraryMessageComponent: null,
1552
- error: null,
1553
- hasCompleted: false,
1554
- hasStarted: false
1555
- });
1556
- (0, _react.useEffect)(() => {
1557
- if (hasCompleted || hasStarted) {
1558
- return;
1559
- }
1560
-
1561
- setState(previousState => ({ ...previousState,
1562
- hasStarted: true
1563
- }));
1564
- (0, _logForCI.default)("Cancelling build...");
1565
- cancelBuild({
1566
- appId,
1567
- buildId: id
1568
- }).then(result => {
1569
- _logger.default.debug({
1570
- appId,
1571
- buildId: id,
1572
- result
1573
- }, "CancelBuild component: cancellation request complete");
1574
-
1575
- setState(previousState => ({ ...previousState,
1576
- hasCompleted: true
1577
- }));
1578
- }).catch(e => {
1579
- _logger.default.debug({
1580
- appId,
1581
- buildId: id,
1582
- code: e.code
1583
- }, "CancelBuild component: cancellation request failed");
1584
-
1585
- _logger.default.error(e);
1586
-
1587
- let stateUpdates = {
1588
- hasCompleted: true
1589
- };
1590
-
1591
- if (e.code === "internal") {
1592
- stateUpdates.error = e;
1593
- } else {
1594
- stateUpdates.arbitraryMessageComponent = /*#__PURE__*/_react.default.createElement(_ink.Text, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1595
- color: "red"
1596
- }, "Cannot cancel build (", id, ")."), " ", e.message);
1597
- }
1598
-
1599
- setState(prevState => ({ ...prevState,
1600
- ...stateUpdates
1601
- }));
1602
- });
1603
- }, [appId, id, hasStarted, hasCompleted]); // Exit when done, unless there are custom contents to display
1604
-
1605
- (0, _react.useEffect)(() => {
1606
- if (hasCompleted && !postCancelContents) {
1607
- _logger.default.debug("CancelBuild component: exiting now that build is cancelled");
1608
-
1609
- exit();
1610
- }
1611
- }, [postCancelContents, exit, hasCompleted]);
1612
-
1613
- if (error) {
1614
- error.message = `Failed to cancel build (${id}). ${error.message}`;
1615
- return /*#__PURE__*/_react.default.createElement(_ErrorDisplay.default, {
1616
- commandUsed: commandUsed,
1617
- error: error
1618
- });
1619
- }
1620
-
1621
- if (arbitraryMessageComponent) {
1622
- return arbitraryMessageComponent;
1623
- }
1624
-
1625
- if (hasCompleted) {
1626
- return postCancelContents ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, postCancelContents) : /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Build cancelled");
1627
- }
1628
-
1629
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Cancelling build (", id, ")...");
1630
- };
1631
-
1632
- CancelBuild.propTypes = {
1633
- appId: _propTypes.default.string.isRequired,
1634
- // What's shown on succes, defaults to a simple success message
1635
- children: _propTypes.default.object,
1636
- commandUsed: _propTypes.default.string.isRequired,
1637
- id: _propTypes.default.string.isRequired
1638
- };
1639
- var _default = CancelBuild;
1640
- exports.default = _default;
1641
- },{"./ErrorDisplay":"../lib/components/ErrorDisplay.js","../utilities/getCallableFirebaseFunction":"../lib/utilities/getCallableFirebaseFunction.js","../utilities/logForCI":"../lib/utilities/logForCI.js","../utilities/logger":"../lib/utilities/logger.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/components/Footer.js":[function(require,module,exports) {
1642
- "use strict";
1643
-
1644
- Object.defineProperty(exports, "__esModule", {
1645
- value: true
1646
- });
1647
- exports.default = void 0;
1648
-
1649
- var _ink = require("ink");
1650
-
1651
- var _inkLink = _interopRequireDefault(require("ink-link"));
1652
-
1653
- var _propTypes = _interopRequireDefault(require("prop-types"));
1654
-
1655
- var _react = _interopRequireDefault(require("react"));
1656
-
1657
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1658
-
1659
- const Footer = ({
1660
- hasBuildFailed,
1661
- shouldShowCancelBuildInstructions,
1662
- uiUrl
1663
- }) => {
1664
- if (!uiUrl) {
1665
- return null;
1666
- }
1667
-
1668
- let buildFailedMessage;
1669
-
1670
- if (hasBuildFailed) {
1671
- buildFailedMessage = /*#__PURE__*/_react.default.createElement(_ink.Text, {
1672
- color: "red"
1673
- }, "An error has occurred. ");
1674
- }
1675
-
1676
- return /*#__PURE__*/_react.default.createElement(_ink.Box, {
1677
- flexDirection: "column"
1678
- }, /*#__PURE__*/_react.default.createElement(_ink.Box, {
1679
- flexDirection: "column"
1680
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1681
- bold: true
1682
- }, buildFailedMessage, "See web UI for more information: "), /*#__PURE__*/_react.default.createElement(_ink.Text, null, /*#__PURE__*/_react.default.createElement(_inkLink.default, {
1683
- fallback: false,
1684
- url: uiUrl
1685
- }, uiUrl))), shouldShowCancelBuildInstructions ? /*#__PURE__*/_react.default.createElement(_ink.Text, {
1686
- color: "gray"
1687
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1688
- bold: true
1689
- }, "[esc]:"), " cancel build") : null);
1690
- };
1691
-
1692
- Footer.propTypes = {
1693
- hasBuildFailed: _propTypes.default.bool,
1694
- shouldShowCancelBuildInstructions: _propTypes.default.bool,
1695
- uiUrl: _propTypes.default.string
1696
- };
1697
- var _default = Footer;
1698
- exports.default = _default;
1699
- },{}],"../lib/components/Header.js":[function(require,module,exports) {
1700
- "use strict";
1701
-
1702
- Object.defineProperty(exports, "__esModule", {
1703
- value: true
1704
- });
1705
- exports.default = void 0;
1706
-
1707
- var _ink = require("ink");
1708
-
1709
- var _propTypes = _interopRequireDefault(require("prop-types"));
1710
-
1711
- var _react = _interopRequireDefault(require("react"));
1712
-
1713
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1714
-
1715
- const getText = (build, name, version) => {
1716
- const suffix = name + (version ? ` v${version}` : "");
1717
-
1718
- if (build && ["cancelled", "succeeded", "failed"].includes(build.status)) {
1719
- if (build.status === "succeeded") {
1720
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "\u2705 ", suffix);
1721
- } else if (build.status === "failed") {
1722
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "\u274C ", suffix);
1723
- } else if (build.status === "cancelled") {
1724
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1725
- bold: true,
1726
- color: "gray"
1727
- }, "X"), " ", suffix);
1728
- }
1729
- } else {
1730
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, suffix);
1731
- }
1732
- };
1733
-
1734
- const Header = ({
1735
- build,
1736
- name,
1737
- version
1738
- }) => /*#__PURE__*/_react.default.createElement(_ink.Box, {
1739
- marginBottom: 1
1740
- }, getText(build, name, version));
1741
-
1742
- Header.propTypes = {
1743
- build: _propTypes.default.object,
1744
- name: _propTypes.default.string.isRequired,
1745
- version: _propTypes.default.string
1746
- };
1747
- var _default = Header;
1748
- exports.default = _default;
1749
- },{}],"../lib/utilities/useInput.js":[function(require,module,exports) {
1750
- "use strict";
1751
-
1752
- Object.defineProperty(exports, "__esModule", {
1753
- value: true
1754
- });
1755
- exports.default = void 0;
1756
-
1757
- var _isCi = _interopRequireDefault(require("is-ci"));
1758
-
1759
- var _ink = require("ink");
1760
-
1761
- var _useExit = _interopRequireDefault(require("./useExit"));
1762
-
1763
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1764
-
1765
- let hasSubscribed = false;
1766
- let ctrlCSubscriptions = [];
1767
-
1768
- const onStdin = (data, exit) => {
1769
- let input = String(data);
1770
- let wasCtrlPressed = false;
1771
-
1772
- if (input <= "\u001A" && input !== "\r") {
1773
- input = String.fromCharCode(input.charCodeAt(0) + "a".charCodeAt(0) - 1);
1774
- wasCtrlPressed = true;
1775
- }
1776
-
1777
- if (wasCtrlPressed && input === "c") {
1778
- ctrlCSubscriptions.forEach(subscription => subscription());
1779
- setTimeout(exit, 10);
1780
- }
1781
- };
1782
- /*
1783
- See https://github.com/vadimdemedes/pastel/issues/38
1784
- */
1785
-
1786
-
1787
- var _default = () => {
1788
- if (_isCi.default) {
1789
- return () => () => {};
1790
- }
1791
-
1792
- const exit = (0, _useExit.default)();
1793
- const {
1794
- stdin
1795
- } = (0, _ink.useStdin)();
1796
- return (callback, useInputOptions, stdInOptions = {}) => {
1797
- const onStdinData = data => onStdin(data, exit);
1798
-
1799
- if (stdInOptions.onCtrlCPressed) {
1800
- ctrlCSubscriptions.push(stdInOptions.onCtrlCPressed);
1801
- }
1802
-
1803
- if (!hasSubscribed) {
1804
- hasSubscribed = true; // This is based on the Ink (useInput) source
1805
-
1806
- stdin.on("data", onStdinData);
1807
- }
1808
-
1809
- let cleanUpInputHook = (0, _ink.useInput)(callback, useInputOptions);
1810
- return () => {
1811
- if (hasSubscribed) {
1812
- stdin.off("data", onStdinData);
1813
- }
1814
-
1815
- if (cleanUpInputHook) {
1816
- cleanUpInputHook();
1817
- }
1818
- };
1819
- };
1820
- };
1821
-
1822
- exports.default = _default;
1823
- },{"./useExit":"../lib/utilities/useExit.js"}],"../lib/components/MainLayout.js":[function(require,module,exports) {
1824
- "use strict";
1825
-
1826
- Object.defineProperty(exports, "__esModule", {
1827
- value: true
1828
- });
1829
- exports.default = void 0;
1830
-
1831
- var _ink = require("ink");
1832
-
1833
- var _isCi = _interopRequireDefault(require("is-ci"));
1834
-
1835
- var _propTypes = _interopRequireDefault(require("prop-types"));
1836
-
1837
- var _react = _interopRequireWildcard(require("react"));
1838
-
1839
- var _CancelBuild = _interopRequireDefault(require("./CancelBuild"));
1840
-
1841
- var _Footer = _interopRequireDefault(require("./Footer"));
1842
-
1843
- var _Header = _interopRequireDefault(require("./Header"));
1844
-
1845
- var _buildStatus = require("../utilities/buildStatus");
1846
-
1847
- var _logger = _interopRequireDefault(require("../utilities/logger"));
1848
-
1849
- var _useInput = _interopRequireDefault(require("../utilities/useInput"));
1850
-
1851
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1852
-
1853
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1854
-
1855
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1856
-
1857
- // libs
1858
- // components
1859
- // utilities
1860
- const MainLayout = ({
1861
- appId,
1862
- appName,
1863
- appVersion,
1864
- build,
1865
- children,
1866
- commandUsed,
1867
- hasBuildFailed
1868
- }) => {
1869
- _logger.default.debug("MainLayout component: render");
1870
-
1871
- const onInput = (0, _useInput.default)();
1872
- const [{
1873
- canCancelBuild,
1874
- hasKickedOff,
1875
- isCancellingBuild,
1876
- wasCtrlCPressed
1877
- }, setState] = (0, _react.useState)({
1878
- canCancelBuild: null,
1879
- hasKickedOff: false,
1880
- isCancellingBuild: false,
1881
- wasCtrlCPressed: false
1882
- });
1883
- (0, _react.useEffect)(() => {
1884
- setState(previousState => ({ ...previousState,
1885
- hasKickedOff: (0, _buildStatus.hasBuildKickedOff)(build)
1886
- }));
1887
- }, [build]);
1888
- (0, _react.useEffect)(() => {
1889
- setState(previousState => ({ ...previousState,
1890
- canCancelBuild: !_isCi.default && !isCancellingBuild && (0, _buildStatus.isBuildCancellable)(build)
1891
- }));
1892
- }, [build, isCancellingBuild]);
1893
- onInput(async (input, key) => {
1894
- if (key.escape && canCancelBuild) {
1895
- _logger.default.debug("MainLayout component: esc pressed, cancelling build");
1896
-
1897
- setState(previousState => ({ ...previousState,
1898
- isCancellingBuild: true
1899
- }));
1900
- }
1901
- }, {}, {
1902
- onCtrlCPressed: () => {
1903
- setState(previousState => ({ ...previousState,
1904
- wasCtrlCPressed: true
1905
- }));
1906
- }
1907
- });
1908
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Header.default, {
1909
- build: build,
1910
- name: appName,
1911
- version: appVersion
1912
- }), isCancellingBuild ? /*#__PURE__*/_react.default.createElement(_ink.Box, {
1913
- flexDirection: "column",
1914
- marginBottom: 1
1915
- }, /*#__PURE__*/_react.default.createElement(_CancelBuild.default, {
1916
- appId: appId,
1917
- commandUsed: commandUsed,
1918
- id: build.id
1919
- })) : children, /*#__PURE__*/_react.default.createElement(_Footer.default, {
1920
- hasBuildFailed: hasBuildFailed,
1921
- shouldShowCancelBuildInstructions: canCancelBuild && !wasCtrlCPressed,
1922
- uiUrl: build ? build.url : null
1923
- }), wasCtrlCPressed && hasKickedOff ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
1924
- flexDirection: "column",
1925
- marginTop: 1
1926
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1927
- color: "gray"
1928
- }, "The build will continue in the background. To view it, run:")), /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
1929
- bold: true,
1930
- color: "gray"
1931
- }, "todesktop builds ", build.id))) : null);
1932
- };
1933
-
1934
- MainLayout.propTypes = {
1935
- appId: _propTypes.default.string,
1936
- appName: _propTypes.default.string.isRequired,
1937
- appVersion: _propTypes.default.string,
1938
- build: _propTypes.default.object,
1939
- children: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]),
1940
- commandUsed: _propTypes.default.string.isRequired,
1941
- hasBuildFailed: _propTypes.default.bool
1942
- };
1943
- var _default = MainLayout;
1944
- exports.default = _default;
1945
- },{"./CancelBuild":"../lib/components/CancelBuild.js","./Footer":"../lib/components/Footer.js","./Header":"../lib/components/Header.js","../utilities/buildStatus":"../lib/utilities/buildStatus.js","../utilities/logger":"../lib/utilities/logger.js","../utilities/useInput":"../lib/utilities/useInput.js"}],"../lib/utilities/getLatestBuildId.js":[function(require,module,exports) {
1946
- "use strict";
1947
-
1948
- Object.defineProperty(exports, "__esModule", {
1949
- value: true
1950
- });
1951
- exports.default = void 0;
1952
-
1953
- var _firestore = _interopRequireWildcard(require("./firestore"));
1954
-
1955
- var _logger = _interopRequireDefault(require("./logger"));
1956
-
1957
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1958
-
1959
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1960
-
1961
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1962
-
1963
- var _default = async ({
1964
- appId
1965
- }) => {
1966
- _logger.default.debug({
1967
- appId
1968
- }, "getLatestBuildId");
1969
-
1970
- const appRef = _firestore.default.doc(`users/${(0, _firestore.currentUser)().uid}/applications/${appId}`);
1971
-
1972
- const appSnapshot = await appRef.get();
1973
-
1974
- if (!appSnapshot.exists) {
1975
- throw new Error(`Application with ID of ${appId} doesn't exist.`);
1976
- }
1977
-
1978
- const buildsResult = await appRef.collection("builds").orderBy("createdAt", "desc").limit(1).get();
1979
-
1980
- if (buildsResult.empty) {
1981
- return null;
1982
- } else {
1983
- return buildsResult.docs[0].id;
1984
- }
1985
- };
1986
-
1987
- exports.default = _default;
1988
- },{"./firestore":"../lib/utilities/firestore.js","./logger":"../lib/utilities/logger.js"}],"../lib/utilities/projectConfig/loadConfig.js":[function(require,module,exports) {
1989
- "use strict";
1990
-
1991
- Object.defineProperty(exports, "__esModule", {
1992
- value: true
1993
- });
1994
- exports.default = void 0;
1995
-
1996
- // This is its own file just so we can mock it more easily
1997
- var _default = configPath => require(configPath);
1998
-
1999
- exports.default = _default;
2000
- },{}],"../lib/utilities/projectConfig/resolveConfigPaths.js":[function(require,module,exports) {
2001
- "use strict";
2002
-
2003
- Object.defineProperty(exports, "__esModule", {
2004
- value: true
2005
- });
2006
- exports.default = void 0;
2007
-
2008
- var path = _interopRequireWildcard(require("path"));
2009
-
2010
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
2011
-
2012
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
2013
-
2014
- var _default = ({
2015
- config,
2016
- projectRoot
2017
- }) => {
2018
- const appRoot = config.appPath ? path.isAbsolute(config.appPath) ? config.appPath : path.join(projectRoot, config.appPath) : projectRoot;
2019
-
2020
- const transformIfExists = (value, transformer) => value ? transformer(value) : undefined;
2021
-
2022
- const resolvePath = filePath => path.isAbsolute(filePath) ? filePath : path.join(projectRoot, filePath);
2023
-
2024
- const result = { ...config,
2025
- appPath: appRoot,
2026
- icon: resolvePath(config.icon)
2027
- };
2028
-
2029
- if (config.extraContentFiles) {
2030
- result.extraContentFiles = transformIfExists(config.extraContentFiles, extraContentFiles => extraContentFiles.map(extraContentFile => ({ ...extraContentFile,
2031
- from: resolvePath(extraContentFile.from)
2032
- })));
2033
- }
2034
-
2035
- if (config.extraResources) {
2036
- result.extraResources = transformIfExists(config.extraResources, extraResources => extraResources.map(extraResource => ({ ...extraResource,
2037
- from: resolvePath(extraResource.from)
2038
- })));
2039
- }
2040
-
2041
- if (config.linux) {
2042
- result.linux = { ...config.linux
2043
- };
2044
-
2045
- if (config.linux.icon) {
2046
- result.linux.icon = resolvePath(config.linux.icon);
2047
- }
2048
- }
2049
-
2050
- if (config.mac) {
2051
- result.mac = { ...config.mac
2052
- };
2053
-
2054
- if (config.mac.entitlements) {
2055
- result.mac.entitlements = resolvePath(config.mac.entitlements);
2056
- }
2057
-
2058
- if (config.mac.icon) {
2059
- result.mac.icon = resolvePath(config.mac.icon);
2060
- }
2061
- }
2062
-
2063
- if (config.dmg) {
2064
- if (config.dmg.background) {
2065
- result.dmg.background = resolvePath(config.dmg.background);
2066
- }
2067
- }
2068
-
2069
- if (config.windows) {
2070
- result.windows = { ...config.windows
2071
- };
2072
-
2073
- if (config.windows.icon) {
2074
- result.windows.icon = resolvePath(config.windows.icon);
2075
- }
2076
- }
2077
-
2078
- return result;
2079
- };
2080
-
2081
- exports.default = _default;
2082
- },{}],"../lib/utilities/projectConfig/schema/packageJSON.js":[function(require,module,exports) {
2083
- "use strict";
2084
-
2085
- Object.defineProperty(exports, "__esModule", {
2086
- value: true
2087
- });
2088
- exports.default = void 0;
2089
-
2090
- var _default = context => {
2091
- return {
2092
- type: "object",
2093
- required: ["author", "dependencies", "devDependencies", "homepage", "name", "version"],
2094
- properties: {
2095
- author: {
2096
- npmAuthor: {}
2097
- },
2098
- dependencies: {
2099
- type: "object",
2100
- required: ["@todesktop/runtime"],
2101
- // custom keyword that checks package names aren't included in dependencies
2102
- excludedDependencies: {
2103
- dependencyKey: "dependencies",
2104
- blacklist: ["@todesktop/cli"]
2105
- },
2106
- properties: {
2107
- "@todesktop/runtime": {
2108
- type: "string"
2109
- }
2110
- }
2111
- },
2112
- devDependencies: {
2113
- type: "object",
2114
- required: ["electron"],
2115
- properties: {
2116
- electron: {
2117
- type: "string",
2118
- semanticVersion: {
2119
- packageName: "electron",
2120
- mustBeExact: true
2121
- }
2122
- }
2123
- }
2124
- },
2125
- name: {
2126
- type: "string",
2127
- minLength: 1
2128
- },
2129
- scripts: {
2130
- type: "object",
2131
- properties: {
2132
- "todesktop:beforeInstall": {
2133
- type: "string",
2134
- file: {
2135
- from: context.projectRoot,
2136
- mustBeFile: true
2137
- }
2138
- },
2139
- "todesktop:afterPack": {
2140
- type: "string",
2141
- file: {
2142
- from: context.projectRoot,
2143
- mustBeFile: true
2144
- }
2145
- }
2146
- }
2147
- },
2148
- version: {
2149
- type: "string",
2150
- semanticVersion: {}
2151
- }
2152
- }
2153
- };
2154
- };
2155
-
2156
- exports.default = _default;
2157
- },{}],"../lib/utilities/projectConfig/validatePackageJSON.js":[function(require,module,exports) {
2158
- "use strict";
2159
-
2160
- Object.defineProperty(exports, "__esModule", {
2161
- value: true
2162
- });
2163
- exports.default = void 0;
2164
-
2165
- var _ajv = _interopRequireDefault(require("ajv"));
2166
-
2167
- var _betterAjvErrors = _interopRequireDefault(require("better-ajv-errors"));
2168
-
2169
- var _addCustomKeywords = _interopRequireDefault(require("./addCustomKeywords"));
2170
-
2171
- var _packageJSON = _interopRequireDefault(require("./schema/packageJSON"));
2172
-
2173
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2174
-
2175
- var _default = (pkg, pkgPath, context) => {
2176
- const ajv = new _ajv.default({
2177
- allErrors: true,
2178
- jsonPointers: true
2179
- });
2180
- (0, _addCustomKeywords.default)(ajv, context);
2181
- const schema = (0, _packageJSON.default)(context);
2182
- const validate = ajv.compile(schema);
2183
-
2184
- if (!validate(pkg)) {
2185
- const output = (0, _betterAjvErrors.default)(schema, pkg, validate.errors, {
2186
- indent: 2
2187
- });
2188
- const error = new Error(`package.json invalid (${pkgPath}); \n${output}`);
2189
- error.isValidationError = true; // This throws and bubbles all the way up to the user
2190
-
2191
- throw error;
2192
- }
2193
- };
2194
-
2195
- exports.default = _default;
2196
- },{"./addCustomKeywords":"../lib/utilities/projectConfig/addCustomKeywords.js","./schema/packageJSON":"../lib/utilities/projectConfig/schema/packageJSON.js"}],"../lib/utilities/projectConfig/addCustomKeywords.js":[function(require,module,exports) {
2197
- "use strict";
2198
-
2199
- Object.defineProperty(exports, "__esModule", {
2200
- value: true
2201
- });
2202
- exports.default = void 0;
2203
-
2204
- var _emailRegex = _interopRequireDefault(require("email-regex"));
2205
-
2206
- var fs = _interopRequireWildcard(require("fs"));
2207
-
2208
- var path = _interopRequireWildcard(require("path"));
2209
-
2210
- var _parseAuthor = _interopRequireDefault(require("parse-author"));
2211
-
2212
- var semver = _interopRequireWildcard(require("semver"));
2213
-
2214
- var _validatePackageJSON = _interopRequireDefault(require("./validatePackageJSON"));
2215
-
2216
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
2217
-
2218
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
2219
-
2220
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2221
-
2222
- /*
2223
- See https://ajv.js.org/custom.html
2224
- */
2225
- var _default = (ajv, context) => {
2226
- // validate that dependencies object doesn't contain packageNames in the blacklist
2227
- ajv.addKeyword("excludedDependencies", {
2228
- validate: function validate(schema, data) {
2229
- let matchingPackages = schema.blacklist.filter(packageName => data[packageName]);
2230
-
2231
- if (matchingPackages.length) {
2232
- validate.errors = [{
2233
- keyword: "Dependency",
2234
- message: `${matchingPackages.join(", ")} should not be in ${schema.dependencyKey}`,
2235
- dataPath: `/${schema.dependencyKey}`
2236
- }];
2237
- return false;
2238
- }
2239
-
2240
- return true;
2241
- }
2242
- });
2243
- ajv.addKeyword("email", {
2244
- type: "string",
2245
- minLength: 5,
2246
- validate: function validate(schema, data) {
2247
- if (!(0, _emailRegex.default)({
2248
- exact: true
2249
- }).test(data)) {
2250
- validate.errors = [{
2251
- keyword: "email",
2252
- message: "invalid"
2253
- }];
2254
- return false;
2255
- }
2256
-
2257
- return true;
2258
- }
2259
- });
2260
- ajv.addKeyword("file", {
2261
- type: "string",
2262
- validate: function validate(schema, data) {
2263
- const mustBeDirectory = schema.mustBeDirectory || schema.mustBeElectronApp; // Value is empty
2264
-
2265
- if (!data.trim().length) {
2266
- if (schema.isOptional) {
2267
- return true;
2268
- }
2269
-
2270
- validate.errors = [{
2271
- keyword: schema.mustBeDirectory ? "Directory" : "File",
2272
- message: "is empty"
2273
- }];
2274
- return false;
2275
- }
2276
-
2277
- const filePath = path.isAbsolute(data) ? data : path.join(schema.from, data); // Isn't in project
2278
-
2279
- if (path.relative(schema.from, filePath).startsWith("..")) {
2280
- validate.errors = [{
2281
- keyword: mustBeDirectory ? "Directory" : "File",
2282
- message: `is not in project (${filePath})`
2283
- }];
2284
- return false;
2285
- } // Extension isn't allowed
2286
-
2287
-
2288
- if (schema.extensions && !schema.extensions.includes(path.extname(filePath).substr(1))) {
2289
- validate.errors = [{
2290
- keyword: "File extension",
2291
- message: `invalid. ${path.extname(data)} Must be${schema.extensions > 1 ? "one of the following:" : ""} "${schema.extensions.join('", "')}"`
2292
- }];
2293
- return false;
2294
- } // Doesn't exist
2295
-
2296
-
2297
- if (!fs.existsSync(filePath)) {
2298
- validate.errors = [{
2299
- keyword: mustBeDirectory ? "Directory" : "File",
2300
- message: `does not exist (${filePath})`
2301
- }];
2302
- return false;
2303
- }
2304
-
2305
- const stats = fs.statSync(filePath);
2306
-
2307
- if (mustBeDirectory && stats.isFile()) {
2308
- validate.errors = [{
2309
- keyword: "Directory",
2310
- message: `must be a directory, not a file (${filePath})`
2311
- }];
2312
- return false;
2313
- } else if (schema.mustBeFile && stats.isDirectory()) {
2314
- validate.errors = [{
2315
- keyword: "File",
2316
- message: `must be a file, not a directory (${filePath})`
2317
- }];
2318
- return false;
2319
- }
2320
-
2321
- if (schema.mustBeElectronApp) {
2322
- const appRoot = path.resolve(filePath);
2323
- const pkgPath = path.join(appRoot, "package.json");
2324
-
2325
- if (!fs.existsSync(pkgPath)) {
2326
- validate.errors = [{
2327
- keyword: "App",
2328
- message: `invalid. There is no package.json at ${pkgPath}`
2329
- }];
2330
- return false;
2331
- }
2332
-
2333
- let pkg;
2334
-
2335
- try {
2336
- pkg = require(pkgPath);
2337
- } catch (e) {
2338
- validate.errors = [{
2339
- keyword: "App",
2340
- message: `invalid. Invalid JSON in package.json (${pkgPath})`
2341
- }];
2342
- return false;
2343
- }
2344
-
2345
- context.projectRoot = appRoot; // This throws and bubbles all the way up to the user
2346
-
2347
- (0, _validatePackageJSON.default)(pkg, pkgPath, context); // Validate that either an index.js or valid "main" property exists
2348
-
2349
- const mainFilePath = pkg.main;
2350
-
2351
- if (mainFilePath) {
2352
- const resolvedMainFilePath = path.join(appRoot, mainFilePath);
2353
-
2354
- if (!fs.existsSync(resolvedMainFilePath)) {
2355
- validate.errors = [{
2356
- keyword: "App",
2357
- message: `invalid. The "main" file specified in your package.json (${mainFilePath}) does not exist (${resolvedMainFilePath})`
2358
- }];
2359
- return false;
2360
- }
2361
- } else {
2362
- if (!fs.existsSync(path.join(appRoot, "index.js"))) {
2363
- validate.errors = [{
2364
- keyword: "App",
2365
- message: 'invalid. There is neither a "main" property in your package.json nor an index.js at the root of your app'
2366
- }];
2367
- return false;
2368
- }
2369
- }
2370
- }
2371
-
2372
- return true;
2373
- },
2374
- errors: true
2375
- });
2376
- ajv.addKeyword("npmAuthor", {
2377
- validate: function validate(schema, data) {
2378
- const dataType = typeof data;
2379
-
2380
- if (dataType === "undefined") {
2381
- return true;
2382
- } else if (dataType === "string") {
2383
- const parsedAuthor = (0, _parseAuthor.default)(data);
2384
-
2385
- if (!parsedAuthor || !parsedAuthor.email) {
2386
- validate.errors = [{
2387
- keyword: "author",
2388
- message: 'invalid. If you\'re using a string, it must look something like "Barney Rubble <b@rubble.com>", see https://docs.npmjs.com/files/package.json#people-fields-author-contributors'
2389
- }];
2390
- return false;
2391
- }
2392
- } else if (dataType === "object") {
2393
- if (typeof data.name === "undefined") {
2394
- validate.errors = [{
2395
- keyword: "author",
2396
- message: `invalid. "name" property is missing.`
2397
- }];
2398
- return false;
2399
- } else {
2400
- if (typeof data.name !== "string") {
2401
- validate.errors = [{
2402
- keyword: "author",
2403
- message: `.name invalid. It must be a string`
2404
- }];
2405
- return false;
2406
- }
2407
-
2408
- if (typeof data.email === "undefined") {
2409
- validate.errors = [{
2410
- keyword: "author",
2411
- message: `invalid. "email" property is missing.`
2412
- }];
2413
- return false;
2414
- } else {
2415
- if (typeof data.email === "string") {
2416
- if (!(0, _emailRegex.default)({
2417
- exact: true
2418
- }).test(data.email)) {
2419
- validate.errors = [{
2420
- keyword: "author",
2421
- message: `.email invalid. It does not look like an email.`
2422
- }];
2423
- return false;
2424
- }
2425
- } else {
2426
- validate.errors = [{
2427
- keyword: "author",
2428
- message: `.email invalid. It must be a string.`
2429
- }];
2430
- return false;
2431
- }
2432
- }
2433
- }
2434
- } else {
2435
- // Neither object nor string
2436
- validate.errors = [{
2437
- keyword: "author",
2438
- message: "invalid. It must either be an object or string. See https://docs.npmjs.com/files/package.json#people-fields-author-contributors"
2439
- }];
2440
- return false;
2441
- }
2442
-
2443
- return true;
2444
- },
2445
- errors: true
2446
- });
2447
- ajv.addKeyword("semanticVersion", {
2448
- type: "string",
2449
- minLength: 5,
2450
- validate: function validate(schema, data) {
2451
- const keyword = (schema.packageName ? `${schema.packageName} ` : "") + "version";
2452
-
2453
- if (!(semver.valid(data) || semver.validRange(data))) {
2454
- validate.errors = [{
2455
- keyword,
2456
- message: "invalid. It must be a semantic version (see https://semver.org/)"
2457
- }];
2458
- return false;
2459
- }
2460
-
2461
- if (schema.mustBeExact && (data.startsWith("~") || data.startsWith("^"))) {
2462
- validate.errors = [{
2463
- keyword,
2464
- message: "invalid. It must be an exact version. Good: 9.0.0. Bad: ^9.0.0"
2465
- }];
2466
- return false;
2467
- }
2468
-
2469
- return true;
2470
- }
2471
- });
2472
- };
2473
-
2474
- exports.default = _default;
2475
- },{"./validatePackageJSON":"../lib/utilities/projectConfig/validatePackageJSON.js"}],"../lib/utilities/projectConfig/schema/full.js":[function(require,module,exports) {
2476
- "use strict";
2477
-
2478
- Object.defineProperty(exports, "__esModule", {
2479
- value: true
2480
- });
2481
- exports.default = void 0;
2482
-
2483
- const getItemOrArrayOfItemsSchema = itemSchema => {
2484
- return {
2485
- oneOf: [itemSchema, {
2486
- type: "array",
2487
- items: itemSchema
2488
- }]
2489
- };
2490
- };
2491
-
2492
- var _default = context => {
2493
- const getIconSchema = (additionalAllowedExtensions = []) => {
2494
- return {
2495
- type: "string",
2496
- file: {
2497
- from: context.projectRoot,
2498
- extensions: ["icns", "png", ...additionalAllowedExtensions],
2499
- mustBeFile: true
2500
- },
2501
- minLength: 3
2502
- };
2503
- };
2504
-
2505
- return {
2506
- type: "object",
2507
- required: ["id", "icon", "schemaVersion"],
2508
- properties: {
2509
- appId: {
2510
- type: "string",
2511
- minLength: 1
2512
- },
2513
- appFiles: {
2514
- type: "array",
2515
- items: {
2516
- type: "string",
2517
- minLength: 1
2518
- },
2519
- minItems: 1
2520
- },
2521
- appProtocolScheme: {
2522
- type: "string",
2523
- minLength: 1
2524
- },
2525
- appPath: {
2526
- type: "string",
2527
- file: {
2528
- from: context.projectRoot,
2529
- isOptional: true,
2530
- mustBeElectronApp: true
2531
- }
2532
- },
2533
- copyright: {
2534
- type: "string",
2535
- minLength: 1
2536
- },
2537
- electronMirror: {
2538
- type: "string",
2539
- format: "uri"
2540
- },
2541
- electronVersion: {
2542
- type: "string",
2543
- minLength: 1
2544
- },
2545
- extraContentFiles: {
2546
- type: "array",
2547
- items: {
2548
- type: "object",
2549
- required: ["from"],
2550
- properties: {
2551
- from: {
2552
- type: "string",
2553
- file: {
2554
- from: context.projectRoot
2555
- }
2556
- },
2557
- to: {
2558
- type: "string"
2559
- }
2560
- }
2561
- }
2562
- },
2563
- extraResources: {
2564
- type: "array",
2565
- items: {
2566
- type: "object",
2567
- required: ["from"],
2568
- properties: {
2569
- from: {
2570
- type: "string",
2571
- file: {
2572
- from: context.projectRoot
2573
- }
2574
- },
2575
- to: {
2576
- type: "string"
2577
- }
2578
- }
2579
- }
2580
- },
2581
- fileAssociations: {
2582
- type: "array",
2583
- items: {
2584
- type: "object",
2585
- required: ["ext"],
2586
- properties: {
2587
- ext: getItemOrArrayOfItemsSchema({
2588
- type: "string",
2589
- minLength: 1
2590
- }),
2591
- description: {
2592
- type: "string",
2593
- minLength: 1
2594
- },
2595
- name: {
2596
- type: "string",
2597
- minLength: 1
2598
- },
2599
- mimeType: {
2600
- type: "string",
2601
- minLength: 1
2602
- },
2603
- icon: {
2604
- type: "string",
2605
- minLength: 1
2606
- },
2607
- role: {
2608
- type: "string",
2609
- minLength: 1
2610
- },
2611
- isPackage: {
2612
- type: "boolean"
2613
- },
2614
- rank: {
2615
- type: "string",
2616
- minLength: 1
2617
- }
2618
- }
2619
- },
2620
- minItems: 1
2621
- },
2622
- filesForDistribution: {
2623
- type: "array",
2624
- items: {
2625
- type: "string",
2626
- minLength: 1
2627
- },
2628
- minItems: 1
2629
- },
2630
- icon: getIconSchema(),
2631
- linux: {
2632
- properties: {
2633
- category: {
2634
- type: "string",
2635
- minLength: 1
2636
- },
2637
- icon: getIconSchema()
2638
- }
2639
- },
2640
- id: {
2641
- type: "string",
2642
- minLength: 1
2643
- },
2644
- mac: {
2645
- properties: {
2646
- category: {
2647
- type: "string",
2648
- minLength: 1
2649
- },
2650
- additionalBinariesToSign: {
2651
- type: "array",
2652
- items: {
2653
- type: "string",
2654
- minLength: 1
2655
- }
2656
- },
2657
- entitlements: {
2658
- type: "string",
2659
- file: {
2660
- from: context.projectRoot,
2661
- extensions: ["plist"],
2662
- mustBeFile: true
2663
- },
2664
- minLength: 1
2665
- },
2666
- extendInfo: {
2667
- type: "object"
2668
- },
2669
- icon: getIconSchema()
2670
- }
2671
- },
2672
- dmg: {
2673
- properties: {
2674
- background: {
2675
- type: "string",
2676
- file: {
2677
- from: context.projectRoot,
2678
- extensions: ["tiff"],
2679
- mustBeFile: true
2680
- },
2681
- minLength: 1
2682
- },
2683
- artifactName: {
2684
- type: "string",
2685
- minLength: 1
2686
- },
2687
- backgroundColor: {
2688
- type: "string",
2689
- minLength: 1
2690
- },
2691
- iconSize: {
2692
- type: "number"
2693
- },
2694
- iconTextSize: {
2695
- type: "number"
2696
- },
2697
- title: {
2698
- type: "string",
2699
- minLength: 1
2700
- },
2701
- contents: {
2702
- type: "array",
2703
- items: {
2704
- type: "object",
2705
- properties: {
2706
- x: {
2707
- type: "number"
2708
- },
2709
- y: {
2710
- type: "number"
2711
- }
2712
- }
2713
- }
2714
- },
2715
- window: {
2716
- type: "object",
2717
- properties: {
2718
- x: {
2719
- type: "number"
2720
- },
2721
- y: {
2722
- type: "number"
2723
- },
2724
- width: {
2725
- type: "number"
2726
- },
2727
- height: {
2728
- type: "number"
2729
- }
2730
- }
2731
- }
2732
- }
2733
- },
2734
- schemaVersion: {
2735
- type: "number",
2736
- minimum: 1,
2737
- maximum: 1
2738
- },
2739
- snap: {
2740
- properties: {
2741
- after: {
2742
- type: "array",
2743
- items: {
2744
- type: "string",
2745
- minLength: 1
2746
- }
2747
- },
2748
- appPartStage: {
2749
- type: "array",
2750
- items: {
2751
- type: "string",
2752
- minLength: 1
2753
- }
2754
- },
2755
- assumes: getItemOrArrayOfItemsSchema({
2756
- type: "string",
2757
- minLength: 1
2758
- }),
2759
- autoStart: {
2760
- type: "boolean"
2761
- },
2762
- buildPackages: {
2763
- type: "array",
2764
- items: {
2765
- type: "string",
2766
- minLength: 1
2767
- }
2768
- },
2769
- confinement: {
2770
- type: "string",
2771
- enum: ["classic", "devmode", "strict"]
2772
- },
2773
- environment: {
2774
- type: "object"
2775
- },
2776
- grade: {
2777
- type: "string",
2778
- enum: ["devel", "stable"]
2779
- },
2780
- layout: {
2781
- type: "object"
2782
- },
2783
- plugs: {
2784
- type: "array",
2785
- items: {
2786
- anyOf: [{
2787
- type: "string",
2788
- minLength: 1
2789
- }, {
2790
- type: "object"
2791
- }]
2792
- }
2793
- },
2794
- stagePackages: {
2795
- type: "array",
2796
- items: {
2797
- type: "string",
2798
- minLength: 1
2799
- }
2800
- },
2801
- summary: {
2802
- type: "string",
2803
- maxLength: 78
2804
- },
2805
- useTemplateApp: {
2806
- type: "boolean"
2807
- }
2808
- }
2809
- },
2810
- uploadSizeLimit: {
2811
- type: "number"
2812
- },
2813
- windows: {
2814
- properties: {
2815
- icon: getIconSchema(["ico"])
2816
- }
2817
- }
2818
- }
2819
- };
2820
- };
2821
-
2822
- exports.default = _default;
2823
- },{}],"../lib/utilities/projectConfig/validateConfig.js":[function(require,module,exports) {
2824
- "use strict";
2825
-
2826
- Object.defineProperty(exports, "__esModule", {
2827
- value: true
2828
- });
2829
- exports.default = void 0;
2830
-
2831
- var _ajv = _interopRequireDefault(require("ajv"));
2832
-
2833
- var _betterAjvErrors = _interopRequireDefault(require("better-ajv-errors"));
2834
-
2835
- var _addCustomKeywords = _interopRequireDefault(require("./addCustomKeywords"));
2836
-
2837
- var _full = _interopRequireDefault(require("./schema/full"));
2838
-
2839
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2840
-
2841
- var _default = ({
2842
- config,
2843
- projectRoot
2844
- }) => {
2845
- const context = {
2846
- projectRoot
2847
- };
2848
- const schema = (0, _full.default)(context);
2849
- const ajv = new _ajv.default({
2850
- allErrors: true,
2851
- jsonPointers: true
2852
- });
2853
- (0, _addCustomKeywords.default)(ajv, context);
2854
- const validate = ajv.compile(schema);
2855
-
2856
- if (!validate(config)) {
2857
- const output = (0, _betterAjvErrors.default)(schema, config, validate.errors, {
2858
- indent: 2
2859
- });
2860
- throw new Error(`todesktop.json invalid. \nLearn more here: https://www.npmjs.com/package/@todesktop/cli#project-configuration-todesktopjson \n\n${output}`);
2861
- }
2862
-
2863
- if (config.productName) {
2864
- throw new Error(`todesktop.json invalid.
2865
-
2866
- The "productName" property is no longer supported in todesktop.json. Please remove it and add it to your app's package.json instead.
2867
-
2868
- We made this change because Electron also uses the "productName" if it exists in your app's package.json. If you do not add it to your package.json, your app name will default to the value of the "name" property in your package.json.`);
2869
- }
2870
- };
2871
-
2872
- exports.default = _default;
2873
- },{"./addCustomKeywords":"../lib/utilities/projectConfig/addCustomKeywords.js","./schema/full":"../lib/utilities/projectConfig/schema/full.js"}],"../lib/utilities/projectConfig/getProjectConfig.js":[function(require,module,exports) {
2874
- "use strict";
2875
-
2876
- Object.defineProperty(exports, "__esModule", {
2877
- value: true
2878
- });
2879
- exports.default = void 0;
2880
-
2881
- var _path = require("path");
2882
-
2883
- var _findUp = _interopRequireDefault(require("find-up"));
2884
-
2885
- var _loadConfig = _interopRequireDefault(require("./loadConfig"));
2886
-
2887
- var _resolveConfigPaths = _interopRequireDefault(require("./resolveConfigPaths"));
2888
-
2889
- var _validateConfig = _interopRequireDefault(require("./validateConfig"));
2890
-
2891
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2892
-
2893
- var _default = () => {
2894
- const configPath = _findUp.default.sync("todesktop.json");
2895
-
2896
- if (!configPath) {
2897
- throw new Error("Can not find todesktop.json in this folder or any parent folders");
2898
- }
2899
-
2900
- const projectRoot = (0, _path.dirname)(configPath); // This will throw if it's not valid JSON
2901
-
2902
- const config = (0, _loadConfig.default)(configPath);
2903
- config.appPath = config.appPath || "."; // This will throw if invalid
2904
-
2905
- (0, _validateConfig.default)({
2906
- config,
2907
- projectRoot
2908
- });
2909
- const result = (0, _resolveConfigPaths.default)({
2910
- config,
2911
- projectRoot
2912
- });
2913
- return {
2914
- config: result,
2915
- unprocessedConfig: config,
2916
- projectRoot
2917
- };
2918
- };
2919
-
2920
- exports.default = _default;
2921
- },{"./loadConfig":"../lib/utilities/projectConfig/loadConfig.js","./resolveConfigPaths":"../lib/utilities/projectConfig/resolveConfigPaths.js","./validateConfig":"../lib/utilities/projectConfig/validateConfig.js"}],"../lib/utilities/shouldExitOnBuildFailure.js":[function(require,module,exports) {
2922
- "use strict";
2923
-
2924
- Object.defineProperty(exports, "__esModule", {
2925
- value: true
2926
- });
2927
- exports.default = void 0;
2928
-
2929
- // X build has failed, should we exit? I.e. is it settled?
2930
- var _default = build => ["linux", "mac", "windows"].every(platform => build[platform].shouldSkip || "succeeded" === build[platform].status || "failed" === build[platform].status && build[platform].numberOfAttemptedBuilds === 2);
2931
-
2932
- exports.default = _default;
2933
- },{}],"../lib/utilities/subscribeToFirebaseDoc.js":[function(require,module,exports) {
2934
- "use strict";
2935
-
2936
- Object.defineProperty(exports, "__esModule", {
2937
- value: true
2938
- });
2939
- exports.default = void 0;
2940
-
2941
- var _firestore = _interopRequireDefault(require("./firestore"));
2942
-
2943
- var _logger = _interopRequireDefault(require("./logger"));
2944
-
2945
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2946
-
2947
- var _default = async (key, receiver) => {
2948
- const hasResolved = false;
2949
- return new Promise((resolve, reject) => {
2950
- _logger.default.debug({
2951
- key
2952
- }, "subscribeToFirebaseDoc");
2953
-
2954
- _firestore.default.doc(key).onSnapshot(snapshot => {
2955
- receiver({
2956
- snapshot,
2957
- data: snapshot.exists ? snapshot.data() : undefined
2958
- });
2959
-
2960
- if (!hasResolved) {
2961
- resolve();
2962
- }
2963
- }, err => {
2964
- reject(err);
2965
- });
2966
- });
2967
- };
2968
-
2969
- exports.default = _default;
2970
- },{"./firestore":"../lib/utilities/firestore.js","./logger":"../lib/utilities/logger.js"}],"../lib/utilities/subscribeToBuild.js":[function(require,module,exports) {
2971
- "use strict";
2972
-
2973
- Object.defineProperty(exports, "__esModule", {
2974
- value: true
2975
- });
2976
- exports.default = void 0;
2977
-
2978
- var _subscribeToFirebaseDoc = _interopRequireDefault(require("./subscribeToFirebaseDoc"));
2979
-
2980
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2981
-
2982
- var _default = async ({
2983
- appId,
2984
- buildId,
2985
- onDataReceived,
2986
- userId
2987
- }) => {
2988
- try {
2989
- return await (0, _subscribeToFirebaseDoc.default)(`users/${userId}/applications/${appId}/builds/${buildId}`, async ({
2990
- data
2991
- }) => {
2992
- onDataReceived(data);
2993
- });
2994
- } catch (e) {
2995
- e.message = `Failed while subscribing to build; ${e.message}`;
2996
- throw e;
2997
- }
2998
- };
2999
-
3000
- exports.default = _default;
3001
- },{"./subscribeToFirebaseDoc":"../lib/utilities/subscribeToFirebaseDoc.js"}],"../lib/components/ViewBuild.js":[function(require,module,exports) {
3002
- "use strict";
3003
-
3004
- Object.defineProperty(exports, "__esModule", {
3005
- value: true
3006
- });
3007
- exports.default = void 0;
3008
-
3009
- var _ink = require("ink");
3010
-
3011
- var _propTypes = _interopRequireDefault(require("prop-types"));
3012
-
3013
- var _react = _interopRequireWildcard(require("react"));
3014
-
3015
- var _BuildProgress = _interopRequireDefault(require("./BuildProgress"));
3016
-
3017
- var _ErrorDisplay = _interopRequireDefault(require("./ErrorDisplay"));
3018
-
3019
- var _MainLayout = _interopRequireDefault(require("./MainLayout"));
3020
-
3021
- var _firestore = require("../utilities/firestore");
3022
-
3023
- var _getLatestBuildId = _interopRequireDefault(require("../utilities/getLatestBuildId"));
3024
-
3025
- var _getProjectConfig = _interopRequireDefault(require("../utilities/projectConfig/getProjectConfig"));
3026
-
3027
- var _logForCI = _interopRequireDefault(require("../utilities/logForCI"));
3028
-
3029
- var _shouldExitOnBuildFailure = _interopRequireDefault(require("../utilities/shouldExitOnBuildFailure"));
3030
-
3031
- var _subscribeToBuild = _interopRequireDefault(require("../utilities/subscribeToBuild"));
3032
-
3033
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
3034
-
3035
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3036
-
3037
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3038
-
3039
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3040
-
3041
- // libs
3042
- // components
3043
- // utils
3044
- const ViewBuild = ({
3045
- commandUsed,
3046
- id
3047
- }) => {
3048
- const exit = (0, _useExit.default)();
3049
- const [{
3050
- appId,
3051
- arbitraryMessageComponent,
3052
- build,
3053
- error,
3054
- hasBuildFailed,
3055
- isLoading
3056
- }, setState] = (0, _react.useState)({
3057
- appId: null,
3058
- arbitraryMessageComponent: null,
3059
- build: null,
3060
- error: null,
3061
- hasBuildFailed: false,
3062
- isLoading: true
3063
- });
3064
-
3065
- const onError = e => {
3066
- const error = e.response ? e.response.data : e;
3067
- (0, _logForCI.default)(error);
3068
- setState(prevState => ({ ...prevState,
3069
- error
3070
- }));
3071
- };
3072
-
3073
- (0, _react.useEffect)(() => {
3074
- let config;
3075
-
3076
- try {
3077
- // This will throw if validation fails:
3078
- config = (0, _getProjectConfig.default)().config;
3079
- } catch (e) {
3080
- setState(previousState => ({ ...previousState,
3081
- error: e
3082
- }));
3083
- return;
3084
- }
3085
-
3086
- let firebaseUnsubscribe;
3087
-
3088
- const subscribe = buildId => {
3089
- (0, _subscribeToBuild.default)({
3090
- appId: config.id,
3091
- buildId,
3092
- onDataReceived: data => {
3093
- if (!data) {
3094
- onError(new Error(`No such build exists (${buildId}). Please contact us if this is an error`));
3095
- }
3096
-
3097
- setState(prevState => ({ ...prevState,
3098
- appId: config.id,
3099
- build: data,
3100
- isLoading: false
3101
- }));
3102
- },
3103
- userId: (0, _firestore.currentUser)().uid
3104
- }).then(firebaseUnsubscribeResult => {
3105
- firebaseUnsubscribe = firebaseUnsubscribeResult;
3106
- }).catch(onError);
3107
- };
3108
-
3109
- if (id) {
3110
- subscribe(id);
3111
- } else {
3112
- (0, _getLatestBuildId.default)({
3113
- appId: config.id
3114
- }).catch(onError).then(latestBuildId => {
3115
- if (!latestBuildId) {
3116
- setState(previousState => ({ ...previousState,
3117
- arbitraryMessageComponent: /*#__PURE__*/_react.default.createElement(_ink.Text, null, "There are no builds yet")
3118
- }));
3119
- return;
3120
- }
3121
-
3122
- return subscribe(latestBuildId);
3123
- });
3124
- }
3125
-
3126
- return () => {
3127
- if (firebaseUnsubscribe) {
3128
- firebaseUnsubscribe();
3129
- }
3130
- };
3131
- }, [id]); // Exit if the build has errored and settled
3132
-
3133
- (0, _react.useEffect)(() => {
3134
- if (hasBuildFailed && (0, _shouldExitOnBuildFailure.default)(build)) {
3135
- setTimeout(() => exit(new Error("Build has failed")), 10);
3136
- }
3137
- }, [build, exit, hasBuildFailed]); // Exit once an arbitrary message exists
3138
-
3139
- (0, _react.useEffect)(() => {
3140
- if (arbitraryMessageComponent) {
3141
- setTimeout(() => exit(new Error("Validation failed")), 10);
3142
- }
3143
- }, [arbitraryMessageComponent, exit]);
3144
-
3145
- if (error) {
3146
- return /*#__PURE__*/_react.default.createElement(_ErrorDisplay.default, {
3147
- commandUsed: commandUsed,
3148
- error: error
3149
- });
3150
- }
3151
-
3152
- if (arbitraryMessageComponent) {
3153
- return arbitraryMessageComponent;
3154
- }
3155
-
3156
- if (isLoading) {
3157
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Loading...");
3158
- }
3159
-
3160
- const onBuildFailure = () => {
3161
- if (hasBuildFailed) {
3162
- return;
3163
- }
3164
-
3165
- setState(prevState => ({ ...prevState,
3166
- hasBuildFailed: true
3167
- }));
3168
- };
3169
-
3170
- return /*#__PURE__*/_react.default.createElement(_MainLayout.default, {
3171
- appId: appId,
3172
- appName: build.appName,
3173
- appVersion: build.appVersion,
3174
- build: build,
3175
- commandUsed: commandUsed,
3176
- hasBuildFailed: hasBuildFailed
3177
- }, /*#__PURE__*/_react.default.createElement(_BuildProgress.default, {
3178
- build: build,
3179
- onBuildFailure: onBuildFailure
3180
- }));
3181
- };
3182
-
3183
- ViewBuild.propTypes = {
3184
- id: (props, propName, componentName) => {
3185
- if ([props.id, props.shouldViewLatest].filter(Boolean).length !== 1) {
3186
- return new Error(`Exactly one of 'id' and 'shouldViewLatest' must be specified in '${componentName}'`);
3187
- }
3188
-
3189
- const type = typeof props.id;
3190
-
3191
- if (!["string", "undefined"].includes(type)) {
3192
- return new Error(`'id' is a '${type}', not a string, in '${componentName}'.`);
3193
- }
3194
- },
3195
- commandUsed: _propTypes.default.string.isRequired,
3196
- shouldViewLatest: (props, propName, componentName) => {
3197
- if ([props.id, props.shouldViewLatest].filter(Boolean).length !== 1) {
3198
- return new Error(`Exactly one of 'id' and 'shouldViewLatest' must be specified in '${componentName}'`);
3199
- }
3200
-
3201
- const type = typeof props.shouldViewLatest;
3202
-
3203
- if (!["boolean", "undefined"].includes(type)) {
3204
- return new Error(`'shouldViewLatest' is a '${type}', not a boolean, in '${componentName}'.`);
3205
- }
3206
- }
3207
- };
3208
- var _default = ViewBuild;
3209
- exports.default = _default;
3210
- },{"./BuildProgress":"../lib/components/BuildProgress.js","./ErrorDisplay":"../lib/components/ErrorDisplay.js","./MainLayout":"../lib/components/MainLayout.js","../utilities/firestore":"../lib/utilities/firestore.js","../utilities/getLatestBuildId":"../lib/utilities/getLatestBuildId.js","../utilities/projectConfig/getProjectConfig":"../lib/utilities/projectConfig/getProjectConfig.js","../utilities/logForCI":"../lib/utilities/logForCI.js","../utilities/shouldExitOnBuildFailure":"../lib/utilities/shouldExitOnBuildFailure.js","../utilities/subscribeToBuild":"../lib/utilities/subscribeToBuild.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/components/TableEnd.js":[function(require,module,exports) {
3211
- "use strict";
3212
-
3213
- Object.defineProperty(exports, "__esModule", {
3214
- value: true
3215
- });
3216
- exports.default = void 0;
3217
-
3218
- var _ink = require("ink");
3219
-
3220
- var _propTypes = _interopRequireDefault(require("prop-types"));
3221
-
3222
- var _react = _interopRequireDefault(require("react"));
3223
-
3224
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3225
-
3226
- /*
3227
- See Table component
3228
- */
3229
- const TableEnd = ({
3230
- keyDetails,
3231
- ...props
3232
- }) => {
3233
- let content = "└";
3234
- content += Object.values(keyDetails).map(({
3235
- width
3236
- }) => "─".repeat(width + 2)).join("┴");
3237
- content += "┘";
3238
- return /*#__PURE__*/_react.default.createElement(_ink.Box, props, /*#__PURE__*/_react.default.createElement(_ink.Text, null, content));
3239
- };
3240
-
3241
- TableEnd.propTypes = {
3242
- keyDetails: _propTypes.default.object.isRequired
3243
- };
3244
- var _default = TableEnd;
3245
- exports.default = _default;
3246
- },{}],"../lib/components/TableHead.js":[function(require,module,exports) {
3247
- "use strict";
3248
-
3249
- Object.defineProperty(exports, "__esModule", {
3250
- value: true
3251
- });
3252
- exports.default = void 0;
3253
-
3254
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
3255
-
3256
- var _ink = require("ink");
3257
-
3258
- var _propTypes = _interopRequireDefault(require("prop-types"));
3259
-
3260
- var _react = _interopRequireWildcard(require("react"));
3261
-
3262
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3263
-
3264
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3265
-
3266
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3267
-
3268
- /*
3269
- See Table component
3270
- */
3271
- const TableHead = ({
3272
- keyDetails,
3273
- ...props
3274
- }) => {
3275
- let topLine = "┌";
3276
- topLine += Object.values(keyDetails).map(({
3277
- width
3278
- }) => "─".repeat(width + 2)).join("┬");
3279
- topLine += "┐";
3280
- const contentLineElements = Object.values(keyDetails).map(({
3281
- key,
3282
- width
3283
- }, index) => {
3284
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
3285
- key: key
3286
- }, index > 0 ? /*#__PURE__*/_react.default.createElement(_ink.Text, null, " \u2502 ") : null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
3287
- width: width
3288
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, {
3289
- bold: true
3290
- }, key)));
3291
- });
3292
- return /*#__PURE__*/_react.default.createElement(_ink.Box, (0, _extends2.default)({
3293
- flexDirection: "column"
3294
- }, props), /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Text, null, topLine)), /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Text, null, "\u2502 "), contentLineElements, /*#__PURE__*/_react.default.createElement(_ink.Text, null, " \u2502"))));
3295
- };
3296
-
3297
- TableHead.propTypes = {
3298
- bottomLinePrefix: _propTypes.default.string,
3299
- keyDetails: _propTypes.default.object.isRequired
3300
- };
3301
- var _default = TableHead;
3302
- exports.default = _default;
3303
- },{}],"../lib/components/TableRow.js":[function(require,module,exports) {
3304
- "use strict";
3305
-
3306
- Object.defineProperty(exports, "__esModule", {
3307
- value: true
3308
- });
3309
- exports.default = void 0;
3310
-
3311
- var _ink = require("ink");
3312
-
3313
- var _propTypes = _interopRequireDefault(require("prop-types"));
3314
-
3315
- var _react = _interopRequireWildcard(require("react"));
3316
-
3317
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3318
-
3319
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3320
-
3321
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3322
-
3323
- /*
3324
- See Table component
3325
- */
3326
- const TableRow = ({
3327
- data,
3328
- getCellTextProps = ({
3329
- props
3330
- }) => props,
3331
- keyDetails,
3332
- textProps = {}
3333
- }) => {
3334
- let topLine = "├";
3335
- topLine += Object.values(keyDetails).map(({
3336
- width
3337
- }) => "─".repeat(width + 2)).join("┼");
3338
- topLine += "┤";
3339
-
3340
- const content = /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Text, null, "\u2502 "), Object.entries(data).map(([key, value], index) => {
3341
- return /*#__PURE__*/_react.default.createElement(_ink.Box, {
3342
- key: key
3343
- }, index > 0 ? /*#__PURE__*/_react.default.createElement(_ink.Text, null, " \u2502 ") : null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
3344
- width: keyDetails[key].width
3345
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, getCellTextProps({
3346
- key,
3347
- props: textProps,
3348
- rowData: data,
3349
- value
3350
- }), value)));
3351
- }), /*#__PURE__*/_react.default.createElement(_ink.Text, null, " \u2502"));
3352
-
3353
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ink.Box, {
3354
- flexDirection: "column"
3355
- }, /*#__PURE__*/_react.default.createElement(_ink.Text, null, topLine), /*#__PURE__*/_react.default.createElement(_ink.Box, null, content)));
3356
- };
3357
-
3358
- TableRow.propTypes = {
3359
- data: _propTypes.default.object.isRequired,
3360
- getCellTextProps: _propTypes.default.func,
3361
- keyDetails: _propTypes.default.object.isRequired,
3362
- textProps: _propTypes.default.object
3363
- };
3364
- var _default = TableRow;
3365
- exports.default = _default;
3366
- },{}],"../lib/components/TableBody.js":[function(require,module,exports) {
3367
- "use strict";
3368
-
3369
- Object.defineProperty(exports, "__esModule", {
3370
- value: true
3371
- });
3372
- exports.default = void 0;
3373
-
3374
- var _propTypes = _interopRequireDefault(require("prop-types"));
3375
-
3376
- var _react = _interopRequireWildcard(require("react"));
3377
-
3378
- var _TableRow = _interopRequireDefault(require("./TableRow"));
3379
-
3380
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3381
-
3382
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3383
-
3384
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3385
-
3386
- /*
3387
- See Table component
3388
- */
3389
- const TableBody = ({
3390
- data,
3391
- getCellTextProps,
3392
- keyDetails
3393
- }) => {
3394
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, data.map((rowData, index) => /*#__PURE__*/_react.default.createElement(_TableRow.default, {
3395
- data: rowData,
3396
- getCellTextProps: getCellTextProps,
3397
- key: index,
3398
- keyDetails: keyDetails
3399
- })));
3400
- };
3401
-
3402
- TableBody.propTypes = {
3403
- data: (props, propName, componentName) => {
3404
- const type = typeof props.data;
3405
-
3406
- if (Array.isArray("array")) {
3407
- return new Error(`'data' prop must be an array ('${type}' given) in ${componentName} component`);
3408
- }
3409
-
3410
- if (props.data.length === 0) {
3411
- return new Error(`'data' prop must not be empty, in ${componentName} component`);
3412
- }
3413
- },
3414
- getCellTextProps: _propTypes.default.func,
3415
- keyDetails: _propTypes.default.object.isRequired
3416
- };
3417
- var _default = TableBody;
3418
- exports.default = _default;
3419
- },{"./TableRow":"../lib/components/TableRow.js"}],"../lib/utilities/getKeyDetails.js":[function(require,module,exports) {
3420
- "use strict";
3421
-
3422
- Object.defineProperty(exports, "__esModule", {
3423
- value: true
3424
- });
3425
- exports.default = void 0;
3426
-
3427
- // This is used to get the column widths for tables
3428
- var _default = data => {
3429
- const result = {};
3430
- Object.keys(data[0]).forEach(key => {
3431
- result[key] = {
3432
- key,
3433
- width: Math.max(key.length, data.map(item => item[key].toString().length).sort((a, b) => b - a)[0])
3434
- };
3435
- });
3436
- return result;
3437
- };
3438
-
3439
- exports.default = _default;
3440
- },{}],"../lib/components/Table.js":[function(require,module,exports) {
3441
- "use strict";
3442
-
3443
- Object.defineProperty(exports, "__esModule", {
3444
- value: true
3445
- });
3446
- exports.default = void 0;
3447
-
3448
- var _ink = require("ink");
3449
-
3450
- var _propTypes = _interopRequireDefault(require("prop-types"));
3451
-
3452
- var _react = _interopRequireDefault(require("react"));
3453
-
3454
- var _TableEnd = _interopRequireDefault(require("./TableEnd"));
3455
-
3456
- var _TableHead = _interopRequireDefault(require("./TableHead"));
3457
-
3458
- var _TableBody = _interopRequireDefault(require("./TableBody"));
3459
-
3460
- var _getKeyDetails = _interopRequireDefault(require("../utilities/getKeyDetails"));
3461
-
3462
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3463
-
3464
- /*
3465
- This component prints (the array of objects given) in a table.
3466
- The array must not be empty.
3467
- The keys are used as headers.
3468
- Column widths are based on the longest value (object key or value).
3469
- It is assumed that the same keys exist in all items.
3470
- */
3471
- const Table = ({
3472
- data,
3473
- getCellTextProps
3474
- }) => {
3475
- const keyDetails = (0, _getKeyDetails.default)(data);
3476
- return /*#__PURE__*/_react.default.createElement(_ink.Box, {
3477
- flexDirection: "column"
3478
- }, /*#__PURE__*/_react.default.createElement(_TableHead.default, {
3479
- keyDetails: keyDetails
3480
- }), /*#__PURE__*/_react.default.createElement(_TableBody.default, {
3481
- data: data,
3482
- getCellTextProps: getCellTextProps,
3483
- keyDetails: keyDetails
3484
- }), /*#__PURE__*/_react.default.createElement(_TableEnd.default, {
3485
- keyDetails: keyDetails
3486
- }));
3487
- };
3488
-
3489
- Table.propTypes = {
3490
- data: (props, propName, componentName) => {
3491
- const type = typeof props.data;
3492
-
3493
- if (Array.isArray("array")) {
3494
- return new Error(`'data' prop must be an array ('${type}' given) in ${componentName} component`);
3495
- }
3496
-
3497
- if (props.data.length === 0) {
3498
- return new Error(`'data' prop must not be empty, in ${componentName} component`);
3499
- }
3500
- },
3501
- getCellTextProps: _propTypes.default.func
3502
- };
3503
- var _default = Table;
3504
- exports.default = _default;
3505
- },{"./TableEnd":"../lib/components/TableEnd.js","./TableHead":"../lib/components/TableHead.js","./TableBody":"../lib/components/TableBody.js","../utilities/getKeyDetails":"../lib/utilities/getKeyDetails.js"}],"../lib/utilities/capitalize.js":[function(require,module,exports) {
3506
- "use strict";
3507
-
3508
- Object.defineProperty(exports, "__esModule", {
3509
- value: true
3510
- });
3511
- exports.default = void 0;
3512
-
3513
- var _default = input => {
3514
- if (typeof input !== "string") {
3515
- return "";
3516
- }
3517
-
3518
- return input.charAt(0).toUpperCase() + input.slice(1);
3519
- };
3520
-
3521
- exports.default = _default;
3522
- },{}],"../lib/utilities/getBuilds.js":[function(require,module,exports) {
3523
- "use strict";
3524
-
3525
- Object.defineProperty(exports, "__esModule", {
3526
- value: true
3527
- });
3528
- exports.default = void 0;
3529
-
3530
- var _firestore = _interopRequireWildcard(require("./firestore"));
3531
-
3532
- var _logger = _interopRequireDefault(require("./logger"));
3533
-
3534
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3535
-
3536
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3537
-
3538
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3539
-
3540
- var _default = async ({
3541
- addWhereClauses = query => query,
3542
- appId,
3543
- limit = 5,
3544
- startAfter
3545
- }) => {
3546
- _logger.default.debug({
3547
- appId,
3548
- limit,
3549
- startAfter
3550
- }, "getBuilds");
3551
-
3552
- const appRef = _firestore.default.doc(`users/${(0, _firestore.currentUser)().uid}/applications/${appId}`);
3553
-
3554
- const appSnapshot = await appRef.get();
3555
-
3556
- if (!appSnapshot.exists) {
3557
- throw new Error(`Application with ID of ${appId} doesn't exist.`);
3558
- }
3559
-
3560
- let query = addWhereClauses(appRef.collection("builds")).orderBy("createdAt", "desc");
3561
-
3562
- if (startAfter) {
3563
- query = query.startAfter(startAfter);
3564
- }
3565
-
3566
- const buildsResult = await query.limit(limit).get();
3567
-
3568
- if (buildsResult.empty) {
3569
- return [];
3570
- }
3571
-
3572
- return buildsResult.docs.map(doc => doc.data());
3573
- };
3574
-
3575
- exports.default = _default;
3576
- },{"./firestore":"../lib/utilities/firestore.js","./logger":"../lib/utilities/logger.js"}],"../lib/utilities/getRelativeDateFromDateString.js":[function(require,module,exports) {
3577
- "use strict";
3578
-
3579
- Object.defineProperty(exports, "__esModule", {
3580
- value: true
3581
- });
3582
- exports.default = void 0;
3583
-
3584
- var dateFns = _interopRequireWildcard(require("date-fns"));
3585
-
3586
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3587
-
3588
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3589
-
3590
- var _default = input => dateFns.formatDistance(new Date(input), new Date()) + " ago";
3591
-
3592
- exports.default = _default;
3593
- },{}],"../lib/components/ViewBuilds.js":[function(require,module,exports) {
3594
- "use strict";
3595
-
3596
- Object.defineProperty(exports, "__esModule", {
3597
- value: true
3598
- });
3599
- exports.default = void 0;
3600
-
3601
- var _ink = require("ink");
3602
-
3603
- var _propTypes = _interopRequireDefault(require("prop-types"));
3604
-
3605
- var _react = _interopRequireWildcard(require("react"));
3606
-
3607
- var _ErrorDisplay = _interopRequireDefault(require("./ErrorDisplay"));
3608
-
3609
- var _Table = _interopRequireDefault(require("./Table"));
3610
-
3611
- var _capitalize = _interopRequireDefault(require("../utilities/capitalize"));
3612
-
3613
- var _getBuilds = _interopRequireDefault(require("../utilities/getBuilds"));
3614
-
3615
- var _getProjectConfig = _interopRequireDefault(require("../utilities/projectConfig/getProjectConfig"));
3616
-
3617
- var _getRelativeDateFromDateString = _interopRequireDefault(require("../utilities/getRelativeDateFromDateString"));
3618
-
3619
- var _logForCI = _interopRequireDefault(require("../utilities/logForCI"));
3620
-
3621
- var _useInput = _interopRequireDefault(require("../utilities/useInput"));
3622
-
3623
- var _useExit = _interopRequireDefault(require("../utilities/useExit"));
3624
-
3625
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3626
-
3627
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3628
-
3629
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3630
-
3631
- const ViewBuilds = ({
3632
- commandUsed
3633
- }) => {
3634
- const exit = (0, _useExit.default)();
3635
- const [{
3636
- builds,
3637
- error,
3638
- hasMoreToLoad,
3639
- isInitialLoadComplete,
3640
- isLoading,
3641
- projectConfig,
3642
- startAfter
3643
- }, setState] = (0, _react.useState)({
3644
- builds: [],
3645
- error: null,
3646
- hasMoreToLoad: true,
3647
- isInitialLoadComplete: false,
3648
- isLoading: false,
3649
- projectConfig: null,
3650
- startAfter: null
3651
- });
3652
- const onInput = (0, _useInput.default)();
3653
- onInput((input, key) => {
3654
- if (key.escape) {
3655
- exit();
3656
- }
3657
-
3658
- if (input === " " || key.downArrow || key.pageDown || key.return) {
3659
- if (!isInitialLoadComplete || !hasMoreToLoad) {
3660
- return;
3661
- }
3662
-
3663
- setState(previousState => ({ ...previousState,
3664
- startAfter: builds[builds.length - 1].createdAt
3665
- }));
3666
- }
3667
- });
3668
- (0, _react.useEffect)(() => {
3669
- if (error || isLoading || isInitialLoadComplete && (!hasMoreToLoad || !startAfter)) {
3670
- return;
3671
- }
3672
-
3673
- setState(previousState => ({ ...previousState,
3674
- isLoading: true
3675
- }));
3676
- let config;
3677
-
3678
- try {
3679
- // This will throw if validation fails:
3680
- config = projectConfig || (0, _getProjectConfig.default)().config;
3681
- } catch (e) {
3682
- setState(previousState => ({ ...previousState,
3683
- error: e
3684
- }));
3685
- return;
3686
- }
3687
-
3688
- const pageSize = 5;
3689
- (0, _getBuilds.default)({
3690
- appId: config.id,
3691
- limit: pageSize + 1,
3692
- startAfter
3693
- }).then(buildsResult => {
3694
- setState(previousState => {
3695
- const stateUpdates = {
3696
- hasMoreToLoad: buildsResult.length > pageSize,
3697
- isInitialLoadComplete: true,
3698
- isLoading: false,
3699
- projectConfig: config,
3700
- startAfter: null
3701
- };
3702
-
3703
- if (buildsResult.length) {
3704
- stateUpdates.builds = [...previousState.builds, ...buildsResult.slice(0, pageSize)];
3705
- }
3706
-
3707
- return { ...previousState,
3708
- ...stateUpdates
3709
- };
3710
- });
3711
- }).catch(e => {
3712
- (0, _logForCI.default)(e);
3713
- setState(previousState => ({ ...previousState,
3714
- error: e,
3715
- isLoading: false
3716
- }));
3717
- });
3718
- }, [error, hasMoreToLoad, isInitialLoadComplete, isLoading, projectConfig, startAfter]); // Exit once all are loaded
3719
-
3720
- (0, _react.useEffect)(() => {
3721
- if (!hasMoreToLoad) {
3722
- setTimeout(exit, 10);
3723
- }
3724
- }, [exit, hasMoreToLoad]);
3725
-
3726
- if (error) {
3727
- return /*#__PURE__*/_react.default.createElement(_ErrorDisplay.default, {
3728
- commandUsed: commandUsed,
3729
- error: error
3730
- });
3731
- }
3732
-
3733
- if (!isInitialLoadComplete) {
3734
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "Loading...");
3735
- }
3736
-
3737
- if (builds.length) {
3738
- const data = builds.map(build => ({
3739
- ID: build.id,
3740
- Version: build.appVersion || "unknown",
3741
- "Creation date": (0, _getRelativeDateFromDateString.default)(build.createdAt),
3742
- Status: (0, _capitalize.default)(build.status),
3743
- "Release date": build.releasedAt ? (0, _getRelativeDateFromDateString.default)(build.releasedAt) : "Unreleased"
3744
- }));
3745
-
3746
- const getCellTextProps = ({
3747
- key,
3748
- props,
3749
- value
3750
- }) => {
3751
- const result = { ...props
3752
- };
3753
-
3754
- if (key === "Status") {
3755
- const status = value.toLowerCase();
3756
-
3757
- if (status === "succeeded") {
3758
- result.color = "green";
3759
- } else if (status === "failed") {
3760
- result.color = "red";
3761
- } else if (status === "cancelled") {
3762
- result.dimColor = true;
3763
- }
3764
- } else if (key === "Release date" && value.toLowerCase() === "unreleased") {
3765
- result.dimColor = true;
3766
- }
3767
-
3768
- return result;
3769
- };
3770
-
3771
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Table.default, {
3772
- getCellTextProps: getCellTextProps,
3773
- data: data
3774
- }), builds.length > 0 ? /*#__PURE__*/_react.default.createElement(_ink.Box, null, /*#__PURE__*/_react.default.createElement(_ink.Text, {
3775
- color: "gray",
3776
- dimColor: true
3777
- }, isLoading ? "Loading more..." : hasMoreToLoad ? `Showing the latest ${builds.length} builds. Press space/down to load more.` : `Showing all (${builds.length}) builds`)) : null);
3778
- } else {
3779
- return /*#__PURE__*/_react.default.createElement(_ink.Text, null, "There are no builds yet");
3780
- }
3781
- };
3782
-
3783
- ViewBuilds.propTypes = {
3784
- commandUsed: _propTypes.default.string.isRequired
3785
- };
3786
- var _default = ViewBuilds;
3787
- exports.default = _default;
3788
- },{"./ErrorDisplay":"../lib/components/ErrorDisplay.js","./Table":"../lib/components/Table.js","../utilities/capitalize":"../lib/utilities/capitalize.js","../utilities/getBuilds":"../lib/utilities/getBuilds.js","../utilities/projectConfig/getProjectConfig":"../lib/utilities/projectConfig/getProjectConfig.js","../utilities/getRelativeDateFromDateString":"../lib/utilities/getRelativeDateFromDateString.js","../utilities/logForCI":"../lib/utilities/logForCI.js","../utilities/useInput":"../lib/utilities/useInput.js","../utilities/useExit":"../lib/utilities/useExit.js"}],"../lib/utilities/exitIfCLIOutOfDate.js":[function(require,module,exports) {
3789
- "use strict";
3790
-
3791
- Object.defineProperty(exports, "__esModule", {
3792
- value: true
3793
- });
3794
- exports.default = void 0;
3795
-
3796
- var _chalk = _interopRequireDefault(require("chalk"));
3797
-
3798
- var _isInstalledGlobally = _interopRequireDefault(require("is-installed-globally"));
3799
-
3800
- var _latestVersion = _interopRequireDefault(require("latest-version"));
3801
-
3802
- var _pkgUp = _interopRequireDefault(require("pkg-up"));
3803
-
3804
- var _semver = _interopRequireDefault(require("semver"));
3805
-
3806
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3807
-
3808
- var _default = () => {
3809
- // Ignore during tests
3810
- if (process.env.AVA_PATH) {
3811
- return;
3812
- }
3813
-
3814
- const pkg = require(_pkgUp.default.sync({
3815
- cwd: __dirname
3816
- }));
3817
-
3818
- (0, _latestVersion.default)(pkg.name).then(latest => {
3819
- if (_semver.default.gt(latest, pkg.version)) {
3820
- const commandToUpdate = _chalk.default.greenBright(`npm install ${_isInstalledGlobally.default ? "-g" : "--save-dev"} @todesktop/cli`);
3821
-
3822
- console.log(`Your version of @todesktop/cli is out of date.\nRun ${commandToUpdate} to update to v${latest}.`);
3823
-
3824
- if (!_semver.default.satisfies(latest, `^${pkg.version}`)) {
3825
- console.log(`CLI is exiting because it is out out of date.`);
3826
- process.exit(1);
3827
- }
3828
- }
3829
- });
3830
- };
3831
-
3832
- exports.default = _default;
3833
- },{}],"../package.json":[function(require,module,exports) {
3834
- module.exports = {
3835
- "private": false,
3836
- "publishConfig": {
3837
- "access": "public"
3838
- },
3839
- "name": "@todesktop/cli",
3840
- "version": "1.1.1",
3841
- "license": "MIT",
3842
- "author": "Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)",
3843
- "homepage": "https://todesktop.com/cli",
3844
- "bugs": {
3845
- "email": "dave@todesktop.com"
3846
- },
3847
- "bin": {
3848
- "todesktop": "./build/cli.js"
3849
- },
3850
- "engines": {
3851
- "node": ">=12"
3852
- },
3853
- "scripts": {
3854
- "prepare": "npx force-resolutions",
3855
- "dev": "cp-cli dev.env .env && pastel dev",
3856
- "dev:prod": "cp-cli prod.env .env && pastel dev",
3857
- "build": "cross-env NODE_ENV=production pastel build && cp-cli prod.env .env && cp node_modules/pastel/boot.js build/boot.js && sed -i'.bak' 's@pastel\\/boot@.\\/boot@g' build/cli.js",
3858
- "lint": "eslint .",
3859
- "lint--fix": "eslint . --fix",
3860
- "release": "npm run build && npx np --tag=latest",
3861
- "release-beta": "npm run build && npx np --any-branch --no-tests --tag=beta",
3862
- "test": "npm run build && ava",
3863
- "test--watch": "npm test -- --watch"
3864
- },
3865
- "files": ["build", "docs", ".env", "LICENSE", "README.md"],
3866
- "dependencies": {
3867
- "@sentry/node": "^5.27.2",
3868
- "ajv": "^6.12.6",
3869
- "analytics-node": "^4.0.1",
3870
- "archiver": "^5.2.0",
3871
- "axios": "^0.21.1",
3872
- "better-ajv-errors": "^1.2.0",
3873
- "bunyan": "^1.8.14",
3874
- "camelcase-keys": "^5.2.0",
3875
- "chalk": "^4.1.0",
3876
- "conf": "^7.1.2",
3877
- "date-fns": "^2.28.0",
3878
- "decamelize": "^1.2.0",
3879
- "del": "^6.0.0",
3880
- "dotenv": "^8.2.0",
3881
- "du": "^1.0.0",
3882
- "email-regex": "^4.0.0",
3883
- "fast-glob": "^3.2.4",
3884
- "final-form": "^4.20.1",
3885
- "find-up": "^5.0.0",
3886
- "firebase": "^7.24.0",
3887
- "git-rev-sync": "^3.0.2",
3888
- "ink": "^3.2.0",
3889
- "ink-gradient": "^2.0.0",
3890
- "ink-link": "^2.0.0",
3891
- "ink-progress-bar": "^3.0.0",
3892
- "ink-select-input": "^4.2.1",
3893
- "ink-text-input": "^4.0.1",
3894
- "is-installed-globally": "^0.3.2",
3895
- "latest-version": "^5.1.0",
3896
- "lodash.throttle": "^4.1.1",
3897
- "parse-author": "^2.0.0",
3898
- "pkg-up": "^3.1.0",
3899
- "pretty-bytes": "^5.4.1",
3900
- "prop-types": "^15.7.2",
3901
- "react": "^17.0.2",
3902
- "react-final-form": "^6.5.1",
3903
- "semver": "^7.3.2",
3904
- "stream-to-array": "^2.3.0",
3905
- "superagent": "^7.1.3",
3906
- "uuid": "^8.3.1",
3907
- "xdg-basedir": "^4.0.0",
3908
- "yargs": "^15.4.1"
3909
- },
3910
- "devDependencies": {
3911
- "@ava/babel": "^1.0.1",
3912
- "@babel/core": "^7.12.3",
3913
- "@babel/plugin-transform-runtime": "^7.12.1",
3914
- "@babel/preset-env": "^7.11.5",
3915
- "@babel/register": "^7.12.1",
3916
- "@types/bunyan": "^1.8.6",
3917
- "ava": "^4.3.1",
3918
- "babel-preset-es2015": "^6.24.1",
3919
- "cp-cli": "^2.0.0",
3920
- "cross-env": "^7.0.2",
3921
- "eslint": "^7.6.0",
3922
- "eslint-config-prettier": "^6.11.0",
3923
- "eslint-config-standard": "^14.1.1",
3924
- "eslint-plugin-import": "^2.22.1",
3925
- "eslint-plugin-node": "^11.1.0",
3926
- "eslint-plugin-prettier": "^3.1.4",
3927
- "eslint-plugin-promise": "^4.2.1",
3928
- "eslint-plugin-react": "^7.21.4",
3929
- "eslint-plugin-react-hooks": "^4.2.0",
3930
- "eslint-plugin-standard": "^4.0.1",
3931
- "execa": "^4.0.3",
3932
- "extract-zip": "^2.0.1",
3933
- "fs-extra": "^9.0.1",
3934
- "husky": "^4.3.0",
3935
- "is-ci": "^2.0.0",
3936
- "lint-staged": "^10.2.11",
3937
- "pastel": "^1.1.1",
3938
- "prettier": "^2.1.2",
3939
- "proxyquire": "^2.1.3",
3940
- "sinon": "^9.0.3"
3941
- },
3942
- "ava": {
3943
- "files": ["test/**/*.js", "!test/fixtures/**/*", "!test/utilities/**/*"],
3944
- "require": ["@babel/register"],
3945
- "timeout": "10m"
3946
- },
3947
- "lint-staged": {
3948
- "**/*.js": ["eslint . --fix", "git add"]
3949
- },
3950
- "husky": {
3951
- "hooks": {
3952
- "pre-commit": "lint-staged"
3953
- }
3954
- },
3955
- "overrides": {
3956
- "pastel": {
3957
- "parcel-bundler": {
3958
- "deasync": "0.1.24"
3959
- }
3960
- }
3961
- },
3962
- "resolutions": {
3963
- "pastel/parcel-bundler/deasync": "0.1.24",
3964
- "ink": "3.2.0",
3965
- "react": "17.0.2"
3966
- }
3967
- };
3968
- },{}],"../lib/utilities/initSentry.js":[function(require,module,exports) {
3969
- "use strict";
3970
-
3971
- Object.defineProperty(exports, "__esModule", {
3972
- value: true
3973
- });
3974
- exports.default = void 0;
3975
-
3976
- var Sentry = _interopRequireWildcard(require("@sentry/node"));
3977
-
3978
- var _os = _interopRequireDefault(require("os"));
3979
-
3980
- var _package = _interopRequireDefault(require("../../package.json"));
3981
-
3982
- var _configStore = require("../utilities/configStore");
3983
-
3984
- var _getProjectConfig = _interopRequireDefault(require("../utilities/projectConfig/getProjectConfig"));
3985
-
3986
- var _path = _interopRequireDefault(require("path"));
3987
-
3988
- var _getEnvironmentVariables = _interopRequireDefault(require("./getEnvironmentVariables"));
3989
-
3990
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3991
-
3992
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3993
-
3994
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3995
-
3996
- var _default = () => {
3997
- const {
3998
- TODESKTOP_CLI_SENTRY_DSN
3999
- } = (0, _getEnvironmentVariables.default)();
4000
-
4001
- if (!TODESKTOP_CLI_SENTRY_DSN) {
4002
- // Don't initialise Sentry
4003
- return;
4004
- }
4005
-
4006
- Sentry.init({
4007
- dsn: TODESKTOP_CLI_SENTRY_DSN
4008
- });
4009
- Sentry.configureScope(scope => {
4010
- try {
4011
- scope.setUser({
4012
- email: (0, _configStore.getAuthConfig)().email
4013
- });
4014
- } catch (err) {}
4015
-
4016
- try {
4017
- scope.setContext("os", {
4018
- name: _os.default.platform(),
4019
- version: _os.default.release()
4020
- });
4021
- } catch (err) {}
4022
-
4023
- try {
4024
- scope.setContext("runtime", {
4025
- name: "Node.js",
4026
- version: process.version
4027
- });
4028
- } catch (err) {}
4029
-
4030
- try {
4031
- scope.setContext("app", {
4032
- app_name: _package.default.name,
4033
- app_version: _package.default.version
4034
- });
4035
- } catch (err) {}
4036
-
4037
- try {
4038
- const configResult = (0, _getProjectConfig.default)();
4039
- scope.setExtra("config", configResult);
4040
- } catch (err) {}
4041
- });
4042
- };
4043
-
4044
- exports.default = _default;
4045
- },{"../../package.json":"../package.json","../utilities/configStore":"../lib/utilities/configStore.js","../utilities/projectConfig/getProjectConfig":"../lib/utilities/projectConfig/getProjectConfig.js","./getEnvironmentVariables":"../lib/utilities/getEnvironmentVariables.js"}],"../lib/utilities/onCommand.js":[function(require,module,exports) {
4046
- "use strict";
4047
-
4048
- Object.defineProperty(exports, "__esModule", {
4049
- value: true
4050
- });
4051
- exports.default = void 0;
4052
-
4053
- var _exitIfCLIOutOfDate = _interopRequireDefault(require("./exitIfCLIOutOfDate"));
4054
-
4055
- var _initSentry = _interopRequireDefault(require("./initSentry"));
4056
-
4057
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4058
-
4059
- const defaultOptions = {
4060
- sentry: true,
4061
- exitIfOutOfDate: true
4062
- };
4063
-
4064
- var _default = options => {
4065
- const {
4066
- sentry,
4067
- exitIfOutOfDate
4068
- } = { ...defaultOptions,
4069
- ...options
4070
- };
4071
-
4072
- if (sentry) {
4073
- (0, _initSentry.default)();
4074
- }
4075
-
4076
- if (exitIfOutOfDate) {
4077
- (0, _exitIfCLIOutOfDate.default)();
4078
- }
4079
- };
4080
-
4081
- exports.default = _default;
4082
- },{"./exitIfCLIOutOfDate":"../lib/utilities/exitIfCLIOutOfDate.js","./initSentry":"../lib/utilities/initSentry.js"}],"../lib/utilities/useAnalytics.js":[function(require,module,exports) {
4083
- "use strict";
4084
-
4085
- Object.defineProperty(exports, "__esModule", {
4086
- value: true
4087
- });
4088
- exports.useAnalyticsCommand = void 0;
4089
-
4090
- var _react = require("react");
4091
-
4092
- var _firestore = require("./firestore");
4093
-
4094
- var _analytics = require("./analytics");
4095
-
4096
- var _logger = _interopRequireDefault(require("../utilities/logger"));
4097
-
4098
- var _getProjectConfig = _interopRequireDefault(require("../utilities/projectConfig/getProjectConfig"));
4099
-
4100
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4101
-
4102
- const useAnalyticsCommand = (command, flags = {}, properties = {}) => {
4103
- const [hasAttemptedTracking, setTrackingAttempt] = (0, _react.useState)(false);
4104
-
4105
- _logger.default.info({
4106
- command,
4107
- flags,
4108
- properties
4109
- }, "useAnalyticsCommand");
4110
-
4111
- try {
4112
- if (flags.projectPath) {
4113
- properties = { ...properties,
4114
- ...(0, _getProjectConfig.default)()
4115
- };
4116
- }
4117
- } catch (err) {}
4118
-
4119
- (0, _react.useEffect)(() => {
4120
- const authUnsubscribe = (0, _firestore.onUserAuth)(async user => {
4121
- /**
4122
- * Only identify if there's a user id (stops use of anon id).
4123
- * Subsequent track callback will thus always be tied to a user.
4124
- */
4125
- if (user.uid) {
4126
- (0, _analytics.identify)(user.uid, {
4127
- email: user.email,
4128
- displayName: user.displayName
4129
- }, () => {
4130
- (0, _analytics.track)(_analytics.ANALYTICS_EVENT.CLI_COMMAND, { ...properties,
4131
- flags,
4132
- command
4133
- }, () => setTrackingAttempt(true));
4134
- authUnsubscribe && authUnsubscribe();
4135
- });
4136
- }
4137
- }); // if it takes longer than 5 secs to identify a user, just set the
4138
- // tracking attempt to true so that other commands aren't waiting
4139
- // forever to terminate (see whoami component)
4140
-
4141
- setTimeout(() => setTrackingAttempt(true), 5000);
4142
- }, []); // leave empty - this should only ever execute once (on mount)
4143
-
4144
- return {
4145
- hasAttemptedTracking
4146
- };
4147
- };
4148
-
4149
- exports.useAnalyticsCommand = useAnalyticsCommand;
4150
- },{"./firestore":"../lib/utilities/firestore.js","./analytics":"../lib/utilities/analytics.js","../utilities/logger":"../lib/utilities/logger.js","../utilities/projectConfig/getProjectConfig":"../lib/utilities/projectConfig/getProjectConfig.js"}],"builds.js":[function(require,module,exports) {
4151
- "use strict";
4152
-
4153
- Object.defineProperty(exports, "__esModule", {
4154
- value: true
4155
- });
4156
- exports.default = void 0;
4157
-
4158
- var _propTypes = _interopRequireDefault(require("prop-types"));
4159
-
4160
- var _react = _interopRequireDefault(require("react"));
4161
-
4162
- var _checkIfReactIsUsable = _interopRequireDefault(require("../lib/utilities/checkIfReactIsUsable"));
4163
-
4164
- var _LoginHOC = _interopRequireDefault(require("../lib/components/LoginHOC"));
4165
-
4166
- var _ErrorBoundary = _interopRequireDefault(require("../lib/components/ErrorBoundary"));
4167
-
4168
- var _ViewBuild = _interopRequireDefault(require("../lib/components/ViewBuild"));
4169
-
4170
- var _ViewBuilds = _interopRequireDefault(require("../lib/components/ViewBuilds"));
4171
-
4172
- var _onCommand = _interopRequireDefault(require("../lib/utilities/onCommand"));
4173
-
4174
- var _useAnalytics = require("../lib/utilities/useAnalytics");
4175
-
4176
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4177
-
4178
- (0, _onCommand.default)(); /// View your builds
4179
-
4180
- const BuildsCommand = ({
4181
- id,
4182
- latest: shouldViewLatest
4183
- }) => {
4184
- (0, _checkIfReactIsUsable.default)();
4185
- (0, _useAnalytics.useAnalyticsCommand)("builds", {
4186
- id,
4187
- shouldViewLatest
4188
- });
4189
-
4190
- const getContents = () => {
4191
- let commandUsed = "todesktop builds";
4192
-
4193
- if (id) {
4194
- commandUsed += " <id>";
4195
- return /*#__PURE__*/_react.default.createElement(_ViewBuild.default, {
4196
- commandUsed: commandUsed,
4197
- id: id
4198
- });
4199
- } else if (shouldViewLatest) {
4200
- commandUsed += " --latest";
4201
- return /*#__PURE__*/_react.default.createElement(_ViewBuild.default, {
4202
- commandUsed: commandUsed,
4203
- shouldViewLatest: true
4204
- });
4205
- } else {
4206
- return /*#__PURE__*/_react.default.createElement(_ViewBuilds.default, {
4207
- commandUsed: commandUsed
4208
- });
4209
- }
4210
- };
4211
-
4212
- return /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_LoginHOC.default, null, getContents()));
4213
- };
4214
-
4215
- BuildsCommand.propTypes = {
4216
- /// View a specific build by ID
4217
- id: _propTypes.default.string,
4218
- /// View the latest build
4219
- latest: _propTypes.default.bool
4220
- };
4221
- BuildsCommand.positionalArgs = ["id"];
4222
- var _default = BuildsCommand;
4223
- exports.default = _default;
4224
- },{"../lib/utilities/checkIfReactIsUsable":"../lib/utilities/checkIfReactIsUsable.js","../lib/components/LoginHOC":"../lib/components/LoginHOC.js","../lib/components/ErrorBoundary":"../lib/components/ErrorBoundary.js","../lib/components/ViewBuild":"../lib/components/ViewBuild.js","../lib/components/ViewBuilds":"../lib/components/ViewBuilds.js","../lib/utilities/onCommand":"../lib/utilities/onCommand.js","../lib/utilities/useAnalytics":"../lib/utilities/useAnalytics.js"}]},{},["builds.js"], null)
1
+ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"cb6D":[function(require,module,exports) {
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("react"),r=({cons:r=console,proc:t=process}={})=>{try{(0,e.useState)(null)}catch(o){r.error(o),t.exit(1)}};exports.default=r;
3
+ },{}],"iiO0":[function(require,module,exports) {
4
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("@babel/runtime/helpers/extends")),t=o(require("ink-text-input")),u=o(require("react")),r=o(require("prop-types"));function o(e){return e&&e.__esModule?e:{default:e}}const l=({onBlur:r,onFocus:o,...l})=>(u.default.useEffect(()=>(o(),r),[o,r]),u.default.createElement(t.default,(0,e.default)({},l,{showCursor:!0})));l.propTypes={onBlur:r.default.func,onFocus:r.default.func};var s=l;exports.default=s;
5
+ },{}],"QfeP":[function(require,module,exports) {
6
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=r(require("pkg-up"));function r(e){return e&&e.__esModule?e:{default:e}}const t=require(e.default.sync({cwd:__dirname})).version;var u=()=>t;exports.default=u;
7
+ },{}],"XvyO":[function(require,module,exports) {
8
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("bunyan")),r=i(require("fs")),t=i(require("os")),o=i(require("path")),n=i(require("@sentry/node"));function a(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(a=function(e){return e?t:r})(e)}function i(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=a(r);if(t&&t.has(e))return t.get(e);var o={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var u=n?Object.getOwnPropertyDescriptor(e,i):null;u&&(u.get||u.set)?Object.defineProperty(o,i,u):o[i]=e[i]}return o.default=e,t&&t.set(e,o),o}function u(e){return e&&e.__esModule?e:{default:e}}let c;try{const a="todesktop-cli";let i;const u=t.homedir();i="darwin"===process.platform?o.join(u,"Library","Logs",a):"win32"===process.platform?o.join(process.env.APPDATA||o.join(u,"AppData","Roaming"),a,"logs"):o.join(process.env.XDG_CONFIG_HOME||o.join(u,".config"),a,"logs"),r.mkdirSync(i,{recursive:!0}),c=e.default.createLogger({name:a,src:!0,streams:[{level:"debug",path:o.join(i,"main.log")}]})}catch(p){const e=()=>{};c={debug:e,error:e,fatal:e,info:e,trace:e,warn:e};try{n.captureException(p)}catch(f){}}var s=c;exports.default=s;
9
+ },{}],"gwcX":[function(require,module,exports) {
10
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("dotenv")),t=n(require("path"));function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(r=function(e){return e?n:t})(e)}function n(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=r(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var f=u?Object.getOwnPropertyDescriptor(e,a):null;f&&(f.get||f.set)?Object.defineProperty(o,a,f):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}function o(e){return e&&e.__esModule?e:{default:e}}let u=!1;const a=()=>{u||(e.default.config({path:t.resolve(__dirname,"..","..",".env")}),u=!0)};var f=()=>(u||(e.default.config({path:t.resolve(__dirname,"..","..",".env")}),u=!0),process.env);exports.default=f;
11
+ },{}],"gzUX":[function(require,module,exports) {
12
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signInWithCustomToken=exports.onUserAuth=exports.default=exports.currentUser=void 0;var e=o(require("firebase/app"));require("firebase/firestore"),require("firebase/auth");var t=r(require("./getEnvironmentVariables"));function r(e){return e&&e.__esModule?e:{default:e}}function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var s=a?Object.getOwnPropertyDescriptor(e,u):null;s&&(s.get||s.set)?Object.defineProperty(o,u,s):o[u]=e[u]}return o.default=e,r&&r.set(e,o),o}const a=(0,t.default)(),u=e.initializeApp({apiKey:a.TODESKTOP_CLI_FIREBASE_API_KEY,authDomain:a.TODESKTOP_CLI_FIREBASE_AUTH_DOMAIN,databaseURL:a.TODESKTOP_CLI_FIREBASE_DATABASE_URL,projectId:a.TODESKTOP_CLI_FIREBASE_PROJECT_ID,storageBucket:a.TODESKTOP_CLI_FIREBASE_STORAGE_BUCKET,messagingSenderId:a.TODESKTOP_CLI_FIREBASE_MESSAGING_SENDER_ID,appId:a.TODESKTOP_CLI_FIREBASE_ID}),s=()=>e.auth().currentUser;exports.currentUser=s;const i=async t=>e.auth().signInWithCustomToken(t);exports.signInWithCustomToken=i;const _=t=>e.auth().onAuthStateChanged(e=>{t(e||{})});exports.onUserAuth=_;var p=u.firestore();exports.default=p;
13
+ },{"./getEnvironmentVariables":"gwcX"}],"ffKF":[function(require,module,exports) {
14
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setConfig=exports.setAuthConfig=exports.jwtTokenConfigKey=exports.getConfig=exports.getAuthConfig=exports.emailConfigKey=exports.deleteAuthConfig=exports.accessTokenConfigKey=void 0;var e=i(require("fs")),t=r(require("del")),o=r(require("conf")),n=r(require("xdg-basedir"));function r(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(s=function(e){return e?o:t})(e)}function i(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=s(t);if(o&&o.has(e))return o.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var c=r?Object.getOwnPropertyDescriptor(e,i):null;c&&(c.get||c.set)?Object.defineProperty(n,i,c):n[i]=e[i]}return n.default=e,o&&o.set(e,n),n}const c=new o.default({configName:"todesktop-cli"}),f="accessToken";exports.accessTokenConfigKey="accessToken";const a="email";exports.emailConfigKey="email";const u="jwtToken";exports.jwtTokenConfigKey="jwtToken";const l=(e,t)=>c.set(e,t);exports.setConfig=l;const p=e=>c.get(e);exports.getConfig=p;const g=(e,t,o)=>{l("email",e),l("accessToken",t),l("jwtToken",o)};exports.setAuthConfig=g;const d=()=>{return{accessToken:p("accessToken"),jwtToken:p("jwtToken"),email:p("email")}};exports.getAuthConfig=d;const k=()=>{c.delete("email"),c.delete("accessToken"),c.delete("jwtToken")};exports.deleteAuthConfig=k;const x=`${n.default.config}/configstore/config.json.json`;if(e.existsSync(x))try{const{email:e,accessToken:o,jwtToken:n}=require(x);g(e,o,n),(0,t.default)(x,{force:!0})}catch(j){(0,t.default)(x,{force:!0})}
15
+ },{}],"ALju":[function(require,module,exports) {
16
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.track=exports.identify=exports.flush=exports.ANALYTICS_EVENT=void 0;var e=u(require("os")),t=require("uuid"),r=u(require("analytics-node")),s=u(require("./getEnvironmentVariables")),o=require("./firestore"),i=require("./configStore"),n=u(require("./getCliVersion"));function u(e){return e&&e.__esModule?e:{default:e}}const a=(0,s.default)(),c=new r.default(a.SEGMENT_WRITE_KEY,{flushAt:1,flushInterval:1}),l={CLI_COMMAND:"CLI Command"};function d(){let t={client:"cli"};try{t.os={name:e.default.platform(),version:e.default.release()}}catch(r){}try{t.user={email:(0,i.getAuthConfig)().email}}catch(r){}try{t.app={cliVersion:(0,n.default)()}}catch(r){}try{t.runtime={name:"Node.js",version:process.version}}catch(r){}return t}exports.ANALYTICS_EVENT=l;const f=(0,t.v4)(),p=(e,t={},r=(()=>{}))=>{try{const i=(0,o.currentUser)();c.track({event:e,userId:i?i.uid:void 0,anonymousId:f,properties:{...t,...d()}},r)}catch(s){}};exports.track=p;const y=(e,t={},r=(()=>{}))=>{try{c.identify({userId:e,anonymousId:f,traits:t},r)}catch(s){}};exports.identify=y;const h=(e=(()=>{}))=>c.flush(e);exports.flush=h;
17
+ },{"./getEnvironmentVariables":"gwcX","./firestore":"gzUX","./configStore":"ffKF","./getCliVersion":"QfeP"}],"QLfx":[function(require,module,exports) {
18
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),r=require("./analytics"),t=i(require("./firestore")),u=i(require("./logger"));function i(e){return e&&e.__esModule?e:{default:e}}var o=()=>{const{exit:i}=(0,e.useApp)();return e=>{let o;u.default.debug({error:e},"Exit called"),t.default.terminate().catch(e=>u.default.error(e)),Promise.race([new Promise(e=>(0,r.flush)(()=>e())),new Promise(e=>o=setTimeout(()=>e(),1e3))]).catch(()=>{}).finally(()=>{clearTimeout(o);try{i()}catch(r){u.default.error(r)}setTimeout(()=>process.exit(e?1:0),10)})}};exports.default=o;
19
+ },{"./analytics":"ALju","./firestore":"gzUX","./logger":"XvyO"}],"f0Jz":[function(require,module,exports) {
20
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=i(require("prop-types")),r=a(require("react")),o=i(require("../utilities/getCliVersion")),l=i(require("../utilities/logger")),u=i(require("../utilities/useExit"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function a(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var a=l?Object.getOwnPropertyDescriptor(e,u):null;a&&(a.get||a.set)?Object.defineProperty(o,u,a):o[u]=e[u]}return o.default=e,r&&r.set(e,o),o}function i(e){return e&&e.__esModule?e:{default:e}}const c=({commandUsed:t,error:n})=>{const a=(0,u.default)();return l.default.error({error:n}),(0,r.useEffect)(()=>{n&&setTimeout(()=>a(n),10)},[a,n]),r.default.createElement(r.Fragment,null,r.default.createElement(e.Text,{backgroundColor:"red",color:"white"}," ","ERROR"," "),r.default.createElement(e.Text,null,n.message||n.stack||n.toString()),r.default.createElement(e.Box,{flexDirection:"column",marginTop:1},t?r.default.createElement(e.Text,{dimColor:!0,color:"gray"},"Command: ",t):null,r.default.createElement(e.Text,{dimColor:!0,color:"gray"},"@todesktop/cli: ",(0,o.default)()),r.default.createElement(e.Text,{dimColor:!0,color:"gray"},"Node: ",process.version),r.default.createElement(e.Text,{dimColor:!0,color:"gray"},"cwd: ",process.cwd())))};c.propTypes={commandUsed:t.default.string,error:t.default.object.isRequired};var d=c;exports.default=d;
21
+ },{"../utilities/getCliVersion":"QfeP","../utilities/logger":"XvyO","../utilities/useExit":"QLfx"}],"I8pf":[function(require,module,exports) {
22
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=u;var e=o(require("axios")),t=o(require("./getEnvironmentVariables")),r=o(require("./logger"));function o(e){return e&&e.__esModule?e:{default:e}}const{TODESKTOP_CLI_FIREBASE_FUNCTIONS_BASE:a}=(0,t.default)();async function u(t,o={},u={}){r.default.debug({functionName:t,body:o,config:u},"postToFirebaseFunction");try{const s=await e.default.post(`${a}${t}`,o,u);return r.default.debug({responseData:s.data},"postToFirebaseFunction: success"),s.data}catch(n){throw r.default.error({error:n},"postToFirebaseFunction: error"),n}}
23
+ },{"./getEnvironmentVariables":"gwcX","./logger":"XvyO"}],"pd2Y":[function(require,module,exports) {
24
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=f(require("@babel/runtime/helpers/extends")),t=require("ink"),r=f(require("prop-types")),a=d(require("react")),l=require("react-final-form"),n=f(require("../components/TextInput")),u=f(require("./ErrorDisplay")),o=f(require("../utilities/postToFirebaseFunction")),i=require("../utilities/firestore"),c=require("../utilities/configStore");function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function d(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var a={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var u=l?Object.getOwnPropertyDescriptor(e,n):null;u&&(u.get||u.set)?Object.defineProperty(a,n,u):a[n]=e[n]}return a.default=e,r&&r.set(e,a),a}function f(e){return e&&e.__esModule?e:{default:e}}const m=[{name:"email",label:"Your email",placeholder:"name@email.com",Input:n.default,validate:e=>{if(!e)return"Required"}},{name:"accessToken",label:"Your access token",placeholder:"********",Input:n.default,validate:e=>{if(!e)return"Required"},mask:"*"}],p=({setIsLoggedIn:r})=>{const[n,s]=(0,a.useState)(0),[d,f]=(0,a.useState)(null),[p,T]=(0,a.useState)(null),[E,x]=(0,a.useState)(!1),y=e=>{x(!1),T(e),s(0)};return d?a.default.createElement(u.default,{error:d}):a.default.createElement(a.Fragment,null,a.default.createElement(t.Text,null,"You are not currently logged in."),a.default.createElement(t.Text,null,"Log in below:"),a.default.createElement(t.Box,{marginBottom:1}),a.default.createElement(l.Form,{onSubmit:async({email:e,accessToken:t})=>{T(null),x(!0);try{const l=await(0,o.default)("loginWithAccessToken",{email:e,accessToken:t});l?(await(0,i.signInWithCustomToken)(l),(0,c.setAuthConfig)(e,t,l),r(!0)):y("Incorrrect credentials. Try again")}catch(a){500===a.code?f(a):y(`Login unsuccessful: ${a.message}`)}}},({handleSubmit:r,validating:u,form:o})=>a.default.createElement(t.Box,{flexDirection:"column"},m.map(({name:o,label:i,placeholder:c,validate:d,Input:f,mask:p},T)=>a.default.createElement(l.Field,{name:o,key:o,validate:d},({input:l,meta:d})=>a.default.createElement(t.Box,{flexDirection:"column"},n>=T?a.default.createElement(t.Box,null,a.default.createElement(t.Text,{bold:n===T},i,": "),n===T?a.default.createElement(f,(0,e.default)({},l,{mask:p,placeholder:c,onSubmit:()=>{d.valid&&!u?(s(e=>e+1),n===m.length-1&&r()):l.onBlur()}})):l.value&&a.default.createElement(t.Text,null,"accessToken"===o?l.value.replace(/./gi,"*"):l.value)||c&&a.default.createElement(t.Text,{color:"gray"},c),d.invalid&&d.touched&&a.default.createElement(t.Box,{marginLeft:2,marginRight:1},a.default.createElement(t.Text,{color:"red"},"✖")),d.error&&d.touched&&a.default.createElement(g,{errorMessage:d.error})):null))))),E&&a.default.createElement(t.Box,{marginTop:1},a.default.createElement(t.Text,null,"Logging in...")),p&&a.default.createElement(g,{errorMessage:p,marginTop:!0}))},g=({errorMessage:e,marginTop:r})=>a.default.createElement(t.Box,{marginTop:r?1:0},a.default.createElement(t.Text,{color:"red"},e));g.propTypes={errorMessage:r.default.string.isRequired,marginTop:r.default.bool},p.propTypes={setIsLoggedIn:r.default.func.isRequired};var T=p;exports.default=T;
25
+ },{"../components/TextInput":"iiO0","./ErrorDisplay":"f0Jz","../utilities/postToFirebaseFunction":"I8pf","../utilities/firestore":"gzUX","../utilities/configStore":"ffKF"}],"nLy3":[function(require,module,exports) {
26
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=d(require("react")),r=c(require("prop-types")),n=c(require("is-ci")),i=c(require("./Login")),o=require("../utilities/firestore"),a=require("../utilities/configStore"),u=c(require("../utilities/postToFirebaseFunction")),s=c(require("../utilities/getEnvironmentVariables")),l=c(require("./ErrorDisplay"));function c(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var a=i?Object.getOwnPropertyDescriptor(e,o):null;a&&(a.get||a.set)?Object.defineProperty(n,o,a):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}const p=({children:r,isInteractive:c=!0})=>{const[f,d]=(0,t.useState)(!1),[p,T]=(0,t.useState)(!1),[g,y]=(0,t.useState)(null),{isRawModeSupported:v}=(0,e.useStdin)(),O=(e,t={})=>{y({...t,message:e})};return(0,t.useEffect)(()=>{!async function(){const{accessToken:e,email:t,jwtToken:r}=(0,a.getAuthConfig)();let i=null;const{TODESKTOP_ACCESS_TOKEN:l,TODESKTOP_EMAIL:c}=(0,s.default)();try{if(l&&c){const e=await(0,u.default)("loginWithAccessToken",{email:c,accessToken:l});e&&(i=await(0,o.signInWithCustomToken)(e)).user&&d(!0)}else v&&!n.default||O("ToDesktop environment variables not found. When automating builds with your CI provider, you need to specify environment variables for TODESKTOP_EMAIL and TODESKTOP_ACCESS_TOKEN.")}catch(f){O("Log in with environment variables failed.",f)}try{!i&&r&&(i=await(0,o.signInWithCustomToken)(r)).user&&d(!0)}catch(f){}try{if(!i&&e&&t){const r=await(0,u.default)("loginWithAccessToken",{email:t,accessToken:e});r&&(i=await(0,o.signInWithCustomToken)(r),(0,a.setAuthConfig)(t,e,r),i.user&&d(!0))}}catch(f){}T(!0)}()},[]),g&&c?t.default.createElement(l.default,{error:g}):p?!f&&c?t.default.createElement(i.default,{setIsLoggedIn:d}):t.default.createElement(t.Fragment,null,r):t.default.createElement(e.Text,null,"...")};p.propTypes={children:r.default.object,isInteractive:r.default.bool};var T=p;exports.default=T;
27
+ },{"./Login":"pd2Y","../utilities/firestore":"gzUX","../utilities/configStore":"ffKF","../utilities/postToFirebaseFunction":"I8pf","../utilities/getEnvironmentVariables":"gwcX","./ErrorDisplay":"f0Jz"}],"XM8F":[function(require,module,exports) {
28
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("react")),t=o(require("@sentry/node")),r=u(require("prop-types"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=u?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(o,a,s):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}function u(e){return e&&e.__esModule?e:{default:e}}class a extends e.default.Component{constructor(e){super(e),this.state={eventId:null,error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){t.withScope(n=>{n.setExtras(r);const o=t.captureException(e);this.setState({eventId:o})})}render(){if(this.state.error)throw this.state.error;return this.props.children}}a.propTypes={children:r.default.object};var s=a;exports.default=s;
29
+ },{}],"Sre8":[function(require,module,exports) {
30
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("is-ci")),r=o(require("./logger"));function o(e){return e&&e.__esModule?e:{default:e}}var t=(...o)=>{r.default.info({args:o},"logForCI"),e.default&&console.log(...o)};exports.default=t;
31
+ },{"./logger":"XvyO"}],"nKi2":[function(require,module,exports) {
32
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=a(require("ink-link")),r=a(require("prop-types")),u=o(require("react")),l=a(require("../utilities/logForCI")),n=a(require("../utilities/useExit"));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var o=l?Object.getOwnPropertyDescriptor(e,n):null;o&&(o.get||o.set)?Object.defineProperty(u,n,o):u[n]=e[n]}return u.default=e,r&&r.set(e,u),u}function a(e){return e&&e.__esModule?e:{default:e}}const f=({build:r})=>{const i=(0,n.default)(),o=r.standardUniversalDownloadUrl;return(0,l.default)(`Build complete! ${o}`),(0,u.useEffect)(()=>{o&&setTimeout(i,10)},[i,o]),u.default.createElement(e.Box,{marginBottom:1},u.default.createElement(e.Text,null,u.default.createElement(e.Text,{bold:!0},"Build complete!")," ",u.default.createElement(t.default,{fallback:!1,url:o},o||"")))};f.propTypes={build:r.default.object.isRequired};var d=f;exports.default=d;
33
+ },{"../utilities/logForCI":"Sre8","../utilities/useExit":"QLfx"}],"WIKr":[function(require,module,exports) {
34
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("react")),t=n(require("prop-types")),r=require("ink"),l=n(require("ink-link"));function n(e){return e&&e.__esModule?e:{default:e}}function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var l={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var o=n?Object.getOwnPropertyDescriptor(e,u):null;o&&(o.get||o.set)?Object.defineProperty(l,u,o):l[u]=e[u]}return l.default=e,r&&r.set(e,l),l}const o="More info: ".length,i=(t,l)=>{let n="white",a="black";return"error"===l?n="red":100===t&&(n="green",a="black"),e.default.createElement(e.Fragment,null,e.default.createElement(r.Text,{backgroundColor:n,color:a}," ",Math.round(t).toString().padStart(2,"0"),"%"," "),e.default.createElement(r.Text,null," "))},d=({activityName:t,activityType:n,downloadUrl:a,percent:u,platform:d,shouldShowReadyPrefix:f})=>{let c;if("done"===n)c=e.default.createElement(r.Box,{flexDirection:"column",marginBottom:1},e.default.createElement(r.Text,null,i(100),f?"Ready!":""),e.default.createElement(l.default,{fallback:!1,url:a},a));else{let l=t.replace(/(?:\r\n|\r|\n)\s*/g,"↵ ");l.length>64&&(l=`${l.substr(0,61)}...`),c=e.default.createElement(e.Fragment,null,e.default.createElement(r.Box,{flexDirection:"column",marginBottom:1},e.default.createElement(r.Text,null,["preparation","queue"].includes(n)?void 0:i(u,n),l,"error"===n?"":e.default.createElement(r.Text,null,"..."))))}return e.default.createElement(r.Box,null,e.default.createElement(r.Box,{width:o},e.default.createElement(r.Text,null,d[0].toUpperCase()+d.substr(1),": ")),c)};d.propTypes={activityName:t.default.string.isRequired,activityType:t.default.string.isRequired,downloadUrl:t.default.string,percent:t.default.number.isRequired,platform:t.default.string.isRequired,shouldShowReadyPrefix:t.default.bool};var f=d;exports.default=f;
35
+ },{}],"in6t":[function(require,module,exports) {
36
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPlatformBuildRunning=exports.isBuildRunning=exports.isBuildCancellable=exports.hasBuildKickedOff=void 0;const s=s=>!!s&&(s.status&&"preparation"!==s.status);exports.hasBuildKickedOff=s;const e=e=>s(e)&&t(e);exports.isBuildCancellable=e;const t=s=>!!s&&(!["cancelled","succeeded"].includes(s.status)&&["linux","mac","windows"].some(e=>i(s[e])));exports.isBuildRunning=t;const i=s=>!!s&&(!s.shouldSkip&&!["cancelled","succeeded"].includes(s.status)&&("failed"!==s.status||s.numberOfAttemptedBuilds<2));exports.isPlatformBuildRunning=i;
37
+ },{}],"odFL":[function(require,module,exports) {
38
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=f(require("prop-types")),r=c(require("react")),u=f(require("lodash.throttle")),l=f(require("./BuildCompleteMessage")),i=f(require("./PlatformProgress")),a=require("../utilities/buildStatus"),s=f(require("../utilities/logger")),o=f(require("../utilities/logForCI")),n=f(require("../utilities/useExit"));function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function c(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=l?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(u,i,a):u[i]=e[i]}return u.default=e,r&&r.set(e,u),u}function f(e){return e&&e.__esModule?e:{default:e}}const p=(0,u.default)(o.default,6e4,{trailing:!0}),m=({build:t,onBuildFailure:u})=>{s.default.debug("BuildProgress component: render");const o=(0,n.default)(),[{hasKickedOff:d},c]=(0,r.useState)({hasKickedOff:!1}),f=["windows","mac","linux"].filter(e=>!t[e].shouldSkip);return(0,r.useEffect)(()=>{c(e=>({...e,hasKickedOff:(0,a.hasBuildKickedOff)(t)}))},[t]),(0,r.useEffect)(()=>{if("failed"===t.status)u(t.errorMessage);else if("cancelled"===t.status)setTimeout(o,10);else{const e=f.map(e=>`${e.charAt(0).toUpperCase()+e.slice(1)}: ${t[e].progressActivityName} (${t[e].progressPercentage}%)`);p(e.join(", "))}},[t,o,u,f]),"succeeded"===t.status?r.default.createElement(l.default,{build:t}):"cancelled"===t.status?r.default.createElement(e.Box,{flexDirection:"column",marginBottom:1},r.default.createElement(e.Text,null,"Build cancelled")):d?r.default.createElement(r.Fragment,null,r.default.createElement(e.Box,{flexDirection:"column"},f.map(u=>r.default.createElement(e.Box,{flexDirection:"column",key:u},r.default.createElement(i.default,{activityName:"failed"===t[u].status?t[u].errorMessage:t[u].progressActivityName,activityType:"failed"===t[u].status?"error":t[u].progressActivityType,downloadUrl:t[u].standardDownloadUrl,percent:t[u].progressPercentage,platform:u,shouldShowReadyPrefix:!(t&&["failed","succeeded"].includes(t.status))}))))):null};m.propTypes={build:t.default.object.isRequired,onBuildFailure:t.default.func.isRequired};var g=m;exports.default=g;
39
+ },{"./BuildCompleteMessage":"nKi2","./PlatformProgress":"WIKr","../utilities/buildStatus":"in6t","../utilities/logger":"XvyO","../utilities/logForCI":"Sre8","../utilities/useExit":"QLfx"}],"koRC":[function(require,module,exports) {
40
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("firebase/app"));require("firebase/functions");var t=r(require("./getEnvironmentVariables"));function r(e){return e&&e.__esModule?e:{default:e}}function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var u={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var f=o?Object.getOwnPropertyDescriptor(e,a):null;f&&(f.get||f.set)?Object.defineProperty(u,a,f):u[a]=e[a]}return u.default=e,r&&r.set(e,u),u}"development"===(0,t.default)().TODESKTOP_CLI_ENV&&e.functions().useFunctionsEmulator("http://localhost:5000");var o=t=>e.functions().httpsCallable(t);exports.default=o;
41
+ },{"./getEnvironmentVariables":"gwcX"}],"J4or":[function(require,module,exports) {
42
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=c(require("prop-types")),r=o(require("react")),l=c(require("./ErrorDisplay")),a=c(require("../utilities/getCallableFirebaseFunction")),n=c(require("../utilities/logForCI")),u=c(require("../utilities/logger")),d=c(require("../utilities/useExit"));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var l={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var u=a?Object.getOwnPropertyDescriptor(e,n):null;u&&(u.get||u.set)?Object.defineProperty(l,n,u):l[n]=e[n]}return l.default=e,r&&r.set(e,l),l}function c(e){return e&&e.__esModule?e:{default:e}}const s=(0,a.default)("cancelBuild"),p=({appId:t,children:a,commandUsed:i,id:o})=>{u.default.debug({appId:t,buildId:o},"CancelBuild component: render");const c=(0,d.default)(),[{arbitraryMessageComponent:p,error:f,hasCompleted:m,hasStarted:b},g]=(0,r.useState)({arbitraryMessageComponent:null,error:null,hasCompleted:!1,hasStarted:!1});return(0,r.useEffect)(()=>{m||b||(g(e=>({...e,hasStarted:!0})),(0,n.default)("Cancelling build..."),s({appId:t,buildId:o}).then(e=>{u.default.debug({appId:t,buildId:o,result:e},"CancelBuild component: cancellation request complete"),g(e=>({...e,hasCompleted:!0}))}).catch(l=>{u.default.debug({appId:t,buildId:o,code:l.code},"CancelBuild component: cancellation request failed"),u.default.error(l);let a={hasCompleted:!0};"internal"===l.code?a.error=l:a.arbitraryMessageComponent=r.default.createElement(e.Text,null,r.default.createElement(e.Text,{color:"red"},"Cannot cancel build (",o,").")," ",l.message),g(e=>({...e,...a}))}))},[t,o,b,m]),(0,r.useEffect)(()=>{m&&!a&&(u.default.debug("CancelBuild component: exiting now that build is cancelled"),c())},[a,c,m]),f?(f.message=`Failed to cancel build (${o}). ${f.message}`,r.default.createElement(l.default,{commandUsed:i,error:f})):p||(m?a?r.default.createElement(r.Fragment,null,a):r.default.createElement(e.Text,null,"Build cancelled"):r.default.createElement(e.Text,null,"Cancelling build (",o,")..."))};p.propTypes={appId:t.default.string.isRequired,children:t.default.object,commandUsed:t.default.string.isRequired,id:t.default.string.isRequired};var f=p;exports.default=f;
43
+ },{"./ErrorDisplay":"f0Jz","../utilities/getCallableFirebaseFunction":"koRC","../utilities/logForCI":"Sre8","../utilities/logger":"XvyO","../utilities/useExit":"QLfx"}],"lWRR":[function(require,module,exports) {
44
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),l=u(require("ink-link")),t=u(require("prop-types")),r=u(require("react"));function u(e){return e&&e.__esModule?e:{default:e}}const a=({hasBuildFailed:t,shouldShowCancelBuildInstructions:u,uiUrl:a})=>{if(!a)return null;let o;return t&&(o=r.default.createElement(e.Text,{color:"red"},"An error has occurred. ")),r.default.createElement(e.Box,{flexDirection:"column"},r.default.createElement(e.Box,{flexDirection:"column"},r.default.createElement(e.Text,{bold:!0},o,"See web UI for more information: "),r.default.createElement(e.Text,null,r.default.createElement(l.default,{fallback:!1,url:a},a))),u?r.default.createElement(e.Text,{color:"gray"},r.default.createElement(e.Text,{bold:!0},"[esc]:")," cancel build"):null)};a.propTypes={hasBuildFailed:t.default.bool,shouldShowCancelBuildInstructions:t.default.bool,uiUrl:t.default.string};var o=a;exports.default=o;
45
+ },{}],"XT2G":[function(require,module,exports) {
46
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=u(require("prop-types")),l=u(require("react"));function u(e){return e&&e.__esModule?e:{default:e}}const r=(t,u,r)=>{const a=u+(r?` v${r}`:"");return t&&["cancelled","succeeded","failed"].includes(t.status)?"succeeded"===t.status?l.default.createElement(e.Text,null,"✅ ",a):"failed"===t.status?l.default.createElement(e.Text,null,"❌ ",a):"cancelled"===t.status?l.default.createElement(e.Text,null,l.default.createElement(e.Text,{bold:!0,color:"gray"},"X")," ",a):void 0:l.default.createElement(e.Text,null,a)},a=({build:t,name:u,version:a})=>l.default.createElement(e.Box,{marginBottom:1},r(t,u,a));a.propTypes={build:t.default.object,name:t.default.string.isRequired,version:t.default.string};var d=a;exports.default=d;
47
+ },{}],"CLRu":[function(require,module,exports) {
48
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("is-ci")),t=require("ink"),r=u(require("./useExit"));function u(e){return e&&e.__esModule?e:{default:e}}let o=!1,s=[];const n=(e,t)=>{let r=String(e),u=!1;r<=""&&"\r"!==r&&(r=String.fromCharCode(r.charCodeAt(0)+"a".charCodeAt(0)-1),u=!0),u&&"c"===r&&(s.forEach(e=>e()),setTimeout(t,10))};var d=()=>{if(e.default)return()=>()=>{};const u=(0,r.default)(),{stdin:d}=(0,t.useStdin)();return(e,r,a={})=>{const i=e=>n(e,u);a.onCtrlCPressed&&s.push(a.onCtrlCPressed),o||(o=!0,d.on("data",i));let l=(0,t.useInput)(e,r);return()=>{o&&d.off("data",i),l&&l()}}};exports.default=d;
49
+ },{"./useExit":"QLfx"}],"T5Az":[function(require,module,exports) {
50
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=f(require("is-ci")),l=f(require("prop-types")),r=s(require("react")),a=f(require("./CancelBuild")),u=f(require("./Footer")),n=f(require("./Header")),i=require("../utilities/buildStatus"),d=f(require("../utilities/logger")),o=f(require("../utilities/useInput"));function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,l=new WeakMap;return(c=function(e){return e?l:t})(e)}function s(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var l=c(t);if(l&&l.has(e))return l.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var n=a?Object.getOwnPropertyDescriptor(e,u):null;n&&(n.get||n.set)?Object.defineProperty(r,u,n):r[u]=e[u]}return r.default=e,l&&l.set(e,r),r}function f(e){return e&&e.__esModule?e:{default:e}}const p=({appId:l,appName:c,appVersion:s,build:f,children:p,commandUsed:m,hasBuildFailed:g})=>{d.default.debug("MainLayout component: render");const b=(0,o.default)(),[{canCancelBuild:y,hasKickedOff:B,isCancellingBuild:C,wasCtrlCPressed:h},O]=(0,r.useState)({canCancelBuild:null,hasKickedOff:!1,isCancellingBuild:!1,wasCtrlCPressed:!1});return(0,r.useEffect)(()=>{O(e=>({...e,hasKickedOff:(0,i.hasBuildKickedOff)(f)}))},[f]),(0,r.useEffect)(()=>{O(e=>({...e,canCancelBuild:!t.default&&!C&&(0,i.isBuildCancellable)(f)}))},[f,C]),b(async(e,t)=>{t.escape&&y&&(d.default.debug("MainLayout component: esc pressed, cancelling build"),O(e=>({...e,isCancellingBuild:!0})))},{},{onCtrlCPressed:()=>{O(e=>({...e,wasCtrlCPressed:!0}))}}),r.default.createElement(r.Fragment,null,r.default.createElement(n.default,{build:f,name:c,version:s}),C?r.default.createElement(e.Box,{flexDirection:"column",marginBottom:1},r.default.createElement(a.default,{appId:l,commandUsed:m,id:f.id})):p,r.default.createElement(u.default,{hasBuildFailed:g,shouldShowCancelBuildInstructions:y&&!h,uiUrl:f?f.url:null}),h&&B?r.default.createElement(r.Fragment,null,r.default.createElement(e.Box,{flexDirection:"column",marginTop:1},r.default.createElement(e.Text,{color:"gray"},"The build will continue in the background. To view it, run:")),r.default.createElement(e.Box,null,r.default.createElement(e.Text,{bold:!0,color:"gray"},"todesktop builds ",f.id))):null)};p.propTypes={appId:l.default.string,appName:l.default.string.isRequired,appVersion:l.default.string,build:l.default.object,children:l.default.oneOfType([l.default.array,l.default.object]),commandUsed:l.default.string.isRequired,hasBuildFailed:l.default.bool};var m=p;exports.default=m;
51
+ },{"./CancelBuild":"J4or","./Footer":"lWRR","./Header":"XT2G","../utilities/buildStatus":"in6t","../utilities/logger":"XvyO","../utilities/useInput":"CLRu"}],"EqTV":[function(require,module,exports) {
52
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("./firestore")),t=r(require("./logger"));function r(e){return e&&e.__esModule?e:{default:e}}function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=u?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(o,i,a):o[i]=e[i]}return o.default=e,r&&r.set(e,o),o}var u=async({appId:r})=>{t.default.debug({appId:r},"getLatestBuildId");const n=e.default.doc(`users/${(0,e.currentUser)().uid}/applications/${r}`);if(!(await n.get()).exists)throw new Error(`Application with ID of ${r} doesn't exist.`);const o=await n.collection("builds").orderBy("createdAt","desc").limit(1).get();return o.empty?null:o.docs[0].id};exports.default=u;
53
+ },{"./firestore":"gzUX","./logger":"XvyO"}],"GCJw":[function(require,module,exports) {
54
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>require(e);exports.default=e;
55
+ },{}],"waRp":[function(require,module,exports) {
56
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=n(require("path"));function t(e){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(t=function(e){return e?o:n})(e)}function n(e,n){if(!n&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=t(n);if(o&&o.has(e))return o.get(e);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var c=i?Object.getOwnPropertyDescriptor(e,a):null;c&&(c.get||c.set)?Object.defineProperty(r,a,c):r[a]=e[a]}return r.default=e,o&&o.set(e,r),r}var o=({config:t,projectRoot:n})=>{const o=t.appPath?e.isAbsolute(t.appPath)?t.appPath:e.join(n,t.appPath):n,r=(e,t)=>e?t(e):void 0,i=t=>e.isAbsolute(t)?t:e.join(n,t),a={...t,appPath:o,icon:i(t.icon)};return t.extraContentFiles&&(a.extraContentFiles=r(t.extraContentFiles,e=>e.map(e=>({...e,from:i(e.from)})))),t.extraResources&&(a.extraResources=r(t.extraResources,e=>e.map(e=>({...e,from:i(e.from)})))),t.linux&&(a.linux={...t.linux},t.linux.icon&&(a.linux.icon=i(t.linux.icon))),t.mac&&(a.mac={...t.mac},t.mac.entitlements&&(a.mac.entitlements=i(t.mac.entitlements)),t.mac.icon&&(a.mac.icon=i(t.mac.icon))),t.dmg&&t.dmg.background&&(a.dmg.background=i(t.dmg.background)),t.windows&&(a.windows={...t.windows},t.windows.icon&&(a.windows.icon=i(t.windows.icon))),a};exports.default=o;
57
+ },{}],"zW94":[function(require,module,exports) {
58
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>({type:"object",required:["author","dependencies","devDependencies","homepage","name","version"],properties:{author:{npmAuthor:{}},dependencies:{type:"object",required:["@todesktop/runtime"],excludedDependencies:{dependencyKey:"dependencies",blacklist:["@todesktop/cli"]},properties:{"@todesktop/runtime":{type:"string"}}},devDependencies:{type:"object",required:["electron"],properties:{electron:{type:"string",semanticVersion:{packageName:"electron",mustBeExact:!0}}}},name:{type:"string",minLength:1},scripts:{type:"object",properties:{"todesktop:beforeInstall":{type:"string",file:{from:e.projectRoot,mustBeFile:!0}},"todesktop:afterPack":{type:"string",file:{from:e.projectRoot,mustBeFile:!0}}}},version:{type:"string",semanticVersion:{}}}});exports.default=e;
59
+ },{}],"fl4s":[function(require,module,exports) {
60
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("ajv")),r=a(require("better-ajv-errors")),t=a(require("./addCustomKeywords")),o=a(require("./schema/packageJSON"));function a(e){return e&&e.__esModule?e:{default:e}}var s=(a,s,u)=>{const d=new e.default({allErrors:!0,jsonPointers:!0});(0,t.default)(d,u);const i=(0,o.default)(u),n=d.compile(i);if(!n(a)){const e=(0,r.default)(i,a,n.errors,{indent:2}),t=new Error(`package.json invalid (${s}); \n${e}`);throw t.isValidationError=!0,t}};exports.default=s;
61
+ },{"./addCustomKeywords":"g5Ig","./schema/packageJSON":"zW94"}],"g5Ig":[function(require,module,exports) {
62
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("email-regex")),r=a(require("fs")),t=a(require("path")),i=u(require("parse-author")),s=a(require("semver")),o=u(require("./validatePackageJSON"));function n(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(n=function(e){return e?t:r})(e)}function a(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=n(r);if(t&&t.has(e))return t.get(e);var i={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var a=s?Object.getOwnPropertyDescriptor(e,o):null;a&&(a.get||a.set)?Object.defineProperty(i,o,a):i[o]=e[o]}return i.default=e,t&&t.set(e,i),i}function u(e){return e&&e.__esModule?e:{default:e}}var d=(n,a)=>{n.addKeyword("excludedDependencies",{validate:function e(r,t){let i=r.blacklist.filter(e=>t[e]);return!i.length||(e.errors=[{keyword:"Dependency",message:`${i.join(", ")} should not be in ${r.dependencyKey}`,dataPath:`/${r.dependencyKey}`}],!1)}}),n.addKeyword("email",{type:"string",minLength:5,validate:function r(t,i){return!!(0,e.default)({exact:!0}).test(i)||(r.errors=[{keyword:"email",message:"invalid"}],!1)}}),n.addKeyword("file",{type:"string",validate:function e(i,s){const n=i.mustBeDirectory||i.mustBeElectronApp;if(!s.trim().length)return!!i.isOptional||(e.errors=[{keyword:i.mustBeDirectory?"Directory":"File",message:"is empty"}],!1);const u=t.isAbsolute(s)?s:t.join(i.from,s);if(t.relative(i.from,u).startsWith(".."))return e.errors=[{keyword:n?"Directory":"File",message:`is not in project (${u})`}],!1;if(i.extensions&&!i.extensions.includes(t.extname(u).substr(1)))return e.errors=[{keyword:"File extension",message:`invalid. ${t.extname(s)} Must be${i.extensions>1?"one of the following:":""} "${i.extensions.join('", "')}"`}],!1;if(!r.existsSync(u))return e.errors=[{keyword:n?"Directory":"File",message:`does not exist (${u})`}],!1;const d=r.statSync(u);if(n&&d.isFile())return e.errors=[{keyword:"Directory",message:`must be a directory, not a file (${u})`}],!1;if(i.mustBeFile&&d.isDirectory())return e.errors=[{keyword:"File",message:`must be a file, not a directory (${u})`}],!1;if(i.mustBeElectronApp){const i=t.resolve(u),s=t.join(i,"package.json");if(!r.existsSync(s))return e.errors=[{keyword:"App",message:`invalid. There is no package.json at ${s}`}],!1;let n;try{n=require(s)}catch(l){return e.errors=[{keyword:"App",message:`invalid. Invalid JSON in package.json (${s})`}],!1}a.projectRoot=i,(0,o.default)(n,s,a);const d=n.main;if(d){const s=t.join(i,d);if(!r.existsSync(s))return e.errors=[{keyword:"App",message:`invalid. The "main" file specified in your package.json (${d}) does not exist (${s})`}],!1}else if(!r.existsSync(t.join(i,"index.js")))return e.errors=[{keyword:"App",message:'invalid. There is neither a "main" property in your package.json nor an index.js at the root of your app'}],!1}return!0},errors:!0}),n.addKeyword("npmAuthor",{validate:function r(t,s){const o=typeof s;if("undefined"===o)return!0;if("string"===o){const e=(0,i.default)(s);if(!e||!e.email)return r.errors=[{keyword:"author",message:'invalid. If you\'re using a string, it must look something like "Barney Rubble <b@rubble.com>", see https://docs.npmjs.com/files/package.json#people-fields-author-contributors'}],!1}else{if("object"!==o)return r.errors=[{keyword:"author",message:"invalid. It must either be an object or string. See https://docs.npmjs.com/files/package.json#people-fields-author-contributors"}],!1;if(void 0===s.name)return r.errors=[{keyword:"author",message:'invalid. "name" property is missing.'}],!1;if("string"!=typeof s.name)return r.errors=[{keyword:"author",message:".name invalid. It must be a string"}],!1;if(void 0===s.email)return r.errors=[{keyword:"author",message:'invalid. "email" property is missing.'}],!1;if("string"!=typeof s.email)return r.errors=[{keyword:"author",message:".email invalid. It must be a string."}],!1;if(!(0,e.default)({exact:!0}).test(s.email))return r.errors=[{keyword:"author",message:".email invalid. It does not look like an email."}],!1}return!0},errors:!0}),n.addKeyword("semanticVersion",{type:"string",minLength:5,validate:function e(r,t){const i=(r.packageName?`${r.packageName} `:"")+"version";return s.valid(t)||s.validRange(t)?!r.mustBeExact||!t.startsWith("~")&&!t.startsWith("^")||(e.errors=[{keyword:i,message:"invalid. It must be an exact version. Good: 9.0.0. Bad: ^9.0.0"}],!1):(e.errors=[{keyword:i,message:"invalid. It must be a semantic version (see https://semver.org/)"}],!1)}})};exports.default=d;
63
+ },{"./validatePackageJSON":"fl4s"}],"CN2N":[function(require,module,exports) {
64
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;const e=e=>({oneOf:[e,{type:"array",items:e}]});var t=t=>{const n=(e=[])=>({type:"string",file:{from:t.projectRoot,extensions:["icns","png",...e],mustBeFile:!0},minLength:3});return{type:"object",required:["id","icon","schemaVersion"],properties:{appId:{type:"string",minLength:1},appFiles:{type:"array",items:{type:"string",minLength:1},minItems:1},appProtocolScheme:{type:"string",minLength:1},appPath:{type:"string",file:{from:t.projectRoot,isOptional:!0,mustBeElectronApp:!0}},asarUnpack:{oneOf:[{type:"boolean"},{type:"array",items:{type:"string",minLength:1},minItems:1}]},copyright:{type:"string",minLength:1},electronMirror:{type:"string",format:"uri"},electronVersion:{type:"string",minLength:1},extraContentFiles:{type:"array",items:{type:"object",required:["from"],properties:{from:{type:"string",file:{from:t.projectRoot}},to:{type:"string"}}}},extraResources:{type:"array",items:{type:"object",required:["from"],properties:{from:{type:"string",file:{from:t.projectRoot}},to:{type:"string"}}}},fileAssociations:{type:"array",items:{type:"object",required:["ext"],properties:{ext:e({type:"string",minLength:1}),description:{type:"string",minLength:1},name:{type:"string",minLength:1},mimeType:{type:"string",minLength:1},icon:{type:"string",minLength:1},role:{type:"string",minLength:1},isPackage:{type:"boolean"},rank:{type:"string",minLength:1}}},minItems:1},filesForDistribution:{type:"array",items:{type:"string",minLength:1},minItems:1},icon:n(),linux:{properties:{category:{type:"string",minLength:1},icon:n()}},id:{type:"string",minLength:1},mac:{properties:{category:{type:"string",minLength:1},additionalBinariesToSign:{type:"array",items:{type:"string",minLength:1}},entitlements:{type:"string",file:{from:t.projectRoot,extensions:["plist"],mustBeFile:!0},minLength:1},extendInfo:{type:"object"},icon:n()}},dmg:{properties:{background:{type:"string",file:{from:t.projectRoot,extensions:["tiff"],mustBeFile:!0},minLength:1},artifactName:{type:"string",minLength:1},backgroundColor:{type:"string",minLength:1},iconSize:{type:"number"},iconTextSize:{type:"number"},title:{type:"string",minLength:1},contents:{type:"array",items:{type:"object",properties:{x:{type:"number"},y:{type:"number"}}}},window:{type:"object",properties:{x:{type:"number"},y:{type:"number"},width:{type:"number"},height:{type:"number"}}}}},schemaVersion:{type:"number",minimum:1,maximum:1},snap:{properties:{after:{type:"array",items:{type:"string",minLength:1}},appPartStage:{type:"array",items:{type:"string",minLength:1}},assumes:e({type:"string",minLength:1}),autoStart:{type:"boolean"},buildPackages:{type:"array",items:{type:"string",minLength:1}},confinement:{type:"string",enum:["classic","devmode","strict"]},environment:{type:"object"},grade:{type:"string",enum:["devel","stable"]},layout:{type:"object"},plugs:{type:"array",items:{anyOf:[{type:"string",minLength:1},{type:"object"}]}},stagePackages:{type:"array",items:{type:"string",minLength:1}},summary:{type:"string",maxLength:78},useTemplateApp:{type:"boolean"}}},uploadSizeLimit:{type:"number"},windows:{properties:{icon:n(["ico"])}}}}};exports.default=t;
65
+ },{}],"aYcI":[function(require,module,exports) {
66
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("ajv")),o=a(require("better-ajv-errors")),t=a(require("./addCustomKeywords")),r=a(require("./schema/full"));function a(e){return e&&e.__esModule?e:{default:e}}var n=({config:a,projectRoot:n})=>{const s={projectRoot:n},d=(0,r.default)(s),p=new e.default({allErrors:!0,jsonPointers:!0});(0,t.default)(p,s);const i=p.compile(d);if(!i(a)){const e=(0,o.default)(d,a,i.errors,{indent:2});throw new Error(`todesktop.json invalid. \nLearn more here: https://www.npmjs.com/package/@todesktop/cli#project-configuration-todesktopjson \n\n${e}`)}if(a.productName)throw new Error('todesktop.json invalid.\n\nThe "productName" property is no longer supported in todesktop.json. Please remove it and add it to your app\'s package.json instead.\n\nWe made this change because Electron also uses the "productName" if it exists in your app\'s package.json. If you do not add it to your package.json, your app name will default to the value of the "name" property in your package.json.')};exports.default=n;
67
+ },{"./addCustomKeywords":"g5Ig","./schema/full":"CN2N"}],"Sx1d":[function(require,module,exports) {
68
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("path"),o=a(require("find-up")),t=a(require("./loadConfig")),r=a(require("./resolveConfigPaths")),n=a(require("./validateConfig"));function a(e){return e&&e.__esModule?e:{default:e}}var i=()=>{const a=o.default.sync("todesktop.json");if(!a)throw new Error("Can not find todesktop.json in this folder or any parent folders");const i=(0,e.dirname)(a),d=(0,t.default)(a);return d.appPath=d.appPath||".",(0,n.default)({config:d,projectRoot:i}),{config:(0,r.default)({config:d,projectRoot:i}),unprocessedConfig:d,projectRoot:i}};exports.default=i;
69
+ },{"./loadConfig":"GCJw","./resolveConfigPaths":"waRp","./validateConfig":"aYcI"}],"ONhe":[function(require,module,exports) {
70
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>["linux","mac","windows"].every(t=>e[t].shouldSkip||"succeeded"===e[t].status||"failed"===e[t].status&&2===e[t].numberOfAttemptedBuilds);exports.default=e;
71
+ },{}],"rSIG":[function(require,module,exports) {
72
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=t(require("./firestore")),r=t(require("./logger"));function t(e){return e&&e.__esModule?e:{default:e}}var o=async(t,o)=>{return new Promise((s,a)=>{r.default.debug({key:t},"subscribeToFirebaseDoc"),e.default.doc(t).onSnapshot(e=>{o({snapshot:e,data:e.exists?e.data():void 0}),s()},e=>{a(e)})})};exports.default=o;
73
+ },{"./firestore":"gzUX","./logger":"XvyO"}],"ohCc":[function(require,module,exports) {
74
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("./subscribeToFirebaseDoc"));function a(e){return e&&e.__esModule?e:{default:e}}var s=async({appId:a,buildId:s,onDataReceived:t,userId:r})=>{try{return await(0,e.default)(`users/${r}/applications/${a}/builds/${s}`,async({data:e})=>{t(e)})}catch(u){throw u.message=`Failed while subscribing to build; ${u.message}`,u}};exports.default=s;
75
+ },{"./subscribeToFirebaseDoc":"rSIG"}],"PlpY":[function(require,module,exports) {
76
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=b(require("prop-types")),r=h(require("react")),i=b(require("./BuildProgress")),u=b(require("./ErrorDisplay")),n=b(require("./MainLayout")),a=require("../utilities/firestore"),o=b(require("../utilities/getLatestBuildId")),d=b(require("../utilities/projectConfig/getProjectConfig")),l=b(require("../utilities/logForCI")),s=b(require("../utilities/shouldExitOnBuildFailure")),f=b(require("../utilities/subscribeToBuild")),c=b(require("../utilities/useExit"));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function h(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var i={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var a=u?Object.getOwnPropertyDescriptor(e,n):null;a&&(a.get||a.set)?Object.defineProperty(i,n,a):i[n]=e[n]}return i.default=e,r&&r.set(e,i),i}function b(e){return e&&e.__esModule?e:{default:e}}const g=({commandUsed:t,id:p})=>{const h=(0,c.default)(),[{appId:b,arbitraryMessageComponent:g,build:y,error:m,hasBuildFailed:E,isLoading:w},q]=(0,r.useState)({appId:null,arbitraryMessageComponent:null,build:null,error:null,hasBuildFailed:!1,isLoading:!0}),v=e=>{const t=e.response?e.response.data:e;(0,l.default)(t),q(e=>({...e,error:t}))};if((0,r.useEffect)(()=>{let t,i;try{t=(0,d.default)().config}catch(n){return void q(e=>({...e,error:n}))}const u=e=>{(0,f.default)({appId:t.id,buildId:e,onDataReceived:r=>{r||v(new Error(`No such build exists (${e}). Please contact us if this is an error`)),q(e=>({...e,appId:t.id,build:r,isLoading:!1}))},userId:(0,a.currentUser)().uid}).then(e=>{i=e}).catch(v)};return p?u(p):(0,o.default)({appId:t.id}).catch(v).then(t=>{if(t)return u(t);q(t=>({...t,arbitraryMessageComponent:r.default.createElement(e.Text,null,"There are no builds yet")}))}),()=>{i&&i()}},[p]),(0,r.useEffect)(()=>{E&&(0,s.default)(y)&&setTimeout(()=>h(new Error("Build has failed")),10)},[y,h,E]),(0,r.useEffect)(()=>{g&&setTimeout(()=>h(new Error("Validation failed")),10)},[g,h]),m)return r.default.createElement(u.default,{commandUsed:t,error:m});if(g)return g;if(w)return r.default.createElement(e.Text,null,"Loading...");return r.default.createElement(n.default,{appId:b,appName:y.appName,appVersion:y.appVersion,build:y,commandUsed:t,hasBuildFailed:E},r.default.createElement(i.default,{build:y,onBuildFailure:()=>{E||q(e=>({...e,hasBuildFailed:!0}))}}))};g.propTypes={id:(e,t,r)=>{if(1!==[e.id,e.shouldViewLatest].filter(Boolean).length)return new Error(`Exactly one of 'id' and 'shouldViewLatest' must be specified in '${r}'`);const i=typeof e.id;return["string","undefined"].includes(i)?void 0:new Error(`'id' is a '${i}', not a string, in '${r}'.`)},commandUsed:t.default.string.isRequired,shouldViewLatest:(e,t,r)=>{if(1!==[e.id,e.shouldViewLatest].filter(Boolean).length)return new Error(`Exactly one of 'id' and 'shouldViewLatest' must be specified in '${r}'`);const i=typeof e.shouldViewLatest;return["boolean","undefined"].includes(i)?void 0:new Error(`'shouldViewLatest' is a '${i}', not a boolean, in '${r}'.`)}};var y=g;exports.default=y;
77
+ },{"./BuildProgress":"odFL","./ErrorDisplay":"f0Jz","./MainLayout":"T5Az","../utilities/firestore":"gzUX","../utilities/getLatestBuildId":"EqTV","../utilities/projectConfig/getProjectConfig":"Sx1d","../utilities/logForCI":"Sre8","../utilities/shouldExitOnBuildFailure":"ONhe","../utilities/subscribeToBuild":"ohCc","../utilities/useExit":"QLfx"}],"krS3":[function(require,module,exports) {
78
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=u(require("prop-types")),r=u(require("react"));function u(e){return e&&e.__esModule?e:{default:e}}const a=({keyDetails:t,...u})=>{let a="└";return a+=Object.values(t).map(({width:e})=>"─".repeat(e+2)).join("┴"),a+="┘",r.default.createElement(e.Box,u,r.default.createElement(e.Text,null,a))};a.propTypes={keyDetails:t.default.object.isRequired};var l=a;exports.default=l;
79
+ },{}],"hUnH":[function(require,module,exports) {
80
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("@babel/runtime/helpers/extends")),t=require("ink"),r=a(require("prop-types")),l=u(require("react"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var l={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var o=u?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(l,a,o):l[a]=e[a]}return l.default=e,r&&r.set(e,l),l}function a(e){return e&&e.__esModule?e:{default:e}}const o=({keyDetails:r,...n})=>{let u="┌";u+=Object.values(r).map(({width:e})=>"─".repeat(e+2)).join("┬"),u+="┐";const a=Object.values(r).map(({key:e,width:r},n)=>l.default.createElement(l.Fragment,{key:e},n>0?l.default.createElement(t.Text,null," │ "):null,l.default.createElement(t.Box,{width:r},l.default.createElement(t.Text,{bold:!0},e))));return l.default.createElement(t.Box,(0,e.default)({flexDirection:"column"},n),l.default.createElement(t.Box,null,l.default.createElement(t.Text,null,u)),l.default.createElement(t.Box,null,l.default.createElement(t.Box,null,l.default.createElement(t.Text,null,"│ "),a,l.default.createElement(t.Text,null," │"))))};o.propTypes={bottomLinePrefix:r.default.string,keyDetails:r.default.object.isRequired};var f=o;exports.default=f;
81
+ },{}],"vuw3":[function(require,module,exports) {
82
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=n(require("prop-types")),r=a(require("react"));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function a(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var a={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var o=n?Object.getOwnPropertyDescriptor(e,u):null;o&&(o.get||o.set)?Object.defineProperty(a,u,o):a[u]=e[u]}return a.default=e,r&&r.set(e,a),a}function n(e){return e&&e.__esModule?e:{default:e}}const u=({data:t,getCellTextProps:l=(({props:e})=>e),keyDetails:a,textProps:n={}})=>{let u="├";u+=Object.values(a).map(({width:e})=>"─".repeat(e+2)).join("┼"),u+="┤";const o=r.default.createElement(r.Fragment,null,r.default.createElement(e.Text,null,"│ "),Object.entries(t).map(([u,o],f)=>r.default.createElement(e.Box,{key:u},f>0?r.default.createElement(e.Text,null," │ "):null,r.default.createElement(e.Box,{width:a[u].width},r.default.createElement(e.Text,l({key:u,props:n,rowData:t,value:o}),o)))),r.default.createElement(e.Text,null," │"));return r.default.createElement(r.Fragment,null,r.default.createElement(e.Box,{flexDirection:"column"},r.default.createElement(e.Text,null,u),r.default.createElement(e.Box,null,o)))};u.propTypes={data:t.default.object.isRequired,getCellTextProps:t.default.func,keyDetails:t.default.object.isRequired,textProps:t.default.object};var o=u;exports.default=o;
83
+ },{}],"G67f":[function(require,module,exports) {
84
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("prop-types")),t=n(require("react")),r=o(require("./TableRow"));function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}function n(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var l=o?Object.getOwnPropertyDescriptor(e,u):null;l&&(l.get||l.set)?Object.defineProperty(n,u,l):n[u]=e[u]}return n.default=e,r&&r.set(e,n),n}function o(e){return e&&e.__esModule?e:{default:e}}const u=({data:e,getCellTextProps:a,keyDetails:n})=>t.default.createElement(t.Fragment,null,e.map((e,o)=>t.default.createElement(r.default,{data:e,getCellTextProps:a,key:o,keyDetails:n})));u.propTypes={data:(e,t,r)=>{const a=typeof e.data;return Array.isArray("array")?new Error(`'data' prop must be an array ('${a}' given) in ${r} component`):0===e.data.length?new Error(`'data' prop must not be empty, in ${r} component`):void 0},getCellTextProps:e.default.func,keyDetails:e.default.object.isRequired};var l=u;exports.default=l;
85
+ },{"./TableRow":"vuw3"}],"bdRS":[function(require,module,exports) {
86
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>{const t={};return Object.keys(e[0]).forEach(r=>{t[r]={key:r,width:Math.max(r.length,e.map(e=>e[r].toString().length).sort((e,t)=>t-e)[0])}}),t};exports.default=e;
87
+ },{}],"B2mJ":[function(require,module,exports) {
88
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=n(require("prop-types")),r=n(require("react")),a=n(require("./TableEnd")),l=n(require("./TableHead")),u=n(require("./TableBody")),o=n(require("../utilities/getKeyDetails"));function n(e){return e&&e.__esModule?e:{default:e}}const d=({data:t,getCellTextProps:n})=>{const d=(0,o.default)(t);return r.default.createElement(e.Box,{flexDirection:"column"},r.default.createElement(l.default,{keyDetails:d}),r.default.createElement(u.default,{data:t,getCellTextProps:n,keyDetails:d}),r.default.createElement(a.default,{keyDetails:d}))};d.propTypes={data:(e,t,r)=>{const a=typeof e.data;return Array.isArray("array")?new Error(`'data' prop must be an array ('${a}' given) in ${r} component`):0===e.data.length?new Error(`'data' prop must not be empty, in ${r} component`):void 0},getCellTextProps:t.default.func};var i=d;exports.default=i;
89
+ },{"./TableEnd":"krS3","./TableHead":"hUnH","./TableBody":"G67f","../utilities/getKeyDetails":"bdRS"}],"FZpx":[function(require,module,exports) {
90
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1);exports.default=e;
91
+ },{}],"H47U":[function(require,module,exports) {
92
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("./firestore")),t=r(require("./logger"));function r(e){return e&&e.__esModule?e:{default:e}}function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}function o(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var o={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var u=i?Object.getOwnPropertyDescriptor(e,n):null;u&&(u.get||u.set)?Object.defineProperty(o,n,u):o[n]=e[n]}return o.default=e,r&&r.set(e,o),o}var i=async({addWhereClauses:r=(e=>e),appId:a,limit:o=5,startAfter:i})=>{t.default.debug({appId:a,limit:o,startAfter:i},"getBuilds");const n=e.default.doc(`users/${(0,e.currentUser)().uid}/applications/${a}`);if(!(await n.get()).exists)throw new Error(`Application with ID of ${a} doesn't exist.`);let u=r(n.collection("builds")).orderBy("createdAt","desc");i&&(u=u.startAfter(i));const s=await u.limit(o).get();return s.empty?[]:s.docs.map(e=>e.data())};exports.default=i;
93
+ },{"./firestore":"gzUX","./logger":"XvyO"}],"oShw":[function(require,module,exports) {
94
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=r(require("date-fns"));function t(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,n=new WeakMap;return(t=function(e){return e?n:r})(e)}function r(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=t(r);if(n&&n.has(e))return n.get(e);var a={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var f=o?Object.getOwnPropertyDescriptor(e,u):null;f&&(f.get||f.set)?Object.defineProperty(a,u,f):a[u]=e[u]}return a.default=e,n&&n.set(e,a),a}var n=t=>e.formatDistance(new Date(t),new Date)+" ago";exports.default=n;
95
+ },{}],"me3W":[function(require,module,exports) {
96
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=g(require("prop-types")),r=p(require("react")),a=g(require("./ErrorDisplay")),i=g(require("./Table")),l=g(require("../utilities/capitalize")),o=g(require("../utilities/getBuilds")),n=g(require("../utilities/projectConfig/getProjectConfig")),u=g(require("../utilities/getRelativeDateFromDateString")),s=g(require("../utilities/logForCI")),d=g(require("../utilities/useInput")),f=g(require("../utilities/useExit"));function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function p(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var a={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var o=i?Object.getOwnPropertyDescriptor(e,l):null;o&&(o.get||o.set)?Object.defineProperty(a,l,o):a[l]=e[l]}return a.default=e,r&&r.set(e,a),a}function g(e){return e&&e.__esModule?e:{default:e}}const m=({commandUsed:t})=>{const c=(0,f.default)(),[{builds:p,error:g,hasMoreToLoad:m,isInitialLoadComplete:h,isLoading:y,projectConfig:C,startAfter:b},L]=(0,r.useState)({builds:[],error:null,hasMoreToLoad:!0,isInitialLoadComplete:!1,isLoading:!1,projectConfig:null,startAfter:null});if((0,d.default)()((e,t)=>{if(t.escape&&c()," "===e||t.downArrow||t.pageDown||t.return){if(!h||!m)return;L(e=>({...e,startAfter:p[p.length-1].createdAt}))}}),(0,r.useEffect)(()=>{if(g||y||h&&(!m||!b))return;let e;L(e=>({...e,isLoading:!0}));try{e=C||(0,n.default)().config}catch(t){return void L(e=>({...e,error:t}))}(0,o.default)({appId:e.id,limit:6,startAfter:b}).then(t=>{L(r=>{const a={hasMoreToLoad:t.length>5,isInitialLoadComplete:!0,isLoading:!1,projectConfig:e,startAfter:null};return t.length&&(a.builds=[...r.builds,...t.slice(0,5)]),{...r,...a}})}).catch(e=>{(0,s.default)(e),L(t=>({...t,error:e,isLoading:!1}))})},[g,m,h,y,C,b]),(0,r.useEffect)(()=>{m||setTimeout(c,10)},[c,m]),g)return r.default.createElement(a.default,{commandUsed:t,error:g});if(!h)return r.default.createElement(e.Text,null,"Loading...");if(p.length){const t=p.map(e=>({ID:e.id,Version:e.appVersion||"unknown","Creation date":(0,u.default)(e.createdAt),Status:(0,l.default)(e.status),"Release date":e.releasedAt?(0,u.default)(e.releasedAt):"Unreleased"})),a=({key:e,props:t,value:r})=>{const a={...t};if("Status"===e){const e=r.toLowerCase();"succeeded"===e?a.color="green":"failed"===e?a.color="red":"cancelled"===e&&(a.dimColor=!0)}else"Release date"===e&&"unreleased"===r.toLowerCase()&&(a.dimColor=!0);return a};return r.default.createElement(r.Fragment,null,r.default.createElement(i.default,{getCellTextProps:a,data:t}),p.length>0?r.default.createElement(e.Box,null,r.default.createElement(e.Text,{color:"gray",dimColor:!0},y?"Loading more...":m?`Showing the latest ${p.length} builds. Press space/down to load more.`:`Showing all (${p.length}) builds`)):null)}return r.default.createElement(e.Text,null,"There are no builds yet")};m.propTypes={commandUsed:t.default.string.isRequired};var h=m;exports.default=h;
97
+ },{"./ErrorDisplay":"f0Jz","./Table":"B2mJ","../utilities/capitalize":"FZpx","../utilities/getBuilds":"H47U","../utilities/projectConfig/getProjectConfig":"Sx1d","../utilities/getRelativeDateFromDateString":"oShw","../utilities/logForCI":"Sre8","../utilities/useInput":"CLRu","../utilities/useExit":"QLfx"}],"AYMC":[function(require,module,exports) {
98
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=i(require("chalk")),t=i(require("is-installed-globally")),o=i(require("latest-version")),r=i(require("pkg-up")),s=i(require("semver"));function i(e){return e&&e.__esModule?e:{default:e}}var u=()=>{if(process.env.AVA_PATH)return;const i=require(r.default.sync({cwd:__dirname}));(0,o.default)(i.name).then(o=>{if(s.default.gt(o,i.version)){const r=e.default.greenBright(`npm install ${t.default?"-g":"--save-dev"} @todesktop/cli`);console.log(`Your version of @todesktop/cli is out of date.\nRun ${r} to update to v${o}.`),s.default.satisfies(o,`^${i.version}`)||(console.log("CLI is exiting because it is out out of date."),process.exit(1))}})};exports.default=u;
99
+ },{}],"EHrm":[function(require,module,exports) {
100
+ module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli",version:"1.1.3",license:"MIT",author:"Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)",homepage:"https://todesktop.com/cli",bugs:{email:"dave@todesktop.com"},bin:{todesktop:"./build/cli.js"},engines:{node:">=12"},scripts:{dev:"cp-cli dev.env .env && pastel dev","dev:prod":"cp-cli prod.env .env && pastel dev",build:"cross-env NODE_ENV=production pastel build && cp-cli prod.env .env && cp node_modules/pastel/boot.js build/boot.js && sed -i'.bak' 's@pastel\\/boot@.\\/boot@g' build/cli.js",lint:"eslint .","lint--fix":"eslint . --fix",release:"npm run build && npx np --tag=latest","release-beta":"npm run build && npx np --any-branch --no-tests --tag=beta",test:"npm run build && ava","test--watch":"npm test -- --watch"},files:["build","docs",".env","LICENSE","README.md"],dependencies:{"@babel/runtime":"^7.18.9","@sentry/node":"^5.27.2",ajv:"^6.12.6","analytics-node":"^4.0.1",archiver:"^5.2.0",axios:"^0.21.1","better-ajv-errors":"^1.2.0",bunyan:"^1.8.14","camelcase-keys":"^5.2.0",chalk:"^4.1.0",conf:"^7.1.2","date-fns":"^2.28.0",decamelize:"^1.2.0",del:"^6.0.0",dotenv:"^8.2.0",du:"^1.0.0","email-regex":"^4.0.0","fast-glob":"^3.2.4","final-form":"^4.20.1","find-up":"^5.0.0",firebase:"^7.24.0","git-rev-sync":"^3.0.2",ink:"^3.2.0","ink-gradient":"^2.0.0","ink-link":"^2.0.0","ink-select-input":"^4.2.1","ink-text-input":"^4.0.1","is-ci":"^3.0.1","is-installed-globally":"^0.3.2","latest-version":"^5.1.0","lodash.throttle":"^4.1.1","parse-author":"^2.0.0","pkg-up":"^3.1.0","pretty-bytes":"^5.4.1","prop-types":"^15.7.2",react:"^17.0.2","react-final-form":"^6.5.1",semver:"^7.3.2","stream-to-array":"^2.3.0",superagent:"^7.1.3",uuid:"^8.3.1","xdg-basedir":"^4.0.0",yargs:"^15.4.1"},devDependencies:{"@ava/babel":"^1.0.1","@babel/core":"^7.12.3","@babel/plugin-transform-runtime":"^7.12.1","@babel/preset-env":"^7.11.5","@babel/register":"^7.12.1","@types/bunyan":"^1.8.6",ava:"^4.3.1","babel-preset-es2015":"^6.24.1","cp-cli":"^2.0.0","cross-env":"^7.0.2",eslint:"^7.6.0","eslint-config-prettier":"^6.11.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-node":"^11.1.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.21.4","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-standard":"^4.0.1",execa:"^4.0.3","extract-zip":"^2.0.1","fs-extra":"^9.0.1",husky:"^4.3.0","lint-staged":"^10.2.11",pastel:"^1.1.1",prettier:"^2.1.2",proxyquire:"^2.1.3",sinon:"^9.0.3"},ava:{files:["test/**/*.js","!test/fixtures/**/*","!test/utilities/**/*"],require:["@babel/register"],timeout:"10m"},"lint-staged":{"**/*.js":["eslint . --fix","git add"]},husky:{hooks:{"pre-commit":"lint-staged"}},overrides:{pastel:{"parcel-bundler":{deasync:"0.1.27"}}},resolutions:{"pastel/parcel-bundler/deasync":"0.1.24",ink:"3.2.0",react:"17.0.2"},packageExtensions:{"ink-progress-bar@*":{dependencies:{react:"*",ink:"*"}}}};
101
+ },{}],"SYaU":[function(require,module,exports) {
102
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=c(require("@sentry/node")),t=u(require("os")),r=u(require("../../package.json")),n=require("../utilities/configStore"),o=u(require("../utilities/projectConfig/getProjectConfig")),a=u(require("path")),i=u(require("./getEnvironmentVariables"));function u(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function c(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=o?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(n,a,i):n[a]=e[a]}return n.default=e,r&&r.set(e,n),n}var f=()=>{const{TODESKTOP_CLI_SENTRY_DSN:a}=(0,i.default)();a&&(e.init({dsn:a}),e.configureScope(e=>{try{e.setUser({email:(0,n.getAuthConfig)().email})}catch(a){}try{e.setContext("os",{name:t.default.platform(),version:t.default.release()})}catch(a){}try{e.setContext("runtime",{name:"Node.js",version:process.version})}catch(a){}try{e.setContext("app",{app_name:r.default.name,app_version:r.default.version})}catch(a){}try{const t=(0,o.default)();e.setExtra("config",t)}catch(a){}}))};exports.default=f;
103
+ },{"../../package.json":"EHrm","../utilities/configStore":"ffKF","../utilities/projectConfig/getProjectConfig":"Sx1d","./getEnvironmentVariables":"gwcX"}],"rPNZ":[function(require,module,exports) {
104
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=r(require("./exitIfCLIOutOfDate")),t=r(require("./initSentry"));function r(e){return e&&e.__esModule?e:{default:e}}const u={sentry:!0,exitIfOutOfDate:!0};var f=r=>{const{sentry:f,exitIfOutOfDate:a}={...u,...r};f&&(0,t.default)(),a&&(0,e.default)()};exports.default=f;
105
+ },{"./exitIfCLIOutOfDate":"AYMC","./initSentry":"SYaU"}],"CV1E":[function(require,module,exports) {
106
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useAnalyticsCommand=void 0;var e=require("react"),t=require("./firestore"),i=require("./analytics"),r=s(require("../utilities/logger")),a=s(require("../utilities/projectConfig/getProjectConfig"));function s(e){return e&&e.__esModule?e:{default:e}}const o=(s,o={},u={})=>{const[n,c]=(0,e.useState)(!1);r.default.info({command:s,flags:o,properties:u},"useAnalyticsCommand");try{o.projectPath&&(u={...u,...(0,a.default)()})}catch(l){}return(0,e.useEffect)(()=>{const e=(0,t.onUserAuth)(async t=>{t.uid&&(0,i.identify)(t.uid,{email:t.email,displayName:t.displayName},()=>{(0,i.track)(i.ANALYTICS_EVENT.CLI_COMMAND,{...u,flags:o,command:s},()=>c(!0)),e&&e()})});setTimeout(()=>c(!0),5e3)},[]),{hasAttemptedTracking:n}};exports.useAnalyticsCommand=o;
107
+ },{"./firestore":"gzUX","./analytics":"ALju","../utilities/logger":"XvyO","../utilities/projectConfig/getProjectConfig":"Sx1d"}],"U8Bu":[function(require,module,exports) {
108
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("prop-types")),t=o(require("react")),l=o(require("../lib/utilities/checkIfReactIsUsable")),i=o(require("../lib/components/LoginHOC")),u=o(require("../lib/components/ErrorBoundary")),r=o(require("../lib/components/ViewBuild")),d=o(require("../lib/components/ViewBuilds")),a=o(require("../lib/utilities/onCommand")),s=require("../lib/utilities/useAnalytics");function o(e){return e&&e.__esModule?e:{default:e}}(0,a.default)();const n=({id:e,latest:a})=>{(0,l.default)(),(0,s.useAnalyticsCommand)("builds",{id:e,shouldViewLatest:a});return t.default.createElement(u.default,null,t.default.createElement(i.default,null,(()=>{let l="todesktop builds";return e?(l+=" <id>",t.default.createElement(r.default,{commandUsed:l,id:e})):a?(l+=" --latest",t.default.createElement(r.default,{commandUsed:l,shouldViewLatest:!0})):t.default.createElement(d.default,{commandUsed:l})})()))};n.propTypes={id:e.default.string,latest:e.default.bool},n.positionalArgs=["id"];var c=n;exports.default=c;
109
+ },{"../lib/utilities/checkIfReactIsUsable":"cb6D","../lib/components/LoginHOC":"nLy3","../lib/components/ErrorBoundary":"XM8F","../lib/components/ViewBuild":"PlpY","../lib/components/ViewBuilds":"me3W","../lib/utilities/onCommand":"rPNZ","../lib/utilities/useAnalytics":"CV1E"}]},{},["U8Bu"], null)
4225
110
  //# sourceMappingURL=/builds.js.map