@todesktop/cli 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,7 +12,8 @@ For more information, visit the project [landing page](https://www.todesktop.com
12
12
  - [Automating your builds (CI)](#automating-your-builds-ci)
13
13
  - [Project configuration (todesktop.json)](#project-configuration-todesktopjson)
14
14
  - [Build lifecycle hooks (package.json scripts)](#build-lifecycle-hooks-packagejson-scripts)
15
- - [App package.json requirements](#packagejson-requirements)
15
+ - [App package.json requirements](#app-packagejson-requirements)
16
+ - [FAQs](#faqs)
16
17
  - [Changelog](#changelog)
17
18
 
18
19
  ## Installation
@@ -125,13 +126,16 @@ This builds your Electron app with native installers, code signing, and so on ba
125
126
  We also support:
126
127
 
127
128
  - `todesktop build --code-sign=false`. Run a build with code-signing and notarization disabled. This is handy for testing builds quickly.
129
+ - `todesktop build --config=<path.to.another.todesktop.json>`. Run a build with a different configuration file.
128
130
  - `todesktop release`. Release a build. This will publish a new download and an auto-update for existing users. By default it shows a list of builds for you to choose from.
129
131
  - Use `todesktop release <id>` to release a specific build by ID.
130
132
  - `todesktop release --latest` will release the latest build.
131
133
  - Append `--force` to skip the interactive confirmation step.
134
+ - Append `--config=<path.to.another.todesktop.json>` to use a different configuration file.
132
135
  - `todesktop builds`. View your recent builds.
133
136
  - Use `todesktop builds <id>` to view a specific build and its progress.
134
137
  - `todesktop builds --latest` will show the latest build and it's progress.
138
+ - Append `--config=<path.to.another.todesktop.json>` to use a different configuration file.
135
139
  - `todesktop logout`. Logs you out.
136
140
  - `todesktop whoami`. Prints the email of the account you're signed into.
137
141
  - `todesktop --help`. Shows the help documentation.
@@ -318,6 +322,16 @@ The DMG windows position and size. In most cases, you will only want to specify
318
322
  }
319
323
  ```
320
324
 
325
+ ### `extends` - (optional) string
326
+
327
+ Default: `null`.
328
+
329
+ Example: `./todesktop.staging.json`.
330
+
331
+ This is the path to a base configuration file. This is especially useful for configuration sharing between staging and production builds. The base configuration file can be a relative path from the project root or an absolute path.
332
+
333
+ For more information about how to create a staging version of your app see: [How do I create a staging version of my app?](#how-do-i-create-a-staging-version-of-my-app).
334
+
321
335
  ### `extraContentFiles` - (optional) array of objects
322
336
 
323
337
  Default: `[]`.
@@ -513,6 +527,25 @@ Default: The root [`icon`](#icon---string) is used.
513
527
 
514
528
  The path to your application's Mac desktop icon. It must be an ICNS or PNG.
515
529
 
530
+ ### `packageJson` - (optional) object
531
+
532
+ Default: `{}`
533
+
534
+ Example:
535
+
536
+ ```js
537
+ "packageJson": {
538
+ "extends": "package.json",
539
+ "name": "example-app-canary",
540
+ "productName": "Example App Canary",
541
+ "dependencies": {
542
+ "electron": "21.0.1"
543
+ }
544
+ }
545
+ ```
546
+
547
+ If you want to override the default `package.json` configuration, use the `packageJson` property. For example, you can use this to override the `productName` or `version` properties.
548
+
516
549
  ### `schemaVersion` - number
517
550
 
518
551
  Example: `1`.
@@ -776,39 +809,28 @@ Note: **Do not put a token in this file**. You are specifying a literal value of
776
809
 
777
810
  ### How do I create a staging version of my app?
778
811
 
779
- The easiest way to do this is to create a second app and switch the `todesktop.json` file to point to the staging app when you wish to deploy the staging app. There are a number of ways to do this. Let's do an example, save the file below as `scripts/mod-staging.js`.
812
+ ToDesktop CLI supports the concept of a staging version of your app. This is useful if you want to test your app before releasing it to the public. To create a staging version of your app, you need to do the following:
780
813
 
781
- ```js
782
- const path = require("path");
783
- const fs = require("fs");
784
-
785
- const rootDir = path.join(__dirname, "..");
786
- const packageJson = require(rootDir + "/package.json");
787
- const toDesktopJson = require(rootDir + "/todesktop.json");
788
-
789
- function modStaging() {
790
- packageJson.name = "myapp-staging";
791
- packageJson.productName = "My App Staging";
792
-
793
- toDesktopJson.id = "220718gzrs4pfe8";
794
- toDesktopJson.icon = "./resources/staging.png";
795
- toDesktopJson.appId = "myapp.staging.app";
796
-
797
- fs.writeFileSync(
798
- rootDir + "/package.json",
799
- JSON.stringify(packageJson, null, 2)
800
- );
801
- fs.writeFileSync(
802
- rootDir + "/todesktop.json",
803
- JSON.stringify(toDesktopJson, null, 2)
804
- );
805
- }
814
+ 1. Create a new app in ToDesktop's web UI.
815
+
816
+ 2. Create a new todesktop configuration file named `todesktop.staging.json`
806
817
 
807
- modStaging();
818
+ 3. Add the following to your `todesktop.staging.json` file:
819
+
820
+ ```json
821
+ {
822
+ "extends": "./todesktop.json",
823
+ "id": "<ID_OF_YOUR_STAGING_APP>",
824
+ "appId": "myapp.staging.app",
825
+ "icon": "./resources/staging.png",
826
+ "packageJson": {
827
+ "name": "myapp-staging",
828
+ "productName": "My App (Staging)"
829
+ }
830
+ }
808
831
  ```
809
832
 
810
- Create a similar script to revert the `todesktop.json` back to the original settings (let's save it as `scripts/mod-revert.js`).
811
- Then in your package.json, you could do something like this:
833
+ 4. Then in your package.json, you could do something like this:
812
834
 
813
835
  ```js
814
836
  {
@@ -816,7 +838,7 @@ Then in your package.json, you could do something like this:
816
838
  // ...
817
839
  "scripts": {
818
840
  "todesktop-build": "todesktop build",
819
- "todesktop-staging-build": "node scripts/mod-staging.js && todesktop build && node scripts/mod-revert.js"
841
+ "todesktop-staging-build": "todesktop build --config=./todesktop.staging.json",
820
842
  },
821
843
  }
822
844
  ```
@@ -825,6 +847,15 @@ Now you can run `npm run todesktop-build` to build the production app. Or you ca
825
847
 
826
848
  ## Changelog
827
849
 
850
+ ### v1.4.0
851
+
852
+ - Adds `extends` and `packageJson` field to `todesktop.json` file.
853
+ - Added `--config` option to pass a different configuration file.
854
+
855
+ ### v1.3.0
856
+
857
+ - Added support for delegated users and teams.
858
+
828
859
  ### v1.2.1
829
860
 
830
861
  - Fix: When the build is finished the download link is now an Apple Silicon link if you are on an Apple Silicon Mac.
@@ -60,9 +60,11 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
60
60
  "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(),noSandbox:{type:"boolean"}}},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;
61
61
  },{}],"aYcI":[function(require,module,exports) {
62
62
  "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;
63
- },{"./addCustomKeywords":"g5Ig","./schema/full":"CN2N"}],"Sx1d":[function(require,module,exports) {
64
- "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;
65
- },{"./loadConfig":"GCJw","./resolveConfigPaths":"waRp","./validateConfig":"aYcI"}],"I8pf":[function(require,module,exports) {
63
+ },{"./addCustomKeywords":"g5Ig","./schema/full":"CN2N"}],"AQMM":[function(require,module,exports) {
64
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=u(require("../../utilities/logger")),t=u(require("./loadConfig")),r=require("path"),d=u(require("lodash.merge"));function u(e){return e&&e.__esModule?e:{default:e}}const l=(u,i)=>{if(u.extends){e.default.debug("Extends field found, resolving");const n=(0,r.resolve)(i,u.extends),o=(0,t.default)(n),s=l(o,i),a=(0,d.default)({},s,u);return delete a.extends,a}return e.default.debug("No extends field, returning partial config"),u};var i=l;exports.default=i;
65
+ },{"../../utilities/logger":"XvyO","./loadConfig":"GCJw"}],"Sx1d":[function(require,module,exports) {
66
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("path"),o=require("fs"),r=u(require("find-up")),t=u(require("./loadConfig")),i=u(require("./resolveConfigPaths")),n=u(require("./validateConfig")),d=u(require("../../utilities/logger")),f=u(require("./computeFullProjectConfig"));function u(e){return e&&e.__esModule?e:{default:e}}var a=(u=null)=>{if(null===u){if(d.default.debug("No config path provided, searching for one"),!(u=r.default.sync("todesktop.json")))throw new Error("Can not find todesktop.json in this folder or any parent folders")}else{if(void 0===u||""===u)throw d.default.error("Provided config path is empty"),new Error("No config path provided");if(u=(0,e.resolve)(process.cwd(),u),!(0,o.existsSync)(u))throw d.default.error("Provided config path does not exist"),new Error(`Config file not found at ${u}`)}const a=(0,e.dirname)(u),s=(0,t.default)(u);s.appPath=s.appPath||".";const l=(0,f.default)(s,a);return(0,n.default)({config:l,projectRoot:a}),{config:(0,i.default)({config:l,projectRoot:a}),unprocessedConfig:l,projectRoot:a}};exports.default=a;
67
+ },{"./loadConfig":"GCJw","./resolveConfigPaths":"waRp","./validateConfig":"aYcI","../../utilities/logger":"XvyO","./computeFullProjectConfig":"AQMM"}],"I8pf":[function(require,module,exports) {
66
68
  "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}}
67
69
  },{"./getEnvironmentVariables":"gwcX","./logger":"XvyO"}],"rSIG":[function(require,module,exports) {
68
70
  "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;
@@ -76,12 +78,14 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
76
78
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=a;var e=n(require("archiver")),r=n(require("du")),i=n(require("fs")),t=n(require("chalk")),o=n(require("./logger"));function n(e){return e&&e.__esModule?e:{default:e}}async function a({files:n,fileSizeLimit:a=20,onError:s,onProgress:u}){o.default.debug({files:n},"zip");const l=(0,e.default)("zip");l.on("warning",function(e){"ENOENT"===e.code?(console.warn(e),o.default.warn({err:e},"zip: stream warning ENOENT")):s(e)}),l.on("error",function(e){s(e)});const c=await Promise.all(n.map(async e=>{const t=i.default.lstatSync(e.from),o=t.isDirectory();return{...e,isDirectory:o,stats:t,size:o?await(0,r.default)(e.from):t.size}})),d=c.reduce((e,r)=>e+r.size,0);return d>1e6*a?(s(new Error([`\n\nYour app is larger than ${a}MB. Your app is ${t.default.bold.red.underline((d/1e6).toFixed(1)+"MB")}.\n`,"You may be including unnecessary files in your app(see the `appPath` and `appFiles` options).","If not, this limit can be raised by setting the `uploadSizeLimit` option.","Learn more at https://www.npmjs.com/package/@todesktop/cli#uploadsizelimit---optional-number"].join("\n"))),l):(c.forEach(({from:e,isDirectory:r,stats:i,to:t})=>{r?l.directory(e,t):l.file(e,{name:t,mode:i.mode})}),l.finalize(),l.on("progress",e=>u({...e,percentage:e.entries.processed/e.entries.total*100})),l)}
77
79
  },{"./logger":"XvyO"}],"Y1TB":[function(require,module,exports) {
78
80
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=l(require("fast-glob")),o=p(require("fs")),t=p(require("path")),n=l(require("./generateS3Key")),i=l(require("./logger")),r=l(require("./uploadToS3")),a=l(require("./zip"));function s(e){if("function"!=typeof WeakMap)return null;var o=new WeakMap,t=new WeakMap;return(s=function(e){return e?t:o})(e)}function p(e,o){if(!o&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=s(o);if(t&&t.has(e))return t.get(e);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var a=i?Object.getOwnPropertyDescriptor(e,r):null;a&&(a.get||a.set)?Object.defineProperty(n,r,a):n[r]=e[r]}return n.default=e,t&&t.set(e,n),n}function l(e){return e&&e.__esModule?e:{default:e}}const c=async(n,i,r)=>{const a=["!node_modules","!**/node_modules","!.git","!**/.git"];n&&n.length?a.push(...n,t.join(i,"package.json"),t.join(i,"package-lock.json"),t.join(i,"yarn.lock"),t.join(i,"pnpm-lock.yaml"),t.join(i,"shrinkwrap.yaml")):a.push("**");for(const e of["todesktop:beforeInstall","todesktop:afterPack"])r.scripts&&r.scripts[e]&&a.push(t.join(i,r.scripts[e]));const s=a.map(e=>{return(t.isAbsolute(e)?t.relative(i,e):e).replace(/\\/g,"/").replace(/\/+$/,"")}).filter(e=>!e.startsWith("..")&&!e.startsWith("!.."));let p=await(0,e.default)(s,{absolute:!0,cwd:i,dot:!0,followSymbolicLinks:!1,onlyDirectories:!1,onlyFiles:!0,globstar:!0,unique:!0});if("win32"===process.platform&&(p=p.map(e=>e.replace(/\//g,t.sep))),!p||!p.length)throw new Error("No files found to upload");if(!p.filter(e=>e.endsWith(".js")).length)throw new Error(`No .js files found to upload (${p[0]}). There's likely an issue with the appFiles option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`);{let e=i;if(r.main&&(e=t.join(e,r.main)),o.statSync(e).isDirectory()&&(e=t.join(e,"index.js")),!p.includes(e))throw new Error(`The "main" file specified in your package.json (${r.main?t.relative(i,e):"defaults to index.js"}) is not set to be uploaded to our servers. This is likely due to how you have configured the \`appFiles\` option. Learn more at https://www.npmjs.com/package/@todesktop/cli#appfiles----optional-array-of-glob-patterns. If this is not the case, please contact us.`)}return p.map(e=>({from:e,to:t.join("app",t.relative(i,e))}))};var u=async({appId:e,appPkgJson:o,buildId:s,config:p,onProgress:l})=>{i.default.debug({appId:e,appPkgJson:o,buildId:s,config:p,onProgress:l},"uploadApplicationSource");let u=0;const f=[...await c(p.appFiles,p.appPath,o),...(p.extraContentFiles||[]).map(({from:e,to:o="."})=>({from:e,to:t.join("extraContentFiles",o,t.basename(e))})),...(p.extraResources||[]).map(({from:e,to:o="."})=>({from:e,to:t.join("extraResources",o,t.basename(e))})),{from:p.icon,to:t.join("icons","appIcon"+t.extname(p.icon))}];return p.linux&&p.linux.icon&&f.push({from:p.linux.icon,to:t.join("icons","appIcon-linux"+t.extname(p.linux.icon))}),p.mac&&(p.mac.entitlements&&f.push({from:p.mac.entitlements,to:t.join("other","mac","entitlements.mac.plist")}),p.mac.icon&&f.push({from:p.mac.icon,to:t.join("icons","appIcon-mac"+t.extname(p.mac.icon))})),p.dmg&&p.dmg.background&&f.push({from:p.dmg.background,to:t.join("other","mac","dmg-background.tiff")}),p.windows&&p.windows.icon&&f.push({from:p.windows.icon,to:t.join("icons","appIcon-windows"+t.extname(p.windows.icon))}),(0,r.default)({bucket:p.bucket||void 0,inputStream:await(0,a.default)({files:f,fileSizeLimit:p.uploadSizeLimit,onError:e=>{throw e},onProgress({fs:e}){u=e.totalBytes}}),key:(0,n.default)({appId:e,buildId:s,filenameSuffix:`${o.name}.zip`}),onProgress({loaded:e,total:o}){l(e/o*100,e)}})};exports.default=u;
79
- },{"./generateS3Key":"uJzg","./logger":"XvyO","./uploadToS3":"yJCU","./zip":"AV41"}],"XP8q":[function(require,module,exports) {
80
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=n(require("path")),r=n(require("pretty-bytes")),a=require("./firestore"),i=n(require("./getVersionControlInfo")),o=n(require("./projectConfig/getProjectConfig")),t=n(require("./logForCI")),s=n(require("./postToFirebaseFunction")),p=n(require("./readJson")),d=n(require("./subscribeToBuild")),u=n(require("./uploadApplicationSource"));function n(e){return e&&e.__esModule?e:{default:e}}var l=async({onEvent:n,shouldCodeSign:l=!0})=>{(0,t.default)("Getting application information...");const g=(0,a.currentUser)().uid,{config:c,unprocessedConfig:f}=(0,o.default)(),b=c.id,P=(0,p.default)(e.default.join(c.appPath,"package.json"));let h,m;n("progress",{appId:b,appPkg:P,preparationProgress:.02}),(0,t.default)("Preparing...");try{const e=await(0,s.default)("prepareNewBuild",{appPkgName:P.name,appPkgProductName:P.productName,appVersion:P.version,id:c.id,projectConfig:f,shouldCodeSign:!1!==l,shouldRelease:!1,userId:g,versionControlInfo:await(0,i.default)(c.appPath)});h=e.appData.meta.currentBuildProgress.id;const r=await(0,d.default)({appId:b,buildId:h,onDataReceived:e=>n("progress",{build:e}),userId:e.userId});n("firebase-subscribed",{firebaseUnsubscribe:r})}catch(I){throw I.message=`Failed while preparing new build; ${I.message}`,I}n("progress",{preparationProgress:.05,preparationStageLabel:"Uploading"}),(0,t.default)("Uploading...");try{m=await(0,u.default)({appId:b,appPkgJson:P,buildId:h,config:c,onProgress(e,a){const i={preparationProgress:.05+e/100*.95};a&&(i.preparationUploadedSize=(0,r.default)(a)),n("progress",i)}})}catch(I){throw I.message=`Failed while uploading application source; ${I.message}`,I}n("progress",{isPreparationComplete:!0}),(0,t.default)("Kicking off build...");try{await(0,s.default)("kickOffBuild",{appId:b,appPkgName:P.name,appVersion:P.version,buildId:h,userId:g,sourceArchiveDetails:m})}catch(I){throw I.message=`Failed while kicking off build; ${I.message}`,I}};exports.default=l;
81
- },{"./firestore":"gzUX","./getVersionControlInfo":"PvCN","./projectConfig/getProjectConfig":"Sx1d","./logForCI":"Sre8","./postToFirebaseFunction":"I8pf","./readJson":"GCJw","./subscribeToBuild":"ohCc","./uploadApplicationSource":"Y1TB"}],"ONhe":[function(require,module,exports) {
81
+ },{"./generateS3Key":"uJzg","./logger":"XvyO","./uploadToS3":"yJCU","./zip":"AV41"}],"QgqX":[function(require,module,exports) {
82
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("lodash.merge")),t=a(require("path")),r=a(require("./readJson"));function a(e){return e&&e.__esModule?e:{default:e}}function u({config:a}){const u=a.packageJson||{},o=u.extends||"package.json",n=(0,r.default)(t.default.join(a.appPath,o));return(0,e.default)({},n,u)}var o=u;exports.default=o;
83
+ },{"./readJson":"GCJw"}],"XP8q":[function(require,module,exports) {
84
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=n(require("pretty-bytes")),r=require("./firestore"),a=n(require("./getVersionControlInfo")),i=n(require("./projectConfig/getProjectConfig")),o=n(require("./logForCI")),t=n(require("./postToFirebaseFunction")),s=n(require("./subscribeToBuild")),p=n(require("./uploadApplicationSource")),d=n(require("./getPackageJson"));function n(e){return e&&e.__esModule?e:{default:e}}var u=async({onEvent:n,shouldCodeSign:u=!0,configPath:l})=>{(0,o.default)("Getting application information...");const g=(0,r.currentUser)().uid,{config:c,unprocessedConfig:f}=(0,i.default)(l),b=c.id,P=(0,d.default)({config:c});let h,m;n("progress",{appId:b,appPkg:P,preparationProgress:.02}),(0,o.default)("Preparing...");try{const e=await(0,t.default)("prepareNewBuild",{appPkgName:P.name,appPkgProductName:P.productName,appVersion:P.version,id:c.id,projectConfig:f,shouldCodeSign:!1!==u,shouldRelease:!1,userId:g,versionControlInfo:await(0,a.default)(c.appPath)});h=e.appData.meta.currentBuildProgress.id;const r=await(0,s.default)({appId:b,buildId:h,onDataReceived:e=>n("progress",{build:e}),userId:e.userId});n("firebase-subscribed",{firebaseUnsubscribe:r})}catch(I){throw I.message=`Failed while preparing new build; ${I.message}`,I}n("progress",{preparationProgress:.05,preparationStageLabel:"Uploading"}),(0,o.default)("Uploading...");try{m=await(0,p.default)({appId:b,appPkgJson:P,buildId:h,config:c,onProgress(r,a){const i={preparationProgress:.05+r/100*.95};a&&(i.preparationUploadedSize=(0,e.default)(a)),n("progress",i)}})}catch(I){throw I.message=`Failed while uploading application source; ${I.message}`,I}n("progress",{isPreparationComplete:!0}),(0,o.default)("Kicking off build...");try{await(0,t.default)("kickOffBuild",{appId:b,appPkgName:P.name,appVersion:P.version,buildId:h,userId:g,sourceArchiveDetails:m})}catch(I){throw I.message=`Failed while kicking off build; ${I.message}`,I}};exports.default=u;
85
+ },{"./firestore":"gzUX","./getVersionControlInfo":"PvCN","./projectConfig/getProjectConfig":"Sx1d","./logForCI":"Sre8","./postToFirebaseFunction":"I8pf","./subscribeToBuild":"ohCc","./uploadApplicationSource":"Y1TB","./getPackageJson":"QgqX"}],"ONhe":[function(require,module,exports) {
82
86
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=e=>{const t=["linux","mac","windows"].every(t=>e[t].shouldSkip||"succeeded"===e[t].status||"failed"===e[t].status&&2===e[t].numberOfAttemptedBuilds),s=["linux","mac","windows"].some(t=>"failed"===e[t].status);return t&&s};exports.default=e;
83
87
  },{}],"PaIV":[function(require,module,exports) {
84
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=g(require("react")),r=f(require("prop-types")),t=f(require("./BuildProgress")),a=f(require("./ErrorDisplay")),i=f(require("./Preparation")),u=f(require("./InitialLoadingState")),l=f(require("./MainLayout")),n=f(require("../utilities/logForCI")),o=f(require("../utilities/logger")),d=f(require("../utilities/runBuild")),s=f(require("../utilities/shouldExitOnBuildFailure")),p=f(require("../utilities/useExit"));function f(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(c=function(e){return e?t:r})(e)}function g(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=c(r);if(t&&t.has(e))return t.get(e);var a={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var l=i?Object.getOwnPropertyDescriptor(e,u):null;l&&(l.get||l.set)?Object.defineProperty(a,u,l):a[u]=e[u]}return a.default=e,t&&t.set(e,a),a}const m={appId:null,appPkg:null,build:null,error:null,hasBuildEverFailed:!1,isPreparationComplete:!1,preparationStageLabel:"Preparing",preparationProgress:0,preparationUploadedSize:null},b=({commandUsed:r,shouldCodeSign:f=!0})=>{const c=(0,p.default)(),[{appId:g,appPkg:b,build:v,error:E,hasBuildEverFailed:P,isPreparationComplete:y,preparationStageLabel:q,preparationProgress:h,preparationUploadedSize:B},O]=(0,e.useState)(m),S=e=>{const r=e.response?e.response.data:e;(0,n.default)(r),O(e=>({...e,error:r}))};if((0,e.useEffect)(()=>{let e;return(0,d.default)({commandUsed:r,onEvent:(r,t)=>{o.default.debug({eventName:r,data:t},"Build component: runBuild.onEvent"),"firebase-subscribed"===r?e=t.firebaseUnsubscribe:"progress"===r&&O(e=>({...e,...t}))},shouldCodeSign:f}).catch(S),()=>{e&&e()}},[r,f]),(0,e.useEffect)(()=>{P&&(0,s.default)(v)&&setTimeout(()=>c(new Error("Build has failed"),10))},[v,c,P]),E)return e.default.createElement(a.default,{commandUsed:r,error:E});if(!b)return e.default.createElement(u.default,null);return e.default.createElement(l.default,{appId:g,appName:v&&v.appName||b.name,appVersion:v&&v.appVersion||b.version,build:v,commandUsed:r,hasBuildEverFailed:P},y?e.default.createElement(t.default,{build:v,onBuildFailure:()=>{P||O(e=>({...e,hasBuildEverFailed:!0}))}}):e.default.createElement(i.default,{progressPercentage:h,stageLabel:q,uploadedSize:B}))};b.propTypes={commandUsed:r.default.string.isRequired,shouldCodeSign:r.default.bool};var v=b;exports.default=v;
88
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=g(require("react")),r=f(require("prop-types")),t=f(require("./BuildProgress")),a=f(require("./ErrorDisplay")),i=f(require("./Preparation")),u=f(require("./InitialLoadingState")),l=f(require("./MainLayout")),n=f(require("../utilities/logForCI")),o=f(require("../utilities/logger")),d=f(require("../utilities/runBuild")),s=f(require("../utilities/shouldExitOnBuildFailure")),p=f(require("../utilities/useExit"));function f(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(c=function(e){return e?t:r})(e)}function g(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=c(r);if(t&&t.has(e))return t.get(e);var a={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var l=i?Object.getOwnPropertyDescriptor(e,u):null;l&&(l.get||l.set)?Object.defineProperty(a,u,l):a[u]=e[u]}return a.default=e,t&&t.set(e,a),a}const m={appId:null,appPkg:null,build:null,error:null,hasBuildEverFailed:!1,isPreparationComplete:!1,preparationStageLabel:"Preparing",preparationProgress:0,preparationUploadedSize:null},b=({commandUsed:r,shouldCodeSign:f=!0,configPath:c})=>{const g=(0,p.default)(),[{appId:b,appPkg:P,build:v,error:E,hasBuildEverFailed:h,isPreparationComplete:y,preparationStageLabel:q,preparationProgress:B,preparationUploadedSize:O},S]=(0,e.useState)(m),U=e=>{const r=e.response?e.response.data:e;(0,n.default)(r),S(e=>({...e,error:r}))};if((0,e.useEffect)(()=>{let e;return(0,d.default)({commandUsed:r,onEvent:(r,t)=>{o.default.debug({eventName:r,data:t},"Build component: runBuild.onEvent"),"firebase-subscribed"===r?e=t.firebaseUnsubscribe:"progress"===r&&S(e=>({...e,...t}))},shouldCodeSign:f,configPath:c}).catch(U),()=>{e&&e()}},[r,f,c]),(0,e.useEffect)(()=>{h&&(0,s.default)(v)&&setTimeout(()=>g(new Error("Build has failed"),10))},[v,g,h]),E)return e.default.createElement(a.default,{commandUsed:r,error:E});if(!P)return e.default.createElement(u.default,null);return e.default.createElement(l.default,{appId:b,appName:v&&v.appName||P.name,appVersion:v&&v.appVersion||P.version,build:v,commandUsed:r,hasBuildEverFailed:h},y?e.default.createElement(t.default,{build:v,onBuildFailure:()=>{h||S(e=>({...e,hasBuildEverFailed:!0}))}}):e.default.createElement(i.default,{progressPercentage:B,stageLabel:q,uploadedSize:O}))};b.propTypes={commandUsed:r.default.string.isRequired,shouldCodeSign:r.default.bool,configPath:r.default.string};var P=b;exports.default=P;
85
89
  },{"./BuildProgress":"odFL","./ErrorDisplay":"f0Jz","./Preparation":"DLJk","./InitialLoadingState":"OHrJ","./MainLayout":"T5Az","../utilities/logForCI":"Sre8","../utilities/logger":"XvyO","../utilities/runBuild":"XP8q","../utilities/shouldExitOnBuildFailure":"ONhe","../utilities/useExit":"QLfx"}],"cb6D":[function(require,module,exports) {
86
90
  "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;
87
91
  },{}],"iiO0":[function(require,module,exports) {
@@ -101,13 +105,13 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
101
105
  },{"./firestore":"gzUX","./logger":"XvyO"}],"thz1":[function(require,module,exports) {
102
106
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=r(require("./firestore"));function t(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,a=new WeakMap;return(t=function(e){return e?a: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 a=t(r);if(a&&a.has(e))return a.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=o?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,a&&a.set(e,n),n}const a=e=>e.get().then(e=>{const t=[];return e.forEach(e=>t.push(e.data())),t}),n=t=>e.default.collection(`users/${t}/acceptedUsers`),o=async t=>{const{uid:r,email:o}=(0,e.currentUser)(),u={id:r,label:o},i=[u,...(await a(n(r))).map(e=>({id:e.id,label:e.email}))];for(const a of i)try{if((await e.default.doc(`users/${a.id}/applications/${t}`).get()).exists)return a}catch(c){}return u};var u=o;exports.default=u;
103
107
  },{"./firestore":"gzUX"}],"PlpY":[function(require,module,exports) {
104
- "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=b(require("../utilities/getLatestBuildId")),d=b(require("../utilities/projectConfig/getProjectConfig")),o=b(require("../utilities/logForCI")),l=b(require("../utilities/shouldExitOnBuildFailure")),s=b(require("../utilities/subscribeToBuild")),f=b(require("../utilities/useExit")),c=b(require("../utilities/findAppUserId"));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 y=({commandUsed:t,id:p})=>{const h=(0,f.default)(),[{appId:b,arbitraryMessageComponent:y,build:E,error:g,hasBuildEverFailed:m,isLoading:w},v]=(0,r.useState)({appId:null,arbitraryMessageComponent:null,build:null,error:null,hasBuildEverFailed:!1,isLoading:!0}),q=e=>{const t=e.response?e.response.data:e;(0,o.default)(t),v(e=>({...e,error:t}))};if((0,r.useEffect)(()=>{let t;return async function(){let i;try{i=(0,d.default)().config}catch(o){return void v(e=>({...e,error:o}))}const{id:u}=await(0,c.default)(i.id),n=e=>{(0,s.default)({appId:i.id,buildId:e,onDataReceived:t=>{t||q(new Error(`No such build exists (${e}). Please contact us if this is an error`)),v(e=>({...e,appId:i.id,build:t,isLoading:!1}))},userId:u}).then(e=>{t=e}).catch(q)};p?n(p):(0,a.default)({appId:i.id,userId:u}).catch(q).then(t=>{if(t)return n(t);v(t=>({...t,arbitraryMessageComponent:r.default.createElement(e.Text,null,"There are no builds yet")}))})}(),()=>{t&&t()}},[p]),(0,r.useEffect)(()=>{m&&(0,l.default)(E)&&setTimeout(()=>h(new Error("Build has failed")),10)},[E,h,m]),(0,r.useEffect)(()=>{y&&setTimeout(()=>h(new Error("Validation failed")),10)},[y,h]),g)return r.default.createElement(u.default,{commandUsed:t,error:g});if(y)return y;if(w)return r.default.createElement(e.Text,null,"Loading...");return r.default.createElement(n.default,{appId:b,appName:E.appName,appVersion:E.appVersion,build:E,commandUsed:t,hasBuildEverFailed:m},r.default.createElement(i.default,{build:E,onBuildFailure:()=>{m||v(e=>({...e,hasBuildEverFailed:!0}))}}))};y.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 E=y;exports.default=E;
108
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=g(require("prop-types")),r=h(require("react")),i=g(require("./BuildProgress")),n=g(require("./ErrorDisplay")),u=g(require("./MainLayout")),a=g(require("../utilities/getLatestBuildId")),d=g(require("../utilities/projectConfig/getProjectConfig")),o=g(require("../utilities/logForCI")),l=g(require("../utilities/shouldExitOnBuildFailure")),s=g(require("../utilities/subscribeToBuild")),f=g(require("../utilities/useExit")),c=g(require("../utilities/findAppUserId"));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={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var a=n?Object.getOwnPropertyDescriptor(e,u):null;a&&(a.get||a.set)?Object.defineProperty(i,u,a):i[u]=e[u]}return i.default=e,r&&r.set(e,i),i}function g(e){return e&&e.__esModule?e:{default:e}}const b=({commandUsed:t,id:p,configPath:h})=>{const g=(0,f.default)(),[{appId:b,arbitraryMessageComponent:y,build:E,error:m,hasBuildEverFailed:w,isLoading:v},q]=(0,r.useState)({appId:null,arbitraryMessageComponent:null,build:null,error:null,hasBuildEverFailed:!1,isLoading:!0}),L=e=>{const t=e.response?e.response.data:e;(0,o.default)(t),q(e=>({...e,error:t}))};if((0,r.useEffect)(()=>{let t;return async function(){let i;try{i=(0,d.default)(h).config}catch(o){return void q(e=>({...e,error:o}))}const{id:n}=await(0,c.default)(i.id),u=e=>{(0,s.default)({appId:i.id,buildId:e,onDataReceived:t=>{t||L(new Error(`No such build exists (${e}). Please contact us if this is an error`)),q(e=>({...e,appId:i.id,build:t,isLoading:!1}))},userId:n}).then(e=>{t=e}).catch(L)};p?u(p):(0,a.default)({appId:i.id,userId:n}).catch(L).then(t=>{if(t)return u(t);q(t=>({...t,arbitraryMessageComponent:r.default.createElement(e.Text,null,"There are no builds yet")}))})}(),()=>{t&&t()}},[p]),(0,r.useEffect)(()=>{w&&(0,l.default)(E)&&setTimeout(()=>g(new Error("Build has failed")),10)},[E,g,w]),(0,r.useEffect)(()=>{y&&setTimeout(()=>g(new Error("Validation failed")),10)},[y,g]),m)return r.default.createElement(n.default,{commandUsed:t,error:m});if(y)return y;if(v)return r.default.createElement(e.Text,null,"Loading...");return r.default.createElement(u.default,{appId:b,appName:E.appName,appVersion:E.appVersion,build:E,commandUsed:t,hasBuildEverFailed:w},r.default.createElement(i.default,{build:E,onBuildFailure:()=>{w||q(e=>({...e,hasBuildEverFailed:!0}))}}))};b.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}'.`)},configPath:t.default.string};var y=b;exports.default=y;
105
109
  },{"./BuildProgress":"odFL","./ErrorDisplay":"f0Jz","./MainLayout":"T5Az","../utilities/getLatestBuildId":"EqTV","../utilities/projectConfig/getProjectConfig":"Sx1d","../utilities/logForCI":"Sre8","../utilities/shouldExitOnBuildFailure":"ONhe","../utilities/subscribeToBuild":"ohCc","../utilities/useExit":"QLfx","../utilities/findAppUserId":"thz1"}],"mzsi":[function(require,module,exports) {
106
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=q(require("ink-select-input")),r=q(require("prop-types")),i=y(require("react")),n=q(require("./CancelBuild")),u=q(require("./CustomSelectInputIndicator")),a=q(require("./CustomSelectInputItem")),l=q(require("./ErrorDisplay")),o=q(require("./ViewBuild")),d=require("../utilities/buildStatus"),s=q(require("../utilities/firestore")),c=q(require("../utilities/projectConfig/getProjectConfig")),f=q(require("../utilities/logger")),p=q(require("../utilities/useInput")),m=q(require("../utilities/useExit")),g=q(require("is-ci")),b=q(require("../utilities/findAppUserId"));function v(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(v=function(e){return e?r:t})(e)}function y(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=v(t);if(r&&r.has(e))return r.get(e);var i={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var a=n?Object.getOwnPropertyDescriptor(e,u):null;a&&(a.get||a.set)?Object.defineProperty(i,u,a):i[u]=e[u]}return i.default=e,r&&r.set(e,i),i}function q(e){return e&&e.__esModule?e:{default:e}}const h=({children:r,commandUsed:v})=>{const{isRawModeSupported:y}=(0,e.useStdin)(),q=(0,p.default)(),h=(0,m.default)(),[{appId:E,builds:w,error:C,isLoading:B,itemChosen:O},j]=(0,i.useState)({appId:null,builds:[],error:null,isLoading:!0,itemChosen:null});if((0,i.useEffect)(()=>{B&&(async()=>{try{const t=(0,c.default)().config.id,{id:r}=await(0,b.default)(t),i=await s.default.doc(`users/${r}/applications/${t}`).collection("builds").orderBy("createdAt","desc").limit(10).get(),n={appId:t,isLoading:!1,builds:[]};if(!i.empty){const e=i.docs[0].data(),t=(0,d.isBuildRunning)(e)&&"preparation"!==e.status;f.default.debug({isRunning:t},"OngoingBuildGuard component: got latest build"),n.builds=i.docs.map(e=>e.data()).filter(e=>!(!(0,d.isBuildRunning)(e)||"preparation"===e.status))}j(e=>({...e,...n}))}catch(e){j(t=>({...t,error:e}))}})()},[w,O,B,y]),y&&q(()=>{}),C)return i.default.createElement(l.default,{commandUsed:v,error:C});if(B)return i.default.createElement(e.Text,null,"...");if(O){f.default.debug({itemChosen:O},"OngoingBuildGuard component: item chosen");const e=w.find(Boolean);if("view"===O.value)return i.default.createElement(o.default,{commandUsed:v,id:e.id});if("cancel"===O.value)return i.default.createElement(n.default,{appId:E,commandUsed:v,id:e.id},r);if("concurrent"===O.value)return i.default.createElement(i.Fragment,null,r);setTimeout(h,10)}if(w.length&&!1===g.default&&y){const r=w.find(Boolean),n=w.length>1,l=[{label:`View ${n?"latest":"it"}`,value:"view"}];w.some(e=>(0,d.isBuildCancellable)(e))&&(l.push({label:`Cancel ${n?"latest":"it"} and start a new build`,value:"cancel"}),l.push({label:"Start a concurrent build",value:"concurrent"})),l.push({label:"Exit",value:"exit"});const o=e=>j(t=>({...t,itemChosen:e}));return i.default.createElement(i.Fragment,null,i.default.createElement(e.Box,{marginBottom:1},i.default.createElement(e.Text,{bold:!0},n?"There are ongoing builds ":"There is an ongoing build "),i.default.createElement(e.Text,null,"(",r.appName,r.appVersion?` v${r.appVersion}`:"",")")),i.default.createElement(t.default,{indicatorComponent:u.default,itemComponent:a.default,items:l,onSelect:o}))}return i.default.createElement(i.Fragment,null,r)};h.propTypes={commandUsed:r.default.string.isRequired,children:r.default.oneOfType([r.default.array,r.default.object])};var E=h;exports.default=E;
110
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("ink"),t=y(require("ink-select-input")),r=y(require("prop-types")),i=v(require("react")),n=y(require("./CancelBuild")),u=y(require("./CustomSelectInputIndicator")),a=y(require("./CustomSelectInputItem")),l=y(require("./ErrorDisplay")),o=y(require("./ViewBuild")),d=require("../utilities/buildStatus"),s=y(require("../utilities/firestore")),c=y(require("../utilities/projectConfig/getProjectConfig")),f=y(require("../utilities/logger")),p=y(require("../utilities/useInput")),m=y(require("../utilities/useExit")),g=y(require("is-ci")),b=y(require("../utilities/findAppUserId"));function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(h=function(e){return e?r:t})(e)}function v(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=h(t);if(r&&r.has(e))return r.get(e);var i={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var a=n?Object.getOwnPropertyDescriptor(e,u):null;a&&(a.get||a.set)?Object.defineProperty(i,u,a):i[u]=e[u]}return i.default=e,r&&r.set(e,i),i}function y(e){return e&&e.__esModule?e:{default:e}}const q=({children:r,commandUsed:h,configPath:v})=>{const{isRawModeSupported:y}=(0,e.useStdin)(),q=(0,p.default)(),E=(0,m.default)(),[{appId:w,builds:C,error:B,isLoading:O,itemChosen:j},x]=(0,i.useState)({appId:null,builds:[],error:null,isLoading:!0,itemChosen:null});if((0,i.useEffect)(()=>{O&&(async()=>{try{const t=(0,c.default)(v).config.id,{id:r}=await(0,b.default)(t),i=await s.default.doc(`users/${r}/applications/${t}`).collection("builds").orderBy("createdAt","desc").limit(10).get(),n={appId:t,isLoading:!1,builds:[]};if(!i.empty){const e=i.docs[0].data(),t=(0,d.isBuildRunning)(e)&&"preparation"!==e.status;f.default.debug({isRunning:t},"OngoingBuildGuard component: got latest build"),n.builds=i.docs.map(e=>e.data()).filter(e=>!(!(0,d.isBuildRunning)(e)||"preparation"===e.status))}x(e=>({...e,...n}))}catch(e){x(t=>({...t,error:e}))}})()},[C,j,O,y]),y&&q(()=>{}),B)return i.default.createElement(l.default,{commandUsed:h,error:B});if(O)return i.default.createElement(e.Text,null,"...");if(j){f.default.debug({itemChosen:j},"OngoingBuildGuard component: item chosen");const e=C.find(Boolean);if("view"===j.value)return i.default.createElement(o.default,{commandUsed:h,id:e.id});if("cancel"===j.value)return i.default.createElement(n.default,{appId:w,commandUsed:h,id:e.id},r);if("concurrent"===j.value)return i.default.createElement(i.Fragment,null,r);setTimeout(E,10)}if(C.length&&!1===g.default&&y){const r=C.find(Boolean),n=C.length>1,l=[{label:`View ${n?"latest":"it"}`,value:"view"}];C.some(e=>(0,d.isBuildCancellable)(e))&&(l.push({label:`Cancel ${n?"latest":"it"} and start a new build`,value:"cancel"}),l.push({label:"Start a concurrent build",value:"concurrent"})),l.push({label:"Exit",value:"exit"});const o=e=>x(t=>({...t,itemChosen:e}));return i.default.createElement(i.Fragment,null,i.default.createElement(e.Box,{marginBottom:1},i.default.createElement(e.Text,{bold:!0},n?"There are ongoing builds ":"There is an ongoing build "),i.default.createElement(e.Text,null,"(",r.appName,r.appVersion?` v${r.appVersion}`:"",")")),i.default.createElement(t.default,{indicatorComponent:u.default,itemComponent:a.default,items:l,onSelect:o}))}return i.default.createElement(i.Fragment,null,r)};q.propTypes={commandUsed:r.default.string.isRequired,children:r.default.oneOfType([r.default.array,r.default.object]),configPath:r.default.string};var E=q;exports.default=E;
107
111
  },{"./CancelBuild":"J4or","./CustomSelectInputIndicator":"OMIR","./CustomSelectInputItem":"oPeF","./ErrorDisplay":"f0Jz","./ViewBuild":"PlpY","../utilities/buildStatus":"in6t","../utilities/firestore":"gzUX","../utilities/projectConfig/getProjectConfig":"Sx1d","../utilities/logger":"XvyO","../utilities/useInput":"CLRu","../utilities/useExit":"QLfx","../utilities/findAppUserId":"thz1"}],"AYMC":[function(require,module,exports) {
108
112
  "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 l=()=>{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?"--location=global":"--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=l;
109
113
  },{}],"EHrm":[function(require,module,exports) {
110
- module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli",version:"1.2.4",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",blacklist:"^1.1.4",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:"*"}}}};
114
+ module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli",version:"1.4.0",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","build:dev":"cross-env NODE_ENV=development 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",blacklist:"^1.1.4",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.merge":"^4.6.2","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:"*"}}}};
111
115
  },{}],"SYaU":[function(require,module,exports) {
112
116
  "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;
113
117
  },{"../../package.json":"EHrm","../utilities/configStore":"ffKF","../utilities/projectConfig/getProjectConfig":"Sx1d","./getEnvironmentVariables":"gwcX"}],"rPNZ":[function(require,module,exports) {
@@ -115,6 +119,6 @@ module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli"
115
119
  },{"./exitIfCLIOutOfDate":"AYMC","./initSentry":"SYaU"}],"CV1E":[function(require,module,exports) {
116
120
  "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;
117
121
  },{"./firestore":"gzUX","./analytics":"ALju","../utilities/logger":"XvyO","../utilities/projectConfig/getProjectConfig":"Sx1d"}],"Wc0b":[function(require,module,exports) {
118
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("prop-types")),t=a(require("react")),l=a(require("../lib/components/Build")),u=a(require("../lib/utilities/checkIfReactIsUsable")),i=a(require("../lib/components/LoginHOC")),r=a(require("../lib/components/ErrorBoundary")),o=a(require("../lib/components/OngoingBuildGuard")),d=a(require("../lib/utilities/onCommand")),n=require("../lib/utilities/useAnalytics");function a(e){return e&&e.__esModule?e:{default:e}}(0,d.default)();const s=({codeSign:e=!0})=>{(0,u.default)(),(0,n.useAnalyticsCommand)("build",{codeSign:e});return t.default.createElement(r.default,null,t.default.createElement(i.default,null,t.default.createElement(o.default,{commandUsed:"todesktop build"},t.default.createElement(l.default,{commandUsed:"todesktop build",shouldCodeSign:e}))))};s.propTypes={codeSign:e.default.bool};var c=s;exports.default=c;
122
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("prop-types")),t=a(require("react")),i=a(require("../lib/components/Build")),l=a(require("../lib/utilities/checkIfReactIsUsable")),u=a(require("../lib/components/LoginHOC")),o=a(require("../lib/components/ErrorBoundary")),r=a(require("../lib/components/OngoingBuildGuard")),n=a(require("../lib/utilities/onCommand")),d=require("../lib/utilities/useAnalytics");function a(e){return e&&e.__esModule?e:{default:e}}(0,n.default)();const s=({codeSign:e=!0,config:n=null})=>{(0,l.default)(),(0,d.useAnalyticsCommand)("build",{codeSign:e,config:n});return t.default.createElement(o.default,null,t.default.createElement(u.default,null,t.default.createElement(r.default,{configPath:n,commandUsed:"todesktop build"},t.default.createElement(i.default,{commandUsed:"todesktop build",shouldCodeSign:e,configPath:n}))))};s.propTypes={codeSign:e.default.bool,config:e.default.string};var c=s;exports.default=c;
119
123
  },{"../lib/components/Build":"PaIV","../lib/utilities/checkIfReactIsUsable":"cb6D","../lib/components/LoginHOC":"nLy3","../lib/components/ErrorBoundary":"XM8F","../lib/components/OngoingBuildGuard":"mzsi","../lib/utilities/onCommand":"rPNZ","../lib/utilities/useAnalytics":"CV1E"}]},{},["Wc0b"], null)
120
124
  //# sourceMappingURL=/build.js.map