@todesktop/cli 1.0.0 → 1.1.0
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 +95 -0
- package/build/commands/build.js +5 -5
- package/build/commands/build.js.map +1 -1
- package/build/commands/builds.js +4 -4
- package/build/commands/builds.js.map +1 -1
- package/build/commands/logout.js +4 -4
- package/build/commands/logout.js.map +1 -1
- package/build/commands/release.js +4 -4
- package/build/commands/release.js.map +1 -1
- package/build/commands/whoami.js +4 -4
- package/build/commands/whoami.js.map +1 -1
- package/build/commands.json +9 -9
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -11,7 +11,9 @@ For more information, visit the project [landing page](https://www.todesktop.com
|
|
|
11
11
|
- [CLI commands](#cli-commands)
|
|
12
12
|
- [Automating your builds (CI)](#automating-your-builds-ci)
|
|
13
13
|
- [Project configuration (todesktop.json)](#project-configuration-todesktopjson)
|
|
14
|
+
- [Build lifecycle hooks (package.json scripts)](#build-lifecycle-hooks-packagejson-scripts)
|
|
14
15
|
- [App package.json requirements](#packagejson-requirements)
|
|
16
|
+
- [Changelog](#changelog)
|
|
15
17
|
|
|
16
18
|
## Installation
|
|
17
19
|
|
|
@@ -647,6 +649,86 @@ Default: The root [`icon`](#icon---string) is used.
|
|
|
647
649
|
|
|
648
650
|
The path to your application's Windows desktop icon. It must be an ICO, ICNS, or PNG.
|
|
649
651
|
|
|
652
|
+
## Build lifecycle hooks (package.json scripts)
|
|
653
|
+
|
|
654
|
+
Sometimes you want to do something before or during the build process. For example, you might want to run a script before the build starts, or you might want to run a script after the files have been packaged. Our lifecycle hooks provide a way to do this.
|
|
655
|
+
|
|
656
|
+
To specify a script, add a `scripts` property to your `package.json` file. The key is the name of the script (prefixed by `todesktop:`), and the value is the path to the script.
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
{
|
|
660
|
+
"scripts": {
|
|
661
|
+
"todesktop:beforeInstall": "./scripts/beforeInstall.js",
|
|
662
|
+
"todesktop:afterPack": "./scripts/afterPack.js"
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
When writing your script, you can follow this template:
|
|
668
|
+
|
|
669
|
+
```js
|
|
670
|
+
module.exports = async ({ pkgJsonPath, pkgJson, appDir, hookName }) => {
|
|
671
|
+
/**
|
|
672
|
+
* pkgJsonPath - string - path to the package.json file
|
|
673
|
+
* pkgJson - object - the parsed package.json file
|
|
674
|
+
* appDir - string - the path to the app directory
|
|
675
|
+
* hookName - string - the name of the hook ("todesktop:beforeInstall" or "todesktop:afterPack")
|
|
676
|
+
*/
|
|
677
|
+
};
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### `todesktop:beforeInstall` - (optional) path to script
|
|
681
|
+
|
|
682
|
+
Example: `./scripts/beforeInstall.js`.
|
|
683
|
+
|
|
684
|
+
The path to a script that will be run before the build starts.
|
|
685
|
+
|
|
686
|
+
Example script:
|
|
687
|
+
|
|
688
|
+
```js
|
|
689
|
+
const { writeFile } = require("fs/promises");
|
|
690
|
+
|
|
691
|
+
// Delete `internal` dependency from package.json
|
|
692
|
+
module.exports = async ({ pkgJsonPath, pkgJson, appDir, hookName }) => {
|
|
693
|
+
delete pkgJson.dependencies["internal"];
|
|
694
|
+
await writeFile(pkgJsonPath, JSON.stringify(pkgJson, null, 2));
|
|
695
|
+
};
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
### `todesktop:afterPack` - (optional) path to script
|
|
699
|
+
|
|
700
|
+
Example: `./scripts/afterPack.js`.
|
|
701
|
+
|
|
702
|
+
The path to a script that will be run after the app has been packed (but _before_ it has been transformed into a distributable installer format and signed).
|
|
703
|
+
|
|
704
|
+
The `afterPack` function also has the following arguments added to it's signature:
|
|
705
|
+
|
|
706
|
+
- appPkgName - string - the name of the app package
|
|
707
|
+
- appId - string - the app id
|
|
708
|
+
- shouldCodeSign - boolean - whether the app will be code signed or not
|
|
709
|
+
- outDir - string - the path to the output directory
|
|
710
|
+
- appOutDir - string - the path to the app output directory
|
|
711
|
+
- arch - string - the architecture of the app
|
|
712
|
+
- packager - object - the packager object
|
|
713
|
+
|
|
714
|
+
Example script:
|
|
715
|
+
|
|
716
|
+
```js
|
|
717
|
+
const { writeFile } = require("fs/promises");
|
|
718
|
+
|
|
719
|
+
// Add a copyright file inside of the app directory on Mac only
|
|
720
|
+
module.exports = async ({ appOutDir, packager }) => {
|
|
721
|
+
if (os.platform() === "darwin") {
|
|
722
|
+
const appName = packager.appInfo.productFilename;
|
|
723
|
+
const appPath = path.join(`${appOutDir}`, `${APP_NAME}.app`);
|
|
724
|
+
await writeFile(
|
|
725
|
+
path.join(appPath, "copyright.txt"),
|
|
726
|
+
`Copyright © ${new Date().getFullYear()} ${APP_NAME}`
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
};
|
|
730
|
+
```
|
|
731
|
+
|
|
650
732
|
## App package.json requirements
|
|
651
733
|
|
|
652
734
|
- Electron must be in your `devDependencies` and it must be a fixed version. I.e. it doesn't start with `^` or `~`.
|
|
@@ -674,3 +756,16 @@ To summarize:
|
|
|
674
756
|
```
|
|
675
757
|
|
|
676
758
|
Note: **Do not put a token in this file**. You are specifying a literal value of `${NPM_TOKEN}`. NPM will replace the value for you. 5. Add `.npmrc` to your `appFiles` array `[".npmrc"]` in `todesktop.json`.
|
|
759
|
+
|
|
760
|
+
## Changelog
|
|
761
|
+
|
|
762
|
+
### v1.1.0
|
|
763
|
+
|
|
764
|
+
- Add support for `beforeInstall` and `afterPack` hooks.
|
|
765
|
+
|
|
766
|
+
### v1.0.0
|
|
767
|
+
|
|
768
|
+
- Feature: Support multiple concurrent builds
|
|
769
|
+
- Enhancement: Switched to presigned uploads (removes AWS dependency)
|
|
770
|
+
- Fix: Fixed package resolution for Ink
|
|
771
|
+
- Add PNPM support
|
package/build/commands/build.js
CHANGED
|
@@ -49,11 +49,11 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
|
|
|
49
49
|
},{}],"waRp":[function(require,module,exports) {
|
|
50
50
|
"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;
|
|
51
51
|
},{}],"zW94":[function(require,module,exports) {
|
|
52
|
-
"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},version:{type:"string",semanticVersion:{}}}});exports.default=e;
|
|
52
|
+
"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;
|
|
53
53
|
},{}],"fl4s":[function(require,module,exports) {
|
|
54
54
|
"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;
|
|
55
55
|
},{"./addCustomKeywords":"g5Ig","./schema/packageJSON":"zW94"}],"g5Ig":[function(require,module,exports) {
|
|
56
|
-
"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")),
|
|
56
|
+
"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;
|
|
57
57
|
},{"./validatePackageJSON":"fl4s"}],"CN2N":[function(require,module,exports) {
|
|
58
58
|
"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 i=(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}},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:i(),linux:{properties:{category:{type:"string",minLength:1},icon:i()}},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:i()}},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:i(["ico"])}}}}};exports.default=t;
|
|
59
59
|
},{}],"aYcI":[function(require,module,exports) {
|
|
@@ -73,7 +73,7 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
|
|
|
73
73
|
},{"./getEnvironmentVariables":"gwcX","./logger":"XvyO","../utilities/getCallableFirebaseFunction":"koRC"}],"AV41":[function(require,module,exports) {
|
|
74
74
|
"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)}
|
|
75
75
|
},{"./logger":"XvyO"}],"Y1TB":[function(require,module,exports) {
|
|
76
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=
|
|
76
|
+
"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;
|
|
77
77
|
},{"./generateS3Key":"uJzg","./logger":"XvyO","./uploadToS3":"yJCU","./zip":"AV41"}],"XP8q":[function(require,module,exports) {
|
|
78
78
|
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=l(require("fs")),r=l(require("path")),a=l(require("pretty-bytes")),i=require("./firestore"),o=l(require("./getVersionControlInfo")),t=l(require("./projectConfig/getProjectConfig")),s=l(require("./logForCI")),p=l(require("./postToFirebaseFunction")),d=l(require("./readJson")),u=l(require("./subscribeToBuild")),n=l(require("./uploadApplicationSource"));function l(e){return e&&e.__esModule?e:{default:e}}var g=async({onEvent:e,shouldCodeSign:l=!0})=>{(0,s.default)("Getting application information...");const g=(0,i.currentUser)().uid,{config:c,unprocessedConfig:f}=(0,t.default)(),b=c.id,P=(0,d.default)(r.default.join(c.appPath,"package.json"));let h,m;e("progress",{appId:b,appPkg:P,preparationProgress:.02}),(0,s.default)("Preparing...");try{h=(await(0,p.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,o.default)(c.appPath)})).appData.meta.currentBuildProgress.id;const r=await(0,u.default)({appId:b,buildId:h,onDataReceived:r=>e("progress",{build:r}),userId:g});e("firebase-subscribed",{firebaseUnsubscribe:r})}catch(w){throw w.message=`Failed while preparing new build; ${w.message}`,w}e("progress",{preparationProgress:.05,preparationStageLabel:"Uploading"}),(0,s.default)("Uploading...");try{m=await(0,n.default)({appId:b,appPkgJson:P,buildId:h,config:c,onProgress(r,i){const o={preparationProgress:.05+r/100*.95};i&&(o.preparationUploadedSize=(0,a.default)(i)),e("progress",o)}})}catch(w){throw w.message=`Failed while uploading application source; ${w.message}`,w}e("progress",{isPreparationComplete:!0}),(0,s.default)("Kicking off build...");try{await(0,p.default)("kickOffBuild",{appId:b,appPkgName:P.name,appVersion:P.version,buildId:h,userId:g,sourceArchiveDetails:m})}catch(w){throw w.message=`Failed while kicking off build; ${w.message}`,w}};exports.default=g;
|
|
79
79
|
},{"./firestore":"gzUX","./getVersionControlInfo":"PvCN","./projectConfig/getProjectConfig":"Sx1d","./logForCI":"Sre8","./postToFirebaseFunction":"I8pf","./readJson":"GCJw","./subscribeToBuild":"ohCc","./uploadApplicationSource":"Y1TB"}],"ONhe":[function(require,module,exports) {
|
|
@@ -101,9 +101,9 @@ parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcel
|
|
|
101
101
|
},{"./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"}],"mzsi":[function(require,module,exports) {
|
|
102
102
|
"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=v(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"));function b(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(b=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=b(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 h=({children:r,commandUsed:b})=>{const{isRawModeSupported:v}=(0,e.useStdin)(),y=(0,p.default)(),h=(0,m.default)(),[{appId:q,builds:E,error:C,isLoading:w,itemChosen:B},O]=(0,i.useState)({appId:null,builds:[],error:null,isLoading:!0,itemChosen:null});if((0,i.useEffect)(()=>{w&&(async()=>{try{const t=(0,c.default)().config.id,r=await s.default.doc(`users/${(0,s.currentUser)().uid}/applications/${t}`).collection("builds").orderBy("createdAt","desc").limit(10).get(),i={appId:t,isLoading:!1,builds:[]};if(!r.empty){const e=r.docs[0].data(),t=(0,d.isBuildRunning)(e)&&"preparation"!==e.status;f.default.debug({isRunning:t},"OngoingBuildGuard component: got latest build"),i.builds=r.docs.map(e=>e.data()).filter(e=>!(!(0,d.isBuildRunning)(e)||"preparation"===e.status))}O(e=>({...e,...i}))}catch(e){O(t=>({...t,error:e}))}})()},[E,B,w,v]),v&&y(()=>{}),C)return i.default.createElement(l.default,{commandUsed:b,error:C});if(w)return i.default.createElement(e.Text,null,"...");if(B){f.default.debug({itemChosen:B},"OngoingBuildGuard component: item chosen");const e=E.find(Boolean);if("view"===B.value)return i.default.createElement(o.default,{commandUsed:b,id:e.id});if("cancel"===B.value)return i.default.createElement(n.default,{appId:q,commandUsed:b,id:e.id},r);if("concurrent"===B.value)return i.default.createElement(i.Fragment,null,r);setTimeout(h,10)}if(E.length&&!1===g.default&&v){const r=E.find(Boolean),n=E.length>1,l=[{label:`View ${n?"latest":"it"}`,value:"view"}];E.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=>O(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 q=h;exports.default=q;
|
|
103
103
|
},{"./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"}],"AYMC":[function(require,module,exports) {
|
|
104
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=
|
|
104
|
+
"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;
|
|
105
105
|
},{}],"EHrm":[function(require,module,exports) {
|
|
106
|
-
module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli",version:"0.
|
|
106
|
+
module.exports={private:!1,publishConfig:{access:"public"},name:"@todesktop/cli",version:"1.0.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:{preinstall:"npx force-resolutions",dev:"cp-cli dev.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:{"@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":"^0.6.7",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.23.0","force-resolutions":"^1.0.10","git-rev-sync":"^3.0.2",ink:"^3.2.0","ink-gradient":"^2.0.0","ink-link":"^2.0.0","ink-progress-bar":"^3.0.0","ink-select-input":"^4.2.1","ink-text-input":"^4.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:"^16.13.1","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:"^3.12.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","is-ci":"^2.0.0","lint-staged":"^10.2.11",pastel:"^1.1.1",prettier:"^2.1.2",proxyquire:"^2.1.3",sinon:"^9.0.3"},ava:{babel:!0,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.24"}}},resolutions:{"pastel/parcel-bundler/deasync":"0.1.24",ink:"3.2.0"}};
|
|
107
107
|
},{}],"SYaU":[function(require,module,exports) {
|
|
108
108
|
"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;
|
|
109
109
|
},{"../../package.json":"EHrm","../utilities/configStore":"ffKF","../utilities/projectConfig/getProjectConfig":"Sx1d","./getEnvironmentVariables":"gwcX"}],"rPNZ":[function(require,module,exports) {
|