diff --git a/.changeset/red-beers-press.md b/.changeset/red-beers-press.md new file mode 100644 index 00000000000..ab7295960a4 --- /dev/null +++ b/.changeset/red-beers-press.md @@ -0,0 +1,16 @@ +--- +"app-builder-lib": patch +"builder-util": patch +"builder-util-runtime": patch +"dmg-builder": patch +"electron-builder": patch +"electron-builder-squirrel-windows": patch +"electron-forge-maker-appimage": patch +"electron-forge-maker-nsis": patch +"electron-forge-maker-nsis-web": patch +"electron-forge-maker-snap": patch +"electron-publish": patch +"electron-updater": patch +--- + +chore: migrating to typedoc and updating/improving type+interface definitions diff --git a/.gitignore b/.gitignore index bab82025b28..00536b5579d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,14 +15,14 @@ out/ /test/test-report.xml /packages/dmg-builder/vendor/ -/packages/electron-builder/README.md /scripts/jsdoc/out/ /scripts/renderer/out/ -electron-builder-*.d.ts +docs/ +site/ -/site/ +electron-builder-*.d.ts tsconfig.tsbuildinfo diff --git a/Pipfile b/Pipfile index 75bfc09193f..8bee6e35fed 100644 --- a/Pipfile +++ b/Pipfile @@ -4,13 +4,13 @@ verify_ssl = true name = "pypi" [packages] -mkdocs-material = "<10" -mkdocs = "<1.7" -markdown-include = "<0.8.1" -pymdown-extensions = "~=10.3" -pygments = "~=2.0" +mkdocs = "*" +mkdocs-include-markdown-plugin = "*" +pymdown-extensions = "*" +pygments = "*" +mkdocs-material = "*" [dev-packages] [requires] -python_version = "3" +python_version = "^3.8" diff --git a/Pipfile.lock b/Pipfile.lock index 8ec3ce22c42..bb5413a4d37 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "597428d6e8c1f26a5a51ff16ade3f3bebe4a1de1882a88e8effdcd437f855124" + "sha256": "9b8f01d07b3b0c5c2d8a17266f02f10d0d282b79732c6c80073fb5827382ad7f" }, "pipfile-spec": 6, "requires": { - "python_version": "3" + "python_version": "^3.8" }, "sources": [ { @@ -18,19 +18,27 @@ "default": { "babel": { "hashes": [ - "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb", - "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413" + "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", + "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" ], "markers": "python_version >= '3.8'", - "version": "==2.15.0" + "version": "==2.16.0" + }, + "bracex": { + "hashes": [ + "sha256:0725da5045e8d37ea9592ab3614d8b561e22c3c5fde3964699be672e072ab611", + "sha256:d2fcf4b606a82ac325471affe1706dd9bbaa3536c91ef86a31f6b766f3dad1d0" + ], + "markers": "python_version >= '3.8'", + "version": "==2.5" }, "certifi": { "hashes": [ - "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b", - "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90" + "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" ], "markers": "python_version >= '3.6'", - "version": "==2024.7.4" + "version": "==2024.8.30" }, "charset-normalizer": { "hashes": [ @@ -153,19 +161,11 @@ }, "idna": { "hashes": [ - "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", - "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" - ], - "markers": "python_version >= '3.5'", - "version": "==3.7" - }, - "importlib-metadata": { - "hashes": [ - "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f", - "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version < '3.10'", - "version": "==8.0.0" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "jinja2": { "hashes": [ @@ -177,19 +177,11 @@ }, "markdown": { "hashes": [ - "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f", - "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224" + "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", + "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803" ], "markers": "python_version >= '3.8'", - "version": "==3.6" - }, - "markdown-include": { - "hashes": [ - "sha256:b8f6b6f4e8b506cbe773d7e26c74a97d1354c35f3a3452d3449140a8f578d665", - "sha256:d12fb51500c46334a53608635035c78b7d8ad7f772566f70b8a6a9b2ef2ddbf5" - ], - "index": "pypi", - "version": "==0.8.0" + "version": "==3.7" }, "markupsafe": { "hashes": [ @@ -267,11 +259,12 @@ }, "mkdocs": { "hashes": [ - "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7", - "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512" + "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", + "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e" ], "index": "pypi", - "version": "==1.6.0" + "markers": "python_version >= '3.8'", + "version": "==1.6.1" }, "mkdocs-get-deps": { "hashes": [ @@ -281,13 +274,23 @@ "markers": "python_version >= '3.8'", "version": "==0.2.0" }, + "mkdocs-include-markdown-plugin": { + "hashes": [ + "sha256:d293950f6499d2944291ca7b9bc4a60e652bbfd3e3a42b564f6cceee268694e7", + "sha256:f2bd5026650492a581d2fd44be6c22f90391910d76582b96a34c264f2d17875d" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==6.2.2" + }, "mkdocs-material": { "hashes": [ - "sha256:3e977598ec15a4ddad5c4dfc9e08edab6023edb51e88f0729bd27be77e3d322a", - "sha256:afc1f508e2662ded95f0a35a329e8a5acd73ee88ca07ba73836eb6fcdae5d8b4" + "sha256:1e60ddf716cfb5679dfd65900b8a25d277064ed82d9a53cd5190e3f894df7840", + "sha256:54caa8be708de2b75167fd4d3b9f3d949579294f49cb242515d4653dbee9227e" ], "index": "pypi", - "version": "==9.5.29" + "markers": "python_version >= '3.8'", + "version": "==9.5.34" }, "mkdocs-material-extensions": { "hashes": [ @@ -307,9 +310,10 @@ }, "paginate": { "hashes": [ - "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d" + "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", + "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591" ], - "version": "==0.5.6" + "version": "==0.5.7" }, "pathspec": { "hashes": [ @@ -321,11 +325,11 @@ }, "platformdirs": { "hashes": [ - "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", - "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3" + "sha256:50a5450e2e84f44539718293cbb1da0a0885c9d14adf21b77bae4e66fc99d9b5", + "sha256:d4e0b7d8ec176b341fb03cb11ca12d0276faa8c485f9cd218f613840463fc2c0" ], "markers": "python_version >= '3.8'", - "version": "==4.2.2" + "version": "==4.3.3" }, "pygments": { "hashes": [ @@ -333,15 +337,17 @@ "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.18.0" }, "pymdown-extensions": { "hashes": [ - "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940", - "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb" + "sha256:6ff740bcd99ec4172a938970d42b96128bdc9d4b9bcad72494f29921dc69b753", + "sha256:d323f7e90d83c86113ee78f3fe62fc9dee5f56b54d912660703ea1816fed5626" ], "index": "pypi", - "version": "==10.8.1" + "markers": "python_version >= '3.8'", + "version": "==10.9" }, "python-dateutil": { "hashes": [ @@ -353,60 +359,62 @@ }, "pyyaml": { "hashes": [ - "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", - "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", - "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", - "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", - "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", - "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", - "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", - "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", - "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", - "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", - "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", - "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", - "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", - "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", - "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", - "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", - "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", - "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", - "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", - "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", - "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", - "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", - "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", - "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", - "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", - "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", - "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", - "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", - "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", - "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", - "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", - "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", - "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", - "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", - "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", - "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", - "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", - "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", - "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", - "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", - "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", - "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", - "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", - "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", - "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", - "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", - "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", - "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", - "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", - "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", - "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", + "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", + "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", + "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", + "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", + "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", + "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", + "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", + "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", + "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", + "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", + "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", + "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", + "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", + "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", + "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", + "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", + "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", + "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", + "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", + "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", + "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", + "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", + "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", + "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", + "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", + "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", + "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", + "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", + "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", + "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", + "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", + "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", + "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", + "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", + "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", + "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", + "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", + "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", + "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", + "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" ], - "markers": "python_version >= '3.6'", - "version": "==6.0.1" + "markers": "python_version >= '3.8'", + "version": "==6.0.2" }, "pyyaml-env-tag": { "hashes": [ @@ -418,88 +426,103 @@ }, "regex": { "hashes": [ - "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649", - "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35", - "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb", - "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68", - "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5", - "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133", - "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0", - "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d", - "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da", - "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f", - "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d", - "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53", - "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa", - "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a", - "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890", - "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67", - "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c", - "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2", - "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced", - "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741", - "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f", - "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa", - "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf", - "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4", - "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5", - "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2", - "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384", - "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7", - "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014", - "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704", - "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5", - "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2", - "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49", - "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1", - "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694", - "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629", - "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6", - "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435", - "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c", - "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835", - "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e", - "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201", - "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62", - "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5", - "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16", - "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f", - "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1", - "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f", - "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f", - "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145", - "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3", - "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed", - "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143", - "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca", - "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9", - "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa", - "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850", - "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80", - "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe", - "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656", - "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388", - "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1", - "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294", - "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3", - "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d", - "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b", - "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40", - "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600", - "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c", - "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569", - "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456", - "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9", - "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb", - "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e", - "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f", - "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d", - "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a", - "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a", - "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796" + "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623", + "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199", + "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664", + "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f", + "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca", + "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066", + "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca", + "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39", + "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d", + "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6", + "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35", + "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408", + "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5", + "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a", + "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9", + "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92", + "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766", + "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168", + "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca", + "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508", + "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df", + "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf", + "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b", + "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4", + "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268", + "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6", + "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c", + "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62", + "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231", + "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36", + "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba", + "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4", + "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e", + "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822", + "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4", + "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d", + "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71", + "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50", + "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d", + "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad", + "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8", + "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8", + "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8", + "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd", + "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16", + "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664", + "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a", + "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f", + "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd", + "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a", + "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9", + "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199", + "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d", + "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963", + "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009", + "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a", + "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679", + "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96", + "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42", + "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8", + "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e", + "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7", + "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8", + "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802", + "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366", + "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137", + "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784", + "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29", + "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3", + "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771", + "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60", + "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a", + "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4", + "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0", + "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84", + "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd", + "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1", + "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776", + "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142", + "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89", + "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c", + "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8", + "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35", + "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a", + "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86", + "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9", + "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64", + "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554", + "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85", + "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb", + "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0", + "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8", + "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb", + "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919" ], "markers": "python_version >= '3.8'", - "version": "==2024.5.15" + "version": "==2024.9.11" }, "requests": { "hashes": [ @@ -519,57 +542,55 @@ }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.8'", - "version": "==2.2.2" + "version": "==2.2.3" }, "watchdog": { "hashes": [ - "sha256:0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7", - "sha256:03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767", - "sha256:093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175", - "sha256:123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459", - "sha256:17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5", - "sha256:206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429", - "sha256:4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6", - "sha256:4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d", - "sha256:611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7", - "sha256:62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28", - "sha256:667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235", - "sha256:6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57", - "sha256:7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a", - "sha256:998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5", - "sha256:a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709", - "sha256:ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee", - "sha256:ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84", - "sha256:bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd", - "sha256:c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba", - "sha256:cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db", - "sha256:d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682", - "sha256:d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35", - "sha256:d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d", - "sha256:da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645", - "sha256:dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253", - "sha256:e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193", - "sha256:e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b", - "sha256:eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44", - "sha256:ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b", - "sha256:f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625", - "sha256:f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e", - "sha256:f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5" - ], - "markers": "python_version >= '3.8'", - "version": "==4.0.1" - }, - "zipp": { - "hashes": [ - "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19", - "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c" + "sha256:14dd4ed023d79d1f670aa659f449bcd2733c33a35c8ffd88689d9d243885198b", + "sha256:29e4a2607bd407d9552c502d38b45a05ec26a8e40cc7e94db9bb48f861fa5abc", + "sha256:3960136b2b619510569b90f0cd96408591d6c251a75c97690f4553ca88889769", + "sha256:3e8d5ff39f0a9968952cce548e8e08f849141a4fcc1290b1c17c032ba697b9d7", + "sha256:53ed1bf71fcb8475dd0ef4912ab139c294c87b903724b6f4a8bd98e026862e6d", + "sha256:5597c051587f8757798216f2485e85eac583c3b343e9aa09127a3a6f82c65ee8", + "sha256:638bcca3d5b1885c6ec47be67bf712b00a9ab3d4b22ec0881f4889ad870bc7e8", + "sha256:6bec703ad90b35a848e05e1b40bf0050da7ca28ead7ac4be724ae5ac2653a1a0", + "sha256:726eef8f8c634ac6584f86c9c53353a010d9f311f6c15a034f3800a7a891d941", + "sha256:72990192cb63872c47d5e5fefe230a401b87fd59d257ee577d61c9e5564c62e5", + "sha256:7d1aa7e4bb0f0c65a1a91ba37c10e19dabf7eaaa282c5787e51371f090748f4b", + "sha256:8c47150aa12f775e22efff1eee9f0f6beee542a7aa1a985c271b1997d340184f", + "sha256:901ee48c23f70193d1a7bc2d9ee297df66081dd5f46f0ca011be4f70dec80dab", + "sha256:963f7c4c91e3f51c998eeff1b3fb24a52a8a34da4f956e470f4b068bb47b78ee", + "sha256:9814adb768c23727a27792c77812cf4e2fd9853cd280eafa2bcfa62a99e8bd6e", + "sha256:aa9cd6e24126d4afb3752a3e70fce39f92d0e1a58a236ddf6ee823ff7dba28ee", + "sha256:b6dc8f1d770a8280997e4beae7b9a75a33b268c59e033e72c8a10990097e5fde", + "sha256:b84bff0391ad4abe25c2740c7aec0e3de316fdf7764007f41e248422a7760a7f", + "sha256:ba32efcccfe2c58f4d01115440d1672b4eb26cdd6fc5b5818f1fb41f7c3e1889", + "sha256:bda40c57115684d0216556671875e008279dea2dc00fcd3dde126ac8e0d7a2fb", + "sha256:c4a440f725f3b99133de610bfec93d570b13826f89616377715b9cd60424db6e", + "sha256:d010be060c996db725fbce7e3ef14687cdcc76f4ca0e4339a68cc4532c382a73", + "sha256:d2ab34adc9bf1489452965cdb16a924e97d4452fcf88a50b21859068b50b5c3b", + "sha256:d7594a6d32cda2b49df3fd9abf9b37c8d2f3eab5df45c24056b4a671ac661619", + "sha256:d961f4123bb3c447d9fcdcb67e1530c366f10ab3a0c7d1c0c9943050936d4877", + "sha256:dae7a1879918f6544201d33666909b040a46421054a50e0f773e0d870ed7438d", + "sha256:dcebf7e475001d2cdeb020be630dc5b687e9acdd60d16fea6bb4508e7b94cf76", + "sha256:f627c5bf5759fdd90195b0c0431f99cff4867d212a67b384442c51136a098ed7", + "sha256:f8b2918c19e0d48f5f20df458c84692e2a054f02d9df25e6c3c930063eca64c1", + "sha256:fb223456db6e5f7bd9bbd5cd969f05aae82ae21acc00643b60d81c770abd402b" + ], + "markers": "python_version >= '3.9'", + "version": "==5.0.2" + }, + "wcmatch": { + "hashes": [ + "sha256:567d66b11ad74384954c8af86f607857c3bdf93682349ad32066231abd556c92", + "sha256:af25922e2b6dbd1550fa37a4c8de7dd558d6c1bb330c641de9b907b9776cb3c4" ], "markers": "python_version >= '3.8'", - "version": "==3.19.2" + "version": "==9.0" } }, "develop": {} diff --git a/README.md b/README.md index 0d01dc2ebab..fa54b2e65ad 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Always looking for community contributions! 👀 Setting up a [dev environment](
- WorkFlowy + WorkFlowy
Notes, Tasks, Projects.
All in a Single Place.
@@ -24,7 +24,7 @@ Always looking for community contributions! 👀 Setting up a [dev environment](
- Tidepool + Tidepool
Your gateway to understanding your diabetes data
@@ -34,7 +34,7 @@ Always looking for community contributions! 👀 Setting up a [dev environment](
- Keygen + Keygen
An open, source-available software licensing and distribution API
@@ -46,7 +46,7 @@ Always looking for community contributions! 👀 Setting up a [dev environment](
- ToDesktop + ToDesktop
ToDesktop: An all-in-one platform for building and releasing Electron apps
@@ -56,7 +56,7 @@ Always looking for community contributions! 👀 Setting up a [dev environment](
- Dashcam + Dashcam
Dashcam: Capture the steps to reproduce any bug with video crash reports for Electron.
@@ -78,24 +78,24 @@ See the full documentation on [electron.build](https://www.electron.build). * [Auto Update](https://www.electron.build/auto-update) ready application packaging. * Numerous target formats: * All platforms: `7z`, `zip`, `tar.xz`, `tar.7z`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir` (unpacked directory). - * [macOS](https://www.electron.build/configuration/mac): `dmg`, `pkg`, `mas`. - * [Linux](https://www.electron.build/configuration/linux): [AppImage](http://appimage.org), [snap](http://snapcraft.io), debian package (`deb`), `rpm`, `freebsd`, `pacman`, `p5p`, `apk`. - * [Windows](https://www.electron.build/configuration/win): `nsis` (Installer), `nsis-web` (Web installer), `portable` (portable app without installation), AppX (Windows Store), MSI, Squirrel.Windows. -* [Publishing artifacts](https://www.electron.build/configuration/publish) to GitHub Releases, Amazon S3, DigitalOcean Spaces and Bintray. + * [macOS](https://www.electron.build/mac): `dmg`, `pkg`, `mas`. + * [Linux](https://www.electron.build/linux): [AppImage](http://appimage.org), [snap](http://snapcraft.io), debian package (`deb`), `rpm`, `freebsd`, `pacman`, `p5p`, `apk`. + * [Windows](https://www.electron.build/win): `nsis` (Installer), `nsis-web` (Web installer), `portable` (portable app without installation), AppX (Windows Store), MSI, Squirrel.Windows. +* [Publishing artifacts](https://www.electron.build/publish) to GitHub Releases, Amazon S3, DigitalOcean Spaces and Bintray. * Advanced building: * Pack in a distributable format [already packaged app](https://www.electron.build/#pack-only-in-a-distributable-format). * Separate [build steps](https://github.com/electron-userland/electron-builder/issues/1102#issuecomment-271845854). * Build and publish in parallel, using hard links on CI server to reduce IO and disk space usage. * [electron-compile](https://github.com/electron/electron-compile) support (compile for release-time on the fly on build). * [Docker](https://www.electron.build/multi-platform-build#docker) images to build Electron app for Linux or Windows on any platform. -* [Proton Native](https://www.electron.build/configuration/configuration/#proton-native) support. +* [Proton Native](https://www.electron.build/configuration/#proton-native) support. * Downloads all required tools files on demand automatically (e.g. to code sign windows application, to make AppX), no need to setup. -| Question | Answer | -|----------|-------| -| “I want to configure electron-builder” | [See options](https://electron.build/configuration/configuration) | -| “I found a bug or I have a question” | [Open an issue](https://github.com/electron-userland/electron-builder/issues/new) | -| “I want to support development” | [Donate](https://www.electron.build/donate) | +| Question | Answer | +| -------------------------------------- | --------------------------------------------------------------------------------- | +| “I want to configure electron-builder” | [See options](https://electron.build/configuration) | +| “I found a bug or I have a question” | [Open an issue](https://github.com/electron-userland/electron-builder/issues/new) | +| “I want to support development” | [Donate](https://www.electron.build/donate) | ## Installation [Yarn](http://yarnpkg.com/) is [strongly](https://github.com/electron-userland/electron-builder/issues/1147#issuecomment-276284477) recommended instead of npm. @@ -129,9 +129,9 @@ will declare to use node-modules instead of PnP. [electron-webpack-quick-start](https://github.com/electron-userland/electron-webpack-quick-start) is a recommended way to create a new Electron application. See [Boilerplates](https://www.electron.build/#boilerplates). -1. Specify the standard fields in the application `package.json` — [name](https://electron.build/configuration/configuration#Metadata-name), `description`, `version` and [author](https://docs.npmjs.com/files/package.json#people-fields-author-contributors). +1. Specify the standard fields in the application `package.json` — [name](https://electron.build./configuration.md#Metadata-name), `description`, `version` and [author](https://docs.npmjs.com/files/package.json#people-fields-author-contributors). -2. Specify the [build](https://electron.build/configuration/configuration#build) configuration in the `package.json` as follows: +2. Specify the [build](https://electron.build./configuration.md#build) configuration in the `package.json` as follows: ```json "build": { "appId": "your.id", @@ -140,7 +140,7 @@ will declare to use node-modules instead of PnP. } } ``` - See [all options](https://www.electron.build/configuration/configuration). Option [files](https://www.electron.build/configuration/contents#files) to indicate which files should be packed in the final application, including the entry file, maybe required. + See [all options](https://www.electron.build/configuration). Option [files](https://www.electron.build/contents#files) to indicate which files should be packed in the final application, including the entry file, maybe required. You can also use separate configuration files, such as `js`, `ts`, `yml`, and `json`/`json5`. See [read-config-file](https://www.npmjs.com/package/read-config-file) for supported extensions. [JS Example for programmatic API](https://www.electron.build/api/programmatic-usage) 3. Add [icons](https://www.electron.build/icons). @@ -156,12 +156,70 @@ will declare to use node-modules instead of PnP. To ensure your native dependencies are always matched electron version, simply add script `"postinstall": "electron-builder install-app-deps"` to your `package.json`. -5. If you have native addons of your own that are part of the application (not as a dependency), set [nodeGypRebuild](https://www.electron.build/configuration/configuration#Configuration-nodeGypRebuild) to `true`. +5. If you have native addons of your own that are part of the application (not as a dependency), set [nodeGypRebuild](https://www.electron.build./configuration.md#Configuration-nodeGypRebuild) to `true`. -Please note that everything is packaged into an asar archive [by default](https://electron.build/configuration/configuration#Configuration-asar). +Please note that everything is packaged into an asar archive [by default](https://electron.build./configuration.md#Configuration-asar). For an app that will be shipped to production, you should sign your application. See [Where to buy code signing certificates](https://www.electron.build/code-signing#where-to-buy-code-signing-certificate). +## Programmatic Usage +See `node_modules/electron-builder/out/index.d.ts`. Typings for TypeScript are provided and also can be found [here](/api/electron-builder.md). + +Code snippit provided below is also shown "in action" [here](/api/programmatic-usage.md) as well. +```js +"use strict" + +const builder = require("electron-builder") +const Platform = builder.Platform + +// Promise is returned +builder.build({ + targets: Platform.MAC.createTarget(), + config: { + "//": "build options, see https://goo.gl/QQXmcV" + } +}) + .then(() => { + // handle result + }) + .catch((error) => { + // handle error + }) +``` + +## Boilerplates + +* [electron-webpack-quick-start](https://github.com/electron-userland/electron-webpack-quick-start) — A bare minimum project structure to get started developing with [electron-webpack](https://github.com/electron-userland/electron-webpack). Recommended. +* [electron-react-boilerplate](https://github.com/chentsulin/electron-react-boilerplate) A boilerplate for scalable cross-platform desktop apps. +* [electron-react-redux-boilerplate](https://github.com/jschr/electron-react-redux-boilerplate) A minimal boilerplate to get started with Electron, React and Redux. +* [electron-boilerplate](https://github.com/szwacz/electron-boilerplate) A minimalistic yet comprehensive boilerplate application. +* [Vue CLI 3 plugin for Electron](https://nklayman.github.io/vue-cli-plugin-electron-builder) A Vue CLI 3 plugin for Electron with no required configuration. +* [electron-vue-vite](https://github.com/caoxiemeihao/electron-vue-vite) A real simple Electron + Vue3 + Vite5 boilerplate. +* [vite-electron-builder](https://github.com/cawa-93/vite-electron-builder) Secure boilerplate for Electron app based on Vite. TypeScript + Vue/React/Angular/Svelte/Vanilla + +## Debug + +Set the `DEBUG` environment variable to debug what electron-builder is doing: +```bash +DEBUG=electron-builder +``` + +`FPM_DEBUG` env to add more details about building linux targets (except snap and appimage). + +`DEBUG_DMG=true` env var to add more debugging/verbosity from `hdiutil` (macOS). + +!!! tip "cmd" + On [Windows](https://github.com/visionmedia/debug#windows-command-prompt-notes) the environment variable is set using the set command. + ```bash + set DEBUG=electron-builder + ``` + +!!! tip "PowerShell" + PowerShell uses different syntax to set environment variables. + ```bash + $env:DEBUG=electron-builder + ``` + ## Donate We do this open source work in our free time. If you'd like us to invest more time on it, please [donate](https://www.electron.build/donate). diff --git a/docs/api/electron-builder.md b/docs/api/electron-builder.md deleted file mode 100644 index c8631996f82..00000000000 --- a/docs/api/electron-builder.md +++ /dev/null @@ -1,4304 +0,0 @@ -Developer API only. See [Configuration](../configuration/configuration.md) for user documentation. - - -

Modules

-
-
electron-builder
-
-
app-builder-lib
-
-
dmg-builder
-
-
electron-publish
-
-
electron-updater
-
-
-

-

electron-builder

- -

-

electron-builder.Arch : enum

-

Kind: enum of electron-builder
-Properties

- -

-

electron-builder.build(rawOptions)Promise<Array<String>>

-

Kind: method of electron-builder

- - - - - - - - - - - - - -
ParamType
rawOptionsCliOptions
-

-

electron-builder.createTargets(platforms, type, arch)Map<Platform | Map<Arch | Array<String>>>

-

Kind: method of electron-builder

- - - - - - - - - - - - - - - - - - - - - -
ParamType
platformsArray<Platform>
typeString | “undefined”
archString | “undefined”
-

-

electron-builder.publish(args)Promise< | Array>

-

Kind: method of electron-builder

- - - - - - - - - - - - - -
ParamType
argsObject<String, any>
-

-

app-builder-lib

- -

-

ArtifactBuildStarted

-

Kind: interface of app-builder-lib
-Properties

- -

-

ArtifactCreatedmodule:packages/electron-publish/out/publisher.UploadTask

-

Kind: interface of app-builder-lib
-Extends: module:packages/electron-publish/out/publisher.UploadTask
-Properties

- -

-

BeforeBuildContext

-

Kind: interface of app-builder-lib
-Properties

- -

-

BuildResult

-

Kind: interface of app-builder-lib
-Properties

- -

-

CertificateFromStoreInfo

-

Kind: interface of app-builder-lib
-Properties

- -

-

CustomNsisBinary

-

Kind: interface of app-builder-lib
-Properties

- -

-

FileCodeSigningInfo

-

Kind: interface of app-builder-lib
-Properties

- -

-

Framework

-

Kind: interface of app-builder-lib
-Properties

- -

Methods

- -

-

framework.afterPack(context)Promise<any>

- - - - - - - - - - - - - -
ParamType
contextmodule:app-builder-lib/out/configuration.PackContext
-

-

framework.beforeCopyExtraFiles(options)Promise<any>

- - - - - - - - - - - - - -
ParamType
optionsmodule:app-builder-lib/out/Framework.BeforeCopyExtraFilesOptions
-

-

framework.createTransformer()null | module:builder-util/out/fs.__type

-

-

framework.getDefaultIcon(platform)null | String

- - - - - - - - - - - - - -
ParamType
platformPlatform
-

-

framework.getExcludedDependencies(platform)null | Array

- - - - - - - - - - - - - -
ParamType
platformPlatform
-

-

framework.getMainFile(platform)null | String

- - - - - - - - - - - - - -
ParamType
platformPlatform
-

-

framework.prepareApplicationStageDirectory(options)Promise<any>

- - - - - - - - - - - - - -
ParamType
optionsPrepareApplicationStageDirectoryOptions
-

-

PlugDescriptor

-

Kind: interface of app-builder-lib
-

-

SlotDescriptor

-

Kind: interface of app-builder-lib
-

-

SourceRepositoryInfo

-

Kind: interface of app-builder-lib
-Properties

- -

-

AppInfo

-

Kind: class of app-builder-lib
-Properties

- -

Methods

- -

-

appInfo.computePackageUrl()Promise< | String>

-

-

appInfo.getVersionInWeirdWindowsForm(isSetBuildNumber)String

- - - - - - - - - - - -
Param
isSetBuildNumber
-

-

LinuxPackager ⇐ PlatformPackager

-

Kind: class of app-builder-lib
-Extends: PlatformPackager
-Properties

- -

Methods

- -

-

linuxPackager.createTargets(targets, mapper)

-

Overrides: createTargets

- - - - - - - - - - - - - - - - - -
ParamType
targetsArray<String>
mappercallback
-

-

linuxPackager.artifactPatternConfig(targetSpecificOptions, defaultPattern)module:app-builder-lib/out/platformPackager.__object

- - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
defaultPatternString | undefined
-

-

linuxPackager.computeSafeArtifactName(suggestedName, ext, arch, skipDefaultArch, defaultArch, safePattern)null | String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
suggestedNameString | “undefined”
extString
archArch | “undefined”
skipDefaultArch
defaultArchString
safePattern
-

-

linuxPackager.getCscLink(extraEnvName)undefined | null | String

- - - - - - - - - - - - - -
ParamType
extraEnvNameString | “undefined”
-

-

linuxPackager.getCscPassword()String

-

-

linuxPackager.getDefaultFrameworkIcon()null | String

-

-

linuxPackager.dispatchArtifactCreated(file, target, arch, safeArtifactName)Promise<void>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
fileString
targetTarget | “undefined”
archArch | “undefined”
safeArtifactNameString | “undefined”
-

-

linuxPackager.doGetCscPassword()undefined | null | String

-

-

linuxPackager.getElectronDestinationDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

linuxPackager.getElectronSrcDir(dist)String

- - - - - - - - - - - - - -
ParamType
distString
-

-

linuxPackager.expandArtifactBeautyNamePattern(targetSpecificOptions, ext, arch)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
-

-

linuxPackager.expandArtifactNamePattern(targetSpecificOptions, ext, arch, defaultPattern, skipDefaultArch, defaultArch)String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
defaultPatternString
skipDefaultArch
defaultArchString
-

-

linuxPackager.expandMacro(pattern, arch, extra, isProductNameSanitized)String

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
patternString
archString | “undefined”
extraany
isProductNameSanitized
-

-

linuxPackager.generateName2(ext, classifier, deployment)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
extString | “undefined”
classifierString | “undefined” | undefined
deploymentBoolean
-

-

linuxPackager.getIconPath()Promise< | String>

-

-

linuxPackager.getMacOsResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

linuxPackager.pack(outDir, arch, targets, taskManager)Promise<any>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
outDirString
archArch
targetsArray<Target>
taskManagerAsyncTaskManager
-

-

linuxPackager.resolveIcon(sources, fallbackSources, outputFormat)Promise<Array<module:app-builder-lib/out/platformPackager.IconInfo>>

- - - - - - - - - - - - - - - - - - - - - -
ParamType
sourcesArray<String>
fallbackSourcesArray<String>
outputFormat“set” | “icns” | “ico”
-

-

linuxPackager.getResource(custom, names)Promise< | String>

- - - - - - - - - - - - - - - - - -
ParamType
customString | “undefined” | undefined
namesArray<String>
-

-

linuxPackager.getResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

linuxPackager.getTempFile(suffix)Promise<String>

- - - - - - - - - - - - - -
ParamType
suffixString
-

-

MacPackager ⇐ PlatformPackager

-

Kind: class of app-builder-lib
-Extends: PlatformPackager
-Properties

- -

Methods

- -

-

macPackager.applyCommonInfo(appPlist, contentsPath)Promise<void>

- - - - - - - - - - - - - - - - - -
ParamType
appPlistany
contentsPathString
-

-

macPackager.createTargets(targets, mapper)

-

Overrides: createTargets

- - - - - - - - - - - - - - - - - -
ParamType
targetsArray<String>
mappercallback
-

-

macPackager.getElectronDestinationDir(appOutDir)String

-

Overrides: getElectronDestinationDir

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

macPackager.getElectronSrcDir(dist)String

-

Overrides: getElectronSrcDir

- - - - - - - - - - - - - -
ParamType
distString
-

-

macPackager.getIconPath()Promise< | String>

-

Overrides: getIconPath
-

-

macPackager.pack(outDir, arch, targets, taskManager)Promise<void>

-

Overrides: pack

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
outDirString
archArch
targetsArray<Target>
taskManagerAsyncTaskManager
-

-

macPackager.artifactPatternConfig(targetSpecificOptions, defaultPattern)module:app-builder-lib/out/platformPackager.__object

- - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
defaultPatternString | undefined
-

-

macPackager.computeSafeArtifactName(suggestedName, ext, arch, skipDefaultArch, defaultArch, safePattern)null | String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
suggestedNameString | “undefined”
extString
archArch | “undefined”
skipDefaultArch
defaultArchString
safePattern
-

-

macPackager.getCscLink(extraEnvName)undefined | null | String

- - - - - - - - - - - - - -
ParamType
extraEnvNameString | “undefined”
-

-

macPackager.getCscPassword()String

-

-

macPackager.getDefaultFrameworkIcon()null | String

-

-

macPackager.dispatchArtifactCreated(file, target, arch, safeArtifactName)Promise<void>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
fileString
targetTarget | “undefined”
archArch | “undefined”
safeArtifactNameString | “undefined”
-

-

macPackager.doGetCscPassword()undefined | null | String

-

-

macPackager.expandArtifactBeautyNamePattern(targetSpecificOptions, ext, arch)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
-

-

macPackager.expandArtifactNamePattern(targetSpecificOptions, ext, arch, defaultPattern, skipDefaultArch, defaultArch)String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
defaultPatternString
skipDefaultArch
defaultArchString
-

-

macPackager.expandMacro(pattern, arch, extra, isProductNameSanitized)String

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
patternString
archString | “undefined”
extraany
isProductNameSanitized
-

-

macPackager.generateName2(ext, classifier, deployment)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
extString | “undefined”
classifierString | “undefined” | undefined
deploymentBoolean
-

-

macPackager.getMacOsResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

macPackager.resolveIcon(sources, fallbackSources, outputFormat)Promise<Array<module:app-builder-lib/out/platformPackager.IconInfo>>

- - - - - - - - - - - - - - - - - - - - - -
ParamType
sourcesArray<String>
fallbackSourcesArray<String>
outputFormat“set” | “icns” | “ico”
-

-

macPackager.getResource(custom, names)Promise< | String>

- - - - - - - - - - - - - - - - - -
ParamType
customString | “undefined” | undefined
namesArray<String>
-

-

macPackager.getResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

macPackager.getTempFile(suffix)Promise<String>

- - - - - - - - - - - - - -
ParamType
suffixString
-

-

Packager

-

Kind: class of app-builder-lib
-Properties

- -

Methods

- -

-

packager.addAfterPackHandler(handler)

- - - - - - - - - - - - - -
ParamType
handlercallback
-

-

packager.afterPack(context)Promise<any>

- - - - - - - - - - - - - -
ParamType
contextmodule:app-builder-lib/out/configuration.PackContext
-

-

packager.artifactCreated(handler)Packager

- - - - - - - - - - - - - -
ParamType
handlercallback
-

-

packager.build(repositoryInfo)Promise<BuildResult>

- - - - - - - - - - - - - -
ParamType
repositoryInfoSourceRepositoryInfo
-

-

packager.callAppxManifestCreated(path)Promise<void>

- - - - - - - - - - - - - -
ParamType
pathString
-

-

packager.callArtifactBuildCompleted(event)Promise<void>

- - - - - - - - - - - - - -
ParamType
eventArtifactCreated
-

-

packager.callArtifactBuildStarted(event, logFields)Promise<void>

- - - - - - - - - - - - - - - - - -
ParamType
eventArtifactBuildStarted
logFieldsany
-

-

packager.callMsiProjectCreated(path)Promise<void>

- - - - - - - - - - - - - -
ParamType
pathString
-

-

packager.dispatchArtifactCreated(event)

-

Only for sub artifacts (update info), for main artifacts use callArtifactBuildCompleted.

- - - - - - - - - - - - - -
ParamType
eventArtifactCreated
-

-

packager.disposeOnBuildFinish(disposer)

- - - - - - - - - - - - - -
ParamType
disposercallback
-

-

packager.installAppDependencies(platform, arch)Promise<any>

- - - - - - - - - - - - - - - - - -
ParamType
platformPlatform
archArch
-

-

packager.getNodeDependencyInfo(platform, flatten)Lazy<Array<module:app-builder-lib/out/util/packageDependencies.NodeModuleInfo | module:app-builder-lib/out/util/packageDependencies.NodeModuleDirInfo>>

- - - - - - - - - - - - - - - - - -
ParamType
platformPlatform | “undefined”
flattenBoolean
-

-

packager.validateConfig()Promise<void>

-

-

Platform

-

Kind: class of app-builder-lib
-Properties

- -

Methods

- -

-

platform.createTarget(type, archs)Map<Platform | Map<Arch | Array<String>>>

- - - - - - - - - - - - - - - - - -
ParamType
typeString | Array<String> | “undefined”
archsArray<Arch>
-

-

platform.current()Platform

-

-

platform.fromString(name)Platform

- - - - - - - - - - - - - -
ParamType
nameString
-

-

platform.toString()String

-

-

PlatformPackager

-

Kind: class of app-builder-lib
-Properties

- -

Methods

- -

-

platformPackager.artifactPatternConfig(targetSpecificOptions, defaultPattern)module:app-builder-lib/out/platformPackager.__object

- - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
defaultPatternString | undefined
-

-

platformPackager.computeSafeArtifactName(suggestedName, ext, arch, skipDefaultArch, defaultArch, safePattern)null | String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
suggestedNameString | “undefined”
extString
archArch | “undefined”
skipDefaultArch
defaultArchString
safePattern
-

-

platformPackager.createTargets(targets, mapper)

- - - - - - - - - - - - - - - - - -
ParamType
targetsArray<String>
mappercallback
-

-

platformPackager.getCscLink(extraEnvName)undefined | null | String

- - - - - - - - - - - - - -
ParamType
extraEnvNameString | “undefined”
-

-

platformPackager.getCscPassword()String

-

-

platformPackager.getDefaultFrameworkIcon()null | String

-

-

platformPackager.dispatchArtifactCreated(file, target, arch, safeArtifactName)Promise<void>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
fileString
targetTarget | “undefined”
archArch | “undefined”
safeArtifactNameString | “undefined”
-

-

platformPackager.doGetCscPassword()undefined | null | String

-

-

platformPackager.getElectronDestinationDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

platformPackager.getElectronSrcDir(dist)String

- - - - - - - - - - - - - -
ParamType
distString
-

-

platformPackager.expandArtifactBeautyNamePattern(targetSpecificOptions, ext, arch)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
-

-

platformPackager.expandArtifactNamePattern(targetSpecificOptions, ext, arch, defaultPattern, skipDefaultArch, defaultArch)String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
defaultPatternString
skipDefaultArch
defaultArchString
-

-

platformPackager.expandMacro(pattern, arch, extra, isProductNameSanitized)String

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
patternString
archString | “undefined”
extraany
isProductNameSanitized
-

-

platformPackager.generateName2(ext, classifier, deployment)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
extString | “undefined”
classifierString | “undefined” | undefined
deploymentBoolean
-

-

platformPackager.getIconPath()Promise< | String>

-

-

platformPackager.getMacOsResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

platformPackager.pack(outDir, arch, targets, taskManager)Promise<any>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
outDirString
archArch
targetsArray<Target>
taskManagerAsyncTaskManager
-

-

platformPackager.resolveIcon(sources, fallbackSources, outputFormat)Promise<Array<module:app-builder-lib/out/platformPackager.IconInfo>>

- - - - - - - - - - - - - - - - - - - - - -
ParamType
sourcesArray<String>
fallbackSourcesArray<String>
outputFormat“set” | “icns” | “ico”
-

-

platformPackager.getResource(custom, names)Promise< | String>

- - - - - - - - - - - - - - - - - -
ParamType
customString | “undefined” | undefined
namesArray<String>
-

-

platformPackager.getResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

platformPackager.getTempFile(suffix)Promise<String>

- - - - - - - - - - - - - -
ParamType
suffixString
-

-

PublishManager ⇐ module:packages/electron-publish/out/publisher.PublishContext

-

Kind: class of app-builder-lib
-Extends: module:packages/electron-publish/out/publisher.PublishContext
-Properties

- -

Methods

- -

-

publishManager.awaitTasks()Promise<void>

-

-

publishManager.cancelTasks()

-

-

publishManager.getGlobalPublishConfigurations()Promise< | Array>

-

-

publishManager.scheduleUpload(publishConfig, event, appInfo)

- - - - - - - - - - - - - - - - - - - - - -
ParamType
publishConfigPublishConfiguration
eventmodule:packages/electron-publish/out/publisher.UploadTask
appInfoAppInfo
-

-

Target

-

Kind: class of app-builder-lib
-Properties

- -

Methods

- -

-

target.build(appOutDir, arch)Promise<any>

- - - - - - - - - - - - - - - - - -
ParamType
appOutDirString
archArch
-

-

target.finishBuild()Promise<any>

-

-

WinPackager ⇐ PlatformPackager

-

Kind: class of app-builder-lib
-Extends: PlatformPackager
-Properties

- -

Methods

- -

-

winPackager.createTargets(targets, mapper)

-

Overrides: createTargets

- - - - - - - - - - - - - - - - - -
ParamType
targetsArray<String>
mappercallback
-

-

winPackager.doGetCscPassword()undefined | null | String

-

Overrides: doGetCscPassword
-

-

winPackager.getIconPath()Promise< | String>

-

Overrides: getIconPath
-

-

winPackager.sign(file, logMessagePrefix)Promise<Boolean>

- - - - - - - - - - - - - - - - - -
ParamType
fileString
logMessagePrefixString
-

-

winPackager.signAndEditResources(file, arch, outDir, internalName, requestedExecutionLevel)Promise<void>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
fileString
archArch
outDirString
internalNameString | “undefined”
requestedExecutionLevel“asInvoker” | “highestAvailable” | “requireAdministrator” | “undefined”
-

-

winPackager.artifactPatternConfig(targetSpecificOptions, defaultPattern)module:app-builder-lib/out/platformPackager.__object

- - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
defaultPatternString | undefined
-

-

winPackager.computeSafeArtifactName(suggestedName, ext, arch, skipDefaultArch, defaultArch, safePattern)null | String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
suggestedNameString | “undefined”
extString
archArch | “undefined”
skipDefaultArch
defaultArchString
safePattern
-

-

winPackager.getCscLink(extraEnvName)undefined | null | String

- - - - - - - - - - - - - -
ParamType
extraEnvNameString | “undefined”
-

-

winPackager.getCscPassword()String

-

-

winPackager.getDefaultFrameworkIcon()null | String

-

-

winPackager.dispatchArtifactCreated(file, target, arch, safeArtifactName)Promise<void>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
fileString
targetTarget | “undefined”
archArch | “undefined”
safeArtifactNameString | “undefined”
-

-

winPackager.getElectronDestinationDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

winPackager.getElectronSrcDir(dist)String

- - - - - - - - - - - - - -
ParamType
distString
-

-

winPackager.expandArtifactBeautyNamePattern(targetSpecificOptions, ext, arch)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
-

-

winPackager.expandArtifactNamePattern(targetSpecificOptions, ext, arch, defaultPattern, skipDefaultArch, defaultArch)String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
targetSpecificOptionsTargetSpecificOptions | “undefined” | undefined
extString
archArch | “undefined”
defaultPatternString
skipDefaultArch
defaultArchString
-

-

winPackager.expandMacro(pattern, arch, extra, isProductNameSanitized)String

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
patternString
archString | “undefined”
extraany
isProductNameSanitized
-

-

winPackager.generateName2(ext, classifier, deployment)String

- - - - - - - - - - - - - - - - - - - - - -
ParamType
extString | “undefined”
classifierString | “undefined” | undefined
deploymentBoolean
-

-

winPackager.getMacOsResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

winPackager.pack(outDir, arch, targets, taskManager)Promise<any>

- - - - - - - - - - - - - - - - - - - - - - - - - -
ParamType
outDirString
archArch
targetsArray<Target>
taskManagerAsyncTaskManager
-

-

winPackager.resolveIcon(sources, fallbackSources, outputFormat)Promise<Array<module:app-builder-lib/out/platformPackager.IconInfo>>

- - - - - - - - - - - - - - - - - - - - - -
ParamType
sourcesArray<String>
fallbackSourcesArray<String>
outputFormat“set” | “icns” | “ico”
-

-

winPackager.getResource(custom, names)Promise< | String>

- - - - - - - - - - - - - - - - - -
ParamType
customString | “undefined” | undefined
namesArray<String>
-

-

winPackager.getResourcesDir(appOutDir)String

- - - - - - - - - - - - - -
ParamType
appOutDirString
-

-

winPackager.getTempFile(suffix)Promise<String>

- - - - - - - - - - - - - -
ParamType
suffixString
-

-

app-builder-lib.build(options, packager)Promise<Array<String>>

-

Kind: method of app-builder-lib

- - - - - - - - - - - - - - - - - -
ParamType
optionsPackagerOptions | module:packages/electron-publish/out/publisher.PublishOptions
packagerPackager
-

-

app-builder-lib.buildForge(forgeOptions, options)Promise<Array<String>>

-

Kind: method of app-builder-lib

- - - - - - - - - - - - - - - - - -
ParamType
forgeOptionsForgeOptions
optionsPackagerOptions
-

-

dmg-builder

- -

-

dmg-builder.attachAndExecute(dmgPath, readWrite, task)Promise<any>

-

Kind: method of dmg-builder

- - - - - - - - - - - - - - - - - - - - - -
ParamType
dmgPathString
readWriteBoolean
taskcallback
-

-

dmg-builder.computeBackground(packager)Promise<String>

-

Kind: method of dmg-builder

- - - - - - - - - - - - - -
ParamType
packagerPlatformPackager<any>
-

-

dmg-builder.detach(name)Promise<String>

-

Kind: method of dmg-builder

- - - - - - - - - - - - - -
ParamType
nameString
-

-

dmg-builder.getDmgTemplatePath()String

-

Kind: method of dmg-builder
-

-

dmg-builder.getDmgVendorPath()String

-

Kind: method of dmg-builder
-

-

electron-publish

- -

-

PublishContext

-

Kind: interface of electron-publish
-Properties

- -

-

UploadTask

-

Kind: interface of electron-publish
-Properties

- -

-

HttpPublisher ⇐ Publisher

-

Kind: class of electron-publish
-Extends: Publisher

- -

-

httpPublisher.upload(task)Promise<any>

-

Overrides: upload

- - - - - - - - - - - - - -
ParamType
taskUploadTask
-

-

httpPublisher.toString()String

-

-

ProgressCallback

-

Kind: class of electron-publish
-

-

progressCallback.update(transferred, total)

- - - - - - - - - - - - - - - - - -
ParamType
transferredNumber
totalNumber
-

-

Publisher

-

Kind: class of electron-publish
-Properties

- -

Methods

- -

-

publisher.toString()String

-

-

publisher.upload(task)Promise<any>

- - - - - - - - - - - - - -
ParamType
taskUploadTask
-

-

electron-publish.getCiTag()null | String

-

Kind: method of electron-publish
-

-

electron-updater

- -

-

Logger

-

Kind: interface of electron-updater

- -

-

logger.debug(message)

- - - - - - - - - - - - - -
ParamType
messageString
-

-

logger.error(message)

- - - - - - - - - - - - - -
ParamType
messageany
-

-

logger.info(message)

- - - - - - - - - - - - - -
ParamType
messageany
-

-

logger.warn(message)

- - - - - - - - - - - - - -
ParamType
messageany
-

-

ResolvedUpdateFileInfo

-

Kind: interface of electron-updater
-Properties

- -

-

UpdateCheckResult

-

Kind: interface of electron-updater
-Properties

- -

-

UpdateDownloadedEventmodule:builder-util-runtime.UpdateInfo

-

Kind: interface of electron-updater
-Extends: module:builder-util-runtime.UpdateInfo
-Properties

- -

-

AppImageUpdater ⇐ BaseUpdater

-

Kind: class of electron-updater
-Extends: BaseUpdater

- -

-

appImageUpdater.isUpdaterActive()Boolean

-

-

appImageUpdater.install(isSilent, isForceRunAfter)Boolean

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

appImageUpdater.quitAndInstall(isSilent, isForceRunAfter)

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

AppUpdater ⇐ module:tiny-typed-emitter/lib/index.TypedEmitter

-

Kind: class of electron-updater
-Extends: module:tiny-typed-emitter/lib/index.TypedEmitter
-Properties

- -

Methods

- -

-

appUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

appUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

appUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

appUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

appUpdater.getFeedURL()undefined | null | String

-

-

appUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

appUpdater.isUpdaterActive()Boolean

-

-

appUpdater.quitAndInstall(isSilent, isForceRunAfter)

-

Restarts the app and installs the update after it has been downloaded. -It should only be called after update-downloaded has been emitted.

-

Note: autoUpdater.quitAndInstall() will close all application windows first and only emit before-quit event on app after that. -This is different from the normal quit event sequence.

- - - - - - - - - - - - - - - - - - - - -
ParamTypeDescription
isSilentBooleanwindows-only Runs the installer in silent mode. Defaults to false.
isForceRunAfterBooleanRun the app after finish even on silent install. Not applicable for macOS. Ignored if isSilent is set to false(In this case you can still set autoRunAppAfterInstall to false to prevent run the app after finish).
-

-

BaseUpdater ⇐ AppUpdater

-

Kind: class of electron-updater
-Extends: AppUpdater

- -

-

baseUpdater.install(isSilent, isForceRunAfter)Boolean

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

baseUpdater.quitAndInstall(isSilent, isForceRunAfter)

-

Overrides: quitAndInstall

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

baseUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

baseUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

baseUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

baseUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

baseUpdater.getFeedURL()undefined | null | String

-

-

baseUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

baseUpdater.isUpdaterActive()Boolean

-

-

DebUpdater ⇐ BaseUpdater

-

Kind: class of electron-updater
-Extends: BaseUpdater

- -

-

debUpdater.install(isSilent, isForceRunAfter)Boolean

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

debUpdater.quitAndInstall(isSilent, isForceRunAfter)

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

debUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

debUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

debUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

debUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

debUpdater.getFeedURL()undefined | null | String

-

-

debUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

debUpdater.isUpdaterActive()Boolean

-

-

MacUpdater ⇐ AppUpdater

-

Kind: class of electron-updater
-Extends: AppUpdater

- -

-

macUpdater.quitAndInstall()

-

Overrides: quitAndInstall
-

-

macUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

macUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

macUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

macUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

macUpdater.getFeedURL()undefined | null | String

-

-

macUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

macUpdater.isUpdaterActive()Boolean

-

-

NsisUpdater ⇐ BaseUpdater

-

Kind: class of electron-updater
-Extends: BaseUpdater
-Properties

- -

Methods

- -

-

nsisUpdater.install(isSilent, isForceRunAfter)Boolean

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

nsisUpdater.quitAndInstall(isSilent, isForceRunAfter)

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

nsisUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

nsisUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

nsisUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

nsisUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

nsisUpdater.getFeedURL()undefined | null | String

-

-

nsisUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

nsisUpdater.isUpdaterActive()Boolean

-

-

Provider

-

Kind: class of electron-updater
-Properties

- -

Methods

- -

-

provider.getLatestVersion()Promise<module:electron-updater/out/providers/Provider.T>

-

-

provider.setRequestHeaders(value)

- - - - - - - - - - - - - -
ParamType
value[key: string]: string | “undefined”
-

-

provider.resolveFiles(updateInfo)Array<ResolvedUpdateFileInfo>

- - - - - - - - - - - - - -
ParamType
updateInfomodule:electron-updater/out/providers/Provider.T
-

-

RpmUpdater ⇐ BaseUpdater

-

Kind: class of electron-updater
-Extends: BaseUpdater

- -

-

rpmUpdater.install(isSilent, isForceRunAfter)Boolean

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

rpmUpdater.quitAndInstall(isSilent, isForceRunAfter)

- - - - - - - - - - - - - - -
Param
isSilent
isForceRunAfter
-

-

rpmUpdater.addAuthHeader(token)

-

Shortcut for explicitly adding auth tokens to request headers

- - - - - - - - - - - - - -
ParamType
tokenString
-

-

rpmUpdater.checkForUpdates()Promise< | UpdateCheckResult>

-

Asks the server whether there is an update.

-

-

rpmUpdater.checkForUpdatesAndNotify(downloadNotification)Promise< | UpdateCheckResult>

- - - - - - - - - - - - - -
ParamType
downloadNotificationmodule:electron-updater/out/AppUpdater.DownloadNotification
-

-

rpmUpdater.downloadUpdate(cancellationToken)Promise<Array<String>>

-

Start downloading update manually. You can use this method if autoDownload option is set to false.

-

Returns: Promise<Array<String>> - Paths to downloaded files.

- - - - - - - - - - - - - -
ParamType
cancellationTokenCancellationToken
-

-

rpmUpdater.getFeedURL()undefined | null | String

-

-

rpmUpdater.setFeedURL(options)

-

Configure update provider. If value is string, GenericServerOptions will be set with value as url.

- - - - - - - - - - - - - - - -
ParamTypeDescription
optionsPublishConfiguration | String | GithubOptions | S3Options | SpacesOptions | GenericServerOptions | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | SnapStoreOptions | module:builder-util-runtime/out/publishOptions.BitbucketOptions | StringIf you want to override configuration in the app-update.yml.
-

-

rpmUpdater.isUpdaterActive()Boolean

-

-

UpdaterSignal

-

Kind: class of electron-updater

- -

-

updaterSignal.login(handler)

-

Emitted when an authenticating proxy is asking for user credentials.

- - - - - - - - - - - - - -
ParamType
handlermodule:electron-updater.__type
-

-

updaterSignal.progress(handler)

- - - - - - - - - - - - - -
ParamType
handlercallback
-

-

updaterSignal.updateCancelled(handler)

- - - - - - - - - - - - - -
ParamType
handlercallback
-

-

updaterSignal.updateDownloaded(handler)

- - - - - - - - - - - - - -
ParamType
handlercallback
-

-

electron-updater.autoUpdater : AppUpdater

-

Kind: constant of electron-updater

- - diff --git a/docs/auto-update.md b/docs/auto-update.md deleted file mode 100644 index 9ba9623a91e..00000000000 --- a/docs/auto-update.md +++ /dev/null @@ -1,1217 +0,0 @@ -Auto updates are enabled by the `electron-updater` package. Ideally, auto updates are configured to run in a CI pipeline to automatically provision new releases. See [publish configuration](configuration/publish.md) for information on how to configure your local or CI environment for automated deployments. - -Auto updates work as follows: - -- You configure the package to build release metadata (`latest.yml`) -- Electron builder uploads the actual release targets and metadata files to the configured target (except for generic server, where you have to upload manually) -- You configure the Electron application to use auto-updates, which queries the publish server for possible new releases - -Read the remainder of this guide to configure everything. - -!!! info "Code signing is required on macOS" - macOS application must be [signed](code-signing.md) in order for auto updating to work. - -## Auto-updatable Targets - -* macOS: DMG. -* Linux: AppImage, DEB and RPM. -* Windows: NSIS. - -All these targets are default, custom configuration is not required. (Though it is possible to [pass in additional configuration, e.g. request headers](#custom-options-instantiating-updater-directly).) - -!!! info "Squirrel.Windows is not supported" - Simplified auto-update is supported on Windows if you use the default NSIS target, but is not supported for Squirrel.Windows. - You can [easily migrate to NSIS](https://github.com/electron-userland/electron-builder/issues/837#issuecomment-355698368). - -## Differences between electron-updater and built-in autoUpdater - -The `electron-updater` package offers a different functionality compared to Electron's built-in auto-updater. Here are the differences: - -* A dedicated release server is not required. -* Code signature validation not only on macOS, but also on Windows. -* All required metadata files and artifacts are produced and published automatically. -* Download progress and [staged rollouts](#staged-rollouts) supported on all platforms. -* Different providers supported out of the box: ([GitHub Releases](https://help.github.com/articles/about-releases/), [Amazon S3](https://aws.amazon.com/s3/), [DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces), [Keygen](https://keygen.sh/docs/api/#auto-updates-electron) and generic HTTP(s) server). -* You need only 2 lines of code to make it work. - -## Quick Setup Guide - -1. Install [electron-updater](https://yarn.pm/electron-updater) as an app dependency. - -2. Configure the [`publish`](configuration/publish.md) options depending on where you want to host your release files. - -3. Build your application and check that the build directory contains the metadata `.yml` files next to the built application. For most publish targets, the building step will also upload the files, except for the generic server option, where you have to upload your built releases and metadata manually. - -4. Use `autoUpdater` from `electron-updater` instead of `electron`: - - CommonJS - ```js - const { autoUpdater } = require("electron-updater") - ``` - ESM - ```js - import { autoUpdater } from "electron-updater" - ``` - TypeScript - ```typescript - import electronUpdater, { type AppUpdater } from 'electron-updater'; - - export function getAutoUpdater(): AppUpdater { - // Using destructuring to access autoUpdater due to the CommonJS module of 'electron-updater'. - // It is a workaround for ESM compatibility issues, see https://github.com/electron-userland/electron-builder/issues/7976. - const { autoUpdater } = electronUpdater; - return autoUpdater; - } - ``` - -5. Call `autoUpdater.checkForUpdatesAndNotify()`. Or, if you need custom behaviour, implement `electron-updater` events, check examples below. - -!!! note - 1. Do not call [setFeedURL](#appupdatersetfeedurloptions). electron-builder automatically creates `app-update.yml` file for you on build in the `resources` (this file is internal, you don't need to be aware of it). - 2. `zip` target for macOS is **required** for Squirrel.Mac, otherwise `latest-mac.yml` cannot be created, which causes `autoUpdater` error. Default [target](configuration/mac.md#MacOptions-target) for macOS is `dmg`+`zip`, so there is no need to explicitly specify target. - -## Examples - -!!! example "Example in TypeScript using system notifications" - ```typescript - import { autoUpdater } from "electron-updater" - - export default class AppUpdater { - constructor() { - const log = require("electron-log") - log.transports.file.level = "debug" - autoUpdater.logger = log - autoUpdater.checkForUpdatesAndNotify() - } - } - ``` - -* A [complete example](https://github.com/iffy/electron-updater-example) showing how to use. -* An [encapsulated manual update via menu](https://github.com/electron-userland/electron-builder/blob/docs/encapsulated%20manual%20update%20via%20menu.js). - -### Custom Options instantiating updater Directly - -If you want to more control over the updater configuration (e.g. request header for authorization purposes), you can instantiate the updater directly. - -```typescript -import { NsisUpdater } from "electron-updater" -// Or MacUpdater, AppImageUpdater - -export default class AppUpdater { - constructor() { - const options = { - requestHeaders: { - // Any request headers to include here - }, - provider: 'generic', - url: 'https://example.com/auto-updates' - } - - const autoUpdater = new NsisUpdater(options) - autoUpdater.addAuthHeader(`Bearer ${token}`) - autoUpdater.checkForUpdatesAndNotify() - } -} -``` - -## Debugging - -You don't need to listen all events to understand what's wrong. Just set `logger`. -[electron-log](https://github.com/megahertz/electron-log) is recommended (it is an additional dependency that you can install if needed). - -```js -autoUpdater.logger = require("electron-log") -autoUpdater.logger.transports.file.level = "info" -``` - -Note that in order to develop/test UI/UX of updating without packaging the application you need to have a file named `dev-app-update.yml` in the root of your project, which matches your `publish` setting from electron-builder config (but in [yaml](https://www.json2yaml.com) format). But it is not recommended, better to test auto-update for installed application (especially on Windows). [Minio](https://github.com/electron-userland/electron-builder/issues/3053#issuecomment-401001573) is recommended as a local server for testing updates. - -## Compatibility - -Generated metadata files format changes from time to time, but compatibility preserved up to version 1. If you start a new project, recommended to set `electronUpdaterCompatibility` to current latest format version (`>= 2.16`). - -Option `electronUpdaterCompatibility` set the electron-updater compatibility semver range. Can be specified per platform. - -e.g. `>= 2.16`, `>=1.0.0`. Defaults to `>=2.15` - -* `1.0.0` latest-mac.json -* `2.15.0` path -* `2.16.0` files - -## Staged Rollouts - -Staged rollouts allow you to distribute the latest version of your app to a subset of users that you can increase over time, similar to rollouts on platforms like Google Play. - -Staged rollouts are controlled by manually editing your `latest.yml` / `latest-mac.yml` (channel update info file). - -```yml -version: 1.1.0 -path: TestApp Setup 1.1.0.exe -sha512: Dj51I0q8aPQ3ioaz9LMqGYujAYRbDNblAQbodDRXAMxmY6hsHqEl3F6SvhfJj5oPhcqdX1ldsgEvfMNXGUXBIw== -stagingPercentage: 10 -``` - -Update will be shipped to 10% of userbase. - -If you want to pull a staged release because it hasn't gone well, you **must** increment the version number higher than your broken release. -Because some of your users will be on the broken 1.0.1, releasing a new 1.0.1 would result in them staying on a broken version. - -## File Generated and Uploaded in Addition - -`latest.yml` (or `latest-mac.yml` for macOS, or `latest-linux.yml` for Linux) will be generated and uploaded for all providers except `bintray` (because not required, `bintray` doesn't use `latest.yml`). - -## Private GitHub Update Repo - -You can use a private repository for updates with electron-updater by setting the `GH_TOKEN` environment variable (on user machine) and `private` option. -If `GH_TOKEN` is set, electron-updater will use the GitHub API for updates allowing private repositories to work. - - -!!! warning - Private GitHub provider only for [very special](https://github.com/electron-userland/electron-builder/issues/1393#issuecomment-288191885) cases — not intended and not suitable for all users. - -!!! note - The GitHub API currently has a rate limit of 5000 requests per user per hour. An update check uses up to 3 requests per check. - -## Events - -The `autoUpdater` object emits the following events: - -#### Event: `error` - -* `error` Error - -Emitted when there is an error while updating. - -#### Event: `checking-for-update` - -Emitted when checking if an update has started. - -#### Event: `update-available` - -* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider) - -Emitted when there is an available update. The update is downloaded automatically if `autoDownload` is `true`. - -#### Event: `update-not-available` - -Emitted when there is no available update. - -* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider) - -#### Event: `download-progress` -* `progress` ProgressInfo - * `bytesPerSecond` - * `percent` - * `total` - * `transferred` - -Emitted on progress. - -#### Event: `update-downloaded` - -* `info` [UpdateInfo](#UpdateInfo) — for generic and github providers. [VersionInfo](#VersionInfo) for Bintray provider. - - -## API - -
-
builder-util-runtime
-
-
electron-updater
-
-
- - -## builder-util-runtime - -- [Auto-updatable Targets](#auto-updatable-targets) -- [Differences between electron-updater and built-in autoUpdater](#differences-between-electron-updater-and-built-in-autoupdater) -- [Quick Setup Guide](#quick-setup-guide) -- [Examples](#examples) - - [Custom Options instantiating updater Directly](#custom-options-instantiating-updater-directly) -- [Debugging](#debugging) -- [Compatibility](#compatibility) -- [Staged Rollouts](#staged-rollouts) -- [File Generated and Uploaded in Addition](#file-generated-and-uploaded-in-addition) -- [Private GitHub Update Repo](#private-github-update-repo) -- [Events](#events) - - [Event: `error`](#event-error) - - [Event: `checking-for-update`](#event-checking-for-update) - - [Event: `update-available`](#event-update-available) - - [Event: `update-not-available`](#event-update-not-available) - - [Event: `download-progress`](#event-download-progress) - - [Event: `update-downloaded`](#event-update-downloaded) -- [API](#api) -- [builder-util-runtime](#builder-util-runtime) - - [`BaseS3Options` ⇐ PublishConfiguration](#bases3options--publishconfiguration) - - [`BintrayOptions` ⇐ PublishConfiguration](#bintrayoptions--publishconfiguration) - - [`BlockMap`](#blockmap) - - [`BlockMapDataHolder`](#blockmapdataholder) - - [`CustomPublishOptions` ⇐ PublishConfiguration](#custompublishoptions--publishconfiguration) - - [`DownloadOptions`](#downloadoptions) - - [`GenericServerOptions` ⇐ PublishConfiguration](#genericserveroptions--publishconfiguration) - - [`GithubOptions` ⇐ PublishConfiguration](#githuboptions--publishconfiguration) - - [`KeygenOptions` ⇐ PublishConfiguration](#keygenoptions--publishconfiguration) - - [`PackageFileInfo` ⇐ BlockMapDataHolder](#packagefileinfo--blockmapdataholder) - - [`ProgressInfo`](#progressinfo) - - [`PublishConfiguration`](#publishconfiguration) - - [`ReleaseNoteInfo`](#releasenoteinfo) - - [`RequestHeaders` ⇐ \[key: string\]: OutgoingHttpHeader | undefined](#requestheaders--key-string-outgoinghttpheader--undefined) - - [`S3Options` ⇐ BaseS3Options](#s3options--bases3options) - - [`SnapStoreOptions` ⇐ PublishConfiguration](#snapstoreoptions--publishconfiguration) - - [`SpacesOptions` ⇐ BaseS3Options](#spacesoptions--bases3options) - - [`UpdateFileInfo` ⇐ BlockMapDataHolder](#updatefileinfo--blockmapdataholder) - - [`UpdateInfo`](#updateinfo) - - [`WindowsUpdateInfo` ⇐ UpdateInfo](#windowsupdateinfo--updateinfo) - - [CancellationError ⇐ Error](#cancellationerror--error) - - [CancellationToken ⇐ module:events.EventEmitter](#cancellationtoken--moduleeventseventemitter) - - [`cancellationToken.cancel()`](#cancellationtokencancel) - - [`cancellationToken.createPromise(callback)` ⇒ Promise\](#cancellationtokencreatepromisecallback--promisemodulebuilder-util-runtimeoutcancellationtokenr) - - [`cancellationToken.dispose()`](#cancellationtokendispose) - - [DigestTransform ⇐ internal:Transform](#digesttransform--internaltransform) - - [`digestTransform._flush(callback)`](#digesttransform_flushcallback) - - [`digestTransform._transform(chunk, encoding, callback)`](#digesttransform_transformchunk-encoding-callback) - - [`digestTransform.validate()` ⇒ null](#digesttransformvalidate--null) - - [HttpError ⇐ Error](#httperror--error) - - [`httpError.isServerError()` ⇒ Boolean](#httperrorisservererror--boolean) - - [HttpExecutor](#httpexecutor) - - [`httpExecutor.addErrorAndTimeoutHandlers(request, reject)`](#httpexecutoradderrorandtimeouthandlersrequest-reject) - - [`httpExecutor.createRequest(options, callback)` ⇒ module:builder-util-runtime/out/httpExecutor.T](#httpexecutorcreaterequestoptions-callback--modulebuilder-util-runtimeouthttpexecutort) - - [`httpExecutor.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)` ⇒ Promise\](#httpexecutordoapirequestoptions-cancellationtoken-requestprocessor-redirectcount--promisestring) - - [`httpExecutor.downloadToBuffer(url, options)` ⇒ Promise\](#httpexecutordownloadtobufferurl-options--promisemoduleglobalbuffer) - - [`httpExecutor.prepareRedirectUrlOptions(redirectUrl, options)` ⇒ module:http.RequestOptions](#httpexecutorprepareredirecturloptionsredirecturl-options--modulehttprequestoptions) - - [`httpExecutor.request(options, cancellationToken, data)` ⇒ Promise\< | String\>](#httpexecutorrequestoptions-cancellationtoken-data--promise--string) - - [`httpExecutor.retryOnServerError(task, maxRetries)` ⇒ Promise\](#httpexecutorretryonservererrortask-maxretries--promiseany) - - [ProgressCallbackTransform ⇐ internal:Transform](#progresscallbacktransform--internaltransform) - - [`progressCallbackTransform._flush(callback)`](#progresscallbacktransform_flushcallback) - - [`progressCallbackTransform._transform(chunk, encoding, callback)`](#progresscallbacktransform_transformchunk-encoding-callback) - - [UUID](#uuid) - - [`uuiD.check(uuid, offset)` ⇒ "undefined" | module:builder-util-runtime/out/uuid.\_\_object | module:builder-util-runtime/out/uuid.\_\_object](#uuidcheckuuid-offset--undefined--modulebuilder-util-runtimeoutuuid__object--modulebuilder-util-runtimeoutuuid__object) - - [`uuiD.inspect()` ⇒ String](#uuidinspect--string) - - [`uuiD.parse(input)` ⇒ module:global.Buffer](#uuidparseinput--moduleglobalbuffer) - - [`uuiD.toString()` ⇒ String](#uuidtostring--string) - - [`uuiD.v5(name, namespace)` ⇒ any](#uuidv5name-namespace--any) - - [XElement](#xelement) - - [`xElement.attribute(name)` ⇒ String](#xelementattributename--string) - - [`xElement.element(name, ignoreCase, errorIfMissed)` ⇒ XElement](#xelementelementname-ignorecase-errorifmissed--xelement) - - [`xElement.elementOrNull(name, ignoreCase)` ⇒ null | XElement](#xelementelementornullname-ignorecase--null--xelement) - - [`xElement.getElements(name, ignoreCase)` ⇒ Array\](#xelementgetelementsname-ignorecase--arrayxelement) - - [`xElement.elementValueOrEmpty(name, ignoreCase)` ⇒ String](#xelementelementvalueoremptyname-ignorecase--string) - - [`xElement.removeAttribute(name)`](#xelementremoveattributename) - - [`builder-util-runtime.asArray(v)` ⇒ Array\](#builder-util-runtimeasarrayv--arraymodulebuilder-util-runtimet) - - [`builder-util-runtime.configureRequestOptions(options, token, method)` ⇒ module:http.RequestOptions](#builder-util-runtimeconfigurerequestoptionsoptions-token-method--modulehttprequestoptions) - - [`builder-util-runtime.configureRequestOptionsFromUrl(url, options)` ⇒ module:http.RequestOptions](#builder-util-runtimeconfigurerequestoptionsfromurlurl-options--modulehttprequestoptions) - - [`builder-util-runtime.configureRequestUrl(url, options)`](#builder-util-runtimeconfigurerequesturlurl-options) - - [`builder-util-runtime.createHttpError(response, description)` ⇒ HttpError](#builder-util-runtimecreatehttperrorresponse-description--httperror) - - [`builder-util-runtime.getS3LikeProviderBaseUrl(configuration)` ⇒ String](#builder-util-runtimegets3likeproviderbaseurlconfiguration--string) - - [`builder-util-runtime.newError(message, code)` ⇒ Error](#builder-util-runtimenewerrormessage-code--error) - - [`builder-util-runtime.parseDn(seq)` ⇒ Map\](#builder-util-runtimeparsednseq--mapstring--string) - - [`builder-util-runtime.parseJson(result)` ⇒ Promise\](#builder-util-runtimeparsejsonresult--promiseany) - - [`builder-util-runtime.parseXml(data)` ⇒ XElement](#builder-util-runtimeparsexmldata--xelement) - - [`builder-util-runtime.safeGetHeader(response, headerKey)` ⇒ any](#builder-util-runtimesafegetheaderresponse-headerkey--any) - - [`builder-util-runtime.safeStringifyJson(data, skippedNames)` ⇒ String](#builder-util-runtimesafestringifyjsondata-skippednames--string) -- [electron-updater](#electron-updater) - - [`Logger`](#logger) - - [`logger.debug(message)`](#loggerdebugmessage) - - [`logger.error(message)`](#loggererrormessage) - - [`logger.info(message)`](#loggerinfomessage) - - [`logger.warn(message)`](#loggerwarnmessage) - - [`ResolvedUpdateFileInfo`](#resolvedupdatefileinfo) - - [`UpdateCheckResult`](#updatecheckresult) - - [`UpdateDownloadedEvent` ⇐ module:builder-util-runtime.UpdateInfo](#updatedownloadedevent--modulebuilder-util-runtimeupdateinfo) - - [AppImageUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater](#appimageupdater--moduleelectron-updateroutbaseupdaterbaseupdater) - - [`appImageUpdater.isUpdaterActive()` ⇒ Boolean](#appimageupdaterisupdateractive--boolean) - - [AppUpdater ⇐ module:events.EventEmitter](#appupdater--moduleeventseventemitter) - - [`appUpdater.addAuthHeader(token)`](#appupdateraddauthheadertoken) - - [`appUpdater.checkForUpdates()` ⇒ Promise\](#appupdatercheckforupdates--promiseupdatecheckresult) - - [`appUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise\< | UpdateCheckResult\>](#appupdatercheckforupdatesandnotifydownloadnotification--promise--updatecheckresult) - - [`appUpdater.downloadUpdate(cancellationToken)` ⇒ Promise\\>](#appupdaterdownloadupdatecancellationtoken--promisearraystring) - - [`appUpdater.getFeedURL()` ⇒ undefined | null | String](#appupdatergetfeedurl--undefined--null--string) - - [`appUpdater.setFeedURL(options)`](#appupdatersetfeedurloptions) - - [`appUpdater.isUpdaterActive()` ⇒ Boolean](#appupdaterisupdateractive--boolean) - - [`appUpdater.quitAndInstall(isSilent, isForceRunAfter)`](#appupdaterquitandinstallissilent-isforcerunafter) - - [MacUpdater ⇐ AppUpdater](#macupdater--appupdater) - - [`macUpdater.quitAndInstall()`](#macupdaterquitandinstall) - - [`macUpdater.addAuthHeader(token)`](#macupdateraddauthheadertoken) - - [`macUpdater.checkForUpdates()` ⇒ Promise\](#macupdatercheckforupdates--promiseupdatecheckresult) - - [`macUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise\< | UpdateCheckResult\>](#macupdatercheckforupdatesandnotifydownloadnotification--promise--updatecheckresult) - - [`macUpdater.downloadUpdate(cancellationToken)` ⇒ Promise\\>](#macupdaterdownloadupdatecancellationtoken--promisearraystring) - - [`macUpdater.getFeedURL()` ⇒ undefined | null | String](#macupdatergetfeedurl--undefined--null--string) - - [`macUpdater.setFeedURL(options)`](#macupdatersetfeedurloptions) - - [`macUpdater.isUpdaterActive()` ⇒ Boolean](#macupdaterisupdateractive--boolean) - - [NsisUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater](#nsisupdater--moduleelectron-updateroutbaseupdaterbaseupdater) - - [Provider](#provider) - - [`provider.getLatestVersion()` ⇒ Promise\](#providergetlatestversion--promisemoduleelectron-updateroutprovidersprovidert) - - [`provider.setRequestHeaders(value)`](#providersetrequestheadersvalue) - - [`provider.resolveFiles(updateInfo)` ⇒ Array\](#providerresolvefilesupdateinfo--arrayresolvedupdatefileinfo) - - [UpdaterSignal](#updatersignal) - - [`updaterSignal.login(handler)`](#updatersignalloginhandler) - - [`updaterSignal.progress(handler)`](#updatersignalprogresshandler) - - [`updaterSignal.updateCancelled(handler)`](#updatersignalupdatecancelledhandler) - - [`updaterSignal.updateDownloaded(handler)`](#updatersignalupdatedownloadedhandler) - - [`electron-updater.autoUpdater` : AppUpdater](#electron-updaterautoupdater--appupdater) - - [`electron-updater.DOWNLOAD_PROGRESS` : "login" | "checking-for-update" | "update-available" | "update-not-available" | "update-cancelled" | "download-progress" | "update-downloaded" | "error"](#electron-updaterdownload_progress--login--checking-for-update--update-available--update-not-available--update-cancelled--download-progress--update-downloaded--error) - - [`electron-updater.UPDATE_DOWNLOADED` : "login" | "checking-for-update" | "update-available" | "update-not-available" | "update-cancelled" | "download-progress" | "update-downloaded" | "error"](#electron-updaterupdate_downloaded--login--checking-for-update--update-available--update-not-available--update-cancelled--download-progress--update-downloaded--error) - - -### `BaseS3Options` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* channel = `latest` String | "undefined" - The update channel. -* path = `/` String | "undefined" - The directory path. -* acl = `public-read` "private" | "public-read" | "undefined" - The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822). -* **provider** "github" | "bintray" | "s3" | "spaces" | "generic" | "custom" | "snapStore" | "keygen" - The provider. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `BintrayOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -[Bintray](https://bintray.com/) options. Requires an API key. An API key can be obtained from the user [profile](https://bintray.com/profile/edit) page ("Edit Your Profile" -> API Key). -Define `BT_TOKEN` environment variable. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "bintray" - The provider. Must be `bintray`. -* package String | "undefined" - The Bintray package name. -* repo = `generic` String | "undefined" - The Bintray repository name. -* owner String | "undefined" - The owner. -* component String | "undefined" - The Bintray component (Debian only). -* distribution = `stable` String | "undefined" - The Bintray distribution (Debian only). -* user String | "undefined" - The Bintray user account. Used in cases where the owner is an organization. -* token String | "undefined" -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `BlockMap` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* **version** "1" | "2" -* **files** Array<module:builder-util-runtime/out/blockMapApi.BlockMapFile> - - -### `BlockMapDataHolder` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* size Number - The file size. Used to verify downloaded size (save one HTTP request to get length). Also used when block map data is embedded into the file (appimage, windows web installer package). -* blockMapSize Number - The block map file size. Used when block map data is embedded into the file (appimage, windows web installer package). This information can be obtained from the file itself, but it requires additional HTTP request, so, to reduce request count, block map size is specified in the update metadata too. -* **sha512** String - The file checksum. -* isAdminRightsRequired Boolean - - -### `CustomPublishOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "custom" - The provider. Must be `custom`. -* updateProvider module:builder-util-runtime/out/publishOptions.__type - The Provider to provide UpdateInfo regarding available updates. Required to use custom providers with electron-updater. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `DownloadOptions` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* headers [key: string]: string | "undefined" -* sha2 String | "undefined" -* sha512 String | "undefined" -* **cancellationToken** [CancellationToken](#CancellationToken) -* onProgress callback - - -### `GenericServerOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -Generic (any HTTP(S) server) options. -In all publish options [File Macros](/file-patterns#file-macros) are supported. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "generic" - The provider. Must be `generic`. -* **url** String - The base url. e.g. `https://bucket_name.s3.amazonaws.com`. -* channel = `latest` String | "undefined" - The channel. -* useMultipleRangeRequest Boolean - Whether to use multiple range requests for differential update. Defaults to `true` if `url` doesn't contain `s3.amazonaws.com`. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `GithubOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -[GitHub](https://help.github.com/articles/about-releases/) options. - -GitHub [personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) is required. You can generate by going to [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new). The access token should have the repo scope/permission. -Define `GH_TOKEN` environment variable. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "github" - The provider. Must be `github`. -* repo String | "undefined" - The repository name. [Detected automatically](#github-repository-and-bintray-package). -* owner String | "undefined" - The owner. -* vPrefixedTagName = `true` Boolean - Whether to use `v`-prefixed tag name. -* host = `github.com` String | "undefined" - The host (including the port if need). -* protocol = `https` "https" | "http" | "undefined" - The protocol. GitHub Publisher supports only `https`. -* token String | "undefined" - The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](/auto-update#appupdatersetfeedurloptions). -* private Boolean | "undefined" - Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](/auto-update#private-github-update-repo). -* releaseType = `draft` "draft" | "prerelease" | "release" | "undefined" - The type of release. By default `draft` release will be created. - - Also you can set release type using environment variable. If `EP_DRAFT`is set to `true` — `draft`, if `EP_PRE_RELEASE`is set to `true` — `prerelease`. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `KeygenOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -Keygen options. -https://keygen.sh/ -Define `KEYGEN_TOKEN` environment variable. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "keygen" - The provider. Must be `keygen`. -* **account** String - Keygen account's UUID -* **product** String - Keygen product's UUID -* channel = `stable` "stable" | "rc" | "beta" | "alpha" | "dev" | "undefined" - The channel. -* platform String | "undefined" - The target Platform. Is set programmatically explicitly during publishing. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `PackageFileInfo` ⇐ [BlockMapDataHolder](#BlockMapDataHolder) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [BlockMapDataHolder](#BlockMapDataHolder) -**Properties** -* **path** String - - -### `ProgressInfo` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* **total** Number -* **delta** Number -* **transferred** Number -* **percent** Number -* **bytesPerSecond** Number - - -### `PublishConfiguration` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* **provider** "github" | "bintray" | "s3" | "spaces" | "generic" | "custom" | "snapStore" | "keygen" - The provider. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `ReleaseNoteInfo` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* **version** String - The version. -* **note** String | "undefined" - The note. - - -### `RequestHeaders` ⇐ [key: string]: OutgoingHttpHeader | undefined -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [key: string]: OutgoingHttpHeader | undefined - -### `S3Options` ⇐ [BaseS3Options](electron-builder#BaseS3Options) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [BaseS3Options](electron-builder#BaseS3Options) -**Properties** -* **provider** "s3" - The provider. Must be `s3`. -* **bucket** String - The bucket name. -* region String | "undefined" - The region. Is determined and set automatically when publishing. -* acl = `public-read` "private" | "public-read" | "undefined" - The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822). - - Please see [required permissions for the S3 provider](https://github.com/electron-userland/electron-builder/issues/1618#issuecomment-314679128). -* storageClass = `STANDARD` "STANDARD" | "REDUCED_REDUNDANCY" | "STANDARD_IA" | "undefined" - The type of storage to use for the object. -* encryption "AES256" | "aws:kms" | "undefined" - Server-side encryption algorithm to use for the object. -* endpoint String | "undefined" - The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like `https://{service}.{region}.amazonaws.com`. - - -### `SnapStoreOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration) -[Snap Store](https://snapcraft.io/) options. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration) -**Properties** -* **provider** "snapStore" - The provider. Must be `snapStore`. -* **repo** String - snapcraft repo name -* channels = `["edge"]` String | Array<String> | "undefined" - The list of channels the snap would be released. -* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files. - - Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded. -* requestHeaders [key: string]: string - Any custom request headers - - -### `SpacesOptions` ⇐ [BaseS3Options](electron-builder#BaseS3Options) -[DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces) options. -Access key is required, define `DO_KEY_ID` and `DO_SECRET_KEY` environment variables. - -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [BaseS3Options](electron-builder#BaseS3Options) -**Properties** -* **provider** "spaces" - The provider. Must be `spaces`. -* **name** String - The space name. -* **region** String - The region (e.g. `nyc3`). - - -### `UpdateFileInfo` ⇐ [BlockMapDataHolder](#BlockMapDataHolder) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [BlockMapDataHolder](#BlockMapDataHolder) -**Properties** -* **url** String - - -### `UpdateInfo` -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* **version** String - The version. -* **files** Array<[UpdateFileInfo](#UpdateFileInfo)> -* **path** String - Deprecated: {tag.description} -* **sha512** String - Deprecated: {tag.description} -* releaseName String | "undefined" - The release name. -* releaseNotes String | Array<[ReleaseNoteInfo](#ReleaseNoteInfo)> | "undefined" - The release notes. List if `updater.fullChangelog` is set to `true`, `string` otherwise. -* **releaseDate** String - The release date. -* stagingPercentage Number - The [staged rollout](/auto-update#staged-rollouts) percentage, 0-100. - - -### `WindowsUpdateInfo` ⇐ [UpdateInfo](#UpdateInfo) -**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: [UpdateInfo](#UpdateInfo) -**Properties** -* packages Object<String, any> | "undefined" - - -### CancellationError ⇐ Error -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: Error - -### CancellationToken ⇐ module:events.EventEmitter -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: module:events.EventEmitter -**Properties** -* **cancelled** Boolean - -**Methods** -* [.CancellationToken](#CancellationToken) ⇐ module:events.EventEmitter - * [`.cancel()`](#module_builder-util-runtime.CancellationToken+cancel) - * [`.createPromise(callback)`](#module_builder-util-runtime.CancellationToken+createPromise) ⇒ Promise<module:builder-util-runtime/out/CancellationToken.R> - * [`.dispose()`](#module_builder-util-runtime.CancellationToken+dispose) - - -#### `cancellationToken.cancel()` - -#### `cancellationToken.createPromise(callback)` ⇒ Promise<module:builder-util-runtime/out/CancellationToken.R> - -- callback callback - - -#### `cancellationToken.dispose()` - -### DigestTransform ⇐ internal:Transform -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: internal:Transform -**Properties** -* actual String -* isValidateOnEnd = `true` Boolean - -**Methods** -* [.DigestTransform](#DigestTransform) ⇐ internal:Transform - * [`._flush(callback)`](#module_builder-util-runtime.DigestTransform+_flush) - * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.DigestTransform+_transform) - * [`.validate()`](#module_builder-util-runtime.DigestTransform+validate) ⇒ null - - -#### `digestTransform._flush(callback)` - -- callback any - - -#### `digestTransform._transform(chunk, encoding, callback)` - -- chunk module:global.Buffer -- encoding String -- callback any - - -#### `digestTransform.validate()` ⇒ null - -### HttpError ⇐ Error -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: Error - -#### `httpError.isServerError()` ⇒ Boolean - -### HttpExecutor -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
- -* [.HttpExecutor](#HttpExecutor) - * [`.addErrorAndTimeoutHandlers(request, reject)`](#module_builder-util-runtime.HttpExecutor+addErrorAndTimeoutHandlers) - * [`.createRequest(options, callback)`](#module_builder-util-runtime.HttpExecutor+createRequest) ⇒ module:builder-util-runtime/out/httpExecutor.T - * [`.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)`](#module_builder-util-runtime.HttpExecutor+doApiRequest) ⇒ Promise<String> - * [`.downloadToBuffer(url, options)`](#module_builder-util-runtime.HttpExecutor+downloadToBuffer) ⇒ Promise<module:global.Buffer> - * [`.prepareRedirectUrlOptions(redirectUrl, options)`](#module_builder-util-runtime.HttpExecutor+prepareRedirectUrlOptions) ⇒ module:http.RequestOptions - * [`.request(options, cancellationToken, data)`](#module_builder-util-runtime.HttpExecutor+request) ⇒ Promise< \| String> - * [`.retryOnServerError(task, maxRetries)`](#module_builder-util-runtime.HttpExecutor+retryOnServerError) ⇒ Promise<any> - - -#### `httpExecutor.addErrorAndTimeoutHandlers(request, reject)` - -- request any -- reject callback - - -#### `httpExecutor.createRequest(options, callback)` ⇒ module:builder-util-runtime/out/httpExecutor.T - -- options any -- callback callback - - -#### `httpExecutor.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)` ⇒ Promise<String> - -- options module:http.RequestOptions -- cancellationToken [CancellationToken](#CancellationToken) -- requestProcessor callback -- redirectCount - - -#### `httpExecutor.downloadToBuffer(url, options)` ⇒ Promise<module:global.Buffer> - -- url module:url.URL -- options [DownloadOptions](electron-builder#DownloadOptions) - - -#### `httpExecutor.prepareRedirectUrlOptions(redirectUrl, options)` ⇒ module:http.RequestOptions - -- redirectUrl String -- options module:http.RequestOptions - - -#### `httpExecutor.request(options, cancellationToken, data)` ⇒ Promise< \| String> - -- options module:http.RequestOptions -- cancellationToken [CancellationToken](#CancellationToken) -- data Object<String, any> | "undefined" - - -#### `httpExecutor.retryOnServerError(task, maxRetries)` ⇒ Promise<any> - -- task callback -- maxRetries - - -### ProgressCallbackTransform ⇐ internal:Transform -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Extends**: internal:Transform - -* [.ProgressCallbackTransform](#ProgressCallbackTransform) ⇐ internal:Transform - * [`._flush(callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_flush) - * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_transform) - - -#### `progressCallbackTransform._flush(callback)` - -- callback any - - -#### `progressCallbackTransform._transform(chunk, encoding, callback)` - -- chunk any -- encoding String -- callback any - - -### UUID -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* OID = `UUID.parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")` module:global.Buffer - -**Methods** -* [.UUID](#UUID) - * [`.check(uuid, offset)`](#module_builder-util-runtime.UUID+check) ⇒ "undefined" \| module:builder-util-runtime/out/uuid.__object \| module:builder-util-runtime/out/uuid.__object - * [`.inspect()`](#module_builder-util-runtime.UUID+inspect) ⇒ String - * [`.parse(input)`](#module_builder-util-runtime.UUID+parse) ⇒ module:global.Buffer - * [`.toString()`](#module_builder-util-runtime.UUID+toString) ⇒ String - * [`.v5(name, namespace)`](#module_builder-util-runtime.UUID+v5) ⇒ any - - -#### `uuiD.check(uuid, offset)` ⇒ "undefined" \| module:builder-util-runtime/out/uuid.__object \| module:builder-util-runtime/out/uuid.__object - -- uuid module:global.Buffer | String -- offset - - -#### `uuiD.inspect()` ⇒ String - -#### `uuiD.parse(input)` ⇒ module:global.Buffer - -- input String - - -#### `uuiD.toString()` ⇒ String - -#### `uuiD.v5(name, namespace)` ⇒ any - -- name String | module:global.Buffer -- namespace module:global.Buffer - - -### XElement -**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
-**Properties** -* value= String -* **attributes** Object<String, any> | "undefined" -* isCData = `false` Boolean -* **elements** Array<[XElement](#XElement)> | "undefined" - -**Methods** -* [.XElement](#XElement) - * [`.attribute(name)`](#module_builder-util-runtime.XElement+attribute) ⇒ String - * [`.element(name, ignoreCase, errorIfMissed)`](#module_builder-util-runtime.XElement+element) ⇒ [XElement](#XElement) - * [`.elementOrNull(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementOrNull) ⇒ null \| [XElement](#XElement) - * [`.getElements(name, ignoreCase)`](#module_builder-util-runtime.XElement+getElements) ⇒ Array<[XElement](#XElement)> - * [`.elementValueOrEmpty(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementValueOrEmpty) ⇒ String - * [`.removeAttribute(name)`](#module_builder-util-runtime.XElement+removeAttribute) - - -#### `xElement.attribute(name)` ⇒ String - -- name String - - -#### `xElement.element(name, ignoreCase, errorIfMissed)` ⇒ [XElement](#XElement) - -- name String -- ignoreCase -- errorIfMissed String | "undefined" - - -#### `xElement.elementOrNull(name, ignoreCase)` ⇒ null \| [XElement](#XElement) - -- name String -- ignoreCase - - -#### `xElement.getElements(name, ignoreCase)` ⇒ Array<[XElement](#XElement)> - -- name String -- ignoreCase - - -#### `xElement.elementValueOrEmpty(name, ignoreCase)` ⇒ String - -- name String -- ignoreCase - - -#### `xElement.removeAttribute(name)` - -- name String - - -### `builder-util-runtime.asArray(v)` ⇒ Array<module:builder-util-runtime.T> -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- v "undefined" | undefined | module:builder-util-runtime.T | Array<module:builder-util-runtime.T> - - -### `builder-util-runtime.configureRequestOptions(options, token, method)` ⇒ module:http.RequestOptions -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- options module:http.RequestOptions -- token String | "undefined" -- method "GET" | "DELETE" | "PUT" - - -### `builder-util-runtime.configureRequestOptionsFromUrl(url, options)` ⇒ module:http.RequestOptions -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- url String -- options module:http.RequestOptions - - -### `builder-util-runtime.configureRequestUrl(url, options)` -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- url module:url.URL -- options module:http.RequestOptions - - -### `builder-util-runtime.createHttpError(response, description)` ⇒ [HttpError](#HttpError) -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- response module:http.IncomingMessage -- description any | "undefined" - - -### `builder-util-runtime.getS3LikeProviderBaseUrl(configuration)` ⇒ String -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- configuration [PublishConfiguration](electron-builder#PublishConfiguration) - - -### `builder-util-runtime.newError(message, code)` ⇒ Error -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- message String -- code String - - -### `builder-util-runtime.parseDn(seq)` ⇒ Map<String \| String> -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- seq String - - -### `builder-util-runtime.parseJson(result)` ⇒ Promise<any> -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- result Promise< | String> - - -### `builder-util-runtime.parseXml(data)` ⇒ [XElement](#XElement) -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- data String - - -### `builder-util-runtime.safeGetHeader(response, headerKey)` ⇒ any -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- response any -- headerKey String - - -### `builder-util-runtime.safeStringifyJson(data, skippedNames)` ⇒ String -**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
- -- data any -- skippedNames Set<String> - - -## electron-updater - -* [electron-updater](#module_electron-updater) - * [`.Logger`](#Logger) - * [`.debug(message)`](#module_electron-updater.Logger+debug) - * [`.error(message)`](#module_electron-updater.Logger+error) - * [`.info(message)`](#module_electron-updater.Logger+info) - * [`.warn(message)`](#module_electron-updater.Logger+warn) - * [`.ResolvedUpdateFileInfo`](#ResolvedUpdateFileInfo) - * [`.UpdateCheckResult`](#UpdateCheckResult) - * [`.UpdateDownloadedEvent`](#UpdateDownloadedEvent) ⇐ module:builder-util-runtime.UpdateInfo - * [.AppImageUpdater](#AppImageUpdater) ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater - * [`.isUpdaterActive()`](#module_electron-updater.AppImageUpdater+isUpdaterActive) ⇒ Boolean - * [.AppUpdater](#AppUpdater) ⇐ module:events.EventEmitter - * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader) - * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> - * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<Array<String>> - * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String - * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL) - * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean - * [`.quitAndInstall(isSilent, isForceRunAfter)`](#module_electron-updater.AppUpdater+quitAndInstall) - * [.MacUpdater](#MacUpdater) ⇐ [AppUpdater](#AppUpdater) - * [`.quitAndInstall()`](#module_electron-updater.MacUpdater+quitAndInstall) - * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader) - * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> - * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<Array<String>> - * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String - * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL) - * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean - * [.NsisUpdater](#NsisUpdater) ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater - * [.Provider](#Provider) - * [`.getLatestVersion()`](#module_electron-updater.Provider+getLatestVersion) ⇒ Promise<module:electron-updater/out/providers/Provider.T> - * [`.setRequestHeaders(value)`](#module_electron-updater.Provider+setRequestHeaders) - * [`.resolveFiles(updateInfo)`](#module_electron-updater.Provider+resolveFiles) ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)> - * [.UpdaterSignal](#UpdaterSignal) - * [`.login(handler)`](#module_electron-updater.UpdaterSignal+login) - * [`.progress(handler)`](#module_electron-updater.UpdaterSignal+progress) - * [`.updateCancelled(handler)`](#module_electron-updater.UpdaterSignal+updateCancelled) - * [`.updateDownloaded(handler)`](#module_electron-updater.UpdaterSignal+updateDownloaded) - * [`.autoUpdater`](#module_electron-updater.autoUpdater) : [AppUpdater](#AppUpdater) - * [`.DOWNLOAD_PROGRESS`](#module_electron-updater.DOWNLOAD_PROGRESS) : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error" - * [`.UPDATE_DOWNLOADED`](#module_electron-updater.UPDATE_DOWNLOADED) : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error" - - -### `Logger` -**Kind**: interface of [electron-updater](#module_electron-updater)
- -* [`.Logger`](#Logger) - * [`.debug(message)`](#module_electron-updater.Logger+debug) - * [`.error(message)`](#module_electron-updater.Logger+error) - * [`.info(message)`](#module_electron-updater.Logger+info) - * [`.warn(message)`](#module_electron-updater.Logger+warn) - - -#### `logger.debug(message)` - -- message String - - -#### `logger.error(message)` - -- message any - - -#### `logger.info(message)` - -- message any - - -#### `logger.warn(message)` - -- message any - - -### `ResolvedUpdateFileInfo` -**Kind**: interface of [electron-updater](#module_electron-updater)
-**Properties** -* **url** module:url.URL -* **info** module:builder-util-runtime.UpdateFileInfo -* packageInfo module:builder-util-runtime.PackageFileInfo - - -### `UpdateCheckResult` -**Kind**: interface of [electron-updater](#module_electron-updater)
-**Properties** -* **updateInfo** module:builder-util-runtime.UpdateInfo -* downloadPromise Promise<Array<String>> | "undefined" -* cancellationToken CancellationToken -* **versionInfo** module:builder-util-runtime.UpdateInfo - Deprecated: {tag.description} - - -### `UpdateDownloadedEvent` ⇐ module:builder-util-runtime.UpdateInfo -**Kind**: interface of [electron-updater](#module_electron-updater)
-**Extends**: module:builder-util-runtime.UpdateInfo -**Properties** -* **downloadedFile** String - - -### AppImageUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater -**Kind**: class of [electron-updater](#module_electron-updater)
-**Extends**: module:electron-updater/out/BaseUpdater.BaseUpdater - -#### `appImageUpdater.isUpdaterActive()` ⇒ Boolean - -### AppUpdater ⇐ module:events.EventEmitter -**Kind**: class of [electron-updater](#module_electron-updater)
-**Extends**: module:events.EventEmitter -**Properties** -* autoDownload = `true` Boolean - Whether to automatically download an update when it is found. -* autoInstallOnAppQuit = `true` Boolean - Whether to automatically install a downloaded update on app quit (if `quitAndInstall` was not called before). -* allowPrerelease = `false` Boolean - *GitHub provider only.* Whether to allow update to pre-release versions. Defaults to `true` if application version contains prerelease components (e.g. `0.12.1-alpha.1`, here `alpha` is a prerelease component), otherwise `false`. - - If `true`, downgrade will be allowed (`allowDowngrade` will be set to `true`). -* fullChangelog = `false` Boolean - *GitHub provider only.* Get all release notes (from current version to latest), not just the latest. -* allowDowngrade = `false` Boolean - Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel). - - Taken in account only if channel differs (pre-release version component in terms of semantic versioning). -* currentVersion SemVer - The current application version. -* **channel** String | "undefined" - Get the update channel. Not applicable for GitHub. Doesn't return `channel` from the update configuration, only if was previously set. -* **requestHeaders** [key: string]: string | "undefined" - The request headers. -* **netSession** Electron:Session -* **logger** [Logger](#Logger) | "undefined" - The logger. You can pass [electron-log](https://github.com/megahertz/electron-log), [winston](https://github.com/winstonjs/winston) or another logger with the following interface: `{ info(), warn(), error() }`. Set it to `null` if you would like to disable a logging feature. -* signals = `new UpdaterSignal(this)` [UpdaterSignal](#UpdaterSignal) -* configOnDisk = `new Lazy(() => this.loadUpdateConfig())` Lazy<any> -* httpExecutor module:electron-updater/out/electronHttpExecutor.ElectronHttpExecutor -* **isAddNoCacheQuery** Boolean - -**Methods** -* [.AppUpdater](#AppUpdater) ⇐ module:events.EventEmitter - * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader) - * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> - * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<Array<String>> - * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String - * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL) - * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean - * [`.quitAndInstall(isSilent, isForceRunAfter)`](#module_electron-updater.AppUpdater+quitAndInstall) - - -#### `appUpdater.addAuthHeader(token)` -Shortcut for explicitly adding auth tokens to request headers - - -- token String - - -#### `appUpdater.checkForUpdates()` ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> -Asks the server whether there is an update. - - -#### `appUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - -- downloadNotification module:electron-updater/out/AppUpdater.DownloadNotification - - -#### `appUpdater.downloadUpdate(cancellationToken)` ⇒ Promise<Array<String>> -Start downloading update manually. You can use this method if `autoDownload` option is set to `false`. - -**Returns**: Promise<Array<String>> - Paths to downloaded files. - -- cancellationToken CancellationToken - - -#### `appUpdater.getFeedURL()` ⇒ undefined \| null \| String - -#### `appUpdater.setFeedURL(options)` -Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`. - - -- options [PublishConfiguration](/configuration/publish#publishconfiguration) | String | [GithubOptions](/configuration/publish#githuboptions) | [S3Options](/configuration/publish#s3options) | [SpacesOptions](/configuration/publish#spacesoptions) | [GenericServerOptions](/configuration/publish#genericserveroptions) | [BintrayOptions](/configuration/publish#bintrayoptions) | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | [SnapStoreOptions](/configuration/publish#snapstoreoptions) | String - If you want to override configuration in the `app-update.yml`. - - -#### `appUpdater.isUpdaterActive()` ⇒ Boolean - -#### `appUpdater.quitAndInstall(isSilent, isForceRunAfter)` -Restarts the app and installs the update after it has been downloaded. -It should only be called after `update-downloaded` has been emitted. - -**Note:** `autoUpdater.quitAndInstall()` will close all application windows first and only emit `before-quit` event on `app` after that. -This is different from the normal quit event sequence. - - -- isSilent Boolean - *windows-only* Runs the installer in silent mode. Defaults to `false`. -- isForceRunAfter Boolean - Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`. - - -### MacUpdater ⇐ [AppUpdater](#AppUpdater) -**Kind**: class of [electron-updater](#module_electron-updater)
-**Extends**: [AppUpdater](#AppUpdater) - -* [.MacUpdater](#MacUpdater) ⇐ [AppUpdater](#AppUpdater) - * [`.quitAndInstall()`](#module_electron-updater.MacUpdater+quitAndInstall) - * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader) - * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> - * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<Array<String>>/code> - * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String - * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL) - * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean - - -#### `macUpdater.quitAndInstall()` -**Overrides**: [quitAndInstall](#module_electron-updater.AppUpdater+quitAndInstall) - -#### `macUpdater.addAuthHeader(token)` -Shortcut for explicitly adding auth tokens to request headers - - -- token String - - -#### `macUpdater.checkForUpdates()` ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)> -Asks the server whether there is an update. - - -#### `macUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)> - -- downloadNotification module:electron-updater/out/AppUpdater.DownloadNotification - - -#### `macUpdater.downloadUpdate(cancellationToken)` ⇒ Promise<Array<String>> -Start downloading update manually. You can use this method if `autoDownload` option is set to `false`. - -**Returns**: Promise<Array<String>> - Paths to downloaded files. - -- cancellationToken CancellationToken - - -#### `macUpdater.getFeedURL()` ⇒ undefined \| null \| String - -#### `macUpdater.setFeedURL(options)` -Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`. - - -- options [PublishConfiguration](/configuration/publish#publishconfiguration) | String | [GithubOptions](/configuration/publish#githuboptions) | [S3Options](/configuration/publish#s3options) | [SpacesOptions](/configuration/publish#spacesoptions) | [GenericServerOptions](/configuration/publish#genericserveroptions) | [BintrayOptions](/configuration/publish#bintrayoptions) | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | [SnapStoreOptions](/configuration/publish#snapstoreoptions) | String - If you want to override configuration in the `app-update.yml`. - - -#### `macUpdater.isUpdaterActive()` ⇒ Boolean - -### NsisUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater -**Kind**: class of [electron-updater](#module_electron-updater)
-**Extends**: module:electron-updater/out/BaseUpdater.BaseUpdater - -### Provider -**Kind**: class of [electron-updater](#module_electron-updater)
-**Properties** -* **isUseMultipleRangeRequest** Boolean -* **fileExtraDownloadHeaders** [key: string]: string | "undefined" - -**Methods** -* [.Provider](#Provider) - * [`.getLatestVersion()`](#module_electron-updater.Provider+getLatestVersion) ⇒ Promise<module:electron-updater/out/providers/Provider.T> - * [`.setRequestHeaders(value)`](#module_electron-updater.Provider+setRequestHeaders) - * [`.resolveFiles(updateInfo)`](#module_electron-updater.Provider+resolveFiles) ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)> - - -#### `provider.getLatestVersion()` ⇒ Promise<module:electron-updater/out/providers/Provider.T> - -#### `provider.setRequestHeaders(value)` - -- value [key: string]: string | "undefined" - - -#### `provider.resolveFiles(updateInfo)` ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)> - -- updateInfo module:electron-updater/out/providers/Provider.T - - -### UpdaterSignal -**Kind**: class of [electron-updater](#module_electron-updater)
- -* [.UpdaterSignal](#UpdaterSignal) - * [`.login(handler)`](#module_electron-updater.UpdaterSignal+login) - * [`.progress(handler)`](#module_electron-updater.UpdaterSignal+progress) - * [`.updateCancelled(handler)`](#module_electron-updater.UpdaterSignal+updateCancelled) - * [`.updateDownloaded(handler)`](#module_electron-updater.UpdaterSignal+updateDownloaded) - - -#### `updaterSignal.login(handler)` -Emitted when an authenticating proxy is [asking for user credentials](https://github.com/electron/electron/blob/master/docs/api/client-request.md#event-login). - - -- handler module:electron-updater.__type - - -#### `updaterSignal.progress(handler)` - -- handler callback - - -#### `updaterSignal.updateCancelled(handler)` - -- handler callback - - -#### `updaterSignal.updateDownloaded(handler)` - -- handler callback - - -### `electron-updater.autoUpdater` : [AppUpdater](#AppUpdater) -**Kind**: constant of [electron-updater](#module_electron-updater)
- -### `electron-updater.DOWNLOAD_PROGRESS` : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error" -**Kind**: constant of [electron-updater](#module_electron-updater)
- -### `electron-updater.UPDATE_DOWNLOADED` : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error" -**Kind**: constant of [electron-updater](#module_electron-updater)
- - diff --git a/docs/configuration/appx.md b/docs/configuration/appx.md deleted file mode 100644 index 007792f84a2..00000000000 --- a/docs/configuration/appx.md +++ /dev/null @@ -1,75 +0,0 @@ -The top-level [appx](configuration.md#Configuration-appx) key contains set of options instructing electron-builder on how it should build AppX (Windows Store). - -All options are optional. All required for AppX configuration is inferred and computed automatically. - - -
    -
  • applicationId String - The application id. Defaults to identityName. This string contains alpha-numeric fields separated by periods. Each field must begin with an ASCII alphabetic character.
  • -
  • backgroundColor = #464646 String | “undefined” - The background color of the app tile. See Visual Elements.
  • -
  • displayName String | “undefined” - A friendly name that can be displayed to users. Corresponds to Properties.DisplayName. Defaults to the application product name.
  • -
  • identityName String | “undefined” - The name. Corresponds to Identity.Name. Defaults to the application name.
  • -
  • publisher String | “undefined” - The Windows Store publisher. Not used if AppX is build for testing. See AppX Package Code Signing below.
  • -
  • publisherDisplayName String | “undefined” - A friendly name for the publisher that can be displayed to users. Corresponds to Properties.PublisherDisplayName. Defaults to company name from the application metadata.
  • -
  • languages Array<String> | String | “undefined” - The list of supported languages that will be listed in the Windows Store. The first entry (index 0) will be the default language. Defaults to en-US if omitted.
  • -
  • addAutoLaunchExtension Boolean - Whether to add auto launch extension. Defaults to true if electron-winstore-auto-launch in the dependencies.
  • -
  • customExtensionsPath String - Relative path to custom extensions xml to be included in an appmanifest.xml.
  • -
  • showNameOnTiles = false Boolean - Whether to overlay the app’s name on top of tile images on the Start screen. Defaults to false. (https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-shownameontiles) in the dependencies.
  • -
  • setBuildNumber = false Boolean - Whether to set build number. See https://github.com/electron-userland/electron-builder/issues/3875
  • -
  • minVersion = arch === Arch.arm64 ? "10.0.16299.0" : "10.0.14316.0" String | “undefined” - Set the MinVersion field in the appx manifest.xml
  • -
  • maxVersionTested = arch === Arch.arm64 ? "10.0.16299.0" : "10.0.14316.0" String | “undefined” - Set the MaxVersionTested field in the appx manifest.xml
  • -
-

Inherited from TargetSpecificOptions:

- - - - -## AppX Package Code Signing - -* If the AppX package is meant for enterprise or self-made distribution (manually install the app without using the Store for testing or for enterprise distribution), it must be [signed](../code-signing.md). -* If the AppX package is meant for Windows Store distribution, no need to sign the package with any certificate. The Windows Store will take care of signing it with a Microsoft certificate during the submission process. - -## AppX Assets - -AppX assets need to be placed in the `appx` folder in the [build](configuration.md#MetadataDirectories-buildResources) directory. - -The assets should follow these naming conventions: - -- Logo: `StoreLogo.png` -- Square150x150Logo: `Square150x150Logo.png` -- Square44x44Logo: `Square44x44Logo.png` -- Wide310x150Logo: `Wide310x150Logo.png` -- *Optional* BadgeLogo: `BadgeLogo.png` -- *Optional* Square310x310Logo: `LargeTile.png` -- *Optional* Square71x71Logo: `SmallTile.png` -- *Optional* SplashScreen: `SplashScreen.png` - -All official AppX asset types are supported by the build process. These assets can include scaled assets by using `target size` and `scale` in the name. -See [Guidelines for tile and icon assets](https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-app-assets) for more information. - -Default assets will be used for `Logo`, `Square150x150Logo`, `Square44x44Logo` and `Wide310x150Logo` if not provided. For assets marked `Optional`, these assets will not be listed in the manifest file if not provided. - -## How to publish your Electron App to the Windows App Store - -1. You'll need a microsoft developer account (pay some small fee). Use your favourite search engine to find the registration form. -2. Register you app for the desktop bridge [here](https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge). -3. Wait for MS to answer and further guide you. -4. In the meantime, build and test your appx. It's dead simple. - - ```json - "win": { - "target": "appx", - }, - ``` -5. The rest should be pretty straight forward — upload the appx to the store and wait for approval. - -## Building AppX on macOS - -The only solution for now — using [Parallels Desktop for Mac](http://www.parallels.com/products/desktop/) ([Pro Edition](https://forum.parallels.com/threads/prlctl-is-now-a-pro-or-business-version-tool-only.330290/) is required). Create Windows 10 virtual machine and start it. It will be detected and used automatically to build AppX on your macOS machine. Nothing is required to setup on Windows. It allows you to not copy project to Windows and to not setup build environment on Windows. - -## Common Questions -#### How do install AppX without trusted certificate? - -If you use self-signed certificate, you need to add it to "Trusted People". See [Install the certificate](https://stackoverflow.com/a/24372483/1910191). diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md deleted file mode 100644 index ccebf3d6f18..00000000000 --- a/docs/configuration/configuration.md +++ /dev/null @@ -1,219 +0,0 @@ -electron-builder [configuration](#configuration) can be defined - -* in the `package.json` file of your project using the `build` key on the top level: - ```json - "build": { - "appId": "com.example.app" - } - ``` -* or through the `--config ` option. Defaults to `electron-builder.yml`. - ```yaml - appId: "com.example.app" - ``` - - `json`, [json5](http://json5.org), [toml](https://github.com/toml-lang/toml) or `js`/`ts` (exported configuration or function that produces configuration) formats also supported. - - !!! tip - If you want to use `js` file, do not name it `electron-builder.js`. It will [conflict](https://github.com/electron-userland/electron-builder/issues/6227) with `electron-builder` package name. - - !!! tip - If you want to use [toml](https://en.wikipedia.org/wiki/TOML), please install `yarn add toml --dev`. - -Most of the options accept `null` — for example, to explicitly set that DMG icon must be default volume icon from the OS and default rules must be not applied (i.e. use application icon as DMG icon), set `dmg.icon` to `null`. - -## Artifact File Name Template - -`${ext}` macro is supported in addition to [file macros](../file-patterns.md#file-macros). - -## Environment Variables from File - -Env file `electron-builder.env` in the current dir ([example](https://github.com/motdotla/dotenv-expand/blob/1cc80d02e1f8aa749253a04a2061c0fecb9bdb69/tests/.env)). Supported only for CLI usage. - -## How to Read Docs - -* Name of optional property is normal, **required** is bold. -* Type is specified after property name: `Array | String`. Union like this means that you can specify or string (`**/*`), or array of strings (`["**/*", "!foo.js"]`). - -## Configuration - - -
    -
  • appId = com.electron.${name} String | “undefined” - The application id. Used as CFBundleIdentifier for MacOS and as Application User Model ID for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.
  • -
  • productName String | “undefined” - As name, but allows you to specify a product name for your executable which contains spaces and other special characters not allowed in the name property. If not specified inside of the build configuration, productName property defined at the top level of package.json is used. If not specified at the top level of package.json, name property is used.
  • -
  • copyright = Copyright © year ${author} String | “undefined” - The human-readable copyright line for the app.
  • -
-
- -
- -
- -
- -
-
    -
  • -

    buildDependenciesFromSource = false Boolean - Whether to build the application native dependencies from source.

    -
  • -
  • -

    nodeGypRebuild = false Boolean - Whether to execute node-gyp rebuild before starting to package the app.

    -

    Don’t use npm (neither .npmrc) for configuring electron headers. Use electron-builder node-gyp-rebuild instead.

    -
  • -
  • -

    npmArgs Array<String> | String | “undefined” - Additional command line arguments to use when installing app native deps.

    -
  • -
  • -

    npmRebuild = true Boolean - Whether to rebuild native dependencies before starting to package the app.

    -
  • -
  • -

    nativeRebuilder = sequential “legacy” | “sequential” | “parallel” | “undefined” - Use legacy app-builder binary for installing native dependencies, or @electron/rebuild in sequential or parallel compilation modes.

    -
  • -
  • -

    buildNumber String | “undefined” - The build number. Maps to the --iteration flag for builds using FPM on Linux. If not defined, then it will fallback to BUILD_NUMBER or TRAVIS_BUILD_NUMBER or APPVEYOR_BUILD_NUMBER or CIRCLE_BUILD_NUM or BUILD_BUILDNUMBER or CI_PIPELINE_IID env.

    -
  • -
-
-
    -
  • -

    buildVersion String | “undefined” - The build version. Maps to the CFBundleVersion on macOS, and FileVersion metadata property on Windows. Defaults to the version. If buildVersion is not defined and buildNumber (or one of the buildNumber envs) is defined, it will be used as a build version (version.buildNumber).

    -
  • -
  • -

    downloadAlternateFFmpeg Boolean - Whether to download the alternate FFmpeg library from Electron’s release assets and replace the default FFmpeg library prior to signing

    -
  • -
  • -

    electronCompile Boolean - Whether to use electron-compile to compile app. Defaults to true if electron-compile in the dependencies. And false if in the devDependencies or doesn’t specified.

    -
  • -
  • -

    electronDist String | module:app-builder-lib/out/configuration.__type - Returns the path to custom Electron build (e.g. ~/electron/out/R). Zip files must follow the pattern electron-v${version}-${platformName}-${arch}.zip, otherwise it will be assumed to be an unpacked Electron app directory

    -
  • -
  • -

    electronDownload - The electron-download options.

    -
      -
    • version String
    • -
    • cache String | “undefined” - The cache location.
    • -
    • mirror String | “undefined” - The mirror.
    • -
    • strictSSL Boolean
    • -
    • isVerifyChecksum Boolean
    • -
    • platform “darwin” | “linux” | “win32” | “mas”
    • -
    • arch String
    • -
    -
  • -
  • -

    electronBranding ElectronBrandingOptions - The branding used by Electron’s distributables. This is needed if a fork has modified Electron’s BRANDING.json file.

    -
  • -
  • -

    electronVersion String | “undefined” - The version of electron you are packaging for. Defaults to version of electron, electron-prebuilt or electron-prebuilt-compile dependency.

    -
  • -
  • -

    extends Array<String> | String | “undefined” - The name of a built-in configuration preset (currently, only react-cra is supported) or any number of paths to config files (relative to project dir).

    -

    The latter allows to mixin a config from multiple other configs, as if you Object.assign them, but properly combine files glob patterns.

    -

    If react-scripts in the app dependencies, react-cra will be set automatically. Set to null to disable automatic detection.

    -
  • -
  • -

    extraMetadata any - Inject properties to package.json.

    -
  • -
-
-
    -
  • forceCodeSigning = false Boolean - Whether to fail if the application is not signed (to prevent unsigned app if code signing configuration is not correct).
  • -
  • nodeVersion String | “undefined” - libui-based frameworks only The version of NodeJS you are packaging for. You can set it to current to set the Node.js version that you use to run.
  • -
  • launchUiVersion Boolean | String | “undefined” - libui-based frameworks only The version of LaunchUI you are packaging for. Applicable for Windows only. Defaults to version suitable for used framework version.
  • -
  • framework String | “undefined” - The framework name. One of electron, proton, libui. Defaults to electron.
  • -
  • beforePack module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run before pack
  • -
  • afterExtract module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run after the prebuilt Electron binary has been extracted to the output directory
  • -
-
-
    -
  • -

    afterPack - The function (or path to file or module id) to be run after pack (but before pack into distributable format and sign).

    -
  • -
  • -

    afterSign - The function (or path to file or module id) to be run after pack and sign (but before pack into distributable format).

    -
  • -
  • -

    artifactBuildStarted module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run on artifact build start.

    -
  • -
  • -

    artifactBuildCompleted module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run on artifact build completed.

    -
  • -
  • -

    afterAllArtifactBuild - The function (or path to file or module id) to be run after all artifacts are build.

    -
  • -
  • -

    msiProjectCreated module:app-builder-lib/out/configuration.__type | String | “undefined” - MSI project created on disk - not packed into .msi package yet.

    -
  • -
  • -

    appxManifestCreated module:app-builder-lib/out/configuration.__type | String | “undefined” - Appx manifest created on disk - not packed into .appx package yet.

    -
  • -
  • -

    onNodeModuleFile - The function (or path to file or module id) to be run on each node module file. Returning true/false will determine whether to force include or to use the default copier logic

    -
  • -
  • -

    beforeBuild (context: BeforeBuildContext) => Promise | null - The function (or path to file or module id) to be run before dependencies are installed or rebuilt. Works when npmRebuild is set to true. Resolving to false will skip dependencies install or rebuild.

    -

    If provided and node_modules are missing, it will not invoke production dependencies check.

    -
  • -
  • -

    includePdb = false Boolean - Whether to include PDB files.

    -
  • -
  • -

    removePackageScripts = true Boolean - Whether to remove scripts field from package.json files.

    -
  • -
  • -

    removePackageKeywords = true Boolean - Whether to remove keywords field from package.json files.

    -
  • -
  • -

    disableSanityCheckAsar = false Boolean - Whether to disable sanity check asar package (useful for custom electron forks that implement their own encrypted integrity validation)

    -
  • -
- - - ---- - -### Overridable per Platform Options - -Following options can be set also per platform (top-level keys [mac](mac.md), [linux](linux.md) and [win](win.md)) if need. - -{!generated/PlatformSpecificBuildOptions.md!} - -## Metadata -Some standard fields should be defined in the `package.json`. - -{!generated/Metadata.md!} - -## Proton Native - -To package [Proton Native](https://proton-native.js.org/) app, set `protonNodeVersion` option to `current` or specific NodeJS version that you are packaging for. -Currently, only macOS and Linux supported. - -## Build Version Management -`CFBundleVersion` (macOS) and `FileVersion` (Windows) will be set automatically to `version.build_number` on CI server (Travis, AppVeyor, CircleCI and Bamboo supported). - -{!includes/hooks.md!} diff --git a/docs/configuration/contents.md b/docs/configuration/contents.md deleted file mode 100644 index a5423fd5f5f..00000000000 --- a/docs/configuration/contents.md +++ /dev/null @@ -1,84 +0,0 @@ -## files - -`Array | String | FileSet` - -A [glob patterns](../file-patterns.md) relative to the [app directory](configuration.md#MetadataDirectories-app), which specifies which files to include when copying files to create the package. - -Defaults to: -```json -[ - "**/*", - "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}", - "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}", - "!**/node_modules/*.d.ts", - "!**/node_modules/.bin", - "!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}", - "!.editorconfig", - "!**/._*", - "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}", - "!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}", - "!**/{appveyor.yml,.travis.yml,circle.yml}", - "!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}" -] -``` - -Development dependencies are never copied in any case. You don't need to ignore it explicitly. Hidden files are not ignored by default, but all files that should be ignored, are ignored by default. - - -Default pattern `**/*` **is not added to your custom** if some of your patterns is not ignore (i.e. not starts with `!`). `package.json` and `**/node_modules/**/*` (only production dependencies will be copied) is added to your custom in any case. All default ignores are added in any case — you don't need to repeat it if you configure own patterns. - -May be specified in the platform options (e.g. in the [mac](mac.md)). - -You may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns. - -```json -[ - { - "from": "path/to/source", - "to": "path/to/destination", - "filter": ["**/*", "!foo/*.js"] - } -] -``` - -You can use [file macros](../file-patterns.md#file-macros) in the `from` and `to` fields as well. `from` and `to` can be files and you can use this to [rename](https://github.com/electron-userland/electron-builder/issues/1119) a file while packaging. - -### `FileSet.from` - -`String` - -The source path relative to and defaults to: - -* the [app directory](configuration.md#MetadataDirectories-app) for `files`, -* the project directory for `extraResources` and `extraFiles`. - -If you don't use two-package.json structure and don't set custom app directory, app directory equals to project directory. - -### `FileSet.to` - -`String` - -The destination path relative to and defaults to: -* the asar archive root for `files`, -* the app's content directory for `extraFiles`, -* the app's resource directory for `extraResources`. - -### `FileSet.filter` - -`Array | String` - -The [glob patterns](../file-patterns.md). Defaults to `**/*`. - -## extraResources - -`Array | String | FileSet` - -A [glob patterns](../file-patterns.md) relative to the project directory, when specified, copy the file or directory with matching names directly into the app's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows). - -File patterns (and support for `from` and `to` fields) the same as for [files](#files). - -## extraFiles - -`Array | String | FileSet` - -The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows). \ No newline at end of file diff --git a/docs/configuration/dmg.md b/docs/configuration/dmg.md deleted file mode 100644 index acad319e28a..00000000000 --- a/docs/configuration/dmg.md +++ /dev/null @@ -1,78 +0,0 @@ -The top-level [dmg](configuration.md#Configuration-dmg) key contains set of options instructing electron-builder on how it should build [DMG](https://en.wikipedia.org/wiki/Apple_Disk_Image). - - -
    -
  • -

    background String | “undefined” - The path to background image (default: build/background.tiff or build/background.png if exists). The resolution of this file determines the resolution of the installer window. If background is not specified, use window.size. Default locations expected background size to be 540x380. See: DMG with Retina background support.

    -
  • -
  • -

    backgroundColor String | “undefined” - The background color (accepts css colors). Defaults to #ffffff (white) if no background image.

    -
  • -
  • -

    icon String | “undefined” - The path to DMG icon (volume icon), which will be shown when mounted, relative to the build resources or to the project directory. Defaults to the application icon (build/icon.icns).

    -
  • -
  • -

    iconSize = 80 Number | “undefined” - The size of all the icons inside the DMG.

    -
  • -
  • -

    iconTextSize = 12 Number | “undefined” - The size of all the icon texts inside the DMG.

    -
  • -
  • -

    title = ${productName} ${version} String | “undefined” - The title of the produced DMG, which will be shown when mounted (volume name).

    -

    Macro ${productName}, ${version} and ${name} are supported.

    -
  • -
  • -

    contents Array<DmgContent> - The content — to customize icon locations. The x and y coordinates refer to the position of the center of the icon (at 1x scale), and do not take the label into account.

    -
      -
    • x Number - The device-independent pixel offset from the left of the window to the center of the icon.
    • -
    • y Number - The device-independent pixel offset from the top of the window to the center of the icon.
    • -
    • type “link” | “file” | “dir”
    • -
    • name String - The name of the file within the DMG. Defaults to basename of path.
    • -
    • path String - The path of the file within the DMG.
    • -
    -
  • -
  • -

    format = UDZO “UDRW” | “UDRO” | “UDCO” | “UDZO” | “UDBZ” | “ULFO” - The disk image format. ULFO (lzfse-compressed image (OS X 10.11+ only)).

    -
  • -
  • -

    window - The DMG window position and size. With y co-ordinates running from bottom to top.

    -

    The Finder makes sure that the window will be on the user’s display, so if you want your window at the top left of the display you could use "x": 0, "y": 100000 as the x, y co-ordinates. It is not to be possible to position the window relative to the top left or relative to the center of the user’s screen.

    -
      -
    • x = 400 Number - The X position relative to left of the screen.
    • -
    • y = 100 Number - The Y position relative to bottom of the screen.
    • -
    • width Number - The width. Defaults to background image width or 540.
    • -
    • height Number - The height. Defaults to background image height or 380.
    • -
    -
  • -
  • -

    internetEnabled = false Boolean - Whether to create internet-enabled disk image (when it is downloaded using a browser it will automatically decompress the image, put the application on the desktop, unmount and remove the disk image file).

    -
  • -
  • -

    sign = false Boolean - Whether to sign the DMG or not. Signing is not required and will lead to unwanted errors in combination with notarization requirements.

    -
  • -
-

Inherited from TargetSpecificOptions:

- - - - -## DMG License - -To add license to DMG, create file `license_LANG_CODE.txt` in the build resources. Multiple license files in different languages are supported — use lang postfix (e.g. `_de`, `_ru`)). For example, create files `license_de.txt` and `license_en.txt` in the build resources. -If OS language is german, `license_de.txt` will be displayed. See map of [language code to name](https://github.com/meikidd/iso-639-1/blob/master/src/data.js). - -You can also change the default button labels of the DMG by passing a json file named `licenseButtons_LANG_CODE.json`. The german file would be named: `licenseButtons_de.json`. -The contain file should have the following format: -```json -{ - "lang": "English", - "agree": "Agree", - "disagree": "Disagree", - "print": "Print", - "save": "Save", - "description": "Here is my own description" -} -``` diff --git a/docs/configuration/flatpak.md b/docs/configuration/flatpak.md deleted file mode 100644 index 224cb0aa722..00000000000 --- a/docs/configuration/flatpak.md +++ /dev/null @@ -1,84 +0,0 @@ -!!! warning "Single-file Flatpak bundles" - Currently `electron-builder` does **not** support publishing apps to Flatpak repositories like [Flathub](https://flathub.org/). This means the Flatpak support in `electron-builder` is limited to generating [single-file bundles](https://docs.flatpak.org/en/latest/single-file-bundles.html) which have various limitations compared to app bundles installed from a repository. - - For what it's worth, there are [some](https://discourse.flathub.org/t/seeking-contractors-for-work-on-flathub-project/1889) [plans](https://discourse.flathub.org/t/is-it-possible-to-publish-a-self-contained-flatpak-file-to-flathub/2083) to make it easier to publish Electron apps to Flathub. When that happens, it should be easier to create a Flathub publisher for `electron-builder` (which would work similary to the other publishers). - -The top-level [flatpak](configuration.md#Configuration-flatpak) key contains a set of options instructing electron-builder on how it should build a [Flatpak](https://flatpak.org/) bundle. - -!!! info "Build dependencies" - The `flatpak` and `flatpak-builder` packages need to be installed in order to build Flatpak bundles. - - -
    -
  • -

    license String | “undefined” - The path to EULA license file. Defaults to license.txt or eula.txt (or uppercase variants). Only plain text is supported.

    -
  • -
  • -

    runtime String - The name of the runtime that the application uses. Defaults to org.freedesktop.Platform.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    runtimeVersion String - The version of the runtime that the application uses. Defaults to 20.08.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    sdk String - The name of the development runtime that the application builds with. Defaults to org.freedesktop.Sdk.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    base String - Start with the files from the specified application. This can be used to create applications that extend another application. Defaults to org.electronjs.Electron2.BaseApp.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    baseVersion String - Use this specific version of the application specified in base. Defaults to 20.08.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    branch String - The branch to use when exporting the application. Defaults to master.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    finishArgs Array<String> - An array of arguments passed to the flatpak build-finish command. Defaults to: json [ // Wayland/X11 Rendering "--socket=wayland", "--socket=x11", "--share=ipc", // Open GL "--device=dri", // Audio output "--socket=pulseaudio", // Read/write home directory access "--filesystem=home", // Allow communication with network "--share=network", // System notifications with libnotify "--talk-name=org.freedesktop.Notifications", ]

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    modules Array<any> - An array of objects specifying the modules to be built in order.

    -

    See flatpak manifest documentation.

    -
  • -
  • -

    files Array - Files to copy directly into the app. Should be a list of [source, dest] tuples. Source should be a relative/absolute path to a file/directory to copy into the flatpak, and dest should be the path inside the app install prefix (e.g. /share/applications/).

    -

    See @malept/flatpak-bundler documentation.

    -
  • -
  • -

    symlinks Array - Symlinks to create in the app files. Should be a list of [target, location] symlink tuples. Target can be either a relative or absolute path inside the app install prefix, and location should be a absolute path inside the prefix to create the symlink at.

    -

    See @malept/flatpak-bundler documentation.

    -
  • -
  • -

    useWaylandFlags Boolean - Whether to enable the Wayland specific flags (--enable-features=UseOzonePlatform --ozone-platform=wayland) in the wrapper script. These flags are only available starting with Electron version 12. Defaults to false.

    -
  • -
-

Inherited from CommonLinuxOptions:

-
    -
  • synopsis String | “undefined” - The short description.
  • -
  • description String | “undefined” - As description from application package.json, but allows you to specify different for Linux.
  • -
  • category String | “undefined” - The application category.
  • -
  • mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.
  • -
  • desktop any | “undefined” - The Desktop file entries (name to value).
  • -
  • executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName
  • -
-

Inherited from TargetSpecificOptions:

- - - - ---- - -## Troubleshooting - -If the Flatpak build process fails with an error message like "flatpak failed with status code X", setting the `DEBUG="@malept/flatpak-bundler"` environment variable should provide more context about the error. - -!!! example "Enable Flatpak build debug logging" - `env DEBUG="@malept/flatpak-bundler" electron-builder build --linux flatpak` diff --git a/docs/configuration/linux.md b/docs/configuration/linux.md deleted file mode 100644 index 717e55c3d4a..00000000000 --- a/docs/configuration/linux.md +++ /dev/null @@ -1,58 +0,0 @@ -The top-level [linux](configuration.md#Configuration-linux) key contains set of options instructing electron-builder on how it should build Linux targets. These options applicable for any Linux target. - - -
    -
  • -

    target = AppImage String | TargetConfiguration - Target package type: list of AppImage, flatpak, snap, deb, rpm, freebsd, pacman, p5p, apk, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir.

    -

    electron-builder docker image can be used to build Linux targets on any platform.

    -

    Please do not put an AppImage into another archive like a .zip or .tar.gz.

    -
  • -
  • -

    maintainer String | “undefined” - The maintainer. Defaults to author.

    -
  • -
  • -

    vendor String | “undefined” - The vendor. Defaults to author.

    -
  • -
  • -

    icon String - The path to icon set directory or one png file, relative to the build resources or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon. By default will be generated automatically based on the macOS icns file.

    -
  • -
  • -

    synopsis String | “undefined” - The short description.

    -
  • -
  • -

    description String | “undefined” - As description from application package.json, but allows you to specify different for Linux.

    -
  • -
  • -

    category String | “undefined” - The application category.

    -
  • -
  • -

    mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.

    -
  • -
  • -

    desktop any | “undefined” - The Desktop file entries (name to value).

    -
  • -
  • -

    executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName

    -
  • -
- - - ---- - -{!includes/platform-specific-configuration-note.md!} - -## Debian Package Options - -The top-level [deb](configuration.md#Configuration-deb) key contains set of options instructing electron-builder on how it should build Debian package. - -{!generated/DebOptions.md!} - -All [LinuxTargetSpecificOptions](linux.md#linuxtargetspecificoptions-apk-freebsd-pacman-p5p-and-rpm-options) can be also specified in the `deb` to customize Debian package. - -## `LinuxTargetSpecificOptions` APK, FreeBSD, Pacman, P5P and RPM Options - - -The top-level `apk`, `freebsd`, `pacman`, `p5p` and `rpm` keys contains set of options instructing electron-builder on how it should build corresponding Linux target. - -{!generated/LinuxTargetSpecificOptions.md!} diff --git a/docs/configuration/mac.md b/docs/configuration/mac.md deleted file mode 100644 index eb761d72c20..00000000000 --- a/docs/configuration/mac.md +++ /dev/null @@ -1,132 +0,0 @@ -The top-level [mac](configuration.md#Configuration-mac) key contains set of options instructing electron-builder on how it should build macOS targets. These options applicable for any macOS target. - - -

MacConfiguration

-

undefined

-
    -
  • -

    category String | “undefined” - The application category type, as shown in the Finder via View -> Arrange by Application Category when viewing the Applications directory.

    -

    For example, "category": "public.app-category.developer-tools" will set the application category to Developer Tools.

    -

    Valid values are listed in Apple’s documentation.

    -
  • -
  • -

    target String | TargetConfiguration - The target package type: list of default, dmg, mas, mas-dev, pkg, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir. Defaults to default (dmg and zip for Squirrel.Mac). Note: Squirrel.Mac auto update mechanism requires both dmg and zip to be enabled, even when only dmg is used. Disabling zip will break auto update in dmg packages.

    -
  • -
  • -

    identity String | “undefined” - The name of certificate to use when signing. Consider using environment variables CSC_LINK or CSC_NAME instead of specifying this option. MAS installer identity is specified in the mas.

    -
  • -
  • -

    icon = build/icon.icns String | “undefined” - The path to application icon.

    -
  • -
  • -

    entitlements String | “undefined” - The path to entitlements file for signing the app. build/entitlements.mac.plist will be used if exists (it is a recommended way to set). MAS entitlements is specified in the mas. See this folder in osx-sign’s repository for examples. Be aware that your app may crash if the right entitlements are not set like com.apple.security.cs.allow-jit for example on arm64 builds with Electron 20+. See Signing and Notarizing macOS Builds from the Electron documentation for more information.

    -
  • -
  • -

    entitlementsInherit String | “undefined” - The path to child entitlements which inherit the security settings for signing frameworks and bundles of a distribution. build/entitlements.mac.inherit.plist will be used if exists (it is a recommended way to set). See this folder in osx-sign’s repository for examples.

    -

    This option only applies when signing with entitlements provided.

    -
  • -
  • -

    entitlementsLoginHelper String | “undefined” - Path to login helper entitlement file. When using App Sandbox, the the com.apple.security.inherit key that is normally in the inherited entitlements cannot be inherited since the login helper is a standalone executable. Defaults to the value provided for entitlements. This option only applies when signing with entitlements provided.

    -
  • -
  • -

    provisioningProfile String | “undefined” - The path to the provisioning profile to use when signing, absolute or relative to the app root.

    -
  • -
  • -

    bundleVersion String | “undefined” - The CFBundleVersion. Do not use it unless you need to.

    -
  • -
  • -

    bundleShortVersion String | “undefined” - The CFBundleShortVersionString. Do not use it unless you need to.

    -
  • -
  • -

    darkModeSupport = false Boolean - Whether a dark mode is supported. If your app does have a dark mode, you can make your app follow the system-wide dark mode setting.

    -
  • -
  • -

    helperBundleId = ${appBundleIdentifier}.helper String | “undefined” - The bundle identifier to use in the application helper’s plist.

    -
  • -
  • -

    helperRendererBundleId = ${appBundleIdentifier}.helper.Renderer String | “undefined” - The bundle identifier to use in the Renderer helper’s plist.

    -
  • -
  • -

    helperPluginBundleId = ${appBundleIdentifier}.helper.Plugin String | “undefined” - The bundle identifier to use in the Plugin helper’s plist.

    -
  • -
  • -

    helperGPUBundleId = ${appBundleIdentifier}.helper.GPU String | “undefined” - The bundle identifier to use in the GPU helper’s plist.

    -
  • -
  • -

    helperEHBundleId = ${appBundleIdentifier}.helper.EH String | “undefined” - The bundle identifier to use in the EH helper’s plist.

    -
  • -
  • -

    helperNPBundleId = ${appBundleIdentifier}.helper.NP String | “undefined” - The bundle identifier to use in the NP helper’s plist.

    -
  • -
  • -

    type = distribution “distribution” | “development” | “undefined” - Whether to sign app for development or for distribution.

    -
  • -
  • -

    extendInfo any - The extra entries for Info.plist.

    -
  • -
  • -

    binaries Array<String> | “undefined” - Paths of any extra binaries that need to be signed.

    -
  • -
  • -

    minimumSystemVersion String | “undefined” - The minimum version of macOS required for the app to run. Corresponds to LSMinimumSystemVersion.

    -
  • -
  • -

    requirements String | “undefined” - Path of requirements file used in signing. Not applicable for MAS.

    -
  • -
  • -

    extraDistFiles Array<String> | String | “undefined” - Extra files to put in archive. Not applicable for tar.*.

    -
  • -
  • -

    hardenedRuntime = true Boolean - Whether your app has to be signed with hardened runtime.

    -
  • -
  • -

    gatekeeperAssess = false Boolean - Whether to let @electron/osx-sign validate the signing or not.

    -
  • -
  • -

    strictVerify = true Boolean - Whether to let @electron/osx-sign verify the contents or not.

    -
  • -
  • -

    preAutoEntitlements = true Boolean - Whether to enable entitlements automation from @electron/osx-sign.

    -
  • -
  • -

    signIgnore Array<String> | String | “undefined” - Regex or an array of regex’s that signal skipping signing a file.

    -
  • -
  • -

    sign module:app-builder-lib/out/macPackager.__type | String | “undefined” - The custom function (or path to file or module id) to sign an app bundle.

    -
  • -
  • -

    timestamp String | “undefined” - Specify the URL of the timestamp authority server

    -
  • -
  • -

    mergeASARs = true Boolean - Whether to merge ASAR files for different architectures or not.

    -

    This option has no effect unless building for “universal” arch.

    -
  • -
  • -

    singleArchFiles String | “undefined” - Minimatch pattern of paths that are allowed to be present in one of the ASAR files, but not in the other.

    -

    This option has no effect unless building for “universal” arch and applies only if mergeASARs is true.

    -
  • -
  • -

    x64ArchFiles String | “undefined” - Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files

    -

    This option has no effect unless building for “universal” arch and applies only if mergeASARs is true.

    -
  • -
  • -

    additionalArguments Array<String> | “undefined” - Array of strings specifying additional arguments to pass to the codesign command used to sign a specific file.

    -

    Some subresources that you may include in your Electron app may need to be signed with --deep, this is not typically safe to apply to the entire Electron app and therefore should be applied to just your file. Usage Example: ['--deep']

    -
  • -
  • -

    notarize NotarizeNotaryOptions | Boolean | “undefined” - Options to use for @electron/notarize (ref: https://github.com/electron/notarize). Use false to explicitly disable

    -

    Note: In order to activate the notarization step You MUST specify one of the following via environment variables: 1. APPLE_API_KEY, APPLE_API_KEY_ID and APPLE_API_ISSUER. 2. APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, and APPLE_TEAM_ID 3. APPLE_KEYCHAIN and APPLE_KEYCHAIN_PROFILE

    -

    For security reasons it is recommended to use the first option (see https://github.com/electron-userland/electron-builder/issues/7859)

    -
  • -
-

NotarizeNotaryOptions

-

undefined

-
    -
  • teamId String - The team ID you want to notarize under for when using notarytool Deprecated:
  • -
- - - ---- - -{!includes/platform-specific-configuration-note.md!} diff --git a/docs/configuration/mas.md b/docs/configuration/mas.md deleted file mode 100644 index 5d5f496f004..00000000000 --- a/docs/configuration/mas.md +++ /dev/null @@ -1,11 +0,0 @@ -The top-level [mas](configuration.md#Configuration-mas) key contains set of options instructing electron-builder on how it should build MAS (Mac Application Store) target. -Inherits [macOS options](mac.md). - - -
    -
  • entitlements String | “undefined” - The path to entitlements file for signing the app. build/entitlements.mas.plist will be used if exists (it is a recommended way to set). See this folder in osx-sign’s repository for examples. Be aware that your app may crash if the right entitlements are not set like com.apple.security.cs.allow-jit for example on arm64 builds with Electron 20+. See Signing and Notarizing macOS Builds from the Electron documentation for more information.
  • -
  • entitlementsInherit String | “undefined” - The path to child entitlements which inherit the security settings for signing frameworks and bundles of a distribution. build/entitlements.mas.inherit.plist will be used if exists (it is a recommended way to set). See this folder in osx-sign’s repository for examples.
  • -
  • binaries Array<String> | “undefined” - Paths of any extra binaries that need to be signed.
  • -
- - diff --git a/docs/configuration/msi-wrapped.md b/docs/configuration/msi-wrapped.md deleted file mode 100644 index d81b1bbad49..00000000000 --- a/docs/configuration/msi-wrapped.md +++ /dev/null @@ -1,17 +0,0 @@ -
    -
  • wrappedInstallerArgs String | “undefined” - Extra arguments to provide to the wrapped installer (ie: /S for silent install)
  • -
  • impersonate = false Boolean - Determines if the wrapped installer should be executed with impersonation
  • -
  • upgradeCode String | “undefined” - The upgrade code. Optional, by default generated using app id.
  • -
  • warningsAsErrors = true Boolean - If warningsAsErrors is true (default): treat warnings as errors. If warningsAsErrors is false: allow warnings.
  • -
  • additionalWixArgs Array<String> | “undefined” - Any additional arguments to be passed to the WiX installer compiler, such as ["-ext", "WixUtilExtension"]
  • -
  • oneClick Boolean
  • -
  • perMachine = false Boolean - Whether to install per all users (per-machine).
  • -
  • runAfterFinish = true Boolean - Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.
  • -
-
-
    -
  • createDesktopShortcut = true Boolean | “always” - Whether to create desktop shortcut. Set to always if to recreate also on reinstall (even if removed by user).
  • -
  • createStartMenuShortcut = true Boolean - Whether to create start menu shortcut.
  • -
  • menuCategory = false Boolean | String - Whether to create submenu for start menu shortcut and program files directory. If true, company name will be used. Or string value.
  • -
  • shortcutName String | “undefined” - The name that will be used for all shortcuts. Defaults to the application name.
  • -
diff --git a/docs/configuration/msi.md b/docs/configuration/msi.md deleted file mode 100644 index 61af2c59776..00000000000 --- a/docs/configuration/msi.md +++ /dev/null @@ -1,16 +0,0 @@ -
    -
  • oneClick = true Boolean - One-click installation.
  • -
  • upgradeCode String | “undefined” - The upgrade code. Optional, by default generated using app id.
  • -
  • warningsAsErrors = true Boolean - If warningsAsErrors is true (default): treat warnings as errors. If warningsAsErrors is false: allow warnings.
  • -
  • additionalWixArgs Array<String> | “undefined” - Any additional arguments to be passed to the WiX installer compiler, such as ["-ext", "WixUtilExtension"]
  • -
  • additionalLightArgs Array<String> | “undefined” - Any additional arguments to be passed to the light.ext, such as ["-cultures:ja-jp"]
  • -
  • perMachine = false Boolean - Whether to install per all users (per-machine).
  • -
  • runAfterFinish = true Boolean - Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.
  • -
-
-
    -
  • createDesktopShortcut = true Boolean | “always” - Whether to create desktop shortcut. Set to always if to recreate also on reinstall (even if removed by user).
  • -
  • createStartMenuShortcut = true Boolean - Whether to create start menu shortcut.
  • -
  • menuCategory = false Boolean | String - Whether to create submenu for start menu shortcut and program files directory. If true, company name will be used. Or string value.
  • -
  • shortcutName String | “undefined” - The name that will be used for all shortcuts. Defaults to the application name.
  • -
diff --git a/docs/configuration/pkg.md b/docs/configuration/pkg.md deleted file mode 100644 index 9d58adb7509..00000000000 --- a/docs/configuration/pkg.md +++ /dev/null @@ -1,64 +0,0 @@ -The top-level [pkg](configuration.md#Configuration-pkg) key contains set of options instructing electron-builder on how it should build [PKG](https://goo.gl/yVvgF6) (macOS installer component package). - - -
    -
  • -

    scripts = build/pkg-scripts String | “undefined” - The scripts directory, relative to build (build resources directory). The scripts can be in any language so long as the files are marked executable and have the appropriate shebang indicating the path to the interpreter. Scripts are required to be executable (chmod +x file). See: Scripting in installer packages.

    -
  • -
  • -

    installLocation = /Applications String | “undefined” - The install location. Do not use it to create per-user package. Mostly never you will need to change this option. /Applications would install it as expected into /Applications if the local system domain is chosen, or into $HOME/Applications if the home installation is chosen.

    -
  • -
  • -

    allowAnywhere = true Boolean | “undefined” - Whether can be installed at the root of any volume, including non-system volumes. Otherwise, it cannot be installed at the root of a volume.

    -

    Corresponds to enable_anywhere.

    -
  • -
  • -

    allowCurrentUserHome = true Boolean | “undefined” - Whether can be installed into the current user’s home directory. A home directory installation is done as the current user (not as root), and it cannot write outside of the home directory. If the product cannot be installed in the user’s home directory and be not completely functional from user’s home directory.

    -

    Corresponds to enable_currentUserHome.

    -
  • -
  • -

    allowRootDirectory = true Boolean | “undefined” - Whether can be installed into the root directory. Should usually be true unless the product can be installed only to the user’s home directory.

    -

    Corresponds to enable_localSystem.

    -
  • -
  • -

    identity String | “undefined” - The name of certificate to use when signing. Consider using environment variables CSC_LINK or CSC_NAME instead of specifying this option.

    -
  • -
  • -

    license String | “undefined” - The path to EULA license file. Defaults to license.txt or eula.txt (or uppercase variants). In addition to txt, rtf and html supported (don’t forget to use target="_blank" for links).

    -
  • -
  • -

    background PkgBackgroundOptions | “undefined” - Options for the background image for the installer.

    -
  • -
  • -

    welcome String | “undefined” - The path to the welcome file. This may be used to customize the text on the Introduction page of the installer.

    -
  • -
  • -

    mustClose Array<String> | “undefined” - Identifies applications that must be closed before the package is installed.

    -

    Corresponds to must-close.

    -
  • -
  • -

    conclusion String | “undefined” - The path to the conclusion file. This may be used to customize the text on the final “Summary” page of the installer.

    -
  • -
  • -

    isRelocatable = true Boolean | “undefined” - Install bundle over previous version if moved by user?

    -
  • -
  • -

    isVersionChecked = true Boolean | “undefined” - Don’t install bundle if newer version on disk?

    -
  • -
  • -

    hasStrictIdentifier = true Boolean | “undefined” - Require identical bundle identifiers at install path?

    -
  • -
  • -

    overwriteAction = upgrade “upgrade” | “update” | “undefined” - Specifies how an existing version of the bundle on disk should be handled when the version in the package is installed.

    -

    If you specify upgrade, the bundle in the package atomi-cally replaces any version on disk; this has the effect of deleting old paths that no longer exist in the new version of the bundle.

    -

    If you specify update, the bundle in the package overwrites the version on disk, and any files not contained in the package will be left intact; this is appropriate when you are delivering an update-only package.

    -

    Another effect of update is that the package bundle will not be installed at all if there is not already a version on disk; this allows a package to deliver an update for an app that the user might have deleted.

    -
  • -
-

Inherited from TargetSpecificOptions:

- - - diff --git a/docs/configuration/publish.md b/docs/configuration/publish.md deleted file mode 100644 index 3426ecd3d18..00000000000 --- a/docs/configuration/publish.md +++ /dev/null @@ -1,354 +0,0 @@ -The [publish](configuration.md#Configuration-publish) key contains a set of options instructing electron-builder on how it should publish artifacts and build update info files for [auto update](../auto-update.md). - -`String | Object | Array` where `Object` it is [Keygen](#keygenoptions), [Generic Server](#genericserveroptions), [GitHub](#githuboptions), [S3](#s3options), [Spaces](#spacesoptions) or [Snap Store](#snapstoreoptions) options. Order is important — first item will be used as a default auto-update server. Can be specified in the [top-level configuration](configuration.md#configuration) or any platform- ([mac](mac.md), [linux](linux.md), [win](win.md)) or target- (e.g. [nsis](nsis.md)) specific configuration. - -Note that when using a generic server, you have to upload the built application and metadata files yourself. - -Travis and AppVeyor support publishing artifacts. But it requires additional configuration for each CI and you need to configure what to publish. -`electron-builder` makes publishing dead simple. - -If `GH_TOKEN` or `GITHUB_TOKEN` is defined — defaults to `[{provider: "github"}]`. - -If `KEYGEN_TOKEN` is defined and `GH_TOKEN` or `GITHUB_TOKEN` is not — defaults to `[{provider: "keygen"}]`. - -If `GITHUB_RELEASE_TOKEN` is defined, it will be used instead of (`GH_TOKEN` or `GITHUB_TOKEN`) to publish your release. -- e.g. mac: ``` export GITHUB_RELEASE_TOKEN= ``` -- the `GITHUB_TOKEN` will still be used when your app checks for updates, etc. -- you could make your `GITHUB_TOKEN` "Read-only" when creating a fine-grained personal access token, and "Read and write" for the `GITHUB_RELEASE_TOKEN`. -- "Contents" fine-grained permission was sufficient. (at time of writing - Apr 2024) - -!!! info "Snap store" - `snap` target by default publishes to snap store (the app store for Linux). To force publishing to another providers, explicitly specify publish configuration for `snap`. - -You can publish to multiple providers. For example, to publish Windows artifacts to both GitHub and Bitbucket (order is important — first item will be used as a default auto-update server, so, in this example app will use github as auto-update provider): - -```json -{ - "build": { - "win": { - "publish": ["github", "bitbucket"] - } - } -} -``` - -```yaml -win: - publish: - # an object provider for github with additional options - - provider: github - protocol: https - # a string provider for bitbucket that will use default options - - bitbucket -``` - -You can also configure publishing using CLI arguments, for example, to force publishing snap not to Snap Store, but to GitHub: `-c.snap.publish=github` - -[Custom](https://github.com/electron-userland/electron-builder/issues/3261) publish provider can be used if need. - -!!! tip "Macros" - In all publish options [File Macros](../file-patterns.md#file-macros) are supported. - -## How to Publish - -Excerpt from [CLI Usage](../cli.md) of `electron-builder` command: -``` -Publishing: - --publish, -p [choices: "onTag", "onTagOrDraft", "always", "never"] -``` -CLI `--publish` option values: - -| Value | Description -| -------------- | ----------- -| `onTag` | on tag push only -| `onTagOrDraft` | on tag push or if draft release exists -| `always` | always publish -| `never` | never publish - -But please consider using automatic rules instead of explicitly specifying `publish`: - -* If CI server detected, — `onTagOrDraft`. - -* If CI server reports that tag was pushed, — `onTag`. - - Release will be drafted (if doesn't already exist) and artifacts published only if tag was pushed. - -* If [npm script](https://docs.npmjs.com/misc/scripts) named `release`, — `always`. - - Add to `scripts` in the development `package.json`: - - ```json - "release": "electron-builder" - ``` - - and if you run `yarn release`, a release will be drafted (if doesn't already exist) and artifacts published. - -### Recommended GitHub Releases Workflow - -1. [Draft a new release](https://help.github.com/articles/creating-releases/). Set the "Tag version" to the value of `version` in your application `package.json`, and prefix it with `v`. "Release title" can be anything you want. - - For example, if your application `package.json` version is `1.0`, your draft's "Tag version" would be `v1.0`. - -2. Push some commits. Every CI build will update the artifacts attached to this draft. -3. Once you are done, publish the release. GitHub will tag the latest commit for you. - -The benefit of this workflow is that it allows you to always have the latest artifacts, and the release can be published once it is ready. - -### Continuous Deployment Workflow on Amazon S3 and other non-GitHub - -This example workflow is modelled on how releases are handled in maven (it is an example of one of many possible workflows, you are not forced to follow it). - -1. Setup your CI to publish on each commit. E.g. `"dist": "electron-builder --publish always"` in your `package.json`. -2. Set your version in your application `package.json` to `1.9.0-snapshot` (or `1.9.0-master` or whatever you want your development channel to be named). This will publish a file named `snapshot.yml` and a build named `something-snapshot.exe` (and corresponding for mac) to S3. -3. When you are ready to deploy, simply change you package version to `1.9.0` and push. This will then produce a `latest.yml` and `something.exe` on s3. Usually you'll git-tag this version as well (just to keep track of it). -4. Change the version back to a snapshot version right after, i.e. `1.10.0-snapshot`, and commit it. - -## GitHub Repository - -Detected automatically using: - -* [repository](https://docs.npmjs.com/files/package.json#repository) in the application or development `package.json`, -* if not set, env - * `TRAVIS_REPO_SLUG` - * or `APPVEYOR_REPO_NAME` - * or `CIRCLE_PROJECT_USERNAME`/`CIRCLE_PROJECT_REPONAME`, -* if no env, from `.git/config` origin url. - -## Publishers -**Options Available:** -- GenericServerOptions -- GithubOptions -- SnapStoreOptions -- SpacesOptions -- KeygenOptions -- BitbucketOptions -- S3Options - - -

GenericServerOptions

-

Generic (any HTTP(S) server) options. -In all publish options File Macros are supported.

-
    -
  • provider “generic” - The provider. Must be generic.
  • -
  • url String - The base url. e.g. https://bucket_name.s3.amazonaws.com.
  • -
  • channel = latest String | “undefined” - The channel.
  • -
  • useMultipleRangeRequest Boolean - Whether to use multiple range requests for differential update. Defaults to true if url doesn’t contain s3.amazonaws.com.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
-

GithubOptions

-

GitHub options.

-

GitHub personal access token is required. You can generate by going to https://github.com/settings/tokens/new. The access token should have the repo scope/permission. -Define GH_TOKEN environment variable.

-
    -
  • -

    provider “github” - The provider. Must be github.

    -
  • -
  • -

    repo String | “undefined” - The repository name. Detected automatically.

    -
  • -
  • -

    owner String | “undefined” - The owner.

    -
  • -
  • -

    vPrefixedTagName = true Boolean - Whether to use v-prefixed tag name.

    -
  • -
  • -

    host = github.com String | “undefined” - The host (including the port if need).

    -
  • -
  • -

    protocol = https “https” | “http” | “undefined” - The protocol. GitHub Publisher supports only https.

    -
  • -
  • -

    token String | “undefined” - The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for setFeedURL.

    -
  • -
  • -

    private Boolean | “undefined” - Whether to use private github auto-update provider if GH_TOKEN environment variable is defined. See Private GitHub Update Repo.

    -
  • -
  • -

    channel = latest String | “undefined” - The channel.

    -
  • -
  • -

    releaseType = draft “draft” | “prerelease” | “release” | “undefined” - The type of release. By default draft release will be created.

    -

    Also you can set release type using environment variable. If EP_DRAFTis set to truedraft, if EP_PRE_RELEASEis set to trueprerelease.

    -
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
-

SnapStoreOptions

-

Snap Store options. To publish directly to Snapcraft, see Snapcraft authentication options for local or CI/CD authentication options.

-
    -
  • provider “snapStore” - The provider. Must be snapStore.
  • -
  • repo String - snapcraft repo name
  • -
  • channels = ["edge"] String | Array<String> | “undefined” - The list of channels the snap would be released.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
-

SpacesOptions

-

DigitalOcean Spaces options. -Access key is required, define DO_KEY_ID and DO_SECRET_KEY environment variables.

-
    -
  • provider “spaces” - The provider. Must be spaces.
  • -
  • name String - The space name.
  • -
  • region String - The region (e.g. nyc3).
  • -
  • channel = latest String | “undefined” - The update channel.
  • -
  • path = / String | “undefined” - The directory path.
  • -
  • acl = public-read “private” | “public-read” | “undefined” - The ACL. Set to null to not add.
  • -
-

KeygenOptions

-

Keygen options. -https://keygen.sh/ -Define KEYGEN_TOKEN environment variable.

-
    -
  • provider “keygen” - The provider. Must be keygen.
  • -
  • account String - Keygen account’s UUID
  • -
  • product String - Keygen product’s UUID
  • -
  • channel = stable “stable” | “rc” | “beta” | “alpha” | “dev” | “undefined” - The channel.
  • -
  • platform String | “undefined” - The target Platform. Is set programmatically explicitly during publishing.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
-

BitbucketOptions

-

Bitbucket options. -https://bitbucket.org/ -Define BITBUCKET_TOKEN environment variable.

-

For converting an app password to a usable token, you can utilize this

-
convertAppPassword(owner: string, appPassword: string) {
-const base64encodedData = Buffer.from(`${owner}:${appPassword.trim()}`).toString("base64")
-return `Basic ${base64encodedData}`
-}
-
-
    -
  • provider “bitbucket” - The provider. Must be bitbucket.
  • -
  • owner String - Repository owner
  • -
  • token String | “undefined” - The app password to support auto-update from private bitbucket repositories.
  • -
  • username String | “undefined” - The user name to support auto-update from private bitbucket repositories.
  • -
  • slug String - Repository slug/name
  • -
  • channel = latest String | “undefined” - The channel.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
-

S3Options

-

Amazon S3 options. -AWS credentials are required, please see getting your credentials. -Define AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables. -Or in the ~/.aws/credentials.

-

Example configuration:

-
{
-"build":
-"publish": {
-"provider": "s3",
-"bucket": "bucket-name"
-}
-}
-}
-
-
    -
  • -

    provider “s3” - The provider. Must be s3.

    -
  • -
  • -

    bucket String - The bucket name.

    -
  • -
  • -

    region String | “undefined” - The region. Is determined and set automatically when publishing.

    -
  • -
  • -

    acl = public-read “private” | “public-read” | “undefined” - The ACL. Set to null to not add.

    -

    Please see required permissions for the S3 provider.

    -
  • -
  • -

    storageClass = STANDARD “STANDARD” | “REDUCED_REDUNDANCY” | “STANDARD_IA” | “undefined” - The type of storage to use for the object.

    -
  • -
  • -

    encryption “AES256” | “aws:kms” | “undefined” - Server-side encryption algorithm to use for the object.

    -
  • -
  • -

    endpoint String | “undefined” - The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like https://{service}.{region}.amazonaws.com.

    -
  • -
  • -

    accelerate Boolean - If set to true, this will enable the s3 accelerated endpoint These endpoints have a particular format of: ${bucketname}.s3-accelerate.amazonaws.com

    -
  • -
  • -

    channel = latest String | “undefined” - The update channel.

    -
  • -
  • -

    path = / String | “undefined” - The directory path.

    -
  • -
-

CustomPublishOptions

-

undefined

-
    -
  • provider “custom” - The provider. Must be custom.
  • -
  • updateProvider module:builder-util-runtime/out/publishOptions.__type - The Provider to provide UpdateInfo regarding available updates. Required to use custom providers with electron-updater.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
  • -

    timeout = 120000 Number | “undefined” - Request timeout in milliseconds. (Default is 2 minutes; O is ignored)

    -
  • -
- - diff --git a/docs/configuration/snap.md b/docs/configuration/snap.md deleted file mode 100644 index 75f77b45d50..00000000000 --- a/docs/configuration/snap.md +++ /dev/null @@ -1,85 +0,0 @@ -The top-level [snap](configuration.md#Configuration-snap) key contains set of options instructing electron-builder on how it should build [Snap](http://snapcraft.io). - - -
    -
  • -

    base String | “undefined” - A snap of type base to be used as the execution environment for this snap. Examples: core, core18, core20, core22. Defaults to core20

    -
  • -
  • -

    confinement = strict “devmode” | “strict” | “classic” | “undefined” - The type of confinement supported by the snap.

    -
  • -
  • -

    environment Object<String, any> | “undefined” - The custom environment. Defaults to {"TMPDIR: "$XDG_RUNTIME_DIR"}. If you set custom, it will be merged with default.

    -
  • -
  • -

    summary String | “undefined” - The 78 character long summary. Defaults to productName.

    -
  • -
  • -

    grade = stable “devel” | “stable” | “undefined” - The quality grade of the snap. It can be either devel (i.e. a development version of the snap, so not to be published to the “stable” or “candidate” channels) or “stable” (i.e. a stable release or release candidate, which can be released to all channels).

    -
  • -
  • -

    assumes Array<String> | String | “undefined” - The list of features that must be supported by the core in order for this snap to install.

    -
  • -
  • -

    buildPackages Array<String> | “undefined” - The list of debian packages needs to be installed for building this snap.

    -
  • -
  • -

    stagePackages Array<String> | “undefined” - The list of Ubuntu packages to use that are needed to support the app part creation. Like depends for deb. Defaults to ["libnspr4", "libnss3", "libxss1", "libappindicator3-1", "libsecret-1-0"].

    -

    If list contains default, it will be replaced to default list, so, ["default", "foo"] can be used to add custom package foo in addition to defaults.

    -
  • -
  • -

    hooks = build/snap-hooks String | “undefined” - The hooks directory, relative to build (build resources directory).

    -
  • -
  • -

    plugs Array<String | SnapOptions.PlugDescriptor> - The list of plugs. Defaults to ["desktop", "desktop-legacy", "home", "x11", "wayland", "unity7", "browser-support", "network", "gsettings", "audio-playback", "pulseaudio", "opengl"].

    -

    If list contains default, it will be replaced to default list, so, ["default", "foo"] can be used to add custom plug foo in addition to defaults.

    -

    Additional attributes can be specified using object instead of just name of plug: [ { "browser-sandbox": { "interface": "browser-support", "allow-sandbox": true }, }, "another-simple-plug-name" ]

    -
  • -
  • -

    slots Array<String | SlotDescriptor> | PlugDescriptor | “undefined” - The list of slots.

    -

    Additional attributes can be specified using object instead of just name of slot: ``` [ { “mpris”: { “name”: “chromium” }, } ]

    -

    In case you want your application to be a compliant MPris player, you will need to definie The mpris slot with “chromium” name. This electron has it hardcoded, and we need to pass this name so snap will allow it in strict confinement.

    -
  • -
  • -

    after Array<String> | “undefined” - Specifies any parts that should be built before this part. Defaults to ["desktop-gtk2""].

    -

    If list contains default, it will be replaced to default list, so, ["default", "foo"] can be used to add custom parts foo in addition to defaults.

    -
  • -
  • -

    useTemplateApp Boolean - Whether to use template snap. Defaults to true if stagePackages not specified.

    -
  • -
  • -

    autoStart = false Boolean - Whether or not the snap should automatically start on login.

    -
  • -
  • -

    layout Object<String, any> | “undefined” - Specifies any files to make accessible from locations such as /usr, /var, and /etc. See snap layouts to learn more.

    -
  • -
  • -

    appPartStage Array<String> | “undefined” - Specifies which files from the app part to stage and which to exclude. Individual files, directories, wildcards, globstars, and exclusions are accepted. See Snapcraft filesets to learn more about the format.

    -

    The defaults can be found in snap.ts.

    -
  • -
  • -

    title String | “undefined” - An optional title for the snap, may contain uppercase letters and spaces. Defaults to productName. See snap format documentation.

    -
  • -
  • -

    compression “xz” | “lzo” | “undefined” - Sets the compression type for the snap. Can be xz, lzo, or null.

    -
  • -
  • -

    allowNativeWayland Boolean | “undefined” - Allow running the program with native wayland support with --ozone-platform=wayland. Disabled by default because of this issue in older Electron/Snap versions: https://github.com/electron-userland/electron-builder/issues/4007

    -
  • -
-

Inherited from CommonLinuxOptions:

-
    -
  • synopsis String | “undefined” - The short description.
  • -
  • description String | “undefined” - As description from application package.json, but allows you to specify different for Linux.
  • -
  • category String | “undefined” - The application category.
  • -
  • mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.
  • -
  • desktop any | “undefined” - The Desktop file entries (name to value).
  • -
  • executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName
  • -
-

Inherited from TargetSpecificOptions:

- - - diff --git a/docs/configuration/squirrel-windows.md b/docs/configuration/squirrel-windows.md deleted file mode 100644 index 9c5d0227993..00000000000 --- a/docs/configuration/squirrel-windows.md +++ /dev/null @@ -1,39 +0,0 @@ -The top-level [squirrelWindows](configuration.md#Configuration-squirrelWindows) key contains set of options instructing electron-builder on how it should build Squirrel.Windows. - -Squirrel.Windows target is maintained, but deprecated. Please use [nsis](nsis.md) instead. - -To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. -To build for Squirrel.Windows on macOS, please install `mono` (`brew install mono`). - -Your app must be able to handle Squirrel.Windows startup events that occur during install and uninstall. See [electron-squirrel-startup](https://github.com/mongodb-js/electron-squirrel-startup). - - -
    -
  • -

    iconUrl String | “undefined” - A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features). Defaults to the Electron icon.

    -

    Please note — local icon file url is not accepted, must be https/http.

    -

    If you don’t plan to build windows installer, you can omit it. If your project repository is public on GitHub, it will be https://github.com/${u}/${p}/blob/master/build/icon.ico?raw=true by default.

    -
  • -
  • -

    loadingGif String | “undefined” - The path to a .gif file to display during install. build/install-spinner.gif will be used if exists (it is a recommended way to set) (otherwise default).

    -
  • -
  • -

    msi Boolean - Whether to create an MSI installer. Defaults to false (MSI is not created).

    -
  • -
  • -

    remoteReleases String | Boolean | “undefined” - A URL to your existing updates. Or true to automatically set to your GitHub repository. If given, these will be downloaded to create delta updates.

    -
  • -
  • -

    remoteToken String | “undefined” - Authentication token for remote updates

    -
  • -
  • -

    useAppIdAsId Boolean - Use appId to identify package instead of name.

    -
  • -
-

Inherited from TargetSpecificOptions:

- - - diff --git a/docs/configuration/win.md b/docs/configuration/win.md deleted file mode 100644 index 99261b322a8..00000000000 --- a/docs/configuration/win.md +++ /dev/null @@ -1,166 +0,0 @@ -The top-level [win](configuration.md#Configuration-win) key contains set of options instructing electron-builder on how it should build Windows targets. These options applicable for any Windows target. - - -
    -
  • -

    target = nsis String | TargetConfiguration - The target package type: list of nsis, nsis-web (Web installer), portable (portable app without installation), appx, msi, msi-wrapped, squirrel, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir. AppX package can be built only on Windows 10.

    -

    To use Squirrel.Windows please install electron-builder-squirrel-windows dependency.

    -
  • -
  • -

    icon = build/icon.ico String | “undefined” - The path to application icon.

    -
  • -
  • -

    legalTrademarks String | “undefined” - The trademarks and registered trademarks.

    -
  • -
-
-
    -
  • signingHashAlgorithms Array<“sha256” | “sha1”> | “undefined” - Array of signing algorithms used. For AppX sha256 is always used. Deprecated:
  • -
  • sign String | (configuration: CustomWindowsSignTaskConfiguration) => Promise - The custom function (or path to file or module id) to sign Windows executables Deprecated:
  • -
  • certificateFile String | “undefined” - The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable CSC_LINK (WIN_CSC_LINK) for some reason. Please see Code Signing. Deprecated:
  • -
  • certificatePassword String | “undefined” - The password to the certificate provided in certificateFile. Please use it only if you cannot use env variable CSC_KEY_PASSWORD (WIN_CSC_KEY_PASSWORD) for some reason. Please see Code Signing. Deprecated:
  • -
  • certificateSubjectName String | “undefined” - The name of the subject of the signing certificate, which is often labeled with the field name issued to. Required only for EV Code Signing and works only on Windows (or on macOS if Parallels Desktop Windows 10 virtual machines exits). Deprecated:
  • -
  • certificateSha1 String | “undefined” - The SHA1 hash of the signing certificate. The SHA1 hash is commonly specified when multiple certificates satisfy the criteria specified by the remaining switches. Works only on Windows (or on macOS if Parallels Desktop Windows 10 virtual machines exits). Deprecated:
  • -
  • additionalCertificateFile String | “undefined” - The path to an additional certificate file you want to add to the signature block. Deprecated:
  • -
  • rfc3161TimeStampServer = http://timestamp.digicert.com String | “undefined” - The URL of the RFC 3161 time stamp server. Deprecated:
  • -
  • timeStampServer = http://timestamp.digicert.com String | “undefined” - The URL of the time stamp server. Deprecated:
  • -
-
-
    -
  • publisherName String | Array<String> | “undefined” - The publisher name, exactly as in your code signed certificate. Several names can be provided. Defaults to common name from your code signing certificate. Deprecated:
  • -
  • signtoolOptions WindowsSigntoolConfiguration | “undefined” - Options for usage with signtool.exe
  • -
  • azureSignOptions WindowsAzureSigningConfiguration | “undefined” - Options for usage of Azure Trusted Signing (beta)
  • -
  • verifyUpdateCodeSignature = true Boolean - Whether to verify the signature of an available update before installation. The publisher name will be used for the signature verification.
  • -
  • requestedExecutionLevel = asInvoker “asInvoker” | “highestAvailable” | “requireAdministrator” | “undefined” - The security level at which the application requests to be executed. Cannot be specified per target, allowed only in the win.
  • -
  • signAndEditExecutable = true Boolean - Whether to sign and add metadata to executable. Advanced option.
  • -
  • signDlls = false Boolean - Whether to sign DLL files. Advanced option. See: https://github.com/electron-userland/electron-builder/issues/3101#issuecomment-404212384 Deprecated:
  • -
  • signExts Array<String> | “undefined” - Explicit file extensions to also sign. Advanced option. See: https://github.com/electron-userland/electron-builder/issues/7329
  • -
-

WindowsAzureSigningConfiguration

-

Also allows custom fields [k: string: string] passed verbatim (case sensitive) to Invoke-TrustedSigning

-
    -
  • -

    endpoint String - The Trusted Signing Account endpoint. The URI value must have a URI that aligns to the region your Trusted Signing Account and Certificate Profile you are specifying were created in during the setup of these resources.

    -

    Translates to field: Endpoint

    -

    Requires one of environment variable configurations for authenticating to Microsoft Entra ID per Microsoft’s documentation

    -
  • -
  • -

    certificateProfileName String - The Certificate Profile name. Translates to field: CertificateProfileName

    -
  • -
-

WindowsSigntoolConfiguration

-

undefined

-
    -
  • sign module:app-builder-lib/out/codeSign/windowsSignToolManager.__type | String | “undefined” - The custom function (or path to file or module id) to sign Windows executables
  • -
-
-
    -
  • signingHashAlgorithms = ['sha1', 'sha256'] Array<“sha256” | “sha1”> | “undefined” - Array of signing algorithms used. For AppX sha256 is always used.
  • -
  • certificateFile String | “undefined” - The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable CSC_LINK (WIN_CSC_LINK) for some reason. Please see Code Signing.
  • -
  • certificatePassword String | “undefined” - The password to the certificate provided in certificateFile. Please use it only if you cannot use env variable CSC_KEY_PASSWORD (WIN_CSC_KEY_PASSWORD) for some reason. Please see Code Signing.
  • -
  • certificateSubjectName String | “undefined” - The name of the subject of the signing certificate, which is often labeled with the field name issued to. Required only for EV Code Signing and works only on Windows (or on macOS if Parallels Desktop Windows 10 virtual machines exits).
  • -
  • certificateSha1 String | “undefined” - The SHA1 hash of the signing certificate. The SHA1 hash is commonly specified when multiple certificates satisfy the criteria specified by the remaining switches. Works only on Windows (or on macOS if Parallels Desktop Windows 10 virtual machines exits).
  • -
  • additionalCertificateFile String | “undefined” - The path to an additional certificate file you want to add to the signature block.
  • -
  • rfc3161TimeStampServer = http://timestamp.digicert.com String | “undefined” - The URL of the RFC 3161 time stamp server.
  • -
  • timeStampServer = http://timestamp.digicert.com String | “undefined” - The URL of the time stamp server.
  • -
-
-
    -
  • publisherName String | Array<String> | “undefined” - The publisher name, exactly as in your code signed certificate. Several names can be provided. Defaults to common name from your code signing certificate.
  • -
- - - ---- - -{!includes/platform-specific-configuration-note.md!} - -## Common Questions -#### How do delegate code signing? - -Use [sign](#WindowsConfiguration-sign) option. Please also see [why sign.js is called 8 times](https://github.com/electron-userland/electron-builder/issues/3995). - -```json -"win": { - "sign": "./customSign.js" -} -``` - -File `customSign.js` in the project root directory: -```js -exports.default = async function(configuration) { - // your custom code -} -``` - -#### How do use a custom verify function to enable nsis signature verification alternatives instead of powershell? - -Use the `verifyUpdateCodeSignature` interface: - -```js -/** -* return null if verify signature succeed -* return error message if verify signature failed -*/ -export type verifyUpdateCodeSignature = (publisherName: string[], path: string) => Promise -``` - -Pass a custom verify function to the nsis updater. For example, if you want to use a native verify function, you can use [win-verify-signature](https://github.com/beyondkmp/win-verify-trust). - - -```js -import { NsisUpdater } from "electron-updater" -import { verifySignatureByPublishName } from "win-verify-signature" -// Or MacUpdater, AppImageUpdater - -export default class AppUpdater { - constructor() { - const options = { - requestHeaders: { - // Any request headers to include here - }, - provider: 'generic', - url: 'https://example.com/auto-updates' - } - - const autoUpdater = new NsisUpdater(options) - autoUpdater.verifyUpdateCodeSignature = (publisherName: string[], path: string) => { - const result = verifySignatureByPublishName(path, publisherName); - if(result.signed) return Promise.resolve(null); - return Promise.resolve(result.message); - } - autoUpdater.addAuthHeader(`Bearer ${token}`) - autoUpdater.checkForUpdatesAndNotify() - } -} -``` - - -#### How do create Parallels Windows 10 Virtual Machine? - -!!! warning "Disable "Share Mac user folders with Windows"" - If you use Parallels, you [must not use](https://github.com/electron-userland/electron-builder/issues/865#issuecomment-258105498) "Share Mac user folders with Windows" feature and must not run installers from such folders. - -You don't need to have Windows 10 license. Free is provided (expire after 90 days, but it is not a problem because no additional setup is required). - -1. Open Parallels Desktop. -2. File -> New. -3. Select "Modern.IE" in the "Free Systems". -4. Continue, Continue, Accept software license agreement. -5. Select "Microsoft Edge on Windows 10". -6. The next steps are general, see [Installing Windows on your Mac using Parallels Desktop](http://kb.parallels.com/4729) from "Step 6: Specify a name and location". - -Parallels Windows 10 VM will be used automatically to build AppX on macOS. No need even start VM — it will be started automatically on demand and suspended after build. No need to specify VM — it will be detected automatically (first Windows 10 VM will be used). - -#### How do create VirtualBox Windows 10 Virtual Machine? - -If you are not on macOS or don't want to buy [Parallels Desktop](https://www.parallels.com/products/desktop/), you can use free [VirtualBox](https://www.virtualbox.org/wiki/Downloads). - -1. Open [Download virtual machines](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/). -2. Select "MSEdge on Win10 (x64) Stable". -3. Select "VirtualBox" platform. -4. Download. See [installation instructions](https://az792536.vo.msecnd.net/vms/release_notes_license_terms_8_1_15.pdf). - -The password to your VM is `Passw0rd!`. - -VirtualBox is not supported by electron-builder for now, so, you need to setup build environment on Windows if you want to use VirtualBox to build AppX (and other Windows-only tasks). diff --git a/docs/generated/DebOptions.md b/docs/generated/DebOptions.md deleted file mode 100644 index 5294cfea053..00000000000 --- a/docs/generated/DebOptions.md +++ /dev/null @@ -1,6 +0,0 @@ -
    -
  • depends Array<String> | “undefined” - Package dependencies. Defaults to ["gconf2", "gconf-service", "libnotify4", "libappindicator1", "libxtst6", "libnss3"]. If need to support Debian, libappindicator1 should be removed, it is deprecated in Debian. If need to support KDE, gconf2 and gconf-service should be removed as it’s no longer used by GNOME.
  • -
  • recommends Array<String> | “undefined” - The recommended package dependencies
  • -
  • packageCategory String | “undefined” - The package category.
  • -
  • priority String | “undefined” - The Priority attribute.
  • -
diff --git a/docs/generated/LinuxTargetSpecificOptions.md b/docs/generated/LinuxTargetSpecificOptions.md deleted file mode 100644 index 289bf06b9f6..00000000000 --- a/docs/generated/LinuxTargetSpecificOptions.md +++ /dev/null @@ -1,47 +0,0 @@ -
    -
  • -

    depends Array<String> | “undefined” - Package dependencies.

    -
  • -
  • -

    compression = xz “gz” | “bzip2” | “xz” | “lzo” | “undefined” - The compression type.

    -
  • -
  • -

    icon String

    -
  • -
  • -

    packageCategory String | “undefined” - The package category.

    -
  • -
  • -

    packageName String | “undefined” - The name of the package.

    -
  • -
  • -

    vendor String | “undefined”

    -
  • -
  • -

    maintainer String | “undefined”

    -
  • -
  • -

    afterInstall String | “undefined”

    -
  • -
  • -

    afterRemove String | “undefined”

    -
  • -
  • -

    fpm Array<String> | “undefined” - Advanced only The fpm options.

    -

    Example: ["--before-install=build/deb-preinstall.sh", "--after-upgrade=build/deb-postinstall.sh"]

    -
  • -
-

Inherited from CommonLinuxOptions:

-
    -
  • synopsis String | “undefined” - The short description.
  • -
  • description String | “undefined” - As description from application package.json, but allows you to specify different for Linux.
  • -
  • category String | “undefined” - The application category.
  • -
  • mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.
  • -
  • desktop any | “undefined” - The Desktop file entries (name to value).
  • -
  • executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName
  • -
-

Inherited from TargetSpecificOptions:

- diff --git a/docs/generated/Metadata.md b/docs/generated/Metadata.md deleted file mode 100644 index 2fcbcd34c07..00000000000 --- a/docs/generated/Metadata.md +++ /dev/null @@ -1,24 +0,0 @@ -
    -
  • -

    name String - The application name.

    -
  • -
  • -

    description String - The application description.

    -
  • -
  • -

    homepage String | “undefined” - The url to the project homepage (NuGet Package projectUrl (optional) or Linux Package URL (required)).

    -

    If not specified and your project repository is public on GitHub, it will be https://github.com/${user}/${project} by default.

    -
  • -
  • -

    license String | “undefined” - linux-only. The license name.

    -
  • -
  • -

    author AuthorMetadata | “undefined”

    -
  • -
  • -

    repository String | RepositoryInfo | “undefined” - The repository.

    -
  • -
  • -

    build Configuration - The electron-builder configuration.

    -
  • -
diff --git a/docs/generated/NsisOptions.md b/docs/generated/NsisOptions.md deleted file mode 100644 index 5e7de6648a8..00000000000 --- a/docs/generated/NsisOptions.md +++ /dev/null @@ -1,87 +0,0 @@ - - - -
    -
  • -

    oneClick = true Boolean - Whether to create one-click installer or assisted.

    -
  • -
  • -

    perMachine = false Boolean - Whether to show install mode installer page (choice per-machine or per-user) for assisted installer. Or whether installation always per all users (per-machine).

    -

    If oneClick is true (default): Whether to install per all users (per-machine).

    -

    If oneClick is false and perMachine is true: no install mode installer page, always install per-machine.

    -

    If oneClick is false and perMachine is false (default): install mode installer page.

    -
  • -
  • -

    selectPerMachineByDefault = false Boolean - Whether to set per-machine or per-user installation as default selection on the install mode installer page.

    -
  • -
  • -

    allowElevation = true Boolean - assisted installer only. Allow requesting for elevation. If false, user will have to restart installer with elevated permissions.

    -
  • -
  • -

    allowToChangeInstallationDirectory = false Boolean - assisted installer only. Whether to allow user to change installation directory.

    -
  • -
  • -

    removeDefaultUninstallWelcomePage = false Boolean - assisted installer only. remove the default uninstall welcome page.

    -
  • -
-
-
    -
  • installerIcon String | “undefined” - The path to installer icon, relative to the build resources or to the project directory. Defaults to build/installerIcon.ico or application icon.
  • -
  • uninstallerIcon String | “undefined” - The path to uninstaller icon, relative to the build resources or to the project directory. Defaults to build/uninstallerIcon.ico or application icon.
  • -
  • installerHeader = build/installerHeader.bmp String | “undefined” - assisted installer only. MUI_HEADERIMAGE, relative to the build resources or to the project directory.
  • -
  • installerHeaderIcon String | “undefined” - one-click installer only. The path to header icon (above the progress bar), relative to the build resources or to the project directory. Defaults to build/installerHeaderIcon.ico or application icon.
  • -
  • installerSidebar String | “undefined” - assisted installer only. MUI_WELCOMEFINISHPAGE_BITMAP, relative to the build resources or to the project directory. Defaults to build/installerSidebar.bmp or ${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp. Image size 164 × 314 pixels.
  • -
  • uninstallerSidebar String | “undefined” - assisted installer only. MUI_UNWELCOMEFINISHPAGE_BITMAP, relative to the build resources or to the project directory. Defaults to installerSidebar option or build/uninstallerSidebar.bmp or build/installerSidebar.bmp or ${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp
  • -
  • uninstallDisplayName = ${productName} ${version} String - The uninstaller display name in the control panel.
  • -
-
-
    -
  • -

    include String | “undefined” - The path to NSIS include script to customize installer. Defaults to build/installer.nsh. See Custom NSIS script.

    -
  • -
  • -

    script String | “undefined” - The path to NSIS script to customize installer. Defaults to build/installer.nsi. See Custom NSIS script.

    -
  • -
  • -

    license String | “undefined” - The path to EULA license file. Defaults to license.txt or eula.txt (or uppercase variants). In addition to txt, rtf and html supported (don’t forget to use target="_blank" for links).

    -

    Multiple license files in different languages are supported — use lang postfix (e.g. _de, _ru). For example, create files license_de.txt and license_en.txt in the build resources. If OS language is german, license_de.txt will be displayed. See map of language code to name.

    -

    Appropriate license file will be selected by user OS language.

    -
  • -
  • -

    artifactName String | “undefined” - The artifact file name template. Defaults to ${productName} Setup ${version}.${ext}.

    -
  • -
  • -

    deleteAppDataOnUninstall = false Boolean - one-click installer only. Whether to delete app data on uninstall.

    -
  • -
-
-
    -
  • displayLanguageSelector = false Boolean - Whether to display a language selection dialog. Not recommended (by default will be detected using OS language).
  • -
  • installerLanguages Array<String> | String | “undefined” - The installer languages (e.g. en_US, de_DE). Change only if you understand what do you do and for what.
  • -
  • language String | “undefined” - LCID Dec, defaults to 1033(English - United States).
  • -
  • multiLanguageInstaller Boolean - Whether to create multi-language installer. Defaults to unicode option value.
  • -
  • packElevateHelper = true Boolean - Whether to pack the elevate executable (required for electron-updater if per-machine installer used or can be used in the future). Ignored if perMachine is set to true.
  • -
  • preCompressedFileExtensions = [".avi", ".mov", ".m4v", ".mp4", ".m4p", ".qt", ".mkv", ".webm", ".vmdk"] Array<String> | String | “undefined” - The file extension of files that will be not compressed. Applicable only for extraResources and extraFiles files.
  • -
  • unicode = true Boolean - Whether to create Unicode installer.
  • -
  • guid String | “undefined” - See GUID vs Application Name.
  • -
  • warningsAsErrors = true Boolean - If warningsAsErrors is true (default): NSIS will treat warnings as errors. If warningsAsErrors is false: NSIS will allow warnings.
  • -
  • customNsisBinary CustomNsisBinary | “undefined” - Allows you to provide your own makensis, such as one with support for debug logging via LogSet and LogText. (Logging also requires option debugLogging = true)
  • -
  • runAfterFinish = true Boolean - Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.
  • -
-
-
    -
  • createDesktopShortcut = true Boolean | “always” - Whether to create desktop shortcut. Set to always if to recreate also on reinstall (even if removed by user).
  • -
  • createStartMenuShortcut = true Boolean - Whether to create start menu shortcut.
  • -
  • menuCategory = false Boolean | String - Whether to create submenu for start menu shortcut and program files directory. If true, company name will be used. Or string value.
  • -
  • shortcutName String | “undefined” - The name that will be used for all shortcuts. Defaults to the application name.
  • -
-

CustomNsisBinary

-

undefined

-
    -
  • url = https://github.com/electron-userland/electron-builder-binaries/releases/download String | “undefined”
  • -
  • checksum = VKMiizYdmNdJOWpRGz4trl4lD++BvYP2irAXpMilheUP0pc93iKlWAoP843Vlraj8YG19CVn0j+dCo/hURz9+Q== String | “undefined”
  • -
  • version = 3.0.4.1 String | “undefined”
  • -
  • debugLogging Boolean | “undefined” - Whether or not to enable NSIS logging for debugging. Note: Requires a debug-enabled NSIS build. electron-builder’s included makensis does not natively support debug-enabled NSIS installers currently, you must supply your own via customNsisBinary?: CustomNsisBinary In your custom nsis scripts, you can leverage this functionality via LogSet and LogText
  • -
- - diff --git a/docs/generated/PlatformSpecificBuildOptions.md b/docs/generated/PlatformSpecificBuildOptions.md deleted file mode 100644 index 5fc003aacea..00000000000 --- a/docs/generated/PlatformSpecificBuildOptions.md +++ /dev/null @@ -1,108 +0,0 @@ -
    -
  • -

    appId = com.electron.${name} String | “undefined” - The application id. Used as CFBundleIdentifier for MacOS and as Application User Model ID for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.

    -
  • -
  • -

    artifactName String | “undefined” - The artifact file name template. Defaults to ${productName}-${version}.${ext} (some target can have other defaults, see corresponding options).

    -
  • -
  • -

    executableName String | “undefined” - The executable name. Defaults to productName.

    -
  • -
  • -

    compression = normal “store” | “normal” | “maximum” | “undefined” - The compression level. If you want to rapidly test build, store can reduce build time significantly. maximum doesn’t lead to noticeable size difference, but increase build time.

    -
  • -
  • -

    disableDefaultIgnoredFiles = false Boolean | “undefined” - Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to false.

    -
  • -
  • -

    files The files configuration.

    -
  • -
  • -

    extraResources The extra resources configuration.

    -
  • -
  • -

    extraFiles The extra files configuration.

    -
  • -
  • -

    asar = true AsarOptions | Boolean | “undefined” - Whether to package the application’s source code into an archive, using Electron’s archive format.

    -

    Node modules, that must be unpacked, will be detected automatically, you don’t need to explicitly set asarUnpack - please file an issue if this doesn’t work.

    -
  • -
  • -

    asarUnpack Array<String> | String | “undefined” - A glob patterns relative to the app directory, which specifies which files to unpack when creating the asar archive.

    -
  • -
-
-
    -
  • fileAssociations Array<FileAssociation> | FileAssociation - The file associations. -
      -
    • -

      ext String | Array<String> - The extension (minus the leading period). e.g. png.

      -
    • -
    • -

      name String | “undefined” - The name. e.g. PNG. Defaults to ext.

      -
    • -
    • -

      description String | “undefined” - windows-only. The description.

      -
    • -
    • -

      mimeType String | “undefined” - linux-only. The mime-type.

      -
    • -
    • -

      icon String | “undefined” - The path to icon (.icns for MacOS and .ico for Windows), relative to build (build resources directory). Defaults to ${firstExt}.icns/${firstExt}.ico (if several extensions specified, first is used) or to application icon.

      -

      Not supported on Linux, file issue if need (default icon will be x-office-document). Not supported on MSI.

      -
    • -
    • -

      role = Editor String - macOS-only The app’s role with respect to the type. The value can be Editor, Viewer, Shell, or None. Corresponds to CFBundleTypeRole.

      -
    • -
    • -

      isPackage Boolean - macOS-only Whether the document is distributed as a bundle. If set to true, the bundle directory is treated as a file. Corresponds to LSTypeIsPackage.

      -
    • -
    • -

      rank = Default String - macOS-only The app’s rank with respect to the type. The value can be Owner, Default, Alternate, or None. Corresponds to LSHandlerRank.

      -
    • -
    -
  • -
  • protocols Array<Protocol> | Protocol - The URL protocol schemes. -
      -
    • name String - The name. e.g. IRC server URL.
    • -
    • schemes Array<String> - The schemes. e.g. ["irc", "ircs"].
    • -
    • role = Editor “Editor” | “Viewer” | “Shell” | “None” - macOS-only The app’s role with respect to the type.
    • -
    -
  • -
  • electronLanguages Array<String> | String - The electron locales to keep. By default, all Electron locales used as-is.
  • -
-
-
    -
  • -

    forceCodeSigning Boolean - Whether to fail if app will be not code signed.

    -
  • -
  • -

    electronUpdaterCompatibility String | “undefined” - The electron-updater compatibility semver range.

    -
  • -
  • -

    publish The publish options.

    -
  • -
  • -

    detectUpdateChannel = true Boolean - Whether to infer update channel from application version pre-release components. e.g. if version 0.12.1-alpha.1, channel will be set to alpha. Otherwise to latest.

    -
  • -
  • -

    generateUpdatesFilesForAllChannels = false Boolean - Please see Building and Releasing using Channels.

    -
  • -
  • -

    releaseInfo - The release info. Intended for command line usage:

    -

    -c.releaseInfo.releaseNotes="new features"

    -
      -
    • releaseName String | “undefined” - The release name.
    • -
    • releaseNotes String | “undefined” - The release notes.
    • -
    • releaseNotesFile String | “undefined” - The path to release notes file. Defaults to release-notes-${platform}.md (where platform it is current platform — mac, linux or windows) or release-notes.md in the build resources.
    • -
    • releaseDate String - The release date.
    • -
    • vendor Object<String, any> | “undefined” - Vendor specific information.
    • -
    -
  • -
  • -

    target String | TargetConfiguration

    -
  • -
  • -

    defaultArch String

    -
  • -
diff --git a/docs/generated/TargetSpecificOptions.md b/docs/generated/TargetSpecificOptions.md deleted file mode 100644 index 95db24f5561..00000000000 --- a/docs/generated/TargetSpecificOptions.md +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/docs/generated/appimage-options.md b/docs/generated/appimage-options.md deleted file mode 100644 index 0c03fc1fa6c..00000000000 --- a/docs/generated/appimage-options.md +++ /dev/null @@ -1,17 +0,0 @@ -
    -
  • license String | “undefined” - The path to EULA license file. Defaults to license.txt or eula.txt (or uppercase variants). Only plain text is supported.
  • -
-

Inherited from CommonLinuxOptions:

-
    -
  • synopsis String | “undefined” - The short description.
  • -
  • description String | “undefined” - As description from application package.json, but allows you to specify different for Linux.
  • -
  • category String | “undefined” - The application category.
  • -
  • mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.
  • -
  • desktop any | “undefined” - The Desktop file entries (name to value).
  • -
  • executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName
  • -
-

Inherited from TargetSpecificOptions:

- diff --git a/docs/generated/bitbucket-options.md b/docs/generated/bitbucket-options.md deleted file mode 100644 index 467979583e7..00000000000 --- a/docs/generated/bitbucket-options.md +++ /dev/null @@ -1,16 +0,0 @@ -
    -
  • provider “bitbucket” - The provider. Must be bitbucket.
  • -
  • owner String - Repository owner
  • -
  • slug String - Repository slug/name
  • -
  • channel = latest String | “undefined” - The channel.
  • -
-

Inherited from PublishConfiguration:

-
    -
  • -

    publishAutoUpdate = true Boolean - Whether to publish auto update info files.

    -

    Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.

    -
  • -
  • -

    requestHeaders module:http.OutgoingHttpHeaders - Any custom request headers

    -
  • -
diff --git a/docs/generated/s3-options.md b/docs/generated/s3-options.md deleted file mode 100644 index 6efd2230d0a..00000000000 --- a/docs/generated/s3-options.md +++ /dev/null @@ -1,30 +0,0 @@ -
    -
  • -

    provider “s3” - The provider. Must be s3.

    -
  • -
  • -

    bucket String - The bucket name.

    -
  • -
  • -

    region String | “undefined” - The region. Is determined and set automatically when publishing.

    -
  • -
  • -

    acl = public-read “private” | “public-read” | “undefined” - The ACL. Set to null to not add.

    -

    Please see required permissions for the S3 provider.

    -
  • -
  • -

    storageClass = STANDARD “STANDARD” | “REDUCED_REDUNDANCY” | “STANDARD_IA” | “undefined” - The type of storage to use for the object.

    -
  • -
  • -

    encryption “AES256” | “aws:kms” | “undefined” - Server-side encryption algorithm to use for the object.

    -
  • -
  • -

    endpoint String | “undefined” - The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like https://{service}.{region}.amazonaws.com.

    -
  • -
  • -

    channel = latest String | “undefined” - The update channel.

    -
  • -
  • -

    path = / String | “undefined” - The directory path.

    -
  • -
diff --git a/docs/includes/platform-specific-configuration-note.md b/docs/includes/platform-specific-configuration-note.md deleted file mode 100644 index 6854d10885e..00000000000 --- a/docs/includes/platform-specific-configuration-note.md +++ /dev/null @@ -1 +0,0 @@ -And all [common platform-specific options](/configuration/configuration#overridable-per-platform-options). diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 1b7edae75b4..00000000000 --- a/docs/index.md +++ /dev/null @@ -1,161 +0,0 @@ -# electron-builder [![npm version](https://img.shields.io/npm/v/electron-builder.svg?label=latest)](https://yarn.pm/electron-builder) [![downloads per month](https://img.shields.io/npm/dm/electron-builder.svg)](https://yarn.pm/electron-builder) [![donate](https://img.shields.io/badge/donate-donorbox-green.svg)](https://www.electron.build/donate) -A complete solution to package and build a ready for distribution Electron app for macOS, Windows and Linux with “auto update” support out of the box. - -* NPM packages management: - * [Native application dependencies](https://electron.atom.io/docs/tutorial/using-native-node-modules/) compilation (including [Yarn](http://yarnpkg.com/) support). - * Development dependencies are never included. You don't need to ignore them explicitly. - * [Two package.json structure](tutorials/two-package-structure.md) is supported, but you are not forced to use it even if you have native production dependencies. -* [Code Signing](code-signing.md) on a CI server or development machine. -* [Auto Update](auto-update.md) ready application packaging. -* Numerous target formats: - * All platforms: `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir` (unpacked directory). - * [macOS](configuration/mac.md#MacConfiguration-target): `dmg`, `pkg`, `mas`, `mas-dev`. - * [Linux](configuration/linux.md#LinuxConfiguration-target): [AppImage](http://appimage.org), [snap](http://snapcraft.io), debian package (`deb`), `rpm`, `freebsd`, `pacman`, `p5p`, `apk`. - * [Windows](configuration/win.md#WindowsConfiguration-target): `nsis` (Installer), `nsis-web` (Web installer), `portable` (portable app without installation), AppX (Windows Store), Squirrel.Windows. -* [Publishing artifacts](configuration/publish.md) to GitHub Releases, Amazon S3, DigitalOcean Spaces and Bintray. -* Advanced building: - * Pack in a distributable format [already packaged app](#pack-only-in-a-distributable-format). - * Separate [build steps](https://github.com/electron-userland/electron-builder/issues/1102#issuecomment-271845854). - * Build and publish in parallel, using hard links on CI server to reduce IO and disk space usage. - * [electron-compile](https://github.com/electron/electron-compile) support (compile for release-time on the fly on build). -* [Docker](multi-platform-build.md#docker) images to build Electron app for Linux or Windows on any platform. -* [Proton Native](https://proton-native.js.org/) support. -* Downloads all required tools files on demand automatically (e.g. to code sign windows application, to make AppX), no need to setup. - -| Question | Answer | -|--------|-------| -| “I want to configure electron-builder” | [See options](configuration/configuration.md) | -| “I have a question” | [Open an issue](https://github.com/electron-userland/electron-builder/issues) | -| “I found a bug” | [Open an issue](https://github.com/electron-userland/electron-builder/issues/new) | -| “I want to support development” | [Donate](donate.md) | - -## Installation -[Yarn](http://yarnpkg.com/) is [strongly](https://github.com/electron-userland/electron-builder/issues/1147#issuecomment-276284477) recommended instead of npm. - -`yarn add electron-builder --dev` - -### Note for PNPM - -In order to use with `pnpm`, you'll need to adjust your `.npmrc` to use any one the following approaches in order for your dependencies to be bundled correctly (ref: [#6389](https://github.com/electron-userland/electron-builder/issues/6289#issuecomment-1042620422)): -``` -node-linker=hoisted -``` -``` -public-hoist-pattern=* -``` -``` -shamefully-hoist=true -``` - -Note: Setting shamefully-hoist to true is the same as setting public-hoist-pattern to *. - -### Note for Yarn 3 - -Yarn 3 use PnP by default, but electron-builder still need node-modules(ref: [yarnpkg/berry#4804](https://github.com/yarnpkg/berry/issues/4804#issuecomment-1234407305)). Add configuration in the `.yarnrc.yaml` as follows: -``` -nodeLinker: "node-modules" -``` -will declare to use node-modules instead of PnP. - -## Boilerplates - -* [electron-webpack-quick-start](https://github.com/electron-userland/electron-webpack-quick-start) — A bare minimum project structure to get started developing with [electron-webpack](https://github.com/electron-userland/electron-webpack). Recommended. -* [electron-react-boilerplate](https://github.com/chentsulin/electron-react-boilerplate) A boilerplate for scalable cross-platform desktop apps. -* [electron-react-redux-boilerplate](https://github.com/jschr/electron-react-redux-boilerplate) A minimal boilerplate to get started with Electron, React and Redux. -* [electron-boilerplate](https://github.com/szwacz/electron-boilerplate) A minimalistic yet comprehensive boilerplate application. -* [Vue CLI 3 plugin for Electron](https://nklayman.github.io/vue-cli-plugin-electron-builder) A Vue CLI 3 plugin for Electron with no required configuration. -* [electron-vue-vite](https://github.com/caoxiemeihao/electron-vue-vite) A real simple Electron + Vue3 + Vite5 boilerplate. -* [vite-electron-builder](https://github.com/cawa-93/vite-electron-builder) Secure boilerplate for Electron app based on Vite. TypeScript + Vue/React/Angular/Svelte/Vanilla - -## Quick Setup Guide - -[electron-webpack-quick-start](https://github.com/electron-userland/electron-webpack-quick-start) is a recommended way to create a new Electron application. - -1. Specify the standard fields in the application `package.json` — [name](configuration/configuration.md#Metadata-name), `description`, `version` and [author](https://docs.npmjs.com/files/package.json#people-fields-author-contributors). - -2. Specify the [build](configuration/configuration.md#configuration) configuration in the `package.json` as follows: - ```json - "build": { - "appId": "your.id", - "mac": { - "category": "your.app.category.type" - } - } - ``` - See [all options](configuration/configuration.md#configuration). Option [files](configuration/contents.md#files) to indicate which files should be packed in the final application, including the entry file, maybe required. - -3. Add [icons](icons.md). - -4. Add the [scripts](https://docs.npmjs.com/cli/run-script) key to the development `package.json`: - ```json - "scripts": { - "pack": "electron-builder --dir", - "dist": "electron-builder" - } - ``` - Then you can run `yarn dist` (to package in a distributable format (e.g. dmg, windows installer, deb package)) or `yarn run pack` (only generates the package directory without really packaging it. This is useful for testing purposes). - - To ensure your native dependencies always matched the electron version, simply add script `"postinstall": "electron-builder install-app-deps"` to your `package.json`. - -5. If you have native addons of your own that are part of the application (not as a dependency), set [nodeGypRebuild](/configuration/configuration#Configuration-nodeGypRebuild) to `true`. - -Please note that everything is packaged into an asar archive [by default](configuration/configuration.md#Configuration-asar). - -For an app that will be shipped to production, you should sign your application. See [Where to buy code signing certificates](code-signing.md#where-to-buy-code-signing-certificate). - -## Programmatic Usage -See `node_modules/electron-builder/out/index.d.ts`. Typings for TypeScript are provided and also can be found [here](/api/electron-builder). - -Code snippit provided below is also shown "in action" [here](/api/programmatic-usage) as well. -```js -"use strict" - -const builder = require("electron-builder") -const Platform = builder.Platform - -// Promise is returned -builder.build({ - targets: Platform.MAC.createTarget(), - config: { - "//": "build options, see https://goo.gl/QQXmcV" - } -}) - .then(() => { - // handle result - }) - .catch((error) => { - // handle error - }) -``` - -## Pack Only in a Distributable Format - -You can use electron-builder only to pack your electron app in a AppImage, Snaps, Debian package, NSIS, macOS installer component package (`pkg`) -and other distributable formats. - -``` -./node_modules/.bin/electron-builder --prepackaged -``` - -`--projectDir` (the path to project directory) option also can be useful. - -## Debug - -Set the `DEBUG` environment variable to debug what electron-builder is doing: -```bash -DEBUG=electron-builder -``` - -`FPM_DEBUG` env to add more details about building linux targets (except snap and appimage). - -!!! tip "cmd" - On [Windows](https://github.com/visionmedia/debug#windows-command-prompt-notes) the environment variable is set using the set command. - ```bash - set DEBUG=electron-builder - ``` - -!!! tip "PowerShell" - PowerShell uses different syntax to set environment variables. - ```bash - $env:DEBUG=electron-builder - ``` diff --git a/mkdocs-dockerfile b/mkdocs-dockerfile new file mode 100644 index 00000000000..14f1cb95c9a --- /dev/null +++ b/mkdocs-dockerfile @@ -0,0 +1,4 @@ +FROM squidfunk/mkdocs-material +RUN pip install mkdocs-include-markdown-plugin +RUN pip install pymdown-extensions +RUN pip install pygments \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 435d7d821f8..dc8a35a3f33 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,20 +1,49 @@ site_name: electron-builder site_url: https://www.electron.build use_directory_urls: false +extra_css: + - stylesheets/autowidth.css theme: - feature: - tabs: true name: material -# logo: -# icon: 'build' + features: + - content.action.edit + - content.action.view + - content.code.annotate + - content.code.copy + - content.code.select + - content.tooltips + - header.autohide + - navigation.expand + - navigation.sections + # - search.highlight + # - search.share + # - search.suggest + - toc.follow palette: - primary: 'blue' - accent: 'blue' + - media: "(prefers-color-scheme)" + toggle: + icon: material/brightness-auto + name: Switch to light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: blue + accent: blue + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/weather-night + name: Switch to system preference + font: + text: Roboto + code: Roboto Mono repo_name: electron-userland/electron-builder repo_url: 'https://github.com/electron-userland/electron-builder' edit_uri: "" -strict: true +strict: false extra: analytics: @@ -31,48 +60,67 @@ markdown_extensions: - pymdownx.details - pymdownx.inlinehilite - pymdownx.superfences - - markdown_include.include: - base_path: docs - toc: permalink: true +plugins: + - search + # - minify: + # minify_html: true + - include-markdown: + # encoding: ascii + preserve_includer_indent: true + # dedent: true + trailing_newlines: true + # inheritHeadingDepth: true + # comments: true + rewrite_relative_urls: true + # heading_offset: 0 + # start: + # end: + # opening_tag: "{!" + # closing_tag: "!}" + # recursive: true + nav: - - Introduction: index.md + - Introduction: README.md - Command Line Interface (CLI): cli.md - Programmatic API: - API: api/electron-builder.md - Example: api/programmatic-usage.md + - Modules: modules.md - Donate: donate.md - Configuration: - - Common Configuration: configuration/configuration.md + - Common Configuration: configuration.md - - Application Contents: configuration/contents.md + - Application Contents: contents.md - File Patterns: file-patterns.md - macOS: - - Any macOS Target: configuration/mac.md - - DMG: configuration/dmg.md - - MAS: configuration/mas.md - - PKG: configuration/pkg.md + - Any macOS Target: mac.md + - DMG: dmg.md + - MAS: mas.md + - PKG: pkg.md - Windows: - - Any Windows Target: configuration/win.md - - NSIS: configuration/nsis.md - - AppX: configuration/appx.md - - MSI: configuration/msi.md - - MSI Wrapped: configuration/msi-wrapped.md - - Squirrel.Windows: configuration/squirrel-windows.md + - Any Windows Target: win.md + - NSIS: nsis.md + - AppX: appx.md + - MSI: msi.md + - MSI Wrapped: msi-wrapped.md + - Squirrel.Windows: squirrel-windows.md - Linux: - - Any Linux Target: configuration/linux.md - - AppImage: configuration/appimage.md - - Flatpak: configuration/flatpak.md - - Snap: configuration/snap.md + - Any Linux Target: linux.md + - AppImage: appimage.md + - Flatpak: flatpak.md + - Snap: snap.md - - Publish: configuration/publish.md + - Publish: publish.md - Guides: + - Hooks: hooks.md - Icons: icons.md - Auto Update: auto-update.md - Code Signing: code-signing.md diff --git a/netlify-docs.sh b/netlify-docs.sh index 01f643bfcdd..c9a31ef585c 100644 --- a/netlify-docs.sh +++ b/netlify-docs.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash pip3 install pipenv pipenv install +echo "Installing deps" +pnpm install echo "Building site docs" -mkdocs build +pnpm docs:build +mkdocs build \ No newline at end of file diff --git a/package.json b/package.json index ae5984983e5..68dbaf55ed2 100644 --- a/package.json +++ b/package.json @@ -26,14 +26,15 @@ "docker-push": "docker/push.sh", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", "generate-changeset": "pnpm changeset", - "generate-docs": "pnpm compile && pnpm jsdoc && pnpm jsdoc2md2html", "generate-schema": "typescript-json-schema packages/app-builder-lib/tsconfig-scheme.json Configuration --out packages/app-builder-lib/scheme.json --noExtraProps --useTypeOfKeyword --strictNullChecks --required && node ./scripts/fix-schema.js", - "generate-all": "pnpm generate-schema && pnpm generate-docs && pnpm prettier", + "generate-all": "pnpm generate-schema && pnpm prettier", "ci:test": "node ./test/out/helpers/runTests.js", "ci:version": "pnpm i && pnpm changelog && changeset version && node scripts/update-package-version-export.js && pnpm compile && pnpm generate-all && git add .", "ci:publish": "pnpm i && pnpm compile && pnpm publish -r --tag next && changeset tag", - "jsdoc": "ts2jsdoc packages/builder-util-runtime packages/builder-util packages/app-builder-lib packages/electron-builder packages/electron-publish packages/electron-updater packages/dmg-builder", - "jsdoc2md2html": "node scripts/jsdoc2md2html.js", + "docs:prebuild": "docker build -t mkdocs-dockerfile -f mkdocs-dockerfile . ", + "docs:build": "pnpm compile && node scripts/renderer/out/typedoc2html.js", + "docs:mkdocs": "docker run --rm -v ${PWD}:/docs -v ${PWD}/site:/site mkdocs-dockerfile build", + "docs:all": "pnpm docs:prebuild && pnpm docs:build && pnpm docs:mkdocs", "prepare": "husky install" }, "//": "repository must be specified otherwise conventional-changelog will use forked repo (currently cloned)", @@ -41,13 +42,14 @@ "///": "All dependencies for all packages (hoisted)", "////": "All typings are added into root `package.json` to avoid duplication errors in the IDE compiler (several `node.d.ts` files).", "dependencies": { + "@types/fs-extra": "^11.0.4", "dmg-license": "1.0.11" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "7.24.8", "@changesets/changelog-github": "0.4.7", "@changesets/cli": "2.25.0", - "@types/node": "16.18.55", + "@types/node": "^22.5.5", "@typescript-eslint/eslint-plugin": "^7.0.1", "@typescript-eslint/parser": "^7.0.1", "catharsis": "0.9.0", @@ -68,7 +70,9 @@ "replace-in-file": "6.2.0", "source-map-support": "0.5.21", "ts-jsdoc": "3.2.2", - "typescript": "5.5.3", + "typedoc": "^0.26", + "typedoc-plugin-markdown": "^4.2.7", + "typescript": "^5.5", "typescript-json-schema": "0.64.0", "v8-compile-cache": "2.3.0" }, diff --git a/packages/app-builder-lib/README.md b/packages/app-builder-lib/README.md new file mode 100644 index 00000000000..8d79033f0d8 --- /dev/null +++ b/packages/app-builder-lib/README.md @@ -0,0 +1,3 @@ +# app-builder-lib + +Various utilities. Used by [electron-builder](https://github.com/electron-userland/electron-builder). diff --git a/packages/app-builder-lib/scheme.json b/packages/app-builder-lib/scheme.json index c583e08fedf..917212f7b72 100644 --- a/packages/app-builder-lib/scheme.json +++ b/packages/app-builder-lib/scheme.json @@ -37,7 +37,7 @@ "additionalProperties": false, "properties": { "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -51,7 +51,7 @@ ] }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -157,7 +157,7 @@ "type": "string" }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -187,7 +187,7 @@ "type": "boolean" }, "identityName": { - "description": "The name. Corresponds to [Identity.Name](https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx). Defaults to the [application name](/configuration/configuration#Metadata-name).", + "description": "The name. Corresponds to [Identity.Name](https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx). Defaults to the [application name](./configuration.md#Metadata-name).", "type": [ "null", "string" @@ -523,7 +523,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -569,7 +569,7 @@ "description": "Package dependencies. Defaults to `[\"gconf2\", \"gconf-service\", \"libnotify4\", \"libappindicator1\", \"libxtst6\", \"libnss3\"]`.\nIf need to support Debian, `libappindicator1` should be removed, it is [deprecated in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895037).\nIf need to support KDE, `gconf2` and `gconf-service` should be removed as it's no longer used [by GNOME](https://packages.debian.org/bullseye/gconf2)." }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -758,7 +758,7 @@ "additionalProperties": false, "properties": { "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -799,7 +799,7 @@ "type": "string" }, "icon": { - "description": "The path to DMG icon (volume icon), which will be shown when mounted, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to the application icon (`build/icon.icns`).", + "description": "The path to DMG icon (volume icon), which will be shown when mounted, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to the application icon (`build/icon.icns`).", "type": [ "null", "string" @@ -982,7 +982,7 @@ }, "FileAssociation": { "additionalProperties": false, - "description": "File associations.\n\nmacOS (corresponds to [CFBundleDocumentTypes](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-101685)), NSIS, and MSI only.\n\nOn Windows (NSIS) works only if [nsis.perMachine](https://electron.build/configuration/configuration#NsisOptions-perMachine) is set to `true`.", + "description": "File associations.\n\nmacOS (corresponds to [CFBundleDocumentTypes](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-101685)), NSIS, and MSI only.\n\nOn Windows (NSIS) works only if [nsis.perMachine](https://electron.build./configuration.md#NsisOptions-perMachine) is set to `true`.", "properties": { "description": { "description": "*windows-only.* The description.", @@ -1061,14 +1061,14 @@ "type": "string" } ], - "description": "The [glob patterns](/file-patterns)." + "description": "The [glob patterns](./file-patterns.md). Defaults to \"**\\/*\"" }, "from": { - "description": "The source path relative to the project directory.", + "description": "The source path relative to and defaults to:\n\n - the [app directory](configuration.md#MetadataDirectories-app) for `files`,\n - the project directory for `extraResources` and `extraFiles`.\nIf you don't use two-package.json structure and don't set custom app directory, app directory equals to project directory.", "type": "string" }, "to": { - "description": "The destination path relative to the app's content directory for `extraFiles` and the app's resource directory for `extraResources`.", + "description": "The destination path relative to and defaults to:\n\n - the asar archive root for `files`,\n - the app's content directory for `extraFiles`,\n - the app's resource directory for `extraResources`.", "type": "string" } }, @@ -1078,7 +1078,7 @@ "additionalProperties": false, "properties": { "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -1104,7 +1104,7 @@ ] }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -1262,7 +1262,7 @@ }, "GenericServerOptions": { "additionalProperties": false, - "description": "Generic (any HTTP(S) server) options.\nIn all publish options [File Macros](/file-patterns#file-macros) are supported.", + "description": "Generic (any HTTP(S) server) options.\nIn all publish options [File Macros](./file-patterns.md#file-macros) are supported.", "properties": { "channel": { "default": "latest", @@ -1356,7 +1356,7 @@ ] }, "private": { - "description": "Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](/auto-update#private-github-update-repo).", + "description": "Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](./auto-update.md#private-github-update-repo).", "type": [ "null", "boolean" @@ -1438,7 +1438,7 @@ ] }, "token": { - "description": "The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](/auto-update#appupdatersetfeedurloptions).", + "description": "The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](./auto-update.md#appupdatersetfeedurloptions).", "type": [ "null", "string" @@ -1560,7 +1560,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", "type": [ "null", "string" @@ -1596,7 +1596,7 @@ ] } ], - "description": "A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." + "description": "A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." }, "category": { "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).", @@ -1638,7 +1638,7 @@ "type": "string" }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -1654,7 +1654,7 @@ }, "disableDefaultIgnoredFiles": { "default": false, - "description": "Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`.", + "description": "Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`.", "type": [ "null", "boolean" @@ -1675,7 +1675,7 @@ "description": "The electron locales to keep. By default, all Electron locales used as-is." }, "electronUpdaterCompatibility": { - "description": "The [electron-updater compatibility](/auto-update#compatibility) semver range.", + "description": "The [electron-updater compatibility](./auto-update.md#compatibility) semver range.", "type": [ "null", "string" @@ -1804,11 +1804,11 @@ "type": "boolean" }, "icon": { - "description": "The path to icon set directory or one png file, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon.\nBy default will be generated automatically based on the macOS icns file.", + "description": "The path to icon set directory or one png file, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon.\nBy default will be generated automatically based on the macOS icns file.", "type": "string" }, "maintainer": { - "description": "The maintainer. Defaults to [author](/configuration/configuration#Metadata-author).", + "description": "The maintainer. Defaults to [author](./configuration.md#Metadata-author).", "type": [ "null", "string" @@ -1926,10 +1926,10 @@ } ], "default": "AppImage", - "description": "Target package type: list of `AppImage`, `flatpak`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\n\nelectron-builder [docker image](/multi-platform-build#docker) can be used to build Linux targets on any platform.\n\nPlease [do not put an AppImage into another archive](https://github.com/probonopd/AppImageKit/wiki/Creating-AppImages#common-mistake) like a .zip or .tar.gz." + "description": "Target package type: list of `AppImage`, `flatpak`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\n\nelectron-builder [docker image](./multi-platform-build.md#docker) can be used to build Linux targets on any platform.\n\nPlease [do not put an AppImage into another archive](https://github.com/probonopd/AppImageKit/wiki/Creating-AppImages#common-mistake) like a .zip or .tar.gz." }, "vendor": { - "description": "The vendor. Defaults to [author](/configuration/configuration#Metadata-author).", + "description": "The vendor. Defaults to [author](./configuration.md#Metadata-author).", "type": [ "null", "string" @@ -1954,7 +1954,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -2000,7 +2000,7 @@ "description": "Package dependencies." }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -2156,7 +2156,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", "type": [ "null", "string" @@ -2192,7 +2192,7 @@ ] } ], - "description": "A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." + "description": "A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." }, "binaries": { "anyOf": [ @@ -2285,7 +2285,7 @@ }, "disableDefaultIgnoredFiles": { "default": false, - "description": "Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`.", + "description": "Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`.", "type": [ "null", "boolean" @@ -2306,14 +2306,14 @@ "description": "The electron locales to keep. By default, all Electron locales used as-is." }, "electronUpdaterCompatibility": { - "description": "The [electron-updater compatibility](/auto-update#compatibility) semver range.", + "description": "The [electron-updater compatibility](./auto-update.md#compatibility) semver range.", "type": [ "null", "string" ] }, "entitlements": { - "description": "The path to entitlements file for signing the app. `build/entitlements.mac.plist` will be used if exists (it is a recommended way to set).\nMAS entitlements is specified in the [mas](/configuration/mas).\nSee [this folder in osx-sign's repository](https://github.com/electron/osx-sign/tree/main/entitlements) for examples.\nBe aware that your app may crash if the right entitlements are not set like `com.apple.security.cs.allow-jit` for example on arm64 builds with Electron 20+.\nSee [Signing and Notarizing macOS Builds from the Electron documentation](https://www.electronjs.org/docs/latest/tutorial/code-signing#signing--notarizing-macos-builds) for more information.", + "description": "The path to entitlements file for signing the app. `build/entitlements.mac.plist` will be used if exists (it is a recommended way to set).\nMAS entitlements is specified in the [mas](./mas.md).\nSee [this folder in osx-sign's repository](https://github.com/electron/osx-sign/tree/main/entitlements) for examples.\nBe aware that your app may crash if the right entitlements are not set like `com.apple.security.cs.allow-jit` for example on arm64 builds with Electron 20+.\nSee [Signing and Notarizing macOS Builds from the Electron documentation](https://www.electronjs.org/docs/latest/tutorial/code-signing#signing--notarizing-macos-builds) for more information.", "type": [ "null", "string" @@ -2528,7 +2528,7 @@ ] }, "identity": { - "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](/code-signing) instead of specifying this option.\nMAS installer identity is specified in the [mas](/configuration/mas).", + "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](./code-signing.md) instead of specifying this option.\nMAS installer identity is specified in the [mas](./mas.md).", "type": [ "null", "string" @@ -2794,7 +2794,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", "type": [ "null", "string" @@ -2830,7 +2830,7 @@ ] } ], - "description": "A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." + "description": "A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." }, "binaries": { "anyOf": [ @@ -2923,7 +2923,7 @@ }, "disableDefaultIgnoredFiles": { "default": false, - "description": "Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`.", + "description": "Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`.", "type": [ "null", "boolean" @@ -2944,7 +2944,7 @@ "description": "The electron locales to keep. By default, all Electron locales used as-is." }, "electronUpdaterCompatibility": { - "description": "The [electron-updater compatibility](/auto-update#compatibility) semver range.", + "description": "The [electron-updater compatibility](./auto-update.md#compatibility) semver range.", "type": [ "null", "string" @@ -3166,7 +3166,7 @@ ] }, "identity": { - "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](/code-signing) instead of specifying this option.\nMAS installer identity is specified in the [mas](/configuration/mas).", + "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](./code-signing.md) instead of specifying this option.\nMAS installer identity is specified in the [mas](./mas.md).", "type": [ "null", "string" @@ -3426,7 +3426,7 @@ }, "output": { "default": "dist", - "description": "The output directory. [File macros](/file-patterns#file-macros) are supported.", + "description": "The output directory. [File macros](./file-patterns.md#file-macros) are supported.", "type": [ "null", "string" @@ -3467,7 +3467,7 @@ "description": "Any additional arguments to be passed to the WiX installer compiler, such as `[\"-ext\", \"WixUtilExtension\"]`" }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -3590,7 +3590,7 @@ "description": "Any additional arguments to be passed to the WiX installer compiler, such as `[\"-ext\", \"WixUtilExtension\"]`" }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -3729,7 +3729,7 @@ "type": "boolean" }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName} Setup ${version}.${ext}`.", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName} Setup ${version}.${ext}`.", "type": [ "null", "string" @@ -3774,7 +3774,7 @@ "type": "boolean" }, "guid": { - "description": "See [GUID vs Application Name](../configuration/nsis#guid-vs-application-name).", + "description": "See [GUID vs Application Name](./nsis.md#guid-vs-application-name).", "type": [ "null", "string" @@ -3789,21 +3789,21 @@ }, "installerHeader": { "default": "build/installerHeader.bmp", - "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.", + "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.", "type": [ "null", "string" ] }, "installerHeaderIcon": { - "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.", + "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.", "type": [ "null", "string" ] }, "installerIcon": { - "description": "The path to installer icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.", + "description": "The path to installer icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.", "type": [ "null", "string" @@ -3827,7 +3827,7 @@ "description": "The installer languages (e.g. `en_US`, `de_DE`). Change only if you understand what do you do and for what." }, "installerSidebar": { - "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.", + "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.", "type": [ "null", "string" @@ -3982,14 +3982,14 @@ "type": "string" }, "uninstallerIcon": { - "description": "The path to uninstaller icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.", + "description": "The path to uninstaller icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.", "type": [ "null", "string" ] }, "uninstallerSidebar": { - "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`", + "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`", "type": [ "null", "string" @@ -4029,7 +4029,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName} Web Setup ${version}.${ext}`.", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName} Web Setup ${version}.${ext}`.", "type": [ "null", "string" @@ -4074,7 +4074,7 @@ "type": "boolean" }, "guid": { - "description": "See [GUID vs Application Name](../configuration/nsis#guid-vs-application-name).", + "description": "See [GUID vs Application Name](./nsis.md#guid-vs-application-name).", "type": [ "null", "string" @@ -4089,21 +4089,21 @@ }, "installerHeader": { "default": "build/installerHeader.bmp", - "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.", + "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.", "type": [ "null", "string" ] }, "installerHeaderIcon": { - "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.", + "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.", "type": [ "null", "string" ] }, "installerIcon": { - "description": "The path to installer icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.", + "description": "The path to installer icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.", "type": [ "null", "string" @@ -4127,7 +4127,7 @@ "description": "The installer languages (e.g. `en_US`, `de_DE`). Change only if you understand what do you do and for what." }, "installerSidebar": { - "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.", + "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.", "type": [ "null", "string" @@ -4282,14 +4282,14 @@ "type": "string" }, "uninstallerIcon": { - "description": "The path to uninstaller icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.", + "description": "The path to uninstaller icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.", "type": [ "null", "string" ] }, "uninstallerSidebar": { - "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`", + "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`", "type": [ "null", "string" @@ -4798,7 +4798,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -4831,7 +4831,7 @@ ] }, "identity": { - "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](/code-signing) instead of specifying this option.", + "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](./code-signing.md) instead of specifying this option.", "type": [ "null", "string" @@ -4988,7 +4988,7 @@ "description": "Portable options.", "properties": { "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -5006,7 +5006,7 @@ "description": "Allows you to provide your own `makensis`, such as one with support for debug logging via LogSet and LogText. (Logging also requires option `debugLogging = true`)" }, "guid": { - "description": "See [GUID vs Application Name](../configuration/nsis#guid-vs-application-name).", + "description": "See [GUID vs Application Name](./nsis.md#guid-vs-application-name).", "type": [ "null", "string" @@ -5358,7 +5358,7 @@ "description": "Specifies which files from the app part to stage and which to exclude. Individual files, directories, wildcards, globstars, and exclusions are accepted. See [Snapcraft filesets](https://snapcraft.io/docs/snapcraft-filesets) to learn more about the format.\n\nThe defaults can be found in [snap.ts](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/snap/snapcraft.yaml#L29)." }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -5447,7 +5447,7 @@ "description": "The type of [confinement](https://snapcraft.io/docs/reference/confinement) supported by the snap." }, "description": { - "description": "As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux.", + "description": "As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux.", "type": [ "null", "string" @@ -5636,7 +5636,7 @@ "description": "The list of Ubuntu packages to use that are needed to support the `app` part creation. Like `depends` for `deb`.\nDefaults to `[\"libnspr4\", \"libnss3\", \"libxss1\", \"libappindicator3-1\", \"libsecret-1-0\"]`.\n\nIf list contains `default`, it will be replaced to default list, so, `[\"default\", \"foo\"]` can be used to add custom package `foo` in addition to defaults." }, "summary": { - "description": "The 78 character long summary. Defaults to [productName](/configuration/configuration#Configuration-productName).", + "description": "The 78 character long summary. Defaults to [productName](./configuration.md#Configuration-productName).", "type": [ "null", "string" @@ -5835,7 +5835,7 @@ "additionalProperties": false, "properties": { "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template).", "type": [ "null", "string" @@ -5998,7 +5998,7 @@ ] }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", "type": [ "null", "string" @@ -6034,7 +6034,7 @@ ] } ], - "description": "A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." + "description": "A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." }, "azureSignOptions": { "anyOf": [ @@ -6048,14 +6048,14 @@ "description": "Options for usage of Azure Trusted Signing (beta)" }, "certificateFile": { - "description": "The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason.\nPlease see [Code Signing](/code-signing).", + "description": "The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason.\nPlease see [Code Signing](./code-signing.md).", "type": [ "null", "string" ] }, "certificatePassword": { - "description": "The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason.\nPlease see [Code Signing](/code-signing).", + "description": "The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason.\nPlease see [Code Signing](./code-signing.md).", "type": [ "null", "string" @@ -6114,7 +6114,7 @@ }, "disableDefaultIgnoredFiles": { "default": false, - "description": "Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`.", + "description": "Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`.", "type": [ "null", "boolean" @@ -6135,7 +6135,7 @@ "description": "The electron locales to keep. By default, all Electron locales used as-is." }, "electronUpdaterCompatibility": { - "description": "The [electron-updater compatibility](/auto-update#compatibility) semver range.", + "description": "The [electron-updater compatibility](./auto-update.md#compatibility) semver range.", "type": [ "null", "string" @@ -6458,7 +6458,7 @@ } ], "default": "nsis", - "description": "The target package type: list of `nsis`, `nsis-web` (Web installer), `portable` ([portable](/configuration/nsis#portable) app without installation), `appx`, `msi`, `msi-wrapped`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\nAppX package can be built only on Windows 10.\n\nTo use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency." + "description": "The target package type: list of `nsis`, `nsis-web` (Web installer), `portable` ([portable]./nsis.md#portable) app without installation), `appx`, `msi`, `msi-wrapped`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\nAppX package can be built only on Windows 10.\n\nTo use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency." }, "timeStampServer": { "default": "http://timestamp.digicert.com", @@ -6487,14 +6487,14 @@ ] }, "certificateFile": { - "description": "The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason.\nPlease see [Code Signing](/code-signing).", + "description": "The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason.\nPlease see [Code Signing](./code-signing.md).", "type": [ "null", "string" ] }, "certificatePassword": { - "description": "The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason.\nPlease see [Code Signing](/code-signing).", + "description": "The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason.\nPlease see [Code Signing](./code-signing.md).", "type": [ "null", "string" @@ -6724,7 +6724,7 @@ "description": "The function (or path to file or module id) to be run on artifact build start." }, "artifactName": { - "description": "The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", + "description": "The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).", "type": [ "null", "string" @@ -6760,7 +6760,7 @@ ] } ], - "description": "A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." + "description": "A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive." }, "beforeBuild": { "anyOf": [ @@ -6877,7 +6877,7 @@ }, "disableDefaultIgnoredFiles": { "default": false, - "description": "Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`.", + "description": "Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`.", "type": [ "null", "boolean" @@ -6941,7 +6941,7 @@ "description": "The electron locales to keep. By default, all Electron locales used as-is." }, "electronUpdaterCompatibility": { - "description": "The [electron-updater compatibility](/auto-update#compatibility) semver range.", + "description": "The [electron-updater compatibility](./auto-update.md#compatibility) semver range.", "type": [ "null", "string" diff --git a/packages/app-builder-lib/src/configuration.ts b/packages/app-builder-lib/src/configuration.ts index 80f381c68af..f4187cd8c1e 100644 --- a/packages/app-builder-lib/src/configuration.ts +++ b/packages/app-builder-lib/src/configuration.ts @@ -315,7 +315,7 @@ export interface MetadataDirectories { readonly buildResources?: string | null /** - * The output directory. [File macros](/file-patterns#file-macros) are supported. + * The output directory. [File macros](./file-patterns.md#file-macros) are supported. * @default dist */ readonly output?: string | null diff --git a/packages/app-builder-lib/src/core.ts b/packages/app-builder-lib/src/core.ts index 99c15b8843f..826c2fd63e8 100644 --- a/packages/app-builder-lib/src/core.ts +++ b/packages/app-builder-lib/src/core.ts @@ -93,7 +93,7 @@ export abstract class Target { export interface TargetSpecificOptions { /** - The [artifact file name template](/configuration/configuration#artifact-file-name-template). + The [artifact file name template](./configuration.md#artifact-file-name-template). */ readonly artifactName?: string | null diff --git a/packages/app-builder-lib/src/errorMessages.ts b/packages/app-builder-lib/src/errorMessages.ts index 0b75fba04b8..0ff65f7f90a 100644 --- a/packages/app-builder-lib/src/errorMessages.ts +++ b/packages/app-builder-lib/src/errorMessages.ts @@ -3,5 +3,5 @@ export const authorEmailIsMissed = `Please specify author 'email' in the applica See https://docs.npmjs.com/files/package.json#people-fields-author-contributors It is required to set Linux .deb package maintainer. Or you can set maintainer in the custom linux options. -(see https://www.electron.build/configuration/linux). +(see https://www.electron.build/linux). ` diff --git a/packages/app-builder-lib/src/index.ts b/packages/app-builder-lib/src/index.ts index 8e92d88ecde..8063d53c584 100644 --- a/packages/app-builder-lib/src/index.ts +++ b/packages/app-builder-lib/src/index.ts @@ -23,7 +23,7 @@ export { export { getArchSuffix, Arch, archFromString } from "builder-util" export { Configuration, AfterPackContext, MetadataDirectories, BeforePackContext, AfterExtractContext, CustomElectronDistributable, Hook } from "./configuration" export { ElectronBrandingOptions, ElectronDownloadOptions, ElectronPlatformName } from "./electron/ElectronFramework" -export { PlatformSpecificBuildOptions, AsarOptions, FileSet, Protocol, ReleaseInfo } from "./options/PlatformSpecificBuildOptions" +export { PlatformSpecificBuildOptions, AsarOptions, FileSet, Protocol, ReleaseInfo, FilesBuildOptions } from "./options/PlatformSpecificBuildOptions" export { FileAssociation } from "./options/FileAssociation" export { MacConfiguration, DmgOptions, MasConfiguration, MacOsTargetName, DmgContent, DmgWindow, NotarizeNotaryOptions } from "./options/macOptions" export { PkgOptions, PkgBackgroundOptions, BackgroundAlignment, BackgroundScaling } from "./options/pkgOptions" diff --git a/packages/app-builder-lib/src/options/AppXOptions.ts b/packages/app-builder-lib/src/options/AppXOptions.ts index d5e2a3e9932..1a37def4b7f 100644 --- a/packages/app-builder-lib/src/options/AppXOptions.ts +++ b/packages/app-builder-lib/src/options/AppXOptions.ts @@ -19,7 +19,7 @@ export interface AppXOptions extends TargetSpecificOptions { readonly displayName?: string | null /** - * The name. Corresponds to [Identity.Name](https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx). Defaults to the [application name](/configuration/configuration#Metadata-name). + * The name. Corresponds to [Identity.Name](https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx). Defaults to the [application name](./configuration.md#Metadata-name). */ readonly identityName?: string | null diff --git a/packages/app-builder-lib/src/options/FileAssociation.ts b/packages/app-builder-lib/src/options/FileAssociation.ts index 4be4e9c62be..68d1afc5879 100644 --- a/packages/app-builder-lib/src/options/FileAssociation.ts +++ b/packages/app-builder-lib/src/options/FileAssociation.ts @@ -3,7 +3,7 @@ * * macOS (corresponds to [CFBundleDocumentTypes](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-101685)), NSIS, and MSI only. * - * On Windows (NSIS) works only if [nsis.perMachine](https://electron.build/configuration/configuration#NsisOptions-perMachine) is set to `true`. + * On Windows (NSIS) works only if [nsis.perMachine](https://electron.build./configuration.md#NsisOptions-perMachine) is set to `true`. */ export interface FileAssociation { /** diff --git a/packages/app-builder-lib/src/options/PlatformSpecificBuildOptions.ts b/packages/app-builder-lib/src/options/PlatformSpecificBuildOptions.ts index 1f23932a8c2..ad227015978 100644 --- a/packages/app-builder-lib/src/options/PlatformSpecificBuildOptions.ts +++ b/packages/app-builder-lib/src/options/PlatformSpecificBuildOptions.ts @@ -3,15 +3,23 @@ import { FileAssociation } from "./FileAssociation" export interface FileSet { /** - * The source path relative to the project directory. + * The source path relative to and defaults to: + * + * - the [app directory](configuration.md#MetadataDirectories-app) for `files`, + * - the project directory for `extraResources` and `extraFiles`. + * If you don't use two-package.json structure and don't set custom app directory, app directory equals to project directory. */ from?: string /** - * The destination path relative to the app's content directory for `extraFiles` and the app's resource directory for `extraResources`. + * The destination path relative to and defaults to: + * + * - the asar archive root for `files`, + * - the app's content directory for `extraFiles`, + * - the app's resource directory for `extraResources`. */ to?: string /** - * The [glob patterns](/file-patterns). + * The [glob patterns](./file-patterns.md). Defaults to "**\/*" */ filter?: Array | string } @@ -26,7 +34,65 @@ export interface AsarOptions { ordering?: string | null } -export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { +export interface FilesBuildOptions { + /** + * A [glob patterns](./file-patterns.md) relative to the [app directory](configuration.md#MetadataDirectories-app), which specifies which files to include when copying files to create the package. + +Defaults to: +```json +[ + "**\/*", + "!**\/node_modules/*\/{CHANGELOG.md,README.md,README,readme.md,readme}", + "!**\/node_modules/*\/{test,__tests__,tests,powered-test,example,examples}", + "!**\/node_modules/*.d.ts", + "!**\/node_modules/.bin", + "!**\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}", + "!.editorconfig", + "!**\/._*", + "!**\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}", + "!**\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}", + "!**\/{appveyor.yml,.travis.yml,circle.yml}", + "!**\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}" +] +``` + +Development dependencies are never copied in any case. You don't need to ignore it explicitly. Hidden files are not ignored by default, but all files that should be ignored, are ignored by default. + +Default pattern \`**\/*\` **is not added to your custom** if some of your patterns is not ignore (i.e. not starts with `!`). `package.json` and \`**\/node_modules/**\/*` (only production dependencies will be copied) is added to your custom in any case. All default ignores are added in any case — you don't need to repeat it if you configure own patterns. + +May be specified in the platform options (e.g. in the [mac](mac.md)). + +You may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns. + +```json +[ + { + "from": "path/to/source", + "to": "path/to/destination", + "filter": ["**\/*", "!foo/*.js"] + } +] +``` + +You can use [file macros](./file-patterns.md#file-macros) in the `from` and `to` fields as well. `from` and `to` can be files and you can use this to [rename](https://github.com/electron-userland/electron-builder/issues/1119) a file while packaging. + */ + files?: Array | FileSet | string | null + + /** + * A [glob patterns](./file-patterns.md) relative to the project directory, when specified, copy the file or directory with matching names directly into the app's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows). + * + * File patterns (and support for `from` and `to` fields) the same as for [files](#files). + * + */ + extraResources?: Array | FileSet | string | null + + /** + * The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows). + */ + extraFiles?: Array | FileSet | string | null +} + +export interface PlatformSpecificBuildOptions extends TargetSpecificOptions, FilesBuildOptions { /** * The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as * [Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set. @@ -35,7 +101,7 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly appId?: string | null /** - * The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options). + * The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options). */ readonly artifactName?: string | null @@ -51,16 +117,12 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly compression?: CompressionLevel | null /** - * Whether to exclude all default ignored files(https://www.electron.build/configuration/contents#files) and options. Defaults to `false`. + * Whether to exclude all default ignored files(https://www.electron.build/contents#files) and options. Defaults to `false`. * * @default false */ disableDefaultIgnoredFiles?: boolean | null - files?: Array | FileSet | string | null - extraResources?: Array | FileSet | string | null - extraFiles?: Array | FileSet | string | null - /** * Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/). * @@ -70,11 +132,11 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly asar?: AsarOptions | boolean | null /** - * A [glob patterns](/file-patterns) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive. + * A [glob patterns](./file-patterns.md) relative to the [app directory](#MetadataDirectories-app), which specifies which files to unpack when creating the [asar](http://electron.atom.io/docs/tutorial/application-packaging/) archive. */ readonly asarUnpack?: Array | string | null - /** @private */ + /* - @private */ readonly icon?: string | null /** @@ -97,7 +159,7 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly forceCodeSigning?: boolean /** - * The [electron-updater compatibility](/auto-update#compatibility) semver range. + * The [electron-updater compatibility](./auto-update.md#compatibility) semver range. */ readonly electronUpdaterCompatibility?: string | null @@ -126,10 +188,10 @@ export interface PlatformSpecificBuildOptions extends TargetSpecificOptions { readonly target?: Array | string | TargetConfiguration | null - /** @private */ + /* - @private */ cscLink?: string | null - /** @private */ + /* - @private */ cscKeyPassword?: string | null readonly defaultArch?: string diff --git a/packages/app-builder-lib/src/options/SnapOptions.ts b/packages/app-builder-lib/src/options/SnapOptions.ts index 764e312d774..028a0cfcf41 100644 --- a/packages/app-builder-lib/src/options/SnapOptions.ts +++ b/packages/app-builder-lib/src/options/SnapOptions.ts @@ -19,7 +19,7 @@ export interface SnapOptions extends CommonLinuxOptions, TargetSpecificOptions { readonly environment?: { [key: string]: string } | null /** - * The 78 character long summary. Defaults to [productName](/configuration/configuration#Configuration-productName). + * The 78 character long summary. Defaults to [productName](./configuration.md#Configuration-productName). */ readonly summary?: string | null diff --git a/packages/app-builder-lib/src/options/linuxOptions.ts b/packages/app-builder-lib/src/options/linuxOptions.ts index 2e3ff83ba33..6f9a732c196 100644 --- a/packages/app-builder-lib/src/options/linuxOptions.ts +++ b/packages/app-builder-lib/src/options/linuxOptions.ts @@ -4,7 +4,7 @@ export interface LinuxConfiguration extends CommonLinuxOptions, PlatformSpecific /** * Target package type: list of `AppImage`, `flatpak`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. * - * electron-builder [docker image](/multi-platform-build#docker) can be used to build Linux targets on any platform. + * electron-builder [docker image](./multi-platform-build.md#docker) can be used to build Linux targets on any platform. * * Please [do not put an AppImage into another archive](https://github.com/probonopd/AppImageKit/wiki/Creating-AppImages#common-mistake) like a .zip or .tar.gz. * @default AppImage @@ -12,17 +12,17 @@ export interface LinuxConfiguration extends CommonLinuxOptions, PlatformSpecific readonly target?: TargetConfigType /** - * The maintainer. Defaults to [author](/configuration/configuration#Metadata-author). + * The maintainer. Defaults to [author](./configuration.md#Metadata-author). */ readonly maintainer?: string | null /** - * The vendor. Defaults to [author](/configuration/configuration#Metadata-author). + * The vendor. Defaults to [author](./configuration.md#Metadata-author). */ readonly vendor?: string | null /** - * The path to icon set directory or one png file, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon. + * The path to icon set directory or one png file, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon. * By default will be generated automatically based on the macOS icns file. */ readonly icon?: string @@ -41,7 +41,7 @@ export interface CommonLinuxOptions { readonly synopsis?: string | null /** - * As [description](/configuration/configuration#Metadata-description) from application package.json, but allows you to specify different for Linux. + * As [description](./configuration.md#Metadata-description) from application package.json, but allows you to specify different for Linux. */ readonly description?: string | null diff --git a/packages/app-builder-lib/src/options/macOptions.ts b/packages/app-builder-lib/src/options/macOptions.ts index 3c6f0bae26b..87597c54ac8 100644 --- a/packages/app-builder-lib/src/options/macOptions.ts +++ b/packages/app-builder-lib/src/options/macOptions.ts @@ -19,8 +19,8 @@ export interface MacConfiguration extends PlatformSpecificBuildOptions { readonly target?: Array | MacOsTargetName | TargetConfiguration | null /** - * The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](/code-signing) instead of specifying this option. - * MAS installer identity is specified in the [mas](/configuration/mas). + * The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](./code-signing.md) instead of specifying this option. + * MAS installer identity is specified in the [mas](./mas.md). */ readonly identity?: string | null @@ -32,7 +32,7 @@ export interface MacConfiguration extends PlatformSpecificBuildOptions { /** * The path to entitlements file for signing the app. `build/entitlements.mac.plist` will be used if exists (it is a recommended way to set). - * MAS entitlements is specified in the [mas](/configuration/mas). + * MAS entitlements is specified in the [mas](./mas.md). * See [this folder in osx-sign's repository](https://github.com/electron/osx-sign/tree/main/entitlements) for examples. * Be aware that your app may crash if the right entitlements are not set like `com.apple.security.cs.allow-jit` for example on arm64 builds with Electron 20+. * See [Signing and Notarizing macOS Builds from the Electron documentation](https://www.electronjs.org/docs/latest/tutorial/code-signing#signing--notarizing-macos-builds) for more information. @@ -256,7 +256,7 @@ export interface DmgOptions extends TargetSpecificOptions { backgroundColor?: string | null /** - * The path to DMG icon (volume icon), which will be shown when mounted, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * The path to DMG icon (volume icon), which will be shown when mounted, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to the application icon (`build/icon.icns`). */ icon?: string | null diff --git a/packages/app-builder-lib/src/options/pkgOptions.ts b/packages/app-builder-lib/src/options/pkgOptions.ts index 3074a12b1e5..cda9f3a8fa8 100644 --- a/packages/app-builder-lib/src/options/pkgOptions.ts +++ b/packages/app-builder-lib/src/options/pkgOptions.ts @@ -58,7 +58,7 @@ export interface PkgOptions extends TargetSpecificOptions { readonly allowRootDirectory?: boolean | null /** - * The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](/code-signing) instead of specifying this option. + * The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](./code-signing.md) instead of specifying this option. */ readonly identity?: string | null diff --git a/packages/app-builder-lib/src/options/winOptions.ts b/packages/app-builder-lib/src/options/winOptions.ts index 24dff95a8da..8bda04c261e 100644 --- a/packages/app-builder-lib/src/options/winOptions.ts +++ b/packages/app-builder-lib/src/options/winOptions.ts @@ -3,7 +3,7 @@ import { CustomWindowsSign } from "../codeSign/windowsSignToolManager" export interface WindowsConfiguration extends PlatformSpecificBuildOptions { /** - * The target package type: list of `nsis`, `nsis-web` (Web installer), `portable` ([portable](/configuration/nsis#portable) app without installation), `appx`, `msi`, `msi-wrapped`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. + * The target package type: list of `nsis`, `nsis-web` (Web installer), `portable` ([portable]./nsis.md#portable) app without installation), `appx`, `msi`, `msi-wrapped`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. * AppX package can be built only on Windows 10. * * To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. @@ -35,13 +35,13 @@ export interface WindowsConfiguration extends PlatformSpecificBuildOptions { readonly sign?: CustomWindowsSign | string | null /** * The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason. - * Please see [Code Signing](/code-signing). + * Please see [Code Signing](./code-signing.md). * @deprecated Please use {@link signtoolOptions.certificateFile} */ readonly certificateFile?: string | null /** * The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason. - * Please see [Code Signing](/code-signing). + * Please see [Code Signing](./code-signing.md). * @deprecated Please use {@link signtoolOptions.certificatePassword} */ readonly certificatePassword?: string | null @@ -143,13 +143,13 @@ export interface WindowsSigntoolConfiguration { /** * The path to the *.pfx certificate you want to sign with. Please use it only if you cannot use env variable `CSC_LINK` (`WIN_CSC_LINK`) for some reason. - * Please see [Code Signing](/code-signing). + * Please see [Code Signing](./code-signing.md). */ readonly certificateFile?: string | null /** * The password to the certificate provided in `certificateFile`. Please use it only if you cannot use env variable `CSC_KEY_PASSWORD` (`WIN_CSC_KEY_PASSWORD`) for some reason. - * Please see [Code Signing](/code-signing). + * Please see [Code Signing](./code-signing.md). */ readonly certificatePassword?: string | null diff --git a/packages/app-builder-lib/src/publish/BitbucketPublisher.ts b/packages/app-builder-lib/src/publish/BitbucketPublisher.ts index 59d3fb9040b..c6ea059de7a 100644 --- a/packages/app-builder-lib/src/publish/BitbucketPublisher.ts +++ b/packages/app-builder-lib/src/publish/BitbucketPublisher.ts @@ -22,7 +22,7 @@ export class BitbucketPublisher extends HttpPublisher { const username = info.username || process.env.BITBUCKET_USERNAME || null if (isEmptyOrSpaces(token)) { - throw new InvalidConfigurationError(`Bitbucket token is not set using env "BITBUCKET_TOKEN" (see https://www.electron.build/configuration/publish#BitbucketOptions)`) + throw new InvalidConfigurationError(`Bitbucket token is not set using env "BITBUCKET_TOKEN" (see https://www.electron.build/publish#BitbucketOptions)`) } if (isEmptyOrSpaces(username)) { diff --git a/packages/app-builder-lib/src/publish/KeygenPublisher.ts b/packages/app-builder-lib/src/publish/KeygenPublisher.ts index 14be6f4c336..dbb5dd4b806 100644 --- a/packages/app-builder-lib/src/publish/KeygenPublisher.ts +++ b/packages/app-builder-lib/src/publish/KeygenPublisher.ts @@ -91,7 +91,7 @@ export class KeygenPublisher extends HttpPublisher { const token = process.env.KEYGEN_TOKEN if (isEmptyOrSpaces(token)) { - throw new InvalidConfigurationError(`Keygen token is not set using env "KEYGEN_TOKEN" (see https://www.electron.build/configuration/publish#KeygenOptions)`) + throw new InvalidConfigurationError(`Keygen token is not set using env "KEYGEN_TOKEN" (see https://www.electron.build/publish#KeygenOptions)`) } this.info = info diff --git a/packages/app-builder-lib/src/publish/PublishManager.ts b/packages/app-builder-lib/src/publish/PublishManager.ts index 1e39e8aca87..853ed343fb8 100644 --- a/packages/app-builder-lib/src/publish/PublishManager.ts +++ b/packages/app-builder-lib/src/publish/PublishManager.ts @@ -545,7 +545,7 @@ async function getResolvedPublishConfig( return info } - const message = `Cannot detect repository by .git/config. Please specify "repository" in the package.json (https://docs.npmjs.com/files/package.json#repository).\nPlease see https://electron.build/configuration/publish` + const message = `Cannot detect repository by .git/config. Please specify "repository" in the package.json (https://docs.npmjs.com/files/package.json#repository).\nPlease see https://electron.build/publish` if (errorIfCannot) { throw new Error(message) } else { diff --git a/packages/app-builder-lib/src/publish/s3/spacesPublisher.ts b/packages/app-builder-lib/src/publish/s3/spacesPublisher.ts index d9826c0f191..c46cb07f1f1 100644 --- a/packages/app-builder-lib/src/publish/s3/spacesPublisher.ts +++ b/packages/app-builder-lib/src/publish/s3/spacesPublisher.ts @@ -16,10 +16,10 @@ export default class SpacesPublisher extends BaseS3Publisher { // eslint-disable-next-line @typescript-eslint/no-unused-vars static checkAndResolveOptions(options: SpacesOptions, channelFromAppVersion: string | null, errorIfCannot: boolean) { if (options.name == null) { - throw new InvalidConfigurationError(`Please specify "name" for "spaces" publish provider (see https://www.electron.build/configuration/publish#spacesoptions)`) + throw new InvalidConfigurationError(`Please specify "name" for "spaces" publish provider (see https://www.electron.build/publish#spacesoptions)`) } if (options.region == null) { - throw new InvalidConfigurationError(`Please specify "region" for "spaces" publish provider (see https://www.electron.build/configuration/publish#spacesoptions)`) + throw new InvalidConfigurationError(`Please specify "region" for "spaces" publish provider (see https://www.electron.build/publish#spacesoptions)`) } if (options.channel == null && channelFromAppVersion != null) { @@ -41,10 +41,10 @@ export default class SpacesPublisher extends BaseS3Publisher { const accessKey = process.env.DO_KEY_ID const secretKey = process.env.DO_SECRET_KEY if (isEmptyOrSpaces(accessKey)) { - throw new InvalidConfigurationError("Please set env DO_KEY_ID (see https://www.electron.build/configuration/publish#spacesoptions)") + throw new InvalidConfigurationError("Please set env DO_KEY_ID (see https://www.electron.build/publish#spacesoptions)") } if (isEmptyOrSpaces(secretKey)) { - throw new InvalidConfigurationError("Please set env DO_SECRET_KEY (see https://www.electron.build/configuration/publish#spacesoptions)") + throw new InvalidConfigurationError("Please set env DO_SECRET_KEY (see https://www.electron.build/publish#spacesoptions)") } args.push("--accessKey", accessKey) args.push("--secretKey", secretKey) diff --git a/packages/app-builder-lib/src/targets/FpmTarget.ts b/packages/app-builder-lib/src/targets/FpmTarget.ts index f15b7130026..c9efaa00e80 100644 --- a/packages/app-builder-lib/src/targets/FpmTarget.ts +++ b/packages/app-builder-lib/src/targets/FpmTarget.ts @@ -76,7 +76,7 @@ export default class FpmTarget extends Target { const projectUrl = await packager.appInfo.computePackageUrl() const errors: Array = [] if (projectUrl == null) { - errors.push("Please specify project homepage, see https://electron.build/configuration/configuration#Metadata-homepage") + errors.push("Please specify project homepage, see https://electron.build./configuration.md#Metadata-homepage") } const options = this.options diff --git a/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts b/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts index 96a52023fa9..248b939b4ac 100644 --- a/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts +++ b/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts @@ -180,7 +180,7 @@ export class LinuxTargetHelper { log.warn( { reason: "linux.category is not set and cannot map from macOS", - docs: "https://www.electron.build/configuration/linux", + docs: "https://www.electron.build/linux", }, 'application Linux category is set to default "Utility"' ) diff --git a/packages/app-builder-lib/src/targets/MsiWrappedTarget.ts b/packages/app-builder-lib/src/targets/MsiWrappedTarget.ts index 63dac3f557b..fb37d533d52 100644 --- a/packages/app-builder-lib/src/targets/MsiWrappedTarget.ts +++ b/packages/app-builder-lib/src/targets/MsiWrappedTarget.ts @@ -62,7 +62,7 @@ export default class MsiWrappedTarget extends MsiTarget { // this target invokes `build` in `finishBuild` to guarantee // that the dependent target has already been built // this also affords us re-usability - const [arch, appOutDir] = this.archs.entries().next().value + const [arch, appOutDir] = this.archs.entries().next().value! this.validatePrerequisites() diff --git a/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts b/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts index 2bdc4c354c3..ce5e14fba6b 100644 --- a/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts +++ b/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts @@ -143,7 +143,7 @@ export class NsisTarget extends Target { } private async buildInstaller(archs: Map): Promise { - const primaryArch = archs.size === 1 ? archs.keys().next().value : null + const primaryArch: Arch | null = archs.size === 1 ? archs.keys().next().value ?? null : null const packager = this.packager const appInfo = packager.appInfo const options = this.options @@ -231,7 +231,8 @@ export class NsisTarget extends Target { defines[arch === Arch.x64 ? "APP_DIR_64" : arch === Arch.arm64 ? "APP_DIR_ARM64" : "APP_DIR_32"] = dir } } else if (USE_NSIS_BUILT_IN_COMPRESSOR && archs.size === 1) { - defines.APP_BUILD_DIR = archs.get(archs.keys().next().value) + const value: Arch | undefined = archs.keys().next().value + use(value, v => (defines.APP_BUILD_DIR = archs.get(v))) } else { await BluebirdPromise.map(archs.keys(), async arch => { const { fileInfo, unpackedSize } = await this.packageHelper.packArch(arch, this) diff --git a/packages/app-builder-lib/src/targets/nsis/nsisOptions.ts b/packages/app-builder-lib/src/targets/nsis/nsisOptions.ts index f340cae1fb1..caa1a3010d2 100644 --- a/packages/app-builder-lib/src/targets/nsis/nsisOptions.ts +++ b/packages/app-builder-lib/src/targets/nsis/nsisOptions.ts @@ -33,7 +33,7 @@ export interface CommonNsisOptions { readonly unicode?: boolean /** - * See [GUID vs Application Name](../configuration/nsis#guid-vs-application-name). + * See [GUID vs Application Name](./nsis.md#guid-vs-application-name). */ readonly guid?: string | null @@ -100,32 +100,32 @@ export interface NsisOptions extends CommonNsisOptions, CommonWindowsInstallerCo readonly removeDefaultUninstallWelcomePage?: boolean /** - * The path to installer icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * The path to installer icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to `build/installerIcon.ico` or application icon. */ readonly installerIcon?: string | null /** - * The path to uninstaller icon, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * The path to uninstaller icon, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to `build/uninstallerIcon.ico` or application icon. */ readonly uninstallerIcon?: string | null /** - * *assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * *assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * @default build/installerHeader.bmp */ readonly installerHeader?: string | null /** - * *one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * *one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to `build/installerHeaderIcon.ico` or application icon. */ readonly installerHeaderIcon?: string | null /** - * *assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * *assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to `build/installerSidebar.bmp` or `${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp`. Image size 164 × 314 pixels. */ readonly installerSidebar?: string | null /** - * *assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](/configuration/configuration#MetadataDirectories-buildResources) or to the project directory. + * *assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](./configuration.md#MetadataDirectories-buildResources) or to the project directory. * Defaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp` */ readonly uninstallerSidebar?: string | null @@ -155,7 +155,7 @@ export interface NsisOptions extends CommonNsisOptions, CommonWindowsInstallerCo readonly license?: string | null /** - * The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName} Setup ${version}.${ext}`. + * The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName} Setup ${version}.${ext}`. */ readonly artifactName?: string | null @@ -241,7 +241,7 @@ export interface NsisWebOptions extends NsisOptions { readonly appPackageUrl?: string | null /** - * The [artifact file name template](/configuration/configuration#artifact-file-name-template). Defaults to `${productName} Web Setup ${version}.${ext}`. + * The [artifact file name template](./configuration.md#artifact-file-name-template). Defaults to `${productName} Web Setup ${version}.${ext}`. */ readonly artifactName?: string | null } diff --git a/packages/app-builder-lib/src/util/config/config.ts b/packages/app-builder-lib/src/util/config/config.ts index c490805df7b..b6e258f37d9 100644 --- a/packages/app-builder-lib/src/util/config/config.ts +++ b/packages/app-builder-lib/src/util/config/config.ts @@ -244,12 +244,12 @@ export async function validateConfiguration(config: Configuration, debugLogger: } const site = "https://www.electron.build" - let url = `${site}/configuration/configuration` + let url = `${site}/configuration` const targets = new Set(["mac", "dmg", "pkg", "mas", "win", "nsis", "appx", "linux", "appimage", "snap"]) const dataPath: string = error.dataPath == null ? null : error.dataPath const targetPath = dataPath.startsWith(".") ? dataPath.substr(1).toLowerCase() : null if (targetPath != null && targets.has(targetPath)) { - url = `${site}/configuration/${targetPath}` + url = `${site}/${targetPath}` } return `${formattedError}\n How to fix: diff --git a/packages/app-builder-lib/templates/nsis/README.md b/packages/app-builder-lib/templates/nsis/README.md index 62b793f2851..4749f174306 100644 --- a/packages/app-builder-lib/templates/nsis/README.md +++ b/packages/app-builder-lib/templates/nsis/README.md @@ -1,6 +1,6 @@ # NSIS -⚠️ **It is developer documentation.** If your are looking for usage guide, see [user documentation](https://electron.build/configuration/nsis). +⚠️ **It is developer documentation.** If your are looking for usage guide, see [user documentation](https://electron.build/nsis). NSIS stands for Nullsoft Scriptable Install System. electron-builder utilizes a [customized version](https://github.com/electron-userland/electron-builder-binaries) of it and uses `NsisMultiUser` plugin to handle installation for single user or all users on the computer. @@ -24,7 +24,7 @@ For translators, the strings to be displayed are included in [`assistedMessages. As for other strings in NSIS, head to [electron-userland/electron-builder-binaries](https://github.com/electron-userland/electron-builder-binaries) or the upstream repository on [Sorceforge](https://sourceforge.net/p/nsis/code/HEAD/tree/). ## GUID -See [docs](https://electron.build/configuration/nsis). +See [docs](https://electron.build/nsis). We use UUID v5 to generate sha-1 name-based UUID. diff --git a/packages/app-builder-lib/typedoc.json b/packages/app-builder-lib/typedoc.json new file mode 100644 index 00000000000..8157ef6b283 --- /dev/null +++ b/packages/app-builder-lib/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/index.ts"] +} \ No newline at end of file diff --git a/packages/builder-util-runtime/src/publishOptions.ts b/packages/builder-util-runtime/src/publishOptions.ts index 2ee3353071d..48ac8a6db85 100644 --- a/packages/builder-util-runtime/src/publishOptions.ts +++ b/packages/builder-util-runtime/src/publishOptions.ts @@ -112,12 +112,12 @@ export interface GithubOptions extends PublishConfiguration { readonly protocol?: "https" | "http" | null /** - * The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](/auto-update#appupdatersetfeedurloptions). + * The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](./auto-update.md#appupdatersetfeedurloptions). */ readonly token?: string | null /** - * Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](/auto-update#private-github-update-repo). + * Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](./auto-update.md#private-github-update-repo). */ readonly private?: boolean | null @@ -143,7 +143,7 @@ export function githubUrl(options: GithubOptions, defaultHost = "github.com") { /** * Generic (any HTTP(S) server) options. - * In all publish options [File Macros](/file-patterns#file-macros) are supported. + * In all publish options [File Macros](./file-patterns.md#file-macros) are supported. */ export interface GenericServerOptions extends PublishConfiguration { /** diff --git a/packages/builder-util-runtime/src/updateInfo.ts b/packages/builder-util-runtime/src/updateInfo.ts index 408c62a9ad5..9a279e7fb0e 100644 --- a/packages/builder-util-runtime/src/updateInfo.ts +++ b/packages/builder-util-runtime/src/updateInfo.ts @@ -70,7 +70,7 @@ export interface UpdateInfo { releaseDate: string /** - * The [staged rollout](/auto-update#staged-rollouts) percentage, 0-100. + * The [staged rollout](./auto-update.md#staged-rollouts) percentage, 0-100. */ readonly stagingPercentage?: number diff --git a/packages/builder-util-runtime/typedoc.json b/packages/builder-util-runtime/typedoc.json new file mode 100644 index 00000000000..8157ef6b283 --- /dev/null +++ b/packages/builder-util-runtime/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/index.ts"] +} \ No newline at end of file diff --git a/packages/builder-util/typedoc.json b/packages/builder-util/typedoc.json new file mode 100644 index 00000000000..f2666c2bb54 --- /dev/null +++ b/packages/builder-util/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/util.ts"] +} \ No newline at end of file diff --git a/packages/dmg-builder/typedoc.json b/packages/dmg-builder/typedoc.json new file mode 100644 index 00000000000..3486713b5a8 --- /dev/null +++ b/packages/dmg-builder/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/dmgUtil.ts"] +} \ No newline at end of file diff --git a/packages/electron-builder-squirrel-windows/src/SquirrelWindowsTarget.ts b/packages/electron-builder-squirrel-windows/src/SquirrelWindowsTarget.ts index a31b7868ddd..f0f273330f6 100644 --- a/packages/electron-builder-squirrel-windows/src/SquirrelWindowsTarget.ts +++ b/packages/electron-builder-squirrel-windows/src/SquirrelWindowsTarget.ts @@ -89,9 +89,7 @@ export default class SquirrelWindowsTarget extends Target { } if (iconUrl == null) { - throw new InvalidConfigurationError( - "squirrelWindows.iconUrl is not specified, please see https://www.electron.build/configuration/squirrel-windows#SquirrelWindowsOptions-iconUrl" - ) + throw new InvalidConfigurationError("squirrelWindows.iconUrl is not specified, please see https://www.electron.build/squirrel-windows#SquirrelWindowsOptions-iconUrl") } } diff --git a/packages/electron-builder-squirrel-windows/typedoc.json b/packages/electron-builder-squirrel-windows/typedoc.json new file mode 100644 index 00000000000..37fa0fce2b1 --- /dev/null +++ b/packages/electron-builder-squirrel-windows/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/SquirrelWindowsTarget.ts"] +} \ No newline at end of file diff --git a/packages/electron-builder/typedoc.json b/packages/electron-builder/typedoc.json new file mode 100644 index 00000000000..8157ef6b283 --- /dev/null +++ b/packages/electron-builder/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/index.ts"] +} \ No newline at end of file diff --git a/packages/electron-forge-maker-appimage/readme.md b/packages/electron-forge-maker-appimage/readme.md index cb1e46701f3..854537bc964 100644 --- a/packages/electron-forge-maker-appimage/readme.md +++ b/packages/electron-forge-maker-appimage/readme.md @@ -3,7 +3,7 @@ [electron-builder](https://github.com/electron-userland/electron-builder) [appimage](http://appimage.org) target for electron-forge. Recommended to build electron-forge project using electron-builder directly. -[Publishing](https://www.electron.build/configuration/publish), +[Publishing](https://www.electron.build/publish), [Auto Update](https://electron.build/auto-update) and [Code Signing](https://electron.build/code-signing) supported only in this case -(including all other useful [packaging options](https://electron.build/configuration/configuration) like [files](https://electron.build/configuration/configuration#Config-files)). \ No newline at end of file +(including all other useful [packaging options](https://electron.build/configuration) like [files](https://electron.build./configuration.md#Config-files)). \ No newline at end of file diff --git a/packages/electron-forge-maker-appimage/tsconfig.json b/packages/electron-forge-maker-appimage/tsconfig.json new file mode 100644 index 00000000000..8efdfcc01af --- /dev/null +++ b/packages/electron-forge-maker-appimage/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out", + "allowJs": true + }, + "include": [ + "main.js" + ] +} \ No newline at end of file diff --git a/packages/electron-forge-maker-nsis-web/readme.md b/packages/electron-forge-maker-nsis-web/readme.md index a16f9026a01..6bf2f0a2eb6 100644 --- a/packages/electron-forge-maker-nsis-web/readme.md +++ b/packages/electron-forge-maker-nsis-web/readme.md @@ -1,9 +1,9 @@ # electron-forge-maker-nsis-web -[electron-builder](https://github.com/electron-userland/electron-builder) [nsis-web](https://electron.build/configuration/nsis) target for electron-forge. +[electron-builder](https://github.com/electron-userland/electron-builder) [nsis-web](https://electron.build/nsis) target for electron-forge. Recommended to build electron-forge project using electron-builder directly. -[Publishing](https://www.electron.build/configuration/publish), +[Publishing](https://www.electron.build/publish), [Auto Update](https://electron.build/auto-update) and [Code Signing](https://electron.build/code-signing) supported only in this case -(including all other useful [packaging options](https://electron.build/configuration/configuration) like [files](https://electron.build/configuration/configuration#Config-files)). \ No newline at end of file +(including all other useful [packaging options](https://electron.build/configuration) like [files](https://electron.build./configuration.md#Config-files)). \ No newline at end of file diff --git a/packages/electron-forge-maker-nsis-web/tsconfig.json b/packages/electron-forge-maker-nsis-web/tsconfig.json new file mode 100644 index 00000000000..8efdfcc01af --- /dev/null +++ b/packages/electron-forge-maker-nsis-web/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out", + "allowJs": true + }, + "include": [ + "main.js" + ] +} \ No newline at end of file diff --git a/packages/electron-forge-maker-nsis/readme.md b/packages/electron-forge-maker-nsis/readme.md index 2403e34d02a..07fdfe8c385 100644 --- a/packages/electron-forge-maker-nsis/readme.md +++ b/packages/electron-forge-maker-nsis/readme.md @@ -1,9 +1,9 @@ # electron-forge-maker-nsis -[electron-builder](https://github.com/electron-userland/electron-builder) [nsis](https://electron.build/configuration/nsis) target for electron-forge. +[electron-builder](https://github.com/electron-userland/electron-builder) [nsis](https://electron.build/nsis) target for electron-forge. Recommended to build electron-forge project using electron-builder directly. -[Publishing](https://www.electron.build/configuration/publish), +[Publishing](https://www.electron.build/publish), [Auto Update](https://electron.build/auto-update) and [Code Signing](https://electron.build/code-signing) supported only in this case -(including all other useful [packaging options](https://electron.build/configuration/configuration) like [files](https://electron.build/configuration/configuration#Config-files)). \ No newline at end of file +(including all other useful [packaging options](https://electron.build/configuration) like [files](https://electron.build./configuration.md#Config-files)). \ No newline at end of file diff --git a/packages/electron-forge-maker-nsis/tsconfig.json b/packages/electron-forge-maker-nsis/tsconfig.json new file mode 100644 index 00000000000..8efdfcc01af --- /dev/null +++ b/packages/electron-forge-maker-nsis/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out", + "allowJs": true + }, + "include": [ + "main.js" + ] +} \ No newline at end of file diff --git a/packages/electron-forge-maker-snap/readme.md b/packages/electron-forge-maker-snap/readme.md index a188009b37a..1789a949756 100644 --- a/packages/electron-forge-maker-snap/readme.md +++ b/packages/electron-forge-maker-snap/readme.md @@ -3,7 +3,7 @@ [electron-builder](https://github.com/electron-userland/electron-builder) [snap](https://snapcraft.io) target for electron-forge. Recommended to build electron-forge project using electron-builder directly. -[Publishing](https://www.electron.build/configuration/publish), +[Publishing](https://www.electron.build/publish), [Auto Update](https://electron.build/auto-update) and [Code Signing](https://electron.build/code-signing) supported only in this case -(including all other useful [packaging options](https://electron.build/configuration/configuration) like [files](https://electron.build/configuration/configuration#Config-files)). \ No newline at end of file +(including all other useful [packaging options](https://electron.build/configuration) like [files](https://electron.build./configuration.md#Config-files)). \ No newline at end of file diff --git a/packages/electron-forge-maker-snap/tsconfig.json b/packages/electron-forge-maker-snap/tsconfig.json new file mode 100644 index 00000000000..8efdfcc01af --- /dev/null +++ b/packages/electron-forge-maker-snap/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out", + "allowJs": true + }, + "include": [ + "main.js" + ] +} \ No newline at end of file diff --git a/packages/electron-publish/readme.md b/packages/electron-publish/readme.md index 25a22a0a2ab..d26508a5c03 100644 --- a/packages/electron-publish/readme.md +++ b/packages/electron-publish/readme.md @@ -1,7 +1,7 @@ # electron-publish -Part of [electron-builder](https://github.com/electron-userland/electron-builder). +Part of [electron-builder](https://github.com/electron-userland/electron-builder). -See the [Publishing Artifacts](https://www.electron.build/configuration/publish) for more information. +See the [Publishing Artifacts](https://www.electron.build/publish) for more information. Can be used standalone. \ No newline at end of file diff --git a/packages/electron-publish/typedoc.json b/packages/electron-publish/typedoc.json new file mode 100644 index 00000000000..c4891d94ab3 --- /dev/null +++ b/packages/electron-publish/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/publisher.ts"] +} \ No newline at end of file diff --git a/packages/electron-updater/README.md b/packages/electron-updater/README.md index aacf031f622..01a2b645900 100644 --- a/packages/electron-updater/README.md +++ b/packages/electron-updater/README.md @@ -8,7 +8,7 @@ See [Auto Update](https://electron.build/auto-update) for more information. Supported OS: - macOS ([Squirrel.Mac](https://github.com/Squirrel/Squirrel.Mac)). - Windows (NSIS). - - Linux (AppImage). + - Linux (AppImage, rpm, deb). ## Credits diff --git a/packages/electron-updater/src/AppUpdater.ts b/packages/electron-updater/src/AppUpdater.ts index 152a105c05b..6d2ecaddd08 100644 --- a/packages/electron-updater/src/AppUpdater.ts +++ b/packages/electron-updater/src/AppUpdater.ts @@ -257,7 +257,7 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter } /** - * Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`. + * Configure update provider. If value is `string`, [GenericServerOptions](./publish.md#genericserveroptions) will be set with value as `url`. * @param options If you want to override configuration in the `app-update.yml`. */ setFeedURL(options: PublishConfiguration | AllPublishOptions | string) { diff --git a/packages/electron-updater/typedoc.json b/packages/electron-updater/typedoc.json new file mode 100644 index 00000000000..30deef7712e --- /dev/null +++ b/packages/electron-updater/typedoc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "includeVersion": true, + "entryPoints": ["src/main.ts"] +} \ No newline at end of file diff --git a/docs/_redirects b/pages/_redirects similarity index 100% rename from docs/_redirects rename to pages/_redirects diff --git a/pages/api/electron-builder.md b/pages/api/electron-builder.md new file mode 100644 index 00000000000..0291d1a5946 --- /dev/null +++ b/pages/api/electron-builder.md @@ -0,0 +1,11 @@ +Developer API only. See [Configuration](../configuration.md) for user documentation. + +# Electron-Builder (main entry point) +{% include "../electron-builder/globals.md" %} + +# App-Builder-Lib +{% include "../app-builder-lib/globals.md" %} + +# Electron-Updater +{% include "../electron-updater/globals.md" %} + diff --git a/docs/api/programmatic-usage.md b/pages/api/programmatic-usage.md similarity index 97% rename from docs/api/programmatic-usage.md rename to pages/api/programmatic-usage.md index fc4883cba83..6db93c98cca 100644 --- a/docs/api/programmatic-usage.md +++ b/pages/api/programmatic-usage.md @@ -7,7 +7,7 @@ const Platform = builder.Platform // Let's get that intellisense working /** * @type {import('electron-builder').Configuration} -* @see https://www.electron.build/configuration/configuration +* @see https://www.electron.build/configuration */ const options = { protocols: { @@ -17,11 +17,11 @@ const options = { "deeplink" ] }, - + // "store” | “normal” | "maximum". - For testing builds, use 'store' to reduce build time significantly. compression: "normal", removePackageScripts: true, - + afterSign: async (context) => { // Mac releases require hardening+notarization: https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution if (!isDebug && context.electronPlatformName === "darwin") { @@ -42,7 +42,7 @@ const options = { }, nodeGypRebuild: false, buildDependenciesFromSource: false, - + directories: { output: "dist/artifacts/local", buildResources: "installer/resources" @@ -57,7 +57,7 @@ const options = { filter: "*.node" } ], - + win: { target: 'nsis' }, @@ -65,7 +65,7 @@ const options = { deleteAppDataOnUninstall: true, include: "installer/win/nsis-installer.nsh" }, - + mac: { target: 'dmg', hardenedRuntime: true, @@ -97,7 +97,7 @@ const options = { height: 500 } }, - + linux: { desktop: { StartupNotify: "false", diff --git a/docs/configuration/appimage.md b/pages/appimage.md similarity index 84% rename from docs/configuration/appimage.md rename to pages/appimage.md index 5a4386a6bcb..005fb0b20df 100644 --- a/docs/configuration/appimage.md +++ b/pages/appimage.md @@ -2,6 +2,7 @@ The top-level [appImage](configuration.md#Configuration-appImage) key contains s !!! info "Desktop Integration" Since electron-builder 21 desktop integration is not a part of produced AppImage file. [AppImageLauncher](https://github.com/TheAssassin/AppImageLauncher) is the recommended way to integrate AppImages. - -{!generated/appimage-options.md!} \ No newline at end of file +# Configuration + +{% include "./app-builder-lib.Interface.AppImageOptions.md" %} diff --git a/pages/appx.md b/pages/appx.md new file mode 100644 index 00000000000..832673c25de --- /dev/null +++ b/pages/appx.md @@ -0,0 +1,55 @@ +The top-level [appx](configuration.md#Configuration-appx) key contains set of options instructing electron-builder on how it should build AppX (Windows Store). + +All options are optional. All required for AppX configuration is inferred and computed automatically. + +## AppX Package Code Signing + +* If the AppX package is meant for enterprise or self-made distribution (manually install the app without using the Store for testing or for enterprise distribution), it must be [signed](../code-signing.md). +* If the AppX package is meant for Windows Store distribution, no need to sign the package with any certificate. The Windows Store will take care of signing it with a Microsoft certificate during the submission process. + +## AppX Assets + +AppX assets need to be placed in the `appx` folder in the [build](configuration.md#MetadataDirectories-buildResources) directory. + +The assets should follow these naming conventions: + +- Logo: `StoreLogo.png` +- Square150x150Logo: `Square150x150Logo.png` +- Square44x44Logo: `Square44x44Logo.png` +- Wide310x150Logo: `Wide310x150Logo.png` +- *Optional* BadgeLogo: `BadgeLogo.png` +- *Optional* Square310x310Logo: `LargeTile.png` +- *Optional* Square71x71Logo: `SmallTile.png` +- *Optional* SplashScreen: `SplashScreen.png` + +All official AppX asset types are supported by the build process. These assets can include scaled assets by using `target size` and `scale` in the name. +See [Guidelines for tile and icon assets](https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-app-assets) for more information. + +Default assets will be used for `Logo`, `Square150x150Logo`, `Square44x44Logo` and `Wide310x150Logo` if not provided. For assets marked `Optional`, these assets will not be listed in the manifest file if not provided. + +## How to publish your Electron App to the Windows App Store + +1. You'll need a microsoft developer account (pay some small fee). Use your favourite search engine to find the registration form. +2. Register you app for the desktop bridge [here](https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge). +3. Wait for MS to answer and further guide you. +4. In the meantime, build and test your appx. It's dead simple. + + ```json + "win": { + "target": "appx", + }, + ``` +5. The rest should be pretty straight forward — upload the appx to the store and wait for approval. + +## Building AppX on macOS + +The only solution for now — using [Parallels Desktop for Mac](http://www.parallels.com/products/desktop/) ([Pro Edition](https://forum.parallels.com/threads/prlctl-is-now-a-pro-or-business-version-tool-only.330290/) is required). Create Windows 10 virtual machine and start it. It will be detected and used automatically to build AppX on your macOS machine. Nothing is required to setup on Windows. It allows you to not copy project to Windows and to not setup build environment on Windows. + +## Common Questions +#### How do install AppX without trusted certificate? + +If you use self-signed certificate, you need to add it to "Trusted People". See [Install the certificate](https://stackoverflow.com/a/24372483/1910191). + +# Configuration + +{% include "./app-builder-lib.Interface.AppXOptions.md" %} \ No newline at end of file diff --git a/pages/auto-update.md b/pages/auto-update.md new file mode 100644 index 00000000000..5fb6773f2a2 --- /dev/null +++ b/pages/auto-update.md @@ -0,0 +1,216 @@ +Auto updates are enabled by the `electron-updater` package. Ideally, auto updates are configured to run in a CI pipeline to automatically provision new releases. See [publish configuration](./publish.md) for information on how to configure your local or CI environment for automated deployments. + +Auto updates work as follows: + +- You configure the package to build release metadata (`latest.yml`) +- Electron builder uploads the actual release targets and metadata files to the configured target (except for generic server, where you have to upload manually) +- You configure the Electron application to use auto-updates, which queries the publish server for possible new releases + +Read the remainder of this guide to configure everything. + +!!! info "Code signing is required on macOS" + macOS application must be [signed](code-signing.md) in order for auto updating to work. + +## Auto-updatable Targets + +* macOS: DMG. +* Linux: AppImage, DEB and RPM. +* Windows: NSIS. + +All these targets are default, custom configuration is not required. (Though it is possible to [pass in additional configuration, e.g. request headers](#custom-options-instantiating-updater-directly).) + +!!! info "Squirrel.Windows is not supported" + Simplified auto-update is supported on Windows if you use the default NSIS target, but is not supported for Squirrel.Windows. + You can [easily migrate to NSIS](https://github.com/electron-userland/electron-builder/issues/837#issuecomment-355698368). + +## Differences between electron-updater and built-in autoUpdater + +The `electron-updater` package offers a different functionality compared to Electron's built-in auto-updater. Here are the differences: + +* A dedicated release server is not required. +* Code signature validation not only on macOS, but also on Windows. +* All required metadata files and artifacts are produced and published automatically. +* Download progress and [staged rollouts](#staged-rollouts) supported on all platforms. +* Different providers supported out of the box: ([GitHub Releases](https://help.github.com/articles/about-releases/), [Amazon S3](https://aws.amazon.com/s3/), [DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces), [Keygen](https://keygen.sh/docs/api/#auto-updates-electron) and generic HTTP(s) server). +* You need only 2 lines of code to make it work. + +## Quick Setup Guide + +1. Install [electron-updater](https://yarn.pm/electron-updater) as an app dependency. + +2. Configure the [`publish`](./publish.md) options depending on where you want to host your release files. + +3. Build your application and check that the build directory contains the metadata `.yml` files next to the built application. For most publish targets, the building step will also upload the files, except for the generic server option, where you have to upload your built releases and metadata manually. + +4. Use `autoUpdater` from `electron-updater` instead of `electron`: + + CommonJS + ```js + const { autoUpdater } = require("electron-updater") + ``` + ESM + ```js + import { autoUpdater } from "electron-updater" + ``` + TypeScript + ```typescript + import electronUpdater, { type AppUpdater } from 'electron-updater'; + + export function getAutoUpdater(): AppUpdater { + // Using destructuring to access autoUpdater due to the CommonJS module of 'electron-updater'. + // It is a workaround for ESM compatibility issues, see https://github.com/electron-userland/electron-builder/issues/7976. + const { autoUpdater } = electronUpdater; + return autoUpdater; + } + ``` + +5. Call `autoUpdater.checkForUpdatesAndNotify()`. Or, if you need custom behaviour, implement `electron-updater` events, check examples below. + +!!! note + 1. Do not call [setFeedURL](#appupdatersetfeedurloptions). electron-builder automatically creates `app-update.yml` file for you on build in the `resources` (this file is internal, you don't need to be aware of it). + 2. `zip` target for macOS is **required** for Squirrel.Mac, otherwise `latest-mac.yml` cannot be created, which causes `autoUpdater` error. Default [target](./mac.md#MacOptions-target) for macOS is `dmg`+`zip`, so there is no need to explicitly specify target. + +## Examples + +!!! example "Example in TypeScript using system notifications" + ```typescript + import { autoUpdater } from "electron-updater" + + export default class AppUpdater { + constructor() { + const log = require("electron-log") + log.transports.file.level = "debug" + autoUpdater.logger = log + autoUpdater.checkForUpdatesAndNotify() + } + } + ``` + +* A [complete example](https://github.com/iffy/electron-updater-example) showing how to use. +* An [encapsulated manual update via menu](https://github.com/electron-userland/electron-builder/blob/docs/encapsulated%20manual%20update%20via%20menu.js). + +### Custom Options instantiating updater Directly + +If you want to more control over the updater configuration (e.g. request header for authorization purposes), you can instantiate the updater directly. + +```typescript +import { NsisUpdater } from "electron-updater" +// Or MacUpdater, AppImageUpdater + +export default class AppUpdater { + constructor() { + const options = { + requestHeaders: { + // Any request headers to include here + }, + provider: 'generic', + url: 'https://example.com/auto-updates' + } + + const autoUpdater = new NsisUpdater(options) + autoUpdater.addAuthHeader(`Bearer ${token}`) + autoUpdater.checkForUpdatesAndNotify() + } +} +``` + +## Debugging + +You don't need to listen all events to understand what's wrong. Just set `logger`. +[electron-log](https://github.com/megahertz/electron-log) is recommended (it is an additional dependency that you can install if needed). + +```js +autoUpdater.logger = require("electron-log") +autoUpdater.logger.transports.file.level = "info" +``` + +Note that in order to develop/test UI/UX of updating without packaging the application you need to have a file named `dev-app-update.yml` in the root of your project, which matches your `publish` setting from electron-builder config (but in [yaml](https://www.json2yaml.com) format). But it is not recommended, better to test auto-update for installed application (especially on Windows). [Minio](https://github.com/electron-userland/electron-builder/issues/3053#issuecomment-401001573) is recommended as a local server for testing updates. + +## Compatibility + +Generated metadata files format changes from time to time, but compatibility preserved up to version 1. If you start a new project, recommended to set `electronUpdaterCompatibility` to current latest format version (`>= 2.16`). + +Option `electronUpdaterCompatibility` set the electron-updater compatibility semver range. Can be specified per platform. + +e.g. `>= 2.16`, `>=1.0.0`. Defaults to `>=2.15` + +* `1.0.0` latest-mac.json +* `2.15.0` path +* `2.16.0` files + +## Staged Rollouts + +Staged rollouts allow you to distribute the latest version of your app to a subset of users that you can increase over time, similar to rollouts on platforms like Google Play. + +Staged rollouts are controlled by manually editing your `latest.yml` / `latest-mac.yml` (channel update info file). + +```yml +version: 1.1.0 +path: TestApp Setup 1.1.0.exe +sha512: Dj51I0q8aPQ3ioaz9LMqGYujAYRbDNblAQbodDRXAMxmY6hsHqEl3F6SvhfJj5oPhcqdX1ldsgEvfMNXGUXBIw== +stagingPercentage: 10 +``` + +Update will be shipped to 10% of userbase. + +If you want to pull a staged release because it hasn't gone well, you **must** increment the version number higher than your broken release. +Because some of your users will be on the broken 1.0.1, releasing a new 1.0.1 would result in them staying on a broken version. + +## File Generated and Uploaded in Addition + +`latest.yml` (or `latest-mac.yml` for macOS, or `latest-linux.yml` for Linux) will be generated and uploaded for all providers except `bintray` (because not required, `bintray` doesn't use `latest.yml`). + +## Private GitHub Update Repo + +You can use a private repository for updates with electron-updater by setting the `GH_TOKEN` environment variable (on user machine) and `private` option. +If `GH_TOKEN` is set, electron-updater will use the GitHub API for updates allowing private repositories to work. + + +!!! warning + Private GitHub provider only for [very special](https://github.com/electron-userland/electron-builder/issues/1393#issuecomment-288191885) cases — not intended and not suitable for all users. + +!!! note + The GitHub API currently has a rate limit of 5000 requests per user per hour. An update check uses up to 3 requests per check. + +## Events + +The `autoUpdater` object emits the following events: + +#### Event: `error` + +* `error` Error + +Emitted when there is an error while updating. + +#### Event: `checking-for-update` + +Emitted when checking if an update has started. + +#### Event: `update-available` + +* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider) + +Emitted when there is an available update. The update is downloaded automatically if `autoDownload` is `true`. + +#### Event: `update-not-available` + +Emitted when there is no available update. + +* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider) + +#### Event: `download-progress` +* `progress` ProgressInfo + * `bytesPerSecond` + * `percent` + * `total` + * `transferred` + +Emitted on progress. + +#### Event: `update-downloaded` + +* `info` [UpdateInfo](#UpdateInfo) — for generic and github providers. [VersionInfo](#VersionInfo) for Bintray provider. + + + + diff --git a/docs/cli.md b/pages/cli.md similarity index 87% rename from docs/cli.md rename to pages/cli.md index 4b5b7f7f295..b913b6e9eac 100644 --- a/docs/cli.md +++ b/pages/cli.md @@ -67,10 +67,10 @@ Prepend `npx` to sample commands below if you run it from Terminal and not from Without target configuration, electron-builder builds Electron app for current platform and current architecture using default target. * macOS - DMG and ZIP for Squirrel.Mac. -* Windows - [NSIS](configuration/nsis.md). +* Windows - [NSIS]./nsis.md). * Linux: - - if you build on Windows or macOS: [Snap](configuration/snap.md) and [AppImage](configuration/appimage.md) for x64. - - if you build on Linux: [Snap](configuration/snap.md) and [AppImage](configuration/appimage.md) for current architecture. + - if you build on Windows or macOS: [Snap](./snap.md) and [AppImage](./appimage.md) for x64. + - if you build on Linux: [Snap](./snap.md) and [AppImage](./appimage.md) for current architecture. Platforms and archs can be configured or using [CLI args](https://github.com/electron-userland/electron-builder#cli-usage), or in the configuration. @@ -119,6 +119,33 @@ For example, if you don't want to pass `--ia32` and `--x64` flags each time, but arch: universal ``` + electron-builder.config.js + ```js + module.exports = { + "win": { + "target": [ + { + "target": "nsis", + "arch": [ + "x64", + "ia32" + ] + } + ] + }, + "mac": { + "target": [ + { + "target": "dmg", + "arch": [ + "universal" + ] + } + ] + } + } + ``` + and use ``` build -wl diff --git a/docs/code-signing.md b/pages/code-signing.md similarity index 98% rename from docs/code-signing.md rename to pages/code-signing.md index 207d31b83da..ee8caa4506b 100644 --- a/docs/code-signing.md +++ b/pages/code-signing.md @@ -31,7 +31,7 @@ To sign an app on Windows, there are two types of certificates: Both certificates work with auto-update. The regular (and often cheaper) Code Signing Certificate shows a warning during installation that goes away once enough users installed your application and you've built up trust. The EV Certificate has more trust and thus works immediately without any warnings. However, it is not possible to export the EV Certificate as it is bound to a physical USB dongle. Thus, you can't export the certificate for signing code on a CI, such as AppVeyor. -If you are using an EV Certificate, you need to provide [win.certificateSubjectName](configuration/win.md#WindowsConfiguration-certificateSubjectName) in your electron-builder configuration. +If you are using an EV Certificate, you need to provide [win.certificateSubjectName](./win.md#WindowsConfiguration-certificateSubjectName) in your electron-builder configuration. If you use Windows 7, please ensure that [PowerShell](https://blogs.technet.microsoft.com/heyscriptingguy/2013/06/02/weekend-scripter-install-powershell-3-0-on-windows-7/) is updated to version 3.0. diff --git a/pages/configuration.md b/pages/configuration.md new file mode 100644 index 00000000000..7931ccee846 --- /dev/null +++ b/pages/configuration.md @@ -0,0 +1,64 @@ +electron-builder [configuration](#configuration) can be defined + +* in the `package.json` file of your project using the `build` key on the top level: + ```json + "build": { + "appId": "com.example.app" + } + ``` +* or through the `--config ` option. Defaults to `electron-builder.yml`. + ```yaml + appId: "com.example.app" + ``` + + `json`, [json5](http://json5.org), [toml](https://github.com/toml-lang/toml) or `js`/`ts` (exported configuration or function that produces configuration) formats also supported. + + !!! tip + If you want to use `js` file, do not name it `electron-builder.js`. It will [conflict](https://github.com/electron-userland/electron-builder/issues/6227) with `electron-builder` package name. + + !!! tip + If you want to use [toml](https://en.wikipedia.org/wiki/TOML), please install `yarn add toml --dev`. + +Most of the options accept `null` — for example, to explicitly set that DMG icon must be default volume icon from the OS and default rules must be not applied (i.e. use application icon as DMG icon), set `dmg.icon` to `null`. + +# Artifact File Name Template + +`${ext}` macro is supported in addition to [file macros](./file-patterns.md#file-macros). + +# Environment Variables from File + +Env file `electron-builder.env` in the current dir ([example](https://github.com/motdotla/dotenv-expand/blob/1cc80d02e1f8aa749253a04a2061c0fecb9bdb69/tests/.env)). Supported only for CLI usage. + +# How to Read Docs + +* Name of optional property is normal, **required** is bold. +* Type is specified after property name: `Array | String`. Union like this means that you can specify or string (`**/*`), or array of strings (`["**/*", "!foo.js"]`). + +# Configuration + +{% include "./app-builder-lib.Interface.Configuration.md" %} + +--- + +# Overridable per Platform Options + +Following options can be set also per platform (top-level keys [mac](mac.md), [linux](linux.md) and [win](win.md)) if need. + +# Base Configuration + +{% include "./app-builder-lib.Interface.PlatformSpecificBuildOptions.md" %} + +# Metadata +Some standard fields should be defined in the `package.json`. + +{% include "./app-builder-lib.Interface.Metadata.md" %} + +# Proton Native + +To package [Proton Native](https://proton-native.js.org/) app, set `protonNodeVersion` option to `current` or specific NodeJS version that you are packaging for. +Currently, only macOS and Linux supported. + +# Build Version Management +`CFBundleVersion` (macOS) and `FileVersion` (Windows) will be set automatically to `version.build_number` on CI server (Travis, AppVeyor, CircleCI and Bamboo supported). + +{% include "./hooks.md" %} diff --git a/pages/contents.md b/pages/contents.md new file mode 100644 index 00000000000..2848da0631b --- /dev/null +++ b/pages/contents.md @@ -0,0 +1,7 @@ +# File Contents + +{% include-markdown "./app-builder-lib.Interface.FilesBuildOptions.md" heading-offset=1 %} + +# FileSet Configuration + +{% include-markdown "./app-builder-lib.Interface.FileSet.md" heading-offset=2 %} \ No newline at end of file diff --git a/pages/dmg.md b/pages/dmg.md new file mode 100644 index 00000000000..07af92e1179 --- /dev/null +++ b/pages/dmg.md @@ -0,0 +1,23 @@ +The top-level [dmg](configuration.md#Configuration-dmg) key contains set of options instructing electron-builder on how it should build [DMG](https://en.wikipedia.org/wiki/Apple_Disk_Image). + +## DMG License + +To add license to DMG, create file `license_LANG_CODE.txt` in the build resources. Multiple license files in different languages are supported — use lang postfix (e.g. `_de`, `_ru`)). For example, create files `license_de.txt` and `license_en.txt` in the build resources. +If OS language is german, `license_de.txt` will be displayed. See map of [language code to name](https://github.com/meikidd/iso-639-1/blob/master/src/data.js). + +You can also change the default button labels of the DMG by passing a json file named `licenseButtons_LANG_CODE.json`. The german file would be named: `licenseButtons_de.json`. +The contain file should have the following format: +```json +{ + "lang": "English", + "agree": "Agree", + "disagree": "Disagree", + "print": "Print", + "save": "Save", + "description": "Here is my own description" +} +``` + +# Configuration + +{% include "./app-builder-lib.Interface.DmgOptions.md" %} \ No newline at end of file diff --git a/docs/donate.md b/pages/donate.md similarity index 100% rename from docs/donate.md rename to pages/donate.md diff --git a/docs/encapsulated manual update via menu.js b/pages/encapsulated manual update via menu.js similarity index 100% rename from docs/encapsulated manual update via menu.js rename to pages/encapsulated manual update via menu.js diff --git a/docs/extra.js b/pages/extra.js similarity index 97% rename from docs/extra.js rename to pages/extra.js index bd18505258c..d915972a176 100644 --- a/docs/extra.js +++ b/pages/extra.js @@ -1,6 +1,6 @@ "use strict" -loadNavPane() +// loadNavPane() function loadNavPane() { const isMobile = window.matchMedia("only screen and (max-width: 760px)").matches diff --git a/docs/file-patterns.md b/pages/file-patterns.md similarity index 100% rename from docs/file-patterns.md rename to pages/file-patterns.md diff --git a/docs/find-build-agent b/pages/find-build-agent similarity index 100% rename from docs/find-build-agent rename to pages/find-build-agent diff --git a/pages/flatpak.md b/pages/flatpak.md new file mode 100644 index 00000000000..6b7de3caafa --- /dev/null +++ b/pages/flatpak.md @@ -0,0 +1,20 @@ +!!! warning "Single-file Flatpak bundles" + Currently `electron-builder` does **not** support publishing apps to Flatpak repositories like [Flathub](https://flathub.org/). This means the Flatpak support in `electron-builder` is limited to generating [single-file bundles](https://docs.flatpak.org/en/latest/single-file-bundles.html) which have various limitations compared to app bundles installed from a repository. + + For what it's worth, there are [some](https://discourse.flathub.org/t/seeking-contractors-for-work-on-flathub-project/1889) [plans](https://discourse.flathub.org/t/is-it-possible-to-publish-a-self-contained-flatpak-file-to-flathub/2083) to make it easier to publish Electron apps to Flathub. When that happens, it should be easier to create a Flathub publisher for `electron-builder` (which would work similary to the other publishers). + +The top-level [flatpak](configuration.md#Configuration-flatpak) key contains a set of options instructing electron-builder on how it should build a [Flatpak](https://flatpak.org/) bundle. + +!!! info "Build dependencies" + The `flatpak` and `flatpak-builder` packages need to be installed in order to build Flatpak bundles. + +## Troubleshooting + +If the Flatpak build process fails with an error message like "flatpak failed with status code X", setting the `DEBUG="@malept/flatpak-bundler"` environment variable should provide more context about the error. + +!!! example "Enable Flatpak build debug logging" + `env DEBUG="@malept/flatpak-bundler" electron-builder build --linux flatpak` + +# Configuration + +{% include "./app-builder-lib.Interface.FlatpakOptions.md" %} diff --git a/docs/includes/hooks.md b/pages/hooks.md similarity index 100% rename from docs/includes/hooks.md rename to pages/hooks.md diff --git a/docs/icons.md b/pages/icons.md similarity index 59% rename from docs/icons.md rename to pages/icons.md index d5a8de6a5d1..6c613272b94 100644 --- a/docs/icons.md +++ b/pages/icons.md @@ -8,13 +8,13 @@ Files * *Optional* `background.png` (macOS DMG background). * *Optional* `background@2x.png` (macOS DMG Retina background). -need to be placed in the [buildResources](configuration/configuration.md#MetadataDirectories-buildResources) directory (defaults to `build`). All files are optional — but it is important to provide `icon.icns` (or `icon.png`), as otherwise the default Electron icon will be used. +need to be placed in the [buildResources](./configuration.md#MetadataDirectories-buildResources) directory (defaults to `build`). All files are optional — but it is important to provide `icon.icns` (or `icon.png`), as otherwise the default Electron icon will be used. ## Windows (NSIS) * *Optional* `icon.ico` (Windows app icon) or `icon.png`. Icon size should be at least 256x256. -needs to be placed in the [buildResources](configuration/configuration.md#MetadataDirectories-buildResources) directory (defaults to `build`). It is important to provide `icon.ico` (or `icon.png`), as otherwise the default Electron icon will be used. +needs to be placed in the [buildResources](./configuration.md#MetadataDirectories-buildResources) directory (defaults to `build`). It is important to provide `icon.ico` (or `icon.png`), as otherwise the default Electron icon will be used. ## Linux @@ -25,4 +25,4 @@ The filename must contain the size (e.g. `256x256.png`) of the icon). Recommende ## AppX -See [AppX Assets](configuration/appx.md#appx-assets). +See [AppX Assets](./appx.md#appx-assets). diff --git a/pages/linux.md b/pages/linux.md new file mode 100644 index 00000000000..0e3f13f2b6b --- /dev/null +++ b/pages/linux.md @@ -0,0 +1,20 @@ +The top-level [linux](configuration.md#Configuration-linux) key contains set of options instructing electron-builder on how it should build Linux targets. These options applicable for any Linux target. + +# Base Linux Configuration + +{% include "./app-builder-lib.Interface.LinuxConfiguration.md" %} + +# Debian Package Options + +The top-level [deb](configuration.md#Configuration-deb) key contains set of options instructing electron-builder on how it should build Debian package. + +{% include "./app-builder-lib.Interface.DebOptions.md" %} + +All [LinuxTargetSpecificOptions](linux.md#linuxtargetspecificoptions-apk-freebsd-pacman-p5p-and-rpm-options) can be also specified in the `deb` to customize Debian package. + +# `LinuxTargetSpecificOptions` APK, FreeBSD, Pacman, P5P and RPM Options + +The top-level `apk`, `freebsd`, `pacman`, `p5p` and `rpm` keys contains set of options instructing electron-builder on how it should build corresponding Linux target. + +{% include "./app-builder-lib.Interface.LinuxTargetSpecificOptions.md" %} + diff --git a/pages/mac.md b/pages/mac.md new file mode 100644 index 00000000000..a9be81b0614 --- /dev/null +++ b/pages/mac.md @@ -0,0 +1,9 @@ +The top-level [mac](configuration.md#Configuration-mac) key contains set of options instructing electron-builder on how it should build macOS targets. These options applicable for any macOS target. + +# Configuration + +{% include "./app-builder-lib.Interface.MacConfiguration.md" %} + +# Notarize Configuration + +{% include "./app-builder-lib.Interface.NotarizeNotaryOptions.md" %} diff --git a/pages/mas.md b/pages/mas.md new file mode 100644 index 00000000000..03defd415a4 --- /dev/null +++ b/pages/mas.md @@ -0,0 +1,7 @@ +The top-level [mas](configuration.md#Configuration-mas) key contains set of options instructing electron-builder on how it should build MAS (Mac Application Store) target. +Inherits [macOS options](mac.md). + +# Configuration + +{% include "./app-builder-lib.Interface.MasConfiguration.md" %} + diff --git a/pages/modules.md b/pages/modules.md new file mode 100644 index 00000000000..36cd5fb05cd --- /dev/null +++ b/pages/modules.md @@ -0,0 +1,12 @@ +{% include "./app-builder-lib/globals.md" %} +{% include "./builder-util-runtime/globals.md" %} +{% include "./builder-util/globals.md" %} +{% include "./dmg-builder/globals.md" %} +{% include "./electron-builder-squirrel-windows/globals.md" %} +{% include "./electron-builder/globals.md" %} +{% include "./electron-forge-maker-appimage/globals.md" %} +{% include "./electron-forge-maker-nsis-web/globals.md" %} +{% include "./electron-forge-maker-nsis/globals.md" %} +{% include "./electron-forge-maker-snap/globals.md" %} +{% include "./electron-publish/globals.md" %} +{% include "./electron-updater/globals.md" %} diff --git a/pages/msi-wrapped.md b/pages/msi-wrapped.md new file mode 100644 index 00000000000..9d9229aae39 --- /dev/null +++ b/pages/msi-wrapped.md @@ -0,0 +1,3 @@ +# Configuration + +{% include "./app-builder-lib.Interface.MsiWrappedOptions.md" %} \ No newline at end of file diff --git a/pages/msi.md b/pages/msi.md new file mode 100644 index 00000000000..f87be642059 --- /dev/null +++ b/pages/msi.md @@ -0,0 +1,3 @@ +# Configuration + +{% include "./app-builder-lib.Interface.MsiOptions.md" %} \ No newline at end of file diff --git a/docs/multi-platform-build.md b/pages/multi-platform-build.md similarity index 100% rename from docs/multi-platform-build.md rename to pages/multi-platform-build.md diff --git a/docs/configuration/nsis.md b/pages/nsis.md similarity index 98% rename from docs/configuration/nsis.md rename to pages/nsis.md index bc67596e56d..3e32c7d6b6a 100644 --- a/docs/configuration/nsis.md +++ b/pages/nsis.md @@ -2,14 +2,6 @@ The top-level [nsis](configuration.md#Configuration-nsis) key contains set of op These options also applicable for [Web installer](#web-installer), use top-level `nsisWeb` key. -{!generated/NsisOptions.md!} - ---- - -Inherited from `TargetSpecificOptions`: - -{!generated/TargetSpecificOptions.md!} - --- Unicode enabled by default. Large strings are supported (maximum string length of 8192 bytes instead of the default of 1024 bytes). @@ -156,3 +148,7 @@ For portable app, following environment variables are available: nsis: oneClick: false ``` + +# Configuration + +{% include "./app-builder-lib.Interface.NsisOptions.md" %} diff --git a/pages/pkg.md b/pages/pkg.md new file mode 100644 index 00000000000..9f70f218faf --- /dev/null +++ b/pages/pkg.md @@ -0,0 +1,5 @@ +The top-level [pkg](configuration.md#Configuration-pkg) key contains set of options instructing electron-builder on how it should build [PKG](https://goo.gl/yVvgF6) (macOS installer component package). + +# Configuration + +{% include "./app-builder-lib.Interface.PkgOptions.md" %} \ No newline at end of file diff --git a/pages/publish.md b/pages/publish.md new file mode 100644 index 00000000000..db7ba6e204e --- /dev/null +++ b/pages/publish.md @@ -0,0 +1,144 @@ +The [publish](configuration.md#Configuration-publish) key contains a set of options instructing electron-builder on how it should publish artifacts and build update info files for [auto update](../auto-update.md). + +`String | Object | Array` where `Object` it is [Keygen](#keygenoptions), [Generic Server](#genericserveroptions), [GitHub](#githuboptions), [S3](#s3options), [Spaces](#spacesoptions) or [Snap Store](#snapstoreoptions) options. Order is important — first item will be used as a default auto-update server. Can be specified in the [top-level configuration](configuration.md#configuration) or any platform- ([mac](mac.md), [linux](linux.md), [win](win.md)) or target- (e.g. [nsis](nsis.md)) specific configuration. + +Note that when using a generic server, you have to upload the built application and metadata files yourself. + +Travis and AppVeyor support publishing artifacts. But it requires additional configuration for each CI and you need to configure what to publish. +`electron-builder` makes publishing dead simple. + +If `GH_TOKEN` or `GITHUB_TOKEN` is defined — defaults to `[{provider: "github"}]`. + +If `KEYGEN_TOKEN` is defined and `GH_TOKEN` or `GITHUB_TOKEN` is not — defaults to `[{provider: "keygen"}]`. + +If `GITHUB_RELEASE_TOKEN` is defined, it will be used instead of (`GH_TOKEN` or `GITHUB_TOKEN`) to publish your release. +- e.g. mac: ``` export GITHUB_RELEASE_TOKEN= ``` +- the `GITHUB_TOKEN` will still be used when your app checks for updates, etc. +- you could make your `GITHUB_TOKEN` "Read-only" when creating a fine-grained personal access token, and "Read and write" for the `GITHUB_RELEASE_TOKEN`. +- "Contents" fine-grained permission was sufficient. (at time of writing - Apr 2024) + +!!! info "Snap store" + `snap` target by default publishes to snap store (the app store for Linux). To force publishing to another providers, explicitly specify publish configuration for `snap`. + +You can publish to multiple providers. For example, to publish Windows artifacts to both GitHub and Bitbucket (order is important — first item will be used as a default auto-update server, so, in this example app will use github as auto-update provider): + +```json +{ + "build": { + "win": { + "publish": ["github", "bitbucket"] + } + } +} +``` + +```yaml +win: + publish: + # an object provider for github with additional options + - provider: github + protocol: https + # a string provider for bitbucket that will use default options + - bitbucket +``` + +You can also configure publishing using CLI arguments, for example, to force publishing snap not to Snap Store, but to GitHub: `-c.snap.publish=github` + +[Custom](https://github.com/electron-userland/electron-builder/issues/3261) publish provider can be used if need. + +!!! tip "Macros" + In all publish options [File Macros](../file-patterns.md#file-macros) are supported. + +## How to Publish + +Excerpt from [CLI Usage](../cli.md) of `electron-builder` command: +``` +Publishing: + --publish, -p [choices: "onTag", "onTagOrDraft", "always", "never"] +``` +CLI `--publish` option values: + +| Value | Description +| -------------- | ----------- +| `onTag` | on tag push only +| `onTagOrDraft` | on tag push or if draft release exists +| `always` | always publish +| `never` | never publish + +But please consider using automatic rules instead of explicitly specifying `publish`: + +* If CI server detected, — `onTagOrDraft`. + +* If CI server reports that tag was pushed, — `onTag`. + + Release will be drafted (if doesn't already exist) and artifacts published only if tag was pushed. + +* If [npm script](https://docs.npmjs.com/misc/scripts) named `release`, — `always`. + + Add to `scripts` in the development `package.json`: + + ```json + "release": "electron-builder" + ``` + + and if you run `yarn release`, a release will be drafted (if doesn't already exist) and artifacts published. + +### Recommended GitHub Releases Workflow + +1. [Draft a new release](https://help.github.com/articles/creating-releases/). Set the "Tag version" to the value of `version` in your application `package.json`, and prefix it with `v`. "Release title" can be anything you want. + + For example, if your application `package.json` version is `1.0`, your draft's "Tag version" would be `v1.0`. + +2. Push some commits. Every CI build will update the artifacts attached to this draft. +3. Once you are done, publish the release. GitHub will tag the latest commit for you. + +The benefit of this workflow is that it allows you to always have the latest artifacts, and the release can be published once it is ready. + +### Continuous Deployment Workflow on Amazon S3 and other non-GitHub + +This example workflow is modelled on how releases are handled in maven (it is an example of one of many possible workflows, you are not forced to follow it). + +1. Setup your CI to publish on each commit. E.g. `"dist": "electron-builder --publish always"` in your `package.json`. +2. Set your version in your application `package.json` to `1.9.0-snapshot` (or `1.9.0-master` or whatever you want your development channel to be named). This will publish a file named `snapshot.yml` and a build named `something-snapshot.exe` (and corresponding for mac) to S3. +3. When you are ready to deploy, simply change you package version to `1.9.0` and push. This will then produce a `latest.yml` and `something.exe` on s3. Usually you'll git-tag this version as well (just to keep track of it). +4. Change the version back to a snapshot version right after, i.e. `1.10.0-snapshot`, and commit it. + +## GitHub Repository + +Detected automatically using: + +* [repository](https://docs.npmjs.com/files/package.json#repository) in the application or development `package.json`, +* if not set, env + * `TRAVIS_REPO_SLUG` + * or `APPVEYOR_REPO_NAME` + * or `CIRCLE_PROJECT_USERNAME`/`CIRCLE_PROJECT_REPONAME`, +* if no env, from `.git/config` origin url. + +# Publishers + +# Bitbucket +{% include "./builder-util-runtime.Interface.BitbucketOptions.md" %} + +# Github + +{% include "./builder-util-runtime.Interface.GithubOptions.md" %} + +# Keygen + +{% include "./builder-util-runtime.Interface.KeygenOptions.md" %} + +# S3 + +{% include "./builder-util-runtime.Interface.S3Options.md" %} + +# Snap Store + +{% include "./builder-util-runtime.Interface.SnapStoreOptions.md" %} + +# Spaces + +{% include "./builder-util-runtime.Interface.SpacesOptions.md" %} + +# BYO Generic (create-your-own) +(And maybe submit it upstream in a PR!) +{% include "./builder-util-runtime.Interface.GenericServerOptions.md" %} \ No newline at end of file diff --git a/pages/snap.md b/pages/snap.md new file mode 100644 index 00000000000..adab38b789f --- /dev/null +++ b/pages/snap.md @@ -0,0 +1,5 @@ +The top-level [snap](configuration.md#Configuration-snap) key contains set of options instructing electron-builder on how it should build [Snap](http://snapcraft.io). + +# Configuration + +{% include "./app-builder-lib.Interface.SnapOptions.md" %} \ No newline at end of file diff --git a/docs/sponsor-logos/Tidepool_Logo_Light.svg b/pages/sponsor-logos/Tidepool_Logo_Light.svg similarity index 100% rename from docs/sponsor-logos/Tidepool_Logo_Light.svg rename to pages/sponsor-logos/Tidepool_Logo_Light.svg diff --git a/pages/squirrel-windows.md b/pages/squirrel-windows.md new file mode 100644 index 00000000000..0a2f3ae7754 --- /dev/null +++ b/pages/squirrel-windows.md @@ -0,0 +1,12 @@ +The top-level [squirrelWindows](configuration.md#Configuration-squirrelWindows) key contains set of options instructing electron-builder on how it should build Squirrel.Windows. + +Squirrel.Windows target is maintained, but deprecated. Please use [nsis](nsis.md) instead. + +To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. +To build for Squirrel.Windows on macOS, please install `mono` (`brew install mono`). + +Your app must be able to handle Squirrel.Windows startup events that occur during install and uninstall. See [electron-squirrel-startup](https://github.com/mongodb-js/electron-squirrel-startup). + +# Configuration + +{% include "./app-builder-lib.Interface.SquirrelWindowsOptions.md" %} \ No newline at end of file diff --git a/pages/stylesheets/autowidth.css b/pages/stylesheets/autowidth.css new file mode 100644 index 00000000000..9b502bb4583 --- /dev/null +++ b/pages/stylesheets/autowidth.css @@ -0,0 +1,7 @@ +.md-main__inner.md-grid { + max-width: initial; +} + +.md-grid { + max-width: initial; +} diff --git a/docs/tutorials/code-signing-windows-apps-on-unix.md b/pages/tutorials/code-signing-windows-apps-on-unix.md similarity index 100% rename from docs/tutorials/code-signing-windows-apps-on-unix.md rename to pages/tutorials/code-signing-windows-apps-on-unix.md diff --git a/docs/tutorials/loading-app-dependencies-manually.md b/pages/tutorials/loading-app-dependencies-manually.md similarity index 100% rename from docs/tutorials/loading-app-dependencies-manually.md rename to pages/tutorials/loading-app-dependencies-manually.md diff --git a/docs/tutorials/macos-kernel-extensions.md b/pages/tutorials/macos-kernel-extensions.md similarity index 70% rename from docs/tutorials/macos-kernel-extensions.md rename to pages/tutorials/macos-kernel-extensions.md index c83728dca99..b16136de8c9 100644 --- a/docs/tutorials/macos-kernel-extensions.md +++ b/pages/tutorials/macos-kernel-extensions.md @@ -3,12 +3,12 @@ Installing macOS kernel extensions with `electron-builder` can be done using scr First, in `package.json`, make sure you're building a package (`.pkg`) and not the default `.dmg`: ```json -"mac": { +"mac": { "target": "pkg" } ``` -Place your script and the kernel extensions in `build/pkg-scripts`, or [define a custom directory](../configuration/pkg.md#PkgOptions-scripts). Note that the script **must** be called either `preinstall` or `postinstall`. Remember to use ` #!/bin/sh` as the first line in your script. Also, your script must be executable (`chmod +x `). +Place your script and the kernel extensions in `build/pkg-scripts`, or [define a custom directory](../pkg.md#PkgOptions-scripts). Note that the script **must** be called either `preinstall` or `postinstall`. Remember to use ` #!/bin/sh` as the first line in your script. Also, your script must be executable (`chmod +x `). An example script: ```sh diff --git a/docs/tutorials/release-using-channels.md b/pages/tutorials/release-using-channels.md similarity index 100% rename from docs/tutorials/release-using-channels.md rename to pages/tutorials/release-using-channels.md diff --git a/docs/tutorials/test-update-on-s3-locally.md b/pages/tutorials/test-update-on-s3-locally.md similarity index 100% rename from docs/tutorials/test-update-on-s3-locally.md rename to pages/tutorials/test-update-on-s3-locally.md diff --git a/docs/tutorials/two-package-structure.md b/pages/tutorials/two-package-structure.md similarity index 91% rename from docs/tutorials/two-package-structure.md rename to pages/tutorials/two-package-structure.md index fcc715c2d9e..30a8d8c7bd3 100644 --- a/docs/tutorials/two-package-structure.md +++ b/pages/tutorials/two-package-structure.md @@ -2,7 +2,7 @@ Since version 8 electron-builder rebuilds only production dependencies, so, you are not forced to use two package.json structure. 1. For development (`./package.json`) - + The `package.json` resides in the root of your project. Here you declare the dependencies for your development environment and build scripts (`devDependencies`). 2. For your application (`./app/package.json`) @@ -12,7 +12,7 @@ Why? 1. Native npm modules (those written in C, not JavaScript) need to be compiled and here we have two different compilation targets for them. Those used within the application need to be compiled against the electron runtime and all `devDependencies` need to be compiled against your local node.js environment. Thanks to the two `package.json` structure, this is trivial (see [#39](https://github.com/electron-userland/electron-builder/issues/39)). -2. No need to specify which [files](../configuration/configuration.md#Configuration-files) to include in the app (because development files reside outside the `app` directory). +2. No need to specify which [files](../configuration.md#Configuration-files) to include in the app (because development files reside outside the `app` directory). Please see [Loading App Dependencies Manually](loading-app-dependencies-manually.md) and [#379](https://github.com/electron-userland/electron-builder/issues/379#issuecomment-218503881). diff --git a/pages/win.md b/pages/win.md new file mode 100644 index 00000000000..d345b7438ae --- /dev/null +++ b/pages/win.md @@ -0,0 +1,97 @@ +The top-level [win](configuration.md#Configuration-win) key contains set of options instructing electron-builder on how it should build Windows targets. These options applicable for any Windows target. + +--- + +# Common Questions +## How do delegate code signing? + +Use [sign](#WindowsConfiguration-sign) option. Please also see [why sign.js is called 8 times](https://github.com/electron-userland/electron-builder/issues/3995). + +```json +"win": { + "sign": "./customSign.js" +} +``` + +File `customSign.js` in the project root directory: +```js +exports.default = async function(configuration) { + // your custom code +} +``` + +## How do use a custom verify function to enable nsis signature verification alternatives instead of powershell? + +Use the `verifyUpdateCodeSignature` interface: + +```js +/** +* return null if verify signature succeed +* return error message if verify signature failed +*/ +export type verifyUpdateCodeSignature = (publisherName: string[], path: string) => Promise +``` + +Pass a custom verify function to the nsis updater. For example, if you want to use a native verify function, you can use [win-verify-signature](https://github.com/beyondkmp/win-verify-trust). + + +```js +import { NsisUpdater } from "electron-updater" +import { verifySignatureByPublishName } from "win-verify-signature" +// Or MacUpdater, AppImageUpdater + +export default class AppUpdater { + constructor() { + const options = { + requestHeaders: { + // Any request headers to include here + }, + provider: 'generic', + url: 'https://example.com/auto-updates' + } + + const autoUpdater = new NsisUpdater(options) + autoUpdater.verifyUpdateCodeSignature = (publisherName: string[], path: string) => { + const result = verifySignatureByPublishName(path, publisherName); + if(result.signed) return Promise.resolve(null); + return Promise.resolve(result.message); + } + autoUpdater.addAuthHeader(`Bearer ${token}`) + autoUpdater.checkForUpdatesAndNotify() + } +} +``` + + +## How do create Parallels Windows 10 Virtual Machine? + +!!! warning "Disable "Share Mac user folders with Windows"" + If you use Parallels, you [must not use](https://github.com/electron-userland/electron-builder/issues/865#issuecomment-258105498) "Share Mac user folders with Windows" feature and must not run installers from such folders. + +You don't need to have Windows 10 license. Free is provided (expire after 90 days, but it is not a problem because no additional setup is required). + +1. Open Parallels Desktop. +2. File -> New. +3. Select "Modern.IE" in the "Free Systems". +4. Continue, Continue, Accept software license agreement. +5. Select "Microsoft Edge on Windows 10". +6. The next steps are general, see [Installing Windows on your Mac using Parallels Desktop](http://kb.parallels.com/4729) from "Step 6: Specify a name and location". + +Parallels Windows 10 VM will be used automatically to build AppX on macOS. No need even start VM — it will be started automatically on demand and suspended after build. No need to specify VM — it will be detected automatically (first Windows 10 VM will be used). + +## How do create VirtualBox Windows 10 Virtual Machine? + +If you are not on macOS or don't want to buy [Parallels Desktop](https://www.parallels.com/products/desktop/), you can use free [VirtualBox](https://www.virtualbox.org/wiki/Downloads). + +1. Open [Download virtual machines](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/). +2. Select "MSEdge on Win10 (x64) Stable". +3. Select "VirtualBox" platform. +4. Download. See [installation instructions](https://az792536.vo.msecnd.net/vms/release_notes_license_terms_8_1_15.pdf). + +The password to your VM is `Passw0rd!`. + +VirtualBox is not supported by electron-builder for now, so, you need to setup build environment on Windows if you want to use VirtualBox to build AppX (and other Windows-only tasks). + +# Configuration + +{% include "./app-builder-lib.Interface.WindowsConfiguration.md" %} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15b6446db0e..694e447b03b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,9 @@ importers: .: dependencies: + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 dmg-license: specifier: 1.0.11 version: 1.0.11 @@ -27,8 +30,8 @@ importers: specifier: 2.25.0 version: 2.25.0(patch_hash=nye7dcohy6yzxjscpnrszvchra) '@types/node': - specifier: 16.18.55 - version: 16.18.55 + specifier: ^22.5.5 + version: 22.5.5 '@typescript-eslint/eslint-plugin': specifier: ^7.0.1 version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) @@ -64,7 +67,7 @@ importers: version: 7.0.4 jest-cli: specifier: 27.5.1 - version: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + version: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) jsdoc-to-markdown: specifier: 8.0.3 version: 8.0.3 @@ -89,8 +92,14 @@ importers: ts-jsdoc: specifier: 3.2.2 version: 3.2.2(typescript@5.5.3) + typedoc: + specifier: ^0.26 + version: 0.26.7(typescript@5.5.3) + typedoc-plugin-markdown: + specifier: ^4.2.7 + version: 4.2.7(typedoc@0.26.7(typescript@5.5.3)) typescript: - specifier: 5.5.3 + specifier: ^5.5 version: 5.5.3 typescript-json-schema: specifier: 0.64.0 @@ -574,7 +583,7 @@ importers: version: 1.0.5 '@jest/core': specifier: ^27.5.1 - version: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + version: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) app-builder-lib: specifier: workspace:* version: link:../packages/app-builder-lib @@ -616,7 +625,7 @@ importers: version: 10.1.0 jest: specifier: ^27.5.1 - version: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + version: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) jest-junit: specifier: ^12.0.0 version: 12.3.0 @@ -2233,6 +2242,21 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@shikijs/core@1.17.7': + resolution: {integrity: sha512-ZnIDxFu/yvje3Q8owSHaEHd+bu/jdWhHAaJ17ggjXofHx5rc4bhpCSW+OjC6smUBi5s5dd023jWtZ1gzMu/yrw==} + + '@shikijs/engine-javascript@1.17.7': + resolution: {integrity: sha512-wwSf7lKPsm+hiYQdX+1WfOXujtnUG6fnN4rCmExxa4vo+OTmvZ9B1eKauilvol/LHUPrQgW12G3gzem7pY5ckw==} + + '@shikijs/engine-oniguruma@1.17.7': + resolution: {integrity: sha512-pvSYGnVeEIconU28NEzBXqSQC/GILbuNbAHwMoSfdTBrobKAsV1vq2K4cAgiaW1TJceLV9QMGGh18hi7cCzbVQ==} + + '@shikijs/types@1.17.7': + resolution: {integrity: sha512-+qA4UyhWLH2q4EFd+0z4K7GpERDU+c+CN2XYD3sC+zjvAr5iuwD1nToXZMt1YODshjkEGEDV86G7j66bKjqDdg==} + + '@shikijs/vscode-textmate@9.2.2': + resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -2303,6 +2327,9 @@ packages: '@types/ejs@3.1.0': resolution: {integrity: sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA==} + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} @@ -2312,6 +2339,9 @@ packages: '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hosted-git-info@3.0.2': resolution: {integrity: sha512-RURNTeEFUwF+ifnp7kK3WLLlTmBSlRynLNS9jeAsI6RHtSrupV0l0nO6kmpaz75EUJVexy348bR452SvmH98vQ==} @@ -2339,6 +2369,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -2357,6 +2390,9 @@ packages: '@types/markdown-it@14.1.1': resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} @@ -2387,6 +2423,9 @@ packages: '@types/node@20.14.11': resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2423,6 +2462,9 @@ packages: '@types/tar@6.1.11': resolution: {integrity: sha512-ThA1WD8aDdVU4VLuyq5NEqriwXErF5gEIJeyT6gHBWU7JtSmW2a5qjNv3/vR82O20mW+1vhmeZJfBQPT3HCugg==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/verror@1.10.10': resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} @@ -3000,6 +3042,9 @@ packages: resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} engines: {node: '>= 10'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chainsaw@0.1.0: resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} @@ -3019,6 +3064,12 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -3127,6 +3178,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} engines: {node: '>=4.0.0'} @@ -3676,6 +3730,10 @@ packages: deps-regex@0.1.4: resolution: {integrity: sha512-3tzwGYogSJi8HoG93R5x9NrdefZQOXgHgGih/7eivloOq6yC6O+yoFxZnkgP661twvfILONfoKRdF9GQOGx2RA==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -3691,6 +3749,9 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff-sequences@26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} @@ -4333,6 +4394,12 @@ packages: resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + highlight.js@11.9.0: resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} engines: {node: '>=12.0.0'} @@ -4355,6 +4422,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -5155,6 +5225,9 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} @@ -5270,6 +5343,9 @@ packages: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -5294,6 +5370,21 @@ packages: mermaid@8.14.0: resolution: {integrity: sha512-ITSHjwVaby1Li738sxhF48sLTxcNyUAoWfoqyztL1f7J6JOLpHOuQPNLBb6lxGPUA0u7xP9IRULgvod0dKu35A==} + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromatch@3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} @@ -5589,6 +5680,9 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -5817,6 +5911,9 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -5955,6 +6052,9 @@ packages: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} + regex@4.3.2: + resolution: {integrity: sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==} + regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -6188,6 +6288,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@1.17.7: + resolution: {integrity: sha512-Zf6hNtWhFyF4XP5OOsXkBTEx9JFPiN0TQx4wSe+Vqeuczewgk2vT4IZhF4gka55uelm052BD5BaHavNqUNZd+A==} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -6282,6 +6385,9 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -6373,6 +6479,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} @@ -6564,6 +6673,9 @@ packages: traverse@0.3.9: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -6664,6 +6776,19 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typedoc-plugin-markdown@4.2.7: + resolution: {integrity: sha512-bLsQdweSm48P9j6kGqQ3/4GCH5zu2EnURSkkxqirNc+uVFE9YK825ogDw+WbNkRHIV6eZK/1U43gT7YfglyYOg==} + engines: {node: '>= 18'} + peerDependencies: + typedoc: 0.26.x + + typedoc@0.26.7: + resolution: {integrity: sha512-gUeI/Wk99vjXXMi8kanwzyhmeFEGv1LTdTQsiyIsmSYsBebvFxhbcyAx7Zjo4cMbpLGxM4Uz3jVIjksu/I2v6Q==} + engines: {node: '>= 18'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x + typescript-json-schema@0.64.0: resolution: {integrity: sha512-Sew8llkYSzpxaMoGjpjD6NMFCr6DoWFHLs7Bz1LU48pzzi8ok8W+GZs9cG87IMBpC0UI7qwBMUI2um0LGxxLOg==} hasBin: true @@ -6709,6 +6834,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -6741,6 +6869,21 @@ packages: resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -6813,6 +6956,12 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -6982,6 +7131,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -7021,6 +7175,9 @@ packages: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: 7zip-bin@5.2.0: {} @@ -9083,27 +9240,27 @@ snapshots: '@jest/console@27.5.1': dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 slash: 3.0.0 - '@jest/core@27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3))': + '@jest/core@27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + jest-config: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -9130,14 +9287,14 @@ snapshots: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-mock: 27.5.1 '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -9155,7 +9312,7 @@ snapshots: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -9164,7 +9321,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -9191,7 +9348,7 @@ snapshots: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -9304,7 +9461,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -9312,7 +9469,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.55 + '@types/node': 22.5.5 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -9321,7 +9478,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -9407,6 +9564,33 @@ snapshots: '@pkgr/core@0.1.1': {} + '@shikijs/core@1.17.7': + dependencies: + '@shikijs/engine-javascript': 1.17.7 + '@shikijs/engine-oniguruma': 1.17.7 + '@shikijs/types': 1.17.7 + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.17.7': + dependencies: + '@shikijs/types': 1.17.7 + '@shikijs/vscode-textmate': 9.2.2 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-oniguruma@1.17.7': + dependencies: + '@shikijs/types': 1.17.7 + '@shikijs/vscode-textmate': 9.2.2 + + '@shikijs/types@1.17.7': + dependencies: + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@9.2.2': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@4.6.0': {} @@ -9472,12 +9656,12 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/responselike': 1.0.3 '@types/cross-spawn@6.0.2': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/debug@4.1.7': dependencies: @@ -9485,18 +9669,27 @@ snapshots: '@types/ejs@3.1.0': {} + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.5.5 + '@types/fs-extra@9.0.13': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 '@types/hosted-git-info@3.0.2': {} @@ -9525,9 +9718,13 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 22.5.5 + '@types/keyv@3.1.4': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/linkify-it@5.0.0': {} @@ -9546,6 +9743,10 @@ snapshots: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/mdurl@2.0.0': {} '@types/mime-types@2.1.4': {} @@ -9568,24 +9769,28 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@22.5.5': + dependencies: + undici-types: 6.19.8 + '@types/normalize-package-data@2.4.4': {} '@types/parse-json@4.0.2': {} '@types/plist@3.0.5': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 xmlbuilder: 15.1.1 '@types/prettier@2.7.3': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/sax@1.2.3': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 '@types/semver@6.2.7': {} @@ -9601,9 +9806,11 @@ snapshots: '@types/tar@6.1.11': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 minipass: 4.2.8 + '@types/unist@3.0.3': {} + '@types/verror@1.10.10': {} '@types/yargs-parser@21.0.3': {} @@ -9622,7 +9829,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 optional: true '@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': @@ -10335,6 +10542,8 @@ snapshots: dependencies: lodash: 4.17.21 + ccount@2.0.1: {} + chainsaw@0.1.0: dependencies: traverse: 0.3.9 @@ -10354,6 +10563,10 @@ snapshots: char-regex@1.0.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + chardet@0.7.0: {} chokidar@3.6.0: @@ -10465,6 +10678,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + command-line-args@5.2.1: dependencies: array-back: 3.1.0 @@ -11131,6 +11346,8 @@ snapshots: deps-regex@0.1.4: {} + dequal@2.0.3: {} + detect-indent@6.1.0: {} detect-libc@2.0.2: {} @@ -11140,6 +11357,10 @@ snapshots: detect-node@2.1.0: optional: true + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff-sequences@26.6.2: {} diff-sequences@27.5.1: {} @@ -11953,6 +12174,24 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + highlight.js@11.9.0: {} hosted-git-info@2.8.9: {} @@ -11971,6 +12210,8 @@ snapshots: html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + http-cache-semantics@4.1.1: {} http-proxy-agent@4.0.1: @@ -12305,7 +12546,7 @@ snapshots: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 22.5.5 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -12324,16 +12565,16 @@ snapshots: transitivePeerDependencies: - supports-color - jest-cli@27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)): + jest-cli@27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + jest-config: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -12345,7 +12586,7 @@ snapshots: - ts-node - utf-8-validate - jest-config@27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)): + jest-config@27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)): dependencies: '@babel/core': 7.24.9 '@jest/test-sequencer': 27.5.1 @@ -12372,7 +12613,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.2(@types/node@16.18.55)(typescript@5.5.3) + ts-node: 10.9.2(@types/node@22.5.5)(typescript@5.5.3) transitivePeerDependencies: - bufferutil - canvas @@ -12417,7 +12658,7 @@ snapshots: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 22.5.5 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -12432,7 +12673,7 @@ snapshots: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 22.5.5 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -12446,7 +12687,7 @@ snapshots: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.55 + '@types/node': 20.14.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12466,7 +12707,7 @@ snapshots: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.55 + '@types/node': 20.14.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12483,7 +12724,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 16.18.55 + '@types/node': 20.14.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12501,7 +12742,7 @@ snapshots: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 22.5.5 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -12570,12 +12811,12 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -12616,7 +12857,7 @@ snapshots: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -12667,12 +12908,12 @@ snapshots: jest-serializer@26.6.2: dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 graceful-fs: 4.2.11 jest-serializer@27.5.1: dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 graceful-fs: 4.2.11 jest-snapshot@27.5.1: @@ -12730,7 +12971,7 @@ snapshots: jest-util@26.6.2: dependencies: '@jest/types': 26.6.2 - '@types/node': 16.18.55 + '@types/node': 20.14.11 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -12739,7 +12980,7 @@ snapshots: jest-util@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 22.5.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12748,7 +12989,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 16.18.55 + '@types/node': 20.14.11 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12767,7 +13008,7 @@ snapshots: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.55 + '@types/node': 20.14.11 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -12775,28 +13016,28 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 16.18.55 + '@types/node': 20.14.11 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)): + jest@27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + '@jest/core': 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3)) + jest-cli: 27.5.1(ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3)) transitivePeerDependencies: - bufferutil - canvas @@ -13086,6 +13327,8 @@ snapshots: lru-cache@7.18.3: {} + lunr@2.3.9: {} + magic-string@0.30.8: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -13238,6 +13481,18 @@ snapshots: escape-string-regexp: 4.0.0 optional: true + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + mdurl@1.0.1: {} mdurl@2.0.0: {} @@ -13274,6 +13529,23 @@ snapshots: moment-mini: 2.29.4 stylis: 4.3.1 + micromark-util-character@2.1.0: + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-encode@2.0.0: {} + + micromark-util-sanitize-uri@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + + micromark-util-symbol@2.0.0: {} + + micromark-util-types@2.0.0: {} + micromatch@3.1.10: dependencies: arr-diff: 4.0.0 @@ -13578,6 +13850,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + oniguruma-to-js@0.4.3: + dependencies: + regex: 4.3.2 + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -13778,6 +14054,8 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + property-information@6.5.0: {} + proxy-from-env@1.1.0: {} pseudomap@1.0.2: {} @@ -13936,6 +14214,8 @@ snapshots: extend-shallow: 3.0.2 safe-regex: 1.1.0 + regex@4.3.2: {} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -14168,6 +14448,15 @@ snapshots: shebang-regex@3.0.0: {} + shiki@1.17.7: + dependencies: + '@shikijs/core': 1.17.7 + '@shikijs/engine-javascript': 1.17.7 + '@shikijs/engine-oniguruma': 1.17.7 + '@shikijs/types': 1.17.7 + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -14278,6 +14567,8 @@ snapshots: source-map@0.7.4: {} + space-separated-tokens@2.0.2: {} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -14383,6 +14674,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@5.2.0: dependencies: ansi-regex: 4.1.1 @@ -14574,6 +14870,8 @@ snapshots: traverse@0.3.9: {} + trim-lines@3.0.1: {} + trim-newlines@3.0.1: {} truncate-utf8-bytes@1.0.2: @@ -14611,14 +14909,14 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@16.18.55)(typescript@5.5.3): + ts-node@10.9.2(@types/node@22.5.5)(typescript@5.5.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.55 + '@types/node': 22.5.5 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -14700,6 +14998,19 @@ snapshots: typedarray@0.0.6: {} + typedoc-plugin-markdown@4.2.7(typedoc@0.26.7(typescript@5.5.3)): + dependencies: + typedoc: 0.26.7(typescript@5.5.3) + + typedoc@0.26.7(typescript@5.5.3): + dependencies: + lunr: 2.3.9 + markdown-it: 14.1.0 + minimatch: 9.0.5 + shiki: 1.17.7 + typescript: 5.5.3 + yaml: 2.5.1 + typescript-json-schema@0.64.0: dependencies: '@types/json-schema': 7.0.15 @@ -14742,6 +15053,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.8: {} + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -14770,6 +15083,29 @@ snapshots: dependencies: imurmurhash: 0.1.4 + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@0.1.2: {} universalify@0.2.0: {} @@ -14837,6 +15173,16 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.4.1 + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 @@ -14990,6 +15336,8 @@ snapshots: yaml@2.4.5: {} + yaml@2.5.1: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -15047,3 +15395,5 @@ snapshots: archiver-utils: 3.0.4 compress-commons: 4.1.2 readable-stream: 3.6.2 + + zwitch@2.0.4: {} diff --git a/scripts/jsdoc2md2html.js b/scripts/jsdoc2md2html.js deleted file mode 100644 index 1dc0c23a711..00000000000 --- a/scripts/jsdoc2md2html.js +++ /dev/null @@ -1,468 +0,0 @@ -"use strict" - -require("source-map-support").install() -const Markdown2HtmlPro = require('markdown2html-pro').Markdown2HtmlPro; -const globby = require("globby") -const path = require("path") -const fs = require("fs-extra") -const jsdoc2md = require("jsdoc-to-markdown") -const pathSorter = require("path-sort") -const source = path.join(__dirname, "jsdoc", "out") -const replace = require('replace-in-file'); - -async function main() { - // JSDoc generates weird types with `<>` suffix (such as URL<> or Platform<>), so the hack is to just remove those entries before we process the doc to `.md` - const options = { - files: path.join(source, "**/*.js"), - from: /<>/g, - to: '', - }; - await replace.replaceInFile(options) - - const partialDir = path.join(__dirname, "jsdoc") - const partials = (await globby(["*.hbs"], {cwd: partialDir})).map(it => path.resolve(partialDir, it)) - - const files = [ - path.join(source, "builder/electron-builder.js"), - path.join(source, "builder-lib/app-builder-lib.js"), - path.join(source, "builder-util-runtime/builder-util-runtime.js"), - path.join(source, "dmg-builder/dmg-builder.js"), - path.join(source, "publisher/electron-publish.js"), - path.join(source, "updater/electron-updater.js"), - path.join(source, "util/builder-util.js"), - ] - // const files = (await globby(["**/*.js"], {cwd: source})).map(it => path.resolve(source, it)) - const pages = [ - { - page: "api/electron-builder.md", pageUrl: "electron-builder", - files - }, - ] - - const jsdoc2MdOptions = { - partial: partials, - "name-format": true, - "helper": [ - path.join(partialDir, "helpers.js") - ], - } - await render2(files, jsdoc2MdOptions) - await render(pages, jsdoc2MdOptions) -} - -async function render2(files, jsdoc2MdOptions) { - const data = await jsdoc2md.getTemplateData(Object.assign({ - files: pathSorter(files).map(it => path.resolve(source, it)), - }, jsdoc2MdOptions)) - - const dataMap = new Map() - for (const member of data) { - if (member.name.endsWith("MetadataDirectories") || isInlinedMember(member)) { - member.inlined = true - } - - dataMap.set(member.id, member) - } - - const { Renderer, TypeNamePlace, Page } = require("./renderer/out/main") - const renderer = new Renderer(dataMap) - - const blockedPropertyName = new Set([ - "fileAssociations", "directories", "buildVersion", "mac", "linux", "win", "buildDependenciesFromSource", "afterPack", "remoteBuild", - "installerIcon", "include", "createDesktopShortcut", "displayLanguageSelector", "signingHashAlgorithms", "publisherName", - "forceCodeSigning", - ]) - renderer.isInsertHorizontalLineBefore = item => { - return blockedPropertyName.has(item.name) - } - - const originalRenderTypeName = renderer.renderTypeName - renderer.renderTypeName = context => { - if (context.place === TypeNamePlace.INHERITED_FROM) { - // no need to include big PlatformSpecificBuildOptions to mac/win/linux docs - if (context.typeItem.name === "PlatformSpecificBuildOptions") { - return null - } - - if (context.typeItem.name === "BaseS3Options") { - return "" - } - - if (context.typeItem.name === "LinuxTargetSpecificOptions" && context.object.name === "DebOptions") { - return null - } - if (context.typeItem.name === "TargetSpecificOptions" && ["NsisOptions", "MsiOptions", "MsiWrappedOptions"].includes(context.object.name)) { - return null - } - - // looks strange when on LinuxConfiguration page "Inherited from `CommonLinuxOptions`:" - no configuration inheritance in this case - if (context.object.name === "LinuxConfiguration" || (["NsisOptions", "MsiOptions", "MsiWrappedOptions"].includes(context.object.name) && (context.typeItem.name === "CommonNsisOptions" || context.typeItem.name === "CommonWindowsInstallerConfiguration"))) { - return "" - } - } - - let types = context.types - if (types == null) { - types = [context.typeItem.id] - } - - if (context.property != null && context.property.name === "publish") { - return "The [publish](/configuration/publish) options." - } - - if (context.place === TypeNamePlace.PROPERTY) { - if (types.some(it => it.includes(".FileSet"))) { - const propertyName = context.property.name - let label = "files" - if (propertyName === "extraResources") { - label = "extra resources" - } - if (propertyName === "extraFiles") { - label = "extra files" - } - return `The [${label}](/configuration/contents#${propertyName.toLowerCase()}) configuration.` - } - - if (context.property.name === "sign" && context.object.name === "WindowsConfiguration") { - return "String | (configuration: CustomWindowsSignTaskConfiguration) => Promise" - } - else if (context.property.name === "plugs" && context.object.name === "SnapOptions") { - return "Array<String | SnapOptions.PlugDescriptor>" - } - else if (context.object.name === "Configuration") { - if (context.property.name === "afterPack" || context.property.name === "afterSign" || context.property.name === "afterAllArtifactBuild" || context.property.name === "onNodeModuleFile") { - return "" - } - if (context.property.name === "beforeBuild") { - return "(context: BeforeBuildContext) => Promise | null" - } - } - } - - if (types.some(it => it.endsWith("TargetConfiguration"))) { - return "String | [TargetConfiguration](/cli#targetconfiguration)" - } - if (types.some(it => it.endsWith(".Configuration") || it === "Configuration")) { - // description contains link to. - return "[Configuration](#configuration)" - } - if (types.some(it => it.endsWith("GithubOptions"))) { - // description contains link to. - return "" - } - - if (types.some(it => it.endsWith("WindowsConfiguration"))) { - return "[WindowsConfiguration](win)" - } - if (types.some(it => it.endsWith(".NsisOptions") || it === "NsisOptions")) { - return "[NsisOptions](nsis)" - } - if (types.some(it => it.endsWith("MsiOptions"))) { - return "[MsisOptions](msi)" - } - if (types.some(it => it.endsWith("MsiWrappedOptions"))) { - return "[MsisWrappedOptions](msi-wrapped)" - } - if (types.some(it => it.endsWith("AppXOptions"))) { - return "[AppXOptions](appx)" - } - if (types.some(it => it.endsWith("SquirrelWindowsOptions"))) { - return "[SquirrelWindowsOptions](squirrel-windows.md)" - } - - if (types.some(it => it.endsWith("MacConfiguration"))) { - return "[MacConfiguration](mac)" - } - if (types.some(it => it.endsWith("DmgOptions"))) { - return "[DmgOptions](dmg)" - } - if (types.some(it => it.endsWith("MasConfiguration"))) { - return "[MasConfiguration](mas)" - } - if (types.some(it => it.endsWith("PkgOptions"))) { - return "[PkgOptions](pkg)" - } - - if (types.some(it => it.endsWith("LinuxConfiguration"))) { - return "[LinuxConfiguration](linux)" - } - if (types.some(it => it.endsWith("FlatpakOptions"))) { - return "[FlatpakOptions](flatpak)" - } - if (types.some(it => it.endsWith("SnapOptions"))) { - return "[SnapOptions](snap)" - } - if (types.some(it => it.endsWith("AppImageOptions"))) { - return "[AppImageOptions](/configuration/linux#appimageoptions)" - } - if (types.some(it => it.endsWith("DebOptions"))) { - return "[DebOptions](/configuration/linux#deb)" - } - if (types.some(it => it.endsWith("LinuxTargetSpecificOptions"))) { - return "[LinuxTargetSpecificOptions](/configuration/linux#LinuxTargetSpecificOptions)" - } - - return originalRenderTypeName.call(this, context) - } - - const pages = [ - new Page("configuration/configuration.md", "Configuration"), - - new Page("configuration/mac.md", null, { - "MacConfiguration": "", - "NotarizeNotaryOptions" : "" - }), - new Page("configuration/dmg.md", "DmgOptions"), - new Page("configuration/mas.md", "MasConfiguration"), - new Page("configuration/pkg.md", "PkgOptions"), - - new Page("configuration/win.md", "WindowsConfiguration", { - "WindowsAzureSigningConfiguration" : "Also allows custom fields `[k: string: string]` passed verbatim (case sensitive) to Invoke-TrustedSigning", - "WindowsSigntoolConfiguration": "" - }), - new Page("configuration/msi-wrapped.md", "MsiWrappedOptions"), - new Page("configuration/msi.md", "MsiOptions"), - new Page("configuration/appx.md", "AppXOptions"), - new Page("configuration/squirrel-windows.md", "SquirrelWindowsOptions"), - - new Page("configuration/linux.md", "LinuxConfiguration"), - new Page("configuration/flatpak.md", "FlatpakOptions"), - new Page("configuration/snap.md", "SnapOptions"), - - new Page("configuration/publish.md", null, { - "GenericServerOptions": "", - "GithubOptions": "", - "SnapStoreOptions": "", - "SpacesOptions": "", - "KeygenOptions": "", - "BitbucketOptions": "", - "S3Options": "", - "CustomPublishOptions": "" - }), - - new Page("generated/appimage-options.md", "AppImageOptions"), - new Page("generated/DebOptions.md", "DebOptions"), - new Page("generated/LinuxTargetSpecificOptions.md", "LinuxTargetSpecificOptions"), - new Page("generated/PlatformSpecificBuildOptions.md", "PlatformSpecificBuildOptions"), - new Page("generated/Metadata.md", "Metadata"), - new Page("generated/NsisOptions.md", "NsisOptions", { - "CustomNsisBinary": "" - }), - new Page("generated/TargetSpecificOptions.md", "TargetSpecificOptions"), - ] - - renderer.dataMap = dataMap - - for (const item of data) { - for (const page of pages) { - if (page.rootClass === item.name || (page.additionalClasses != null && Object.keys(page.additionalClasses).includes(item.name))) { - page.items.set(item.name, item) - break - } - } - } - - for (const page of pages) { - let content = "" - // one root class per page - if (page.rootClass != null) { - const item = page.items.get(page.rootClass) - if (item == null) { - throw new Error(`No item ${page.rootClass}`) - } - - content = renderer.renderProperties(item) - } - - if (page.additionalClasses != null) { - if (page.rootClass != null) { - content += "\n" - } - for (const name of Object.keys(page.additionalClasses)) { - const item = page.items.get(name) - if (content.length > 0) { - content += "\n" - } - content += `## ${item.name}\n` - content += `${page.additionalClasses[name] || item.description}\n\n` - content += renderer.renderProperties(item) - content += "\n" - } - } - - await writeDocFile(path.join(__dirname, "..", "docs", page.file), content + "\n" /* mkdocs requires extra newline otherwise trailing link is not rendered */) - } -} - -const inlinedClasses = new Set(["AsarOptions", "ElectronDownloadOptions", "NsisWebOptions", "PortableOptions", "DmgContent"]) - -function isInlinedMember(member) { - if (member.id.includes(".Dmg") && member.name !== "DmgOptions") { - return true - } - return inlinedClasses.has(member.name) || member.name === "Protocol" || member.name === "FileAssociation" || member.name === "AuthorMetadata" || member.name === "RepositoryInfo" || member.name === "ReleaseInfo" -} - -function sortOptions(pages) { - const electronBuilderApiPage = pages[0] - - const excluded = new Set(["CommonLinuxOptions", "CommonNsisOptions", "LinuxTargetSpecificOptions", "PlatformSpecificBuildOptions", "ForgeOptions", "FileSet"]) - electronBuilderApiPage.data = electronBuilderApiPage.data.filter(member => { - if (member.kind === "module") { - return true - } - if (excluded.has(member.name)) { - return false - } - return !(isInlinedMember(member) || member.name.endsWith("Options") || member.name.endsWith("Configuration") || member.name === "Configuration" || member.name.startsWith("Metadata") || member.name.startsWith("Dmg")) - }) - - // move Arch from builder-util to electron-builder - electronBuilderApiPage.data = electronBuilderApiPage.data.filter(member => { - if (!member.id.startsWith("module:builder-util")) { - return true - } - - if (member.name === "Arch") { - member.id = "module:electron-builder.Arch" - member.longname = member.id - member.memberof = "module:electron-builder" - return true - } - - pages[0].dataMap.delete(member.id) - return false - }) - - // pages[0].data = pages[0].data.filter(member => { - // const isInlined = member.name.endsWith("MetadataDirectories") || member.id.includes(".Dmg") || isOptionMember(member) - // if (isInlined) { - // member.inlined = true - // } - // return !isInlined - // }) - - // pages[1].data.unshift(pages[0].data[0]) -} - -function sortAutoUpdate(pages) { - const pageIndex = 1 - - const filtered = [] - const included = new Set(["AppUpdater", "UpdaterSignal", "UpdateInfo", "UpdateCheckResult", "FileInfo", "Logger"]) - pages[pageIndex].data = pages[pageIndex].data.filter(member => { - if (member.kind === "module" || included.has(member.name)) { - return true - } - const modulePrefix = "module:electron-updater." - const parentClass = member.memberof - if (member.kind === "function" && parentClass != null && parentClass.startsWith(modulePrefix) && included.has(parentClass.substring(modulePrefix.length))) { - return true - } - - pages[pageIndex].dataMap.delete(member.id) - - filtered.push(member) - return false - }) - - pages[pageIndex].data = pages[pageIndex].data.filter(member => { - if (!member.id.startsWith("module:builder-util-runtime")) { - return true - } - - if (member.name === "UpdateInfo") { - member.id = "module:electron-updater." + member.name - member.longname = member.id - member.memberof = "module:electron-updater" - // move to end - member.order += pages[pageIndex].data.length + 22 // order started from 1 - return true - } - - pages[pageIndex].dataMap.delete(member.id) - - return false - }) - - pages[pageIndex].data.sort((a, b) => a.order - b.order) -} - -async function render(pages, jsdoc2MdOptions) { - require(path.join(__dirname, "jsdoc", "helpers.js")).pages = pages - - for (const page of pages) { - page.data = await jsdoc2md.getTemplateData(Object.assign({ - files: pathSorter(page.files).map(it => path.resolve(source, it)), - }, jsdoc2MdOptions)) - - const map = new Map() - for (const member of page.data) { - map.set(member.id, member) - } - - page.dataMap = map - } - - sortOptions(pages) - // sortAutoUpdate(pages) - - for (const page of pages) { - const finalOptions = Object.assign({ - data: page.data, - "property-list-format": page === pages[0] || page === pages[3] || page === pages[1] ? "list" : "table", - "param-list-format": page === pages[1] ? "list" : "table", - }, jsdoc2MdOptions) - - if (page === pages[0]) { - finalOptions["heading-depth"] = 1 - } - - let content = await jsdoc2md.render(finalOptions) - - if (page.mainHeader != null && content.startsWith("## Modules")) { - content = "## API" + content.substring("## Modules".length) - } - if (page.mainHeader != null) { - content = "## API" + content.substring(content.indexOf("\n", content.indexOf("##"))) - } - - await writeDocFile(path.join(__dirname, "..", "docs", page.page), content) - } -} - -const markdown2htmlPro = new Markdown2HtmlPro(); -async function writeDocFile(docOutFile, content) { - content = await markdown2htmlPro.markdown2html(content); - let existingContent - try { - existingContent = await fs.readFile(docOutFile, "utf8") - } - catch (e) { - } - - console.log(`Write doc to ${docOutFile}`) - if (existingContent == null) { - return fs.outputFile(docOutFile, content) - } - else { - const startMarker = "" - const endMarker = "" - const start = existingContent.indexOf(startMarker) - const end = existingContent.indexOf(endMarker) - if (start != -1 && end != -1) { - return fs.outputFile(docOutFile, existingContent.substring(0, start + startMarker.length) + "\n" + content + "\n" + existingContent.substring(end).trim() + "\n") - } - else { - return fs.outputFile(docOutFile, content) - } - } -} - -(function () { - main() - .catch(error => { - console.error((error.stack || error).toString()) - process.exit(-1) - }) -})() diff --git a/scripts/publish-packages.sh b/scripts/publish-packages.sh deleted file mode 100755 index 8688b4f1ca6..00000000000 --- a/scripts/publish-packages.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -e - -ln -f README.md packages/electron-builder/README.md -(cd packages/app-builder-lib && pnpm publish --no-git-checks) || true -(cd packages/builder-util-runtime && pnpm publish --no-git-checks) || true -(cd packages/builder-util && pnpm publish --no-git-checks) || true -(cd packages/dmg-builder && pnpm publish --no-git-checks) || true - -(cd packages/electron-publish && pnpm publish --no-git-checks) || true - -(cd packages/electron-builder && pnpm publish --no-git-checks --tag next) || true - -(cd packages/electron-builder-squirrel-windows && pnpm publish --no-git-checks) || true -(cd packages/electron-forge-maker-appimage && pnpm publish --no-git-checks) || true -(cd packages/electron-forge-maker-nsis && pnpm publish --no-git-checks) || true -(cd packages/electron-forge-maker-nsis-web && pnpm publish --no-git-checks) || true -(cd packages/electron-forge-maker-snap && pnpm publish --no-git-checks) || true - -(cd packages/electron-updater && pnpm publish --no-git-checks --tag next) || true diff --git a/scripts/publish.sh b/scripts/publish.sh deleted file mode 100755 index 2816cdcbb3e..00000000000 --- a/scripts/publish.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -set -e - -# netlify-cli can be used to publish directory directly without intermediate git repository, -# but it will complicate deployment because in this case you need to be authenticated on Netlify. -# But for what, if you are already configure Git access? -# Also, this approach allows us to manage access using GitHub and easily give access to publish to project members. - -# https://stackoverflow.com/questions/3311774/how-to-convert-existing-non-empty-directory-into-a-git-working-directory-and-pus - -cd site - -mkdir sponsor-logos || true -cp ../scripts/sponsor-logos/*.svg sponsor-logos/ - -# do not use force push - netlify doesn't trigger deploy for forced push -git clone --no-checkout --branch en --single-branch git@github.com:develar/generated-gitbook-electron-builder.git ./repo.tmp -mv ./repo.tmp/.git ./ -rmdir ./repo.tmp -git add --all . -git commit -m "update" -git push \ No newline at end of file diff --git a/scripts/renderer/src/customRendererPlugin.ts b/scripts/renderer/src/customRendererPlugin.ts new file mode 100644 index 00000000000..63a338ba7a1 --- /dev/null +++ b/scripts/renderer/src/customRendererPlugin.ts @@ -0,0 +1,27 @@ +import { Application, Renderer } from "typedoc"; +export const ALLOW_INHERIT_OPTIONS = "allowInheritedDoc"; + +export const load = (app: Application) => { + new FilterInheritPlugin(app).initialize() +}; + +class FilterInheritPlugin { + constructor(private readonly app: Application) { + } + + initialize() { + this.app.renderer.on(Renderer.EVENT_END_PAGE, async (context) => { + // Filter out properties that are Inherited. It causes too much visual noise and there's already the Extends code block + const content = context.contents!.split("\n").reduce((prev, curr, _index, _arr) => { + const isInheritedProperty = /\|.*\[.*\]\(.*\).*\|/.test(curr); + if (!isInheritedProperty) { + return [...prev, curr] + } + return prev + }, [] as string[]).join("\n") + + // await mkdir(path.dirname(context.filename), { recursive: true }) + // await writeFile(context.filename, content) + }) + } +} \ No newline at end of file diff --git a/scripts/renderer/src/main.ts b/scripts/renderer/src/main.ts deleted file mode 100644 index 2d47dc351cb..00000000000 --- a/scripts/renderer/src/main.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { renderProperties } from "./properties" - -export enum TypeNamePlace { - PROPERTY, INHERITED_FROM, INHERITS -} - -export class Renderer { - constructor(readonly dataMap: Map) { - } - - isInsertHorizontalLineBefore(property: Item): boolean { - return false - } - - isRenderParentPropertiesBefore(object: Item): boolean { - return false - } - - // INHERITED_FROM - null result means skip, empty string result means to not print "Inherited from " - renderTypeName: ((context: RenderContext) => string | null) = context => { - if (context.place === TypeNamePlace.INHERITED_FROM) { - return "`" + context.typeItem!!.name + "`" - } - else if (context.place === TypeNamePlace.INHERITS) { - return `[${context.typeItem!!.name}](#${getAnchorName(this, context.typeItem!!)})` - } - return this.renderTypeNames(context.types!!, " \| ", false, true, context.typeItem == null ? null : context.typeItem.id) - } - - renderProperties(object: Item, level = 0) { - return renderProperties(this, object, level) - } - - resolveById(id: string) { - return this.dataMap.get(id) - } - - /** - * inlinedTypeId - no need to print as link if object will be renderer as part of the property docs. - */ - renderTypeNames(types: Array, delimiter: string, isTypeAsCode: boolean, isSkipNull: boolean, inlinedTypeId: string | null) { - if (types == null) { - return "" - } - - for (const obj of types) { - if (obj.includes("CancellationToken")) { - break - } - } - - if (isSkipNull) { - types = types.filter(it => it !== "null") - } - - const tagOpen = isTypeAsCode ? "" : "" - const tagClose = isTypeAsCode ? "" : "" - return types - .map(it => { - const lastIndex = it.lastIndexOf("node_modules") - it = lastIndex < 0 ? it : `module:${it.substring(lastIndex + 13)}`; - return tagOpen + this.renderLink(catharsis.parse(it, {jsdoc: true}), delimiter, isSkipNull, inlinedTypeId) + tagClose - }) - .join(delimiter) - } - - renderLink(type: any, delimiter: string, isSkipNull: boolean, inlinedTypeId: string | null): string { - switch (type.type) { - case "NameExpression": - if (type.name === inlinedTypeId) { - return this.resolveById(inlinedTypeId!!)!!.name - } - return identifierToLink(this, type.name) - - case "NullLiteral": - case "UndefinedLiteral": - return type.typeExpression - - case "FunctionType": - return type.typeExpression - - case "TypeUnion": - return (type.elements as Array) - .map(it => this.renderLink(it, delimiter, isSkipNull, inlinedTypeId)) - .filter(it => !isSkipNull || it !== "null") - .join(delimiter) - - case "TypeApplication": - return this.renderLink(type.expression, delimiter, isSkipNull, inlinedTypeId) + "<" + type.applications.map((it: any) => this.renderLink(it, delimiter, isSkipNull, inlinedTypeId)).join(", ") + ">" - - default: - throw new Error(`Unsupported type ${type.type}`) - } - } -} - -export interface RenderContext { - readonly types?: Array - - readonly object: Item - readonly property?: Item - - readonly typeItem: Item | null | undefined - - readonly place: TypeNamePlace -} - -export class Page { - readonly items = new Map() - - constructor(readonly file: string, readonly rootClass: string | null, readonly additionalClasses: any) { - } -} - -export interface Item { - inherits: any - inherited: boolean - isExported: boolean - id: string - name: string - description?: string - - type: ItemType - - properties: Array - - augments?: Array - - kind: string - - inlined?: boolean - rendered?: boolean -} - -interface ItemType { - names: Array -} - -export function isPrimitiveType(name: string) { - return name === "string" || name === "boolean" -} - -const catharsis = require("catharsis") - -function identifierToLink(renderer: Renderer, id: any) { - if (id === "string") { - return "String" - } - if (id === "boolean") { - return "Boolean" - } - if (id === "number") { - return "Number" - } - - let linked = renderer.resolveById(id) - if (linked == null) { - if (id === "module:electron-builder/out/core.Arch" || id === "module:builder-util/out/arch.Arch") { - id = "module:builder-util.Arch" - } - else if (id === "module:builder-util-runtime/out/CancellationToken.CancellationToken") { - id = "module:builder-util-runtime.CancellationToken" - } - linked = renderer.resolveById(id) - } - - if (linked == null) { - if (id.startsWith("module") && - !id.startsWith("module:http.") && - !id.startsWith("module:bluebird-lst.") && - !id.startsWith("module:child_process.") && - !id.endsWith(".T") && - !id.endsWith(".R") && - !id.endsWith(".K") && - !id.endsWith(".DC") && - !id.startsWith("module:fs.") && - id !== "module:https.RequestOptions" && - !id.endsWith(".__type") - ) { - console.warn(`Unresolved member ${id}`) - } - return id - } - return `[${linked.name}](${fullLink(renderer, linked)})` -} - -function fullLink(renderer: Renderer, linked: any) { - const relativeName = getAnchorName(renderer, linked) - const pageUrl = "" - // for (const page of exports.pages) { - // if (page.dataMap.has(linked.id)) { - // const a = page.data - // const b = root - // if (a.length !== b.length || a[a.length - 1] !== b[a.length - 1]) { - // pageUrl = page.pageUrl - // } - // break - // } - // } - return `${pageUrl}#${relativeName}` -} - -export function renderMemberName(member: any, object: any) { - const wrap = member.optional ? "" : "**" - // gitbook doesn't like several "a" tags in a row (another one will be added if property is an object and documented as inlined) - // in any case better to avoid empty "a" tags, since ` will be transformed to - let result = `${wrap}${member.name}${wrap}` - if (member.defaultvalue != null) { - // noinspection SpellCheckingInspection - result += ` = \`${member.defaultvalue}\`` - } - return result -} - -function getAnchorName(renderer: Renderer, item: Item): string { - if (item.id == null) { - throw new Error(`Cannot create a link without a id: ${JSON.stringify(item)}`) - } - - if (item.inherited) { - const inherits = renderer.resolveById(item.inherits) - return inherits ? getAnchorName(renderer, inherits) : "" - } - - if (item.kind === "class" || item.kind === "interface" || item.kind === "enum") { - return item.name - } - - let result = item.isExported ? "exp_" : "" - if (item.kind === "constructor") { - result += "new_" - } - result += - item.id - .replace(/:/g, "_") - .replace(/~/g, "..") - .replace(/\(\)/g, "_new") - .replace(/#/g, "+") - return result -} \ No newline at end of file diff --git a/scripts/renderer/src/properties.ts b/scripts/renderer/src/properties.ts deleted file mode 100644 index 3e4334313ec..00000000000 --- a/scripts/renderer/src/properties.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { isPrimitiveType, Item, Renderer, renderMemberName, TypeNamePlace } from "./main" - -// mkdocs requires 4 spaces (not 2 as git book) for items of nested list -const nestedSpace = " " - -export function renderProperties(renderer: Renderer, object: Item, level = 0) { - let result = "" - - let firstDocumentedParent = null - const parents = object.augments - if (parents != null) { - for (const parentId of parents) { - if (!parentId.endsWith("TargetSpecificOptions") && !parentId.endsWith("CommonLinuxOptions") && !parentId.endsWith("CommonNsisOptions") && !parentId.endsWith("PublishConfiguration")) { - if (firstDocumentedParent == null && !parentId.endsWith("PlatformSpecificBuildOptions")) { - firstDocumentedParent = renderer.resolveById(parentId) - } - } - } - } - - let indent = "" - for (let d = 0; d < level; d++) { - indent += nestedSpace - } - - // for level 0 "Extends" is printed - if (level > 0 && firstDocumentedParent != null) { - result += `${indent}Inherits ${renderer.renderTypeName({typeItem: firstDocumentedParent, object, place: TypeNamePlace.INHERITS})} options.\n` - } - - const doRenderProperties = (properties: Array) => { - const first = properties[0] - for (const member of properties) { - if (member !== first) { - // mkdocs requires second new line for items of nested list - result += "\n" - } - - if (renderer.isInsertHorizontalLineBefore(member)) { - result += "\n---\n\n" - } - - result += indent + "* " + renderMemberName(member, object) - - const types = member.type.names - let child = getInlinedChild(types, renderer) - const propertyTypeItem = child - if (child != null && (!child.inlined || child.rendered)) { - child = null - } - - if (child == null || types.some(it => it.startsWith("Array.<") || isPrimitiveType(it))) { - const renderedTypeName = renderer.renderTypeName({types, property: member, typeItem: propertyTypeItem, object, place: TypeNamePlace.PROPERTY}) - if (renderedTypeName !== "" && renderedTypeName != null) { - result += " " + renderedTypeName - } - } - - if (child != null) { - // noinspection HtmlDeprecatedAttribute - result += `` - } - - let description = member.description - if (propertyTypeItem != null && !description) { - description = propertyTypeItem.description - } - - if (description) { - result += " - " + renderMemberListDescription(description, indent + nestedSpace) - } - - if (child != null) { - child.rendered = true - result += "\n" - result += renderProperties(renderer, child, level + 1) - } - } - } - - const renderParentProperties = (isPrintInherits: boolean) => { - // no need to show MacConfiguration options for MasConfiguration - if (parents != null && level === 0 && object.name !== "MasConfiguration") { - for (const parentId of parents) { - const parent = renderer.resolveById(parentId) - if (parent == null) { - console.log(`Unresolved parent \`${parentId}\``) - continue - } - - const parentProperties = parent.properties.filter(parentProperty => !object.properties.some(it => it.name === parentProperty.name)) - if (parentProperties.length === 0) { - continue - } - - if (isPrintInherits) { - const renderedName = renderer.renderTypeName({object, typeItem: parent, place: TypeNamePlace.INHERITED_FROM}) - if (renderedName == null) { - continue - } - - result += "\n" - - if (renderedName.length > 0) { - result += `\nInherited from ${renderedName}:\n\n` - } - } - - doRenderProperties(parentProperties) - } - } - } - - const isRenderParentPropertiesBefore = renderer.isRenderParentPropertiesBefore(object) - if (isRenderParentPropertiesBefore) { - renderParentProperties(false) - result += "\n" - } - - doRenderProperties(object.properties) - - if (!isRenderParentPropertiesBefore) { - renderParentProperties(true) - } - - if (level === 0) { - // result += "\n\n" - // a little bit hack - add Methods header if methods next, otherwise TOC will be part of properties list - // for (const member of root) { - // if (member.kind === "function" && member.memberof === object.id) { - // result += "**Methods**" - // break - // } - // } - } - return result -} - -function getInlinedChild(types: Array, renderer: Renderer) { - if (types == null) { - return null - } - - const arrayTypePrefix = "Array.<" - types = types.filter(it => { - if (it === "null" || isPrimitiveType(it)) { - return false - } - if (it.startsWith(arrayTypePrefix)) { - it = it.replace("string|", "").replace("<(", "<").replace(")>", ">") - return !types.includes(it.substring(arrayTypePrefix.length, it.indexOf(">"))) - } - return true - }) - - if (types.length === 1 && types[0].startsWith(arrayTypePrefix)) { - types[0] = types[0].substring(arrayTypePrefix.length, types[0].indexOf(">")) - } - - return types.length === 1 ? renderer.resolveById(types[0]) : null -} - -const dmdHelper = require("dmd/helpers/helpers") - -function renderMemberListDescription(text: string, indent: string) { - let data: string = dmdHelper.inlineLinks(text) - .replace(/
/g, "\n") - .replace(/\n/g, "\n" + indent) - .replace(new RegExp("\\*{2}\\\\/", "g"), "**/") - .trim() - if (data.includes("\n")) { - // mkdocs requires newline for multi line list item text (otherwise next item on the same line and rendered as list item) - data += "\n" - } - return data -} \ No newline at end of file diff --git a/scripts/renderer/src/typedoc2html.ts b/scripts/renderer/src/typedoc2html.ts new file mode 100644 index 00000000000..94f7ec3d4b8 --- /dev/null +++ b/scripts/renderer/src/typedoc2html.ts @@ -0,0 +1,42 @@ +import { copy, exists } from "fs-extra"; +import { rm } from "fs/promises"; +import * as path from "path"; +import * as typedoc from "typedoc"; + +async function main() { + + const outputDir = "docs"; + const dest = path.resolve(process.cwd(), outputDir) + + const origin = path.resolve(process.cwd(), "pages"); + console.log("copying from", origin, dest) + const siteDir = path.resolve(process.cwd(), "site"); + + + if ((await exists(siteDir))) { + await rm(siteDir,{ recursive: true }) + } + if ((await exists(dest))) { + await rm(dest, { recursive: true }) + } + await copy(origin, dest) + await copy(path.resolve("./README.md"), path.resolve(dest, "README.md")) + + const typedocConfig: Partial = { + options: "typedoc.config.js", + }; + + const config = { + ...typedocConfig, + flattenOutputFiles: true + }; + const app = await typedoc.Application.bootstrapWithPlugins(config) + + const project = await app.convert(); + + if (project) { + await app.generateDocs(project, outputDir); + } +} + +main().catch(console.error); diff --git a/scripts/renderer/tsconfig.json b/scripts/renderer/tsconfig.json index 4e3e377b93f..233084dff2e 100644 --- a/scripts/renderer/tsconfig.json +++ b/scripts/renderer/tsconfig.json @@ -1,10 +1,12 @@ { "extends": "../../tsconfig-base.json", "compilerOptions": { - "outDir": "out" + "outDir": "out", + "noUnusedLocals": false, + "skipLibCheck": false }, "declaration": false, "include": [ "src/**/*.ts" - ] + ], } diff --git a/test/snapshots/configurationValidationTest.js.snap b/test/snapshots/configurationValidationTest.js.snap index c1433b9dd9e..20ef3d6f5b3 100644 --- a/test/snapshots/configurationValidationTest.js.snap +++ b/test/snapshots/configurationValidationTest.js.snap @@ -7,7 +7,7 @@ exports[`appId as object 1`] = ` -> The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as [Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set. How to fix: - 1. Open https://www.electron.build/configuration/configuration + 1. Open https://www.electron.build/configuration 2. Search the option name on the page (or type in into Search to find across the docs). * Not found? The option was deprecated or not exists (check spelling). * Found? Check that the option in the appropriate place. e.g. \\"title\\" only in the \\"dmg\\", not in the root. diff --git a/test/snapshots/linux/linuxPackagerTest.js.snap b/test/snapshots/linux/linuxPackagerTest.js.snap index 5c26e1c711d..53227b18fad 100644 --- a/test/snapshots/linux/linuxPackagerTest.js.snap +++ b/test/snapshots/linux/linuxPackagerTest.js.snap @@ -210,7 +210,7 @@ exports[`no-author-email 1`] = ` See https://docs.npmjs.com/files/package.json#people-fields-author-contributors It is required to set Linux .deb package maintainer. Or you can set maintainer in the custom linux options. -(see https://www.electron.build/configuration/linux). +(see https://www.electron.build/linux). " `; diff --git a/typedoc.config.js b/typedoc.config.js new file mode 100644 index 00000000000..2542088f690 --- /dev/null +++ b/typedoc.config.js @@ -0,0 +1,51 @@ +/** + * @type { import('typedoc').TypeDocOptions & import('typedoc-plugin-markdown').PluginOptions } + **/ +module.exports = { + hostedBaseUrl: "https://www.electron.build", + name: "Electron-Builder", + entryPoints: ["packages/*"], + entryPointStrategy: "packages", + cleanOutputDir: false, + flattenOutputFiles: true, + plugin: [ + "typedoc-plugin-markdown", + // "./scripts/renderer/out/customRendererPlugin.js", + ], + excludeExternals: true, + excludePrivate: true, + excludeProtected: true, + excludeNotDocumented: true, + includeVersion: false, + hideGroupHeadings: true, + hidePageTitle: true, + disableSources: true, + hidePageHeader: true, + sort: ["required-first"], + categorizeByGroup: true, + // indexFormat: "table", + // parametersFormat: "table", + // interfacePropertiesFormat: "table", + // classPropertiesFormat: "table", + // enumMembersFormat: "table", + // typeDeclarationFormat: "table", + // propertyMembersFormat: "table", + tableColumnSettings: { + hideDefaults: false, + hideInherited: false, + hideModifiers: true, + hideOverrides: true, + hideSources: true, + hideValues: false, + leftAlignHeaders: false, + }, + out: "./docs", + visibilityFilters: { + protected: false, + private: false, + inherited: false, + external: false, + "@alpha": false, + "@beta": false, + }, +}